Represents the whole space. More...
Inheritance diagram for mod_shape_basic::t_shape_universe:Public Member Functions | |
| procedure | initialize (shape) |
| Initialize the shape. | |
| procedure | copy (shape, copy) |
| Copy the shape. | |
| procedure | is_inside (shape, point) |
| Check if a point lies inside the shape. | |
| procedure | get_samples_inside (shape, i, j, k, n, n_samples, samples) |
| Check if a given number of point lies in a shape. | |
| procedure | get_distance (shape, point, distance, direction) |
| Compute the distance and the direction from a point to the shape. | |
| procedure | ray_trace (shape, ray, has_normal, intersection_list) |
| Compute the intersection between the universe and a ray. | |
Public Member Functions inherited from type_shape::t_shape | |
| procedure(abs_initialize_shape), deferred | initialize (shape) |
| Initialize the shape. | |
| procedure(abs_copy_shape), deferred | copy (shape, copy) |
| Copy the shape. | |
| procedure(abs_shape_is_inside), deferred | is_inside (shape, point) |
| Check if a point lies inside the shape. | |
| procedure(abs_shape_get_samples_inside), deferred | get_samples_inside (shape, i, j, k, n, n_samples, samples) |
| Check if a given number of point lies in a shape. | |
| procedure(abs_shape_get_distance), deferred | get_distance (shape, point, distance, direction) |
| Compute the distance and the direction from a point to the shape. | |
| procedure(abs_shape_ray_trace), deferred | ray_trace (shape, ray, has_normal, intersection_list) |
| Compute the intersection between the shape and a ray. | |
Additional Inherited Members | |
Public Attributes inherited from type_shape::t_shape | |
| integer | dimension = 2 |
| Dimension of the shape. | |
| type(t_cg_transformation) | transformation |
| Transformation matrix. | |
| logical | is_reversed = .false. |
| Swap interior/exterior sides of the shape. | |
Represents the whole space.
| procedure mod_shape_basic::t_shape_universe::copy | ( | class(t_shape_universe), intent(in) | shape, |
| class(t_shape), allocatable | copy ) |
Copy the shape.
| [in] | shape | universe shape |
| [out] | copy | copied universe |
| procedure mod_shape_basic::t_shape_universe::get_distance | ( | class(t_shape_universe), intent(in) | shape, |
| double precision, dimension(3), intent(in) | point, | ||
| double precision, intent(out) | distance, | ||
| double precision, dimension(3), intent(out) | direction ) |
Compute the distance and the direction from a point to the shape.
If the point lies inside the universe, the distance is negative and the direction points to the closest point on the universe. If the point lies outside the universe (Wait, what?), the distance is positive and the direction points in the opposite direction to the closest point on the universe.
| [in] | shape | universe shape |
| [in] | point | any point |
| [out] | distance | signed closest distance from the point to the universe |
| [out] | direction | signed direction from the point to the closest point on the universe |
| procedure mod_shape_basic::t_shape_universe::get_samples_inside | ( | class(t_shape_universe), intent(inout) | shape, |
| integer, intent(in) | i, | ||
| integer, intent(in) | j, | ||
| integer, intent(in) | k, | ||
| integer, intent(in) | n, | ||
| integer, intent(in) | n_samples, | ||
| integer, dimension(:,:,:), intent(inout) | samples ) |
Check if a given number of point lies in a shape.
Sample a cell of coordinates (i,j,k) with (2*n_samples+1)^d samples, where d denotes the dimension of the cell. Return a integer array samples containing the value n where the sample is inside the shape.
n_samples is called the sampling level and can take its value in range [0,∞].
Example of sampling for various sampling level:
!! n_samples = 0 n_samples = 1 n_samples = 2 !! ┏━━━━━━━┓ ×━━━×━━━× ×━×━×━×━× !! ┃ ┃ ┃ ┃ × × × × × !! ┃ × ┃ × × × × × × × × ... !! ┃ ┃ ┃ ┃ × × × × × !! ┗━━━━━━━┛ ×━━━×━━━× ×━×━×━×━× !!
| [in,out] | shape | universe shape |
| [in] | i,j,k | coordinates of the cell |
| [in] | n | value to put where the sample is inside the universe |
| [in] | n_samples | sampling level (see description) |
| [in,out] | samples | array of the (2*n_samples+1)^d samples |
| procedure mod_shape_basic::t_shape_universe::initialize | ( | class(t_shape_universe), intent(inout) | shape | ) |
Initialize the shape.
| [in,out] | shape | universe shape |
| procedure mod_shape_basic::t_shape_universe::is_inside | ( | class(t_shape_universe), intent(in) | shape, |
| double precision, dimension(3), intent(in) | point ) |
Check if a point lies inside the shape.
| [in] | shape | universe shape |
| [in] | point | any point |
| procedure mod_shape_basic::t_shape_universe::ray_trace | ( | class(t_shape_universe), intent(in) | shape, |
| type(t_ray), intent(in) | ray, | ||
| logical, intent(in) | has_normal, | ||
| type(t_intersection_list), intent(inout) | intersection_list ) |
Compute the intersection between the universe and a ray.
| [in] | shape | universe shape |
| [in] | ray | ray to intersect the universe |
| [in] | has_normal | list of intersections between the ray and the universe |
| [in,out] | intersection_list | list of intersections between the ray and the universe |