load_params_ms Subroutine

private subroutine load_params_ms(params)

Arguments

Type IntentOptional AttributesName
type(KORC_PARAMS), intent(in) :: params

Contents

Source Code


Source Code

  subroutine load_params_ms(params)
    TYPE(KORC_PARAMS), INTENT(IN) 	:: params
    REAL(rp) 				:: Te
    ! Background electron temperature in eV
    REAL(rp) 				:: ne
    ! Background electron density in 1/m^3
    INTEGER 				:: num_impurity_species
    REAL(rp), DIMENSION(10) 		:: Zo
    ! Full nuclear charge of each impurity: Z=1 for D, Z=10 for Ne
    REAL(rp), DIMENSION(10) 		:: Zj
    ! Atomic number of each impurity: Z=1 for D, Z=10 for Ne
    REAL(rp), DIMENSION(10) 		:: nz
    ! Impurity densities
    REAL(rp), DIMENSION(10) 		:: IZj
    ! Ionization energy of impurity in eV
    REAL(rp), DIMENSION(10) 		:: aZj
    INTEGER :: i

    NAMELIST /CollisionParamsMultipleSpecies/ num_impurity_species,Te,ne, &
         Zo,Zj,nz,IZj


    open(unit=default_unit_open,file=TRIM(params%path_to_inputs), &
         status='OLD',form='formatted')
    read(default_unit_open,nml=CollisionParamsMultipleSpecies)
    close(default_unit_open)

    cparams_ms%num_impurity_species = num_impurity_species

    ALLOCATE(cparams_ms%Zj(cparams_ms%num_impurity_species))
    ALLOCATE(cparams_ms%Zo(cparams_ms%num_impurity_species))
    ALLOCATE(cparams_ms%nz(cparams_ms%num_impurity_species))
    ALLOCATE(cparams_ms%neb(cparams_ms%num_impurity_species))
    ALLOCATE(cparams_ms%IZj(cparams_ms%num_impurity_species))
    ALLOCATE(cparams_ms%aZj(cparams_ms%num_impurity_species))
    ALLOCATE(cparams_ms%Ee_IZj(cparams_ms%num_impurity_species))

    cparams_ms%Te = Te*C_E
    cparams_ms%ne = ne
    cparams_ms%nH = ne

    cparams_ms%Zj = Zj(1:cparams_ms%num_impurity_species)
    cparams_ms%Zo = Zo(1:cparams_ms%num_impurity_species)
    cparams_ms%nz = nz(1:cparams_ms%num_impurity_species)

    do i=1,cparams_ms%num_impurity_species
       if (int(cparams_ms%Zo(i)).eq.10) then
          cparams_ms%IZj(i) = C_E*cparams_ms%INe(int(cparams_ms%Zj(i)+1))
          cparams_ms%aZj(i) = cparams_ms%aNe(int(cparams_ms%Zj(i)+1))
       else if (int(cparams_ms%Zo(i)).eq.18) then
          cparams_ms%IZj(i) = C_E*cparams_ms%IAr(int(cparams_ms%Zj(i)+1))
          cparams_ms%aZj(i) = cparams_ms%aAr(int(cparams_ms%Zj(i)+1))
       else
          if (params%mpi_params%rank .EQ. 0) then
             write(6,'("Atomic number not defined!")')
          end if
          exit             
       end if
    end do

    cparams_ms%nef = ne + sum(cparams_ms%Zj*cparams_ms%nz)
    cparams_ms%neb = (cparams_ms%Zo-cparams_ms%Zj)*cparams_ms%nz

    cparams_ms%rD = SQRT( C_E0*cparams_ms%Te/(cparams_ms%ne*C_E**2) )
    cparams_ms%re = C_RE
    cparams_ms%Ee_IZj = C_ME*C_C**2/cparams_ms%IZj
    
    if (params%mpi_params%rank .EQ. 0) then
       write(6,'("Number of impurity species: ",I16)')& 
            cparams_ms%num_impurity_species
       do i=1,cparams_ms%num_impurity_species
          if (cparams_ms%Zo(i).eq.10) then
             write(6,'("Ne with charge state: ",I16)') int(cparams_ms%Zj(i))
             write(6,'("Mean excitation energy I (eV)",E17.10)') &
                  cparams_ms%IZj(i)/C_E
             write(6,'("Effective ion length scale a (a_0)",E17.10)') &
                  cparams_ms%aZj(i)
          else if (cparams_ms%Zo(i).eq.18) then
             write(6,'("Ar with charge state: ",I16)') int(cparams_ms%Zj(i))
             write(6,'("Mean excitation energy I (eV)",E17.10)') &
                  cparams_ms%IZj(i)/C_E
             write(6,'("Effective ion length scale a (a_0)",E17.10)') &
                  cparams_ms%aZj(i)
          end if
       end do
    end if
    
  end subroutine load_params_ms