Change in velocity IS force. So if you want the current to be applying a constant force, then you should be applying a constant change in velocity (i.e. constant additions to velocity every tick). Select a force value and multiply it by the DeltaTime value to bring it down to manageable levels. That should also mean that whatever value you select will be equal to force per second (Unreal Newtons per second?).
As for the max-speed thing, I would look inside the character movement component’s CalcVelocity function and try to figure out what exactly caps out the max speed. Maybe the CharacterMovementComponent deliberately scales up the input forces on the character in order to meet the max velocity quota. I would look for you myself but I am about to sleep.
That’s just my two cents, as someone who is also trying to do some physics-based character movement. Maybe Rama will have something that can help you more precisely. Either way, good luck!
EDIT: I forgot mass in my earlier mention about force being change in velocity. As I said, sleep soon. Anyway, what I was describing was this:
change to velocity each tick = ForcePerSec * DeltaTime / CharacterMass
Since the second two variables are ‘given’, this means the float you provide is a legitimate force per second value. I don’t know if you did any research into how powerful water currents are but if you did, you could put your newton per second value in there and it would behave fairly realistically.
EDIT 2: I have since implemented my own force/impulse function and found that the ForcePerSec value needs to be 100 times greater than what you would expect for real-world numbers. I think this is because the standard units for space are Unreal Units, which are, effectively, centimetres. Newtons are normally kgm/s^2, but in this case we use kgcm/s^2, meaning all force values will need to be 100x normal.