evaluate all modes at a list of given points in theta and zeta
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(t_fBase), | intent(in) | :: | sf |
self |
||
| integer, | intent(in) | :: | deriv |
=0: base, =2: dthet , =3: dzeta |
||
| integer, | intent(in) | :: | np |
number of points in xn |
||
| real(kind=wp), | intent(in) | :: | xn(2,1:np) |
theta,zeta point positions |
FUNCTION fBase_eval_xn(sf,deriv,np,xn) RESULT(base_xn) ! MODULES IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES CLASS(t_fBase), INTENT(IN ) :: sf !! self INTEGER , INTENT(IN ) :: deriv !! =0: base, =2: dthet , =3: dzeta INTEGER , INTENT(IN ) :: np !! number of points in xn REAL(wp) , INTENT(IN ) :: xn(2,1:np) !! theta,zeta point positions !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES REAL(wp) :: base_xn(1:np,sf%modes) !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: iMode !=================================================================================================================================== ASSOCIATE(sin_range=>sf%sin_range,cos_range=>sf%cos_range,Xmn=>sf%Xmn) SELECT CASE(deriv) CASE(0) DO iMode=sin_range(1)+1,sin_range(2) base_xn(:,iMode)= SIN(REAL(Xmn(1,iMode),wp)*xn(1,:)-REAL(Xmn(2,iMode),wp)*xn(2,:)) END DO !iMode DO iMode=cos_range(1)+1,cos_range(2) base_xn(:,iMode)= COS(REAL(Xmn(1,iMode),wp)*xn(1,:)-REAL(Xmn(2,iMode),wp)*xn(2,:)) END DO !iMode CASE(DERIV_THET) DO iMode=sin_range(1)+1,sin_range(2) base_xn(:,iMode)= REAL(Xmn(1,iMode),wp)*COS(REAL(Xmn(1,iMode),wp)*xn(1,:)-REAL(Xmn(2,iMode),wp)*xn(2,:)) END DO !iMode DO iMode=cos_range(1)+1,cos_range(2) base_xn(:,iMode)=-REAL(Xmn(1,iMode),wp)*SIN(REAL(Xmn(1,iMode),wp)*xn(1,:)-REAL(Xmn(2,iMode),wp)*xn(2,:)) END DO !iMode CASE(DERIV_ZETA) DO iMode=sin_range(1)+1,sin_range(2) base_xn(:,iMode)=-REAL(Xmn(2,iMode),wp)*COS(REAL(Xmn(1,iMode),wp)*xn(1,:)-REAL(Xmn(2,iMode),wp)*xn(2,:)) END DO !iMode DO iMode=cos_range(1)+1,cos_range(2) base_xn(:,iMode)= REAL(Xmn(2,iMode),wp)*SIN(REAL(Xmn(1,iMode),wp)*xn(1,:)-REAL(Xmn(2,iMode),wp)*xn(2,:)) END DO !iMode CASE(DERIV_THET_THET) DO iMode=sin_range(1)+1,sin_range(2) base_xn(:,iMode)=-REAL(Xmn(1,iMode)**2,wp)*SIN(REAL(Xmn(1,iMode),wp)*xn(1,:)-REAL(Xmn(2,iMode),wp)*xn(2,:)) END DO !iMode DO iMode=cos_range(1)+1,cos_range(2) base_xn(:,iMode)=-REAL(Xmn(1,iMode)**2,wp)*COS(REAL(Xmn(1,iMode),wp)*xn(1,:)-REAL(Xmn(2,iMode),wp)*xn(2,:)) END DO !iMode CASE(DERIV_THET_ZETA) DO iMode=sin_range(1)+1,sin_range(2) base_xn(:,iMode)= REAL(Xmn(1,iMode)*Xmn(2,iMode),wp)*SIN(REAL(Xmn(1,iMode),wp)*xn(1,:)-REAL(Xmn(2,iMode),wp)*xn(2,:)) END DO !iMode DO iMode=cos_range(1)+1,cos_range(2) base_xn(:,iMode)= REAL(Xmn(1,iMode)*Xmn(2,iMode),wp)*COS(REAL(Xmn(1,iMode),wp)*xn(1,:)-REAL(Xmn(2,iMode),wp)*xn(2,:)) END DO !iMode CASE(DERIV_ZETA_ZETA) DO iMode=sin_range(1)+1,sin_range(2) base_xn(:,iMode)=-REAL(Xmn(2,iMode)**2,wp)*SIN(REAL(Xmn(1,iMode),wp)*xn(1,:)-REAL(Xmn(2,iMode),wp)*xn(2,:)) END DO !iMode DO iMode=cos_range(1)+1,cos_range(2) base_xn(:,iMode)=-REAL(Xmn(2,iMode)**2,wp)*COS(REAL(Xmn(1,iMode),wp)*xn(1,:)-REAL(Xmn(2,iMode),wp)*xn(2,:)) END DO !iMode CASE DEFAULT CALL abort(__STAMP__, & "fbase_evalDOF_IP: derivative must be 0,DERIV_THET,_ZETA,_THET_THET,_THET_ZETA,_ZETA_ZETA!") END SELECT END ASSOCIATE END FUNCTION fbase_eval_xn