Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 09:31:31

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 
0027 #include "ChemOxygenWaterBuilder.hh"
0028 
0029 #include "G4DNAMolecularReactionTable.hh"
0030 #include "G4MoleculeTable.hh"
0031 #include "G4SystemOfUnits.hh"
0032 #include "G4EmParameters.hh"
0033 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0034 
0035 void ChemOxygenWaterBuilder::OxygenScavengerReaction(G4DNAMolecularReactionTable* pReactionTable)
0036 {
0037   auto table = G4MoleculeTable::Instance();
0038   //-----------------------------------
0039   // Get the molecular configuration
0040   auto* e_aq = table->GetConfiguration("e_aq");
0041   auto* H = table->GetConfiguration("H");
0042   auto* HO2 = table->GetConfiguration("HO2°");
0043   auto* Om = table->GetConfiguration("Om");
0044   auto* O2 = table->GetConfiguration("O2");
0045   auto* O2m = table->GetConfiguration("O2m");
0046   auto* O3m = table->GetConfiguration("O3m");
0047   G4DNAMolecularReactionData* reactionData = nullptr;
0048   // Oxygen concentration
0049   // e_aq + O2(B) -> O2-
0050   reactionData = new G4DNAMolecularReactionData(1.74e10 * (1e-3 * m3 / (mole * s)), e_aq, O2);
0051   reactionData->AddProduct(O2m);
0052   pReactionTable->SetReaction(reactionData);
0053   //------------------------------------------------------------------
0054   // H + O2(B) -> HO2
0055   reactionData = new G4DNAMolecularReactionData(2.1e10 * (1e-3 * m3 / (mole * s)), H, O2);
0056   reactionData->AddProduct(HO2);
0057   pReactionTable->SetReaction(reactionData);
0058   //------------------------------------------------------------------
0059   // O- + O2(B) -> O3-
0060   reactionData = new G4DNAMolecularReactionData(3.7e9 * (1e-3 * m3 / (mole * s)), Om, O2);
0061   reactionData->AddProduct(O3m);
0062   pReactionTable->SetReaction(reactionData);
0063   //------------------------------------------------------------------
0064 }
0065 
0066 void ChemOxygenWaterBuilder::CO2ScavengerReaction(G4DNAMolecularReactionTable* pReactionTable)
0067 {
0068   auto table = G4MoleculeTable::Instance();
0069   //-----------------------------------
0070   // Get the molecular configuration
0071   auto* e_aq = table->GetConfiguration("e_aq");
0072   auto* OH = table->GetConfiguration("°OH");
0073   auto* CO2 = table->GetConfiguration("CO2");
0074   auto* CO2m = table->GetConfiguration("CO2m");
0075   auto* HCO3 = table->GetConfiguration("HCO3");
0076 
0077 
0078   G4DNAMolecularReactionData* reactionData = nullptr;
0079   // Oxygen concentration
0080   // e_aq + CO2(B) -> CO2- k = 0.77 × 1010
0081   reactionData = new G4DNAMolecularReactionData(0.77e10 * (1e-3 * m3 / (mole * s)), e_aq, CO2);
0082   reactionData->AddProduct(CO2m);
0083   pReactionTable->SetReaction(reactionData);
0084   //------------------------------------------------------------------
0085   // OH + CO2(B) -> HCO3
0086   reactionData = new G4DNAMolecularReactionData(1.e6 * (1e-3 * m3 / (mole * s)), OH, CO2);
0087   reactionData->AddProduct(HCO3);
0088   pReactionTable->SetReaction(reactionData);
0089   //------------------------------------------------------------------
0090 }
0091 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0092 
0093 void ChemOxygenWaterBuilder::SecondOrderReactionExtended(
0094     G4DNAMolecularReactionTable *pReactionTable) {
0095   G4EmParameters* param = G4EmParameters::Instance();
0096   auto model = param->GetTimeStepModel();
0097   //-----------------------------------
0098   // Get the molecular configuration
0099   auto table = G4MoleculeTable::Instance();
0100   auto* OH = table->GetConfiguration("°OH");
0101   auto* OHm = table->GetConfiguration("OHm");
0102   auto* e_aq = table->GetConfiguration("e_aq");
0103   auto* H2 = table->GetConfiguration("H2");
0104   auto* H3Op = table->GetConfiguration("H3Op");
0105   auto* H = table->GetConfiguration("H");
0106   auto* H2O2 = table->GetConfiguration("H2O2");
0107 
0108   auto* HO2 = table->GetConfiguration("HO2°");
0109   auto* HO2m = table->GetConfiguration("HO2m");
0110   auto* Om = table->GetConfiguration("Om");
0111   auto* O2 = table->GetConfiguration("O2");
0112   auto* O2m = table->GetConfiguration("O2m");
0113   auto* O3m = table->GetConfiguration("O3m");
0114   auto* HCO3m = table->GetConfiguration("HCO3m");
0115   auto* O = table->GetConfiguration("Oxy");
0116   auto* CO3m = table->GetConfiguration("CO3m");
0117   //auto* CO3mm = table->GetConfiguration("CO3mm");
0118   auto* N2O = table->GetConfiguration("N2O");
0119   auto* MeOH = table->GetConfiguration("CH3OH");
0120   auto* CH2OH = table->GetConfiguration("CH2OH");
0121 
0122   // second order
0123   G4DNAMolecularReactionData* reactionData = nullptr;
0124   // Type I
0125   //------------------------------------------------------------------
0126   // *H + *H -> H2
0127   reactionData = new G4DNAMolecularReactionData(0.503e10 * (1e-3 * m3 / (mole * s)), H, H);
0128   reactionData->AddProduct(H2);
0129   pReactionTable->SetReaction(reactionData);
0130   //------------------------------------------------------------------
0131   // e_aq + H* + H2O -> H2 + OH-
0132   reactionData = new G4DNAMolecularReactionData(2.50e10 * (1e-3 * m3 / (mole * s)), e_aq, H);
0133   reactionData->AddProduct(OHm);
0134   reactionData->AddProduct(H2);
0135   pReactionTable->SetReaction(reactionData);
0136   //------------------------------------------------------------------
0137   // e_aq + e_aq + 2H2O -> H2 + 2OH-
0138   reactionData = new G4DNAMolecularReactionData(0.636e10 * (1e-3 * m3 / (mole * s)), e_aq, e_aq);
0139   reactionData->AddProduct(OHm);
0140   reactionData->AddProduct(OHm);
0141   reactionData->AddProduct(H2);
0142   pReactionTable->SetReaction(reactionData);
0143   //------------------------------------------------------------------
0144   // H3O+ + OH- -> 2H2O
0145   reactionData = new G4DNAMolecularReactionData(1.13e11 * (1e-3 * m3 / (mole * s)), H3Op, OHm);
0146   pReactionTable->SetReaction(reactionData);
0147   //------------------------------------------------------------------
0148   // *OH + *H -> H2O
0149   reactionData = new G4DNAMolecularReactionData(1.55e10 * (1e-3 * m3 / (mole * s)), OH, H);
0150   SetReactionType(reactionData, model);
0151   pReactionTable->SetReaction(reactionData);
0152   //------------------------------------------------------------------
0153   // *OH + *OH -> H2O2
0154   reactionData = new G4DNAMolecularReactionData(0.55e10 * (1e-3 * m3 / (mole * s)), OH, OH);
0155   reactionData->AddProduct(H2O2);
0156   SetReactionType(reactionData, model);
0157   pReactionTable->SetReaction(reactionData);
0158   //------------------------------------------------------------------
0159   // e_aq + *OH -> OH-
0160   reactionData = new G4DNAMolecularReactionData(2.95e10 * (1e-3 * m3 / (mole * s)), e_aq, OH);
0161   reactionData->AddProduct(OHm);
0162   SetReactionType(reactionData, model);
0163   pReactionTable->SetReaction(reactionData);
0164   //------------------------------------------------------------------
0165   // e_aq + H2O2 -> OH- + *OH
0166   reactionData = new G4DNAMolecularReactionData(1.10e10 * (1e-3 * m3 / (mole * s)), e_aq, H2O2);
0167   reactionData->AddProduct(OHm);
0168   reactionData->AddProduct(OH);
0169   SetReactionType(reactionData, model);
0170   pReactionTable->SetReaction(reactionData);
0171   //------------------------------------------------------------------
0172   // e_aq + H3O+ -> H* + H2O
0173   reactionData = new G4DNAMolecularReactionData(2.11e10 * (1e-3 * m3 / (mole * s)), e_aq, H3Op);
0174   reactionData->AddProduct(H);
0175   SetReactionType(reactionData, model);
0176   pReactionTable->SetReaction(reactionData);
0177 
0178   // extended
0179   //------------------------------------------------------------------
0180   //  H + O- -> OH-
0181   reactionData = new G4DNAMolecularReactionData(2.00e10 * (1e-3 * m3 / (mole * s)), H, Om);
0182   reactionData->AddProduct(OHm);
0183   pReactionTable->SetReaction(reactionData);
0184   //------------------------------------------------------------------
0185   // H3O+ + O3- -> OH + O2
0186   reactionData = new G4DNAMolecularReactionData(9.0e10 * (1e-3 * m3 / (mole * s)), H3Op, O3m);
0187   reactionData->AddProduct(OH);
0188   reactionData->AddProduct(O2);  // add to Scavenger
0189   pReactionTable->SetReaction(reactionData);
0190   //------------------------------------------------------------------
0191   // H + HO2 -> H2O2
0192   reactionData = new G4DNAMolecularReactionData(1.00e10 * (1e-3 * m3 / (mole * s)), H, HO2);
0193   reactionData->AddProduct(H2O2);
0194   SetReactionType(reactionData, model);
0195   pReactionTable->SetReaction(reactionData);
0196   //------------------------------------------------------------------
0197   // H + O2- -> HO2-
0198   reactionData = new G4DNAMolecularReactionData(1.00e10 * (1e-3 * m3 / (mole * s)), H, O2m);
0199   reactionData->AddProduct(HO2m);
0200   SetReactionType(reactionData, model);
0201   pReactionTable->SetReaction(reactionData);
0202   //------------------------------------------------------------------
0203   // OH + O2- -> O2 + OH-
0204   reactionData = new G4DNAMolecularReactionData(1.07e10 * (1e-3 * m3 / (mole * s)), OH, O2m);
0205   reactionData->AddProduct(O2);  // added to Scavenger
0206   reactionData->AddProduct(OHm);
0207   SetReactionType(reactionData, model);
0208   pReactionTable->SetReaction(reactionData);
0209   //------------------------------------------------------------------
0210   // e_aq + O2- -> H2O2 + OH- + OH-
0211   reactionData = new G4DNAMolecularReactionData(1.3e10 * (1e-3 * m3 / (mole * s)), e_aq, O2m);
0212   reactionData->AddProduct(H2O2);
0213   reactionData->AddProduct(OHm);
0214   reactionData->AddProduct(OHm);
0215   SetReactionType(reactionData, model);
0216   pReactionTable->SetReaction(reactionData);
0217   //------------------------------------------------------------------
0218   // e_aq + HO2- -> O- + OH-
0219   reactionData = new G4DNAMolecularReactionData(3.51e9 * (1e-3 * m3 / (mole * s)), e_aq, HO2m);
0220   reactionData->AddProduct(Om);
0221   reactionData->AddProduct(OHm);
0222   SetReactionType(reactionData, model);
0223   pReactionTable->SetReaction(reactionData);
0224   //------------------------------------------------------------------
0225   // e_aq + O- -> OH- + OH-
0226   reactionData = new G4DNAMolecularReactionData(2.31e10 * (1e-3 * m3 / (mole * s)), e_aq, Om);
0227   reactionData->AddProduct(OHm);
0228   reactionData->AddProduct(OHm);
0229   SetReactionType(reactionData, model);
0230   pReactionTable->SetReaction(reactionData);
0231   //------------------------------------------------------------------
0232   // H3O+ + O2- -> HO2
0233   reactionData = new G4DNAMolecularReactionData(4.78e10 * (1e-3 * m3 / (mole * s)), H3Op, O2m);
0234   reactionData->AddProduct(HO2);
0235   SetReactionType(reactionData, model);
0236   pReactionTable->SetReaction(reactionData);
0237   //------------------------------------------------------------------
0238   // H3O+ + HO2- -> H2O2
0239   reactionData = new G4DNAMolecularReactionData(4.78e10 * (1e-3 * m3 / (mole * s)), H3Op, HO2m);
0240   reactionData->AddProduct(H2O2);
0241   SetReactionType(reactionData, model);
0242   pReactionTable->SetReaction(reactionData);
0243   //------------------------------------------------------------------
0244   // H3O+ + O- -> OH
0245   reactionData = new G4DNAMolecularReactionData(4.78e10 * (1e-3 * m3 / (mole * s)), H3Op, Om);
0246   reactionData->AddProduct(OH);
0247   SetReactionType(reactionData, model);
0248   pReactionTable->SetReaction(reactionData);
0249   //------------------------------------------------------------------
0250   // eaq + HO2 -> HO2-
0251   reactionData = new G4DNAMolecularReactionData(1.29e10 * (1e-3 * m3 / (mole * s)), e_aq, HO2);
0252   reactionData->AddProduct(HO2m);
0253   SetReactionType(reactionData, model);
0254   pReactionTable->SetReaction(reactionData);
0255   //------------------------------------------------------------------
0256   // OH + OH- -> O-
0257   reactionData = new G4DNAMolecularReactionData(1.27e10 * (1e-3 * m3 / (mole * s)), OH, OHm);
0258   reactionData->AddProduct(Om);
0259   SetReactionType(reactionData, model);
0260   pReactionTable->SetReaction(reactionData);
0261   //------------------------------------------------------------------
0262   // OH + HO2 -> O2
0263   reactionData = new G4DNAMolecularReactionData(7.90e9 * (1e-3 * m3 / (mole * s)), OH, HO2);
0264   reactionData->AddProduct(O2); // added to Scavenger
0265   SetReactionType(reactionData, model);
0266   pReactionTable->SetReaction(reactionData);
0267   //------------------------------------------------------------------
0268   // OH + HO2- -> HO2 + OH-
0269   reactionData = new G4DNAMolecularReactionData(8.32e9 * (1e-3 * m3 / (mole * s)), OH, HO2m);
0270   reactionData->AddProduct(HO2);
0271   reactionData->AddProduct(OHm);
0272   SetReactionType(reactionData, model);
0273   pReactionTable->SetReaction(reactionData);
0274   //------------------------------------------------------------------
0275   // OH + O- -> HO2-
0276   reactionData = new G4DNAMolecularReactionData(1.00e9 * (1e-3 * m3 / (mole * s)), OH, Om);
0277   reactionData->AddProduct(HO2m);
0278   SetReactionType(reactionData, model);
0279   pReactionTable->SetReaction(reactionData);
0280   //------------------------------------------------------------------
0281   // OH + O3- -> O2- + HO2
0282   reactionData = new G4DNAMolecularReactionData(8.50e9 * (1e-3 * m3 / (mole * s)), OH, O3m);
0283   reactionData->AddProduct(O2m);
0284   reactionData->AddProduct(HO2);
0285   SetReactionType(reactionData, model);
0286   pReactionTable->SetReaction(reactionData);
0287   //------------------------------------------------------------------
0288   // OH- + HO2 -> O2-
0289   reactionData = new G4DNAMolecularReactionData(1.27e10 * (1e-3 * m3 / (mole * s)), OHm,
0290                                                 HO2);  // Frongillo 1.27e10
0291   reactionData->AddProduct(O2m);
0292   SetReactionType(reactionData, model);
0293   pReactionTable->SetReaction(reactionData);
0294   //------------------------------------------------------------------
0295   // H2O2 + OH- -> HO2-
0296   reactionData = new G4DNAMolecularReactionData(1.3e10 * (1e-3 * m3 / (mole * s)), H2O2,
0297                                                 OHm);  // Elliot 1.3e10, Plante 4.71e8
0298   reactionData->AddProduct(HO2m);
0299   SetReactionType(reactionData, model);
0300   pReactionTable->SetReaction(reactionData);
0301   //------------------------------------------------------------------
0302   // H2O2 + O- -> HO2 + OH-
0303   reactionData = new G4DNAMolecularReactionData(5.55e8 * (1e-3 * m3 / (mole * s)), H2O2, Om);
0304   reactionData->AddProduct(HO2);
0305   reactionData->AddProduct(OHm);
0306   SetReactionType(reactionData, model);
0307   pReactionTable->SetReaction(reactionData);
0308   //------------------------------------------------------------------
0309   // H2 + O- -> H + OH-
0310   reactionData = new G4DNAMolecularReactionData(1.21e8 * (1e-3 * m3 / (mole * s)), H2, Om);
0311   reactionData->AddProduct(H);
0312   reactionData->AddProduct(OHm);
0313   SetReactionType(reactionData, model);
0314   pReactionTable->SetReaction(reactionData);
0315   //------------------------------------------------------------------
0316   // O2- + O- -> O2 + OH- + OH-
0317   reactionData = new G4DNAMolecularReactionData(6.00e8 * (1e-3 * m3 / (mole * s)), O2m, Om);
0318   reactionData->AddProduct(O2);
0319   reactionData->AddProduct(OHm);
0320   reactionData->AddProduct(OHm);
0321   SetReactionType(reactionData, model);
0322   pReactionTable->SetReaction(reactionData);
0323   //------------------------------------------------------------------
0324   // HO2- + O- -> O2- + OH-
0325   reactionData = new G4DNAMolecularReactionData(3.50e8 * (1e-3 * m3 / (mole * s)), HO2m, Om);
0326   reactionData->AddProduct(O2m);
0327   reactionData->AddProduct(OHm);
0328   SetReactionType(reactionData, model);
0329   pReactionTable->SetReaction(reactionData);
0330   //------------------------------------------------------------------
0331   // O- + O- -> H2O2 + OH- + OH-
0332   reactionData = new G4DNAMolecularReactionData(1.00e8 * (1e-3 * m3 / (mole * s)), Om, Om);
0333   reactionData->AddProduct(H2O2);
0334   reactionData->AddProduct(OHm);
0335   reactionData->AddProduct(OHm);
0336   SetReactionType(reactionData, model);
0337   pReactionTable->SetReaction(reactionData);
0338   //------------------------------------------------------------------
0339   // O- + O3- -> O2- + O2-
0340   reactionData = new G4DNAMolecularReactionData(7.00e8 * (1e-3 * m3 / (mole * s)), Om, O3m);
0341   reactionData->AddProduct(O2m);
0342   reactionData->AddProduct(O2m);
0343   SetReactionType(reactionData, model);
0344   pReactionTable->SetReaction(reactionData);
0345   //------------------------------------------------------------------
0346   // H + OH- -> eaq-
0347   reactionData = new G4DNAMolecularReactionData(2.51e7 * (1e-3 * m3 / (mole * s)), H, OHm);
0348   reactionData->AddProduct(e_aq);
0349   SetReactionType(reactionData, model);
0350   pReactionTable->SetReaction(reactionData);
0351   //------------------------------------------------------------------
0352   // H + H2O2 -> OH
0353   reactionData = new G4DNAMolecularReactionData(3.50e7 * (1e-3 * m3 / (mole * s)), H, H2O2);
0354   reactionData->AddProduct(OH);
0355   SetReactionType(reactionData, model);
0356   pReactionTable->SetReaction(reactionData);
0357   //------------------------------------------------------------------
0358   // OH + H2O2 -> HO2
0359   reactionData = new G4DNAMolecularReactionData(2.88e7 * (1e-3 * m3 / (mole * s)), OH, H2O2);
0360   reactionData->AddProduct(HO2);
0361   SetReactionType(reactionData, model);
0362   pReactionTable->SetReaction(reactionData);
0363   //------------------------------------------------------------------
0364   // OH + H2 -> H
0365   reactionData = new G4DNAMolecularReactionData(3.28e7 * (1e-3 * m3 / (mole * s)), OH, H2);
0366   reactionData->AddProduct(H);
0367   SetReactionType(reactionData, model);
0368   pReactionTable->SetReaction(reactionData);
0369   //------------------------------------------------------------------
0370   // HO2 + HO2 -> H2O2 + O2
0371   reactionData = new G4DNAMolecularReactionData(9.80e5 * (1e-3 * m3 / (mole * s)), HO2, HO2);
0372   reactionData->AddProduct(H2O2);
0373   reactionData->AddProduct(O2);
0374   SetReactionType(reactionData, model);
0375   pReactionTable->SetReaction(reactionData);
0376   //------------------------------------------------------------------
0377   // HO2 + O2- -> HO2- + O2 +
0378   reactionData = new G4DNAMolecularReactionData(9.70e7 * (1e-3 * m3 / (mole * s)), HO2, O2m);
0379   reactionData->AddProduct(HO2m);
0380   reactionData->AddProduct(O2);
0381   SetReactionType(reactionData, model);
0382   pReactionTable->SetReaction(reactionData);
0383   //------------------------------------------------------------------
0384   // hoang added. this must be rare
0385   // O2- + O2- -> H2O2 + O2 + 2 OH-
0386   reactionData = new G4DNAMolecularReactionData(1.0e2 * (1e-3 * m3 / (mole * s)), O2m, O2m);
0387   reactionData->AddProduct(H2O2);
0388   reactionData->AddProduct(O2);
0389   reactionData->AddProduct(OHm);
0390   reactionData->AddProduct(OHm);
0391   pReactionTable->SetReaction(reactionData);
0392 
0393   //------------------------------------------------------------------
0394   // hoang added. :
0395   // Radiat. Phys. Chcm. Vol. 27. No. 3. pp. 241-243. 1986
0396   // OH + HCO3m -> CO3- + H2O
0397   reactionData = new G4DNAMolecularReactionData(8.5e6 * (1e-3 * m3 / (mole * s)), OH, HCO3m);
0398   reactionData->AddProduct(CO3m);
0399   pReactionTable->SetReaction(reactionData);
0400 
0401 
0402 
0403   // hoang added. :B. Gervais et al. / Chemical Physics Letters 410 (2005) 330–334
0404   //O + OH -> HO2; k = 2 * 1010 dm3 mol 1 s 1
0405   reactionData = new G4DNAMolecularReactionData(2.0e10 * (1e-3 * m3 / (mole * s)), O, OH);
0406   reactionData->AddProduct(HO2);
0407   pReactionTable->SetReaction(reactionData);
0408 
0409   reactionData = new G4DNAMolecularReactionData(0.9e10 * (1e-3 * m3 / (mole * s)), e_aq, N2O);
0410   reactionData->AddProduct(Om);
0411   pReactionTable->SetReaction(reactionData);
0412 
0413   // OH + CH3OH -> CH2OH + H2O
0414   reactionData = new G4DNAMolecularReactionData(9.7e8 * (1e-3 * m3 / (mole * s)), OH, MeOH);
0415   reactionData->AddProduct(CH2OH);
0416   pReactionTable->SetReaction(reactionData);
0417 }
0418 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0419 
0420 void ChemOxygenWaterBuilder::SetReactionType(G4DNAMolecularReactionData* pData, G4ChemTimeStepModel model)
0421 {
0422   if(model != G4ChemTimeStepModel::SBS) { pData->SetReactionType(1); }
0423 }
0424 
0425