Buoyancy system wave

Hello, i hope you can help me with this problem.
I wrote a buoyancy system with waves, but i have a problem for synchronize waves and buoyancy.

I would like that the object go up and down with wave’s movement and continue with buoyancy.

This is for waves

private void wave()
    {
        if (GetComponent<MeshFilter>() != null) {
            Mesh mesh = GetComponent<MeshFilter>().mesh;

            Vector3[] vertices = mesh.vertices;

            for (int i = 0; i < vertices.Length; i++)
            {
                Vector3 globalPosition = transform.TransformPoint(vertices*);*

Vector3 globalPositionVertexProject = projectPointOntoSurface(globalPosition);

Vector3 localPosition = transform.InverseTransformPoint(globalPositionVertexProject);

vertices = localPosition;
}

mesh.vertices = vertices;

mesh.RecalculateNormals();
mesh.RecalculateBounds();
}
}

private Vector3 projectPointOntoSurface(Vector3 globalPosition)
{
return new Vector3(globalPosition.x, GetComponent().bounds.max.y + waveAmplitude * (waveLogic(globalPosition) - 1.0f), globalPosition.z);
}

public float relativeHeightAtPoint(Vector3 globalPosition)
{
return GetComponent().bounds.size.y + waveAmplitude * (waveLogic(globalPosition) - 1.0f);
}

private float waveLogic(Vector3 globalPosition)
{
return Mathf.Sin(globalPosition.x * 0.5f + Time.time) * 0.8f + Mathf.Sin(globalPosition.z * 0.5f + Time.time) * 0.2f;
}
This is for buoyancy
void FixedUpdate()
{
wave();

foreach (KeyValuePair<string, WaterObject> entry in elements)
{
foreach (Vector3 position in entry.Value.voxels)
{
Vector3 globalPosition = entry.Value.collider.transform.TransformPoint(position);

if (globalPosition.y < waterLevel)
{
float k = (waterLevel - globalPosition.y);

if (k > 1)
{
k = 1f;
}
else if (k < 0)
{
k = 0f;
}

float archimedeForce = waterDensity * Mathf.Abs(Physics.gravity.y) * entry.Value.volume;
Vector3 archimedeLocalForce = new Vector3(0, archimedeForce, 0) / entry.Value.voxels.Count;

Vector3 velocity = entry.Value.rigidbody.GetPointVelocity(globalPosition);
Vector3 damping = -velocity * 0.1f * entry.Value.rigidbody.mass;
entry.Value.force = damping + (Mathf.Sqrt(k) * archimedeLocalForce);

//float rp = relativeHeightAtPoint(globalPosition);
//entry.Value.force.y = entry.Value.force.y - ((waterLevel - rp) * 2);

entry.Value.rigidbody.AddForceAtPosition(entry.Value.force, globalPosition);
}
}
}
}
Thanks for your help!

Solved, i have used different force, thanks at all…