public function ic_2dcrvpX_for(me, coord, n) result(res)
This function defines the y-velocity component of the
spinning (= co-rotating) vortex pair
Source: complex velocity potential of both vortices
complex coordinates:
z = x+i*y
Gamma ... circulation
b = r0*exp(i*omega*t)
w(z,t) = Gamma/(2Pi*i)*ln(z^2-b^2)
dw/dz = Gamma/(2Pi*i)*z/(z^2-b^2)
u = Re( dw/dz( z, t=0 )
v = -Im( dw/dz( z, t=0 )
Unit of the result is in m/s, as the coordinates are given in physical
coordinates and hence all other parameters also have to be physical ones
As the potential induces a singularity inside the vortex,
a vortex core model is employed. Here we use the Rankine vortex, where the
velocity field inside the core radius rC = 1/3r0 is approximated with a
linear profile.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Source Code
function ic_2dcrvpX_for(me,coord,n)result(res)! ---------------------------------------------------------------------------!> number of return valuesinteger,intent(in)::n!> global gauss pulse datatype(ic_2dcrvp_type),intent(in)::me!> coordinate of an elementreal(kind=rk),intent(in)::coord(n,3)!> return value which is sent to state variablereal(kind=rk)::res(n)! ---------------------------------------------------------------------------real(kind=rk)::r! radius from center of rotationreal(kind=rk)::rC,x_max! core radiusreal(kind=rk)::omega! angular speedreal(kind=rk)::x,ycomplex(kind=rk)::z_coord,z_compl,b_coord,vortex1,vortex2,umax,z_l,z_rcomplex(kind=rk),parameter::i_complex=(0.,1.)integer::iElem! ---------------------------------------------------------------------------omega=me%circulation/(Pi*me%radius_rot*me%radius_rot*4._rk)b_coord=me%radius_rot*(cos(omega*me%t)+i_complex*sin(omega*me%t))rC=me%radius_Cdo iElem=1,nx=coord(iElem,1)-me%center(1)y=coord(iElem,2)-me%center(2)z_coord=x+i_complex*y! complex coordinate with respect to left vortexz_l=z_coord+b_coord! complex coordinate with respect to right vortexz_r=z_coord-b_coord! left vortex. compare potential_single_w_zvortex1=me%circulation/(2._rk*PI*i_complex*z_l)! right vortexvortex2=me%circulation/(2._rk*PI*i_complex*z_r)! Get the velocity on the core radius for the core modelif(me%rankineModel)thenx_max=-real(b_coord+rC,kind=rk)umax=me%circulation/(2._rk*PI*i_complex*(x_max+b_coord))z_compl=x-i_complex*y! Rankine vortex model, if inside the core radiusif(real(z_r*(z_compl-b_coord),kind=rk).lt.rC*rC)then! right vortexvortex2=-(+umax*z_compl/rC-umax*b_coord/rC)elseif(real(z_l*(z_compl+b_coord),kind=rk).lt.rC**2)then! left vortexvortex1=-(+umax*z_compl/rC+umax*b_coord/rC)end if end ifr=abs(z_coord)res(iElem)=cutoff_factor(me%cutoff,r)&&*(real(vortex1+vortex2,kind=rk))end do end function ic_2dcrvpX_for