add_analytical_E_p Subroutine

public subroutine add_analytical_E_p(params, tt, F, E_PHI, Y_R, Y_Z)

Arguments

Type IntentOptional AttributesName
type(KORC_PARAMS), intent(inout) :: params
integer(kind=ip), intent(in) :: tt
type(FIELDS), intent(in) :: F
real(kind=rp), intent(inout), DIMENSION(params%pchunk):: E_PHI
real(kind=rp), intent(in), DIMENSION(params%pchunk):: Y_R
real(kind=rp), intent(in), DIMENSION(params%pchunk):: Y_Z

Called by

proc~~add_analytical_e_p~~CalledByGraph proc~add_analytical_e_p add_analytical_E_p proc~gc_init GC_init proc~gc_init->proc~add_analytical_e_p proc~include_coulombcollisions_gc_p include_CoulombCollisions_GC_p proc~include_coulombcollisions_gc_p->proc~add_analytical_e_p proc~advance_gcinterp_3dbdb1_vars advance_GCinterp_3DBdB1_vars proc~advance_gcinterp_3dbdb1_vars->proc~add_analytical_e_p proc~advance_gcinterp_3dbdb1_vars->proc~include_coulombcollisions_gc_p proc~advance_gcinterp_psi_vars_fs advance_GCinterp_psi_vars_FS proc~advance_gcinterp_psi_vars_fs->proc~add_analytical_e_p proc~advance_gcinterp_psi_vars_fs->proc~include_coulombcollisions_gc_p proc~advance_gcinterp_psi_vars advance_GCinterp_psi_vars proc~advance_gcinterp_psi_vars->proc~add_analytical_e_p proc~advance_gcinterp_b2d_vars advance_GCinterp_B2D_vars proc~advance_gcinterp_b2d_vars->proc~add_analytical_e_p proc~advance_gcinterp_b2d_vars->proc~include_coulombcollisions_gc_p proc~advance_gcinterp_psi2x1t_vars advance_GCinterp_psi2x1t_vars proc~advance_gcinterp_psi2x1t_vars->proc~add_analytical_e_p proc~advance_gcinterp_psi2x1t_vars->proc~include_coulombcollisions_gc_p proc~advance_gcinterp_2dbdb_vars advance_GCinterp_2DBdB_vars proc~advance_gcinterp_2dbdb_vars->proc~add_analytical_e_p proc~advance_gcinterp_2dbdb_vars->proc~include_coulombcollisions_gc_p proc~advance_gcinterp_b_vars advance_GCinterp_B_vars proc~advance_gcinterp_b_vars->proc~add_analytical_e_p proc~advance_gcinterp_b_vars->proc~include_coulombcollisions_gc_p proc~advance_gcinterp_3dbdb_vars advance_GCinterp_3DBdB_vars proc~advance_gcinterp_3dbdb_vars->proc~add_analytical_e_p proc~advance_gcinterp_3dbdb_vars->proc~include_coulombcollisions_gc_p proc~advance_fpeqn_vars advance_FPeqn_vars proc~advance_fpeqn_vars->proc~include_coulombcollisions_gc_p proc~adv_gcinterp_psi_top adv_GCinterp_psi_top proc~adv_gcinterp_psi_top->proc~include_coulombcollisions_gc_p proc~advance_fpinterp_vars advance_FPinterp_vars proc~adv_gcinterp_psi_top->proc~advance_fpinterp_vars program~main main program~main->proc~gc_init program~main->proc~adv_gcinterp_psi_top proc~adv_gcinterp_psiwe_top adv_GCinterp_psiwE_top program~main->proc~adv_gcinterp_psiwe_top proc~adv_gceqn_top adv_GCeqn_top program~main->proc~adv_gceqn_top proc~adv_gcinterp_psi_top_fs adv_GCinterp_psi_top_FS program~main->proc~adv_gcinterp_psi_top_fs proc~adv_gcinterp_psi2x1t_top adv_GCinterp_psi2x1t_top program~main->proc~adv_gcinterp_psi2x1t_top proc~adv_gcinterp_b_top adv_GCinterp_B_top program~main->proc~adv_gcinterp_b_top proc~adv_gcinterp_3dbdb_top adv_GCinterp_3DBdB_top program~main->proc~adv_gcinterp_3dbdb_top proc~adv_gcinterp_3dbdb1_top adv_GCinterp_3DBdB1_top program~main->proc~adv_gcinterp_3dbdb1_top proc~adv_gcinterp_2dbdb_top adv_GCinterp_2DBdB_top program~main->proc~adv_gcinterp_2dbdb_top proc~adv_gcinterp_b2d_top adv_GCinterp_B2D_top program~main->proc~adv_gcinterp_b2d_top proc~advance_fpinterp_vars->proc~include_coulombcollisions_gc_p proc~adv_gcinterp_psiwe_top->proc~include_coulombcollisions_gc_p proc~adv_gceqn_top->proc~include_coulombcollisions_gc_p proc~adv_gcinterp_psi_top_fs->proc~advance_fpinterp_vars proc~adv_gcinterp_psi2x1t_top->proc~advance_fpinterp_vars proc~adv_gcinterp_b_top->proc~advance_fpinterp_vars proc~adv_gcinterp_3dbdb_top->proc~advance_fpinterp_vars proc~adv_gcinterp_3dbdb1_top->proc~advance_fpinterp_vars proc~adv_gcinterp_2dbdb_top->proc~advance_fpinterp_vars proc~adv_gcinterp_b2d_top->proc~advance_fpinterp_vars

