法線offset後の周期軸をprimary cellのstrict interiorへ戻す。
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(photo_raycast_config), | intent(in) | :: | sim | |||
| real(kind=dp), | intent(inout) | :: | position(3) |
pure subroutine canonicalize_periodic_emission_position(sim, position) class(photo_raycast_config), intent(in) :: sim real(dp), intent(inout) :: position(3) integer(i32) :: axis real(dp) :: span, scale, inset do axis = 1_i32, 3_i32 if (sim%bc_low(axis) /= bc_periodic .or. sim%bc_high(axis) /= bc_periodic) cycle span = sim%box_max(axis) - sim%box_min(axis) scale = max(abs(sim%box_min(axis)), abs(sim%box_max(axis)), span, tiny(1.0_dp)) inset = max(64.0_dp*epsilon(1.0_dp)*scale, spacing(scale)) inset = min(0.25_dp*span, inset) position(axis) = sim%box_min(axis) + modulo(position(axis) - sim%box_min(axis), span) position(axis) = min(max(position(axis), sim%box_min(axis) + inset), sim%box_max(axis) - inset) end do end subroutine canonicalize_periodic_emission_position