47 subroutine set_cak_opacity(rho, temp, alpha_output, Qbar_output, Q0_output, kappae_output)
48 double precision,
intent(in) :: rho, temp
49 double precision,
intent(out) :: alpha_output, qbar_output, q0_output, kappae_output
51 double precision :: d_input, t_input, kappa_cak
56 d_input = min(-7.d0-1.d-5, d_input)
57 d_input = max(-16.d0+1.d-5, d_input)
58 t_input = min(5d0-1.d-5, t_input)
59 t_input = max(4d0+1.d-5, t_input)
63 alpha_output, qbar_output, q0_output, kappae_output)
70 character(*),
intent(in) :: filename
71 double precision,
intent(out) :: K(iDmin:iDmax,iTmin:iTmax), D(iDmin:iDmax), T(iTmin:iTmax)
77 open(unit=1, status=
'old', file=trim(filename))
80 read(1,*) dum, t(itmin:itmax)
84 read(1,*) d(row), k(row,itmin:itmax)
94 logD_list, logT_list, D, T, &
97 double precision,
intent(in) :: K1_vals(iDmin:iDmax,iTmin:iTmax)
98 double precision,
intent(in) :: K2_vals(iDmin:iDmax,iTmin:iTmax)
99 double precision,
intent(in) :: K3_vals(iDmin:iDmax,iTmin:iTmax)
100 double precision,
intent(in) :: K4_vals(iDmin:iDmax,iTmin:iTmax)
101 double precision,
intent(in) :: logD_list(iDmin:iDmax), logT_list(iTmin:iTmax)
102 double precision,
intent(in) :: D, T
103 double precision,
intent(out) :: K1, K2, K3, K4
106 integer :: low_D_index, up_D_index, low_T_index, up_T_index
108 if (d .gt. maxval(logd_list))
then
110 low_d_index = idmax-1
112 elseif (d .lt. minval(logd_list))
then
120 if (t .gt. maxval(logt_list))
then
122 low_t_index = itmax-1
124 elseif (t .lt. minval(logt_list))
then
132 call interpolate_krt(low_d_index, up_d_index, low_t_index, up_t_index, &
133 logd_list, logt_list, k1_vals, d, t, k1)
135 call interpolate_krt(low_d_index, up_d_index, low_t_index, up_t_index, &
136 logd_list, logt_list, k2_vals, d, t, k2)
138 call interpolate_krt(low_d_index, up_d_index, low_t_index, up_t_index, &
139 logd_list, logt_list, k3_vals, d, t, k3)
141 call interpolate_krt(low_d_index, up_d_index, low_t_index, up_t_index, &
142 logd_list, logt_list, k4_vals, d, t, k4)
150 integer,
intent(in) :: imin, imax
151 double precision,
intent(in) :: var_in, var_list(imin:imax)
152 integer,
intent(out) :: low_i, up_i
155 double precision :: low_val, up_val, res(imin:imax)
157 res = var_list - var_in
160 up_val = minval(res, mask = res .ge. 0) + var_in
161 low_val = maxval(res, mask = res .le. 0) + var_in
164 up_i = minloc(abs(var_list - up_val),1) + imin -1
165 low_i = minloc(abs(var_list - low_val),1) + imin -1
167 if (up_i .eq. low_i) low_i = low_i - 1
172 subroutine interpolate_krt(low_r, up_r, low_t, up_t, logD_list, logT_list, Kappa_vals, D, T, kappa_interp)
174 integer,
intent(in) :: low_r, up_r, low_t, up_t
175 double precision,
intent(in) :: Kappa_vals(iDmin:iDmax,iTmin:iTmax)
176 double precision,
intent(in) :: logD_list(iDmin:iDmax), logT_list(iTmin:iTmax)
177 double precision,
intent(in) :: D, T
178 double precision,
intent(out) :: kappa_interp
181 double precision :: r1, r2, t1, t2, k1, k2, k3, k4, ka, kb
200 r1 = logd_list(low_r)
202 t1 = logt_list(low_t)
205 k1 = kappa_vals(low_r, low_t)
206 k2 = kappa_vals(low_r, up_t)
207 k3 = kappa_vals(up_r, low_t)
208 k4 = kappa_vals(up_r, up_t)
subroutine interpolate_krt(low_r, up_r, low_t, up_t, logd_list, logt_list, kappa_vals, d, t, kappa_interp)
This subroutine does a bilinear interpolation in the R,T-plane.
subroutine get_low_up_index(var_in, var_list, imin, imax, low_i, up_i)
This subroutine finds the indices in rho and T arrays of the two values surrounding the input rho and...
subroutine, public set_cak_opacity(rho, temp, alpha_output, qbar_output, q0_output, kappae_output)
This subroutine calculates the opacity for a given temperature-density structure. Opacities are read ...
subroutine get_val_comb(k1_vals, k2_vals, k3_vals, k4_vals, logd_list, logt_list, d, t, k1, k2, k3, k4)
This subroutine looks in the table for the four couples (T,rho) surrounding a given input T and rho.