subroutine radiation_initialize(mesh, rad, params, context)
type(mesh_t), intent(in) :: mesh
type(radiation_mpi_t), intent(in) :: rad
type(case_params_t), intent(in) :: params
type(radiation_context_t), intent(inout) :: context
integer :: j, idx
call radiation_finalize(context)
context%enabled = params%enable_radiation
context%model = trim(lowercase(params%radiation_source_model))
context%rad_rank = rad%rank
context%rad_size = rad%nprocs
context%n_wavenumbers = params%radiation_n_wavenumbers
context%wn_first = rad%first_wavenumber
context%wn_last = rad%last_wavenumber
context%nlocal_wavenumbers = rad%nlocal_wavenumbers
context%ncells = mesh%ncells
context%nfaces = mesh%nfaces
context%pressure_source = trim(lowercase(params%radiation_pressure_source))
context%mesh_cached = params%enable_radiation
context%debug = params%radiation_debug
context%write_diagnostics = params%write_radiation_diagnostics
context%setup_file = trim(params%output_dir)//'/radiation_setup.txt'
context%diagnostics_file = trim(params%output_dir)//'/diagnostics/radiation_diagnostics.csv'
if (.not. context%enabled) return
context%n_species = params%radiation_n_species
if (context%n_species > 0) then
allocate(context%species_name(context%n_species), context%species_index(context%n_species))
do j = 1, context%n_species
context%species_name(j) = trim(params%radiation_species_name(j))
if (len_trim(context%species_name(j)) == 0) then
call fatal_error('radiation', 'blank radiation_species_name entry')
end if
idx = species_index_of(params%species_name, params%nspecies, context%species_name(j))
if (idx <= 0) then
call fatal_error('radiation', 'radiation species "'//trim(context%species_name(j))//'" is not in the active species list')
end if
context%species_index(j) = idx
end do
end if
context%n_scalars = params%radiation_n_scalars
if (context%n_scalars > 0) then
allocate(context%scalar_name(context%n_scalars))
do j = 1, context%n_scalars
context%scalar_name(j) = trim(params%radiation_scalar_name(j))
if (len_trim(context%scalar_name(j)) == 0) then
call fatal_error('radiation', 'blank radiation_scalar_name entry')
end if
end do
end if
select case (trim(context%model))
case ('none', 'spectral_test', 'external', 'p1', 'dom')
continue
case default
call fatal_error('radiation', 'unknown radiation_source_model: '//trim(context%model))
end select
call write_radiation_setup(mesh, rad, params, context)
end subroutine radiation_initialize