19#include "./base/base_uses.f90"
27 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'lri_compression'
42 REAL(kind=
dp),
DIMENSION(:, :, :),
INTENT(IN) :: aval
43 REAL(kind=
dp),
DIMENSION(:),
INTENT(OUT) :: amax
46 INTEGER :: i, ia, ib, ii, na, nb, nc, nn
48 TYPE(
carray),
POINTER :: ca
50 IF (
ASSOCIATED(cont%ca))
THEN
51 DO i = 1,
SIZE(cont%ca)
52 IF (
ASSOCIATED(cont%ca(i)%cdp))
DEALLOCATE (cont%ca(i)%cdp)
53 IF (
ASSOCIATED(cont%ca(i)%csp))
DEALLOCATE (cont%ca(i)%csp)
54 IF (
ASSOCIATED(cont%ca(i)%cip))
DEALLOCATE (cont%ca(i)%cip)
67 ALLOCATE (cont%ca(nc))
70 NULLIFY (ca%cdp, ca%csp, ca%cip)
71 xm = maxval(abs(aval(:, :, i)))
72 IF (xm >= 1.0e-05_dp)
THEN
79 ca%cdp(ii) = aval(ia, ib, i)
82 ELSE IF (xm >= 1.0e-10_dp)
THEN
89 ca%csp(ii) = real(aval(ia, ib, i), kind=
sp)
108 REAL(kind=
dp) :: cmem
113 IF (
ASSOCIATED(cont%ca))
THEN
114 DO i = 1,
SIZE(cont%ca)
115 IF (
ASSOCIATED(cont%ca(i)%cdp))
THEN
116 cmem = cmem +
SIZE(cont%ca(i)%cdp)
118 IF (
ASSOCIATED(cont%ca(i)%csp))
THEN
119 cmem = cmem + 0.5_dp*
SIZE(cont%ca(i)%csp)
121 IF (
ASSOCIATED(cont%ca(i)%cip))
THEN
122 cmem = cmem +
SIZE(cont%ca(i)%cip)
135 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: aval
139 INTEGER :: ia, ib, ii, na, nb, nn
140 TYPE(
carray),
POINTER :: ca
145 cpassert(na == cont%na)
146 cpassert(nb == cont%nb)
147 cpassert(ival <= cont%nc)
151 SELECT CASE (ca%compression)
153 aval(1:na, 1:nb) = 0.0_dp
159 aval(ia, ib) = ca%cdp(ii)
167 aval(ia, ib) = real(ca%csp(ii), kind=
dp)
171 cpabort(
"lri_decomp_i: compression label invalid")
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public sp
integral compression (fix point accuracy)
subroutine, public lri_decomp_i(aval, cont, ival)
...
real(kind=dp) function, public lri_cont_mem(cont)
...
subroutine, public lri_comp(aval, amax, cont)
...
contains the types and subroutines for dealing with the lri_env lri : local resolution of the identit...