get_new
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(t_transform_sfl), | intent(inout) | :: | sf |
self |
SUBROUTINE transform_SFL_init(sf) ! MODULES USE MODgvec_Globals,ONLY:UNIT_stdOut USE MODgvec_base ,ONLY: t_base,base_new USE MODgvec_fbase ,ONLY: sin_cos_map USE MODgvec_SFL_Boozer,ONLY: t_sfl_boozer IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES CLASS(t_transform_sfl), INTENT(INOUT) :: sf !! self !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: irho REAL(wp),ALLOCATABLE :: rho_pos(:),iota(:),phiPrime(:) !=================================================================================================================================== __PERFON('transform_SFL_init') ! extended base for q in the new angles, and on the new grid CALL base_new(sf%X1sfl_base, sf%deg, sf%continuity, sf%sgrid_sfl, sf%degGP, & sf%mn_max,sf%mn_nyq,sf%nfp,sin_cos_map(sf%X1sfl_sin_cos), .FALSE.)!m=n=0 should be always there, because of coordinate transform CALL base_new(sf%X2sfl_base, sf%deg, sf%continuity, sf%sgrid_sfl,sf%degGP, & sf%mn_max,sf%mn_nyq,sf%nfp,sin_cos_map(sf%X2sfl_sin_cos), .FALSE.)!m=n=0 should be always there, because of coordinate transform ALLOCATE(sf%X1sfl(sf%X1sfl_base%s%nBase,sf%X1sfl_base%f%modes)); sf%X1sfl=0.0_wp ALLOCATE(sf%X2sfl(sf%X2sfl_base%s%nBase,sf%X2sfl_base%f%modes)); sf%X2sfl=0.0_wp SELECT CASE(sf%whichSFLcoord) CASE(1) !PEST ! nothing to initialize additionally CASE(2) !BOOZER CALL base_new(sf%GZ_base, sf%deg, sf%continuity, sf%sgrid_sfl,sf%degGP, & sf%mn_max,sf%mn_nyq_booz,sf%nfp,sin_cos_map(sf%GZ_sin_cos),.TRUE.) !exclude m=n=0 ALLOCATE(sf%Gthet(sf%GZ_base%s%nBase,sf%GZ_base%f%modes)); sf%Gthet=0.0_wp ALLOCATE(sf%GZ( sf%GZ_base%s%nBase,sf%GZ_base%f%modes)); sf%GZ=0.0_wp CALL base_new(sf%GZsfl_base, sf%deg, sf%continuity, sf%sgrid_sfl,sf%degGP, & sf%mn_max,sf%mn_nyq,sf%nfp,sin_cos_map(sf%GZ_sin_cos), .FALSE.)!m=n=0 should be always there, because of coordinate transform ALLOCATE(rho_pos(1:sf%GZsfl_base%s%nBase),iota(1:sf%GZsfl_base%s%nBase),phiPrime(1:sf%GZsfl_base%s%nBase)) DO irho=1,sf%GZsfl_base%s%nBase rho_pos(irho)=MIN(MAX(1.0e-4_wp,sf%GZsfl_base%s%s_IP(irho)),1.0_wp-1.0e-12_wp) iota(irho)=sf%eval_iota(rho_pos(irho)) phiPrime(irho)=sf%eval_phiPrime(rho_pos(irho)) END DO sf%booz = t_sfl_boozer(sf%mn_max,sf%mn_nyq_booz,sf%nfp,sin_cos_map(sf%GZ_sin_cos),sf%hmap,sf%GZsfl_base%s%nBase, & rho_pos,iota,phiPrime,relambda_in=sf%booz_relambda) DEALLOCATE(rho_pos,iota,phiPrime) ALLOCATE(sf%Gtsfl(sf%GZsfl_base%s%nBase,sf%GZsfl_base%f%modes));sf%Gtsfl=0.0_wp ALLOCATE(sf%GZsfl(sf%GZsfl_base%s%nBase,sf%GZsfl_base%f%modes));sf%GZsfl=0.0_wp CASE DEFAULT CALL abort(__STAMP__, & "whichSFLcoord for coordinate transform not found, expecting 1(PEST) or 2(Boozer)", & TypeInfo="InvalidParameterError") END SELECT sf%initialized=.TRUE. __PERFOFF('transform_SFL_init') END SUBROUTINE transform_sfl_init