coord_to_cell Function

public pure function coord_to_cell(mesh, x, axis) result(idx)

座標をグリッドセル添字へ変換し、範囲外は端セルへ丸める。

Arguments

Type IntentOptional Attributes Name
type(mesh_type), intent(in) :: mesh
real(kind=dp), intent(in) :: x
integer(kind=i32), intent(in) :: axis

Return Value integer(kind=i32)


Called by

proc~~coord_to_cell~2~~CalledByGraph proc~coord_to_cell~2 coord_to_cell proc~build_collision_grid build_collision_grid proc~build_collision_grid->proc~coord_to_cell~2 proc~update_mesh_geometry update_mesh_geometry proc~update_mesh_geometry->proc~build_collision_grid proc~init_mesh init_mesh proc~init_mesh->proc~update_mesh_geometry proc~prepare_periodic2_collision_mesh prepare_periodic2_collision_mesh proc~prepare_periodic2_collision_mesh->proc~update_mesh_geometry proc~apply_obj_transform apply_obj_transform proc~apply_obj_transform->proc~init_mesh proc~build_mesh_from_indexed build_mesh_from_indexed proc~build_mesh_from_indexed->proc~init_mesh proc~build_template_mesh build_template_mesh proc~build_template_mesh->proc~init_mesh proc~build_one_template build_one_template proc~build_template_mesh->proc~build_one_template proc~load_or_init_run_state load_or_init_run_state proc~load_or_init_run_state->proc~prepare_periodic2_collision_mesh proc~build_mesh_from_config build_mesh_from_config proc~load_or_init_run_state->proc~build_mesh_from_config proc~make_annulus make_annulus proc~make_annulus->proc~init_mesh proc~make_box make_box proc~make_box->proc~init_mesh proc~make_cylinder make_cylinder proc~make_cylinder->proc~init_mesh proc~make_plane make_plane proc~make_plane->proc~init_mesh proc~make_plate_hole make_plate_hole proc~make_plate_hole->proc~init_mesh proc~make_sphere make_sphere proc~make_sphere->proc~init_mesh proc~build_mesh_from_config->proc~apply_obj_transform proc~build_mesh_from_config->proc~build_template_mesh proc~load_obj_mesh load_obj_mesh proc~build_mesh_from_config->proc~load_obj_mesh proc~build_one_template->proc~make_annulus proc~build_one_template->proc~make_box proc~build_one_template->proc~make_cylinder proc~build_one_template->proc~make_plane proc~build_one_template->proc~make_plate_hole proc~build_one_template->proc~make_sphere proc~make_disk make_disk proc~build_one_template->proc~make_disk proc~load_obj_mesh->proc~build_mesh_from_indexed proc~make_disk->proc~make_annulus program~main main program~main->proc~load_or_init_run_state

Source Code

  pure integer(i32) function coord_to_cell(mesh, x, axis) result(idx)
    type(mesh_type), intent(in) :: mesh
    real(dp), intent(in) :: x
    integer(i32), intent(in) :: axis
    real(dp) :: u

    if (x <= mesh%grid_bb_min(axis)) then
      idx = 1_i32
      return
    end if
    if (x >= mesh%grid_bb_max(axis)) then
      idx = mesh%grid_ncell(axis)
      return
    end if

    u = (x - mesh%grid_bb_min(axis))*mesh%grid_inv_cell(axis)
    idx = int(u, kind=i32) + 1_i32
    if (idx < 1_i32) idx = 1_i32
    if (idx > mesh%grid_ncell(axis)) idx = mesh%grid_ncell(axis)
  end function coord_to_cell