InitializeMHD3D_evalFunc Subroutine

public subroutine InitializeMHD3D_evalFunc()

Uses

  • proc~~initializemhd3d_evalfunc~~UsesGraph proc~initializemhd3d_evalfunc InitializeMHD3D_evalFunc module~modgvec_mhd3d_vars MODgvec_MHD3D_Vars proc~initializemhd3d_evalfunc->module~modgvec_mhd3d_vars module~modgvec_base MODgvec_base module~modgvec_mhd3d_vars->module~modgvec_base module~modgvec_globals MODgvec_Globals module~modgvec_mhd3d_vars->module~modgvec_globals module~modgvec_hmap MODgvec_hmap module~modgvec_mhd3d_vars->module~modgvec_hmap module~modgvec_rprofile_base MODgvec_rProfile_base module~modgvec_mhd3d_vars->module~modgvec_rprofile_base module~modgvec_sgrid MODgvec_sGrid module~modgvec_mhd3d_vars->module~modgvec_sgrid module~modgvec_sol_var_mhd3d MODgvec_sol_var_MHD3D module~modgvec_mhd3d_vars->module~modgvec_sol_var_mhd3d module~modgvec_base->module~modgvec_globals module~modgvec_base->module~modgvec_sgrid module~modgvec_fbase MODgvec_fBase module~modgvec_base->module~modgvec_fbase module~modgvec_sbase MODgvec_sBase module~modgvec_base->module~modgvec_sbase iso_fortran_env iso_fortran_env module~modgvec_globals->iso_fortran_env module~modgvec_c_hmap MODgvec_c_hmap module~modgvec_hmap->module~modgvec_c_hmap module~modgvec_hmap_axisnb MODgvec_hmap_axisNB module~modgvec_hmap->module~modgvec_hmap_axisnb module~modgvec_hmap_cyl MODgvec_hmap_cyl module~modgvec_hmap->module~modgvec_hmap_cyl module~modgvec_hmap_frenet MODgvec_hmap_frenet module~modgvec_hmap->module~modgvec_hmap_frenet module~modgvec_hmap_knot MODgvec_hmap_knot module~modgvec_hmap->module~modgvec_hmap_knot module~modgvec_hmap_rz MODgvec_hmap_RZ module~modgvec_hmap->module~modgvec_hmap_rz module~modgvec_rprofile_base->module~modgvec_globals module~modgvec_sgrid->module~modgvec_globals module~modgvec_sol_var_mhd3d->module~modgvec_globals module~modgvec_c_sol_var MODgvec_c_sol_var module~modgvec_sol_var_mhd3d->module~modgvec_c_sol_var module~modgvec_c_hmap->module~modgvec_globals module~modgvec_c_sol_var->module~modgvec_globals module~modgvec_fbase->module~modgvec_globals module~modgvec_hmap_axisnb->module~modgvec_globals module~modgvec_hmap_axisnb->module~modgvec_c_hmap module~modgvec_hmap_axisnb->module~modgvec_fbase module~modgvec_io_netcdf MODgvec_IO_NETCDF module~modgvec_hmap_axisnb->module~modgvec_io_netcdf module~modgvec_hmap_cyl->module~modgvec_globals module~modgvec_hmap_cyl->module~modgvec_c_hmap module~modgvec_hmap_frenet->module~modgvec_globals module~modgvec_hmap_frenet->module~modgvec_c_hmap module~modgvec_hmap_knot->module~modgvec_globals module~modgvec_hmap_knot->module~modgvec_c_hmap module~modgvec_hmap_rz->module~modgvec_globals module~modgvec_hmap_rz->module~modgvec_c_hmap module~modgvec_sbase->module~modgvec_globals module~modgvec_sbase->module~modgvec_sgrid module~sll_m_bsplines sll_m_bsplines module~modgvec_sbase->module~sll_m_bsplines module~sll_m_spline_interpolator_1d sll_m_spline_interpolator_1d module~modgvec_sbase->module~sll_m_spline_interpolator_1d module~sll_m_spline_matrix sll_m_spline_matrix module~modgvec_sbase->module~sll_m_spline_matrix module~modgvec_io_netcdf->module~modgvec_globals netcdf netcdf module~modgvec_io_netcdf->netcdf module~sll_m_bsplines_base sll_m_bsplines_base module~sll_m_bsplines->module~sll_m_bsplines_base module~sll_m_bsplines_non_uniform sll_m_bsplines_non_uniform module~sll_m_bsplines->module~sll_m_bsplines_non_uniform module~sll_m_bsplines_uniform sll_m_bsplines_uniform module~sll_m_bsplines->module~sll_m_bsplines_uniform module~sll_m_working_precision sll_m_working_precision module~sll_m_bsplines->module~sll_m_working_precision module~sll_m_spline_interpolator_1d->module~sll_m_spline_matrix module~sll_m_boundary_condition_descriptors sll_m_boundary_condition_descriptors module~sll_m_spline_interpolator_1d->module~sll_m_boundary_condition_descriptors module~sll_m_spline_interpolator_1d->module~sll_m_bsplines_base module~sll_m_spline_1d sll_m_spline_1d module~sll_m_spline_interpolator_1d->module~sll_m_spline_1d module~sll_m_spline_interpolator_1d->module~sll_m_working_precision module~sll_m_spline_matrix_banded sll_m_spline_matrix_banded module~sll_m_spline_matrix->module~sll_m_spline_matrix_banded module~sll_m_spline_matrix_base sll_m_spline_matrix_base module~sll_m_spline_matrix->module~sll_m_spline_matrix_base module~sll_m_spline_matrix_dense sll_m_spline_matrix_dense module~sll_m_spline_matrix->module~sll_m_spline_matrix_dense module~sll_m_spline_matrix->module~sll_m_working_precision module~sll_m_bsplines_base->module~sll_m_working_precision module~sll_m_bsplines_non_uniform->module~sll_m_bsplines_base module~sll_m_bsplines_non_uniform->module~sll_m_working_precision module~sll_m_bsplines_uniform->module~sll_m_bsplines_base module~sll_m_bsplines_uniform->module~sll_m_working_precision module~sll_m_spline_1d->module~sll_m_bsplines_base module~sll_m_spline_1d->module~sll_m_working_precision module~sll_m_spline_matrix_banded->iso_fortran_env module~sll_m_spline_matrix_banded->module~sll_m_spline_matrix_base module~sll_m_spline_matrix_banded->module~sll_m_working_precision module~sll_m_spline_matrix_base->module~sll_m_working_precision module~sll_m_spline_matrix_dense->iso_fortran_env module~sll_m_spline_matrix_dense->module~sll_m_spline_matrix_base module~sll_m_spline_matrix_dense->module~sll_m_working_precision

Initialize Module

Arguments

None

Calls

proc~~initializemhd3d_evalfunc~~CallsGraph proc~initializemhd3d_evalfunc InitializeMHD3D_evalFunc init init proc~initializemhd3d_evalfunc->init swrite swrite proc~initializemhd3d_evalfunc->swrite

Called by

proc~~initializemhd3d_evalfunc~~CalledByGraph proc~initializemhd3d_evalfunc InitializeMHD3D_evalFunc proc~initmhd3d t_functional_mhd3d%InitMHD3D proc~initmhd3d->proc~initializemhd3d_evalfunc

Source Code

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