diff --git a/.clang-format-ignore b/.clang-format-ignore new file mode 100644 index 00000000..880b22f6 --- /dev/null +++ b/.clang-format-ignore @@ -0,0 +1 @@ +*.proto \ No newline at end of file diff --git a/.docker/jazzy.amd64.dockerfile b/.docker/jazzy.amd64.dockerfile index 8ce4615f..8841efd9 100644 --- a/.docker/jazzy.amd64.dockerfile +++ b/.docker/jazzy.amd64.dockerfile @@ -39,11 +39,11 @@ RUN adduser --shell /bin/bash --disabled-password --gecos '' $USER \ # Install ROS-Gazebo framework ADD https://raw.githubusercontent.com/IOES-Lab/dave/$BRANCH/\ -extras/ros-jazzy-gz-harmonic-install.sh install.sh +extras/ros-jazzy-binary-gz-harmonic-source-install.sh install.sh RUN bash install.sh # Set up Dave workspace -ENV DAVE_WS /root/ws_dave +ENV DAVE_WS=/opt/ws_dave WORKDIR $DAVE_WS/src ADD https://raw.githubusercontent.com/IOES-Lab/dave/$BRANCH/\ @@ -62,8 +62,17 @@ RUN . "/opt/ros/${ROS_DISTRO}/setup.sh" && \ # source entrypoint setup RUN touch /ros_entrypoint.sh && sed --in-place --expression \ - '$i source "$DAVE_WS/install/setup.bash"' /ros_entrypoint.sh + '$i source "/opt/ws_dave/install/setup.bash"' /ros_entrypoint.sh + +# Source ROS and Gazebo +RUN sed --in-place --expression \ +'$i source "/opt/ros/jazzy/setup.bash"' /ros_entrypoint.sh && \ +sed --in-place --expression \ +'$i source "/opt/gazebo/install/setup.bash"' /ros_entrypoint.sh && \ +sed --in-place --expression \ +'$i export PYTHONPATH=$PYTHONPATH:/opt/gazebo/install/lib/python' /ros_entrypoint.sh # Set User as user USER $USER -RUN echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc +RUN echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc && \ + echo "source /opt/gazebo/install/setup.bash" >> ~/.bashrc diff --git a/.docker/jazzy.arm64v8.dockerfile b/.docker/jazzy.arm64v8.dockerfile index 2dde1ef7..47a7cdaf 100644 --- a/.docker/jazzy.arm64v8.dockerfile +++ b/.docker/jazzy.arm64v8.dockerfile @@ -78,7 +78,7 @@ # Using the pre-built image for above commented out dockerfile code lines # hadolint ignore=DL3007 -FROM woensugchoi/ubuntu-arm-rdp-base:latest +FROM --platform=linux/arm64 woensugchoi/ubuntu-arm-rdp-base:latest ARG USER=docker # ROS-Gazebo arg @@ -87,11 +87,11 @@ ARG ROS_DISTRO="jazzy" # Install ROS-Gazebo framework ADD https://raw.githubusercontent.com/IOES-Lab/dave/$BRANCH/\ -extras/ros-jazzy-gz-harmonic-install.sh install.sh +extras/ros-jazzy-binary-gz-harmonic-source-install.sh install.sh RUN bash install.sh # Set up Dave workspace -ENV ROS_UNDERLAY /home/$USER/dave_ws/install +ENV ROS_UNDERLAY=/home/$USER/dave_ws/install WORKDIR $ROS_UNDERLAY/../src ADD https://raw.githubusercontent.com/IOES-Lab/dave/$BRANCH/\ @@ -129,6 +129,8 @@ RUN touch /ros_entrypoint.sh && sed --in-place --expression \ # Set User as user USER docker RUN echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc && \ + echo "source /opt/gazebo/install/setup.bash" >> ~/.bashrc && \ + echo "export PYTHONPATH=$PYTHONPATH:/opt/gazebo/install/lib/python" >> ~/.bashrc && \ echo "if [ -d ~/HOST ]; then chown docker:docker ~/HOST; fi" \ >> ~/.bashrc diff --git a/.github/workflows/docker-amd64.yml b/.github/workflows/docker-amd64.yml index 91bcdb27..c3f1d3fc 100644 --- a/.github/workflows/docker-amd64.yml +++ b/.github/workflows/docker-amd64.yml @@ -7,6 +7,7 @@ on: tags: ["*"] branches: - ros2 + - dockertest env: IMAGE_NAME: ${{ github.repository }} @@ -15,7 +16,8 @@ env: jobs: build-and-push-to-docker-hub: - runs-on: ubuntu-latest + # runs-on: ubuntu-latest + runs-on: self-hosted permissions: contents: read packages: write diff --git a/.github/workflows/docker-arm64v8.yml b/.github/workflows/docker-arm64v8.yml index f4ac0e1b..206a682b 100644 --- a/.github/workflows/docker-arm64v8.yml +++ b/.github/workflows/docker-arm64v8.yml @@ -7,6 +7,7 @@ on: tags: ["*"] branches: - ros2 + - dockertest env: IMAGE_NAME: ${{ github.repository }} @@ -15,7 +16,9 @@ env: jobs: build-and-push-to-docker-hub: - runs-on: ubuntu-latest + # runs-on: ubuntu-latest + runs-on: self-hosted + timeout-minutes: 1440 permissions: contents: read packages: write diff --git a/.github/workflows/jazzy-source-build.yml b/.github/workflows/jazzy-source-build.yml index dd341ef9..5822b6b9 100644 --- a/.github/workflows/jazzy-source-build.yml +++ b/.github/workflows/jazzy-source-build.yml @@ -16,9 +16,11 @@ on: - "**/package.xml" - "**/CMakeLists.txt" - "dave.jazzy.repos" + pull_request: + types: [opened, reopened] schedule: - # Run every day to detect flakiness and broken dependencies - - cron: "03 3 * * *" + # Run every week to detect flakiness and broken dependencies + - cron: "03 3 * * 1" env: ros_distro: jazzy diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 48ca25a8..1684173c 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -7,6 +7,8 @@ on: tags: ["*"] branches: - ros2 + pull_request: + types: [opened, reopened] jobs: # ament_lint: diff --git a/README.md b/README.md index 3a9ee3c2..161efa22 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ # DAVE +[![Publish a Docker image (AMD64; Common X86_64 Linux Machine)](https://github.com/IOES-Lab/dave/actions/workflows/docker-amd64.yml/badge.svg)](https://github.com/IOES-Lab/dave/actions/workflows/docker-amd64.yml) +[![Publish a Docker image (ARM64; Apple Silicon)](https://github.com/IOES-Lab/dave/actions/workflows/docker-arm64v8.yml/badge.svg?branch=ros2)](https://github.com/IOES-Lab/dave/actions/workflows/docker-arm64v8.yml) + For contribution, do `pip3 install pre-commit && pre-commit install && pre-commit run --all-files` before commit. diff --git a/dave_interfaces/CMakeLists.txt b/dave_interfaces/CMakeLists.txt index 117faaff..4fc1583a 100644 --- a/dave_interfaces/CMakeLists.txt +++ b/dave_interfaces/CMakeLists.txt @@ -11,15 +11,25 @@ find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED) find_package(geometry_msgs REQUIRED) find_package(rosidl_default_generators REQUIRED) +find_package(gz-cmake3 REQUIRED) +find_package(gz-msgs10 REQUIRED) rosidl_generate_interfaces(${PROJECT_NAME} "msg/UsblCommand.msg" "msg/UsblResponse.msg" "msg/Location.msg" + "msg/StratifiedCurrentVelocity.msg" + "msg/StratifiedCurrentDatabase.msg" "srv/SetOriginSphericalCoord.srv" "srv/GetOriginSphericalCoord.srv" "srv/TransformToSphericalCoord.srv" "srv/TransformFromSphericalCoord.srv" + "srv/GetCurrentModel.srv" + "srv/SetCurrentModel.srv" + "srv/SetCurrentDirection.srv" + "srv/SetCurrentVelocity.srv" + "srv/SetStratifiedCurrentVelocity.srv" + "srv/SetStratifiedCurrentDirection.srv" DEPENDENCIES geometry_msgs ) @@ -33,4 +43,4 @@ ament_export_dependencies(rosidl_default_runtime) # Install CMake package configuration ament_export_include_directories(include) -ament_package() +ament_package() \ No newline at end of file diff --git a/dave_interfaces/msg/StratifiedCurrentDatabase.msg b/dave_interfaces/msg/StratifiedCurrentDatabase.msg new file mode 100644 index 00000000..b6fc2549 --- /dev/null +++ b/dave_interfaces/msg/StratifiedCurrentDatabase.msg @@ -0,0 +1,42 @@ +# Publishes depths and velocities read from the csv database + +# Depths +float32[] depths + +# Velocities +geometry_msgs/Vector3[] velocities + +# Tide time (GMT) +int16[] time_gmt_year +int16[] time_gmt_month +int16[] time_gmt_day +int16[] time_gmt_hour +int16[] time_gmt_minute + +# Tide velocities +float32[] tidevelocities + +# Tide constituents +bool tideconstituents +float32 m2_amp +float32 m2_phase +float32 m2_speed +float32 s2_amp +float32 s2_phase +float32 s2_speed +float32 n2_amp +float32 n2_phase +float32 n2_speed + +# Tide direction +float32 ebb_direction +float32 flood_direction + +# World start time (GMT) +int16 world_start_time_year +int16 world_start_time_month +int16 world_start_time_day +int16 world_start_time_hour +int16 world_start_time_minute + +# Everything is written in lowercase according to ROS 2 conventions old(v) \ No newline at end of file diff --git a/dave_interfaces/msg/StratifiedCurrentVelocity.msg b/dave_interfaces/msg/StratifiedCurrentVelocity.msg new file mode 100644 index 00000000..997787bd --- /dev/null +++ b/dave_interfaces/msg/StratifiedCurrentVelocity.msg @@ -0,0 +1,10 @@ +# Publishes depths and velocities based on the database contents + +std_msgs/Header header + +# Depths +float32[] depths + +# Velocities +geometry_msgs/Vector3[] velocities + diff --git a/dave_interfaces/srv/GetCurrentModel.srv b/dave_interfaces/srv/GetCurrentModel.srv new file mode 100644 index 00000000..2f6d7d7e --- /dev/null +++ b/dave_interfaces/srv/GetCurrentModel.srv @@ -0,0 +1,21 @@ +# Copyright (c) 2024 The dave Simulator Authors. +# All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +--- +float64 mean +float64 min +float64 max +float64 noise +float64 mu diff --git a/dave_interfaces/srv/SetCurrentDirection.srv b/dave_interfaces/srv/SetCurrentDirection.srv new file mode 100644 index 00000000..03c09e88 --- /dev/null +++ b/dave_interfaces/srv/SetCurrentDirection.srv @@ -0,0 +1,18 @@ +# Copyright (c) 2024 The dave Simulator Authors. +# All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +float64 angle +--- +bool success diff --git a/dave_interfaces/srv/SetCurrentModel.srv b/dave_interfaces/srv/SetCurrentModel.srv new file mode 100644 index 00000000..b9538295 --- /dev/null +++ b/dave_interfaces/srv/SetCurrentModel.srv @@ -0,0 +1,22 @@ +# Copyright (c) 2024 The dave Simulator Authors. +# All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +float64 mean +float64 min +float64 max +float64 noise +float64 mu +--- +bool success diff --git a/dave_interfaces/srv/SetCurrentVelocity.srv b/dave_interfaces/srv/SetCurrentVelocity.srv new file mode 100644 index 00000000..52ee6088 --- /dev/null +++ b/dave_interfaces/srv/SetCurrentVelocity.srv @@ -0,0 +1,20 @@ +# Copyright (c) 2024 The dave Simulator Authors. +# All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +float64 velocity +float64 horizontal_angle +float64 vertical_angle +--- +bool success diff --git a/dave_interfaces/srv/SetStratifiedCurrentDirection.srv b/dave_interfaces/srv/SetStratifiedCurrentDirection.srv new file mode 100644 index 00000000..a6a5957e --- /dev/null +++ b/dave_interfaces/srv/SetStratifiedCurrentDirection.srv @@ -0,0 +1,19 @@ +# Copyright (c) 2024 The dave Simulator Authors. +# All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +uint16 layer +float64 angle +--- +bool success diff --git a/dave_interfaces/srv/SetStratifiedCurrentVelocity.srv b/dave_interfaces/srv/SetStratifiedCurrentVelocity.srv new file mode 100644 index 00000000..c10a8030 --- /dev/null +++ b/dave_interfaces/srv/SetStratifiedCurrentVelocity.srv @@ -0,0 +1,21 @@ +# Copyright (c) 2024 The dave Simulator Authors. +# All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +uint16 layer +float64 velocity +float64 horizontal_angle +float64 vertical_angle +--- +bool success diff --git a/examples/dave_robot_launch/launch/robot_in_world.launch.py b/examples/dave_robot_launch/launch/robot_in_world.launch.py index 26c21afc..17f0f6e5 100644 --- a/examples/dave_robot_launch/launch/robot_in_world.launch.py +++ b/examples/dave_robot_launch/launch/robot_in_world.launch.py @@ -39,7 +39,8 @@ def launch_setup(context, *args, **kwargs): gz_args.append(" -r") if debug.perform(context) == "true": gz_args.append(" -v ") - gz_args.append(verbose.perform(context)) + if verbose.perform(context) == "true": + gz_args.append(" -v ") # Include the first launch file gz_sim_launch = IncludeLaunchDescription( diff --git a/extras/ros-jazzy-binary-gz-harmonic-source-install.sh b/extras/ros-jazzy-binary-gz-harmonic-source-install.sh new file mode 100644 index 00000000..be5d9f5e --- /dev/null +++ b/extras/ros-jazzy-binary-gz-harmonic-source-install.sh @@ -0,0 +1,147 @@ +#!/bin/bash +# Script to install development tools and libraries for robotics and simulation +echo +echo -e "\033[94m============================================================\033[0m" +echo -e "\033[94m== One-liner Installation Script for ROS-Gazebo Framework ==\033[0m" +echo -e "\033[94m============================================================\033[0m" +echo -e "Requirements: Ubuntu 24.04 LTS Noble" +echo -e "\033[94m============================================================\033[0m" + +echo +echo -e "\033[96m(1/4) ------------- Updating the System ----------------\033[0m" +echo "Performing full system upgrade (this might take a while)..." +sudo sudo apt update && apt full-upgrade -y + +echo +echo -e "\033[96m(2/4) ------------ Install Dependencies ---------------\033[0m" +echo -e "\033[34mInstalling essential tools and libraries...\033[0m" +sudo apt install -y \ + build-essential \ + cmake \ + cppcheck \ + curl \ + git \ + gnupg \ + libeigen3-dev \ + libgles2-mesa-dev \ + lsb-release \ + pkg-config \ + protobuf-compiler \ + python3-dbg \ + python3-pip \ + python3-venv \ + qtbase5-dev \ + ruby \ + software-properties-common \ + sudo \ + cppzmq-dev \ + wget + +echo +echo -e "\033[96m(3/4) ------------ Install Package Keys ---------------\033[0m" +echo -e "\033[34mInstalling Signing Keys for ROS and Gazebo...\033[0m" +# Remove keyring if exists to avoid conflicts +sudo rm -f /usr/share/keyrings/ros2-latest-archive-keyring.gpg && \ + sudo rm -rf /etc/apt/sources.list.d/ros2-latest.list +# Get Keys +sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \ + -o /usr/share/keyrings/ros-archive-keyring.gpg +sudo wget https://packages.osrfoundation.org/gazebo.gpg \ + -O /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg + +ARCH=$(dpkg --print-architecture) +# shellcheck disable=SC1091 +UBUNTU_CODENAME=$( . /etc/os-release && echo "$UBUNTU_CODENAME") +REPO="deb [arch=$ARCH signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] \ +http://packages.ros.org/ros2/ubuntu $UBUNTU_CODENAME main" +echo "$REPO" | sudo tee /etc/apt/sources.list.d/ros2.list >/dev/null + +DISTRO=$(lsb_release -cs) +REPO="deb [arch=$ARCH signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] \ +http://packages.osrfoundation.org/gazebo/ubuntu-stable $DISTRO main" +echo "$REPO" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list >/dev/null + +echo +echo -e "\033[96m(4/4) ------------ Install ROS-Gazebo ---------------\033[0m" +DIST=jazzy + +echo -e "\033[34mInstalling ROS Gazebo framework...\033[0m" +sudo apt update && apt install -y \ + python3-rosdep \ + python3-rosinstall-generator \ + python3-vcstool \ + ros-$DIST-desktop \ + ros-$DIST-ros-gz \ + ros-$DIST-gz-ros2-control \ + ros-$DIST-effort-controllers \ + ros-$DIST-geographic-info \ + ros-$DIST-joint-state-publisher \ + ros-$DIST-joy-teleop \ + ros-$DIST-key-teleop \ + ros-$DIST-moveit-planners \ + ros-$DIST-moveit-simple-controller-manager \ + ros-$DIST-moveit-ros-visualization \ + ros-$DIST-robot-localization \ + ros-$DIST-ros2-controllers \ + ros-$DIST-teleop-tools \ + ros-$DIST-urdfdom-py \ + ros-dev-tools + +echo +echo -e "\033[34mSetting up Gazebo source directory...\033[0m" +<<<<<<< HEAD +<<<<<<< HEAD +mkdir -p /opt/gazebo/src && cd /opt/gazebo/src || exit +======= +mkdir -p ~/gazebo/src && cd ~/gazebo/src || exit +>>>>>>> 3179fd4 (source install test) +======= +mkdir -p /opt/gazebo/src && cd /opt/gazebo/src || exit +>>>>>>> 22941bc (amd) +curl -O https://raw.githubusercontent.com/gazebo-tooling/gazebodistro/master/collection-harmonic.yaml +vcs import < collection-harmonic.yaml + +echo -e "\033[34mUpdating package list and installing dependencies...\033[0m" +# shellcheck disable=SC2046,SC2006 +sudo apt -y install $(sort -u $(find . -iname 'packages-'`lsb_release -cs`'.apt' -o -iname 'packages.apt' | grep -v '/\.git/') | sed '/gz\|sdf/d' | tr '\n' ' ') + +echo -e "\033[34mBuilding the project with colcon...\033[0m" +<<<<<<< HEAD +<<<<<<< HEAD +cd /opt/gazebo || exit +# Build gz-physics with limited cores to avoid memory issues +MAKEFLAGS="-j2" colcon build --cmake-args -DBUILD_TESTING=OFF --merge-install --packages-up-to gz-physics7 +<<<<<<< HEAD +======= +cd ~/gazebo || exit +======= +cd /opt/gazebo || exit +>>>>>>> 22941bc (amd) +# Build gz-physics with limited cores to avoid memory issues +MAKEFLAGS="-j2" colcon build --cmake-args -DBUILD_TESTING=OFF --merge-install --packages-up-to gz-physics +>>>>>>> 3179fd4 (source install test) +======= +>>>>>>> a4627f9 (specify gz-physics version) +# Full build +colcon build --cmake-args -DBUILD_TESTING=OFF --merge-install + +echo +echo -e "\033[32m============================================================\033[0m" +echo -e "\033[32mROS-Gazebo Framework Installation completed. Awesome! 🤘🚀 \033[0m" +echo -e "Following command will set-up ROS-Gazebo environment variables to run it" +echo -e "\033[95msource /opt/ros/jazzy/setup.bash\033[0m" +<<<<<<< HEAD +<<<<<<< HEAD +echo -e "\033[95msource /opt/gazebo/install/setup.bash\033[0m" +echo -e "\033[95mexport PYTHONPATH=\$PYTHONPATH:/opt/gazebo/install/lib/python\033[0m" +<<<<<<< HEAD +======= +echo -e "\033[95msource ~/gazebo/install/setup.bash\033[0m" +>>>>>>> 3179fd4 (source install test) +======= +echo -e "\033[95msource /opt/gazebo/install/setup.bash\033[0m" +>>>>>>> 22941bc (amd) +======= +>>>>>>> b9dd381 (minor fix) +echo -e "You may check ROS, and Gazebo version installed with \033[33mprintenv ROS_DISTRO\033[0m and \033[33mecho \$GZ_VERSION\033[0m" +echo diff --git a/gazebo/dave_gz_model_plugins/CMakeLists.txt b/gazebo/dave_gz_model_plugins/CMakeLists.txt new file mode 100644 index 00000000..e1c6d471 --- /dev/null +++ b/gazebo/dave_gz_model_plugins/CMakeLists.txt @@ -0,0 +1,65 @@ +cmake_minimum_required(VERSION 3.8) +project(dave_gz_model_plugins) + +# Find required packages +find_package(ament_cmake REQUIRED) +find_package(Boost REQUIRED COMPONENTS system) +find_package(gz-cmake3 REQUIRED) +find_package(gz-plugin2 REQUIRED COMPONENTS register) +find_package(rclcpp REQUIRED) +find_package(std_msgs REQUIRED) +find_package(gz-common5 REQUIRED COMPONENTS profiler) +find_package(gz-sim8 REQUIRED) +find_package(geometry_msgs REQUIRED) +find_package(dave_interfaces REQUIRED) +find_package(Protobuf REQUIRED) #r +find_package(gz-msgs10 REQUIRED) #r +find_package(dave_gz_world_plugins REQUIRED) + +# Set version variables +set(GZ_PLUGIN_VER ${gz-plugin2_VERSION_MAJOR}) +set(GZ_COMMON_VER ${gz-common5_VERSION_MAJOR}) +set(GZ_SIM_VER ${gz-sim8_VERSION_MAJOR}) +set(GZ_MSGS_VER ${gz-msgs10_VERSION_MAJOR}) + +message(STATUS "Compiling against Gazebo Harmonic") + +add_library(OceanCurrentModelPlugin SHARED src/OceanCurrentModelPlugin.cc) + +target_include_directories(OceanCurrentModelPlugin PRIVATE include) + +target_link_libraries(OceanCurrentModelPlugin + gz-sim${GZ_SIM_VER}::gz-sim${GZ_SIM_VER} +) + +# Specify dependencies for ocean_current_plugin using ament_target_dependencies +ament_target_dependencies(OceanCurrentModelPlugin + rclcpp + std_msgs + geometry_msgs + dave_interfaces + dave_gz_world_plugins +) + +# Install targets +install(TARGETS OceanCurrentModelPlugin + DESTINATION lib/${PROJECT_NAME} +) + +# Install headers +install(DIRECTORY include/ + DESTINATION include/ +) + +# Environment hooks +ament_environment_hooks( + "${CMAKE_CURRENT_SOURCE_DIR}/hooks/${PROJECT_NAME}.dsv.in" +) + +# Testing setup +if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + ament_lint_auto_find_test_dependencies() +endif() + +ament_package() \ No newline at end of file diff --git a/gazebo/dave_gz_model_plugins/hooks/dave_gz_model_plugins.dsv.in b/gazebo/dave_gz_model_plugins/hooks/dave_gz_model_plugins.dsv.in new file mode 100644 index 00000000..5e60e0e3 --- /dev/null +++ b/gazebo/dave_gz_model_plugins/hooks/dave_gz_model_plugins.dsv.in @@ -0,0 +1 @@ +prepend-non-duplicate;GZ_SIM_SYSTEM_PLUGIN_PATH;lib/@PROJECT_NAME@/ \ No newline at end of file diff --git a/gazebo/dave_gz_model_plugins/include/dave_gz_model_plugins/OceanCurrentModelPlugin.hh b/gazebo/dave_gz_model_plugins/include/dave_gz_model_plugins/OceanCurrentModelPlugin.hh new file mode 100644 index 00000000..a15a9786 --- /dev/null +++ b/gazebo/dave_gz_model_plugins/include/dave_gz_model_plugins/OceanCurrentModelPlugin.hh @@ -0,0 +1,75 @@ +#ifndef DAVE_GZ_MODEL_PLUGINS__OCEANCURRENTMODELPLUGIN_HH_ +#define DAVE_GZ_MODEL_PLUGINS__OCEANCURRENTMODELPLUGIN_HH_ + +#include "dave_gz_world_plugins/gauss_markov_process.hh" +#include "dave_gz_world_plugins/tidal_oscillation.hh" +#include "dave_interfaces/msg/Stratified_Current_Database.hpp" +#include "dave_interfaces/msg/Stratified_Current_Velocity.hpp" + +// OceanCurrentModelPlugin + +#include +// #include +#include + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +namespace dave_gz_model_plugins +{ +class OceanCurrentModelPlugin : public gz::sim::System, + public gz::sim::ISystemConfigure, + public gz::sim::ISystemUpdate, + public gz::sim::ISystemPostUpdate +{ +public: + OceanCurrentModelPlugin(); + ~OceanCurrentModelPlugin() override; + + // ---------------------------------------------- + + void Configure( + const gz::sim::Entity & _entity, const std::shared_ptr & _sdf, + gz::sim::EntityComponentManager & _ecm, gz::sim::EventManager & _eventMgr); + + void LoadCurrentVelocityParams(sdf::ElementPtr _sdf, gz::sim::EntityComponentManager & _ecm); + + void UpdateDatabase( + const std::shared_ptr & _msg); + + gz::sim::Entity GetModelEntity( + const std::string & modelName, gz::sim::EntityComponentManager & ecm); + + gz::math::Pose3d GetModelPose( + const gz::sim::Entity & modelEntity, gz::sim::EntityComponentManager & ecm); + + // ---------------------------------------------- + + void Update(const gz::sim::UpdateInfo & _info, gz::sim::EntityComponentManager & _ecm); + + void CalculateOceanCurrent(double vehicleDepth); + + // ---------------------------------------------- + + // Function called after the simulation state updates + void PostUpdate(const gz::sim::UpdateInfo & _info, const gz::sim::EntityComponentManager & _ecm); + + void PublishCurrentVelocity(const gz::sim::UpdateInfo & _info); + +private: + std::shared_ptr ros_node_; + struct PrivateData; + std::unique_ptr dataPtr; +}; +} // namespace dave_gz_model_plugins + +#endif // DAVE_GZ_MODEL_PLUGINS__OCEANCURRENTMODELPLUGIN_HH_ diff --git a/gazebo/dave_gz_model_plugins/package.xml b/gazebo/dave_gz_model_plugins/package.xml new file mode 100644 index 00000000..46a5a0ad --- /dev/null +++ b/gazebo/dave_gz_model_plugins/package.xml @@ -0,0 +1,20 @@ + + + dave_gz_model_plugins + 0.0.0 + Dave Model Plugins + Gaurav Kumar + Apache 2.0 + ament_cmake + dave_gz_world_plugins + dave_gz_ros_plugins + dave_interfaces + rclcpp + protobuf + std_msgs + ament_lint_auto + ament_lint_common + + ament_cmake + + \ No newline at end of file diff --git a/gazebo/dave_gz_model_plugins/src/OceanCurrentModelPlugin.cc b/gazebo/dave_gz_model_plugins/src/OceanCurrentModelPlugin.cc new file mode 100644 index 00000000..73e06788 --- /dev/null +++ b/gazebo/dave_gz_model_plugins/src/OceanCurrentModelPlugin.cc @@ -0,0 +1,642 @@ +// Plugin includes +#include "dave_gz_model_plugins/OceanCurrentModelPlugin.hh" +#include "dave_gz_world_plugins/gauss_markov_process.hh" +#include "dave_gz_world_plugins/tidal_oscillation.hh" + +// Gazebo includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// ROS2 includes +#include +#include +#include +#include + +// Message interfaces includes +#include "dave_interfaces/msg/Stratified_Current_Database.hpp" +#include "dave_interfaces/msg/Stratified_Current_Velocity.hpp" + +// Standard library includes +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Common utilities +#include "gz/common/StringUtils.hh" +#include "gz/plugin/Register.hh" + +GZ_ADD_PLUGIN( + dave_gz_model_plugins::OceanCurrentModelPlugin, gz::sim::System, + dave_gz_model_plugins::OceanCurrentModelPlugin::ISystemConfigure, + dave_gz_model_plugins::OceanCurrentModelPlugin::ISystemUpdate, + dave_gz_model_plugins::OceanCurrentModelPlugin::ISystemPostUpdate) + +namespace dave_gz_model_plugins +{ +struct OceanCurrentModelPlugin::PrivateData +{ + // Gazebo Simulation Related Variables + gz::sim::World world{gz::sim::kNullEntity}; + gz::sim::Entity entity{gz::sim::kNullEntity}; + gz::sim::Model model{gz::sim::kNullEntity}; + gz::sim::Entity modelLink{gz::sim::kNullEntity}; + gz::sim::Entity modelEntity; + std::string modelName; + + // Transport and Communication + std::shared_ptr gz_node; + gz::transport::Node::Publisher gz_current_vel_pub; + std::shared_ptr ros_node_; + rclcpp::Publisher::SharedPtr flowVelocityPub; + rclcpp::Subscription::SharedPtr databaseSub; + + // Topics + std::string currentVelocityTopic; + std::string transientCurrentVelocityTopic; + + // Time and Periods + std::chrono::steady_clock::duration lastUpdate{0}; + std::chrono::steady_clock::duration rosPublishPeriod{0}; + std::chrono::steady_clock::duration time; + + // Lock for Synchronization + std::mutex lock_; + + // Current Velocity + gz::math::Vector3d currentVelocity; + int lastDepthIndex = 0; + std::vector database; + + // Gauss-Markov Process Models + dave_gz_world_plugins::GaussMarkovProcess currentVelNorthModel; + dave_gz_world_plugins::GaussMarkovProcess currentVelEastModel; + dave_gz_world_plugins::GaussMarkovProcess currentVelDownModel; + + // Noise Amplitudes and Frequencies + double noiseAmp_North; + double noiseAmp_East; + double noiseAmp_Down; + double noiseFreq_North; + double noiseFreq_East; + double noiseFreq_Down; + + // Tidal Oscillation Model + dave_gz_world_plugins::TidalOscillation tide; + + // Tidal Oscillation Settings and Flags + bool tideFlag; + bool tide_Constituents; + double M2_amp, M2_phase, M2_speed; + double S2_amp, S2_phase, S2_speed; + double N2_amp, N2_phase, N2_speed; + + // Tidal Oscillation Directions + double ebbDirection; + double floodDirection; + + // Tidal Oscillation World Start Time (GMT) + std::array world_start_time; + std::vector> timeGMT; + + // Tidal Velocities + std::vector tideVelocities; +}; + +OceanCurrentModelPlugin::OceanCurrentModelPlugin() : dataPtr(std::make_unique()) {} + +OceanCurrentModelPlugin::~OceanCurrentModelPlugin() = default; + +// ---------------------------------------------- + +///////////////////////////////////////////////// +void OceanCurrentModelPlugin::Configure( + const gz::sim::Entity & _entity, const std::shared_ptr & _sdf, + gz::sim::EntityComponentManager & _ecm, gz::sim::EventManager & _eventMgr) +{ + // Check if ROS is initialized; if not, initialize it + if (!rclcpp::ok()) + { + rclcpp::init(0, nullptr); + } + + // Initialize the ROS 2 node + this->ros_node_ = std::make_shared("OceanCurrentModelPlugin"); + + // Initialize the Gazebo transport node + this->dataPtr->gz_node = std::make_shared(); + + gzdbg << "dave_gz_model_plugins::OceanCurrentModelPlugin::Configure on entity: " << _entity + << std::endl; + + // Clone the SDF element to allow calling non-const methods + sdf::ElementPtr sdfClone = _sdf->Clone(); + + // Get the world entity from the Entity Component Manager (ECM) + auto worldEntity = _ecm.EntityByComponents(gz::sim::components::World()); + this->dataPtr->world = gz::sim::World(worldEntity); + + // Get the model entity + auto model = gz::sim::Model(_entity); + this->dataPtr->model = model; + gzmsg << "Loading ocean current model plugin..." << std::endl; + + // Read the namespace for topics and services + if (!_sdf->HasElement("namespace")) + { + gzerr << "Missing required parameter , plugin will not be initialized." << std::endl; + return; + } + this->dataPtr->modelName = _sdf->Get("namespace"); + + // Set the flow velocity topic from SDF or use the default topic name + if (_sdf->HasElement("flow_velocity_topic")) + { + this->dataPtr->currentVelocityTopic = + _sdf->Get("flow_velocity_topic") + "/" + this->dataPtr->modelName; + } + else + { + this->dataPtr->currentVelocityTopic = + "hydrodynamics/current_velocity/" + this->dataPtr->modelName; + gzwarn << "Empty flow_velocity_topic for transient_current model plugin. Default topicName " + "definition is used." + << std::endl; + } + gzmsg << "Transient velocity topic name for " << this->dataPtr->modelName << " : " + << this->dataPtr->currentVelocityTopic << std::endl; + + // Get the model entity based on the model name + this->dataPtr->modelEntity = GetModelEntity(this->dataPtr->modelName, _ecm); + + // Read the stratified ocean current topic name from the SDF + LoadCurrentVelocityParams(sdfClone, _ecm); + + // Initialize the Gauss-Markov process + // Gauss_Markov_process_initialize(_sdf); + + // Advertise the ROS flow velocity as a stamped twist message + this->dataPtr->flowVelocityPub = + this->ros_node_->create_publisher( + this->dataPtr->currentVelocityTopic, rclcpp::QoS(10)); + + // Advertise the current velocity topic in Gazebo + this->dataPtr->gz_current_vel_pub = + this->dataPtr->gz_node->Advertise(this->dataPtr->currentVelocityTopic); + + // Subscribe to the stratified ocean current database + this->dataPtr->databaseSub = + this->ros_node_->create_subscription( + this->dataPtr->transientCurrentVelocityTopic, 10, + std::bind(&OceanCurrentModelPlugin::UpdateDatabase, this, std::placeholders::_1)); + + gzmsg << "Transient current model plugin loaded!" << std::endl; +} + +///////////////////////////////////////////////// +void OceanCurrentModelPlugin::LoadCurrentVelocityParams( + sdf::ElementPtr _sdf, gz::sim::EntityComponentManager & _ecm) +{ + // Read topic name of stratified ocean current from SDF + sdf::ElementPtr currentVelocityParams; + if (_sdf->HasElement("transient_current")) + { + currentVelocityParams = _sdf->GetElement("transient_current"); + if (currentVelocityParams->HasElement("topic_stratified")) + { + this->dataPtr->transientCurrentVelocityTopic = + "/hydrodynamics/" + currentVelocityParams->Get("topic_stratified") + + "_database"; + } + else + { + this->dataPtr->transientCurrentVelocityTopic = + "/hydrodynamics/stratified_current_velocity_database"; + } + + // Read Gauss-Markov parameters + // sdf::ElementPtr currentVelocityDirection; + + // initialize velocity_north_model parameters + if (currentVelocityParams->HasElement("velocity_north")) + { + sdf::ElementPtr elem = currentVelocityParams->GetElement("velocity_north"); + if (elem->HasElement("mean")) + { + this->dataPtr->currentVelNorthModel.mean = 0.0; + } + if (elem->HasElement("mu")) + { + this->dataPtr->currentVelNorthModel.mu = 0.0; + } + if (elem->HasElement("noiseAmp")) + { + this->dataPtr->noiseAmp_North = elem->Get("noiseAmp"); + } + this->dataPtr->currentVelNorthModel.min = + this->dataPtr->currentVelNorthModel.mean - this->dataPtr->noiseAmp_North; + this->dataPtr->currentVelNorthModel.max = + this->dataPtr->currentVelNorthModel.mean + this->dataPtr->noiseAmp_North; + if (elem->HasElement("noiseFreq")) + { + this->dataPtr->noiseFreq_North = elem->Get("noiseFreq"); + } + this->dataPtr->currentVelNorthModel.noiseAmp = this->dataPtr->noiseFreq_North; + } + + this->dataPtr->currentVelNorthModel.var = this->dataPtr->currentVelNorthModel.mean; + gzmsg << "For vehicle " << this->dataPtr->modelName + << " -> Current north-direction velocity [m/s] " + << "Gauss-Markov process model:" << std::endl; + this->dataPtr->currentVelNorthModel.Print(); + + // initialize velocity_east_model parameters + if (currentVelocityParams->HasElement("velocity_east")) + { + sdf::ElementPtr elem = currentVelocityParams->GetElement("velocity_east"); + if (elem->HasElement("mean")) + { + this->dataPtr->currentVelEastModel.mean = 0.0; + } + if (elem->HasElement("mu")) + { + this->dataPtr->currentVelEastModel.mu = 0.0; + } + if (elem->HasElement("noiseAmp")) + { + this->dataPtr->noiseAmp_East = elem->Get("noiseAmp"); + } + this->dataPtr->currentVelEastModel.min = + this->dataPtr->currentVelEastModel.mean - this->dataPtr->noiseAmp_East; + this->dataPtr->currentVelEastModel.max = + this->dataPtr->currentVelEastModel.mean + this->dataPtr->noiseAmp_East; + if (elem->HasElement("noiseFreq")) + { + this->dataPtr->noiseFreq_East = elem->Get("noiseFreq"); + } + this->dataPtr->currentVelEastModel.noiseAmp = this->dataPtr->noiseFreq_East; + } + + this->dataPtr->currentVelEastModel.var = this->dataPtr->currentVelEastModel.mean; + gzmsg << "For vehicle " << this->dataPtr->modelName + << " -> Current east-direction velocity [m/s] " + << "Gauss-Markov process model:" << std::endl; + this->dataPtr->currentVelEastModel.Print(); + + // initialize velocity_down_model parameters + if (currentVelocityParams->HasElement("velocity_down")) + { + sdf::ElementPtr elem = currentVelocityParams->GetElement("velocity_down"); + if (elem->HasElement("mean")) + { + this->dataPtr->currentVelDownModel.mean = 0.0; + } + if (elem->HasElement("mu")) + { + this->dataPtr->currentVelDownModel.mu = 0.0; + } + if (elem->HasElement("noiseAmp")) + { + this->dataPtr->noiseAmp_Down = elem->Get("noiseAmp"); + } + this->dataPtr->currentVelDownModel.min = + this->dataPtr->currentVelDownModel.mean - this->dataPtr->noiseAmp_Down; + this->dataPtr->currentVelDownModel.max = + this->dataPtr->currentVelDownModel.mean + this->dataPtr->noiseAmp_Down; + if (elem->HasElement("noiseFreq")) + { + this->dataPtr->noiseFreq_Down = elem->Get("noiseFreq"); + } + this->dataPtr->currentVelDownModel.noiseAmp = this->dataPtr->noiseFreq_Down; + } + + this->dataPtr->currentVelDownModel.var = this->dataPtr->currentVelDownModel.mean; + gzmsg << "For vehicle " << this->dataPtr->modelName + << " -> Current down-direction velocity [m/s]" + << "Gauss-Markov process model:" << std::endl; + this->dataPtr->currentVelDownModel.Print(); + + this->dataPtr->currentVelNorthModel.lastUpdate = this->dataPtr->lastUpdate.count(); + this->dataPtr->currentVelEastModel.lastUpdate = this->dataPtr->lastUpdate.count(); + this->dataPtr->currentVelDownModel.lastUpdate = this->dataPtr->lastUpdate.count(); + + // Tidal Oscillation + if (_sdf->HasElement("tide_oscillation")) + { + this->dataPtr->tideFlag = _sdf->Get("tide_oscillation"); + } + else + { + this->dataPtr->tideFlag = false; + } + } +} + +void OceanCurrentModelPlugin::UpdateDatabase( + const std::shared_ptr & _msg) +{ + this->dataPtr->lock_.lock(); + + this->dataPtr->database.clear(); + for (int i = 0; i < _msg->depths.size(); i++) + { + gz::math::Vector3d data(_msg->velocities[i].x, _msg->velocities[i].y, _msg->depths[i]); + this->dataPtr->database.push_back(data); + } + if (this->dataPtr->tideFlag) + { + this->dataPtr->timeGMT.clear(); + this->dataPtr->tideVelocities.clear(); + if (_msg->tideconstituents == true) + { + this->dataPtr->M2_amp = _msg->m2_amp; + this->dataPtr->M2_phase = _msg->m2_phase; + this->dataPtr->M2_speed = _msg->m2_speed; + this->dataPtr->S2_amp = _msg->s2_amp; + this->dataPtr->S2_phase = _msg->s2_phase; + this->dataPtr->S2_speed = _msg->s2_speed; + this->dataPtr->N2_amp = _msg->n2_amp; + this->dataPtr->N2_phase = _msg->n2_phase; + this->dataPtr->N2_speed = _msg->n2_speed; + this->dataPtr->tide_Constituents = true; + } + else + { + std::array tmpDateVals; + for (int i = 0; i < _msg->time_gmt_year.size(); i++) + { + tmpDateVals[0] = _msg->time_gmt_year[i]; + tmpDateVals[1] = _msg->time_gmt_month[i]; + tmpDateVals[2] = _msg->time_gmt_day[i]; + tmpDateVals[3] = _msg->time_gmt_hour[i]; + tmpDateVals[4] = _msg->time_gmt_minute[i]; + + this->dataPtr->timeGMT.push_back(tmpDateVals); + this->dataPtr->tideVelocities.push_back(_msg->tidevelocities[i]); + } + this->dataPtr->tide_Constituents = false; + } + this->dataPtr->ebbDirection = _msg->ebb_direction; + this->dataPtr->floodDirection = _msg->flood_direction; + this->dataPtr->world_start_time[0] = _msg->world_start_time_year; + this->dataPtr->world_start_time[1] = _msg->world_start_time_month; + this->dataPtr->world_start_time[2] = _msg->world_start_time_day; + this->dataPtr->world_start_time[3] = _msg->world_start_time_hour; + this->dataPtr->world_start_time[4] = _msg->world_start_time_minute; + } + + this->dataPtr->lock_.unlock(); +} + +////////////////////////////////////////// +gz::sim::Entity OceanCurrentModelPlugin::GetModelEntity( + const std::string & modelName, gz::sim::EntityComponentManager & ecm) +{ + gz::sim::Entity modelEntity = gz::sim::kNullEntity; + + ecm.Each( + [&](const gz::sim::Entity & entity, const gz::sim::components::Name * nameComp) -> bool + { + if (nameComp->Data() == modelName) + { + modelEntity = entity; + return false; // Stop iteration + } + return true; // Continue iteration + }); + + return modelEntity; +} + +///////////////////////////////////////////////// +gz::math::Pose3d OceanCurrentModelPlugin::GetModelPose( + const gz::sim::Entity & modelEntity, gz::sim::EntityComponentManager & ecm) +{ + const auto * poseComp = ecm.Component(modelEntity); + if (poseComp) + { + return poseComp->Data(); + } + else + { + gzerr << "Pose component not found for entity: " << modelEntity << std::endl; + return gz::math::Pose3d::Zero; + } +} + +// ---------------------------------------------- + +///////////////////////////////////////////////// +void OceanCurrentModelPlugin::Update( + const gz::sim::UpdateInfo & _info, gz::sim::EntityComponentManager & _ecm) +{ + // Update vehicle position + gz::math::Pose3d vehicle_pos = GetModelPose(this->dataPtr->modelEntity, _ecm); + double vehicleDepth = std::abs(vehicle_pos.Z()); + this->dataPtr->time = this->dataPtr->lastUpdate; + CalculateOceanCurrent(vehicleDepth); +} + +///////////////////////////////////////////////// +void OceanCurrentModelPlugin::CalculateOceanCurrent(double vehicleDepth) +{ + this->dataPtr->lock_.lock(); + + if (this->dataPtr->database.size() == 0) + { + // skip for next time (waiting for valid database subscrition) + } + else + { + double northCurrent = 0.0; + double eastCurrent = 0.0; + + //--- Interpolate velocity from database ---// + // find current depth index from database + // (X: north-direction, Y: east-direction, Z: depth) + int depthIndex = 0; + for (int i = 1; i < this->dataPtr->database.size(); i++) + { + if (this->dataPtr->database[i].Z() > vehicleDepth) + { + depthIndex = i; + break; + } + } + + // If sudden change found, use the one before + if (this->dataPtr->lastDepthIndex == 0) + { + this->dataPtr->lastDepthIndex = depthIndex; + } + else + { + if (abs(depthIndex - this->dataPtr->lastDepthIndex) > 2) + { + depthIndex = this->dataPtr->lastDepthIndex; + } + this->dataPtr->lastDepthIndex = depthIndex; + } + + // interpolate + if (depthIndex == 0) + { // Deeper than database use deepest value + northCurrent = this->dataPtr->database[this->dataPtr->database.size() - 1].X(); + eastCurrent = this->dataPtr->database[this->dataPtr->database.size() - 1].Y(); + } + else + { + double rate = + (vehicleDepth - this->dataPtr->database[depthIndex - 1].Z()) / + (this->dataPtr->database[depthIndex].Z() - this->dataPtr->database[depthIndex - 1].Z()); + northCurrent = + (this->dataPtr->database[depthIndex].X() - this->dataPtr->database[depthIndex - 1].X()) * + rate + + this->dataPtr->database[depthIndex - 1].X(); + eastCurrent = + (this->dataPtr->database[depthIndex].Y() - this->dataPtr->database[depthIndex - 1].Y()) * + rate + + this->dataPtr->database[depthIndex - 1].Y(); + } + this->dataPtr->currentVelNorthModel.mean = northCurrent; + this->dataPtr->currentVelEastModel.mean = eastCurrent; + this->dataPtr->currentVelDownModel.mean = 0.0; + + // Tidal oscillation + if (this->dataPtr->tideFlag) + { + // Update tide oscillation + + if (this->dataPtr->tide_Constituents) + { + this->dataPtr->tide.M2_amp = this->dataPtr->M2_amp; + this->dataPtr->tide.M2_phase = this->dataPtr->M2_phase; + this->dataPtr->tide.M2_speed = this->dataPtr->M2_speed; + this->dataPtr->tide.S2_amp = this->dataPtr->S2_amp; + this->dataPtr->tide.S2_phase = this->dataPtr->S2_phase; + this->dataPtr->tide.S2_speed = this->dataPtr->S2_speed; + this->dataPtr->tide.N2_amp = this->dataPtr->N2_amp; + this->dataPtr->tide.N2_phase = this->dataPtr->N2_phase; + this->dataPtr->tide.N2_speed = this->dataPtr->N2_speed; + } + else + { + this->dataPtr->tide.dateGMT = this->dataPtr->timeGMT; + this->dataPtr->tide.speedcmsec = this->dataPtr->tideVelocities; + } + this->dataPtr->tide.ebbDirection = this->dataPtr->ebbDirection; + this->dataPtr->tide.floodDirection = this->dataPtr->floodDirection; + this->dataPtr->tide.worldStartTime = this->dataPtr->world_start_time; + this->dataPtr->tide.Initiate(this->dataPtr->tide_Constituents); + std::pair currents = + this->dataPtr->tide.Update((this->dataPtr->time).count(), northCurrent); + this->dataPtr->currentVelNorthModel.mean = currents.first; + this->dataPtr->currentVelEastModel.mean = currents.second; + this->dataPtr->currentVelDownModel.mean = 0.0; + } + else + { + this->dataPtr->currentVelNorthModel.mean = northCurrent; + this->dataPtr->currentVelEastModel.mean = eastCurrent; + this->dataPtr->currentVelDownModel.mean = 0.0; + } + + // Change min max accordingly + this->dataPtr->currentVelNorthModel.max = + this->dataPtr->currentVelNorthModel.mean + this->dataPtr->noiseAmp_North; + this->dataPtr->currentVelNorthModel.min = + this->dataPtr->currentVelNorthModel.mean - this->dataPtr->noiseAmp_North; + this->dataPtr->currentVelEastModel.max = + this->dataPtr->currentVelEastModel.mean + this->dataPtr->noiseAmp_East; + this->dataPtr->currentVelEastModel.min = + this->dataPtr->currentVelEastModel.mean - this->dataPtr->noiseAmp_East; + this->dataPtr->currentVelDownModel.max = + this->dataPtr->currentVelDownModel.mean + this->dataPtr->noiseAmp_Down; + this->dataPtr->currentVelDownModel.min = + this->dataPtr->currentVelDownModel.mean - this->dataPtr->noiseAmp_Down; + + // Assign values to the model + this->dataPtr->currentVelNorthModel.var = this->dataPtr->currentVelNorthModel.mean; + this->dataPtr->currentVelEastModel.var = this->dataPtr->currentVelEastModel.mean; + this->dataPtr->currentVelDownModel.var = this->dataPtr->currentVelDownModel.mean; + + // Update current velocity + double velocityNorth = + this->dataPtr->currentVelNorthModel.Update((this->dataPtr->time).count()); + + // Update current horizontal direction around z axis of flow frame + double velocityEast = this->dataPtr->currentVelEastModel.Update((this->dataPtr->time).count()); + + // Update current horizontal direction around z axis of flow frame + double velocityDown = this->dataPtr->currentVelDownModel.Update((this->dataPtr->time).count()); + + // Update current Velocity + this->dataPtr->currentVelocity = gz::math::Vector3d(velocityNorth, velocityEast, velocityDown); + } + + this->dataPtr->lock_.unlock(); +} + +// ---------------------------------------------- + +///////////////////////////////////////////////// +void OceanCurrentModelPlugin::PostUpdate( + const gz::sim::UpdateInfo & _info, const gz::sim::EntityComponentManager & _ecm) +{ + // Publish the Current Velocity. TODO find if we really need this + // if (!_info.paused && _info.simTime > this->dataPtr->lastUpdate) + // { + // this->dataPtr->lastUpdate = _info.simTime; + // PostPublishCurrentVelocity(); + // } + this->dataPtr->lastUpdate = _info.simTime; + PublishCurrentVelocity(_info); + if (!_info.paused) + { + rclcpp::spin_some(this->ros_node_); + + if (_info.iterations % 1000 == 0) + { + gzmsg << "dave_gz_model_plugins::OceanCurrentModelPlugin::PostUpdate" << std::endl; + } + } +} + +///////////////////////////////////////////////// +void OceanCurrentModelPlugin::PublishCurrentVelocity(const gz::sim::UpdateInfo & _info) +{ + geometry_msgs::msg::TwistStamped flowVelMsg; + flowVelMsg.header.stamp.sec = + std::chrono::duration_cast(_info.simTime).count(); + flowVelMsg.header.frame_id = "/world"; + flowVelMsg.twist.linear.x = this->dataPtr->currentVelocity.X(); + flowVelMsg.twist.linear.y = this->dataPtr->currentVelocity.Y(); + flowVelMsg.twist.linear.z = this->dataPtr->currentVelocity.Z(); + this->dataPtr->flowVelocityPub->publish(flowVelMsg); + + // Generate and publish Gazebo topic according to the vehicle depth + gz::msgs::Vector3d currentVel; + currentVel.set_x(this->dataPtr->currentVelocity.X()); + currentVel.set_y(this->dataPtr->currentVelocity.Y()); + currentVel.set_z(this->dataPtr->currentVelocity.Z()); + this->dataPtr->gz_current_vel_pub.Publish(currentVel); +} + +} // namespace dave_gz_model_plugins diff --git a/gazebo/dave_gz_sensor_plugins/CMakeLists.txt b/gazebo/dave_gz_sensor_plugins/CMakeLists.txt index b5a522e5..3fbb5cbc 100644 --- a/gazebo/dave_gz_sensor_plugins/CMakeLists.txt +++ b/gazebo/dave_gz_sensor_plugins/CMakeLists.txt @@ -1,6 +1,4 @@ cmake_minimum_required(VERSION 3.8) - -# Define the project name project(dave_gz_sensor_plugins) # Find required packages @@ -13,30 +11,42 @@ find_package(gz-common5 REQUIRED COMPONENTS profiler) find_package(gz-sim8 REQUIRED) find_package(geometry_msgs REQUIRED) find_package(dave_interfaces REQUIRED) +find_package(sensor_msgs REQUIRED) +find_package(Protobuf REQUIRED) +find_package(gz-msgs10 REQUIRED) # Set version variables set(GZ_PLUGIN_VER ${gz-plugin2_VERSION_MAJOR}) set(GZ_COMMON_VER ${gz-common5_VERSION_MAJOR}) set(GZ_SIM_VER ${gz-sim8_VERSION_MAJOR}) +set(GZ_MSGS_VER ${gz-msgs10_VERSION_MAJOR}) message(STATUS "Compiling against Gazebo Harmonic") add_library(UsblTransceiver SHARED src/UsblTransceiver.cc) add_library(UsblTransponder SHARED src/UsblTransponder.cc) +add_library(sea_pressure_sensor SHARED src/sea_pressure_sensor.cc) target_include_directories(UsblTransceiver PRIVATE include) target_include_directories(UsblTransponder PRIVATE include) +target_include_directories(sea_pressure_sensor PRIVATE include) target_link_libraries(UsblTransceiver - gz-sim${GZ_SIM_VER}::gz-sim${GZ_SIM_VER}) + gz-sim${GZ_SIM_VER}::gz-sim${GZ_SIM_VER} +) target_link_libraries(UsblTransponder -gz-sim${GZ_SIM_VER}::gz-sim${GZ_SIM_VER}) + gz-sim${GZ_SIM_VER}::gz-sim${GZ_SIM_VER} +) +target_link_libraries(sea_pressure_sensor + gz-sim${GZ_SIM_VER}::gz-sim${GZ_SIM_VER} +) # Specify dependencies for FullSystem using ament_target_dependencies ament_target_dependencies(UsblTransceiver dave_interfaces + sensor_msgs rclcpp geometry_msgs std_msgs @@ -48,8 +58,15 @@ ament_target_dependencies(UsblTransponder std_msgs ) +ament_target_dependencies(sea_pressure_sensor + rclcpp + std_msgs + sensor_msgs + geometry_msgs +) + # Install targets -install(TARGETS UsblTransceiver UsblTransponder +install(TARGETS UsblTransceiver UsblTransponder sea_pressure_sensor DESTINATION lib/${PROJECT_NAME} ) @@ -60,7 +77,8 @@ install(DIRECTORY include/ # Environment hooks ament_environment_hooks( - "${CMAKE_CURRENT_SOURCE_DIR}/hooks/${PROJECT_NAME}.dsv.in") + "${CMAKE_CURRENT_SOURCE_DIR}/hooks/${PROJECT_NAME}.dsv.in" +) # Testing setup if(BUILD_TESTING) @@ -68,5 +86,4 @@ if(BUILD_TESTING) ament_lint_auto_find_test_dependencies() endif() -# Configure ament ament_package() diff --git a/gazebo/dave_gz_sensor_plugins/include/dave_gz_sensor_plugins/sea_pressure_sensor.hh b/gazebo/dave_gz_sensor_plugins/include/dave_gz_sensor_plugins/sea_pressure_sensor.hh new file mode 100644 index 00000000..d729f360 --- /dev/null +++ b/gazebo/dave_gz_sensor_plugins/include/dave_gz_sensor_plugins/sea_pressure_sensor.hh @@ -0,0 +1,48 @@ +#ifndef dave_gz_sensor_plugins__SUBSEA_PRESSURE_SENSOR_HH_ +#define dave_gz_sensor_plugins__SUBSEA_PRESSURE_SENSOR_HH_ + +#include +#include +#include +#include +#include +#include + +namespace dave_gz_sensor_plugins +{ +class SubseaPressureSensorPlugin : public gz::sim::System, + public gz::sim::ISystemConfigure, + public gz::sim::ISystemPreUpdate, + public gz::sim::ISystemPostUpdate +{ +public: + SubseaPressureSensorPlugin(); + ~SubseaPressureSensorPlugin(); + + /// \brief Load the plugin + void Configure( + const gz::sim::Entity & _entity, const std::shared_ptr & _sdf, + gz::sim::EntityComponentManager & _ecm, gz::sim::EventManager & _eventMgr); + + /// \brief Update sensor measurement + void PreUpdate(const gz::sim::UpdateInfo & _info, gz::sim::EntityComponentManager & _ecm); + + void PostUpdate(const gz::sim::UpdateInfo & _info, const gz::sim::EntityComponentManager & _ecm); + + gz::math::Pose3d GetWorldPose( + const gz::sim::Entity & _entity, gz::sim::EntityComponentManager & _ecm); + + gz::math::Pose3d GetModelPose( + const gz::sim::Entity & modelEntity, gz::sim::EntityComponentManager & ecm); + + gz::sim::Entity GetModelEntity( + const std::string & modelName, gz::sim::EntityComponentManager & ecm); + +private: + std::shared_ptr rosNode; + struct PrivateData; + std::unique_ptr dataPtr; +}; +} // namespace dave_gz_sensor_plugins + +#endif // __UUV_SUBSEA_PRESSURE_ROS_PLUGIN_HH__ \ No newline at end of file diff --git a/gazebo/dave_gz_sensor_plugins/package.xml b/gazebo/dave_gz_sensor_plugins/package.xml index b1c657d6..f8e6da97 100644 --- a/gazebo/dave_gz_sensor_plugins/package.xml +++ b/gazebo/dave_gz_sensor_plugins/package.xml @@ -3,11 +3,15 @@ dave_gz_sensor_plugins 0.0.0 DAVE sensor plugins + Gaurav kumar Helena Moyen Apache 2.0 + geometry_msgs ament_cmake ament_lint_auto dave_interfaces + protobuf + protobuf dave_interfaces ament_cmake diff --git a/gazebo/dave_gz_sensor_plugins/src/sea_pressure_sensor.cc b/gazebo/dave_gz_sensor_plugins/src/sea_pressure_sensor.cc new file mode 100644 index 00000000..eccb40d5 --- /dev/null +++ b/gazebo/dave_gz_sensor_plugins/src/sea_pressure_sensor.cc @@ -0,0 +1,245 @@ +#include "dave_gz_sensor_plugins/sea_pressure_sensor.hh" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GZ_ADD_PLUGIN( + dave_gz_sensor_plugins::SubseaPressureSensorPlugin, gz::sim::System, + dave_gz_sensor_plugins::SubseaPressureSensorPlugin::ISystemConfigure, + dave_gz_sensor_plugins::SubseaPressureSensorPlugin::ISystemPreUpdate, + dave_gz_sensor_plugins::SubseaPressureSensorPlugin::ISystemPostUpdate) + +namespace dave_gz_sensor_plugins +{ +struct SubseaPressureSensorPlugin::PrivateData +{ +public: + double saturation; + gz::sim::EntityComponentManager * ecm = nullptr; + std::chrono::steady_clock::duration lastMeasurementTime{0}; + bool estimateDepth; + double standardPressure = 101.325; + double kPaPerM = 9.80638; + std::shared_ptr gazeboNode; + gz::transport::Node::Publisher gz_pressure_sensor_pub; + rclcpp::Publisher::SharedPtr ros_pressure_sensor_pub; + rclcpp::Publisher::SharedPtr ros_depth_estimate_pub; + std::shared_ptr rosNode; + std::string robotNamespace; + double noiseAmp = 0.0; + double noiseSigma = 3.0; + double inferredDepth = 0.0; + double pressure = 0.0; + std::string modelName; + gz::sim::Entity modelEntity; +}; + +SubseaPressureSensorPlugin::SubseaPressureSensorPlugin() : dataPtr(std::make_unique()) +{ +} + +SubseaPressureSensorPlugin::~SubseaPressureSensorPlugin() {} + +void SubseaPressureSensorPlugin::Configure( + const gz::sim::Entity & _entity, const std::shared_ptr & _sdf, + gz::sim::EntityComponentManager & _ecm, gz::sim::EventManager & _eventManager) +{ + if (!rclcpp::ok()) + { + rclcpp::init(0, nullptr); + } + + gzdbg << "dave_gz_sensor_plugins::SubseaPressureSensorPlugin::Configure on entity: " << _entity + << std::endl; + + // Initialize the ROS 2 node + this->rosNode = std::make_shared("subsea_pressure_sensor"); + + // Initialize the Gazebo node + this->dataPtr->gazeboNode = std::make_shared(); + + if (!_sdf->HasElement("namespace")) + { + gzerr << "Missing required parameter , " + << "plugin will not be initialized." << std::endl; + return; + } + this->dataPtr->robotNamespace = _sdf->Get("namespace"); + + if (_sdf->HasElement("saturation")) + { + this->dataPtr->saturation = _sdf->Get("saturation"); + } + else + { + this->dataPtr->saturation = 3000; + } + + if (_sdf->HasElement("estimate_depth_on")) + { + this->dataPtr->estimateDepth = _sdf->Get("estimate_depth_on"); + } + else + { + this->dataPtr->estimateDepth = true; + } + + if (_sdf->HasElement("standard_pressure")) + { + this->dataPtr->standardPressure = _sdf->Get("standard_pressure"); + } + else + { + this->dataPtr->standardPressure = 101.325; + } + + if (_sdf->HasElement("kPa_per_meter")) + { + this->dataPtr->kPaPerM = _sdf->Get("kPa_per_meter"); + } + else + { + this->dataPtr->kPaPerM = 9.80638; + } + + // this->dataPtr->gazeboNode->Init(); + this->dataPtr->modelEntity = GetModelEntity(this->dataPtr->robotNamespace, _ecm); + + this->dataPtr->ros_pressure_sensor_pub = + this->rosNode->create_publisher( + this->dataPtr->robotNamespace + "/" + "Pressure", rclcpp::QoS(10).reliable()); + + if (this->dataPtr->estimateDepth) + { + this->dataPtr->ros_depth_estimate_pub = + this->rosNode->create_publisher( + this->dataPtr->robotNamespace + "/" + "Pressure_depth", rclcpp::QoS(10).reliable()); + } + + this->dataPtr->gz_pressure_sensor_pub = + this->dataPtr->gazeboNode->Advertise( + this->dataPtr->robotNamespace + "/" + "Pressure"); +} +////////////////////////////////////////// + +gz::sim::Entity SubseaPressureSensorPlugin::GetModelEntity( + const std::string & modelName, gz::sim::EntityComponentManager & ecm) +{ + gz::sim::Entity modelEntity = gz::sim::kNullEntity; + + ecm.Each( + [&](const gz::sim::Entity & entity, const gz::sim::components::Name * nameComp) -> bool + { + if (nameComp->Data() == modelName) + { + modelEntity = entity; + return false; // Stop iteration + } + return true; // Continue iteration + }); + + return modelEntity; +} + +gz::math::Pose3d SubseaPressureSensorPlugin::GetModelPose( + const gz::sim::Entity & modelEntity, gz::sim::EntityComponentManager & ecm) +{ + const auto * poseComp = ecm.Component(modelEntity); + if (poseComp) + { + return poseComp->Data(); + } + else + { + gzerr << "Pose component not found for entity: " << modelEntity << std::endl; + return gz::math::Pose3d::Zero; + } +} + +void SubseaPressureSensorPlugin::PreUpdate( + const gz::sim::UpdateInfo & _info, gz::sim::EntityComponentManager & _ecm) +{ + // Get model pose + gz::math::Pose3d sea_pressure_sensor_pos = GetModelPose(this->dataPtr->modelEntity, _ecm); + double depth = std::abs(sea_pressure_sensor_pos.Z()); + this->dataPtr->pressure = this->dataPtr->standardPressure; + if (depth >= 0) + { + this->dataPtr->pressure += depth * this->dataPtr->kPaPerM; + } + + // not adding gaussian noise for now, Future Work (TODO) + // pressure += this->dataPtr->GetGaussianNoise(this->dataPtr->noiseAmp); + this->dataPtr->pressure += this->dataPtr->noiseAmp; // noiseAmp is 0.0 + + // double inferredDepth = 0.0; + if (this->dataPtr->estimateDepth) + { + this->dataPtr->inferredDepth = + (this->dataPtr->pressure - this->dataPtr->standardPressure) / this->dataPtr->kPaPerM; + } +} + +void SubseaPressureSensorPlugin::PostUpdate( + const gz::sim::UpdateInfo & _info, const gz::sim::EntityComponentManager & _ecm) +{ + this->dataPtr->lastMeasurementTime = _info.simTime; + + // Publishing Sea_Pressure and depth estimate on gazebo topic + gz::msgs::FluidPressure gzPressureMsg; + gzPressureMsg.set_pressure(this->dataPtr->pressure); + gzPressureMsg.set_variance(this->dataPtr->noiseSigma * this->dataPtr->noiseSigma); + + // Publishing the pressure message + this->dataPtr->gz_pressure_sensor_pub.Publish(gzPressureMsg); + + // Publishing Sea_Pressure on Ros Topic + sensor_msgs::msg::FluidPressure rosPressureMsg; + rosPressureMsg.header.stamp.sec = + std::chrono::duration_cast(_info.simTime).count(); // Time in seconds + rosPressureMsg.header.stamp.nanosec = + std::chrono::duration_cast(_info.simTime).count() % + 1000000000; // Time in nanoseconds + rosPressureMsg.fluid_pressure = this->dataPtr->pressure; + rosPressureMsg.variance = this->dataPtr->noiseSigma * this->dataPtr->noiseSigma; + this->dataPtr->ros_pressure_sensor_pub->publish(rosPressureMsg); + + // publishing depth message + if (this->dataPtr->estimateDepth) + { + geometry_msgs::msg::PointStamped rosDepthMsg; + rosDepthMsg.point.z = this->dataPtr->inferredDepth; + rosDepthMsg.header.stamp.sec = + std::chrono::duration_cast(this->dataPtr->lastMeasurementTime).count(); + this->dataPtr->ros_depth_estimate_pub->publish(rosDepthMsg); + } + + if (!_info.paused) + { + rclcpp::spin_some(this->rosNode); + + if (_info.iterations % 1000 == 0) + { + gzmsg << "dave_ros_gz_plugins::SubseaPressureSensorPlugin::PostUpdate" << std::endl; + } + } +} + +} // namespace dave_gz_sensor_plugins \ No newline at end of file diff --git a/gazebo/dave_gz_world_plugins/CMakeLists.txt b/gazebo/dave_gz_world_plugins/CMakeLists.txt new file mode 100644 index 00000000..a25e9e00 --- /dev/null +++ b/gazebo/dave_gz_world_plugins/CMakeLists.txt @@ -0,0 +1,174 @@ +cmake_minimum_required(VERSION 3.8) + +#Define the project name +project(dave_gz_world_plugins) + +find_package(ament_cmake REQUIRED) +find_package(Boost REQUIRED COMPONENTS system) +find_package(gz-cmake3 REQUIRED) +find_package(gz-plugin2 REQUIRED COMPONENTS register) +find_package(rclcpp REQUIRED) +find_package(std_msgs REQUIRED) +find_package(gz-common5 REQUIRED COMPONENTS profiler) +find_package(gz-sim8 REQUIRED) +find_package(geometry_msgs REQUIRED) +find_package(dave_interfaces REQUIRED) +find_package(sensor_msgs REQUIRED) +find_package(Protobuf REQUIRED) +find_package(gz-msgs10 REQUIRED) +find_package(ament_index_cpp REQUIRED) + +# Set version variables with gazebo Harmonic +set(GZ_PLUGIN_VER ${gz-plugin2_VERSION_MAJOR}) +set(GZ_COMMON_VER ${gz-common5_VERSION_MAJOR}) +set(GZ_SIM_VER ${gz-sim8_VERSION_MAJOR}) +set(GZ_MSGS_VER ${gz-msgs10_VERSION_MAJOR}) + +message(STATUS "compiling against Gazebo Harmonic") + +# Define a variable 'GZ_MSGS_VER' holding the version number +set(GZ_MSGS_VER ${gz-msgs10_VERSION_MAJOR}) + +# Define a variable 'MSGS_PROTOS' listing the .proto files +set(MSGS_PROTOS ${CMAKE_CURRENT_SOURCE_DIR}/proto/dave_gz_world_plugins_msgs/msgs/StratifiedCurrentVelocity.proto) + +# Example of custom messages that depend on gz.msgs +set(MSGS_PROTOS + ${CMAKE_CURRENT_SOURCE_DIR}/proto/dave_gz_world_plugins_msgs/msgs/StratifiedCurrentVelocity.proto +) + +gz_msgs_generate_messages( + # The cmake target to be generated for libraries/executables to link + TARGET msgs # pressure_sensor_msgs_gen + # TARGET dave_gz_world_plugins_msgs + # The protobuf package to generate (Typically based on the path) + PROTO_PACKAGE "dave_gz_world_plugins_msgs.msgs" + + # The path to the base directory of the proto files + # All import paths should be relative to this (eg gz/custom_msgs/vector3d.proto) + MSGS_PATH ${CMAKE_CURRENT_SOURCE_DIR}/proto + + # List of proto files to generate + MSGS_PROTOS ${MSGS_PROTOS} + + # List of message targets this library imports from + # DEPENDENCIES gz_msgs_gen + # Dependency on gz-msgs + DEPENDENCIES gz-msgs${GZ_MSGS_VER}::gz-msgs${GZ_MSGS_VER} +) + +add_library(OceanCurrentWorldPlugin SHARED + src/OceanCurrentWorldPlugin.cc +) +add_library(gauss_markov_process SHARED + src/gauss_markov_process.cc +) +add_library(tidal_oscillation SHARED + src/tidal_oscillation.cc +) + +target_include_directories(OceanCurrentWorldPlugin + PUBLIC + $ + $ + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src + include ${dave_interfaces_INCLUDE_DIRS} +) +target_include_directories(gauss_markov_process + PUBLIC + $ + $ + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src +) +target_include_directories(tidal_oscillation + PUBLIC + $ + $ + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src +) + +# target_link_libraries(OceanCurrentWorldPlugin +# gz-sim${GZ_SIM_VER}::gz-sim${GZ_SIM_VER} +# ) + +target_link_libraries(OceanCurrentWorldPlugin + gz-sim${GZ_SIM_VER}::gz-sim${GZ_SIM_VER} + gauss_markov_process # Add this line + tidal_oscillation + dave_gz_world_plugins-msgs +) +target_link_libraries(gauss_markov_process + gz-sim${GZ_SIM_VER}::gz-sim${GZ_SIM_VER} +) +target_link_libraries(tidal_oscillation + gz-sim${GZ_SIM_VER}::gz-sim${GZ_SIM_VER} +) + +ament_target_dependencies(OceanCurrentWorldPlugin + rclcpp + std_msgs + geometry_msgs + dave_interfaces + ament_index_cpp + gz-msgs${GZ_MSGS_VER} +) + +ament_target_dependencies(gauss_markov_process + rclcpp + std_msgs + geometry_msgs + dave_interfaces +) + +ament_target_dependencies(tidal_oscillation + rclcpp + std_msgs + geometry_msgs + dave_interfaces +) + +# Install targets +install( + TARGETS OceanCurrentWorldPlugin gauss_markov_process tidal_oscillation dave_gz_world_plugins-msgs + EXPORT export_${PROJECT_NAME} + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + RUNTIME DESTINATION bin + INCLUDES DESTINATION include +) + +# Install headers +install(DIRECTORY include/ + DESTINATION include/${PROJECT_NAME} +) + +ament_export_include_directories("include/${PROJECT_NAME}") +ament_export_targets(export_${PROJECT_NAME} HAS_LIBRARY_TARGET) +ament_export_dependencies( + gz-cmake3 + gz-plugin2 + gz-msgs10 + gz-common5 + gz-sim8 + geometry_msgs + sensor_msgs + std_msgs + dave_interfaces + rclcpp +) + +# Environment hooks +ament_environment_hooks( + "${CMAKE_CURRENT_SOURCE_DIR}/hooks/${PROJECT_NAME}.dsv.in") + +# Testing setup +if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + ament_lint_auto_find_test_dependencies() +endif() + +# Configure ament +ament_package() diff --git a/gazebo/dave_gz_world_plugins/hooks/dave_gz_world_plugins.dsv.in b/gazebo/dave_gz_world_plugins/hooks/dave_gz_world_plugins.dsv.in new file mode 100644 index 00000000..5e60e0e3 --- /dev/null +++ b/gazebo/dave_gz_world_plugins/hooks/dave_gz_world_plugins.dsv.in @@ -0,0 +1 @@ +prepend-non-duplicate;GZ_SIM_SYSTEM_PLUGIN_PATH;lib/@PROJECT_NAME@/ \ No newline at end of file diff --git a/gazebo/dave_gz_world_plugins/include/dave_gz_world_plugins/OceanCurrentWorldPlugin.hh b/gazebo/dave_gz_world_plugins/include/dave_gz_world_plugins/OceanCurrentWorldPlugin.hh new file mode 100644 index 00000000..68765759 --- /dev/null +++ b/gazebo/dave_gz_world_plugins/include/dave_gz_world_plugins/OceanCurrentWorldPlugin.hh @@ -0,0 +1,118 @@ +#ifndef DAVE_GZ_WORLD_PLUGINS__OCEAN_CURRENT_WORLD_PLUGIN_HH_ +#define DAVE_GZ_WORLD_PLUGINS__OCEAN_CURRENT_WORLD_PLUGIN_HH_ + +#include +#include +#include +#include "dave_gz_world_plugins_msgs/msgs/StratifiedCurrentVelocity.pb.h" + +// #include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +namespace dave_gz_world_plugins +{ +class OceanCurrentWorldPlugin : public gz::sim::System, + public gz::sim::ISystemConfigure, + public gz::sim::ISystemUpdate, + public gz::sim::ISystemPostUpdate +{ +public: + OceanCurrentWorldPlugin(); + ~OceanCurrentWorldPlugin() override; + + // ---------------------------------------------- + + void Configure( + const gz::sim::Entity & _entity, const std::shared_ptr & _sdf, + gz::sim::EntityComponentManager & _ecm, gz::sim::EventManager & _eventMgr); + + void LoadTidalOscillationDatabase(); + + void LoadStratifiedCurrentDatabase(); + + void LoadGlobalCurrentConfig(); + + // ---------------------------------------------- + + void Update(const gz::sim::UpdateInfo & _info, gz::sim::EntityComponentManager & _ecm); + + // ---------------------------------------------- + + void PostUpdate(const gz::sim::UpdateInfo & _info, const gz::sim::EntityComponentManager & _ecm); + + void PublishCurrentVelocity(); + + void PublishStratifiedCurrentVelocity(); + + // ---------------------------------------------- + + struct SharedData + { + // Gauss-Markov process instances for current models + dave_gz_world_plugins::GaussMarkovProcess currentHorzAngleModel; // Horizontal angle + dave_gz_world_plugins::GaussMarkovProcess currentVelModel; // Velocity + dave_gz_world_plugins::GaussMarkovProcess currentVertAngleModel; // Vertical angle + + // Stratified current database and models + std::vector stratifiedDatabase; // Database values for stratified currents + std::vector> + stratifiedCurrentModels; // Stratified current models + + // Tidal harmonic flag + bool tidalHarmonicFlag; + + // Current velocity information + gz::math::Vector3d currentVelocity; // Current linear velocity vector + std::vector + currentStratifiedVelocity; // Depth-specific linear velocity vectors for stratified current + + // Tidal harmonic data (M2, S2, N2 constituents) + double M2_amp, M2_phase, M2_speed; // M2 tidal constituent + double S2_amp, S2_phase, S2_speed; // S2 tidal constituent + double N2_amp, N2_phase, N2_speed; // N2 tidal constituent + + // Tidal oscillation mean directions + double ebbDirection; // Mean ebb direction + double floodDirection; // Mean flood direction + + // Tidal oscillation world start time (GMT) + int world_start_time_day; + int world_start_time_month; + int world_start_time_year; + int world_start_time_hour; + int world_start_time_minute; + + // Topics + std::string currentVelocityTopic; + std::string stratifiedCurrentVelocityTopic; + // std::string vehicleDepthTopic; + + // Date and speed information + std::vector> dateGMT; // Date in GMT (year, month, day, hour, minute) + std::vector speedcmsec; // Speed in cm/sec + }; + + // std::shared_ptr sharedDataPtr = std::make_shared(); // (TODO) + std::shared_ptr sharedDataPtr; + +private: + // std::shared_ptr ros_node_; + + struct PrivateData; + std::unique_ptr dataPtr; +}; + +} // namespace dave_gz_world_plugins + +#endif // DAVE_GZ_WORLD_PLUGINS__OCEAN_CURRENT_WORLD_PLUGIN_HH_ diff --git a/gazebo/dave_gz_world_plugins/include/dave_gz_world_plugins/gauss_markov_process.hh b/gazebo/dave_gz_world_plugins/include/dave_gz_world_plugins/gauss_markov_process.hh new file mode 100644 index 00000000..fbc1736e --- /dev/null +++ b/gazebo/dave_gz_world_plugins/include/dave_gz_world_plugins/gauss_markov_process.hh @@ -0,0 +1,86 @@ +#ifndef DAVE_GZ_WORLD_PLUGINS__GAUSS_MARKOV_PROCESS_HH_ +#define DAVE_GZ_WORLD_PLUGINS__GAUSS_MARKOV_PROCESS_HH_ + +#include +#include +#include +#include +#include +#include +#include + +namespace dave_gz_world_plugins +{ +/// \brief Implementation of a Gauss-Markov process to model the current +/// velocity and direction according to [1] +/// [1] Fossen, Thor I. Handbook of marine craft hydrodynamics and motion +/// control. John Wiley & Sons, 2011. +class GaussMarkovProcess +{ + /// \brief Class constructor +public: + GaussMarkovProcess(); + + /// \brief Resets the process parameters +public: + void Reset(); + /// \brief Sets all the necessary parameters for the computation + /// \param _mean Mean value + /// \param _min Minimum limit + /// \param _max Maximum limit + /// \param _mu Process constant + /// \param _noise Amplitude for the Gaussian white noise + /// \return True, if all parameters were valid +public: + bool SetModel(double _mean, double _min, double _max, double _mu = 0, double _noise = 0); + + /// \brief Set mean process value + /// \param _mean New mean value + /// \return True, if value inside the limit range +public: + bool SetMean(double _mean); + + /// \brief Process variable +public: + double var; + + /// \brief Mean process value +public: + double mean; + + /// \brief Minimum limit for the process variable +public: + double min; + + /// \brief Maximum limit for the process variable +public: + double max; + + /// \brief Process constant, if zero, process becomes a random walk +public: + double mu; + + /// \brief Gaussian white noise amplitude +public: + double noiseAmp; + + /// \brief Timestamp for the last update +public: + double lastUpdate; + + /// \brief State storage for the random number generator +private: + unsigned int randSeed; + + /// \brief Update function for a new time stamp + /// \param _time Current time stamp +public: + double Update(double _time); + + /// \brief Print current model parameters +public: + void Print(); +}; +} // namespace dave_gz_world_plugins + +#endif // DAVE_GZ_WORLD_PLUGINS__GAUSS_MARKOV_PROCESS_HH_ diff --git a/gazebo/dave_gz_world_plugins/include/dave_gz_world_plugins/tidal_oscillation.hh b/gazebo/dave_gz_world_plugins/include/dave_gz_world_plugins/tidal_oscillation.hh new file mode 100644 index 00000000..f486bfbe --- /dev/null +++ b/gazebo/dave_gz_world_plugins/include/dave_gz_world_plugins/tidal_oscillation.hh @@ -0,0 +1,104 @@ +#ifndef DAVE_GZ_WORLD_PLUGINS__TIDAL_OSCILLATION_HH_ +#define DAVE_GZ_WORLD_PLUGINS__TIDAL_OSCILLATION_HH_ + +#include +#include +#include +#include +#include +#include +#include + +// #include + +namespace dave_gz_world_plugins +{ +/// \brief Interpolation of NOAA data for Tidal Oscillation feature +class TidalOscillation +{ + /// \brief Class constructor +public: + TidalOscillation(); + + /// \brief Resets the process parameters +public: + void Reset(); + + /// \brief Prepare the data for interpolation +public: + void Initiate(bool _harmonicConstituents); + + /// \brief Translate datetime string to datenum +public: + double TranslateDate(std::array _datetime); + + /// \brief Input Datenum data +public: + std::vector> dateGMT; + + /// \brief Input Tidal data +public: + std::vector speedcmsec; + + /// \brief Input Datenum data +public: + std::vector datenum; + + /// \brief Bool for method type +public: + bool harmonicConstituent; + + /// \brief Tidal current harmonic constituents +public: + double M2_amp; + +public: + double M2_phase; + +public: + double M2_speed; + +public: + double S2_amp; + +public: + double S2_phase; + +public: + double S2_speed; + +public: + double N2_amp; + +public: + double N2_phase; + +public: + double N2_speed; + + /// \brief Input Tidal direction +public: + double ebbDirection; + +public: + double floodDirection; + + /// \brief Input world start time +public: + std::array worldStartTime; + +public: + double worldStartTime_num; + + /// \brief Update function for a new time stamp + /// \param _time Current time stamp +public: + std::pair Update(double _time, double _currentDepthRatio); + + /// \brief save current state (Flood: true, Ebb: false) +public: + bool currentType; +}; +} // namespace dave_gz_world_plugins + +#endif // DAVE_GZ_WORLD_PLUGINS__TIDAL_OSCILLATION_HH_S diff --git a/gazebo/dave_gz_world_plugins/package.xml b/gazebo/dave_gz_world_plugins/package.xml new file mode 100644 index 00000000..7a66c865 --- /dev/null +++ b/gazebo/dave_gz_world_plugins/package.xml @@ -0,0 +1,32 @@ + + + dave_gz_world_plugins + 0.0.0 + The dave_gz_world_plugins + Gaurav Kumar + TODO: License declaration + ament_cmake + + protobuf + rosidl_default_generators + gz_ros + + + ament_index_cpp + ament_index_cpp + + protobuf + rosidl_default_runtime + gz_dev + gz_msgs + rclcpp + std_msgs + dave_interfaces + sensor_msgs + geometry_msgs + ament_lint_auto + ament_lint_common + + ament_cmake + + \ No newline at end of file diff --git a/gazebo/dave_gz_world_plugins/proto/dave_gz_world_plugins_msgs/msgs/StratifiedCurrentVelocity.proto b/gazebo/dave_gz_world_plugins/proto/dave_gz_world_plugins_msgs/msgs/StratifiedCurrentVelocity.proto new file mode 100644 index 00000000..7a4fba1a --- /dev/null +++ b/gazebo/dave_gz_world_plugins/proto/dave_gz_world_plugins_msgs/msgs/StratifiedCurrentVelocity.proto @@ -0,0 +1,10 @@ +syntax = "proto3"; +package dave_gz_world_plugins_msgs.msgs; +import "gz/msgs/vector3d.proto"; +// import "any.proto"; + +message StratifiedCurrentVelocity +{ + repeated gz.msgs.Vector3d velocity = 1; + repeated double depth = 2; +} diff --git a/gazebo/dave_gz_world_plugins/src/OceanCurrentWorldPlugin.cc b/gazebo/dave_gz_world_plugins/src/OceanCurrentWorldPlugin.cc new file mode 100644 index 00000000..42f2ee82 --- /dev/null +++ b/gazebo/dave_gz_world_plugins/src/OceanCurrentWorldPlugin.cc @@ -0,0 +1,849 @@ +// Include the necessary headers for Ocean Current Plugin +#include "dave_gz_world_plugins/OceanCurrentWorldPlugin.hh" + +// Include messages for Stratified Current Velocity +#include + +// Include Gazebo and Ignition libraries +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Boost libraries for string manipulation, binding, and shared pointers +#include +#include +#include +#include + +// Other necessary libraries +#include +#include +#include +#include +#include + +// AMENT library for package directory functions +#include + +// Custom plugin headers +#include "dave_gz_world_plugins/gauss_markov_process.hh" // For Gauss-Markov process +#include "dave_gz_world_plugins/tidal_oscillation.hh" // For tidal oscillation modeling + +GZ_ADD_PLUGIN( + dave_gz_world_plugins::OceanCurrentWorldPlugin, gz::sim::System, + dave_gz_world_plugins::OceanCurrentWorldPlugin::ISystemConfigure, + dave_gz_world_plugins::OceanCurrentWorldPlugin::ISystemUpdate, + dave_gz_world_plugins::OceanCurrentWorldPlugin::ISystemPostUpdate) + +namespace dave_gz_world_plugins +{ +struct OceanCurrentWorldPlugin::PrivateData +{ + // Gazebo Simulation and World Components + gz::sim::World world{gz::sim::kNullEntity}; // Gazebo world instance + sdf::ElementPtr sdf; // Pointer to the SDF element + bool hasSurface; // Flag to check if surface is present + + // Communication Node for Gazebo + std::shared_ptr gz_node; // Transport node for communication + + // Publishers + gz::transport::Node::Publisher gz_node_cvel_world_pub; // Publisher for current velocity + + // Publishers + gz::transport::Node::Publisher + gz_node_scvel_world_pub; // Publisher for Stratified current velocity + + // Subscribers + gz::transport::Node subscriber; // Subscriber for vehicle depth + + // Database File Paths + std::string databaseFilePath; // Path to ocean current database (CSV file) + std::string tidalFilePath; // Path to tidal oscillation database (TXT file) + + // Namespace for Topics and Services + std::string ns; // Namespace for topics and services + + // Tidal Oscillation Variables + bool tideFlag; + dave_gz_world_plugins::TidalOscillation tide; + + // Timing + std::chrono::steady_clock::duration lastUpdate{0}; + + // Stratified Current Database Path + std::string db_path; // Path to the stratified current database + + // ROS 2 Node + std::shared_ptr rosNode; +}; + +OceanCurrentWorldPlugin::OceanCurrentWorldPlugin() +: dataPtr(std::make_unique()), sharedDataPtr(std::shared_ptr()) +{ + this->sharedDataPtr = std::make_shared(); +} + +///////////////////////////////////////////////// +OceanCurrentWorldPlugin::~OceanCurrentWorldPlugin() = default; +// OceanCurrentWorldPlugin::~OceanCurrentWorldPlugin() { this->dataPtr->rosNode.reset(); } + +// ---------------------------------------------- + +void OceanCurrentWorldPlugin::Configure( + const gz::sim::Entity & _entity, const std::shared_ptr & _sdf, + gz::sim::EntityComponentManager & _ecm, gz::sim::EventManager & _eventMgr) +{ + this->dataPtr->world = gz::sim::World(_ecm.EntityByComponents(gz::sim::components::World())); + if (!this->dataPtr->world.Valid(_ecm)) // check + { + gzerr << "World entity not found" << std::endl; + return; + } + this->dataPtr->sdf = std::const_pointer_cast(_sdf); + + // Read the namespace for topics and services + this->dataPtr->ns = _sdf->Get("namespace"); + + gzmsg << "Loading underwater world plugin" << std::endl; + // Initializing the transport node + this->dataPtr->gz_node = std::make_shared(); + + // this->dataPtr->gz_node->Init(this->dataPtr->world.Name(_ecm)); // check if correct + + LoadGlobalCurrentConfig(); + LoadStratifiedCurrentDatabase(); + LoadGlobalCurrentConfig(); + + if (_sdf->HasElement("tidal_oscillation")) + { + if (_sdf->Get("tidal_oscillation")) + { + LoadTidalOscillationDatabase(); + } + } + else + { + gzmsg << "Tidal oscillation not enabled" << std::endl; + } + + gzmsg << "Underwater current plugin loaded!" << std::endl + << "\tWARNING: Current velocity calculated in the ENU frame" << std::endl; +} + +void OceanCurrentWorldPlugin::LoadTidalOscillationDatabase() +{ + this->dataPtr->tideFlag = true; + this->sharedDataPtr->tidalHarmonicFlag = false; + + sdf::ElementPtr tidalOscillationParams = this->dataPtr->sdf->GetElement("tidal_oscillation"); + sdf::ElementPtr tidalHarmonicParams; + + // Read the tidal oscillation parameter from the SDF file + if (tidalOscillationParams->HasElement("databasefilePath")) + { + this->dataPtr->tidalFilePath = tidalOscillationParams->Get("databasefilePath"); + gzmsg << "Tidal current database configuration found" << std::endl; + } + else + { + if (tidalOscillationParams->HasElement("harmonic_constituents")) + { + tidalHarmonicParams = tidalOscillationParams->GetElement("harmonic_constituents"); + gzmsg << "Tidal harmonic constituents " << "configuration found" << std::endl; + this->sharedDataPtr->tidalHarmonicFlag = true; + } + else + { + this->dataPtr->tidalFilePath = ament_index_cpp::get_package_share_directory("dave_worlds") + + "/worlds/ACT1951_predictionMaxSlack_2021-02-24.csv"; + } + } + + // Read the tidal oscillation direction from the SDF file + if (!(tidalOscillationParams->HasElement("mean_direction"))) + { + gzerr << "Tidal mean direction not defined" << std::endl; + } + + if (tidalOscillationParams->HasElement("mean_direction")) + { + sdf::ElementPtr elem = tidalOscillationParams->GetElement("mean_direction"); + if (elem->HasElement("ebb")) + { + this->sharedDataPtr->ebbDirection = elem->Get("ebb"); + } + else + { + gzerr << "Tidal mean ebb direction not defined" << std::endl; + } + + if (!(elem->HasElement("flood"))) + { + this->sharedDataPtr->floodDirection = elem->Get("flood"); + } + else + { + gzerr << "Tidal mean flood direction not defined" << std::endl; + } + } + + // Read the world start time (GMT) from the SDF file + if (!(tidalOscillationParams->HasElement("world_start_time_GMT"))) + { + gzerr << "World start time (GMT) not defined" << std::endl; + } + + if (tidalOscillationParams->HasElement("world_start_time_GMT")) + { + sdf::ElementPtr elem = tidalOscillationParams->GetElement("world_start_time_GMT"); + + if (elem->HasElement("day")) + { + this->sharedDataPtr->world_start_time_day = elem->Get("day"); + } + else + { + gzerr << "World start time (day) not defined" << std::endl; + } + + if (elem->HasElement("month")) + { + this->sharedDataPtr->world_start_time_month = elem->Get("month"); + } + else + { + gzerr << "World start time (month) not defined" << std::endl; + } + + if (elem->HasElement("year")) + { + this->sharedDataPtr->world_start_time_year = elem->Get("year"); + } + else + { + gzerr << "World start time (year) not defined" << std::endl; + } + + if (elem->HasElement("hour")) + { + this->sharedDataPtr->world_start_time_hour = elem->Get("hour"); + } + else + + { + gzerr << "World start time (hour) not defined" << std::endl; + } + + if (elem->HasElement("minute")) + { + this->sharedDataPtr->world_start_time_minute = elem->Get("minute"); + } + else + { + this->sharedDataPtr->world_start_time_minute = 0; + } + } + + if (this->sharedDataPtr->tidalHarmonicFlag) + { + // Read harmonic constituents + if (tidalHarmonicParams->HasElement("M2")) + { + sdf::ElementPtr M2Params = tidalHarmonicParams->GetElement("M2"); + this->sharedDataPtr->M2_amp = M2Params->Get("amp"); + this->sharedDataPtr->M2_phase = M2Params->Get("phase"); + this->sharedDataPtr->M2_speed = M2Params->Get("speed"); + } + else + { + gzerr << "Harcomnic constituents M2 not found" << std::endl; + } + + if (tidalHarmonicParams->HasElement("S2")) + { + sdf::ElementPtr S2Params = tidalHarmonicParams->GetElement("S2"); + this->sharedDataPtr->S2_amp = S2Params->Get("amp"); + this->sharedDataPtr->S2_phase = S2Params->Get("phase"); + this->sharedDataPtr->S2_speed = S2Params->Get("speed"); + } + else + { + gzerr << "Harcomnic constituents S2 not found" << std::endl; + } + + if (tidalHarmonicParams->HasElement("N2")) + { + sdf::ElementPtr N2Params = tidalHarmonicParams->GetElement("N2"); + this->sharedDataPtr->N2_amp = N2Params->Get("amp"); + this->sharedDataPtr->N2_phase = N2Params->Get("phase"); + this->sharedDataPtr->N2_speed = N2Params->Get("speed"); + } + else + { + gzerr << "Harcomnic constituents N2 not found" << std::endl; + } + + gzmsg << "Tidal harmonic constituents loaded : " << std::endl; + gzmsg << "M2 amp: " << this->sharedDataPtr->M2_amp + << " phase: " << this->sharedDataPtr->M2_phase + << " speed: " << this->sharedDataPtr->M2_speed << std::endl; + gzmsg << "S2 amp: " << this->sharedDataPtr->S2_amp + << " phase: " << this->sharedDataPtr->S2_phase + << " speed: " << this->sharedDataPtr->S2_speed << std::endl; + gzmsg << "N2 amp: " << this->sharedDataPtr->N2_amp + << " phase: " << this->sharedDataPtr->N2_phase + << " speed: " << this->sharedDataPtr->N2_speed << std::endl; + } + else + { + // Read database + std::ifstream csvFile; + std::string line; + csvFile.open(this->dataPtr->tidalFilePath); + if (!csvFile) + { + gz::common::SystemPaths * paths = new gz::common::SystemPaths(); + this->dataPtr->tidalFilePath = paths->FindFile(this->dataPtr->tidalFilePath, true); + csvFile.open(this->dataPtr->tidalFilePath); + } + + if (!csvFile) + { + gzerr << "Tidal Oscillation database file does not exist" << std::endl; + } + + gzmsg << "Tidal Oscillation Database loaded : " << this->dataPtr->tidalFilePath << std::endl; + + // skip the first line + getline(csvFile, line); + while (getline(csvFile, line)) + { + if (line.empty()) // skip empty lines: + { + continue; + } + std::istringstream iss(line); + std::string lineStream; + std::string::size_type sz; + std::vector row; + std::array tmpDateArray; + while (getline(iss, lineStream, ',')) + { + row.push_back(lineStream); + } + if (strcmp(row[1].c_str(), " slack")) // skip 'slack' category + { + tmpDateArray[0] = std::stoi(row[0].substr(0, 4)); + tmpDateArray[1] = std::stoi(row[0].substr(5, 7)); + tmpDateArray[2] = std::stoi(row[0].substr(8, 10)); + tmpDateArray[3] = std::stoi(row[0].substr(11, 13)); + tmpDateArray[4] = std::stoi(row[0].substr(14, 16)); + this->sharedDataPtr->dateGMT.push_back(tmpDateArray); + + this->sharedDataPtr->speedcmsec.push_back(stold(row[2], &sz)); + } + } + csvFile.close(); + + // Eliminate data with same consecutive type + std::vector duplicated; + for (int i = 0; i < this->sharedDataPtr->dateGMT.size() - 1; i++) + { + // delete latter if same sign + if ( + ((this->sharedDataPtr->speedcmsec[i] > 0) - (this->sharedDataPtr->speedcmsec[i] < 0)) == + ((this->sharedDataPtr->speedcmsec[i + 1] > 0) - + (this->sharedDataPtr->speedcmsec[i + 1] < 0))) + { + duplicated.push_back(i + 1); + } + } + int eraseCount = 0; + for (int i = 0; i < duplicated.size(); i++) + { + this->sharedDataPtr->dateGMT.erase( + this->sharedDataPtr->dateGMT.begin() + duplicated[i] - eraseCount); + this->sharedDataPtr->speedcmsec.erase( + this->sharedDataPtr->speedcmsec.begin() + duplicated[i] - eraseCount); + eraseCount++; + } + } +} + +///////////////////////////////////////////////// +void OceanCurrentWorldPlugin::LoadStratifiedCurrentDatabase() +{ + sdf::ElementPtr transientCurrentParams; + + if (this->dataPtr->sdf->HasElement("transient_current")) + { + transientCurrentParams = this->dataPtr->sdf->GetElement("transient_current"); + } + else + { + gzerr << "Transient current configuration not available" << std::endl; + } + + if (transientCurrentParams->HasElement("topic_stratified")) + { + this->sharedDataPtr->stratifiedCurrentVelocityTopic = + transientCurrentParams->Get("topic_stratified"); + } + else + { + this->sharedDataPtr->stratifiedCurrentVelocityTopic = "stratified_current_velocity"; + } + + if (this->sharedDataPtr->stratifiedCurrentVelocityTopic.empty()) + { + gzerr << "Empty stratified ocean current velocity topic" << std::endl; + } + + // Read the depth dependent ocean current file path from the SDF file + if (transientCurrentParams->HasElement("databasefilePath")) + { + this->dataPtr->databaseFilePath = ament_index_cpp::get_package_share_directory("dave_worlds") + + "/worlds/" + + transientCurrentParams->Get("databasefilePath"); + } + else + { + this->dataPtr->databaseFilePath = ament_index_cpp::get_package_share_directory("dave_worlds") + + "/worlds/transientOceanCurrentDatabase.csv"; + } + + if (this->dataPtr->databaseFilePath.empty()) + { + gzerr << "Empty stratified ocean current database file path" << std::endl; + } + + gzmsg << this->dataPtr->databaseFilePath << std::endl; + + // Read database + std::ifstream csvFile; + std::string line; + csvFile.open(this->dataPtr->databaseFilePath); + if (!csvFile) + { + gz::common::SystemPaths * paths = new gz::common::SystemPaths(); + this->dataPtr->databaseFilePath = paths->FindFile(this->dataPtr->databaseFilePath, true); + csvFile.open(this->dataPtr->databaseFilePath); + } + + if (!csvFile) + { + gzerr << "Stratified Ocean database file does not exist" << std::endl; + } + + gzmsg << "Statified Ocean Current Database loaded : " << this->dataPtr->databaseFilePath + << std::endl; + + // skip the 3 lines + getline(csvFile, line); + getline(csvFile, line); + getline(csvFile, line); + while (getline(csvFile, line)) + { + if (line.empty()) // skip empty lines: + { + continue; + } + std::istringstream iss(line); + std::string lineStream; + std::string::size_type sz; + std::vector row; + while (getline(iss, lineStream, ',')) + { + row.push_back(stold(lineStream, &sz)); // convert to double + } + gz::math::Vector3d read; + read.X() = row[0]; + read.Y() = row[1]; + read.Z() = row[2]; + this->sharedDataPtr->stratifiedDatabase.push_back(read); + // gzmsg << "stratifiedDatabase: " << this->sharedDataPtr->stratifiedDatabase << std::endl; + // //testline (TODO) + + // Create Gauss-Markov processes for the stratified currents + // Means are the database-specified magnitudes & angles, and + // the other values come from the constant current models + // TODO: Vertical angle currently set to 0 (not in database) + dave_gz_world_plugins::GaussMarkovProcess magnitudeModel; + magnitudeModel.mean = hypot(row[1], row[0]); + magnitudeModel.var = magnitudeModel.mean; + magnitudeModel.max = this->sharedDataPtr->currentVelModel.max; + magnitudeModel.min = 0.0; + magnitudeModel.mu = this->sharedDataPtr->currentVelModel.mu; + magnitudeModel.noiseAmp = this->sharedDataPtr->currentVelModel.noiseAmp; + // magnitudeModel.lastUpdate = this->dataPtr->lastUpdate; + magnitudeModel.lastUpdate = std::chrono::duration(this->dataPtr->lastUpdate).count(); + + dave_gz_world_plugins::GaussMarkovProcess hAngleModel; + hAngleModel.mean = atan2(row[1], row[0]); + hAngleModel.var = hAngleModel.mean; + hAngleModel.max = M_PI; + hAngleModel.min = -M_PI; + hAngleModel.mu = this->sharedDataPtr->currentHorzAngleModel.mu; + hAngleModel.noiseAmp = this->sharedDataPtr->currentHorzAngleModel.noiseAmp; + hAngleModel.lastUpdate = std::chrono::duration(this->dataPtr->lastUpdate).count(); + + dave_gz_world_plugins::GaussMarkovProcess vAngleModel; + vAngleModel.mean = 0.0; + vAngleModel.var = vAngleModel.mean; + vAngleModel.max = M_PI / 2.0; + vAngleModel.min = -M_PI / 2.0; + vAngleModel.mu = this->sharedDataPtr->currentVertAngleModel.mu; + vAngleModel.noiseAmp = this->sharedDataPtr->currentVertAngleModel.noiseAmp; + vAngleModel.lastUpdate = std::chrono::duration(this->dataPtr->lastUpdate).count(); + + std::vector depthModels; + depthModels.push_back(magnitudeModel); + depthModels.push_back(hAngleModel); + depthModels.push_back(vAngleModel); + this->sharedDataPtr->stratifiedCurrentModels.push_back(depthModels); + // gzmsg << "stratifiedCurrentModels: " << this->sharedDataPtr->stratifiedCurrentModels << + // std::endl; //testline (TODO) + } + csvFile.close(); + + this->dataPtr->gz_node_scvel_world_pub = + this->dataPtr->gz_node->Advertise( + this->dataPtr->ns + "/" + this->sharedDataPtr->stratifiedCurrentVelocityTopic); + + gzmsg << "Stratified current velocity topic name: " + << this->dataPtr->ns + "/" + this->sharedDataPtr->stratifiedCurrentVelocityTopic + << std::endl; +} + +///////////////////////////////////////////////// +void OceanCurrentWorldPlugin::LoadGlobalCurrentConfig() +{ + // NOTE: The plugin currently requires stratified current, so the + // global current set up in this method is potentially + // inconsistent or redundant. + // Consider setting it up as one or the other, but not both? + + // Retrieve the velocity configuration, if existent + + sdf::ElementPtr currentVelocityParams; + if (this->dataPtr->sdf->HasElement("constant_current")) + { + currentVelocityParams = this->dataPtr->sdf->GetElement("constant_current"); + } + else + { + gzerr << "Current configuration not available" << std::endl; + } + + // Read the topic names from the SDF file + if (currentVelocityParams->HasElement("topic")) + { + this->sharedDataPtr->currentVelocityTopic = + this->dataPtr->ns + "/" + currentVelocityParams->Get("topic"); + } + else + { + this->sharedDataPtr->currentVelocityTopic = "current_velocity"; + } + + if (this->sharedDataPtr->currentVelocityTopic.empty()) + { + gzerr << "Empty ocean current velocity topic" << std::endl; + } + + if (currentVelocityParams->HasElement("velocity")) + { + sdf::ElementPtr elem = currentVelocityParams->GetElement("velocity"); + // this->sharedDataPtr = std::make_shared(); + if (elem->HasElement("mean")) + { + this->sharedDataPtr->currentVelModel.mean = elem->Get("mean"); + // this->sharedDataPtr->currentVelModel.mean = + // std::make_shared(elem->Get("mean")); + } + if (elem->HasElement("min")) + { + this->sharedDataPtr->currentVelModel.min = elem->Get("min"); + } + if (elem->HasElement("max")) + { + this->sharedDataPtr->currentVelModel.max = elem->Get("max"); + } + if (elem->HasElement("mu")) + { + this->sharedDataPtr->currentVelModel.mu = elem->Get("mu"); + } + if (elem->HasElement("noiseAmp")) + { + this->sharedDataPtr->currentVelModel.noiseAmp = elem->Get("noiseAmp"); + } + + if (!(this->sharedDataPtr->currentVelModel.min < this->sharedDataPtr->currentVelModel.max)) + { + gzerr << "Invalid current velocity limits" << std::endl; + } + + if (!(this->sharedDataPtr->currentVelModel.mean >= this->sharedDataPtr->currentVelModel.min)) + { + gzerr << "Mean velocity must be greater than minimum" << std::endl; + } + if (!(this->sharedDataPtr->currentVelModel.mean <= this->sharedDataPtr->currentVelModel.max)) + { + gzerr << "Mean velocity must be smaller than maximum" << std::endl; + } + + if (!(this->sharedDataPtr->currentVelModel.mu >= 0 && + this->sharedDataPtr->currentVelModel.mu < 1)) + { + gzerr << "Invalid process constant" << std::endl; + } + + if (!(this->sharedDataPtr->currentVelModel.noiseAmp < 1 && + this->sharedDataPtr->currentVelModel.noiseAmp >= 0)) + { + gzerr << "Noise amplitude has to be smaller than 1" << std::endl; + } + } + + this->sharedDataPtr->currentVelModel.var = this->sharedDataPtr->currentVelModel.mean; + gzmsg << "Current velocity [m/s] Gauss-Markov process model:" << std::endl; + this->sharedDataPtr->currentVelModel.Print(); + + if (currentVelocityParams->HasElement("horizontal_angle")) + { + sdf::ElementPtr elem = currentVelocityParams->GetElement("horizontal_angle"); + + if (elem->HasElement("mean")) + { + this->sharedDataPtr->currentHorzAngleModel.mean = elem->Get("mean"); + } + if (elem->HasElement("min")) + { + this->sharedDataPtr->currentHorzAngleModel.min = elem->Get("min"); + } + if (elem->HasElement("max")) + { + this->sharedDataPtr->currentHorzAngleModel.max = elem->Get("max"); + } + if (elem->HasElement("mu")) + { + this->sharedDataPtr->currentHorzAngleModel.mu = elem->Get("mu"); + } + if (elem->HasElement("noiseAmp")) + { + this->sharedDataPtr->currentHorzAngleModel.noiseAmp = elem->Get("noiseAmp"); + } + + if (!(this->sharedDataPtr->currentHorzAngleModel.min < + this->sharedDataPtr->currentHorzAngleModel.max)) + { + gzerr << "Invalid current horizontal angle limits" << std::endl; + } + + if (!(this->sharedDataPtr->currentHorzAngleModel.mean >= + this->sharedDataPtr->currentHorzAngleModel.min)) + { + gzerr << "Mean horizontal angle must be greater than minimum" << std::endl; + } + + if (!(this->sharedDataPtr->currentHorzAngleModel.mean <= + this->sharedDataPtr->currentHorzAngleModel.max)) + { + gzerr << "Mean horizontal angle must be smaller than maximum" << std::endl; + } + + if (!(this->sharedDataPtr->currentHorzAngleModel.mu >= 0 && + this->sharedDataPtr->currentHorzAngleModel.mu < 1)) + { + gzerr << "Invalid process constant" << std::endl; + } + + if (!(this->sharedDataPtr->currentHorzAngleModel.noiseAmp < 1 && + this->sharedDataPtr->currentHorzAngleModel.noiseAmp >= 0)) + { + gzerr << "Noise amplitude for horizontal angle has to be between 0 and 1" << std::endl; + } + } + + this->sharedDataPtr->currentHorzAngleModel.var = this->sharedDataPtr->currentHorzAngleModel.mean; + gzmsg << "Current velocity horizontal angle [rad] Gauss-Markov process model:" << std::endl; + this->sharedDataPtr->currentHorzAngleModel.Print(); + + if (currentVelocityParams->HasElement("vertical_angle")) + { + sdf::ElementPtr elem = currentVelocityParams->GetElement("vertical_angle"); + + if (elem->HasElement("mean")) + { + this->sharedDataPtr->currentVertAngleModel.mean = elem->Get("mean"); + } + if (elem->HasElement("min")) + { + this->sharedDataPtr->currentVertAngleModel.min = elem->Get("min"); + } + if (elem->HasElement("max")) + { + this->sharedDataPtr->currentVertAngleModel.max = elem->Get("max"); + } + if (elem->HasElement("mu")) + { + this->sharedDataPtr->currentVertAngleModel.mu = elem->Get("mu"); + } + if (elem->HasElement("noiseAmp")) + { + this->sharedDataPtr->currentVertAngleModel.noiseAmp = elem->Get("noiseAmp"); + } + + if (!(this->sharedDataPtr->currentVertAngleModel.min < + this->sharedDataPtr->currentVertAngleModel.max)) + { + gzerr << "Invalid current vertical angle limits" << std::endl; + } + + if (!(this->sharedDataPtr->currentVertAngleModel.mean >= + this->sharedDataPtr->currentVertAngleModel.min)) + { + gzerr << "Mean vertical angle must be greater than minimum" << std::endl; + } + + if (!(this->sharedDataPtr->currentVertAngleModel.mean <= + this->sharedDataPtr->currentVertAngleModel.max)) + { + gzerr << "Mean vertical angle must be smaller than maximum" << std::endl; + } + + if (!(this->sharedDataPtr->currentVertAngleModel.mu >= 0 && + this->sharedDataPtr->currentVertAngleModel.mu < 1)) + { + gzerr << "Invalid process constant" << std::endl; + } + + if (!(this->sharedDataPtr->currentVertAngleModel.noiseAmp < 1 && + this->sharedDataPtr->currentVertAngleModel.noiseAmp >= 0)) + { + gzerr << "Noise amplitude for vertical angle has to be between 0 and 1" << std::endl; + } + } + + this->sharedDataPtr->currentVertAngleModel.var = this->sharedDataPtr->currentVertAngleModel.mean; + gzmsg << "Current velocity vertical angle [rad] Gauss-Markov process model:" << std::endl; + this->sharedDataPtr->currentVertAngleModel.Print(); + + this->sharedDataPtr->currentVelModel.lastUpdate = + std::chrono::duration(this->dataPtr->lastUpdate).count(); + this->sharedDataPtr->currentHorzAngleModel.lastUpdate = + std::chrono::duration(this->dataPtr->lastUpdate).count(); + this->sharedDataPtr->currentVertAngleModel.lastUpdate = + std::chrono::duration(this->dataPtr->lastUpdate).count(); + + // Advertise the current velocity & stratified current velocity topics + this->dataPtr->gz_node_cvel_world_pub = this->dataPtr->gz_node->Advertise( + this->sharedDataPtr->currentVelocityTopic); + gzmsg << "Current velocity topic name: " << this->sharedDataPtr->currentVelocityTopic + << std::endl; +} + +// ---------------------------------------------- + +///////////////////////////////////////////////// +void OceanCurrentWorldPlugin::Update( + const gz::sim::UpdateInfo & _info, gz::sim::EntityComponentManager & _ecm) +{ + // Update the time + auto time = std::chrono::duration(_info.simTime).count(); + + // Calculate the flow velocity and the direction using the Gauss-Markov + // model + + // Update current velocity + double currentVelMag = this->sharedDataPtr->currentVelModel.Update(time); // (TODO) + // double currentVelMag = 1.00; + + // Update current horizontal direction around z axis of flow frame + double horzAngle = this->sharedDataPtr->currentHorzAngleModel.Update(time); // (TODO) + // double horzAngle = 0.3; + + // Update current horizontal direction around z axis of flow frame + // double vertAngle = 0.3; + double vertAngle = this->sharedDataPtr->currentVertAngleModel.Update(time); // (TODO) + + // Generating the current velocity vector as in the North-East-Down frame + this->sharedDataPtr->currentVelocity = gz::math::Vector3d( + currentVelMag * cos(horzAngle) * cos(vertAngle), + currentVelMag * sin(horzAngle) * cos(vertAngle), currentVelMag * sin(vertAngle)); + + gzmsg << "out DepthVel"; // testline (TODO) + // Generate the depth-specific velocities + this->sharedDataPtr->currentStratifiedVelocity.clear(); + for (int i = 0; i < this->sharedDataPtr->stratifiedDatabase.size(); i++) + { + gzmsg << "enter DepthVel"; // testline (TODO) + double depth = this->sharedDataPtr->stratifiedDatabase[i].Z(); + currentVelMag = this->sharedDataPtr->stratifiedCurrentModels[i][0].Update(time); + horzAngle = this->sharedDataPtr->stratifiedCurrentModels[i][1].Update(time); + vertAngle = this->sharedDataPtr->stratifiedCurrentModels[i][2].Update(time); + gz::math::Vector4d depthVel( + currentVelMag * cos(horzAngle) * cos(vertAngle), + currentVelMag * sin(horzAngle) * cos(vertAngle), currentVelMag * sin(vertAngle), depth); + gzmsg << "DepthVel: " << depthVel << std::endl; // testline (TODO) + this->sharedDataPtr->currentStratifiedVelocity.push_back(depthVel); + } +} + +// ---------------------------------------------- +///////////////////////////////////////////////// +void OceanCurrentWorldPlugin::PublishCurrentVelocity() +{ + gz::msgs::Vector3d currVel; + gz::msgs::Set( + &currVel, gz::math::Vector3d( + this->sharedDataPtr->currentVelocity.X(), this->sharedDataPtr->currentVelocity.Y(), + this->sharedDataPtr->currentVelocity.Z())); + this->dataPtr->gz_node_cvel_world_pub.Publish(currVel); +} + +///////////////////////////////////////////////// +void OceanCurrentWorldPlugin::PublishStratifiedCurrentVelocity() +{ + dave_gz_world_plugins_msgs::msgs::StratifiedCurrentVelocity stratcurrentVel; // check + for (std::vector::iterator it = + this->sharedDataPtr->currentStratifiedVelocity.begin(); + it != this->sharedDataPtr->currentStratifiedVelocity.end(); + ++it) // currentStratifiedVelocity values defined where ? (TODO) + { + gz::msgs::Set(stratcurrentVel.add_velocity(), gz::math::Vector3d(it->X(), it->Y(), it->Z())); + // auto* velocity = stratcurrentVel.add_velocity(); + // velocity->set_x(it->X()); + // velocity->set_y(it->Y()); + // velocity->set_z(it->Z()); + stratcurrentVel.add_depth(it->W()); + } + if (stratcurrentVel.velocity_size() == 0) + { + return; + } + this->dataPtr->gz_node_scvel_world_pub.Publish(stratcurrentVel); +} + +///////////////////////////////////////////////// +void OceanCurrentWorldPlugin::PostUpdate( + const gz::sim::UpdateInfo & _info, const gz::sim::EntityComponentManager & _ecm) +{ + // Update time stamp + this->dataPtr->lastUpdate = _info.simTime; + PublishCurrentVelocity(); + PublishStratifiedCurrentVelocity(); +} +// ---------------------------------------------- + +} // namespace dave_gz_world_plugins \ No newline at end of file diff --git a/gazebo/dave_gz_world_plugins/src/gauss_markov_process.cc b/gazebo/dave_gz_world_plugins/src/gauss_markov_process.cc new file mode 100644 index 00000000..e23d9e64 --- /dev/null +++ b/gazebo/dave_gz_world_plugins/src/gauss_markov_process.cc @@ -0,0 +1,91 @@ +#include + +namespace dave_gz_world_plugins +{ +///////////////////////////////////////////////// +GaussMarkovProcess::GaussMarkovProcess() +{ + this->mean = 0; + this->min = -1; + this->max = 1; + this->mu = 0; + this->noiseAmp = 0; + this->lastUpdate = 0; + this->Reset(); + this->randSeed = std::time(NULL); +} + +///////////////////////////////////////////////// +void GaussMarkovProcess::Reset() { this->var = this->mean; } + +///////////////////////////////////////////////// +bool GaussMarkovProcess::SetMean(double _mean) +{ + if (this->min > _mean || this->max < _mean) + { + return false; + } + + this->mean = _mean; + this->Reset(); + return true; +} + +///////////////////////////////////////////////// +bool GaussMarkovProcess::SetModel(double _mean, double _min, double _max, double _mu, double _noise) +{ + if (_min >= _max) + { + return false; + } + if (_min > _mean || _max < _mean) + { + return false; + } + if (_noise < 0) + { + return false; + } + if (_mu < 0 || _mu > 1) + { + return false; + } + this->mean = _mean; + this->min = _min; + this->max = _max; + this->mu = _mu; + this->noiseAmp = _noise; + + this->Reset(); + return true; +} + +///////////////////////////////////////////////// +double GaussMarkovProcess::Update(double _time) +{ + double step = _time - this->lastUpdate; + double random = + static_cast(static_cast(rand_r(&this->randSeed)) / RAND_MAX) - 0.5; + this->var = (1 - step * this->mu) * this->var + this->noiseAmp * random; + if (this->var >= this->max) + { + this->var = this->max; + } + if (this->var <= this->min) + { + this->var = this->min; + } + this->lastUpdate = _time; + return this->var; +} + +///////////////////////////////////////////////// +void GaussMarkovProcess::Print() +{ + gzmsg << "\tMean = " << this->mean << std::endl + << "\tMin. Limit = " << this->min << std::endl + << "\tMax. Limit = " << this->max << std::endl + << "\tMu = " << this->mu << std::endl + << "\tNoise Amp. = " << this->noiseAmp << std::endl; +} +} // namespace dave_gz_world_plugins diff --git a/gazebo/dave_gz_world_plugins/src/tidal_oscillation.cc b/gazebo/dave_gz_world_plugins/src/tidal_oscillation.cc new file mode 100644 index 00000000..d3f94ad3 --- /dev/null +++ b/gazebo/dave_gz_world_plugins/src/tidal_oscillation.cc @@ -0,0 +1,165 @@ +#include + +#include + +namespace std +{ + +static int cumdays[] = {0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334}; +double calcdatenum(int year, int mon, int day, int hour, int imin, int sec, int mil) +{ + int tmp1, tmp2, tmp3; + double tmp4, tmp5; + double dNum; + + /* Calculate the serial date number:*/ + tmp1 = 365 * year + cumdays[mon] + day; + tmp2 = year / 4 - year / 100 + year / 400; + tmp3 = (year % 4 != 0) - (year % 100 != 0) + (year % 400 != 0); + tmp4 = static_cast(tmp1 + tmp2 + tmp3); + tmp5 = (hour * 3600000 + imin * 60000 + sec * 1000 + mil) / 86400000.0; + + dNum = tmp4 + tmp5; + + if (mon > 2) + { + if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) + { + dNum += 1.0; + } + } + + return (dNum); +} +} // namespace std + +namespace dave_gz_world_plugins +{ +///////////////////////////////////////////////// +TidalOscillation::TidalOscillation() {} + +///////////////////////////////////////////////// +void TidalOscillation::Reset() {} + +///////////////////////////////////////////////// +void TidalOscillation::Initiate(bool _harmonicConstituent) +{ + if (_harmonicConstituent) + { + this->harmonicConstituent = true; + } + else + { + int nData = this->speedcmsec.size(); + // Calculate datenum + if (this->dateGMT.size() != this->datenum.size()) + { + for (size_t i = 0; i < nData; i++) + { + this->datenum.push_back(TranslateDate(this->dateGMT[i])); + } + } + this->harmonicConstituent = false; + } + this->worldStartTime_num = TranslateDate(this->worldStartTime); + + // Make sure worldStarTime is in the range of database + // GZ_ASSERT((this->worldStartTime_num > this->datenum[0] + // || this->worldStartTime_num < this->datenum[this->datenum.size()]), + // "World Start Time (GMT) is not in the range of the database"); +} + +///////////////////////////////////////////////// +double TidalOscillation::TranslateDate(std::array _datetime) +{ + double datenumReturn; + + // Calculate datenum + datenumReturn = + std::calcdatenum(_datetime[0], _datetime[1], _datetime[2], _datetime[3], _datetime[4], 0, 0); + + return datenumReturn; +} + +///////////////////////////////////////////////// +std::pair TidalOscillation::Update(double _time, double _currentDepthRatio) +{ + std::pair currents; + currents.first = 0.5; + currents.second = 0.5; + double currentVelocity; + + // Calculate current time + double simTimePassed = (0 * 3600000 + 0 * 60000 + _time * 1000 + 0) / 86400000.0; + double currentTime = worldStartTime_num + simTimePassed; + + if (this->harmonicConstituent) + { + // Harmonic Constituents calculated in meters and GMT + // speed [deg/hour], phase [degrees], amplitude [meters] + double h_0 = 0.0; // mean height of water level above the datum + // Approx tidal current with 90 deg shift to height of the tide + double h_M2 = + M2_amp * cos( + (M2_speed / 180.0 * M_PI / 3600) * (currentTime * 86400000.0 / 1000.0) + + (M2_phase / 180 * M_PI) - (M_PI / 2.0)); + double h_S2 = + S2_amp * cos( + (S2_speed / 180.0 * M_PI / 3600) * (currentTime * 86400000.0 / 1000.0) + + (S2_phase / 180 * M_PI) - (M_PI / 2.0)); + double h_N2 = + N2_amp * cos( + (N2_speed / 180.0 * M_PI / 3600) * (currentTime * 86400000.0 / 1000.0) + + (N2_phase / 180 * M_PI) - (M_PI / 2.0)); + currentVelocity = h_0 + (h_M2 + h_S2 + h_N2); + } + else + { + // Search current time index from database + int currentI = 0; + for (size_t i = 0; i < this->datenum.size(); i++) + { + if (this->datenum[i] > currentTime) + { + currentI = i; + break; + } + } + + // Interpolate from database (linear) + // boost::math::barycentric_rational + // interp(datenum.data(), speedcmsec.data(), datenum.size()); + currentVelocity = (this->speedcmsec[currentI] - this->speedcmsec[currentI - 1]) / + (this->datenum[currentI] - this->datenum[currentI - 1]) * + (currentTime - this->datenum[currentI - 1]) + + this->speedcmsec[currentI - 1]; + + // Change units to m/s + currentVelocity = currentVelocity / 100.0; + } + + // Calculate current + if (currentVelocity > 0) // flood + { + currentType = true; + // north current velocity + currents.first = -cos(this->floodDirection / 180.0 * M_PI) * currentVelocity; + // east current velocity + currents.second = -sin(this->floodDirection / 180.0 * M_PI) * currentVelocity; + } + else // ebb + { + currentType = false; + // north current velocity + currents.first = -cos(this->ebbDirection / 180.0 * M_PI) * currentVelocity; + // east current velocity + currents.second = -sin(this->ebbDirection / 180.0 * M_PI) * currentVelocity; + } + + // Apply stratified current ratio + currents.first = currents.first * _currentDepthRatio; + currents.second = currents.second * _currentDepthRatio; + + return currents; // in m/s +} +} // namespace dave_gz_world_plugins diff --git a/gazebo/dave_ros_gz_plugins/CMakeLists.txt b/gazebo/dave_ros_gz_plugins/CMakeLists.txt index 7c33aafb..b009436c 100644 --- a/gazebo/dave_ros_gz_plugins/CMakeLists.txt +++ b/gazebo/dave_ros_gz_plugins/CMakeLists.txt @@ -11,6 +11,8 @@ find_package(gz-common5 REQUIRED COMPONENTS profiler) find_package(gz-sim8 REQUIRED) find_package(geometry_msgs REQUIRED) find_package(dave_interfaces REQUIRED) +find_package(dave_gz_world_plugins REQUIRED) +find_package(Boost REQUIRED COMPONENTS system) # Set version variables set(GZ_PLUGIN_VER ${gz-plugin2_VERSION_MAJOR}) @@ -19,14 +21,37 @@ set(GZ_SIM_VER ${gz-sim8_VERSION_MAJOR}) message(STATUS "Compiling against Gazebo Harmonic") +# Libraries add_library(SphericalCoords SHARED src/SphericalCoords.cc) +add_library(OceanCurrentPlugin SHARED src/OceanCurrentPlugin.cc) -target_include_directories(SphericalCoords PRIVATE include) +# Include directories +target_include_directories(SphericalCoords + PUBLIC + $ + $ + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src +) +target_include_directories(OceanCurrentPlugin + PUBLIC + $ + $ + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src + include ${dave_gz_world_plugins_INCLUDE_DIRS} + include ${dave_interfaces_INCLUDE_DIRS} +) +# Linking target_link_libraries(SphericalCoords - gz-sim${GZ_SIM_VER}::gz-sim${GZ_SIM_VER}) + gz-sim${GZ_SIM_VER}::gz-sim${GZ_SIM_VER} +) +target_link_libraries(OceanCurrentPlugin + gz-sim${GZ_SIM_VER}::gz-sim${GZ_SIM_VER} +) -# Specify dependencies for FullSystem using ament_target_dependencies +# Specify dependencies using ament_target_dependencies ament_target_dependencies(SphericalCoords dave_interfaces rclcpp @@ -34,21 +59,47 @@ ament_target_dependencies(SphericalCoords std_msgs ) -# Install targets -install(TARGETS SphericalCoords - DESTINATION lib/${PROJECT_NAME} +ament_target_dependencies(OceanCurrentPlugin + rclcpp + std_msgs + geometry_msgs + dave_interfaces + dave_gz_world_plugins ) # Install headers install(DIRECTORY include/ - DESTINATION include/ + DESTINATION include/${PROJECT_NAME} +) + +# Install targets +install( + TARGETS SphericalCoords OceanCurrentPlugin + EXPORT export_${PROJECT_NAME} + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + RUNTIME DESTINATION bin + INCLUDES DESTINATION include +) + +ament_export_include_directories("include/${PROJECT_NAME}") +ament_export_targets(export_${PROJECT_NAME} HAS_LIBRARY_TARGET) +ament_export_dependencies( + gz-cmake3 + gz-plugin2 + gz-common5 + gz-sim8 + geometry_msgs + std_msgs + dave_interfaces + dave_gz_world_plugins + rclcpp ) # Environment hooks -ament_environment_hooks( -"${CMAKE_CURRENT_SOURCE_DIR}/hooks/${PROJECT_NAME}.dsv.in") +ament_environment_hooks("${CMAKE_CURRENT_SOURCE_DIR}/hooks/${PROJECT_NAME}.dsv.in") -# Testing setup +# Optional: Testing setup if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) ament_lint_auto_find_test_dependencies() diff --git a/gazebo/dave_ros_gz_plugins/include/dave_ros_gz_plugins/OceanCurrentPlugin.hh b/gazebo/dave_ros_gz_plugins/include/dave_ros_gz_plugins/OceanCurrentPlugin.hh new file mode 100644 index 00000000..f8b73703 --- /dev/null +++ b/gazebo/dave_ros_gz_plugins/include/dave_ros_gz_plugins/OceanCurrentPlugin.hh @@ -0,0 +1,118 @@ +#ifndef DAVE_ROS_GZ_PLUGINS__OCEAN_CURRENT_PLUGIN_HH_ +#define DAVE_ROS_GZ_PLUGINS__OCEAN_CURRENT_PLUGIN_HH_ + +// Gazebo Simulation Related Headers +#include + +// ROS 2 Headers +#include +#include + +// Standard Library Headers +#include +#include +#include + +// Plugin-specific Headers +#include "dave_gz_world_plugins/OceanCurrentWorldPlugin.hh" + +// Dave Interfaces: Message Types +#include "dave_interfaces/msg/stratified_current_database.hpp" +#include "dave_interfaces/msg/stratified_current_velocity.hpp" + +// Dave Interfaces: Service Types +#include "dave_interfaces/srv/Get_Current_Model.hpp" +#include "dave_interfaces/srv/Get_Origin_Spherical_Coord.hpp" +#include "dave_interfaces/srv/Set_Current_Direction.hpp" +#include "dave_interfaces/srv/Set_Current_Model.hpp" +#include "dave_interfaces/srv/Set_Current_Velocity.hpp" +#include "dave_interfaces/srv/Set_Origin_Spherical_Coord.hpp" +#include "dave_interfaces/srv/Set_Stratified_Current_Direction.hpp" +#include "dave_interfaces/srv/Set_Stratified_Current_Velocity.hpp" + +// #include "dave_interfaces/srv/Stratified_Current_Database.hpp" +// #include "dave_interfaces/srv/Stratified_Current_Velocity.hpp" + +namespace dave_ros_gz_plugins +{ +class OceanCurrentPlugin : public gz::sim::System, + public gz::sim::ISystemConfigure, + public gz::sim::ISystemPostUpdate +{ +public: + OceanCurrentPlugin(); + ~OceanCurrentPlugin() override; + + // ---------------------------------------------- + + void Configure( + const gz::sim::Entity & _entity, const std::shared_ptr & _sdf, + gz::sim::EntityComponentManager & _ecm, gz::sim::EventManager & _eventMgr); + + // ---------------------------------------------- + + // void Update(const gz::sim::UpdateInfo & _info, const gz::sim::EntityComponentManager & _ecm); + // void PreUpdate( + // const gz::sim::UpdateInfo & _info, gz::sim::EntityComponentManager & _ecm) override; + + // ---------------------------------------------- + + void PostUpdate(const gz::sim::UpdateInfo & _info, const gz::sim::EntityComponentManager & _ecm); + + // ---------------------------------------------- + + bool UpdateHorzAngle( + const std::shared_ptr _req, + std::shared_ptr _res); + + bool UpdateStratHorzAngle( + const std::shared_ptr _req, + std::shared_ptr _res); + + bool UpdateVertAngle( + const std::shared_ptr _req, + std::shared_ptr _res); + + bool UpdateStratVertAngle( + const std::shared_ptr _req, + std::shared_ptr _res); + + bool UpdateCurrentVelocity( + const std::shared_ptr _req, + std::shared_ptr _res); + + bool UpdateStratCurrentVelocity( + const std::shared_ptr _req, + std::shared_ptr _res); + + bool GetCurrentVelocityModel( + const std::shared_ptr _req, + std::shared_ptr _res); + + bool GetCurrentHorzAngleModel( + const std::shared_ptr _req, + std::shared_ptr _res); + + bool GetCurrentVertAngleModel( + const std::shared_ptr _req, + std::shared_ptr _res); + + bool UpdateCurrentVelocityModel( + const std::shared_ptr _req, + std::shared_ptr _res); + + bool UpdateCurrentHorzAngleModel( + const std::shared_ptr _req, + std::shared_ptr _res); + + bool UpdateCurrentVertAngleModel( + const std::shared_ptr _req, + std::shared_ptr _res); + +private: + struct PrivateData; + std::unique_ptr dataPtr; +}; +} // namespace dave_ros_gz_plugins + +#endif // DAVE_ROS_GZ_PLUGINS__OCEAN_CURRENT_PLUGIN_HH_ \ No newline at end of file diff --git a/gazebo/dave_ros_gz_plugins/package.xml b/gazebo/dave_ros_gz_plugins/package.xml index b240b498..44bab929 100644 --- a/gazebo/dave_ros_gz_plugins/package.xml +++ b/gazebo/dave_ros_gz_plugins/package.xml @@ -4,11 +4,21 @@ 0.0.0 TODO: Package description lena + Gaurav Kumar TODO: License declaration ament_cmake + protobuf-dev rclcpp - std_msgs dave_interfaces + dave_gz_world_plugins + sensor_msgs + geometry_msgs + std_msgs + protobuf + message_generation + + protobuf + message_runtime ament_lint_auto ament_lint_common diff --git a/gazebo/dave_ros_gz_plugins/src/OceanCurrentPlugin.cc b/gazebo/dave_ros_gz_plugins/src/OceanCurrentPlugin.cc new file mode 100644 index 00000000..b3d39eb4 --- /dev/null +++ b/gazebo/dave_ros_gz_plugins/src/OceanCurrentPlugin.cc @@ -0,0 +1,621 @@ +// Standard Library Headers +#include +#include +#include +#include +#include +#include +#include + +// Boost Library Header +#include + +// ROS 2 Headers +#include +#include +#include +#include + +// Gazebo Physics and Simulation Headers +#include +#include +#include +#include +#include +#include + +// Dave Gazebo World Plugins +#include "dave_gz_world_plugins/OceanCurrentWorldPlugin.hh" +#include "dave_gz_world_plugins/gauss_markov_process.hh" + +// Dave ROS-Gazebo Plugin +#include "dave_ros_gz_plugins/OceanCurrentPlugin.hh" + +GZ_ADD_PLUGIN( + dave_ros_gz_plugins::OceanCurrentPlugin, gz::sim::System, + dave_ros_gz_plugins::OceanCurrentPlugin::ISystemConfigure, + dave_ros_gz_plugins::OceanCurrentPlugin::ISystemPostUpdate) + +namespace dave_ros_gz_plugins +{ +struct OceanCurrentPlugin::PrivateData +{ + // std::string db_path; (check)(TODO) + // this->dataPtr->db_path = ament_index_cpp::get_package_share_directory("dave_worlds"); + // // rclcpp::Service::SharedPtr; //Template + + // Time management + std::chrono::steady_clock::duration lastUpdate{0}; + + // ROS 2 Services for Current Models + rclcpp::Service::SharedPtr get_current_velocity_model; + rclcpp::Service::SharedPtr get_current_horz_angle_model; + rclcpp::Service::SharedPtr get_current_vert_angle_model; + rclcpp::Service::SharedPtr set_current_velocity_model; + rclcpp::Service::SharedPtr set_current_horz_angle_model; + rclcpp::Service::SharedPtr set_current_vert_angle_model; + + // ROS 2 Services for Current Velocity and Directions + rclcpp::Service::SharedPtr set_current_velocity; + rclcpp::Service::SharedPtr set_current_horz_angle; + rclcpp::Service::SharedPtr set_current_vert_angle; + + // ROS 2 Services for Stratified Current Models + rclcpp::Service::SharedPtr + set_stratified_current_velocity; + rclcpp::Service::SharedPtr + set_stratified_current_horz_angle; + rclcpp::Service::SharedPtr + set_stratified_current_vert_angle; + + // ROS Node + std::shared_ptr rosNode; + + // Gazebo Simulation Objects + gz::sim::World world; + gz::sim::Model model; + gz::sim::Entity entity; // Added entity member + + // Model and SDF Parameters + std::string modelName; + std::shared_ptr sdf; + + // Topic Names for Publishing Data + // std::string stratifiedCurrentVelocityTopic; + std::string stratifiedCurrentVelocityDatabaseTopic; + // std::string currentVelocityTopic; + std::string model_namespace; + + // ROS 2 Publishers + rclcpp::Publisher::SharedPtr flowVelocityPub; + rclcpp::Publisher::SharedPtr + stratifiedCurrentVelocityPub; + rclcpp::Publisher::SharedPtr + stratifiedCurrentDatabasePub; +}; + +///////////////////////////////////////////////// +OceanCurrentPlugin::OceanCurrentPlugin() : dataPtr(std::make_unique()) {} +OceanCurrentPlugin::~OceanCurrentPlugin() = default; + +///////////////////////////////////////////////// +void OceanCurrentPlugin::Configure( + const gz::sim::Entity & _entity, const std::shared_ptr & _sdf, + gz::sim::EntityComponentManager & _ecm, gz::sim::EventManager & _eventMgr) +{ + if (!rclcpp::ok()) + { + rclcpp::init(0, nullptr); + // gzerr << "ROS 2 has not been properly initialized. Please make sure you have initialized your + // ROS 2 environment."; + } + + // Initialize the ROS 2 node + this->dataPtr->rosNode = std::make_shared("underwater_current_ros_plugin"); + + // Retrieve the Gazebo world entity + auto worldEntity = _ecm.EntityByComponents(gz::sim::components::World()); + this->dataPtr->world = gz::sim::World(worldEntity); + + // Set model entity + this->dataPtr->entity = _entity; + this->dataPtr->model = gz::sim::Model(_entity); + this->dataPtr->modelName = this->dataPtr->model.Name(_ecm); + + // Save the SDF pointer + this->dataPtr->sdf = _sdf; + + dave_gz_world_plugins::OceanCurrentWorldPlugin::SharedData data; + + // Set the topic for the stratified current velocity database + this->dataPtr->stratifiedCurrentVelocityDatabaseTopic = "stratifiedCurrentVelocityTopic_database"; + + if (_sdf->HasElement("namespace")) + { + this->dataPtr->model_namespace = _sdf->Get("namespace"); + } + else + { + this->dataPtr->model_namespace = "hydrodynamics"; + } + + // Reinitialize the ROS 2 node with the model namespace + this->dataPtr->rosNode = + std::make_shared("underwater_current_ros_plugin", this->dataPtr->model_namespace); + + // Create and advertise Messages + // Advertise the flow velocity as a stamped twist message + this->dataPtr->flowVelocityPub = + this->dataPtr->rosNode->create_publisher( + "currentVelocityTopic", rclcpp::QoS(10)); + + // Advertise the stratified ocean current message + this->dataPtr->stratifiedCurrentVelocityPub = + this->dataPtr->rosNode->create_publisher( + "stratifiedCurrentVelocityTopic", rclcpp::QoS(10)); + + // Advertise the stratified ocean current database message + this->dataPtr->stratifiedCurrentDatabasePub = + this->dataPtr->rosNode->create_publisher( + this->dataPtr->stratifiedCurrentVelocityDatabaseTopic, rclcpp::QoS(10)); + // // Advertise the stratified ocean current message + // this->dataPtr->stratifiedCurrentVelocityPub = + // this->dataPtr->rosNode->create_publisher( + // data.stratifiedCurrentVelocityTopic, rclcpp::QoS(10)); + + // // Advertise the stratified ocean current database message + // this->dataPtr->stratifiedCurrentDatabasePub = + // this->dataPtr->rosNode->create_publisher( + // this->dataPtr->stratifiedCurrentVelocityDatabaseTopic, rclcpp::QoS(10)); + + // Advertise the service to get the current velocity model + this->dataPtr->get_current_velocity_model = + this->dataPtr->rosNode->create_service( + "get_current_velocity_model", std::bind( + &OceanCurrentPlugin::GetCurrentVelocityModel, this, + std::placeholders::_1, std::placeholders::_2)); + + // Advertise the service to get the current horizontal angle model + this->dataPtr->get_current_horz_angle_model = + this->dataPtr->rosNode->create_service( + "get_current_horz_angle_model", std::bind( + &OceanCurrentPlugin::GetCurrentHorzAngleModel, this, + std::placeholders::_1, std::placeholders::_2)); + + // Advertise the service to get the current vertical angle model + this->dataPtr->get_current_vert_angle_model = + this->dataPtr->rosNode->create_service( + "get_current_vert_angle_model", std::bind( + &OceanCurrentPlugin::GetCurrentVertAngleModel, this, + std::placeholders::_1, std::placeholders::_2)); + + // Advertise the service to update the current velocity model + this->dataPtr->set_current_velocity_model = + this->dataPtr->rosNode->create_service( + "set_current_velocity_model", std::bind( + &OceanCurrentPlugin::UpdateCurrentVelocityModel, this, + std::placeholders::_1, std::placeholders::_2)); + + // Advertise the service to update the current horizontal angle model + this->dataPtr->set_current_horz_angle_model = + this->dataPtr->rosNode->create_service( + "set_current_horz_angle_model", std::bind( + &OceanCurrentPlugin::UpdateCurrentHorzAngleModel, this, + std::placeholders::_1, std::placeholders::_2)); + + // Advertise the service to update the current vertical angle model + this->dataPtr->set_current_vert_angle_model = + this->dataPtr->rosNode->create_service( + "set_current_vert_angle_model", std::bind( + &OceanCurrentPlugin::UpdateCurrentVertAngleModel, this, + std::placeholders::_1, std::placeholders::_2)); + + // Advertise the service to update the current velocity mean value + this->dataPtr->set_current_velocity = + this->dataPtr->rosNode->create_service( + "set_current_velocity", std::bind( + &OceanCurrentPlugin::UpdateCurrentVelocity, this, + std::placeholders::_1, std::placeholders::_2)); + + // Advertise the service to update the stratified current velocity + this->dataPtr->set_stratified_current_velocity = + this->dataPtr->rosNode->create_service( + "set_stratified_current_velocity", std::bind( + &OceanCurrentPlugin::UpdateStratCurrentVelocity, this, + std::placeholders::_1, std::placeholders::_2)); + + // Advertise the service to update the current horizontal angle //TODO + this->dataPtr->set_current_horz_angle = + this->dataPtr->rosNode->create_service( + "set_current_horz_angle", + std::bind( + &OceanCurrentPlugin::UpdateHorzAngle, this, std::placeholders::_1, std::placeholders::_2)); + + // Advertise the service to update the current horizontal angle //TODO + this->dataPtr->set_current_vert_angle = + this->dataPtr->rosNode->create_service( + "set_current_vert_angle", + std::bind( + &OceanCurrentPlugin::UpdateVertAngle, this, std::placeholders::_1, std::placeholders::_2)); + + // Advertise the service to update the stratified current horizontal angle + this->dataPtr->set_stratified_current_horz_angle = + this->dataPtr->rosNode->create_service( + "set_stratified_current_horz_angle", std::bind( + &OceanCurrentPlugin::UpdateStratHorzAngle, this, + std::placeholders::_1, std::placeholders::_2)); + + // // Advertise the service to update the current vertical angle + // this->dataPtr->set_current_vert_angle_model = + // this->dataPtr->rosNode->create_service( + // "set_current_vert_angle_model", std::bind( + // &OceanCurrentPlugin::UpdateVertAngleModel, this, + // std::placeholders::_1, std::placeholders::_2)); + + // Advertise the service to update the stratified current vertical angle + this->dataPtr->set_stratified_current_vert_angle = + this->dataPtr->rosNode->create_service( + "set_stratified_current_vert_angle", std::bind( + &OceanCurrentPlugin::UpdateStratVertAngle, this, + std::placeholders::_1, std::placeholders::_2)); + + // Connect to the Gazebo Harmonic update event + // this->dataPtr->rosPublishConnection = _world->OnUpdateBegin([this](const gz::sim::UpdateInfo & + // info) + // { this->dataPtr->OnUpdateCurrentVel(info); + // }); +} + +///////////////////////////////////////////////// +// void OceanCurrentPlugin::PreUpdate( +// const gz::sim::UpdateInfo & _info, gz::sim::EntityComponentManager & _ecm) +// { +// } +// ///////////////////////////////////////////////// +// void OceanCurrentPlugin::Update( +// const gz::sim::UpdateInfo & _info, const gz::sim::EntityComponentManager & _ecm) +// { +// if (_info.simTime > this->dataPtr->lastUpdate) +// { +// // TODO put in postupdate +// } +// } + +// namespace dave_ros_gz_plugins +///////////////////////////////////////////////// +bool OceanCurrentPlugin::UpdateHorzAngle( + const std::shared_ptr _req, + std::shared_ptr _res) +{ + dave_gz_world_plugins::OceanCurrentWorldPlugin::SharedData data; + _res->success = data.currentHorzAngleModel.SetMean(_req->angle); + return true; +} + +///////////////////////////////////////////////// +bool OceanCurrentPlugin::UpdateStratHorzAngle( + const std::shared_ptr _req, + std::shared_ptr _res) +{ + dave_gz_world_plugins::OceanCurrentWorldPlugin::SharedData data; + + if (_req->layer >= data.stratifiedDatabase.size()) + { + _res->success = false; + return true; + } + + _res->success = data.stratifiedCurrentModels[_req->layer][1].SetMean(_req->angle); + if (_res->success) + { + // Update the database values (new angle, unchanged velocity) + double velocity = + hypot(data.stratifiedDatabase[_req->layer].X(), data.stratifiedDatabase[_req->layer].Y()); + data.stratifiedDatabase[_req->layer].X() = cos(_req->angle) * velocity; + data.stratifiedDatabase[_req->layer].Y() = sin(_req->angle) * velocity; + } + return true; +} + +///////////////////////////////////////////////// +bool OceanCurrentPlugin::UpdateVertAngle( + const std::shared_ptr _req, + std::shared_ptr _res) +{ + dave_gz_world_plugins::OceanCurrentWorldPlugin::SharedData data; + _res->success = data.currentVertAngleModel.SetMean(_req->angle); + return true; +} + +///////////////////////////////////////////////// +bool OceanCurrentPlugin::UpdateStratVertAngle( + const std::shared_ptr _req, + std::shared_ptr _res) +{ + dave_gz_world_plugins::OceanCurrentWorldPlugin::SharedData data; + + if (_req->layer >= data.stratifiedDatabase.size()) + { + _res->success = false; + return true; + } + _res->success = data.stratifiedCurrentModels[_req->layer][2].SetMean(_req->angle); + return true; +} + +///////////////////////////////////////////////// +bool OceanCurrentPlugin::UpdateCurrentVelocity( + const std::shared_ptr _req, + std::shared_ptr _res) +{ + dave_gz_world_plugins::OceanCurrentWorldPlugin::SharedData data; + + if ( + data.currentVelModel.SetMean(_req->velocity) && + data.currentHorzAngleModel.SetMean(_req->horizontal_angle) && + data.currentVertAngleModel.SetMean(_req->vertical_angle)) + { + gzmsg << "Current velocity [m/s] = " << _req->velocity << std::endl + << "Current horizontal angle [rad] = " << _req->horizontal_angle << std::endl + << "Current vertical angle [rad] = " << _req->vertical_angle << std::endl + << "\tWARNING: Current velocity calculated in the ENU frame" << std::endl; + _res->success = true; + } + else + { + gzmsg << "Error while updating the current velocity" << std::endl; + _res->success = false; + } + return true; +} + +///////////////////////////////////////////////// +bool OceanCurrentPlugin::UpdateStratCurrentVelocity( + const std::shared_ptr _req, + std::shared_ptr _res) +{ + dave_gz_world_plugins::OceanCurrentWorldPlugin::SharedData data; + + if (_req->layer >= data.stratifiedDatabase.size()) + { + _res->success = false; + return true; + } + if ( + data.stratifiedCurrentModels[_req->layer][0].SetMean(_req->velocity) && + data.stratifiedCurrentModels[_req->layer][1].SetMean(_req->horizontal_angle) && + data.stratifiedCurrentModels[_req->layer][2].SetMean(_req->vertical_angle)) + { + // Update the database values as well + data.stratifiedDatabase[_req->layer].X() = cos(_req->horizontal_angle) * _req->velocity; + data.stratifiedDatabase[_req->layer].Y() = sin(_req->horizontal_angle) * _req->velocity; + gzmsg << "Layer " << _req->layer << " current velocity [m/s] = " << _req->velocity << std::endl + << " Horizontal angle [rad] = " << _req->horizontal_angle << std::endl + << " Vertical angle [rad] = " << _req->vertical_angle << std::endl + << "\tWARNING: Current velocity calculated in the ENU frame" << std::endl; + _res->success = true; + } + else + { + gzmsg << "Error while updating the current velocity" << std::endl; + _res->success = false; + } + return true; +} + +///////////////////////////////////////////////// +bool OceanCurrentPlugin::GetCurrentVelocityModel( + const std::shared_ptr _req, + std::shared_ptr _res) +{ + dave_gz_world_plugins::OceanCurrentWorldPlugin::SharedData data; + + _res->mean = data.currentVelModel.mean; + _res->min = data.currentVelModel.min; + _res->max = data.currentVelModel.max; + _res->noise = data.currentVelModel.noiseAmp; + _res->mu = data.currentVelModel.mu; + return true; +} + +///////////////////////////////////////////////// +bool OceanCurrentPlugin::GetCurrentHorzAngleModel( + const std::shared_ptr _req, + std::shared_ptr _res) +{ + dave_gz_world_plugins::OceanCurrentWorldPlugin::SharedData data; + + _res->mean = data.currentHorzAngleModel.mean; + _res->min = data.currentHorzAngleModel.min; + _res->max = data.currentHorzAngleModel.max; + _res->noise = data.currentHorzAngleModel.noiseAmp; + _res->mu = data.currentHorzAngleModel.mu; + return true; +} + +///////////////////////////////////////////////// +bool OceanCurrentPlugin::GetCurrentVertAngleModel( + const std::shared_ptr _req, + std::shared_ptr _res) +{ + dave_gz_world_plugins::OceanCurrentWorldPlugin::SharedData data; + + _res->mean = data.currentVertAngleModel.mean; + _res->min = data.currentVertAngleModel.min; + _res->max = data.currentVertAngleModel.max; + _res->noise = data.currentVertAngleModel.noiseAmp; + _res->mu = data.currentVertAngleModel.mu; + return true; +} + +///////////////////////////////////////////////// +bool OceanCurrentPlugin::UpdateCurrentVelocityModel( + const std::shared_ptr _req, + std::shared_ptr _res) +{ + dave_gz_world_plugins::OceanCurrentWorldPlugin::SharedData data; + + _res->success = data.currentVelModel.SetModel( + std::max(0.0, _req->mean), std::min(0.0, _req->min), std::max(0.0, _req->max), _req->mu, + _req->noise); + + for (int i = 0; i < data.stratifiedCurrentModels.size(); i++) + { + dave_gz_world_plugins::GaussMarkovProcess & model = + data.stratifiedCurrentModels[i][0]; //(updated) + model.SetModel( + model.mean, std::max(0.0, _req->min), std::max(0.0, _req->max), _req->mu, _req->noise); + } + + gzmsg << "Current velocity model updated" << std::endl + << "\tWARNING: Current velocity calculated in the ENU frame" << std::endl; + data.currentVelModel.Print(); + + return true; +} +///////////////////////////////////////////////// +bool OceanCurrentPlugin::UpdateCurrentHorzAngleModel( + const std::shared_ptr _req, + std::shared_ptr _res) +{ + dave_gz_world_plugins::OceanCurrentWorldPlugin::SharedData data; + + _res->success = + data.currentHorzAngleModel.SetModel(_req->mean, _req->min, _req->max, _req->mu, _req->noise); + + for (int i = 0; i < data.stratifiedCurrentModels.size(); i++) + { + dave_gz_world_plugins::GaussMarkovProcess & model = data.stratifiedCurrentModels[i][1]; + model.SetModel( + model.mean, std::max(-M_PI, _req->min), std::min(M_PI, _req->max), _req->mu, _req->noise); + } + + gzmsg << "Horizontal angle model updated" << std::endl + << "\tWARNING: Current velocity calculated in the ENU frame" << std::endl; + data.currentHorzAngleModel.Print(); + return true; + + // gzmsg << "Horizontal angle model updated" << std::endl + // << "\tWARNING: Current velocity calculated in the ENU frame" << std::endl; + // this->dataPtr->currentHorzAngleModel.Print(); +} + +///////////////////////////////////////////////// +bool OceanCurrentPlugin::UpdateCurrentVertAngleModel( + const std::shared_ptr _req, + std::shared_ptr _res) +{ + dave_gz_world_plugins::OceanCurrentWorldPlugin::SharedData data; + + _res->success = + data.currentVertAngleModel.SetModel(_req->mean, _req->min, _req->max, _req->mu, _req->noise); + + gzmsg << "Vertical angle model updated" << std::endl + << "\tWARNING: Current velocity calculated in the ENU frame" << std::endl; + data.currentVertAngleModel.Print(); + return true; +} + +///////////////////////////////////////////////// +void OceanCurrentPlugin::PostUpdate( + const gz::sim::UpdateInfo & _info, const gz::sim::EntityComponentManager & _ecm) +{ + dave_gz_world_plugins::OceanCurrentWorldPlugin::SharedData data; + // Generate and publish current velocity according to the vehicle depth + geometry_msgs::msg::TwistStamped flowVelMsg; + flowVelMsg.header.stamp = this->dataPtr->rosNode->get_clock()->now(); + flowVelMsg.header.frame_id = + "world"; // Changed from "/world" to be consistent with ROS 2 TF2 conventions + + flowVelMsg.twist.linear.x = data.currentVelocity.X(); + flowVelMsg.twist.linear.y = data.currentVelocity.Y(); + flowVelMsg.twist.linear.z = data.currentVelocity.Z(); + + this->dataPtr->flowVelocityPub->publish(flowVelMsg); + + // + + // Generate and publish stratified current velocity + dave_interfaces::msg::StratifiedCurrentVelocity stratCurrentVelocityMsg; + stratCurrentVelocityMsg.header.stamp = this->dataPtr->rosNode->get_clock()->now(); + stratCurrentVelocityMsg.header.frame_id = "world"; + + // Updating for stratified behaviour of Ocean Currents + // What is the .size value over here, to be (checked) + + for (size_t i = 0; i < data.currentStratifiedVelocity.size(); + i++) // need to check if the values are in sync with ocean_cureent_world_plugin.cc(TODO) + { + geometry_msgs::msg::Vector3 velocity; + velocity.x = data.currentStratifiedVelocity[i].X(); + velocity.y = data.currentStratifiedVelocity[i].Y(); + velocity.z = data.currentStratifiedVelocity[i].Z(); + stratCurrentVelocityMsg.velocities.push_back(velocity); + stratCurrentVelocityMsg.depths.push_back(data.currentStratifiedVelocity[i].W()); + } + + this->dataPtr->stratifiedCurrentVelocityPub->publish(stratCurrentVelocityMsg); + + // Generate and publish stratified current database + dave_interfaces::msg::StratifiedCurrentDatabase currentDatabaseMsg; + for (int i = 0; + i < data.stratifiedDatabase.size(); // again check with ocean_cureent_world_plugin.cc (TODO) + i++) // read from csv file in ocean_cureent_world_plugin.cc + { + // Stratified current database entry preparation + geometry_msgs::msg::Vector3 velocity; + velocity.x = data.stratifiedDatabase[i].X(); + velocity.y = data.stratifiedDatabase[i].Y(); + velocity.z = 0.0; // Assuming z is intentionally set to 0.0 + currentDatabaseMsg.velocities.push_back(velocity); + currentDatabaseMsg.depths.push_back(data.stratifiedDatabase[i].Z()); + } + + if (data.tidalHarmonicFlag) // again check with ocean_cureent_world_plugin.cc (TODO) + { + // Tidal harmonic constituents + currentDatabaseMsg.m2_amp = data.M2_amp; + currentDatabaseMsg.m2_phase = data.M2_phase; + currentDatabaseMsg.m2_speed = data.M2_speed; + currentDatabaseMsg.s2_amp = data.S2_amp; + currentDatabaseMsg.s2_phase = data.S2_phase; + currentDatabaseMsg.s2_speed = data.S2_speed; + currentDatabaseMsg.n2_amp = data.N2_amp; + currentDatabaseMsg.n2_phase = data.N2_phase; + currentDatabaseMsg.n2_speed = data.N2_speed; + currentDatabaseMsg.tideconstituents = true; + } + else + { + for (int i = 0; i < data.dateGMT.size(); i++) + { + // Tidal oscillation database + currentDatabaseMsg.time_gmt_year.push_back(data.dateGMT[i][0]); + currentDatabaseMsg.time_gmt_month.push_back(data.dateGMT[i][1]); + currentDatabaseMsg.time_gmt_day.push_back(data.dateGMT[i][2]); + currentDatabaseMsg.time_gmt_hour.push_back(data.dateGMT[i][3]); + currentDatabaseMsg.time_gmt_minute.push_back(data.dateGMT[i][4]); + + currentDatabaseMsg.tidevelocities.push_back(data.speedcmsec[i]); + } + currentDatabaseMsg.tideconstituents = false; + } + + currentDatabaseMsg.ebb_direction = data.ebbDirection; + currentDatabaseMsg.flood_direction = data.floodDirection; + + currentDatabaseMsg.world_start_time_year = data.world_start_time_year; + currentDatabaseMsg.world_start_time_month = data.world_start_time_month; + currentDatabaseMsg.world_start_time_day = data.world_start_time_day; + currentDatabaseMsg.world_start_time_hour = data.world_start_time_hour; + currentDatabaseMsg.world_start_time_minute = data.world_start_time_minute; + + this->dataPtr->stratifiedCurrentDatabasePub->publish(currentDatabaseMsg); + + // Update the time tracking for publication + this->dataPtr->lastUpdate = _info.simTime; +} + +} // namespace dave_ros_gz_plugins + +// #endif \ No newline at end of file diff --git a/models/dave_robot_models/description/rexrov/model.sdf b/models/dave_robot_models/description/rexrov/model.sdf index 0b9bb15b..d33a97d0 100644 --- a/models/dave_robot_models/description/rexrov/model.sdf +++ b/models/dave_robot_models/description/rexrov/model.sdf @@ -1,4 +1,4 @@ - + @@ -584,5 +584,51 @@ thruster8_joint + + + rexrov + sea_pressure + 10 + 3.0 + true + 101.325 + 9.80638 + + + + + + rexrov + hydrodynamics/current_velocity + base_link + $(arg namespace)/base_link + + + + 0.0 + 0.0 + 0.3 + 0.0 + + + 0.0 + 0.0 + 0.3 + 0.0 + + + 0.0 + 0.0 + 0.3 + 0.0 + + + false + + - + \ No newline at end of file diff --git a/models/dave_worlds/worlds/ACT1951_1_Annual_2021.csv b/models/dave_worlds/worlds/ACT1951_1_Annual_2021.csv new file mode 100644 index 00000000..1250fb59 --- /dev/null +++ b/models/dave_worlds/worlds/ACT1951_1_Annual_2021.csv @@ -0,0 +1,8501 @@ +Date_Time (GMT), Event, Speed (cm/sec) +2020-01-01 03:29, flood,39 +2020-01-01 05:26, slack,- +2020-01-01 06:51, ebb,-24 +2020-01-01 09:20, slack,- +2020-01-01 14:17, flood,33 +2020-01-01 17:32, slack,- +2020-01-01 19:03, ebb,-26 +2020-01-01 21:50, slack,- +2020-01-02 04:11, flood,35 +2020-01-02 06:08, slack,- +2020-01-02 07:33, ebb,-23 +2020-01-02 10:14, slack,- +2020-01-02 14:53, flood,32 +2020-01-02 18:20, slack,- +2020-01-02 19:45, ebb,-24 +2020-01-02 22:38, slack,- +2020-01-03 03:23, flood,33 +2020-01-03 06:56, slack,- +2020-01-03 08:21, ebb,-22 +2020-01-03 11:08, slack,- +2020-01-03 15:35, flood,32 +2020-01-03 19:08, slack,- +2020-01-03 20:33, ebb,-23 +2020-01-03 23:20, slack,- +2020-01-04 03:59, flood,34 +2020-01-04 07:38, slack,- +2020-01-04 09:09, ebb,-22 +2020-01-04 11:56, slack,- +2020-01-04 16:23, flood,32 +2020-01-04 19:56, slack,- +2020-01-04 21:27, ebb,-22 +2020-01-05 00:02, slack,- +2020-01-05 04:41, flood,35 +2020-01-05 08:26, slack,- +2020-01-05 09:57, ebb,-22 +2020-01-05 12:44, slack,- +2020-01-05 17:11, flood,32 +2020-01-05 20:44, slack,- +2020-01-05 22:15, ebb,-23 +2020-01-06 00:44, slack,- +2020-01-06 05:23, flood,36 +2020-01-06 09:14, slack,- +2020-01-06 10:51, ebb,-24 +2020-01-06 13:32, slack,- +2020-01-06 17:59, flood,34 +2020-01-06 21:38, slack,- +2020-01-06 23:09, ebb,-24 +2020-01-07 01:32, slack,- +2020-01-07 06:05, flood,38 +2020-01-07 10:02, slack,- +2020-01-07 11:39, ebb,-27 +2020-01-07 14:14, slack,- +2020-01-07 18:53, flood,36 +2020-01-07 22:32, slack,- +2020-01-08 00:03, ebb,-26 +2020-01-08 02:14, slack,- +2020-01-08 06:53, flood,41 +2020-01-08 10:44, slack,- +2020-01-08 12:27, ebb,-30 +2020-01-08 15:02, slack,- +2020-01-08 19:41, flood,40 +2020-01-08 23:20, slack,- +2020-01-09 00:51, ebb,-28 +2020-01-09 02:56, slack,- +2020-01-09 07:41, flood,44 +2020-01-09 11:32, slack,- +2020-01-09 13:15, ebb,-33 +2020-01-09 15:44, slack,- +2020-01-09 20:41, flood,44 +2020-01-10 00:08, slack,- +2020-01-10 01:39, ebb,-31 +2020-01-10 03:44, slack,- +2020-01-10 08:35, flood,47 +2020-01-10 12:14, slack,- +2020-01-10 14:03, ebb,-36 +2020-01-10 16:32, slack,- +2020-01-10 21:35, flood,47 +2020-01-11 00:56, slack,- +2020-01-11 02:33, ebb,-33 +2020-01-11 04:32, slack,- +2020-01-11 09:29, flood,50 +2020-01-11 13:02, slack,- +2020-01-11 14:51, ebb,-38 +2020-01-11 17:14, slack,- +2020-01-11 22:23, flood,51 +2020-01-12 01:44, slack,- +2020-01-12 03:21, ebb,-35 +2020-01-12 05:20, slack,- +2020-01-12 10:17, flood,53 +2020-01-12 13:50, slack,- +2020-01-12 15:45, ebb,-40 +2020-01-12 18:02, slack,- +2020-01-12 23:11, flood,52 +2020-01-13 02:32, slack,- +2020-01-13 04:09, ebb,-36 +2020-01-13 06:08, slack,- +2020-01-13 11:11, flood,53 +2020-01-13 14:44, slack,- +2020-01-13 16:33, ebb,-41 +2020-01-13 18:50, slack,- +2020-01-14 00:05, flood,53 +2020-01-14 03:26, slack,- +2020-01-14 04:57, ebb,-37 +2020-01-14 07:02, slack,- +2020-01-14 12:05, flood,52 +2020-01-14 15:32, slack,- +2020-01-14 17:21, ebb,-40 +2020-01-14 19:38, slack,- +2020-01-15 01:05, flood,52 +2020-01-15 04:14, slack,- +2020-01-15 05:51, ebb,-37 +2020-01-15 07:56, slack,- +2020-01-15 13:11, flood,50 +2020-01-15 16:26, slack,- +2020-01-15 18:15, ebb,-39 +2020-01-15 20:32, slack,- +2020-01-16 01:59, flood,52 +2020-01-16 05:08, slack,- +2020-01-16 06:45, ebb,-36 +2020-01-16 09:02, slack,- +2020-01-16 14:11, flood,48 +2020-01-16 17:26, slack,- +2020-01-16 19:03, ebb,-37 +2020-01-16 21:32, slack,- +2020-01-17 02:53, flood,51 +2020-01-17 06:02, slack,- +2020-01-17 07:33, ebb,-34 +2020-01-17 10:08, slack,- +2020-01-17 15:17, flood,46 +2020-01-17 18:26, slack,- +2020-01-17 19:57, ebb,-33 +2020-01-17 22:32, slack,- +2020-01-18 03:53, flood,49 +2020-01-18 06:56, slack,- +2020-01-18 08:33, ebb,-32 +2020-01-18 11:08, slack,- +2020-01-18 16:23, flood,44 +2020-01-18 19:26, slack,- +2020-01-18 20:57, ebb,-30 +2020-01-18 23:32, slack,- +2020-01-19 04:53, flood,46 +2020-01-19 07:56, slack,- +2020-01-19 09:33, ebb,-30 +2020-01-19 12:14, slack,- +2020-01-19 18:17, flood,43 +2020-01-19 20:26, slack,- +2020-01-19 22:03, ebb,-28 +2020-01-20 00:26, slack,- +2020-01-20 06:35, flood,45 +2020-01-20 08:56, slack,- +2020-01-20 10:39, ebb,-29 +2020-01-20 13:14, slack,- +2020-01-20 19:29, flood,45 +2020-01-20 21:26, slack,- +2020-01-20 23:09, ebb,-26 +2020-01-21 01:26, slack,- +2020-01-21 07:53, flood,45 +2020-01-21 09:50, slack,- +2020-01-21 11:57, ebb,-30 +2020-01-21 14:14, slack,- +2020-01-21 20:35, flood,49 +2020-01-21 22:26, slack,- +2020-01-22 00:21, ebb,-27 +2020-01-22 02:20, slack,- +2020-01-22 08:53, flood,46 +2020-01-22 10:50, slack,- +2020-01-22 13:03, ebb,-30 +2020-01-22 15:08, slack,- +2020-01-22 21:29, flood,52 +2020-01-22 23:26, slack,- +2020-01-23 01:27, ebb,-27 +2020-01-23 03:14, slack,- +2020-01-23 09:47, flood,48 +2020-01-23 11:38, slack,- +2020-01-23 13:57, ebb,-31 +2020-01-23 15:56, slack,- +2020-01-23 22:23, flood,55 +2020-01-24 00:14, slack,- +2020-01-24 02:21, ebb,-28 +2020-01-24 04:02, slack,- +2020-01-24 10:35, flood,48 +2020-01-24 12:26, slack,- +2020-01-24 14:39, ebb,-31 +2020-01-24 16:44, slack,- +2020-01-24 23:11, flood,54 +2020-01-25 01:02, slack,- +2020-01-25 03:09, ebb,-28 +2020-01-25 04:50, slack,- +2020-01-25 11:23, flood,47 +2020-01-25 13:14, slack,- +2020-01-25 15:15, ebb,-31 +2020-01-25 17:32, slack,- +2020-01-25 23:59, flood,52 +2020-01-26 01:50, slack,- +2020-01-26 03:39, ebb,-28 +2020-01-26 05:38, slack,- +2020-01-26 12:05, flood,44 +2020-01-26 14:02, slack,- +2020-01-26 15:51, ebb,-31 +2020-01-26 18:14, slack,- +2020-01-27 00:41, flood,49 +2020-01-27 02:38, slack,- +2020-01-27 04:15, ebb,-28 +2020-01-27 06:26, slack,- +2020-01-27 12:47, flood,41 +2020-01-27 14:44, slack,- +2020-01-27 16:27, ebb,-30 +2020-01-27 18:56, slack,- +2020-01-28 01:29, flood,45 +2020-01-28 03:20, slack,- +2020-01-28 04:57, ebb,-27 +2020-01-28 07:08, slack,- +2020-01-28 12:11, flood,38 +2020-01-28 15:32, slack,- +2020-01-28 17:03, ebb,-30 +2020-01-28 19:38, slack,- +2020-01-29 02:11, flood,40 +2020-01-29 04:02, slack,- +2020-01-29 05:33, ebb,-26 +2020-01-29 07:56, slack,- +2020-01-29 12:47, flood,36 +2020-01-29 16:14, slack,- +2020-01-29 17:45, ebb,-29 +2020-01-29 20:20, slack,- +2020-01-30 02:41, flood,36 +2020-01-30 04:44, slack,- +2020-01-30 06:15, ebb,-26 +2020-01-30 08:44, slack,- +2020-01-30 13:29, flood,35 +2020-01-30 16:56, slack,- +2020-01-30 18:27, ebb,-28 +2020-01-30 21:02, slack,- +2020-01-31 01:59, flood,35 +2020-01-31 05:32, slack,- +2020-01-31 06:57, ebb,-25 +2020-01-31 09:32, slack,- +2020-01-31 14:17, flood,34 +2020-01-31 17:38, slack,- +2020-01-31 19:15, ebb,-26 +2020-01-31 21:50, slack,- +2020-02-01 02:35, flood,35 +2020-02-01 06:14, slack,- +2020-02-01 07:39, ebb,-24 +2020-02-01 10:26, slack,- +2020-02-01 14:59, flood,33 +2020-02-01 18:26, slack,- +2020-02-01 19:57, ebb,-25 +2020-02-01 22:32, slack,- +2020-02-02 03:17, flood,36 +2020-02-02 06:56, slack,- +2020-02-02 08:27, ebb,-24 +2020-02-02 11:20, slack,- +2020-02-02 15:47, flood,33 +2020-02-02 19:14, slack,- +2020-02-02 20:45, ebb,-24 +2020-02-02 23:20, slack,- +2020-02-03 03:59, flood,36 +2020-02-03 07:38, slack,- +2020-02-03 09:21, ebb,-24 +2020-02-03 12:08, slack,- +2020-02-03 16:41, flood,33 +2020-02-03 20:08, slack,- +2020-02-03 21:39, ebb,-23 +2020-02-04 00:08, slack,- +2020-02-04 04:47, flood,37 +2020-02-04 08:32, slack,- +2020-02-04 10:09, ebb,-25 +2020-02-04 12:56, slack,- +2020-02-04 17:29, flood,35 +2020-02-04 21:02, slack,- +2020-02-04 22:39, ebb,-24 +2020-02-05 00:56, slack,- +2020-02-05 05:35, flood,39 +2020-02-05 09:20, slack,- +2020-02-05 11:09, ebb,-27 +2020-02-05 13:44, slack,- +2020-02-05 18:23, flood,37 +2020-02-05 22:02, slack,- +2020-02-05 23:33, ebb,-26 +2020-02-06 01:44, slack,- +2020-02-06 06:23, flood,42 +2020-02-06 10:14, slack,- +2020-02-06 11:57, ebb,-30 +2020-02-06 14:32, slack,- +2020-02-06 19:17, flood,40 +2020-02-06 22:50, slack,- +2020-02-07 00:27, ebb,-29 +2020-02-07 02:32, slack,- +2020-02-07 07:17, flood,45 +2020-02-07 11:02, slack,- +2020-02-07 12:51, ebb,-33 +2020-02-07 15:20, slack,- +2020-02-07 20:17, flood,44 +2020-02-07 23:44, slack,- +2020-02-08 01:15, ebb,-31 +2020-02-08 03:20, slack,- +2020-02-08 08:17, flood,49 +2020-02-08 11:56, slack,- +2020-02-08 13:39, ebb,-36 +2020-02-08 16:08, slack,- +2020-02-08 21:17, flood,49 +2020-02-09 00:32, slack,- +2020-02-09 02:09, ebb,-34 +2020-02-09 04:08, slack,- +2020-02-09 09:11, flood,52 +2020-02-09 12:44, slack,- +2020-02-09 14:33, ebb,-39 +2020-02-09 16:56, slack,- +2020-02-09 22:05, flood,53 +2020-02-10 01:20, slack,- +2020-02-10 02:57, ebb,-36 +2020-02-10 05:02, slack,- +2020-02-10 10:05, flood,55 +2020-02-10 13:32, slack,- +2020-02-10 15:21, ebb,-41 +2020-02-10 17:44, slack,- +2020-02-10 22:53, flood,55 +2020-02-11 02:14, slack,- +2020-02-11 03:51, ebb,-38 +2020-02-11 05:50, slack,- +2020-02-11 10:59, flood,56 +2020-02-11 14:26, slack,- +2020-02-11 16:09, ebb,-41 +2020-02-11 18:32, slack,- +2020-02-11 23:47, flood,55 +2020-02-12 03:02, slack,- +2020-02-12 04:39, ebb,-39 +2020-02-12 06:44, slack,- +2020-02-12 11:53, flood,54 +2020-02-12 15:20, slack,- +2020-02-12 17:03, ebb,-41 +2020-02-12 19:20, slack,- +2020-02-13 00:41, flood,54 +2020-02-13 03:50, slack,- +2020-02-13 05:27, ebb,-38 +2020-02-13 07:38, slack,- +2020-02-13 12:53, flood,51 +2020-02-13 16:14, slack,- +2020-02-13 17:51, ebb,-39 +2020-02-13 20:08, slack,- +2020-02-14 01:41, flood,52 +2020-02-14 04:44, slack,- +2020-02-14 06:21, ebb,-37 +2020-02-14 08:38, slack,- +2020-02-14 14:05, flood,48 +2020-02-14 17:08, slack,- +2020-02-14 18:45, ebb,-36 +2020-02-14 21:08, slack,- +2020-02-15 02:35, flood,49 +2020-02-15 05:38, slack,- +2020-02-15 07:15, ebb,-34 +2020-02-15 09:44, slack,- +2020-02-15 15:11, flood,45 +2020-02-15 18:02, slack,- +2020-02-15 19:39, ebb,-32 +2020-02-15 22:08, slack,- +2020-02-16 03:35, flood,46 +2020-02-16 06:32, slack,- +2020-02-16 08:09, ebb,-31 +2020-02-16 10:50, slack,- +2020-02-16 16:47, flood,42 +2020-02-16 19:02, slack,- +2020-02-16 20:33, ebb,-28 +2020-02-16 23:08, slack,- +2020-02-17 04:59, flood,42 +2020-02-17 07:32, slack,- +2020-02-17 09:03, ebb,-28 +2020-02-17 11:56, slack,- +2020-02-17 18:11, flood,43 +2020-02-17 20:08, slack,- +2020-02-17 21:33, ebb,-25 +2020-02-18 00:08, slack,- +2020-02-18 06:29, flood,41 +2020-02-18 08:32, slack,- +2020-02-18 10:15, ebb,-27 +2020-02-18 12:56, slack,- +2020-02-18 19:17, flood,45 +2020-02-18 21:08, slack,- +2020-02-18 23:03, ebb,-24 +2020-02-19 01:08, slack,- +2020-02-19 07:35, flood,42 +2020-02-19 09:32, slack,- +2020-02-19 12:27, ebb,-27 +2020-02-19 13:56, slack,- +2020-02-19 20:17, flood,48 +2020-02-19 22:08, slack,- +2020-02-20 00:45, ebb,-25 +2020-02-20 02:02, slack,- +2020-02-20 08:35, flood,44 +2020-02-20 10:26, slack,- +2020-02-20 13:15, ebb,-28 +2020-02-20 14:50, slack,- +2020-02-20 21:11, flood,51 +2020-02-20 23:02, slack,- +2020-02-21 01:33, ebb,-26 +2020-02-21 02:56, slack,- +2020-02-21 09:29, flood,46 +2020-02-21 11:20, slack,- +2020-02-21 14:09, ebb,-29 +2020-02-21 15:38, slack,- +2020-02-21 21:59, flood,53 +2020-02-21 23:50, slack,- +2020-02-22 02:21, ebb,-27 +2020-02-22 03:44, slack,- +2020-02-22 10:17, flood,47 +2020-02-22 12:08, slack,- +2020-02-22 14:45, ebb,-30 +2020-02-22 16:20, slack,- +2020-02-22 22:47, flood,53 +2020-02-23 00:38, slack,- +2020-02-23 03:03, ebb,-28 +2020-02-23 04:26, slack,- +2020-02-23 10:59, flood,47 +2020-02-23 12:50, slack,- +2020-02-23 15:03, ebb,-30 +2020-02-23 17:08, slack,- +2020-02-23 23:29, flood,50 +2020-02-24 01:26, slack,- +2020-02-24 03:21, ebb,-28 +2020-02-24 05:14, slack,- +2020-02-24 11:35, flood,44 +2020-02-24 13:32, slack,- +2020-02-24 15:21, ebb,-30 +2020-02-24 17:44, slack,- +2020-02-25 00:11, flood,46 +2020-02-25 02:08, slack,- +2020-02-25 03:51, ebb,-28 +2020-02-25 05:56, slack,- +2020-02-25 11:11, flood,41 +2020-02-25 14:20, slack,- +2020-02-25 15:57, ebb,-30 +2020-02-25 18:20, slack,- +2020-02-26 00:53, flood,42 +2020-02-26 02:50, slack,- +2020-02-26 04:21, ebb,-28 +2020-02-26 06:38, slack,- +2020-02-26 11:29, flood,40 +2020-02-26 14:56, slack,- +2020-02-26 16:33, ebb,-30 +2020-02-26 19:02, slack,- +2020-02-26 23:59, flood,38 +2020-02-27 03:26, slack,- +2020-02-27 05:03, ebb,-28 +2020-02-27 07:20, slack,- +2020-02-27 12:05, flood,39 +2020-02-27 15:38, slack,- +2020-02-27 17:15, ebb,-30 +2020-02-27 19:38, slack,- +2020-02-28 00:29, flood,38 +2020-02-28 04:08, slack,- +2020-02-28 05:39, ebb,-28 +2020-02-28 08:08, slack,- +2020-02-28 12:47, flood,37 +2020-02-28 16:20, slack,- +2020-02-28 17:57, ebb,-29 +2020-02-28 20:14, slack,- +2020-02-29 01:11, flood,37 +2020-02-29 04:50, slack,- +2020-02-29 06:21, ebb,-27 +2020-02-29 08:56, slack,- +2020-02-29 13:41, flood,36 +2020-02-29 17:02, slack,- +2020-02-29 18:39, ebb,-28 +2020-02-29 21:02, slack,- +2020-03-01 01:53, flood,37 +2020-03-01 05:26, slack,- +2020-03-01 07:09, ebb,-27 +2020-03-01 09:44, slack,- +2020-03-01 14:29, flood,35 +2020-03-01 17:50, slack,- +2020-03-01 19:27, ebb,-27 +2020-03-01 21:50, slack,- +2020-03-02 02:41, flood,37 +2020-03-02 06:08, slack,- +2020-03-02 07:51, ebb,-26 +2020-03-02 10:38, slack,- +2020-03-02 15:17, flood,35 +2020-03-02 18:44, slack,- +2020-03-02 20:15, ebb,-26 +2020-03-02 22:38, slack,- +2020-03-03 03:23, flood,38 +2020-03-03 06:56, slack,- +2020-03-03 08:45, ebb,-26 +2020-03-03 11:32, slack,- +2020-03-03 16:11, flood,35 +2020-03-03 19:38, slack,- +2020-03-03 21:09, ebb,-25 +2020-03-03 23:32, slack,- +2020-03-04 04:17, flood,38 +2020-03-04 07:50, slack,- +2020-03-04 09:39, ebb,-27 +2020-03-04 12:20, slack,- +2020-03-04 17:05, flood,37 +2020-03-04 20:32, slack,- +2020-03-04 22:09, ebb,-25 +2020-03-05 00:26, slack,- +2020-03-05 05:11, flood,40 +2020-03-05 08:50, slack,- +2020-03-05 10:33, ebb,-28 +2020-03-05 13:14, slack,- +2020-03-05 17:59, flood,39 +2020-03-05 21:32, slack,- +2020-03-05 23:03, ebb,-27 +2020-03-06 01:20, slack,- +2020-03-06 06:05, flood,43 +2020-03-06 09:44, slack,- +2020-03-06 11:33, ebb,-31 +2020-03-06 14:08, slack,- +2020-03-06 18:59, flood,42 +2020-03-06 22:26, slack,- +2020-03-07 00:03, ebb,-30 +2020-03-07 02:08, slack,- +2020-03-07 06:59, flood,46 +2020-03-07 10:38, slack,- +2020-03-07 12:27, ebb,-34 +2020-03-07 14:56, slack,- +2020-03-07 19:59, flood,46 +2020-03-07 23:20, slack,- +2020-03-08 00:57, ebb,-33 +2020-03-08 03:02, slack,- +2020-03-08 07:59, flood,50 +2020-03-08 11:32, slack,- +2020-03-08 13:21, ebb,-37 +2020-03-08 15:44, slack,- +2020-03-08 20:59, flood,51 +2020-03-09 00:08, slack,- +2020-03-09 01:45, ebb,-36 +2020-03-09 03:56, slack,- +2020-03-09 08:59, flood,54 +2020-03-09 12:26, slack,- +2020-03-09 14:09, ebb,-39 +2020-03-09 16:32, slack,- +2020-03-09 21:53, flood,55 +2020-03-10 01:02, slack,- +2020-03-10 02:39, ebb,-38 +2020-03-10 04:44, slack,- +2020-03-10 09:53, flood,57 +2020-03-10 13:14, slack,- +2020-03-10 15:03, ebb,-41 +2020-03-10 17:20, slack,- +2020-03-10 22:41, flood,57 +2020-03-11 01:50, slack,- +2020-03-11 03:27, ebb,-39 +2020-03-11 05:38, slack,- +2020-03-11 10:47, flood,57 +2020-03-11 14:08, slack,- +2020-03-11 15:51, ebb,-41 +2020-03-11 18:08, slack,- +2020-03-11 23:23, flood,56 +2020-03-12 02:38, slack,- +2020-03-12 04:21, ebb,-40 +2020-03-12 06:32, slack,- +2020-03-12 11:41, flood,55 +2020-03-12 15:02, slack,- +2020-03-12 16:39, ebb,-40 +2020-03-12 18:56, slack,- +2020-03-13 00:17, flood,53 +2020-03-13 03:32, slack,- +2020-03-13 05:09, ebb,-39 +2020-03-13 07:26, slack,- +2020-03-13 12:47, flood,51 +2020-03-13 15:56, slack,- +2020-03-13 17:33, ebb,-37 +2020-03-13 19:44, slack,- +2020-03-14 01:17, flood,50 +2020-03-14 04:20, slack,- +2020-03-14 05:57, ebb,-37 +2020-03-14 08:20, slack,- +2020-03-14 14:11, flood,47 +2020-03-14 16:50, slack,- +2020-03-14 18:21, ebb,-34 +2020-03-14 20:44, slack,- +2020-03-15 02:23, flood,46 +2020-03-15 05:14, slack,- +2020-03-15 06:51, ebb,-34 +2020-03-15 09:26, slack,- +2020-03-15 15:35, flood,45 +2020-03-15 17:44, slack,- +2020-03-15 19:15, ebb,-30 +2020-03-15 21:44, slack,- +2020-03-16 03:35, flood,42 +2020-03-16 06:08, slack,- +2020-03-16 07:39, ebb,-30 +2020-03-16 10:32, slack,- +2020-03-16 16:47, flood,43 +2020-03-16 18:44, slack,- +2020-03-16 20:09, ebb,-26 +2020-03-16 22:44, slack,- +2020-03-17 05:05, flood,39 +2020-03-17 07:08, slack,- +2020-03-17 08:39, ebb,-27 +2020-03-17 11:38, slack,- +2020-03-17 17:53, flood,43 +2020-03-17 19:44, slack,- +2020-03-17 21:09, ebb,-23 +2020-03-17 23:50, slack,- +2020-03-18 06:11, flood,39 +2020-03-18 08:08, slack,- +2020-03-18 09:45, ebb,-24 +2020-03-18 12:38, slack,- +2020-03-18 18:53, flood,44 +2020-03-18 20:44, slack,- +2020-03-18 23:39, ebb,-23 +2020-03-19 00:44, slack,- +2020-03-19 07:11, flood,40 +2020-03-19 09:02, slack,- +2020-03-19 12:15, ebb,-25 +2020-03-19 13:32, slack,- +2020-03-19 19:53, flood,46 +2020-03-19 21:44, slack,- +2020-03-20 00:33, ebb,-24 +2020-03-20 01:38, slack,- +2020-03-20 08:11, flood,42 +2020-03-20 10:02, slack,- +2020-03-20 13:03, ebb,-27 +2020-03-20 14:20, slack,- +2020-03-20 20:47, flood,48 +2020-03-20 22:38, slack,- +2020-03-21 01:21, ebb,-26 +2020-03-21 02:32, slack,- +2020-03-21 09:05, flood,44 +2020-03-21 10:50, slack,- +2020-03-21 13:45, ebb,-28 +2020-03-21 15:08, slack,- +2020-03-21 21:35, flood,49 +2020-03-21 23:26, slack,- +2020-03-22 02:03, ebb,-27 +2020-03-22 03:20, slack,- +2020-03-22 09:47, flood,45 +2020-03-22 11:38, slack,- +2020-03-22 14:21, ebb,-28 +2020-03-22 15:50, slack,- +2020-03-22 22:17, flood,49 +2020-03-23 00:08, slack,- +2020-03-23 02:39, ebb,-27 +2020-03-23 04:02, slack,- +2020-03-23 10:29, flood,45 +2020-03-23 12:26, slack,- +2020-03-23 14:21, ebb,-28 +2020-03-23 16:32, slack,- +2020-03-23 22:59, flood,46 +2020-03-24 00:50, slack,- +2020-03-24 02:51, ebb,-28 +2020-03-24 04:44, slack,- +2020-03-24 10:59, flood,43 +2020-03-24 13:08, slack,- +2020-03-24 14:51, ebb,-29 +2020-03-24 17:08, slack,- +2020-03-24 23:35, flood,43 +2020-03-25 01:32, slack,- +2020-03-25 03:15, ebb,-29 +2020-03-25 05:26, slack,- +2020-03-25 10:23, flood,42 +2020-03-25 13:44, slack,- +2020-03-25 15:27, ebb,-30 +2020-03-25 17:44, slack,- +2020-03-25 22:41, flood,40 +2020-03-26 02:14, slack,- +2020-03-26 03:51, ebb,-29 +2020-03-26 06:08, slack,- +2020-03-26 10:53, flood,42 +2020-03-26 14:26, slack,- +2020-03-26 16:03, ebb,-30 +2020-03-26 18:20, slack,- +2020-03-26 23:05, flood,40 +2020-03-27 02:50, slack,- +2020-03-27 04:27, ebb,-30 +2020-03-27 06:50, slack,- +2020-03-27 11:35, flood,41 +2020-03-27 15:08, slack,- +2020-03-27 16:45, ebb,-30 +2020-03-27 18:56, slack,- +2020-03-27 23:41, flood,40 +2020-03-28 03:26, slack,- +2020-03-28 05:09, ebb,-30 +2020-03-28 07:32, slack,- +2020-03-28 12:17, flood,40 +2020-03-28 15:50, slack,- +2020-03-28 17:27, ebb,-30 +2020-03-28 19:32, slack,- +2020-03-29 00:23, flood,40 +2020-03-29 04:08, slack,- +2020-03-29 05:51, ebb,-30 +2020-03-29 08:14, slack,- +2020-03-29 13:11, flood,38 +2020-03-29 16:32, slack,- +2020-03-29 18:09, ebb,-29 +2020-03-29 20:20, slack,- +2020-03-30 01:11, flood,39 +2020-03-30 04:44, slack,- +2020-03-30 06:33, ebb,-30 +2020-03-30 09:02, slack,- +2020-03-30 13:59, flood,38 +2020-03-30 17:20, slack,- +2020-03-30 18:57, ebb,-28 +2020-03-30 21:08, slack,- +2020-03-31 02:05, flood,39 +2020-03-31 05:32, slack,- +2020-03-31 07:21, ebb,-29 +2020-03-31 10:02, slack,- +2020-03-31 14:53, flood,38 +2020-03-31 18:14, slack,- +2020-03-31 19:51, ebb,-27 +2020-03-31 22:02, slack,- +2020-04-01 02:59, flood,39 +2020-04-01 06:20, slack,- +2020-04-01 08:15, ebb,-29 +2020-04-01 10:56, slack,- +2020-04-01 15:47, flood,38 +2020-04-01 19:08, slack,- +2020-04-01 20:45, ebb,-27 +2020-04-01 23:02, slack,- +2020-04-02 03:47, flood,40 +2020-04-02 07:20, slack,- +2020-04-02 09:09, ebb,-29 +2020-04-02 11:50, slack,- +2020-04-02 16:41, flood,40 +2020-04-02 20:08, slack,- +2020-04-02 21:39, ebb,-27 +2020-04-03 00:02, slack,- +2020-04-03 04:47, flood,42 +2020-04-03 08:20, slack,- +2020-04-03 10:09, ebb,-29 +2020-04-03 12:44, slack,- +2020-04-03 17:41, flood,42 +2020-04-03 21:02, slack,- +2020-04-03 22:39, ebb,-28 +2020-04-04 00:56, slack,- +2020-04-04 05:47, flood,45 +2020-04-04 09:20, slack,- +2020-04-04 11:09, ebb,-32 +2020-04-04 13:38, slack,- +2020-04-04 18:35, flood,45 +2020-04-04 22:02, slack,- +2020-04-04 23:39, ebb,-31 +2020-04-05 01:50, slack,- +2020-04-05 06:41, flood,48 +2020-04-05 10:20, slack,- +2020-04-05 12:03, ebb,-34 +2020-04-05 14:32, slack,- +2020-04-05 19:35, flood,49 +2020-04-05 22:56, slack,- +2020-04-06 00:33, ebb,-34 +2020-04-06 02:44, slack,- +2020-04-06 07:47, flood,51 +2020-04-06 11:14, slack,- +2020-04-06 12:57, ebb,-37 +2020-04-06 15:20, slack,- +2020-04-06 20:41, flood,52 +2020-04-06 23:44, slack,- +2020-04-07 01:27, ebb,-37 +2020-04-07 03:38, slack,- +2020-04-07 08:47, flood,54 +2020-04-07 12:08, slack,- +2020-04-07 13:51, ebb,-38 +2020-04-07 16:08, slack,- +2020-04-07 21:35, flood,55 +2020-04-08 00:38, slack,- +2020-04-08 02:21, ebb,-39 +2020-04-08 04:32, slack,- +2020-04-08 09:53, flood,56 +2020-04-08 13:02, slack,- +2020-04-08 14:39, ebb,-39 +2020-04-08 16:56, slack,- +2020-04-08 22:23, flood,56 +2020-04-09 01:26, slack,- +2020-04-09 03:09, ebb,-40 +2020-04-09 05:20, slack,- +2020-04-09 10:47, flood,56 +2020-04-09 13:50, slack,- +2020-04-09 15:33, ebb,-39 +2020-04-09 17:44, slack,- +2020-04-09 23:05, flood,55 +2020-04-10 02:14, slack,- +2020-04-10 03:57, ebb,-40 +2020-04-10 06:14, slack,- +2020-04-10 11:47, flood,53 +2020-04-10 14:44, slack,- +2020-04-10 16:21, ebb,-37 +2020-04-10 18:32, slack,- +2020-04-10 23:59, flood,51 +2020-04-11 03:08, slack,- +2020-04-11 04:45, ebb,-38 +2020-04-11 07:08, slack,- +2020-04-11 13:17, flood,50 +2020-04-11 15:38, slack,- +2020-04-11 17:09, ebb,-35 +2020-04-11 19:26, slack,- +2020-04-12 01:05, flood,46 +2020-04-12 03:56, slack,- +2020-04-12 05:33, ebb,-36 +2020-04-12 08:02, slack,- +2020-04-12 14:29, flood,48 +2020-04-12 16:32, slack,- +2020-04-12 18:03, ebb,-31 +2020-04-12 20:20, slack,- +2020-04-13 02:35, flood,42 +2020-04-13 04:50, slack,- +2020-04-13 06:27, ebb,-32 +2020-04-13 09:08, slack,- +2020-04-13 15:29, flood,46 +2020-04-13 17:26, slack,- +2020-04-13 18:51, ebb,-28 +2020-04-13 21:20, slack,- +2020-04-14 03:41, flood,39 +2020-04-14 05:44, slack,- +2020-04-14 07:15, ebb,-29 +2020-04-14 10:08, slack,- +2020-04-14 16:29, flood,44 +2020-04-14 18:26, slack,- +2020-04-14 19:51, ebb,-25 +2020-04-14 22:26, slack,- +2020-04-15 04:47, flood,37 +2020-04-15 06:44, slack,- +2020-04-15 08:09, ebb,-25 +2020-04-15 11:14, slack,- +2020-04-15 17:29, flood,43 +2020-04-15 19:20, slack,- +2020-04-15 20:51, ebb,-22 +2020-04-15 23:26, slack,- +2020-04-16 05:47, flood,37 +2020-04-16 07:38, slack,- +2020-04-16 09:15, ebb,-23 +2020-04-16 10:57, ebb,-22 +2020-04-16 12:08, slack,- +2020-04-16 18:29, flood,43 +2020-04-16 20:20, slack,- +2020-04-16 23:21, ebb,-22 +2020-04-17 00:26, slack,- +2020-04-17 06:47, flood,37 +2020-04-17 08:38, slack,- +2020-04-17 11:57, ebb,-24 +2020-04-17 13:02, slack,- +2020-04-17 19:23, flood,44 +2020-04-17 21:14, slack,- +2020-04-18 00:15, ebb,-24 +2020-04-18 01:14, slack,- +2020-04-18 07:41, flood,39 +2020-04-18 09:32, slack,- +2020-04-18 12:39, ebb,-25 +2020-04-18 13:50, slack,- +2020-04-18 20:17, flood,44 +2020-04-18 22:08, slack,- +2020-04-19 01:03, ebb,-25 +2020-04-19 02:02, slack,- +2020-04-19 08:35, flood,40 +2020-04-19 10:26, slack,- +2020-04-19 13:21, ebb,-25 +2020-04-19 14:32, slack,- +2020-04-19 21:05, flood,44 +2020-04-19 22:56, slack,- +2020-04-20 01:45, ebb,-26 +2020-04-20 02:50, slack,- +2020-04-20 09:23, flood,41 +2020-04-20 11:08, slack,- +2020-04-20 13:39, ebb,-26 +2020-04-20 15:14, slack,- +2020-04-20 21:47, flood,43 +2020-04-20 23:38, slack,- +2020-04-21 02:09, ebb,-27 +2020-04-21 03:32, slack,- +2020-04-21 09:59, flood,41 +2020-04-21 11:56, slack,- +2020-04-21 13:39, ebb,-27 +2020-04-21 15:56, slack,- +2020-04-21 22:29, flood,41 +2020-04-22 00:20, slack,- +2020-04-22 02:09, ebb,-28 +2020-04-22 04:14, slack,- +2020-04-22 10:23, flood,40 +2020-04-22 12:32, slack,- +2020-04-22 14:15, ebb,-28 +2020-04-22 16:32, slack,- +2020-04-22 21:29, flood,39 +2020-04-23 00:56, slack,- +2020-04-23 02:39, ebb,-29 +2020-04-23 04:56, slack,- +2020-04-23 09:53, flood,42 +2020-04-23 13:14, slack,- +2020-04-23 14:51, ebb,-29 +2020-04-23 17:08, slack,- +2020-04-23 21:53, flood,41 +2020-04-24 01:38, slack,- +2020-04-24 03:15, ebb,-30 +2020-04-24 05:38, slack,- +2020-04-24 10:23, flood,43 +2020-04-24 13:56, slack,- +2020-04-24 15:33, ebb,-30 +2020-04-24 17:44, slack,- +2020-04-24 22:29, flood,42 +2020-04-25 02:14, slack,- +2020-04-25 03:57, ebb,-31 +2020-04-25 06:14, slack,- +2020-04-25 11:05, flood,43 +2020-04-25 14:38, slack,- +2020-04-25 16:15, ebb,-31 +2020-04-25 18:20, slack,- +2020-04-25 23:05, flood,43 +2020-04-26 02:50, slack,- +2020-04-26 04:39, ebb,-32 +2020-04-26 06:56, slack,- +2020-04-26 11:47, flood,42 +2020-04-26 15:20, slack,- +2020-04-26 16:57, ebb,-31 +2020-04-26 18:56, slack,- +2020-04-26 23:53, flood,42 +2020-04-27 03:32, slack,- +2020-04-27 05:21, ebb,-33 +2020-04-27 07:38, slack,- +2020-04-27 12:41, flood,41 +2020-04-27 16:08, slack,- +2020-04-27 17:45, ebb,-31 +2020-04-27 19:44, slack,- +2020-04-28 00:41, flood,41 +2020-04-28 04:14, slack,- +2020-04-28 06:09, ebb,-33 +2020-04-28 08:32, slack,- +2020-04-28 13:35, flood,41 +2020-04-28 16:56, slack,- +2020-04-28 18:33, ebb,-30 +2020-04-28 20:32, slack,- +2020-04-29 01:35, flood,41 +2020-04-29 05:02, slack,- +2020-04-29 06:57, ebb,-32 +2020-04-29 09:26, slack,- +2020-04-29 14:29, flood,41 +2020-04-29 17:50, slack,- +2020-04-29 19:27, ebb,-30 +2020-04-29 21:32, slack,- +2020-04-30 02:35, flood,41 +2020-04-30 05:56, slack,- +2020-04-30 07:45, ebb,-32 +2020-04-30 10:26, slack,- +2020-04-30 15:23, flood,42 +2020-04-30 18:44, slack,- +2020-04-30 20:15, ebb,-29 +2020-04-30 22:38, slack,- +2020-05-01 03:29, flood,42 +2020-05-01 06:56, slack,- +2020-05-01 08:39, ebb,-31 +2020-05-01 11:20, slack,- +2020-05-01 16:17, flood,43 +2020-05-01 19:38, slack,- +2020-05-01 21:15, ebb,-29 +2020-05-01 23:38, slack,- +2020-05-02 04:29, flood,44 +2020-05-02 07:56, slack,- +2020-05-02 09:39, ebb,-31 +2020-05-02 12:20, slack,- +2020-05-02 17:17, flood,45 +2020-05-02 20:38, slack,- +2020-05-02 22:15, ebb,-30 +2020-05-03 00:38, slack,- +2020-05-03 05:29, flood,46 +2020-05-03 08:56, slack,- +2020-05-03 10:39, ebb,-32 +2020-05-03 13:08, slack,- +2020-05-03 18:11, flood,48 +2020-05-03 21:38, slack,- +2020-05-03 23:15, ebb,-32 +2020-05-04 01:32, slack,- +2020-05-04 06:29, flood,48 +2020-05-04 09:56, slack,- +2020-05-04 11:39, ebb,-34 +2020-05-04 14:02, slack,- +2020-05-04 19:11, flood,50 +2020-05-04 22:32, slack,- +2020-05-05 00:15, ebb,-35 +2020-05-05 02:26, slack,- +2020-05-05 07:35, flood,50 +2020-05-05 10:56, slack,- +2020-05-05 12:33, ebb,-35 +2020-05-05 14:56, slack,- +2020-05-05 20:17, flood,52 +2020-05-05 23:26, slack,- +2020-05-06 01:03, ebb,-37 +2020-05-06 03:20, slack,- +2020-05-06 08:53, flood,53 +2020-05-06 11:50, slack,- +2020-05-06 13:27, ebb,-36 +2020-05-06 15:44, slack,- +2020-05-06 21:29, flood,54 +2020-05-07 00:14, slack,- +2020-05-07 01:57, ebb,-38 +2020-05-07 04:14, slack,- +2020-05-07 10:11, flood,55 +2020-05-07 12:44, slack,- +2020-05-07 14:21, ebb,-36 +2020-05-07 16:32, slack,- +2020-05-07 22:17, flood,54 +2020-05-08 01:02, slack,- +2020-05-08 02:51, ebb,-39 +2020-05-08 05:08, slack,- +2020-05-08 11:11, flood,55 +2020-05-08 13:38, slack,- +2020-05-08 15:15, ebb,-36 +2020-05-08 17:20, slack,- +2020-05-08 23:05, flood,52 +2020-05-09 01:56, slack,- +2020-05-09 03:39, ebb,-38 +2020-05-09 06:02, slack,- +2020-05-09 12:17, flood,53 +2020-05-09 14:26, slack,- +2020-05-09 16:03, ebb,-34 +2020-05-09 18:14, slack,- +2020-05-09 23:59, flood,48 +2020-05-10 02:44, slack,- +2020-05-10 04:27, ebb,-37 +2020-05-10 06:56, slack,- +2020-05-10 13:17, flood,51 +2020-05-10 15:20, slack,- +2020-05-10 16:51, ebb,-32 +2020-05-10 19:08, slack,- +2020-05-11 01:29, flood,44 +2020-05-11 03:38, slack,- +2020-05-11 05:15, ebb,-34 +2020-05-11 07:50, slack,- +2020-05-11 14:17, flood,49 +2020-05-11 16:14, slack,- +2020-05-11 17:45, ebb,-29 +2020-05-11 20:02, slack,- +2020-05-12 02:29, flood,41 +2020-05-12 04:26, slack,- +2020-05-12 06:03, ebb,-31 +2020-05-12 08:44, slack,- +2020-05-12 15:17, flood,47 +2020-05-12 17:08, slack,- +2020-05-12 18:33, ebb,-27 +2020-05-12 21:02, slack,- +2020-05-13 03:29, flood,38 +2020-05-13 05:20, slack,- +2020-05-13 06:51, ebb,-28 +2020-05-13 09:44, slack,- +2020-05-13 16:11, flood,45 +2020-05-13 18:02, slack,- +2020-05-13 19:27, ebb,-24 +2020-05-13 22:02, slack,- +2020-05-14 04:23, flood,36 +2020-05-14 06:14, slack,- +2020-05-14 07:45, ebb,-25 +2020-05-14 10:44, slack,- +2020-05-14 17:05, flood,43 +2020-05-14 18:56, slack,- +2020-05-14 20:21, ebb,-22 +2020-05-14 23:02, slack,- +2020-05-15 05:17, flood,35 +2020-05-15 07:08, slack,- +2020-05-15 08:39, ebb,-23 +2020-05-15 11:38, slack,- +2020-05-15 17:59, flood,41 +2020-05-15 19:50, slack,- +2020-05-15 22:57, ebb,-21 +2020-05-15 23:56, slack,- +2020-05-16 06:17, flood,35 +2020-05-16 08:02, slack,- +2020-05-16 09:39, ebb,-21 +2020-05-16 11:21, ebb,-22 +2020-05-16 12:26, slack,- +2020-05-16 18:53, flood,40 +2020-05-16 20:44, slack,- +2020-05-16 23:51, ebb,-23 +2020-05-17 00:44, slack,- +2020-05-17 07:05, flood,35 +2020-05-17 08:56, slack,- +2020-05-17 12:09, ebb,-22 +2020-05-17 13:14, slack,- +2020-05-17 19:41, flood,39 +2020-05-17 21:32, slack,- +2020-05-18 00:33, ebb,-24 +2020-05-18 01:38, slack,- +2020-05-18 07:59, flood,35 +2020-05-18 09:50, slack,- +2020-05-18 12:45, ebb,-23 +2020-05-18 13:56, slack,- +2020-05-18 20:29, flood,38 +2020-05-18 22:20, slack,- +2020-05-19 01:15, ebb,-25 +2020-05-19 02:20, slack,- +2020-05-19 08:47, flood,36 +2020-05-19 10:38, slack,- +2020-05-19 12:21, ebb,-24 +2020-05-19 14:32, slack,- +2020-05-19 21:17, flood,37 +2020-05-19 23:02, slack,- +2020-05-20 01:03, ebb,-26 +2020-05-20 03:02, slack,- +2020-05-20 09:23, flood,36 +2020-05-20 11:20, slack,- +2020-05-20 12:57, ebb,-25 +2020-05-20 15:14, slack,- +2020-05-20 19:59, flood,36 +2020-05-20 23:44, slack,- +2020-05-21 01:27, ebb,-27 +2020-05-21 03:44, slack,- +2020-05-21 08:35, flood,38 +2020-05-21 12:02, slack,- +2020-05-21 13:33, ebb,-27 +2020-05-21 15:50, slack,- +2020-05-21 20:35, flood,39 +2020-05-22 00:20, slack,- +2020-05-22 02:03, ebb,-29 +2020-05-22 04:26, slack,- +2020-05-22 09:17, flood,41 +2020-05-22 12:44, slack,- +2020-05-22 14:21, ebb,-28 +2020-05-22 16:32, slack,- +2020-05-22 21:17, flood,42 +2020-05-23 00:56, slack,- +2020-05-23 02:45, ebb,-31 +2020-05-23 05:08, slack,- +2020-05-23 09:59, flood,43 +2020-05-23 13:26, slack,- +2020-05-23 15:03, ebb,-30 +2020-05-23 17:08, slack,- +2020-05-23 21:59, flood,44 +2020-05-24 01:38, slack,- +2020-05-24 03:27, ebb,-33 +2020-05-24 05:50, slack,- +2020-05-24 10:41, flood,44 +2020-05-24 14:14, slack,- +2020-05-24 15:45, ebb,-31 +2020-05-24 17:50, slack,- +2020-05-24 22:41, flood,45 +2020-05-25 02:14, slack,- +2020-05-25 04:09, ebb,-34 +2020-05-25 06:32, slack,- +2020-05-25 11:23, flood,45 +2020-05-25 14:56, slack,- +2020-05-25 16:33, ebb,-32 +2020-05-25 18:32, slack,- +2020-05-25 23:23, flood,45 +2020-05-26 03:02, slack,- +2020-05-26 04:57, ebb,-35 +2020-05-26 07:14, slack,- +2020-05-26 12:17, flood,45 +2020-05-26 15:44, slack,- +2020-05-26 17:21, ebb,-32 +2020-05-26 19:14, slack,- +2020-05-27 00:17, flood,44 +2020-05-27 03:44, slack,- +2020-05-27 05:39, ebb,-36 +2020-05-27 08:02, slack,- +2020-05-27 13:11, flood,45 +2020-05-27 16:32, slack,- +2020-05-27 18:09, ebb,-32 +2020-05-27 20:08, slack,- +2020-05-28 01:11, flood,44 +2020-05-28 04:38, slack,- +2020-05-28 06:33, ebb,-36 +2020-05-28 08:56, slack,- +2020-05-28 14:11, flood,45 +2020-05-28 17:26, slack,- +2020-05-28 19:03, ebb,-32 +2020-05-28 21:08, slack,- +2020-05-29 02:11, flood,45 +2020-05-29 05:32, slack,- +2020-05-29 07:21, ebb,-35 +2020-05-29 09:56, slack,- +2020-05-29 15:05, flood,46 +2020-05-29 18:20, slack,- +2020-05-29 19:51, ebb,-32 +2020-05-29 22:14, slack,- +2020-05-30 03:11, flood,45 +2020-05-30 06:32, slack,- +2020-05-30 08:15, ebb,-34 +2020-05-30 10:50, slack,- +2020-05-30 15:59, flood,47 +2020-05-30 19:14, slack,- +2020-05-30 20:51, ebb,-31 +2020-05-30 23:14, slack,- +2020-05-31 04:11, flood,46 +2020-05-31 07:32, slack,- +2020-05-31 09:15, ebb,-33 +2020-05-31 11:50, slack,- +2020-05-31 16:53, flood,48 +2020-05-31 20:14, slack,- +2020-05-31 21:51, ebb,-31 +2020-06-01 00:14, slack,- +2020-06-01 05:11, flood,46 +2020-06-01 08:32, slack,- +2020-06-01 10:15, ebb,-32 +2020-06-01 12:44, slack,- +2020-06-01 17:47, flood,49 +2020-06-01 21:08, slack,- +2020-06-01 22:51, ebb,-33 +2020-06-02 01:14, slack,- +2020-06-02 06:17, flood,47 +2020-06-02 09:38, slack,- +2020-06-02 11:15, ebb,-32 +2020-06-02 13:38, slack,- +2020-06-02 18:47, flood,50 +2020-06-02 22:08, slack,- +2020-06-02 23:51, ebb,-34 +2020-06-03 02:14, slack,- +2020-06-03 07:41, flood,48 +2020-06-03 10:38, slack,- +2020-06-03 12:15, ebb,-33 +2020-06-03 14:32, slack,- +2020-06-03 20:05, flood,50 +2020-06-03 23:02, slack,- +2020-06-04 00:45, ebb,-36 +2020-06-04 03:08, slack,- +2020-06-04 09:23, flood,51 +2020-06-04 11:32, slack,- +2020-06-04 13:09, ebb,-33 +2020-06-04 15:20, slack,- +2020-06-04 21:35, flood,51 +2020-06-04 23:56, slack,- +2020-06-05 01:39, ebb,-37 +2020-06-05 04:02, slack,- +2020-06-05 10:23, flood,54 +2020-06-05 12:26, slack,- +2020-06-05 14:03, ebb,-33 +2020-06-05 16:14, slack,- +2020-06-05 22:29, flood,51 +2020-06-06 00:44, slack,- +2020-06-06 02:33, ebb,-37 +2020-06-06 04:56, slack,- +2020-06-06 11:17, flood,55 +2020-06-06 13:20, slack,- +2020-06-06 14:57, ebb,-32 +2020-06-06 17:02, slack,- +2020-06-06 23:23, flood,50 +2020-06-07 01:32, slack,- +2020-06-07 03:21, ebb,-36 +2020-06-07 05:50, slack,- +2020-06-07 12:11, flood,55 +2020-06-07 14:14, slack,- +2020-06-07 15:45, ebb,-31 +2020-06-07 17:56, slack,- +2020-06-08 00:17, flood,47 +2020-06-08 02:26, slack,- +2020-06-08 04:09, ebb,-35 +2020-06-08 06:38, slack,- +2020-06-08 13:05, flood,53 +2020-06-08 15:02, slack,- +2020-06-08 16:39, ebb,-30 +2020-06-08 18:50, slack,- +2020-06-09 01:17, flood,44 +2020-06-09 03:14, slack,- +2020-06-09 04:57, ebb,-33 +2020-06-09 07:32, slack,- +2020-06-09 13:59, flood,50 +2020-06-09 15:56, slack,- +2020-06-09 17:27, ebb,-28 +2020-06-09 19:44, slack,- +2020-06-10 02:11, flood,41 +2020-06-10 04:08, slack,- +2020-06-10 05:39, ebb,-30 +2020-06-10 08:20, slack,- +2020-06-10 14:53, flood,48 +2020-06-10 16:44, slack,- +2020-06-10 18:15, ebb,-26 +2020-06-10 20:38, slack,- +2020-06-11 03:05, flood,38 +2020-06-11 04:56, slack,- +2020-06-11 06:27, ebb,-28 +2020-06-11 09:14, slack,- +2020-06-11 15:41, flood,44 +2020-06-11 17:32, slack,- +2020-06-11 19:03, ebb,-24 +2020-06-11 21:32, slack,- +2020-06-12 03:53, flood,36 +2020-06-12 05:44, slack,- +2020-06-12 07:15, ebb,-26 +2020-06-12 10:08, slack,- +2020-06-12 16:35, flood,41 +2020-06-12 18:26, slack,- +2020-06-12 19:51, ebb,-22 +2020-06-12 22:32, slack,- +2020-06-13 04:41, flood,33 +2020-06-13 06:38, slack,- +2020-06-13 08:03, ebb,-24 +2020-06-13 11:02, slack,- +2020-06-13 17:23, flood,38 +2020-06-13 19:14, slack,- +2020-06-13 20:45, ebb,-21 +2020-06-13 23:26, slack,- +2020-06-14 05:29, flood,32 +2020-06-14 07:26, slack,- +2020-06-14 08:57, ebb,-22 +2020-06-14 11:44, slack,- +2020-06-14 18:11, flood,35 +2020-06-14 20:02, slack,- +2020-06-14 21:39, ebb,-21 +2020-06-14 23:21, ebb,-21 +2020-06-15 00:14, slack,- +2020-06-15 04:59, flood,31 +2020-06-15 08:20, slack,- +2020-06-15 09:51, ebb,-21 +2020-06-15 12:32, slack,- +2020-06-15 18:59, flood,33 +2020-06-15 20:50, slack,- +2020-06-16 00:03, ebb,-22 +2020-06-16 01:02, slack,- +2020-06-16 05:41, flood,31 +2020-06-16 09:08, slack,- +2020-06-16 10:45, ebb,-21 +2020-06-16 13:14, slack,- +2020-06-16 17:47, flood,33 +2020-06-16 21:38, slack,- +2020-06-16 23:33, ebb,-23 +2020-06-17 01:50, slack,- +2020-06-17 06:23, flood,32 +2020-06-17 10:02, slack,- +2020-06-17 11:33, ebb,-23 +2020-06-17 13:56, slack,- +2020-06-17 18:29, flood,35 +2020-06-17 22:26, slack,- +2020-06-18 00:09, ebb,-25 +2020-06-18 02:32, slack,- +2020-06-18 07:11, flood,34 +2020-06-18 10:50, slack,- +2020-06-18 12:15, ebb,-24 +2020-06-18 14:32, slack,- +2020-06-18 19:11, flood,37 +2020-06-18 23:08, slack,- +2020-06-19 00:45, ebb,-27 +2020-06-19 03:20, slack,- +2020-06-19 07:59, flood,36 +2020-06-19 11:32, slack,- +2020-06-19 13:03, ebb,-26 +2020-06-19 15:14, slack,- +2020-06-19 19:53, flood,39 +2020-06-19 23:44, slack,- +2020-06-20 01:27, ebb,-29 +2020-06-20 03:56, slack,- +2020-06-20 08:47, flood,40 +2020-06-20 12:20, slack,- +2020-06-20 13:51, ebb,-28 +2020-06-20 15:56, slack,- +2020-06-20 20:41, flood,42 +2020-06-21 00:26, slack,- +2020-06-21 02:15, ebb,-32 +2020-06-21 04:38, slack,- +2020-06-21 09:35, flood,43 +2020-06-21 13:02, slack,- +2020-06-21 14:33, ebb,-30 +2020-06-21 16:38, slack,- +2020-06-21 21:29, flood,45 +2020-06-22 01:08, slack,- +2020-06-22 02:57, ebb,-34 +2020-06-22 05:20, slack,- +2020-06-22 10:17, flood,46 +2020-06-22 13:44, slack,- +2020-06-22 15:21, ebb,-32 +2020-06-22 17:20, slack,- +2020-06-22 22:17, flood,48 +2020-06-23 01:50, slack,- +2020-06-23 03:45, ebb,-36 +2020-06-23 06:02, slack,- +2020-06-23 11:05, flood,47 +2020-06-23 14:32, slack,- +2020-06-23 16:09, ebb,-33 +2020-06-23 18:08, slack,- +2020-06-23 23:05, flood,49 +2020-06-24 02:38, slack,- +2020-06-24 04:33, ebb,-38 +2020-06-24 06:50, slack,- +2020-06-24 11:53, flood,48 +2020-06-24 15:20, slack,- +2020-06-24 16:57, ebb,-34 +2020-06-24 18:56, slack,- +2020-06-24 23:53, flood,49 +2020-06-25 03:26, slack,- +2020-06-25 05:21, ebb,-38 +2020-06-25 07:38, slack,- +2020-06-25 12:47, flood,49 +2020-06-25 16:08, slack,- +2020-06-25 17:45, ebb,-35 +2020-06-25 19:44, slack,- +2020-06-26 00:53, flood,48 +2020-06-26 04:20, slack,- +2020-06-26 06:09, ebb,-38 +2020-06-26 08:26, slack,- +2020-06-26 13:47, flood,49 +2020-06-26 17:02, slack,- +2020-06-26 18:39, ebb,-35 +2020-06-26 20:44, slack,- +2020-06-27 01:53, flood,48 +2020-06-27 05:14, slack,- +2020-06-27 07:03, ebb,-37 +2020-06-27 09:26, slack,- +2020-06-27 14:41, flood,50 +2020-06-27 17:56, slack,- +2020-06-27 19:33, ebb,-34 +2020-06-27 21:50, slack,- +2020-06-28 02:53, flood,47 +2020-06-28 06:08, slack,- +2020-06-28 07:51, ebb,-35 +2020-06-28 10:26, slack,- +2020-06-28 15:35, flood,50 +2020-06-28 18:50, slack,- +2020-06-28 20:27, ebb,-33 +2020-06-28 22:56, slack,- +2020-06-29 03:53, flood,46 +2020-06-29 07:08, slack,- +2020-06-29 08:51, ebb,-33 +2020-06-29 11:20, slack,- +2020-06-29 16:29, flood,49 +2020-06-29 19:50, slack,- +2020-06-29 21:21, ebb,-32 +2020-06-29 23:56, slack,- +2020-06-30 04:53, flood,45 +2020-06-30 08:14, slack,- +2020-06-30 09:51, ebb,-31 +2020-06-30 12:14, slack,- +2020-06-30 17:23, flood,48 +2020-06-30 20:44, slack,- +2020-06-30 22:27, ebb,-32 +2020-07-01 00:56, slack,- +2020-07-01 06:11, flood,44 +2020-07-01 09:14, slack,- +2020-07-01 10:51, ebb,-30 +2020-07-01 13:14, slack,- +2020-07-01 18:29, flood,47 +2020-07-01 21:44, slack,- +2020-07-01 23:27, ebb,-33 +2020-07-02 01:56, slack,- +2020-07-02 08:11, flood,47 +2020-07-02 10:20, slack,- +2020-07-02 11:57, ebb,-30 +2020-07-02 14:08, slack,- +2020-07-02 20:29, flood,47 +2020-07-02 22:38, slack,- +2020-07-03 00:27, ebb,-34 +2020-07-03 02:56, slack,- +2020-07-03 09:17, flood,51 +2020-07-03 11:14, slack,- +2020-07-03 12:51, ebb,-30 +2020-07-03 15:02, slack,- +2020-07-03 21:35, flood,49 +2020-07-03 23:32, slack,- +2020-07-04 01:27, ebb,-34 +2020-07-04 03:50, slack,- +2020-07-04 10:11, flood,55 +2020-07-04 12:08, slack,- +2020-07-04 13:51, ebb,-30 +2020-07-04 15:56, slack,- +2020-07-04 22:29, flood,50 +2020-07-05 00:26, slack,- +2020-07-05 02:15, ebb,-34 +2020-07-05 04:44, slack,- +2020-07-05 11:05, flood,56 +2020-07-05 13:02, slack,- +2020-07-05 14:45, ebb,-30 +2020-07-05 16:50, slack,- +2020-07-05 23:17, flood,49 +2020-07-06 01:14, slack,- +2020-07-06 03:03, ebb,-34 +2020-07-06 05:32, slack,- +2020-07-06 11:53, flood,56 +2020-07-06 13:50, slack,- +2020-07-06 15:33, ebb,-30 +2020-07-06 17:38, slack,- +2020-07-07 00:05, flood,47 +2020-07-07 02:02, slack,- +2020-07-07 03:51, ebb,-33 +2020-07-07 06:20, slack,- +2020-07-07 12:47, flood,53 +2020-07-07 14:44, slack,- +2020-07-07 16:21, ebb,-29 +2020-07-07 18:26, slack,- +2020-07-08 00:59, flood,44 +2020-07-08 02:50, slack,- +2020-07-08 04:33, ebb,-32 +2020-07-08 07:08, slack,- +2020-07-08 13:35, flood,50 +2020-07-08 15:32, slack,- +2020-07-08 17:03, ebb,-28 +2020-07-08 19:20, slack,- +2020-07-09 01:47, flood,41 +2020-07-09 03:38, slack,- +2020-07-09 05:15, ebb,-30 +2020-07-09 07:56, slack,- +2020-07-09 14:23, flood,47 +2020-07-09 16:20, slack,- +2020-07-09 17:51, ebb,-27 +2020-07-09 20:08, slack,- +2020-07-10 02:29, flood,38 +2020-07-10 04:26, slack,- +2020-07-10 06:03, ebb,-29 +2020-07-10 08:38, slack,- +2020-07-10 15:11, flood,43 +2020-07-10 17:02, slack,- +2020-07-10 18:33, ebb,-25 +2020-07-10 21:02, slack,- +2020-07-11 03:11, flood,35 +2020-07-11 05:14, slack,- +2020-07-11 06:45, ebb,-27 +2020-07-11 09:26, slack,- +2020-07-11 15:53, flood,38 +2020-07-11 17:50, slack,- +2020-07-11 19:15, ebb,-24 +2020-07-11 21:56, slack,- +2020-07-12 02:47, flood,33 +2020-07-12 06:02, slack,- +2020-07-12 07:27, ebb,-25 +2020-07-12 10:14, slack,- +2020-07-12 16:35, flood,34 +2020-07-12 18:38, slack,- +2020-07-12 20:03, ebb,-22 +2020-07-12 22:50, slack,- +2020-07-13 03:29, flood,32 +2020-07-13 06:50, slack,- +2020-07-13 08:15, ebb,-23 +2020-07-13 11:02, slack,- +2020-07-13 15:47, flood,33 +2020-07-13 19:26, slack,- +2020-07-13 20:51, ebb,-21 +2020-07-13 23:38, slack,- +2020-07-14 04:11, flood,31 +2020-07-14 07:38, slack,- +2020-07-14 09:03, ebb,-22 +2020-07-14 11:44, slack,- +2020-07-14 16:23, flood,33 +2020-07-14 20:08, slack,- +2020-07-14 21:39, ebb,-21 +2020-07-15 00:26, slack,- +2020-07-15 04:53, flood,30 +2020-07-15 08:32, slack,- +2020-07-15 09:57, ebb,-21 +2020-07-15 12:32, slack,- +2020-07-15 17:05, flood,34 +2020-07-15 20:56, slack,- +2020-07-15 22:33, ebb,-22 +2020-07-16 01:14, slack,- +2020-07-16 05:47, flood,31 +2020-07-16 09:26, slack,- +2020-07-16 10:51, ebb,-22 +2020-07-16 13:14, slack,- +2020-07-16 17:47, flood,35 +2020-07-16 21:44, slack,- +2020-07-16 23:21, ebb,-24 +2020-07-17 02:02, slack,- +2020-07-17 06:35, flood,33 +2020-07-17 10:14, slack,- +2020-07-17 11:45, ebb,-23 +2020-07-17 14:02, slack,- +2020-07-17 18:35, flood,37 +2020-07-17 22:32, slack,- +2020-07-18 00:09, ebb,-27 +2020-07-18 02:44, slack,- +2020-07-18 07:23, flood,36 +2020-07-18 11:02, slack,- +2020-07-18 12:33, ebb,-26 +2020-07-18 14:44, slack,- +2020-07-18 19:23, flood,40 +2020-07-18 23:14, slack,- +2020-07-19 00:57, ebb,-30 +2020-07-19 03:32, slack,- +2020-07-19 08:17, flood,40 +2020-07-19 11:50, slack,- +2020-07-19 13:21, ebb,-28 +2020-07-19 15:26, slack,- +2020-07-19 20:17, flood,43 +2020-07-19 23:56, slack,- +2020-07-20 01:45, ebb,-33 +2020-07-20 04:14, slack,- +2020-07-20 09:11, flood,44 +2020-07-20 12:38, slack,- +2020-07-20 14:09, ebb,-31 +2020-07-20 16:14, slack,- +2020-07-20 21:05, flood,47 +2020-07-21 00:44, slack,- +2020-07-21 02:33, ebb,-36 +2020-07-21 04:56, slack,- +2020-07-21 09:59, flood,48 +2020-07-21 13:20, slack,- +2020-07-21 14:57, ebb,-33 +2020-07-21 16:56, slack,- +2020-07-21 21:53, flood,51 +2020-07-22 01:26, slack,- +2020-07-22 03:21, ebb,-38 +2020-07-22 05:38, slack,- +2020-07-22 10:47, flood,51 +2020-07-22 14:08, slack,- +2020-07-22 15:45, ebb,-35 +2020-07-22 17:44, slack,- +2020-07-22 22:47, flood,53 +2020-07-23 02:14, slack,- +2020-07-23 04:09, ebb,-40 +2020-07-23 06:26, slack,- +2020-07-23 11:35, flood,52 +2020-07-23 14:56, slack,- +2020-07-23 16:33, ebb,-37 +2020-07-23 18:32, slack,- +2020-07-23 23:35, flood,53 +2020-07-24 03:08, slack,- +2020-07-24 04:57, ebb,-40 +2020-07-24 07:14, slack,- +2020-07-24 12:23, flood,52 +2020-07-24 15:50, slack,- +2020-07-24 17:27, ebb,-37 +2020-07-24 19:26, slack,- +2020-07-25 00:35, flood,52 +2020-07-25 04:02, slack,- +2020-07-25 05:45, ebb,-40 +2020-07-25 08:02, slack,- +2020-07-25 13:23, flood,52 +2020-07-25 16:38, slack,- +2020-07-25 18:15, ebb,-37 +2020-07-25 20:26, slack,- +2020-07-26 01:35, flood,50 +2020-07-26 04:56, slack,- +2020-07-26 06:39, ebb,-38 +2020-07-26 08:56, slack,- +2020-07-26 14:17, flood,51 +2020-07-26 17:32, slack,- +2020-07-26 19:09, ebb,-36 +2020-07-26 21:26, slack,- +2020-07-27 02:35, flood,48 +2020-07-27 05:50, slack,- +2020-07-27 07:33, ebb,-36 +2020-07-27 09:56, slack,- +2020-07-27 15:11, flood,50 +2020-07-27 18:26, slack,- +2020-07-27 20:03, ebb,-34 +2020-07-27 22:32, slack,- +2020-07-28 03:41, flood,45 +2020-07-28 06:50, slack,- +2020-07-28 08:27, ebb,-32 +2020-07-28 10:56, slack,- +2020-07-28 16:05, flood,48 +2020-07-28 19:20, slack,- +2020-07-28 20:57, ebb,-32 +2020-07-28 23:38, slack,- +2020-07-29 04:53, flood,43 +2020-07-29 07:56, slack,- +2020-07-29 09:27, ebb,-29 +2020-07-29 11:56, slack,- +2020-07-29 17:05, flood,45 +2020-07-29 20:20, slack,- +2020-07-29 22:03, ebb,-30 +2020-07-30 00:44, slack,- +2020-07-30 06:47, flood,43 +2020-07-30 08:56, slack,- +2020-07-30 10:33, ebb,-27 +2020-07-30 12:50, slack,- +2020-07-30 18:59, flood,44 +2020-07-30 21:20, slack,- +2020-07-30 23:09, ebb,-30 +2020-07-31 01:44, slack,- +2020-07-31 08:05, flood,47 +2020-07-31 10:02, slack,- +2020-07-31 11:39, ebb,-27 +2020-07-31 13:50, slack,- +2020-07-31 20:23, flood,45 +2020-07-31 22:20, slack,- +2020-08-01 00:21, ebb,-31 +2020-08-01 02:38, slack,- +2020-08-01 09:05, flood,51 +2020-08-01 10:56, slack,- +2020-08-01 12:45, ebb,-28 +2020-08-01 14:44, slack,- +2020-08-01 21:23, flood,48 +2020-08-01 23:14, slack,- +2020-08-02 01:21, ebb,-31 +2020-08-02 03:32, slack,- +2020-08-02 09:59, flood,55 +2020-08-02 11:50, slack,- +2020-08-02 13:51, ebb,-28 +2020-08-02 15:38, slack,- +2020-08-02 22:11, flood,50 +2020-08-03 00:08, slack,- +2020-08-03 02:15, ebb,-32 +2020-08-03 04:26, slack,- +2020-08-03 10:47, flood,56 +2020-08-03 12:44, slack,- +2020-08-03 14:39, ebb,-29 +2020-08-03 16:32, slack,- +2020-08-03 22:59, flood,50 +2020-08-04 00:56, slack,- +2020-08-04 02:57, ebb,-32 +2020-08-04 05:14, slack,- +2020-08-04 11:35, flood,55 +2020-08-04 13:32, slack,- +2020-08-04 15:27, ebb,-29 +2020-08-04 17:20, slack,- +2020-08-04 23:47, flood,48 +2020-08-05 01:44, slack,- +2020-08-05 03:33, ebb,-32 +2020-08-05 05:56, slack,- +2020-08-05 12:23, flood,52 +2020-08-05 14:20, slack,- +2020-08-05 16:03, ebb,-29 +2020-08-05 18:02, slack,- +2020-08-06 00:29, flood,45 +2020-08-06 02:26, slack,- +2020-08-06 04:15, ebb,-31 +2020-08-06 06:38, slack,- +2020-08-06 13:11, flood,49 +2020-08-06 15:02, slack,- +2020-08-06 16:39, ebb,-28 +2020-08-06 18:50, slack,- +2020-08-07 01:11, flood,42 +2020-08-07 03:14, slack,- +2020-08-07 04:51, ebb,-30 +2020-08-07 07:20, slack,- +2020-08-07 13:53, flood,44 +2020-08-07 15:44, slack,- +2020-08-07 17:21, ebb,-27 +2020-08-07 19:38, slack,- +2020-08-08 01:47, flood,38 +2020-08-08 03:56, slack,- +2020-08-08 05:33, ebb,-29 +2020-08-08 08:02, slack,- +2020-08-08 14:35, flood,39 +2020-08-08 16:32, slack,- +2020-08-08 17:57, ebb,-26 +2020-08-08 20:26, slack,- +2020-08-09 01:23, flood,36 +2020-08-09 04:38, slack,- +2020-08-09 06:15, ebb,-28 +2020-08-09 08:44, slack,- +2020-08-09 13:53, flood,35 +2020-08-09 17:14, slack,- +2020-08-09 18:39, ebb,-25 +2020-08-09 21:14, slack,- +2020-08-10 02:05, flood,34 +2020-08-10 05:26, slack,- +2020-08-10 06:57, ebb,-26 +2020-08-10 09:32, slack,- +2020-08-10 14:23, flood,34 +2020-08-10 17:56, slack,- +2020-08-10 19:21, ebb,-24 +2020-08-10 22:08, slack,- +2020-08-11 02:47, flood,32 +2020-08-11 06:14, slack,- +2020-08-11 07:39, ebb,-25 +2020-08-11 10:14, slack,- +2020-08-11 14:59, flood,34 +2020-08-11 18:38, slack,- +2020-08-11 20:09, ebb,-23 +2020-08-11 23:02, slack,- +2020-08-12 03:35, flood,31 +2020-08-12 07:02, slack,- +2020-08-12 08:27, ebb,-23 +2020-08-12 11:02, slack,- +2020-08-12 15:41, flood,34 +2020-08-12 19:26, slack,- +2020-08-12 20:57, ebb,-23 +2020-08-12 23:50, slack,- +2020-08-13 04:23, flood,31 +2020-08-13 07:50, slack,- +2020-08-13 09:21, ebb,-22 +2020-08-13 11:50, slack,- +2020-08-13 16:23, flood,34 +2020-08-13 20:14, slack,- +2020-08-13 21:51, ebb,-23 +2020-08-14 00:44, slack,- +2020-08-14 05:11, flood,32 +2020-08-14 08:44, slack,- +2020-08-14 10:15, ebb,-22 +2020-08-14 12:38, slack,- +2020-08-14 17:17, flood,36 +2020-08-14 21:02, slack,- +2020-08-14 22:45, ebb,-25 +2020-08-15 01:26, slack,- +2020-08-15 06:05, flood,34 +2020-08-15 09:44, slack,- +2020-08-15 11:09, ebb,-24 +2020-08-15 13:26, slack,- +2020-08-15 18:05, flood,38 +2020-08-15 21:56, slack,- +2020-08-15 23:39, ebb,-27 +2020-08-16 02:14, slack,- +2020-08-16 06:59, flood,37 +2020-08-16 10:32, slack,- +2020-08-16 12:03, ebb,-26 +2020-08-16 14:14, slack,- +2020-08-16 18:59, flood,41 +2020-08-16 22:44, slack,- +2020-08-17 00:27, ebb,-30 +2020-08-17 03:02, slack,- +2020-08-17 07:53, flood,41 +2020-08-17 11:20, slack,- +2020-08-17 12:57, ebb,-29 +2020-08-17 15:02, slack,- +2020-08-17 19:53, flood,45 +2020-08-17 23:32, slack,- +2020-08-18 01:15, ebb,-34 +2020-08-18 03:44, slack,- +2020-08-18 08:47, flood,46 +2020-08-18 12:08, slack,- +2020-08-18 13:45, ebb,-32 +2020-08-18 15:50, slack,- +2020-08-18 20:47, flood,50 +2020-08-19 00:20, slack,- +2020-08-19 02:09, ebb,-37 +2020-08-19 04:32, slack,- +2020-08-19 09:41, flood,50 +2020-08-19 12:56, slack,- +2020-08-19 14:33, ebb,-35 +2020-08-19 16:38, slack,- +2020-08-19 21:41, flood,54 +2020-08-20 01:08, slack,- +2020-08-20 02:57, ebb,-39 +2020-08-20 05:14, slack,- +2020-08-20 10:23, flood,54 +2020-08-20 13:44, slack,- +2020-08-20 15:27, ebb,-37 +2020-08-20 17:26, slack,- +2020-08-20 22:29, flood,56 +2020-08-21 01:56, slack,- +2020-08-21 03:45, ebb,-41 +2020-08-21 06:02, slack,- +2020-08-21 11:11, flood,55 +2020-08-21 14:32, slack,- +2020-08-21 16:15, ebb,-39 +2020-08-21 18:14, slack,- +2020-08-21 23:23, flood,56 +2020-08-22 02:50, slack,- +2020-08-22 04:33, ebb,-41 +2020-08-22 06:50, slack,- +2020-08-22 11:59, flood,55 +2020-08-22 15:26, slack,- +2020-08-22 17:03, ebb,-39 +2020-08-22 19:08, slack,- +2020-08-23 00:17, flood,53 +2020-08-23 03:44, slack,- +2020-08-23 05:27, ebb,-40 +2020-08-23 07:38, slack,- +2020-08-23 12:59, flood,53 +2020-08-23 16:14, slack,- +2020-08-23 17:51, ebb,-38 +2020-08-23 20:08, slack,- +2020-08-24 01:23, flood,50 +2020-08-24 04:38, slack,- +2020-08-24 06:15, ebb,-38 +2020-08-24 08:32, slack,- +2020-08-24 13:53, flood,51 +2020-08-24 17:08, slack,- +2020-08-24 18:45, ebb,-37 +2020-08-24 21:08, slack,- +2020-08-25 02:29, flood,47 +2020-08-25 05:32, slack,- +2020-08-25 07:09, ebb,-34 +2020-08-25 09:32, slack,- +2020-08-25 14:47, flood,48 +2020-08-25 18:02, slack,- +2020-08-25 19:39, ebb,-34 +2020-08-25 22:14, slack,- +2020-08-26 03:35, flood,44 +2020-08-26 06:32, slack,- +2020-08-26 08:03, ebb,-31 +2020-08-26 10:32, slack,- +2020-08-26 15:47, flood,44 +2020-08-26 19:02, slack,- +2020-08-26 20:33, ebb,-31 +2020-08-26 23:20, slack,- +2020-08-27 05:23, flood,42 +2020-08-27 07:38, slack,- +2020-08-27 09:03, ebb,-27 +2020-08-27 11:32, slack,- +2020-08-27 16:59, flood,41 +2020-08-27 19:56, slack,- +2020-08-27 21:33, ebb,-28 +2020-08-28 00:26, slack,- +2020-08-28 06:41, flood,44 +2020-08-28 08:38, slack,- +2020-08-28 10:09, ebb,-25 +2020-08-28 12:38, slack,- +2020-08-28 18:59, flood,41 +2020-08-28 21:02, slack,- +2020-08-28 22:51, ebb,-27 +2020-08-29 01:26, slack,- +2020-08-29 07:47, flood,47 +2020-08-29 09:38, slack,- +2020-08-29 11:51, ebb,-25 +2020-08-29 13:32, slack,- +2020-08-29 20:05, flood,44 +2020-08-29 21:56, slack,- +2020-08-30 00:45, ebb,-28 +2020-08-30 02:20, slack,- +2020-08-30 08:41, flood,51 +2020-08-30 10:38, slack,- +2020-08-30 13:09, ebb,-26 +2020-08-30 14:32, slack,- +2020-08-30 21:05, flood,47 +2020-08-30 22:56, slack,- +2020-08-31 01:39, ebb,-29 +2020-08-31 03:14, slack,- +2020-08-31 09:35, flood,54 +2020-08-31 11:32, slack,- +2020-08-31 13:57, ebb,-28 +2020-08-31 15:20, slack,- +2020-08-31 21:53, flood,49 +2020-08-31 23:44, slack,- +2020-09-01 02:27, ebb,-30 +2020-09-01 04:02, slack,- +2020-09-01 10:23, flood,55 +2020-09-01 12:20, slack,- +2020-09-01 14:45, ebb,-29 +2020-09-01 16:08, slack,- +2020-09-01 22:35, flood,50 +2020-09-02 00:32, slack,- +2020-09-02 02:51, ebb,-30 +2020-09-02 04:44, slack,- +2020-09-02 11:11, flood,53 +2020-09-02 13:02, slack,- +2020-09-02 15:15, ebb,-29 +2020-09-02 16:56, slack,- +2020-09-02 23:17, flood,48 +2020-09-03 01:20, slack,- +2020-09-03 03:15, ebb,-31 +2020-09-03 05:26, slack,- +2020-09-03 11:53, flood,50 +2020-09-03 13:50, slack,- +2020-09-03 15:39, ebb,-29 +2020-09-03 17:38, slack,- +2020-09-03 23:59, flood,45 +2020-09-04 02:02, slack,- +2020-09-04 03:45, ebb,-31 +2020-09-04 06:08, slack,- +2020-09-04 12:35, flood,45 +2020-09-04 14:32, slack,- +2020-09-04 16:09, ebb,-29 +2020-09-04 18:20, slack,- +2020-09-04 23:35, flood,41 +2020-09-05 02:44, slack,- +2020-09-05 04:21, ebb,-30 +2020-09-05 06:44, slack,- +2020-09-05 13:11, flood,40 +2020-09-05 15:14, slack,- +2020-09-05 16:45, ebb,-29 +2020-09-05 19:08, slack,- +2020-09-05 23:59, flood,39 +2020-09-06 03:26, slack,- +2020-09-06 04:57, ebb,-30 +2020-09-06 07:20, slack,- +2020-09-06 12:11, flood,37 +2020-09-06 15:56, slack,- +2020-09-06 17:27, ebb,-28 +2020-09-06 19:50, slack,- +2020-09-07 00:41, flood,37 +2020-09-07 04:08, slack,- +2020-09-07 05:39, ebb,-29 +2020-09-07 08:02, slack,- +2020-09-07 12:53, flood,36 +2020-09-07 16:32, slack,- +2020-09-07 18:03, ebb,-27 +2020-09-07 20:38, slack,- +2020-09-08 01:23, flood,35 +2020-09-08 04:50, slack,- +2020-09-08 06:21, ebb,-27 +2020-09-08 08:44, slack,- +2020-09-08 13:35, flood,35 +2020-09-08 17:14, slack,- +2020-09-08 18:51, ebb,-26 +2020-09-08 21:26, slack,- +2020-09-09 02:11, flood,34 +2020-09-09 05:38, slack,- +2020-09-09 07:09, ebb,-26 +2020-09-09 09:32, slack,- +2020-09-09 14:17, flood,35 +2020-09-09 17:56, slack,- +2020-09-09 19:33, ebb,-25 +2020-09-09 22:20, slack,- +2020-09-10 02:59, flood,33 +2020-09-10 06:26, slack,- +2020-09-10 07:57, ebb,-24 +2020-09-10 10:26, slack,- +2020-09-10 15:05, flood,35 +2020-09-10 18:38, slack,- +2020-09-10 20:21, ebb,-25 +2020-09-10 23:14, slack,- +2020-09-11 03:47, flood,33 +2020-09-11 07:20, slack,- +2020-09-11 08:45, ebb,-23 +2020-09-11 11:14, slack,- +2020-09-11 15:53, flood,35 +2020-09-11 19:32, slack,- +2020-09-11 21:15, ebb,-25 +2020-09-12 00:08, slack,- +2020-09-12 04:41, flood,34 +2020-09-12 08:14, slack,- +2020-09-12 09:45, ebb,-23 +2020-09-12 12:08, slack,- +2020-09-12 16:47, flood,37 +2020-09-12 20:26, slack,- +2020-09-12 22:09, ebb,-26 +2020-09-13 00:56, slack,- +2020-09-13 05:35, flood,36 +2020-09-13 09:08, slack,- +2020-09-13 10:39, ebb,-25 +2020-09-13 13:02, slack,- +2020-09-13 17:41, flood,40 +2020-09-13 21:20, slack,- +2020-09-13 23:09, ebb,-28 +2020-09-14 01:44, slack,- +2020-09-14 06:29, flood,39 +2020-09-14 10:02, slack,- +2020-09-14 11:39, ebb,-27 +2020-09-14 13:50, slack,- +2020-09-14 18:35, flood,43 +2020-09-14 22:14, slack,- +2020-09-15 00:03, ebb,-31 +2020-09-15 02:32, slack,- +2020-09-15 07:23, flood,43 +2020-09-15 10:56, slack,- +2020-09-15 12:27, ebb,-31 +2020-09-15 14:38, slack,- +2020-09-15 19:29, flood,48 +2020-09-15 23:08, slack,- +2020-09-16 00:51, ebb,-35 +2020-09-16 03:20, slack,- +2020-09-16 08:23, flood,48 +2020-09-16 11:44, slack,- +2020-09-16 13:21, ebb,-34 +2020-09-16 15:32, slack,- +2020-09-16 20:29, flood,52 +2020-09-17 00:02, slack,- +2020-09-17 01:45, ebb,-38 +2020-09-17 04:08, slack,- +2020-09-17 09:17, flood,53 +2020-09-17 12:32, slack,- +2020-09-17 14:15, ebb,-37 +2020-09-17 16:20, slack,- +2020-09-17 21:23, flood,56 +2020-09-18 00:50, slack,- +2020-09-18 02:33, ebb,-40 +2020-09-18 04:50, slack,- +2020-09-18 10:05, flood,56 +2020-09-18 13:20, slack,- +2020-09-18 15:03, ebb,-39 +2020-09-18 17:08, slack,- +2020-09-18 22:17, flood,57 +2020-09-19 01:38, slack,- +2020-09-19 03:27, ebb,-41 +2020-09-19 05:38, slack,- +2020-09-19 10:47, flood,57 +2020-09-19 14:08, slack,- +2020-09-19 15:51, ebb,-40 +2020-09-19 18:02, slack,- +2020-09-19 23:11, flood,56 +2020-09-20 02:32, slack,- +2020-09-20 04:15, ebb,-41 +2020-09-20 06:26, slack,- +2020-09-20 11:35, flood,55 +2020-09-20 15:02, slack,- +2020-09-20 16:39, ebb,-40 +2020-09-20 18:56, slack,- +2020-09-21 00:05, flood,53 +2020-09-21 03:26, slack,- +2020-09-21 05:03, ebb,-39 +2020-09-21 07:14, slack,- +2020-09-21 12:29, flood,52 +2020-09-21 15:50, slack,- +2020-09-21 17:33, ebb,-39 +2020-09-21 19:50, slack,- +2020-09-22 01:17, flood,49 +2020-09-22 04:20, slack,- +2020-09-22 05:57, ebb,-36 +2020-09-22 08:08, slack,- +2020-09-22 13:29, flood,48 +2020-09-22 16:44, slack,- +2020-09-22 18:21, ebb,-36 +2020-09-22 20:50, slack,- +2020-09-23 02:41, flood,46 +2020-09-23 05:20, slack,- +2020-09-23 06:51, ebb,-32 +2020-09-23 09:08, slack,- +2020-09-23 14:35, flood,44 +2020-09-23 17:38, slack,- +2020-09-23 19:15, ebb,-33 +2020-09-23 21:56, slack,- +2020-09-24 04:05, flood,44 +2020-09-24 06:14, slack,- +2020-09-24 07:39, ebb,-29 +2020-09-24 10:14, slack,- +2020-09-24 15:47, flood,40 +2020-09-24 18:38, slack,- +2020-09-24 20:09, ebb,-29 +2020-09-24 23:02, slack,- +2020-09-25 05:17, flood,44 +2020-09-25 07:14, slack,- +2020-09-25 08:39, ebb,-25 +2020-09-25 11:20, slack,- +2020-09-25 17:35, flood,39 +2020-09-25 19:38, slack,- +2020-09-25 21:09, ebb,-26 +2020-09-26 00:08, slack,- +2020-09-26 06:23, flood,45 +2020-09-26 08:20, slack,- +2020-09-26 09:51, ebb,-23 +2020-09-26 12:20, slack,- +2020-09-26 18:41, flood,40 +2020-09-26 20:38, slack,- +2020-09-26 23:45, ebb,-25 +2020-09-27 01:02, slack,- +2020-09-27 07:23, flood,47 +2020-09-27 09:14, slack,- +2020-09-27 12:09, ebb,-24 +2020-09-27 13:14, slack,- +2020-09-27 19:41, flood,42 +2020-09-27 21:38, slack,- +2020-09-28 00:39, ebb,-27 +2020-09-28 01:56, slack,- +2020-09-28 08:17, flood,49 +2020-09-28 10:14, slack,- +2020-09-28 12:57, ebb,-26 +2020-09-28 14:08, slack,- +2020-09-28 20:41, flood,45 +2020-09-28 22:32, slack,- +2020-09-29 01:27, ebb,-28 +2020-09-29 02:50, slack,- +2020-09-29 09:11, flood,51 +2020-09-29 11:02, slack,- +2020-09-29 13:45, ebb,-28 +2020-09-29 15:02, slack,- +2020-09-29 21:29, flood,47 +2020-09-29 23:20, slack,- +2020-09-30 02:03, ebb,-29 +2020-09-30 03:32, slack,- +2020-09-30 09:59, flood,51 +2020-09-30 11:50, slack,- +2020-09-30 14:27, ebb,-28 +2020-09-30 15:44, slack,- +2020-09-30 22:11, flood,48 +2020-10-01 00:08, slack,- +2020-10-01 02:33, ebb,-29 +2020-10-01 04:14, slack,- +2020-10-01 10:41, flood,49 +2020-10-01 12:32, slack,- +2020-10-01 14:57, ebb,-29 +2020-10-01 16:26, slack,- +2020-10-01 22:53, flood,46 +2020-10-02 00:50, slack,- +2020-10-02 02:39, ebb,-29 +2020-10-02 04:50, slack,- +2020-10-02 11:23, flood,46 +2020-10-02 13:14, slack,- +2020-10-02 15:09, ebb,-29 +2020-10-02 17:14, slack,- +2020-10-02 23:23, flood,44 +2020-10-03 01:32, slack,- +2020-10-03 03:15, ebb,-29 +2020-10-03 05:32, slack,- +2020-10-03 11:53, flood,41 +2020-10-03 13:56, slack,- +2020-10-03 15:39, ebb,-29 +2020-10-03 17:56, slack,- +2020-10-03 22:53, flood,42 +2020-10-04 02:14, slack,- +2020-10-04 03:51, ebb,-30 +2020-10-04 06:08, slack,- +2020-10-04 10:53, flood,39 +2020-10-04 14:38, slack,- +2020-10-04 16:15, ebb,-30 +2020-10-04 18:32, slack,- +2020-10-04 23:23, flood,40 +2020-10-05 02:56, slack,- +2020-10-05 04:27, ebb,-29 +2020-10-05 06:44, slack,- +2020-10-05 11:29, flood,39 +2020-10-05 15:14, slack,- +2020-10-05 16:51, ebb,-29 +2020-10-05 19:20, slack,- +2020-10-06 00:05, flood,39 +2020-10-06 03:38, slack,- +2020-10-06 05:09, ebb,-29 +2020-10-06 07:20, slack,- +2020-10-06 12:05, flood,38 +2020-10-06 15:56, slack,- +2020-10-06 17:33, ebb,-29 +2020-10-06 20:02, slack,- +2020-10-07 00:53, flood,37 +2020-10-07 04:20, slack,- +2020-10-07 05:51, ebb,-28 +2020-10-07 08:02, slack,- +2020-10-07 12:53, flood,37 +2020-10-07 16:32, slack,- +2020-10-07 18:15, ebb,-29 +2020-10-07 20:50, slack,- +2020-10-08 01:41, flood,36 +2020-10-08 05:08, slack,- +2020-10-08 06:39, ebb,-27 +2020-10-08 08:50, slack,- +2020-10-08 13:47, flood,36 +2020-10-08 17:14, slack,- +2020-10-08 19:03, ebb,-28 +2020-10-08 21:44, slack,- +2020-10-09 02:35, flood,36 +2020-10-09 05:56, slack,- +2020-10-09 07:27, ebb,-26 +2020-10-09 09:44, slack,- +2020-10-09 14:35, flood,36 +2020-10-09 18:02, slack,- +2020-10-09 19:51, ebb,-28 +2020-10-09 22:38, slack,- +2020-10-10 03:23, flood,36 +2020-10-10 06:50, slack,- +2020-10-10 08:21, ebb,-25 +2020-10-10 10:44, slack,- +2020-10-10 15:29, flood,37 +2020-10-10 18:56, slack,- +2020-10-10 20:45, ebb,-27 +2020-10-10 23:32, slack,- +2020-10-11 04:17, flood,37 +2020-10-11 07:44, slack,- +2020-10-11 09:15, ebb,-25 +2020-10-11 11:38, slack,- +2020-10-11 16:23, flood,39 +2020-10-11 19:50, slack,- +2020-10-11 21:39, ebb,-28 +2020-10-12 00:20, slack,- +2020-10-12 05:11, flood,40 +2020-10-12 08:38, slack,- +2020-10-12 10:15, ebb,-27 +2020-10-12 12:32, slack,- +2020-10-12 17:17, flood,42 +2020-10-12 20:50, slack,- +2020-10-12 22:39, ebb,-30 +2020-10-13 01:14, slack,- +2020-10-13 06:05, flood,43 +2020-10-13 09:32, slack,- +2020-10-13 11:09, ebb,-29 +2020-10-13 13:26, slack,- +2020-10-13 18:17, flood,46 +2020-10-13 21:50, slack,- +2020-10-13 23:33, ebb,-32 +2020-10-14 02:02, slack,- +2020-10-14 06:59, flood,47 +2020-10-14 10:26, slack,- +2020-10-14 12:09, ebb,-33 +2020-10-14 14:20, slack,- +2020-10-14 19:11, flood,49 +2020-10-14 22:44, slack,- +2020-10-15 00:33, ebb,-35 +2020-10-15 02:50, slack,- +2020-10-15 07:59, flood,50 +2020-10-15 11:20, slack,- +2020-10-15 12:57, ebb,-36 +2020-10-15 15:08, slack,- +2020-10-15 20:11, flood,52 +2020-10-15 23:38, slack,- +2020-10-16 01:21, ebb,-37 +2020-10-16 03:38, slack,- +2020-10-16 08:53, flood,54 +2020-10-16 12:08, slack,- +2020-10-16 13:51, ebb,-38 +2020-10-16 16:02, slack,- +2020-10-16 21:11, flood,55 +2020-10-17 00:32, slack,- +2020-10-17 02:15, ebb,-39 +2020-10-17 04:26, slack,- +2020-10-17 09:41, flood,56 +2020-10-17 12:56, slack,- +2020-10-17 14:39, ebb,-40 +2020-10-17 16:56, slack,- +2020-10-17 22:11, flood,56 +2020-10-18 01:26, slack,- +2020-10-18 03:03, ebb,-39 +2020-10-18 05:14, slack,- +2020-10-18 10:29, flood,56 +2020-10-18 13:50, slack,- +2020-10-18 15:33, ebb,-41 +2020-10-18 17:44, slack,- +2020-10-18 23:05, flood,55 +2020-10-19 02:20, slack,- +2020-10-19 03:57, ebb,-38 +2020-10-19 06:02, slack,- +2020-10-19 11:17, flood,54 +2020-10-19 14:38, slack,- +2020-10-19 16:21, ebb,-40 +2020-10-19 18:38, slack,- +2020-10-20 00:05, flood,52 +2020-10-20 03:08, slack,- +2020-10-20 04:45, ebb,-36 +2020-10-20 06:56, slack,- +2020-10-20 12:11, flood,49 +2020-10-20 15:32, slack,- +2020-10-20 17:09, ebb,-38 +2020-10-20 19:32, slack,- +2020-10-21 01:47, flood,49 +2020-10-21 04:08, slack,- +2020-10-21 05:39, ebb,-34 +2020-10-21 07:50, slack,- +2020-10-21 13:17, flood,45 +2020-10-21 16:20, slack,- +2020-10-21 18:03, ebb,-35 +2020-10-21 20:32, slack,- +2020-10-22 02:59, flood,47 +2020-10-22 05:02, slack,- +2020-10-22 06:27, ebb,-30 +2020-10-22 08:50, slack,- +2020-10-22 14:53, flood,41 +2020-10-22 17:20, slack,- +2020-10-22 18:51, ebb,-32 +2020-10-22 21:38, slack,- +2020-10-23 03:59, flood,46 +2020-10-23 05:56, slack,- +2020-10-23 07:21, ebb,-27 +2020-10-23 09:56, slack,- +2020-10-23 16:11, flood,39 +2020-10-23 18:14, slack,- +2020-10-23 19:45, ebb,-28 +2020-10-23 22:44, slack,- +2020-10-24 04:59, flood,45 +2020-10-24 06:56, slack,- +2020-10-24 08:21, ebb,-24 +2020-10-24 11:02, slack,- +2020-10-24 17:17, flood,38 +2020-10-24 19:14, slack,- +2020-10-24 20:45, ebb,-25 +2020-10-24 23:44, slack,- +2020-10-25 05:59, flood,45 +2020-10-25 07:56, slack,- +2020-10-25 09:33, ebb,-22 +2020-10-25 10:45, ebb,-22 +2020-10-25 12:02, slack,- +2020-10-25 18:17, flood,39 +2020-10-25 20:08, slack,- +2020-10-25 23:27, ebb,-24 +2020-10-26 00:38, slack,- +2020-10-26 06:59, flood,45 +2020-10-26 08:50, slack,- +2020-10-26 11:51, ebb,-24 +2020-10-26 12:56, slack,- +2020-10-26 19:17, flood,40 +2020-10-26 21:08, slack,- +2020-10-27 00:15, ebb,-25 +2020-10-27 01:26, slack,- +2020-10-27 07:53, flood,46 +2020-10-27 09:44, slack,- +2020-10-27 12:39, ebb,-26 +2020-10-27 13:44, slack,- +2020-10-27 20:11, flood,42 +2020-10-27 22:02, slack,- +2020-10-28 00:57, ebb,-26 +2020-10-28 02:14, slack,- +2020-10-28 08:41, flood,46 +2020-10-28 10:32, slack,- +2020-10-28 13:21, ebb,-27 +2020-10-28 14:32, slack,- +2020-10-28 20:59, flood,43 +2020-10-28 22:50, slack,- +2020-10-29 01:33, ebb,-26 +2020-10-29 02:56, slack,- +2020-10-29 09:29, flood,46 +2020-10-29 11:20, slack,- +2020-10-29 14:03, ebb,-28 +2020-10-29 15:20, slack,- +2020-10-29 21:47, flood,44 +2020-10-29 23:38, slack,- +2020-10-30 01:33, ebb,-27 +2020-10-30 03:38, slack,- +2020-10-30 10:11, flood,44 +2020-10-30 12:02, slack,- +2020-10-30 14:21, ebb,-28 +2020-10-30 16:02, slack,- +2020-10-30 22:23, flood,43 +2020-10-31 00:20, slack,- +2020-10-31 02:03, ebb,-27 +2020-10-31 04:14, slack,- +2020-10-31 10:47, flood,40 +2020-10-31 12:44, slack,- +2020-10-31 14:33, ebb,-29 +2020-10-31 16:44, slack,- +2020-10-31 22:53, flood,41 +2020-11-01 01:02, slack,- +2020-11-01 02:39, ebb,-28 +2020-11-01 04:50, slack,- +2020-11-01 09:41, flood,39 +2020-11-01 13:20, slack,- +2020-11-01 15:03, ebb,-30 +2020-11-01 17:26, slack,- +2020-11-01 22:17, flood,41 +2020-11-02 01:44, slack,- +2020-11-02 03:15, ebb,-29 +2020-11-02 05:32, slack,- +2020-11-02 10:11, flood,40 +2020-11-02 14:02, slack,- +2020-11-02 15:39, ebb,-30 +2020-11-02 18:08, slack,- +2020-11-02 22:53, flood,41 +2020-11-03 02:26, slack,- +2020-11-03 03:57, ebb,-29 +2020-11-03 06:08, slack,- +2020-11-03 10:53, flood,41 +2020-11-03 14:38, slack,- +2020-11-03 16:21, ebb,-31 +2020-11-03 18:44, slack,- +2020-11-03 23:35, flood,40 +2020-11-04 03:08, slack,- +2020-11-04 04:39, ebb,-29 +2020-11-04 06:44, slack,- +2020-11-04 11:35, flood,40 +2020-11-04 15:14, slack,- +2020-11-04 17:03, ebb,-31 +2020-11-04 19:26, slack,- +2020-11-05 00:23, flood,39 +2020-11-05 03:56, slack,- +2020-11-05 05:27, ebb,-29 +2020-11-05 07:32, slack,- +2020-11-05 12:23, flood,39 +2020-11-05 15:56, slack,- +2020-11-05 17:45, ebb,-31 +2020-11-05 20:14, slack,- +2020-11-06 01:11, flood,39 +2020-11-06 04:38, slack,- +2020-11-06 06:15, ebb,-29 +2020-11-06 08:14, slack,- +2020-11-06 13:17, flood,39 +2020-11-06 16:44, slack,- +2020-11-06 18:33, ebb,-31 +2020-11-06 21:02, slack,- +2020-11-07 02:05, flood,39 +2020-11-07 05:26, slack,- +2020-11-07 07:03, ebb,-28 +2020-11-07 09:14, slack,- +2020-11-07 14:11, flood,39 +2020-11-07 17:32, slack,- +2020-11-07 19:21, ebb,-31 +2020-11-07 22:02, slack,- +2020-11-08 02:59, flood,40 +2020-11-08 06:20, slack,- +2020-11-08 07:51, ebb,-28 +2020-11-08 10:14, slack,- +2020-11-08 15:05, flood,41 +2020-11-08 18:26, slack,- +2020-11-08 20:15, ebb,-31 +2020-11-08 22:56, slack,- +2020-11-09 03:53, flood,42 +2020-11-09 07:14, slack,- +2020-11-09 08:45, ebb,-28 +2020-11-09 11:08, slack,- +2020-11-09 15:59, flood,42 +2020-11-09 19:26, slack,- +2020-11-09 21:09, ebb,-31 +2020-11-09 23:50, slack,- +2020-11-10 04:41, flood,44 +2020-11-10 08:08, slack,- +2020-11-10 09:45, ebb,-29 +2020-11-10 12:08, slack,- +2020-11-10 16:59, flood,44 +2020-11-10 20:26, slack,- +2020-11-10 22:09, ebb,-31 +2020-11-11 00:44, slack,- +2020-11-11 05:35, flood,47 +2020-11-11 09:08, slack,- +2020-11-11 10:45, ebb,-31 +2020-11-11 13:02, slack,- +2020-11-11 17:53, flood,47 +2020-11-11 21:26, slack,- +2020-11-11 23:09, ebb,-33 +2020-11-12 01:32, slack,- +2020-11-12 06:35, flood,49 +2020-11-12 10:02, slack,- +2020-11-12 11:45, ebb,-34 +2020-11-12 14:02, slack,- +2020-11-12 18:53, flood,49 +2020-11-12 22:26, slack,- +2020-11-13 00:09, ebb,-35 +2020-11-13 02:26, slack,- +2020-11-13 07:29, flood,51 +2020-11-13 10:56, slack,- +2020-11-13 12:39, ebb,-36 +2020-11-13 14:56, slack,- +2020-11-13 19:59, flood,51 +2020-11-13 23:20, slack,- +2020-11-14 00:57, ebb,-36 +2020-11-14 03:14, slack,- +2020-11-14 08:29, flood,53 +2020-11-14 11:44, slack,- +2020-11-14 13:27, ebb,-38 +2020-11-14 15:44, slack,- +2020-11-14 21:17, flood,53 +2020-11-15 00:14, slack,- +2020-11-15 01:51, ebb,-36 +2020-11-15 04:02, slack,- +2020-11-15 09:23, flood,54 +2020-11-15 12:38, slack,- +2020-11-15 14:21, ebb,-40 +2020-11-15 16:38, slack,- +2020-11-15 22:23, flood,54 +2020-11-16 01:08, slack,- +2020-11-16 02:45, ebb,-36 +2020-11-16 04:56, slack,- +2020-11-16 10:17, flood,53 +2020-11-16 13:26, slack,- +2020-11-16 15:09, ebb,-40 +2020-11-16 17:32, slack,- +2020-11-16 23:35, flood,54 +2020-11-17 02:02, slack,- +2020-11-17 03:39, ebb,-35 +2020-11-17 05:44, slack,- +2020-11-17 11:05, flood,50 +2020-11-17 14:20, slack,- +2020-11-17 16:03, ebb,-39 +2020-11-17 18:26, slack,- +2020-11-18 00:47, flood,52 +2020-11-18 02:56, slack,- +2020-11-18 04:27, ebb,-34 +2020-11-18 06:38, slack,- +2020-11-18 12:05, flood,46 +2020-11-18 15:08, slack,- +2020-11-18 16:51, ebb,-36 +2020-11-18 19:20, slack,- +2020-11-19 01:47, flood,51 +2020-11-19 03:50, slack,- +2020-11-19 05:21, ebb,-31 +2020-11-19 07:32, slack,- +2020-11-19 13:53, flood,43 +2020-11-19 16:02, slack,- +2020-11-19 17:39, ebb,-34 +2020-11-19 20:14, slack,- +2020-11-20 02:47, flood,49 +2020-11-20 04:44, slack,- +2020-11-20 06:09, ebb,-29 +2020-11-20 08:32, slack,- +2020-11-20 14:59, flood,41 +2020-11-20 16:56, slack,- +2020-11-20 18:33, ebb,-31 +2020-11-20 21:14, slack,- +2020-11-21 03:41, flood,48 +2020-11-21 05:38, slack,- +2020-11-21 07:03, ebb,-26 +2020-11-21 09:38, slack,- +2020-11-21 15:53, flood,39 +2020-11-21 17:50, slack,- +2020-11-21 19:21, ebb,-28 +2020-11-21 22:14, slack,- +2020-11-22 04:35, flood,46 +2020-11-22 06:32, slack,- +2020-11-22 07:57, ebb,-24 +2020-11-22 10:38, slack,- +2020-11-22 16:53, flood,38 +2020-11-22 18:44, slack,- +2020-11-22 20:15, ebb,-25 +2020-11-22 23:14, slack,- +2020-11-23 05:35, flood,44 +2020-11-23 07:26, slack,- +2020-11-23 08:57, ebb,-22 +2020-11-23 11:32, slack,- +2020-11-23 17:47, flood,37 +2020-11-23 19:38, slack,- +2020-11-23 21:15, ebb,-23 +2020-11-24 00:02, slack,- +2020-11-24 06:29, flood,42 +2020-11-24 08:20, slack,- +2020-11-24 11:27, ebb,-23 +2020-11-24 12:26, slack,- +2020-11-24 18:41, flood,37 +2020-11-24 20:38, slack,- +2020-11-24 23:45, ebb,-23 +2020-11-25 00:50, slack,- +2020-11-25 07:17, flood,41 +2020-11-25 09:08, slack,- +2020-11-25 12:15, ebb,-25 +2020-11-25 13:14, slack,- +2020-11-25 19:35, flood,37 +2020-11-25 21:26, slack,- +2020-11-26 00:27, ebb,-23 +2020-11-26 01:38, slack,- +2020-11-26 08:11, flood,40 +2020-11-26 10:02, slack,- +2020-11-26 12:57, ebb,-26 +2020-11-26 14:02, slack,- +2020-11-26 20:29, flood,38 +2020-11-26 22:20, slack,- +2020-11-27 00:21, ebb,-23 +2020-11-27 02:20, slack,- +2020-11-27 08:59, flood,39 +2020-11-27 10:44, slack,- +2020-11-27 13:33, ebb,-26 +2020-11-27 14:50, slack,- +2020-11-27 21:17, flood,38 +2020-11-27 23:08, slack,- +2020-11-28 00:45, ebb,-24 +2020-11-28 02:56, slack,- +2020-11-28 09:41, flood,37 +2020-11-28 11:26, slack,- +2020-11-28 13:21, ebb,-27 +2020-11-28 15:32, slack,- +2020-11-28 21:53, flood,38 +2020-11-28 23:50, slack,- +2020-11-29 01:21, ebb,-25 +2020-11-29 03:38, slack,- +2020-11-29 08:23, flood,37 +2020-11-29 12:08, slack,- +2020-11-29 13:51, ebb,-28 +2020-11-29 16:14, slack,- +2020-11-29 21:23, flood,38 +2020-11-30 00:32, slack,- +2020-11-30 02:03, ebb,-27 +2020-11-30 04:14, slack,- +2020-11-30 08:59, flood,39 +2020-11-30 12:44, slack,- +2020-11-30 14:27, ebb,-30 +2020-11-30 16:56, slack,- +2020-11-30 21:47, flood,40 +2020-12-01 01:14, slack,- +2020-12-01 02:45, ebb,-28 +2020-12-01 04:56, slack,- +2020-12-01 09:41, flood,41 +2020-12-01 13:26, slack,- +2020-12-01 15:09, ebb,-31 +2020-12-01 17:38, slack,- +2020-12-01 22:29, flood,42 +2020-12-02 01:56, slack,- +2020-12-02 03:33, ebb,-29 +2020-12-02 05:38, slack,- +2020-12-02 10:23, flood,42 +2020-12-02 14:02, slack,- +2020-12-02 15:51, ebb,-32 +2020-12-02 18:14, slack,- +2020-12-02 23:11, flood,42 +2020-12-03 02:44, slack,- +2020-12-03 04:15, ebb,-30 +2020-12-03 06:14, slack,- +2020-12-03 11:05, flood,43 +2020-12-03 14:44, slack,- +2020-12-03 16:33, ebb,-34 +2020-12-03 18:56, slack,- +2020-12-03 23:53, flood,43 +2020-12-04 03:26, slack,- +2020-12-04 05:03, ebb,-31 +2020-12-04 07:02, slack,- +2020-12-04 11:53, flood,43 +2020-12-04 15:26, slack,- +2020-12-04 17:21, ebb,-34 +2020-12-04 19:44, slack,- +2020-12-05 00:47, flood,43 +2020-12-05 04:14, slack,- +2020-12-05 05:51, ebb,-31 +2020-12-05 07:50, slack,- +2020-12-05 12:47, flood,43 +2020-12-05 16:14, slack,- +2020-12-05 18:09, ebb,-35 +2020-12-05 20:32, slack,- +2020-12-06 01:41, flood,44 +2020-12-06 05:02, slack,- +2020-12-06 06:39, ebb,-31 +2020-12-06 08:44, slack,- +2020-12-06 13:47, flood,43 +2020-12-06 17:08, slack,- +2020-12-06 18:57, ebb,-34 +2020-12-06 21:26, slack,- +2020-12-07 02:35, flood,45 +2020-12-07 05:50, slack,- +2020-12-07 07:27, ebb,-31 +2020-12-07 09:44, slack,- +2020-12-07 14:41, flood,44 +2020-12-07 18:02, slack,- +2020-12-07 19:51, ebb,-34 +2020-12-07 22:20, slack,- +2020-12-08 03:23, flood,47 +2020-12-08 06:44, slack,- +2020-12-08 08:21, ebb,-31 +2020-12-08 10:44, slack,- +2020-12-08 15:41, flood,45 +2020-12-08 19:02, slack,- +2020-12-08 20:45, ebb,-33 +2020-12-08 23:20, slack,- +2020-12-09 04:17, flood,48 +2020-12-09 07:44, slack,- +2020-12-09 09:21, ebb,-31 +2020-12-09 11:44, slack,- +2020-12-09 16:35, flood,46 +2020-12-09 20:02, slack,- +2020-12-09 21:45, ebb,-32 +2020-12-10 00:08, slack,- +2020-12-10 05:11, flood,49 +2020-12-10 08:38, slack,- +2020-12-10 10:21, ebb,-32 +2020-12-10 12:44, slack,- +2020-12-10 17:35, flood,46 +2020-12-10 21:02, slack,- +2020-12-10 22:45, ebb,-32 +2020-12-11 01:02, slack,- +2020-12-11 06:05, flood,50 +2020-12-11 09:38, slack,- +2020-12-11 11:21, ebb,-34 +2020-12-11 13:44, slack,- +2020-12-11 18:41, flood,47 +2020-12-11 22:02, slack,- +2020-12-11 23:45, ebb,-33 +2020-12-12 01:56, slack,- +2020-12-12 07:05, flood,50 +2020-12-12 10:32, slack,- +2020-12-12 12:15, ebb,-36 +2020-12-12 14:38, slack,- +2020-12-12 20:11, flood,48 +2020-12-12 23:02, slack,- +2020-12-13 00:39, ebb,-33 +2020-12-13 02:50, slack,- +2020-12-13 08:11, flood,50 +2020-12-13 11:26, slack,- +2020-12-13 13:09, ebb,-37 +2020-12-13 15:32, slack,- +2020-12-13 21:47, flood,52 +2020-12-13 23:56, slack,- +2020-12-14 01:33, ebb,-33 +2020-12-14 03:44, slack,- +2020-12-14 09:35, flood,51 +2020-12-14 12:14, slack,- +2020-12-14 14:03, ebb,-38 +2020-12-14 16:26, slack,- +2020-12-14 22:47, flood,55 +2020-12-15 00:50, slack,- +2020-12-15 02:27, ebb,-33 +2020-12-15 04:38, slack,- +2020-12-15 10:41, flood,50 +2020-12-15 13:08, slack,- +2020-12-15 14:57, ebb,-37 +2020-12-15 17:20, slack,- +2020-12-15 23:41, flood,55 +2020-12-16 01:44, slack,- +2020-12-16 03:21, ebb,-33 +2020-12-16 05:32, slack,- +2020-12-16 11:41, flood,49 +2020-12-16 14:02, slack,- +2020-12-16 15:45, ebb,-36 +2020-12-16 18:14, slack,- +2020-12-17 00:35, flood,54 +2020-12-17 02:38, slack,- +2020-12-17 04:15, ebb,-32 +2020-12-17 06:20, slack,- +2020-12-17 12:41, flood,46 +2020-12-17 14:50, slack,- +2020-12-17 16:33, ebb,-35 +2020-12-17 19:02, slack,- +2020-12-18 01:35, flood,53 +2020-12-18 03:32, slack,- +2020-12-18 05:03, ebb,-30 +2020-12-18 07:14, slack,- +2020-12-18 13:41, flood,44 +2020-12-18 15:44, slack,- +2020-12-18 17:21, ebb,-33 +2020-12-18 19:56, slack,- +2020-12-19 02:29, flood,51 +2020-12-19 04:20, slack,- +2020-12-19 05:51, ebb,-28 +2020-12-19 08:14, slack,- +2020-12-19 14:35, flood,42 +2020-12-19 16:32, slack,- +2020-12-19 18:09, ebb,-30 +2020-12-19 20:50, slack,- +2020-12-20 03:17, flood,48 +2020-12-20 05:14, slack,- +2020-12-20 06:39, ebb,-26 +2020-12-20 09:08, slack,- +2020-12-20 15:29, flood,39 +2020-12-20 17:26, slack,- +2020-12-20 18:57, ebb,-28 +2020-12-20 21:44, slack,- +2020-12-21 04:11, flood,45 +2020-12-21 06:02, slack,- +2020-12-21 07:33, ebb,-24 +2020-12-21 10:08, slack,- +2020-12-21 16:17, flood,37 +2020-12-21 18:14, slack,- +2020-12-21 19:45, ebb,-25 +2020-12-21 22:38, slack,- +2020-12-22 04:59, flood,41 +2020-12-22 06:56, slack,- +2020-12-22 08:21, ebb,-23 +2020-12-22 11:02, slack,- +2020-12-22 17:11, flood,35 +2020-12-22 19:08, slack,- +2020-12-22 20:33, ebb,-23 +2020-12-22 23:26, slack,- +2020-12-23 05:53, flood,38 +2020-12-23 07:44, slack,- +2020-12-23 09:21, ebb,-21 +2020-12-23 10:51, ebb,-22 +2020-12-23 11:56, slack,- +2020-12-23 18:05, flood,33 +2020-12-23 20:02, slack,- +2020-12-23 21:27, ebb,-22 +2020-12-24 00:14, slack,- +2020-12-24 06:41, flood,35 +2020-12-24 08:32, slack,- +2020-12-24 11:45, ebb,-22 +2020-12-24 12:44, slack,- +2020-12-24 18:59, flood,32 +2020-12-24 20:50, slack,- +2020-12-24 22:27, ebb,-21 +2020-12-25 00:56, slack,- +2020-12-25 05:41, flood,32 +2020-12-25 07:29, flood,33 +2020-12-25 09:20, slack,- +2020-12-25 12:33, ebb,-23 +2020-12-25 13:32, slack,- +2020-12-25 19:53, flood,32 +2020-12-25 21:44, slack,- +2020-12-25 23:21, ebb,-21 +2020-12-26 01:38, slack,- +2020-12-26 06:11, flood,33 +2020-12-26 08:17, flood,31 +2020-12-26 10:08, slack,- +2020-12-26 12:09, ebb,-24 +2020-12-26 14:20, slack,- +2020-12-26 20:47, flood,33 +2020-12-26 22:32, slack,- +2020-12-27 00:03, ebb,-23 +2020-12-27 02:20, slack,- +2020-12-27 06:53, flood,34 +2020-12-27 10:50, slack,- +2020-12-27 12:33, ebb,-25 +2020-12-27 15:02, slack,- +2020-12-27 19:53, flood,34 +2020-12-27 21:23, flood,34 +2020-12-27 23:20, slack,- +2020-12-28 00:45, ebb,-24 +2020-12-28 03:02, slack,- +2020-12-28 07:35, flood,36 +2020-12-28 11:32, slack,- +2020-12-28 13:15, ebb,-27 +2020-12-28 15:44, slack,- +2020-12-28 20:35, flood,36 +2020-12-29 00:02, slack,- +2020-12-29 01:33, ebb,-26 +2020-12-29 03:44, slack,- +2020-12-29 08:23, flood,39 +2020-12-29 12:14, slack,- +2020-12-29 13:57, ebb,-30 +2020-12-29 16:26, slack,- +2020-12-29 21:23, flood,40 +2020-12-30 00:50, slack,- +2020-12-30 02:15, ebb,-28 +2020-12-30 04:26, slack,- +2020-12-30 09:11, flood,42 +2020-12-30 12:50, slack,- +2020-12-30 14:39, ebb,-32 +2020-12-30 17:08, slack,- +2020-12-30 22:05, flood,43 +2020-12-31 01:32, slack,- +2020-12-31 03:03, ebb,-30 +2020-12-31 05:08, slack,- +2020-12-31 09:59, flood,45 +2020-12-31 13:32, slack,- +2020-12-31 15:27, ebb,-34 +2020-12-31 17:50, slack,- +2020-12-31 22:47, flood,46 +2021-01-01 02:14, slack,- +2021-01-01 03:51, ebb,-32 +2021-01-01 05:50, slack,- +2021-01-01 10:41, flood,48 +2021-01-01 14:14, slack,- +2021-01-01 16:09, ebb,-36 +2021-01-01 18:32, slack,- +2021-01-01 23:29, flood,48 +2021-01-02 03:02, slack,- +2021-01-02 04:39, ebb,-33 +2021-01-02 06:32, slack,- +2021-01-02 11:35, flood,49 +2021-01-02 15:02, slack,- +2021-01-02 16:57, ebb,-38 +2021-01-02 19:14, slack,- +2021-01-03 00:17, flood,48 +2021-01-03 03:44, slack,- +2021-01-03 05:27, ebb,-34 +2021-01-03 07:20, slack,- +2021-01-03 12:23, flood,49 +2021-01-03 15:50, slack,- +2021-01-03 17:45, ebb,-38 +2021-01-03 20:02, slack,- +2021-01-04 01:11, flood,49 +2021-01-04 04:32, slack,- +2021-01-04 06:15, ebb,-35 +2021-01-04 08:14, slack,- +2021-01-04 13:23, flood,49 +2021-01-04 16:44, slack,- +2021-01-04 18:33, ebb,-38 +2021-01-04 20:50, slack,- +2021-01-05 02:05, flood,50 +2021-01-05 05:26, slack,- +2021-01-05 07:03, ebb,-35 +2021-01-05 09:14, slack,- +2021-01-05 14:17, flood,48 +2021-01-05 17:38, slack,- +2021-01-05 19:27, ebb,-36 +2021-01-05 21:44, slack,- +2021-01-06 02:59, flood,50 +2021-01-06 06:14, slack,- +2021-01-06 07:57, ebb,-34 +2021-01-06 10:14, slack,- +2021-01-06 15:17, flood,47 +2021-01-06 18:32, slack,- +2021-01-06 20:21, ebb,-34 +2021-01-06 22:44, slack,- +2021-01-07 03:47, flood,50 +2021-01-07 07:14, slack,- +2021-01-07 08:51, ebb,-33 +2021-01-07 11:20, slack,- +2021-01-07 16:17, flood,45 +2021-01-07 19:38, slack,- +2021-01-07 21:15, ebb,-32 +2021-01-07 23:38, slack,- +2021-01-08 04:41, flood,49 +2021-01-08 08:08, slack,- +2021-01-08 09:51, ebb,-32 +2021-01-08 12:20, slack,- +2021-01-08 17:17, flood,44 +2021-01-08 20:38, slack,- +2021-01-08 22:15, ebb,-30 +2021-01-09 00:38, slack,- +2021-01-09 05:35, flood,47 +2021-01-09 09:08, slack,- +2021-01-09 10:51, ebb,-32 +2021-01-09 13:26, slack,- +2021-01-09 18:35, flood,43 +2021-01-09 21:44, slack,- +2021-01-09 23:21, ebb,-29 +2021-01-10 01:32, slack,- +2021-01-10 06:41, flood,45 +2021-01-10 10:08, slack,- +2021-01-10 11:51, ebb,-33 +2021-01-10 14:20, slack,- +2021-01-10 20:41, flood,46 +2021-01-10 22:44, slack,- +2021-01-11 00:21, ebb,-29 +2021-01-11 02:32, slack,- +2021-01-11 08:47, flood,45 +2021-01-11 11:02, slack,- +2021-01-11 12:51, ebb,-34 +2021-01-11 15:20, slack,- +2021-01-11 21:47, flood,51 +2021-01-11 23:44, slack,- +2021-01-12 01:21, ebb,-29 +2021-01-12 03:26, slack,- +2021-01-12 09:53, flood,47 +2021-01-12 11:56, slack,- +2021-01-12 13:45, ebb,-34 +2021-01-12 16:14, slack,- +2021-01-12 22:41, flood,54 +2021-01-13 00:38, slack,- +2021-01-13 02:15, ebb,-29 +2021-01-13 04:20, slack,- +2021-01-13 10:47, flood,48 +2021-01-13 12:50, slack,- +2021-01-13 14:39, ebb,-34 +2021-01-13 17:08, slack,- +2021-01-13 23:29, flood,55 +2021-01-14 01:32, slack,- +2021-01-14 03:09, ebb,-30 +2021-01-14 05:14, slack,- +2021-01-14 11:41, flood,48 +2021-01-14 13:44, slack,- +2021-01-14 15:33, ebb,-33 +2021-01-14 18:02, slack,- +2021-01-15 00:23, flood,55 +2021-01-15 02:20, slack,- +2021-01-15 04:03, ebb,-29 +2021-01-15 06:08, slack,- +2021-01-15 12:35, flood,47 +2021-01-15 14:32, slack,- +2021-01-15 16:15, ebb,-32 +2021-01-15 18:50, slack,- +2021-01-16 01:17, flood,53 +2021-01-16 03:08, slack,- +2021-01-16 04:45, ebb,-29 +2021-01-16 06:56, slack,- +2021-01-16 13:23, flood,45 +2021-01-16 15:20, slack,- +2021-01-16 17:03, ebb,-31 +2021-01-16 19:38, slack,- +2021-01-17 02:05, flood,50 +2021-01-17 03:56, slack,- +2021-01-17 05:33, ebb,-27 +2021-01-17 07:50, slack,- +2021-01-17 14:17, flood,42 +2021-01-17 16:08, slack,- +2021-01-17 17:45, ebb,-29 +2021-01-17 20:26, slack,- +2021-01-18 02:53, flood,46 +2021-01-18 04:44, slack,- +2021-01-18 06:21, ebb,-26 +2021-01-18 08:44, slack,- +2021-01-18 14:59, flood,39 +2021-01-18 16:56, slack,- +2021-01-18 18:27, ebb,-27 +2021-01-18 21:14, slack,- +2021-01-19 03:41, flood,42 +2021-01-19 05:32, slack,- +2021-01-19 07:03, ebb,-24 +2021-01-19 09:38, slack,- +2021-01-19 15:41, flood,36 +2021-01-19 17:44, slack,- +2021-01-19 19:15, ebb,-25 +2021-01-19 22:02, slack,- +2021-01-20 04:23, flood,38 +2021-01-20 06:20, slack,- +2021-01-20 07:51, ebb,-23 +2021-01-20 10:32, slack,- +2021-01-20 16:29, flood,33 +2021-01-20 18:32, slack,- +2021-01-20 20:03, ebb,-23 +2021-01-20 22:50, slack,- +2021-01-21 05:05, flood,34 +2021-01-21 07:08, slack,- +2021-01-21 08:33, ebb,-22 +2021-01-21 11:26, slack,- +2021-01-21 16:17, flood,31 +2021-01-21 19:26, slack,- +2021-01-21 20:51, ebb,-21 +2021-01-21 23:32, slack,- +2021-01-22 04:17, flood,32 +2021-01-22 07:56, slack,- +2021-01-22 09:27, ebb,-21 +2021-01-22 11:15, ebb,-20 +2021-01-22 12:14, slack,- +2021-01-22 16:53, flood,30 +2021-01-22 20:14, slack,- +2021-01-22 21:45, ebb,-20 +2021-01-23 00:20, slack,- +2021-01-23 04:53, flood,32 +2021-01-23 08:44, slack,- +2021-01-23 10:21, ebb,-21 +2021-01-23 12:03, ebb,-21 +2021-01-23 13:02, slack,- +2021-01-23 17:41, flood,30 +2021-01-23 21:08, slack,- +2021-01-23 22:39, ebb,-20 +2021-01-24 01:02, slack,- +2021-01-24 05:35, flood,33 +2021-01-24 09:32, slack,- +2021-01-24 11:15, ebb,-23 +2021-01-24 13:50, slack,- +2021-01-24 18:29, flood,31 +2021-01-24 22:02, slack,- +2021-01-24 23:33, ebb,-21 +2021-01-25 01:50, slack,- +2021-01-25 06:23, flood,35 +2021-01-25 10:14, slack,- +2021-01-25 11:57, ebb,-25 +2021-01-25 14:38, slack,- +2021-01-25 19:17, flood,34 +2021-01-25 22:50, slack,- +2021-01-26 00:15, ebb,-23 +2021-01-26 02:32, slack,- +2021-01-26 07:05, flood,37 +2021-01-26 11:02, slack,- +2021-01-26 12:45, ebb,-28 +2021-01-26 15:20, slack,- +2021-01-26 20:05, flood,37 +2021-01-26 23:32, slack,- +2021-01-27 01:03, ebb,-26 +2021-01-27 03:14, slack,- +2021-01-27 07:59, flood,41 +2021-01-27 11:44, slack,- +2021-01-27 13:27, ebb,-30 +2021-01-27 16:02, slack,- +2021-01-27 20:59, flood,41 +2021-01-28 00:20, slack,- +2021-01-28 01:51, ebb,-29 +2021-01-28 03:56, slack,- +2021-01-28 08:47, flood,45 +2021-01-28 12:26, slack,- +2021-01-28 14:15, ebb,-33 +2021-01-28 16:38, slack,- +2021-01-28 21:41, flood,46 +2021-01-29 01:02, slack,- +2021-01-29 02:39, ebb,-31 +2021-01-29 04:38, slack,- +2021-01-29 09:35, flood,49 +2021-01-29 13:08, slack,- +2021-01-29 14:57, ebb,-36 +2021-01-29 17:20, slack,- +2021-01-29 22:23, flood,49 +2021-01-30 01:50, slack,- +2021-01-30 03:27, ebb,-34 +2021-01-30 05:26, slack,- +2021-01-30 10:23, flood,52 +2021-01-30 13:50, slack,- +2021-01-30 15:45, ebb,-39 +2021-01-30 18:02, slack,- +2021-01-30 23:05, flood,52 +2021-01-31 02:32, slack,- +2021-01-31 04:15, ebb,-36 +2021-01-31 06:08, slack,- +2021-01-31 11:11, flood,54 +2021-01-31 14:38, slack,- +2021-01-31 16:33, ebb,-40 +2021-01-31 18:44, slack,- +2021-01-31 23:53, flood,53 +2021-02-01 03:20, slack,- +2021-02-01 05:03, ebb,-37 +2021-02-01 06:56, slack,- +2021-02-01 12:05, flood,53 +2021-02-01 15:32, slack,- +2021-02-01 17:21, ebb,-40 +2021-02-01 19:32, slack,- +2021-02-02 00:41, flood,53 +2021-02-02 04:08, slack,- +2021-02-02 05:51, ebb,-37 +2021-02-02 07:50, slack,- +2021-02-02 12:59, flood,51 +2021-02-02 16:20, slack,- +2021-02-02 18:09, ebb,-39 +2021-02-02 20:20, slack,- +2021-02-03 01:35, flood,52 +2021-02-03 04:56, slack,- +2021-02-03 06:39, ebb,-37 +2021-02-03 08:50, slack,- +2021-02-03 13:59, flood,49 +2021-02-03 17:14, slack,- +2021-02-03 19:03, ebb,-37 +2021-02-03 21:14, slack,- +2021-02-04 02:29, flood,51 +2021-02-04 05:50, slack,- +2021-02-04 07:33, ebb,-35 +2021-02-04 09:56, slack,- +2021-02-04 14:59, flood,46 +2021-02-04 18:14, slack,- +2021-02-04 19:57, ebb,-34 +2021-02-04 22:14, slack,- +2021-02-05 03:23, flood,48 +2021-02-05 06:44, slack,- +2021-02-05 08:27, ebb,-33 +2021-02-05 11:02, slack,- +2021-02-05 15:59, flood,43 +2021-02-05 19:20, slack,- +2021-02-05 20:51, ebb,-30 +2021-02-05 23:14, slack,- +2021-02-06 04:17, flood,45 +2021-02-06 07:44, slack,- +2021-02-06 09:27, ebb,-31 +2021-02-06 12:08, slack,- +2021-02-06 17:17, flood,41 +2021-02-06 20:20, slack,- +2021-02-06 21:57, ebb,-27 +2021-02-07 00:14, slack,- +2021-02-07 05:17, flood,43 +2021-02-07 08:44, slack,- +2021-02-07 10:27, ebb,-30 +2021-02-07 13:08, slack,- +2021-02-07 19:23, flood,42 +2021-02-07 21:26, slack,- +2021-02-07 23:03, ebb,-26 +2021-02-08 01:20, slack,- +2021-02-08 07:29, flood,41 +2021-02-08 09:50, slack,- +2021-02-08 11:39, ebb,-30 +2021-02-08 14:08, slack,- +2021-02-08 20:35, flood,47 +2021-02-08 22:32, slack,- +2021-02-09 00:09, ebb,-27 +2021-02-09 02:20, slack,- +2021-02-09 08:47, flood,44 +2021-02-09 10:44, slack,- +2021-02-09 12:45, ebb,-30 +2021-02-09 15:08, slack,- +2021-02-09 21:29, flood,52 +2021-02-09 23:26, slack,- +2021-02-10 01:15, ebb,-27 +2021-02-10 03:14, slack,- +2021-02-10 09:47, flood,48 +2021-02-10 11:44, slack,- +2021-02-10 13:45, ebb,-31 +2021-02-10 16:02, slack,- +2021-02-10 22:23, flood,56 +2021-02-11 00:20, slack,- +2021-02-11 02:15, ebb,-28 +2021-02-11 04:08, slack,- +2021-02-11 10:35, flood,50 +2021-02-11 12:32, slack,- +2021-02-11 14:39, ebb,-32 +2021-02-11 16:50, slack,- +2021-02-11 23:11, flood,57 +2021-02-12 01:08, slack,- +2021-02-12 03:09, ebb,-29 +2021-02-12 05:02, slack,- +2021-02-12 11:23, flood,50 +2021-02-12 13:20, slack,- +2021-02-12 15:21, ebb,-32 +2021-02-12 17:38, slack,- +2021-02-12 23:59, flood,55 +2021-02-13 01:56, slack,- +2021-02-13 03:51, ebb,-29 +2021-02-13 05:50, slack,- +2021-02-13 12:11, flood,49 +2021-02-13 14:08, slack,- +2021-02-13 15:57, ebb,-32 +2021-02-13 18:26, slack,- +2021-02-14 00:47, flood,52 +2021-02-14 02:44, slack,- +2021-02-14 04:27, ebb,-29 +2021-02-14 06:38, slack,- +2021-02-14 12:59, flood,46 +2021-02-14 14:56, slack,- +2021-02-14 16:39, ebb,-31 +2021-02-14 19:08, slack,- +2021-02-15 01:35, flood,48 +2021-02-15 03:32, slack,- +2021-02-15 05:09, ebb,-28 +2021-02-15 07:20, slack,- +2021-02-15 13:41, flood,42 +2021-02-15 15:44, slack,- +2021-02-15 17:15, ebb,-29 +2021-02-15 19:50, slack,- +2021-02-16 02:23, flood,43 +2021-02-16 04:14, slack,- +2021-02-16 05:45, ebb,-27 +2021-02-16 08:08, slack,- +2021-02-16 14:23, flood,38 +2021-02-16 16:26, slack,- +2021-02-16 17:57, ebb,-28 +2021-02-16 20:32, slack,- +2021-02-17 02:59, flood,38 +2021-02-17 04:56, slack,- +2021-02-17 06:27, ebb,-26 +2021-02-17 09:02, slack,- +2021-02-17 14:41, flood,35 +2021-02-17 17:14, slack,- +2021-02-17 18:39, ebb,-26 +2021-02-17 21:14, slack,- +2021-02-18 02:23, flood,34 +2021-02-18 05:38, slack,- +2021-02-18 07:09, ebb,-24 +2021-02-18 09:56, slack,- +2021-02-18 14:53, flood,32 +2021-02-18 18:02, slack,- +2021-02-18 19:27, ebb,-24 +2021-02-18 22:02, slack,- +2021-02-19 02:53, flood,33 +2021-02-19 06:26, slack,- +2021-02-19 07:57, ebb,-23 +2021-02-19 10:50, slack,- +2021-02-19 15:29, flood,31 +2021-02-19 18:50, slack,- +2021-02-19 20:15, ebb,-22 +2021-02-19 22:50, slack,- +2021-02-20 03:29, flood,32 +2021-02-20 07:14, slack,- +2021-02-20 08:39, ebb,-22 +2021-02-20 11:38, slack,- +2021-02-20 16:11, flood,30 +2021-02-20 19:38, slack,- +2021-02-20 21:03, ebb,-21 +2021-02-20 23:38, slack,- +2021-02-21 04:11, flood,32 +2021-02-21 07:56, slack,- +2021-02-21 09:33, ebb,-22 +2021-02-21 12:26, slack,- +2021-02-21 16:59, flood,30 +2021-02-21 20:32, slack,- +2021-02-21 21:57, ebb,-20 +2021-02-22 00:26, slack,- +2021-02-22 04:59, flood,33 +2021-02-22 08:50, slack,- +2021-02-22 10:27, ebb,-23 +2021-02-22 13:14, slack,- +2021-02-22 17:53, flood,32 +2021-02-22 21:26, slack,- +2021-02-22 22:57, ebb,-22 +2021-02-23 01:14, slack,- +2021-02-23 05:47, flood,35 +2021-02-23 09:38, slack,- +2021-02-23 11:21, ebb,-25 +2021-02-23 14:02, slack,- +2021-02-23 18:41, flood,35 +2021-02-23 22:14, slack,- +2021-02-23 23:45, ebb,-24 +2021-02-24 02:02, slack,- +2021-02-24 06:41, flood,39 +2021-02-24 10:26, slack,- +2021-02-24 12:09, ebb,-28 +2021-02-24 14:44, slack,- +2021-02-24 19:35, flood,39 +2021-02-24 23:02, slack,- +2021-02-25 00:33, ebb,-27 +2021-02-25 02:44, slack,- +2021-02-25 07:29, flood,43 +2021-02-25 11:14, slack,- +2021-02-25 12:57, ebb,-31 +2021-02-25 15:26, slack,- +2021-02-25 20:23, flood,43 +2021-02-25 23:50, slack,- +2021-02-26 01:27, ebb,-30 +2021-02-26 03:32, slack,- +2021-02-26 08:23, flood,48 +2021-02-26 11:56, slack,- +2021-02-26 13:45, ebb,-35 +2021-02-26 16:08, slack,- +2021-02-26 21:11, flood,48 +2021-02-27 00:32, slack,- +2021-02-27 02:15, ebb,-34 +2021-02-27 04:14, slack,- +2021-02-27 09:17, flood,52 +2021-02-27 12:44, slack,- +2021-02-27 14:33, ebb,-38 +2021-02-27 16:50, slack,- +2021-02-27 21:59, flood,53 +2021-02-28 01:20, slack,- +2021-02-28 03:03, ebb,-36 +2021-02-28 05:02, slack,- +2021-02-28 10:05, flood,56 +2021-02-28 13:32, slack,- +2021-02-28 15:21, ebb,-40 +2021-02-28 17:32, slack,- +2021-02-28 22:41, flood,55 +2021-03-01 02:08, slack,- +2021-03-01 03:51, ebb,-39 +2021-03-01 05:50, slack,- +2021-03-01 10:53, flood,57 +2021-03-01 14:20, slack,- +2021-03-01 16:09, ebb,-41 +2021-03-01 18:20, slack,- +2021-03-01 23:23, flood,56 +2021-03-02 02:50, slack,- +2021-03-02 04:39, ebb,-40 +2021-03-02 06:38, slack,- +2021-03-02 11:41, flood,55 +2021-03-02 15:14, slack,- +2021-03-02 16:57, ebb,-41 +2021-03-02 19:02, slack,- +2021-03-03 00:11, flood,54 +2021-03-03 03:44, slack,- +2021-03-03 05:27, ebb,-39 +2021-03-03 07:32, slack,- +2021-03-03 12:41, flood,52 +2021-03-03 16:02, slack,- +2021-03-03 17:51, ebb,-39 +2021-03-03 19:50, slack,- +2021-03-04 01:11, flood,52 +2021-03-04 04:32, slack,- +2021-03-04 06:15, ebb,-38 +2021-03-04 08:32, slack,- +2021-03-04 13:47, flood,48 +2021-03-04 17:02, slack,- +2021-03-04 18:39, ebb,-36 +2021-03-04 20:50, slack,- +2021-03-05 02:05, flood,49 +2021-03-05 05:26, slack,- +2021-03-05 07:09, ebb,-36 +2021-03-05 09:38, slack,- +2021-03-05 14:47, flood,44 +2021-03-05 18:02, slack,- +2021-03-05 19:33, ebb,-32 +2021-03-05 21:50, slack,- +2021-03-06 02:59, flood,45 +2021-03-06 06:20, slack,- +2021-03-06 08:03, ebb,-33 +2021-03-06 10:44, slack,- +2021-03-06 16:05, flood,41 +2021-03-06 19:02, slack,- +2021-03-06 20:27, ebb,-28 +2021-03-06 22:56, slack,- +2021-03-07 04:05, flood,41 +2021-03-07 07:26, slack,- +2021-03-07 08:57, ebb,-29 +2021-03-07 11:50, slack,- +2021-03-07 17:59, flood,41 +2021-03-07 20:08, slack,- +2021-03-07 21:33, ebb,-25 +2021-03-08 00:02, slack,- +2021-03-08 05:35, flood,38 +2021-03-08 08:26, slack,- +2021-03-08 10:09, ebb,-27 +2021-03-08 12:56, slack,- +2021-03-08 19:11, flood,44 +2021-03-08 21:08, slack,- +2021-03-08 22:51, ebb,-24 +2021-03-09 01:08, slack,- +2021-03-09 07:29, flood,41 +2021-03-09 09:32, slack,- +2021-03-09 11:33, ebb,-27 +2021-03-09 13:56, slack,- +2021-03-09 20:17, flood,48 +2021-03-09 22:08, slack,- +2021-03-10 00:33, ebb,-25 +2021-03-10 02:08, slack,- +2021-03-10 08:35, flood,45 +2021-03-10 10:26, slack,- +2021-03-10 13:09, ebb,-28 +2021-03-10 14:50, slack,- +2021-03-10 21:11, flood,52 +2021-03-10 23:08, slack,- +2021-03-11 01:33, ebb,-27 +2021-03-11 03:02, slack,- +2021-03-11 09:29, flood,49 +2021-03-11 11:20, slack,- +2021-03-11 14:03, ebb,-30 +2021-03-11 15:44, slack,- +2021-03-11 22:05, flood,55 +2021-03-11 23:56, slack,- +2021-03-12 02:27, ebb,-29 +2021-03-12 03:50, slack,- +2021-03-12 10:17, flood,51 +2021-03-12 12:14, slack,- +2021-03-12 14:45, ebb,-30 +2021-03-12 16:32, slack,- +2021-03-12 22:47, flood,56 +2021-03-13 00:44, slack,- +2021-03-13 03:09, ebb,-29 +2021-03-13 04:38, slack,- +2021-03-13 11:05, flood,51 +2021-03-13 13:02, slack,- +2021-03-13 15:09, ebb,-31 +2021-03-13 17:14, slack,- +2021-03-13 23:35, flood,53 +2021-03-14 01:32, slack,- +2021-03-14 03:39, ebb,-30 +2021-03-14 05:26, slack,- +2021-03-14 11:47, flood,49 +2021-03-14 13:44, slack,- +2021-03-14 15:39, ebb,-31 +2021-03-14 17:50, slack,- +2021-03-15 00:17, flood,49 +2021-03-15 02:14, slack,- +2021-03-15 04:03, ebb,-29 +2021-03-15 06:08, slack,- +2021-03-15 12:29, flood,45 +2021-03-15 14:32, slack,- +2021-03-15 16:09, ebb,-30 +2021-03-15 18:32, slack,- +2021-03-16 00:59, flood,44 +2021-03-16 02:56, slack,- +2021-03-16 04:39, ebb,-29 +2021-03-16 06:56, slack,- +2021-03-16 13:05, flood,41 +2021-03-16 15:14, slack,- +2021-03-16 16:51, ebb,-29 +2021-03-16 19:08, slack,- +2021-03-17 01:35, flood,38 +2021-03-17 03:38, slack,- +2021-03-17 05:15, ebb,-28 +2021-03-17 07:38, slack,- +2021-03-17 12:47, flood,38 +2021-03-17 15:56, slack,- +2021-03-17 17:27, ebb,-28 +2021-03-17 19:50, slack,- +2021-03-18 00:47, flood,35 +2021-03-18 04:20, slack,- +2021-03-18 05:51, ebb,-27 +2021-03-18 08:26, slack,- +2021-03-18 13:23, flood,35 +2021-03-18 16:38, slack,- +2021-03-18 18:09, ebb,-26 +2021-03-18 20:32, slack,- +2021-03-19 01:23, flood,34 +2021-03-19 05:02, slack,- +2021-03-19 06:33, ebb,-26 +2021-03-19 09:14, slack,- +2021-03-19 14:11, flood,33 +2021-03-19 17:26, slack,- +2021-03-19 18:57, ebb,-25 +2021-03-19 21:20, slack,- +2021-03-20 02:05, flood,33 +2021-03-20 05:44, slack,- +2021-03-20 07:21, ebb,-25 +2021-03-20 10:08, slack,- +2021-03-20 14:53, flood,32 +2021-03-20 18:14, slack,- +2021-03-20 19:39, ebb,-23 +2021-03-20 22:14, slack,- +2021-03-21 02:53, flood,33 +2021-03-21 06:26, slack,- +2021-03-21 08:03, ebb,-24 +2021-03-21 11:02, slack,- +2021-03-21 15:41, flood,32 +2021-03-21 19:02, slack,- +2021-03-21 20:27, ebb,-22 +2021-03-21 23:02, slack,- +2021-03-22 03:41, flood,33 +2021-03-22 07:14, slack,- +2021-03-22 08:57, ebb,-23 +2021-03-22 11:50, slack,- +2021-03-22 16:29, flood,33 +2021-03-22 19:56, slack,- +2021-03-22 21:21, ebb,-22 +2021-03-22 23:56, slack,- +2021-03-23 04:29, flood,35 +2021-03-23 08:08, slack,- +2021-03-23 09:51, ebb,-24 +2021-03-23 12:38, slack,- +2021-03-23 17:17, flood,34 +2021-03-23 20:50, slack,- +2021-03-23 22:21, ebb,-23 +2021-03-24 00:44, slack,- +2021-03-24 05:17, flood,37 +2021-03-24 09:02, slack,- +2021-03-24 10:45, ebb,-26 +2021-03-24 13:26, slack,- +2021-03-24 18:11, flood,38 +2021-03-24 21:44, slack,- +2021-03-24 23:15, ebb,-26 +2021-03-25 01:32, slack,- +2021-03-25 06:11, flood,41 +2021-03-25 09:56, slack,- +2021-03-25 11:39, ebb,-29 +2021-03-25 14:14, slack,- +2021-03-25 18:59, flood,42 +2021-03-25 22:32, slack,- +2021-03-26 00:09, ebb,-29 +2021-03-26 02:20, slack,- +2021-03-26 07:05, flood,46 +2021-03-26 10:44, slack,- +2021-03-26 12:33, ebb,-33 +2021-03-26 14:56, slack,- +2021-03-26 19:53, flood,46 +2021-03-26 23:20, slack,- +2021-03-27 00:57, ebb,-33 +2021-03-27 03:08, slack,- +2021-03-27 07:59, flood,50 +2021-03-27 11:32, slack,- +2021-03-27 13:21, ebb,-36 +2021-03-27 15:38, slack,- +2021-03-27 20:41, flood,51 +2021-03-28 00:08, slack,- +2021-03-28 01:45, ebb,-36 +2021-03-28 03:50, slack,- +2021-03-28 08:53, flood,54 +2021-03-28 12:20, slack,- +2021-03-28 14:09, ebb,-39 +2021-03-28 16:20, slack,- +2021-03-28 21:29, flood,55 +2021-03-29 00:50, slack,- +2021-03-29 02:39, ebb,-39 +2021-03-29 04:38, slack,- +2021-03-29 09:47, flood,57 +2021-03-29 13:14, slack,- +2021-03-29 14:57, ebb,-40 +2021-03-29 17:08, slack,- +2021-03-29 22:17, flood,57 +2021-03-30 01:38, slack,- +2021-03-30 03:27, ebb,-40 +2021-03-30 05:32, slack,- +2021-03-30 10:35, flood,57 +2021-03-30 14:02, slack,- +2021-03-30 15:51, ebb,-40 +2021-03-30 17:50, slack,- +2021-03-30 22:59, flood,57 +2021-03-31 02:26, slack,- +2021-03-31 04:15, ebb,-41 +2021-03-31 06:20, slack,- +2021-03-31 11:29, flood,55 +2021-03-31 14:56, slack,- +2021-03-31 16:39, ebb,-39 +2021-03-31 18:38, slack,- +2021-03-31 23:47, flood,54 +2021-04-01 03:20, slack,- +2021-04-01 05:03, ebb,-40 +2021-04-01 07:14, slack,- +2021-04-01 12:29, flood,50 +2021-04-01 15:50, slack,- +2021-04-01 17:27, ebb,-37 +2021-04-01 19:32, slack,- +2021-04-02 00:41, flood,49 +2021-04-02 04:08, slack,- +2021-04-02 05:51, ebb,-38 +2021-04-02 08:14, slack,- +2021-04-02 13:41, flood,46 +2021-04-02 16:44, slack,- +2021-04-02 18:21, ebb,-34 +2021-04-02 20:32, slack,- +2021-04-03 01:47, flood,45 +2021-04-03 05:02, slack,- +2021-04-03 06:45, ebb,-35 +2021-04-03 09:20, slack,- +2021-04-03 15:05, flood,43 +2021-04-03 17:44, slack,- +2021-04-03 19:15, ebb,-30 +2021-04-03 21:38, slack,- +2021-04-04 02:53, flood,41 +2021-04-04 06:02, slack,- +2021-04-04 07:39, ebb,-31 +2021-04-04 10:26, slack,- +2021-04-04 16:41, flood,42 +2021-04-04 18:44, slack,- +2021-04-04 20:09, ebb,-26 +2021-04-04 22:44, slack,- +2021-04-05 04:17, flood,37 +2021-04-05 07:02, slack,- +2021-04-05 08:39, ebb,-27 +2021-04-05 11:38, slack,- +2021-04-05 17:53, flood,43 +2021-04-05 19:50, slack,- +2021-04-05 21:15, ebb,-23 +2021-04-05 23:50, slack,- +2021-04-06 06:11, flood,38 +2021-04-06 08:08, slack,- +2021-04-06 09:45, ebb,-25 +2021-04-06 12:38, slack,- +2021-04-06 18:53, flood,45 +2021-04-06 20:50, slack,- +2021-04-06 23:39, ebb,-23 +2021-04-07 00:50, slack,- +2021-04-07 07:17, flood,41 +2021-04-07 09:08, slack,- +2021-04-07 12:15, ebb,-26 +2021-04-07 13:38, slack,- +2021-04-07 19:53, flood,48 +2021-04-07 21:50, slack,- +2021-04-08 00:39, ebb,-26 +2021-04-08 01:50, slack,- +2021-04-08 08:11, flood,45 +2021-04-08 10:08, slack,- +2021-04-08 13:03, ebb,-27 +2021-04-08 14:26, slack,- +2021-04-08 20:47, flood,51 +2021-04-08 22:44, slack,- +2021-04-09 01:27, ebb,-28 +2021-04-09 02:44, slack,- +2021-04-09 09:05, flood,48 +2021-04-09 11:02, slack,- +2021-04-09 13:51, ebb,-28 +2021-04-09 15:14, slack,- +2021-04-09 21:35, flood,53 +2021-04-09 23:32, slack,- +2021-04-10 02:09, ebb,-29 +2021-04-10 03:32, slack,- +2021-04-10 09:53, flood,50 +2021-04-10 11:50, slack,- +2021-04-10 14:27, ebb,-29 +2021-04-10 15:56, slack,- +2021-04-10 22:23, flood,52 +2021-04-11 00:14, slack,- +2021-04-11 02:51, ebb,-30 +2021-04-11 04:14, slack,- +2021-04-11 10:41, flood,50 +2021-04-11 12:32, slack,- +2021-04-11 14:45, ebb,-29 +2021-04-11 16:38, slack,- +2021-04-11 23:05, flood,49 +2021-04-12 01:02, slack,- +2021-04-12 03:15, ebb,-30 +2021-04-12 05:02, slack,- +2021-04-12 11:17, flood,48 +2021-04-12 13:20, slack,- +2021-04-12 15:03, ebb,-29 +2021-04-12 17:14, slack,- +2021-04-12 23:47, flood,45 +2021-04-13 01:44, slack,- +2021-04-13 03:33, ebb,-30 +2021-04-13 05:44, slack,- +2021-04-13 11:53, flood,44 +2021-04-13 14:02, slack,- +2021-04-13 15:39, ebb,-29 +2021-04-13 17:56, slack,- +2021-04-14 00:17, flood,39 +2021-04-14 02:20, slack,- +2021-04-14 04:03, ebb,-29 +2021-04-14 06:26, slack,- +2021-04-14 11:35, flood,41 +2021-04-14 14:44, slack,- +2021-04-14 16:15, ebb,-28 +2021-04-14 18:32, slack,- +2021-04-14 23:23, flood,38 +2021-04-15 03:02, slack,- +2021-04-15 04:39, ebb,-29 +2021-04-15 07:08, slack,- +2021-04-15 12:05, flood,38 +2021-04-15 15:26, slack,- +2021-04-15 16:57, ebb,-28 +2021-04-15 19:14, slack,- +2021-04-15 23:53, flood,36 +2021-04-16 03:44, slack,- +2021-04-16 05:21, ebb,-29 +2021-04-16 07:50, slack,- +2021-04-16 12:47, flood,36 +2021-04-16 16:14, slack,- +2021-04-16 17:39, ebb,-27 +2021-04-16 19:56, slack,- +2021-04-17 00:41, flood,35 +2021-04-17 04:20, slack,- +2021-04-17 06:03, ebb,-28 +2021-04-17 08:38, slack,- +2021-04-17 13:35, flood,35 +2021-04-17 16:56, slack,- +2021-04-17 18:21, ebb,-26 +2021-04-17 20:38, slack,- +2021-04-18 01:29, flood,34 +2021-04-18 05:02, slack,- +2021-04-18 06:45, ebb,-27 +2021-04-18 09:26, slack,- +2021-04-18 14:23, flood,35 +2021-04-18 17:44, slack,- +2021-04-18 19:09, ebb,-25 +2021-04-18 21:32, slack,- +2021-04-19 02:17, flood,35 +2021-04-19 05:50, slack,- +2021-04-19 07:33, ebb,-27 +2021-04-19 10:20, slack,- +2021-04-19 15:05, flood,35 +2021-04-19 18:32, slack,- +2021-04-19 19:57, ebb,-24 +2021-04-19 22:26, slack,- +2021-04-20 03:11, flood,36 +2021-04-20 06:38, slack,- +2021-04-20 08:21, ebb,-26 +2021-04-20 11:14, slack,- +2021-04-20 15:53, flood,36 +2021-04-20 19:20, slack,- +2021-04-20 20:51, ebb,-24 +2021-04-20 23:20, slack,- +2021-04-21 03:59, flood,38 +2021-04-21 07:32, slack,- +2021-04-21 09:15, ebb,-27 +2021-04-21 12:02, slack,- +2021-04-21 16:47, flood,39 +2021-04-21 20:14, slack,- +2021-04-21 21:51, ebb,-25 +2021-04-22 00:14, slack,- +2021-04-22 04:53, flood,40 +2021-04-22 08:26, slack,- +2021-04-22 10:15, ebb,-28 +2021-04-22 12:50, slack,- +2021-04-22 17:35, flood,42 +2021-04-22 21:08, slack,- +2021-04-22 22:45, ebb,-28 +2021-04-23 01:02, slack,- +2021-04-23 05:47, flood,44 +2021-04-23 09:20, slack,- +2021-04-23 11:09, ebb,-31 +2021-04-23 13:38, slack,- +2021-04-23 18:29, flood,45 +2021-04-23 22:02, slack,- +2021-04-23 23:39, ebb,-31 +2021-04-24 01:56, slack,- +2021-04-24 06:41, flood,48 +2021-04-24 10:20, slack,- +2021-04-24 12:03, ebb,-34 +2021-04-24 14:20, slack,- +2021-04-24 19:17, flood,49 +2021-04-24 22:50, slack,- +2021-04-25 00:33, ebb,-34 +2021-04-25 02:44, slack,- +2021-04-25 07:35, flood,51 +2021-04-25 11:08, slack,- +2021-04-25 12:57, ebb,-36 +2021-04-25 15:08, slack,- +2021-04-25 20:11, flood,53 +2021-04-25 23:38, slack,- +2021-04-26 01:21, ebb,-37 +2021-04-26 03:32, slack,- +2021-04-26 08:35, flood,54 +2021-04-26 12:02, slack,- +2021-04-26 13:45, ebb,-38 +2021-04-26 15:56, slack,- +2021-04-26 20:59, flood,55 +2021-04-27 00:26, slack,- +2021-04-27 02:15, ebb,-40 +2021-04-27 04:26, slack,- +2021-04-27 09:29, flood,55 +2021-04-27 12:56, slack,- +2021-04-27 14:39, ebb,-39 +2021-04-27 16:38, slack,- +2021-04-27 21:53, flood,56 +2021-04-28 01:14, slack,- +2021-04-28 03:03, ebb,-41 +2021-04-28 05:14, slack,- +2021-04-28 10:23, flood,55 +2021-04-28 13:44, slack,- +2021-04-28 15:27, ebb,-38 +2021-04-28 17:32, slack,- +2021-04-28 22:35, flood,55 +2021-04-29 02:08, slack,- +2021-04-29 03:51, ebb,-41 +2021-04-29 06:08, slack,- +2021-04-29 11:23, flood,52 +2021-04-29 14:38, slack,- +2021-04-29 16:15, ebb,-37 +2021-04-29 18:20, slack,- +2021-04-29 23:29, flood,51 +2021-04-30 02:56, slack,- +2021-04-30 04:39, ebb,-39 +2021-04-30 07:02, slack,- +2021-04-30 12:29, flood,48 +2021-04-30 15:38, slack,- +2021-04-30 17:09, ebb,-34 +2021-04-30 19:14, slack,- +2021-05-01 00:23, flood,46 +2021-05-01 03:50, slack,- +2021-05-01 05:33, ebb,-37 +2021-05-01 08:02, slack,- +2021-05-01 14:17, flood,46 +2021-05-01 16:32, slack,- +2021-05-01 18:03, ebb,-31 +2021-05-01 20:14, slack,- +2021-05-02 01:41, flood,41 +2021-05-02 04:44, slack,- +2021-05-02 06:27, ebb,-33 +2021-05-02 09:02, slack,- +2021-05-02 15:23, flood,45 +2021-05-02 17:32, slack,- +2021-05-02 18:57, ebb,-28 +2021-05-02 21:20, slack,- +2021-05-03 03:17, flood,38 +2021-05-03 05:44, slack,- +2021-05-03 07:15, ebb,-30 +2021-05-03 10:14, slack,- +2021-05-03 16:29, flood,45 +2021-05-03 18:26, slack,- +2021-05-03 19:51, ebb,-25 +2021-05-03 22:32, slack,- +2021-05-04 04:47, flood,38 +2021-05-04 06:44, slack,- +2021-05-04 08:15, ebb,-26 +2021-05-04 11:14, slack,- +2021-05-04 17:35, flood,45 +2021-05-04 19:26, slack,- +2021-05-04 20:57, ebb,-23 +2021-05-04 23:32, slack,- +2021-05-05 05:53, flood,39 +2021-05-05 07:44, slack,- +2021-05-05 09:21, ebb,-24 +2021-05-05 12:14, slack,- +2021-05-05 18:29, flood,46 +2021-05-05 20:26, slack,- +2021-05-05 23:27, ebb,-23 +2021-05-06 00:32, slack,- +2021-05-06 06:47, flood,41 +2021-05-06 08:44, slack,- +2021-05-06 11:57, ebb,-25 +2021-05-06 13:08, slack,- +2021-05-06 19:29, flood,47 +2021-05-06 21:20, slack,- +2021-05-07 00:21, ebb,-26 +2021-05-07 01:26, slack,- +2021-05-07 07:47, flood,43 +2021-05-07 09:38, slack,- +2021-05-07 12:39, ebb,-26 +2021-05-07 13:56, slack,- +2021-05-07 20:23, flood,48 +2021-05-07 22:14, slack,- +2021-05-08 01:03, ebb,-27 +2021-05-08 02:20, slack,- +2021-05-08 08:41, flood,45 +2021-05-08 10:32, slack,- +2021-05-08 13:21, ebb,-26 +2021-05-08 14:38, slack,- +2021-05-08 21:11, flood,48 +2021-05-08 23:02, slack,- +2021-05-09 01:51, ebb,-28 +2021-05-09 03:02, slack,- +2021-05-09 09:29, flood,46 +2021-05-09 11:20, slack,- +2021-05-09 13:57, ebb,-27 +2021-05-09 15:20, slack,- +2021-05-09 21:53, flood,47 +2021-05-09 23:44, slack,- +2021-05-10 02:27, ebb,-29 +2021-05-10 03:50, slack,- +2021-05-10 10:11, flood,46 +2021-05-10 12:08, slack,- +2021-05-10 14:03, ebb,-27 +2021-05-10 16:02, slack,- +2021-05-10 22:35, flood,44 +2021-05-11 00:26, slack,- +2021-05-11 02:45, ebb,-29 +2021-05-11 04:32, slack,- +2021-05-11 10:53, flood,45 +2021-05-11 12:50, slack,- +2021-05-11 14:33, ebb,-27 +2021-05-11 16:38, slack,- +2021-05-11 23:05, flood,40 +2021-05-12 01:08, slack,- +2021-05-12 02:57, ebb,-29 +2021-05-12 05:14, slack,- +2021-05-12 11:23, flood,42 +2021-05-12 13:32, slack,- +2021-05-12 15:09, ebb,-27 +2021-05-12 17:20, slack,- +2021-05-12 22:11, flood,38 +2021-05-13 01:50, slack,- +2021-05-13 03:33, ebb,-30 +2021-05-13 05:56, slack,- +2021-05-13 10:59, flood,40 +2021-05-13 14:14, slack,- +2021-05-13 15:45, ebb,-27 +2021-05-13 17:56, slack,- +2021-05-13 22:41, flood,39 +2021-05-14 02:26, slack,- +2021-05-14 04:09, ebb,-30 +2021-05-14 06:38, slack,- +2021-05-14 11:29, flood,40 +2021-05-14 15:02, slack,- +2021-05-14 16:27, ebb,-28 +2021-05-14 18:38, slack,- +2021-05-14 23:23, flood,38 +2021-05-15 03:08, slack,- +2021-05-15 04:51, ebb,-30 +2021-05-15 07:20, slack,- +2021-05-15 12:11, flood,39 +2021-05-15 15:44, slack,- +2021-05-15 17:09, ebb,-27 +2021-05-15 19:20, slack,- +2021-05-16 00:05, flood,38 +2021-05-16 03:44, slack,- +2021-05-16 05:33, ebb,-30 +2021-05-16 08:02, slack,- +2021-05-16 12:59, flood,38 +2021-05-16 16:26, slack,- +2021-05-16 17:57, ebb,-27 +2021-05-16 20:02, slack,- +2021-05-17 00:59, flood,37 +2021-05-17 04:26, slack,- +2021-05-17 06:15, ebb,-30 +2021-05-17 08:50, slack,- +2021-05-17 13:47, flood,38 +2021-05-17 17:14, slack,- +2021-05-17 18:45, ebb,-27 +2021-05-17 20:56, slack,- +2021-05-18 01:47, flood,38 +2021-05-18 05:14, slack,- +2021-05-18 07:03, ebb,-30 +2021-05-18 09:38, slack,- +2021-05-18 14:35, flood,40 +2021-05-18 18:02, slack,- +2021-05-18 19:33, ebb,-27 +2021-05-18 21:50, slack,- +2021-05-19 02:41, flood,39 +2021-05-19 06:02, slack,- +2021-05-19 07:51, ebb,-30 +2021-05-19 10:32, slack,- +2021-05-19 15:29, flood,41 +2021-05-19 18:50, slack,- +2021-05-19 20:21, ebb,-28 +2021-05-19 22:44, slack,- +2021-05-20 03:35, flood,41 +2021-05-20 06:56, slack,- +2021-05-20 08:45, ebb,-30 +2021-05-20 11:20, slack,- +2021-05-20 16:17, flood,43 +2021-05-20 19:44, slack,- +2021-05-20 21:15, ebb,-28 +2021-05-20 23:44, slack,- +2021-05-21 04:29, flood,44 +2021-05-21 07:56, slack,- +2021-05-21 09:39, ebb,-31 +2021-05-21 12:14, slack,- +2021-05-21 17:05, flood,46 +2021-05-21 20:32, slack,- +2021-05-21 22:15, ebb,-30 +2021-05-22 00:38, slack,- +2021-05-22 05:23, flood,46 +2021-05-22 08:50, slack,- +2021-05-22 10:39, ebb,-32 +2021-05-22 13:02, slack,- +2021-05-22 17:59, flood,49 +2021-05-22 21:32, slack,- +2021-05-22 23:15, ebb,-33 +2021-05-23 01:32, slack,- +2021-05-23 06:17, flood,48 +2021-05-23 09:50, slack,- +2021-05-23 11:39, ebb,-33 +2021-05-23 13:50, slack,- +2021-05-23 18:47, flood,51 +2021-05-23 22:20, slack,- +2021-05-24 00:09, ebb,-35 +2021-05-24 02:20, slack,- +2021-05-24 07:17, flood,50 +2021-05-24 10:50, slack,- +2021-05-24 12:33, ebb,-35 +2021-05-24 14:38, slack,- +2021-05-24 19:41, flood,52 +2021-05-24 23:14, slack,- +2021-05-25 00:57, ebb,-38 +2021-05-25 03:14, slack,- +2021-05-25 08:23, flood,51 +2021-05-25 11:44, slack,- +2021-05-25 13:21, ebb,-36 +2021-05-25 15:32, slack,- +2021-05-25 20:35, flood,53 +2021-05-26 00:02, slack,- +2021-05-26 01:51, ebb,-39 +2021-05-26 04:08, slack,- +2021-05-26 09:29, flood,52 +2021-05-26 12:38, slack,- +2021-05-26 14:15, ebb,-36 +2021-05-26 16:20, slack,- +2021-05-26 21:29, flood,53 +2021-05-27 00:56, slack,- +2021-05-27 02:45, ebb,-40 +2021-05-27 05:02, slack,- +2021-05-27 10:35, flood,52 +2021-05-27 13:32, slack,- +2021-05-27 15:09, ebb,-35 +2021-05-27 17:14, slack,- +2021-05-27 22:23, flood,51 +2021-05-28 01:44, slack,- +2021-05-28 03:33, ebb,-39 +2021-05-28 05:56, slack,- +2021-05-28 11:53, flood,51 +2021-05-28 14:26, slack,- +2021-05-28 16:03, ebb,-34 +2021-05-28 18:08, slack,- +2021-05-28 23:17, flood,47 +2021-05-29 02:38, slack,- +2021-05-29 04:21, ebb,-38 +2021-05-29 06:50, slack,- +2021-05-29 13:11, flood,50 +2021-05-29 15:20, slack,- +2021-05-29 16:51, ebb,-32 +2021-05-29 19:02, slack,- +2021-05-30 00:23, flood,43 +2021-05-30 03:32, slack,- +2021-05-30 05:15, ebb,-35 +2021-05-30 07:50, slack,- +2021-05-30 14:17, flood,49 +2021-05-30 16:14, slack,- +2021-05-30 17:45, ebb,-30 +2021-05-30 20:02, slack,- +2021-05-31 02:23, flood,41 +2021-05-31 04:26, slack,- +2021-05-31 06:03, ebb,-32 +2021-05-31 08:50, slack,- +2021-05-31 15:11, flood,48 +2021-05-31 17:14, slack,- +2021-05-31 18:39, ebb,-27 +2021-05-31 21:08, slack,- +2021-06-01 03:23, flood,40 +2021-06-01 05:26, slack,- +2021-06-01 06:57, ebb,-29 +2021-06-01 09:50, slack,- +2021-06-01 16:11, flood,47 +2021-06-01 18:08, slack,- +2021-06-01 19:33, ebb,-25 +2021-06-01 22:08, slack,- +2021-06-02 04:23, flood,39 +2021-06-02 06:20, slack,- +2021-06-02 07:51, ebb,-26 +2021-06-02 10:50, slack,- +2021-06-02 17:05, flood,45 +2021-06-02 19:02, slack,- +2021-06-02 20:33, ebb,-23 +2021-06-02 23:14, slack,- +2021-06-03 05:23, flood,39 +2021-06-03 07:14, slack,- +2021-06-03 08:51, ebb,-24 +2021-06-03 11:44, slack,- +2021-06-03 17:59, flood,44 +2021-06-03 19:56, slack,- +2021-06-03 23:03, ebb,-23 +2021-06-04 00:08, slack,- +2021-06-04 06:23, flood,39 +2021-06-04 08:14, slack,- +2021-06-04 11:21, ebb,-23 +2021-06-04 12:32, slack,- +2021-06-04 18:53, flood,43 +2021-06-04 20:50, slack,- +2021-06-04 23:57, ebb,-25 +2021-06-05 01:02, slack,- +2021-06-05 07:17, flood,39 +2021-06-05 09:08, slack,- +2021-06-05 12:09, ebb,-23 +2021-06-05 13:20, slack,- +2021-06-05 19:47, flood,42 +2021-06-05 21:44, slack,- +2021-06-06 00:45, ebb,-26 +2021-06-06 01:50, slack,- +2021-06-06 08:11, flood,40 +2021-06-06 10:02, slack,- +2021-06-06 12:51, ebb,-24 +2021-06-06 14:02, slack,- +2021-06-06 20:41, flood,41 +2021-06-06 22:32, slack,- +2021-06-07 01:27, ebb,-27 +2021-06-07 02:38, slack,- +2021-06-07 08:59, flood,41 +2021-06-07 10:50, slack,- +2021-06-07 13:03, ebb,-24 +2021-06-07 14:44, slack,- +2021-06-07 21:23, flood,40 +2021-06-07 23:14, slack,- +2021-06-08 02:03, ebb,-27 +2021-06-08 03:20, slack,- +2021-06-08 09:47, flood,42 +2021-06-08 11:38, slack,- +2021-06-08 13:21, ebb,-24 +2021-06-08 15:26, slack,- +2021-06-08 22:05, flood,38 +2021-06-08 23:56, slack,- +2021-06-09 01:57, ebb,-28 +2021-06-09 04:08, slack,- +2021-06-09 10:29, flood,41 +2021-06-09 12:20, slack,- +2021-06-09 13:57, ebb,-25 +2021-06-09 16:08, slack,- +2021-06-09 20:53, flood,37 +2021-06-10 00:32, slack,- +2021-06-10 02:21, ebb,-29 +2021-06-10 04:50, slack,- +2021-06-10 10:53, flood,40 +2021-06-10 13:02, slack,- +2021-06-10 14:39, ebb,-26 +2021-06-10 16:44, slack,- +2021-06-10 21:29, flood,38 +2021-06-11 01:14, slack,- +2021-06-11 02:57, ebb,-30 +2021-06-11 05:26, slack,- +2021-06-11 10:29, flood,40 +2021-06-11 13:50, slack,- +2021-06-11 15:21, ebb,-27 +2021-06-11 17:26, slack,- +2021-06-11 22:11, flood,40 +2021-06-12 01:50, slack,- +2021-06-12 03:39, ebb,-31 +2021-06-12 06:08, slack,- +2021-06-12 10:59, flood,41 +2021-06-12 14:32, slack,- +2021-06-12 16:03, ebb,-28 +2021-06-12 18:08, slack,- +2021-06-12 22:53, flood,41 +2021-06-13 02:32, slack,- +2021-06-13 04:21, ebb,-32 +2021-06-13 06:50, slack,- +2021-06-13 11:41, flood,42 +2021-06-13 15:14, slack,- +2021-06-13 16:45, ebb,-29 +2021-06-13 18:50, slack,- +2021-06-13 23:35, flood,42 +2021-06-14 03:14, slack,- +2021-06-14 05:03, ebb,-33 +2021-06-14 07:26, slack,- +2021-06-14 12:29, flood,42 +2021-06-14 15:56, slack,- +2021-06-14 17:27, ebb,-30 +2021-06-14 19:32, slack,- +2021-06-15 00:29, flood,42 +2021-06-15 03:56, slack,- +2021-06-15 05:51, ebb,-34 +2021-06-15 08:14, slack,- +2021-06-15 13:17, flood,43 +2021-06-15 16:38, slack,- +2021-06-15 18:15, ebb,-30 +2021-06-15 20:20, slack,- +2021-06-16 01:23, flood,43 +2021-06-16 04:44, slack,- +2021-06-16 06:39, ebb,-34 +2021-06-16 09:02, slack,- +2021-06-16 14:11, flood,45 +2021-06-16 17:26, slack,- +2021-06-16 19:03, ebb,-31 +2021-06-16 21:14, slack,- +2021-06-17 02:17, flood,44 +2021-06-17 05:32, slack,- +2021-06-17 07:27, ebb,-34 +2021-06-17 09:50, slack,- +2021-06-17 14:59, flood,46 +2021-06-17 18:20, slack,- +2021-06-17 19:57, ebb,-31 +2021-06-17 22:14, slack,- +2021-06-18 03:11, flood,45 +2021-06-18 06:26, slack,- +2021-06-18 08:15, ebb,-33 +2021-06-18 10:44, slack,- +2021-06-18 15:47, flood,48 +2021-06-18 19:08, slack,- +2021-06-18 20:51, ebb,-31 +2021-06-18 23:14, slack,- +2021-06-19 04:05, flood,46 +2021-06-19 07:26, slack,- +2021-06-19 09:15, ebb,-32 +2021-06-19 11:38, slack,- +2021-06-19 16:35, flood,49 +2021-06-19 20:02, slack,- +2021-06-19 21:45, ebb,-32 +2021-06-20 00:08, slack,- +2021-06-20 04:59, flood,46 +2021-06-20 08:26, slack,- +2021-06-20 10:09, ebb,-32 +2021-06-20 12:32, slack,- +2021-06-20 17:29, flood,50 +2021-06-20 21:02, slack,- +2021-06-20 22:45, ebb,-33 +2021-06-21 01:08, slack,- +2021-06-21 05:59, flood,46 +2021-06-21 09:32, slack,- +2021-06-21 11:09, ebb,-32 +2021-06-21 13:20, slack,- +2021-06-21 18:23, flood,50 +2021-06-21 21:56, slack,- +2021-06-21 23:45, ebb,-35 +2021-06-22 02:08, slack,- +2021-06-22 07:05, flood,46 +2021-06-22 10:32, slack,- +2021-06-22 12:09, ebb,-32 +2021-06-22 14:14, slack,- +2021-06-22 19:17, flood,50 +2021-06-22 22:50, slack,- +2021-06-23 00:39, ebb,-36 +2021-06-23 03:02, slack,- +2021-06-23 08:35, flood,47 +2021-06-23 11:26, slack,- +2021-06-23 13:03, ebb,-33 +2021-06-23 15:08, slack,- +2021-06-23 20:17, flood,49 +2021-06-23 23:44, slack,- +2021-06-24 01:33, ebb,-37 +2021-06-24 03:56, slack,- +2021-06-24 10:11, flood,51 +2021-06-24 12:26, slack,- +2021-06-24 13:57, ebb,-33 +2021-06-24 16:02, slack,- +2021-06-24 21:29, flood,49 +2021-06-25 00:38, slack,- +2021-06-25 02:27, ebb,-37 +2021-06-25 04:50, slack,- +2021-06-25 11:11, flood,53 +2021-06-25 13:20, slack,- +2021-06-25 14:51, ebb,-32 +2021-06-25 17:02, slack,- +2021-06-25 22:35, flood,48 +2021-06-26 01:32, slack,- +2021-06-26 03:15, ebb,-37 +2021-06-26 05:44, slack,- +2021-06-26 12:05, flood,53 +2021-06-26 14:14, slack,- +2021-06-26 15:45, ebb,-32 +2021-06-26 17:56, slack,- +2021-06-26 23:53, flood,46 +2021-06-27 02:26, slack,- +2021-06-27 04:09, ebb,-36 +2021-06-27 06:38, slack,- +2021-06-27 13:05, flood,52 +2021-06-27 15:08, slack,- +2021-06-27 16:39, ebb,-31 +2021-06-27 18:50, slack,- +2021-06-28 01:11, flood,44 +2021-06-28 03:14, slack,- +2021-06-28 04:57, ebb,-34 +2021-06-28 07:32, slack,- +2021-06-28 13:59, flood,51 +2021-06-28 15:56, slack,- +2021-06-28 17:27, ebb,-29 +2021-06-28 19:44, slack,- +2021-06-29 02:11, flood,43 +2021-06-29 04:08, slack,- +2021-06-29 05:45, ebb,-31 +2021-06-29 08:26, slack,- +2021-06-29 14:53, flood,49 +2021-06-29 16:50, slack,- +2021-06-29 18:21, ebb,-27 +2021-06-29 20:44, slack,- +2021-06-30 03:05, flood,41 +2021-06-30 05:02, slack,- +2021-06-30 06:33, ebb,-29 +2021-06-30 09:20, slack,- +2021-06-30 15:47, flood,47 +2021-06-30 17:38, slack,- +2021-06-30 19:09, ebb,-25 +2021-06-30 21:44, slack,- +2021-07-01 03:59, flood,39 +2021-07-01 05:56, slack,- +2021-07-01 07:27, ebb,-26 +2021-07-01 10:14, slack,- +2021-07-01 16:35, flood,44 +2021-07-01 18:32, slack,- +2021-07-01 20:03, ebb,-23 +2021-07-01 22:44, slack,- +2021-07-02 04:53, flood,37 +2021-07-02 06:44, slack,- +2021-07-02 08:15, ebb,-24 +2021-07-02 11:08, slack,- +2021-07-02 17:29, flood,41 +2021-07-02 19:26, slack,- +2021-07-02 21:03, ebb,-22 +2021-07-02 22:27, ebb,-22 +2021-07-02 23:38, slack,- +2021-07-03 05:47, flood,36 +2021-07-03 07:38, slack,- +2021-07-03 09:09, ebb,-22 +2021-07-03 11:56, slack,- +2021-07-03 18:23, flood,38 +2021-07-03 20:14, slack,- +2021-07-03 23:27, ebb,-23 +2021-07-04 00:32, slack,- +2021-07-04 06:41, flood,35 +2021-07-04 08:32, slack,- +2021-07-04 10:15, ebb,-21 +2021-07-04 11:39, ebb,-20 +2021-07-04 12:38, slack,- +2021-07-04 19:11, flood,36 +2021-07-04 21:02, slack,- +2021-07-05 00:15, ebb,-24 +2021-07-05 01:20, slack,- +2021-07-05 07:35, flood,35 +2021-07-05 09:26, slack,- +2021-07-05 12:09, ebb,-21 +2021-07-05 13:26, slack,- +2021-07-05 20:05, flood,34 +2021-07-05 21:56, slack,- +2021-07-06 01:03, ebb,-25 +2021-07-06 02:08, slack,- +2021-07-06 08:29, flood,36 +2021-07-06 10:20, slack,- +2021-07-06 12:03, ebb,-21 +2021-07-06 14:08, slack,- +2021-07-06 18:47, flood,32 +2021-07-06 20:53, flood,33 +2021-07-06 22:38, slack,- +2021-07-07 01:33, ebb,-25 +2021-07-07 02:56, slack,- +2021-07-07 09:17, flood,37 +2021-07-07 11:08, slack,- +2021-07-07 12:39, ebb,-22 +2021-07-07 14:50, slack,- +2021-07-07 19:29, flood,34 +2021-07-07 20:47, flood,32 +2021-07-07 23:20, slack,- +2021-07-08 01:09, ebb,-26 +2021-07-08 03:38, slack,- +2021-07-08 09:59, flood,38 +2021-07-08 11:50, slack,- +2021-07-08 13:21, ebb,-24 +2021-07-08 15:32, slack,- +2021-07-08 20:17, flood,36 +2021-07-09 00:02, slack,- +2021-07-09 01:45, ebb,-28 +2021-07-09 04:20, slack,- +2021-07-09 10:23, flood,39 +2021-07-09 12:38, slack,- +2021-07-09 14:03, ebb,-26 +2021-07-09 16:14, slack,- +2021-07-09 20:59, flood,39 +2021-07-10 00:44, slack,- +2021-07-10 02:27, ebb,-30 +2021-07-10 04:56, slack,- +2021-07-10 09:59, flood,41 +2021-07-10 13:20, slack,- +2021-07-10 14:51, ebb,-28 +2021-07-10 16:56, slack,- +2021-07-10 21:41, flood,43 +2021-07-11 01:20, slack,- +2021-07-11 03:09, ebb,-32 +2021-07-11 05:38, slack,- +2021-07-11 10:35, flood,44 +2021-07-11 14:02, slack,- +2021-07-11 15:33, ebb,-30 +2021-07-11 17:38, slack,- +2021-07-11 22:29, flood,45 +2021-07-12 02:02, slack,- +2021-07-12 03:51, ebb,-34 +2021-07-12 06:14, slack,- +2021-07-12 11:11, flood,46 +2021-07-12 14:44, slack,- +2021-07-12 16:15, ebb,-32 +2021-07-12 18:20, slack,- +2021-07-12 23:11, flood,47 +2021-07-13 02:44, slack,- +2021-07-13 04:39, ebb,-36 +2021-07-13 06:56, slack,- +2021-07-13 11:59, flood,47 +2021-07-13 15:26, slack,- +2021-07-13 17:03, ebb,-33 +2021-07-13 19:02, slack,- +2021-07-13 23:59, flood,48 +2021-07-14 03:32, slack,- +2021-07-14 05:21, ebb,-37 +2021-07-14 07:38, slack,- +2021-07-14 12:47, flood,48 +2021-07-14 16:08, slack,- +2021-07-14 17:51, ebb,-34 +2021-07-14 19:50, slack,- +2021-07-15 00:53, flood,48 +2021-07-15 04:14, slack,- +2021-07-15 06:09, ebb,-37 +2021-07-15 08:26, slack,- +2021-07-15 13:35, flood,49 +2021-07-15 16:56, slack,- +2021-07-15 18:39, ebb,-34 +2021-07-15 20:44, slack,- +2021-07-16 01:53, flood,48 +2021-07-16 05:08, slack,- +2021-07-16 07:03, ebb,-37 +2021-07-16 09:14, slack,- +2021-07-16 14:29, flood,50 +2021-07-16 17:44, slack,- +2021-07-16 19:27, ebb,-34 +2021-07-16 21:44, slack,- +2021-07-17 02:47, flood,47 +2021-07-17 06:02, slack,- +2021-07-17 07:51, ebb,-35 +2021-07-17 10:08, slack,- +2021-07-17 15:17, flood,50 +2021-07-17 18:38, slack,- +2021-07-17 20:21, ebb,-34 +2021-07-17 22:44, slack,- +2021-07-18 03:41, flood,46 +2021-07-18 07:02, slack,- +2021-07-18 08:45, ebb,-33 +2021-07-18 11:08, slack,- +2021-07-18 16:05, flood,50 +2021-07-18 19:32, slack,- +2021-07-18 21:21, ebb,-33 +2021-07-18 23:50, slack,- +2021-07-19 04:41, flood,44 +2021-07-19 08:08, slack,- +2021-07-19 09:45, ebb,-31 +2021-07-19 12:02, slack,- +2021-07-19 16:59, flood,48 +2021-07-19 20:32, slack,- +2021-07-19 22:21, ebb,-33 +2021-07-20 00:50, slack,- +2021-07-20 05:47, flood,43 +2021-07-20 09:08, slack,- +2021-07-20 10:45, ebb,-30 +2021-07-20 13:02, slack,- +2021-07-20 17:59, flood,47 +2021-07-20 21:32, slack,- +2021-07-20 23:21, ebb,-33 +2021-07-21 01:50, slack,- +2021-07-21 07:17, flood,43 +2021-07-21 10:14, slack,- +2021-07-21 11:45, ebb,-30 +2021-07-21 13:56, slack,- +2021-07-21 18:59, flood,45 +2021-07-21 22:32, slack,- +2021-07-22 00:21, ebb,-34 +2021-07-22 02:50, slack,- +2021-07-22 09:11, flood,47 +2021-07-22 11:14, slack,- +2021-07-22 12:45, ebb,-30 +2021-07-22 14:56, slack,- +2021-07-22 21:05, flood,45 +2021-07-22 23:26, slack,- +2021-07-23 01:15, ebb,-34 +2021-07-23 03:44, slack,- +2021-07-23 10:11, flood,52 +2021-07-23 12:08, slack,- +2021-07-23 13:45, ebb,-30 +2021-07-23 15:56, slack,- +2021-07-23 22:17, flood,48 +2021-07-24 00:20, slack,- +2021-07-24 02:09, ebb,-35 +2021-07-24 04:38, slack,- +2021-07-24 11:05, flood,55 +2021-07-24 13:02, slack,- +2021-07-24 14:39, ebb,-31 +2021-07-24 16:50, slack,- +2021-07-24 23:11, flood,49 +2021-07-25 01:14, slack,- +2021-07-25 03:03, ebb,-35 +2021-07-25 05:32, slack,- +2021-07-25 11:53, flood,55 +2021-07-25 13:56, slack,- +2021-07-25 15:33, ebb,-31 +2021-07-25 17:44, slack,- +2021-07-26 00:05, flood,49 +2021-07-26 02:08, slack,- +2021-07-26 03:51, ebb,-34 +2021-07-26 06:20, slack,- +2021-07-26 12:47, flood,54 +2021-07-26 14:44, slack,- +2021-07-26 16:21, ebb,-30 +2021-07-26 18:32, slack,- +2021-07-27 00:59, flood,47 +2021-07-27 02:56, slack,- +2021-07-27 04:39, ebb,-33 +2021-07-27 07:08, slack,- +2021-07-27 13:41, flood,52 +2021-07-27 15:32, slack,- +2021-07-27 17:09, ebb,-29 +2021-07-27 19:26, slack,- +2021-07-28 01:47, flood,45 +2021-07-28 03:44, slack,- +2021-07-28 05:27, ebb,-31 +2021-07-28 07:56, slack,- +2021-07-28 14:29, flood,49 +2021-07-28 16:20, slack,- +2021-07-28 17:57, ebb,-28 +2021-07-28 20:20, slack,- +2021-07-29 02:41, flood,42 +2021-07-29 04:38, slack,- +2021-07-29 06:09, ebb,-29 +2021-07-29 08:50, slack,- +2021-07-29 15:17, flood,45 +2021-07-29 17:08, slack,- +2021-07-29 18:45, ebb,-26 +2021-07-29 21:14, slack,- +2021-07-30 03:29, flood,39 +2021-07-30 05:26, slack,- +2021-07-30 06:57, ebb,-27 +2021-07-30 09:38, slack,- +2021-07-30 16:05, flood,40 +2021-07-30 17:56, slack,- +2021-07-30 19:27, ebb,-24 +2021-07-30 22:08, slack,- +2021-07-31 04:17, flood,36 +2021-07-31 06:14, slack,- +2021-07-31 07:45, ebb,-24 +2021-07-31 10:26, slack,- +2021-07-31 16:53, flood,36 +2021-07-31 18:50, slack,- +2021-07-31 20:15, ebb,-22 +2021-07-31 23:08, slack,- +2021-08-01 05:11, flood,33 +2021-08-01 07:08, slack,- +2021-08-01 08:33, ebb,-22 +2021-08-01 11:14, slack,- +2021-08-01 17:41, flood,32 +2021-08-01 19:38, slack,- +2021-08-01 21:09, ebb,-21 +2021-08-01 22:57, ebb,-21 +2021-08-01 23:56, slack,- +2021-08-02 06:05, flood,31 +2021-08-02 08:02, slack,- +2021-08-02 09:21, ebb,-20 +2021-08-02 12:02, slack,- +2021-08-02 16:41, flood,30 +2021-08-02 20:26, slack,- +2021-08-02 23:51, ebb,-21 +2021-08-03 00:50, slack,- +2021-08-03 07:05, flood,31 +2021-08-03 08:56, slack,- +2021-08-03 10:21, ebb,-19 +2021-08-03 12:50, slack,- +2021-08-03 17:23, flood,30 +2021-08-03 21:14, slack,- +2021-08-04 00:33, ebb,-22 +2021-08-04 01:38, slack,- +2021-08-04 07:53, flood,31 +2021-08-04 09:44, slack,- +2021-08-04 11:21, ebb,-20 +2021-08-04 13:38, slack,- +2021-08-04 18:05, flood,32 +2021-08-04 22:02, slack,- +2021-08-04 23:51, ebb,-23 +2021-08-05 02:26, slack,- +2021-08-05 08:47, flood,33 +2021-08-05 10:38, slack,- +2021-08-05 12:09, ebb,-22 +2021-08-05 14:20, slack,- +2021-08-05 18:53, flood,34 +2021-08-05 22:50, slack,- +2021-08-06 00:33, ebb,-25 +2021-08-06 03:08, slack,- +2021-08-06 09:23, flood,35 +2021-08-06 11:20, slack,- +2021-08-06 12:51, ebb,-24 +2021-08-06 15:02, slack,- +2021-08-06 19:41, flood,37 +2021-08-06 23:32, slack,- +2021-08-07 01:15, ebb,-28 +2021-08-07 03:50, slack,- +2021-08-07 08:53, flood,38 +2021-08-07 12:02, slack,- +2021-08-07 13:33, ebb,-26 +2021-08-07 15:44, slack,- +2021-08-07 20:29, flood,41 +2021-08-08 00:14, slack,- +2021-08-08 01:57, ebb,-31 +2021-08-08 04:26, slack,- +2021-08-08 09:29, flood,42 +2021-08-08 12:50, slack,- +2021-08-08 14:21, ebb,-29 +2021-08-08 16:26, slack,- +2021-08-08 21:17, flood,46 +2021-08-09 00:50, slack,- +2021-08-09 02:39, ebb,-34 +2021-08-09 05:08, slack,- +2021-08-09 10:05, flood,47 +2021-08-09 13:32, slack,- +2021-08-09 15:09, ebb,-32 +2021-08-09 17:08, slack,- +2021-08-09 22:05, flood,50 +2021-08-10 01:32, slack,- +2021-08-10 03:27, ebb,-37 +2021-08-10 05:44, slack,- +2021-08-10 10:47, flood,50 +2021-08-10 14:14, slack,- +2021-08-10 15:51, ebb,-34 +2021-08-10 17:50, slack,- +2021-08-10 22:47, flood,52 +2021-08-11 02:20, slack,- +2021-08-11 04:09, ebb,-39 +2021-08-11 06:26, slack,- +2021-08-11 11:29, flood,52 +2021-08-11 14:56, slack,- +2021-08-11 16:39, ebb,-36 +2021-08-11 18:38, slack,- +2021-08-11 23:35, flood,53 +2021-08-12 03:08, slack,- +2021-08-12 04:57, ebb,-40 +2021-08-12 07:08, slack,- +2021-08-12 12:11, flood,53 +2021-08-12 15:44, slack,- +2021-08-12 17:27, ebb,-37 +2021-08-12 19:26, slack,- +2021-08-13 00:29, flood,52 +2021-08-13 03:56, slack,- +2021-08-13 05:45, ebb,-39 +2021-08-13 07:50, slack,- +2021-08-13 13:05, flood,52 +2021-08-13 16:26, slack,- +2021-08-13 18:15, ebb,-37 +2021-08-13 20:20, slack,- +2021-08-14 01:29, flood,50 +2021-08-14 04:44, slack,- +2021-08-14 06:39, ebb,-38 +2021-08-14 08:44, slack,- +2021-08-14 13:59, flood,52 +2021-08-14 17:20, slack,- +2021-08-14 19:03, ebb,-37 +2021-08-14 21:20, slack,- +2021-08-15 02:23, flood,48 +2021-08-15 05:44, slack,- +2021-08-15 07:27, ebb,-35 +2021-08-15 09:38, slack,- +2021-08-15 14:47, flood,50 +2021-08-15 18:14, slack,- +2021-08-15 19:57, ebb,-35 +2021-08-15 22:26, slack,- +2021-08-16 03:23, flood,45 +2021-08-16 06:44, slack,- +2021-08-16 08:21, ebb,-32 +2021-08-16 10:38, slack,- +2021-08-16 15:41, flood,47 +2021-08-16 19:08, slack,- +2021-08-16 20:51, ebb,-33 +2021-08-16 23:32, slack,- +2021-08-17 04:29, flood,42 +2021-08-17 07:50, slack,- +2021-08-17 09:21, ebb,-29 +2021-08-17 11:44, slack,- +2021-08-17 16:41, flood,45 +2021-08-17 20:14, slack,- +2021-08-17 21:51, ebb,-31 +2021-08-18 00:32, slack,- +2021-08-18 05:53, flood,41 +2021-08-18 08:56, slack,- +2021-08-18 10:27, ebb,-27 +2021-08-18 12:44, slack,- +2021-08-18 17:47, flood,42 +2021-08-18 21:14, slack,- +2021-08-18 22:57, ebb,-30 +2021-08-19 01:38, slack,- +2021-08-19 07:59, flood,44 +2021-08-19 09:56, slack,- +2021-08-19 11:33, ebb,-27 +2021-08-19 13:44, slack,- +2021-08-19 19:59, flood,42 +2021-08-19 22:14, slack,- +2021-08-20 00:03, ebb,-31 +2021-08-20 02:38, slack,- +2021-08-20 08:59, flood,49 +2021-08-20 10:56, slack,- +2021-08-20 12:39, ebb,-28 +2021-08-20 14:44, slack,- +2021-08-20 21:17, flood,47 +2021-08-20 23:14, slack,- +2021-08-21 01:03, ebb,-32 +2021-08-21 03:32, slack,- +2021-08-21 09:59, flood,54 +2021-08-21 11:50, slack,- +2021-08-21 13:39, ebb,-29 +2021-08-21 15:44, slack,- +2021-08-21 22:11, flood,50 +2021-08-22 00:08, slack,- +2021-08-22 02:03, ebb,-32 +2021-08-22 04:26, slack,- +2021-08-22 10:47, flood,57 +2021-08-22 12:44, slack,- +2021-08-22 14:39, ebb,-30 +2021-08-22 16:32, slack,- +2021-08-22 22:59, flood,52 +2021-08-23 00:56, slack,- +2021-08-23 02:51, ebb,-33 +2021-08-23 05:14, slack,- +2021-08-23 11:35, flood,56 +2021-08-23 13:32, slack,- +2021-08-23 15:27, ebb,-31 +2021-08-23 17:26, slack,- +2021-08-23 23:47, flood,51 +2021-08-24 01:50, slack,- +2021-08-24 03:39, ebb,-33 +2021-08-24 06:02, slack,- +2021-08-24 12:23, flood,54 +2021-08-24 14:20, slack,- +2021-08-24 16:09, ebb,-30 +2021-08-24 18:14, slack,- +2021-08-25 00:35, flood,49 +2021-08-25 02:32, slack,- +2021-08-25 04:21, ebb,-32 +2021-08-25 06:44, slack,- +2021-08-25 13:11, flood,50 +2021-08-25 15:08, slack,- +2021-08-25 16:51, ebb,-30 +2021-08-25 19:02, slack,- +2021-08-26 01:23, flood,45 +2021-08-26 03:20, slack,- +2021-08-26 05:03, ebb,-31 +2021-08-26 07:26, slack,- +2021-08-26 13:59, flood,46 +2021-08-26 15:50, slack,- +2021-08-26 17:27, ebb,-28 +2021-08-26 19:50, slack,- +2021-08-27 02:11, flood,42 +2021-08-27 04:08, slack,- +2021-08-27 05:39, ebb,-29 +2021-08-27 08:08, slack,- +2021-08-27 14:41, flood,41 +2021-08-27 16:38, slack,- +2021-08-27 18:09, ebb,-27 +2021-08-27 20:38, slack,- +2021-08-28 02:53, flood,38 +2021-08-28 04:56, slack,- +2021-08-28 06:27, ebb,-27 +2021-08-28 08:56, slack,- +2021-08-28 15:23, flood,35 +2021-08-28 17:20, slack,- +2021-08-28 18:51, ebb,-25 +2021-08-28 21:38, slack,- +2021-08-29 03:35, flood,34 +2021-08-29 05:44, slack,- +2021-08-29 07:09, ebb,-24 +2021-08-29 09:44, slack,- +2021-08-29 14:41, flood,32 +2021-08-29 18:08, slack,- +2021-08-29 19:39, ebb,-23 +2021-08-29 22:32, slack,- +2021-08-30 03:35, flood,31 +2021-08-30 06:32, slack,- +2021-08-30 07:57, ebb,-22 +2021-08-30 10:38, slack,- +2021-08-30 15:17, flood,30 +2021-08-30 18:56, slack,- +2021-08-30 20:21, ebb,-22 +2021-08-30 23:26, slack,- +2021-08-31 04:11, flood,29 +2021-08-31 07:26, slack,- +2021-08-31 08:45, ebb,-20 +2021-08-31 11:26, slack,- +2021-08-31 15:59, flood,30 +2021-08-31 19:44, slack,- +2021-08-31 21:15, ebb,-21 +2021-09-01 00:14, slack,- +2021-09-01 04:53, flood,29 +2021-09-01 08:20, slack,- +2021-09-01 09:39, ebb,-19 +2021-09-01 12:14, slack,- +2021-09-01 16:41, flood,30 +2021-09-01 20:32, slack,- +2021-09-01 22:09, ebb,-21 +2021-09-02 01:02, slack,- +2021-09-02 05:41, flood,30 +2021-09-02 09:08, slack,- +2021-09-02 10:39, ebb,-20 +2021-09-02 13:02, slack,- +2021-09-02 17:35, flood,32 +2021-09-02 21:26, slack,- +2021-09-02 23:03, ebb,-22 +2021-09-03 01:50, slack,- +2021-09-03 06:29, flood,32 +2021-09-03 10:02, slack,- +2021-09-03 11:33, ebb,-22 +2021-09-03 13:50, slack,- +2021-09-03 18:23, flood,35 +2021-09-03 22:14, slack,- +2021-09-03 23:57, ebb,-25 +2021-09-04 02:32, slack,- +2021-09-04 07:17, flood,35 +2021-09-04 10:50, slack,- +2021-09-04 12:21, ebb,-25 +2021-09-04 14:32, slack,- +2021-09-04 19:11, flood,39 +2021-09-04 22:56, slack,- +2021-09-05 00:39, ebb,-29 +2021-09-05 03:14, slack,- +2021-09-05 08:05, flood,40 +2021-09-05 11:32, slack,- +2021-09-05 13:09, ebb,-28 +2021-09-05 15:14, slack,- +2021-09-05 20:05, flood,44 +2021-09-05 23:44, slack,- +2021-09-06 01:27, ebb,-32 +2021-09-06 03:56, slack,- +2021-09-06 08:53, flood,45 +2021-09-06 12:14, slack,- +2021-09-06 13:51, ebb,-31 +2021-09-06 16:02, slack,- +2021-09-06 20:53, flood,49 +2021-09-07 00:26, slack,- +2021-09-07 02:15, ebb,-36 +2021-09-07 04:32, slack,- +2021-09-07 09:35, flood,50 +2021-09-07 12:56, slack,- +2021-09-07 14:39, ebb,-35 +2021-09-07 16:44, slack,- +2021-09-07 21:41, flood,53 +2021-09-08 01:08, slack,- +2021-09-08 03:03, ebb,-38 +2021-09-08 05:14, slack,- +2021-09-08 10:17, flood,54 +2021-09-08 13:44, slack,- +2021-09-08 15:27, ebb,-37 +2021-09-08 17:26, slack,- +2021-09-08 22:29, flood,56 +2021-09-09 01:56, slack,- +2021-09-09 03:45, ebb,-40 +2021-09-09 05:56, slack,- +2021-09-09 10:59, flood,56 +2021-09-09 14:26, slack,- +2021-09-09 16:15, ebb,-39 +2021-09-09 18:14, slack,- +2021-09-09 23:17, flood,56 +2021-09-10 02:44, slack,- +2021-09-10 04:33, ebb,-41 +2021-09-10 06:38, slack,- +2021-09-10 11:41, flood,55 +2021-09-10 15:14, slack,- +2021-09-10 17:03, ebb,-40 +2021-09-10 19:02, slack,- +2021-09-11 00:11, flood,53 +2021-09-11 03:38, slack,- +2021-09-11 05:21, ebb,-40 +2021-09-11 07:20, slack,- +2021-09-11 12:35, flood,53 +2021-09-11 16:02, slack,- +2021-09-11 17:51, ebb,-39 +2021-09-11 19:56, slack,- +2021-09-12 01:11, flood,50 +2021-09-12 04:32, slack,- +2021-09-12 06:15, ebb,-37 +2021-09-12 08:14, slack,- +2021-09-12 13:29, flood,51 +2021-09-12 16:56, slack,- +2021-09-12 18:39, ebb,-38 +2021-09-12 20:56, slack,- +2021-09-13 02:11, flood,46 +2021-09-13 05:26, slack,- +2021-09-13 07:03, ebb,-34 +2021-09-13 09:14, slack,- +2021-09-13 14:29, flood,47 +2021-09-13 17:50, slack,- +2021-09-13 19:33, ebb,-35 +2021-09-13 22:08, slack,- +2021-09-14 03:17, flood,43 +2021-09-14 06:26, slack,- +2021-09-14 08:03, ebb,-30 +2021-09-14 10:20, slack,- +2021-09-14 15:23, flood,44 +2021-09-14 18:50, slack,- +2021-09-14 20:27, ebb,-32 +2021-09-14 23:14, slack,- +2021-09-15 04:35, flood,40 +2021-09-15 07:32, slack,- +2021-09-15 08:57, ebb,-27 +2021-09-15 11:26, slack,- +2021-09-15 16:29, flood,41 +2021-09-15 19:50, slack,- +2021-09-15 21:33, ebb,-29 +2021-09-16 00:20, slack,- +2021-09-16 06:35, flood,42 +2021-09-16 08:38, slack,- +2021-09-16 10:09, ebb,-25 +2021-09-16 12:32, slack,- +2021-09-16 18:29, flood,39 +2021-09-16 20:56, slack,- +2021-09-16 22:39, ebb,-28 +2021-09-17 01:20, slack,- +2021-09-17 07:41, flood,46 +2021-09-17 09:38, slack,- +2021-09-17 11:27, ebb,-26 +2021-09-17 13:38, slack,- +2021-09-17 19:59, flood,43 +2021-09-17 21:56, slack,- +2021-09-18 00:03, ebb,-28 +2021-09-18 02:20, slack,- +2021-09-18 08:41, flood,50 +2021-09-18 10:38, slack,- +2021-09-18 12:51, ebb,-27 +2021-09-18 14:32, slack,- +2021-09-18 20:59, flood,48 +2021-09-18 22:56, slack,- +2021-09-19 01:15, ebb,-30 +2021-09-19 03:14, slack,- +2021-09-19 09:35, flood,54 +2021-09-19 11:32, slack,- +2021-09-19 13:51, ebb,-29 +2021-09-19 15:26, slack,- +2021-09-19 21:53, flood,52 +2021-09-19 23:50, slack,- +2021-09-20 02:03, ebb,-31 +2021-09-20 04:02, slack,- +2021-09-20 10:23, flood,56 +2021-09-20 12:20, slack,- +2021-09-20 14:39, ebb,-30 +2021-09-20 16:14, slack,- +2021-09-20 22:41, flood,53 +2021-09-21 00:38, slack,- +2021-09-21 02:45, ebb,-31 +2021-09-21 04:50, slack,- +2021-09-21 11:11, flood,55 +2021-09-21 13:08, slack,- +2021-09-21 15:15, ebb,-31 +2021-09-21 17:02, slack,- +2021-09-21 23:23, flood,52 +2021-09-22 01:26, slack,- +2021-09-22 03:21, ebb,-31 +2021-09-22 05:32, slack,- +2021-09-22 11:59, flood,52 +2021-09-22 13:56, slack,- +2021-09-22 15:51, ebb,-31 +2021-09-22 17:50, slack,- +2021-09-23 00:11, flood,49 +2021-09-23 02:08, slack,- +2021-09-23 03:57, ebb,-31 +2021-09-23 06:14, slack,- +2021-09-23 12:41, flood,47 +2021-09-23 14:38, slack,- +2021-09-23 16:21, ebb,-30 +2021-09-23 18:38, slack,- +2021-09-24 00:53, flood,45 +2021-09-24 02:56, slack,- +2021-09-24 04:33, ebb,-30 +2021-09-24 06:50, slack,- +2021-09-24 13:23, flood,41 +2021-09-24 15:20, slack,- +2021-09-24 16:57, ebb,-29 +2021-09-24 19:20, slack,- +2021-09-25 01:41, flood,41 +2021-09-25 03:44, slack,- +2021-09-25 05:15, ebb,-28 +2021-09-25 07:32, slack,- +2021-09-25 14:05, flood,36 +2021-09-25 16:02, slack,- +2021-09-25 17:39, ebb,-28 +2021-09-25 20:08, slack,- +2021-09-26 02:23, flood,37 +2021-09-26 04:26, slack,- +2021-09-26 05:57, ebb,-26 +2021-09-26 08:14, slack,- +2021-09-26 13:11, flood,33 +2021-09-26 16:44, slack,- +2021-09-26 18:21, ebb,-26 +2021-09-26 21:02, slack,- +2021-09-27 02:17, flood,33 +2021-09-27 05:14, slack,- +2021-09-27 06:39, ebb,-24 +2021-09-27 09:08, slack,- +2021-09-27 13:53, flood,31 +2021-09-27 17:32, slack,- +2021-09-27 19:03, ebb,-24 +2021-09-27 21:56, slack,- +2021-09-28 02:47, flood,32 +2021-09-28 06:02, slack,- +2021-09-28 07:21, ebb,-22 +2021-09-28 09:56, slack,- +2021-09-28 14:35, flood,31 +2021-09-28 18:14, slack,- +2021-09-28 19:45, ebb,-23 +2021-09-28 22:44, slack,- +2021-09-29 03:29, flood,31 +2021-09-29 06:50, slack,- +2021-09-29 08:15, ebb,-21 +2021-09-29 10:50, slack,- +2021-09-29 15:23, flood,31 +2021-09-29 19:02, slack,- +2021-09-29 20:33, ebb,-22 +2021-09-29 23:38, slack,- +2021-09-30 04:17, flood,31 +2021-09-30 07:44, slack,- +2021-09-30 09:03, ebb,-20 +2021-09-30 11:44, slack,- +2021-09-30 16:11, flood,32 +2021-09-30 19:50, slack,- +2021-09-30 21:27, ebb,-22 +2021-10-01 00:26, slack,- +2021-10-01 05:05, flood,32 +2021-10-01 08:32, slack,- +2021-10-01 10:03, ebb,-21 +2021-10-01 12:32, slack,- +2021-10-01 16:59, flood,34 +2021-10-01 20:44, slack,- +2021-10-01 22:27, ebb,-24 +2021-10-02 01:14, slack,- +2021-10-02 05:53, flood,35 +2021-10-02 09:26, slack,- +2021-10-02 10:57, ebb,-23 +2021-10-02 13:20, slack,- +2021-10-02 17:53, flood,38 +2021-10-02 21:38, slack,- +2021-10-02 23:21, ebb,-26 +2021-10-03 01:56, slack,- +2021-10-03 06:41, flood,39 +2021-10-03 10:14, slack,- +2021-10-03 11:51, ebb,-27 +2021-10-03 14:02, slack,- +2021-10-03 18:47, flood,42 +2021-10-03 22:26, slack,- +2021-10-04 00:09, ebb,-30 +2021-10-04 02:38, slack,- +2021-10-04 07:29, flood,43 +2021-10-04 11:02, slack,- +2021-10-04 12:39, ebb,-30 +2021-10-04 14:50, slack,- +2021-10-04 19:35, flood,47 +2021-10-04 23:14, slack,- +2021-10-05 00:57, ebb,-34 +2021-10-05 03:20, slack,- +2021-10-05 08:17, flood,48 +2021-10-05 11:44, slack,- +2021-10-05 13:27, ebb,-34 +2021-10-05 15:32, slack,- +2021-10-05 20:29, flood,51 +2021-10-06 00:02, slack,- +2021-10-06 01:45, ebb,-37 +2021-10-06 04:02, slack,- +2021-10-06 09:05, flood,53 +2021-10-06 12:26, slack,- +2021-10-06 14:15, ebb,-37 +2021-10-06 16:20, slack,- +2021-10-06 21:17, flood,55 +2021-10-07 00:44, slack,- +2021-10-07 02:33, ebb,-39 +2021-10-07 04:44, slack,- +2021-10-07 09:47, flood,56 +2021-10-07 13:14, slack,- +2021-10-07 15:03, ebb,-40 +2021-10-07 17:08, slack,- +2021-10-07 22:11, flood,57 +2021-10-08 01:38, slack,- +2021-10-08 03:21, ebb,-40 +2021-10-08 05:26, slack,- +2021-10-08 10:29, flood,57 +2021-10-08 14:02, slack,- +2021-10-08 15:51, ebb,-41 +2021-10-08 17:56, slack,- +2021-10-08 22:59, flood,56 +2021-10-09 02:26, slack,- +2021-10-09 04:15, ebb,-40 +2021-10-09 06:08, slack,- +2021-10-09 11:17, flood,56 +2021-10-09 14:50, slack,- +2021-10-09 16:39, ebb,-41 +2021-10-09 18:44, slack,- +2021-10-09 23:53, flood,53 +2021-10-10 03:20, slack,- +2021-10-10 05:03, ebb,-38 +2021-10-10 07:02, slack,- +2021-10-10 12:05, flood,52 +2021-10-10 15:38, slack,- +2021-10-10 17:27, ebb,-40 +2021-10-10 19:38, slack,- +2021-10-11 00:53, flood,49 +2021-10-11 04:14, slack,- +2021-10-11 05:51, ebb,-36 +2021-10-11 07:56, slack,- +2021-10-11 13:05, flood,48 +2021-10-11 16:32, slack,- +2021-10-11 18:15, ebb,-37 +2021-10-11 20:44, slack,- +2021-10-12 02:11, flood,45 +2021-10-12 05:14, slack,- +2021-10-12 06:45, ebb,-32 +2021-10-12 08:56, slack,- +2021-10-12 14:11, flood,43 +2021-10-12 17:32, slack,- +2021-10-12 19:09, ebb,-34 +2021-10-12 21:50, slack,- +2021-10-13 03:35, flood,42 +2021-10-13 06:14, slack,- +2021-10-13 07:39, ebb,-29 +2021-10-13 10:08, slack,- +2021-10-13 15:17, flood,40 +2021-10-13 18:32, slack,- +2021-10-13 20:09, ebb,-30 +2021-10-13 22:56, slack,- +2021-10-14 05:11, flood,42 +2021-10-14 07:14, slack,- +2021-10-14 08:39, ebb,-26 +2021-10-14 11:14, slack,- +2021-10-14 16:53, flood,38 +2021-10-14 19:32, slack,- +2021-10-14 21:09, ebb,-27 +2021-10-15 00:02, slack,- +2021-10-15 06:23, flood,44 +2021-10-15 08:20, slack,- +2021-10-15 09:51, ebb,-24 +2021-10-15 12:20, slack,- +2021-10-15 18:35, flood,40 +2021-10-15 20:38, slack,- +2021-10-15 22:21, ebb,-26 +2021-10-16 01:02, slack,- +2021-10-16 07:23, flood,47 +2021-10-16 09:20, slack,- +2021-10-16 11:57, ebb,-25 +2021-10-16 13:20, slack,- +2021-10-16 19:41, flood,44 +2021-10-16 21:38, slack,- +2021-10-17 00:27, ebb,-27 +2021-10-17 01:56, slack,- +2021-10-17 08:17, flood,50 +2021-10-17 10:14, slack,- +2021-10-17 12:57, ebb,-28 +2021-10-17 14:14, slack,- +2021-10-17 20:41, flood,48 +2021-10-17 22:32, slack,- +2021-10-18 01:15, ebb,-28 +2021-10-18 02:50, slack,- +2021-10-18 09:11, flood,53 +2021-10-18 11:08, slack,- +2021-10-18 13:45, ebb,-29 +2021-10-18 15:08, slack,- +2021-10-18 21:29, flood,51 +2021-10-18 23:26, slack,- +2021-10-19 01:57, ebb,-29 +2021-10-19 03:32, slack,- +2021-10-19 09:59, flood,53 +2021-10-19 11:56, slack,- +2021-10-19 14:27, ebb,-30 +2021-10-19 15:56, slack,- +2021-10-19 22:17, flood,52 +2021-10-20 00:14, slack,- +2021-10-20 02:27, ebb,-29 +2021-10-20 04:20, slack,- +2021-10-20 10:47, flood,51 +2021-10-20 12:38, slack,- +2021-10-20 15:03, ebb,-30 +2021-10-20 16:44, slack,- +2021-10-20 22:59, flood,50 +2021-10-21 01:02, slack,- +2021-10-21 02:51, ebb,-29 +2021-10-21 04:56, slack,- +2021-10-21 11:29, flood,47 +2021-10-21 13:26, slack,- +2021-10-21 15:27, ebb,-30 +2021-10-21 17:26, slack,- +2021-10-21 23:47, flood,47 +2021-10-22 01:44, slack,- +2021-10-22 03:27, ebb,-29 +2021-10-22 05:38, slack,- +2021-10-22 12:11, flood,42 +2021-10-22 14:08, slack,- +2021-10-22 15:51, ebb,-30 +2021-10-22 18:08, slack,- +2021-10-23 00:23, flood,43 +2021-10-23 02:32, slack,- +2021-10-23 04:03, ebb,-28 +2021-10-23 06:20, slack,- +2021-10-23 11:11, flood,37 +2021-10-23 14:44, slack,- +2021-10-23 16:27, ebb,-29 +2021-10-23 18:56, slack,- +2021-10-24 01:11, flood,39 +2021-10-24 03:14, slack,- +2021-10-24 04:45, ebb,-27 +2021-10-24 06:56, slack,- +2021-10-24 11:41, flood,35 +2021-10-24 15:26, slack,- +2021-10-24 17:03, ebb,-28 +2021-10-24 19:38, slack,- +2021-10-25 00:53, flood,36 +2021-10-25 03:56, slack,- +2021-10-25 05:27, ebb,-26 +2021-10-25 07:44, slack,- +2021-10-25 12:23, flood,33 +2021-10-25 16:08, slack,- +2021-10-25 17:45, ebb,-27 +2021-10-25 20:26, slack,- +2021-10-26 01:29, flood,34 +2021-10-26 04:44, slack,- +2021-10-26 06:09, ebb,-25 +2021-10-26 08:26, slack,- +2021-10-26 13:11, flood,32 +2021-10-26 16:50, slack,- +2021-10-26 18:27, ebb,-26 +2021-10-26 21:14, slack,- +2021-10-27 02:11, flood,34 +2021-10-27 05:32, slack,- +2021-10-27 06:57, ebb,-24 +2021-10-27 09:20, slack,- +2021-10-27 14:05, flood,32 +2021-10-27 17:38, slack,- +2021-10-27 19:15, ebb,-25 +2021-10-27 22:08, slack,- +2021-10-28 02:59, flood,34 +2021-10-28 06:14, slack,- +2021-10-28 07:45, ebb,-23 +2021-10-28 10:14, slack,- +2021-10-28 14:53, flood,33 +2021-10-28 18:20, slack,- +2021-10-28 20:03, ebb,-25 +2021-10-28 22:56, slack,- +2021-10-29 03:41, flood,35 +2021-10-29 07:08, slack,- +2021-10-29 08:33, ebb,-23 +2021-10-29 11:08, slack,- +2021-10-29 15:41, flood,35 +2021-10-29 19:14, slack,- +2021-10-29 20:51, ebb,-25 +2021-10-29 23:44, slack,- +2021-10-30 04:29, flood,36 +2021-10-30 07:56, slack,- +2021-10-30 09:27, ebb,-24 +2021-10-30 11:56, slack,- +2021-10-30 16:35, flood,37 +2021-10-30 20:02, slack,- +2021-10-30 21:51, ebb,-26 +2021-10-31 00:32, slack,- +2021-10-31 05:17, flood,39 +2021-10-31 08:44, slack,- +2021-10-31 10:21, ebb,-26 +2021-10-31 12:44, slack,- +2021-10-31 17:23, flood,41 +2021-10-31 20:56, slack,- +2021-10-31 22:45, ebb,-28 +2021-11-01 01:14, slack,- +2021-11-01 06:05, flood,43 +2021-11-01 09:38, slack,- +2021-11-01 11:15, ebb,-29 +2021-11-01 13:32, slack,- +2021-11-01 18:17, flood,45 +2021-11-01 21:50, slack,- +2021-11-01 23:39, ebb,-31 +2021-11-02 02:02, slack,- +2021-11-02 06:53, flood,47 +2021-11-02 10:26, slack,- +2021-11-02 12:09, ebb,-32 +2021-11-02 14:20, slack,- +2021-11-02 19:11, flood,48 +2021-11-02 22:44, slack,- +2021-11-03 00:27, ebb,-34 +2021-11-03 02:44, slack,- +2021-11-03 07:41, flood,51 +2021-11-03 11:14, slack,- +2021-11-03 12:57, ebb,-36 +2021-11-03 15:08, slack,- +2021-11-03 20:05, flood,52 +2021-11-03 23:38, slack,- +2021-11-04 01:21, ebb,-36 +2021-11-04 03:26, slack,- +2021-11-04 08:29, flood,54 +2021-11-04 12:02, slack,- +2021-11-04 13:45, ebb,-39 +2021-11-04 15:56, slack,- +2021-11-04 20:59, flood,54 +2021-11-05 00:26, slack,- +2021-11-05 02:09, ebb,-38 +2021-11-05 04:14, slack,- +2021-11-05 09:17, flood,56 +2021-11-05 12:50, slack,- +2021-11-05 14:39, ebb,-41 +2021-11-05 16:50, slack,- +2021-11-05 21:53, flood,55 +2021-11-06 01:20, slack,- +2021-11-06 03:03, ebb,-38 +2021-11-06 05:02, slack,- +2021-11-06 10:05, flood,56 +2021-11-06 13:38, slack,- +2021-11-06 15:27, ebb,-41 +2021-11-06 17:38, slack,- +2021-11-06 22:47, flood,54 +2021-11-07 02:14, slack,- +2021-11-07 03:51, ebb,-37 +2021-11-07 05:50, slack,- +2021-11-07 10:53, flood,54 +2021-11-07 14:26, slack,- +2021-11-07 16:15, ebb,-41 +2021-11-07 18:32, slack,- +2021-11-07 23:47, flood,51 +2021-11-08 03:08, slack,- +2021-11-08 04:45, ebb,-36 +2021-11-08 06:44, slack,- +2021-11-08 11:47, flood,49 +2021-11-08 15:20, slack,- +2021-11-08 17:03, ebb,-39 +2021-11-08 19:26, slack,- +2021-11-09 01:05, flood,47 +2021-11-09 04:02, slack,- +2021-11-09 05:33, ebb,-34 +2021-11-09 07:44, slack,- +2021-11-09 12:53, flood,45 +2021-11-09 16:14, slack,- +2021-11-09 17:57, ebb,-36 +2021-11-09 20:26, slack,- +2021-11-10 02:41, flood,46 +2021-11-10 05:02, slack,- +2021-11-10 06:27, ebb,-31 +2021-11-10 08:44, slack,- +2021-11-10 14:11, flood,41 +2021-11-10 17:14, slack,- +2021-11-10 18:51, ebb,-33 +2021-11-10 21:32, slack,- +2021-11-11 03:53, flood,45 +2021-11-11 05:56, slack,- +2021-11-11 07:21, ebb,-28 +2021-11-11 09:56, slack,- +2021-11-11 15:41, flood,39 +2021-11-11 18:14, slack,- +2021-11-11 19:45, ebb,-29 +2021-11-11 22:38, slack,- +2021-11-12 04:59, flood,45 +2021-11-12 06:56, slack,- +2021-11-12 08:21, ebb,-25 +2021-11-12 11:02, slack,- +2021-11-12 17:11, flood,39 +2021-11-12 19:14, slack,- +2021-11-12 20:45, ebb,-26 +2021-11-12 23:44, slack,- +2021-11-13 05:59, flood,46 +2021-11-13 07:56, slack,- +2021-11-13 09:33, ebb,-24 +2021-11-13 12:02, slack,- +2021-11-13 18:17, flood,41 +2021-11-13 20:14, slack,- +2021-11-13 21:57, ebb,-24 +2021-11-14 00:38, slack,- +2021-11-14 06:59, flood,47 +2021-11-14 08:50, slack,- +2021-11-14 11:51, ebb,-25 +2021-11-14 13:02, slack,- +2021-11-14 19:17, flood,43 +2021-11-14 21:14, slack,- +2021-11-15 00:09, ebb,-25 +2021-11-15 01:32, slack,- +2021-11-15 07:53, flood,48 +2021-11-15 09:50, slack,- +2021-11-15 12:39, ebb,-27 +2021-11-15 13:56, slack,- +2021-11-15 20:11, flood,45 +2021-11-15 22:08, slack,- +2021-11-16 00:57, ebb,-26 +2021-11-16 02:20, slack,- +2021-11-16 08:47, flood,48 +2021-11-16 10:38, slack,- +2021-11-16 13:27, ebb,-29 +2021-11-16 14:44, slack,- +2021-11-16 21:05, flood,47 +2021-11-16 23:02, slack,- +2021-11-17 01:33, ebb,-27 +2021-11-17 03:02, slack,- +2021-11-17 09:35, flood,48 +2021-11-17 11:26, slack,- +2021-11-17 14:09, ebb,-29 +2021-11-17 15:32, slack,- +2021-11-17 21:53, flood,48 +2021-11-17 23:50, slack,- +2021-11-18 01:57, ebb,-27 +2021-11-18 03:44, slack,- +2021-11-18 10:17, flood,46 +2021-11-18 12:08, slack,- +2021-11-18 14:45, ebb,-29 +2021-11-18 16:20, slack,- +2021-11-18 22:41, flood,47 +2021-11-19 00:32, slack,- +2021-11-19 02:21, ebb,-27 +2021-11-19 04:26, slack,- +2021-11-19 10:59, flood,42 +2021-11-19 12:50, slack,- +2021-11-19 14:57, ebb,-29 +2021-11-19 17:02, slack,- +2021-11-19 23:23, flood,45 +2021-11-20 01:20, slack,- +2021-11-20 02:57, ebb,-27 +2021-11-20 05:02, slack,- +2021-11-20 11:29, flood,38 +2021-11-20 13:32, slack,- +2021-11-20 15:21, ebb,-29 +2021-11-20 17:44, slack,- +2021-11-20 23:59, flood,42 +2021-11-21 02:02, slack,- +2021-11-21 03:33, ebb,-27 +2021-11-21 05:44, slack,- +2021-11-21 10:29, flood,37 +2021-11-21 14:14, slack,- +2021-11-21 15:57, ebb,-29 +2021-11-21 18:26, slack,- +2021-11-22 00:23, flood,39 +2021-11-22 02:44, slack,- +2021-11-22 04:15, ebb,-26 +2021-11-22 06:26, slack,- +2021-11-22 11:05, flood,37 +2021-11-22 14:56, slack,- +2021-11-22 16:33, ebb,-29 +2021-11-22 19:08, slack,- +2021-11-23 00:05, flood,38 +2021-11-23 03:32, slack,- +2021-11-23 04:57, ebb,-26 +2021-11-23 07:08, slack,- +2021-11-23 11:47, flood,36 +2021-11-23 15:32, slack,- +2021-11-23 17:15, ebb,-29 +2021-11-23 19:50, slack,- +2021-11-24 00:53, flood,37 +2021-11-24 04:14, slack,- +2021-11-24 05:39, ebb,-26 +2021-11-24 07:56, slack,- +2021-11-24 12:41, flood,35 +2021-11-24 16:14, slack,- +2021-11-24 17:57, ebb,-29 +2021-11-24 20:38, slack,- +2021-11-25 01:35, flood,37 +2021-11-25 04:56, slack,- +2021-11-25 06:27, ebb,-26 +2021-11-25 08:44, slack,- +2021-11-25 13:29, flood,36 +2021-11-25 16:56, slack,- +2021-11-25 18:45, ebb,-29 +2021-11-25 21:26, slack,- +2021-11-26 02:23, flood,38 +2021-11-26 05:44, slack,- +2021-11-26 07:15, ebb,-26 +2021-11-26 09:32, slack,- +2021-11-26 14:23, flood,37 +2021-11-26 17:44, slack,- +2021-11-26 19:33, ebb,-29 +2021-11-26 22:14, slack,- +2021-11-27 03:11, flood,40 +2021-11-27 06:32, slack,- +2021-11-27 08:03, ebb,-26 +2021-11-27 10:26, slack,- +2021-11-27 15:11, flood,39 +2021-11-27 18:32, slack,- +2021-11-27 20:21, ebb,-29 +2021-11-27 23:02, slack,- +2021-11-28 03:53, flood,42 +2021-11-28 07:20, slack,- +2021-11-28 08:51, ebb,-27 +2021-11-28 11:20, slack,- +2021-11-28 16:05, flood,41 +2021-11-28 19:26, slack,- +2021-11-28 21:15, ebb,-29 +2021-11-28 23:50, slack,- +2021-11-29 04:41, flood,44 +2021-11-29 08:08, slack,- +2021-11-29 09:51, ebb,-28 +2021-11-29 12:14, slack,- +2021-11-29 16:59, flood,43 +2021-11-29 20:26, slack,- +2021-11-29 22:09, ebb,-30 +2021-11-30 00:38, slack,- +2021-11-30 05:29, flood,47 +2021-11-30 09:02, slack,- +2021-11-30 10:45, ebb,-31 +2021-11-30 13:02, slack,- +2021-11-30 17:53, flood,46 +2021-11-30 21:20, slack,- +2021-11-30 23:09, ebb,-32 +2021-12-01 01:26, slack,- +2021-12-01 06:17, flood,50 +2021-12-01 09:56, slack,- +2021-12-01 11:39, ebb,-34 +2021-12-01 13:56, slack,- +2021-12-01 18:47, flood,48 +2021-12-01 22:20, slack,- +2021-12-02 00:03, ebb,-34 +2021-12-02 02:14, slack,- +2021-12-02 07:11, flood,52 +2021-12-02 10:44, slack,- +2021-12-02 12:33, ebb,-37 +2021-12-02 14:50, slack,- +2021-12-02 19:47, flood,50 +2021-12-02 23:14, slack,- +2021-12-03 00:57, ebb,-35 +2021-12-03 03:02, slack,- +2021-12-03 07:59, flood,53 +2021-12-03 11:38, slack,- +2021-12-03 13:21, ebb,-39 +2021-12-03 15:44, slack,- +2021-12-03 20:47, flood,51 +2021-12-04 00:08, slack,- +2021-12-04 01:51, ebb,-35 +2021-12-04 03:50, slack,- +2021-12-04 08:59, flood,53 +2021-12-04 12:26, slack,- +2021-12-04 14:15, ebb,-40 +2021-12-04 16:32, slack,- +2021-12-04 21:53, flood,52 +2021-12-05 01:02, slack,- +2021-12-05 02:39, ebb,-36 +2021-12-05 04:44, slack,- +2021-12-05 09:53, flood,53 +2021-12-05 13:20, slack,- +2021-12-05 15:09, ebb,-40 +2021-12-05 17:26, slack,- +2021-12-05 22:53, flood,52 +2021-12-06 01:56, slack,- +2021-12-06 03:33, ebb,-35 +2021-12-06 05:38, slack,- +2021-12-06 10:41, flood,51 +2021-12-06 14:08, slack,- +2021-12-06 15:57, ebb,-39 +2021-12-06 18:20, slack,- +2021-12-07 00:17, flood,50 +2021-12-07 02:56, slack,- +2021-12-07 04:27, ebb,-34 +2021-12-07 06:32, slack,- +2021-12-07 11:41, flood,47 +2021-12-07 15:08, slack,- +2021-12-07 16:45, ebb,-37 +2021-12-07 19:14, slack,- +2021-12-08 01:41, flood,49 +2021-12-08 03:50, slack,- +2021-12-08 05:21, ebb,-32 +2021-12-08 07:32, slack,- +2021-12-08 12:53, flood,43 +2021-12-08 16:02, slack,- +2021-12-08 17:39, ebb,-35 +2021-12-08 20:14, slack,- +2021-12-09 02:41, flood,49 +2021-12-09 04:44, slack,- +2021-12-09 06:09, ebb,-30 +2021-12-09 08:32, slack,- +2021-12-09 14:41, flood,42 +2021-12-09 16:56, slack,- +2021-12-09 18:33, ebb,-32 +2021-12-09 21:14, slack,- +2021-12-10 03:41, flood,48 +2021-12-10 05:38, slack,- +2021-12-10 07:03, ebb,-27 +2021-12-10 09:38, slack,- +2021-12-10 15:47, flood,41 +2021-12-10 17:50, slack,- +2021-12-10 19:27, ebb,-29 +2021-12-10 22:14, slack,- +2021-12-11 04:35, flood,47 +2021-12-11 06:32, slack,- +2021-12-11 08:03, ebb,-25 +2021-12-11 10:44, slack,- +2021-12-11 16:53, flood,40 +2021-12-11 18:50, slack,- +2021-12-11 20:21, ebb,-26 +2021-12-11 23:14, slack,- +2021-12-12 05:35, flood,45 +2021-12-12 07:26, slack,- +2021-12-12 09:09, ebb,-23 +2021-12-12 11:44, slack,- +2021-12-12 17:53, flood,40 +2021-12-12 19:44, slack,- +2021-12-12 21:21, ebb,-24 +2021-12-13 00:08, slack,- +2021-12-13 06:29, flood,44 +2021-12-13 08:26, slack,- +2021-12-13 11:27, ebb,-25 +2021-12-13 12:38, slack,- +2021-12-13 18:53, flood,40 +2021-12-13 20:44, slack,- +2021-12-13 23:45, ebb,-23 +2021-12-14 00:56, slack,- +2021-12-14 07:23, flood,43 +2021-12-14 09:20, slack,- +2021-12-14 12:21, ebb,-26 +2021-12-14 13:32, slack,- +2021-12-14 19:47, flood,41 +2021-12-14 21:38, slack,- +2021-12-15 00:27, ebb,-24 +2021-12-15 01:44, slack,- +2021-12-15 08:17, flood,42 +2021-12-15 10:08, slack,- +2021-12-15 13:03, ebb,-27 +2021-12-15 14:20, slack,- +2021-12-15 20:41, flood,42 +2021-12-15 22:32, slack,- +2021-12-16 01:03, ebb,-24 +2021-12-16 02:26, slack,- +2021-12-16 09:05, flood,41 +2021-12-16 10:56, slack,- +2021-12-16 13:51, ebb,-28 +2021-12-16 15:08, slack,- +2021-12-16 21:29, flood,43 +2021-12-16 23:20, slack,- +2021-12-17 01:21, ebb,-24 +2021-12-17 03:08, slack,- +2021-12-17 09:53, flood,40 +2021-12-17 11:38, slack,- +2021-12-17 14:21, ebb,-28 +2021-12-17 15:50, slack,- +2021-12-17 22:17, flood,44 +2021-12-18 00:08, slack,- +2021-12-18 01:51, ebb,-24 +2021-12-18 03:50, slack,- +2021-12-18 10:29, flood,37 +2021-12-18 12:20, slack,- +2021-12-18 14:21, ebb,-28 +2021-12-18 16:38, slack,- +2021-12-18 22:53, flood,43 +2021-12-19 00:50, slack,- +2021-12-19 02:27, ebb,-25 +2021-12-19 04:32, slack,- +2021-12-19 09:23, flood,36 +2021-12-19 13:02, slack,- +2021-12-19 14:51, ebb,-29 +2021-12-19 17:20, slack,- +2021-12-19 23:29, flood,41 +2021-12-20 01:38, slack,- +2021-12-20 03:09, ebb,-26 +2021-12-20 05:14, slack,- +2021-12-20 09:59, flood,38 +2021-12-20 13:44, slack,- +2021-12-20 15:27, ebb,-29 +2021-12-20 17:56, slack,- +2021-12-20 23:05, flood,40 +2021-12-21 02:20, slack,- +2021-12-21 03:45, ebb,-27 +2021-12-21 05:56, slack,- +2021-12-21 10:41, flood,39 +2021-12-21 14:20, slack,- +2021-12-21 16:03, ebb,-30 +2021-12-21 18:38, slack,- +2021-12-21 23:35, flood,40 +2021-12-22 03:02, slack,- +2021-12-22 04:27, ebb,-28 +2021-12-22 06:38, slack,- +2021-12-22 11:23, flood,40 +2021-12-22 15:02, slack,- +2021-12-22 16:45, ebb,-31 +2021-12-22 19:20, slack,- +2021-12-23 00:11, flood,40 +2021-12-23 03:44, slack,- +2021-12-23 05:15, ebb,-28 +2021-12-23 07:20, slack,- +2021-12-23 12:11, flood,40 +2021-12-23 15:44, slack,- +2021-12-23 17:33, ebb,-32 +2021-12-23 19:56, slack,- +2021-12-24 00:59, flood,41 +2021-12-24 04:26, slack,- +2021-12-24 05:57, ebb,-29 +2021-12-24 08:08, slack,- +2021-12-24 12:59, flood,41 +2021-12-24 16:26, slack,- +2021-12-24 18:15, ebb,-33 +2021-12-24 20:44, slack,- +2021-12-25 01:47, flood,43 +2021-12-25 05:08, slack,- +2021-12-25 06:45, ebb,-30 +2021-12-25 08:56, slack,- +2021-12-25 13:53, flood,42 +2021-12-25 17:14, slack,- +2021-12-25 19:03, ebb,-33 +2021-12-25 21:32, slack,- +2021-12-26 02:35, flood,45 +2021-12-26 05:56, slack,- +2021-12-26 07:33, ebb,-30 +2021-12-26 09:50, slack,- +2021-12-26 14:47, flood,43 +2021-12-26 18:02, slack,- +2021-12-26 19:51, ebb,-33 +2021-12-26 22:20, slack,- +2021-12-27 03:17, flood,47 +2021-12-27 06:44, slack,- +2021-12-27 08:21, ebb,-31 +2021-12-27 10:50, slack,- +2021-12-27 15:35, flood,44 +2021-12-27 18:56, slack,- +2021-12-27 20:45, ebb,-32 +2021-12-27 23:08, slack,- +2021-12-28 04:05, flood,48 +2021-12-28 07:32, slack,- +2021-12-28 09:15, ebb,-31 +2021-12-28 11:44, slack,- +2021-12-28 16:35, flood,45 +2021-12-28 19:56, slack,- +2021-12-28 21:45, ebb,-31 +2021-12-29 00:02, slack,- +2021-12-29 04:59, flood,49 +2021-12-29 08:26, slack,- +2021-12-29 10:15, ebb,-32 +2021-12-29 12:38, slack,- +2021-12-29 17:29, flood,45 +2021-12-29 20:56, slack,- +2021-12-29 22:39, ebb,-31 +2021-12-30 00:50, slack,- +2021-12-30 05:47, flood,50 +2021-12-30 09:26, slack,- +2021-12-30 11:15, ebb,-34 +2021-12-30 13:38, slack,- +2021-12-30 18:29, flood,46 +2021-12-30 22:02, slack,- +2021-12-30 23:39, ebb,-32 +2021-12-31 01:44, slack,- +2021-12-31 06:41, flood,50 +2021-12-31 10:20, slack,- +2021-12-31 12:09, ebb,-36 +2021-12-31 14:32, slack,- +2021-12-31 19:35, flood,46 +2021-12-31 22:56, slack,- +2022-01-01 00:33, ebb,-31 +2022-01-01 02:38, slack,- +2022-01-01 07:41, flood,47 +2022-01-01 11:14, slack,- +2022-01-01 13:03, ebb,-36 +2022-01-01 15:32, slack,- +2022-01-01 21:29, flood,46 +2022-01-01 23:56, slack,- +2022-01-02 01:27, ebb,-31 +2022-01-02 03:38, slack,- +2022-01-02 08:47, flood,47 +2022-01-02 12:08, slack,- +2022-01-02 13:57, ebb,-37 +2022-01-02 16:26, slack,- +2022-01-02 22:41, flood,50 +2022-01-03 00:50, slack,- +2022-01-03 02:27, ebb,-32 +2022-01-03 04:32, slack,- +2022-01-03 09:53, flood,47 +2022-01-03 13:02, slack,- +2022-01-03 14:51, ebb,-37 +2022-01-03 17:20, slack,- +2022-01-03 23:35, flood,52 +2022-01-04 01:44, slack,- +2022-01-04 03:21, ebb,-32 +2022-01-04 05:26, slack,- +2022-01-04 11:05, flood,47 +2022-01-04 13:56, slack,- +2022-01-04 15:39, ebb,-36 +2022-01-04 18:14, slack,- +2022-01-05 00:35, flood,53 +2022-01-05 02:38, slack,- +2022-01-05 04:15, ebb,-31 +2022-01-05 06:26, slack,- +2022-01-05 12:29, flood,46 +2022-01-05 14:50, slack,- +2022-01-05 16:33, ebb,-35 +2022-01-05 19:08, slack,- +2022-01-06 01:35, flood,53 +2022-01-06 03:32, slack,- +2022-01-06 05:03, ebb,-30 +2022-01-06 07:20, slack,- +2022-01-06 13:41, flood,46 +2022-01-06 15:44, slack,- +2022-01-06 17:21, ebb,-33 +2022-01-06 20:02, slack,- +2022-01-07 02:23, flood,52 +2022-01-07 04:26, slack,- +2022-01-07 05:57, ebb,-29 +2022-01-07 08:20, slack,- +2022-01-07 14:35, flood,45 +2022-01-07 16:38, slack,- +2022-01-07 18:15, ebb,-31 +2022-01-07 20:56, slack,- +2022-01-08 03:17, flood,50 +2022-01-08 05:14, slack,- +2022-01-08 06:51, ebb,-27 +2022-01-08 09:20, slack,- +2022-01-08 15:29, flood,43 +2022-01-08 17:32, slack,- +2022-01-08 19:03, ebb,-28 +2022-01-08 21:50, slack,- +2022-01-09 04:11, flood,47 +2022-01-09 06:08, slack,- +2022-01-09 07:45, ebb,-25 +2022-01-09 10:20, slack,- +2022-01-09 16:23, flood,41 +2022-01-09 18:26, slack,- +2022-01-09 19:57, ebb,-26 +2022-01-09 22:44, slack,- +2022-01-10 04:59, flood,44 +2022-01-10 07:02, slack,- +2022-01-10 08:39, ebb,-24 +2022-01-10 11:14, slack,- +2022-01-10 17:23, flood,39 +2022-01-10 19:20, slack,- +2022-01-10 20:51, ebb,-23 +2022-01-10 23:32, slack,- +2022-01-11 05:53, flood,41 +2022-01-11 07:50, slack,- +2022-01-11 11:03, ebb,-24 +2022-01-11 12:08, slack,- +2022-01-11 18:17, flood,38 +2022-01-11 20:14, slack,- +2022-01-11 21:51, ebb,-21 +2022-01-12 00:20, slack,- +2022-01-12 06:47, flood,38 +2022-01-12 08:44, slack,- +2022-01-12 11:57, ebb,-25 +2022-01-12 13:02, slack,- +2022-01-12 19:11, flood,38 +2022-01-12 21:08, slack,- +2022-01-12 23:57, ebb,-21 +2022-01-13 01:08, slack,- +2022-01-13 07:41, flood,36 +2022-01-13 09:32, slack,- +2022-01-13 12:39, ebb,-26 +2022-01-13 13:50, slack,- +2022-01-13 20:11, flood,38 +2022-01-13 22:02, slack,- +2022-01-14 00:27, ebb,-22 +2022-01-14 01:50, slack,- +2022-01-14 08:29, flood,35 +2022-01-14 10:20, slack,- +2022-01-14 13:21, ebb,-26 +2022-01-14 14:38, slack,- +2022-01-14 20:59, flood,39 +2022-01-14 22:50, slack,- +2022-01-15 00:45, ebb,-22 +2022-01-15 02:38, slack,- +2022-01-15 07:23, flood,33 +2022-01-15 09:17, flood,34 +2022-01-15 11:08, slack,- +2022-01-15 13:51, ebb,-26 +2022-01-15 15:20, slack,- +2022-01-15 21:47, flood,40 +2022-01-15 23:38, slack,- +2022-01-16 01:15, ebb,-23 +2022-01-16 03:20, slack,- +2022-01-16 07:59, flood,35 +2022-01-16 11:50, slack,- +2022-01-16 13:39, ebb,-27 +2022-01-16 16:02, slack,- +2022-01-16 22:23, flood,40 +2022-01-17 00:20, slack,- +2022-01-17 01:57, ebb,-25 +2022-01-17 04:02, slack,- +2022-01-17 08:47, flood,37 +2022-01-17 12:26, slack,- +2022-01-17 14:15, ebb,-29 +2022-01-17 16:44, slack,- +2022-01-17 22:41, flood,40 +2022-01-18 01:02, slack,- +2022-01-18 02:33, ebb,-26 +2022-01-18 04:44, slack,- +2022-01-18 09:29, flood,41 +2022-01-18 13:08, slack,- +2022-01-18 14:57, ebb,-31 +2022-01-18 17:26, slack,- +2022-01-18 22:23, flood,42 +2022-01-19 01:44, slack,- +2022-01-19 03:15, ebb,-28 +2022-01-19 05:20, slack,- +2022-01-19 10:11, flood,44 +2022-01-19 13:44, slack,- +2022-01-19 15:33, ebb,-33 +2022-01-19 18:02, slack,- +2022-01-19 22:59, flood,44 +2022-01-20 02:26, slack,- +2022-01-20 03:57, ebb,-30 +2022-01-20 06:02, slack,- +2022-01-20 10:53, flood,46 +2022-01-20 14:26, slack,- +2022-01-20 16:15, ebb,-34 +2022-01-20 18:38, slack,- +2022-01-20 23:35, flood,45 +2022-01-21 03:08, slack,- +2022-01-21 04:45, ebb,-32 +2022-01-21 06:44, slack,- +2022-01-21 11:41, flood,47 +2022-01-21 15:08, slack,- +2022-01-21 17:03, ebb,-36 +2022-01-21 19:14, slack,- +2022-01-22 00:17, flood,47 +2022-01-22 03:50, slack,- +2022-01-22 05:27, ebb,-33 +2022-01-22 07:26, slack,- +2022-01-22 12:29, flood,47 +2022-01-22 15:50, slack,- +2022-01-22 17:45, ebb,-36 +2022-01-22 19:56, slack,- +2022-01-23 01:05, flood,47 +2022-01-23 04:32, slack,- +2022-01-23 06:15, ebb,-33 +2022-01-23 08:14, slack,- +2022-01-23 13:23, flood,46 +2022-01-23 16:38, slack,- +2022-01-23 18:33, ebb,-36 +2022-01-23 20:44, slack,- +2022-01-24 01:53, flood,48 +2022-01-24 05:14, slack,- +2022-01-24 07:03, ebb,-34 +2022-01-24 09:08, slack,- +2022-01-24 14:17, flood,45 +2022-01-24 17:32, slack,- +2022-01-24 19:27, ebb,-35 +2022-01-24 21:32, slack,- +2022-01-25 02:41, flood,48 +2022-01-25 06:08, slack,- +2022-01-25 07:51, ebb,-33 +2022-01-25 10:14, slack,- +2022-01-25 15:11, flood,44 +2022-01-25 18:26, slack,- +2022-01-25 20:15, ebb,-32 +2022-01-25 22:26, slack,- +2022-01-26 03:35, flood,48 +2022-01-26 06:56, slack,- +2022-01-26 08:45, ebb,-32 +2022-01-26 11:14, slack,- +2022-01-26 16:05, flood,42 +2022-01-26 19:32, slack,- +2022-01-26 21:15, ebb,-30 +2022-01-26 23:26, slack,- +2022-01-27 04:23, flood,46 +2022-01-27 07:56, slack,- +2022-01-27 09:45, ebb,-32 +2022-01-27 12:20, slack,- +2022-01-27 17:11, flood,41 +2022-01-27 20:38, slack,- +2022-01-27 22:15, ebb,-28 +2022-01-28 00:26, slack,- +2022-01-28 05:23, flood,45 +2022-01-28 08:56, slack,- +2022-01-28 10:45, ebb,-32 +2022-01-28 13:20, slack,- +2022-01-28 18:23, flood,40 +2022-01-28 21:44, slack,- +2022-01-28 23:15, ebb,-28 +2022-01-29 01:26, slack,- +2022-01-29 06:23, flood,44 +2022-01-29 10:02, slack,- +2022-01-29 11:45, ebb,-32 +2022-01-29 14:20, slack,- +2022-01-29 20:35, flood,43 +2022-01-29 22:44, slack,- +2022-01-30 00:15, ebb,-29 +2022-01-30 02:26, slack,- +2022-01-30 07:35, flood,44 +2022-01-30 11:02, slack,- +2022-01-30 12:45, ebb,-33 +2022-01-30 15:20, slack,- +2022-01-30 21:41, flood,49 +2022-01-30 23:44, slack,- +2022-01-31 01:15, ebb,-29 +2022-01-31 03:26, slack,- +2022-01-31 09:35, flood,46 +2022-01-31 11:56, slack,- +2022-01-31 13:45, ebb,-34 +2022-01-31 16:14, slack,- +2022-01-31 22:35, flood,53 +2022-02-01 00:38, slack,- +2022-02-01 02:15, ebb,-30 +2022-02-01 04:20, slack,- +2022-02-01 10:41, flood,49 +2022-02-01 12:50, slack,- +2022-02-01 14:39, ebb,-35 +2022-02-01 17:08, slack,- +2022-02-01 23:29, flood,56 +2022-02-02 01:32, slack,- +2022-02-02 03:09, ebb,-31 +2022-02-02 05:20, slack,- +2022-02-02 11:29, flood,51 +2022-02-02 13:44, slack,- +2022-02-02 15:33, ebb,-35 +2022-02-02 18:02, slack,- +2022-02-03 00:17, flood,56 +2022-02-03 02:20, slack,- +2022-02-03 04:03, ebb,-31 +2022-02-03 06:08, slack,- +2022-02-03 12:29, flood,50 +2022-02-03 14:32, slack,- +2022-02-03 16:21, ebb,-34 +2022-02-03 18:50, slack,- +2022-02-04 01:11, flood,54 +2022-02-04 03:08, slack,- +2022-02-04 04:51, ebb,-31 +2022-02-04 07:02, slack,- +2022-02-04 13:23, flood,49 +2022-02-04 15:26, slack,- +2022-02-04 17:03, ebb,-33 +2022-02-04 19:38, slack,- +2022-02-05 01:59, flood,52 +2022-02-05 04:02, slack,- +2022-02-05 05:39, ebb,-30 +2022-02-05 07:56, slack,- +2022-02-05 14:11, flood,46 +2022-02-05 16:14, slack,- +2022-02-05 17:51, ebb,-31 +2022-02-05 20:26, slack,- +2022-02-06 02:47, flood,48 +2022-02-06 04:50, slack,- +2022-02-06 06:27, ebb,-28 +2022-02-06 08:50, slack,- +2022-02-06 15:05, flood,43 +2022-02-06 17:02, slack,- +2022-02-06 18:39, ebb,-28 +2022-02-06 21:14, slack,- +2022-02-07 03:35, flood,44 +2022-02-07 05:38, slack,- +2022-02-07 07:09, ebb,-26 +2022-02-07 09:50, slack,- +2022-02-07 15:53, flood,40 +2022-02-07 17:56, slack,- +2022-02-07 19:27, ebb,-26 +2022-02-07 22:02, slack,- +2022-02-08 04:29, flood,39 +2022-02-08 06:26, slack,- +2022-02-08 07:57, ebb,-24 +2022-02-08 10:44, slack,- +2022-02-08 16:47, flood,37 +2022-02-08 18:44, slack,- +2022-02-08 20:15, ebb,-23 +2022-02-08 22:56, slack,- +2022-02-09 05:23, flood,35 +2022-02-09 07:14, slack,- +2022-02-09 08:51, ebb,-22 +2022-02-09 11:38, slack,- +2022-02-09 17:47, flood,35 +2022-02-09 19:38, slack,- +2022-02-09 21:03, ebb,-20 +2022-02-09 23:44, slack,- +2022-02-10 06:11, flood,32 +2022-02-10 08:02, slack,- +2022-02-10 11:27, ebb,-22 +2022-02-10 12:32, slack,- +2022-02-10 18:41, flood,34 +2022-02-10 20:32, slack,- +2022-02-10 22:09, ebb,-19 +2022-02-11 00:32, slack,- +2022-02-11 05:11, flood,30 +2022-02-11 06:59, flood,30 +2022-02-11 08:56, slack,- +2022-02-11 12:15, ebb,-23 +2022-02-11 13:20, slack,- +2022-02-11 19:35, flood,34 +2022-02-11 21:26, slack,- +2022-02-11 23:09, ebb,-20 +2022-02-12 01:20, slack,- +2022-02-12 05:53, flood,30 +2022-02-12 07:11, flood,29 +2022-02-12 09:44, slack,- +2022-02-12 12:57, ebb,-23 +2022-02-12 14:08, slack,- +2022-02-12 20:29, flood,35 +2022-02-12 22:20, slack,- +2022-02-12 23:57, ebb,-21 +2022-02-13 02:08, slack,- +2022-02-13 06:41, flood,32 +2022-02-13 10:32, slack,- +2022-02-13 12:27, ebb,-24 +2022-02-13 14:50, slack,- +2022-02-13 21:11, flood,36 +2022-02-13 23:08, slack,- +2022-02-14 00:39, ebb,-23 +2022-02-14 02:50, slack,- +2022-02-14 07:23, flood,35 +2022-02-14 11:14, slack,- +2022-02-14 13:03, ebb,-26 +2022-02-14 15:32, slack,- +2022-02-14 21:47, flood,38 +2022-02-14 23:50, slack,- +2022-02-15 01:21, ebb,-25 +2022-02-15 03:32, slack,- +2022-02-15 08:17, flood,39 +2022-02-15 11:56, slack,- +2022-02-15 13:39, ebb,-29 +2022-02-15 16:14, slack,- +2022-02-15 21:23, flood,40 +2022-02-16 00:32, slack,- +2022-02-16 02:03, ebb,-28 +2022-02-16 04:14, slack,- +2022-02-16 08:59, flood,43 +2022-02-16 12:38, slack,- +2022-02-16 14:21, ebb,-32 +2022-02-16 16:50, slack,- +2022-02-16 21:47, flood,44 +2022-02-17 01:08, slack,- +2022-02-17 02:45, ebb,-30 +2022-02-17 04:50, slack,- +2022-02-17 09:47, flood,47 +2022-02-17 13:14, slack,- +2022-02-17 15:09, ebb,-34 +2022-02-17 17:26, slack,- +2022-02-17 22:23, flood,48 +2022-02-18 01:50, slack,- +2022-02-18 03:33, ebb,-33 +2022-02-18 05:32, slack,- +2022-02-18 10:29, flood,50 +2022-02-18 13:56, slack,- +2022-02-18 15:51, ebb,-37 +2022-02-18 18:02, slack,- +2022-02-18 23:05, flood,50 +2022-02-19 02:32, slack,- +2022-02-19 04:15, ebb,-35 +2022-02-19 06:14, slack,- +2022-02-19 11:11, flood,51 +2022-02-19 14:38, slack,- +2022-02-19 16:33, ebb,-38 +2022-02-19 18:38, slack,- +2022-02-19 23:47, flood,51 +2022-02-20 03:14, slack,- +2022-02-20 05:03, ebb,-36 +2022-02-20 06:56, slack,- +2022-02-20 11:59, flood,51 +2022-02-20 15:26, slack,- +2022-02-20 17:21, ebb,-38 +2022-02-20 19:20, slack,- +2022-02-21 00:29, flood,51 +2022-02-21 03:56, slack,- +2022-02-21 05:45, ebb,-37 +2022-02-21 07:44, slack,- +2022-02-21 12:53, flood,49 +2022-02-21 16:14, slack,- +2022-02-21 18:09, ebb,-37 +2022-02-21 20:08, slack,- +2022-02-22 01:23, flood,50 +2022-02-22 04:44, slack,- +2022-02-22 06:39, ebb,-36 +2022-02-22 08:44, slack,- +2022-02-22 13:53, flood,46 +2022-02-22 17:08, slack,- +2022-02-22 19:03, ebb,-35 +2022-02-22 21:02, slack,- +2022-02-23 02:17, flood,48 +2022-02-23 05:38, slack,- +2022-02-23 07:27, ebb,-35 +2022-02-23 09:50, slack,- +2022-02-23 14:53, flood,44 +2022-02-23 18:08, slack,- +2022-02-23 19:51, ebb,-32 +2022-02-23 22:02, slack,- +2022-02-24 03:11, flood,46 +2022-02-24 06:32, slack,- +2022-02-24 08:21, ebb,-33 +2022-02-24 10:56, slack,- +2022-02-24 15:53, flood,41 +2022-02-24 19:14, slack,- +2022-02-24 20:51, ebb,-29 +2022-02-24 23:08, slack,- +2022-02-25 04:05, flood,43 +2022-02-25 07:32, slack,- +2022-02-25 09:21, ebb,-31 +2022-02-25 12:02, slack,- +2022-02-25 17:05, flood,39 +2022-02-25 20:20, slack,- +2022-02-25 21:51, ebb,-27 +2022-02-26 00:14, slack,- +2022-02-26 05:05, flood,41 +2022-02-26 08:38, slack,- +2022-02-26 10:21, ebb,-30 +2022-02-26 13:08, slack,- +2022-02-26 19:11, flood,40 +2022-02-26 21:26, slack,- +2022-02-26 22:57, ebb,-26 +2022-02-27 01:14, slack,- +2022-02-27 06:23, flood,41 +2022-02-27 09:44, slack,- +2022-02-27 11:33, ebb,-30 +2022-02-27 14:08, slack,- +2022-02-27 20:29, flood,45 +2022-02-27 22:26, slack,- +2022-02-28 00:09, ebb,-27 +2022-02-28 02:20, slack,- +2022-02-28 08:41, flood,44 +2022-02-28 10:44, slack,- +2022-02-28 12:33, ebb,-31 +2022-02-28 15:08, slack,- +2022-02-28 21:29, flood,52 +2022-02-28 23:26, slack,- +2022-03-01 01:09, ebb,-29 +2022-03-01 03:14, slack,- +2022-03-01 09:41, flood,49 +2022-03-01 11:44, slack,- +2022-03-01 13:33, ebb,-32 +2022-03-01 16:02, slack,- +2022-03-01 22:23, flood,56 +2022-03-02 00:20, slack,- +2022-03-02 02:09, ebb,-30 +2022-03-02 04:08, slack,- +2022-03-02 10:29, flood,53 +2022-03-02 12:32, slack,- +2022-03-02 14:33, ebb,-33 +2022-03-02 16:50, slack,- +2022-03-02 23:11, flood,58 +2022-03-03 01:08, slack,- +2022-03-03 03:03, ebb,-31 +2022-03-03 05:02, slack,- +2022-03-03 11:17, flood,54 +2022-03-03 13:26, slack,- +2022-03-03 15:21, ebb,-34 +2022-03-03 17:38, slack,- +2022-03-03 23:59, flood,57 +2022-03-04 01:56, slack,- +2022-03-04 03:51, ebb,-32 +2022-03-04 05:50, slack,- +2022-03-04 12:05, flood,53 +2022-03-04 14:14, slack,- +2022-03-04 16:03, ebb,-33 +2022-03-04 18:20, slack,- +2022-03-05 00:47, flood,54 +2022-03-05 02:44, slack,- +2022-03-05 04:33, ebb,-31 +2022-03-05 06:38, slack,- +2022-03-05 12:59, flood,50 +2022-03-05 15:02, slack,- +2022-03-05 16:45, ebb,-32 +2022-03-05 19:08, slack,- +2022-03-06 01:35, flood,49 +2022-03-06 03:32, slack,- +2022-03-06 05:15, ebb,-30 +2022-03-06 07:32, slack,- +2022-03-06 13:47, flood,46 +2022-03-06 15:50, slack,- +2022-03-06 17:27, ebb,-30 +2022-03-06 19:50, slack,- +2022-03-07 02:17, flood,44 +2022-03-07 04:14, slack,- +2022-03-07 05:57, ebb,-29 +2022-03-07 08:20, slack,- +2022-03-07 14:35, flood,42 +2022-03-07 16:38, slack,- +2022-03-07 18:09, ebb,-28 +2022-03-07 20:32, slack,- +2022-03-08 03:05, flood,39 +2022-03-08 05:02, slack,- +2022-03-08 06:39, ebb,-27 +2022-03-08 09:14, slack,- +2022-03-08 15:23, flood,39 +2022-03-08 17:26, slack,- +2022-03-08 18:51, ebb,-25 +2022-03-08 21:26, slack,- +2022-03-09 03:41, flood,34 +2022-03-09 05:50, slack,- +2022-03-09 07:21, ebb,-25 +2022-03-09 10:08, slack,- +2022-03-09 16:17, flood,35 +2022-03-09 18:14, slack,- +2022-03-09 19:39, ebb,-23 +2022-03-09 22:14, slack,- +2022-03-10 03:11, flood,31 +2022-03-10 06:38, slack,- +2022-03-10 08:09, ebb,-23 +2022-03-10 11:02, slack,- +2022-03-10 17:05, flood,32 +2022-03-10 19:08, slack,- +2022-03-10 20:27, ebb,-20 +2022-03-10 23:08, slack,- +2022-03-11 03:47, flood,30 +2022-03-11 07:26, slack,- +2022-03-11 08:57, ebb,-21 +2022-03-11 11:56, slack,- +2022-03-11 17:59, flood,31 +2022-03-11 20:02, slack,- +2022-03-11 21:21, ebb,-19 +2022-03-11 23:56, slack,- +2022-03-12 04:29, flood,29 +2022-03-12 08:14, slack,- +2022-03-12 09:51, ebb,-20 +2022-03-12 11:51, ebb,-20 +2022-03-12 12:44, slack,- +2022-03-12 18:53, flood,31 +2022-03-12 20:50, slack,- +2022-03-12 22:21, ebb,-19 +2022-03-13 00:50, slack,- +2022-03-13 05:17, flood,31 +2022-03-13 09:08, slack,- +2022-03-13 10:51, ebb,-21 +2022-03-13 13:32, slack,- +2022-03-13 19:41, flood,32 +2022-03-13 21:44, slack,- +2022-03-13 23:15, ebb,-21 +2022-03-14 01:32, slack,- +2022-03-14 06:05, flood,33 +2022-03-14 09:56, slack,- +2022-03-14 11:39, ebb,-24 +2022-03-14 14:14, slack,- +2022-03-14 19:05, flood,34 +2022-03-14 22:32, slack,- +2022-03-15 00:03, ebb,-23 +2022-03-15 02:20, slack,- +2022-03-15 06:53, flood,37 +2022-03-15 10:44, slack,- +2022-03-15 12:27, ebb,-26 +2022-03-15 14:56, slack,- +2022-03-15 19:47, flood,37 +2022-03-15 23:14, slack,- +2022-03-16 00:51, ebb,-26 +2022-03-16 03:02, slack,- +2022-03-16 07:41, flood,41 +2022-03-16 11:26, slack,- +2022-03-16 13:09, ebb,-30 +2022-03-16 15:38, slack,- +2022-03-16 20:29, flood,42 +2022-03-16 23:56, slack,- +2022-03-17 01:33, ebb,-29 +2022-03-17 03:44, slack,- +2022-03-17 08:29, flood,46 +2022-03-17 12:08, slack,- +2022-03-17 13:51, ebb,-33 +2022-03-17 16:14, slack,- +2022-03-17 21:11, flood,47 +2022-03-18 00:38, slack,- +2022-03-18 02:15, ebb,-33 +2022-03-18 04:20, slack,- +2022-03-18 09:17, flood,50 +2022-03-18 12:50, slack,- +2022-03-18 14:39, ebb,-36 +2022-03-18 16:50, slack,- +2022-03-18 21:53, flood,51 +2022-03-19 01:20, slack,- +2022-03-19 03:03, ebb,-35 +2022-03-19 05:02, slack,- +2022-03-19 10:05, flood,53 +2022-03-19 13:32, slack,- +2022-03-19 15:21, ebb,-38 +2022-03-19 17:26, slack,- +2022-03-19 22:29, flood,53 +2022-03-20 02:02, slack,- +2022-03-20 03:51, ebb,-38 +2022-03-20 05:50, slack,- +2022-03-20 10:47, flood,54 +2022-03-20 14:20, slack,- +2022-03-20 16:09, ebb,-39 +2022-03-20 18:08, slack,- +2022-03-20 23:11, flood,54 +2022-03-21 02:44, slack,- +2022-03-21 04:33, ebb,-39 +2022-03-21 06:32, slack,- +2022-03-21 11:35, flood,52 +2022-03-21 15:08, slack,- +2022-03-21 16:57, ebb,-38 +2022-03-21 18:50, slack,- +2022-03-21 23:59, flood,53 +2022-03-22 03:32, slack,- +2022-03-22 05:21, ebb,-39 +2022-03-22 07:26, slack,- +2022-03-22 12:35, flood,49 +2022-03-22 16:02, slack,- +2022-03-22 17:45, ebb,-37 +2022-03-22 19:38, slack,- +2022-03-23 00:53, flood,50 +2022-03-23 04:20, slack,- +2022-03-23 06:09, ebb,-38 +2022-03-23 08:20, slack,- +2022-03-23 13:35, flood,45 +2022-03-23 16:56, slack,- +2022-03-23 18:39, ebb,-34 +2022-03-23 20:38, slack,- +2022-03-24 01:47, flood,46 +2022-03-24 05:14, slack,- +2022-03-24 07:03, ebb,-36 +2022-03-24 09:26, slack,- +2022-03-24 14:41, flood,42 +2022-03-24 17:56, slack,- +2022-03-24 19:33, ebb,-31 +2022-03-24 21:44, slack,- +2022-03-25 02:47, flood,43 +2022-03-25 06:14, slack,- +2022-03-25 07:57, ebb,-33 +2022-03-25 10:38, slack,- +2022-03-25 15:47, flood,40 +2022-03-25 19:02, slack,- +2022-03-25 20:27, ebb,-27 +2022-03-25 22:56, slack,- +2022-03-26 03:53, flood,40 +2022-03-26 07:20, slack,- +2022-03-26 08:57, ebb,-29 +2022-03-26 11:50, slack,- +2022-03-26 17:47, flood,39 +2022-03-26 20:02, slack,- +2022-03-26 21:33, ebb,-25 +2022-03-27 00:02, slack,- +2022-03-27 05:05, flood,39 +2022-03-27 08:26, slack,- +2022-03-27 10:03, ebb,-28 +2022-03-27 12:50, slack,- +2022-03-27 19:11, flood,43 +2022-03-27 21:08, slack,- +2022-03-27 22:51, ebb,-25 +2022-03-28 01:08, slack,- +2022-03-28 07:17, flood,41 +2022-03-28 09:26, slack,- +2022-03-28 11:21, ebb,-28 +2022-03-28 13:56, slack,- +2022-03-28 20:11, flood,48 +2022-03-28 22:08, slack,- +2022-03-29 00:15, ebb,-27 +2022-03-29 02:08, slack,- +2022-03-29 08:29, flood,46 +2022-03-29 10:26, slack,- +2022-03-29 12:33, ebb,-29 +2022-03-29 14:50, slack,- +2022-03-29 21:11, flood,53 +2022-03-29 23:08, slack,- +2022-03-30 01:21, ebb,-29 +2022-03-30 03:02, slack,- +2022-03-30 09:23, flood,52 +2022-03-30 11:26, slack,- +2022-03-30 13:33, ebb,-31 +2022-03-30 15:38, slack,- +2022-03-30 21:59, flood,57 +2022-03-30 23:56, slack,- +2022-03-31 02:15, ebb,-31 +2022-03-31 03:56, slack,- +2022-03-31 10:17, flood,55 +2022-03-31 12:14, slack,- +2022-03-31 14:21, ebb,-32 +2022-03-31 16:26, slack,- +2022-03-31 22:47, flood,57 +2022-04-01 00:44, slack,- +2022-04-01 02:57, ebb,-32 +2022-04-01 04:44, slack,- +2022-04-01 10:59, flood,55 +2022-04-01 13:02, slack,- +2022-04-01 15:03, ebb,-32 +2022-04-01 17:08, slack,- +2022-04-01 23:29, flood,55 +2022-04-02 01:32, slack,- +2022-04-02 03:39, ebb,-32 +2022-04-02 05:32, slack,- +2022-04-02 11:47, flood,53 +2022-04-02 13:50, slack,- +2022-04-02 15:39, ebb,-32 +2022-04-02 17:50, slack,- +2022-04-03 00:17, flood,51 +2022-04-03 02:14, slack,- +2022-04-03 04:15, ebb,-32 +2022-04-03 06:20, slack,- +2022-04-03 12:35, flood,50 +2022-04-03 14:38, slack,- +2022-04-03 16:15, ebb,-30 +2022-04-03 18:32, slack,- +2022-04-04 01:05, flood,45 +2022-04-04 03:02, slack,- +2022-04-04 04:45, ebb,-31 +2022-04-04 07:02, slack,- +2022-04-04 13:23, flood,45 +2022-04-04 15:26, slack,- +2022-04-04 16:57, ebb,-29 +2022-04-04 19:14, slack,- +2022-04-05 01:47, flood,39 +2022-04-05 03:44, slack,- +2022-04-05 05:27, ebb,-29 +2022-04-05 07:50, slack,- +2022-04-05 14:11, flood,41 +2022-04-05 16:08, slack,- +2022-04-05 17:39, ebb,-27 +2022-04-05 19:56, slack,- +2022-04-06 02:23, flood,34 +2022-04-06 04:26, slack,- +2022-04-06 06:03, ebb,-27 +2022-04-06 08:44, slack,- +2022-04-06 14:53, flood,38 +2022-04-06 16:56, slack,- +2022-04-06 18:21, ebb,-25 +2022-04-06 20:44, slack,- +2022-04-07 01:41, flood,32 +2022-04-07 05:14, slack,- +2022-04-07 06:45, ebb,-25 +2022-04-07 09:32, slack,- +2022-04-07 15:35, flood,34 +2022-04-07 17:44, slack,- +2022-04-07 19:09, ebb,-23 +2022-04-07 21:38, slack,- +2022-04-08 02:23, flood,30 +2022-04-08 05:56, slack,- +2022-04-08 07:33, ebb,-23 +2022-04-08 10:26, slack,- +2022-04-08 15:35, flood,32 +2022-04-08 18:32, slack,- +2022-04-08 19:57, ebb,-21 +2022-04-08 22:32, slack,- +2022-04-09 03:05, flood,30 +2022-04-09 06:44, slack,- +2022-04-09 08:21, ebb,-22 +2022-04-09 11:20, slack,- +2022-04-09 16:11, flood,31 +2022-04-09 19:26, slack,- +2022-04-09 20:45, ebb,-20 +2022-04-09 23:26, slack,- +2022-04-10 03:53, flood,31 +2022-04-10 07:38, slack,- +2022-04-10 09:09, ebb,-21 +2022-04-10 12:08, slack,- +2022-04-10 16:53, flood,31 +2022-04-10 20:14, slack,- +2022-04-10 21:39, ebb,-20 +2022-04-11 00:14, slack,- +2022-04-11 04:47, flood,32 +2022-04-11 08:26, slack,- +2022-04-11 10:03, ebb,-22 +2022-04-11 12:50, slack,- +2022-04-11 17:35, flood,33 +2022-04-11 21:02, slack,- +2022-04-11 22:39, ebb,-22 +2022-04-12 01:02, slack,- +2022-04-12 05:35, flood,35 +2022-04-12 09:14, slack,- +2022-04-12 10:57, ebb,-24 +2022-04-12 13:38, slack,- +2022-04-12 18:17, flood,37 +2022-04-12 21:50, slack,- +2022-04-12 23:27, ebb,-25 +2022-04-13 01:44, slack,- +2022-04-13 06:23, flood,39 +2022-04-13 10:02, slack,- +2022-04-13 11:51, ebb,-27 +2022-04-13 14:14, slack,- +2022-04-13 19:05, flood,40 +2022-04-13 22:38, slack,- +2022-04-14 00:15, ebb,-28 +2022-04-14 02:32, slack,- +2022-04-14 07:11, flood,43 +2022-04-14 10:50, slack,- +2022-04-14 12:33, ebb,-31 +2022-04-14 14:56, slack,- +2022-04-14 19:47, flood,45 +2022-04-14 23:20, slack,- +2022-04-15 01:03, ebb,-32 +2022-04-15 03:14, slack,- +2022-04-15 07:59, flood,47 +2022-04-15 11:38, slack,- +2022-04-15 13:21, ebb,-34 +2022-04-15 15:38, slack,- +2022-04-15 20:35, flood,49 +2022-04-16 00:02, slack,- +2022-04-16 01:51, ebb,-35 +2022-04-16 03:56, slack,- +2022-04-16 08:53, flood,51 +2022-04-16 12:20, slack,- +2022-04-16 14:09, ebb,-36 +2022-04-16 16:14, slack,- +2022-04-16 21:17, flood,53 +2022-04-17 00:44, slack,- +2022-04-17 02:33, ebb,-38 +2022-04-17 04:38, slack,- +2022-04-17 09:41, flood,53 +2022-04-17 13:08, slack,- +2022-04-17 14:57, ebb,-37 +2022-04-17 16:56, slack,- +2022-04-17 21:59, flood,55 +2022-04-18 01:32, slack,- +2022-04-18 03:21, ebb,-40 +2022-04-18 05:26, slack,- +2022-04-18 10:29, flood,54 +2022-04-18 14:02, slack,- +2022-04-18 15:45, ebb,-38 +2022-04-18 17:38, slack,- +2022-04-18 22:47, flood,54 +2022-04-19 02:14, slack,- +2022-04-19 04:09, ebb,-40 +2022-04-19 06:14, slack,- +2022-04-19 11:23, flood,52 +2022-04-19 14:50, slack,- +2022-04-19 16:33, ebb,-37 +2022-04-19 18:26, slack,- +2022-04-19 23:35, flood,52 +2022-04-20 03:08, slack,- +2022-04-20 04:57, ebb,-40 +2022-04-20 07:08, slack,- +2022-04-20 12:17, flood,48 +2022-04-20 15:44, slack,- +2022-04-20 17:27, ebb,-35 +2022-04-20 19:20, slack,- +2022-04-21 00:29, flood,47 +2022-04-21 04:02, slack,- +2022-04-21 05:51, ebb,-38 +2022-04-21 08:08, slack,- +2022-04-21 13:29, flood,44 +2022-04-21 16:44, slack,- +2022-04-21 18:21, ebb,-32 +2022-04-21 20:20, slack,- +2022-04-22 01:35, flood,43 +2022-04-22 04:56, slack,- +2022-04-22 06:45, ebb,-35 +2022-04-22 09:14, slack,- +2022-04-22 14:47, flood,42 +2022-04-22 17:44, slack,- +2022-04-22 19:15, ebb,-30 +2022-04-22 21:32, slack,- +2022-04-23 02:41, flood,40 +2022-04-23 05:56, slack,- +2022-04-23 07:39, ebb,-32 +2022-04-23 10:26, slack,- +2022-04-23 16:23, flood,41 +2022-04-23 18:44, slack,- +2022-04-23 20:09, ebb,-27 +2022-04-23 22:44, slack,- +2022-04-24 03:53, flood,39 +2022-04-24 07:02, slack,- +2022-04-24 08:33, ebb,-28 +2022-04-24 11:32, slack,- +2022-04-24 17:47, flood,43 +2022-04-24 19:50, slack,- +2022-04-24 21:15, ebb,-25 +2022-04-24 23:50, slack,- +2022-04-25 05:53, flood,39 +2022-04-25 08:08, slack,- +2022-04-25 09:45, ebb,-26 +2022-04-25 12:32, slack,- +2022-04-25 18:47, flood,46 +2022-04-25 20:50, slack,- +2022-04-25 22:45, ebb,-25 +2022-04-26 00:56, slack,- +2022-04-26 07:05, flood,43 +2022-04-26 09:08, slack,- +2022-04-26 11:21, ebb,-26 +2022-04-26 13:32, slack,- +2022-04-26 19:47, flood,50 +2022-04-26 21:50, slack,- +2022-04-27 00:33, ebb,-27 +2022-04-27 01:50, slack,- +2022-04-27 08:11, flood,47 +2022-04-27 10:08, slack,- +2022-04-27 12:45, ebb,-28 +2022-04-27 14:26, slack,- +2022-04-27 20:47, flood,53 +2022-04-27 22:44, slack,- +2022-04-28 01:21, ebb,-30 +2022-04-28 02:44, slack,- +2022-04-28 09:05, flood,51 +2022-04-28 11:02, slack,- +2022-04-28 13:33, ebb,-29 +2022-04-28 15:14, slack,- +2022-04-28 21:35, flood,54 +2022-04-28 23:32, slack,- +2022-04-29 02:03, ebb,-31 +2022-04-29 03:38, slack,- +2022-04-29 09:53, flood,54 +2022-04-29 11:50, slack,- +2022-04-29 14:09, ebb,-30 +2022-04-29 15:56, slack,- +2022-04-29 22:23, flood,54 +2022-04-30 00:20, slack,- +2022-04-30 02:45, ebb,-32 +2022-04-30 04:26, slack,- +2022-04-30 10:41, flood,54 +2022-04-30 12:38, slack,- +2022-04-30 14:39, ebb,-30 +2022-04-30 16:38, slack,- +2022-04-30 23:05, flood,51 +2022-05-01 01:02, slack,- +2022-05-01 03:21, ebb,-32 +2022-05-01 05:08, slack,- +2022-05-01 11:23, flood,52 +2022-05-01 13:26, slack,- +2022-05-01 15:15, ebb,-29 +2022-05-01 17:20, slack,- +2022-05-01 23:47, flood,46 +2022-05-02 01:44, slack,- +2022-05-02 03:45, ebb,-31 +2022-05-02 05:56, slack,- +2022-05-02 12:11, flood,48 +2022-05-02 14:14, slack,- +2022-05-02 15:51, ebb,-28 +2022-05-02 18:02, slack,- +2022-05-03 00:29, flood,40 +2022-05-03 02:26, slack,- +2022-05-03 04:15, ebb,-30 +2022-05-03 06:38, slack,- +2022-05-03 12:59, flood,44 +2022-05-03 14:56, slack,- +2022-05-03 16:33, ebb,-27 +2022-05-03 18:44, slack,- +2022-05-03 23:35, flood,36 +2022-05-04 03:14, slack,- +2022-05-04 04:51, ebb,-29 +2022-05-04 07:20, slack,- +2022-05-04 13:41, flood,40 +2022-05-04 15:44, slack,- +2022-05-04 17:09, ebb,-26 +2022-05-04 19:26, slack,- +2022-05-05 00:11, flood,34 +2022-05-05 03:56, slack,- +2022-05-05 05:33, ebb,-28 +2022-05-05 08:08, slack,- +2022-05-05 14:23, flood,37 +2022-05-05 16:26, slack,- +2022-05-05 17:57, ebb,-25 +2022-05-05 20:14, slack,- +2022-05-06 00:59, flood,32 +2022-05-06 04:38, slack,- +2022-05-06 06:15, ebb,-27 +2022-05-06 08:56, slack,- +2022-05-06 14:23, flood,35 +2022-05-06 17:14, slack,- +2022-05-06 18:39, ebb,-24 +2022-05-06 21:02, slack,- +2022-05-07 01:47, flood,32 +2022-05-07 05:20, slack,- +2022-05-07 06:57, ebb,-25 +2022-05-07 09:50, slack,- +2022-05-07 14:47, flood,34 +2022-05-07 18:02, slack,- +2022-05-07 19:27, ebb,-23 +2022-05-07 21:56, slack,- +2022-05-08 02:35, flood,32 +2022-05-08 06:08, slack,- +2022-05-08 07:45, ebb,-25 +2022-05-08 10:38, slack,- +2022-05-08 15:23, flood,34 +2022-05-08 18:50, slack,- +2022-05-08 20:15, ebb,-23 +2022-05-08 22:50, slack,- +2022-05-09 03:23, flood,34 +2022-05-09 06:56, slack,- +2022-05-09 08:33, ebb,-24 +2022-05-09 11:26, slack,- +2022-05-09 16:11, flood,35 +2022-05-09 19:32, slack,- +2022-05-09 21:03, ebb,-23 +2022-05-09 23:38, slack,- +2022-05-10 04:11, flood,36 +2022-05-10 07:44, slack,- +2022-05-10 09:27, ebb,-25 +2022-05-10 12:08, slack,- +2022-05-10 16:53, flood,38 +2022-05-10 20:26, slack,- +2022-05-10 21:57, ebb,-24 +2022-05-11 00:26, slack,- +2022-05-11 04:59, flood,38 +2022-05-11 08:32, slack,- +2022-05-11 10:21, ebb,-26 +2022-05-11 12:50, slack,- +2022-05-11 17:35, flood,41 +2022-05-11 21:14, slack,- +2022-05-11 22:51, ebb,-26 +2022-05-12 01:14, slack,- +2022-05-12 05:53, flood,41 +2022-05-12 09:26, slack,- +2022-05-12 11:15, ebb,-29 +2022-05-12 13:32, slack,- +2022-05-12 18:23, flood,44 +2022-05-12 22:02, slack,- +2022-05-12 23:45, ebb,-30 +2022-05-13 01:56, slack,- +2022-05-13 06:41, flood,44 +2022-05-13 10:20, slack,- +2022-05-13 12:03, ebb,-31 +2022-05-13 14:20, slack,- +2022-05-13 19:11, flood,48 +2022-05-13 22:44, slack,- +2022-05-14 00:33, ebb,-33 +2022-05-14 02:44, slack,- +2022-05-14 07:35, flood,47 +2022-05-14 11:08, slack,- +2022-05-14 12:51, ebb,-34 +2022-05-14 15:02, slack,- +2022-05-14 19:59, flood,51 +2022-05-14 23:32, slack,- +2022-05-15 01:21, ebb,-36 +2022-05-15 03:32, slack,- +2022-05-15 08:29, flood,50 +2022-05-15 12:02, slack,- +2022-05-15 13:45, ebb,-35 +2022-05-15 15:44, slack,- +2022-05-15 20:47, flood,53 +2022-05-16 00:20, slack,- +2022-05-16 02:09, ebb,-39 +2022-05-16 04:20, slack,- +2022-05-16 09:23, flood,52 +2022-05-16 12:50, slack,- +2022-05-16 14:33, ebb,-36 +2022-05-16 16:32, slack,- +2022-05-16 21:35, flood,54 +2022-05-17 01:08, slack,- +2022-05-17 02:57, ebb,-40 +2022-05-17 05:14, slack,- +2022-05-17 10:17, flood,52 +2022-05-17 13:44, slack,- +2022-05-17 15:27, ebb,-36 +2022-05-17 17:20, slack,- +2022-05-17 22:23, flood,53 +2022-05-18 01:56, slack,- +2022-05-18 03:51, ebb,-40 +2022-05-18 06:02, slack,- +2022-05-18 11:11, flood,50 +2022-05-18 14:38, slack,- +2022-05-18 16:15, ebb,-35 +2022-05-18 18:14, slack,- +2022-05-18 23:17, flood,49 +2022-05-19 02:50, slack,- +2022-05-19 04:39, ebb,-39 +2022-05-19 06:56, slack,- +2022-05-19 12:17, flood,47 +2022-05-19 15:32, slack,- +2022-05-19 17:09, ebb,-33 +2022-05-19 19:08, slack,- +2022-05-20 00:17, flood,45 +2022-05-20 03:44, slack,- +2022-05-20 05:33, ebb,-37 +2022-05-20 07:56, slack,- +2022-05-20 13:53, flood,45 +2022-05-20 16:32, slack,- +2022-05-20 18:03, ebb,-31 +2022-05-20 20:14, slack,- +2022-05-21 01:29, flood,42 +2022-05-21 04:44, slack,- +2022-05-21 06:21, ebb,-34 +2022-05-21 09:02, slack,- +2022-05-21 15:17, flood,45 +2022-05-21 17:26, slack,- +2022-05-21 18:57, ebb,-29 +2022-05-21 21:20, slack,- +2022-05-22 02:47, flood,40 +2022-05-22 05:44, slack,- +2022-05-22 07:21, ebb,-31 +2022-05-22 10:08, slack,- +2022-05-22 16:23, flood,45 +2022-05-22 18:26, slack,- +2022-05-22 19:57, ebb,-27 +2022-05-22 22:32, slack,- +2022-05-23 04:23, flood,40 +2022-05-23 06:44, slack,- +2022-05-23 08:15, ebb,-28 +2022-05-23 11:14, slack,- +2022-05-23 17:29, flood,46 +2022-05-23 19:26, slack,- +2022-05-23 20:57, ebb,-25 +2022-05-23 23:38, slack,- +2022-05-24 05:41, flood,41 +2022-05-24 07:44, slack,- +2022-05-24 09:21, ebb,-26 +2022-05-24 12:08, slack,- +2022-05-24 18:23, flood,47 +2022-05-24 20:26, slack,- +2022-05-24 23:15, ebb,-25 +2022-05-25 00:38, slack,- +2022-05-25 06:47, flood,44 +2022-05-25 08:44, slack,- +2022-05-25 11:33, ebb,-25 +2022-05-25 13:02, slack,- +2022-05-25 19:23, flood,49 +2022-05-25 21:20, slack,- +2022-05-26 00:15, ebb,-27 +2022-05-26 01:32, slack,- +2022-05-26 07:47, flood,46 +2022-05-26 09:44, slack,- +2022-05-26 12:27, ebb,-26 +2022-05-26 13:50, slack,- +2022-05-26 20:17, flood,49 +2022-05-26 22:14, slack,- +2022-05-27 01:03, ebb,-29 +2022-05-27 02:26, slack,- +2022-05-27 08:41, flood,48 +2022-05-27 10:38, slack,- +2022-05-27 13:09, ebb,-27 +2022-05-27 14:38, slack,- +2022-05-27 21:11, flood,50 +2022-05-27 23:02, slack,- +2022-05-28 01:51, ebb,-30 +2022-05-28 03:14, slack,- +2022-05-28 09:35, flood,50 +2022-05-28 11:26, slack,- +2022-05-28 13:45, ebb,-27 +2022-05-28 15:26, slack,- +2022-05-28 21:59, flood,48 +2022-05-28 23:50, slack,- +2022-05-29 02:27, ebb,-31 +2022-05-29 04:02, slack,- +2022-05-29 10:17, flood,51 +2022-05-29 12:14, slack,- +2022-05-29 14:15, ebb,-27 +2022-05-29 16:08, slack,- +2022-05-29 22:41, flood,46 +2022-05-30 00:32, slack,- +2022-05-30 03:03, ebb,-31 +2022-05-30 04:44, slack,- +2022-05-30 11:05, flood,49 +2022-05-30 13:02, slack,- +2022-05-30 14:51, ebb,-27 +2022-05-30 16:50, slack,- +2022-05-30 23:17, flood,42 +2022-05-31 01:14, slack,- +2022-05-31 03:21, ebb,-30 +2022-05-31 05:32, slack,- +2022-05-31 11:47, flood,47 +2022-05-31 13:50, slack,- +2022-05-31 15:27, ebb,-27 +2022-05-31 17:32, slack,- +2022-05-31 22:35, flood,37 +2022-06-01 01:56, slack,- +2022-06-01 03:45, ebb,-30 +2022-06-01 06:14, slack,- +2022-06-01 12:29, flood,43 +2022-06-01 14:32, slack,- +2022-06-01 16:03, ebb,-26 +2022-06-01 18:14, slack,- +2022-06-01 22:59, flood,37 +2022-06-02 02:38, slack,- +2022-06-02 04:21, ebb,-29 +2022-06-02 06:56, slack,- +2022-06-02 13:05, flood,40 +2022-06-02 15:14, slack,- +2022-06-02 16:45, ebb,-26 +2022-06-02 18:56, slack,- +2022-06-02 23:35, flood,36 +2022-06-03 03:20, slack,- +2022-06-03 05:03, ebb,-29 +2022-06-03 07:38, slack,- +2022-06-03 12:53, flood,38 +2022-06-03 15:56, slack,- +2022-06-03 17:27, ebb,-26 +2022-06-03 19:38, slack,- +2022-06-04 00:23, flood,35 +2022-06-04 04:02, slack,- +2022-06-04 05:45, ebb,-29 +2022-06-04 08:20, slack,- +2022-06-04 13:29, flood,37 +2022-06-04 16:44, slack,- +2022-06-04 18:09, ebb,-26 +2022-06-04 20:26, slack,- +2022-06-05 01:11, flood,35 +2022-06-05 04:44, slack,- +2022-06-05 06:27, ebb,-28 +2022-06-05 09:08, slack,- +2022-06-05 14:05, flood,37 +2022-06-05 17:26, slack,- +2022-06-05 18:57, ebb,-26 +2022-06-05 21:14, slack,- +2022-06-06 02:05, flood,36 +2022-06-06 05:26, slack,- +2022-06-06 07:15, ebb,-28 +2022-06-06 09:50, slack,- +2022-06-06 14:47, flood,38 +2022-06-06 18:08, slack,- +2022-06-06 19:39, ebb,-26 +2022-06-06 22:08, slack,- +2022-06-07 02:53, flood,38 +2022-06-07 06:14, slack,- +2022-06-07 07:57, ebb,-28 +2022-06-07 10:38, slack,- +2022-06-07 15:29, flood,40 +2022-06-07 18:56, slack,- +2022-06-07 20:27, ebb,-26 +2022-06-07 22:56, slack,- +2022-06-08 03:41, flood,39 +2022-06-08 07:02, slack,- +2022-06-08 08:51, ebb,-28 +2022-06-08 11:26, slack,- +2022-06-08 16:11, flood,42 +2022-06-08 19:44, slack,- +2022-06-08 21:21, ebb,-27 +2022-06-08 23:50, slack,- +2022-06-09 04:29, flood,41 +2022-06-09 07:56, slack,- +2022-06-09 09:45, ebb,-28 +2022-06-09 12:08, slack,- +2022-06-09 16:59, flood,44 +2022-06-09 20:32, slack,- +2022-06-09 22:15, ebb,-29 +2022-06-10 00:38, slack,- +2022-06-10 05:23, flood,42 +2022-06-10 08:50, slack,- +2022-06-10 10:39, ebb,-29 +2022-06-10 12:56, slack,- +2022-06-10 17:47, flood,47 +2022-06-10 21:20, slack,- +2022-06-10 23:09, ebb,-31 +2022-06-11 01:32, slack,- +2022-06-11 06:17, flood,44 +2022-06-11 09:50, slack,- +2022-06-11 11:33, ebb,-31 +2022-06-11 13:44, slack,- +2022-06-11 18:35, flood,49 +2022-06-11 22:14, slack,- +2022-06-12 00:03, ebb,-34 +2022-06-12 02:20, slack,- +2022-06-12 07:11, flood,46 +2022-06-12 10:44, slack,- +2022-06-12 12:27, ebb,-32 +2022-06-12 14:32, slack,- +2022-06-12 19:29, flood,50 +2022-06-12 23:02, slack,- +2022-06-13 00:57, ebb,-37 +2022-06-13 03:14, slack,- +2022-06-13 08:11, flood,47 +2022-06-13 11:44, slack,- +2022-06-13 13:21, ebb,-33 +2022-06-13 15:20, slack,- +2022-06-13 20:23, flood,51 +2022-06-13 23:56, slack,- +2022-06-14 01:45, ebb,-38 +2022-06-14 04:08, slack,- +2022-06-14 09:17, flood,49 +2022-06-14 12:38, slack,- +2022-06-14 14:15, ebb,-34 +2022-06-14 16:14, slack,- +2022-06-14 21:17, flood,51 +2022-06-15 00:50, slack,- +2022-06-15 02:39, ebb,-39 +2022-06-15 05:02, slack,- +2022-06-15 10:17, flood,49 +2022-06-15 13:32, slack,- +2022-06-15 15:09, ebb,-34 +2022-06-15 17:08, slack,- +2022-06-15 22:11, flood,50 +2022-06-16 01:44, slack,- +2022-06-16 03:33, ebb,-39 +2022-06-16 05:56, slack,- +2022-06-16 11:23, flood,49 +2022-06-16 14:26, slack,- +2022-06-16 15:57, ebb,-33 +2022-06-16 18:02, slack,- +2022-06-16 23:11, flood,48 +2022-06-17 02:38, slack,- +2022-06-17 04:21, ebb,-38 +2022-06-17 06:50, slack,- +2022-06-17 12:59, flood,48 +2022-06-17 15:20, slack,- +2022-06-17 16:51, ebb,-32 +2022-06-17 19:02, slack,- +2022-06-18 00:17, flood,45 +2022-06-18 03:32, slack,- +2022-06-18 05:15, ebb,-36 +2022-06-18 07:44, slack,- +2022-06-18 14:11, flood,48 +2022-06-18 16:14, slack,- +2022-06-18 17:45, ebb,-31 +2022-06-18 20:02, slack,- +2022-06-19 01:47, flood,43 +2022-06-19 04:26, slack,- +2022-06-19 06:03, ebb,-34 +2022-06-19 08:44, slack,- +2022-06-19 15:05, flood,48 +2022-06-19 17:08, slack,- +2022-06-19 18:39, ebb,-29 +2022-06-19 21:08, slack,- +2022-06-20 03:05, flood,42 +2022-06-20 05:26, slack,- +2022-06-20 06:57, ebb,-31 +2022-06-20 09:44, slack,- +2022-06-20 16:05, flood,48 +2022-06-20 18:08, slack,- +2022-06-20 19:33, ebb,-27 +2022-06-20 22:14, slack,- +2022-06-21 04:11, flood,42 +2022-06-21 06:20, slack,- +2022-06-21 07:51, ebb,-28 +2022-06-21 10:44, slack,- +2022-06-21 16:59, flood,47 +2022-06-21 19:02, slack,- +2022-06-21 20:39, ebb,-25 +2022-06-21 23:14, slack,- +2022-06-22 05:17, flood,42 +2022-06-22 07:20, slack,- +2022-06-22 08:51, ebb,-25 +2022-06-22 11:38, slack,- +2022-06-22 17:59, flood,46 +2022-06-22 19:56, slack,- +2022-06-22 22:57, ebb,-25 +2022-06-23 00:14, slack,- +2022-06-23 06:17, flood,42 +2022-06-23 08:20, slack,- +2022-06-23 10:09, ebb,-24 +2022-06-23 12:32, slack,- +2022-06-23 18:53, flood,45 +2022-06-23 20:50, slack,- +2022-06-23 23:57, ebb,-27 +2022-06-24 01:08, slack,- +2022-06-24 07:17, flood,43 +2022-06-24 09:14, slack,- +2022-06-24 12:03, ebb,-24 +2022-06-24 13:20, slack,- +2022-06-24 19:47, flood,44 +2022-06-24 21:44, slack,- +2022-06-25 00:45, ebb,-28 +2022-06-25 02:02, slack,- +2022-06-25 08:17, flood,44 +2022-06-25 10:08, slack,- +2022-06-25 12:45, ebb,-24 +2022-06-25 14:08, slack,- +2022-06-25 20:41, flood,43 +2022-06-25 22:32, slack,- +2022-06-26 01:27, ebb,-29 +2022-06-26 02:50, slack,- +2022-06-26 09:11, flood,46 +2022-06-26 11:02, slack,- +2022-06-26 13:27, ebb,-24 +2022-06-26 14:50, slack,- +2022-06-26 21:29, flood,42 +2022-06-26 23:20, slack,- +2022-06-27 02:09, ebb,-29 +2022-06-27 03:38, slack,- +2022-06-27 09:59, flood,47 +2022-06-27 11:50, slack,- +2022-06-27 13:51, ebb,-25 +2022-06-27 15:38, slack,- +2022-06-27 22:11, flood,40 +2022-06-28 00:02, slack,- +2022-06-28 02:45, ebb,-29 +2022-06-28 04:20, slack,- +2022-06-28 10:41, flood,47 +2022-06-28 12:38, slack,- +2022-06-28 14:21, ebb,-25 +2022-06-28 16:20, slack,- +2022-06-28 22:47, flood,38 +2022-06-29 00:44, slack,- +2022-06-29 02:51, ebb,-29 +2022-06-29 05:02, slack,- +2022-06-29 11:17, flood,45 +2022-06-29 13:20, slack,- +2022-06-29 14:57, ebb,-26 +2022-06-29 17:02, slack,- +2022-06-29 21:53, flood,37 +2022-06-30 01:26, slack,- +2022-06-30 03:15, ebb,-29 +2022-06-30 05:44, slack,- +2022-06-30 11:53, flood,42 +2022-06-30 14:02, slack,- +2022-06-30 15:33, ebb,-26 +2022-06-30 17:44, slack,- +2022-06-30 22:29, flood,39 +2022-07-01 02:08, slack,- +2022-07-01 03:51, ebb,-30 +2022-07-01 06:26, slack,- +2022-07-01 11:35, flood,40 +2022-07-01 14:44, slack,- +2022-07-01 16:15, ebb,-27 +2022-07-01 18:26, slack,- +2022-07-01 23:05, flood,40 +2022-07-02 02:50, slack,- +2022-07-02 04:33, ebb,-31 +2022-07-02 07:02, slack,- +2022-07-02 11:59, flood,40 +2022-07-02 15:26, slack,- +2022-07-02 16:57, ebb,-28 +2022-07-02 19:08, slack,- +2022-07-02 23:53, flood,40 +2022-07-03 03:26, slack,- +2022-07-03 05:15, ebb,-31 +2022-07-03 07:44, slack,- +2022-07-03 12:41, flood,41 +2022-07-03 16:08, slack,- +2022-07-03 17:39, ebb,-28 +2022-07-03 19:50, slack,- +2022-07-04 00:41, flood,40 +2022-07-04 04:08, slack,- +2022-07-04 05:57, ebb,-32 +2022-07-04 08:20, slack,- +2022-07-04 13:23, flood,42 +2022-07-04 16:50, slack,- +2022-07-04 18:21, ebb,-29 +2022-07-04 20:32, slack,- +2022-07-05 01:29, flood,41 +2022-07-05 04:50, slack,- +2022-07-05 06:45, ebb,-32 +2022-07-05 09:08, slack,- +2022-07-05 14:11, flood,43 +2022-07-05 17:32, slack,- +2022-07-05 19:09, ebb,-29 +2022-07-05 21:26, slack,- +2022-07-06 02:23, flood,41 +2022-07-06 05:38, slack,- +2022-07-06 07:27, ebb,-32 +2022-07-06 09:50, slack,- +2022-07-06 14:53, flood,45 +2022-07-06 18:14, slack,- +2022-07-06 19:57, ebb,-30 +2022-07-06 22:20, slack,- +2022-07-07 03:11, flood,42 +2022-07-07 06:26, slack,- +2022-07-07 08:21, ebb,-31 +2022-07-07 10:38, slack,- +2022-07-07 15:41, flood,46 +2022-07-07 19:02, slack,- +2022-07-07 20:51, ebb,-30 +2022-07-07 23:14, slack,- +2022-07-08 04:05, flood,42 +2022-07-08 07:20, slack,- +2022-07-08 09:15, ebb,-30 +2022-07-08 11:26, slack,- +2022-07-08 16:23, flood,47 +2022-07-08 19:56, slack,- +2022-07-08 21:45, ebb,-31 +2022-07-09 00:08, slack,- +2022-07-09 04:59, flood,42 +2022-07-09 08:20, slack,- +2022-07-09 10:09, ebb,-29 +2022-07-09 12:20, slack,- +2022-07-09 17:17, flood,47 +2022-07-09 20:50, slack,- +2022-07-09 22:39, ebb,-32 +2022-07-10 01:08, slack,- +2022-07-10 05:53, flood,42 +2022-07-10 09:26, slack,- +2022-07-10 11:09, ebb,-29 +2022-07-10 13:14, slack,- +2022-07-10 18:05, flood,47 +2022-07-10 21:44, slack,- +2022-07-10 23:39, ebb,-34 +2022-07-11 02:02, slack,- +2022-07-11 06:53, flood,43 +2022-07-11 10:26, slack,- +2022-07-11 12:03, ebb,-30 +2022-07-11 14:08, slack,- +2022-07-11 19:05, flood,47 +2022-07-11 22:44, slack,- +2022-07-12 00:33, ebb,-35 +2022-07-12 03:02, slack,- +2022-07-12 08:05, flood,44 +2022-07-12 11:26, slack,- +2022-07-12 13:03, ebb,-31 +2022-07-12 15:02, slack,- +2022-07-12 20:05, flood,48 +2022-07-12 23:38, slack,- +2022-07-13 01:27, ebb,-37 +2022-07-13 03:56, slack,- +2022-07-13 09:47, flood,47 +2022-07-13 12:20, slack,- +2022-07-13 13:57, ebb,-32 +2022-07-13 16:02, slack,- +2022-07-13 21:11, flood,48 +2022-07-14 00:32, slack,- +2022-07-14 02:21, ebb,-37 +2022-07-14 04:50, slack,- +2022-07-14 10:59, flood,50 +2022-07-14 13:14, slack,- +2022-07-14 14:51, ebb,-32 +2022-07-14 16:56, slack,- +2022-07-14 22:17, flood,49 +2022-07-15 01:26, slack,- +2022-07-15 03:15, ebb,-37 +2022-07-15 05:44, slack,- +2022-07-15 11:59, flood,52 +2022-07-15 14:08, slack,- +2022-07-15 15:45, ebb,-33 +2022-07-15 17:56, slack,- +2022-07-15 23:17, flood,48 +2022-07-16 02:20, slack,- +2022-07-16 04:09, ebb,-37 +2022-07-16 06:38, slack,- +2022-07-16 12:59, flood,52 +2022-07-16 15:02, slack,- +2022-07-16 16:39, ebb,-32 +2022-07-16 18:50, slack,- +2022-07-17 00:41, flood,47 +2022-07-17 03:14, slack,- +2022-07-17 04:57, ebb,-35 +2022-07-17 07:32, slack,- +2022-07-17 13:53, flood,52 +2022-07-17 15:56, slack,- +2022-07-17 17:27, ebb,-31 +2022-07-17 19:44, slack,- +2022-07-18 01:59, flood,46 +2022-07-18 04:08, slack,- +2022-07-18 05:45, ebb,-33 +2022-07-18 08:20, slack,- +2022-07-18 14:47, flood,50 +2022-07-18 16:50, slack,- +2022-07-18 18:21, ebb,-29 +2022-07-18 20:44, slack,- +2022-07-19 02:59, flood,45 +2022-07-19 05:02, slack,- +2022-07-19 06:39, ebb,-31 +2022-07-19 09:20, slack,- +2022-07-19 15:41, flood,48 +2022-07-19 17:38, slack,- +2022-07-19 19:15, ebb,-27 +2022-07-19 21:50, slack,- +2022-07-20 03:53, flood,43 +2022-07-20 05:56, slack,- +2022-07-20 07:27, ebb,-28 +2022-07-20 10:14, slack,- +2022-07-20 16:35, flood,45 +2022-07-20 18:32, slack,- +2022-07-20 20:09, ebb,-25 +2022-07-20 22:50, slack,- +2022-07-21 04:53, flood,41 +2022-07-21 06:50, slack,- +2022-07-21 08:21, ebb,-25 +2022-07-21 11:08, slack,- +2022-07-21 17:29, flood,42 +2022-07-21 19:26, slack,- +2022-07-21 21:15, ebb,-24 +2022-07-21 22:27, ebb,-24 +2022-07-21 23:44, slack,- +2022-07-22 05:53, flood,40 +2022-07-22 07:50, slack,- +2022-07-22 09:21, ebb,-22 +2022-07-22 11:56, slack,- +2022-07-22 18:23, flood,40 +2022-07-22 20:20, slack,- +2022-07-22 23:33, ebb,-25 +2022-07-23 00:44, slack,- +2022-07-23 06:53, flood,39 +2022-07-23 08:44, slack,- +2022-07-23 11:39, ebb,-21 +2022-07-23 12:44, slack,- +2022-07-23 19:17, flood,38 +2022-07-23 21:14, slack,- +2022-07-24 00:21, ebb,-26 +2022-07-24 01:32, slack,- +2022-07-24 07:47, flood,40 +2022-07-24 09:44, slack,- +2022-07-24 12:27, ebb,-22 +2022-07-24 13:32, slack,- +2022-07-24 20:11, flood,37 +2022-07-24 22:02, slack,- +2022-07-25 01:09, ebb,-26 +2022-07-25 02:26, slack,- +2022-07-25 08:41, flood,42 +2022-07-25 10:32, slack,- +2022-07-25 13:03, ebb,-22 +2022-07-25 14:20, slack,- +2022-07-25 21:05, flood,36 +2022-07-25 22:50, slack,- +2022-07-26 01:51, ebb,-27 +2022-07-26 03:08, slack,- +2022-07-26 09:29, flood,43 +2022-07-26 11:26, slack,- +2022-07-26 13:27, ebb,-23 +2022-07-26 15:08, slack,- +2022-07-26 21:47, flood,36 +2022-07-26 23:38, slack,- +2022-07-27 02:27, ebb,-27 +2022-07-27 03:56, slack,- +2022-07-27 10:17, flood,43 +2022-07-27 12:08, slack,- +2022-07-27 13:51, ebb,-24 +2022-07-27 15:50, slack,- +2022-07-27 20:47, flood,36 +2022-07-27 22:17, flood,36 +2022-07-28 00:14, slack,- +2022-07-28 02:15, ebb,-28 +2022-07-28 04:32, slack,- +2022-07-28 10:53, flood,43 +2022-07-28 12:50, slack,- +2022-07-28 14:27, ebb,-26 +2022-07-28 16:32, slack,- +2022-07-28 21:23, flood,39 +2022-07-29 00:56, slack,- +2022-07-29 02:45, ebb,-29 +2022-07-29 05:14, slack,- +2022-07-29 11:05, flood,42 +2022-07-29 13:32, slack,- +2022-07-29 15:03, ebb,-27 +2022-07-29 17:14, slack,- +2022-07-29 21:59, flood,42 +2022-07-30 01:38, slack,- +2022-07-30 03:21, ebb,-31 +2022-07-30 05:50, slack,- +2022-07-30 10:47, flood,43 +2022-07-30 14:14, slack,- +2022-07-30 15:45, ebb,-29 +2022-07-30 17:50, slack,- +2022-07-30 22:41, flood,44 +2022-07-31 02:14, slack,- +2022-07-31 04:03, ebb,-33 +2022-07-31 06:26, slack,- +2022-07-31 11:23, flood,44 +2022-07-31 14:50, slack,- +2022-07-31 16:27, ebb,-30 +2022-07-31 18:32, slack,- +2022-07-31 23:23, flood,45 +2022-08-01 02:56, slack,- +2022-08-01 04:45, ebb,-34 +2022-08-01 07:02, slack,- +2022-08-01 11:59, flood,45 +2022-08-01 15:32, slack,- +2022-08-01 17:09, ebb,-32 +2022-08-01 19:14, slack,- +2022-08-02 00:05, flood,46 +2022-08-02 03:32, slack,- +2022-08-02 05:27, ebb,-35 +2022-08-02 07:38, slack,- +2022-08-02 12:41, flood,46 +2022-08-02 16:14, slack,- +2022-08-02 17:51, ebb,-33 +2022-08-02 19:56, slack,- +2022-08-03 00:59, flood,45 +2022-08-03 04:20, slack,- +2022-08-03 06:15, ebb,-35 +2022-08-03 08:20, slack,- +2022-08-03 13:29, flood,47 +2022-08-03 16:50, slack,- +2022-08-03 18:39, ebb,-33 +2022-08-03 20:44, slack,- +2022-08-04 01:53, flood,45 +2022-08-04 05:08, slack,- +2022-08-04 07:03, ebb,-34 +2022-08-04 09:08, slack,- +2022-08-04 14:17, flood,48 +2022-08-04 17:38, slack,- +2022-08-04 19:27, ebb,-33 +2022-08-04 21:44, slack,- +2022-08-05 02:41, flood,44 +2022-08-05 05:56, slack,- +2022-08-05 07:51, ebb,-32 +2022-08-05 09:56, slack,- +2022-08-05 15:05, flood,48 +2022-08-05 18:26, slack,- +2022-08-05 20:21, ebb,-32 +2022-08-05 22:44, slack,- +2022-08-06 03:35, flood,42 +2022-08-06 06:56, slack,- +2022-08-06 08:45, ebb,-30 +2022-08-06 10:56, slack,- +2022-08-06 15:53, flood,47 +2022-08-06 19:20, slack,- +2022-08-06 21:15, ebb,-32 +2022-08-06 23:44, slack,- +2022-08-07 04:35, flood,41 +2022-08-07 08:02, slack,- +2022-08-07 09:45, ebb,-28 +2022-08-07 11:56, slack,- +2022-08-07 16:47, flood,45 +2022-08-07 20:20, slack,- +2022-08-07 22:15, ebb,-32 +2022-08-08 00:44, slack,- +2022-08-08 05:35, flood,40 +2022-08-08 09:08, slack,- +2022-08-08 10:45, ebb,-28 +2022-08-08 12:56, slack,- +2022-08-08 17:47, flood,44 +2022-08-08 21:26, slack,- +2022-08-08 23:15, ebb,-32 +2022-08-09 01:50, slack,- +2022-08-09 06:47, flood,40 +2022-08-09 10:14, slack,- +2022-08-09 11:45, ebb,-28 +2022-08-09 13:56, slack,- +2022-08-09 18:53, flood,44 +2022-08-09 22:26, slack,- +2022-08-10 00:15, ebb,-33 +2022-08-10 02:44, slack,- +2022-08-10 08:59, flood,44 +2022-08-10 11:14, slack,- +2022-08-10 12:45, ebb,-30 +2022-08-10 14:56, slack,- +2022-08-10 20:05, flood,45 +2022-08-10 23:26, slack,- +2022-08-11 01:09, ebb,-34 +2022-08-11 03:44, slack,- +2022-08-11 10:05, flood,50 +2022-08-11 12:08, slack,- +2022-08-11 13:45, ebb,-31 +2022-08-11 15:50, slack,- +2022-08-11 21:47, flood,48 +2022-08-12 00:20, slack,- +2022-08-12 02:09, ebb,-35 +2022-08-12 04:38, slack,- +2022-08-12 10:59, flood,54 +2022-08-12 13:02, slack,- +2022-08-12 14:39, ebb,-32 +2022-08-12 16:50, slack,- +2022-08-12 22:47, flood,51 +2022-08-13 01:14, slack,- +2022-08-13 03:03, ebb,-36 +2022-08-13 05:32, slack,- +2022-08-13 11:47, flood,55 +2022-08-13 13:50, slack,- +2022-08-13 15:33, ebb,-33 +2022-08-13 17:44, slack,- +2022-08-13 23:47, flood,51 +2022-08-14 02:08, slack,- +2022-08-14 03:51, ebb,-36 +2022-08-14 06:20, slack,- +2022-08-14 12:41, flood,54 +2022-08-14 14:44, slack,- +2022-08-14 16:21, ebb,-33 +2022-08-14 18:32, slack,- +2022-08-15 00:47, flood,50 +2022-08-15 02:56, slack,- +2022-08-15 04:39, ebb,-35 +2022-08-15 07:08, slack,- +2022-08-15 13:35, flood,53 +2022-08-15 15:32, slack,- +2022-08-15 17:09, ebb,-32 +2022-08-15 19:26, slack,- +2022-08-16 01:41, flood,48 +2022-08-16 03:50, slack,- +2022-08-16 05:27, ebb,-33 +2022-08-16 07:56, slack,- +2022-08-16 14:23, flood,50 +2022-08-16 16:20, slack,- +2022-08-16 17:57, ebb,-30 +2022-08-16 20:20, slack,- +2022-08-17 02:41, flood,46 +2022-08-17 04:38, slack,- +2022-08-17 06:15, ebb,-30 +2022-08-17 08:44, slack,- +2022-08-17 15:11, flood,46 +2022-08-17 17:14, slack,- +2022-08-17 18:45, ebb,-28 +2022-08-17 21:20, slack,- +2022-08-18 03:29, flood,42 +2022-08-18 05:32, slack,- +2022-08-18 07:03, ebb,-27 +2022-08-18 09:38, slack,- +2022-08-18 16:05, flood,41 +2022-08-18 18:02, slack,- +2022-08-18 19:33, ebb,-26 +2022-08-18 22:20, slack,- +2022-08-19 04:29, flood,39 +2022-08-19 06:26, slack,- +2022-08-19 07:51, ebb,-24 +2022-08-19 10:32, slack,- +2022-08-19 16:59, flood,37 +2022-08-19 18:50, slack,- +2022-08-19 20:27, ebb,-23 +2022-08-19 23:20, slack,- +2022-08-20 05:23, flood,37 +2022-08-20 07:20, slack,- +2022-08-20 08:45, ebb,-21 +2022-08-20 11:26, slack,- +2022-08-20 17:53, flood,34 +2022-08-20 19:44, slack,- +2022-08-20 23:09, ebb,-22 +2022-08-21 00:14, slack,- +2022-08-21 06:23, flood,36 +2022-08-21 08:14, slack,- +2022-08-21 09:45, ebb,-19 +2022-08-21 12:14, slack,- +2022-08-21 18:47, flood,32 +2022-08-21 20:38, slack,- +2022-08-21 23:57, ebb,-23 +2022-08-22 01:02, slack,- +2022-08-22 07:17, flood,37 +2022-08-22 09:14, slack,- +2022-08-22 12:03, ebb,-20 +2022-08-22 13:08, slack,- +2022-08-22 19:41, flood,31 +2022-08-22 21:32, slack,- +2022-08-23 00:45, ebb,-24 +2022-08-23 01:56, slack,- +2022-08-23 08:11, flood,38 +2022-08-23 10:02, slack,- +2022-08-23 12:45, ebb,-21 +2022-08-23 13:50, slack,- +2022-08-23 18:35, flood,30 +2022-08-23 20:29, flood,32 +2022-08-23 22:20, slack,- +2022-08-24 01:27, ebb,-25 +2022-08-24 02:38, slack,- +2022-08-24 08:59, flood,39 +2022-08-24 10:50, slack,- +2022-08-24 12:45, ebb,-22 +2022-08-24 14:38, slack,- +2022-08-24 19:17, flood,33 +2022-08-24 21:11, flood,33 +2022-08-24 23:02, slack,- +2022-08-25 01:15, ebb,-25 +2022-08-25 03:20, slack,- +2022-08-25 09:41, flood,40 +2022-08-25 11:38, slack,- +2022-08-25 13:15, ebb,-24 +2022-08-25 15:20, slack,- +2022-08-25 20:05, flood,37 +2022-08-25 23:44, slack,- +2022-08-26 01:33, ebb,-27 +2022-08-26 04:02, slack,- +2022-08-26 10:11, flood,40 +2022-08-26 12:20, slack,- +2022-08-26 13:51, ebb,-26 +2022-08-26 16:02, slack,- +2022-08-26 20:47, flood,41 +2022-08-27 00:26, slack,- +2022-08-27 02:09, ebb,-30 +2022-08-27 04:38, slack,- +2022-08-27 09:47, flood,42 +2022-08-27 12:56, slack,- +2022-08-27 14:33, ebb,-29 +2022-08-27 16:44, slack,- +2022-08-27 21:29, flood,45 +2022-08-28 01:02, slack,- +2022-08-28 02:51, ebb,-32 +2022-08-28 05:14, slack,- +2022-08-28 10:11, flood,46 +2022-08-28 13:38, slack,- +2022-08-28 15:15, ebb,-31 +2022-08-28 17:20, slack,- +2022-08-28 22:11, flood,48 +2022-08-29 01:44, slack,- +2022-08-29 03:33, ebb,-35 +2022-08-29 05:50, slack,- +2022-08-29 10:41, flood,48 +2022-08-29 14:14, slack,- +2022-08-29 15:57, ebb,-33 +2022-08-29 18:02, slack,- +2022-08-29 22:53, flood,50 +2022-08-30 02:26, slack,- +2022-08-30 04:15, ebb,-36 +2022-08-30 06:26, slack,- +2022-08-30 11:23, flood,50 +2022-08-30 14:56, slack,- +2022-08-30 16:39, ebb,-35 +2022-08-30 18:38, slack,- +2022-08-30 23:41, flood,50 +2022-08-31 03:08, slack,- +2022-08-31 05:03, ebb,-37 +2022-08-31 07:02, slack,- +2022-08-31 12:05, flood,51 +2022-08-31 15:38, slack,- +2022-08-31 17:27, ebb,-36 +2022-08-31 19:26, slack,- +2022-09-01 00:29, flood,48 +2022-09-01 03:50, slack,- +2022-09-01 05:45, ebb,-37 +2022-09-01 07:44, slack,- +2022-09-01 12:53, flood,50 +2022-09-01 16:20, slack,- +2022-09-01 18:15, ebb,-36 +2022-09-01 20:14, slack,- +2022-09-02 01:23, flood,46 +2022-09-02 04:44, slack,- +2022-09-02 06:33, ebb,-35 +2022-09-02 08:26, slack,- +2022-09-02 13:47, flood,49 +2022-09-02 17:08, slack,- +2022-09-02 19:03, ebb,-36 +2022-09-02 21:14, slack,- +2022-09-03 02:23, flood,44 +2022-09-03 05:38, slack,- +2022-09-03 07:27, ebb,-33 +2022-09-03 09:26, slack,- +2022-09-03 14:35, flood,47 +2022-09-03 18:02, slack,- +2022-09-03 19:51, ebb,-34 +2022-09-03 22:20, slack,- +2022-09-04 03:17, flood,42 +2022-09-04 06:38, slack,- +2022-09-04 08:21, ebb,-30 +2022-09-04 10:32, slack,- +2022-09-04 15:35, flood,45 +2022-09-04 18:56, slack,- +2022-09-04 20:45, ebb,-32 +2022-09-04 23:26, slack,- +2022-09-05 04:23, flood,40 +2022-09-05 07:44, slack,- +2022-09-05 09:21, ebb,-27 +2022-09-05 11:38, slack,- +2022-09-05 16:29, flood,43 +2022-09-05 20:02, slack,- +2022-09-05 21:51, ebb,-30 +2022-09-06 00:32, slack,- +2022-09-06 05:35, flood,39 +2022-09-06 08:50, slack,- +2022-09-06 10:27, ebb,-26 +2022-09-06 12:44, slack,- +2022-09-06 17:35, flood,42 +2022-09-06 21:08, slack,- +2022-09-06 22:57, ebb,-30 +2022-09-07 01:32, slack,- +2022-09-07 07:41, flood,41 +2022-09-07 09:56, slack,- +2022-09-07 11:33, ebb,-27 +2022-09-07 13:44, slack,- +2022-09-07 18:53, flood,42 +2022-09-07 22:14, slack,- +2022-09-07 23:57, ebb,-31 +2022-09-08 02:32, slack,- +2022-09-08 08:53, flood,47 +2022-09-08 10:56, slack,- +2022-09-08 12:33, ebb,-29 +2022-09-08 14:44, slack,- +2022-09-08 20:59, flood,46 +2022-09-08 23:14, slack,- +2022-09-09 00:57, ebb,-32 +2022-09-09 03:26, slack,- +2022-09-09 09:53, flood,53 +2022-09-09 11:50, slack,- +2022-09-09 13:33, ebb,-31 +2022-09-09 15:38, slack,- +2022-09-09 21:59, flood,51 +2022-09-10 00:08, slack,- +2022-09-10 01:57, ebb,-34 +2022-09-10 04:20, slack,- +2022-09-10 10:41, flood,56 +2022-09-10 12:38, slack,- +2022-09-10 14:33, ebb,-32 +2022-09-10 16:32, slack,- +2022-09-10 22:47, flood,54 +2022-09-11 00:56, slack,- +2022-09-11 02:45, ebb,-34 +2022-09-11 05:08, slack,- +2022-09-11 11:29, flood,57 +2022-09-11 13:32, slack,- +2022-09-11 15:21, ebb,-33 +2022-09-11 17:26, slack,- +2022-09-11 23:41, flood,54 +2022-09-12 01:50, slack,- +2022-09-12 03:33, ebb,-34 +2022-09-12 05:56, slack,- +2022-09-12 12:17, flood,55 +2022-09-12 14:20, slack,- +2022-09-12 16:09, ebb,-33 +2022-09-12 18:14, slack,- +2022-09-13 00:29, flood,52 +2022-09-13 02:38, slack,- +2022-09-13 04:21, ebb,-33 +2022-09-13 06:38, slack,- +2022-09-13 13:05, flood,51 +2022-09-13 15:08, slack,- +2022-09-13 16:51, ebb,-32 +2022-09-13 19:08, slack,- +2022-09-14 01:23, flood,49 +2022-09-14 03:26, slack,- +2022-09-14 05:03, ebb,-31 +2022-09-14 07:26, slack,- +2022-09-14 13:59, flood,46 +2022-09-14 15:56, slack,- +2022-09-14 17:33, ebb,-30 +2022-09-14 19:56, slack,- +2022-09-15 02:17, flood,45 +2022-09-15 04:14, slack,- +2022-09-15 05:51, ebb,-29 +2022-09-15 08:14, slack,- +2022-09-15 14:47, flood,41 +2022-09-15 16:38, slack,- +2022-09-15 18:21, ebb,-28 +2022-09-15 20:50, slack,- +2022-09-16 03:11, flood,42 +2022-09-16 05:08, slack,- +2022-09-16 06:33, ebb,-26 +2022-09-16 09:02, slack,- +2022-09-16 15:35, flood,36 +2022-09-16 17:26, slack,- +2022-09-16 19:03, ebb,-26 +2022-09-16 21:50, slack,- +2022-09-17 03:59, flood,38 +2022-09-17 05:56, slack,- +2022-09-17 07:21, ebb,-23 +2022-09-17 09:56, slack,- +2022-09-17 16:23, flood,32 +2022-09-17 18:20, slack,- +2022-09-17 19:51, ebb,-23 +2022-09-17 22:44, slack,- +2022-09-18 04:53, flood,36 +2022-09-18 06:50, slack,- +2022-09-18 08:09, ebb,-21 +2022-09-18 10:50, slack,- +2022-09-18 15:41, flood,29 +2022-09-18 17:11, flood,29 +2022-09-18 19:08, slack,- +2022-09-18 20:39, ebb,-21 +2022-09-18 23:38, slack,- +2022-09-19 05:53, flood,34 +2022-09-19 07:44, slack,- +2022-09-19 09:09, ebb,-19 +2022-09-19 11:44, slack,- +2022-09-19 16:23, flood,28 +2022-09-19 17:29, flood,27 +2022-09-19 20:02, slack,- +2022-09-19 21:39, ebb,-20 +2022-09-19 23:33, ebb,-21 +2022-09-20 00:32, slack,- +2022-09-20 06:47, flood,34 +2022-09-20 08:38, slack,- +2022-09-20 10:09, ebb,-19 +2022-09-20 12:32, slack,- +2022-09-20 17:11, flood,29 +2022-09-20 20:50, slack,- +2022-09-21 00:21, ebb,-22 +2022-09-21 01:20, slack,- +2022-09-21 07:35, flood,34 +2022-09-21 09:26, slack,- +2022-09-21 11:15, ebb,-20 +2022-09-21 13:20, slack,- +2022-09-21 17:53, flood,31 +2022-09-21 21:44, slack,- +2022-09-22 00:51, ebb,-22 +2022-09-22 02:02, slack,- +2022-09-22 08:23, flood,35 +2022-09-22 10:14, slack,- +2022-09-22 11:57, ebb,-22 +2022-09-22 14:08, slack,- +2022-09-22 18:41, flood,34 +2022-09-22 22:26, slack,- +2022-09-23 00:15, ebb,-25 +2022-09-23 02:44, slack,- +2022-09-23 08:59, flood,36 +2022-09-23 11:02, slack,- +2022-09-23 12:39, ebb,-25 +2022-09-23 14:50, slack,- +2022-09-23 19:29, flood,39 +2022-09-23 23:14, slack,- +2022-09-24 00:57, ebb,-28 +2022-09-24 03:20, slack,- +2022-09-24 08:23, flood,40 +2022-09-24 11:44, slack,- +2022-09-24 13:21, ebb,-28 +2022-09-24 15:32, slack,- +2022-09-24 20:17, flood,43 +2022-09-24 23:50, slack,- +2022-09-25 01:39, ebb,-31 +2022-09-25 03:56, slack,- +2022-09-25 08:53, flood,44 +2022-09-25 12:20, slack,- +2022-09-25 14:03, ebb,-31 +2022-09-25 16:08, slack,- +2022-09-25 20:59, flood,47 +2022-09-26 00:32, slack,- +2022-09-26 02:21, ebb,-33 +2022-09-26 04:32, slack,- +2022-09-26 09:29, flood,48 +2022-09-26 13:02, slack,- +2022-09-26 14:45, ebb,-34 +2022-09-26 16:50, slack,- +2022-09-26 21:47, flood,51 +2022-09-27 01:14, slack,- +2022-09-27 03:03, ebb,-36 +2022-09-27 05:08, slack,- +2022-09-27 10:11, flood,52 +2022-09-27 13:38, slack,- +2022-09-27 15:27, ebb,-36 +2022-09-27 17:32, slack,- +2022-09-27 22:29, flood,52 +2022-09-28 01:56, slack,- +2022-09-28 03:51, ebb,-37 +2022-09-28 05:50, slack,- +2022-09-28 10:47, flood,53 +2022-09-28 14:20, slack,- +2022-09-28 16:15, ebb,-38 +2022-09-28 18:14, slack,- +2022-09-28 23:17, flood,52 +2022-09-29 02:44, slack,- +2022-09-29 04:33, ebb,-37 +2022-09-29 06:26, slack,- +2022-09-29 11:29, flood,53 +2022-09-29 15:02, slack,- +2022-09-29 16:57, ebb,-39 +2022-09-29 19:02, slack,- +2022-09-30 00:05, flood,50 +2022-09-30 03:32, slack,- +2022-09-30 05:21, ebb,-37 +2022-09-30 07:14, slack,- +2022-09-30 12:23, flood,50 +2022-09-30 15:50, slack,- +2022-09-30 17:45, ebb,-38 +2022-09-30 19:50, slack,- +2022-10-01 00:59, flood,47 +2022-10-01 04:26, slack,- +2022-10-01 06:15, ebb,-35 +2022-10-01 08:02, slack,- +2022-10-01 13:17, flood,47 +2022-10-01 16:44, slack,- +2022-10-01 18:39, ebb,-37 +2022-10-01 20:50, slack,- +2022-10-02 02:05, flood,44 +2022-10-02 05:26, slack,- +2022-10-02 07:03, ebb,-32 +2022-10-02 09:02, slack,- +2022-10-02 14:17, flood,44 +2022-10-02 17:38, slack,- +2022-10-02 19:27, ebb,-34 +2022-10-02 22:02, slack,- +2022-10-03 03:05, flood,41 +2022-10-03 06:26, slack,- +2022-10-03 07:57, ebb,-29 +2022-10-03 10:14, slack,- +2022-10-03 15:17, flood,42 +2022-10-03 18:44, slack,- +2022-10-03 20:27, ebb,-31 +2022-10-03 23:08, slack,- +2022-10-04 04:17, flood,39 +2022-10-04 07:32, slack,- +2022-10-04 08:57, ebb,-27 +2022-10-04 11:26, slack,- +2022-10-04 16:23, flood,40 +2022-10-04 19:50, slack,- +2022-10-04 21:27, ebb,-29 +2022-10-05 00:14, slack,- +2022-10-05 06:17, flood,40 +2022-10-05 08:32, slack,- +2022-10-05 10:09, ebb,-26 +2022-10-05 12:32, slack,- +2022-10-05 17:35, flood,40 +2022-10-05 20:56, slack,- +2022-10-05 22:33, ebb,-28 +2022-10-06 01:20, slack,- +2022-10-06 07:35, flood,44 +2022-10-06 09:38, slack,- +2022-10-06 11:21, ebb,-27 +2022-10-06 13:32, slack,- +2022-10-06 19:41, flood,43 +2022-10-06 21:56, slack,- +2022-10-06 23:45, ebb,-29 +2022-10-07 02:14, slack,- +2022-10-07 08:35, flood,50 +2022-10-07 10:38, slack,- +2022-10-07 12:33, ebb,-29 +2022-10-07 14:32, slack,- +2022-10-07 20:53, flood,49 +2022-10-07 22:56, slack,- +2022-10-08 00:51, ebb,-31 +2022-10-08 03:08, slack,- +2022-10-08 09:29, flood,54 +2022-10-08 11:26, slack,- +2022-10-08 13:33, ebb,-31 +2022-10-08 15:26, slack,- +2022-10-08 21:47, flood,53 +2022-10-08 23:50, slack,- +2022-10-09 01:45, ebb,-32 +2022-10-09 03:56, slack,- +2022-10-09 10:23, flood,56 +2022-10-09 12:20, slack,- +2022-10-09 14:21, ebb,-32 +2022-10-09 16:20, slack,- +2022-10-09 22:35, flood,55 +2022-10-10 00:38, slack,- +2022-10-10 02:33, ebb,-32 +2022-10-10 04:44, slack,- +2022-10-10 11:05, flood,56 +2022-10-10 13:08, slack,- +2022-10-10 15:09, ebb,-33 +2022-10-10 17:08, slack,- +2022-10-10 23:23, flood,55 +2022-10-11 01:26, slack,- +2022-10-11 03:15, ebb,-32 +2022-10-11 05:26, slack,- +2022-10-11 11:53, flood,52 +2022-10-11 13:56, slack,- +2022-10-11 15:51, ebb,-33 +2022-10-11 17:56, slack,- +2022-10-12 00:11, flood,52 +2022-10-12 02:14, slack,- +2022-10-12 03:57, ebb,-31 +2022-10-12 06:14, slack,- +2022-10-12 12:41, flood,47 +2022-10-12 14:38, slack,- +2022-10-12 16:27, ebb,-32 +2022-10-12 18:44, slack,- +2022-10-13 01:05, flood,49 +2022-10-13 03:02, slack,- +2022-10-13 04:39, ebb,-29 +2022-10-13 06:56, slack,- +2022-10-13 13:29, flood,42 +2022-10-13 15:26, slack,- +2022-10-13 17:09, ebb,-30 +2022-10-13 19:32, slack,- +2022-10-14 01:53, flood,45 +2022-10-14 03:50, slack,- +2022-10-14 05:21, ebb,-27 +2022-10-14 07:38, slack,- +2022-10-14 14:17, flood,37 +2022-10-14 16:08, slack,- +2022-10-14 17:51, ebb,-28 +2022-10-14 20:26, slack,- +2022-10-15 02:47, flood,41 +2022-10-15 04:44, slack,- +2022-10-15 06:09, ebb,-25 +2022-10-15 08:32, slack,- +2022-10-15 14:59, flood,32 +2022-10-15 16:56, slack,- +2022-10-15 18:33, ebb,-26 +2022-10-15 21:14, slack,- +2022-10-16 03:35, flood,38 +2022-10-16 05:32, slack,- +2022-10-16 06:51, ebb,-23 +2022-10-16 09:26, slack,- +2022-10-16 14:23, flood,30 +2022-10-16 17:44, slack,- +2022-10-16 19:15, ebb,-24 +2022-10-16 22:14, slack,- +2022-10-17 04:23, flood,35 +2022-10-17 06:20, slack,- +2022-10-17 07:39, ebb,-21 +2022-10-17 10:20, slack,- +2022-10-17 14:59, flood,29 +2022-10-17 18:32, slack,- +2022-10-17 20:03, ebb,-22 +2022-10-17 23:02, slack,- +2022-10-18 05:11, flood,33 +2022-10-18 07:08, slack,- +2022-10-18 08:33, ebb,-20 +2022-10-18 11:14, slack,- +2022-10-18 15:47, flood,29 +2022-10-18 19:20, slack,- +2022-10-18 20:51, ebb,-21 +2022-10-18 23:56, slack,- +2022-10-19 05:53, flood,32 +2022-10-19 08:02, slack,- +2022-10-19 09:27, ebb,-20 +2022-10-19 12:02, slack,- +2022-10-19 16:29, flood,31 +2022-10-19 20:14, slack,- +2022-10-19 21:51, ebb,-21 +2022-10-20 00:38, slack,- +2022-10-20 05:29, flood,32 +2022-10-20 08:50, slack,- +2022-10-20 10:21, ebb,-21 +2022-10-20 12:50, slack,- +2022-10-20 17:17, flood,33 +2022-10-20 21:02, slack,- +2022-10-20 22:45, ebb,-23 +2022-10-21 01:20, slack,- +2022-10-21 06:05, flood,35 +2022-10-21 09:38, slack,- +2022-10-21 11:15, ebb,-23 +2022-10-21 13:32, slack,- +2022-10-21 18:05, flood,37 +2022-10-21 21:50, slack,- +2022-10-21 23:33, ebb,-25 +2022-10-22 02:02, slack,- +2022-10-22 06:47, flood,38 +2022-10-22 10:20, slack,- +2022-10-22 11:57, ebb,-26 +2022-10-22 14:14, slack,- +2022-10-22 18:53, flood,40 +2022-10-22 22:32, slack,- +2022-10-23 00:15, ebb,-28 +2022-10-23 02:38, slack,- +2022-10-23 07:29, flood,42 +2022-10-23 11:02, slack,- +2022-10-23 12:45, ebb,-30 +2022-10-23 14:56, slack,- +2022-10-23 19:41, flood,44 +2022-10-23 23:20, slack,- +2022-10-24 01:03, ebb,-31 +2022-10-24 03:20, slack,- +2022-10-24 08:11, flood,47 +2022-10-24 11:44, slack,- +2022-10-24 13:27, ebb,-33 +2022-10-24 15:38, slack,- +2022-10-24 20:29, flood,48 +2022-10-25 00:02, slack,- +2022-10-25 01:51, ebb,-34 +2022-10-25 03:56, slack,- +2022-10-25 08:53, flood,51 +2022-10-25 12:26, slack,- +2022-10-25 14:15, ebb,-36 +2022-10-25 16:20, slack,- +2022-10-25 21:17, flood,51 +2022-10-26 00:50, slack,- +2022-10-26 02:33, ebb,-36 +2022-10-26 04:32, slack,- +2022-10-26 09:35, flood,53 +2022-10-26 13:08, slack,- +2022-10-26 14:57, ebb,-38 +2022-10-26 17:08, slack,- +2022-10-26 22:05, flood,52 +2022-10-27 01:38, slack,- +2022-10-27 03:21, ebb,-37 +2022-10-27 05:14, slack,- +2022-10-27 10:17, flood,54 +2022-10-27 13:50, slack,- +2022-10-27 15:45, ebb,-40 +2022-10-27 17:50, slack,- +2022-10-27 22:53, flood,52 +2022-10-28 02:26, slack,- +2022-10-28 04:09, ebb,-37 +2022-10-28 06:02, slack,- +2022-10-28 11:05, flood,53 +2022-10-28 14:38, slack,- +2022-10-28 16:33, ebb,-40 +2022-10-28 18:44, slack,- +2022-10-28 23:47, flood,49 +2022-10-29 03:20, slack,- +2022-10-29 05:03, ebb,-36 +2022-10-29 06:50, slack,- +2022-10-29 11:59, flood,50 +2022-10-29 15:26, slack,- +2022-10-29 17:21, ebb,-39 +2022-10-29 19:38, slack,- +2022-10-30 00:47, flood,46 +2022-10-30 04:14, slack,- +2022-10-30 05:51, ebb,-34 +2022-10-30 07:44, slack,- +2022-10-30 12:59, flood,46 +2022-10-30 16:26, slack,- +2022-10-30 18:15, ebb,-37 +2022-10-30 20:38, slack,- +2022-10-31 01:59, flood,43 +2022-10-31 05:14, slack,- +2022-10-31 06:45, ebb,-31 +2022-10-31 08:50, slack,- +2022-10-31 14:05, flood,43 +2022-10-31 17:26, slack,- +2022-10-31 19:09, ebb,-34 +2022-10-31 21:44, slack,- +2022-11-01 03:11, flood,42 +2022-11-01 06:14, slack,- +2022-11-01 07:39, ebb,-29 +2022-11-01 10:02, slack,- +2022-11-01 15:11, flood,41 +2022-11-01 18:26, slack,- +2022-11-01 20:03, ebb,-31 +2022-11-01 22:56, slack,- +2022-11-02 04:47, flood,41 +2022-11-02 07:14, slack,- +2022-11-02 08:39, ebb,-27 +2022-11-02 11:14, slack,- +2022-11-02 16:23, flood,40 +2022-11-02 19:32, slack,- +2022-11-02 21:09, ebb,-28 +2022-11-02 23:56, slack,- +2022-11-03 06:11, flood,44 +2022-11-03 08:14, slack,- +2022-11-03 09:51, ebb,-26 +2022-11-03 12:20, slack,- +2022-11-03 18:11, flood,41 +2022-11-03 20:32, slack,- +2022-11-03 22:15, ebb,-27 +2022-11-04 00:56, slack,- +2022-11-04 07:17, flood,47 +2022-11-04 09:14, slack,- +2022-11-04 11:21, ebb,-27 +2022-11-04 13:20, slack,- +2022-11-04 19:29, flood,45 +2022-11-04 21:38, slack,- +2022-11-04 23:33, ebb,-28 +2022-11-05 01:50, slack,- +2022-11-05 08:11, flood,50 +2022-11-05 10:14, slack,- +2022-11-05 12:39, ebb,-29 +2022-11-05 14:20, slack,- +2022-11-05 20:35, flood,49 +2022-11-05 22:32, slack,- +2022-11-06 00:39, ebb,-29 +2022-11-06 02:44, slack,- +2022-11-06 09:11, flood,53 +2022-11-06 11:02, slack,- +2022-11-06 13:33, ebb,-31 +2022-11-06 15:08, slack,- +2022-11-06 21:29, flood,53 +2022-11-06 23:26, slack,- +2022-11-07 01:33, ebb,-30 +2022-11-07 03:32, slack,- +2022-11-07 09:59, flood,54 +2022-11-07 11:56, slack,- +2022-11-07 14:21, ebb,-32 +2022-11-07 16:02, slack,- +2022-11-07 22:17, flood,54 +2022-11-08 00:20, slack,- +2022-11-08 02:15, ebb,-30 +2022-11-08 04:14, slack,- +2022-11-08 10:47, flood,52 +2022-11-08 12:38, slack,- +2022-11-08 14:57, ebb,-32 +2022-11-08 16:50, slack,- +2022-11-08 23:05, flood,54 +2022-11-09 01:08, slack,- +2022-11-09 02:57, ebb,-29 +2022-11-09 05:02, slack,- +2022-11-09 11:29, flood,48 +2022-11-09 13:26, slack,- +2022-11-09 15:33, ebb,-32 +2022-11-09 17:38, slack,- +2022-11-09 23:53, flood,52 +2022-11-10 01:56, slack,- +2022-11-10 03:39, ebb,-29 +2022-11-10 05:44, slack,- +2022-11-10 12:11, flood,43 +2022-11-10 14:08, slack,- +2022-11-10 16:03, ebb,-31 +2022-11-10 18:20, slack,- +2022-11-11 00:41, flood,48 +2022-11-11 02:44, slack,- +2022-11-11 04:15, ebb,-28 +2022-11-11 06:26, slack,- +2022-11-11 12:59, flood,38 +2022-11-11 14:56, slack,- +2022-11-11 16:39, ebb,-30 +2022-11-11 19:08, slack,- +2022-11-12 01:29, flood,45 +2022-11-12 03:26, slack,- +2022-11-12 04:57, ebb,-26 +2022-11-12 07:14, slack,- +2022-11-12 12:05, flood,34 +2022-11-12 13:41, flood,34 +2022-11-12 15:38, slack,- +2022-11-12 17:21, ebb,-28 +2022-11-12 19:56, slack,- +2022-11-13 02:17, flood,41 +2022-11-13 04:14, slack,- +2022-11-13 05:39, ebb,-25 +2022-11-13 07:56, slack,- +2022-11-13 12:53, flood,32 +2022-11-13 16:26, slack,- +2022-11-13 18:03, ebb,-27 +2022-11-13 20:44, slack,- +2022-11-14 02:59, flood,38 +2022-11-14 05:02, slack,- +2022-11-14 06:27, ebb,-24 +2022-11-14 08:50, slack,- +2022-11-14 13:35, flood,31 +2022-11-14 17:08, slack,- +2022-11-14 18:45, ebb,-25 +2022-11-14 21:32, slack,- +2022-11-15 03:29, flood,35 +2022-11-15 05:44, slack,- +2022-11-15 07:09, ebb,-23 +2022-11-15 09:44, slack,- +2022-11-15 14:23, flood,31 +2022-11-15 17:56, slack,- +2022-11-15 19:27, ebb,-24 +2022-11-15 22:26, slack,- +2022-11-16 03:23, flood,34 +2022-11-16 06:32, slack,- +2022-11-16 07:57, ebb,-22 +2022-11-16 10:32, slack,- +2022-11-16 15:11, flood,32 +2022-11-16 18:38, slack,- +2022-11-16 20:15, ebb,-24 +2022-11-16 23:08, slack,- +2022-11-17 03:59, flood,34 +2022-11-17 07:20, slack,- +2022-11-17 08:45, ebb,-22 +2022-11-17 11:26, slack,- +2022-11-17 15:59, flood,34 +2022-11-17 19:26, slack,- +2022-11-17 21:03, ebb,-24 +2022-11-17 23:56, slack,- +2022-11-18 04:35, flood,36 +2022-11-18 08:08, slack,- +2022-11-18 09:39, ebb,-23 +2022-11-18 12:14, slack,- +2022-11-18 16:41, flood,36 +2022-11-18 20:14, slack,- +2022-11-18 21:57, ebb,-25 +2022-11-19 00:38, slack,- +2022-11-19 05:17, flood,39 +2022-11-19 08:56, slack,- +2022-11-19 10:33, ebb,-25 +2022-11-19 12:56, slack,- +2022-11-19 17:35, flood,38 +2022-11-19 21:08, slack,- +2022-11-19 22:51, ebb,-26 +2022-11-20 01:14, slack,- +2022-11-20 06:05, flood,42 +2022-11-20 09:38, slack,- +2022-11-20 11:21, ebb,-28 +2022-11-20 13:44, slack,- +2022-11-20 18:23, flood,41 +2022-11-20 21:56, slack,- +2022-11-20 23:45, ebb,-29 +2022-11-21 01:56, slack,- +2022-11-21 06:47, flood,45 +2022-11-21 10:26, slack,- +2022-11-21 12:09, ebb,-31 +2022-11-21 14:26, slack,- +2022-11-21 19:11, flood,44 +2022-11-21 22:50, slack,- +2022-11-22 00:33, ebb,-31 +2022-11-22 02:38, slack,- +2022-11-22 07:29, flood,48 +2022-11-22 11:08, slack,- +2022-11-22 12:57, ebb,-34 +2022-11-22 15:14, slack,- +2022-11-22 20:05, flood,47 +2022-11-22 23:38, slack,- +2022-11-23 01:21, ebb,-33 +2022-11-23 03:20, slack,- +2022-11-23 08:17, flood,51 +2022-11-23 11:56, slack,- +2022-11-23 13:45, ebb,-37 +2022-11-23 15:56, slack,- +2022-11-23 20:59, flood,49 +2022-11-24 00:26, slack,- +2022-11-24 02:09, ebb,-34 +2022-11-24 04:08, slack,- +2022-11-24 09:05, flood,53 +2022-11-24 12:38, slack,- +2022-11-24 14:33, ebb,-39 +2022-11-24 16:44, slack,- +2022-11-24 21:47, flood,51 +2022-11-25 01:20, slack,- +2022-11-25 03:03, ebb,-35 +2022-11-25 04:50, slack,- +2022-11-25 09:59, flood,53 +2022-11-25 13:26, slack,- +2022-11-25 15:21, ebb,-40 +2022-11-25 17:38, slack,- +2022-11-25 22:41, flood,51 +2022-11-26 02:14, slack,- +2022-11-26 03:51, ebb,-35 +2022-11-26 05:44, slack,- +2022-11-26 10:47, flood,51 +2022-11-26 14:20, slack,- +2022-11-26 16:15, ebb,-40 +2022-11-26 18:26, slack,- +2022-11-26 23:35, flood,49 +2022-11-27 03:08, slack,- +2022-11-27 04:39, ebb,-34 +2022-11-27 06:38, slack,- +2022-11-27 11:41, flood,48 +2022-11-27 15:14, slack,- +2022-11-27 17:03, ebb,-39 +2022-11-27 19:26, slack,- +2022-11-28 00:47, flood,46 +2022-11-28 04:02, slack,- +2022-11-28 05:33, ebb,-33 +2022-11-28 07:38, slack,- +2022-11-28 12:47, flood,45 +2022-11-28 16:08, slack,- +2022-11-28 17:57, ebb,-37 +2022-11-28 20:26, slack,- +2022-11-29 02:11, flood,44 +2022-11-29 04:56, slack,- +2022-11-29 06:27, ebb,-31 +2022-11-29 08:44, slack,- +2022-11-29 13:59, flood,42 +2022-11-29 17:08, slack,- +2022-11-29 18:51, ebb,-34 +2022-11-29 21:26, slack,- +2022-11-30 03:35, flood,44 +2022-11-30 05:56, slack,- +2022-11-30 07:21, ebb,-29 +2022-11-30 09:50, slack,- +2022-11-30 15:11, flood,41 +2022-11-30 18:08, slack,- +2022-11-30 19:45, ebb,-31 +2022-11-30 22:32, slack,- +2022-12-01 04:47, flood,45 +2022-12-01 06:56, slack,- +2022-12-01 08:21, ebb,-27 +2022-12-01 11:02, slack,- +2022-12-01 16:41, flood,41 +2022-12-01 19:08, slack,- +2022-12-01 20:45, ebb,-28 +2022-12-01 23:32, slack,- +2022-12-02 05:47, flood,46 +2022-12-02 07:50, slack,- +2022-12-02 09:27, ebb,-26 +2022-12-02 12:02, slack,- +2022-12-02 18:05, flood,42 +2022-12-02 20:14, slack,- +2022-12-02 21:51, ebb,-26 +2022-12-03 00:32, slack,- +2022-12-03 06:47, flood,47 +2022-12-03 08:50, slack,- +2022-12-03 11:33, ebb,-27 +2022-12-03 13:02, slack,- +2022-12-03 19:11, flood,45 +2022-12-03 21:14, slack,- +2022-12-03 23:21, ebb,-26 +2022-12-04 01:26, slack,- +2022-12-04 07:47, flood,48 +2022-12-04 09:44, slack,- +2022-12-04 12:33, ebb,-29 +2022-12-04 13:56, slack,- +2022-12-04 20:11, flood,47 +2022-12-04 22:08, slack,- +2022-12-05 00:33, ebb,-27 +2022-12-05 02:14, slack,- +2022-12-05 08:41, flood,49 +2022-12-05 10:38, slack,- +2022-12-05 13:21, ebb,-30 +2022-12-05 14:50, slack,- +2022-12-05 21:11, flood,50 +2022-12-05 23:02, slack,- +2022-12-06 01:21, ebb,-27 +2022-12-06 03:02, slack,- +2022-12-06 09:35, flood,49 +2022-12-06 11:26, slack,- +2022-12-06 14:09, ebb,-31 +2022-12-06 15:44, slack,- +2022-12-06 21:59, flood,52 +2022-12-06 23:56, slack,- +2022-12-07 02:03, ebb,-27 +2022-12-07 03:44, slack,- +2022-12-07 10:23, flood,47 +2022-12-07 12:14, slack,- +2022-12-07 14:51, ebb,-31 +2022-12-07 16:26, slack,- +2022-12-07 22:47, flood,52 +2022-12-08 00:44, slack,- +2022-12-08 02:39, ebb,-27 +2022-12-08 04:32, slack,- +2022-12-08 11:05, flood,44 +2022-12-08 12:56, slack,- +2022-12-08 15:21, ebb,-31 +2022-12-08 17:14, slack,- +2022-12-08 23:29, flood,50 +2022-12-09 01:32, slack,- +2022-12-09 03:15, ebb,-27 +2022-12-09 05:14, slack,- +2022-12-09 11:47, flood,41 +2022-12-09 13:44, slack,- +2022-12-09 15:39, ebb,-30 +2022-12-09 17:56, slack,- +2022-12-10 00:17, flood,47 +2022-12-10 02:14, slack,- +2022-12-10 03:51, ebb,-26 +2022-12-10 06:02, slack,- +2022-12-10 11:05, flood,36 +2022-12-10 12:23, flood,36 +2022-12-10 14:26, slack,- +2022-12-10 16:15, ebb,-29 +2022-12-10 18:44, slack,- +2022-12-11 00:59, flood,44 +2022-12-11 03:02, slack,- +2022-12-11 04:33, ebb,-26 +2022-12-11 06:44, slack,- +2022-12-11 11:29, flood,35 +2022-12-11 15:08, slack,- +2022-12-11 16:51, ebb,-29 +2022-12-11 19:26, slack,- +2022-12-12 01:47, flood,41 +2022-12-12 03:44, slack,- +2022-12-12 05:15, ebb,-26 +2022-12-12 07:26, slack,- +2022-12-12 12:11, flood,35 +2022-12-12 15:50, slack,- +2022-12-12 17:33, ebb,-28 +2022-12-12 20:08, slack,- +2022-12-13 02:11, flood,38 +2022-12-13 04:26, slack,- +2022-12-13 05:57, ebb,-25 +2022-12-13 08:14, slack,- +2022-12-13 12:59, flood,35 +2022-12-13 16:32, slack,- +2022-12-13 18:15, ebb,-28 +2022-12-13 20:50, slack,- +2022-12-14 02:05, flood,37 +2022-12-14 05:14, slack,- +2022-12-14 06:39, ebb,-25 +2022-12-14 09:02, slack,- +2022-12-14 13:47, flood,35 +2022-12-14 17:14, slack,- +2022-12-14 18:57, ebb,-27 +2022-12-14 21:38, slack,- +2022-12-15 02:35, flood,38 +2022-12-15 05:56, slack,- +2022-12-15 07:21, ebb,-25 +2022-12-15 09:50, slack,- +2022-12-15 14:35, flood,36 +2022-12-15 17:56, slack,- +2022-12-15 19:39, ebb,-27 +2022-12-15 22:20, slack,- +2022-12-16 03:11, flood,39 +2022-12-16 06:38, slack,- +2022-12-16 08:09, ebb,-25 +2022-12-16 10:44, slack,- +2022-12-16 15:23, flood,37 +2022-12-16 18:44, slack,- +2022-12-16 20:27, ebb,-27 +2022-12-16 23:08, slack,- +2022-12-17 03:53, flood,41 +2022-12-17 07:26, slack,- +2022-12-17 08:57, ebb,-26 +2022-12-17 11:32, slack,- +2022-12-17 16:11, flood,38 +2022-12-17 19:32, slack,- +2022-12-17 21:21, ebb,-27 +2022-12-17 23:50, slack,- +2022-12-18 04:35, flood,43 +2022-12-18 08:08, slack,- +2022-12-18 09:51, ebb,-27 +2022-12-18 12:20, slack,- +2022-12-18 16:59, flood,40 +2022-12-18 20:26, slack,- +2022-12-18 22:15, ebb,-28 +2022-12-19 00:32, slack,- +2022-12-19 05:23, flood,45 +2022-12-19 08:56, slack,- +2022-12-19 10:45, ebb,-29 +2022-12-19 13:08, slack,- +2022-12-19 17:53, flood,41 +2022-12-19 21:26, slack,- +2022-12-19 23:09, ebb,-29 +2022-12-20 01:20, slack,- +2022-12-20 06:11, flood,47 +2022-12-20 09:50, slack,- +2022-12-20 11:39, ebb,-32 +2022-12-20 14:02, slack,- +2022-12-20 18:47, flood,43 +2022-12-20 22:20, slack,- +2022-12-21 00:03, ebb,-30 +2022-12-21 02:08, slack,- +2022-12-21 06:59, flood,48 +2022-12-21 10:38, slack,- +2022-12-21 12:27, ebb,-35 +2022-12-21 14:50, slack,- +2022-12-21 19:41, flood,45 +2022-12-21 23:14, slack,- +2022-12-22 00:57, ebb,-32 +2022-12-22 02:56, slack,- +2022-12-22 07:53, flood,50 +2022-12-22 11:26, slack,- +2022-12-22 13:21, ebb,-37 +2022-12-22 15:38, slack,- +2022-12-22 20:41, flood,47 +2022-12-23 00:08, slack,- +2022-12-23 01:45, ebb,-33 +2022-12-23 03:44, slack,- +2022-12-23 08:47, flood,51 +2022-12-23 12:20, slack,- +2022-12-23 14:09, ebb,-39 +2022-12-23 16:32, slack,- +2022-12-23 21:41, flood,49 +2022-12-24 01:02, slack,- +2022-12-24 02:39, ebb,-34 +2022-12-24 04:38, slack,- +2022-12-24 09:41, flood,51 +2022-12-24 13:14, slack,- +2022-12-24 15:03, ebb,-39 +2022-12-24 17:26, slack,- +2022-12-24 22:41, flood,49 +2022-12-25 01:56, slack,- +2022-12-25 03:33, ebb,-34 +2022-12-25 05:32, slack,- +2022-12-25 10:35, flood,50 +2022-12-25 14:08, slack,- +2022-12-25 15:57, ebb,-39 +2022-12-25 18:20, slack,- +2022-12-25 23:47, flood,48 +2022-12-26 02:50, slack,- +2022-12-26 04:27, ebb,-34 +2022-12-26 06:26, slack,- +2022-12-26 11:35, flood,48 +2022-12-26 15:02, slack,- +2022-12-26 16:45, ebb,-38 +2022-12-26 19:14, slack,- +2022-12-27 01:17, flood,48 +2022-12-27 03:44, slack,- +2022-12-27 05:15, ebb,-33 +2022-12-27 07:26, slack,- +2022-12-27 12:41, flood,46 +2022-12-27 15:56, slack,- +2022-12-27 17:39, ebb,-36 +2022-12-27 20:08, slack,- +2022-12-28 02:29, flood,48 +2022-12-28 04:38, slack,- +2022-12-28 06:09, ebb,-31 +2022-12-28 08:26, slack,- +2022-12-28 14:05, flood,44 +2022-12-28 16:56, slack,- +2022-12-28 18:33, ebb,-34 +2022-12-28 21:08, slack,- +2022-12-29 03:23, flood,47 +2022-12-29 05:32, slack,- +2022-12-29 07:03, ebb,-29 +2022-12-29 09:38, slack,- +2022-12-29 15:23, flood,43 +2022-12-29 17:50, slack,- +2022-12-29 19:27, ebb,-31 +2022-12-29 22:08, slack,- +2022-12-30 04:23, flood,47 +2022-12-30 06:32, slack,- +2022-12-30 08:03, ebb,-27 +2022-12-30 10:44, slack,- +2022-12-30 16:35, flood,42 +2022-12-30 18:50, slack,- +2022-12-30 20:21, ebb,-28 +2022-12-30 23:08, slack,- +2022-12-31 05:23, flood,46 +2022-12-31 07:26, slack,- +2022-12-31 09:03, ebb,-26 +2022-12-31 11:44, slack,- +2022-12-31 17:47, flood,42 +2022-12-31 19:50, slack,- +2022-12-31 21:21, ebb,-26 +2022-12-31 23:56, slack,- diff --git a/models/dave_worlds/worlds/dave_Santorini.world b/models/dave_worlds/worlds/dave_Santorini.world index 865d5001..7d172e8a 100644 --- a/models/dave_worlds/worlds/dave_Santorini.world +++ b/models/dave_worlds/worlds/dave_Santorini.world @@ -68,13 +68,13 @@ false - - - - https://fuel.gazebosim.org/1.0/hmoyen/models/North-East-Down frame - - 0 0 0 0 0 0 - + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/North East Down frame + + 0 0 0 0 0 0 + diff --git a/models/dave_worlds/worlds/dave_bimanual_example.world b/models/dave_worlds/worlds/dave_bimanual_example.world index 461200b9..1b2f1e50 100644 --- a/models/dave_worlds/worlds/dave_bimanual_example.world +++ b/models/dave_worlds/worlds/dave_bimanual_example.world @@ -66,7 +66,7 @@ - https://fuel.gazebosim.org/1.0/hmoyen/models/North-East-Down frame + https://fuel.gazebosim.org/1.0/hmoyen/models/North East Down frame 0 0 0 0 0 0 @@ -113,12 +113,12 @@ 3.0 - - - + + 0.5 0.5 0.5 1.0 + 0.5 0.5 0.5 1.0 + 0.1 0.1 0.1 1.0 + 0.0 0.0 0.0 1.0 + diff --git a/models/dave_worlds/worlds/dave_electrical_mating.world b/models/dave_worlds/worlds/dave_electrical_mating.world index efa0d543..18434f24 100644 --- a/models/dave_worlds/worlds/dave_electrical_mating.world +++ b/models/dave_worlds/worlds/dave_electrical_mating.world @@ -58,13 +58,13 @@ false - - - - https://fuel.gazebosim.org/1.0/hmoyen/models/North-East-Down frame - - 0 0 0 0 0 0 - + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/North East Down frame + + 0 0 0 0 0 0 + @@ -73,11 +73,11 @@ - + true diff --git a/models/dave_worlds/worlds/dave_graded_seabed.world b/models/dave_worlds/worlds/dave_graded_seabed.world index b6a4f90f..1b4690a8 100644 --- a/models/dave_worlds/worlds/dave_graded_seabed.world +++ b/models/dave_worlds/worlds/dave_graded_seabed.world @@ -81,11 +81,13 @@ false - - - https://fuel.gazebosim.org/1.0/hmoyen/models/North-East-Down frame - 0 0 0 0 0 0 - + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/North East Down frame + + 0 0 0 0 0 0 + diff --git a/models/dave_worlds/worlds/dave_integrated.world b/models/dave_worlds/worlds/dave_integrated.world index bff398fa..dde9496d 100644 --- a/models/dave_worlds/worlds/dave_integrated.world +++ b/models/dave_worlds/worlds/dave_integrated.world @@ -77,11 +77,13 @@ false - - - https://fuel.gazebosim.org/1.0/hmoyen/models/North-East-Down frame - 0 0 0 0 0 0 - + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/North East Down frame + + 0 0 0 0 0 0 + @@ -107,11 +109,11 @@ -191.06 115.8 -155.0 0 -1.570777 0 - + true diff --git a/models/dave_worlds/worlds/dave_ocean_models.world b/models/dave_worlds/worlds/dave_ocean_models.world index 28a4cbb4..c1c293e0 100644 --- a/models/dave_worlds/worlds/dave_ocean_models.world +++ b/models/dave_worlds/worlds/dave_ocean_models.world @@ -83,11 +83,13 @@ false - - - https://fuel.gazebosim.org/1.0/hmoyen/models/North-East-Down frame - 0 0 0 0 0 0 - + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/North East Down frame + + 0 0 0 0 0 0 + diff --git a/models/dave_worlds/worlds/dave_ocean_waves.world b/models/dave_worlds/worlds/dave_ocean_waves.world index ca0de8dd..920c9f59 100644 --- a/models/dave_worlds/worlds/dave_ocean_waves.world +++ b/models/dave_worlds/worlds/dave_ocean_waves.world @@ -83,11 +83,13 @@ false - - - https://fuel.gazebosim.org/1.0/hmoyen/models/North-East-Down frame - 0 0 0 0 0 0 - + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/North East Down frame + + 0 0 0 0 0 0 + diff --git a/models/dave_worlds/worlds/dave_ocean_waves_mossy_ground.world b/models/dave_worlds/worlds/dave_ocean_waves_mossy_ground.world index 1bb9ca82..88beb352 100644 --- a/models/dave_worlds/worlds/dave_ocean_waves_mossy_ground.world +++ b/models/dave_worlds/worlds/dave_ocean_waves_mossy_ground.world @@ -83,12 +83,13 @@ false - - - https://fuel.gazebosim.org/1.0/hmoyen/models/North-East-Down frame - 0 0 0 0 0 0 - - + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/North East Down frame + + 0 0 0 0 0 0 + diff --git a/models/dave_worlds/worlds/dave_ocean_waves_transient_current.world b/models/dave_worlds/worlds/dave_ocean_waves_transient_current.world index f69dcd30..1fd5c19f 100644 --- a/models/dave_worlds/worlds/dave_ocean_waves_transient_current.world +++ b/models/dave_worlds/worlds/dave_ocean_waves_transient_current.world @@ -67,10 +67,13 @@ false - - https://fuel.gazebosim.org/1.0/hmoyen/models/North-East-Down frame - 0 0 0 0 0 0 - + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/North East Down frame + + 0 0 0 0 0 0 + diff --git a/models/dave_worlds/worlds/dave_plug_and_socket.world b/models/dave_worlds/worlds/dave_plug_and_socket.world index a48b6065..bdb3b1f5 100644 --- a/models/dave_worlds/worlds/dave_plug_and_socket.world +++ b/models/dave_worlds/worlds/dave_plug_and_socket.world @@ -58,11 +58,13 @@ false - - - https://fuel.gazebosim.org/1.0/hmoyen/models/North-East-Down frame - 0 0 0 0 0 0 - + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/North East Down frame + + 0 0 0 0 0 0 + @@ -72,11 +74,11 @@ 0 0 0 0 0 0 - + true diff --git a/models/dave_worlds/worlds/new_dvl.world b/models/dave_worlds/worlds/new_dvl.world new file mode 100644 index 00000000..f231fac1 --- /dev/null +++ b/models/dave_worlds/worlds/new_dvl.world @@ -0,0 +1,414 @@ + + + + + + + + 0.0 1.0 1.0 + + 0.0 0.7 0.8 + + false + + + + 0.001 + 1.0 + + + + + + + + + + + + + + + + + 56.71897669633431 + 3.515625 + + + + + + + 50 0 150 0 0 0 + 1 1 1 1 + 0.1 0.1 0.1 1 + 0.3 0.3 -1 + false + + + + 20 0 -90 0 0 0 + 0.9 0.9 0.9 1 + 0.2 0.2 0.2 1 + -1 0 0 + false + + + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/North-East-Down frame + + 0 0 0 0 0 0 + + + + + + https://fuel.gazebosim.org/1.0/OpenRobotics/models/Waves + + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/Sand Heightmap + 0 0 -100 0 0 0 + + + + true + 21 -1 -98.5 0 0 0 + + + + 1 + 0 + 0 + 1 + 0 + 1 + + 1.0 + + + + + 0.03 + 3.0 + + + + + + + 0.03 + 3.0 + + + + + + + + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/Sunken Vase with Inertia + 20 0 -98 0 0 0 + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/Sunken Vase Distorted + 22 -0.5 -100 0 0 1.5708 + + + + + + + 3D View + false + docked + + + ogre2 + scene + 0.4 0.4 0.4 + 0.8 0.8 0.8 + 18.7 3.77 -97.5 0 0.29 -0.715 + + 0.25 + 2500 + + + + + + + floating + 5 + 5 + false + + + + + false + 5 + 5 + floating + false + + + + + false + 5 + 5 + floating + false + + + + + false + 5 + 5 + floating + false + + + + + false + 5 + 5 + floating + false + + + + + + + + + false + 5 + 5 + floating + false + + + + + false + 5 + 5 + floating + false + + + + + + + + + + false + 5 + 5 + floating + false + + + + + + + World control + false + false + 72 + 121 + 1 + + floating + + + + + + + true + true + true + true + + + + + + + World stats + false + false + 110 + 290 + 1 + + floating + + + + + + + true + true + true + true + + + + + + false + 0 + 0 + 250 + 50 + floating + false + #666666 + + + + + + + false + 250 + 0 + 150 + 50 + floating + false + #666666 + + + + + + + false + 0 + 50 + 250 + 50 + floating + false + #777777 + + + + + + + false + 250 + 50 + 50 + 50 + floating + false + #777777 + + + + + + + false + 300 + 50 + 50 + 50 + floating + false + #777777 + + + + true + false + 4000000 + + + + + + + docked_collapsed + + + + + + + docked_collapsed + + + + + + + docked_collapsed + + + + + + + + 1025 + + 0 + 1 + + + + + + diff --git a/models/dave_worlds/worlds/ocp.world b/models/dave_worlds/worlds/ocp.world new file mode 100755 index 00000000..cd1eec0b --- /dev/null +++ b/models/dave_worlds/worlds/ocp.world @@ -0,0 +1,210 @@ + + + + + + + + 0.01 0.01 0.01 1.0 + + + 12 + + + 1 + + + 0.001 + 1.0 + + + + + + + + + + + 56.71897669633431 + 3.515625 + + + + + 50 0 150 0 0 0 + 1 1 1 1 + .1 .1 .1 1 + 0.3 0.3 -1 + false + + + + -50 0 -150 0 0 0 + 0.6 0.6 0.6 1 + 0 0 0 1 + -0.3 -0.3 -1 + false + + + + -100 500 -20 0 0 0 + 0.8 0.8 0.8 1 + 1 1 1 1 + -1 -1 0 + false + + + + -150 -130 50 0 0 0 + 0.6 0.6 0.6 1 + 0.2 0.2 0.2 1 + 0.5 0.5 -1 + false + + + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/North East Down frame + + 0 0 0 0 0 0 + + + + + + https://fuel.gazebosim.org/1.0/OpenRobotics/models/Coast Water + + + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/Sand Heightmap + 0 0 -95 0 0 0 + + + + + 1025 + + 0 + 1 + + + + + + hydrodynamics + + current_velocity + + 0 + 0 + 5 + 0.0 + 0.0 + + + + 0 + -3.141592653589793238 + 3.141592653589793238 + 0.0 + 0.0 + + + + 0 + -3.141592653589793238 + 3.141592653589793238 + 0.0 + 0.0 + + + + + stratified_current_velocity + + transientOceanCurrentDatabase.csv + + + + + + + ACT1951_1_Annual_2021.csv + + + + + + + + + + + + + 69 + 255 + + + + + 9 + 9 + 2024 + 15 + 0 + + + + + + hydrodynamics + + + \ No newline at end of file diff --git a/models/dave_worlds/worlds/transientOceanCurrentDatabase.csv b/models/dave_worlds/worlds/transientOceanCurrentDatabase.csv new file mode 100644 index 00000000..7cb26ec6 --- /dev/null +++ b/models/dave_worlds/worlds/transientOceanCurrentDatabase.csv @@ -0,0 +1,15 @@ +# Information,, +Information about this data can be written here (in one line without comma),, +"# Data (North direction velocity [m/s], East direction velocity [m/s], Depth [m])",, +0.0,0.05,0 +0.01,0.03,10 +0.01,0.02,20 +0.01,0.01,30 +0.0,0.01,40 +0.0,0.02,50 +0.0,0.02,60 +0.01,0.02,70 +0.01,0.02,80 +0.01,0.02,90 +0.01,0.02,100 +0.01,0.0,110 \ No newline at end of file