Contents

Source Code


Source Code

  subroutine add_analytical_E_p(params,tt,F,E_PHI,Y_R,Y_Z)

    TYPE(KORC_PARAMS), INTENT(INOUT)                              :: params
    TYPE(FIELDS), INTENT(IN)                                   :: F
    INTEGER(ip),INTENT(IN)  :: tt
    REAL(rp)  :: E_dyn,E_pulse,E_width,time,arg,arg1,R0,Z0,a
    REAL(rp),DIMENSION(params%pchunk),INTENT(INOUT) :: E_PHI
    REAL(rp),DIMENSION(params%pchunk),INTENT(IN) :: Y_R,Y_Z
    REAL(rp),DIMENSION(params%pchunk) :: rm,r_a
    integer(ip) :: cc,pchunk

    pchunk=params%pchunk

    SELECT CASE (TRIM(F%E_profile))
    CASE('D3D_LOOP')

       time=params%init_time+(params%it-1+tt)*params%dt

       E_dyn=F%E_dyn
       E_pulse=F%E_pulse
       E_width=F%E_width
       R0=F%Ro

       !write(output_unit_write,*) E_dyn,E_pulse,E_width,R0

       !$OMP SIMD
       !    !$OMP& aligned(E_PHI)
       do cc=1_idef,pchunk

          arg=(time-E_pulse)**2/(2._rp*E_width**2)
          arg1=10._rp*(time-E_pulse)/(sqrt(2._rp)*E_width)

          E_PHI(cc)=E_PHI(cc)+R0*E_dyn/Y_R(cc)*exp(-arg)*(1._rp+erf(-arg1))/2._rp
       end do
       !$OMP END SIMD
    CASE('MST_FSA')

       R0=F%AB%Ro
       Z0=F%Zo
       a=F%AB%a
       E_dyn=F%E_dyn
       
       !$OMP SIMD
       do cc=1_idef,pchunk

          !write(6,*) 'E_dyn',E_dyn,'E_PHI_in',E_PHI(cc)
          
          rm(cc)=sqrt((Y_R(cc)-R0)**2+(Y_Z(cc)-Z0)**2)
          r_a(cc)=rm(cc)/a
          E_PHI(cc) = E_PHI(cc)+E_dyn-sign((2._rp*r_a(cc)**3._rp- &
               3._rp*r_a(cc)**2._rp+1._rp)*0.05/params%cpp%Eo,E_dyn)

          !write(6,*) 'r/a',r_a,'E_PHI_out',E_PHI(cc)
          
       end do
       !$OMP END SIMD
    CASE DEFAULT
       E_PHI(cc)=E_PHI(cc)
    END SELECT
    
    !write(output_unit_write,*) arg,arg1

  end subroutine add_analytical_E_p