uniformly illuminate a surface of the simulation media
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(photon) | :: | this | ||||
type(spectrum_t), | intent(in) | :: | spectrum | |||
type(toml_table), | intent(inout), | optional | :: | dict | ||
type(seq), | intent(inout), | optional | :: | seqs(2) |
subroutine uniform(this, spectrum, dict, seqs) !! uniformly illuminate a surface of the simulation media use random, only : ranu, ran2, randint, seq use sim_state_mod, only : state use tomlf, only : toml_table, get_value use constants, only : TWOPI use piecewiseMod class(photon) :: this type(spectrum_t), intent(in) :: spectrum type(toml_table), optional, intent(inout) :: dict type(seq), optional, intent(inout) :: seqs(2) integer :: cell(3) type(vector) :: pos1, pos2, pos3 real(kind=wp) :: rx, ry, tmp this%nxp = photon_origin%nxp this%nyp = photon_origin%nyp this%nzp = photon_origin%nzp this%cost = this%nzp this%sint = sqrt(1._wp - this%cost**2) this%phi = atan2(this%nyp, this%nxp) this%cosp = cos(this%phi) this%sinp = sin(this%phi) call get_value(dict, "pos1%x", pos1%x) call get_value(dict, "pos1%y", pos1%y) call get_value(dict, "pos1%z", pos1%z) call get_value(dict, "pos2%x", pos2%x) call get_value(dict, "pos2%y", pos2%y) call get_value(dict, "pos2%z", pos2%z) call get_value(dict, "pos3%x", pos3%x) call get_value(dict, "pos3%y", pos3%y) call get_value(dict, "pos3%z", pos3%z) rx = ran2()!seqs(1)%next() ry = ran2()!seqs(2)%next() this%pos%x = pos1%x + rx * pos2%x + ry * pos3%x this%pos%y = pos1%y + rx * pos2%y + ry * pos3%y this%pos%z = pos1%z + rx * pos2%z + ry * pos3%z this%tflag = .false. this%cnts = 0 this%bounces = 0 this%weight = 1.0_wp !FOR PHASE call spectrum%p%sample(this%wavelength, tmp) this%energy = 1._wp this%fact = TWOPI/(this%wavelength) this%phase = 0._wp ! Linear Grid cell = state%grid%get_voxel(this%pos) this%xcell = cell(1) this%ycell = cell(2) this%zcell = cell(3) end subroutine uniform