kap module InterfaceΒΆ
The primary entry point to the kap module is through the routine kap_get
. Broadly, one provides the density, temperature and full composition information, as well as information about the free electron fraction and electron chemical potential (required for calculation of the Compton scattering opacity). Then the module returns the opacity and its temperature and density derivatives.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | subroutine kap_get( & handle, species, chem_id, net_iso, xa, & logRho, logT, & lnfree_e, d_lnfree_e_dlnRho, d_lnfree_e_dlnT, & eta, d_eta_dlnRho, d_eta_dlnT , & kap_fracs, kap, dlnkap_dlnRho, dlnkap_dlnT, dlnkap_dxa, ierr) use chem_def, only: chem_isos use chem_lib, only: basic_composition_info use kap_def, only : kap_is_initialized, Kap_General_Info, num_kap_fracs, i_frac_Type2 use kap_eval, only : Get_kap_Results ! INPUT integer, intent(in) :: handle ! from alloc_kap_handle; in star, pass s% kap_handle integer, intent(in) :: species integer, pointer :: chem_id(:) ! maps species to chem id integer, pointer :: net_iso(:) ! maps chem id to species number real(dp), intent(in) :: xa(:) ! mass fractions real(dp), intent(in) :: logRho ! density real(dp), intent(in) :: logT ! temperature real(dp), intent(in) :: lnfree_e, d_lnfree_e_dlnRho, d_lnfree_e_dlnT ! free_e := total combined number per nucleon of free electrons and positrons real(dp), intent(in) :: eta, d_eta_dlnRho, d_eta_dlnT ! eta := electron degeneracy parameter from eos ! OUTPUT real(dp), intent(out) :: kap_fracs(num_kap_fracs) real(dp), intent(out) :: kap ! opacity real(dp), intent(out) :: dlnkap_dlnRho ! partial derivative at constant T real(dp), intent(out) :: dlnkap_dlnT ! partial derivative at constant Rho real(dp), intent(out) :: dlnkap_dxa(:) ! partial derivative w.r.t. species integer, intent(out) :: ierr ! 0 means AOK. type (Kap_General_Info), pointer :: rq real(dp) :: X, Y, Z, abar, zbar, z2bar, z53bar, ye, mass_correction, sumx real(dp) :: XC, XN, XO, XNe integer :: i, iz ierr = 0 if (.not. kap_is_initialized) then ierr=-1 return endif call kap_ptr(handle,rq,ierr) if (ierr /= 0) return call basic_composition_info( & species, chem_id, xa, X, Y, Z, & abar, zbar, z2bar, z53bar, ye, mass_correction, sumx) xc = 0; xn = 0; xo = 0; xne = 0 do i=1, species iz = chem_isos% Z(chem_id(i)) select case(iz) case (6) xc = xc + xa(i) case (7) xn = xn + xa(i) case (8) xo = xo + xa(i) case (10) xne = xne + xa(i) end select end do call Get_kap_Results( & rq, zbar, X, Z, XC, XN, XO, XNe, logRho, logT, & lnfree_e, d_lnfree_e_dlnRho, d_lnfree_e_dlnT, & eta, d_eta_dlnRho, d_eta_dlnT, & kap_fracs, kap, dlnkap_dlnRho, dlnkap_dlnT, ierr) ! composition derivatives not implemented dlnkap_dxa = 0 end subroutine kap_get |