Advertisement
mabruzzo

preserve-args cool_multi_time_g-cpp.C

Dec 4th, 2024
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 19.38 KB | None | 0 0
  1. #include <cstdio>
  2. #include <vector>
  3.  
  4. #include "grackle.h"
  5. #include "fortran_func_decls.h"
  6. #include "utils-cpp.hpp"
  7. #include "cool_multi_time_g-cpp.h"
  8.  
  9. //_// TODO: ADD ANY OTHER INCLUDE DIRECTIVES
  10.  
  11. extern "C" {
  12. void cool_multi_time_g(
  13.   gr_float* d, gr_float* e, gr_float* u, gr_float* v, gr_float* w, gr_float* de,
  14.   gr_float* HI, gr_float* HII, gr_float* HeI, gr_float* HeII, gr_float* HeIII,
  15.   gr_float* cooltime_data_, int* in, int* jn, int* kn, int* nratec,
  16.   int* iexpand, int* ispecies, int* imetal, int* imcool, int* idust,
  17.   int* idustall, int* idustfield, int* idustrec, int* idim, int* is, int* js,
  18.   int* ks, int* ie, int* je, int* ke, int* ih2co, int* ipiht, int* igammah,
  19.   double* aye, double* temstart, double* temend, double* utem, double* uxyz,
  20.   double* uaye, double* urho, double* utim, double* gamma, double* fh,
  21.   double* z_solar, double* fgr, double* ceHIa, double* ceHeIa, double* ceHeIIa,
  22.   double* ciHIa, double* ciHeIa, double* ciHeISa, double* ciHeIIa,
  23.   double* reHIIa, double* reHeII1a, double* reHeII2a, double* reHeIIIa,
  24.   double* brema, double* compa, double* gammaha, double* isrf, double* regra,
  25.   double* gamma_isrfa, double* comp_xraya, double* comp_temp, double* piHI,
  26.   double* piHeI, double* piHeII, gr_float* HM, gr_float* H2I, gr_float* H2II,
  27.   gr_float* DI, gr_float* DII, gr_float* HDI, gr_float* metal, gr_float* dust,
  28.   double* hyd01ka, double* h2k01a, double* vibha, double* rotha, double* rotla,
  29.   double* gpldla, double* gphdla, double* hdltea, double* hdlowa, double* gaHIa,
  30.   double* gaH2a, double* gaHea, double* gaHpa, double* gaela, double* h2ltea,
  31.   double* gasgra, int* iradshield, double* avgsighi, double* avgsighei,
  32.   double* avgsigheii, double* k24, double* k26, int* iradtrans,
  33.   double* photogamma, int* ih2optical, int* iciecool, int* ih2cr, int* ihdcr,
  34.   double* ciecoa, int* icmbTfloor, int* iClHeat, double* clEleFra,
  35.   long long* priGridRank, long long* priGridDim, double* priPar1,
  36.   double* priPar2, double* priPar3, double* priPar4, double* priPar5,
  37.   long long* priDataSize, double* priCooling, double* priHeating,
  38.   double* priMMW, long long* metGridRank, long long* metGridDim,
  39.   double* metPar1, double* metPar2, double* metPar3, double* metPar4,
  40.   double* metPar5, long long* metDataSize, double* metCooling,
  41.   double* metHeating, int* clnew, int* iVheat, int* iMheat, gr_float* Vheat,
  42.   gr_float* Mheat, int* iTfloor, double* Tfloor_scalar, gr_float* Tfloor,
  43.   int* imchem, int* igrgr, int* ipcont, double* tmcool, gr_float* DM,
  44.   gr_float* HDII, gr_float* HeHII, gr_float* CI, gr_float* CII, gr_float* CO,
  45.   gr_float* CO2, gr_float* OI, gr_float* OH, gr_float* H2O, gr_float* O2,
  46.   gr_float* SiI, gr_float* SiOI, gr_float* SiO2I, gr_float* CH, gr_float* CH2,
  47.   gr_float* COII, gr_float* OII, gr_float* OHII, gr_float* H2OII,
  48.   gr_float* H3OII, gr_float* O2II, gr_float* Mg, gr_float* Al, gr_float* S,
  49.   gr_float* Fe, gr_float* SiM, gr_float* FeM, gr_float* Mg2SiO4,
  50.   gr_float* MgSiO3, gr_float* Fe3O4, gr_float* AC, gr_float* SiO2D,
  51.   gr_float* MgO, gr_float* FeS, gr_float* Al2O3, gr_float* reforg,
  52.   gr_float* volorg, gr_float* H2Oice, double* cieY06a, int* LH2_N,
  53.   int* LH2_Size, double* LH2_D, double* LH2_T, double* LH2_H, double* LH2_dD,
  54.   double* LH2_dT, double* LH2_dH, double* LH2_L, int* LHD_N, int* LHD_Size,
  55.   double* LHD_D, double* LHD_T, double* LHD_H, double* LHD_dD, double* LHD_dT,
  56.   double* LHD_dH, double* LHD_L, int* LCI_N, int* LCI_Size, double* LCI_D,
  57.   double* LCI_T, double* LCI_H, double* LCI_dD, double* LCI_dT, double* LCI_dH,
  58.   double* LCI_L, int* LCII_N, int* LCII_Size, double* LCII_D, double* LCII_T,
  59.   double* LCII_H, double* LCII_dD, double* LCII_dT, double* LCII_dH,
  60.   double* LCII_L, int* LOI_N, int* LOI_Size, double* LOI_D, double* LOI_T,
  61.   double* LOI_H, double* LOI_dD, double* LOI_dT, double* LOI_dH, double* LOI_L,
  62.   int* LCO_N, int* LCO_Size, double* LCO_D, double* LCO_T, double* LCO_H,
  63.   double* LCO_dD, double* LCO_dT, double* LCO_dH, double* LCO_L, int* LOH_N,
  64.   int* LOH_Size, double* LOH_D, double* LOH_T, double* LOH_H, double* LOH_dD,
  65.   double* LOH_dT, double* LOH_dH, double* LOH_L, int* LH2O_N, int* LH2O_Size,
  66.   double* LH2O_D, double* LH2O_T, double* LH2O_H, double* LH2O_dD,
  67.   double* LH2O_dT, double* LH2O_dH, double* LH2O_L, int* alphap_N,
  68.   int* alphap_Size, double* alphap_D, double* alphap_T, double* alphap_dD,
  69.   double* alphap_dT, double* alphap_Data, int* immulti, int* imabund,
  70.   int* idspecies, int* itdmulti, int* idsub, gr_float* metal_loc,
  71.   gr_float* metal_C13, gr_float* metal_C20, gr_float* metal_C25,
  72.   gr_float* metal_C30, gr_float* metal_F13, gr_float* metal_F15,
  73.   gr_float* metal_F50, gr_float* metal_F80, gr_float* metal_P170,
  74.   gr_float* metal_P200, gr_float* metal_Y19, int* SN0_N, double* SN0_fSiM,
  75.   double* SN0_fFeM, double* SN0_fMg2SiO4, double* SN0_fMgSiO3,
  76.   double* SN0_fFe3O4, double* SN0_fAC, double* SN0_fSiO2D, double* SN0_fMgO,
  77.   double* SN0_fFeS, double* SN0_fAl2O3, double* SN0_freforg,
  78.   double* SN0_fvolorg, double* SN0_fH2Oice, double* SN0_r0SiM,
  79.   double* SN0_r0FeM, double* SN0_r0Mg2SiO4, double* SN0_r0MgSiO3,
  80.   double* SN0_r0Fe3O4, double* SN0_r0AC, double* SN0_r0SiO2D, double* SN0_r0MgO,
  81.   double* SN0_r0FeS, double* SN0_r0Al2O3, double* SN0_r0reforg,
  82.   double* SN0_r0volorg, double* SN0_r0H2Oice, int* gr_N, int* gr_Size,
  83.   double* gr_dT, double* gr_Td, double* SN0_kpSiM, double* SN0_kpFeM,
  84.   double* SN0_kpMg2SiO4, double* SN0_kpMgSiO3, double* SN0_kpFe3O4,
  85.   double* SN0_kpAC, double* SN0_kpSiO2D, double* SN0_kpMgO, double* SN0_kpFeS,
  86.   double* SN0_kpAl2O3, double* SN0_kpreforg, double* SN0_kpvolorg,
  87.   double* SN0_kpH2Oice, double* gasgr2a, double* gamma_isrf2a, int* iisrffield,
  88.   gr_float* isrf_habing
  89. )
  90. {
  91.  
  92.   //   SOLVE RADIATIVE COOLING/HEATING EQUATIONS
  93.  
  94.   //   written by: Yu Zhang, Peter Anninos and Tom Abel
  95.   //   date:
  96.   //   modified1: January, 1996 by Greg Bryan; adapted to KRONOS
  97.   //   modified2: October, 1996 by GB; moved to AMR
  98.   //   modified3: February, 2003 by Robert Harkness; iteration mask
  99.  
  100.   //   PURPOSE:
  101.   //     Solve the energy cooling equations.
  102.  
  103.   //   INPUTS:
  104.   //     is,ie   - start and end indicies of active region (zero-based!)
  105.  
  106.   //   PARAMETERS:
  107.  
  108.   // -----------------------------------------------------------------------
  109.  
  110.  
  111.   // Arguments
  112.  
  113.   // -- removed line (previously just declared arg types) --
  114.  
  115.   // -- removed line (previously just declared arg types) --
  116.   grackle::impl::View<gr_float***> cooltime(cooltime_data_, (*in), (*jn), (*kn));
  117.   // -- removed line (previously just declared arg types) --
  118.   // -- removed line (previously just declared arg types) --
  119.   // -- removed line (previously just declared arg types) --
  120.   // -- removed line (previously just declared arg types) --
  121.   // -- removed line (previously just declared arg types) --
  122.   // -- removed line (previously just declared arg types) --
  123.   // -- removed line (previously just declared arg types) --
  124.   // -- removed line (previously just declared arg types) --
  125.   // -- removed line (previously just declared arg types) --
  126.   // -- removed line (previously just declared arg types) --
  127.   // -- removed line (previously just declared arg types) --
  128.   // -- removed line (previously just declared arg types) --
  129.   // -- removed line (previously just declared arg types) --
  130.   // -- removed line (previously just declared arg types) --
  131.   // -- removed line (previously just declared arg types) --
  132.   // -- removed line (previously just declared arg types) --
  133.   // -- removed line (previously just declared arg types) --
  134.   // -- removed line (previously just declared arg types) --
  135.   // -- removed line (previously just declared arg types) --
  136.   // -- removed line (previously just declared arg types) --
  137.   // -- removed line (previously just declared arg types) --
  138.   // -- removed line (previously just declared arg types) --
  139.   // -- removed line (previously just declared arg types) --
  140.   // opacity table
  141.   // -- removed line (previously just declared arg types) --
  142.   // -- removed line (previously just declared arg types) --
  143.   // grain temperature
  144.   std::vector<double> tSiM((*in));
  145.   std::vector<double> tFeM((*in));
  146.   std::vector<double> tMg2SiO4((*in));
  147.   std::vector<double> tMgSiO3((*in));
  148.   std::vector<double> tFe3O4((*in));
  149.   std::vector<double> tAC((*in));
  150.   std::vector<double> tSiO2D((*in));
  151.   std::vector<double> tMgO((*in));
  152.   std::vector<double> tFeS((*in));
  153.   std::vector<double> tAl2O3((*in));
  154.   std::vector<double> treforg((*in));
  155.   std::vector<double> tvolorg((*in));
  156.   std::vector<double> tH2Oice((*in));
  157.   // -- removed line (previously just declared arg types) --
  158.  
  159.   // Cloudy cooling data
  160.  
  161.   // -- removed line (previously just declared arg types) --
  162.   // -- removed line (previously just declared arg types) --
  163.   // -- removed line (previously just declared arg types) --
  164.  
  165.   // Parameters
  166.  
  167.   // Locals
  168.  
  169.   int i, j, k;
  170.   int t, dj, dk;
  171.   double comp1, comp2, energy;
  172.   gr_float factor;
  173.  
  174.   // Slice locals
  175.  
  176.   std::vector<long long> indixe((*in));
  177.   std::vector<double> t1((*in));
  178.   std::vector<double> t2((*in));
  179.   std::vector<double> logtem((*in));
  180.   std::vector<double> tdef((*in));
  181.   std::vector<double> p2d((*in));
  182.   std::vector<double> tgas((*in));
  183.   std::vector<double> tgasold((*in));
  184.   std::vector<double> mmw((*in));
  185.   std::vector<double> tdust((*in));
  186.   std::vector<double> metallicity((*in));
  187.   std::vector<double> dust2gas((*in));
  188.   std::vector<double> rhoH((*in));
  189.   std::vector<double> mynh((*in));
  190.   std::vector<double> myde((*in));
  191.   std::vector<double> gammaha_eff((*in));
  192.   std::vector<double> gasgr_tdust((*in));
  193.   std::vector<double> regr((*in));
  194.   std::vector<double> edot((*in));
  195.  
  196.   // Cooling/heating slice locals
  197.  
  198.   std::vector<double> ceHI((*in));
  199.   std::vector<double> ceHeI((*in));
  200.   std::vector<double> ceHeII((*in));
  201.   std::vector<double> ciHI((*in));
  202.   std::vector<double> ciHeI((*in));
  203.   std::vector<double> ciHeIS((*in));
  204.   std::vector<double> ciHeII((*in));
  205.   std::vector<double> reHII((*in));
  206.   std::vector<double> reHeII1((*in));
  207.   std::vector<double> reHeII2((*in));
  208.   std::vector<double> reHeIII((*in));
  209.   std::vector<double> brem((*in));
  210.   std::vector<double> cieco((*in));
  211.   std::vector<double> hyd01k((*in));
  212.   std::vector<double> h2k01((*in));
  213.   std::vector<double> vibh((*in));
  214.   std::vector<double> roth((*in));
  215.   std::vector<double> rotl((*in));
  216.   std::vector<double> gpldl((*in));
  217.   std::vector<double> gphdl((*in));
  218.   std::vector<double> hdlte((*in));
  219.   std::vector<double> hdlow((*in));
  220.   int dummy_iter_arg;
  221.          
  222.   // Iteration mask for multi_cool
  223.  
  224.   std::vector<gr_mask_type> itmask((*in));
  225.   std::vector<gr_mask_type> itmask_metal((*in));
  226.  
  227.   // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/////////////////////////////////
  228.   // =======================================================================
  229.   dk = (*ke) - (*ks) + 1;
  230.   dj = (*je) - (*js) + 1;
  231.  
  232.   // Convert densities from comoving to 'proper'
  233.  
  234.   if ((*iexpand) == 1)  {
  235.  
  236.     factor = (gr_float)(std::pow((*aye),(-3)) );
  237.  
  238.      FORTRAN_NAME(scale_fields_g)(
  239.       ispecies, imetal, idustfield, imchem,
  240.       imabund, idspecies, immulti, igrgr, idsub, &factor,
  241.       is, ie, js, je, ks, ke, in, jn, kn,
  242.       d, de, HI, HII, HeI, HeII, HeIII,
  243.       HM, H2I, H2II, DI, DII, HDI, DM, HDII, HeHII,
  244.       metal, dust,
  245.       CI, CII, CO, CO2,
  246.       OI, OH, H2O, O2,
  247.       SiI, SiOI, SiO2I,
  248.       CH, CH2, COII, OII,
  249.       OHII, H2OII, H3OII, O2II,
  250.       Mg, Al, S, Fe,
  251.       SiM, FeM, Mg2SiO4, MgSiO3, Fe3O4,
  252.       AC, SiO2D, MgO, FeS, Al2O3,
  253.       reforg, volorg, H2Oice,
  254.       metal_loc, metal_C13, metal_C20, metal_C25, metal_C30,
  255.       metal_F13, metal_F15, metal_F50, metal_F80,
  256.       metal_P170, metal_P200, metal_Y19);
  257.  
  258.   }
  259.  
  260.   // Loop over slices (in the k-direction)
  261.  
  262.   // parallelize the k and j loops with OpenMP
  263.   // flat j and k loops for better parallelism
  264.   //_// PORT: #ifdef _OPENMP
  265.   //_// PORT: !$omp parallel do schedule(runtime) private(
  266.   //_// PORT: !$omp&   i, j, k,
  267.   //_// PORT: !$omp&   comp1, comp2, energy,
  268.   //_// PORT: !$omp&   indixe,
  269.   //_// PORT: !$omp&   t1, t2, logtem, tdef, p2d,
  270.   //_// PORT: !$omp&   tgas, tgasold,
  271.   //_// PORT: !$omp&   tdust, metallicity, dust2gas, rhoH, mmw,
  272.   //_// PORT: !$omp&   mynh, myde, gammaha_eff, gasgr_tdust, regr, edot,
  273.   //_// PORT: !$omp&   ceHI, ceHeI, ceHeII,
  274.   //_// PORT: !$omp&   ciHI, ciHeI, ciHeIS, ciHeII,
  275.   //_// PORT: !$omp&   reHII, reHeII1, reHeII2, reHeIII,
  276.   //_// PORT: !$omp&   brem, cieco,
  277.   //_// PORT: !$omp&   hyd01k, h2k01, vibh, roth, rotl,
  278.   //_// PORT: !$omp&   gpldl, gphdl, hdlte, hdlow,
  279.   //_// PORT: !$omp&   itmask )
  280.   //_// PORT: #endif
  281.   for (t = 0; t<=(dk * dj - 1); t++) {
  282.     k = t/dj      + (*ks)+1;
  283.     j = grackle::impl::mod(t,dj) + (*js)+1;
  284.  
  285.     for (i = (*is) + 1; i<=((*ie) + 1); i++) {
  286.       itmask[i-1] = MASK_TRUE;
  287.     }
  288.  
  289.     // Compute the cooling rate
  290.     dummy_iter_arg=1;
  291.  
  292.      FORTRAN_NAME(cool1d_multi_g)(
  293.                  d, e, u, v, w, de, HI, HII, HeI, HeII, HeIII,
  294.                  in, jn, kn, nratec,
  295.                  iexpand, ispecies, imetal, imcool,
  296.                  idust, idustall, idustfield, idustrec,
  297.                  idim, is, ie, &j, &k, ih2co, ipiht,
  298.                  &dummy_iter_arg, igammah,
  299.                  aye, temstart, temend, z_solar, fgr,
  300.                  utem, uxyz, uaye, urho, utim,
  301.                  gamma, fh,
  302.                  ceHIa, ceHeIa, ceHeIIa, ciHIa, ciHeIa,
  303.                  ciHeISa, ciHeIIa, reHIIa, reHeII1a,
  304.                  reHeII2a, reHeIIIa, brema, compa, gammaha,
  305.                  isrf, regra, gamma_isrfa, comp_xraya, comp_temp,
  306.                  piHI, piHeI, piHeII, &comp1, &comp2,
  307.                  HM, H2I, H2II, DI, DII, HDI, metal, dust,
  308.                  hyd01ka, h2k01a, vibha, rotha, rotla,
  309.                  hyd01k.data(), h2k01.data(), vibh.data(), roth.data(), rotl.data(),
  310.                  gpldla, gphdla, gpldl.data(), gphdl.data(),
  311.                  hdltea, hdlowa, hdlte.data(), hdlow.data(),
  312.                  gaHIa, gaH2a, gaHea, gaHpa, gaela,
  313.                  h2ltea, gasgra,
  314.                  ceHI.data(), ceHeI.data(), ceHeII.data(), ciHI.data(), ciHeI.data(), ciHeIS.data(), ciHeII.data(),
  315.                  reHII.data(), reHeII1.data(), reHeII2.data(), reHeIII.data(), brem.data(),
  316.                  indixe.data(), t1.data(), t2.data(), logtem.data(), tdef.data(), edot.data(),
  317.                  tgas.data(), tgasold.data(), mmw.data(), p2d.data(), tdust.data(), metallicity.data(),
  318.                  dust2gas.data(), rhoH.data(), mynh.data(), myde.data(),
  319.                  gammaha_eff.data(), gasgr_tdust.data(), regr.data(),
  320.                  iradshield, avgsighi, avgsighei, avgsigheii,
  321.                  k24, k26, iradtrans, photogamma,
  322.                  ih2optical, iciecool, ih2cr, ihdcr, ciecoa, cieco.data(),
  323.                  icmbTfloor, iClHeat, clEleFra,
  324.                  priGridRank, priGridDim,
  325.                  priPar1, priPar2, priPar3, priPar4, priPar5,
  326.                  priDataSize, priCooling, priHeating, priMMW,
  327.                  metGridRank, metGridDim,
  328.                  metPar1, metPar2, metPar3, metPar4, metPar5,
  329.                  metDataSize, metCooling, metHeating, clnew,
  330.                  iVheat, iMheat, Vheat, Mheat,
  331.                  iTfloor, Tfloor_scalar, Tfloor,
  332.                  iisrffield, isrf_habing, itmask.data(), itmask_metal.data(),
  333.                 imchem, igrgr, ipcont, tmcool,
  334.                 DM, HDII, HeHII,
  335.                 CI, CII, CO, CO2,
  336.                 OI, OH, H2O, O2,
  337.                 SiI, SiOI, SiO2I,
  338.                 CH, CH2, COII, OII,
  339.                 OHII, H2OII, H3OII, O2II,
  340.                 Mg, Al, S, Fe,
  341.                 SiM, FeM, Mg2SiO4, MgSiO3, Fe3O4,
  342.                 AC, SiO2D, MgO, FeS, Al2O3,
  343.                 reforg, volorg, H2Oice,
  344.                 cieY06a,
  345.                 LH2_N, LH2_Size,
  346.                 LH2_D, LH2_T, LH2_H,
  347.                 LH2_dD, LH2_dT, LH2_dH, LH2_L,
  348.                 LHD_N, LHD_Size,
  349.                 LHD_D, LHD_T, LHD_H,
  350.                 LHD_dD, LHD_dT, LHD_dH, LHD_L,
  351.                 LCI_N, LCI_Size,
  352.                 LCI_D, LCI_T, LCI_H,
  353.                 LCI_dD, LCI_dT, LCI_dH, LCI_L,
  354.                 LCII_N, LCII_Size,
  355.                 LCII_D, LCII_T, LCII_H,
  356.                 LCII_dD, LCII_dT, LCII_dH, LCII_L,
  357.                 LOI_N, LOI_Size,
  358.                 LOI_D, LOI_T, LOI_H,
  359.                 LOI_dD, LOI_dT, LOI_dH, LOI_L,
  360.                 LCO_N, LCO_Size,
  361.                 LCO_D, LCO_T, LCO_H,
  362.                 LCO_dD, LCO_dT, LCO_dH, LCO_L,
  363.                 LOH_N, LOH_Size,
  364.                 LOH_D, LOH_T, LOH_H,
  365.                 LOH_dD, LOH_dT, LOH_dH, LOH_L,
  366.                 LH2O_N, LH2O_Size,
  367.                 LH2O_D, LH2O_T, LH2O_H,
  368.                 LH2O_dD, LH2O_dT, LH2O_dH, LH2O_L,
  369.                 alphap_N, alphap_Size,
  370.                 alphap_D, alphap_T, alphap_dD, alphap_dT,
  371.                 alphap_Data,
  372.                 immulti, imabund, idspecies, itdmulti, idsub,
  373.                 metal_loc,
  374.                 metal_C13, metal_C20, metal_C25, metal_C30,
  375.                 metal_F13, metal_F15, metal_F50, metal_F80,
  376.                 metal_P170, metal_P200, metal_Y19,
  377.                 SN0_N,
  378.                 SN0_fSiM, SN0_fFeM, SN0_fMg2SiO4, SN0_fMgSiO3,
  379.                 SN0_fFe3O4, SN0_fAC, SN0_fSiO2D, SN0_fMgO,
  380.                 SN0_fFeS, SN0_fAl2O3,
  381.                 SN0_freforg, SN0_fvolorg, SN0_fH2Oice,
  382.                 SN0_r0SiM, SN0_r0FeM, SN0_r0Mg2SiO4, SN0_r0MgSiO3,
  383.                 SN0_r0Fe3O4, SN0_r0AC, SN0_r0SiO2D, SN0_r0MgO,
  384.                 SN0_r0FeS, SN0_r0Al2O3,
  385.                 SN0_r0reforg, SN0_r0volorg, SN0_r0H2Oice,
  386.                 gr_N, gr_Size, gr_dT, gr_Td,
  387.                 SN0_kpSiM, SN0_kpFeM, SN0_kpMg2SiO4, SN0_kpMgSiO3,
  388.                 SN0_kpFe3O4, SN0_kpAC, SN0_kpSiO2D, SN0_kpMgO,
  389.                 SN0_kpFeS, SN0_kpAl2O3,
  390.                 SN0_kpreforg, SN0_kpvolorg, SN0_kpH2Oice,
  391.                 tSiM.data(), tFeM.data(), tMg2SiO4.data(), tMgSiO3.data(), tFe3O4.data(),
  392.                 tAC.data(), tSiO2D.data(), tMgO.data(), tFeS.data(), tAl2O3.data(),
  393.                 treforg.data(), tvolorg.data(), tH2Oice.data(),
  394.                 gasgr2a, gamma_isrf2a
  395.              );
  396.  
  397.     // Compute the cooling time on the slice
  398.     //   (the gamma used here is the same as used to calculate the pressure
  399.     //    in cool1d_multi_g)
  400.  
  401.     for (i = (*is) + 1; i<=((*ie) + 1); i++) {
  402.       energy = std::fmax(p2d[i-1]/((*gamma)-1.), tiny);
  403.       cooltime(i-1,j-1,k-1) = (gr_float)(energy/edot[i-1] );
  404.     }
  405.  
  406.   }
  407.   //_// PORT: #ifdef _OPENMP
  408.   //_// PORT: !$omp end parallel do
  409.   //_// PORT: #endif
  410.  
  411.   // Convert densities back to comoving from 'proper'
  412.  
  413.   if ((*iexpand) == 1)  {
  414.  
  415.     factor = (gr_float)(std::pow((*aye),3) );
  416.  
  417.      FORTRAN_NAME(scale_fields_g)(
  418.       ispecies, imetal, idustfield, imchem,
  419.       imabund, idspecies, immulti, igrgr, idsub, &factor,
  420.       is, ie, js, je, ks, ke, in, jn, kn,
  421.       d, de, HI, HII, HeI, HeII, HeIII,
  422.       HM, H2I, H2II, DI, DII, HDI, DM, HDII, HeHII,
  423.       metal, dust,
  424.       CI, CII, CO, CO2,
  425.       OI, OH, H2O, O2,
  426.       SiI, SiOI, SiO2I,
  427.       CH, CH2, COII, OII,
  428.       OHII, H2OII, H3OII, O2II,
  429.       Mg, Al, S, Fe,
  430.       SiM, FeM, Mg2SiO4, MgSiO3, Fe3O4,
  431.       AC, SiO2D, MgO, FeS, Al2O3,
  432.       reforg, volorg, H2Oice,
  433.       metal_loc, metal_C13, metal_C20, metal_C25, metal_C30,
  434.       metal_F13, metal_F15, metal_F50, metal_F80,
  435.       metal_P170, metal_P200, metal_Y19);
  436.  
  437.   }
  438.  
  439.   return;
  440. }
  441.  
  442. }  // extern "C"
  443.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement