Initialize Module
SUBROUTINE InitializeMHD3D_evalFunc() ! MODULES USE MODgvec_MHD3D_Vars,ONLY:X1_base,X2_base,LA_base,PrecondType IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: iMode !=================================================================================================================================== SWRITE(UNIT_stdOut,'(A)')'INIT MHD3D_EVALFUNC...' !same for all basis nElems = X1_base%s%grid%nElems nElems_str = X1_base%s%grid%nElems_str nElems_end = X1_base%s%grid%nElems_end nGP = X1_base%s%nGP nGP_str = X1_base%s%nGP_str !< for MPI nGP_end = X1_base%s%nGP_end !< for MPI degGP = X1_base%s%degGP mn_IP = X1_base%f%mn_IP dthet_dzeta =X1_base%f%d_thet*X1_base%f%d_zeta ALLOCATE(s_GP(1:nGP),w_GP(1:nGP),zeta_IP(1:mn_IP)) s_GP = X1_base%s%s_GP(1:nGP) w_GP = X1_base%s%w_GP(1:nGP) zeta_IP = X1_base%f%x_IP(2,:) ALLOCATE(pres_GP( 1:nGP) ) ALLOCATE(chiPrime_GP( 1:nGP) ) ALLOCATE(phiPrime_GP( 1:nGP) ) ALLOCATE(phiPrime2_GP(1:nGP) ) ALLOCATE(J_h( mn_IP,nGP_str:nGP_end) ) ALLOCATE(J_p,sJ_h,sJ_p,detJ,sdetJ, & X1_IP_GP,X2_IP_GP,dX1_ds,dX2_ds, & dX1_dthet,dX2_dthet,dLA_dthet, & dX1_dzeta,dX2_dzeta,dLA_dzeta, & b_thet,b_zeta,sJ_bcov_thet,sJ_bcov_zeta,bbcov_sJ,& g_tt,g_tz,g_zz,g_t1,g_t2,g_z1,g_z2, & Jh_dq1,Jh_dq2,gtt_dq1,gtt_dq2,gtz_dq1,gtz_dq2,gzz_dq1,gzz_dq2, & Gh11,Gh22, mold=J_h) IF(PrecondType.GT.0)THEN !WHEN CHANGED TO ALLGATHERV COMM IN BUILDPRECOND, THIS ALLOCATE WILL BE THE SAME. ! POINTERS HELP TO GATHER ALL DATA IN ONE ARRAY (buf) ALLOCATE(D_buf(1:nGP,13)) ! this is where the "pointer allocation" occurs DX1_tt(1:nGP) => D_buf(1:nGP,1) DX1_tz(1:nGP) => D_buf(1:nGP,2) DX1_zz(1:nGP) => D_buf(1:nGP,3) DX1(1:nGP) => D_buf(1:nGP,4) DX1_ss(1:nGP) => D_buf(1:nGP,5) DX2_tt(1:nGP) => D_buf(1:nGP,6) DX2_tz(1:nGP) => D_buf(1:nGP,7) DX2_zz(1:nGP) => D_buf(1:nGP,8) DX2(1:nGP) => D_buf(1:nGP,9) DX2_ss(1:nGP) => D_buf(1:nGP,10) DLA_tt(1:nGP) => D_buf(1:nGP,11) DLA_tz(1:nGP) => D_buf(1:nGP,12) DLA_zz(1:nGP) => D_buf(1:nGP,13) !distribute the preconditioner per mode over the MPI tasks (modes_str:modes_end) ALLOCATE(sll_t_spline_matrix_banded :: precond_X1( X1_Base%f%modes_str:X1_base%f%modes_end)) SELECT TYPE(precond_X1); TYPE IS(sll_t_spline_matrix_banded) DO iMode=X1_Base%f%modes_str,X1_base%f%modes_end CALL precond_X1(iMode)%init(X1_Base%s%nBase,X1_Base%s%deg,X1_Base%s%deg) END DO !iMode END SELECT !TYPE ALLOCATE(sll_t_spline_matrix_banded :: precond_X2( X2_Base%f%modes_str:X2_base%f%modes_end)) SELECT TYPE(precond_X2); TYPE IS(sll_t_spline_matrix_banded) DO iMode=X2_Base%f%modes_str,X2_base%f%modes_end CALL precond_X2(iMode)%init(X2_Base%s%nBase,X2_Base%s%deg,X2_Base%s%deg) END DO !iMode END SELECT !TYPE ALLOCATE(sll_t_spline_matrix_banded :: precond_LA( LA_Base%f%modes_str:LA_base%f%modes_end)) SELECT TYPE(precond_LA); TYPE IS(sll_t_spline_matrix_banded) DO iMode=LA_Base%f%modes_str,LA_base%f%modes_end CALL precond_LA(iMode)%init(LA_Base%s%nBase,LA_Base%s%deg,LA_Base%s%deg) END DO !iMode END SELECT !TYPE END IF !PrecondType>0 SWRITE(UNIT_stdOut,'(A)')'... DONE' SWRITE(UNIT_stdOut,fmt_sep) END SUBROUTINE InitializeMHD3D_evalFunc