define_collisions_time_step Subroutine

public subroutine define_collisions_time_step(params, F, init)

Arguments

Type IntentOptional AttributesName
type(KORC_PARAMS), intent(inout) :: params
type(FIELDS), intent(in) :: F
logical, intent(in) :: init

Calls

proc~~define_collisions_time_step~~CallsGraph proc~define_collisions_time_step define_collisions_time_step proc~nu_s_fio nu_S_FIO proc~define_collisions_time_step->proc~nu_s_fio proc~nu_d_fio nu_D_FIO proc~define_collisions_time_step->proc~nu_d_fio proc~nu_s nu_S proc~define_collisions_time_step->proc~nu_s float float proc~define_collisions_time_step->float korc_abort korc_abort proc~define_collisions_time_step->korc_abort proc~nu_par nu_par proc~define_collisions_time_step->proc~nu_par proc~nu_d nu_D proc~define_collisions_time_step->proc~nu_d proc~cf_fio CF_FIO proc~nu_s_fio->proc~cf_fio proc~cb_ee CB_ee proc~nu_d_fio->proc~cb_ee proc~cb_ei_fio CB_ei_FIO proc~nu_d_fio->proc~cb_ei_fio proc~cf CF proc~nu_s->proc~cf proc~ca CA proc~nu_par->proc~ca proc~nu_d->proc~cb_ee proc~cb_ei CB_ei proc~nu_d->proc~cb_ei proc~psi psi proc~ca->proc~psi proc~cf_fio->proc~psi proc~clogee CLogee proc~cf_fio->proc~clogee proc~h_j h_j proc~cf_fio->proc~h_j proc~cb_ee->proc~psi proc~cf->proc~psi proc~cf->proc~clogee proc~cf->proc~h_j proc~clogei CLogei proc~cb_ei_fio->proc~clogei proc~g_j g_j proc~cb_ei_fio->proc~g_j proc~cb_ei_fio->proc~clogee proc~cb_ei->proc~clogei proc~cb_ei->proc~g_j proc~cb_ei->proc~clogee proc~clog0 CLog0 proc~clogei->proc~clog0 proc~vte VTe proc~clogei->proc~vte proc~clogee->proc~clog0 proc~clogee->proc~vte

Called by

proc~~define_collisions_time_step~~CalledByGraph proc~define_collisions_time_step define_collisions_time_step program~main main program~main->proc~define_collisions_time_step

Contents


Source Code

  subroutine define_collisions_time_step(params,F,init)
    TYPE(KORC_PARAMS), INTENT(INOUT) 	:: params
    TYPE(FIELDS), INTENT(IN) :: F
    LOGICAL, INTENT(IN)  :: init
    INTEGER(ip) 			:: iterations
    REAL(rp) 				:: E,E_min
    REAL(rp) 				:: v
    REAL(rp) 				:: Tau
    REAL(rp), DIMENSION(3) 		:: nu
    REAL(rp) 				:: num_collisions_in_simulation


    if (params%collisions) then
       E = C_ME*C_C**2 + params%minimum_particle_energy*params%cpp%energy

       
       E_min=sqrt((cparams_ss%p_min*cparams_ss%pmin_scale* &
            params%cpp%mass*params%cpp%velocity* &
            C_C)**2+(C_ME*C_C**2)**2)

       !write(6,'("E_min (MeV)",E17.10)') E/(10**6*C_E)
       !write(6,'("E_min (MeV)",E17.10)') E_min/(10**6*C_E)

       if (.not.params%LargeCollisions) then
          v = SQRT(1.0_rp - (C_ME*C_C**2/E)**2)
          !write(6,*) 'v_min',v
       else
          v = SQRT(1.0_rp - (C_ME*C_C**2/E_min)**2)
          !write(6,*) 'v_therm',v
       end if


       
       if ((params%profile_model.eq.'M3D_C1').or. &
            (params%profile_model(10:10).eq.'H')) then
          nu = (/nu_S_FIO(params,v),nu_D_FIO(params,v),nu_par(v)/)
       else
          nu = (/nu_S(params,v),nu_D(params,v),nu_par(v)/)
       endif
       Tau = MINVAL( 1.0_rp/nu )

       
       !write(output_unit_write,'("collision freqencies ",F25.12)') nu(3)
       !write(6,*) 'collision times',1/nu*params%cpp%time
       !write(6,*) 'p_min',cparams_ss%p_min
       
       cparams_ss%subcycling_iterations = ceiling(cparams_ss%dTau*Tau/ &
            params%dt,ip)
       params%coll_cadence=cparams_ss%subcycling_iterations

       if (params%LargeCollisions.and.params%snapshot_frequency.gt.0._rp) then

          !write(6,*) 'params%snapshot_frequency',params%snapshot_frequency*params%cpp%time
          !write(6,*) 'cparams_ss%dTau*Tau',cparams_ss%dTau*Tau*params%cpp%time
          !write(6,*) 'FLOOR(params%snapshot_frequency/cparams_ss%dTau*Tau)', &
          !     FLOOR(params%snapshot_frequency/ &
          !     (cparams_ss%dTau*Tau),ip)
          
          params%coll_per_dump=ceiling(params%snapshot_frequency/ &
               (cparams_ss%dTau*Tau))

          cparams_ss%coll_per_dump_dt=params%snapshot_frequency/params%coll_per_dump

          params%coll_per_dump_dt=cparams_ss%coll_per_dump_dt

          if (params%coll_per_dump.gt.params%t_skip) then
             write(6,*) 'more collisional iterations than orbit iterations, decrease orbit timestep!'
             call korc_abort(26)
          endif
          
          params%orbits_per_coll=ceiling(cparams_ss%coll_per_dump_dt/ &
               params%dt)

          params%dt=cparams_ss%coll_per_dump_dt/float(params%orbits_per_coll)         
          
       end if
       
       if (init) num_collisions_in_simulation = params%simulation_time/Tau

       if (params%mpi_params%rank .EQ. 0) then
          write(output_unit_write,'("* * * * * * * * * * * SUBCYCLING FOR  &
               COLLISIONS * * * * * * * * * * *")')

         write(output_unit_write,'("Slowing down freqency (CF): ",E17.10)') &
               nu(1)/params%cpp%time
          write(output_unit_write,'("Pitch angle scattering freqency (CB): ",E17.10)') &
               nu(2)/params%cpp%time
          write(output_unit_write,'("Speed diffusion freqency (CA): ",E17.10)') &
               nu(3)/params%cpp%time

!          write(6,*) Tau
          
          write(output_unit_write,'("The shorter collisional time in the simulations  &
               is: ",E17.10," s")') Tau*params%cpp%time
          write(output_unit_write,'("Number of KORC iterations per collision: ",I16)')  &
               cparams_ss%subcycling_iterations
          if (init) then
             write(output_unit_write,'("Number of collisions in simulated time: ",E17.10)')  &
                  num_collisions_in_simulation
          end if

          if (params%LargeCollisions) then

             write(output_unit_write,'("Number of collision steps per dump step: ",I16)') params%coll_per_dump

             write(output_unit_write,'("Collision time step: ",E17.10)') params%coll_per_dump_dt*params%cpp%time

             write(output_unit_write,'("Number of orbit steps per collision step: ",I16)') params%orbits_per_coll

             write(output_unit_write,'("Orbit time step: ",E17.10)') params%dt*params%cpp%time
             
          end if
          
          
          write(output_unit_write,'("* * * * * * * * * * * * * * * * * * * * &
               * * * * * * * * * * * * * * *",/)')
       end if
    end if
  end subroutine define_collisions_time_step