Resize a real(dp) field.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(inout), | allocatable | :: | values(:) | ||
| integer(kind=default_int), | intent(in) | :: | new_capacity | |||
| integer(kind=default_int), | intent(in) | :: | keep | |||
| integer(kind=default_int), | intent(in) | :: | fill_to | |||
| type(error_t), | intent(inout) | :: | err |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=dp), | private, | allocatable | :: | buffer(:) | |||
| integer(kind=default_int), | private | :: | stat |
subroutine soa_resize_real_dp_field(values, new_capacity, keep, fill_to, err) !! Resize a `real(dp)` field. real(dp), allocatable, intent(inout) :: values(:) integer(default_int), intent(in) :: new_capacity integer(default_int), intent(in) :: keep integer(default_int), intent(in) :: fill_to type(error_t), intent(inout) :: err real(dp), allocatable :: buffer(:) integer(default_int) :: stat call soa_check_resize_args(new_capacity, keep, fill_to, err) if (err%has_error()) return if (allocated(values)) then if (size(values, kind=default_int) == new_capacity) then if (fill_to > keep) values(keep + 1:fill_to) = 0.0_dp return end if end if allocate (buffer(new_capacity), stat=stat) call soa_check_alloc(stat, "resizing a real(dp) field", err) if (err%has_error()) return if (keep > 0) buffer(1:keep) = values(1:keep) if (fill_to > keep) buffer(keep + 1:fill_to) = 0.0_dp call move_alloc(buffer, values) end subroutine soa_resize_real_dp_field