Sample axis and check for zero (<1.e-12) curvature
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(t_hmap_frenet), | intent(in) | :: | sf |
SUBROUTINE checkZeroCurvature( sf) ! MODULES IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES CLASS(t_hmap_frenet), INTENT(IN) :: sf !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: iz,nz REAL(wp),DIMENSION(3) :: X0,X0p,X0pp,X0ppp,B REAL(wp) :: lp,absB REAL(wp),DIMENSION((sf%n_max+1)*8) :: zeta,kappa LOGICAL ,DIMENSION((sf%n_max+1)*8) :: checkzero !=================================================================================================================================== nz=(sf%n_max+1)*8 DO iz=1,nz zeta(iz)=REAL(iz-1,wp)/REAL(nz,wp)*TWOPI/sf%nfp !0...2pi/nfp without endpoint CALL sf%eval_X0(zeta(iz),X0,X0p,X0pp,X0ppp) lp=SQRT(SUM(X0p*X0p)) B=CROSS(X0p,X0pp) absB=SQRT(SUM(B*B)) kappa(iz)=absB/(lp**3) END DO !iz checkzero=(kappa.LT.1.0e-8) IF(ANY(checkzero))THEN IF(sf%omnig)THEN !omnig=True: kappa can only be zero once, at 0,pi/nfp,[2pi/nfp...] IF(.NOT.(checkzero(1).AND.checkzero(nz/2+1).AND.(COUNT(checkzero).EQ.2)))THEN DO iz=1,nz IF(checkzero(iz)) WRITE(UNIT_StdOut,'(A,E15.5)')' ...curvature <1e-8 at zeta/(2pi/nfp)=',zeta(iz)*sf%nfp/TWOPI END DO CALL abort(__STAMP__, & "hmap_frenet checkZeroCurvature with omnig=True: found additional points with zero curvature") END IF ELSE DO iz=1,nz IF(checkzero(iz)) WRITE(UNIT_StdOut,'(A,E15.5)')' ...curvature <1e-8 at zeta/(2pi/nfp)=',zeta(iz)*sf%nfp/TWOPI END DO CALL abort(__STAMP__, & "hmap_frenet checkZeroCurvature with omnig=False: found points with zero curvature") END IF END IF END SUBROUTINE CheckZeroCurvature