Appearance
fossil_decimate
Source: src/lib/fossil_decimate.f90
Dependencies
Contents
- decimate
- collect_vertex_ids
- collect_vertex_coords
- build_v2f
- v2x_append
- build_quadrics
- build_edges
- sort_he
- qsort_he
- build_v2e
- cost_all_edges
- cost_one_edge
- solve_3x3
- heap_build
- heap_decrease_key
- heap_increase_key
- heap_insert
- heap_sift_up
- heap_sift_down
- gather_incidence
- find_shared_facets
- recost_va_edges
- materialize_output
- quadric_eval
- heap_pop
- try_collapse
- check_normal_flip
- check_normal_flip_around_va
- cross
- check_nonmanifold
- find_edge
Variables
| Name | Type | Attributes | Description |
|---|---|---|---|
DEC_STATUS_OK | integer(kind=I4P) | parameter | |
DEC_STATUS_BAD_INPUT | integer(kind=I4P) | parameter | |
DEC_STATUS_NO_PROGRESS | integer(kind=I4P) | parameter | |
QSIZE | integer(kind=I4P) | parameter | |
NOT_IN_HEAP | integer(kind=I4P) | parameter |
Subroutines
decimate
fortran
subroutine decimate(facet, target_facets, status)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
facet | type(facet_object) | inout | allocatable | |
target_facets | integer(kind=I4P) | in | ||
status | integer(kind=I4P) | out | optional |
Call graph
collect_vertex_ids
fortran
subroutine collect_vertex_ids(facet, f_v, nv, st)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
facet | type(facet_object) | in | ||
f_v | integer(kind=I4P) | out | allocatable | |
nv | integer(kind=I4P) | out | ||
st | integer(kind=I4P) | out |
Call graph
collect_vertex_coords
fortran
subroutine collect_vertex_coords(facet, f_v, vcoord)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
facet | type(facet_object) | in | ||
f_v | integer(kind=I4P) | in | ||
vcoord | real(kind=R8P) | inout |
Call graph
build_v2f
fortran
subroutine build_v2f(f_v, nv, v2f_head, v2f_count, v2f_cap, v2f_val)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
f_v | integer(kind=I4P) | in | ||
nv | integer(kind=I4P) | in | ||
v2f_head | integer(kind=I4P) | out | allocatable | |
v2f_count | integer(kind=I4P) | out | allocatable | |
v2f_cap | integer(kind=I4P) | out | allocatable | |
v2f_val | integer(kind=I4P) | out | allocatable |
Call graph
v2x_append
fortran
subroutine v2x_append(head, count, cap, val, vertex, item)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
head | integer(kind=I4P) | inout | allocatable | |
count | integer(kind=I4P) | inout | ||
cap | integer(kind=I4P) | inout | ||
val | integer(kind=I4P) | inout | allocatable | |
vertex | integer(kind=I4P) | in | ||
item | integer(kind=I4P) | in |
Call graph
build_quadrics
fortran
subroutine build_quadrics(facet, f_v, vcoord, Q)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
facet | type(facet_object) | in | ||
f_v | integer(kind=I4P) | in | ||
vcoord | real(kind=R8P) | in | ||
Q | real(kind=R8P) | inout |
Call graph
build_edges
fortran
subroutine build_edges(facet, f_v, e_v, ne)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
facet | type(facet_object) | in | ||
f_v | integer(kind=I4P) | in | ||
e_v | integer(kind=I4P) | out | allocatable | |
ne | integer(kind=I4P) | out |
Call graph
sort_he
fortran
subroutine sort_he(he_lo, he_hi, order)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
he_lo | integer(kind=I4P) | in | ||
he_hi | integer(kind=I4P) | in | ||
order | integer(kind=I4P) | out | allocatable |
Call graph
qsort_he
Attributes: recursive
fortran
subroutine qsort_he(he_lo, he_hi, order, lo, hi)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
he_lo | integer(kind=I4P) | in | ||
he_hi | integer(kind=I4P) | in | ||
order | integer(kind=I4P) | inout | ||
lo | integer(kind=I4P) | in | ||
hi | integer(kind=I4P) | in |
Call graph
build_v2e
fortran
subroutine build_v2e(e_v, ne, nv, v2e_head, v2e_count, v2e_cap, v2e_val)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
e_v | integer(kind=I4P) | in | ||
ne | integer(kind=I4P) | in | ||
nv | integer(kind=I4P) | in | ||
v2e_head | integer(kind=I4P) | out | allocatable | |
v2e_count | integer(kind=I4P) | out | allocatable | |
v2e_cap | integer(kind=I4P) | out | allocatable | |
v2e_val | integer(kind=I4P) | out | allocatable |
Call graph
cost_all_edges
fortran
subroutine cost_all_edges(e_v, ne, vcoord, Q, e_target, e_cost)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
e_v | integer(kind=I4P) | in | ||
ne | integer(kind=I4P) | in | ||
vcoord | real(kind=R8P) | in | ||
Q | real(kind=R8P) | in | ||
e_target | real(kind=R8P) | inout | ||
e_cost | real(kind=R8P) | inout |
Call graph
cost_one_edge
fortran
subroutine cost_one_edge(va, vb, vcoord, Q, target, cost)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
va | integer(kind=I4P) | in | ||
vb | integer(kind=I4P) | in | ||
vcoord | real(kind=R8P) | in | ||
Q | real(kind=R8P) | in | ||
target | real(kind=R8P) | out | ||
cost | real(kind=R8P) | out |
Call graph
solve_3x3
Attributes: pure
fortran
subroutine solve_3x3(A, b, x, det)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
A | real(kind=R8P) | in | ||
b | real(kind=R8P) | in | ||
x | real(kind=R8P) | out | ||
det | real(kind=R8P) | out |
Call graph
heap_build
fortran
subroutine heap_build(ne, e_alive, e_cost, heap, e_heappos, heap_size)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
ne | integer(kind=I4P) | in | ||
e_alive | logical | in | ||
e_cost | real(kind=R8P) | in | ||
heap | integer(kind=I4P) | inout | ||
e_heappos | integer(kind=I4P) | inout | ||
heap_size | integer(kind=I4P) | inout |
Call graph
heap_decrease_key
fortran
subroutine heap_decrease_key(heap, e_heappos, e_cost, heap_size, e)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
heap | integer(kind=I4P) | inout | ||
e_heappos | integer(kind=I4P) | inout | ||
e_cost | real(kind=R8P) | in | ||
heap_size | integer(kind=I4P) | in | ||
e | integer(kind=I4P) | in |
Call graph
heap_increase_key
fortran
subroutine heap_increase_key(heap, e_heappos, e_cost, heap_size, e)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
heap | integer(kind=I4P) | inout | ||
e_heappos | integer(kind=I4P) | inout | ||
e_cost | real(kind=R8P) | in | ||
heap_size | integer(kind=I4P) | in | ||
e | integer(kind=I4P) | in |
Call graph
heap_insert
fortran
subroutine heap_insert(heap, e_heappos, e_cost, heap_size, e)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
heap | integer(kind=I4P) | inout | ||
e_heappos | integer(kind=I4P) | inout | ||
e_cost | real(kind=R8P) | in | ||
heap_size | integer(kind=I4P) | inout | ||
e | integer(kind=I4P) | in |
Call graph
heap_sift_up
fortran
subroutine heap_sift_up(heap, e_heappos, e_cost, heap_size, i)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
heap | integer(kind=I4P) | inout | ||
e_heappos | integer(kind=I4P) | inout | ||
e_cost | real(kind=R8P) | in | ||
heap_size | integer(kind=I4P) | in | ||
i | integer(kind=I4P) | in |
Call graph
heap_sift_down
fortran
subroutine heap_sift_down(heap, e_heappos, e_cost, heap_size, i)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
heap | integer(kind=I4P) | inout | ||
e_heappos | integer(kind=I4P) | inout | ||
e_cost | real(kind=R8P) | in | ||
heap_size | integer(kind=I4P) | in | ||
i | integer(kind=I4P) | in |
Call graph
gather_incidence
fortran
subroutine gather_incidence(head, count, val, vertex, out)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
head | integer(kind=I4P) | in | allocatable | |
count | integer(kind=I4P) | in | ||
val | integer(kind=I4P) | in | allocatable | |
vertex | integer(kind=I4P) | in | ||
out | integer(kind=I4P) | out | allocatable |
Call graph
find_shared_facets
fortran
subroutine find_shared_facets(va, vb, f_v, facet_alive, shared_facets, n_shared)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
va | integer(kind=I4P) | in | ||
vb | integer(kind=I4P) | in | ||
f_v | integer(kind=I4P) | in | ||
facet_alive | logical | in | ||
shared_facets | integer(kind=I4P) | out | ||
n_shared | integer(kind=I4P) | out |
Call graph
recost_va_edges
fortran
subroutine recost_va_edges(va, v2e_head, v2e_count, v2e_val, e_v, e_alive, vcoord, Q, e_target, e_cost, heap, e_heappos, heap_size)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
va | integer(kind=I4P) | in | ||
v2e_head | integer(kind=I4P) | in | allocatable | |
v2e_count | integer(kind=I4P) | in | ||
v2e_val | integer(kind=I4P) | in | allocatable | |
e_v | integer(kind=I4P) | in | ||
e_alive | logical | in | ||
vcoord | real(kind=R8P) | in | ||
Q | real(kind=R8P) | in | ||
e_target | real(kind=R8P) | inout | ||
e_cost | real(kind=R8P) | inout | ||
heap | integer(kind=I4P) | inout | ||
e_heappos | integer(kind=I4P) | inout | ||
heap_size | integer(kind=I4P) | inout |
Call graph
materialize_output
fortran
subroutine materialize_output(facet, f_v, vcoord, facet_alive)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
facet | type(facet_object) | inout | allocatable | |
f_v | integer(kind=I4P) | in | ||
vcoord | real(kind=R8P) | in | ||
facet_alive | logical | in |
Call graph
Functions
quadric_eval
Attributes: pure
Returns: real(kind=R8P)
fortran
function quadric_eval(Q, x) result(c)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
Q | real(kind=R8P) | in | ||
x | real(kind=R8P) | in |
Call graph
heap_pop
Returns: integer(kind=I4P)
fortran
function heap_pop(heap, e_heappos, e_cost, heap_size) result(top)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
heap | integer(kind=I4P) | inout | ||
e_heappos | integer(kind=I4P) | inout | ||
e_cost | real(kind=R8P) | in | ||
heap_size | integer(kind=I4P) | inout |
Call graph
try_collapse
Returns: logical
fortran
function try_collapse(va, vb, target, f_v, vcoord, vertex_alive, facet_alive, v2f_head, v2f_count, v2f_cap, v2f_val, v2e_head, v2e_count, v2e_cap, v2e_val, e_v, e_alive, Q, nf_alive, e_target, e_cost, heap, e_heappos, heap_size) result(accepted)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
va | integer(kind=I4P) | in | ||
vb | integer(kind=I4P) | in | ||
target | real(kind=R8P) | in | ||
f_v | integer(kind=I4P) | inout | ||
vcoord | real(kind=R8P) | inout | ||
vertex_alive | logical | inout | ||
facet_alive | logical | inout | ||
v2f_head | integer(kind=I4P) | inout | allocatable | |
v2f_count | integer(kind=I4P) | inout | allocatable | |
v2f_cap | integer(kind=I4P) | inout | allocatable | |
v2f_val | integer(kind=I4P) | inout | allocatable | |
v2e_head | integer(kind=I4P) | inout | allocatable | |
v2e_count | integer(kind=I4P) | inout | allocatable | |
v2e_cap | integer(kind=I4P) | inout | allocatable | |
v2e_val | integer(kind=I4P) | inout | allocatable | |
e_v | integer(kind=I4P) | inout | ||
e_alive | logical | inout | ||
Q | real(kind=R8P) | inout | ||
nf_alive | integer(kind=I4P) | inout | ||
e_target | real(kind=R8P) | inout | ||
e_cost | real(kind=R8P) | inout | ||
heap | integer(kind=I4P) | inout | ||
e_heappos | integer(kind=I4P) | inout | ||
heap_size | integer(kind=I4P) | inout |
Call graph
check_normal_flip
Returns: logical
fortran
function check_normal_flip(va, vb, target, facets_b, n_b, shared_facets, n_shared, f_v, vcoord, facet_alive) result(would_flip)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
va | integer(kind=I4P) | in | ||
vb | integer(kind=I4P) | in | ||
target | real(kind=R8P) | in | ||
facets_b | integer(kind=I4P) | in | ||
n_b | integer(kind=I4P) | in | ||
shared_facets | integer(kind=I4P) | in | ||
n_shared | integer(kind=I4P) | in | ||
f_v | integer(kind=I4P) | in | ||
vcoord | real(kind=R8P) | in | ||
facet_alive | logical | in |
Call graph
check_normal_flip_around_va
Returns: logical
fortran
function check_normal_flip_around_va(va, vb, target, v2f_head, v2f_count, v2f_val, shared_facets, n_shared, f_v, vcoord, facet_alive) result(would_flip)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
va | integer(kind=I4P) | in | ||
vb | integer(kind=I4P) | in | ||
target | real(kind=R8P) | in | ||
v2f_head | integer(kind=I4P) | in | allocatable | |
v2f_count | integer(kind=I4P) | in | ||
v2f_val | integer(kind=I4P) | in | allocatable | |
shared_facets | integer(kind=I4P) | in | ||
n_shared | integer(kind=I4P) | in | ||
f_v | integer(kind=I4P) | in | ||
vcoord | real(kind=R8P) | in | ||
facet_alive | logical | in |
Call graph
cross
Attributes: pure
Returns: real(kind=R8P)
fortran
function cross(a, b) result(c)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
a | real(kind=R8P) | in | ||
b | real(kind=R8P) | in |
Call graph
check_nonmanifold
Returns: logical
fortran
function check_nonmanifold(va, vb, v2e_head, v2e_count, v2e_val, e_v, e_alive, shared_facets, n_shared, f_v) result(would_nonmanifold)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
va | integer(kind=I4P) | in | ||
vb | integer(kind=I4P) | in | ||
v2e_head | integer(kind=I4P) | in | allocatable | |
v2e_count | integer(kind=I4P) | in | ||
v2e_val | integer(kind=I4P) | in | allocatable | |
e_v | integer(kind=I4P) | in | ||
e_alive | logical | in | ||
shared_facets | integer(kind=I4P) | in | ||
n_shared | integer(kind=I4P) | in | ||
f_v | integer(kind=I4P) | in |
Call graph
find_edge
Returns: integer(kind=I4P)
fortran
function find_edge(va, vw, v2e_head, v2e_count, v2e_val, e_v, e_alive) result(e_found)Arguments
| Name | Type | Intent | Attributes | Description |
|---|---|---|---|---|
va | integer(kind=I4P) | in | ||
vw | integer(kind=I4P) | in | ||
v2e_head | integer(kind=I4P) | in | allocatable | |
v2e_count | integer(kind=I4P) | in | ||
v2e_val | integer(kind=I4P) | in | allocatable | |
e_v | integer(kind=I4P) | in | ||
e_alive | logical | in |
Call graph