Initialize Module
SUBROUTINE init_gvec_to_jorek() ! MODULES USE MODgvec_Globals,ONLY: TWOPI USE MODgvec_ReadState ,ONLY: ReadState USE MODgvec_ReadState_vars ,ONLY: X1_base_r,X2_base_r,LA_base_r USE MODgvec_ReadState_vars ,ONLY: LA_r,X1_r,X2_r !USE MODgvec_transform_sfl_vars,ONLY: X1sfl_base,X1sfl,X2sfl_base,X2sfl ,GZsfl_base,GZsfl !USE MODgvec_transform_sfl ,ONLY: BuildTransform_SFL USE MODgvec_gvec_to_jorek_vars IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT/OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: i REAL(wp) :: r INTEGER :: seed=1139 ! Random seed for test data REAL(wp) :: phi_direction=1 ! direction of phi in JOREK and GVEC is clockwise, so direction does not need to be flipped !=================================================================================================================================== SWRITE(UNIT_stdOut,'(A)')'INIT GVEC-TO-CASTOR3D ...' ! Initialize grid variables from GVEC restart file CALL ReadState(TRIM(gvecfileName)) mn_max_out(1) = MAXVAL((/X1_base_r%f%mn_max(1),X2_base_r%f%mn_max(1),LA_base_r%f%mn_max(1)/)) mn_max_out(2) = MAXVAL((/X1_base_r%f%mn_max(2),X2_base_r%f%mn_max(2),LA_base_r%f%mn_max(2)/)) nfp_out = X1_base_r%f%nfp ! increase modal respresentation of the computed fields mn_max_out(1) = NINT(mn_max_out(1)*factorField) mn_max_out(2) = NINT(mn_max_out(2)*factorField) fac_nyq_fields=4 !hard coded for now IF((X1_base_r%f%sin_cos.EQ._COS_).AND.(X2_base_r%f%sin_cos.EQ._SIN_).AND.(LA_base_r%f%sin_cos.EQ._SIN_))THEN asym_out = 0 !R~cos,Z~sin,lambda~sin ELSE asym_out = 1 !full fourier END IF ! Initialize sample points in s, theta, zeta. s and theta can be randomly sampled for testing purposes. ALLOCATE(s_pos(Ns_out)) !ALLOCATE(data_1D(nVar1D,Ns_out)) IF (generate_test_data) THEN call RANDOM_SEED(seed) DO i=1,Ns_out call RANDOM_NUMBER(r) WRITE(*,*) "Random number: ", r s_pos(i) = (1.0 - 1.0e-12_wp - 1.0e-08_wp) * r + 1.0e-08_wp !s_pos(i) = r END DO IF (Ns_out .eq. 1) s_pos(1) = 1.0 ELSE s_pos(1)=1.0e-08_wp !avoid axis DO i=2,Ns_out-1 s_pos(i) = REAL(i-1,wp)/REAL(Ns_out-1,wp) END DO !i s_pos(Ns_out)=1. - 1.0e-12_wp !avoid edge END IF IF(Nthet_out.EQ.-1) THEN !overwrite with default from factorFourier Nthet_out = npfactor*mn_max_out(1) END IF IF(Nthet_out .LT. 4*mn_max_out(1)) WRITE(UNIT_StdOut,'(A)')'WARNING: number of poloidal points for output should be >=4*m_max!' Nzeta_out = MAX(1,fac_nyq_fields*mn_max_out(2)) !if n=0, output 1 point ALLOCATE(thet_pos(Nthet_out)) ALLOCATE(zeta_pos(Nzeta_out)) IF (generate_test_data) THEN DO i=1,Nthet_out call RANDOM_NUMBER(r) thet_pos(i)=r END DO IF (Nthet_out .eq. 1) thet_pos(1) =0.0 ELSE DO i=1,Nthet_out thet_pos(i)=(REAL((i-1),wp))/REAL(Nthet_out,wp) END DO END IF DO i=1,Nzeta_out zeta_pos(i)=phi_direction * (TWOPI*REAL((i-0.5),wp))/REAL((Nzeta_out*nfp_out),wp) END DO CALL Init_Base(mn_max_out,fac_nyq_fields) n_modes = fbase_zeta%modes sin_range(:) = fbase_zeta%sin_range(:) cos_range(:) = fbase_zeta%cos_range(:) ALLOCATE(data_scalar2D(Nthet_out, Ns_out,n_modes,nVarScalar2D)) ALLOCATE(data_scalar3D(Nthet_out,Nzeta_out,Ns_out,nVarscalar3D)) !ALLOCATE(data_vector3D(3,Nthet_out,Nzeta_out,Ns_out,nVarvector3D)) SWRITE(UNIT_stdOut,'(A,3I6)')' Number OF N_s,N_theta,N_zeta evaluation points:',Ns_out,Nthet_out,Nzeta_out SWRITE(UNIT_stdOut,'(A)')'... DONE' SWRITE(UNIT_stdOut,fmt_sep) SELECT CASE(SFLcoord) CASE(0) ! GVEC coordinates - toroidal coordinate is the cylindrical toroidal direction CALL gvec_to_jorek_prepare(X1_base_r,X1_r,X2_base_r,X2_r,LA_base_r,LA_r) CASE DEFAULT SWRITE(UNIT_StdOut,*)'This SFLcoord is not yet implemented',SFLcoord STOP END SELECT END SUBROUTINE init_gvec_to_jorek