From 1dff7d4cb13f7afc84a6a9dc2991c6d0429d424a Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Thu, 5 May 2022 16:20:19 +0200 Subject: [PATCH 001/222] current version surface chemistry --- src/init/define_parameters_init.f90 | 4 +- .../boundary/particle_boundary_init.f90 | 78 +- .../boundary/particle_boundary_vars.f90 | 20 +- src/particles/dsmc/dsmc_polyatomic_model.f90 | 8 +- .../emission/particle_emission_tools.f90 | 8 +- .../emission/particle_surface_chemflux.f90 | 697 ++++++++++++++++++ .../particle_surface_chemflux_init.f90 | 507 +++++++++++++ .../emission/particle_surface_flux.f90 | 2 +- .../emission/particle_surface_flux_init.f90 | 4 + src/particles/particle_init.f90 | 5 + src/particles/particle_mesh/particle_mesh.f90 | 2 + .../surfacemodel/surfacemodel_chemistry.f90 | 302 ++++++++ .../surfacemodel/surfacemodel_init.f90 | 4 +- .../surfacemodel/surfacemodel_main.f90 | 236 +++++- .../surfacemodel/surfacemodel_vars.f90 | 142 +++- .../tracking/particle_intersection.f90 | 4 +- src/timedisc/timedisc_TimeStep_DSMC.f90 | 29 +- 17 files changed, 2029 insertions(+), 23 deletions(-) create mode 100644 src/particles/emission/particle_surface_chemflux.f90 create mode 100644 src/particles/emission/particle_surface_chemflux_init.f90 create mode 100644 src/particles/surfacemodel/surfacemodel_chemistry.f90 diff --git a/src/init/define_parameters_init.f90 b/src/init/define_parameters_init.f90 index 0ecfbf5c6..2794893cc 100644 --- a/src/init/define_parameters_init.f90 +++ b/src/init/define_parameters_init.f90 @@ -78,6 +78,7 @@ SUBROUTINE InitDefineParameters() USE MOD_Particle_VarTimeStep ,ONLY: DefineParametersVaribleTimeStep USE MOD_DSMC_Symmetry ,ONLY: DefineParametersParticleSymmetry USE MOD_SuperB_Init ,ONLY: DefineParametersSuperB +USE MOD_SurfaceModel_Chemistry ,ONLY: DefineParametersSurfaceChemistry #if USE_MPI USE mod_readIMD ,ONLY: DefineParametersReadIMDdata #endif /* USE_MPI */ @@ -145,7 +146,8 @@ SUBROUTINE InitDefineParameters() #endif CALL DefineParametersSurfModel() CALL DefineParametersSurfModelAnalyze() -#if USE_MPI && defined(PARTICLES) +CALL DefineParametersSurfaceChemistry() +#if USE_MPI && defined(PARTICLES) CALL DefineParametersReadIMDdata() #endif /* USE_MPI */ #endif diff --git a/src/particles/boundary/particle_boundary_init.f90 b/src/particles/boundary/particle_boundary_init.f90 index 756fd0302..52354c8df 100644 --- a/src/particles/boundary/particle_boundary_init.f90 +++ b/src/particles/boundary/particle_boundary_init.f90 @@ -138,6 +138,21 @@ SUBROUTINE DefineParametersParticleBoundary() '10: SEE-I when Ar+ bombards copper by J.G. Theis "Computing the Paschen curve for argon with speed-limited particle-in-cell simulation", 2021 (originates from Phelps1999)\n'// & '11: SEE-E when e- bombard quartz (SiO2) by A. Dunaevsky, "Secondary electron emission from dielectric materials of a Hall thruster with segmented electrodes", 2003'& , '0', numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Part-Boundary[$]-LatticeVector' & + , 'Lattice vector for a fcc crystal'& + , numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Part-Boundary[$]-NbrOfMol-UnitCell' & + , 'Number of molecules in a unit cell defined by the lattice vector'& + , numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Part-Boundary[$]-SurfaceArea' & + , 'Area of the reactive surface'& + , numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Part-Boundary[$]-Species[$]-Coverage' & + , 'Initial coverage of the surface by an adsorbed species'& + , numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Part-Boundary[$]-Species[$]-MaxCoverage' & + , 'Initial coverage of the surface by an adsorbed species'& + , numberedmulti=.TRUE.) CALL prms%CreateIntOption( 'Part-Boundary[$]-NbrOfSpeciesSwaps' & , 'TODO-DEFINE-PARAMETER\n'//& 'Number of Species to be changed at wall.', '0', numberedmulti=.TRUE.) @@ -232,9 +247,9 @@ SUBROUTINE InitializeVariablesPartBoundary() USE MOD_DSMC_Vars ,ONLY: useDSMC, BGGas USE MOD_Mesh_Vars ,ONLY: BoundaryName,BoundaryType, nBCs USE MOD_Particle_Vars -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC +USE MOD_SurfaceModel_Vars USE MOD_Particle_Boundary_Vars ,ONLY: PartBound,nPartBound,DoBoundaryParticleOutputHDF5,PartStateBoundary, AdaptWallTemp -USE MOD_Particle_Boundary_Vars ,ONLY: nVarPartStateBoundary +USE MOD_Particle_Boundary_Vars ,ONLY: nVarPartStateBoundary USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF USE MOD_Particle_Mesh_Vars ,ONLY: GEO @@ -247,7 +262,7 @@ SUBROUTINE InitializeVariablesPartBoundary() ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -INTEGER :: iPartBound, iBC, iPBC, iSwaps, MaxNbrOfSpeciesSwaps +INTEGER :: iPartBound, iBC, iPBC, iSwaps, MaxNbrOfSpeciesSwaps, iSpec INTEGER :: ALLOCSTAT, dummy_int CHARACTER(32) :: hilf , hilf2 CHARACTER(200) :: tmpString @@ -302,6 +317,20 @@ SUBROUTINE InitializeVariablesPartBoundary() PartBound%TempGradVec = 0. ALLOCATE(PartBound%SurfaceModel( 1:nPartBound)) PartBound%SurfaceModel = 0 +ALLOCATE(PartBound%Coverage(nPartBound, nSpecies)) +ALLOCATE(PartBound%MaxCoverage(nPartBound, nSpecies)) +ALLOCATE(PartBound%AdCount(nPartBound, nSpecies)) +ALLOCATE(PartBound%DesCount(nPartBound, nSpecies)) +ALLOCATE(PartBound%DesCountIter(nPartBound, nSpecies)) +ALLOCATE(PartBound%ERCount(nPartBound, nSpecies)) +!ALLOCATE(PartBound%CatCount(nPartBound, nSpecies)) +ALLOCATE(PartBound%LHCount(nPartBound, nSpecies)) +ALLOCATE(PartBound%LHCountIter(nPartBound, nSpecies)) +ALLOCATE(PartBound%TotalCoverage(nPartBound)) +ALLOCATE(PartBound%nMol(nPartBound)) +ALLOCATE(PartBound%LatticeVec(nPartBound)) +ALLOCATE(PartBound%MolPerUnitCell(nPartBound)) +ALLOCATE(PartBound%SurfArea(nPartBound)) ALLOCATE(PartBound%Reactive( 1:nPartBound)) PartBound%Reactive = .FALSE. ALLOCATE(PartBound%Voltage(1:nPartBound)) @@ -387,14 +416,48 @@ SUBROUTINE InitializeVariablesPartBoundary() SELECT CASE (PartBound%SurfaceModel(iPartBound)) CASE (0) PartBound%Reactive(iPartBound) = .FALSE. + CASE (20) + PartBound%Reactive(iPartBound) = .FALSE. + !CASE(30) + ! PartBound%Reactive(iPartBound) = .FALSE. CASE (SEE_MODELS_ID) ! SEE models require reactive BC - PartBound%Reactive(iPartBound) = .TRUE. + PartBound%Reactive(iPartBound) = .TRUE. CASE DEFAULT CALL abort(__STAMP__,'Error in particle init: only allowed SurfaceModels: 0,SEE_MODELS_ID! SurfaceModel=',& IntInfoOpt=PartBound%SurfaceModel(iPartBound)) END SELECT END IF + PartBound%LatticeVec(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf)//'-LatticeVector', '0.') + PartBound%MolPerUnitCell(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf)//'-NbrOfMol-UnitCell', '1.') + PartBound%SurfArea(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf)//'-SurfaceArea', '0.') + IF(PartBound%LatticeVec(iPartBound).GT.0.) THEN + ! Surface molecules in dependence of the occupancy of the unit cell + PartBound%nMol(iPartBound) = PartBound%MolPerUnitCell(iPartBound) * PartBound%SurfArea(iPartBound) & + /(PartBound%LatticeVec(iPartBound))**2 + ELSE + ! Alternative calculation by average number of molecules per area for a monolayer + PartBound%nMol(iPartBound) = 10.**19 * PartBound%SurfArea(iPartBound) + END IF + PartBound%TotalCoverage(iPartBound) = 0. + DO iSpec=1, nSpecies + WRITE(UNIT=hilf2,FMT='(I0)') iSpec + PartBound%Coverage(iPartBound, iSpec) = GETREAL('Part-Boundary'//TRIM(hilf)//'-Species'//TRIM(hilf2)//'-Coverage', '0.') + PartBound%MaxCoverage(iPartBound, iSpec) = GETREAL('Part-Boundary'//TRIM(hilf)//'-Species'//TRIM(hilf2)//'-MaxCoverage', '1.') + PartBound%TotalCoverage(iPartBound) = PartBound%TotalCoverage(iPartBound) + PartBound%Coverage(iPartBound, iSpec) + PartBound%AdCount(iPartBound, iSpec) = PartBound%Coverage(iPartBound, iSpec) * PartBound%nMol(iPartBound) + PartBound%DesCount(iPartBound, iSpec) = 0. + PartBound%DesCountIter(iPartBound, iSpec) = 0. + PartBound%ERCount(iPartBound, iSpec) = 0. + PartBound%LHCount(iPartBound, iSpec) = 0. + PartBound%LHCountIter(iPartBound, iSpec) = 0. + !PartBound%CatCount(iPartBound, iSpec) = 0. + END DO + IF (PartBound%TotalCoverage(iPartBound).GT.1.) THEN + CALL abort(& + __STAMP__& + ,'ERROR: Surface coverage can not be larger than 1.', iPartBound) + END IF IF (PartBound%NbrOfSpeciesSwaps(iPartBound).GT.0) THEN !read Species to be changed at wall (in, out), out=0: delete PartBound%ProbOfSpeciesSwaps(iPartBound)= GETREAL('Part-Boundary'//TRIM(hilf)//'-ProbOfSpeciesSwaps','1.') @@ -511,6 +574,13 @@ SUBROUTINE InitializeVariablesPartBoundary() BCdata_auxSF(iPartBound)%LocalArea=0. END DO +ALLOCATE(BCdata_auxSCF(1:nPartBound)) +DO iPartBound=1,nPartBound + BCdata_auxSCF(iPartBound)%SideNumber=-1 !init value when not used + BCdata_auxSCF(iPartBound)%GlobalArea=0. + BCdata_auxSCF(iPartBound)%LocalArea=0. +END DO + !-- Sanity check: Deprecated voltage parameter IF(DeprecatedVoltage) CALL abort(__STAMP__& ,'Part-Boundary-Voltage is no longer supported. Use corresponding RefState parameter as described in the user guide.') diff --git a/src/particles/boundary/particle_boundary_vars.f90 b/src/particles/boundary/particle_boundary_vars.f90 index 13f1754cd..ab1137e7e 100644 --- a/src/particles/boundary/particle_boundary_vars.f90 +++ b/src/particles/boundary/particle_boundary_vars.f90 @@ -16,7 +16,7 @@ MODULE MOD_Particle_Boundary_Vars ! Contains global variables provided by the particle surfaces routines !=================================================================================================================================== ! MODULES -#if USE_MPI +#if USE_MPI USE mpi #endif /*USE_MPI*/ ! IMPLICIT VARIABLE HANDLING @@ -31,6 +31,8 @@ MODULE MOD_Particle_Boundary_Vars ! ==================================================================== ! Mesh info INTEGER :: nSurfTotalSides + +!!!!!!!!! Number of output sides INTEGER :: nOutputSides INTEGER :: nComputeNodeSurfSides !> Number of surface sampling sides on compute node @@ -161,7 +163,7 @@ MODULE MOD_Particle_Boundary_Vars INTEGER :: OutputCOMM=MPI_COMM_NULL ! communicator for output #endif /*USE_MPI*/ END TYPE -TYPE (tSurfaceCOMM) :: SurfCOMM +TYPE (tSurfaceCOMM) :: SurfCOMM TYPE tSurfaceMesh INTEGER :: SampSize ! integer of sampsize @@ -243,6 +245,20 @@ MODULE MOD_Particle_Boundary_Vars REAL , ALLOCATABLE :: ProbOfSpeciesSwaps(:) ! Probability of SpeciesSwaps at wall INTEGER , ALLOCATABLE :: SpeciesSwaps(:,:,:) ! Species to be changed at wall (in, out), out=0: delete INTEGER , ALLOCATABLE :: SurfaceModel(:) ! Model used for surface interaction (e.g. SEE models) + REAL , ALLOCATABLE :: TotalCoverage(:) + REAL , ALLOCATABLE :: nMol(:) ! number of molecules on the reactive surface + REAL , ALLOCATABLE :: LatticeVec(:) ! Lattice constant for a fcc crystal + REAL , ALLOCATABLE :: MolPerUnitCell(:) ! Molecules per unit cell + REAL , ALLOCATABLE :: SurfArea(:) ! Reactive surface area + REAL , ALLOCATABLE :: Coverage(:,:) + REAL , ALLOCATABLE :: MaxCoverage(:,:) + !REAL, ALLOCATABLE :: CatCount(:,:) ! number of reacted particles for the simple recombnation model + REAL, ALLOCATABLE :: AdCount(:,:) ! number of adsorped molecules for the individual species + REAL, ALLOCATABLE :: DesCount(:,:) ! number of desorped molecules for the individual species + REAL, ALLOCATABLE :: DesCountIter(:,:) ! desorption count for the emission routine + REAL, ALLOCATABLE :: LHCount(:,:) ! number of molecules created by the Langmuir-Hinshlewood reaction + REAL, ALLOCATABLE :: LHCountIter(:,:) ! reaction count for the emission routine + REAL, ALLOCATABLE :: ERCount(:,:) LOGICAL , ALLOCATABLE :: Reactive(:) ! flag defining if surface is treated reactively LOGICAL , ALLOCATABLE :: Resample(:) ! Resample Equilibrium Distribution with reflection LOGICAL , ALLOCATABLE :: UseAdaptedWallTemp(:) diff --git a/src/particles/dsmc/dsmc_polyatomic_model.f90 b/src/particles/dsmc/dsmc_polyatomic_model.f90 index beb7aea08..7c94b9a95 100644 --- a/src/particles/dsmc/dsmc_polyatomic_model.f90 +++ b/src/particles/dsmc/dsmc_polyatomic_model.f90 @@ -176,7 +176,7 @@ SUBROUTINE DSMC_FindFirstVibPick(iInitTmp, iSpec, init_or_sf) END SUBROUTINE DSMC_FindFirstVibPick -SUBROUTINE DSMC_SetInternalEnr_Poly_ARM_SingleMode(iSpecies, iInit, iPart, init_or_sf) +SUBROUTINE DSMC_SetInternalEnr_Poly_ARM_SingleMode(iSpecies, iInit, iPart, init_or_sf,iReac) !=================================================================================================================================== ! Initialization of polyatomic molecules by treating every mode separately in a loop !=================================================================================================================================== @@ -187,11 +187,14 @@ SUBROUTINE DSMC_SetInternalEnr_Poly_ARM_SingleMode(iSpecies, iInit, iPart, init_ USE MOD_Particle_Vars ,ONLY: PEM, Species USE MOD_Particle_Sampling_Vars,ONLY: AdaptBCMacroVal, AdaptBCMapElemToSample USE MOD_DSMC_ElectronicModel ,ONLY: InitElectronShell +USE MOD_Particle_Boundary_Vars,ONLY: PartBound +USE MOD_SurfaceModel_Vars ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES INTEGER, INTENT(IN) :: iSpecies, iInit, iPart, init_or_sf +INTEGER, INTENT(IN), OPTIONAL :: iReac !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- @@ -226,6 +229,9 @@ SUBROUTINE DSMC_SetInternalEnr_Poly_ARM_SingleMode(iSpecies, iInit, iPart, init_ TVib=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TVib TRot=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TRot END IF + CASE(3) ! reactive surface + TVib=PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iInit)%BC) + TRot=PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iInit)%BC) CASE DEFAULT CALL abort(& __STAMP__& diff --git a/src/particles/emission/particle_emission_tools.f90 b/src/particles/emission/particle_emission_tools.f90 index 0c7e0c906..40ac855e6 100644 --- a/src/particles/emission/particle_emission_tools.f90 +++ b/src/particles/emission/particle_emission_tools.f90 @@ -381,7 +381,7 @@ SUBROUTINE CalcVelocity_maxwell_lpn(FractNbr, Vec3D, iInit, Temperature) END SUBROUTINE CalcVelocity_maxwell_lpn -SUBROUTINE DSMC_SetInternalEnr_LauxVFD(iSpecies, iInit, iPart, init_or_sf) +SUBROUTINE DSMC_SetInternalEnr_LauxVFD(iSpecies, iInit, iPart, init_or_sf,iReac) !=================================================================================================================================== !> Energy distribution according to dissertation of Laux (diatomic) !=================================================================================================================================== @@ -392,11 +392,14 @@ SUBROUTINE DSMC_SetInternalEnr_LauxVFD(iSpecies, iInit, iPart, init_or_sf) USE MOD_Particle_Vars ,ONLY: Species, PEM USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCMacroVal, AdaptBCMapElemToSample USE MOD_DSMC_ElectronicModel ,ONLY: InitElectronShell +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound +USE MOD_SurfaceModel_Vars ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES INTEGER, INTENT(IN) :: iSpecies, iInit, iPart, init_or_sf +INTEGER, INTENT(IN), OPTIONAL :: iReac !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- @@ -435,6 +438,9 @@ SUBROUTINE DSMC_SetInternalEnr_LauxVFD(iSpecies, iInit, iPart, init_or_sf) TVib=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TVib TRot=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TRot END IF + CASE(3) !reactive surface + TVib=PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iInit)%BC) + TRot=PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iInit)%BC) CASE DEFAULT CALL abort(& __STAMP__& diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 new file mode 100644 index 000000000..d18c6ab80 --- /dev/null +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -0,0 +1,697 @@ +!================================================================================================================================== +! Copyright (c) 2010 - 2019 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas +! +! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify +! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 +! of the License, or (at your option) any later version. +! +! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty +! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details. +! +! You should have received a copy of the GNU General Public License along with PICLas. If not, see . +!================================================================================================================================== +#include "piclas.h" + +MODULE MOD_Particle_SurfChemFlux +!=================================================================================================================================== +!> Module for particle insertion through the surface flux +!=================================================================================================================================== +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +PRIVATE +!----------------------------------------------------------------------------------------------------------------------------------- +! GLOBAL VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! Private Part --------------------------------------------------------------------------------------------------------------------- +! Public Part ---------------------------------------------------------------------------------------------------------------------- +PUBLIC :: ParticleSurfChemFlux +!=================================================================================================================================== +CONTAINS + +!=================================================================================================================================== +!> Particle Inserting via Surface Flux and (if present) adaptiveBC (Surface Flux adapting part density, velocity or temperature) +!=================================================================================================================================== +SUBROUTINE ParticleSurfChemFlux() +! Modules +USE MOD_Globals +USE MOD_Particle_Vars +USE MOD_part_tools ,ONLY: CalcRadWeightMPF +USE MOD_DSMC_Vars ,ONLY: useDSMC, CollisMode, RadialWeighting +USE MOD_Eval_xyz ,ONLY: GetPositionInRefElem +USE MOD_Mesh_Vars ,ONLY: SideToElem, offsetElem +USE MOD_Part_Tools ,ONLY: GetParticleWeight +USE MOD_Part_Emission_Tools ,ONLY: SetParticleChargeAndMass, SetParticleMPF +USE MOD_Particle_Analyze_Vars ,ONLY: CalcPartBalance, CalcAdaptiveBCInfo, nPartIn, PartEkinIn +USE MOD_Particle_Analyze_Tools ,ONLY: CalcEkinPart +USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID +USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCPartNumOut +USE MOD_Particle_VarTimeStep ,ONLY: CalcVarTimeStep +USE MOD_Timedisc_Vars ,ONLY: RKdtFrac, dt + +USE MOD_Particle_Boundary_Vars +USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared +USE MOD_SurfaceModel +USE MOD_SurfaceModel_Chemistry +USE MOD_SurfaceModel_Vars +USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle + +#if defined(IMPA) || defined(ROS) +USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod +#endif /*IMPA*/ +#if USE_LOADBALANCE +USE MOD_LoadBalance_Vars ,ONLY: nSurfacefluxPerElem +USE MOD_LoadBalance_Timers ,ONLY: LBStartTime, LBElemSplitTime, LBPauseTime +#endif /*USE_LOADBALANCE*/ +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +! Local variable declaration +INTEGER :: iSpec , PositionNbr, iSF, iSide, currentBC, SideID, NbrOfParticle, ParticleIndexNbr +INTEGER :: BCSideID, ElemID, iLocSide, iSample, jSample, PartInsSubSide, iPart, iPartTotal +INTEGER :: PartsEmitted, Node1, Node2, globElemId +REAL :: Particle_pos(3), RandVal1, xyzNod(3), RVec(2), minPos(2), xi(2), Vector1(3), Vector2(3) +REAL :: ndist(3), midpoint(3) +REAL,ALLOCATABLE :: particle_positions(:) + +REAL :: nu, E_act, Coverage, Prob, Rate, DissOrder, AdCount +REAL :: MPF +REAL :: area +REAL :: Vectors(3,3) +REAL :: WallTemp +REAL :: RanNum +REAL :: MonoLayer +INTEGER :: iSurfSite, SurfNumOfReac, iReac +INTEGER :: BoundID +INTEGER :: iVal, iReactant, iValReac + +#if USE_LOADBALANCE +REAL :: tLBStart +#endif /*USE_LOADBALANCE*/ +!=================================================================================================================================== +SurfNumOfReac = SurfChemReac%NumOfReact +DO iReac = 1, SurfNumOfReac + + SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) + ! Desorption + CASE('D') + DO iVal=1, SIZE(SurfChemReac%Products(iReac,:)) + IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN + iSpec = SurfChemReac%Products(iReac,iVal) + ! Choose the reactive boundaries + DO iSF=1, SurfChemReac%NumOfBounds(iReac) + BoundID = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC + + ! Define the coverage values of the species stored on the surface + IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + Coverage = PartBound%Coverage(BoundID, iReactant) + AdCount = PartBound%AdCount(BoundID, iReactant) + END IF + END DO + ELSE + Coverage = PartBound%Coverage(BoundID, iSpec) + AdCount = PartBound%AdCount(BoundID, iSpec) + END IF + + ! Define the variables + Area = PartBound%SurfArea(BoundID) + DissOrder = SurfChemReac%DissOrder(iReac) + nu = SurfChemReac%Prefactor(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) + Rate = SurfChemReac%Rate(iReac) + + ! Calculate the desorption parameters in dependence of coverage and temperature of the boundary + IF(nu.EQ.0.) THEN + nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) + END IF + + ! Boundary temperature + WallTemp = PartBound%WallTemp(BoundID) + E_act = SurfChemReac%E_initial(iReac) + Coverage * SurfChemReac%W_interact(iReac) + Rate = nu * Coverage**DissOrder * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol + + ! Determine the desorption probability + Monolayer = PartBound%nMol(BoundID) * PartBound%MaxCoverage(BoundID, iSpec) + PartBound%DesCountIter(BoundID, iSpec) = Rate * dt * Monolayer + PartBound%DesCountIter(BoundID, iSpec) + + IF((PartBound%DesCountIter(BoundID, iSpec)*DissOrder).GE.AdCount) THEN + ! Upper bound for the desorption number + PartBound%DesCountIter(BoundID, iSpec) = AdCount + END IF + + ! Update the adsorbtion and desorption count + IF(PartBound%DesCountIter(BoundID, iSpec).GT.1.)THEN + IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + PartBound%AdCount(BoundID,iReactant) = PartBound%AdCount(BoundID,iReactant) - PartBound%DesCountIter(BoundID,iSpec) * DissOrder + PartBound%Coverage(BoundID,iReactant) = PartBound%Coverage(BoundID,iReactant) - PartBound%DesCountIter(BoundID,iSpec) * DissOrder/PartBound%nMol(BoundID) + END IF + END DO + ELSE + PartBound%AdCount(BoundID, iSpec)= PartBound%AdCount(BoundID, iSpec) - PartBound%DesCountIter(BoundID, iSpec) * DissOrder + PartBound%Coverage(BoundID,iSpec) = PartBound%Coverage(BoundID,iSpec) - PartBound%DesCountIter(BoundID,iSpec) * DissOrder/PartBound%nMol(BoundID) + END IF + PartBound%TotalCoverage(BoundID) = PartBound%TotalCoverage(BoundID) - PartBound%DesCountIter(BoundID, iSpec) * DissOrder/PartBound%nMol(BoundID) + PartBound%DesCount(BoundID, iSpec) = PartBound%DesCount(BoundID, iSpec) + PartBound%DesCountIter(BoundID, iSpec) + END IF + + ! Current boundary condition + currentBC = BoundID + PartsEmitted = 0 + NbrOfParticle = 0 + iPartTotal = 0 + + ! Loop over the side numbers + DO WHILE(INT(PartBound%DesCountIter(BoundID, iSpec)).GT.1) + ! Random distribution of the particles on the surface + CALL RANDOM_NUMBER(RanNum) + iSide = INT(BCdata_auxSCF(currentBC)%SideNumber * RanNum) + ! Define the necessary variables + BCSideID=BCdata_auxSCF(currentBC)%SideList(iSide) + ElemID = SideToElem(S2E_ELEM_ID,BCSideID) + iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) + globElemId = ElemID + offSetElem + SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) + xyzNod(1:3) = BCdata_auxSCF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) + + DO jSample=1,SurfChemSideSize(2); DO iSample=1,SurfChemSideSize(1) + ! Number of additional particles to be inserted + Node1 = jSample+1 + Node2 = jSample+2 ! + Vector1 = BCdata_auxSCF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node1-1) + Vector2 = BCdata_auxSCF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node2-1) + midpoint(1:3) = BCdata_auxSCF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) + ndist(1:3) = BCdata_auxSCF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) + + PartInsSubSide = 1 + PartBound%DesCountIter(BoundID, iSpec) = PartBound%DesCountIter(BoundID, iSpec) - 1. + NbrOfParticle = NbrOfParticle + PartInsSubSide + ALLOCATE(particle_positions(1:3)) + + !-- Set Positions + Particle_pos(1:3) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) + particle_positions(1) = Particle_pos(1) + particle_positions(2) = Particle_pos(2) + particle_positions(3) = Particle_pos(3) + + !-- Fill Particle Informations (PartState, Partelem, etc.) + ParticleIndexNbr = 1 + ParticleIndexNbr = PDM%nextFreePosition(iPartTotal + 1 + PDM%CurrentNextFreePosition) + IF (ParticleIndexNbr .ne. 0) THEN + iPart = 1 + PartState(1:3,ParticleIndexNbr) = particle_positions(3*(iPart-1)+1:3*(iPart-1)+3) + LastPartPos(1:3,ParticleIndexNbr)=PartState(1:3,ParticleIndexNbr) + PDM%ParticleInside(ParticleIndexNbr) = .TRUE. + PDM%dtFracPush(ParticleIndexNbr) = .TRUE. + PDM%IsNewPart(ParticleIndexNbr) = .TRUE. + PEM%GlobalElemID(ParticleIndexNbr) = globElemId + PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId !needed when ParticlePush is not executed, e.g. "delay" + iPartTotal = iPartTotal + 1 + ELSE + CALL abort(& + __STAMP__& + ,'ERROR in ParticleSurfaceflux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?') + END IF + DEALLOCATE(particle_positions) + CALL SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) + + PartsEmitted = PartsEmitted + PartInsSubSide + END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) + END DO ! iSide + + IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'Error 2 in ParticleSurfaceflux!') + !----- 2b.: set remaining properties + + CALL SetParticleChargeAndMass(iSpec,NbrOfParticle) + + IF (usevMPF.AND.(.NOT.RadialWeighting%DoRadialWeighting)) CALL SetParticleMPF(iSpec,-1,NbrOfParticle) + ! define molecule stuff + + IF (useDSMC.AND.(CollisMode.GT.1)) CALL SetInnerEnergies(iSpec, iSF, NbrOfParticle,iReac) + + IF(CalcPartBalance) THEN + ! Compute number of input particles and energy + nPartIn(iSpec)=nPartIn(iSpec) + NBrofParticle + + DO iPart=1,NbrOfparticle + PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) + IF (PositionNbr .ne. 0) PartEkinIn(PartSpecies(PositionNbr))= & + PartEkinIn(PartSpecies(PositionNbr))+CalcEkinPart(PositionNbr) + END DO ! iPart + END IF ! CalcPartBalance + ! instead of an UpdateNextfreePosition we update the particleVecLength only - enough ?!? + PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle + PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle + ! Sample Energies on Surfaces when particles are emitted from them + IF (NbrOfParticle.NE.PartsEmitted) THEN + ! should be equal for including the following lines in tSurfaceFlux + CALL abort(& + __STAMP__& + ,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') + END IF + + + END DO ! iSF + END IF + END DO !iSpec + + CASE('LH') + ! Choose the reactive boundaries + DO iSF=1,SurfChemReac%NumOfBounds(iReac) + BoundID = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC + + ! Define the variables + Coverage = 1. + ! prefactor for the rate equation including the dependency on all coverage values + DO iVal=1,SIZE(SurfChemReac%Reactants(iReac,:)) + + IF(SurfChemReac%Reactants(iReac,iVal).NE.0) THEN + iSpec = SurfChemReac%Reactants(iReac,iVal) + Coverage = Coverage * PartBound%Coverage(BoundID, iSpec) + END IF + END DO + + Area = PartBound%SurfArea(BoundID) + WallTemp = PartBound%WallTemp(BoundID) + + nu = SurfChemReac%Prefactor(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) + + ! Calculate the rate in dependence of the temperature and coverage + Rate = nu * Coverage * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol + + ! Is the LH routine in this way redundant for the consideration of multiple products s? + DO iVal=1,SIZE(SurfChemReac%Products(iReac,:)) + IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN + iSpec = SurfChemReac%Products(iReac,iVal) + + ! Hot to determine the AdCount for the lower coverage values? + ! Or is the rate equation independent on the chosen molecule? + Monolayer = PartBound%MaxCoverage(BoundID, SurfChemReac%Reactants(iReac,1)) * PartBound%nMol(BoundID) + PartBound%LHCountIter(BoundID, iSpec) = Rate * dt * MonoLayer + PartBound%LHCountIter(BoundID, iSpec) + + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + AdCount = PartBound%AdCount(BoundID, iReactant) + + !Check if enough reactants exist on the surface + IF(PartBound%LHCountIter(BoundID, iSpec) .GT. AdCount) THEN + PartBound%LHCountIter(BoundID, iSpec) = AdCount + END IF + + END IF + END DO + + PartBound%LHCount(BoundID, iSpec) = PartBound%LHCount(BoundID, iSpec) + PartBound%LHCountIter(BoundID, iSpec) + + ! Current boundary condition + currentBC = BoundID + PartsEmitted = 0 + NbrOfParticle = 0 + iPartTotal = 0 + + ! Loop over the side numbers + DO WHILE(INT(PartBound%LHCountIter(BoundID, iSpec)).GT.1) + ! Random distributions of the particles on the surface + CALL RANDOM_NUMBER(RanNum) + iSide = INT(BCdata_auxSCF(currentBC)%SideNumber * RanNum) + ! Define the necessary variables + BCSideID=BCdata_auxSCF(currentBC)%SideList(iSide) + ElemID = SideToElem(S2E_ELEM_ID,BCSideID) + iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) + globElemId = ElemID + offSetElem + SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) + xyzNod(1:3) = BCdata_auxSCF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) + + DO jSample=1,SurfChemSideSize(2); DO iSample=1,SurfChemSideSize(1) + ! Number of additional particles to be inserted + Node1 = jSample+1 + Node2 = jSample+2 + Vector1 = BCdata_auxSCF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node1-1) + Vector2 = BCdata_auxSCF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node2-1) + midpoint(1:3) = BCdata_auxSCF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) + ndist(1:3) = BCdata_auxSCF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) + + PartInsSubSide = 1 + PartBound%LHCountIter(BoundID, iSpec) = PartBound%LHCountIter(BoundID, iSpec) -1. + NbrOfParticle = NbrOfParticle + PartInsSubSide + ALLOCATE(particle_positions(1:3)) + + !-- Set Positions + Particle_pos(1:3) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) + particle_positions(1) = Particle_pos(1) + particle_positions(2) = Particle_pos(2) + particle_positions(3) = Particle_pos(3) + + !-- Fill Particle Informations (PartState, Partelem, etc.) + ParticleIndexNbr = 1 + ParticleIndexNbr = PDM%nextFreePosition(iPartTotal + 1 + PDM%CurrentNextFreePosition) + IF (ParticleIndexNbr .ne. 0) THEN + iPart = 1 + PartState(1:3,ParticleIndexNbr) = particle_positions(3*(iPart-1)+1:3*(iPart-1)+3) + LastPartPos(1:3,ParticleIndexNbr)=PartState(1:3,ParticleIndexNbr) + PDM%ParticleInside(ParticleIndexNbr) = .TRUE. + PDM%dtFracPush(ParticleIndexNbr) = .TRUE. + PDM%IsNewPart(ParticleIndexNbr) = .TRUE. + PEM%GlobalElemID(ParticleIndexNbr) = globElemId + PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId !needed when ParticlePush is not executed, e.g. "delay" + iPartTotal = iPartTotal + 1 + ELSE + CALL abort(& + __STAMP__& + ,'ERROR in ParticleSurfaceflux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?') + END IF + + DEALLOCATE(particle_positions) + CALL SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) + + PartsEmitted = PartsEmitted + PartInsSubSide + + END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) + END DO ! iSide + + IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'Error 2 in ParticleSurfaceflux!') + !----- 2b.: set remaining properties + + CALL SetParticleChargeAndMass(iSpec,NbrOfParticle) + + IF (usevMPF.AND.(.NOT.RadialWeighting%DoRadialWeighting)) CALL SetParticleMPF(iSpec,-1,NbrOfParticle) + ! define molecule stuff + + IF (useDSMC.AND.(CollisMode.GT.1)) CALL SetInnerEnergies(iSpec, iSF, NbrOfParticle,iReac) + + IF(CalcPartBalance) THEN + ! Compute number of input particles and energy + nPartIn(iSpec)=nPartIn(iSpec) + NBrofParticle + + DO iPart=1,NbrOfparticle + PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) + IF (PositionNbr .ne. 0) PartEkinIn(PartSpecies(PositionNbr))= & + PartEkinIn(PartSpecies(PositionNbr))+CalcEkinPart(PositionNbr) + END DO ! iPart + END IF ! CalcPartBalance + ! instead of an UpdateNextfreePosition we update the particleVecLength only - enough ?!? + PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle + PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle + + ! Sample Energies on Surfaces when particles are emitted from them + IF (NbrOfParticle.NE.PartsEmitted) THEN + ! should be equal for including the following lines in tSurfaceFlux + CALL abort(& + __STAMP__& + ,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') + END IF + + END IF ! iProd .ne. 0 + END DO ! iVal in Products + ! Update the surface coverage of the reactants + + IF(PartBound%LHCountIter(BoundID, iSpec).GT.1.) THEN + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + PartBound%AdCount(BoundID, iReactant)= PartBound%AdCount(BoundID, iReactant) - PartBound%LHCountIter(BoundID, iSpec) + PartBound%Coverage(BoundID, iReactant)= PartBound%Coverage(BoundID, iReactant) - PartBound%LHCountIter(BoundID, iSpec)/PartBound%nMol(BoundID) + PartBound%TotalCoverage(BoundID) = PartBound%TotalCoverage(BoundID) - PartBound%LHCountIter(BoundID, iSpec)/PartBound%nMol(BoundID) + END IF + END DO + END IF + END DO ! iSF + + CASE DEFAULT + + END SELECT +END DO ! iReac +END SUBROUTINE ParticleSurfChemFlux + + +!=================================================================================================================================== +!> +!=================================================================================================================================== +SUBROUTINE SetInnerEnergies(iSpec, iSF, NbrOfParticle,iReac) +! MODULES +USE MOD_Globals +USE MOD_DSMC_Vars ,ONLY: SpecDSMC +USE MOD_Particle_Vars ,ONLY: PDM +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly +USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD +! IMPLICIT VARIABLE HANDLING + IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER, INTENT(IN) :: iSpec, iSF, NbrOfParticle,iReac +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: iPart, PositionNbr +!=================================================================================================================================== +iPart = 1 + +DO WHILE (iPart .le. NbrOfParticle) + PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) + + IF (PositionNbr .ne. 0) THEN + IF (SpecDSMC(iSpec)%PolyatomicMol) THEN + CALL DSMC_SetInternalEnr_Poly(iSpec,iSF,PositionNbr,3,iReac) + ELSE + CALL DSMC_SetInternalEnr_LauxVFD(iSpec, iSF, PositionNbr,3,iReac) + END IF + END IF + iPart = iPart + 1 +END DO +END SUBROUTINE SetInnerEnergies + + +!=================================================================================================================================== +!> Calculate random normalized vector in 3D (unit space) +!=================================================================================================================================== +FUNCTION CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) +! MODULES +USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +REAL, INTENT(IN) :: xyzNod(3), Vector1(3), Vector2(3), ndist(3), midpoint(3) +REAL :: CalcPartPosTriaSurface(3) +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +REAL :: RandVal2(2), PartDistance +REAL, PARAMETER :: eps_nontria=1.0E-6 +!=================================================================================================================================== + CALL RANDOM_NUMBER(RandVal2) + IF (TrackingMethod.NE.TRIATRACKING) THEN !prevent inconsistency with non-triatracking by bilinear-routine (tol. might be increased) + RandVal2 = RandVal2 + eps_nontria*(1. - 2.*RandVal2) !shift randVal off from 0 and 1 + DO WHILE (ABS(RandVal2(1)+RandVal2(2)-1.0).LT.eps_nontria) !sum must not be 1, since this corresponds to third egde + CALL RANDOM_NUMBER(RandVal2) + RandVal2 = RandVal2 + eps_nontria*(1. - 2.*RandVal2) + END DO + END IF + CalcPartPosTriaSurface = xyzNod + Vector1 * RandVal2(1) + CalcPartPosTriaSurface = CalcPartPosTriaSurface + Vector2 * RandVal2(2) + PartDistance = ndist(1)*(CalcPartPosTriaSurface(1)-midpoint(1)) & !Distance from v1-v2 + + ndist(2)*(CalcPartPosTriaSurface(2)-midpoint(2)) & + + ndist(3)*(CalcPartPosTriaSurface(3)-midpoint(3)) + IF (PartDistance.GT.0.) THEN !flip into right triangle if outside + CalcPartPosTriaSurface(1:3) = 2.*midpoint(1:3)-CalcPartPosTriaSurface(1:3) + END IF + +END FUNCTION CalcPartPosTriaSurface + +!=================================================================================================================================== +!> Determine the particle velocity of each inserted particle +!=================================================================================================================================== +SUBROUTINE SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartIns) +! MODULES +USE MOD_Globals +USE MOD_Globals_Vars, ONLY : PI, BoltzmannConst +USE MOD_Particle_Vars +USE MOD_Particle_Surfaces_Vars, ONLY : SurfMeshSubSideData, TriaSurfaceFlux +USE MOD_Particle_Surfaces, ONLY : CalcNormAndTangBezier +USE MOD_SurfaceModel_Vars +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER,INTENT(IN) :: iSpec,iReac,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartIns +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: i,PositionNbr,envelope,currentBC,SampleElemID +REAL :: Vec3D(3), vec_nIn(1:3), vec_t1(1:3), vec_t2(1:3) +REAL :: a,zstar,RandVal1,RandVal2(2),RandVal3(3),u,RandN,RandN_save,Velo1,Velo2,Velosq,T,beta,z +LOGICAL :: RandN_in_Mem +REAL :: projFak ! VeloVecIC projected to inwards normal of tria +REAL :: Velo_t1 ! Velo comp. of first orth. vector in tria +REAL :: Velo_t2 ! Velo comp. of second orth. vector in tria +REAL :: VeloIC +REAL :: VeloVec(1:3) +!=================================================================================================================================== +IF(PartIns.LT.1) RETURN + +RandN_in_Mem=.FALSE. +envelope=-1 +currentBC = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC + +IF (.NOT.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal) THEN + vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3) + vec_t1(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1(1:3) + vec_t2(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2(1:3) +END IF !.NOT.VeloIsNormal + +VeloIC = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC +T = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%MWTemperatureIC +a = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%a_nIn +projFak = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%projFak +Velo_t1 = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 +Velo_t2 = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 + +! Set velocities + !-- determine envelope for most efficient ARM [Garcia and Wagner 2006, JCP217-2] + IF (ALMOSTZERO(VeloIC*projFak)) THEN + ! Rayleigh distri + envelope = 0 + ELSE IF (-0.4.LT.a .AND. a.LT.1.3) THEN + ! low speed flow + IF (a.LE.0.) THEN + envelope = 1 + ELSE + envelope = 3 + END IF !choose envelope based on flow direction + ELSE + ! high speed / general flow + IF (a.LT.0.) THEN + envelope = 2 + ELSE + envelope = 4 + END IF !choose envelope based on flow direction + END IF !low speed / high speed / rayleigh flow + + DO i = NbrOfParticle-PartIns+1,NbrOfParticle + PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition) + IF (PositionNbr .NE. 0) THEN + !-- 0a.: In case of side-normal velocities: calc n-/t-vectors at particle position, xi was saved in PartState(4:5) + IF (SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal .AND. TriaSurfaceFlux) THEN + vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3) + vec_t1(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1(1:3) + vec_t2(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2(1:3) + END IF !VeloIsNormal + + SELECT CASE(envelope) + CASE(0) + CALL RANDOM_NUMBER(RandVal1) + zstar = -SQRT(-LOG(RandVal1)) + CASE(1) + DO + CALL RANDOM_NUMBER(RandVal2) + zstar = -SQRT(a*a-LOG(RandVal2(1))) + IF ( -(a-zstar)/zstar .GT. RandVal2(2)) THEN + EXIT + END IF + END DO + CASE(2) + z = 0.5*(a-SQRT(a*a+2.)) + beta = a-(1.0-a)*(a-z) + DO + CALL RANDOM_NUMBER(RandVal3) + IF (EXP(-(beta*beta))/(EXP(-(beta*beta))+2.0*(a-z)*(a-beta)*EXP(-(z*z))).GT.RandVal3(1)) THEN + zstar=-SQRT(beta*beta-LOG(RandVal3(2))) + IF ( -(a-zstar)/zstar .GT. RandVal3(3)) THEN + EXIT + END IF + ELSE + zstar=beta+(a-beta)*RandVal3(2) + IF ( (a-zstar)/(a-z)*EXP(z*z-(zstar*zstar)) .GT. RandVal3(3)) THEN + EXIT + END IF + END IF + END DO + CASE(3) + DO + CALL RANDOM_NUMBER(RandVal3) + u = RandVal3(1) + IF ( a*SQRT(PI)/(a*SQRT(PI)+1+a*a) .GT. u) THEN + + zstar = -1./SQRT(2.)*ABS(RandN) + EXIT + ELSE IF ( (a*SQRT(PI)+1.)/(a*SQRT(PI)+1+a*a) .GT. u) THEN + zstar = -SQRT(-LOG(RandVal3(2))) + EXIT + ELSE + zstar = (1.0-SQRT(RandVal3(2)))*a + IF (EXP(-(zstar*zstar)).GT.RandVal3(3)) THEN + EXIT + END IF + END IF + END DO + CASE(4) + DO + CALL RANDOM_NUMBER(RandVal3) + IF (1.0/(2.0*a*SQRT(PI)+1.0).GT.RandVal3(1)) THEN + zstar=-SQRT(-LOG(RandVal3(2))) + ELSE + + IF (RandN_in_Mem) THEN !reusing second RandN form previous polar method + RandN = RandN_save + RandN_in_Mem=.FALSE. + ELSE + Velosq = 2 + DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.)) + CALL RANDOM_NUMBER(RandVal2) + Velo1 = 2.*RandVal2(1) - 1. + Velo2 = 2.*RandVal2(2) - 1. + Velosq = Velo1**2 + Velo2**2 + END DO + RandN = Velo1*SQRT(-2*LOG(Velosq)/Velosq) + RandN_save = Velo2*SQRT(-2*LOG(Velosq)/Velosq) + RandN_in_Mem=.TRUE. + END IF + + zstar = 1./SQRT(2.)*RandN + END IF + IF ( (a-zstar)/a .GT. RandVal3(3)) THEN + EXIT + END IF + END DO + CASE DEFAULT + CALL abort(__STAMP__,'ERROR in SurfaceFlux: Wrong envelope in SetSurfacefluxVelocities!') + END SELECT + + !-- 2.: sample normal directions and build complete velo-vector + Vec3D(1:3) = vec_nIn(1:3) * SQRT(2.*BoltzmannConst*T/Species(iSpec)%MassIC)*(a-zstar) +! IF (.NOT.DoZigguratSampling) THEN !polar method + Velosq = 2 + DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.)) + CALL RANDOM_NUMBER(RandVal2) + Velo1 = 2.*RandVal2(1) - 1. + Velo2 = 2.*RandVal2(2) - 1. + Velosq = Velo1**2 + Velo2**2 + END DO + Velo1 = Velo1*SQRT(-2*LOG(Velosq)/Velosq) + Velo2 = Velo2*SQRT(-2*LOG(Velosq)/Velosq) + + Vec3D(1:3) = Vec3D(1:3) + vec_t1(1:3) * ( Velo_t1+Velo1*SQRT(BoltzmannConst*T/Species(iSpec)%MassIC) ) + Vec3D(1:3) = Vec3D(1:3) + vec_t2(1:3) * ( Velo_t2+Velo2*SQRT(BoltzmannConst*T/Species(iSpec)%MassIC) ) + PartState(4:6,PositionNbr) = Vec3D(1:3) + ELSE !PositionNbr .EQ. 0 + CALL abort(__STAMP__,'PositionNbr .EQ. 0!') + END IF !PositionNbr .NE. 0 + END DO !i = ...NbrOfParticle + +END SUBROUTINE SetSurfacefluxVelocities + +END MODULE MOD_Particle_SurfChemFlux \ No newline at end of file diff --git a/src/particles/emission/particle_surface_chemflux_init.f90 b/src/particles/emission/particle_surface_chemflux_init.f90 new file mode 100644 index 000000000..f6dff9b3a --- /dev/null +++ b/src/particles/emission/particle_surface_chemflux_init.f90 @@ -0,0 +1,507 @@ +!================================================================================================================================== +! Copyright (c) 2021 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas +! +! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify +! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 +! of the License, or (at your option) any later version. +! +! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty +! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details. +! +! You should have received a copy of the GNU General Public License along with PICLas. If not, see . +!================================================================================================================================== +#include "piclas.h" + +MODULE MOD_Particle_SurfChemFlux_Init +!=================================================================================================================================== +!> Module for the initialization of particle emission through the chemistry surface flux +!=================================================================================================================================== +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +PRIVATE +!----------------------------------------------------------------------------------------------------------------------------------- +! GLOBAL VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! Private Part --------------------------------------------------------------------------------------------------------------------- +! Public Part ---------------------------------------------------------------------------------------------------------------------- +PUBLIC :: InitializeParticleSurfChemFlux +!=================================================================================================================================== +CONTAINS + +SUBROUTINE InitializeParticleSurfChemFlux() +!=================================================================================================================================== +! Init Particle Inserting via Surface Flux +!=================================================================================================================================== +! Modules +USE MOD_Globals +USE MOD_ReadInTools +USE MOD_Mesh_Vars ,ONLY: nBCSides, SideToElem, offsetElem +USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID +USE MOD_SurfaceModel_Vars +USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, BezierSampleN, SurfMeshSubSideData, SurfMeshSideAreas, tBCdata_auxSFRadWeight +USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, TriaSurfaceFlux +USE MOD_Particle_Surfaces ,ONLY: GetBezierSampledAreas +USE MOD_Particle_Vars ,ONLY: Species, nSpecies, DoSurfaceFlux +USE MOD_Particle_Vars ,ONLY: UseCircularInflow, DoForceFreeSurfaceFlux +USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive +USE MOD_Restart_Vars ,ONLY: DoRestart, RestartTime + +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +! Local variable declaration +INTEGER :: iSF,SideID,BCSideID,iSide,ElemID,iLocSide,iSample,jSample,currentBC +INTEGER :: MaxSurfacefluxBCs,nDataBC +INTEGER :: iReac, SurfNumReac +REAL :: tmp_SubSideAreas(SurfFluxSideSize(1),SurfFluxSideSize(2)) +TYPE(tBCdata_auxSCFRadWeight),ALLOCATABLE :: BCdata_auxSCFTemp(:) +!=================================================================================================================================== +! ALLOCATE(SurfMeshSubSideData(SurfFluxSideSize(1),SurfFluxSideSize(2),1:nBCSides),SurfMeshSideAreas(1:nBCSides)) +! SurfMeshSideAreas=0. +! ! global calculations for sampling the faces for area and vector calculations (checks the integration with CODE_ANALYZE) +! CALL BCSurfMeshSideAreasandNormals() + +!MaxSurfacefluxBCs=0 +!nDataBC=0 + +!read/prepare parameters and determine nec. BCs +!CALL ReadInAndPrepareSurfChemFlux(MaxSurfacefluxBCs, nDataBC) + +!CALL CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSCFTemp) + +SurfNumReac = SurfChemReac%NumOfReact +!initialize Surfaceflux-specific data +DO iReac=1,SurfNumReac + DO iSF=1,SurfChemReac%NumOfBounds(iReac) + currentBC = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC + IF (BCdata_auxSCF(currentBC)%SideNumber.GT.0) THEN + + ! Loop over sides on the surface flux + DO iSide=1,BCdata_auxSCF(currentBC)%SideNumber + BCSideID=BCdata_auxSCF(currentBC)%SideList(iSide) + ElemID = SideToElem(S2E_ELEM_ID,BCSideID) + iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) + SideID=GetGlobalNonUniqueSideID(offsetElem+ElemID,iLocSide) + ! Calculate the total area of the surface flux + DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) + tmp_SubSideAreas(iSample,jSample)=SurfMeshSubSideData(iSample,jSample,BCSideID)%area + END DO; END DO + ! Initialize surface flux + CALL InitSurfFlux(iReac, iSF, iSide, tmp_SubSideAreas, BCdata_auxSCFTemp) + + END DO ! iSide + ELSE IF (BCdata_auxSCF(currentBC)%SideNumber.EQ.-1) THEN + CALL abort(__STAMP__& + ,'ERROR in ParticleSurfaceflux: Someting is wrong with SideNumber of BC ',currentBC) + END IF + END DO !iSF +END DO !iSpec + +! Deallocate auxiliary variable container (no pointers used inside container) +SDEALLOCATE(BCdata_auxSCFTemp) + +END SUBROUTINE InitializeParticleSurfChemFlux + + +SUBROUTINE ReadInAndPrepareSurfChemFlux(nDataBC) +!=================================================================================================================================== +! Initialize the variables first +!=================================================================================================================================== +! MODULES +USE MOD_Globals +USE MOD_ReadInTools +USE MOD_Globals_Vars ,ONLY: BoltzmannConst, Pi +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound,nPartBound +USE MOD_SurfaceModel_Tools ,ONLY: GetWallTemperature +USE MOD_SurfaceModel_Vars +USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, BezierSampleN, SurfMeshSubSideData, SurfMeshSideAreas, tBCdata_auxSFRadWeight +USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, TriaSurfaceFlux +USE MOD_Particle_Surfaces ,ONLY: GetBezierSampledAreas +USE MOD_Particle_Vars ,ONLY: Species, nSpecies, DoSurfaceFlux +USE MOD_Particle_Vars ,ONLY: UseCircularInflow, DoForceFreeSurfaceFlux +USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive +USE MOD_Restart_Vars ,ONLY: DoRestart, RestartTime +! IMPLICIT VARIABLE HANDLING + IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER, INTENT(INOUT) :: nDataBC +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: iSF +INTEGER :: iReac, SurfNumReac +!=================================================================================================================================== +SurfNumReac = SurfChemReac%NumOfReact +ALLOCATE(SurfChemReac%SFMap(SurfChemReac%NumOfReact)) +DO iReac=1,SurfNumReac + IF (SurfChemReac%NumOfBounds(iReac).EQ.0) THEN + CYCLE + ELSE + ALLOCATE(SurfChemReac%SFMap(iReac)%Surfaceflux(1:SurfChemReac%NumOfBounds(iReac))) + ! Initialize Surfaceflux to BC mapping + SurfChemReac%SFMap(iReac)%Surfaceflux(:)%BC=-1 + DO iSF=1,SurfChemReac%NumOfBounds(iReac) + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC = SurfChemReac%BoundMap(iReac)%Boundaries(iSF) + END DO + END IF + + DO iSF=1,SurfChemReac%NumOfBounds(iReac) + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%InsertedParticle = 0 + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%InsertedParticleSurplus = 0 + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total = 0 + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total_allProcsTotal = 0 + + ! get surfaceflux data + IF (SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC.LT.1 .OR. SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC.GT.nPartBound) THEN + CALL abort(& +__STAMP__& +, 'SurfacefluxBCs must be between 1 and nPartBound!') + ELSE IF (BCdata_auxSF(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC)%SideNumber.EQ. -1) THEN !not set yet + BCdata_auxSF(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC)%SideNumber=0 + nDataBC=nDataBC+1 + END IF + + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%velocityDistribution = 'maxwell_lpn' + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC = 0. + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal = .FALSE. + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%MWTemperatureIC = PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC) + + END DO !iSF +END DO ! iReac + +END SUBROUTINE ReadInAndPrepareSurfChemFlux + + +SUBROUTINE BCSurfMeshSideAreasandNormals() +!=================================================================================================================================== +! Initialize the variables first +!=================================================================================================================================== +! MODULES +USE MOD_Globals +USE MOD_SurfaceModel_Vars +USE MOD_Mesh_Vars ,ONLY: nBCSides, offsetElem, SideToElem +USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID +USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle +USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, BezierSampleN, SurfMeshSubSideData, SurfMeshSideAreas, tBCdata_auxSFRadWeight +USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, TriaSurfaceFlux +USE MOD_Particle_Surfaces ,ONLY: GetBezierSampledAreas +USE MOD_Particle_Vars ,ONLY: Species, nSpecies, DoSurfaceFlux +USE MOD_Particle_Vars ,ONLY: UseCircularInflow, DoForceFreeSurfaceFlux +USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive +USE MOD_Restart_Vars ,ONLY: DoRestart, RestartTime +! IMPLICIT VARIABLE HANDLING + IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +REAL :: totalArea +INTEGER :: BCSideID, ElemID, iLocSide, SideID, jSample, iSample +REAL :: tmp_SubSideAreas(SurfFluxSideSize(1),SurfFluxSideSize(2)) +REAL :: tmp_Vec_nOut(3,SurfFluxSideSize(1),SurfFluxSideSize(2)) +REAL :: tmp_Vec_t1(3,SurfFluxSideSize(1),SurfFluxSideSize(2)) +REAL :: tmp_Vec_t2(3,SurfFluxSideSize(1),SurfFluxSideSize(2)) +!=================================================================================================================================== +totalArea=0. +DO BCSideID=1,nBCSides + ElemID = SideToElem(S2E_ELEM_ID,BCSideID) + iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) + SideID=GetGlobalNonUniqueSideID(offsetElem+ElemID,iLocSide) + IF (SurfFluxSideSize(1).NE.1 .OR. SurfFluxSideSize(2).NE.2) CALL abort(& +__STAMP__& +, 'SurfFluxSideSize must be 1,2 for TriaSurfaceFlux!') + DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) + CALL CalcNormAndTangTriangle(SideID=SideID,nVec=tmp_Vec_nOut(:,iSample,jSample) & + ,tang1=tmp_Vec_t1(:,iSample,jSample) & + ,tang2=tmp_Vec_t2(:,iSample,jSample) & + ,area=tmp_SubSideAreas(iSample,jSample) & + ,TriNum=jSample) + SurfMeshSideAreas(BCSideID)=SurfMeshSideAreas(BCSideID)+tmp_SubSideAreas(iSample,jSample) + END DO; END DO + totalArea=totalArea+SurfMeshSideAreas(BCSideID) + DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) + SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn=-tmp_Vec_nOut(:,iSample,jSample) + SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1=tmp_Vec_t1(:,iSample,jSample) + SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2=tmp_Vec_t2(:,iSample,jSample) + SurfMeshSubSideData(iSample,jSample,BCSideID)%area=tmp_SubSideAreas(iSample,jSample) + END DO; END DO +END DO + +END SUBROUTINE BCSurfMeshSideAreasandNormals + +SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSCFTemp) +!=================================================================================================================================== +! SideList for SurfaceFlux in BCdata_auxSCF is created. Furthermore, the side areas are corrected for the 1D/2D case and finally +! communicated. +!=================================================================================================================================== +! MODULES +USE MOD_Globals +USE MOD_ReadInTools +USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID +USE MOD_SurfaceModel_Vars +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound,nPartBound +USE MOD_Mesh_Vars ,ONLY: nBCSides, offsetElem, BC, SideToElem +USE MOD_Particle_Mesh_Vars ,ONLY: GEO, ElemMidPoint_Shared, SideInfo_Shared +USE MOD_Mesh_Tools ,ONLY: GetCNElemID +USE MOD_Particle_Vars ,ONLY: Symmetry +USE MOD_DSMC_Symmetry ,ONLY: DSMC_1D_CalcSymmetryArea, DSMC_2D_CalcSymmetryArea, DSMC_2D_CalcSymmetryAreaSubSides +USE MOD_DSMC_Vars ,ONLY: RadialWeighting +USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle +USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, BezierSampleN, SurfMeshSubSideData, SurfMeshSideAreas, tBCdata_auxSFRadWeight +USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, TriaSurfaceFlux +USE MOD_Particle_Surfaces ,ONLY: GetBezierSampledAreas +USE MOD_Particle_Vars ,ONLY: Species, nSpecies, DoSurfaceFlux +USE MOD_Particle_Vars ,ONLY: UseCircularInflow, DoForceFreeSurfaceFlux +USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive +USE MOD_Restart_Vars ,ONLY: DoRestart, RestartTime + +! IMPLICIT VARIABLE HANDLING + IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER, INTENT(IN) :: nDataBC +TYPE(tBCdata_auxSCFRadWeight), ALLOCATABLE, INTENT(INOUT) :: BCdata_auxSCFTemp(:) +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: TmpMapToBC(1:nDataBC), TmpSideStart(1:nDataBC), TmpSideNumber(1:nDataBC), TmpSideEnd(1:nDataBC) +! PartBC, Start of Linked List for Sides in SurfacefluxBC, Number of Particles in Sides in SurfacefluxBC, End of Linked List for Sides in SurfacefluxBC +INTEGER :: TmpSideNext(1:nBCSides) !Next: Sides of diff. BCs ar not overlapping! +INTEGER :: countDataBC,iBC,BCSideID,currentBC,iSF,iCount,iLocSide,SideID +INTEGER :: ElemID,CNElemID,GlobalElemID +INTEGER :: iSample,jSample,iSub +INTEGER :: iReac, SurfNumReac +REAL :: ymax,ymin,yMaxTemp,yMinTemp +!=================================================================================================================================== +!create Side lists for applicable BCs +!temporary (linked) lists +TmpMapToBC = 0; TmpSideStart = 0; TmpSideNumber = 0; TmpSideEnd = 0; TmpSideNext = 0 +countDataBC=0 +DO iBC=1,nPartBound + IF (BCdata_auxSCF(iBC)%SideNumber.EQ. -1) CYCLE !not set for SFs + countDataBC=countDataBC+1 + TmpMapToBC(countDataBC)=iBC +END DO + +DO BCSideID=1,nBCSides + currentBC=0 + DO iBC=1,countDataBC + IF (PartBound%MapToPartBC(BC(BCSideID)) .EQ. TmpMapToBC(iBC)) currentBC=iBC + END DO + IF (currentBC.EQ.0) CYCLE + IF (TmpSideNumber(currentBC).EQ.0) THEN + TmpSideStart(currentBC) = BCSideID ! Start of Linked List for Sides + ELSE + TmpSideNext(TmpSideEnd(currentBC)) = BCSideID ! Next Side + END IF + !-- prepare for next entry in list + TmpSideEnd(currentBC) = BCSideID + TmpSideNumber(currentBC) = TmpSideNumber(currentBC) + 1 ! Number of Sides +END DO ! BCSideID + +!save sequential lists in BCdata_auxSCF +DO iBC=1,countDataBC + BCdata_auxSCF(TmpMapToBC(iBC))%SideNumber=TmpSideNumber(iBC) + IF (TmpSideNumber(iBC).EQ.0) CYCLE + ALLOCATE(BCdata_auxSCF(TmpMapToBC(iBC))%SideList(1:TmpSideNumber(iBC))) + ALLOCATE(BCdata_auxSCF(TmpMapToBC(iBC))%TriaSwapGeo(SurfFluxSideSize(1),SurfFluxSideSize(2),1:TmpSideNumber(iBC))) + ALLOCATE(BCdata_auxSCF(TmpMapToBC(iBC))%TriaSideGeo(1:TmpSideNumber(iBC))) + + SurfNumReac = SurfChemReac%NumOfReact + DO iReac=1,SurfNumReac + DO iSF=1,SurfChemReac%NumOfBounds(iReac) + IF (TmpMapToBC(iBC).EQ.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC) THEN !only surfacefluxes with iBC + ALLOCATE(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(SurfFluxSideSize(1),SurfFluxSideSize(2),1:TmpSideNumber(iBC))) + END IF + END DO + END DO + BCSideID=TmpSideStart(iBC) + iCount=0 + + DO !follow BCSideID list seq. with iCount + iCount=iCount+1 + BCdata_auxSCF(TmpMapToBC(iBC))%SideList(iCount)=BCSideID + ElemID = SideToElem(S2E_ELEM_ID,BCSideID) + iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) + SideID=GetGlobalNonUniqueSideID(offsetElem+ElemID,iLocSide) + !----- symmetry specific area calculation start + IF(Symmetry%Order.EQ.2) THEN + GlobalElemID = SideInfo_Shared(SIDE_ELEMID,SideID) + CNElemID = GetCNElemID(GlobalElemID) + iLocSide = SideInfo_Shared(SIDE_LOCALID,SideID) + IF(Symmetry%Axisymmetric) THEN + ! Calculate the correct area for the axisymmetric (ring area) and 2D (length) and get ymin and ymax for element + SurfMeshSubSideData(1,1,BCSideID)%area = DSMC_2D_CalcSymmetryArea(iLocSide,CNElemID, ymin, ymax) + SurfMeshSubSideData(1,2,BCSideID)%area = 0.0 + ! Determination of the mean radial weighting factor for calculation of the number of particles to be inserted !!! necessary? + IF (RadialWeighting%DoRadialWeighting) THEN + IF((ymax - ymin).GT.0.0) THEN + ! Surfaces that are NOT parallel to the YZ-plane + IF(RadialWeighting%CellLocalWeighting) THEN + ! Cell local weighting + BCdata_auxSCFTemp(TmpMapToBC(iBC))%WeightingFactor(iCount) = (1. + ElemMidPoint_Shared(2,CNElemID) & + / GEO%ymaxglob*(RadialWeighting%PartScaleFactor-1.)) + ELSE + BCdata_auxSCFTemp(TmpMapToBC(iBC))%WeightingFactor(iCount) = 1. + DO iSub = 1, RadialWeighting%nSubSides + yMinTemp = ymin + (iSub-1) * (ymax - ymin) / RadialWeighting%nSubSides + yMaxTemp = ymin + iSub * (ymax - ymin) / RadialWeighting%nSubSides + BCdata_auxSCFTemp(TmpMapToBC(iBC))%SubSideWeight(iCount,iSub) = 1. & + + (yMaxTemp**2/(GEO%ymaxglob*2.)*(RadialWeighting%PartScaleFactor-1.) & + - yMinTemp**2/(GEO%ymaxglob*2.)*(RadialWeighting%PartScaleFactor-1.))/(yMaxTemp - yMinTemp) + END DO + BCdata_auxSCFTemp(TmpMapToBC(iBC))%SubSideArea(iCount,:) = DSMC_2D_CalcSymmetryAreaSubSides(iLocSide,CNElemID) + END IF + ELSE ! surfaces parallel to the x-axis (ymax = ymin) + BCdata_auxSCFTemp(TmpMapToBC(iBC))%WeightingFactor(iCount) = 1. & + + ymax/(GEO%ymaxglob)*(RadialWeighting%PartScaleFactor-1.) + END IF + END IF + ELSE + SurfMeshSubSideData(1,1:2,BCSideID)%area = DSMC_2D_CalcSymmetryArea(iLocSide,CNElemID) / 2. + END IF + ELSE IF(Symmetry%Order.EQ.1) THEN + SurfMeshSubSideData(1,1:2,BCSideID)%area = DSMC_1D_CalcSymmetryArea(iLocSide,ElemID) / 2. + END IF + + DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) + CALL CalcNormAndTangTriangle(SideID=SideID & + ,midpoint=BCdata_auxSCF(TmpMapToBC(iBC))%TriaSwapGeo(iSample,jSample,iCount)%midpoint & + ,ndist=BCdata_auxSCF(TmpMapToBC(iBC))%TriaSwapGeo(iSample,jSample,iCount)%ndist & + ,xyzNod=BCdata_auxSCF(TmpMapToBC(iBC))%TriaSideGeo(iCount)%xyzNod & + ,Vectors=BCdata_auxSCF(TmpMapToBC(iBC))%TriaSideGeo(iCount)%Vectors & + ,TriNum=jSample) + END DO; END DO + + !-- BC-list specific data + DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) + BCdata_auxSCF(TmpMapToBC(iBC))%LocalArea = BCdata_auxSCF(TmpMapToBC(iBC))%LocalArea & + + SurfMeshSubSideData(iSample,jSample,BCSideID)%area + END DO; END DO + + !-- next Side + IF (BCSideID .EQ. TmpSideEnd(iBC)) THEN + IF (TmpSideNumber(iBC).NE.iCount) THEN + CALL abort(& +__STAMP__& +,'Someting is wrong with TmpSideNumber of iBC',iBC,999.) + ELSE + EXIT + END IF + END IF + BCSideID=TmpSideNext(BCSideID) + END DO ! BCSideID (iCount) +END DO !iBC + +END SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux + +SUBROUTINE InitSurfFlux(iReac, iSF, iSide, tmp_SubSideAreas, BCdata_auxSCFTemp) +!=================================================================================================================================== +!> Initialize surface flux variables in SurfFluxSubSideData type +!=================================================================================================================================== +! MODULES +USE MOD_Globals +USE MOD_Globals_Vars ,ONLY: BoltzmannConst, PI +USE MOD_SurfaceModel_Vars +USE MOD_Particle_Vars ,ONLY: Species,nSpecies +USE MOD_DSMC_Vars ,ONLY: RadialWeighting +USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, BezierSampleN, SurfMeshSubSideData, SurfMeshSideAreas, tBCdata_auxSFRadWeight +USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, TriaSurfaceFlux +USE MOD_Particle_Surfaces ,ONLY: GetBezierSampledAreas +USE MOD_Particle_Vars ,ONLY: Species, nSpecies, DoSurfaceFlux +USE MOD_Particle_Vars ,ONLY: UseCircularInflow, DoForceFreeSurfaceFlux +USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive +USE MOD_Restart_Vars ,ONLY: DoRestart, RestartTime +! IMPLICIT VARIABLE HANDLING + IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER, INTENT(IN) :: iReac, iSF, iSide +REAL, INTENT(IN) :: tmp_SubSideAreas(SurfFluxSideSize(1),SurfFluxSideSize(2)) +TYPE(tBCdata_auxSCFRadWeight), ALLOCATABLE, INTENT(IN) :: BCdata_auxSCFTemp(:) +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: jSample, iSample, iSub, currentBC, BCSideID +INTEGER :: iSpec +REAL :: vec_nIn(3), nVFR, vec_t1(3), vec_t2(3), projFak, v_thermal, a, vSF +!=================================================================================================================================== +currentBC = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC +BCSideID=BCdata_auxSCF(currentBC)%SideList(iSide) +DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) + vec_nIn = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn + vec_t1 = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1 + vec_t2 = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2 + IF (.NOT.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal) THEN + projFak = DOT_PRODUCT(vec_nIn,SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloVecIC) !VeloVecIC projected to inwards normal + ELSE + projFak = 1. + END IF + + DO iSpec=1,nSpecies + IF(ANY(SurfChemReac%Products(iReac,:).EQ.iSpec)) THEN + v_thermal = SQRT(2.*BoltzmannConst*SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%MWTemperatureIC/Species(iSpec)%MassIC) !thermal speed + ELSE + v_thermal = 0. + END IF + END DO + + a = 0 !dummy for projected speed ratio in constant v-distri + !-- compute total volume flow rate through surface + SELECT CASE(TRIM(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%velocityDistribution)) + !CASE('constant') + ! vSF = Species(iSpec)%Surfaceflux(iSF)%VeloIC * projFak !Velo proj. to inwards normal + ! nVFR = MAX(tmp_SubSideAreas(iSample,jSample) * vSF,0.) !VFR proj. to inwards normal (only positive parts!) + CASE('maxwell','maxwell_lpn') + IF(v_thermal.NE.0.) THEN + a = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC * projFak / v_thermal !speed ratio proj. to inwards n (can be negative!) + ELSE + a = 0. + END IF + vSF = v_thermal / (2.0*SQRT(PI)) * ( EXP(-(a*a)) + a*SQRT(PI)*(1+ERF(a)) ) !mean flux velocity through normal sub-face + nVFR = tmp_SubSideAreas(iSample,jSample) * vSF !VFR projected to inwards normal of sub-side + IF(RadialWeighting%DoRadialWeighting) THEN + nVFR = nVFR / BCdata_auxSCFTemp(currentBC)%WeightingFactor(iSide) + DO iSub = 1, RadialWeighting%nSubSides + IF(ABS(BCdata_auxSCFTemp(currentBC)%SubSideWeight(iSide,iSub)).GT.0.)THEN + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%nVFRSub(iSide,iSub) = BCdata_auxSCFTemp(currentBC)%SubSideArea(iSide,iSub) & + * vSF / BCdata_auxSCFTemp(currentBC)%SubSideWeight(iSide,iSub) + END IF + END DO + END IF + CASE DEFAULT + CALL abort(__STAMP__,& + 'ERROR in SurfaceFlux: Wrong velocity distribution!') + END SELECT + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total + nVFR + !-- store SF-specific SubSide data in SurfFluxSubSideData (incl. projected velos) + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%nVFR = nVFR + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%projFak = projFak + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%a_nIn = a + IF (.NOT.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal) THEN + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 & + = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC & + * DOT_PRODUCT(vec_t1,SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloVecIC) !v in t1-dir + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 & + = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC & + * DOT_PRODUCT(vec_t2,SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloVecIC) !v in t2-dir + ELSE + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 = 0. !v in t1-dir + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 = 0. !v in t2-dir + END IF! .NOT.VeloIsNormal +END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) + +END SUBROUTINE InitSurfFlux + +END MODULE MOD_Particle_SurfChemFlux_Init diff --git a/src/particles/emission/particle_surface_flux.f90 b/src/particles/emission/particle_surface_flux.f90 index 2439d90c3..cfd53b0e2 100644 --- a/src/particles/emission/particle_surface_flux.f90 +++ b/src/particles/emission/particle_surface_flux.f90 @@ -1379,4 +1379,4 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iSF,iSample,jSample,iSide,BCSideID,Sid END SUBROUTINE SetSurfacefluxVelocities -END MODULE MOD_Particle_SurfFlux +END MODULE MOD_Particle_SurfFlux \ No newline at end of file diff --git a/src/particles/emission/particle_surface_flux_init.f90 b/src/particles/emission/particle_surface_flux_init.f90 index 0719a4747..90b726071 100644 --- a/src/particles/emission/particle_surface_flux_init.f90 +++ b/src/particles/emission/particle_surface_flux_init.f90 @@ -121,6 +121,7 @@ SUBROUTINE InitializeParticleSurfaceflux() USE MOD_Particle_Vars ,ONLY: Species, nSpecies, DoSurfaceFlux USE MOD_Particle_Vars ,ONLY: UseCircularInflow, DoForceFreeSurfaceFlux USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive +USE MOD_Particle_SurfChemFlux_Init USE MOD_Restart_Vars ,ONLY: DoRestart, RestartTime #if USE_MPI USE MOD_Particle_Vars ,ONLY: DoPoissonRounding, DoTimeDepInflow @@ -168,6 +169,9 @@ SUBROUTINE InitializeParticleSurfaceflux() CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoTimeDepInflow,1,MPI_LOGICAL,MPI_LAND,PartMPI%COMM,iError) !set T if this is for all procs #endif /*USE_MPI*/ +! +CALL ReadInAndPrepareSurfChemFlux(nDataBC) + CALL CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp) #ifdef CODE_ANALYZE diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index ac0603e65..919610671 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -273,7 +273,9 @@ SUBROUTINE InitParticles() USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive USE MOD_Particle_Emission_Init ,ONLY: InitialParticleInserting USE MOD_Particle_SurfFlux_Init ,ONLY: InitializeParticleSurfaceflux +USE MOD_Particle_SurfChemFlux_Init ,ONLY: InitializeParticleSurfChemFlux USE MOD_SurfaceModel_Init ,ONLY: InitSurfaceModel +USE MOD_SurfaceModel_Chemistry ,ONLY: SurfaceModel_Chemistry_Init USE MOD_Particle_Surfaces ,ONLY: InitParticleSurfaces USE MOD_Particle_Mesh_Vars ,ONLY: GEO USE MOD_Particle_Sampling_Adapt ,ONLY: InitAdaptiveBCSampling @@ -325,7 +327,9 @@ SUBROUTINE InitParticles() ! Insert the initial particles CALL InitialParticleInserting() ! Initialize particle surface flux to be performed per iteration +CALL SurfaceModel_Chemistry_Init() CALL InitializeParticleSurfaceflux() +CALL InitializeParticleSurfChemFlux() ! Initialize volume sampling IF(useDSMC .OR. WriteMacroVolumeValues) THEN @@ -1473,3 +1477,4 @@ END SUBROUTINE InitRandomSeed END MODULE MOD_ParticleInit + \ No newline at end of file diff --git a/src/particles/particle_mesh/particle_mesh.f90 b/src/particles/particle_mesh/particle_mesh.f90 index 15d51651a..6787c3806 100644 --- a/src/particles/particle_mesh/particle_mesh.f90 +++ b/src/particles/particle_mesh/particle_mesh.f90 @@ -169,6 +169,7 @@ SUBROUTINE InitParticleMesh() USE MOD_PICDepo_Vars ,ONLY: DoDeposition,DepositionType USE MOD_ReadInTools ,ONLY: GETREAL,GETINT,GETLOGICAL,GetRealArray, GETINTFROMSTR USE MOD_Particle_Vars ,ONLY: Symmetry +USE MOD_SurfaceModel_Vars #ifdef CODE_ANALYZE !USE MOD_Particle_Surfaces_Vars ,ONLY: SideBoundingBoxVolume USE MOD_Particle_Tracking_Vars ,ONLY: PartOut,MPIRankOut @@ -476,6 +477,7 @@ SUBROUTINE InitParticleMesh() IF (TriaSurfaceFlux) THEN BezierSampleN = 1 SurfFluxSideSize=(/1,2/) + SurfChemSideSize=(/1,2/) ELSE WRITE(tmpStr,'(I2.2)') NGeo BezierSampleN = GETINT('BezierSampleN',tmpStr) diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 new file mode 100644 index 000000000..f7e390665 --- /dev/null +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -0,0 +1,302 @@ +!================================================================================================================================== +! Copyright (c) 2010 - 2018 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas +! +! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify +! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 +! of the License, or (at your option) any later version. +! +! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty +! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details. +! +! You should have received a copy of the GNU General Public License along with PICLas. If not, see . +!================================================================================================================================== +#include "piclas.h" + +MODULE MOD_SurfaceModel_Chemistry +!=================================================================================================================================== +! Initialization of chemical module +!=================================================================================================================================== +! MODULES +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +PRIVATE + +!----------------------------------------------------------------------------------------------------------------------------------- +! GLOBAL VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! Private Part --------------------------------------------------------------------------------------------------------------------- +! Public Part ---------------------------------------------------------------------------------------------------------------------- +PUBLIC :: DefineParametersSurfaceChemistry, SurfaceModel_Chemistry_Init +!=================================================================================================================================== + +CONTAINS + +!================================================================================================================================== +!> Define parameters for DSMC (Direct Simulation Monte Carlo) +!================================================================================================================================== +SUBROUTINE DefineParametersSurfaceChemistry() +! MODULES +USE MOD_Globals +USE MOD_ReadInTools ,ONLY: prms +IMPLICIT NONE +!=================================================================================================================================== +CALL prms%SetSection("Surface Chemistry") +CALL prms%CreateIntOption( 'Surface-NumOfReactions','Number of chemical Surface reactions') +!CALL prms%CreateIntOption( 'Surface-NumOfRecombinations','Number of catalytic Surface recombinations') +CALL prms%CreateStringOption( 'Surface-Reaction[$]-Type', & + 'No default', numberedmulti=.TRUE.) +CALL prms%CreateIntArrayOption( 'Surface-Reaction[$]-Reactants' & + ,'Reactants of Reaction[$]\n'//& + '(SpecNumOfReactant1,\n'//& + 'SpecNumOfReactant2)', '0 , 0' , numberedmulti=.TRUE.) +CALL prms%CreateIntArrayOption( 'Surface-Reaction[$]-Products' & + ,'Products of Reaction[j] (Product1, Product2)', '0 , 0' & + , numberedmulti=.TRUE.) +CALL prms%CreateIntOption( 'Surface-Reaction[$]-Inhibition','Inhibition/Coadsorption behaviour due to other reactions', & + '0', numberedmulti=.TRUE.) +!CALL prms%CreateRealOption( 'Surface-Reaction[$]-ReactProbability', & +! 'TODO', '0.' , numberedmulti=.TRUE.) +! CALL prms%CreateRealOption( 'Surface-Reaction[$]-RecombinationCoefficient', & +! 'TODO', '0.' , numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Surface-Reaction[$]-StickingCoefficient', & + 'TODO', '0.' , numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Surface-Reaction[$]-DissOrder', & + 'TODO', '0.' , numberedmulti=.TRUE.) + CALL prms%CreateRealOption( 'Surface-Reaction[$]-EqConstant', & + 'TODO', '0.' , numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Surface-Reaction[$]-LateralInteraction', & + 'TODO', '0.' , numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Surface-Reaction[$]-Ca', & + 'TODO', '0.' , numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Surface-Reaction[$]-Cb', & + 'TODO', '0.' , numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Surface-Reaction[$]-Prefactor', & + 'TODO', '0.' , numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Surface-Reaction[$]-Energy', & + 'TODO', '0.' , numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Surface-Reaction[$]-FormationEnergy', & + 'TODO', '0.' , numberedmulti=.TRUE.) +CALL prms%CreateIntOption( 'Surface-Reaction[$]-NumOfBoundaries', & + 'Num of boundaries for surface reaction.', & + numberedmulti=.TRUE.) +CALL prms%CreateIntArrayOption( 'Surface-Reaction[$]-Boundaries' & + ,'Array of boundary indices of surface reaction.' & + ,numberedmulti=.TRUE.) +END SUBROUTINE DefineParametersSurfaceChemistry + +SUBROUTINE SurfaceModel_Chemistry_Init() +!=================================================================================================================================== +! Readin of variables and definition of reaction cases +!=================================================================================================================================== +! MODULES +USE MOD_Globals +USE MOD_ReadInTools +USE MOD_DSMC_Vars ,ONLY: SpecDSMC +USE MOD_PARTICLE_Vars ,ONLY: nSpecies +USE MOD_Particle_Boundary_Vars ,ONLY: nPartBound, PartBound +USE MOD_SurfaceModel_Vars +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +CHARACTER(LEN=3) :: hilf +INTEGER :: iReac, iReac2, iSpec, iPart +INTEGER :: ReadInNumOfReact, ReadInNumOfRecomb +REAL, ALLOCATABLE :: StoichCoeff(:,:) +!=================================================================================================================================== + +SurfChemReac%NumOfReact = GETINT('Surface-NumOfReactions', '0') +IF(SurfChemReac%NumOfReact.LE.0) THEN + RETURN +END IF +ReadInNumOfReact = SurfChemReac%NumOfReact +IF(ReadInNumOfReact.GT.0) THEN + DoChemSurface = .TRUE. +END IF +SWRITE(*,*) '| Number of considered reaction paths on Surfaces: ', SurfChemReac%NumOfReact + +! RecombModel%NumOfReact = GETINT('Surface-NumOfRecombinations', '0') +! IF(RecombModel%NumOfReact.LE.0) THEN +! RETURN +! END IF +! ReadInNumOfRecomb = RecombModel%NumOfReact +! IF(ReadInNumOfRecomb.GT.0) THEN +! DoCatSurface = .TRUE. +! END IF +! SWRITE(*,*) '| Number of considered recombiantion paths on Surfaces: ', RecombModel%NumOfReact +!---------------------------------------------------------------------------------------------------------------------------------- +ALLOCATE(StoichCoeff(nSpecies,2)) +ALLOCATE(SurfChemReac%ReactType(SurfChemReac%NumOfReact)) +SurfChemReac%ReactType = '0' +ALLOCATE(SurfChemReac%Reactants(SurfChemReac%NumOfReact,2)) +SurfChemReac%Reactants = 0 +ALLOCATE(SurfChemReac%Products(SurfChemReac%NumOfReact,2)) +SurfChemReac%Products = 0 +ALLOCATE(SurfChemReac%Inhibition(SurfChemReac%NumOfReact)) +SurfChemReac%Inhibition = 0 +!ALLOCATE(SurfChemReac%ReactProb(SurfChemReac%NumOfReact)) +!SurfChemReac%ReactProb = 0.0 +ALLOCATE(SurfChemReac%EForm(SurfChemReac%NumOfReact)) +SurfChemReac%EForm = 0.0 +ALLOCATE(SurfChemReac%BoundisChemSurf(nPartBound)) +ALLOCATE(SurfChemReac%NumOfBounds(SurfChemReac%NumOfReact)) +ALLOCATE(SurfChemReac%BoundMap(SurfChemReac%NumOfReact)) + +! Adsorption parameter +ALLOCATE(SurfChemReac%S_initial(SurfChemReac%NumOfReact)) +SurfChemReac%S_initial = 0.0 +ALLOCATE(SurfChemReac%EqConstant(SurfChemReac%NumOfReact)) +SurfChemReac%EqConstant = 0.0 +ALLOCATE(SurfChemReac%DissOrder(SurfChemReac%NumOfReact)) +SurfChemReac%DissOrder = 0.0 +ALLOCATE(SurfChemReac%StickCoeff(SurfChemReac%NumOfReact)) +SurfChemReac%StickCoeff = 0.0 + +! Desorption parameter +ALLOCATE(SurfChemReac%E_initial(SurfChemReac%NumOfReact)) +SurfChemReac%E_initial = 0.0 +ALLOCATE(SurfChemReac%W_interact(SurfChemReac%NumOfReact)) +SurfChemReac%W_interact = 0.0 +ALLOCATE(SurfChemReac%C_a(SurfChemReac%NumOfReact)) +SurfChemReac%C_a = 0.0 +ALLOCATE(SurfChemReac%C_b(SurfChemReac%NumOfReact)) +SurfChemReac%C_b = 0.0 + +! General reaction parameter +ALLOCATE(SurfChemReac%Rate(SurfChemReac%NumOfReact)) +SurfChemReac%Rate = 0.0 +ALLOCATE(SurfChemReac%Prob(SurfChemReac%NumOfReact)) +SurfChemReac%Prob = 0.0 +ALLOCATE(SurfChemReac%ArrheniusEnergy(SurfChemReac%NumOfReact)) +SurfChemReac%ArrheniusEnergy = 0.0 +ALLOCATE(SurfChemReac%Prefactor(SurfChemReac%NumOfReact)) +SurfChemReac%Prefactor = 0.0 + +! ! Simple recombination model +! ALLOCATE(RecombModel%ReactType(RecombModel%NumOfReact)) +! RecombModel%ReactType = '0' +! ALLOCATE(RecombModel%Reactants(RecombModel%NumOfReact,2)) +! RecombModel%Reactants = 0 +! ALLOCATE(RecombModel%Products(RecombModel%NumOfReact,2)) +! RecombModel%Products = 0 +! ALLOCATE(RecombModel%RecombCoeff(RecombModel%NumOfReact)) +! RecombModel%RecombCoeff = 0.0 +! ALLOCATE(RecombModel%BoundisCatSurf(nPartBound)) +! ALLOCATE(RecombModel%NumOfBounds(RecombModel%NumOfReact)) +! ALLOCATE(RecombModel%BoundMap(RecombModel%NumOfReact)) + + +DO iReac = 1, ReadInNumOfReact + WRITE(UNIT=hilf,FMT='(I0)') iReac + SurfChemReac%ReactType(iReac) = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-Type')) + + SurfChemReac%Reactants(iReac,:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Reactants',2,'0,0') + SurfChemReac%Products(iReac,:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Products',2,'0,0') + SurfChemReac%Inhibition(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-Inhibition','0') + SurfChemReac%NumOfBounds(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-NumOfBoundaries','0') + IF (SurfChemReac%NumOfBounds(iReac).EQ.0) THEN + CALL abort(& + __STAMP__& + ,'ERROR: At least one boundary must be defined for each surface reaction!',iReac) + END IF + ALLOCATE(SurfChemReac%BoundMap(iReac)%nSurfacefluxBCs(SurfChemReac%NumOfBounds(iReac))) + SurfChemReac%BoundMap(iReac)%Boundaries = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Boundaries', & + SurfChemReac%NumOfBounds(iReac)) + ! Define the surface model + PartBound%SurfaceModel(SurfChemReac%BoundMap(iReac)%Boundaries) = 20 + + DO iReac2 = 1, SurfChemReac%NumOfBounds(iReac) + SurfChemReac%BoundisChemSurf(SurfChemReac%BoundMap(iReac)%Boundaries(iReac2)) = .TRUE. + END DO + + SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) + CASE('A') + SurfChemReac%S_initial(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-StickingCoefficient','1.') + SurfChemReac%EqConstant(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EqConstant','1.') + SurfChemReac%DissOrder(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-DissOrder','1.') + + CASE('D') + SurfChemReac%W_interact(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-LateralInteraction','0.') + SurfChemReac%C_a(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Ca','0.') + SurfChemReac%C_b(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Cb','0.') + SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','0.') + SurfChemReac%E_initial(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','1.') + SurfChemReac%DissOrder(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-DissOrder','1.') + + CASE('LH') + SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') + SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') + + CASE('ER') + SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') + SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') + + CASE DEFAULT + SWRITE(*,*) ' Reaction Type does not exists: ', TRIM(SurfChemReac%ReactType(iReac)) + CALL abort(__STAMP__,'Surface Reaction Type does not exist') + END SELECT + + ! Total Collision Energy: Arrhenius-based chemistry model + ! SurfChemReac%ReactProb(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-ReactProbability','0') + SurfChemReac%EForm(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-FormationEnergy','0') + ! Filling up ChemReac-Array for the given non-reactive dissociation/electron-impact ionization partners + + ! Calculation of stoichiometric coefficients and calculation of the heat of formation + StoichCoeff = 0 + !SurfChemReac%EForm(iReac) = 0.0 + DO iSpec=1, nSpecies + ! Reactants + DO iPart = 1,2 + IF(SurfChemReac%Reactants(iReac,iPart).EQ.iSpec) THEN + StoichCoeff(iSpec,1) = StoichCoeff(iSpec,1) + 1 + END IF + END DO + ! Products + DO iPart = 1,2 + IF(SurfChemReac%Products(iReac,iPart).EQ.iSpec) THEN + StoichCoeff(iSpec,2) = StoichCoeff(iSpec,2) + 1 + END IF + END DO + ! Calculation of the enthalpy of reaction by the summation of the enthalpies of formation of the respective species + ! (ionization energy of ionized species was already added in dsmc_init.f90) + SurfChemReac%EForm(iReac) = SurfChemReac%EForm(iReac) & + - StoichCoeff(iSpec,2)*SpecDSMC(iSpec)%HeatOfFormation & + + StoichCoeff(iSpec,1)*SpecDSMC(iSpec)%HeatOfFormation + END DO + +END DO + +! ! Simple recombination model +! DO iReac = 1, ReadInNumOfRecomb +! WRITE(UNIT=hilf,FMT='(I0)') iReac +! RecombModel%ReactType(iReac) = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-Type')) + +! RecombModel%Reactants(iReac,:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Reactants',2,'0,0') +! RecombModel%Products(iReac,:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Products',2,'0,0') +! RecombModel%NumOfBounds(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-NumOfBoundaries','0') +! IF (RecombModel%NumOfBounds(iReac).EQ.0) THEN +! CALL abort(& +! __STAMP__& +! ,'ERROR: At least one boundary must be defined for each surface reaction!',iReac) +! END IF +! ALLOCATE(RecombModel%BoundMap(iReac)%Boundaries(RecombModel%NumOfBounds(iReac))) +! RecombModel%BoundMap(iReac)%Boundaries = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Boundaries', & +! RecombModel%NumOfBounds(iReac)) +! ! Define the surface model +! PartBound%SurfaceModel(RecombModel%BoundMap(iReac)%Boundaries) = 30 + +! DO iReac2 = 1, RecombModel%NumOfBounds(iReac) +! RecombModel%BoundisCatSurf(RecombModel%BoundMap(iReac)%Boundaries(iReac2)) = .TRUE. +! END DO + +! RecombModel%RecombCoeff(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-RecombinationCoefficient','0') + +! END DO + +END SUBROUTINE SurfaceModel_Chemistry_Init + +END MODULE MOD_SurfaceModel_Chemistry diff --git a/src/particles/surfacemodel/surfacemodel_init.f90 b/src/particles/surfacemodel/surfacemodel_init.f90 index e7a86db85..8d7000e50 100644 --- a/src/particles/surfacemodel/surfacemodel_init.f90 +++ b/src/particles/surfacemodel/surfacemodel_init.f90 @@ -96,7 +96,7 @@ SUBROUTINE InitSurfaceModel() DO iSpec = 1,nSpecies WRITE(UNIT=hilf,FMT='(I0)') iSpec - ! Loop particle boundaries + ! Loop particle boundaries DO iPartBound=1,nPartBound IF(.NOT.PartBound%Reactive(iPartBound)) CYCLE WRITE(UNIT=hilf2,FMT='(I0)') iPartBound @@ -151,6 +151,8 @@ SUBROUTINE InitSurfaceModel() IF(SurfModSEEelectronTempAutoamtic) CalcBulkElectronTemp=.TRUE. END IF ! SurfModelElectronTemp +!================================================================================================================================== + END SUBROUTINE InitSurfaceModel diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index d86aaa640..180b5726a 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -49,21 +49,23 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) #endif /*USE_MPI*/ USE MOD_Particle_Vars ,ONLY: PartSpecies,WriteMacroSurfaceValues,Species,usevMPF,PartMPF USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod, TrackInfo -USE MOD_Particle_Boundary_Vars ,ONLY: Partbound, GlobalSide2SurfSide, dXiEQ_SurfSample, PartBound -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC -USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared -USE MOD_Particle_Vars ,ONLY: PDM, LastPartPos +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, dXiEQ_SurfSample +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac !, RecombModel +USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared, BoundsOfElem_Shared +USE MOD_Particle_Vars ,ONLY: PDM, LastPartPos,PartState USE MOD_Particle_Vars ,ONLY: UseCircularInflow USE MOD_Dielectric_Vars ,ONLY: DoDielectricSurfaceCharge USE MOD_DSMC_Vars ,ONLY: DSMC, SamplingActive, RadialWeighting USE MOD_SurfaceModel_Analyze_Vars ,ONLY: CalcSurfCollCounter, SurfAnalyzeCount, SurfAnalyzeNumOfAds, SurfAnalyzeNumOfDes -USE MOD_SurfaceModel_Tools ,ONLY: SurfaceModel_ParticleEmission +USE MOD_SurfaceModel_Tools ,ONLY: SurfaceModel_ParticleEmission, GetWallTemperature, SurfaceModel_EnergyAccommodation USE MOD_SEE ,ONLY: SecondaryElectronEmission USE MOD_SurfaceModel_Porous ,ONLY: PorousBoundaryTreatment +USE MOD_SurfaceModel_Chemistry USE MOD_Particle_Boundary_Tools ,ONLY: CalcWallSample USE MOD_PICDepo_Tools ,ONLY: DepositParticleOnNodes -USE MOD_part_operations ,ONLY: RemoveParticle -USE MOD_part_tools ,ONLY: CalcRadWeightMPF +USE MOD_part_operations ,ONLY: RemoveParticle, CreateParticle +USE MOD_part_tools ,ONLY: CalcRadWeightMPF, VeloFromDistribution +USE MOD_TimeDisc_Vars ,ONLY: dt ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -92,6 +94,28 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) REAL :: ChargeHole !< Charge of SEE electrons holes INTEGER :: i !=================================================================================================================================== +CHARACTER(LEN=5) :: InteractionType +REAL :: RanNum ! Random number +REAL :: Coverage, MaxCoverage, TotalCoverage, Theta +REAL :: CoAds_Coverage, CoAds_MaxCov +REAL :: S_0, StickCoeff +REAL :: EqConstant, DissOrder +REAL :: WallTemp +REAL :: nu, E_act, Rate, Prob +REAL :: NewPos(1:3) +REAL :: tang1(1:3), tang2(1:3), WallVelo(1:3), BoundsOfElemCenter(1:3), NewVelo(3) +REAL,PARAMETER :: eps=1e-6 +REAL,PARAMETER :: eps2=1.0-eps +INTEGER :: speciesID +INTEGER :: iReac_Ads, iReac_ER +INTEGER :: iReac, iValProd, iProd +INTEGER :: iReactant, iValReac +INTEGER :: iCoadsReac, iCoadsSpec +INTEGER :: NewPartID +INTEGER :: SurfNumOfReac +INTEGER :: iNewPart +INTEGER :: SurfNumOfRecomb +!=================================================================================================================================== iBC = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) !=================================================================================================================================== @@ -160,6 +184,204 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) CASE (0) ! Maxwellian scattering (diffuse/specular reflection) !----------------------------------------------------------------------------------------------------------------------------------- CALL MaxwellScattering(PartID,SideID,n_Loc,SpecularReflectionOnly) +!----------------------------------------------------------------------------------------------------------------------------------- +CASE(20) + + InteractionType = 'None' + StickCoeff = 0.0 + Prob = 0.0 + + speciesID = PartSpecies(PartID) + SurfNumOfReac = SurfChemReac%NumOfReact + DO iReac = 1, SurfNumOfReac + + SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) + + CASE('A') + IF(ANY(SurfChemReac%Reactants(iReac,:).EQ.speciesID)) THEN + iReac_Ads = iReac + + ! Absolute coverage in terms of the number of surface molecules + IF(ANY(SurfChemReac%Products(iReac,:).NE.0)) THEN + DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) + IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN + iProd = SurfChemReac%Products(iReac,iValProd) + Coverage = PartBound%Coverage(locBCID, iProd) + END IF + END DO + ELSE + Coverage = PartBound%Coverage(locBCID, speciesID) + END IF + + ! Definition of the variables + MaxCoverage = PartBound%MaxCoverage(locBCID,speciesID) + TotalCoverage = PartBound%TotalCoverage(locBCID) + DissOrder = SurfChemReac%DissOrder(iReac) + S_0 = SurfChemReac%S_initial(iReac) + EqConstant = SurfChemReac%EqConstant(iReac) + StickCoeff = SurfChemReac%StickCoeff(iReac) + + ! Theta = free surface sites required for the adsorption + ! Determination of possible coadsorption processes + IF(SurfChemReac%Inhibition(iReac).NE.0) THEN + iCoadsReac = SurfChemReac%Inhibition(iReac) + iCoadsSpec = SurfChemReac%Reactants(iCoadsReac,1) + CoAds_Coverage = PartBound%Coverage(locBCID, iCoadsSpec) + CoAds_MaxCov = PartBound%MaxCoverage(locBCID,iCoadsSpec) + Theta = 1.0 - Coverage/MaxCoverage - CoAds_Coverage/CoAds_MaxCov + ELSE + Theta = 1.0 - Coverage/MaxCoverage + END IF + + ! Check whether the maximum coverage value is reached: + IF(Theta.GE.0.0 .AND. TotalCoverage.LT.1.0) THEN + Theta = Theta**DissOrder + ! Kisluik model + ! For EqConstant=1 and MaxCoverage=1: Langmuir model + StickCoeff = S_0 * (1.0 + EqConstant * (1.0/Theta - 1.0))**(-1.0) + ELSE + StickCoeff = 0.0 + END IF + + END IF + + ! Eley-Rideal reaction mechanism + CASE('ER') + IF(ANY(SurfChemReac%Reactants(iReac,:).EQ.speciesID)) THEN + iReac_ER = iReac + + ! Definition of the variables + WallTemp = PartBound%WallTemp(locBCID) + nu = SurfChemReac%Prefactor(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) + Rate = SurfChemReac%Rate(iReac) + + ! Check for the coverage values for the reactant adsorbed on the surface + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + Coverage = PartBound%Coverage(locBCID, iReactant) + END IF + END DO + + ! Coverage values in terms of the surface atoms or in terms of the surface area? + Rate = nu * Coverage * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol + Prob = Rate * dt + + END IF + + CASE DEFAULT + + END SELECT + + END DO + + CALL RANDOM_NUMBER(RanNum) + + IF(Prob.GT.StickCoeff) THEN + IF(Prob.GT.RanNum) THEN + InteractionType = 'ER' + iReac = iReac_ER + END IF + ELSE IF(StickCoeff.GT.Prob) THEN + IF (StickCoeff.GT.RanNum) THEN + InteractionType = 'A' + iReac = iReac_Ads + END IF + END IF + + SELECT CASE(TRIM(InteractionType)) + + CASE('A') + CALL RemoveParticle(PartID) + MPF = Species(speciesID)%MacroParticleFactor + + ! Update the number of adsorbed molecules + IF(ANY(SurfChemReac%Products(iReac,:).NE.0)) THEN + DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) + IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN + iProd = SurfChemReac%Reactants(iReac,iValProd) + PartBound%AdCount(locBCID, iProd) = PartBound%AdCount(locBCID, iProd) + DissOrder * MPF + PartBound%Coverage(locBCID, iProd) = PartBound%Coverage(locBCID, iProd) + DissOrder * MPF / PartBound%nMol(locBCID) + END IF + END DO + ELSE + PartBound%AdCount(locBCID, speciesID) = PartBound%AdCount(locBCID, speciesID) + DissOrder * MPF + PartBound%Coverage(locBCID, speciesID) = PartBound%Coverage(locBCID, speciesID) + DissOrder * MPF / PartBound%nMol(locBCID) + END IF + + PartBound%TotalCoverage(locBCID) = PartBound%TotalCoverage(locBCID) + DissOrder * MPF/PartBound%nMol(locBCID) + + CASE('ER') + CALL RemoveParticle(PartID) + MPF = Species(speciesID)%MacroParticleFactor + ! Create the Eley-Rideal reaction product + + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + TempErgy = WallTemp + WallVelo = PartBound%WallVelo(1:3,locBCID) + + CALL OrthoNormVec(n_loc,tang1,tang2) + + ! Get Elem Center + BoundsOfElemCenter(1:3) = (/SUM(BoundsOfElem_Shared(1:2,1,GlobalElemID)), & + SUM(BoundsOfElem_Shared(1:2,2,GlobalElemID)), & + SUM(BoundsOfElem_Shared(1:2,3,GlobalElemID)) /) / 2. + + iNewPart = 1 + ProductSpecNbr = 1 + + DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) + IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN + iProd = SurfChemReac%Products(iReac,iValProd) + PartBound%ERCount(locBCID, iProd) = PartBound%ERCount(locBCID, iProd) + 1.0 * MPF + + !NewVelo(1:3) = VeloFromDistribution('deltadistribution',TempErgy,iNewPart,ProductSpecNbr) + NewVelo(1:3) = tang1(1:3)*NewVelo(1) + tang2(1:3)*NewVelo(2) - n_loc(1:3)*NewVelo(3) + WallVelo(1:3) + NewPos(1:3) = eps*BoundsOfElemCenter(1:3) + eps2*PartPosImpact(1:3) + + ProductSpec(2) = iProd + + CALL CreateParticle(ProductSpec(2),NewPos(1:3),GlobalElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID, NewMPF=MPF) + + CALL SurfaceModel_EnergyAccommodation(NewPartID,locBCID,WallTemp) + END IF + END DO + + ! Update the number of adsorbed molecules + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + PartBound%AdCount(locBCID, iReactant) = PartBound%AdCount(locBCID, iReactant) - 1.0 + PartBound%Coverage(locBCID, iReactant) = PartBound%Coverage(locBCID, iReactant) - 1.0/PartBound%nMol(locBCID) + PartBound%TotalCoverage(locBCID) = PartBound%TotalCoverage(locBCID) - 1.0/PartBound%nMol(locBCID) + END IF + END DO + + CASE DEFAULT + CALL MaxwellScattering(PartID,SideID,n_Loc) + END SELECT + +! CASE(30) + +! SurfNumOfRecomb = RecombModel%NumOfReact + +! DO iReac = 1, SurfNumOfRecomb +! IF(ANY(SurfChemReac%Reactants(iReac,:).EQ.speciesID)) THEN +! RecombCoeff = RecombModel%RecombCoeff(iReac) + +! ! Perform the reaction +! CALL RANDOM_NUMBER(RanNum) +! IF (RecombCoeff.GT.RanNum) THEN +! CALL RemoveParticle(PartID) +! PartBound%CatCount(locBCID, iReactant) = PartBound%CatCount(locBCID, iReactant) + 1.0 +! ! Routine to generate the new particle + +! ELSE +! CALL MaxwellScattering(PartID,SideID,n_Loc) +! END IF +! END DO + !----------------------------------------------------------------------------------------------------------------------------------- CASE (SEE_MODELS_ID) ! 5: SEE by Levko2015 diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90 index d4f79fbcb..c5258f337 100644 --- a/src/particles/surfacemodel/surfacemodel_vars.f90 +++ b/src/particles/surfacemodel/surfacemodel_vars.f90 @@ -16,7 +16,10 @@ MODULE MOD_SurfaceModel_Vars !=================================================================================================================================== ! MODULES ! IMPLICIT VARIABLE HANDLING -IMPLICIT NONE + +USE MOD_DSMC_Vars, ONLY:tCollCaseInfo + +IMPLICIT NONE PUBLIC SAVE !----------------------------------------------------------------------------------------------------------------------------------- @@ -43,6 +46,143 @@ MODULE MOD_SurfaceModel_Vars REAL :: rmin ! min radius of to-be inserted particles END TYPE TYPE(tPorousBC), ALLOCATABLE :: PorousBC(:) ! Container for the porous BC, allocated with nPorousBC +!=== Heterogenous Surface BC ======================================================================================================== + +TYPE tBoundMap + INTEGER, ALLOCATABLE :: Boundaries(:) +END TYPE + +TYPE tSurfFluxMap + TYPE(typeSurfaceflux),ALLOCATABLE :: Surfaceflux(:) + !INTEGER :: nSurfacefluxBCs +END TYPE + + LOGICAL :: DoChemSurface + +TYPE tSurfReactions + INTEGER :: NumOfReact ! Number of possible reactions + CHARACTER(LEN=5),ALLOCATABLE :: ReactType(:) ! Type of Reaction (reaction num) + ! A (adsorption) + ! D (desorption) + ! LH (Langmuir-Hinshlewood) + ! ER (Eley-Rideal) + INTEGER, ALLOCATABLE :: Reactants(:,:) ! Reactants: indices of the species starting the reaction [NumOfReact,3] + INTEGER, ALLOCATABLE :: Products(:,:) ! Products: indices of the species resulting from the reaction [NumOfReact,4] + INTEGER, ALLOCATABLE :: Inhibition(:) ! Inhibition reaction + INTEGER, ALLOCATABLE :: NumOfBounds(:) + !REAL, ALLOCATABLE :: ReactProb(:) + REAL, ALLOCATABLE :: EForm(:) + ! Parameters for the adsorption + REAL, ALLOCATABLE :: S_initial(:) ! Initial sticking coefficient + REAL, ALLOCATABLE :: MaxCoverage(:) ! Maximal surface coverage + REAL, ALLOCATABLE :: DissOrder(:) ! molecular or dissociative adsorption + REAL, ALLOCATABLE :: EqConstant(:) ! adsorption/dissociation + REAL, ALLOCATABLE :: StickCoeff(:) + ! Parameters for the desorption + REAL, ALLOCATABLE :: E_initial(:) + REAL, ALLOCATABLE :: W_interact(:) + REAL, ALLOCATABLE :: C_a(:) + REAL, ALLOCATABLE :: C_b(:) + ! General Parameters + REAL, ALLOCATABLE :: Rate(:) + REAL, ALLOCATABLE :: Prob(:) + REAL, ALLOCATABLE :: Prefactor(:) + REAL, ALLOCATABLE :: ArrheniusEnergy(:) + LOGICAL, ALLOCATABLE :: BoundisChemSurf(:) + TYPE(tBoundMap), ALLOCATABLE :: BoundMap(:) + TYPE(tCollCaseInfo), ALLOCATABLE:: CollCaseInfo(:) ! Information of collision cases (nCase) + TYPE(tSurfFluxMap), ALLOCATABLE :: SFMap(:) +END TYPE +TYPE(tSurfReactions) :: SurfChemReac + +! Surface flux for the creation of the particles + INTEGER :: SurfChemSideSize(2) + REAL,ALLOCATABLE,DIMENSION(:) :: SurfChemSideAreas + + TYPE tSurfChemSubSideData + REAL :: vec_nIn(3) + REAL :: vec_t1(3) + REAL :: vec_t2(3) + REAL :: area +END TYPE tSurfChemSubSideData +TYPE(tSurfChemSubSideData),ALLOCATABLE :: SurfChemSubSideData(:,:,:) + +TYPE tTriaSwapGeo + REAL :: midpoint(3) + REAL :: ndist(3) +END TYPE tTriaSwapGeo +TYPE tTriaSideGeo + REAL :: xyzNod(3) + REAL :: Vectors(3,3) +END TYPE tTriaSideGeo + +TYPE tBCdata_auxSCF + INTEGER :: SideNumber + REAL :: GlobalArea, LocalArea + INTEGER , ALLOCATABLE :: SideList(:) + TYPE(tTriaSwapGeo) , ALLOCATABLE :: TriaSwapGeo(:,:,:) + TYPE(tTriaSideGeo) , ALLOCATABLE :: TriaSideGeo(:) +END TYPE tBCdata_auxSCF +TYPE(tBCdata_auxSCF),ALLOCATABLE :: BCdata_auxSCF(:) + +TYPE tBCdata_auxSCFRadWeight + REAL, ALLOCATABLE :: SubSideWeight(:,:) + REAL, ALLOCATABLE :: WeightingFactor(:) + REAL, ALLOCATABLE :: SubSideArea(:,:) +END TYPE + +TYPE typeSurfaceflux + INTEGER :: BC + CHARACTER(30) :: velocityDistribution + REAL :: VeloIC + REAL :: VeloVecIC(3) + REAL :: MWTemperatureIC + LOGICAL :: VeloIsNormal + REAL :: VFR_total + REAL , ALLOCATABLE :: VFR_total_allProcs(:) + REAL :: VFR_total_allProcsTotal + REAL :: totalAreaSF + INTEGER(KIND=8) :: InsertedParticle + INTEGER(KIND=8) :: InsertedParticleSurplus + INTEGER(KIND=8) :: tmpInsertedParticle + INTEGER(KIND=8) :: tmpInsertedParticleSurplus + TYPE(tSurfFluxSubSideData), ALLOCATABLE :: SurfFluxSubSideData(:,:,:) + INTEGER :: dir(3) + REAL :: origin(2) + REAL :: rmax + REAL :: rmin + INTEGER, ALLOCATABLE :: SurfFluxSideRejectType(:) + REAL, ALLOCATABLE :: CircleAreaPerTriaSide(:,:,:) + REAL :: SampledMassflow + REAL, ALLOCATABLE :: nVFRSub(:,:) +END TYPE + +TYPE tSurfFluxSubSideData + REAL :: projFak + REAL :: a_nIn + REAL :: Velo_t1 + REAL :: Velo_t2 + REAL :: nVFR + REAL :: Dmax +END TYPE tSurfFluxSubSideData + +! TYPE tRecombinationModel +! INTEGER :: NumOfReact ! Number of possible reactions +! !CHARACTER(LEN=5),ALLOCATABLE :: ReactType(:) ! Type of Reaction (reaction num) +! ! ! A (adsorption) +! ! ! D (desorption) +! ! ! LH (Langmuir-Hinshlewood) +! ! ! ER (Eley-Rideal) +! INTEGER, ALLOCATABLE :: Reactants(:,:) ! Reactants: indices of the species starting the reaction [NumOfReact,3] +! INTEGER, ALLOCATABLE :: Products(:,:) ! Products: indices of the species resulting from the reaction [NumOfReact,4] +! INTEGER, ALLOCATABLE :: NumOfBounds(:) +! REAL, ALLOCATABLE :: RecombCoeff(:) +! LOGICAL, ALLOCATABLE :: BoundisCatSurf(:) +! TYPE(tBoundMap), ALLOCATABLE :: BoundMap(:) +! TYPE(tCollCaseInfo), ALLOCATABLE:: CollCaseInfo(:) ! Information of collision cases (nCase) +! !TYPE(tSurfFluxMap), ALLOCATABLE :: SFMap(:) +! END TYPE tRecombinationModel +! TYPE(tRecombinationModel),ALLOCATABLE :: RecombModel(:) !=================================================================================================================================== END MODULE MOD_SurfaceModel_Vars diff --git a/src/particles/tracking/particle_intersection.f90 b/src/particles/tracking/particle_intersection.f90 index 9a76f5326..26e672c59 100644 --- a/src/particles/tracking/particle_intersection.f90 +++ b/src/particles/tracking/particle_intersection.f90 @@ -557,7 +557,7 @@ SUBROUTINE ComputeBiLinearIntersection(isHit,PartTrajectory,lengthPartTrajectory IF(PartID.EQ.PARTOUT)THEN WRITE(UNIT_stdout,'(110("-"))') WRITE(UNIT_stdout,'(A)') ' | Output of bilinear intersection equation constants: ' - WRITE(UNIT_stdout,'(A,3(1X,G0))') ' | SideNormVec : ',SideNormVec(1:3,SideID) + WRITE(UNIT_stdout,'(A,3(1X,G0))') ' | SideNormVec : ',SideNormVec(1:3,CNSideID) WRITE(UNIT_stdout,'(A,4(1X,G0))') ' | BilinearCoeff: ',BilinearCoeff(1,1:4) WRITE(UNIT_stdout,'(A,4(1X,G0))') ' | BilinearCoeff: ',BilinearCoeff(2,1:4) WRITE(UNIT_stdout,'(A,4(1X,G0))') ' | BilinearCoeff: ',BilinearCoeff(3,1:4) @@ -1290,7 +1290,6 @@ RECURSIVE SUBROUTINE BezierClipRecursive(ClipMode,BezierControlPoints2D,LineNorm USE MOD_Mesh_Vars, ONLY:NGeo USE MOD_Particle_Surfaces_Vars, ONLY:BezierClipMaxIter USE MOD_Particle_Surfaces_Vars, ONLY:BezierClipLineVectorMethod -USE MOD_Particle_Surfaces, ONLY:EvaluateBezierPolynomialAndGradient #ifdef CODE_ANALYZE USE MOD_Globals, ONLY:MyRank USE MOD_Particle_Tracking_Vars, ONLY:PartOut,MPIRankOut @@ -1887,7 +1886,6 @@ PPURE FUNCTION ComputeXi(eta,A1,A2) IMPLICIT NONE !-------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES - REAL,INTENT(IN) :: eta REAL,DIMENSION(4),INTENT(IN) :: A1,A2 !-------------------------------------------------------------------------------------------------------------------------------- diff --git a/src/timedisc/timedisc_TimeStep_DSMC.f90 b/src/timedisc/timedisc_TimeStep_DSMC.f90 index bbd8a011d..b0265d668 100644 --- a/src/timedisc/timedisc_TimeStep_DSMC.f90 +++ b/src/timedisc/timedisc_TimeStep_DSMC.f90 @@ -44,10 +44,12 @@ SUBROUTINE TimeStep_DSMC() USE MOD_part_tools ,ONLY: UpdateNextFreePosition USE MOD_part_emission ,ONLY: ParticleInserting USE MOD_Particle_SurfFlux ,ONLY: ParticleSurfaceflux +USE MOD_Particle_SurfChemFlux USE MOD_Particle_Tracking_vars ,ONLY: tTracking,MeasureTrackTime USE MOD_Particle_Tracking ,ONLY: PerformTracking USE MOD_SurfaceModel_Porous ,ONLY: PorousBoundaryRemovalProb_Pressure -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, DoChemSurface +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound USE MOD_vMPF ,ONLY: SplitAndMerge #if USE_MPI USE MOD_Particle_MPI ,ONLY: IRecvNbOfParticles, MPIParticleSend,MPIParticleRecv,SendNbOfparticles @@ -80,6 +82,31 @@ SUBROUTINE TimeStep_DSMC() CALL ParticleSurfaceflux() END IF + IF (DoChemSurface) THEN + CALL ParticleSurfChemFlux() + ! Write the adsorption and desorption values into separate files for the two reactants + OPEN(10, file='adsorbtion_O2.txt', position="APPEND") + OPEN(30, file='adsorbtion_CO.txt', position="APPEND") + OPEN(20, file='desorption_O2.txt', position="APPEND") + OPEN(40, file='desorption_CO.txt', position="APPEND") + OPEN(50, file='reaction_LH.txt', position="APPEND") + OPEN(60, file='reaction_ER.txt', position="APPEND") + + WRITE(10,*) PartBound%AdCount(1,4) + WRITE(20,*) PartBound%DesCount(1,4) + WRITE(30,*) PartBound%AdCount(1,2) + WRITE(40,*) PartBound%DesCount(1,2) + WRITE(50,*) PartBound%LHCount(1,1) + WRITE(60,*) PartBound%ERCount(1,1) + + CLOSE(10) + CLOSE(20) + CLOSE(30) + CLOSE(40) + CLOSE(50) + CLOSE(60) + END IF + #if USE_LOADBALANCE CALL LBStartTime(tLBStart) #endif /*USE_LOADBALANCE*/ From c2e93d8b9ba2df440fb49b6fad0a5931057bb6ab Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Thu, 12 May 2022 08:44:20 +0200 Subject: [PATCH 002/222] remove surface_chemflux_init --- .../boundary/particle_boundary_init.f90 | 7 - .../emission/particle_surface_chemflux.f90 | 43 +- .../particle_surface_chemflux_init.f90 | 507 ------------------ .../emission/particle_surface_flux_init.f90 | 277 +++++++++- src/particles/particle_init.f90 | 2 - src/particles/particle_mesh/particle_mesh.f90 | 1 - .../surfacemodel/surfacemodel_chemistry.f90 | 27 +- .../surfacemodel/surfacemodel_vars.f90 | 77 +-- 8 files changed, 319 insertions(+), 622 deletions(-) delete mode 100644 src/particles/emission/particle_surface_chemflux_init.f90 diff --git a/src/particles/boundary/particle_boundary_init.f90 b/src/particles/boundary/particle_boundary_init.f90 index 52354c8df..6b2237abf 100644 --- a/src/particles/boundary/particle_boundary_init.f90 +++ b/src/particles/boundary/particle_boundary_init.f90 @@ -574,13 +574,6 @@ SUBROUTINE InitializeVariablesPartBoundary() BCdata_auxSF(iPartBound)%LocalArea=0. END DO -ALLOCATE(BCdata_auxSCF(1:nPartBound)) -DO iPartBound=1,nPartBound - BCdata_auxSCF(iPartBound)%SideNumber=-1 !init value when not used - BCdata_auxSCF(iPartBound)%GlobalArea=0. - BCdata_auxSCF(iPartBound)%LocalArea=0. -END DO - !-- Sanity check: Deprecated voltage parameter IF(DeprecatedVoltage) CALL abort(__STAMP__& ,'Part-Boundary-Voltage is no longer supported. Use corresponding RefState parameter as described in the user guide.') diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index d18c6ab80..08d81cc49 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -47,7 +47,7 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCPartNumOut USE MOD_Particle_VarTimeStep ,ONLY: CalcVarTimeStep USE MOD_Timedisc_Vars ,ONLY: RKdtFrac, dt - +USE MOD_Particle_Surfaces_Vars USE MOD_Particle_Boundary_Vars USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared USE MOD_SurfaceModel @@ -174,23 +174,24 @@ SUBROUTINE ParticleSurfChemFlux() DO WHILE(INT(PartBound%DesCountIter(BoundID, iSpec)).GT.1) ! Random distribution of the particles on the surface CALL RANDOM_NUMBER(RanNum) - iSide = INT(BCdata_auxSCF(currentBC)%SideNumber * RanNum) + iSide = INT(BCdata_auxSF(currentBC)%SideNumber * RanNum) + IF(iSide.GT.0) THEN ! Define the necessary variables - BCSideID=BCdata_auxSCF(currentBC)%SideList(iSide) + BCSideID=BCdata_auxSF(currentBC)%SideList(iSide) ElemID = SideToElem(S2E_ELEM_ID,BCSideID) iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) globElemId = ElemID + offSetElem SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) - xyzNod(1:3) = BCdata_auxSCF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) + xyzNod(1:3) = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) - DO jSample=1,SurfChemSideSize(2); DO iSample=1,SurfChemSideSize(1) + DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) ! Number of additional particles to be inserted Node1 = jSample+1 Node2 = jSample+2 ! - Vector1 = BCdata_auxSCF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node1-1) - Vector2 = BCdata_auxSCF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node2-1) - midpoint(1:3) = BCdata_auxSCF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) - ndist(1:3) = BCdata_auxSCF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) + Vector1 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node1-1) + Vector2 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node2-1) + midpoint(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) + ndist(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) PartInsSubSide = 1 PartBound%DesCountIter(BoundID, iSpec) = PartBound%DesCountIter(BoundID, iSpec) - 1. @@ -226,6 +227,9 @@ SUBROUTINE ParticleSurfChemFlux() PartsEmitted = PartsEmitted + PartInsSubSide END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) + ELSE + CYCLE + END IF END DO ! iSide IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'Error 2 in ParticleSurfaceflux!') @@ -324,23 +328,24 @@ SUBROUTINE ParticleSurfChemFlux() DO WHILE(INT(PartBound%LHCountIter(BoundID, iSpec)).GT.1) ! Random distributions of the particles on the surface CALL RANDOM_NUMBER(RanNum) - iSide = INT(BCdata_auxSCF(currentBC)%SideNumber * RanNum) + iSide = INT(BCdata_auxSF(currentBC)%SideNumber * RanNum) + IF(iSide.GT.0.) THEN ! Define the necessary variables - BCSideID=BCdata_auxSCF(currentBC)%SideList(iSide) + BCSideID=BCdata_auxSF(currentBC)%SideList(iSide) ElemID = SideToElem(S2E_ELEM_ID,BCSideID) iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) globElemId = ElemID + offSetElem SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) - xyzNod(1:3) = BCdata_auxSCF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) + xyzNod(1:3) = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) - DO jSample=1,SurfChemSideSize(2); DO iSample=1,SurfChemSideSize(1) + DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) ! Number of additional particles to be inserted Node1 = jSample+1 Node2 = jSample+2 - Vector1 = BCdata_auxSCF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node1-1) - Vector2 = BCdata_auxSCF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node2-1) - midpoint(1:3) = BCdata_auxSCF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) - ndist(1:3) = BCdata_auxSCF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) + Vector1 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node1-1) + Vector2 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node2-1) + midpoint(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) + ndist(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) PartInsSubSide = 1 PartBound%LHCountIter(BoundID, iSpec) = PartBound%LHCountIter(BoundID, iSpec) -1. @@ -378,6 +383,10 @@ SUBROUTINE ParticleSurfChemFlux() PartsEmitted = PartsEmitted + PartInsSubSide END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) + + ELSE + CYCLE + END IF END DO ! iSide IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'Error 2 in ParticleSurfaceflux!') diff --git a/src/particles/emission/particle_surface_chemflux_init.f90 b/src/particles/emission/particle_surface_chemflux_init.f90 deleted file mode 100644 index f6dff9b3a..000000000 --- a/src/particles/emission/particle_surface_chemflux_init.f90 +++ /dev/null @@ -1,507 +0,0 @@ -!================================================================================================================================== -! Copyright (c) 2021 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas -! -! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify -! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 -! of the License, or (at your option) any later version. -! -! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty -! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details. -! -! You should have received a copy of the GNU General Public License along with PICLas. If not, see . -!================================================================================================================================== -#include "piclas.h" - -MODULE MOD_Particle_SurfChemFlux_Init -!=================================================================================================================================== -!> Module for the initialization of particle emission through the chemistry surface flux -!=================================================================================================================================== -! IMPLICIT VARIABLE HANDLING -IMPLICIT NONE -PRIVATE -!----------------------------------------------------------------------------------------------------------------------------------- -! GLOBAL VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! Private Part --------------------------------------------------------------------------------------------------------------------- -! Public Part ---------------------------------------------------------------------------------------------------------------------- -PUBLIC :: InitializeParticleSurfChemFlux -!=================================================================================================================================== -CONTAINS - -SUBROUTINE InitializeParticleSurfChemFlux() -!=================================================================================================================================== -! Init Particle Inserting via Surface Flux -!=================================================================================================================================== -! Modules -USE MOD_Globals -USE MOD_ReadInTools -USE MOD_Mesh_Vars ,ONLY: nBCSides, SideToElem, offsetElem -USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID -USE MOD_SurfaceModel_Vars -USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, BezierSampleN, SurfMeshSubSideData, SurfMeshSideAreas, tBCdata_auxSFRadWeight -USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, TriaSurfaceFlux -USE MOD_Particle_Surfaces ,ONLY: GetBezierSampledAreas -USE MOD_Particle_Vars ,ONLY: Species, nSpecies, DoSurfaceFlux -USE MOD_Particle_Vars ,ONLY: UseCircularInflow, DoForceFreeSurfaceFlux -USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive -USE MOD_Restart_Vars ,ONLY: DoRestart, RestartTime - -! IMPLICIT VARIABLE HANDLING -IMPLICIT NONE -!----------------------------------------------------------------------------------------------------------------------------------- -! INPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! OUTPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! LOCAL VARIABLES -! Local variable declaration -INTEGER :: iSF,SideID,BCSideID,iSide,ElemID,iLocSide,iSample,jSample,currentBC -INTEGER :: MaxSurfacefluxBCs,nDataBC -INTEGER :: iReac, SurfNumReac -REAL :: tmp_SubSideAreas(SurfFluxSideSize(1),SurfFluxSideSize(2)) -TYPE(tBCdata_auxSCFRadWeight),ALLOCATABLE :: BCdata_auxSCFTemp(:) -!=================================================================================================================================== -! ALLOCATE(SurfMeshSubSideData(SurfFluxSideSize(1),SurfFluxSideSize(2),1:nBCSides),SurfMeshSideAreas(1:nBCSides)) -! SurfMeshSideAreas=0. -! ! global calculations for sampling the faces for area and vector calculations (checks the integration with CODE_ANALYZE) -! CALL BCSurfMeshSideAreasandNormals() - -!MaxSurfacefluxBCs=0 -!nDataBC=0 - -!read/prepare parameters and determine nec. BCs -!CALL ReadInAndPrepareSurfChemFlux(MaxSurfacefluxBCs, nDataBC) - -!CALL CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSCFTemp) - -SurfNumReac = SurfChemReac%NumOfReact -!initialize Surfaceflux-specific data -DO iReac=1,SurfNumReac - DO iSF=1,SurfChemReac%NumOfBounds(iReac) - currentBC = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC - IF (BCdata_auxSCF(currentBC)%SideNumber.GT.0) THEN - - ! Loop over sides on the surface flux - DO iSide=1,BCdata_auxSCF(currentBC)%SideNumber - BCSideID=BCdata_auxSCF(currentBC)%SideList(iSide) - ElemID = SideToElem(S2E_ELEM_ID,BCSideID) - iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) - SideID=GetGlobalNonUniqueSideID(offsetElem+ElemID,iLocSide) - ! Calculate the total area of the surface flux - DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - tmp_SubSideAreas(iSample,jSample)=SurfMeshSubSideData(iSample,jSample,BCSideID)%area - END DO; END DO - ! Initialize surface flux - CALL InitSurfFlux(iReac, iSF, iSide, tmp_SubSideAreas, BCdata_auxSCFTemp) - - END DO ! iSide - ELSE IF (BCdata_auxSCF(currentBC)%SideNumber.EQ.-1) THEN - CALL abort(__STAMP__& - ,'ERROR in ParticleSurfaceflux: Someting is wrong with SideNumber of BC ',currentBC) - END IF - END DO !iSF -END DO !iSpec - -! Deallocate auxiliary variable container (no pointers used inside container) -SDEALLOCATE(BCdata_auxSCFTemp) - -END SUBROUTINE InitializeParticleSurfChemFlux - - -SUBROUTINE ReadInAndPrepareSurfChemFlux(nDataBC) -!=================================================================================================================================== -! Initialize the variables first -!=================================================================================================================================== -! MODULES -USE MOD_Globals -USE MOD_ReadInTools -USE MOD_Globals_Vars ,ONLY: BoltzmannConst, Pi -USE MOD_Particle_Boundary_Vars ,ONLY: PartBound,nPartBound -USE MOD_SurfaceModel_Tools ,ONLY: GetWallTemperature -USE MOD_SurfaceModel_Vars -USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, BezierSampleN, SurfMeshSubSideData, SurfMeshSideAreas, tBCdata_auxSFRadWeight -USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, TriaSurfaceFlux -USE MOD_Particle_Surfaces ,ONLY: GetBezierSampledAreas -USE MOD_Particle_Vars ,ONLY: Species, nSpecies, DoSurfaceFlux -USE MOD_Particle_Vars ,ONLY: UseCircularInflow, DoForceFreeSurfaceFlux -USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive -USE MOD_Restart_Vars ,ONLY: DoRestart, RestartTime -! IMPLICIT VARIABLE HANDLING - IMPLICIT NONE -!----------------------------------------------------------------------------------------------------------------------------------- -! INPUT VARIABLES -INTEGER, INTENT(INOUT) :: nDataBC -!----------------------------------------------------------------------------------------------------------------------------------- -! OUTPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! LOCAL VARIABLES -INTEGER :: iSF -INTEGER :: iReac, SurfNumReac -!=================================================================================================================================== -SurfNumReac = SurfChemReac%NumOfReact -ALLOCATE(SurfChemReac%SFMap(SurfChemReac%NumOfReact)) -DO iReac=1,SurfNumReac - IF (SurfChemReac%NumOfBounds(iReac).EQ.0) THEN - CYCLE - ELSE - ALLOCATE(SurfChemReac%SFMap(iReac)%Surfaceflux(1:SurfChemReac%NumOfBounds(iReac))) - ! Initialize Surfaceflux to BC mapping - SurfChemReac%SFMap(iReac)%Surfaceflux(:)%BC=-1 - DO iSF=1,SurfChemReac%NumOfBounds(iReac) - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC = SurfChemReac%BoundMap(iReac)%Boundaries(iSF) - END DO - END IF - - DO iSF=1,SurfChemReac%NumOfBounds(iReac) - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%InsertedParticle = 0 - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%InsertedParticleSurplus = 0 - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total = 0 - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total_allProcsTotal = 0 - - ! get surfaceflux data - IF (SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC.LT.1 .OR. SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC.GT.nPartBound) THEN - CALL abort(& -__STAMP__& -, 'SurfacefluxBCs must be between 1 and nPartBound!') - ELSE IF (BCdata_auxSF(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC)%SideNumber.EQ. -1) THEN !not set yet - BCdata_auxSF(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC)%SideNumber=0 - nDataBC=nDataBC+1 - END IF - - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%velocityDistribution = 'maxwell_lpn' - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC = 0. - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal = .FALSE. - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%MWTemperatureIC = PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC) - - END DO !iSF -END DO ! iReac - -END SUBROUTINE ReadInAndPrepareSurfChemFlux - - -SUBROUTINE BCSurfMeshSideAreasandNormals() -!=================================================================================================================================== -! Initialize the variables first -!=================================================================================================================================== -! MODULES -USE MOD_Globals -USE MOD_SurfaceModel_Vars -USE MOD_Mesh_Vars ,ONLY: nBCSides, offsetElem, SideToElem -USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID -USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle -USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, BezierSampleN, SurfMeshSubSideData, SurfMeshSideAreas, tBCdata_auxSFRadWeight -USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, TriaSurfaceFlux -USE MOD_Particle_Surfaces ,ONLY: GetBezierSampledAreas -USE MOD_Particle_Vars ,ONLY: Species, nSpecies, DoSurfaceFlux -USE MOD_Particle_Vars ,ONLY: UseCircularInflow, DoForceFreeSurfaceFlux -USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive -USE MOD_Restart_Vars ,ONLY: DoRestart, RestartTime -! IMPLICIT VARIABLE HANDLING - IMPLICIT NONE -!----------------------------------------------------------------------------------------------------------------------------------- -! INPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! OUTPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! LOCAL VARIABLES -REAL :: totalArea -INTEGER :: BCSideID, ElemID, iLocSide, SideID, jSample, iSample -REAL :: tmp_SubSideAreas(SurfFluxSideSize(1),SurfFluxSideSize(2)) -REAL :: tmp_Vec_nOut(3,SurfFluxSideSize(1),SurfFluxSideSize(2)) -REAL :: tmp_Vec_t1(3,SurfFluxSideSize(1),SurfFluxSideSize(2)) -REAL :: tmp_Vec_t2(3,SurfFluxSideSize(1),SurfFluxSideSize(2)) -!=================================================================================================================================== -totalArea=0. -DO BCSideID=1,nBCSides - ElemID = SideToElem(S2E_ELEM_ID,BCSideID) - iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) - SideID=GetGlobalNonUniqueSideID(offsetElem+ElemID,iLocSide) - IF (SurfFluxSideSize(1).NE.1 .OR. SurfFluxSideSize(2).NE.2) CALL abort(& -__STAMP__& -, 'SurfFluxSideSize must be 1,2 for TriaSurfaceFlux!') - DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - CALL CalcNormAndTangTriangle(SideID=SideID,nVec=tmp_Vec_nOut(:,iSample,jSample) & - ,tang1=tmp_Vec_t1(:,iSample,jSample) & - ,tang2=tmp_Vec_t2(:,iSample,jSample) & - ,area=tmp_SubSideAreas(iSample,jSample) & - ,TriNum=jSample) - SurfMeshSideAreas(BCSideID)=SurfMeshSideAreas(BCSideID)+tmp_SubSideAreas(iSample,jSample) - END DO; END DO - totalArea=totalArea+SurfMeshSideAreas(BCSideID) - DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn=-tmp_Vec_nOut(:,iSample,jSample) - SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1=tmp_Vec_t1(:,iSample,jSample) - SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2=tmp_Vec_t2(:,iSample,jSample) - SurfMeshSubSideData(iSample,jSample,BCSideID)%area=tmp_SubSideAreas(iSample,jSample) - END DO; END DO -END DO - -END SUBROUTINE BCSurfMeshSideAreasandNormals - -SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSCFTemp) -!=================================================================================================================================== -! SideList for SurfaceFlux in BCdata_auxSCF is created. Furthermore, the side areas are corrected for the 1D/2D case and finally -! communicated. -!=================================================================================================================================== -! MODULES -USE MOD_Globals -USE MOD_ReadInTools -USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID -USE MOD_SurfaceModel_Vars -USE MOD_Particle_Boundary_Vars ,ONLY: PartBound,nPartBound -USE MOD_Mesh_Vars ,ONLY: nBCSides, offsetElem, BC, SideToElem -USE MOD_Particle_Mesh_Vars ,ONLY: GEO, ElemMidPoint_Shared, SideInfo_Shared -USE MOD_Mesh_Tools ,ONLY: GetCNElemID -USE MOD_Particle_Vars ,ONLY: Symmetry -USE MOD_DSMC_Symmetry ,ONLY: DSMC_1D_CalcSymmetryArea, DSMC_2D_CalcSymmetryArea, DSMC_2D_CalcSymmetryAreaSubSides -USE MOD_DSMC_Vars ,ONLY: RadialWeighting -USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle -USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, BezierSampleN, SurfMeshSubSideData, SurfMeshSideAreas, tBCdata_auxSFRadWeight -USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, TriaSurfaceFlux -USE MOD_Particle_Surfaces ,ONLY: GetBezierSampledAreas -USE MOD_Particle_Vars ,ONLY: Species, nSpecies, DoSurfaceFlux -USE MOD_Particle_Vars ,ONLY: UseCircularInflow, DoForceFreeSurfaceFlux -USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive -USE MOD_Restart_Vars ,ONLY: DoRestart, RestartTime - -! IMPLICIT VARIABLE HANDLING - IMPLICIT NONE -!----------------------------------------------------------------------------------------------------------------------------------- -! INPUT VARIABLES -INTEGER, INTENT(IN) :: nDataBC -TYPE(tBCdata_auxSCFRadWeight), ALLOCATABLE, INTENT(INOUT) :: BCdata_auxSCFTemp(:) -!----------------------------------------------------------------------------------------------------------------------------------- -! OUTPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! LOCAL VARIABLES -INTEGER :: TmpMapToBC(1:nDataBC), TmpSideStart(1:nDataBC), TmpSideNumber(1:nDataBC), TmpSideEnd(1:nDataBC) -! PartBC, Start of Linked List for Sides in SurfacefluxBC, Number of Particles in Sides in SurfacefluxBC, End of Linked List for Sides in SurfacefluxBC -INTEGER :: TmpSideNext(1:nBCSides) !Next: Sides of diff. BCs ar not overlapping! -INTEGER :: countDataBC,iBC,BCSideID,currentBC,iSF,iCount,iLocSide,SideID -INTEGER :: ElemID,CNElemID,GlobalElemID -INTEGER :: iSample,jSample,iSub -INTEGER :: iReac, SurfNumReac -REAL :: ymax,ymin,yMaxTemp,yMinTemp -!=================================================================================================================================== -!create Side lists for applicable BCs -!temporary (linked) lists -TmpMapToBC = 0; TmpSideStart = 0; TmpSideNumber = 0; TmpSideEnd = 0; TmpSideNext = 0 -countDataBC=0 -DO iBC=1,nPartBound - IF (BCdata_auxSCF(iBC)%SideNumber.EQ. -1) CYCLE !not set for SFs - countDataBC=countDataBC+1 - TmpMapToBC(countDataBC)=iBC -END DO - -DO BCSideID=1,nBCSides - currentBC=0 - DO iBC=1,countDataBC - IF (PartBound%MapToPartBC(BC(BCSideID)) .EQ. TmpMapToBC(iBC)) currentBC=iBC - END DO - IF (currentBC.EQ.0) CYCLE - IF (TmpSideNumber(currentBC).EQ.0) THEN - TmpSideStart(currentBC) = BCSideID ! Start of Linked List for Sides - ELSE - TmpSideNext(TmpSideEnd(currentBC)) = BCSideID ! Next Side - END IF - !-- prepare for next entry in list - TmpSideEnd(currentBC) = BCSideID - TmpSideNumber(currentBC) = TmpSideNumber(currentBC) + 1 ! Number of Sides -END DO ! BCSideID - -!save sequential lists in BCdata_auxSCF -DO iBC=1,countDataBC - BCdata_auxSCF(TmpMapToBC(iBC))%SideNumber=TmpSideNumber(iBC) - IF (TmpSideNumber(iBC).EQ.0) CYCLE - ALLOCATE(BCdata_auxSCF(TmpMapToBC(iBC))%SideList(1:TmpSideNumber(iBC))) - ALLOCATE(BCdata_auxSCF(TmpMapToBC(iBC))%TriaSwapGeo(SurfFluxSideSize(1),SurfFluxSideSize(2),1:TmpSideNumber(iBC))) - ALLOCATE(BCdata_auxSCF(TmpMapToBC(iBC))%TriaSideGeo(1:TmpSideNumber(iBC))) - - SurfNumReac = SurfChemReac%NumOfReact - DO iReac=1,SurfNumReac - DO iSF=1,SurfChemReac%NumOfBounds(iReac) - IF (TmpMapToBC(iBC).EQ.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC) THEN !only surfacefluxes with iBC - ALLOCATE(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(SurfFluxSideSize(1),SurfFluxSideSize(2),1:TmpSideNumber(iBC))) - END IF - END DO - END DO - BCSideID=TmpSideStart(iBC) - iCount=0 - - DO !follow BCSideID list seq. with iCount - iCount=iCount+1 - BCdata_auxSCF(TmpMapToBC(iBC))%SideList(iCount)=BCSideID - ElemID = SideToElem(S2E_ELEM_ID,BCSideID) - iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) - SideID=GetGlobalNonUniqueSideID(offsetElem+ElemID,iLocSide) - !----- symmetry specific area calculation start - IF(Symmetry%Order.EQ.2) THEN - GlobalElemID = SideInfo_Shared(SIDE_ELEMID,SideID) - CNElemID = GetCNElemID(GlobalElemID) - iLocSide = SideInfo_Shared(SIDE_LOCALID,SideID) - IF(Symmetry%Axisymmetric) THEN - ! Calculate the correct area for the axisymmetric (ring area) and 2D (length) and get ymin and ymax for element - SurfMeshSubSideData(1,1,BCSideID)%area = DSMC_2D_CalcSymmetryArea(iLocSide,CNElemID, ymin, ymax) - SurfMeshSubSideData(1,2,BCSideID)%area = 0.0 - ! Determination of the mean radial weighting factor for calculation of the number of particles to be inserted !!! necessary? - IF (RadialWeighting%DoRadialWeighting) THEN - IF((ymax - ymin).GT.0.0) THEN - ! Surfaces that are NOT parallel to the YZ-plane - IF(RadialWeighting%CellLocalWeighting) THEN - ! Cell local weighting - BCdata_auxSCFTemp(TmpMapToBC(iBC))%WeightingFactor(iCount) = (1. + ElemMidPoint_Shared(2,CNElemID) & - / GEO%ymaxglob*(RadialWeighting%PartScaleFactor-1.)) - ELSE - BCdata_auxSCFTemp(TmpMapToBC(iBC))%WeightingFactor(iCount) = 1. - DO iSub = 1, RadialWeighting%nSubSides - yMinTemp = ymin + (iSub-1) * (ymax - ymin) / RadialWeighting%nSubSides - yMaxTemp = ymin + iSub * (ymax - ymin) / RadialWeighting%nSubSides - BCdata_auxSCFTemp(TmpMapToBC(iBC))%SubSideWeight(iCount,iSub) = 1. & - + (yMaxTemp**2/(GEO%ymaxglob*2.)*(RadialWeighting%PartScaleFactor-1.) & - - yMinTemp**2/(GEO%ymaxglob*2.)*(RadialWeighting%PartScaleFactor-1.))/(yMaxTemp - yMinTemp) - END DO - BCdata_auxSCFTemp(TmpMapToBC(iBC))%SubSideArea(iCount,:) = DSMC_2D_CalcSymmetryAreaSubSides(iLocSide,CNElemID) - END IF - ELSE ! surfaces parallel to the x-axis (ymax = ymin) - BCdata_auxSCFTemp(TmpMapToBC(iBC))%WeightingFactor(iCount) = 1. & - + ymax/(GEO%ymaxglob)*(RadialWeighting%PartScaleFactor-1.) - END IF - END IF - ELSE - SurfMeshSubSideData(1,1:2,BCSideID)%area = DSMC_2D_CalcSymmetryArea(iLocSide,CNElemID) / 2. - END IF - ELSE IF(Symmetry%Order.EQ.1) THEN - SurfMeshSubSideData(1,1:2,BCSideID)%area = DSMC_1D_CalcSymmetryArea(iLocSide,ElemID) / 2. - END IF - - DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - CALL CalcNormAndTangTriangle(SideID=SideID & - ,midpoint=BCdata_auxSCF(TmpMapToBC(iBC))%TriaSwapGeo(iSample,jSample,iCount)%midpoint & - ,ndist=BCdata_auxSCF(TmpMapToBC(iBC))%TriaSwapGeo(iSample,jSample,iCount)%ndist & - ,xyzNod=BCdata_auxSCF(TmpMapToBC(iBC))%TriaSideGeo(iCount)%xyzNod & - ,Vectors=BCdata_auxSCF(TmpMapToBC(iBC))%TriaSideGeo(iCount)%Vectors & - ,TriNum=jSample) - END DO; END DO - - !-- BC-list specific data - DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - BCdata_auxSCF(TmpMapToBC(iBC))%LocalArea = BCdata_auxSCF(TmpMapToBC(iBC))%LocalArea & - + SurfMeshSubSideData(iSample,jSample,BCSideID)%area - END DO; END DO - - !-- next Side - IF (BCSideID .EQ. TmpSideEnd(iBC)) THEN - IF (TmpSideNumber(iBC).NE.iCount) THEN - CALL abort(& -__STAMP__& -,'Someting is wrong with TmpSideNumber of iBC',iBC,999.) - ELSE - EXIT - END IF - END IF - BCSideID=TmpSideNext(BCSideID) - END DO ! BCSideID (iCount) -END DO !iBC - -END SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux - -SUBROUTINE InitSurfFlux(iReac, iSF, iSide, tmp_SubSideAreas, BCdata_auxSCFTemp) -!=================================================================================================================================== -!> Initialize surface flux variables in SurfFluxSubSideData type -!=================================================================================================================================== -! MODULES -USE MOD_Globals -USE MOD_Globals_Vars ,ONLY: BoltzmannConst, PI -USE MOD_SurfaceModel_Vars -USE MOD_Particle_Vars ,ONLY: Species,nSpecies -USE MOD_DSMC_Vars ,ONLY: RadialWeighting -USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, BezierSampleN, SurfMeshSubSideData, SurfMeshSideAreas, tBCdata_auxSFRadWeight -USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, TriaSurfaceFlux -USE MOD_Particle_Surfaces ,ONLY: GetBezierSampledAreas -USE MOD_Particle_Vars ,ONLY: Species, nSpecies, DoSurfaceFlux -USE MOD_Particle_Vars ,ONLY: UseCircularInflow, DoForceFreeSurfaceFlux -USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive -USE MOD_Restart_Vars ,ONLY: DoRestart, RestartTime -! IMPLICIT VARIABLE HANDLING - IMPLICIT NONE -!----------------------------------------------------------------------------------------------------------------------------------- -! INPUT VARIABLES -INTEGER, INTENT(IN) :: iReac, iSF, iSide -REAL, INTENT(IN) :: tmp_SubSideAreas(SurfFluxSideSize(1),SurfFluxSideSize(2)) -TYPE(tBCdata_auxSCFRadWeight), ALLOCATABLE, INTENT(IN) :: BCdata_auxSCFTemp(:) -!----------------------------------------------------------------------------------------------------------------------------------- -! OUTPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! LOCAL VARIABLES -INTEGER :: jSample, iSample, iSub, currentBC, BCSideID -INTEGER :: iSpec -REAL :: vec_nIn(3), nVFR, vec_t1(3), vec_t2(3), projFak, v_thermal, a, vSF -!=================================================================================================================================== -currentBC = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC -BCSideID=BCdata_auxSCF(currentBC)%SideList(iSide) -DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - vec_nIn = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn - vec_t1 = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1 - vec_t2 = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2 - IF (.NOT.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal) THEN - projFak = DOT_PRODUCT(vec_nIn,SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloVecIC) !VeloVecIC projected to inwards normal - ELSE - projFak = 1. - END IF - - DO iSpec=1,nSpecies - IF(ANY(SurfChemReac%Products(iReac,:).EQ.iSpec)) THEN - v_thermal = SQRT(2.*BoltzmannConst*SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%MWTemperatureIC/Species(iSpec)%MassIC) !thermal speed - ELSE - v_thermal = 0. - END IF - END DO - - a = 0 !dummy for projected speed ratio in constant v-distri - !-- compute total volume flow rate through surface - SELECT CASE(TRIM(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%velocityDistribution)) - !CASE('constant') - ! vSF = Species(iSpec)%Surfaceflux(iSF)%VeloIC * projFak !Velo proj. to inwards normal - ! nVFR = MAX(tmp_SubSideAreas(iSample,jSample) * vSF,0.) !VFR proj. to inwards normal (only positive parts!) - CASE('maxwell','maxwell_lpn') - IF(v_thermal.NE.0.) THEN - a = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC * projFak / v_thermal !speed ratio proj. to inwards n (can be negative!) - ELSE - a = 0. - END IF - vSF = v_thermal / (2.0*SQRT(PI)) * ( EXP(-(a*a)) + a*SQRT(PI)*(1+ERF(a)) ) !mean flux velocity through normal sub-face - nVFR = tmp_SubSideAreas(iSample,jSample) * vSF !VFR projected to inwards normal of sub-side - IF(RadialWeighting%DoRadialWeighting) THEN - nVFR = nVFR / BCdata_auxSCFTemp(currentBC)%WeightingFactor(iSide) - DO iSub = 1, RadialWeighting%nSubSides - IF(ABS(BCdata_auxSCFTemp(currentBC)%SubSideWeight(iSide,iSub)).GT.0.)THEN - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%nVFRSub(iSide,iSub) = BCdata_auxSCFTemp(currentBC)%SubSideArea(iSide,iSub) & - * vSF / BCdata_auxSCFTemp(currentBC)%SubSideWeight(iSide,iSub) - END IF - END DO - END IF - CASE DEFAULT - CALL abort(__STAMP__,& - 'ERROR in SurfaceFlux: Wrong velocity distribution!') - END SELECT - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total + nVFR - !-- store SF-specific SubSide data in SurfFluxSubSideData (incl. projected velos) - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%nVFR = nVFR - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%projFak = projFak - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%a_nIn = a - IF (.NOT.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal) THEN - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 & - = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC & - * DOT_PRODUCT(vec_t1,SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloVecIC) !v in t1-dir - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 & - = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC & - * DOT_PRODUCT(vec_t2,SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloVecIC) !v in t2-dir - ELSE - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 = 0. !v in t1-dir - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 = 0. !v in t2-dir - END IF! .NOT.VeloIsNormal -END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) - -END SUBROUTINE InitSurfFlux - -END MODULE MOD_Particle_SurfChemFlux_Init diff --git a/src/particles/emission/particle_surface_flux_init.f90 b/src/particles/emission/particle_surface_flux_init.f90 index 90b726071..942ac042d 100644 --- a/src/particles/emission/particle_surface_flux_init.f90 +++ b/src/particles/emission/particle_surface_flux_init.f90 @@ -121,7 +121,9 @@ SUBROUTINE InitializeParticleSurfaceflux() USE MOD_Particle_Vars ,ONLY: Species, nSpecies, DoSurfaceFlux USE MOD_Particle_Vars ,ONLY: UseCircularInflow, DoForceFreeSurfaceFlux USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive -USE MOD_Particle_SurfChemFlux_Init +USE MOD_SurfaceModel_Chemistry +USE MOD_SurfaceModel_Vars +!USE MOD_Particle_SurfChemFlux_Init USE MOD_Restart_Vars ,ONLY: DoRestart, RestartTime #if USE_MPI USE MOD_Particle_Vars ,ONLY: DoPoissonRounding, DoTimeDepInflow @@ -139,6 +141,7 @@ SUBROUTINE InitializeParticleSurfaceflux() !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES ! Local variable declaration +INTEGER :: iReac, SurfNumReac INTEGER :: iSpec,iSF,SideID,BCSideID,iSide,ElemID,iLocSide,iSample,jSample,currentBC INTEGER :: iCopy1, iCopy2, iCopy3, MaxSurfacefluxBCs,nDataBC REAL :: tmp_SubSideDmax(SurfFluxSideSize(1),SurfFluxSideSize(2)) @@ -164,14 +167,14 @@ SUBROUTINE InitializeParticleSurfaceflux() !-- 1.: read/prepare parameters and determine nec. BCs CALL ReadInAndPrepareSurfaceFlux(MaxSurfacefluxBCs, nDataBC) +! Call to the reactive surfaces +CALL ReadInAndPrepareSurfChemFlux(nDataBC) + #if USE_MPI CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoPoissonRounding,1,MPI_LOGICAL,MPI_LAND,PartMPI%COMM,iError) !set T if this is for all procs CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoTimeDepInflow,1,MPI_LOGICAL,MPI_LAND,PartMPI%COMM,iError) !set T if this is for all procs #endif /*USE_MPI*/ -! -CALL ReadInAndPrepareSurfChemFlux(nDataBC) - CALL CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp) #ifdef CODE_ANALYZE @@ -261,6 +264,76 @@ SUBROUTINE InitializeParticleSurfaceflux() END DO !iSF END DO !iSpec +SurfNumReac = SurfChemReac%NumOfReact +!initialize Surfaceflux-specific data +DO iReac=1,SurfNumReac + DO iSF=1,SurfChemReac%NumOfBounds(iReac) + currentBC = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC + IF (BCdata_auxSF(currentBC)%SideNumber.GT.0) THEN + + ! Loop over sides on the surface flux + DO iSide=1,BCdata_auxSF(currentBC)%SideNumber + BCSideID=BCdata_auxSF(currentBC)%SideList(iSide) + ElemID = SideToElem(S2E_ELEM_ID,BCSideID) + iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) + SideID=GetGlobalNonUniqueSideID(offsetElem+ElemID,iLocSide) + IF (SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%AcceptReject) THEN + CALL GetBezierSampledAreas(SideID=SideID,BezierSampleN=BezierSampleN & + ,BezierSurfFluxProjection_opt=.NOT.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal & + ,SurfMeshSubSideAreas=tmp_SubSideAreas,DmaxSampleN_opt=SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%ARM_DmaxSampleN & + ,Dmax_opt=tmp_SubSideDmax,BezierControlPoints2D_opt=tmp_BezierControlPoints2D) + ELSE IF (.NOT.TriaSurfaceFlux) THEN + CALL GetBezierSampledAreas(SideID=SideID,BezierSampleN=BezierSampleN & + ,BezierSurfFluxProjection_opt=.NOT.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal,SurfMeshSubSideAreas=tmp_SubSideAreas) + ELSE ! TriaSurfaceFlux + DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) + tmp_SubSideAreas(iSample,jSample)=SurfMeshSubSideData(iSample,jSample,BCSideID)%area + END DO; END DO + END IF + ! Initialize surface flux + CALL InitSurfChemFlux(iReac, iSF, iSide, tmp_SubSideAreas, BCdata_auxSFTemp) + ! Initialize acceptance-rejection on SF + IF (SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%AcceptReject) THEN + DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Dmax = tmp_SubSideDmax(iSample,jSample) + ! IF (.NOT.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal) THEN + ! ALLOCATE(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample & + ! ,iSide)%BezierControlPoints2D(1:2,0:NGeo,0:NGeo)) + ! DO iCopy1=0,NGeo; DO iCopy2=0,NGeo; DO iCopy3=1,2 + ! SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample & + ! ,iSide)%BezierControlPoints2D(iCopy3,iCopy2,iCopy1) & + ! = tmp_BezierControlPoints2D(iCopy3,iCopy2,iCopy1,iSample,jSample) + ! END DO; END DO; END DO + !END IF !.NOT.VeloIsNormal + END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) + END IF + !Init adaptive SF + END DO ! iSide + ELSE IF (BCdata_auxSF(currentBC)%SideNumber.EQ.-1) THEN + CALL abort(__STAMP__& + ,'ERROR in ParticleSurfaceflux: Someting is wrong with SideNumber of BC ',currentBC) + END IF + !--- Finalize adaptive SF +#if USE_MPI + IF(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%Adaptive) THEN + totalAreaSF_global = 0.0 + CALL MPI_ALLREDUCE(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%totalAreaSF,totalAreaSF_global,1, & + MPI_DOUBLE_PRECISION,MPI_SUM,PartMPI%COMM,IERROR) + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%totalAreaSF = totalAreaSF_global + END IF +#endif + +#ifdef CODE_ANALYZE + IF (BCdata_auxSF(currentBC)%SideNumber.GT.0 .AND. SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%CircularInflow) THEN + IPWRITE(*,'(I4,A,2(1X,I0),A,3(1X,I0))') ' For Surfaceflux/Spec',iSF,iSpec,' are nType0,1,2: ' & + , CountCircInflowType(1,iSF,iSpec),CountCircInflowType(2, iSF,iSpec) & + , CountCircInflowType(3, iSF,iSpec) + END IF +#endif /*CODE_ANALYZE*/ + END DO !iSF +END DO !iSpec + + #ifdef CODE_ANALYZE SDEALLOCATE(CountCircInflowType) #endif @@ -268,6 +341,16 @@ SUBROUTINE InitializeParticleSurfaceflux() SDEALLOCATE(BCdata_auxSFTemp) ! Setting variables required after a restart +IF(DoRestart) THEN + DO iReac=1,SurfNumReac + DO iSF=1,SurfChemReac%NumOfBounds(iReac) + VFR_total = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total !proc local total + !Species(iSpec)%Surfaceflux(iSF)%InsertedParticle = INT(Species(iSpec)%Surfaceflux(iSF)%PartDensity * RestartTime & + ! / Species(iSpec)%MacroParticleFactor * VFR_total,8) + END DO + END DO +END IF + IF(DoRestart) THEN DO iSpec=1,nSpecies DO iSF = 1, Species(iSpec)%NumberOfInits @@ -312,7 +395,7 @@ SUBROUTINE InitializeParticleSurfaceflux() #if USE_MPI CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoSurfaceFlux,1,MPI_LOGICAL,MPI_LOR,PartMPI%COMM,iError) !set T if at least 1 proc have SFs #endif /*USE_MPI*/ -IF (.NOT.DoSurfaceFlux) THEN !-- no SFs defined +IF ((.NOT.DoSurfaceFlux).AND. (.NOT.DoChemSurface)) THEN !-- no SFs defined SWRITE(*,*) 'WARNING: No Sides for SurfacefluxBCs found! DoSurfaceFlux is now disabled!' END IF DoForceFreeSurfaceFlux = GETLOGICAL('DoForceFreeSurfaceFlux','.FALSE.') @@ -336,6 +419,8 @@ SUBROUTINE ReadInAndPrepareSurfaceFlux(MaxSurfacefluxBCs, nDataBC) USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, BezierSampleN, TriaSurfaceFlux USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod USE MOD_Mesh_Vars ,ONLY: NGeo +USE MOD_SurfaceModel_Chemistry +USE MOD_SurfaceModel_Vars ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -530,6 +615,8 @@ SUBROUTINE BCSurfMeshSideAreasandNormals() USE MOD_Mesh_Vars ,ONLY: nBCSides, offsetElem, SideToElem USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID USE MOD_Particle_Surfaces ,ONLY: GetBezierSampledAreas, CalcNormAndTangTriangle +USE MOD_SurfaceModel_Chemistry +USE MOD_SurfaceModel_Vars ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -611,6 +698,8 @@ SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp) USE MOD_DSMC_Symmetry ,ONLY: DSMC_1D_CalcSymmetryArea, DSMC_2D_CalcSymmetryArea, DSMC_2D_CalcSymmetryAreaSubSides USE MOD_DSMC_Vars ,ONLY: RadialWeighting USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle +USE MOD_SurfaceModel_Chemistry +USE MOD_SurfaceModel_Vars #if USE_MPI USE MOD_Particle_MPI_Vars ,ONLY: PartMPI #endif /*USE_MPI*/ @@ -624,6 +713,7 @@ SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp) ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES +INTEGER :: iReac, SurfNumReac INTEGER :: TmpMapToBC(1:nDataBC), TmpSideStart(1:nDataBC), TmpSideNumber(1:nDataBC), TmpSideEnd(1:nDataBC) ! PartBC, Start of Linked List for Sides in SurfacefluxBC, Number of Particles in Sides in SurfacefluxBC, End of Linked List for Sides in SurfacefluxBC INTEGER :: TmpSideNext(1:nBCSides) !Next: Sides of diff. BCs ar not overlapping! @@ -694,6 +784,16 @@ SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp) END IF END DO END DO + + SurfNumReac = SurfChemReac%NumOfReact + DO iReac=1,SurfNumReac + DO iSF=1,SurfChemReac%NumOfBounds(iReac) + IF (TmpMapToBC(iBC).EQ.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC) THEN !only surfacefluxes with iBC + ALLOCATE(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(SurfFluxSideSize(1),SurfFluxSideSize(2),1:TmpSideNumber(iBC))) + END IF + END DO + END DO + BCSideID=TmpSideStart(iBC) iCount=0 DO !follow BCSideID list seq. with iCount @@ -1110,4 +1210,171 @@ SUBROUTINE CalcConstMassflowWeightForZeroMassFlow(iSpec,iSF) END SUBROUTINE CalcConstMassflowWeightForZeroMassFlow +SUBROUTINE InitSurfChemFlux(iReac, iSF, iSide, tmp_SubSideAreas, BCdata_auxSFTemp) + !=================================================================================================================================== + !> Initialize surface flux variables in SurfFluxSubSideData type + !=================================================================================================================================== + ! MODULES + USE MOD_Globals + USE MOD_Globals_Vars ,ONLY: BoltzmannConst, PI + USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, SurfMeshSubSideData, tBCdata_auxSFRadWeight, BCdata_auxSF + USE MOD_Particle_Vars ,ONLY: Species, nSpecies + USE MOD_SurfaceModel_Vars + USE MOD_DSMC_Vars ,ONLY: RadialWeighting + ! IMPLICIT VARIABLE HANDLING + IMPLICIT NONE + !----------------------------------------------------------------------------------------------------------------------------------- + ! INPUT VARIABLES + INTEGER, INTENT(IN) :: iReac, iSF, iSide + REAL, INTENT(IN) :: tmp_SubSideAreas(SurfFluxSideSize(1),SurfFluxSideSize(2)) + TYPE(tBCdata_auxSFRadWeight), ALLOCATABLE, INTENT(IN) :: BCdata_auxSFTemp(:) + !----------------------------------------------------------------------------------------------------------------------------------- + ! OUTPUT VARIABLES + !----------------------------------------------------------------------------------------------------------------------------------- + ! LOCAL VARIABLES + INTEGER ::iSpec + INTEGER :: jSample, iSample, iSub, currentBC, BCSideID + REAL :: vec_nIn(3), nVFR, vec_t1(3), vec_t2(3), projFak, v_thermal, a, vSF + !=================================================================================================================================== + currentBC = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC + BCSideID=BCdata_auxSF(currentBC)%SideList(iSide) + DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) + vec_nIn = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn + vec_t1 = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1 + vec_t2 = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2 + IF (.NOT.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal) THEN + projFak = DOT_PRODUCT(vec_nIn,SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloVecIC) !VeloVecIC projected to inwards normal + ELSE + projFak = 1. + END IF + + DO iSpec=1,nSpecies + IF(ANY(SurfChemReac%Products(iReac,:).EQ.iSpec)) THEN + v_thermal = SQRT(2.*BoltzmannConst*SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%MWTemperatureIC/Species(iSpec)%MassIC) !thermal speed + ELSE + v_thermal = 0. + END IF + END DO + + a = 0 !dummy for projected speed ratio in constant v-distri + !-- compute total volume flow rate through surface + SELECT CASE(TRIM(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%velocityDistribution)) + CASE('constant') + vSF = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC * projFak !Velo proj. to inwards normal + nVFR = MAX(tmp_SubSideAreas(iSample,jSample) * vSF,0.) !VFR proj. to inwards normal (only positive parts!) + CASE('maxwell','maxwell_lpn') + IF(v_thermal.NE.0.) THEN + a = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC * projFak / v_thermal !speed ratio proj. to inwards n (can be negative!) + ELSE + a = 0. + END IF + vSF = v_thermal / (2.0*SQRT(PI)) * ( EXP(-(a*a)) + a*SQRT(PI)*(1+ERF(a)) ) !mean flux velocity through normal sub-face + nVFR = tmp_SubSideAreas(iSample,jSample) * vSF !VFR projected to inwards normal of sub-side + IF(RadialWeighting%DoRadialWeighting) THEN + nVFR = nVFR / BCdata_auxSFTemp(currentBC)%WeightingFactor(iSide) + DO iSub = 1, RadialWeighting%nSubSides + IF(ABS(BCdata_auxSFTemp(currentBC)%SubSideWeight(iSide,iSub)).GT.0.)THEN + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%nVFRSub(iSide,iSub) = BCdata_auxSFTemp(currentBC)%SubSideArea(iSide,iSub) & + * vSF / BCdata_auxSFTemp(currentBC)%SubSideWeight(iSide,iSub) + END IF + END DO + END IF + CASE DEFAULT + CALL abort(__STAMP__,& + 'ERROR in SurfaceFlux: Wrong velocity distribution!') + END SELECT + + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total + nVFR + !-- store SF-specific SubSide data in SurfFluxSubSideData (incl. projected velos) + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%nVFR = nVFR + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%projFak = projFak + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%a_nIn = a + IF (.NOT.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal) THEN + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 & + = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC & + * DOT_PRODUCT(vec_t1,SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloVecIC) !v in t1-dir + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 & + = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC & + * DOT_PRODUCT(vec_t2,SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloVecIC) !v in t2-dir + ELSE + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 = 0. !v in t1-dir + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 = 0. !v in t2-dir + END IF! .NOT.VeloIsNormal + END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) + + END SUBROUTINE InitSurfChemFlux + + SUBROUTINE ReadInAndPrepareSurfChemFlux(nDataBC) + !=================================================================================================================================== + ! Initialize the variables first + !=================================================================================================================================== + ! MODULES + USE MOD_Globals + USE MOD_ReadInTools + USE MOD_Globals_Vars ,ONLY: BoltzmannConst, Pi + USE MOD_Particle_Boundary_Vars ,ONLY: PartBound,nPartBound + USE MOD_SurfaceModel_Tools ,ONLY: GetWallTemperature + USE MOD_SurfaceModel_Vars + USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, BezierSampleN, SurfMeshSubSideData, SurfMeshSideAreas, tBCdata_auxSFRadWeight + USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, TriaSurfaceFlux + USE MOD_Particle_Surfaces ,ONLY: GetBezierSampledAreas + USE MOD_Particle_Vars ,ONLY: Species, nSpecies, DoSurfaceFlux + USE MOD_Particle_Vars ,ONLY: UseCircularInflow, DoForceFreeSurfaceFlux + USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive + USE MOD_Restart_Vars ,ONLY: DoRestart, RestartTime + ! IMPLICIT VARIABLE HANDLING + IMPLICIT NONE + !----------------------------------------------------------------------------------------------------------------------------------- + ! INPUT VARIABLES + INTEGER, INTENT(INOUT) :: nDataBC + !----------------------------------------------------------------------------------------------------------------------------------- + ! OUTPUT VARIABLES + !----------------------------------------------------------------------------------------------------------------------------------- + ! LOCAL VARIABLES + INTEGER :: iSF + INTEGER :: iReac, SurfNumReac + !=================================================================================================================================== + SurfNumReac = SurfChemReac%NumOfReact + ALLOCATE(SurfChemReac%SFMap(SurfChemReac%NumOfReact)) + DO iReac=1,SurfNumReac + IF (SurfChemReac%NumOfBounds(iReac).EQ.0) THEN + CYCLE + ELSE + ALLOCATE(SurfChemReac%SFMap(iReac)%Surfaceflux(1:SurfChemReac%NumOfBounds(iReac))) + ! Initialize Surfaceflux to BC mapping + SurfChemReac%SFMap(iReac)%Surfaceflux(:)%BC=-1 + DO iSF=1,SurfChemReac%NumOfBounds(iReac) + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC = SurfChemReac%BoundMap(iReac)%Boundaries(iSF) + END DO + END IF + + DO iSF=1,SurfChemReac%NumOfBounds(iReac) + IF (TriaSurfaceFlux) THEN + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%AcceptReject=.FALSE. + END IF + + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%InsertedParticle = 0 + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total = 0 + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total_allProcsTotal = 0 + + ! get surfaceflux data + IF (SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC.LT.1 .OR. SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC.GT.nPartBound) THEN + CALL abort(& + __STAMP__& + , 'SurfacefluxBCs must be between 1 and nPartBound!') + ELSE IF (BCdata_auxSF(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC)%SideNumber.EQ. -1) THEN !not set yet + BCdata_auxSF(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC)%SideNumber=0 + nDataBC=nDataBC+1 + END IF + + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%velocityDistribution = 'maxwell_lpn' + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC = 0. + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal = .FALSE. + SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%MWTemperatureIC = PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC) + + END DO !iSF + END DO ! iReac + + END SUBROUTINE ReadInAndPrepareSurfChemFlux + END MODULE MOD_Particle_SurfFlux_Init diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 919610671..b8f88787c 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -273,7 +273,6 @@ SUBROUTINE InitParticles() USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive USE MOD_Particle_Emission_Init ,ONLY: InitialParticleInserting USE MOD_Particle_SurfFlux_Init ,ONLY: InitializeParticleSurfaceflux -USE MOD_Particle_SurfChemFlux_Init ,ONLY: InitializeParticleSurfChemFlux USE MOD_SurfaceModel_Init ,ONLY: InitSurfaceModel USE MOD_SurfaceModel_Chemistry ,ONLY: SurfaceModel_Chemistry_Init USE MOD_Particle_Surfaces ,ONLY: InitParticleSurfaces @@ -329,7 +328,6 @@ SUBROUTINE InitParticles() ! Initialize particle surface flux to be performed per iteration CALL SurfaceModel_Chemistry_Init() CALL InitializeParticleSurfaceflux() -CALL InitializeParticleSurfChemFlux() ! Initialize volume sampling IF(useDSMC .OR. WriteMacroVolumeValues) THEN diff --git a/src/particles/particle_mesh/particle_mesh.f90 b/src/particles/particle_mesh/particle_mesh.f90 index 6787c3806..7d6e32df5 100644 --- a/src/particles/particle_mesh/particle_mesh.f90 +++ b/src/particles/particle_mesh/particle_mesh.f90 @@ -477,7 +477,6 @@ SUBROUTINE InitParticleMesh() IF (TriaSurfaceFlux) THEN BezierSampleN = 1 SurfFluxSideSize=(/1,2/) - SurfChemSideSize=(/1,2/) ELSE WRITE(tmpStr,'(I2.2)') NGeo BezierSampleN = GETINT('BezierSampleN',tmpStr) diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index f7e390665..c048b51c4 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -203,7 +203,7 @@ SUBROUTINE SurfaceModel_Chemistry_Init() __STAMP__& ,'ERROR: At least one boundary must be defined for each surface reaction!',iReac) END IF - ALLOCATE(SurfChemReac%BoundMap(iReac)%nSurfacefluxBCs(SurfChemReac%NumOfBounds(iReac))) + SurfChemReac%BoundMap(iReac)%Boundaries = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Boundaries', & SurfChemReac%NumOfBounds(iReac)) ! Define the surface model @@ -243,31 +243,6 @@ SUBROUTINE SurfaceModel_Chemistry_Init() ! Total Collision Energy: Arrhenius-based chemistry model ! SurfChemReac%ReactProb(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-ReactProbability','0') SurfChemReac%EForm(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-FormationEnergy','0') - ! Filling up ChemReac-Array for the given non-reactive dissociation/electron-impact ionization partners - - ! Calculation of stoichiometric coefficients and calculation of the heat of formation - StoichCoeff = 0 - !SurfChemReac%EForm(iReac) = 0.0 - DO iSpec=1, nSpecies - ! Reactants - DO iPart = 1,2 - IF(SurfChemReac%Reactants(iReac,iPart).EQ.iSpec) THEN - StoichCoeff(iSpec,1) = StoichCoeff(iSpec,1) + 1 - END IF - END DO - ! Products - DO iPart = 1,2 - IF(SurfChemReac%Products(iReac,iPart).EQ.iSpec) THEN - StoichCoeff(iSpec,2) = StoichCoeff(iSpec,2) + 1 - END IF - END DO - ! Calculation of the enthalpy of reaction by the summation of the enthalpies of formation of the respective species - ! (ionization energy of ionized species was already added in dsmc_init.f90) - SurfChemReac%EForm(iReac) = SurfChemReac%EForm(iReac) & - - StoichCoeff(iSpec,2)*SpecDSMC(iSpec)%HeatOfFormation & - + StoichCoeff(iSpec,1)*SpecDSMC(iSpec)%HeatOfFormation - END DO - END DO ! ! Simple recombination model diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90 index c5258f337..8742f7291 100644 --- a/src/particles/surfacemodel/surfacemodel_vars.f90 +++ b/src/particles/surfacemodel/surfacemodel_vars.f90 @@ -54,7 +54,6 @@ MODULE MOD_SurfaceModel_Vars TYPE tSurfFluxMap TYPE(typeSurfaceflux),ALLOCATABLE :: Surfaceflux(:) - !INTEGER :: nSurfacefluxBCs END TYPE LOGICAL :: DoChemSurface @@ -95,66 +94,30 @@ MODULE MOD_SurfaceModel_Vars END TYPE TYPE(tSurfReactions) :: SurfChemReac -! Surface flux for the creation of the particles - INTEGER :: SurfChemSideSize(2) - REAL,ALLOCATABLE,DIMENSION(:) :: SurfChemSideAreas - - TYPE tSurfChemSubSideData - REAL :: vec_nIn(3) - REAL :: vec_t1(3) - REAL :: vec_t2(3) - REAL :: area -END TYPE tSurfChemSubSideData -TYPE(tSurfChemSubSideData),ALLOCATABLE :: SurfChemSubSideData(:,:,:) - -TYPE tTriaSwapGeo - REAL :: midpoint(3) - REAL :: ndist(3) -END TYPE tTriaSwapGeo -TYPE tTriaSideGeo - REAL :: xyzNod(3) - REAL :: Vectors(3,3) -END TYPE tTriaSideGeo - -TYPE tBCdata_auxSCF - INTEGER :: SideNumber - REAL :: GlobalArea, LocalArea - INTEGER , ALLOCATABLE :: SideList(:) - TYPE(tTriaSwapGeo) , ALLOCATABLE :: TriaSwapGeo(:,:,:) - TYPE(tTriaSideGeo) , ALLOCATABLE :: TriaSideGeo(:) -END TYPE tBCdata_auxSCF -TYPE(tBCdata_auxSCF),ALLOCATABLE :: BCdata_auxSCF(:) - -TYPE tBCdata_auxSCFRadWeight - REAL, ALLOCATABLE :: SubSideWeight(:,:) - REAL, ALLOCATABLE :: WeightingFactor(:) - REAL, ALLOCATABLE :: SubSideArea(:,:) -END TYPE - TYPE typeSurfaceflux - INTEGER :: BC + INTEGER :: BC CHARACTER(30) :: velocityDistribution - REAL :: VeloIC - REAL :: VeloVecIC(3) - REAL :: MWTemperatureIC - LOGICAL :: VeloIsNormal - REAL :: VFR_total - REAL , ALLOCATABLE :: VFR_total_allProcs(:) - REAL :: VFR_total_allProcsTotal - REAL :: totalAreaSF - INTEGER(KIND=8) :: InsertedParticle - INTEGER(KIND=8) :: InsertedParticleSurplus - INTEGER(KIND=8) :: tmpInsertedParticle - INTEGER(KIND=8) :: tmpInsertedParticleSurplus - TYPE(tSurfFluxSubSideData), ALLOCATABLE :: SurfFluxSubSideData(:,:,:) - INTEGER :: dir(3) + REAL :: VeloIC + REAL :: VeloVecIC(3) + REAL :: MWTemperatureIC + LOGICAL :: VeloIsNormal + LOGICAL :: AcceptReject + INTEGER :: ARM_DmaxSampleN + REAL :: VFR_total + REAL , ALLOCATABLE :: VFR_total_allProcs(:) + REAL :: VFR_total_allProcsTotal + REAL :: totalAreaSF + INTEGER(KIND=8) :: InsertedParticle + INTEGER(KIND=8) :: tmpInsertedParticle + INTEGER(KIND=8) :: tmpInsertedParticleSurplus + TYPE(tSurfFluxSubSideData), ALLOCATABLE :: SurfFluxSubSideData(:,:,:) + INTEGER :: dir(3) REAL :: origin(2) - REAL :: rmax + REAL :: rmax REAL :: rmin - INTEGER, ALLOCATABLE :: SurfFluxSideRejectType(:) - REAL, ALLOCATABLE :: CircleAreaPerTriaSide(:,:,:) - REAL :: SampledMassflow - REAL, ALLOCATABLE :: nVFRSub(:,:) + LOGICAL :: Adaptive + INTEGER :: AdaptiveType + REAL, ALLOCATABLE :: nVFRSub(:,:) END TYPE TYPE tSurfFluxSubSideData From b700030684178597b765d91fbfe704799acc64b8 Mon Sep 17 00:00:00 2001 From: Marcel Pfeiffer Date: Tue, 31 May 2022 12:17:36 +0200 Subject: [PATCH 003/222] side based surf chemc --- .../boundary/particle_boundary_sampling.f90 | 145 ++++++++ .../emission/particle_surface_chemflux.f90 | 320 +++++++++--------- .../emission/particle_surface_flux_init.f90 | 2 +- src/particles/particle_init.f90 | 15 +- .../particle_mesh/particle_surfaces_vars.f90 | 2 +- .../particle_mpi_boundary_sampling.f90 | 286 +++++++++++++++- .../surfacemodel/surfacemodel_chemistry.f90 | 32 +- .../surfacemodel/surfacemodel_main.f90 | 38 ++- .../surfacemodel/surfacemodel_vars.f90 | 12 + src/timedisc/timedisc_TimeStep_DSMC.f90 | 2 + 10 files changed, 667 insertions(+), 187 deletions(-) diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index 51a55152e..ad8a4b6e0 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -856,6 +856,151 @@ SUBROUTINE WriteSurfSampleToHDF5(MeshFileName,OutputTime) END SUBROUTINE WriteSurfSampleToHDF5 +SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) +!=================================================================================================================================== +!> write the final values of the surface sampling to a HDF5 state file +!> additional performs all the final required computations +!=================================================================================================================================== +! MODULES ! +!----------------------------------------------------------------------------------------------------------------------------------! +USE MOD_Globals +USE MOD_Globals_Vars ,ONLY: ProjectName +USE MOD_DSMC_Vars ,ONLY: MacroSurfaceVal,MacroSurfaceSpecVal, CollisMode +USE MOD_HDF5_Output ,ONLY: WriteAttributeToHDF5,WriteArrayToHDF5,WriteHDF5Header +USE MOD_IO_HDF5 +USE MOD_MPI_Shared_Vars ,ONLY: mySurfRank +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC +USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample,CalcSurfaceImpact +USE MOD_Particle_Boundary_Vars ,ONLY: nOutputSides +USE MOD_Particle_boundary_Vars ,ONLY: nComputeNodeSurfOutputSides,offsetComputeNodeSurfOutputSide +USE MOD_Particle_Boundary_Vars ,ONLY: nSurfBC,SurfBCName, PartBound +USE MOD_Particle_Vars ,ONLY: nSpecies +#if USE_MPI +USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides +USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SURF +#endif +!----------------------------------------------------------------------------------------------------------------------------------! +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +! INPUT VARIABLES +CHARACTER(LEN=*),INTENT(IN) :: MeshFileName +REAL,INTENT(IN) :: OutputTime +!----------------------------------------------------------------------------------------------------------------------------------! +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +CHARACTER(LEN=255) :: FileName,FileString,Statedummy +CHARACTER(LEN=255) :: H5_Name +CHARACTER(LEN=255) :: NodeTypeTemp +CHARACTER(LEN=255) :: SpecID, PBCID +CHARACTER(LEN=255),ALLOCATABLE :: Str2DVarNames(:) +INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, iSpec, iPBC +REAL :: tstart,tend +!=================================================================================================================================== + +#if USE_MPI +! Return if not a sampling leader +IF (MPI_COMM_LEADERS_SURF.EQ.MPI_COMM_NULL) RETURN +CALL MPI_BARRIER(MPI_COMM_LEADERS_SURF,iERROR) + +! Return if no sampling sides +IF (nSurfTotalSides .EQ.0) RETURN +#endif /*USE_MPI*/ + +IF (mySurfRank.EQ.0) THEN + WRITE(UNIT_stdOut,'(a)',ADVANCE='NO')' WRITE DSMCSurfSTATE TO HDF5 FILE...' + tstart=LOCALTIME() +END IF + +FileName = TIMESTAMP(TRIM(ProjectName)//'_DSMCSurfChemState',OutputTime) +FileString = TRIM(FileName)//'.h5' + +! Create dataset attribute "SurfVarNames" +nVar2D = 1 +nVar2D_Spec = 1 + + +nVar2D_Total = nVar2D + nVar2D_Spec*nSpecies + +! Generate skeleton for the file with all relevant data on a single proc (MPIRoot) +#if USE_MPI +IF (mySurfRank.EQ.0) THEN +#endif + CALL OpenDataFile(FileString,create=.TRUE.,single=.TRUE.,readOnly=.FALSE.) + Statedummy = 'DSMCSurfState' + + ! Write file header + CALL WriteHDF5Header(Statedummy,File_ID) + CALL WriteAttributeToHDF5(File_ID,'DSMC_nSurfSample',1,IntegerScalar=nSurfSample) + CALL WriteAttributeToHDF5(File_ID,'DSMC_nSpecies' ,1,IntegerScalar=nSpecies) + CALL WriteAttributeToHDF5(File_ID,'DSMC_CollisMode' ,1,IntegerScalar=CollisMode) + CALL WriteAttributeToHDF5(File_ID,'MeshFile' ,1,StrScalar=(/TRIM(MeshFileName)/)) + CALL WriteAttributeToHDF5(File_ID,'Time' ,1,RealScalar=OutputTime) + CALL WriteAttributeToHDF5(File_ID,'BC_Surf' ,nSurfBC,StrArray=SurfBCName) + CALL WriteAttributeToHDF5(File_ID,'N',1 ,IntegerScalar=nSurfSample) + NodeTypeTemp='VISU' + CALL WriteAttributeToHDF5(File_ID,'NodeType' ,1,StrScalar=(/NodeTypeTemp/)) + + ALLOCATE(Str2DVarNames(1:nVar2D_Total)) + Str2DVarNames(:) = '' + nVarCount = 1 + DO iSpec = 1,nSpecies + WRITE(SpecID,'(I3.3)') iSpec + CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Spec'//TRIM(SpecID)//'_Coverage') + END DO ! iSpec=1,nSpecies + + ! fill varnames for total values + CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Total_Coverage') + + CALL CloseDataFile() + DEALLOCATE(Str2DVarNames) +#if USE_MPI +END IF + +CALL MPI_BARRIER(MPI_COMM_LEADERS_SURF,iERROR) + +CALL OpenDataFile(FileString,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_LEADERS_SURF) +#else +CALL OpenDataFile(FileString,create=.FALSE.,single=.TRUE.,readOnly=.FALSE.) +#endif + +nVarCount=0 +WRITE(H5_Name,'(A)') 'SurfaceData' +ASSOCIATE (& + nVar2D_Total => INT(nVar2D_Total,IK) , & + nSurfSample => INT(nSurfSample,IK) , & + nGlobalSides => INT(nOutputSides,IK) , & + nLocalSides => INT(nComputeNodeSurfOutputSides,IK) , & + offsetSurfSide => INT(offsetComputeNodeSurfOutputSide,IK) , & + nVar2D_Spec => INT(nVar2D_Spec,IK) , & + nVar2D => INT(nVar2D,IK)) + DO iSpec = 1,nSpecies + CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , & + nValGlobal =(/nVar2D_Total , nSurfSample , nSurfSample , nGlobalSides /) , & + nVal =(/nVar2D_Spec , nSurfSample , nSurfSample , nLocalSides/) , & + offset =(/INT(nVarCount,IK) , 0_IK , 0_IK , offsetSurfSide/) , & + collective =.FALSE. , & + RealArray = MacroSurfaceSpecVal(1:nVar2D_Spec,1:nSurfSample,1:nSurfSample,1:nLocalSides,iSpec)) + nVarCount = nVarCount + INT(nVar2D_Spec) + END DO + CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , & + nValGlobal =(/nVar2D_Total , nSurfSample, nSurfSample , nGlobalSides/) , & + nVal =(/nVar2D , nSurfSample, nSurfSample , nLocalSides/) , & + offset =(/INT(nVarCount,IK), 0_IK , 0_IK , offsetSurfSide/) , & + collective =.FALSE. , & + RealArray = MacroSurfaceVal(1:nVar2D,1:nSurfSample,1:nSurfSample,1:nLocalSides)) +END ASSOCIATE + +CALL CloseDataFile() + +IF (mySurfRank.EQ.0) THEN + tend=LOCALTIME() + WRITE(UNIT_stdOut,'(A,F0.3,A)',ADVANCE='YES')'DONE [',tend-tstart,'s]' +END IF + +END SUBROUTINE WriteSurfSampleChemToHDF5 + + SUBROUTINE AddVarName(StrArray,ArrayDim,idx,VarName) !----------------------------------------------------------------------------------------------------------------------------------! ! description diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index 08d81cc49..a19f8a4fb 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -52,8 +52,10 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared USE MOD_SurfaceModel USE MOD_SurfaceModel_Chemistry -USE MOD_SurfaceModel_Vars +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win,SurfChemReac, ChemWallProp, ChemDesorpWall USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle +USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED +USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC #if defined(IMPA) || defined(ROS) USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod @@ -87,7 +89,7 @@ SUBROUTINE ParticleSurfChemFlux() REAL :: MonoLayer INTEGER :: iSurfSite, SurfNumOfReac, iReac INTEGER :: BoundID -INTEGER :: iVal, iReactant, iValReac +INTEGER :: iVal, iReactant, iValReac, SurfSideID #if USE_LOADBALANCE REAL :: tLBStart @@ -105,83 +107,87 @@ SUBROUTINE ParticleSurfChemFlux() ! Choose the reactive boundaries DO iSF=1, SurfChemReac%NumOfBounds(iReac) BoundID = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC + DO iSide = 1, BCdata_auxSF(BoundID)%SideNumber + BCSideID=BCdata_auxSF(BoundID)%SideList(iSide) + ElemID = SideToElem(S2E_ELEM_ID,BCSideID) + iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) + globElemId = ElemID + offSetElem + SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + IF (SurfSideID.LT.1) THEN + CALL abort(& + __STAMP__& + ,'Chemical Surface Flux is not allowed on non-sampling sides!') + END IF - ! Define the coverage values of the species stored on the surface - IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - Coverage = PartBound%Coverage(BoundID, iReactant) - AdCount = PartBound%AdCount(BoundID, iReactant) - END IF - END DO - ELSE - Coverage = PartBound%Coverage(BoundID, iSpec) - AdCount = PartBound%AdCount(BoundID, iSpec) - END IF - - ! Define the variables - Area = PartBound%SurfArea(BoundID) - DissOrder = SurfChemReac%DissOrder(iReac) - nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) - Rate = SurfChemReac%Rate(iReac) - - ! Calculate the desorption parameters in dependence of coverage and temperature of the boundary - IF(nu.EQ.0.) THEN - nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) - END IF - - ! Boundary temperature - WallTemp = PartBound%WallTemp(BoundID) - E_act = SurfChemReac%E_initial(iReac) + Coverage * SurfChemReac%W_interact(iReac) - Rate = nu * Coverage**DissOrder * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol - - ! Determine the desorption probability - Monolayer = PartBound%nMol(BoundID) * PartBound%MaxCoverage(BoundID, iSpec) - PartBound%DesCountIter(BoundID, iSpec) = Rate * dt * Monolayer + PartBound%DesCountIter(BoundID, iSpec) - - IF((PartBound%DesCountIter(BoundID, iSpec)*DissOrder).GE.AdCount) THEN - ! Upper bound for the desorption number - PartBound%DesCountIter(BoundID, iSpec) = AdCount - END IF - - ! Update the adsorbtion and desorption count - IF(PartBound%DesCountIter(BoundID, iSpec).GT.1.)THEN IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - PartBound%AdCount(BoundID,iReactant) = PartBound%AdCount(BoundID,iReactant) - PartBound%DesCountIter(BoundID,iSpec) * DissOrder - PartBound%Coverage(BoundID,iReactant) = PartBound%Coverage(BoundID,iReactant) - PartBound%DesCountIter(BoundID,iSpec) * DissOrder/PartBound%nMol(BoundID) + Coverage = ChemWallProp(iReactant,1,1, 1, SurfSideID) + ! AdCount = PartBound%AdCount(BoundID, iReactant) END IF END DO ELSE - PartBound%AdCount(BoundID, iSpec)= PartBound%AdCount(BoundID, iSpec) - PartBound%DesCountIter(BoundID, iSpec) * DissOrder - PartBound%Coverage(BoundID,iSpec) = PartBound%Coverage(BoundID,iSpec) - PartBound%DesCountIter(BoundID,iSpec) * DissOrder/PartBound%nMol(BoundID) + Coverage =ChemWallProp(iSpec,1,1, 1, SurfSideID) + ! AdCount = PartBound%AdCount(BoundID, iSpec) + END IF + + ! Define the variables + DissOrder = SurfChemReac%DissOrder(iReac) + nu = SurfChemReac%Prefactor(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) + Rate = SurfChemReac%Rate(iReac) + + ! Calculate the desorption parameters in dependence of coverage and temperature of the boundary + IF(nu.EQ.0.) THEN + nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) + END IF + + ! Boundary temperature + WallTemp = PartBound%WallTemp(BoundID) + E_act = SurfChemReac%E_initial(iReac) + Coverage * SurfChemReac%W_interact(iReac) + Rate = nu * Coverage**DissOrder * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol + + ! Determine the desorption probability + Monolayer = PartBound%nMol(BoundID) * PartBound%MaxCoverage(BoundID, iSpec) + ChemDesorpWall(iSpec,1,1, 1, SurfSideID) = Rate * dt * Monolayer + ChemDesorpWall(iSpec,1,1, 1, SurfSideID) + +! IF((PartBound%DesCountIter(BoundID, iSpec)*DissOrder).GE.AdCount) THEN +! ! Upper bound for the desorption number +! PartBound%DesCountIter(BoundID, iSpec) = AdCount +! END IF + + ! Update the adsorbtion and desorption count + IF(ChemDesorpWall(iSpec,1,1, 1, SurfSideID).GT.1.)THEN + IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) +! PartBound%AdCount(BoundID,iReactant) = PartBound%AdCount(BoundID,iReactant) - PartBound%DesCountIter(BoundID,iSpec) * DissOrder + PartBound%Coverage(BoundID,iReactant) = PartBound%Coverage(BoundID,iReactant) - PartBound%DesCountIter(BoundID,iSpec) * DissOrder/PartBound%nMol(BoundID) + END IF + END DO + ELSE +! PartBound%AdCount(BoundID, iSpec)= PartBound%AdCount(BoundID, iSpec) - PartBound%DesCountIter(BoundID, iSpec) * DissOrder + ! Falsche fläche in PartBond%nMOl? + ChemWallProp(iSpec,1,1, 1, SurfSideID) = ChemWallProp(iSpec,1,1, 1, SurfSideID) - ChemDesorpWall(iSpec,1,1, 1, SurfSideID)* DissOrder/PartBound%nMol(BoundID) + END IF +! PartBound%TotalCoverage(BoundID) = PartBound%TotalCoverage(BoundID) - PartBound%DesCountIter(BoundID, iSpec) * DissOrder/PartBound%nMol(BoundID) +! PartBound%DesCount(BoundID, iSpec) = PartBound%DesCount(BoundID, iSpec) + PartBound%DesCountIter(BoundID, iSpec) END IF - PartBound%TotalCoverage(BoundID) = PartBound%TotalCoverage(BoundID) - PartBound%DesCountIter(BoundID, iSpec) * DissOrder/PartBound%nMol(BoundID) - PartBound%DesCount(BoundID, iSpec) = PartBound%DesCount(BoundID, iSpec) + PartBound%DesCountIter(BoundID, iSpec) - END IF - ! Current boundary condition - currentBC = BoundID - PartsEmitted = 0 - NbrOfParticle = 0 - iPartTotal = 0 + ! Current boundary condition + currentBC = BoundID + PartsEmitted = 0 + NbrOfParticle = 0 + iPartTotal = 0 ! Loop over the side numbers - DO WHILE(INT(PartBound%DesCountIter(BoundID, iSpec)).GT.1) +! DO WHILE(INT(ChemDesorpWall(iSpec,1,1, 1, SurfSideID)).GT.1) + IF (INT(ChemDesorpWall(iSpec,1,1, 1, SurfSideID)).GT.1) THEN ! Random distribution of the particles on the surface - CALL RANDOM_NUMBER(RanNum) - iSide = INT(BCdata_auxSF(currentBC)%SideNumber * RanNum) - IF(iSide.GT.0) THEN ! Define the necessary variables - BCSideID=BCdata_auxSF(currentBC)%SideList(iSide) - ElemID = SideToElem(S2E_ELEM_ID,BCSideID) - iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) - globElemId = ElemID + offSetElem - SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) xyzNod(1:3) = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) @@ -193,8 +199,8 @@ SUBROUTINE ParticleSurfChemFlux() midpoint(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) ndist(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) - PartInsSubSide = 1 - PartBound%DesCountIter(BoundID, iSpec) = PartBound%DesCountIter(BoundID, iSpec) - 1. + PartInsSubSide = INT(ChemDesorpWall(iSpec,1,1, 1, SurfSideID)) + ChemDesorpWall(iSpec,1,1, 1, SurfSideID) = ChemDesorpWall(iSpec,1,1, 1, SurfSideID) - INT(ChemDesorpWall(iSpec,1,1, 1, SurfSideID)) NbrOfParticle = NbrOfParticle + PartInsSubSide ALLOCATE(particle_positions(1:3)) @@ -227,10 +233,7 @@ SUBROUTINE ParticleSurfChemFlux() PartsEmitted = PartsEmitted + PartInsSubSide END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) - ELSE - CYCLE - END IF - END DO ! iSide + END IF ! iSide IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'Error 2 in ParticleSurfaceflux!') !----- 2b.: set remaining properties @@ -261,94 +264,93 @@ SUBROUTINE ParticleSurfChemFlux() CALL abort(& __STAMP__& ,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') - END IF - - - END DO ! iSF - END IF + END IF + END DO + END DO ! iSF + END IF END DO !iSpec CASE('LH') ! Choose the reactive boundaries DO iSF=1,SurfChemReac%NumOfBounds(iReac) BoundID = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC - - ! Define the variables - Coverage = 1. - ! prefactor for the rate equation including the dependency on all coverage values - DO iVal=1,SIZE(SurfChemReac%Reactants(iReac,:)) - - IF(SurfChemReac%Reactants(iReac,iVal).NE.0) THEN - iSpec = SurfChemReac%Reactants(iReac,iVal) - Coverage = Coverage * PartBound%Coverage(BoundID, iSpec) + DO iSide = 1, BCdata_auxSF(BoundID)%SideNumber + BCSideID=BCdata_auxSF(BoundID)%SideList(iSide) + ElemID = SideToElem(S2E_ELEM_ID,BCSideID) + iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) + globElemId = ElemID + offSetElem + SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + IF (SurfSideID.LT.1) THEN + CALL abort(& + __STAMP__& + ,'Chemical Surface Flux is not allowed on non-sampling sides!') END IF - END DO + ! Define the variables + Coverage = 1. + ! prefactor for the rate equation including the dependency on all coverage values + DO iVal=1,SIZE(SurfChemReac%Reactants(iReac,:)) - Area = PartBound%SurfArea(BoundID) - WallTemp = PartBound%WallTemp(BoundID) + IF(SurfChemReac%Reactants(iReac,iVal).NE.0) THEN + iSpec = SurfChemReac%Reactants(iReac,iVal) + Coverage = Coverage * ChemWallProp(iSpec,1,1, 1, SurfSideID) + END IF + END DO - nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) + WallTemp = PartBound%WallTemp(BoundID) - ! Calculate the rate in dependence of the temperature and coverage - Rate = nu * Coverage * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol + nu = SurfChemReac%Prefactor(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) - ! Is the LH routine in this way redundant for the consideration of multiple products s? - DO iVal=1,SIZE(SurfChemReac%Products(iReac,:)) - IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN - iSpec = SurfChemReac%Products(iReac,iVal) + ! Calculate the rate in dependence of the temperature and coverage + Rate = nu * Coverage * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol + ! Is the LH routine in this way redundant for the consideration of multiple products s? + DO iVal=1,SIZE(SurfChemReac%Products(iReac,:)) + IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN + iSpec = SurfChemReac%Products(iReac,iVal) - ! Hot to determine the AdCount for the lower coverage values? - ! Or is the rate equation independent on the chosen molecule? - Monolayer = PartBound%MaxCoverage(BoundID, SurfChemReac%Reactants(iReac,1)) * PartBound%nMol(BoundID) - PartBound%LHCountIter(BoundID, iSpec) = Rate * dt * MonoLayer + PartBound%LHCountIter(BoundID, iSpec) + ! Hot to determine the AdCount for the lower coverage values? + ! Or is the rate equation independent on the chosen molecule? + Monolayer = PartBound%MaxCoverage(BoundID, SurfChemReac%Reactants(iReac,1)) * PartBound%nMol(BoundID) + ChemDesorpWall(iSpec,1,1, 1, SurfSideID) = Rate * dt * Monolayer + ChemDesorpWall(iSpec,1,1, 1, SurfSideID) - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - AdCount = PartBound%AdCount(BoundID, iReactant) - - !Check if enough reactants exist on the surface - IF(PartBound%LHCountIter(BoundID, iSpec) .GT. AdCount) THEN - PartBound%LHCountIter(BoundID, iSpec) = AdCount - END IF +! DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) +! IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN +! iReactant = SurfChemReac%Reactants(iReac,iValReac) +! AdCount = PartBound%AdCount(BoundID, iReactant) +! +! !Check if enough reactants exist on the surface +! IF(PartBound%LHCountIter(BoundID, iSpec) .GT. AdCount) THEN +! PartBound%LHCountIter(BoundID, iSpec) = AdCount +! END IF - END IF - END DO +! END IF +! END DO - PartBound%LHCount(BoundID, iSpec) = PartBound%LHCount(BoundID, iSpec) + PartBound%LHCountIter(BoundID, iSpec) +! PartBound%LHCount(BoundID, iSpec) = PartBound%LHCount(BoundID, iSpec) + PartBound%LHCountIter(BoundID, iSpec) - ! Current boundary condition - currentBC = BoundID - PartsEmitted = 0 - NbrOfParticle = 0 - iPartTotal = 0 + ! Current boundary condition + currentBC = BoundID + PartsEmitted = 0 + NbrOfParticle = 0 + iPartTotal = 0 - ! Loop over the side numbers - DO WHILE(INT(PartBound%LHCountIter(BoundID, iSpec)).GT.1) - ! Random distributions of the particles on the surface - CALL RANDOM_NUMBER(RanNum) - iSide = INT(BCdata_auxSF(currentBC)%SideNumber * RanNum) - IF(iSide.GT.0.) THEN + IF (INT(ChemDesorpWall(iSpec,1,1, 1, SurfSideID)).GT.1) THEN + ! Random distribution of the particles on the surface ! Define the necessary variables - BCSideID=BCdata_auxSF(currentBC)%SideList(iSide) - ElemID = SideToElem(S2E_ELEM_ID,BCSideID) - iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) - globElemId = ElemID + offSetElem - SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) xyzNod(1:3) = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) ! Number of additional particles to be inserted Node1 = jSample+1 - Node2 = jSample+2 + Node2 = jSample+2 ! Vector1 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node1-1) Vector2 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node2-1) midpoint(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) ndist(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) - PartInsSubSide = 1 - PartBound%LHCountIter(BoundID, iSpec) = PartBound%LHCountIter(BoundID, iSpec) -1. + PartInsSubSide = INT(ChemDesorpWall(iSpec,1,1, 1, SurfSideID)) + ChemDesorpWall(iSpec,1,1, 1, SurfSideID) = ChemDesorpWall(iSpec,1,1, 1, SurfSideID) - INT(ChemDesorpWall(iSpec,1,1, 1, SurfSideID)) NbrOfParticle = NbrOfParticle + PartInsSubSide ALLOCATE(particle_positions(1:3)) @@ -376,18 +378,12 @@ SUBROUTINE ParticleSurfChemFlux() __STAMP__& ,'ERROR in ParticleSurfaceflux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?') END IF - DEALLOCATE(particle_positions) CALL SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) PartsEmitted = PartsEmitted + PartInsSubSide - END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) - - ELSE - CYCLE - END IF - END DO ! iSide + END IF ! iSide IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'Error 2 in ParticleSurfaceflux!') !----- 2b.: set remaining properties @@ -412,35 +408,41 @@ SUBROUTINE ParticleSurfChemFlux() ! instead of an UpdateNextfreePosition we update the particleVecLength only - enough ?!? PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle - ! Sample Energies on Surfaces when particles are emitted from them IF (NbrOfParticle.NE.PartsEmitted) THEN - ! should be equal for including the following lines in tSurfaceFlux - CALL abort(& - __STAMP__& - ,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') - END IF - - END IF ! iProd .ne. 0 - END DO ! iVal in Products + ! should be equal for including the following lines in tSurfaceFlux + CALL abort(& + __STAMP__& + ,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') + END IF + END IF ! Update the surface coverage of the reactants - IF(PartBound%LHCountIter(BoundID, iSpec).GT.1.) THEN - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - PartBound%AdCount(BoundID, iReactant)= PartBound%AdCount(BoundID, iReactant) - PartBound%LHCountIter(BoundID, iSpec) - PartBound%Coverage(BoundID, iReactant)= PartBound%Coverage(BoundID, iReactant) - PartBound%LHCountIter(BoundID, iSpec)/PartBound%nMol(BoundID) - PartBound%TotalCoverage(BoundID) = PartBound%TotalCoverage(BoundID) - PartBound%LHCountIter(BoundID, iSpec)/PartBound%nMol(BoundID) - END IF - END DO - END IF - END DO ! iSF + IF(ChemDesorpWall(iSpec,1,1, 1, SurfSideID).GT.1.) THEN + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + ! PartBound%AdCount(BoundID, iReactant)= PartBound%AdCount(BoundID, iReactant) - PartBound%LHCountIter(BoundID, iSpec) + ! Falsche fläche in PartBond%nMOl? + ChemWallProp(iReactant,1,1, 1, SurfSideID) = ChemWallProp(iReactant,1,1, 1, SurfSideID) - ChemDesorpWall(iSpec,1,1, 1, SurfSideID)/PartBound%nMol(BoundID) + ! PartBound%Coverage(BoundID, iReactant)= PartBound%Coverage(BoundID, iReactant) - PartBound%LHCountIter(BoundID, iSpec)/PartBound%nMol(BoundID) + ! PartBound%TotalCoverage(BoundID) = PartBound%TotalCoverage(BoundID) - PartBound%LHCountIter(BoundID, iSpec)/PartBound%nMol(BoundID) + END IF + END DO + END IF + END DO + END DO ! iSF + END DO CASE DEFAULT END SELECT END DO ! iReac + +#if USE_MPI + CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win,MPI_COMM_SHARED) +#endif + END SUBROUTINE ParticleSurfChemFlux @@ -703,4 +705,4 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSide END SUBROUTINE SetSurfacefluxVelocities -END MODULE MOD_Particle_SurfChemFlux \ No newline at end of file +END MODULE MOD_Particle_SurfChemFlux diff --git a/src/particles/emission/particle_surface_flux_init.f90 b/src/particles/emission/particle_surface_flux_init.f90 index 942ac042d..2678211db 100644 --- a/src/particles/emission/particle_surface_flux_init.f90 +++ b/src/particles/emission/particle_surface_flux_init.f90 @@ -168,7 +168,7 @@ SUBROUTINE InitializeParticleSurfaceflux() CALL ReadInAndPrepareSurfaceFlux(MaxSurfacefluxBCs, nDataBC) ! Call to the reactive surfaces -CALL ReadInAndPrepareSurfChemFlux(nDataBC) +IF (SurfChemReac%NumOfReact.GT.0) CALL ReadInAndPrepareSurfChemFlux(nDataBC) #if USE_MPI CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoPoissonRounding,1,MPI_LOGICAL,MPI_LAND,PartMPI%COMM,iError) !set T if this is for all procs diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index b8f88787c..babbf59c4 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -266,7 +266,7 @@ SUBROUTINE InitParticles() USE MOD_Mesh_Vars ,ONLY: nElems USE MOD_SurfaceModel_Porous ,ONLY: InitPorousBoundaryCondition USE MOD_Particle_Boundary_Sampling ,ONLY: InitParticleBoundarySampling -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac USE MOD_Particle_Boundary_Vars ,ONLY: PartBound USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod USE MOD_Particle_Vars ,ONLY: ParticlesInitIsDone,WriteMacroVolumeValues,WriteMacroSurfaceValues,nSpecies @@ -325,9 +325,6 @@ SUBROUTINE InitParticles() ! Insert the initial particles CALL InitialParticleInserting() -! Initialize particle surface flux to be performed per iteration -CALL SurfaceModel_Chemistry_Init() -CALL InitializeParticleSurfaceflux() ! Initialize volume sampling IF(useDSMC .OR. WriteMacroVolumeValues) THEN @@ -339,12 +336,16 @@ SUBROUTINE InitParticles() ! Initialize surface sampling / rotational periodic mapping ! (the following IF arguments have to be considered in FinalizeParticleBoundarySampling as well) -IF (WriteMacroSurfaceValues.OR.DSMC%CalcSurfaceVal.OR.(ANY(PartBound%Reactive)).OR.(nPorousBC.GT.0).OR.GEO%RotPeriodicBC) THEN +IF (WriteMacroSurfaceValues.OR.DSMC%CalcSurfaceVal.OR.(ANY(PartBound%Reactive)).OR.(nPorousBC.GT.0).OR.GEO%RotPeriodicBC.OR.(SurfChemReac%NumOfReact.GT.0)) THEN CALL InitParticleBoundarySampling() CALL InitParticleBoundaryRotPeriodic() CALL InitAdaptiveWallTemp() END IF +CALL SurfaceModel_Chemistry_Init() + +! Initialize particle surface flux to be performed per iteration +CALL InitializeParticleSurfaceflux() ! Initialize porous boundary condition (requires BCdata_auxSF and SurfMesh from InitParticleBoundarySampling) IF(nPorousBC.GT.0) CALL InitPorousBoundaryCondition() @@ -397,6 +398,7 @@ SUBROUTINE InitializeVariables() USE MOD_PICInit ,ONLY: InitPIC USE MOD_PICDepo_Vars ,ONLY: DoDeposition USE MOD_PICInterpolation_Vars ,ONLY: DoInterpolation +USE MOD_SurfaceModel_Vars ,ONLY: SurfChemReac #if USE_MPI USE MOD_Particle_MPI_Emission ,ONLY: InitEmissionComm USE MOD_Particle_MPI_Halo ,ONLY: IdentifyPartExchangeProcs @@ -428,6 +430,7 @@ SUBROUTINE InitializeVariables() ! initialization of surface model flags DoPoissonRounding = GETLOGICAL('Particles-DoPoissonRounding','.FALSE.') DoTimeDepInflow = GETLOGICAL('Particles-DoTimeDepInflow','.FALSE.') +SurfChemReac%NumOfReact = GETINT('Surface-NumOfReactions', '0') DelayTime = GETREAL('Part-DelayTime','0.') !--- Read Manual Time Step: Old variable name still supported ManualTimeStepParticle = GETREAL('Particles-ManualTimeStep') @@ -1475,4 +1478,4 @@ END SUBROUTINE InitRandomSeed END MODULE MOD_ParticleInit - \ No newline at end of file + diff --git a/src/particles/particle_mesh/particle_surfaces_vars.f90 b/src/particles/particle_mesh/particle_surfaces_vars.f90 index 84475380b..5f93ed771 100644 --- a/src/particles/particle_mesh/particle_surfaces_vars.f90 +++ b/src/particles/particle_mesh/particle_surfaces_vars.f90 @@ -114,7 +114,7 @@ MODULE MOD_Particle_Surfaces_Vars REAL :: Vectors(3,3) ! vectors from xyzNod to the 3 other corners of side END TYPE tTriaSideGeo TYPE tBCdata_auxSF - INTEGER :: SideNumber ! Number of Particles in Sides in SurfacefluxBC + INTEGER :: SideNumber ! Number of Sides in SurfacefluxBC REAL :: GlobalArea, LocalArea ! Sum of global and local tria-areas INTEGER , ALLOCATABLE :: SideList(:) ! List of Sides in BC (1:SideNumber) TYPE(tTriaSwapGeo) , ALLOCATABLE :: TriaSwapGeo(:,:,:) ! data for tria-swapping in surfflux (:,:,1:SideNumber) diff --git a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 index 634b18255..1c6157bbe 100644 --- a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 +++ b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 @@ -35,7 +35,7 @@ MODULE MOD_Particle_MPI_Boundary_Sampling END INTERFACE PUBLIC :: InitSurfCommunication -PUBLIC :: ExchangeSurfData +PUBLIC :: ExchangeSurfData, ExchangeChemSurfData PUBLIC :: FinalizeSurfCommunication !=================================================================================================================================== @@ -369,6 +369,290 @@ SUBROUTINE InitSurfCommunication() END SUBROUTINE InitSurfCommunication +SUBROUTINE ExchangeChemSurfData() +!=================================================================================================================================== +! exchange the surface data +!> 1) collect the information on the local compute-node +!> 2) compute-node leaders with sampling sides in their halo region and the original node communicate the sampling information +!> 3) compute-node leaders ensure synchronization of shared arrays on their node +!!=================================================================================================================================== +! MODULES ! +!----------------------------------------------------------------------------------------------------------------------------------! +USE MOD_Globals +USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC +USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED,MPI_COMM_LEADERS_SURF, nComputeNodeProcessors +USE MOD_MPI_Shared_Vars ,ONLY: nSurfLeaders,myComputeNodeRank,mySurfRank +USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode, PartBound +USE MOD_Particle_Boundary_Vars ,ONLY: SurfSampSize,nSurfSample +USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfTotalSides +USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide +USE MOD_Particle_Boundary_Vars ,ONLY: SurfMapping,CalcSurfaceImpact +USE MOD_Particle_Boundary_Vars ,ONLY: SampWallState,SampWallState_Shared,SampWallState_Shared_Win +USE MOD_Particle_Boundary_Vars ,ONLY: SampWallPumpCapacity,SampWallPumpCapacity_Shared,SampWallPumpCapacity_Shared_Win +USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactEnergy,SampWallImpactEnergy_Shared,SampWallImpactEnergy_Shared_Win +USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactVector,SampWallImpactVector_Shared,SampWallImpactVector_Shared_Win +USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactAngle ,SampWallImpactAngle_Shared ,SampWallImpactAngle_Shared_Win +USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactNumber,SampWallImpactNumber_Shared,SampWallImpactNumber_Shared_Win +USE MOD_Particle_MPI_Vars ,ONLY: SurfSendBuf,SurfRecvBuf +USE MOD_Particle_Vars ,ONLY: nSpecies +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, ChemWallProp, ChemSampWall, ChemSampWall_Shared, ChemWallProp_Shared_Win +USE MOD_SurfaceModel_Vars ,ONLY: ChemSampWall_Shared_Win +USE MOD_Particle_Boundary_vars ,ONLY: SurfSideArea_Shared, SurfSide2GlobalSide +USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------! +! INPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------! +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: iProc,SideID, firstSide, lastSide, GlobalSideID, locBCID, iSide, iSpec +INTEGER :: iPos,p,q +INTEGER :: MessageSize,iSurfSide,SurfSideID +INTEGER :: nValues +INTEGER :: RecvRequest(0:nSurfLeaders-1),SendRequest(0:nSurfLeaders-1) +!INTEGER :: iPos,p,q,iProc,iReact +!INTEGER :: recv_status_list(1:MPI_STATUS_SIZE,1:SurfCOMM%nMPINeighbors) +!=================================================================================================================================== +! nodes without sampling surfaces do not take part in this routine +IF (.NOT.SurfOnNode) RETURN + +! collect the information from the proc-local shadow arrays in the compute-node shared array +MessageSize = nSpecies*1*nSurfSample*nSurfSample*nComputeNodeSurfTotalSides +IF (myComputeNodeRank.EQ.0) THEN + CALL MPI_REDUCE(ChemSampWall,ChemSampWall_Shared,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_SHARED,IERROR) +ELSE + CALL MPI_REDUCE(ChemSampWall,0 ,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_SHARED,IERROR) +ENDIF + +CALL BARRIER_AND_SYNC(ChemSampWall_Shared_Win ,MPI_COMM_SHARED) +#if USE_MPI +firstSide = INT(REAL( myComputeNodeRank *nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors))+1 +lastSide = INT(REAL((myComputeNodeRank+1)*nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors)) +#else +firstSide = 1 +lastSide = nSurfTotalSides +#endif /*USE_MPI*/ + +DO iSide = firstSide, lastSide + GlobalSideID = SurfSide2GlobalSide(SURF_SIDEID,iSide) + locBCID = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,GlobalSideID)) + DO iSpec =1, nSpecies + ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall_Shared(iSpec,1,:,:,iSide)/SurfSideArea_Shared(:,:,iSide) & + *PartBound%LatticeVec(locBCID)*PartBound%LatticeVec(locBCID)/PartBound%MolPerUnitCell(locBCID) + END DO + ChemSampWall_Shared(:,:,:,:,iSide) = 0.0 +END DO +ChemSampWall = 0.0 +CALL BARRIER_AND_SYNC(ChemSampWall_Shared_Win ,MPI_COMM_SHARED) +CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win ,MPI_COMM_SHARED) + + + +! prepare buffers for surf leader communication +!IF (myComputeNodeRank.EQ.0) THEN +! nValues = SurfSampSize*nSurfSample**2 +! ! Sampling of impact energy for each species (trans, rot, vib, elec), impact vector (x,y,z), angle and number: Add 9*nSpecies +! ! to the buffer length +! IF(CalcSurfaceImpact) nValues=nValues+9*nSpecies +! IF(nPorousBC.GT.0) nValues = nValues + 1 + +! ! open receive buffer +! DO iProc = 0,nSurfLeaders-1 +! ! ignore myself +! IF (iProc.EQ.mySurfRank) CYCLE + +! ! Only open recv buffer if we are expecting sides from this leader node +! IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE + +! ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc +! MessageSize = SurfMapping(iProc)%nRecvSurfSides * nValues +! CALL MPI_IRECV( SurfRecvBuf(iProc)%content & +! , MessageSize & +! , MPI_DOUBLE_PRECISION & +! , iProc & +! , 1209 & +! , MPI_COMM_LEADERS_SURF & +! , RecvRequest(iProc) & +! , IERROR) +! END DO ! iProc + +! ! build message +! DO iProc = 0,nSurfLeaders-1 +! ! Ignore myself +! IF (iProc .EQ. mySurfRank) CYCLE + +! ! Only assemble message if we are expecting sides to send to this leader node +! IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE + +! ! Nullify everything +! iPos = 0 +! SurfSendBuf(iProc)%content = 0. + +! DO iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides +! SideID = SurfMapping(iProc)%SendSurfGlobalID(iSurfSide) +! SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + +! ! Assemble message +! DO q = 1,nSurfSample +! DO p = 1,nSurfSample +! SurfSendBuf(iProc)%content(iPos+1:iPos+SurfSampSize) = SampWallState_Shared(:,p,q,SurfSideID) +! iPos = iPos + SurfSampSize +! ! Sampling of impact energy for each species (trans, rot, vib), impact vector (x,y,z), angle and number of impacts +! IF (CalcSurfaceImpact) THEN +! ! Add average impact energy for each species (trans, rot, vib) +! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactEnergy_Shared(:,1,p,q,SurfSideID) +! iPos = iPos + nSpecies +! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactEnergy_Shared(:,2,p,q,SurfSideID) +! iPos=iPos + nSpecies +! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactEnergy_Shared(:,3,p,q,SurfSideID) +! iPos=iPos + nSpecies +! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactEnergy_Shared(:,4,p,q,SurfSideID) +! iPos=iPos + nSpecies + +! ! Add average impact vector (x,y,z) for each species +! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactVector_Shared(:,1,p,q,SurfSideID) +! iPos = iPos + nSpecies +! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactVector_Shared(:,2,p,q,SurfSideID) +! iPos = iPos + nSpecies +! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactVector_Shared(:,3,p,q,SurfSideID) +! iPos = iPos + nSpecies + +! ! Add average impact angle for each species +! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactAngle_Shared(:,p,q,SurfSideID) +! iPos = iPos + nSpecies + +! ! Add number of particle impacts +! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactNumber_Shared(:,p,q,SurfSideID) +! iPos = iPos + nSpecies +! END IF ! CalcSurfaceImpact +! END DO ! p=0,nSurfSample +! END DO ! q=0,nSurfSample +! IF(nPorousBC.GT.0) THEN +! SurfSendBuf(iProc)%content(iPos+1:iPos+1) = SampWallPumpCapacity_Shared(SurfSideID) +! iPos = iPos + 1 +! END IF + +! SampWallState_Shared(:,:,:,SurfSideID)=0. +! ! Sampling of impact energy for each species (trans, rot, vib), impact vector (x,y,z), angle and number of impacts +! IF (CalcSurfaceImpact) THEN +! SampWallImpactEnergy_Shared(:,:,:,:,SurfSideID) = 0. +! SampWallImpactVector_Shared(:,:,:,:,SurfSideID) = 0. +! SampWallImpactAngle_Shared (:,:,:,SurfSideID) = 0. +! SampWallImpactNumber_Shared(:,:,:,SurfSideID) = 0. +! END IF ! CalcSurfaceImpact +! IF(nPorousBC.GT.0) THEN +! SampWallPumpCapacity_Shared(SurfSideID) = 0. +! END IF +! END DO ! iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides +! END DO + +! ! send message +! DO iProc = 0,nSurfLeaders-1 +! ! ignore myself +! IF (iProc.EQ.mySurfRank) CYCLE + +! ! Only open recv buffer if we are expecting sides from this leader node +! IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE + +! ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc +! MessageSize = SurfMapping(iProc)%nSendSurfSides * nValues +! CALL MPI_ISEND( SurfSendBuf(iProc)%content & +! , MessageSize & +! , MPI_DOUBLE_PRECISION & +! , iProc & +! , 1209 & +! , MPI_COMM_LEADERS_SURF & +! , SendRequest(iProc) & +! , IERROR) +! END DO ! iProc + +! ! Finish received number of sampling surfaces +! DO iProc = 0,nSurfLeaders-1 +! ! ignore myself +! IF (iProc.EQ.mySurfRank) CYCLE + +! IF (SurfMapping(iProc)%nSendSurfSides.NE.0) THEN +! CALL MPI_WAIT(SendRequest(iProc),MPIStatus,IERROR) +! IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) +! END IF + +! IF (SurfMapping(iProc)%nRecvSurfSides.NE.0) THEN +! CALL MPI_WAIT(RecvRequest(iProc),MPIStatus,IERROR) +! IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) +! END IF +! END DO ! iProc + +! ! add data do my list +! DO iProc = 0,nSurfLeaders-1 +! ! ignore myself +! IF (iProc.EQ.mySurfRank) CYCLE + +! ! Only open recv buffer if we are expecting sides from this leader node +! IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE + +! iPos=0 +! DO iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides +! SideID = SurfMapping(iProc)%RecvSurfGlobalID(iSurfSide) +! SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + +! DO q=1,nSurfSample +! DO p=1,nSurfSample +! SampWallState_Shared(:,p,q,SurfSideID) = SampWallState_Shared(:,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+SurfSampSize) +! iPos = iPos + SurfSampSize +! ! Sampling of impact energy for each species (trans, rot, vib), impact vector (x,y,z) and angle +! IF(CalcSurfaceImpact)THEN +! ! Add average impact energy for each species (trans, rot, vib) +! SampWallImpactEnergy_Shared(:,1,p,q,SurfSideID) = SampWallImpactEnergy_Shared(:,1,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) +! iPos = iPos + nSpecies +! SampWallImpactEnergy_Shared(:,2,p,q,SurfSideID) = SampWallImpactEnergy_Shared(:,2,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) +! iPos = iPos + nSpecies +! SampWallImpactEnergy_Shared(:,3,p,q,SurfSideID) = SampWallImpactEnergy_Shared(:,3,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) +! iPos = iPos + nSpecies +! SampWallImpactEnergy_Shared(:,4,p,q,SurfSideID) = SampWallImpactEnergy_Shared(:,4,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) +! iPos = iPos + nSpecies +! ! Add average impact vector (x,y,z) for each species +! SampWallImpactVector_Shared(:,1,p,q,SurfSideID) = SampWallImpactVector_Shared(:,1,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) +! iPos = iPos + nSpecies +! SampWallImpactVector_Shared(:,2,p,q,SurfSideID) = SampWallImpactVector_Shared(:,2,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) +! iPos = iPos + nSpecies +! SampWallImpactVector_Shared(:,3,p,q,SurfSideID) = SampWallImpactVector_Shared(:,3,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) +! iPos = iPos + nSpecies +! ! Add average impact angle for each species +! SampWallImpactAngle_Shared(:,p,q,SurfSideID) = SampWallImpactAngle_Shared(:,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) +! iPos = iPos + nSpecies +! ! Add number of particle impacts +! SampWallImpactNumber_Shared(:,p,q,SurfSideID) = SampWallImpactNumber_Shared(:,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) +! iPos = iPos + nSpecies +! END IF ! CalcSurfaceImpact +! END DO ! p = 0,nSurfSample +! END DO ! q = 0,nSurfSample +! IF(nPorousBC.GT.0) THEN +! SampWallPumpCapacity_Shared(SurfSideID) = SurfRecvBuf(iProc)%content(iPos+1) +! iPos = iPos + 1 +! END IF +! END DO ! iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides +! ! Nullify buffer +! SurfRecvBuf(iProc)%content = 0. +! END DO ! iProc +!END IF + +! ensure synchronization on compute node +!CALL BARRIER_AND_SYNC(SampWallState_Shared_Win ,MPI_COMM_SHARED) + +END SUBROUTINE ExchangeChemSurfData + SUBROUTINE ExchangeSurfData() !=================================================================================================================================== diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index c048b51c4..2891a0036 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -93,8 +93,12 @@ SUBROUTINE SurfaceModel_Chemistry_Init() USE MOD_ReadInTools USE MOD_DSMC_Vars ,ONLY: SpecDSMC USE MOD_PARTICLE_Vars ,ONLY: nSpecies -USE MOD_Particle_Boundary_Vars ,ONLY: nPartBound, PartBound +USE MOD_Particle_Boundary_Vars ,ONLY: nPartBound, PartBound, nComputeNodeSurfTotalSides, nSurfSample USE MOD_SurfaceModel_Vars +#if USE_MPI +USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED, myComputeNodeRank +USE MOD_MPI_Shared +#endif ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -109,7 +113,6 @@ SUBROUTINE SurfaceModel_Chemistry_Init() REAL, ALLOCATABLE :: StoichCoeff(:,:) !=================================================================================================================================== -SurfChemReac%NumOfReact = GETINT('Surface-NumOfReactions', '0') IF(SurfChemReac%NumOfReact.LE.0) THEN RETURN END IF @@ -245,6 +248,31 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%EForm(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-FormationEnergy','0') END DO +ALLOCATE( ChemSampWall(1:nSpecies,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) +ALLOCATE(ChemDesorpWall(1:nSpecies,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) +ChemDesorpWall = 0.0 +ChemSampWall = 0.0 +#if USE_MPI + CALL Allocate_Shared((/nSpecies,1,nSurfSample,nSurfSample,nComputeNodeSurfTotalSides/),ChemSampWall_Shared_Win,ChemSampWall_Shared) + CALL MPI_WIN_LOCK_ALL(0,ChemSampWall_Shared_Win,IERROR) + IF (myComputeNodeRank.EQ.0) THEN + ChemSampWall_Shared = 0. + END IF + CALL BARRIER_AND_SYNC(ChemSampWall_Shared_Win,MPI_COMM_SHARED) + + CALL Allocate_Shared((/nSpecies,1,nSurfSample,nSurfSample,nComputeNodeSurfTotalSides/),ChemWallProp_Shared_Win,ChemWallProp_Shared) + CALL MPI_WIN_LOCK_ALL(0,ChemWallProp_Shared_Win,IERROR) + ChemWallProp => ChemWallProp_Shared + IF (myComputeNodeRank.EQ.0) THEN + ChemWallProp = 0. + END IF + CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win,MPI_COMM_SHARED) +#else + ALLOCATE(ChemWallProp(1:nSpecies,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) + ChemWallProp = 0.0 +#endif /*USE_MPI*/ + + ! ! Simple recombination model ! DO iReac = 1, ReadInNumOfRecomb ! WRITE(UNIT=hilf,FMT='(I0)') iReac diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index 180b5726a..3b45e0d1e 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -50,7 +50,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) USE MOD_Particle_Vars ,ONLY: PartSpecies,WriteMacroSurfaceValues,Species,usevMPF,PartMPF USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod, TrackInfo USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, dXiEQ_SurfSample -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac !, RecombModel +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac , ChemWallProp, ChemSampWall !, RecombModel USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared, BoundsOfElem_Shared USE MOD_Particle_Vars ,ONLY: PDM, LastPartPos,PartState USE MOD_Particle_Vars ,ONLY: UseCircularInflow @@ -114,7 +114,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) INTEGER :: NewPartID INTEGER :: SurfNumOfReac INTEGER :: iNewPart -INTEGER :: SurfNumOfRecomb +INTEGER :: SurfNumOfRecomb, SubP, SubQ !=================================================================================================================================== iBC = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) @@ -153,7 +153,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) ! Counter for surface analyze IF(CalcSurfCollCounter) SurfAnalyzeCount(PartSpecImpact) = SurfAnalyzeCount(PartSpecImpact) + 1 ! Sampling -DoSample = (DSMC%CalcSurfaceVal.AND.SamplingActive).OR.(DSMC%CalcSurfaceVal.AND.WriteMacroSurfaceValues) +DoSample = (DSMC%CalcSurfaceVal.AND.SamplingActive).OR.(DSMC%CalcSurfaceVal.AND.WriteMacroSurfaceValues).OR.(SurfChemReac%NumOfReact.GT.0) IF(DoSample) THEN IF (TrackingMethod.EQ.TRIATRACKING) THEN TrackInfo%p = 1 ; TrackInfo%q = 1 @@ -186,7 +186,8 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) CALL MaxwellScattering(PartID,SideID,n_Loc,SpecularReflectionOnly) !----------------------------------------------------------------------------------------------------------------------------------- CASE(20) - + SubP = TrackInfo%p + SubQ = TrackInfo%q InteractionType = 'None' StickCoeff = 0.0 Prob = 0.0 @@ -206,16 +207,17 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN iProd = SurfChemReac%Products(iReac,iValProd) - Coverage = PartBound%Coverage(locBCID, iProd) +! Coverage = PartBound%Coverage(locBCID, iProd) + Coverage = ChemWallProp(iProd,1,SubP, SubQ, SurfSideID) END IF END DO ELSE - Coverage = PartBound%Coverage(locBCID, speciesID) + Coverage = ChemWallProp(speciesID,1,SubP, SubQ, SurfSideID) END IF ! Definition of the variables MaxCoverage = PartBound%MaxCoverage(locBCID,speciesID) - TotalCoverage = PartBound%TotalCoverage(locBCID) + TotalCoverage = SUM(ChemWallProp(:,1,SubP, SubQ, SurfSideID)) DissOrder = SurfChemReac%DissOrder(iReac) S_0 = SurfChemReac%S_initial(iReac) EqConstant = SurfChemReac%EqConstant(iReac) @@ -260,7 +262,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - Coverage = PartBound%Coverage(locBCID, iReactant) + Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) END IF END DO @@ -301,23 +303,24 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN iProd = SurfChemReac%Reactants(iReac,iValProd) - PartBound%AdCount(locBCID, iProd) = PartBound%AdCount(locBCID, iProd) + DissOrder * MPF - PartBound%Coverage(locBCID, iProd) = PartBound%Coverage(locBCID, iProd) + DissOrder * MPF / PartBound%nMol(locBCID) + ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) + DissOrder * MPF +! PartBound%AdCount(locBCID, iProd) = PartBound%AdCount(locBCID, iProd) + DissOrder * MPF +! PartBound%Coverage(locBCID, iProd) = PartBound%Coverage(locBCID, iProd) + DissOrder * MPF / PartBound%nMol(locBCID) END IF END DO ELSE - PartBound%AdCount(locBCID, speciesID) = PartBound%AdCount(locBCID, speciesID) + DissOrder * MPF - PartBound%Coverage(locBCID, speciesID) = PartBound%Coverage(locBCID, speciesID) + DissOrder * MPF / PartBound%nMol(locBCID) + ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) + DissOrder * MPF +! PartBound%AdCount(locBCID, speciesID) = PartBound%AdCount(locBCID, speciesID) + DissOrder * MPF +! PartBound%Coverage(locBCID, speciesID) = PartBound%Coverage(locBCID, speciesID) + DissOrder * MPF / PartBound%nMol(locBCID) END IF - PartBound%TotalCoverage(locBCID) = PartBound%TotalCoverage(locBCID) + DissOrder * MPF/PartBound%nMol(locBCID) +! PartBound%TotalCoverage(locBCID) = PartBound%TotalCoverage(locBCID) + DissOrder * MPF/PartBound%nMol(locBCID) CASE('ER') CALL RemoveParticle(PartID) MPF = Species(speciesID)%MacroParticleFactor ! Create the Eley-Rideal reaction product - SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) TempErgy = WallTemp WallVelo = PartBound%WallVelo(1:3,locBCID) @@ -352,9 +355,10 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - PartBound%AdCount(locBCID, iReactant) = PartBound%AdCount(locBCID, iReactant) - 1.0 - PartBound%Coverage(locBCID, iReactant) = PartBound%Coverage(locBCID, iReactant) - 1.0/PartBound%nMol(locBCID) - PartBound%TotalCoverage(locBCID) = PartBound%TotalCoverage(locBCID) - 1.0/PartBound%nMol(locBCID) + ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) - 1.0 +! PartBound%AdCount(locBCID, iReactant) = PartBound%AdCount(locBCID, iReactant) - 1.0 +! PartBound%Coverage(locBCID, iReactant) = PartBound%Coverage(locBCID, iReactant) - 1.0/PartBound%nMol(locBCID) +! PartBound%TotalCoverage(locBCID) = PartBound%TotalCoverage(locBCID) - 1.0/PartBound%nMol(locBCID) END IF END DO diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90 index 8742f7291..ba775746d 100644 --- a/src/particles/surfacemodel/surfacemodel_vars.f90 +++ b/src/particles/surfacemodel/surfacemodel_vars.f90 @@ -1,3 +1,4 @@ +#include "piclas.h" !================================================================================================================================== ! Copyright (c) 2015 - 2019 Wladimir Reschke ! @@ -129,6 +130,17 @@ MODULE MOD_SurfaceModel_Vars REAL :: Dmax END TYPE tSurfFluxSubSideData +REAL,ALLOCATABLE :: ChemSampWall(:,:,:,:,:) +REAL,ALLOCATABLE :: ChemDesorpWall(:,:,:,:,:) +REAL,ALLOCPOINT :: ChemWallProp(:,:,:,:,:) + +#if USE_MPI +INTEGER :: ChemWallProp_Shared_Win +REAL,ALLOCPOINT :: ChemWallProp_Shared(:,:,:,:,:) +REAL,POINTER :: ChemSampWall_Shared(:,:,:,:,:) +INTEGER :: ChemSampWall_Shared_Win +#endif + ! TYPE tRecombinationModel ! INTEGER :: NumOfReact ! Number of possible reactions ! !CHARACTER(LEN=5),ALLOCATABLE :: ReactType(:) ! Type of Reaction (reaction num) diff --git a/src/timedisc/timedisc_TimeStep_DSMC.f90 b/src/timedisc/timedisc_TimeStep_DSMC.f90 index b0265d668..7cb2db636 100644 --- a/src/timedisc/timedisc_TimeStep_DSMC.f90 +++ b/src/timedisc/timedisc_TimeStep_DSMC.f90 @@ -53,6 +53,7 @@ SUBROUTINE TimeStep_DSMC() USE MOD_vMPF ,ONLY: SplitAndMerge #if USE_MPI USE MOD_Particle_MPI ,ONLY: IRecvNbOfParticles, MPIParticleSend,MPIParticleRecv,SendNbOfparticles +USE MOD_Particle_MPI_Boundary_Sampling, ONLY: ExchangeChemSurfData #endif /*USE_MPI*/ #if USE_LOADBALANCE USE MOD_LoadBalance_Timers ,ONLY: LBStartTime,LBSplitTime,LBPauseTime @@ -84,6 +85,7 @@ SUBROUTINE TimeStep_DSMC() IF (DoChemSurface) THEN CALL ParticleSurfChemFlux() + CALL ExchangeChemSurfData() ! Write the adsorption and desorption values into separate files for the two reactants OPEN(10, file='adsorbtion_O2.txt', position="APPEND") OPEN(30, file='adsorbtion_CO.txt', position="APPEND") From e4990840123c4f5f606d959fe1a207aa0ea82539 Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Thu, 2 Jun 2022 15:44:04 +0200 Subject: [PATCH 004/222] update calculation --- .../boundary/particle_boundary_init.f90 | 52 +-- .../boundary/particle_boundary_sampling.f90 | 145 ++++++ .../boundary/particle_boundary_vars.f90 | 12 +- .../emission/particle_surface_chemflux.f90 | 413 ++++++++++-------- .../emission/particle_surface_flux_init.f90 | 2 +- src/particles/particle_init.f90 | 16 +- .../particle_mesh/particle_surfaces_vars.f90 | 2 +- .../particle_mpi_boundary_sampling.f90 | 300 ++++++++++++- .../surfacemodel/surfacemodel_chemistry.f90 | 121 ++--- .../surfacemodel/surfacemodel_main.f90 | 107 +++-- .../surfacemodel/surfacemodel_vars.f90 | 12 + src/timedisc/timedisc_TimeStep_DSMC.f90 | 30 +- 12 files changed, 858 insertions(+), 354 deletions(-) diff --git a/src/particles/boundary/particle_boundary_init.f90 b/src/particles/boundary/particle_boundary_init.f90 index 6b2237abf..16d7d10f2 100644 --- a/src/particles/boundary/particle_boundary_init.f90 +++ b/src/particles/boundary/particle_boundary_init.f90 @@ -144,9 +144,9 @@ SUBROUTINE DefineParametersParticleBoundary() CALL prms%CreateRealOption( 'Part-Boundary[$]-NbrOfMol-UnitCell' & , 'Number of molecules in a unit cell defined by the lattice vector'& , numberedmulti=.TRUE.) -CALL prms%CreateRealOption( 'Part-Boundary[$]-SurfaceArea' & - , 'Area of the reactive surface'& - , numberedmulti=.TRUE.) +! CALL prms%CreateRealOption( 'Part-Boundary[$]-SurfaceArea' & +! , 'Area of the reactive surface'& +! , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Part-Boundary[$]-Species[$]-Coverage' & , 'Initial coverage of the surface by an adsorbed species'& , numberedmulti=.TRUE.) @@ -317,20 +317,20 @@ SUBROUTINE InitializeVariablesPartBoundary() PartBound%TempGradVec = 0. ALLOCATE(PartBound%SurfaceModel( 1:nPartBound)) PartBound%SurfaceModel = 0 -ALLOCATE(PartBound%Coverage(nPartBound, nSpecies)) +ALLOCATE(PartBound%CoverageIni(nPartBound, nSpecies)) ALLOCATE(PartBound%MaxCoverage(nPartBound, nSpecies)) ALLOCATE(PartBound%AdCount(nPartBound, nSpecies)) ALLOCATE(PartBound%DesCount(nPartBound, nSpecies)) -ALLOCATE(PartBound%DesCountIter(nPartBound, nSpecies)) -ALLOCATE(PartBound%ERCount(nPartBound, nSpecies)) -!ALLOCATE(PartBound%CatCount(nPartBound, nSpecies)) +! ALLOCATE(PartBound%DesCountIter(nPartBound, nSpecies)) +! ALLOCATE(PartBound%ERCount(nPartBound, nSpecies)) +! ALLOCATE(PartBound%CatCount(nPartBound, nSpecies)) ALLOCATE(PartBound%LHCount(nPartBound, nSpecies)) -ALLOCATE(PartBound%LHCountIter(nPartBound, nSpecies)) +! ALLOCATE(PartBound%LHCountIter(nPartBound, nSpecies)) ALLOCATE(PartBound%TotalCoverage(nPartBound)) -ALLOCATE(PartBound%nMol(nPartBound)) +!ALLOCATE(PartBound%nMol(nPartBound)) ALLOCATE(PartBound%LatticeVec(nPartBound)) ALLOCATE(PartBound%MolPerUnitCell(nPartBound)) -ALLOCATE(PartBound%SurfArea(nPartBound)) +! ALLOCATE(PartBound%SurfArea(nPartBound)) ALLOCATE(PartBound%Reactive( 1:nPartBound)) PartBound%Reactive = .FALSE. ALLOCATE(PartBound%Voltage(1:nPartBound)) @@ -430,28 +430,28 @@ SUBROUTINE InitializeVariablesPartBoundary() END IF PartBound%LatticeVec(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf)//'-LatticeVector', '0.') PartBound%MolPerUnitCell(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf)//'-NbrOfMol-UnitCell', '1.') - PartBound%SurfArea(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf)//'-SurfaceArea', '0.') - IF(PartBound%LatticeVec(iPartBound).GT.0.) THEN - ! Surface molecules in dependence of the occupancy of the unit cell - PartBound%nMol(iPartBound) = PartBound%MolPerUnitCell(iPartBound) * PartBound%SurfArea(iPartBound) & - /(PartBound%LatticeVec(iPartBound))**2 - ELSE - ! Alternative calculation by average number of molecules per area for a monolayer - PartBound%nMol(iPartBound) = 10.**19 * PartBound%SurfArea(iPartBound) - END IF + !PartBound%SurfArea(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf)//'-SurfaceArea', '0.') + ! IF(PartBound%LatticeVec(iPartBound).GT.0.) THEN + ! ! Surface molecules in dependence of the occupancy of the unit cell + ! PartBound%nMol(iPartBound) = PartBound%MolPerUnitCell(iPartBound) * PartBound%SurfArea(iPartBound) & + ! /(PartBound%LatticeVec(iPartBound))**2 + ! ELSE + ! ! Alternative calculation by average number of molecules per area for a monolayer + ! PartBound%nMol(iPartBound) = 10.**19 * PartBound%SurfArea(iPartBound) + ! END IF PartBound%TotalCoverage(iPartBound) = 0. DO iSpec=1, nSpecies WRITE(UNIT=hilf2,FMT='(I0)') iSpec - PartBound%Coverage(iPartBound, iSpec) = GETREAL('Part-Boundary'//TRIM(hilf)//'-Species'//TRIM(hilf2)//'-Coverage', '0.') + PartBound%CoverageIni(iPartBound, iSpec) = GETREAL('Part-Boundary'//TRIM(hilf)//'-Species'//TRIM(hilf2)//'-Coverage', '0.') PartBound%MaxCoverage(iPartBound, iSpec) = GETREAL('Part-Boundary'//TRIM(hilf)//'-Species'//TRIM(hilf2)//'-MaxCoverage', '1.') - PartBound%TotalCoverage(iPartBound) = PartBound%TotalCoverage(iPartBound) + PartBound%Coverage(iPartBound, iSpec) - PartBound%AdCount(iPartBound, iSpec) = PartBound%Coverage(iPartBound, iSpec) * PartBound%nMol(iPartBound) + PartBound%TotalCoverage(iPartBound) = PartBound%TotalCoverage(iPartBound) + PartBound%CoverageIni(iPartBound, iSpec) + PartBound%AdCount(iPartBound, iSpec) = 0. PartBound%DesCount(iPartBound, iSpec) = 0. - PartBound%DesCountIter(iPartBound, iSpec) = 0. - PartBound%ERCount(iPartBound, iSpec) = 0. + ! PartBound%DesCountIter(iPartBound, iSpec) = 0. + ! PartBound%ERCount(iPartBound, iSpec) = 0. PartBound%LHCount(iPartBound, iSpec) = 0. - PartBound%LHCountIter(iPartBound, iSpec) = 0. - !PartBound%CatCount(iPartBound, iSpec) = 0. + ! PartBound%LHCountIter(iPartBound, iSpec) = 0. + ! PartBound%CatCount(iPartBound, iSpec) = 0. END DO IF (PartBound%TotalCoverage(iPartBound).GT.1.) THEN CALL abort(& diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index 51a55152e..ad8a4b6e0 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -856,6 +856,151 @@ SUBROUTINE WriteSurfSampleToHDF5(MeshFileName,OutputTime) END SUBROUTINE WriteSurfSampleToHDF5 +SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) +!=================================================================================================================================== +!> write the final values of the surface sampling to a HDF5 state file +!> additional performs all the final required computations +!=================================================================================================================================== +! MODULES ! +!----------------------------------------------------------------------------------------------------------------------------------! +USE MOD_Globals +USE MOD_Globals_Vars ,ONLY: ProjectName +USE MOD_DSMC_Vars ,ONLY: MacroSurfaceVal,MacroSurfaceSpecVal, CollisMode +USE MOD_HDF5_Output ,ONLY: WriteAttributeToHDF5,WriteArrayToHDF5,WriteHDF5Header +USE MOD_IO_HDF5 +USE MOD_MPI_Shared_Vars ,ONLY: mySurfRank +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC +USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample,CalcSurfaceImpact +USE MOD_Particle_Boundary_Vars ,ONLY: nOutputSides +USE MOD_Particle_boundary_Vars ,ONLY: nComputeNodeSurfOutputSides,offsetComputeNodeSurfOutputSide +USE MOD_Particle_Boundary_Vars ,ONLY: nSurfBC,SurfBCName, PartBound +USE MOD_Particle_Vars ,ONLY: nSpecies +#if USE_MPI +USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides +USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SURF +#endif +!----------------------------------------------------------------------------------------------------------------------------------! +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +! INPUT VARIABLES +CHARACTER(LEN=*),INTENT(IN) :: MeshFileName +REAL,INTENT(IN) :: OutputTime +!----------------------------------------------------------------------------------------------------------------------------------! +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +CHARACTER(LEN=255) :: FileName,FileString,Statedummy +CHARACTER(LEN=255) :: H5_Name +CHARACTER(LEN=255) :: NodeTypeTemp +CHARACTER(LEN=255) :: SpecID, PBCID +CHARACTER(LEN=255),ALLOCATABLE :: Str2DVarNames(:) +INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, iSpec, iPBC +REAL :: tstart,tend +!=================================================================================================================================== + +#if USE_MPI +! Return if not a sampling leader +IF (MPI_COMM_LEADERS_SURF.EQ.MPI_COMM_NULL) RETURN +CALL MPI_BARRIER(MPI_COMM_LEADERS_SURF,iERROR) + +! Return if no sampling sides +IF (nSurfTotalSides .EQ.0) RETURN +#endif /*USE_MPI*/ + +IF (mySurfRank.EQ.0) THEN + WRITE(UNIT_stdOut,'(a)',ADVANCE='NO')' WRITE DSMCSurfSTATE TO HDF5 FILE...' + tstart=LOCALTIME() +END IF + +FileName = TIMESTAMP(TRIM(ProjectName)//'_DSMCSurfChemState',OutputTime) +FileString = TRIM(FileName)//'.h5' + +! Create dataset attribute "SurfVarNames" +nVar2D = 1 +nVar2D_Spec = 1 + + +nVar2D_Total = nVar2D + nVar2D_Spec*nSpecies + +! Generate skeleton for the file with all relevant data on a single proc (MPIRoot) +#if USE_MPI +IF (mySurfRank.EQ.0) THEN +#endif + CALL OpenDataFile(FileString,create=.TRUE.,single=.TRUE.,readOnly=.FALSE.) + Statedummy = 'DSMCSurfState' + + ! Write file header + CALL WriteHDF5Header(Statedummy,File_ID) + CALL WriteAttributeToHDF5(File_ID,'DSMC_nSurfSample',1,IntegerScalar=nSurfSample) + CALL WriteAttributeToHDF5(File_ID,'DSMC_nSpecies' ,1,IntegerScalar=nSpecies) + CALL WriteAttributeToHDF5(File_ID,'DSMC_CollisMode' ,1,IntegerScalar=CollisMode) + CALL WriteAttributeToHDF5(File_ID,'MeshFile' ,1,StrScalar=(/TRIM(MeshFileName)/)) + CALL WriteAttributeToHDF5(File_ID,'Time' ,1,RealScalar=OutputTime) + CALL WriteAttributeToHDF5(File_ID,'BC_Surf' ,nSurfBC,StrArray=SurfBCName) + CALL WriteAttributeToHDF5(File_ID,'N',1 ,IntegerScalar=nSurfSample) + NodeTypeTemp='VISU' + CALL WriteAttributeToHDF5(File_ID,'NodeType' ,1,StrScalar=(/NodeTypeTemp/)) + + ALLOCATE(Str2DVarNames(1:nVar2D_Total)) + Str2DVarNames(:) = '' + nVarCount = 1 + DO iSpec = 1,nSpecies + WRITE(SpecID,'(I3.3)') iSpec + CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Spec'//TRIM(SpecID)//'_Coverage') + END DO ! iSpec=1,nSpecies + + ! fill varnames for total values + CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Total_Coverage') + + CALL CloseDataFile() + DEALLOCATE(Str2DVarNames) +#if USE_MPI +END IF + +CALL MPI_BARRIER(MPI_COMM_LEADERS_SURF,iERROR) + +CALL OpenDataFile(FileString,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_LEADERS_SURF) +#else +CALL OpenDataFile(FileString,create=.FALSE.,single=.TRUE.,readOnly=.FALSE.) +#endif + +nVarCount=0 +WRITE(H5_Name,'(A)') 'SurfaceData' +ASSOCIATE (& + nVar2D_Total => INT(nVar2D_Total,IK) , & + nSurfSample => INT(nSurfSample,IK) , & + nGlobalSides => INT(nOutputSides,IK) , & + nLocalSides => INT(nComputeNodeSurfOutputSides,IK) , & + offsetSurfSide => INT(offsetComputeNodeSurfOutputSide,IK) , & + nVar2D_Spec => INT(nVar2D_Spec,IK) , & + nVar2D => INT(nVar2D,IK)) + DO iSpec = 1,nSpecies + CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , & + nValGlobal =(/nVar2D_Total , nSurfSample , nSurfSample , nGlobalSides /) , & + nVal =(/nVar2D_Spec , nSurfSample , nSurfSample , nLocalSides/) , & + offset =(/INT(nVarCount,IK) , 0_IK , 0_IK , offsetSurfSide/) , & + collective =.FALSE. , & + RealArray = MacroSurfaceSpecVal(1:nVar2D_Spec,1:nSurfSample,1:nSurfSample,1:nLocalSides,iSpec)) + nVarCount = nVarCount + INT(nVar2D_Spec) + END DO + CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , & + nValGlobal =(/nVar2D_Total , nSurfSample, nSurfSample , nGlobalSides/) , & + nVal =(/nVar2D , nSurfSample, nSurfSample , nLocalSides/) , & + offset =(/INT(nVarCount,IK), 0_IK , 0_IK , offsetSurfSide/) , & + collective =.FALSE. , & + RealArray = MacroSurfaceVal(1:nVar2D,1:nSurfSample,1:nSurfSample,1:nLocalSides)) +END ASSOCIATE + +CALL CloseDataFile() + +IF (mySurfRank.EQ.0) THEN + tend=LOCALTIME() + WRITE(UNIT_stdOut,'(A,F0.3,A)',ADVANCE='YES')'DONE [',tend-tstart,'s]' +END IF + +END SUBROUTINE WriteSurfSampleChemToHDF5 + + SUBROUTINE AddVarName(StrArray,ArrayDim,idx,VarName) !----------------------------------------------------------------------------------------------------------------------------------! ! description diff --git a/src/particles/boundary/particle_boundary_vars.f90 b/src/particles/boundary/particle_boundary_vars.f90 index ab1137e7e..40f59c289 100644 --- a/src/particles/boundary/particle_boundary_vars.f90 +++ b/src/particles/boundary/particle_boundary_vars.f90 @@ -246,19 +246,19 @@ MODULE MOD_Particle_Boundary_Vars INTEGER , ALLOCATABLE :: SpeciesSwaps(:,:,:) ! Species to be changed at wall (in, out), out=0: delete INTEGER , ALLOCATABLE :: SurfaceModel(:) ! Model used for surface interaction (e.g. SEE models) REAL , ALLOCATABLE :: TotalCoverage(:) - REAL , ALLOCATABLE :: nMol(:) ! number of molecules on the reactive surface + !REAL , ALLOCATABLE :: nMol(:) ! number of molecules on the reactive surface REAL , ALLOCATABLE :: LatticeVec(:) ! Lattice constant for a fcc crystal REAL , ALLOCATABLE :: MolPerUnitCell(:) ! Molecules per unit cell - REAL , ALLOCATABLE :: SurfArea(:) ! Reactive surface area - REAL , ALLOCATABLE :: Coverage(:,:) + ! REAL , ALLOCATABLE :: SurfArea(:) ! Reactive surface area + REAL , ALLOCATABLE :: CoverageIni(:,:) ! Initial boundary coverage REAL , ALLOCATABLE :: MaxCoverage(:,:) !REAL, ALLOCATABLE :: CatCount(:,:) ! number of reacted particles for the simple recombnation model REAL, ALLOCATABLE :: AdCount(:,:) ! number of adsorped molecules for the individual species REAL, ALLOCATABLE :: DesCount(:,:) ! number of desorped molecules for the individual species - REAL, ALLOCATABLE :: DesCountIter(:,:) ! desorption count for the emission routine + ! REAL, ALLOCATABLE :: DesCountIter(:,:) ! desorption count for the emission routine REAL, ALLOCATABLE :: LHCount(:,:) ! number of molecules created by the Langmuir-Hinshlewood reaction - REAL, ALLOCATABLE :: LHCountIter(:,:) ! reaction count for the emission routine - REAL, ALLOCATABLE :: ERCount(:,:) + ! REAL, ALLOCATABLE :: LHCountIter(:,:) ! reaction count for the emission routine + ! REAL, ALLOCATABLE :: ERCount(:,:) LOGICAL , ALLOCATABLE :: Reactive(:) ! flag defining if surface is treated reactively LOGICAL , ALLOCATABLE :: Resample(:) ! Resample Equilibrium Distribution with reflection LOGICAL , ALLOCATABLE :: UseAdaptedWallTemp(:) diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index 08d81cc49..a41c2cdf4 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -52,11 +52,12 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared USE MOD_SurfaceModel USE MOD_SurfaceModel_Chemistry -USE MOD_SurfaceModel_Vars +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win,SurfChemReac, ChemWallProp, ChemDesorpWall USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle - +USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED +USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC #if defined(IMPA) || defined(ROS) -USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod +USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod, TrackInfo #endif /*IMPA*/ #if USE_LOADBALANCE USE MOD_LoadBalance_Vars ,ONLY: nSurfacefluxPerElem @@ -84,10 +85,11 @@ SUBROUTINE ParticleSurfChemFlux() REAL :: Vectors(3,3) REAL :: WallTemp REAL :: RanNum -REAL :: MonoLayer +REAL :: SurfMol INTEGER :: iSurfSite, SurfNumOfReac, iReac INTEGER :: BoundID -INTEGER :: iVal, iReactant, iValReac +INTEGER :: iVal, iReactant, iValReac, SurfSideID +INTEGER :: SubP, SubQ #if USE_LOADBALANCE REAL :: tLBStart @@ -105,83 +107,101 @@ SUBROUTINE ParticleSurfChemFlux() ! Choose the reactive boundaries DO iSF=1, SurfChemReac%NumOfBounds(iReac) BoundID = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC + PartBound%DesCount(BoundID, iSpec) = 0.0 + DO iSide = 1, BCdata_auxSF(BoundID)%SideNumber + BCSideID=BCdata_auxSF(BoundID)%SideList(iSide) + ElemID = SideToElem(S2E_ELEM_ID,BCSideID) + iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) + globElemId = ElemID + offSetElem + SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + ! SubP = TrackInfo%p + ! SubQ = TrackInfo%q + SubP = 1 + SubQ = 1 + + ! Calculate the number of molecules on the surface + IF(PartBound%LatticeVec(BoundID).GT.0.) THEN + ! Surface molecules in dependence of the occupancy of the unit cell + SurfMol = PartBound%MolPerUnitCell(BoundID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & + /(PartBound%LatticeVec(BoundID)*PartBound%LatticeVec(BoundID)) + ELSE + ! Alternative calculation by average number of molecules per area for a monolayer + SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) + END IF + IF (SurfSideID.LT.1) THEN + CALL abort(& + __STAMP__& + ,'Chemical Surface Flux is not allowed on non-sampling sides!') + END IF - ! Define the coverage values of the species stored on the surface - IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - Coverage = PartBound%Coverage(BoundID, iReactant) - AdCount = PartBound%AdCount(BoundID, iReactant) - END IF - END DO - ELSE - Coverage = PartBound%Coverage(BoundID, iSpec) - AdCount = PartBound%AdCount(BoundID, iSpec) - END IF - - ! Define the variables - Area = PartBound%SurfArea(BoundID) - DissOrder = SurfChemReac%DissOrder(iReac) - nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) - Rate = SurfChemReac%Rate(iReac) - - ! Calculate the desorption parameters in dependence of coverage and temperature of the boundary - IF(nu.EQ.0.) THEN - nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) - END IF - - ! Boundary temperature - WallTemp = PartBound%WallTemp(BoundID) - E_act = SurfChemReac%E_initial(iReac) + Coverage * SurfChemReac%W_interact(iReac) - Rate = nu * Coverage**DissOrder * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol - - ! Determine the desorption probability - Monolayer = PartBound%nMol(BoundID) * PartBound%MaxCoverage(BoundID, iSpec) - PartBound%DesCountIter(BoundID, iSpec) = Rate * dt * Monolayer + PartBound%DesCountIter(BoundID, iSpec) - - IF((PartBound%DesCountIter(BoundID, iSpec)*DissOrder).GE.AdCount) THEN - ! Upper bound for the desorption number - PartBound%DesCountIter(BoundID, iSpec) = AdCount - END IF - - ! Update the adsorbtion and desorption count - IF(PartBound%DesCountIter(BoundID, iSpec).GT.1.)THEN IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - PartBound%AdCount(BoundID,iReactant) = PartBound%AdCount(BoundID,iReactant) - PartBound%DesCountIter(BoundID,iSpec) * DissOrder - PartBound%Coverage(BoundID,iReactant) = PartBound%Coverage(BoundID,iReactant) - PartBound%DesCountIter(BoundID,iSpec) * DissOrder/PartBound%nMol(BoundID) + Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) + AdCount = Coverage * SurfMol END IF END DO ELSE - PartBound%AdCount(BoundID, iSpec)= PartBound%AdCount(BoundID, iSpec) - PartBound%DesCountIter(BoundID, iSpec) * DissOrder - PartBound%Coverage(BoundID,iSpec) = PartBound%Coverage(BoundID,iSpec) - PartBound%DesCountIter(BoundID,iSpec) * DissOrder/PartBound%nMol(BoundID) + Coverage = ChemWallProp(iSpec,1,SubP, SubQ, SurfSideID) + AdCount = Coverage * SurfMol + END IF + + ! Define the variables + DissOrder = SurfChemReac%DissOrder(iReac) + nu = SurfChemReac%Prefactor(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) + Rate = SurfChemReac%Rate(iReac) + + ! Calculate the desorption parameters in dependence of coverage and temperature of the boundary + IF(nu.EQ.0.) THEN + nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage)*10.**(15) + END IF + + ! Boundary temperature + WallTemp = PartBound%WallTemp(BoundID) + E_act = SurfChemReac%E_initial(iReac) + Coverage * SurfChemReac%W_interact(iReac) + Rate = nu * Coverage**DissOrder * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol + ! Determine the desorption probability + ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID) = Rate * dt * SurfMol + ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID) + + IF(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID).GE.AdCount) THEN + ! Upper bound for the desorption number + ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID) = AdCount + END IF + + ! Update the adsorbtion and desorption count + IF(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID).GT.1.)THEN + IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) +! PartBound%AdCount(BoundID,iReactant) = PartBound%AdCount(BoundID,iReactant) - PartBound%DesCountIter(BoundID,iSpec) * DissOrder + ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) - ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)/SurfMol + END IF + END DO + ELSE +! PartBound%AdCount(BoundID, iSpec)= PartBound%AdCount(BoundID, iSpec) - PartBound%DesCountIter(BoundID, iSpec) * DissOrder + ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) = ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) - ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)/SurfMol + END IF +! PartBound%TotalCoverage(BoundID) = PartBound%TotalCoverage(BoundID) - PartBound%DesCountIter(BoundID, iSpec) * DissOrder/PartBound%nMol(BoundID) +! PartBound%DesCount(BoundID, iSpec) = PartBound%DesCount(BoundID, iSpec) + PartBound%DesCountIter(BoundID, iSpec) END IF - PartBound%TotalCoverage(BoundID) = PartBound%TotalCoverage(BoundID) - PartBound%DesCountIter(BoundID, iSpec) * DissOrder/PartBound%nMol(BoundID) - PartBound%DesCount(BoundID, iSpec) = PartBound%DesCount(BoundID, iSpec) + PartBound%DesCountIter(BoundID, iSpec) - END IF - ! Current boundary condition - currentBC = BoundID - PartsEmitted = 0 - NbrOfParticle = 0 - iPartTotal = 0 + PartBound%DesCount(BoundID, iSpec) = PartBound%DesCount(BoundID, iSpec) + ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID) + + ! Current boundary condition + currentBC = BoundID + PartsEmitted = 0 + NbrOfParticle = 0 + iPartTotal = 0 ! Loop over the side numbers - DO WHILE(INT(PartBound%DesCountIter(BoundID, iSpec)).GT.1) +! DO WHILE(INT(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)).GT.1) + IF (INT(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)).GT.1) THEN ! Random distribution of the particles on the surface - CALL RANDOM_NUMBER(RanNum) - iSide = INT(BCdata_auxSF(currentBC)%SideNumber * RanNum) - IF(iSide.GT.0) THEN ! Define the necessary variables - BCSideID=BCdata_auxSF(currentBC)%SideList(iSide) - ElemID = SideToElem(S2E_ELEM_ID,BCSideID) - iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) - globElemId = ElemID + offSetElem - SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) xyzNod(1:3) = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) @@ -193,45 +213,49 @@ SUBROUTINE ParticleSurfChemFlux() midpoint(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) ndist(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) - PartInsSubSide = 1 - PartBound%DesCountIter(BoundID, iSpec) = PartBound%DesCountIter(BoundID, iSpec) - 1. + PartInsSubSide = INT(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)) + ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID) = ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID) - INT(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)) NbrOfParticle = NbrOfParticle + PartInsSubSide - ALLOCATE(particle_positions(1:3)) + ALLOCATE(particle_positions(1:PartInsSubSide*3)) + iPart = 1 !-- Set Positions - Particle_pos(1:3) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) - particle_positions(1) = Particle_pos(1) - particle_positions(2) = Particle_pos(2) - particle_positions(3) = Particle_pos(3) + DO WHILE (iPart .LE. PartInsSubSide) + Particle_pos(1:3) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) + particle_positions(iPart*3-2) = Particle_pos(1) + particle_positions(iPart*3-1) = Particle_pos(2) + particle_positions(iPart*3 ) = Particle_pos(3) + iPart=iPart+1 + END DO !-- Fill Particle Informations (PartState, Partelem, etc.) ParticleIndexNbr = 1 - ParticleIndexNbr = PDM%nextFreePosition(iPartTotal + 1 + PDM%CurrentNextFreePosition) - IF (ParticleIndexNbr .ne. 0) THEN - iPart = 1 - PartState(1:3,ParticleIndexNbr) = particle_positions(3*(iPart-1)+1:3*(iPart-1)+3) - LastPartPos(1:3,ParticleIndexNbr)=PartState(1:3,ParticleIndexNbr) - PDM%ParticleInside(ParticleIndexNbr) = .TRUE. - PDM%dtFracPush(ParticleIndexNbr) = .TRUE. - PDM%IsNewPart(ParticleIndexNbr) = .TRUE. - PEM%GlobalElemID(ParticleIndexNbr) = globElemId - PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId !needed when ParticlePush is not executed, e.g. "delay" - iPartTotal = iPartTotal + 1 - ELSE - CALL abort(& - __STAMP__& - ,'ERROR in ParticleSurfaceflux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?') - END IF + DO iPart=1,PartInsSubSide + IF (iPart.EQ.1) THEN + ParticleIndexNbr = PDM%nextFreePosition(iPartTotal + 1 + PDM%CurrentNextFreePosition) + END IF + IF (ParticleIndexNbr .ne. 0) THEN + PartState(1:3,ParticleIndexNbr) = particle_positions(3*(iPart-1)+1:3*(iPart-1)+3) + PartState(1:3,ParticleIndexNbr) = particle_positions(3*(iPart-1)+1:3*(iPart-1)+3) + LastPartPos(1:3,ParticleIndexNbr)=PartState(1:3,ParticleIndexNbr) + PDM%ParticleInside(ParticleIndexNbr) = .TRUE. + PDM%dtFracPush(ParticleIndexNbr) = .TRUE. + PDM%IsNewPart(ParticleIndexNbr) = .TRUE. + PEM%GlobalElemID(ParticleIndexNbr) = globElemId + PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId !needed when ParticlePush is not executed, e.g. "delay" + iPartTotal = iPartTotal + 1 + ELSE + CALL abort(& + __STAMP__& + ,'ERROR in ParticleSurfaceflux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?') + END IF + END DO DEALLOCATE(particle_positions) CALL SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) PartsEmitted = PartsEmitted + PartInsSubSide END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) - ELSE - CYCLE - END IF - END DO ! iSide - + END IF ! iSide IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'Error 2 in ParticleSurfaceflux!') !----- 2b.: set remaining properties @@ -261,108 +285,132 @@ SUBROUTINE ParticleSurfChemFlux() CALL abort(& __STAMP__& ,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') - END IF - - - END DO ! iSF - END IF + END IF + END DO + END DO ! iSF + END IF END DO !iSpec CASE('LH') ! Choose the reactive boundaries DO iSF=1,SurfChemReac%NumOfBounds(iReac) BoundID = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC - + PartBound%LHCount(BoundID, iSpec) = 0.0 + DO iSide = 1, BCdata_auxSF(BoundID)%SideNumber + BCSideID=BCdata_auxSF(BoundID)%SideList(iSide) + ElemID = SideToElem(S2E_ELEM_ID,BCSideID) + iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) + globElemId = ElemID + offSetElem + SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + IF (SurfSideID.LT.1) THEN + CALL abort(& + __STAMP__& + ,'Chemical Surface Flux is not allowed on non-sampling sides!') + END IF ! Define the variables - Coverage = 1. - ! prefactor for the rate equation including the dependency on all coverage values - DO iVal=1,SIZE(SurfChemReac%Reactants(iReac,:)) + Coverage = 1. + ! prefactor for the rate equation including the dependency on all coverage values + DO iVal=1,SIZE(SurfChemReac%Reactants(iReac,:)) + + IF(SurfChemReac%Reactants(iReac,iVal).GT.0) THEN + iSpec = SurfChemReac%Reactants(iReac,iVal) + Coverage = Coverage * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) + END IF + END DO - IF(SurfChemReac%Reactants(iReac,iVal).NE.0) THEN - iSpec = SurfChemReac%Reactants(iReac,iVal) - Coverage = Coverage * PartBound%Coverage(BoundID, iSpec) + ! Calculate the number of molecules on the surface + IF(PartBound%LatticeVec(BoundID).GT.0.) THEN + ! Surface molecules in dependence of the occupancy of the unit cell + SurfMol = PartBound%MolPerUnitCell(BoundID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & + /(PartBound%LatticeVec(BoundID)*PartBound%LatticeVec(BoundID)) + ELSE + ! Alternative calculation by average number of molecules per area for a monolayer + SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) END IF - END DO - Area = PartBound%SurfArea(BoundID) - WallTemp = PartBound%WallTemp(BoundID) + WallTemp = PartBound%WallTemp(BoundID) - nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) + nu = SurfChemReac%Prefactor(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) - ! Calculate the rate in dependence of the temperature and coverage - Rate = nu * Coverage * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol + ! Calculate the rate in dependence of the temperature and coverage + Rate = nu * Coverage * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol + ! Is the LH routine in this way redundant for the consideration of multiple products s? + DO iVal=1,SIZE(SurfChemReac%Products(iReac,:)) + IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN + iSpec = SurfChemReac%Products(iReac,iVal) - ! Is the LH routine in this way redundant for the consideration of multiple products s? - DO iVal=1,SIZE(SurfChemReac%Products(iReac,:)) - IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN - iSpec = SurfChemReac%Products(iReac,iVal) + ChemDesorpWall(iSpec, SubP, SubQ, 1, SurfSideID) = Rate * dt * SurfMol + ChemDesorpWall(iSpec, SubP, SubQ, 1, SurfSideID) - ! Hot to determine the AdCount for the lower coverage values? - ! Or is the rate equation independent on the chosen molecule? - Monolayer = PartBound%MaxCoverage(BoundID, SurfChemReac%Reactants(iReac,1)) * PartBound%nMol(BoundID) - PartBound%LHCountIter(BoundID, iSpec) = Rate * dt * MonoLayer + PartBound%LHCountIter(BoundID, iSpec) + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + Coverage = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) + AdCount = Coverage * SurfMol + + !Check if enough reactants exist on the surface + IF(ChemDesorpWall(iSpec, SubP, SubQ, 1, SurfSideID) .GT. AdCount) THEN + ChemDesorpWall(iSpec, SubP, SubQ, 1, SurfSideID) = AdCount + END IF - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - AdCount = PartBound%AdCount(BoundID, iReactant) - - !Check if enough reactants exist on the surface - IF(PartBound%LHCountIter(BoundID, iSpec) .GT. AdCount) THEN - PartBound%LHCountIter(BoundID, iSpec) = AdCount END IF + END DO + ! Update the surface coverage values + IF(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID).GT.1.) THEN + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + ! PartBound%AdCount(BoundID, iReactant)= PartBound%AdCount(BoundID, iReactant) - PartBound%LHCountIter(BoundID, iSpec) + ChemWallProp(iReactant,SubP, SubQ, 1, SurfSideID) = ChemWallProp(iReactant,SubP, SubQ, 1, SurfSideID) - ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)/SurfMol + ! PartBound%Coverage(BoundID, iReactant)= PartBound%Coverage(BoundID, iReactant) - PartBound%LHCountIter(BoundID, iSpec)/PartBound%nMol(BoundID) + ! PartBound%TotalCoverage(BoundID) = PartBound%TotalCoverage(BoundID) - PartBound%LHCountIter(BoundID, iSpec)/PartBound%nMol(BoundID) + END IF + END DO END IF - END DO - - PartBound%LHCount(BoundID, iSpec) = PartBound%LHCount(BoundID, iSpec) + PartBound%LHCountIter(BoundID, iSpec) - - ! Current boundary condition - currentBC = BoundID - PartsEmitted = 0 - NbrOfParticle = 0 - iPartTotal = 0 - - ! Loop over the side numbers - DO WHILE(INT(PartBound%LHCountIter(BoundID, iSpec)).GT.1) - ! Random distributions of the particles on the surface - CALL RANDOM_NUMBER(RanNum) - iSide = INT(BCdata_auxSF(currentBC)%SideNumber * RanNum) - IF(iSide.GT.0.) THEN + + PartBound%LHCount(BoundID, iSpec) = PartBound%LHCount(BoundID, iSpec) + ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID) +! PartBound%LHCount(BoundID, iSpec) = PartBound%LHCount(BoundID, iSpec) + PartBound%LHCountIter(BoundID, iSpec) + + ! Current boundary condition + currentBC = BoundID + PartsEmitted = 0 + NbrOfParticle = 0 + iPartTotal = 0 + + IF (INT(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)).GT.1) THEN + ! Random distribution of the particles on the surface ! Define the necessary variables - BCSideID=BCdata_auxSF(currentBC)%SideList(iSide) - ElemID = SideToElem(S2E_ELEM_ID,BCSideID) - iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) - globElemId = ElemID + offSetElem - SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) xyzNod(1:3) = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) ! Number of additional particles to be inserted Node1 = jSample+1 - Node2 = jSample+2 + Node2 = jSample+2 ! Vector1 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node1-1) Vector2 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node2-1) midpoint(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) ndist(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) - PartInsSubSide = 1 - PartBound%LHCountIter(BoundID, iSpec) = PartBound%LHCountIter(BoundID, iSpec) -1. + PartInsSubSide = INT(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)) + ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID) = ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID) - INT(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)) NbrOfParticle = NbrOfParticle + PartInsSubSide - ALLOCATE(particle_positions(1:3)) + ALLOCATE(particle_positions(1:PartInsSubSide*3)) + iPart = 1 !-- Set Positions - Particle_pos(1:3) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) - particle_positions(1) = Particle_pos(1) - particle_positions(2) = Particle_pos(2) - particle_positions(3) = Particle_pos(3) + DO WHILE (iPart .LE. PartInsSubSide) + Particle_pos(1:3) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) + particle_positions(iPart*3-2) = Particle_pos(1) + particle_positions(iPart*3-1) = Particle_pos(2) + particle_positions(iPart*3 ) = Particle_pos(3) + END DO !-- Fill Particle Informations (PartState, Partelem, etc.) ParticleIndexNbr = 1 ParticleIndexNbr = PDM%nextFreePosition(iPartTotal + 1 + PDM%CurrentNextFreePosition) IF (ParticleIndexNbr .ne. 0) THEN - iPart = 1 PartState(1:3,ParticleIndexNbr) = particle_positions(3*(iPart-1)+1:3*(iPart-1)+3) LastPartPos(1:3,ParticleIndexNbr)=PartState(1:3,ParticleIndexNbr) PDM%ParticleInside(ParticleIndexNbr) = .TRUE. @@ -376,18 +424,12 @@ SUBROUTINE ParticleSurfChemFlux() __STAMP__& ,'ERROR in ParticleSurfaceflux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?') END IF - DEALLOCATE(particle_positions) CALL SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) PartsEmitted = PartsEmitted + PartInsSubSide - END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) - - ELSE - CYCLE - END IF - END DO ! iSide + END IF ! iSide IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'Error 2 in ParticleSurfaceflux!') !----- 2b.: set remaining properties @@ -412,35 +454,26 @@ SUBROUTINE ParticleSurfChemFlux() ! instead of an UpdateNextfreePosition we update the particleVecLength only - enough ?!? PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle - ! Sample Energies on Surfaces when particles are emitted from them IF (NbrOfParticle.NE.PartsEmitted) THEN - ! should be equal for including the following lines in tSurfaceFlux - CALL abort(& - __STAMP__& - ,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') - END IF - - END IF ! iProd .ne. 0 - END DO ! iVal in Products - ! Update the surface coverage of the reactants - - IF(PartBound%LHCountIter(BoundID, iSpec).GT.1.) THEN - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - PartBound%AdCount(BoundID, iReactant)= PartBound%AdCount(BoundID, iReactant) - PartBound%LHCountIter(BoundID, iSpec) - PartBound%Coverage(BoundID, iReactant)= PartBound%Coverage(BoundID, iReactant) - PartBound%LHCountIter(BoundID, iSpec)/PartBound%nMol(BoundID) - PartBound%TotalCoverage(BoundID) = PartBound%TotalCoverage(BoundID) - PartBound%LHCountIter(BoundID, iSpec)/PartBound%nMol(BoundID) + ! should be equal for including the following lines in tSurfaceFlux + CALL abort(& + __STAMP__& + ,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') END IF + END IF END DO - END IF - END DO ! iSF - + END DO ! iSF + END DO CASE DEFAULT END SELECT END DO ! iReac + +#if USE_MPI + CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win,MPI_COMM_SHARED) +#endif + END SUBROUTINE ParticleSurfChemFlux @@ -703,4 +736,4 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSide END SUBROUTINE SetSurfacefluxVelocities -END MODULE MOD_Particle_SurfChemFlux \ No newline at end of file +END MODULE MOD_Particle_SurfChemFlux diff --git a/src/particles/emission/particle_surface_flux_init.f90 b/src/particles/emission/particle_surface_flux_init.f90 index 942ac042d..2678211db 100644 --- a/src/particles/emission/particle_surface_flux_init.f90 +++ b/src/particles/emission/particle_surface_flux_init.f90 @@ -168,7 +168,7 @@ SUBROUTINE InitializeParticleSurfaceflux() CALL ReadInAndPrepareSurfaceFlux(MaxSurfacefluxBCs, nDataBC) ! Call to the reactive surfaces -CALL ReadInAndPrepareSurfChemFlux(nDataBC) +IF (SurfChemReac%NumOfReact.GT.0) CALL ReadInAndPrepareSurfChemFlux(nDataBC) #if USE_MPI CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoPoissonRounding,1,MPI_LOGICAL,MPI_LAND,PartMPI%COMM,iError) !set T if this is for all procs diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index b8f88787c..8257f4167 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -266,7 +266,7 @@ SUBROUTINE InitParticles() USE MOD_Mesh_Vars ,ONLY: nElems USE MOD_SurfaceModel_Porous ,ONLY: InitPorousBoundaryCondition USE MOD_Particle_Boundary_Sampling ,ONLY: InitParticleBoundarySampling -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac USE MOD_Particle_Boundary_Vars ,ONLY: PartBound USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod USE MOD_Particle_Vars ,ONLY: ParticlesInitIsDone,WriteMacroVolumeValues,WriteMacroSurfaceValues,nSpecies @@ -325,9 +325,6 @@ SUBROUTINE InitParticles() ! Insert the initial particles CALL InitialParticleInserting() -! Initialize particle surface flux to be performed per iteration -CALL SurfaceModel_Chemistry_Init() -CALL InitializeParticleSurfaceflux() ! Initialize volume sampling IF(useDSMC .OR. WriteMacroVolumeValues) THEN @@ -339,12 +336,17 @@ SUBROUTINE InitParticles() ! Initialize surface sampling / rotational periodic mapping ! (the following IF arguments have to be considered in FinalizeParticleBoundarySampling as well) -IF (WriteMacroSurfaceValues.OR.DSMC%CalcSurfaceVal.OR.(ANY(PartBound%Reactive)).OR.(nPorousBC.GT.0).OR.GEO%RotPeriodicBC) THEN +IF (WriteMacroSurfaceValues.OR.DSMC%CalcSurfaceVal.OR.(ANY(PartBound%Reactive)).OR.(nPorousBC.GT.0).OR.GEO%RotPeriodicBC.OR.(SurfChemReac%NumOfReact.GT.0)) THEN CALL InitParticleBoundarySampling() CALL InitParticleBoundaryRotPeriodic() CALL InitAdaptiveWallTemp() END IF +CALL SurfaceModel_Chemistry_Init() + +! Initialize particle surface flux to be performed per iteration +CALL InitializeParticleSurfaceflux() + ! Initialize porous boundary condition (requires BCdata_auxSF and SurfMesh from InitParticleBoundarySampling) IF(nPorousBC.GT.0) CALL InitPorousBoundaryCondition() @@ -397,6 +399,7 @@ SUBROUTINE InitializeVariables() USE MOD_PICInit ,ONLY: InitPIC USE MOD_PICDepo_Vars ,ONLY: DoDeposition USE MOD_PICInterpolation_Vars ,ONLY: DoInterpolation +USE MOD_SurfaceModel_Vars ,ONLY: SurfChemReac #if USE_MPI USE MOD_Particle_MPI_Emission ,ONLY: InitEmissionComm USE MOD_Particle_MPI_Halo ,ONLY: IdentifyPartExchangeProcs @@ -428,6 +431,7 @@ SUBROUTINE InitializeVariables() ! initialization of surface model flags DoPoissonRounding = GETLOGICAL('Particles-DoPoissonRounding','.FALSE.') DoTimeDepInflow = GETLOGICAL('Particles-DoTimeDepInflow','.FALSE.') +SurfChemReac%NumOfReact = GETINT('Surface-NumOfReactions', '0') DelayTime = GETREAL('Part-DelayTime','0.') !--- Read Manual Time Step: Old variable name still supported ManualTimeStepParticle = GETREAL('Particles-ManualTimeStep') @@ -1475,4 +1479,4 @@ END SUBROUTINE InitRandomSeed END MODULE MOD_ParticleInit - \ No newline at end of file + diff --git a/src/particles/particle_mesh/particle_surfaces_vars.f90 b/src/particles/particle_mesh/particle_surfaces_vars.f90 index 84475380b..5f93ed771 100644 --- a/src/particles/particle_mesh/particle_surfaces_vars.f90 +++ b/src/particles/particle_mesh/particle_surfaces_vars.f90 @@ -114,7 +114,7 @@ MODULE MOD_Particle_Surfaces_Vars REAL :: Vectors(3,3) ! vectors from xyzNod to the 3 other corners of side END TYPE tTriaSideGeo TYPE tBCdata_auxSF - INTEGER :: SideNumber ! Number of Particles in Sides in SurfacefluxBC + INTEGER :: SideNumber ! Number of Sides in SurfacefluxBC REAL :: GlobalArea, LocalArea ! Sum of global and local tria-areas INTEGER , ALLOCATABLE :: SideList(:) ! List of Sides in BC (1:SideNumber) TYPE(tTriaSwapGeo) , ALLOCATABLE :: TriaSwapGeo(:,:,:) ! data for tria-swapping in surfflux (:,:,1:SideNumber) diff --git a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 index 634b18255..096729d10 100644 --- a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 +++ b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 @@ -35,7 +35,7 @@ MODULE MOD_Particle_MPI_Boundary_Sampling END INTERFACE PUBLIC :: InitSurfCommunication -PUBLIC :: ExchangeSurfData +PUBLIC :: ExchangeSurfData, ExchangeChemSurfData PUBLIC :: FinalizeSurfCommunication !=================================================================================================================================== @@ -369,6 +369,304 @@ SUBROUTINE InitSurfCommunication() END SUBROUTINE InitSurfCommunication +SUBROUTINE ExchangeChemSurfData() +!=================================================================================================================================== +! exchange the surface data +!> 1) collect the information on the local compute-node +!> 2) compute-node leaders with sampling sides in their halo region and the original node communicate the sampling information +!> 3) compute-node leaders ensure synchronization of shared arrays on their node +!!=================================================================================================================================== +! MODULES ! +!----------------------------------------------------------------------------------------------------------------------------------! +USE MOD_Globals +USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC +USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED,MPI_COMM_LEADERS_SURF, nComputeNodeProcessors +USE MOD_MPI_Shared_Vars ,ONLY: nSurfLeaders,myComputeNodeRank,mySurfRank +USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode, PartBound +USE MOD_Particle_Boundary_Vars ,ONLY: SurfSampSize,nSurfSample +USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfTotalSides +USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide +USE MOD_Particle_Boundary_Vars ,ONLY: SurfMapping,CalcSurfaceImpact +USE MOD_Particle_Boundary_Vars ,ONLY: SampWallState,SampWallState_Shared,SampWallState_Shared_Win +USE MOD_Particle_Boundary_Vars ,ONLY: SampWallPumpCapacity,SampWallPumpCapacity_Shared,SampWallPumpCapacity_Shared_Win +USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactEnergy,SampWallImpactEnergy_Shared,SampWallImpactEnergy_Shared_Win +USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactVector,SampWallImpactVector_Shared,SampWallImpactVector_Shared_Win +USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactAngle ,SampWallImpactAngle_Shared ,SampWallImpactAngle_Shared_Win +USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactNumber,SampWallImpactNumber_Shared,SampWallImpactNumber_Shared_Win +USE MOD_Particle_MPI_Vars ,ONLY: SurfSendBuf,SurfRecvBuf +USE MOD_Particle_Vars ,ONLY: nSpecies +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, ChemWallProp, ChemSampWall, ChemSampWall_Shared, ChemWallProp_Shared_Win +USE MOD_SurfaceModel_Vars ,ONLY: ChemSampWall_Shared_Win +USE MOD_Particle_Boundary_vars ,ONLY: SurfSideArea_Shared, SurfSide2GlobalSide +USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------! +! INPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------! +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +REAL :: SurfMol +INTEGER :: iProc,SideID, firstSide, lastSide, GlobalSideID, locBCID, iSide, iSpec +INTEGER :: iPos,p,q +INTEGER :: MessageSize,iSurfSide,SurfSideID +INTEGER :: nValues +INTEGER :: RecvRequest(0:nSurfLeaders-1),SendRequest(0:nSurfLeaders-1) +INTEGER :: iter +!INTEGER :: iPos,p,q,iProc,iReact +!INTEGER :: recv_status_list(1:MPI_STATUS_SIZE,1:SurfCOMM%nMPINeighbors) +!=================================================================================================================================== +! nodes without sampling surfaces do not take part in this routine +IF (.NOT.SurfOnNode) RETURN + +! collect the information from the proc-local shadow arrays in the compute-node shared array +MessageSize = nSpecies*1*nSurfSample*nSurfSample*nComputeNodeSurfTotalSides +IF (myComputeNodeRank.EQ.0) THEN + CALL MPI_REDUCE(ChemSampWall,ChemSampWall_Shared,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_SHARED,IERROR) +ELSE + CALL MPI_REDUCE(ChemSampWall,0 ,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_SHARED,IERROR) +ENDIF + +CALL BARRIER_AND_SYNC(ChemSampWall_Shared_Win ,MPI_COMM_SHARED) +#if USE_MPI +firstSide = INT(REAL( myComputeNodeRank *nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors))+1 +lastSide = INT(REAL((myComputeNodeRank+1)*nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors)) +#else +firstSide = 1 +lastSide = nSurfTotalSides +#endif /*USE_MPI*/ + +iter = 0 + +DO iSide = firstSide, lastSide + GlobalSideID = SurfSide2GlobalSide(SURF_SIDEID,iSide) + locBCID = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,GlobalSideID)) + !SurfMol = PartBound%MolPerUnitCell(locBCID)*SurfSideArea_Shared(1,1,iSide)/(PartBound%LatticeVec(locBCID)*PartBound%LatticeVec(locBCID)) + DO iSpec =1, nSpecies + IF((locBCID.EQ.1).AND.(iSpec.EQ.4)) THEN + iter = iter + 1 + END IF + ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + PartBound%LatticeVec(locBCID)*PartBound%LatticeVec(locBCID)*& + ChemSampWall_Shared(iSpec,1,:,:,iSide)/(SurfSideArea_Shared(:,:,iSide) * PartBound%MolPerUnitCell(locBCID)) + END DO + ChemSampWall_Shared(:,:,:,:,iSide) = 0.0 +END DO +ChemSampWall = 0.0 +CALL BARRIER_AND_SYNC(ChemSampWall_Shared_Win ,MPI_COMM_SHARED) +CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win ,MPI_COMM_SHARED) + +! IF (myComputeNodeRank.EQ.0) THEN +! !DO iSpec = 1,nSpecies +! iSpec = 4 +! print*, 'coverage max', iSpec, MAXVAL(ChemWallProp(iSpec, 1, 1,1,:)) +! print*, 'coverage mean', iSpec, SUM(ChemWallProp(iSpec, 1, 1,1,:))/iter +! ! END DO +! END IF + +! prepare buffers for surf leader communication +!IF (myComputeNodeRank.EQ.0) THEN +! nValues = SurfSampSize*nSurfSample**2 +! ! Sampling of impact energy for each species (trans, rot, vib, elec), impact vector (x,y,z), angle and number: Add 9*nSpecies +! ! to the buffer length +! IF(CalcSurfaceImpact) nValues=nValues+9*nSpecies +! IF(nPorousBC.GT.0) nValues = nValues + 1 + +! ! open receive buffer +! DO iProc = 0,nSurfLeaders-1 +! ! ignore myself +! IF (iProc.EQ.mySurfRank) CYCLE + +! ! Only open recv buffer if we are expecting sides from this leader node +! IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE + +! ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc +! MessageSize = SurfMapping(iProc)%nRecvSurfSides * nValues +! CALL MPI_IRECV( SurfRecvBuf(iProc)%content & +! , MessageSize & +! , MPI_DOUBLE_PRECISION & +! , iProc & +! , 1209 & +! , MPI_COMM_LEADERS_SURF & +! , RecvRequest(iProc) & +! , IERROR) +! END DO ! iProc + +! ! build message +! DO iProc = 0,nSurfLeaders-1 +! ! Ignore myself +! IF (iProc .EQ. mySurfRank) CYCLE + +! ! Only assemble message if we are expecting sides to send to this leader node +! IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE + +! ! Nullify everything +! iPos = 0 +! SurfSendBuf(iProc)%content = 0. + +! DO iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides +! SideID = SurfMapping(iProc)%SendSurfGlobalID(iSurfSide) +! SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + +! ! Assemble message +! DO q = 1,nSurfSample +! DO p = 1,nSurfSample +! SurfSendBuf(iProc)%content(iPos+1:iPos+SurfSampSize) = SampWallState_Shared(:,p,q,SurfSideID) +! iPos = iPos + SurfSampSize +! ! Sampling of impact energy for each species (trans, rot, vib), impact vector (x,y,z), angle and number of impacts +! IF (CalcSurfaceImpact) THEN +! ! Add average impact energy for each species (trans, rot, vib) +! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactEnergy_Shared(:,1,p,q,SurfSideID) +! iPos = iPos + nSpecies +! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactEnergy_Shared(:,2,p,q,SurfSideID) +! iPos=iPos + nSpecies +! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactEnergy_Shared(:,3,p,q,SurfSideID) +! iPos=iPos + nSpecies +! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactEnergy_Shared(:,4,p,q,SurfSideID) +! iPos=iPos + nSpecies + +! ! Add average impact vector (x,y,z) for each species +! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactVector_Shared(:,1,p,q,SurfSideID) +! iPos = iPos + nSpecies +! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactVector_Shared(:,2,p,q,SurfSideID) +! iPos = iPos + nSpecies +! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactVector_Shared(:,3,p,q,SurfSideID) +! iPos = iPos + nSpecies + +! ! Add average impact angle for each species +! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactAngle_Shared(:,p,q,SurfSideID) +! iPos = iPos + nSpecies + +! ! Add number of particle impacts +! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactNumber_Shared(:,p,q,SurfSideID) +! iPos = iPos + nSpecies +! END IF ! CalcSurfaceImpact +! END DO ! p=0,nSurfSample +! END DO ! q=0,nSurfSample +! IF(nPorousBC.GT.0) THEN +! SurfSendBuf(iProc)%content(iPos+1:iPos+1) = SampWallPumpCapacity_Shared(SurfSideID) +! iPos = iPos + 1 +! END IF + +! SampWallState_Shared(:,:,:,SurfSideID)=0. +! ! Sampling of impact energy for each species (trans, rot, vib), impact vector (x,y,z), angle and number of impacts +! IF (CalcSurfaceImpact) THEN +! SampWallImpactEnergy_Shared(:,:,:,:,SurfSideID) = 0. +! SampWallImpactVector_Shared(:,:,:,:,SurfSideID) = 0. +! SampWallImpactAngle_Shared (:,:,:,SurfSideID) = 0. +! SampWallImpactNumber_Shared(:,:,:,SurfSideID) = 0. +! END IF ! CalcSurfaceImpact +! IF(nPorousBC.GT.0) THEN +! SampWallPumpCapacity_Shared(SurfSideID) = 0. +! END IF +! END DO ! iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides +! END DO + +! ! send message +! DO iProc = 0,nSurfLeaders-1 +! ! ignore myself +! IF (iProc.EQ.mySurfRank) CYCLE + +! ! Only open recv buffer if we are expecting sides from this leader node +! IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE + +! ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc +! MessageSize = SurfMapping(iProc)%nSendSurfSides * nValues +! CALL MPI_ISEND( SurfSendBuf(iProc)%content & +! , MessageSize & +! , MPI_DOUBLE_PRECISION & +! , iProc & +! , 1209 & +! , MPI_COMM_LEADERS_SURF & +! , SendRequest(iProc) & +! , IERROR) +! END DO ! iProc + +! ! Finish received number of sampling surfaces +! DO iProc = 0,nSurfLeaders-1 +! ! ignore myself +! IF (iProc.EQ.mySurfRank) CYCLE + +! IF (SurfMapping(iProc)%nSendSurfSides.NE.0) THEN +! CALL MPI_WAIT(SendRequest(iProc),MPIStatus,IERROR) +! IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) +! END IF + +! IF (SurfMapping(iProc)%nRecvSurfSides.NE.0) THEN +! CALL MPI_WAIT(RecvRequest(iProc),MPIStatus,IERROR) +! IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) +! END IF +! END DO ! iProc + +! ! add data do my list +! DO iProc = 0,nSurfLeaders-1 +! ! ignore myself +! IF (iProc.EQ.mySurfRank) CYCLE + +! ! Only open recv buffer if we are expecting sides from this leader node +! IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE + +! iPos=0 +! DO iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides +! SideID = SurfMapping(iProc)%RecvSurfGlobalID(iSurfSide) +! SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + +! DO q=1,nSurfSample +! DO p=1,nSurfSample +! SampWallState_Shared(:,p,q,SurfSideID) = SampWallState_Shared(:,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+SurfSampSize) +! iPos = iPos + SurfSampSize +! ! Sampling of impact energy for each species (trans, rot, vib), impact vector (x,y,z) and angle +! IF(CalcSurfaceImpact)THEN +! ! Add average impact energy for each species (trans, rot, vib) +! SampWallImpactEnergy_Shared(:,1,p,q,SurfSideID) = SampWallImpactEnergy_Shared(:,1,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) +! iPos = iPos + nSpecies +! SampWallImpactEnergy_Shared(:,2,p,q,SurfSideID) = SampWallImpactEnergy_Shared(:,2,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) +! iPos = iPos + nSpecies +! SampWallImpactEnergy_Shared(:,3,p,q,SurfSideID) = SampWallImpactEnergy_Shared(:,3,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) +! iPos = iPos + nSpecies +! SampWallImpactEnergy_Shared(:,4,p,q,SurfSideID) = SampWallImpactEnergy_Shared(:,4,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) +! iPos = iPos + nSpecies +! ! Add average impact vector (x,y,z) for each species +! SampWallImpactVector_Shared(:,1,p,q,SurfSideID) = SampWallImpactVector_Shared(:,1,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) +! iPos = iPos + nSpecies +! SampWallImpactVector_Shared(:,2,p,q,SurfSideID) = SampWallImpactVector_Shared(:,2,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) +! iPos = iPos + nSpecies +! SampWallImpactVector_Shared(:,3,p,q,SurfSideID) = SampWallImpactVector_Shared(:,3,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) +! iPos = iPos + nSpecies +! ! Add average impact angle for each species +! SampWallImpactAngle_Shared(:,p,q,SurfSideID) = SampWallImpactAngle_Shared(:,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) +! iPos = iPos + nSpecies +! ! Add number of particle impacts +! SampWallImpactNumber_Shared(:,p,q,SurfSideID) = SampWallImpactNumber_Shared(:,p,q,SurfSideID) & +! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) +! iPos = iPos + nSpecies +! END IF ! CalcSurfaceImpact +! END DO ! p = 0,nSurfSample +! END DO ! q = 0,nSurfSample +! IF(nPorousBC.GT.0) THEN +! SampWallPumpCapacity_Shared(SurfSideID) = SurfRecvBuf(iProc)%content(iPos+1) +! iPos = iPos + 1 +! END IF +! END DO ! iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides +! ! Nullify buffer +! SurfRecvBuf(iProc)%content = 0. +! END DO ! iProc +!END IF + +! ensure synchronization on compute node +!CALL BARRIER_AND_SYNC(SampWallState_Shared_Win ,MPI_COMM_SHARED) + +END SUBROUTINE ExchangeChemSurfData + SUBROUTINE ExchangeSurfData() !=================================================================================================================================== diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index c048b51c4..8a8ea2245 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -54,10 +54,6 @@ SUBROUTINE DefineParametersSurfaceChemistry() , numberedmulti=.TRUE.) CALL prms%CreateIntOption( 'Surface-Reaction[$]-Inhibition','Inhibition/Coadsorption behaviour due to other reactions', & '0', numberedmulti=.TRUE.) -!CALL prms%CreateRealOption( 'Surface-Reaction[$]-ReactProbability', & -! 'TODO', '0.' , numberedmulti=.TRUE.) -! CALL prms%CreateRealOption( 'Surface-Reaction[$]-RecombinationCoefficient', & -! 'TODO', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-StickingCoefficient', & 'TODO', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-DissOrder', & @@ -93,8 +89,16 @@ SUBROUTINE SurfaceModel_Chemistry_Init() USE MOD_ReadInTools USE MOD_DSMC_Vars ,ONLY: SpecDSMC USE MOD_PARTICLE_Vars ,ONLY: nSpecies -USE MOD_Particle_Boundary_Vars ,ONLY: nPartBound, PartBound +USE MOD_Mesh_Vars ,ONLY: SideToElem, offsetElem +USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID +USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared +USE MOD_Particle_Boundary_Vars USE MOD_SurfaceModel_Vars +USE MOD_Particle_Surfaces_Vars +#if USE_MPI +USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED, myComputeNodeRank +USE MOD_MPI_Shared +#endif ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -105,11 +109,16 @@ SUBROUTINE SurfaceModel_Chemistry_Init() ! LOCAL VARIABLES CHARACTER(LEN=3) :: hilf INTEGER :: iReac, iReac2, iSpec, iPart -INTEGER :: ReadInNumOfReact, ReadInNumOfRecomb +INTEGER :: ReadInNumOfReact +INTEGER :: firstSide, lastSide +INTEGER :: iSF, iSide, SideID, iBC, SurfSideID +INTEGER :: BCSideID, ElemID, iLocSide +INTEGER :: globElemId +INTEGER :: GlobalSideID +INTEGER :: SurfNumOfReac REAL, ALLOCATABLE :: StoichCoeff(:,:) !=================================================================================================================================== -SurfChemReac%NumOfReact = GETINT('Surface-NumOfReactions', '0') IF(SurfChemReac%NumOfReact.LE.0) THEN RETURN END IF @@ -118,16 +127,6 @@ SUBROUTINE SurfaceModel_Chemistry_Init() DoChemSurface = .TRUE. END IF SWRITE(*,*) '| Number of considered reaction paths on Surfaces: ', SurfChemReac%NumOfReact - -! RecombModel%NumOfReact = GETINT('Surface-NumOfRecombinations', '0') -! IF(RecombModel%NumOfReact.LE.0) THEN -! RETURN -! END IF -! ReadInNumOfRecomb = RecombModel%NumOfReact -! IF(ReadInNumOfRecomb.GT.0) THEN -! DoCatSurface = .TRUE. -! END IF -! SWRITE(*,*) '| Number of considered recombiantion paths on Surfaces: ', RecombModel%NumOfReact !---------------------------------------------------------------------------------------------------------------------------------- ALLOCATE(StoichCoeff(nSpecies,2)) ALLOCATE(SurfChemReac%ReactType(SurfChemReac%NumOfReact)) @@ -138,8 +137,6 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%Products = 0 ALLOCATE(SurfChemReac%Inhibition(SurfChemReac%NumOfReact)) SurfChemReac%Inhibition = 0 -!ALLOCATE(SurfChemReac%ReactProb(SurfChemReac%NumOfReact)) -!SurfChemReac%ReactProb = 0.0 ALLOCATE(SurfChemReac%EForm(SurfChemReac%NumOfReact)) SurfChemReac%EForm = 0.0 ALLOCATE(SurfChemReac%BoundisChemSurf(nPartBound)) @@ -175,20 +172,6 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%ArrheniusEnergy = 0.0 ALLOCATE(SurfChemReac%Prefactor(SurfChemReac%NumOfReact)) SurfChemReac%Prefactor = 0.0 - -! ! Simple recombination model -! ALLOCATE(RecombModel%ReactType(RecombModel%NumOfReact)) -! RecombModel%ReactType = '0' -! ALLOCATE(RecombModel%Reactants(RecombModel%NumOfReact,2)) -! RecombModel%Reactants = 0 -! ALLOCATE(RecombModel%Products(RecombModel%NumOfReact,2)) -! RecombModel%Products = 0 -! ALLOCATE(RecombModel%RecombCoeff(RecombModel%NumOfReact)) -! RecombModel%RecombCoeff = 0.0 -! ALLOCATE(RecombModel%BoundisCatSurf(nPartBound)) -! ALLOCATE(RecombModel%NumOfBounds(RecombModel%NumOfReact)) -! ALLOCATE(RecombModel%BoundMap(RecombModel%NumOfReact)) - DO iReac = 1, ReadInNumOfReact WRITE(UNIT=hilf,FMT='(I0)') iReac @@ -227,9 +210,16 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%E_initial(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','1.') SurfChemReac%DissOrder(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-DissOrder','1.') + ! Convert the prefactor from absolute to coverage values for associative desorption + IF(SurfChemReac%DissOrder(iReac).EQ.2) THEN + SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) + END IF + CASE('LH') SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') + ! Convert the prefactor to coverage dependent values + SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) CASE('ER') SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') @@ -239,38 +229,51 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SWRITE(*,*) ' Reaction Type does not exists: ', TRIM(SurfChemReac%ReactType(iReac)) CALL abort(__STAMP__,'Surface Reaction Type does not exist') END SELECT - - ! Total Collision Energy: Arrhenius-based chemistry model - ! SurfChemReac%ReactProb(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-ReactProbability','0') SurfChemReac%EForm(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-FormationEnergy','0') END DO -! ! Simple recombination model -! DO iReac = 1, ReadInNumOfRecomb -! WRITE(UNIT=hilf,FMT='(I0)') iReac -! RecombModel%ReactType(iReac) = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-Type')) +ALLOCATE( ChemSampWall(1:nSpecies,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) +ALLOCATE(ChemDesorpWall(1:nSpecies,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) +ChemDesorpWall = 0.0 +ChemSampWall = 0.0 +#if USE_MPI + CALL Allocate_Shared((/nSpecies,1,nSurfSample,nSurfSample,nComputeNodeSurfTotalSides/),ChemSampWall_Shared_Win,ChemSampWall_Shared) + CALL MPI_WIN_LOCK_ALL(0,ChemSampWall_Shared_Win,IERROR) + IF (myComputeNodeRank.EQ.0) THEN + ChemSampWall_Shared = 0. + END IF + CALL BARRIER_AND_SYNC(ChemSampWall_Shared_Win,MPI_COMM_SHARED) + + CALL Allocate_Shared((/nSpecies,1,nSurfSample,nSurfSample,nComputeNodeSurfTotalSides/),ChemWallProp_Shared_Win,ChemWallProp_Shared) + CALL MPI_WIN_LOCK_ALL(0,ChemWallProp_Shared_Win,IERROR) + ChemWallProp => ChemWallProp_Shared + IF (myComputeNodeRank.EQ.0) THEN + ChemWallProp = 0. -! RecombModel%Reactants(iReac,:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Reactants',2,'0,0') -! RecombModel%Products(iReac,:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Products',2,'0,0') -! RecombModel%NumOfBounds(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-NumOfBoundaries','0') -! IF (RecombModel%NumOfBounds(iReac).EQ.0) THEN -! CALL abort(& -! __STAMP__& -! ,'ERROR: At least one boundary must be defined for each surface reaction!',iReac) -! END IF -! ALLOCATE(RecombModel%BoundMap(iReac)%Boundaries(RecombModel%NumOfBounds(iReac))) -! RecombModel%BoundMap(iReac)%Boundaries = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Boundaries', & -! RecombModel%NumOfBounds(iReac)) -! ! Define the surface model -! PartBound%SurfaceModel(RecombModel%BoundMap(iReac)%Boundaries) = 30 + DO iSide = 1, nComputeNodeSurfTotalSides + ! get global SideID. This contains only nonUniqueSide, no special mortar treatment required + SideID = SurfSide2GlobalSide(SURF_SIDEID,iSide) + iBC = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) + DO iSpec = 1, nSpecies + ChemWallProp(iSpec,1,:,:,iSide) = PartBound%CoverageIni(iBC, iSpec) + END DO + END DO -! DO iReac2 = 1, RecombModel%NumOfBounds(iReac) -! RecombModel%BoundisCatSurf(RecombModel%BoundMap(iReac)%Boundaries(iReac2)) = .TRUE. -! END DO + END IF + CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win,MPI_COMM_SHARED) +#else + ALLOCATE(ChemWallProp(1:nSpecies,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) + ChemWallProp = 0.0 + DO iSide = 1, nComputeNodeSurfTotalSides + ! get global SideID. This contains only nonUniqueSide, no special mortar treatment required + SideID = SurfSide2GlobalSide(SURF_SIDEID,iSide) + iBC = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) + DO iSpec = 1, nSpecies + ChemWallProp(iSpec,1,:,:,iSide) = PartBound%CoverageIni(iBC, iSpec) + END DO + END DO -! RecombModel%RecombCoeff(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-RecombinationCoefficient','0') - -! END DO +#endif /*USE_MPI*/ END SUBROUTINE SurfaceModel_Chemistry_Init diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index 180b5726a..c358b6f51 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -47,10 +47,11 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) #if USE_MPI USE MOD_Globals ,ONLY: myrank #endif /*USE_MPI*/ +USE MOD_Globals_Vars ,ONLY : PI, BoltzmannConst USE MOD_Particle_Vars ,ONLY: PartSpecies,WriteMacroSurfaceValues,Species,usevMPF,PartMPF USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod, TrackInfo -USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, dXiEQ_SurfSample -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac !, RecombModel +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, dXiEQ_SurfSample,SurfSideArea_Shared +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac , ChemWallProp, ChemSampWall !, RecombModel USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared, BoundsOfElem_Shared USE MOD_Particle_Vars ,ONLY: PDM, LastPartPos,PartState USE MOD_Particle_Vars ,ONLY: UseCircularInflow @@ -61,7 +62,10 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) USE MOD_SEE ,ONLY: SecondaryElectronEmission USE MOD_SurfaceModel_Porous ,ONLY: PorousBoundaryTreatment USE MOD_SurfaceModel_Chemistry +USE MOD_DSMC_Vars ,ONLY: SpecDSMC USE MOD_Particle_Boundary_Tools ,ONLY: CalcWallSample +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly +USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD USE MOD_PICDepo_Tools ,ONLY: DepositParticleOnNodes USE MOD_part_operations ,ONLY: RemoveParticle, CreateParticle USE MOD_part_tools ,ONLY: CalcRadWeightMPF, VeloFromDistribution @@ -103,6 +107,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) REAL :: WallTemp REAL :: nu, E_act, Rate, Prob REAL :: NewPos(1:3) +REAL :: SurfMol REAL :: tang1(1:3), tang2(1:3), WallVelo(1:3), BoundsOfElemCenter(1:3), NewVelo(3) REAL,PARAMETER :: eps=1e-6 REAL,PARAMETER :: eps2=1.0-eps @@ -114,7 +119,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) INTEGER :: NewPartID INTEGER :: SurfNumOfReac INTEGER :: iNewPart -INTEGER :: SurfNumOfRecomb +INTEGER :: SurfNumOfRecomb, SubP, SubQ !=================================================================================================================================== iBC = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) @@ -153,7 +158,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) ! Counter for surface analyze IF(CalcSurfCollCounter) SurfAnalyzeCount(PartSpecImpact) = SurfAnalyzeCount(PartSpecImpact) + 1 ! Sampling -DoSample = (DSMC%CalcSurfaceVal.AND.SamplingActive).OR.(DSMC%CalcSurfaceVal.AND.WriteMacroSurfaceValues) +DoSample = (DSMC%CalcSurfaceVal.AND.SamplingActive).OR.(DSMC%CalcSurfaceVal.AND.WriteMacroSurfaceValues).OR.(SurfChemReac%NumOfReact.GT.0) IF(DoSample) THEN IF (TrackingMethod.EQ.TRIATRACKING) THEN TrackInfo%p = 1 ; TrackInfo%q = 1 @@ -186,13 +191,25 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) CALL MaxwellScattering(PartID,SideID,n_Loc,SpecularReflectionOnly) !----------------------------------------------------------------------------------------------------------------------------------- CASE(20) - + SubP = TrackInfo%p + SubQ = TrackInfo%q InteractionType = 'None' StickCoeff = 0.0 Prob = 0.0 speciesID = PartSpecies(PartID) SurfNumOfReac = SurfChemReac%NumOfReact + + ! Calculate the number of molecules on the surface + IF(PartBound%LatticeVec(locBCID).GT.0.) THEN + ! Surface molecules in dependence of the occupancy of the unit cell + SurfMol = PartBound%MolPerUnitCell(locBCID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & + /(PartBound%LatticeVec(locBCID)*PartBound%LatticeVec(locBCID)) + ELSE + ! Alternative calculation by average number of molecules per area for a monolayer + SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) + END IF + DO iReac = 1, SurfNumOfReac SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) @@ -206,16 +223,20 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN iProd = SurfChemReac%Products(iReac,iValProd) - Coverage = PartBound%Coverage(locBCID, iProd) +! Coverage = PartBound%Coverage(locBCID, iProd) + Coverage = ChemWallProp(iProd,1,SubP,SubQ,SurfSideID) END IF END DO ELSE - Coverage = PartBound%Coverage(locBCID, speciesID) + Coverage = ChemWallProp(speciesID,1,SubP,SubQ,SurfSideID) END IF + ! WRITE(*,*) speciesID + ! WRITE(*,*) 'Coverage', Coverage + ! Definition of the variables MaxCoverage = PartBound%MaxCoverage(locBCID,speciesID) - TotalCoverage = PartBound%TotalCoverage(locBCID) + TotalCoverage = SUM(ChemWallProp(:,1,SubP, SubQ, SurfSideID)) DissOrder = SurfChemReac%DissOrder(iReac) S_0 = SurfChemReac%S_initial(iReac) EqConstant = SurfChemReac%EqConstant(iReac) @@ -226,13 +247,15 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) IF(SurfChemReac%Inhibition(iReac).NE.0) THEN iCoadsReac = SurfChemReac%Inhibition(iReac) iCoadsSpec = SurfChemReac%Reactants(iCoadsReac,1) - CoAds_Coverage = PartBound%Coverage(locBCID, iCoadsSpec) + CoAds_Coverage = ChemWallProp(iCoadsSpec,1,SubP, SubQ, SurfSideID) CoAds_MaxCov = PartBound%MaxCoverage(locBCID,iCoadsSpec) Theta = 1.0 - Coverage/MaxCoverage - CoAds_Coverage/CoAds_MaxCov ELSE Theta = 1.0 - Coverage/MaxCoverage END IF + !WRITE(*,*) 'Theta', Theta + ! Check whether the maximum coverage value is reached: IF(Theta.GE.0.0 .AND. TotalCoverage.LT.1.0) THEN Theta = Theta**DissOrder @@ -243,6 +266,8 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) StickCoeff = 0.0 END IF + ! WRITE(*,*) 'StickCoeff', StickCoeff + END IF ! Eley-Rideal reaction mechanism @@ -260,7 +285,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - Coverage = PartBound%Coverage(locBCID, iReactant) + Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) END IF END DO @@ -301,24 +326,27 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN iProd = SurfChemReac%Reactants(iReac,iValProd) - PartBound%AdCount(locBCID, iProd) = PartBound%AdCount(locBCID, iProd) + DissOrder * MPF - PartBound%Coverage(locBCID, iProd) = PartBound%Coverage(locBCID, iProd) + DissOrder * MPF / PartBound%nMol(locBCID) + ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) + DissOrder * MPF +! PartBound%AdCount(locBCID, iProd) = PartBound%AdCount(locBCID, iProd) + DissOrder * MPF +! PartBound%Coverage(locBCID, iProd) = PartBound%Coverage(locBCID, iProd) + DissOrder * MPF / PartBound%nMol(locBCID) END IF END DO ELSE - PartBound%AdCount(locBCID, speciesID) = PartBound%AdCount(locBCID, speciesID) + DissOrder * MPF - PartBound%Coverage(locBCID, speciesID) = PartBound%Coverage(locBCID, speciesID) + DissOrder * MPF / PartBound%nMol(locBCID) + ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) + DissOrder * MPF + + PartBound%AdCount(locBCID, speciesID) = PartBound%AdCount(locBCID, speciesID) + 1. +! PartBound%AdCount(locBCID, speciesID) = PartBound%AdCount(locBCID, speciesID) + DissOrder * MPF +! PartBound%Coverage(locBCID, speciesID) = PartBound%Coverage(locBCID, speciesID) + DissOrder * MPF / PartBound%nMol(locBCID) END IF - PartBound%TotalCoverage(locBCID) = PartBound%TotalCoverage(locBCID) + DissOrder * MPF/PartBound%nMol(locBCID) +! PartBound%TotalCoverage(locBCID) = PartBound%TotalCoverage(locBCID) + DissOrder * MPF/PartBound%nMol(locBCID) CASE('ER') CALL RemoveParticle(PartID) MPF = Species(speciesID)%MacroParticleFactor ! Create the Eley-Rideal reaction product - SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) - TempErgy = WallTemp + TempErgy = SQRT(2*BoltzmannConst*WallTemp/Species(speciesID)%MassIC) WallVelo = PartBound%WallVelo(1:3,locBCID) CALL OrthoNormVec(n_loc,tang1,tang2) @@ -334,17 +362,21 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN iProd = SurfChemReac%Products(iReac,iValProd) - PartBound%ERCount(locBCID, iProd) = PartBound%ERCount(locBCID, iProd) + 1.0 * MPF + ! PartBound%ERCount(locBCID, iProd) = PartBound%ERCount(locBCID, iProd) + 1.0 * MPF + + NewVelo(1:3) = VeloFromDistribution('deltadistribution',TempErgy,1,1) + - !NewVelo(1:3) = VeloFromDistribution('deltadistribution',TempErgy,iNewPart,ProductSpecNbr) NewVelo(1:3) = tang1(1:3)*NewVelo(1) + tang2(1:3)*NewVelo(2) - n_loc(1:3)*NewVelo(3) + WallVelo(1:3) NewPos(1:3) = eps*BoundsOfElemCenter(1:3) + eps2*PartPosImpact(1:3) - ProductSpec(2) = iProd - - CALL CreateParticle(ProductSpec(2),NewPos(1:3),GlobalElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID, NewMPF=MPF) - - CALL SurfaceModel_EnergyAccommodation(NewPartID,locBCID,WallTemp) + CALL CreateParticle(iProd,NewPos(1:3),GlobalElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID, NewMPF=MPF) + + IF (SpecDSMC(iProd)%PolyatomicMol) THEN + CALL DSMC_SetInternalEnr_Poly(iProd,locBCID,NewPartID,4,iReac) + ELSE + CALL DSMC_SetInternalEnr_LauxVFD(iProd,locBCID,NewPartID,4,iReac) + END IF END IF END DO @@ -352,9 +384,10 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - PartBound%AdCount(locBCID, iReactant) = PartBound%AdCount(locBCID, iReactant) - 1.0 - PartBound%Coverage(locBCID, iReactant) = PartBound%Coverage(locBCID, iReactant) - 1.0/PartBound%nMol(locBCID) - PartBound%TotalCoverage(locBCID) = PartBound%TotalCoverage(locBCID) - 1.0/PartBound%nMol(locBCID) + ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) - 1.0 +! PartBound%AdCount(locBCID, iReactant) = PartBound%AdCount(locBCID, iReactant) - 1.0 +! PartBound%Coverage(locBCID, iReactant) = PartBound%Coverage(locBCID, iReactant) - 1.0/PartBound%nMol(locBCID) +! PartBound%TotalCoverage(locBCID) = PartBound%TotalCoverage(locBCID) - 1.0/PartBound%nMol(locBCID) END IF END DO @@ -362,26 +395,6 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) CALL MaxwellScattering(PartID,SideID,n_Loc) END SELECT -! CASE(30) - -! SurfNumOfRecomb = RecombModel%NumOfReact - -! DO iReac = 1, SurfNumOfRecomb -! IF(ANY(SurfChemReac%Reactants(iReac,:).EQ.speciesID)) THEN -! RecombCoeff = RecombModel%RecombCoeff(iReac) - -! ! Perform the reaction -! CALL RANDOM_NUMBER(RanNum) -! IF (RecombCoeff.GT.RanNum) THEN -! CALL RemoveParticle(PartID) -! PartBound%CatCount(locBCID, iReactant) = PartBound%CatCount(locBCID, iReactant) + 1.0 -! ! Routine to generate the new particle - -! ELSE -! CALL MaxwellScattering(PartID,SideID,n_Loc) -! END IF -! END DO - !----------------------------------------------------------------------------------------------------------------------------------- CASE (SEE_MODELS_ID) ! 5: SEE by Levko2015 diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90 index 8742f7291..ba775746d 100644 --- a/src/particles/surfacemodel/surfacemodel_vars.f90 +++ b/src/particles/surfacemodel/surfacemodel_vars.f90 @@ -1,3 +1,4 @@ +#include "piclas.h" !================================================================================================================================== ! Copyright (c) 2015 - 2019 Wladimir Reschke ! @@ -129,6 +130,17 @@ MODULE MOD_SurfaceModel_Vars REAL :: Dmax END TYPE tSurfFluxSubSideData +REAL,ALLOCATABLE :: ChemSampWall(:,:,:,:,:) +REAL,ALLOCATABLE :: ChemDesorpWall(:,:,:,:,:) +REAL,ALLOCPOINT :: ChemWallProp(:,:,:,:,:) + +#if USE_MPI +INTEGER :: ChemWallProp_Shared_Win +REAL,ALLOCPOINT :: ChemWallProp_Shared(:,:,:,:,:) +REAL,POINTER :: ChemSampWall_Shared(:,:,:,:,:) +INTEGER :: ChemSampWall_Shared_Win +#endif + ! TYPE tRecombinationModel ! INTEGER :: NumOfReact ! Number of possible reactions ! !CHARACTER(LEN=5),ALLOCATABLE :: ReactType(:) ! Type of Reaction (reaction num) diff --git a/src/timedisc/timedisc_TimeStep_DSMC.f90 b/src/timedisc/timedisc_TimeStep_DSMC.f90 index b0265d668..7bb04d922 100644 --- a/src/timedisc/timedisc_TimeStep_DSMC.f90 +++ b/src/timedisc/timedisc_TimeStep_DSMC.f90 @@ -53,6 +53,7 @@ SUBROUTINE TimeStep_DSMC() USE MOD_vMPF ,ONLY: SplitAndMerge #if USE_MPI USE MOD_Particle_MPI ,ONLY: IRecvNbOfParticles, MPIParticleSend,MPIParticleRecv,SendNbOfparticles +USE MOD_Particle_MPI_Boundary_Sampling, ONLY: ExchangeChemSurfData #endif /*USE_MPI*/ #if USE_LOADBALANCE USE MOD_LoadBalance_Timers ,ONLY: LBStartTime,LBSplitTime,LBPauseTime @@ -83,28 +84,23 @@ SUBROUTINE TimeStep_DSMC() END IF IF (DoChemSurface) THEN + CALL ExchangeChemSurfData() CALL ParticleSurfChemFlux() - ! Write the adsorption and desorption values into separate files for the two reactants - OPEN(10, file='adsorbtion_O2.txt', position="APPEND") - OPEN(30, file='adsorbtion_CO.txt', position="APPEND") - OPEN(20, file='desorption_O2.txt', position="APPEND") - OPEN(40, file='desorption_CO.txt', position="APPEND") - OPEN(50, file='reaction_LH.txt', position="APPEND") - OPEN(60, file='reaction_ER.txt', position="APPEND") - - WRITE(10,*) PartBound%AdCount(1,4) - WRITE(20,*) PartBound%DesCount(1,4) - WRITE(30,*) PartBound%AdCount(1,2) - WRITE(40,*) PartBound%DesCount(1,2) - WRITE(50,*) PartBound%LHCount(1,1) - WRITE(60,*) PartBound%ERCount(1,1) + + OPEN(10, file='ads.txt', position="APPEND") + OPEN(20, file='des.txt', position="APPEND") + OPEN(30, file='des.txt', position="APPEND") + + WRITE(10,*) PartBound%AdCount(1,2) + WRITE(20,*) PartBound%DesCount(1,2) + WRITE(30,*) PartBound%LHCount(1,1) CLOSE(10) CLOSE(20) CLOSE(30) - CLOSE(40) - CLOSE(50) - CLOSE(60) + + PartBound%AdCount(1, 2) = 0.0 + END IF #if USE_LOADBALANCE From 66d0a1724716aa579d0e95ad4bdb89648c13f261 Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Tue, 7 Jun 2022 13:05:12 +0200 Subject: [PATCH 005/222] Update number in chemistry flux --- .../boundary/particle_boundary_init.f90 | 29 +- .../boundary/particle_boundary_vars.f90 | 6 - .../emission/particle_surface_chemflux.f90 | 252 +++++++++--------- .../emission/particle_surface_flux_init.f90 | 2 - src/particles/particle_init.f90 | 1 + .../particle_mpi_boundary_sampling.f90 | 42 ++- .../surfacemodel/surfacemodel_chemistry.f90 | 38 ++- .../surfacemodel/surfacemodel_main.f90 | 39 ++- .../surfacemodel/surfacemodel_vars.f90 | 101 +++---- src/timedisc/timedisc_TimeStep_DSMC.f90 | 12 +- 10 files changed, 262 insertions(+), 260 deletions(-) diff --git a/src/particles/boundary/particle_boundary_init.f90 b/src/particles/boundary/particle_boundary_init.f90 index 16d7d10f2..8fe44d0be 100644 --- a/src/particles/boundary/particle_boundary_init.f90 +++ b/src/particles/boundary/particle_boundary_init.f90 @@ -139,14 +139,11 @@ SUBROUTINE DefineParametersParticleBoundary() '11: SEE-E when e- bombard quartz (SiO2) by A. Dunaevsky, "Secondary electron emission from dielectric materials of a Hall thruster with segmented electrodes", 2003'& , '0', numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Part-Boundary[$]-LatticeVector' & - , 'Lattice vector for a fcc crystal'& + , 'Lattice vector for the respective crystal structure [m]'& , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Part-Boundary[$]-NbrOfMol-UnitCell' & - , 'Number of molecules in a unit cell defined by the lattice vector'& + , 'Number of molecules in the unit area (defined by the lattice vector)'& , numberedmulti=.TRUE.) -! CALL prms%CreateRealOption( 'Part-Boundary[$]-SurfaceArea' & -! , 'Area of the reactive surface'& -! , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Part-Boundary[$]-Species[$]-Coverage' & , 'Initial coverage of the surface by an adsorbed species'& , numberedmulti=.TRUE.) @@ -321,16 +318,10 @@ SUBROUTINE InitializeVariablesPartBoundary() ALLOCATE(PartBound%MaxCoverage(nPartBound, nSpecies)) ALLOCATE(PartBound%AdCount(nPartBound, nSpecies)) ALLOCATE(PartBound%DesCount(nPartBound, nSpecies)) -! ALLOCATE(PartBound%DesCountIter(nPartBound, nSpecies)) -! ALLOCATE(PartBound%ERCount(nPartBound, nSpecies)) -! ALLOCATE(PartBound%CatCount(nPartBound, nSpecies)) ALLOCATE(PartBound%LHCount(nPartBound, nSpecies)) -! ALLOCATE(PartBound%LHCountIter(nPartBound, nSpecies)) ALLOCATE(PartBound%TotalCoverage(nPartBound)) -!ALLOCATE(PartBound%nMol(nPartBound)) ALLOCATE(PartBound%LatticeVec(nPartBound)) ALLOCATE(PartBound%MolPerUnitCell(nPartBound)) -! ALLOCATE(PartBound%SurfArea(nPartBound)) ALLOCATE(PartBound%Reactive( 1:nPartBound)) PartBound%Reactive = .FALSE. ALLOCATE(PartBound%Voltage(1:nPartBound)) @@ -418,8 +409,6 @@ SUBROUTINE InitializeVariablesPartBoundary() PartBound%Reactive(iPartBound) = .FALSE. CASE (20) PartBound%Reactive(iPartBound) = .FALSE. - !CASE(30) - ! PartBound%Reactive(iPartBound) = .FALSE. CASE (SEE_MODELS_ID) ! SEE models require reactive BC PartBound%Reactive(iPartBound) = .TRUE. @@ -430,28 +419,16 @@ SUBROUTINE InitializeVariablesPartBoundary() END IF PartBound%LatticeVec(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf)//'-LatticeVector', '0.') PartBound%MolPerUnitCell(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf)//'-NbrOfMol-UnitCell', '1.') - !PartBound%SurfArea(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf)//'-SurfaceArea', '0.') - ! IF(PartBound%LatticeVec(iPartBound).GT.0.) THEN - ! ! Surface molecules in dependence of the occupancy of the unit cell - ! PartBound%nMol(iPartBound) = PartBound%MolPerUnitCell(iPartBound) * PartBound%SurfArea(iPartBound) & - ! /(PartBound%LatticeVec(iPartBound))**2 - ! ELSE - ! ! Alternative calculation by average number of molecules per area for a monolayer - ! PartBound%nMol(iPartBound) = 10.**19 * PartBound%SurfArea(iPartBound) - ! END IF PartBound%TotalCoverage(iPartBound) = 0. DO iSpec=1, nSpecies WRITE(UNIT=hilf2,FMT='(I0)') iSpec PartBound%CoverageIni(iPartBound, iSpec) = GETREAL('Part-Boundary'//TRIM(hilf)//'-Species'//TRIM(hilf2)//'-Coverage', '0.') PartBound%MaxCoverage(iPartBound, iSpec) = GETREAL('Part-Boundary'//TRIM(hilf)//'-Species'//TRIM(hilf2)//'-MaxCoverage', '1.') PartBound%TotalCoverage(iPartBound) = PartBound%TotalCoverage(iPartBound) + PartBound%CoverageIni(iPartBound, iSpec) + ! Output PartBound%AdCount(iPartBound, iSpec) = 0. PartBound%DesCount(iPartBound, iSpec) = 0. - ! PartBound%DesCountIter(iPartBound, iSpec) = 0. - ! PartBound%ERCount(iPartBound, iSpec) = 0. PartBound%LHCount(iPartBound, iSpec) = 0. - ! PartBound%LHCountIter(iPartBound, iSpec) = 0. - ! PartBound%CatCount(iPartBound, iSpec) = 0. END DO IF (PartBound%TotalCoverage(iPartBound).GT.1.) THEN CALL abort(& diff --git a/src/particles/boundary/particle_boundary_vars.f90 b/src/particles/boundary/particle_boundary_vars.f90 index 40f59c289..0e16c179e 100644 --- a/src/particles/boundary/particle_boundary_vars.f90 +++ b/src/particles/boundary/particle_boundary_vars.f90 @@ -246,19 +246,13 @@ MODULE MOD_Particle_Boundary_Vars INTEGER , ALLOCATABLE :: SpeciesSwaps(:,:,:) ! Species to be changed at wall (in, out), out=0: delete INTEGER , ALLOCATABLE :: SurfaceModel(:) ! Model used for surface interaction (e.g. SEE models) REAL , ALLOCATABLE :: TotalCoverage(:) - !REAL , ALLOCATABLE :: nMol(:) ! number of molecules on the reactive surface REAL , ALLOCATABLE :: LatticeVec(:) ! Lattice constant for a fcc crystal REAL , ALLOCATABLE :: MolPerUnitCell(:) ! Molecules per unit cell - ! REAL , ALLOCATABLE :: SurfArea(:) ! Reactive surface area REAL , ALLOCATABLE :: CoverageIni(:,:) ! Initial boundary coverage REAL , ALLOCATABLE :: MaxCoverage(:,:) - !REAL, ALLOCATABLE :: CatCount(:,:) ! number of reacted particles for the simple recombnation model REAL, ALLOCATABLE :: AdCount(:,:) ! number of adsorped molecules for the individual species REAL, ALLOCATABLE :: DesCount(:,:) ! number of desorped molecules for the individual species - ! REAL, ALLOCATABLE :: DesCountIter(:,:) ! desorption count for the emission routine REAL, ALLOCATABLE :: LHCount(:,:) ! number of molecules created by the Langmuir-Hinshlewood reaction - ! REAL, ALLOCATABLE :: LHCountIter(:,:) ! reaction count for the emission routine - ! REAL, ALLOCATABLE :: ERCount(:,:) LOGICAL , ALLOCATABLE :: Reactive(:) ! flag defining if surface is treated reactively LOGICAL , ALLOCATABLE :: Resample(:) ! Resample Equilibrium Distribution with reflection LOGICAL , ALLOCATABLE :: UseAdaptedWallTemp(:) diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index a41c2cdf4..863580477 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -78,7 +78,7 @@ SUBROUTINE ParticleSurfChemFlux() REAL :: Particle_pos(3), RandVal1, xyzNod(3), RVec(2), minPos(2), xi(2), Vector1(3), Vector2(3) REAL :: ndist(3), midpoint(3) REAL,ALLOCATABLE :: particle_positions(:) - +REAL :: ReacHeat, DesHeat REAL :: nu, E_act, Coverage, Prob, Rate, DissOrder, AdCount REAL :: MPF REAL :: area @@ -107,7 +107,6 @@ SUBROUTINE ParticleSurfChemFlux() ! Choose the reactive boundaries DO iSF=1, SurfChemReac%NumOfBounds(iReac) BoundID = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC - PartBound%DesCount(BoundID, iSpec) = 0.0 DO iSide = 1, BCdata_auxSF(BoundID)%SideNumber BCSideID=BCdata_auxSF(BoundID)%SideList(iSide) ElemID = SideToElem(S2E_ELEM_ID,BCSideID) @@ -123,6 +122,7 @@ SUBROUTINE ParticleSurfChemFlux() ! Calculate the number of molecules on the surface IF(PartBound%LatticeVec(BoundID).GT.0.) THEN ! Surface molecules in dependence of the occupancy of the unit cell + area = SurfSideArea_Shared(SubP, SubQ,SurfSideID) SurfMol = PartBound%MolPerUnitCell(BoundID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & /(PartBound%LatticeVec(BoundID)*PartBound%LatticeVec(BoundID)) ELSE @@ -146,7 +146,10 @@ SUBROUTINE ParticleSurfChemFlux() ELSE Coverage = ChemWallProp(iSpec,1,SubP, SubQ, SurfSideID) AdCount = Coverage * SurfMol - END IF + END IF + + ! Calculate the desorption energy in dependence of the coverage [J] + DesHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) ! Define the variables DissOrder = SurfChemReac%DissOrder(iReac) @@ -156,40 +159,41 @@ SUBROUTINE ParticleSurfChemFlux() ! Calculate the desorption parameters in dependence of coverage and temperature of the boundary IF(nu.EQ.0.) THEN - nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage)*10.**(15) + nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) + IF (DissOrder.EQ.2) THEN + ! Convert the prefactor to coverage values for the associative desorption + nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) *10.**(15) END IF + END IF ! Boundary temperature WallTemp = PartBound%WallTemp(BoundID) E_act = SurfChemReac%E_initial(iReac) + Coverage * SurfChemReac%W_interact(iReac) Rate = nu * Coverage**DissOrder * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol + ! Determine the desorption probability - ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID) = Rate * dt * SurfMol + ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID) + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = Rate * dt * SurfMol + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/DissOrder - IF(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID).GE.AdCount) THEN + IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.(AdCount/DissOrder)) THEN ! Upper bound for the desorption number - ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID) = AdCount + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = AdCount/DissOrder END IF ! Update the adsorbtion and desorption count - IF(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID).GT.1.)THEN + IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GT.1.)THEN IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) -! PartBound%AdCount(BoundID,iReactant) = PartBound%AdCount(BoundID,iReactant) - PartBound%DesCountIter(BoundID,iSpec) * DissOrder - ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) - ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)/SurfMol + ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) - DissOrder*ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfMol END IF END DO ELSE -! PartBound%AdCount(BoundID, iSpec)= PartBound%AdCount(BoundID, iSpec) - PartBound%DesCountIter(BoundID, iSpec) * DissOrder - ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) = ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) - ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)/SurfMol + ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) = ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) - DissOrder*ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfMol END IF -! PartBound%TotalCoverage(BoundID) = PartBound%TotalCoverage(BoundID) - PartBound%DesCountIter(BoundID, iSpec) * DissOrder/PartBound%nMol(BoundID) -! PartBound%DesCount(BoundID, iSpec) = PartBound%DesCount(BoundID, iSpec) + PartBound%DesCountIter(BoundID, iSpec) END IF - PartBound%DesCount(BoundID, iSpec) = PartBound%DesCount(BoundID, iSpec) + ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID) + PartBound%HeatTransferIter(BoundID) = PartBound%HeatTransferIter(BoundID) - PartBound%DesCountIter(BoundID, iSpec) * DesHeat ! Current boundary condition currentBC = BoundID @@ -198,8 +202,8 @@ SUBROUTINE ParticleSurfChemFlux() iPartTotal = 0 ! Loop over the side numbers -! DO WHILE(INT(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)).GT.1) - IF (INT(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)).GT.1) THEN + IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)).GT.1) THEN + ! Random distribution of the particles on the surface ! Define the necessary variables xyzNod(1:3) = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) @@ -213,8 +217,10 @@ SUBROUTINE ParticleSurfChemFlux() midpoint(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) ndist(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) - PartInsSubSide = INT(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)) - ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID) = ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID) - INT(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)) + PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) + ! Output + PartBound%DesCount(BoundID, iSpec) = PartBound%DesCount(BoundID, iSpec) + PartInsSubSide + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) NbrOfParticle = NbrOfParticle + PartInsSubSide ALLOCATE(particle_positions(1:PartInsSubSide*3)) @@ -231,11 +237,10 @@ SUBROUTINE ParticleSurfChemFlux() !-- Fill Particle Informations (PartState, Partelem, etc.) ParticleIndexNbr = 1 DO iPart=1,PartInsSubSide - IF (iPart.EQ.1) THEN + IF ((iPart.EQ.1).OR.PDM%ParticleInside(ParticleIndexNbr)) THEN ParticleIndexNbr = PDM%nextFreePosition(iPartTotal + 1 + PDM%CurrentNextFreePosition) END IF IF (ParticleIndexNbr .ne. 0) THEN - PartState(1:3,ParticleIndexNbr) = particle_positions(3*(iPart-1)+1:3*(iPart-1)+3) PartState(1:3,ParticleIndexNbr) = particle_positions(3*(iPart-1)+1:3*(iPart-1)+3) LastPartPos(1:3,ParticleIndexNbr)=PartState(1:3,ParticleIndexNbr) PDM%ParticleInside(ParticleIndexNbr) = .TRUE. @@ -295,7 +300,6 @@ SUBROUTINE ParticleSurfChemFlux() ! Choose the reactive boundaries DO iSF=1,SurfChemReac%NumOfBounds(iReac) BoundID = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC - PartBound%LHCount(BoundID, iSpec) = 0.0 DO iSide = 1, BCdata_auxSF(BoundID)%SideNumber BCSideID=BCdata_auxSF(BoundID)%SideList(iSide) ElemID = SideToElem(S2E_ELEM_ID,BCSideID) @@ -319,6 +323,10 @@ SUBROUTINE ParticleSurfChemFlux() END IF END DO + ! Determine the reaction energy [J] + BetaCoeff = SurfChemReac%HeatAccomodation(iReac) + ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) + ! Calculate the number of molecules on the surface IF(PartBound%LatticeVec(BoundID).GT.0.) THEN ! Surface molecules in dependence of the occupancy of the unit cell @@ -341,7 +349,7 @@ SUBROUTINE ParticleSurfChemFlux() IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN iSpec = SurfChemReac%Products(iReac,iVal) - ChemDesorpWall(iSpec, SubP, SubQ, 1, SurfSideID) = Rate * dt * SurfMol + ChemDesorpWall(iSpec, SubP, SubQ, 1, SurfSideID) + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = Rate * dt * SurfMol + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN @@ -350,121 +358,127 @@ SUBROUTINE ParticleSurfChemFlux() AdCount = Coverage * SurfMol !Check if enough reactants exist on the surface - IF(ChemDesorpWall(iSpec, SubP, SubQ, 1, SurfSideID) .GT. AdCount) THEN - ChemDesorpWall(iSpec, SubP, SubQ, 1, SurfSideID) = AdCount + IF(ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) .GT. AdCount) THEN + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = AdCount END IF END IF END DO ! Update the surface coverage values - IF(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID).GT.1.) THEN + IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GT.1.) THEN DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - ! PartBound%AdCount(BoundID, iReactant)= PartBound%AdCount(BoundID, iReactant) - PartBound%LHCountIter(BoundID, iSpec) - ChemWallProp(iReactant,SubP, SubQ, 1, SurfSideID) = ChemWallProp(iReactant,SubP, SubQ, 1, SurfSideID) - ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)/SurfMol - ! PartBound%Coverage(BoundID, iReactant)= PartBound%Coverage(BoundID, iReactant) - PartBound%LHCountIter(BoundID, iSpec)/PartBound%nMol(BoundID) - ! PartBound%TotalCoverage(BoundID) = PartBound%TotalCoverage(BoundID) - PartBound%LHCountIter(BoundID, iSpec)/PartBound%nMol(BoundID) + ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) - ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfMol END IF END DO END IF - PartBound%LHCount(BoundID, iSpec) = PartBound%LHCount(BoundID, iSpec) + ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID) -! PartBound%LHCount(BoundID, iSpec) = PartBound%LHCount(BoundID, iSpec) + PartBound%LHCountIter(BoundID, iSpec) + PartBound%HeatTransferIter(BoundID) = PartBound%HeatTransferIter(BoundID) + PartBound%LHCountIter(BoundID, iSpec) * ReacHeat * BetaCoeff + + ! Output + PartBound%LHCount(BoundID, iSpec) = PartBound%LHCount(BoundID, iSpec) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) ! Current boundary condition - currentBC = BoundID - PartsEmitted = 0 - NbrOfParticle = 0 - iPartTotal = 0 - - IF (INT(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)).GT.1) THEN - ! Random distribution of the particles on the surface - ! Define the necessary variables - xyzNod(1:3) = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) - - DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - ! Number of additional particles to be inserted - Node1 = jSample+1 - Node2 = jSample+2 ! - Vector1 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node1-1) - Vector2 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node2-1) - midpoint(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) - ndist(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) - - PartInsSubSide = INT(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)) - ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID) = ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID) - INT(ChemDesorpWall(iSpec,SubP, SubQ, 1, SurfSideID)) - NbrOfParticle = NbrOfParticle + PartInsSubSide - ALLOCATE(particle_positions(1:PartInsSubSide*3)) - - iPart = 1 - !-- Set Positions - DO WHILE (iPart .LE. PartInsSubSide) - Particle_pos(1:3) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) - particle_positions(iPart*3-2) = Particle_pos(1) - particle_positions(iPart*3-1) = Particle_pos(2) - particle_positions(iPart*3 ) = Particle_pos(3) - END DO + currentBC = BoundID + PartsEmitted = 0 + NbrOfParticle = 0 + iPartTotal = 0 + + ! Loop over the side numbers + IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)).GT.1) THEN + ! Random distribution of the particles on the surface + ! Define the necessary variables + xyzNod(1:3) = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) + + DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) + ! Number of additional particles to be inserted + Node1 = jSample+1 + Node2 = jSample+2 ! + Vector1 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node1-1) + Vector2 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node2-1) + midpoint(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) + ndist(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) + + PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) + ! Output + PartBound%DesCount(BoundID, iSpec) = PartBound%DesCount(BoundID, iSpec) + PartInsSubSide + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) + NbrOfParticle = NbrOfParticle + PartInsSubSide + ALLOCATE(particle_positions(1:PartInsSubSide*3)) + + iPart = 1 + !-- Set Positions + DO WHILE (iPart .LE. PartInsSubSide) + Particle_pos(1:3) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) + particle_positions(iPart*3-2) = Particle_pos(1) + particle_positions(iPart*3-1) = Particle_pos(2) + particle_positions(iPart*3 ) = Particle_pos(3) + iPart=iPart+1 + END DO + + !-- Fill Particle Informations (PartState, Partelem, etc.) + ParticleIndexNbr = 1 + DO iPart=1,PartInsSubSide + IF ((iPart.EQ.1).OR.PDM%ParticleInside(ParticleIndexNbr)) THEN + ParticleIndexNbr = PDM%nextFreePosition(iPartTotal + 1 + PDM%CurrentNextFreePosition) + END IF + IF (ParticleIndexNbr .ne. 0) THEN + PartState(1:3,ParticleIndexNbr) = particle_positions(3*(iPart-1)+1:3*(iPart-1)+3) + LastPartPos(1:3,ParticleIndexNbr)=PartState(1:3,ParticleIndexNbr) + PDM%ParticleInside(ParticleIndexNbr) = .TRUE. + PDM%dtFracPush(ParticleIndexNbr) = .TRUE. + PDM%IsNewPart(ParticleIndexNbr) = .TRUE. + PEM%GlobalElemID(ParticleIndexNbr) = globElemId + PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId !needed when ParticlePush is not executed, e.g. "delay" + iPartTotal = iPartTotal + 1 + ELSE + CALL abort(& + __STAMP__& + ,'ERROR in ParticleSurfaceflux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?') + END IF + END DO + DEALLOCATE(particle_positions) + CALL SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) + + PartsEmitted = PartsEmitted + PartInsSubSide + END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) + END IF ! iSide + IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'Error 2 in ParticleSurfaceflux!') + !----- 2b.: set remaining properties + + CALL SetParticleChargeAndMass(iSpec,NbrOfParticle) - !-- Fill Particle Informations (PartState, Partelem, etc.) - ParticleIndexNbr = 1 - ParticleIndexNbr = PDM%nextFreePosition(iPartTotal + 1 + PDM%CurrentNextFreePosition) - IF (ParticleIndexNbr .ne. 0) THEN - PartState(1:3,ParticleIndexNbr) = particle_positions(3*(iPart-1)+1:3*(iPart-1)+3) - LastPartPos(1:3,ParticleIndexNbr)=PartState(1:3,ParticleIndexNbr) - PDM%ParticleInside(ParticleIndexNbr) = .TRUE. - PDM%dtFracPush(ParticleIndexNbr) = .TRUE. - PDM%IsNewPart(ParticleIndexNbr) = .TRUE. - PEM%GlobalElemID(ParticleIndexNbr) = globElemId - PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId !needed when ParticlePush is not executed, e.g. "delay" - iPartTotal = iPartTotal + 1 - ELSE + IF (usevMPF.AND.(.NOT.RadialWeighting%DoRadialWeighting)) CALL SetParticleMPF(iSpec,-1,NbrOfParticle) + ! define molecule stuff + + IF (useDSMC.AND.(CollisMode.GT.1)) CALL SetInnerEnergies(iSpec, iSF, NbrOfParticle,iReac) + + IF(CalcPartBalance) THEN + ! Compute number of input particles and energy + nPartIn(iSpec)=nPartIn(iSpec) + NBrofParticle + + DO iPart=1,NbrOfparticle + PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) + IF (PositionNbr .ne. 0) PartEkinIn(PartSpecies(PositionNbr))= & + PartEkinIn(PartSpecies(PositionNbr))+CalcEkinPart(PositionNbr) + END DO ! iPart + END IF ! CalcPartBalance + ! instead of an UpdateNextfreePosition we update the particleVecLength only - enough ?!? + PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle + PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle + ! Sample Energies on Surfaces when particles are emitted from them + IF (NbrOfParticle.NE.PartsEmitted) THEN + ! should be equal for including the following lines in tSurfaceFlux CALL abort(& - __STAMP__& - ,'ERROR in ParticleSurfaceflux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?') - END IF - DEALLOCATE(particle_positions) - CALL SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) - - PartsEmitted = PartsEmitted + PartInsSubSide - END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) - END IF ! iSide - - IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'Error 2 in ParticleSurfaceflux!') - !----- 2b.: set remaining properties - - CALL SetParticleChargeAndMass(iSpec,NbrOfParticle) - - IF (usevMPF.AND.(.NOT.RadialWeighting%DoRadialWeighting)) CALL SetParticleMPF(iSpec,-1,NbrOfParticle) - ! define molecule stuff - - IF (useDSMC.AND.(CollisMode.GT.1)) CALL SetInnerEnergies(iSpec, iSF, NbrOfParticle,iReac) - - IF(CalcPartBalance) THEN - ! Compute number of input particles and energy - nPartIn(iSpec)=nPartIn(iSpec) + NBrofParticle - - DO iPart=1,NbrOfparticle - PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) - IF (PositionNbr .ne. 0) PartEkinIn(PartSpecies(PositionNbr))= & - PartEkinIn(PartSpecies(PositionNbr))+CalcEkinPart(PositionNbr) - END DO ! iPart - END IF ! CalcPartBalance - ! instead of an UpdateNextfreePosition we update the particleVecLength only - enough ?!? - PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle - PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle - ! Sample Energies on Surfaces when particles are emitted from them - IF (NbrOfParticle.NE.PartsEmitted) THEN - ! should be equal for including the following lines in tSurfaceFlux - CALL abort(& - __STAMP__& - ,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') + __STAMP__& + ,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') + END IF END IF - END IF - END DO + END DO END DO ! iSF - END DO + END DO !iSpec CASE DEFAULT END SELECT diff --git a/src/particles/emission/particle_surface_flux_init.f90 b/src/particles/emission/particle_surface_flux_init.f90 index 2678211db..b9ffa7af5 100644 --- a/src/particles/emission/particle_surface_flux_init.f90 +++ b/src/particles/emission/particle_surface_flux_init.f90 @@ -345,8 +345,6 @@ SUBROUTINE InitializeParticleSurfaceflux() DO iReac=1,SurfNumReac DO iSF=1,SurfChemReac%NumOfBounds(iReac) VFR_total = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total !proc local total - !Species(iSpec)%Surfaceflux(iSF)%InsertedParticle = INT(Species(iSpec)%Surfaceflux(iSF)%PartDensity * RestartTime & - ! / Species(iSpec)%MacroParticleFactor * VFR_total,8) END DO END DO END IF diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 8257f4167..75c7cc120 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -342,6 +342,7 @@ SUBROUTINE InitParticles() CALL InitAdaptiveWallTemp() END IF +! Initialize surface reactions CALL SurfaceModel_Chemistry_Init() ! Initialize particle surface flux to be performed per iteration diff --git a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 index 096729d10..ad61baea2 100644 --- a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 +++ b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 @@ -396,7 +396,7 @@ SUBROUTINE ExchangeChemSurfData() USE MOD_Particle_MPI_Vars ,ONLY: SurfSendBuf,SurfRecvBuf USE MOD_Particle_Vars ,ONLY: nSpecies USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, ChemWallProp, ChemSampWall, ChemSampWall_Shared, ChemWallProp_Shared_Win -USE MOD_SurfaceModel_Vars ,ONLY: ChemSampWall_Shared_Win +USE MOD_SurfaceModel_Vars ,ONLY: ChemSampWall_Shared_Win, ChemDesorpWall USE MOD_Particle_Boundary_vars ,ONLY: SurfSideArea_Shared, SurfSide2GlobalSide USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared ! IMPLICIT VARIABLE HANDLING @@ -407,13 +407,14 @@ SUBROUTINE ExchangeChemSurfData() ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -REAL :: SurfMol +REAL :: SurfMol(2,2) +REAL :: Cov1, Cov2 +INTEGER :: iter INTEGER :: iProc,SideID, firstSide, lastSide, GlobalSideID, locBCID, iSide, iSpec INTEGER :: iPos,p,q INTEGER :: MessageSize,iSurfSide,SurfSideID INTEGER :: nValues INTEGER :: RecvRequest(0:nSurfLeaders-1),SendRequest(0:nSurfLeaders-1) -INTEGER :: iter !INTEGER :: iPos,p,q,iProc,iReact !INTEGER :: recv_status_list(1:MPI_STATUS_SIZE,1:SurfCOMM%nMPINeighbors) !=================================================================================================================================== @@ -442,13 +443,19 @@ SUBROUTINE ExchangeChemSurfData() DO iSide = firstSide, lastSide GlobalSideID = SurfSide2GlobalSide(SURF_SIDEID,iSide) locBCID = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,GlobalSideID)) - !SurfMol = PartBound%MolPerUnitCell(locBCID)*SurfSideArea_Shared(1,1,iSide)/(PartBound%LatticeVec(locBCID)*PartBound%LatticeVec(locBCID)) + DO iSpec =1, nSpecies IF((locBCID.EQ.1).AND.(iSpec.EQ.4)) THEN - iter = iter + 1 + iter = iter + 1 + END IF + IF (PartBound%LatticeVec(locBCID).GT.0.) THEN + ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall_Shared(iSpec,1,:,:,iSide) * PartBound%LatticeVec(locBCID)* & + PartBound%LatticeVec(locBCID)/(PartBound%MolPerUnitCell(locBCID)*SurfSideArea_Shared(:,:,iSide)) + ELSE + ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall_Shared(iSpec,1,:,:,iSide) / & + (10.**(19)*SurfSideArea_Shared(:,:,iSide)) END IF - ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + PartBound%LatticeVec(locBCID)*PartBound%LatticeVec(locBCID)*& - ChemSampWall_Shared(iSpec,1,:,:,iSide)/(SurfSideArea_Shared(:,:,iSide) * PartBound%MolPerUnitCell(locBCID)) + !ChemWallProp(iSpec,2,:,:,iSide) = ChemWallProp(iSpec,2,:,:,iSide) + ChemSampWall_Shared(iSpec,2,:,:,iSide)/SurfMol END DO ChemSampWall_Shared(:,:,:,:,iSide) = 0.0 END DO @@ -456,13 +463,20 @@ SUBROUTINE ExchangeChemSurfData() CALL BARRIER_AND_SYNC(ChemSampWall_Shared_Win ,MPI_COMM_SHARED) CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win ,MPI_COMM_SHARED) -! IF (myComputeNodeRank.EQ.0) THEN -! !DO iSpec = 1,nSpecies -! iSpec = 4 -! print*, 'coverage max', iSpec, MAXVAL(ChemWallProp(iSpec, 1, 1,1,:)) -! print*, 'coverage mean', iSpec, SUM(ChemWallProp(iSpec, 1, 1,1,:))/iter -! ! END DO -! END IF +IF (myComputeNodeRank.EQ.0) THEN + + Cov1 = SUM(ChemWallProp(2, 1, 1,1,:))/iter + Cov2 = SUM(ChemWallProp(4, 1, 1,1,:))/iter +END IF + + OPEN(40, file='cov1.txt', position="APPEND") + OPEN(50, file='cov2.txt', position="APPEND") + + WRITE(40,*) Cov1 + WRITE(50,*) Cov2 + + CLOSE(40) + CLOSE(50) ! prepare buffers for surf leader communication !IF (myComputeNodeRank.EQ.0) THEN diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index 8a8ea2245..4683c6f99 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -42,9 +42,9 @@ SUBROUTINE DefineParametersSurfaceChemistry() !=================================================================================================================================== CALL prms%SetSection("Surface Chemistry") CALL prms%CreateIntOption( 'Surface-NumOfReactions','Number of chemical Surface reactions') -!CALL prms%CreateIntOption( 'Surface-NumOfRecombinations','Number of catalytic Surface recombinations') CALL prms%CreateStringOption( 'Surface-Reaction[$]-Type', & - 'No default', numberedmulti=.TRUE.) + 'No default, options are A (adsorption), D (desorption), ER (Eley-Rideal), LH (Langmuir-Hinshelwood), LHD', & + numberedmulti=.TRUE.) CALL prms%CreateIntArrayOption( 'Surface-Reaction[$]-Reactants' & ,'Reactants of Reaction[$]\n'//& '(SpecNumOfReactant1,\n'//& @@ -52,24 +52,30 @@ SUBROUTINE DefineParametersSurfaceChemistry() CALL prms%CreateIntArrayOption( 'Surface-Reaction[$]-Products' & ,'Products of Reaction[j] (Product1, Product2)', '0 , 0' & , numberedmulti=.TRUE.) + CALL prms%CreateRealOption( 'Surface-Reaction[$]-ReactHeat', & + 'Heat flux to or from the surface due to the reaction', '0.' , numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Surface-Reaction[$]-HeatScaling', & + 'Linear dependence of the heat flux on the coverage', '0.' , numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Surface-Reaction[$]-EnergyAccomodation', & + 'Energy accomodation coefficient', '0.' , numberedmulti=.TRUE.) CALL prms%CreateIntOption( 'Surface-Reaction[$]-Inhibition','Inhibition/Coadsorption behaviour due to other reactions', & '0', numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-StickingCoefficient', & - 'TODO', '0.' , numberedmulti=.TRUE.) + 'Ratio of adsorbed to impinging particles on a reactive surface', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-DissOrder', & - 'TODO', '0.' , numberedmulti=.TRUE.) + 'Associative = 1, dissociative = 2', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-EqConstant', & - 'TODO', '0.' , numberedmulti=.TRUE.) + 'Equilibrium constant between the adsorption and desorption (K), Langmuir: K=1', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-LateralInteraction', & - 'TODO', '0.' , numberedmulti=.TRUE.) + 'Interaction between neighbouring particles (W), Edes = E0 + W*Coverage', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-Ca', & - 'TODO', '0.' , numberedmulti=.TRUE.) + 'Desorption prefactor: nu = 10^(Ca + Coverage*Cb)', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-Cb', & - 'TODO', '0.' , numberedmulti=.TRUE.) + 'Desorption prefactor: nu = 10^(Ca + Coverage*Cb)', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-Prefactor', & - 'TODO', '0.' , numberedmulti=.TRUE.) + 'Arrhenius prefactor for the reaction/desorption', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-Energy', & - 'TODO', '0.' , numberedmulti=.TRUE.) + 'Arrhenius energy for the reaction/desorption', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-FormationEnergy', & 'TODO', '0.' , numberedmulti=.TRUE.) CALL prms%CreateIntOption( 'Surface-Reaction[$]-NumOfBoundaries', & @@ -139,6 +145,12 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%Inhibition = 0 ALLOCATE(SurfChemReac%EForm(SurfChemReac%NumOfReact)) SurfChemReac%EForm = 0.0 +ALLOCATE(SurfChemReac%EReact(SurfChemReac%NumOfReact)) +SurfChemReac%EReact = 0.0 +ALLOCATE(SurfChemReac%EScale(SurfChemReac%NumOfReact)) +SurfChemReac%EScale = 0.0 +ALLOCATE(SurfChemReac%HeatAccomodation(SurfChemReac%NumOfReact)) +SurfChemReac%HeatAccomodation = 0.0 ALLOCATE(SurfChemReac%BoundisChemSurf(nPartBound)) ALLOCATE(SurfChemReac%NumOfBounds(SurfChemReac%NumOfReact)) ALLOCATE(SurfChemReac%BoundMap(SurfChemReac%NumOfReact)) @@ -180,6 +192,9 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%Reactants(iReac,:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Reactants',2,'0,0') SurfChemReac%Products(iReac,:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Products',2,'0,0') SurfChemReac%Inhibition(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-Inhibition','0') + SurfChemReac%EReact(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-ReactHeat','0.') + SurfChemReac%EScale(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-HeatScaling','0.') + SurfChemReac%HeatAccomodation(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EnergyAccomodation','0.') SurfChemReac%NumOfBounds(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-NumOfBoundaries','0') IF (SurfChemReac%NumOfBounds(iReac).EQ.0) THEN CALL abort(& @@ -232,6 +247,7 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%EForm(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-FormationEnergy','0') END DO +!ALLOCATE( ChemSampWall(1:nSpecies,2,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) ALLOCATE( ChemSampWall(1:nSpecies,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) ALLOCATE(ChemDesorpWall(1:nSpecies,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) ChemDesorpWall = 0.0 @@ -255,6 +271,7 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SideID = SurfSide2GlobalSide(SURF_SIDEID,iSide) iBC = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) DO iSpec = 1, nSpecies + ! Initial surface coverage ChemWallProp(iSpec,1,:,:,iSide) = PartBound%CoverageIni(iBC, iSpec) END DO END DO @@ -269,6 +286,7 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SideID = SurfSide2GlobalSide(SURF_SIDEID,iSide) iBC = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) DO iSpec = 1, nSpecies + ! Initial surface coverage ChemWallProp(iSpec,1,:,:,iSide) = PartBound%CoverageIni(iBC, iSpec) END DO END DO diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index c358b6f51..7c5646e44 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -109,6 +109,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) REAL :: NewPos(1:3) REAL :: SurfMol REAL :: tang1(1:3), tang2(1:3), WallVelo(1:3), BoundsOfElemCenter(1:3), NewVelo(3) +REAL :: AdsHeat, ReacHeat, BetaCoeff REAL,PARAMETER :: eps=1e-6 REAL,PARAMETER :: eps2=1.0-eps INTEGER :: speciesID @@ -223,17 +224,13 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN iProd = SurfChemReac%Products(iReac,iValProd) -! Coverage = PartBound%Coverage(locBCID, iProd) - Coverage = ChemWallProp(iProd,1,SubP,SubQ,SurfSideID) + Coverage = ChemWallProp(iProd,1,SubP,SubQ,SurfSideID) END IF END DO ELSE Coverage = ChemWallProp(speciesID,1,SubP,SubQ,SurfSideID) END IF - ! WRITE(*,*) speciesID - ! WRITE(*,*) 'Coverage', Coverage - ! Definition of the variables MaxCoverage = PartBound%MaxCoverage(locBCID,speciesID) TotalCoverage = SUM(ChemWallProp(:,1,SubP, SubQ, SurfSideID)) @@ -241,6 +238,9 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) S_0 = SurfChemReac%S_initial(iReac) EqConstant = SurfChemReac%EqConstant(iReac) StickCoeff = SurfChemReac%StickCoeff(iReac) + + ! Determine the heat of adsorption in dependence of the coverage [J] + AdsHeat = (SurfChemReac%EReact(iReac) - Coverage * SurfChemReac%EScale(iReac)) /(6.022 * 10.0**(20)) ! Theta = free surface sites required for the adsorption ! Determination of possible coadsorption processes @@ -254,8 +254,6 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) Theta = 1.0 - Coverage/MaxCoverage END IF - !WRITE(*,*) 'Theta', Theta - ! Check whether the maximum coverage value is reached: IF(Theta.GE.0.0 .AND. TotalCoverage.LT.1.0) THEN Theta = Theta**DissOrder @@ -266,8 +264,6 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) StickCoeff = 0.0 END IF - ! WRITE(*,*) 'StickCoeff', StickCoeff - END IF ! Eley-Rideal reaction mechanism @@ -278,8 +274,10 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) ! Definition of the variables WallTemp = PartBound%WallTemp(locBCID) nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) Rate = SurfChemReac%Rate(iReac) + BetaCoeff = SurfChemReac%HeatAccomodation(iReac) + ReacHeat = SurfChemReac%EReact(iReac)/(6.022*10.0**(20)) ! Check for the coverage values for the reactant adsorbed on the surface DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) @@ -321,29 +319,30 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) CALL RemoveParticle(PartID) MPF = Species(speciesID)%MacroParticleFactor + ! Calculate the heat flux on the boundary from the adsorption energy + PartBound%HeatTransferIter(locBCID) = PartBound%HeatTransferIter(locBCID) + AdsHeat * MPF + ! Update the number of adsorbed molecules IF(ANY(SurfChemReac%Products(iReac,:).NE.0)) THEN DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN iProd = SurfChemReac%Reactants(iReac,iValProd) ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) + DissOrder * MPF -! PartBound%AdCount(locBCID, iProd) = PartBound%AdCount(locBCID, iProd) + DissOrder * MPF -! PartBound%Coverage(locBCID, iProd) = PartBound%Coverage(locBCID, iProd) + DissOrder * MPF / PartBound%nMol(locBCID) END IF END DO ELSE ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) + DissOrder * MPF - + ! Output PartBound%AdCount(locBCID, speciesID) = PartBound%AdCount(locBCID, speciesID) + 1. -! PartBound%AdCount(locBCID, speciesID) = PartBound%AdCount(locBCID, speciesID) + DissOrder * MPF -! PartBound%Coverage(locBCID, speciesID) = PartBound%Coverage(locBCID, speciesID) + DissOrder * MPF / PartBound%nMol(locBCID) END IF -! PartBound%TotalCoverage(locBCID) = PartBound%TotalCoverage(locBCID) + DissOrder * MPF/PartBound%nMol(locBCID) - CASE('ER') CALL RemoveParticle(PartID) MPF = Species(speciesID)%MacroParticleFactor + + ! Heat flux on the surface created by the reaction + PartBound%HeatTransferIter(locBCID) = PartBound%HeatTransferIter(locBCID) + ReacHeat * MPF * BetaCoeff + ! Create the Eley-Rideal reaction product TempErgy = SQRT(2*BoltzmannConst*WallTemp/Species(speciesID)%MassIC) @@ -362,7 +361,6 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN iProd = SurfChemReac%Products(iReac,iValProd) - ! PartBound%ERCount(locBCID, iProd) = PartBound%ERCount(locBCID, iProd) + 1.0 * MPF NewVelo(1:3) = VeloFromDistribution('deltadistribution',TempErgy,1,1) @@ -384,10 +382,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) - 1.0 -! PartBound%AdCount(locBCID, iReactant) = PartBound%AdCount(locBCID, iReactant) - 1.0 -! PartBound%Coverage(locBCID, iReactant) = PartBound%Coverage(locBCID, iReactant) - 1.0/PartBound%nMol(locBCID) -! PartBound%TotalCoverage(locBCID) = PartBound%TotalCoverage(locBCID) - 1.0/PartBound%nMol(locBCID) + ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) - 1.0*MPF END IF END DO diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90 index ba775746d..161828c31 100644 --- a/src/particles/surfacemodel/surfacemodel_vars.f90 +++ b/src/particles/surfacemodel/surfacemodel_vars.f90 @@ -50,50 +50,53 @@ MODULE MOD_SurfaceModel_Vars !=== Heterogenous Surface BC ======================================================================================================== TYPE tBoundMap - INTEGER, ALLOCATABLE :: Boundaries(:) + INTEGER, ALLOCATABLE :: Boundaries(:) END TYPE TYPE tSurfFluxMap - TYPE(typeSurfaceflux),ALLOCATABLE :: Surfaceflux(:) + TYPE(typeSurfaceflux),ALLOCATABLE :: Surfaceflux(:) END TYPE - LOGICAL :: DoChemSurface + LOGICAL :: DoChemSurface TYPE tSurfReactions - INTEGER :: NumOfReact ! Number of possible reactions - CHARACTER(LEN=5),ALLOCATABLE :: ReactType(:) ! Type of Reaction (reaction num) - ! A (adsorption) - ! D (desorption) - ! LH (Langmuir-Hinshlewood) - ! ER (Eley-Rideal) - INTEGER, ALLOCATABLE :: Reactants(:,:) ! Reactants: indices of the species starting the reaction [NumOfReact,3] - INTEGER, ALLOCATABLE :: Products(:,:) ! Products: indices of the species resulting from the reaction [NumOfReact,4] - INTEGER, ALLOCATABLE :: Inhibition(:) ! Inhibition reaction - INTEGER, ALLOCATABLE :: NumOfBounds(:) - !REAL, ALLOCATABLE :: ReactProb(:) - REAL, ALLOCATABLE :: EForm(:) + INTEGER :: NumOfReact ! Number of possible reactions + CHARACTER(LEN=5),ALLOCATABLE :: ReactType(:) ! Type of Reaction (reaction num) + ! A (adsorption) + ! D (desorption) + ! LH (Langmuir-Hinshlewood) + ! ER (Eley-Rideal) + INTEGER, ALLOCATABLE :: Reactants(:,:) ! Reactants: indices of the species starting the reaction [NumOfReact,3] + INTEGER, ALLOCATABLE :: Products(:,:) ! Products: indices of the species resulting from the reaction [NumOfReact,4] + INTEGER, ALLOCATABLE :: Inhibition(:) ! Inhibition reaction + INTEGER, ALLOCATABLE :: NumOfBounds(:) + REAL, ALLOCATABLE :: EReact(:) ! Energy exchange with the surface + REAL, ALLOCATABLE :: EScale(:) ! dependence of the energy values on the coverage + REAL, ALLOCATABLE :: HeatAccomodation(:) ! beta coefficient, determining the heat flux on the surface + !REAL, ALLOCATABLE :: ReactProb(:) + REAL, ALLOCATABLE :: EForm(:) ! Parameters for the adsorption - REAL, ALLOCATABLE :: S_initial(:) ! Initial sticking coefficient - REAL, ALLOCATABLE :: MaxCoverage(:) ! Maximal surface coverage - REAL, ALLOCATABLE :: DissOrder(:) ! molecular or dissociative adsorption - REAL, ALLOCATABLE :: EqConstant(:) ! adsorption/dissociation - REAL, ALLOCATABLE :: StickCoeff(:) + REAL, ALLOCATABLE :: S_initial(:) ! Initial sticking coefficient + REAL, ALLOCATABLE :: MaxCoverage(:) ! Maximal surface coverage + REAL, ALLOCATABLE :: DissOrder(:) ! molecular or dissociative adsorption + REAL, ALLOCATABLE :: EqConstant(:) ! adsorption/dissociation + REAL, ALLOCATABLE :: StickCoeff(:) ! Parameters for the desorption - REAL, ALLOCATABLE :: E_initial(:) - REAL, ALLOCATABLE :: W_interact(:) - REAL, ALLOCATABLE :: C_a(:) - REAL, ALLOCATABLE :: C_b(:) + REAL, ALLOCATABLE :: E_initial(:) + REAL, ALLOCATABLE :: W_interact(:) + REAL, ALLOCATABLE :: C_a(:) + REAL, ALLOCATABLE :: C_b(:) ! General Parameters - REAL, ALLOCATABLE :: Rate(:) - REAL, ALLOCATABLE :: Prob(:) - REAL, ALLOCATABLE :: Prefactor(:) - REAL, ALLOCATABLE :: ArrheniusEnergy(:) - LOGICAL, ALLOCATABLE :: BoundisChemSurf(:) - TYPE(tBoundMap), ALLOCATABLE :: BoundMap(:) - TYPE(tCollCaseInfo), ALLOCATABLE:: CollCaseInfo(:) ! Information of collision cases (nCase) - TYPE(tSurfFluxMap), ALLOCATABLE :: SFMap(:) + REAL, ALLOCATABLE :: Rate(:) + REAL, ALLOCATABLE :: Prob(:) + REAL, ALLOCATABLE :: Prefactor(:) + REAL, ALLOCATABLE :: ArrheniusEnergy(:) + LOGICAL, ALLOCATABLE :: BoundisChemSurf(:) + TYPE(tBoundMap), ALLOCATABLE :: BoundMap(:) + TYPE(tCollCaseInfo), ALLOCATABLE :: CollCaseInfo(:) ! Information of collision cases (nCase) + TYPE(tSurfFluxMap), ALLOCATABLE :: SFMap(:) END TYPE -TYPE(tSurfReactions) :: SurfChemReac +TYPE(tSurfReactions) :: SurfChemReac TYPE typeSurfaceflux INTEGER :: BC @@ -130,34 +133,16 @@ MODULE MOD_SurfaceModel_Vars REAL :: Dmax END TYPE tSurfFluxSubSideData -REAL,ALLOCATABLE :: ChemSampWall(:,:,:,:,:) -REAL,ALLOCATABLE :: ChemDesorpWall(:,:,:,:,:) -REAL,ALLOCPOINT :: ChemWallProp(:,:,:,:,:) +REAL,ALLOCATABLE :: ChemSampWall(:,:,:,:,:) +REAL,ALLOCATABLE :: ChemDesorpWall(:,:,:,:,:) +REAL,ALLOCPOINT :: ChemWallProp(:,:,:,:,:) #if USE_MPI -INTEGER :: ChemWallProp_Shared_Win -REAL,ALLOCPOINT :: ChemWallProp_Shared(:,:,:,:,:) -REAL,POINTER :: ChemSampWall_Shared(:,:,:,:,:) -INTEGER :: ChemSampWall_Shared_Win +INTEGER :: ChemWallProp_Shared_Win +REAL,ALLOCPOINT :: ChemWallProp_Shared(:,:,:,:,:) +REAL,POINTER :: ChemSampWall_Shared(:,:,:,:,:) +INTEGER :: ChemSampWall_Shared_Win #endif -! TYPE tRecombinationModel -! INTEGER :: NumOfReact ! Number of possible reactions -! !CHARACTER(LEN=5),ALLOCATABLE :: ReactType(:) ! Type of Reaction (reaction num) -! ! ! A (adsorption) -! ! ! D (desorption) -! ! ! LH (Langmuir-Hinshlewood) -! ! ! ER (Eley-Rideal) -! INTEGER, ALLOCATABLE :: Reactants(:,:) ! Reactants: indices of the species starting the reaction [NumOfReact,3] -! INTEGER, ALLOCATABLE :: Products(:,:) ! Products: indices of the species resulting from the reaction [NumOfReact,4] -! INTEGER, ALLOCATABLE :: NumOfBounds(:) -! REAL, ALLOCATABLE :: RecombCoeff(:) -! LOGICAL, ALLOCATABLE :: BoundisCatSurf(:) -! TYPE(tBoundMap), ALLOCATABLE :: BoundMap(:) -! TYPE(tCollCaseInfo), ALLOCATABLE:: CollCaseInfo(:) ! Information of collision cases (nCase) -! !TYPE(tSurfFluxMap), ALLOCATABLE :: SFMap(:) -! END TYPE tRecombinationModel -! TYPE(tRecombinationModel),ALLOCATABLE :: RecombModel(:) - !=================================================================================================================================== END MODULE MOD_SurfaceModel_Vars diff --git a/src/timedisc/timedisc_TimeStep_DSMC.f90 b/src/timedisc/timedisc_TimeStep_DSMC.f90 index 7bb04d922..5e8052ba6 100644 --- a/src/timedisc/timedisc_TimeStep_DSMC.f90 +++ b/src/timedisc/timedisc_TimeStep_DSMC.f90 @@ -85,11 +85,15 @@ SUBROUTINE TimeStep_DSMC() IF (DoChemSurface) THEN CALL ExchangeChemSurfData() - CALL ParticleSurfChemFlux() + IF (time.GT.0.0) THEN + CALL ParticleSurfChemFlux() + END IF + + ! Output OPEN(10, file='ads.txt', position="APPEND") OPEN(20, file='des.txt', position="APPEND") - OPEN(30, file='des.txt', position="APPEND") + OPEN(30, file='rct.txt', position="APPEND") WRITE(10,*) PartBound%AdCount(1,2) WRITE(20,*) PartBound%DesCount(1,2) @@ -99,7 +103,9 @@ SUBROUTINE TimeStep_DSMC() CLOSE(20) CLOSE(30) - PartBound%AdCount(1, 2) = 0.0 + PartBound%AdCount(1,2) = 0.0 + PartBound%DesCount(1,2) = 0.0 + PartBound%LHCount(1,1) = 0.0 END IF From b9c974eb85eb97c29a103cb361ef1e88965df2f8 Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Tue, 7 Jun 2022 13:07:19 +0200 Subject: [PATCH 006/222] Update number in chemistry flux --- src/particles/emission/particle_surface_chemflux.f90 | 6 +++--- src/particles/surfacemodel/surfacemodel_main.f90 | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index 863580477..acdd7f9cb 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -149,7 +149,7 @@ SUBROUTINE ParticleSurfChemFlux() END IF ! Calculate the desorption energy in dependence of the coverage [J] - DesHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) + !DesHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) ! Define the variables DissOrder = SurfChemReac%DissOrder(iReac) @@ -193,7 +193,7 @@ SUBROUTINE ParticleSurfChemFlux() END IF END IF - PartBound%HeatTransferIter(BoundID) = PartBound%HeatTransferIter(BoundID) - PartBound%DesCountIter(BoundID, iSpec) * DesHeat + ! PartBound%HeatTransferIter(BoundID) = PartBound%HeatTransferIter(BoundID) - PartBound%DesCountIter(BoundID, iSpec) * DesHeat ! Current boundary condition currentBC = BoundID @@ -375,7 +375,7 @@ SUBROUTINE ParticleSurfChemFlux() END DO END IF - PartBound%HeatTransferIter(BoundID) = PartBound%HeatTransferIter(BoundID) + PartBound%LHCountIter(BoundID, iSpec) * ReacHeat * BetaCoeff + ! PartBound%HeatTransferIter(BoundID) = PartBound%HeatTransferIter(BoundID) + PartBound%LHCountIter(BoundID, iSpec) * ReacHeat * BetaCoeff ! Output PartBound%LHCount(BoundID, iSpec) = PartBound%LHCount(BoundID, iSpec) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index 7c5646e44..2e6d6ed4a 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -320,7 +320,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) MPF = Species(speciesID)%MacroParticleFactor ! Calculate the heat flux on the boundary from the adsorption energy - PartBound%HeatTransferIter(locBCID) = PartBound%HeatTransferIter(locBCID) + AdsHeat * MPF + ! PartBound%HeatTransferIter(locBCID) = PartBound%HeatTransferIter(locBCID) + AdsHeat * MPF ! Update the number of adsorbed molecules IF(ANY(SurfChemReac%Products(iReac,:).NE.0)) THEN @@ -341,7 +341,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) MPF = Species(speciesID)%MacroParticleFactor ! Heat flux on the surface created by the reaction - PartBound%HeatTransferIter(locBCID) = PartBound%HeatTransferIter(locBCID) + ReacHeat * MPF * BetaCoeff + !PartBound%HeatTransferIter(locBCID) = PartBound%HeatTransferIter(locBCID) + ReacHeat * MPF * BetaCoeff ! Create the Eley-Rideal reaction product From 36a979ec4e96e388aa98076057b221faf60a6c53 Mon Sep 17 00:00:00 2001 From: Marcel Pfeiffer Date: Tue, 7 Jun 2022 15:53:55 +0200 Subject: [PATCH 007/222] surface output --- .../boundary/particle_boundary_sampling.f90 | 71 ++++++++++++++----- src/particles/dsmc/dsmc_analyze.f90 | 3 +- .../emission/particle_surface_chemflux.f90 | 2 +- src/posti/piclas2vtk/piclas2vtk.f90 | 17 ++++- 4 files changed, 71 insertions(+), 22 deletions(-) diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index ad8a4b6e0..1e44e3b21 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -40,7 +40,7 @@ MODULE MOD_Particle_Boundary_Sampling PUBLIC::DefineParametersParticleBoundarySampling PUBLIC::InitParticleBoundarySampling -PUBLIC::WriteSurfSampleToHDF5 +PUBLIC::WriteSurfSampleToHDF5, WriteSurfSampleChemToHDF5 PUBLIC::FinalizeParticleBoundarySampling !=================================================================================================================================== @@ -865,19 +865,20 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) !----------------------------------------------------------------------------------------------------------------------------------! USE MOD_Globals USE MOD_Globals_Vars ,ONLY: ProjectName -USE MOD_DSMC_Vars ,ONLY: MacroSurfaceVal,MacroSurfaceSpecVal, CollisMode +USE MOD_DSMC_Vars ,ONLY: CollisMode USE MOD_HDF5_Output ,ONLY: WriteAttributeToHDF5,WriteArrayToHDF5,WriteHDF5Header USE MOD_IO_HDF5 USE MOD_MPI_Shared_Vars ,ONLY: mySurfRank -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win, ChemWallProp USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample,CalcSurfaceImpact -USE MOD_Particle_Boundary_Vars ,ONLY: nOutputSides +USE MOD_Particle_Boundary_Vars ,ONLY: nOutputSides, nComputeNodeSurfSides USE MOD_Particle_boundary_Vars ,ONLY: nComputeNodeSurfOutputSides,offsetComputeNodeSurfOutputSide USE MOD_Particle_Boundary_Vars ,ONLY: nSurfBC,SurfBCName, PartBound USE MOD_Particle_Vars ,ONLY: nSpecies #if USE_MPI USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides -USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SURF +USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SURF, MPI_COMM_SHARED +USE MOD_MPI_Shared #endif !----------------------------------------------------------------------------------------------------------------------------------! ! IMPLICIT VARIABLE HANDLING @@ -894,11 +895,14 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) CHARACTER(LEN=255) :: NodeTypeTemp CHARACTER(LEN=255) :: SpecID, PBCID CHARACTER(LEN=255),ALLOCATABLE :: Str2DVarNames(:) -INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, iSpec, iPBC +INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, iSpec, iPBC, iSurfSide +INTEGER :: p,q,OutputCounter REAL :: tstart,tend +REAL, ALLOCATABLE :: MacroSurfaceSpecChemVal(:,:,:,:,:) !=================================================================================================================================== #if USE_MPI +CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win,MPI_COMM_SHARED) ! Return if not a sampling leader IF (MPI_COMM_LEADERS_SURF.EQ.MPI_COMM_NULL) RETURN CALL MPI_BARRIER(MPI_COMM_LEADERS_SURF,iERROR) @@ -908,7 +912,7 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) #endif /*USE_MPI*/ IF (mySurfRank.EQ.0) THEN - WRITE(UNIT_stdOut,'(a)',ADVANCE='NO')' WRITE DSMCSurfSTATE TO HDF5 FILE...' + WRITE(UNIT_stdOut,'(a)',ADVANCE='NO')' WRITE DSMCSurfChemSTATE TO HDF5 FILE...' tstart=LOCALTIME() END IF @@ -916,7 +920,7 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) FileString = TRIM(FileName)//'.h5' ! Create dataset attribute "SurfVarNames" -nVar2D = 1 +nVar2D = 0 nVar2D_Spec = 1 @@ -927,7 +931,7 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) IF (mySurfRank.EQ.0) THEN #endif CALL OpenDataFile(FileString,create=.TRUE.,single=.TRUE.,readOnly=.FALSE.) - Statedummy = 'DSMCSurfState' + Statedummy = 'DSMCSurfChemState' ! Write file header CALL WriteHDF5Header(Statedummy,File_ID) @@ -949,9 +953,10 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Spec'//TRIM(SpecID)//'_Coverage') END DO ! iSpec=1,nSpecies - ! fill varnames for total values - CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Total_Coverage') +! ! fill varnames for total values +! CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Total_Coverage') + CALL WriteAttributeToHDF5(File_ID,'VarNamesSurface',nVar2D_Total,StrArray=Str2DVarNames) CALL CloseDataFile() DEALLOCATE(Str2DVarNames) #if USE_MPI @@ -964,6 +969,36 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) CALL OpenDataFile(FileString,create=.FALSE.,single=.TRUE.,readOnly=.FALSE.) #endif +ALLOCATE(MacroSurfaceSpecChemVal(1:nVar2D_Spec , 1:nSurfSample , 1:nSurfSample , nComputeNodeSurfOutputSides , nSpecies)) +MacroSurfaceSpecChemVal = 0. + +OutputCounter = 0 +DO iSurfSide = 1,nComputeNodeSurfSides + !================== INNER BC CHECK TODO ! +! GlobalSideID = SurfSide2GlobalSide(SURF_SIDEID,iSurfSide) +! IF(SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID).GT.0) THEN +! IF(GlobalSideID.LT.SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID)) THEN +! SurfSideNb = GlobalSide2SurfSide(SURF_SIDEID,SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID)) +! SampWallState(:,:,:,iSurfSide) = SampWallState(:,:,:,iSurfSide) + SampWallState(:,:,:,SurfSideNb) +! ELSE +! CYCLE +! END IF +! END IF + !================== INNER BC CHECK + OutputCounter = OutputCounter + 1 + DO q = 1,nSurfSample + DO p = 1,nSurfSample + ! --- Total output (force per area, heat flux, simulation particle impact per iteration) + ! --- Species-specific output + DO iSpec=1,nSpecies + ! Species-specific counter of simulation particle impacts per iteration + MacroSurfaceSpecChemVal(1,p,q,OutputCounter,iSpec) = ChemWallProp(iSpec,1,p, q, iSurfSide) + END DO ! iSpec=1,nSpecies + END DO ! q=1,nSurfSample + END DO ! p=1,nSurfSample +END DO ! iSurfSide=1,nComputeNodeSurfSides + + nVarCount=0 WRITE(H5_Name,'(A)') 'SurfaceData' ASSOCIATE (& @@ -980,15 +1015,15 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) nVal =(/nVar2D_Spec , nSurfSample , nSurfSample , nLocalSides/) , & offset =(/INT(nVarCount,IK) , 0_IK , 0_IK , offsetSurfSide/) , & collective =.FALSE. , & - RealArray = MacroSurfaceSpecVal(1:nVar2D_Spec,1:nSurfSample,1:nSurfSample,1:nLocalSides,iSpec)) + RealArray = MacroSurfaceSpecChemVal(1:nVar2D_Spec,1:nSurfSample,1:nSurfSample,1:nLocalSides,iSpec)) nVarCount = nVarCount + INT(nVar2D_Spec) END DO - CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , & - nValGlobal =(/nVar2D_Total , nSurfSample, nSurfSample , nGlobalSides/) , & - nVal =(/nVar2D , nSurfSample, nSurfSample , nLocalSides/) , & - offset =(/INT(nVarCount,IK), 0_IK , 0_IK , offsetSurfSide/) , & - collective =.FALSE. , & - RealArray = MacroSurfaceVal(1:nVar2D,1:nSurfSample,1:nSurfSample,1:nLocalSides)) +! CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , & +! nValGlobal =(/nVar2D_Total , nSurfSample, nSurfSample , nGlobalSides/) , & +! nVal =(/nVar2D , nSurfSample, nSurfSample , nLocalSides/) , & +! offset =(/INT(nVarCount,IK), 0_IK , 0_IK , offsetSurfSide/) , & +! collective =.FALSE. , & +! RealArray = MacroSurfaceVal(1:nVar2D,1:nSurfSample,1:nSurfSample,1:nLocalSides)) END ASSOCIATE CALL CloseDataFile() diff --git a/src/particles/dsmc/dsmc_analyze.f90 b/src/particles/dsmc/dsmc_analyze.f90 index 67147d19f..791fd09ca 100644 --- a/src/particles/dsmc/dsmc_analyze.f90 +++ b/src/particles/dsmc/dsmc_analyze.f90 @@ -43,7 +43,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) USE MOD_Globals_Vars ,ONLY: StefanBoltzmannConst USE MOD_DSMC_Vars ,ONLY: MacroSurfaceVal,DSMC,MacroSurfaceSpecVal USE MOD_Mesh_Vars ,ONLY: MeshFile -USE MOD_Particle_Boundary_Sampling ,ONLY: WriteSurfSampleToHDF5 +USE MOD_Particle_Boundary_Sampling ,ONLY: WriteSurfSampleToHDF5,WriteSurfSampleChemToHDF5 USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample,CalcSurfaceImpact @@ -278,6 +278,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) #endif /*USE_MPI*/ CALL WriteSurfSampleToHDF5(TRIM(MeshFile),ActualTime) +CALL WriteSurfSampleChemToHDF5(TRIM(MeshFile),ActualTime) DEALLOCATE(MacroSurfaceVal,MacroSurfaceSpecVal) diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index acdd7f9cb..4cf8f8348 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -324,7 +324,7 @@ SUBROUTINE ParticleSurfChemFlux() END DO ! Determine the reaction energy [J] - BetaCoeff = SurfChemReac%HeatAccomodation(iReac) + !BetaCoeff = SurfChemReac%HeatAccomodation(iReac) ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) ! Calculate the number of molecules on the surface diff --git a/src/posti/piclas2vtk/piclas2vtk.f90 b/src/posti/piclas2vtk/piclas2vtk.f90 index 96fe35b1a..53de7e8a9 100644 --- a/src/posti/piclas2vtk/piclas2vtk.f90 +++ b/src/posti/piclas2vtk/piclas2vtk.f90 @@ -967,7 +967,7 @@ SUBROUTINE ConvertSurfaceData(InputStateFile) USE MOD_Globals USE MOD_Globals_Vars ,ONLY: ProjectName USE MOD_IO_HDF5 ,ONLY: HSize -USE MOD_HDF5_Input ,ONLY: OpenDataFile,CloseDataFile,ReadAttribute,GetDataSize,File_ID,ReadArray +USE MOD_HDF5_Input ,ONLY: OpenDataFile,CloseDataFile,ReadAttribute,GetDataSize,File_ID,ReadArray,DatasetExists USE MOD_piclas2vtk_Vars ,ONLY: SurfConnect ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -978,12 +978,13 @@ SUBROUTINE ConvertSurfaceData(InputStateFile) ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -CHARACTER(LEN=255) :: FileString +CHARACTER(LEN=255) :: FileString, File_Type CHARACTER(LEN=255),ALLOCATABLE :: VarNamesSurf_HDF5(:) INTEGER :: nDims, nVarSurf, nSurfSample, nSurfaceSidesReadin REAL :: OutputTime REAL, ALLOCATABLE :: tempSurfData(:,:,:,:), SurfData(:,:), Coords(:,:) INTEGER :: iSide +LOGICAL :: FileTypeExists !=================================================================================================================================== ! Read in solution @@ -991,6 +992,12 @@ SUBROUTINE ConvertSurfaceData(InputStateFile) CALL ReadAttribute(File_ID,'Project_Name',1,StrScalar=ProjectName) CALL ReadAttribute(File_ID,'Time',1,RealScalar=OutputTime) CALL ReadAttribute(File_ID,'DSMC_nSurfSample',1,IntScalar=nSurfSample) +! check file version +CALL DatasetExists(File_ID,'File_Type',FileTypeExists,attrib=.TRUE.) +IF (FileTypeExists) THEN + CALL ReadAttribute(File_ID,'File_Type',1,StrScalar=File_Type) +END IF + IF(nSurfSample.NE.1) THEN CALL abort(& __STAMP__& @@ -1030,6 +1037,12 @@ SUBROUTINE ConvertSurfaceData(InputStateFile) END IF FileString=TRIM(TIMESTAMP(TRIM(ProjectName)//'_visuSurf',OutputTime))//'.vtu' +IF (FileTypeExists) THEN + SELECT CASE(TRIM(File_Type)) + CASE('DSMCSurfChemState') + FileString=TRIM(TIMESTAMP(TRIM(ProjectName)//'_visuSurfChem',OutputTime))//'.vtu' + END SELECT +END IF CALL WriteDataToVTK_PICLas(4,FileString,nVarSurf,VarNamesSurf_HDF5,SurfConnect%nSurfaceNode,SurfConnect%NodeCoords(1:3,1:SurfConnect%nSurfaceNode),& SurfConnect%nSurfaceBCSides,SurfData,SurfConnect%SideSurfNodeMap(1:4,1:SurfConnect%nSurfaceBCSides)) From 43f85236f39b7f1ca6016f3e47c824274b329caf Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Wed, 8 Jun 2022 15:40:35 +0200 Subject: [PATCH 008/222] emission --- src/particles/emission/particle_surface_chemflux.f90 | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index acdd7f9cb..5ef465594 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -78,7 +78,7 @@ SUBROUTINE ParticleSurfChemFlux() REAL :: Particle_pos(3), RandVal1, xyzNod(3), RVec(2), minPos(2), xi(2), Vector1(3), Vector2(3) REAL :: ndist(3), midpoint(3) REAL,ALLOCATABLE :: particle_positions(:) -REAL :: ReacHeat, DesHeat +REAL :: ReacHeat, DesHeat, BetaCoeff REAL :: nu, E_act, Coverage, Prob, Rate, DissOrder, AdCount REAL :: MPF REAL :: area @@ -149,7 +149,7 @@ SUBROUTINE ParticleSurfChemFlux() END IF ! Calculate the desorption energy in dependence of the coverage [J] - !DesHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) + DesHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) ! Define the variables DissOrder = SurfChemReac%DissOrder(iReac) @@ -193,7 +193,8 @@ SUBROUTINE ParticleSurfChemFlux() END IF END IF - ! PartBound%HeatTransferIter(BoundID) = PartBound%HeatTransferIter(BoundID) - PartBound%DesCountIter(BoundID, iSpec) * DesHeat + ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,2, SubP, SubQ, SurfSideID)) * DesHeat + PartBound%HeatIter(BoundID) = PartBound%HeatIter(BoundID) - INT(ChemDesorpWall(iSpec,2, SubP, SubQ, SurfSideID)) * DesHeat ! Current boundary condition currentBC = BoundID @@ -375,7 +376,8 @@ SUBROUTINE ParticleSurfChemFlux() END DO END IF - ! PartBound%HeatTransferIter(BoundID) = PartBound%HeatTransferIter(BoundID) + PartBound%LHCountIter(BoundID, iSpec) * ReacHeat * BetaCoeff + ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) * ReacHeat * BetaCoeff + PartBound%HeatIter(BoundID) = PartBound%HeatIter(BoundID) - INT(ChemDesorpWall(iSpec,2, SubP, SubQ, SurfSideID)) * DesHeat ! Output PartBound%LHCount(BoundID, iSpec) = PartBound%LHCount(BoundID, iSpec) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) @@ -403,7 +405,6 @@ SUBROUTINE ParticleSurfChemFlux() PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) ! Output - PartBound%DesCount(BoundID, iSpec) = PartBound%DesCount(BoundID, iSpec) + PartInsSubSide ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) NbrOfParticle = NbrOfParticle + PartInsSubSide ALLOCATE(particle_positions(1:PartInsSubSide*3)) From 5e95f8b108edc6f5c0d22c547c7cd0a161178795 Mon Sep 17 00:00:00 2001 From: Marcel Pfeiffer Date: Thu, 9 Jun 2022 15:32:59 +0200 Subject: [PATCH 009/222] parallel chemistry only for one node... --- .../boundary/particle_boundary_sampling.f90 | 1 - src/particles/dsmc/dsmc_analyze.f90 | 7 ++++--- .../particle_mpi_boundary_sampling.f90 | 14 +++++++++----- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index 1e44e3b21..692af2eee 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -902,7 +902,6 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) !=================================================================================================================================== #if USE_MPI -CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win,MPI_COMM_SHARED) ! Return if not a sampling leader IF (MPI_COMM_LEADERS_SURF.EQ.MPI_COMM_NULL) RETURN CALL MPI_BARRIER(MPI_COMM_LEADERS_SURF,iERROR) diff --git a/src/particles/dsmc/dsmc_analyze.f90 b/src/particles/dsmc/dsmc_analyze.f90 index 791fd09ca..cd08397ed 100644 --- a/src/particles/dsmc/dsmc_analyze.f90 +++ b/src/particles/dsmc/dsmc_analyze.f90 @@ -45,7 +45,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) USE MOD_Mesh_Vars ,ONLY: MeshFile USE MOD_Particle_Boundary_Sampling ,ONLY: WriteSurfSampleToHDF5,WriteSurfSampleChemToHDF5 USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample,CalcSurfaceImpact USE MOD_Particle_Boundary_Vars ,ONLY: SurfSide2GlobalSide, GlobalSide2SurfSide, PartBound USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfSides,nComputeNodeSurfOutputSides, BoundaryWallTemp @@ -64,6 +64,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) USE MOD_Particle_Boundary_vars ,ONLY: SurfSideArea_Shared USE MOD_Particle_MPI_Boundary_Sampling,ONLY: ExchangeSurfData USE MOD_Particle_Boundary_Vars ,ONLY: BoundaryWallTemp_Shared_Win +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win #else USE MOD_Particle_Boundary_Vars ,ONLY: SampWallPumpCapacity USE MOD_Particle_Boundary_vars ,ONLY: SampWallState,SampWallImpactNumber,SampWallImpactEnergy @@ -116,7 +117,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) #if USE_MPI CALL ExchangeSurfData() - +IF(SurfChemReac%NumOfReact.GT.0) CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win,MPI_COMM_SHARED) ! Only surface sampling leaders take part in the remainder of this routine IF (MPI_COMM_LEADERS_SURF.EQ.MPI_COMM_NULL) THEN IF (ANY(PartBound%UseAdaptedWallTemp)) THEN @@ -278,7 +279,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) #endif /*USE_MPI*/ CALL WriteSurfSampleToHDF5(TRIM(MeshFile),ActualTime) -CALL WriteSurfSampleChemToHDF5(TRIM(MeshFile),ActualTime) +IF(SurfChemReac%NumOfReact.GT.0) CALL WriteSurfSampleChemToHDF5(TRIM(MeshFile),ActualTime) DEALLOCATE(MacroSurfaceVal,MacroSurfaceSpecVal) diff --git a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 index ad61baea2..2dc6328b4 100644 --- a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 +++ b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 @@ -464,11 +464,13 @@ SUBROUTINE ExchangeChemSurfData() CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win ,MPI_COMM_SHARED) IF (myComputeNodeRank.EQ.0) THEN - - Cov1 = SUM(ChemWallProp(2, 1, 1,1,:))/iter - Cov2 = SUM(ChemWallProp(4, 1, 1,1,:))/iter -END IF - + + IF (iter.GT.0) THEN + Cov1 = SUM(ChemWallProp(2, 1, 1,1,:))/iter + Cov2 = SUM(ChemWallProp(4, 1, 1,1,:))/iter + ELSE + Cov1 = 0.; Cov2 = 0. + END IF OPEN(40, file='cov1.txt', position="APPEND") OPEN(50, file='cov2.txt', position="APPEND") @@ -477,6 +479,8 @@ SUBROUTINE ExchangeChemSurfData() CLOSE(40) CLOSE(50) +END IF + ! prepare buffers for surf leader communication !IF (myComputeNodeRank.EQ.0) THEN From 52914ea75701dfba32f6468fc974374dc9361e6b Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Fri, 10 Jun 2022 10:56:38 +0200 Subject: [PATCH 010/222] output of the heat flux --- .../boundary/particle_boundary_init.f90 | 7 ------ .../boundary/particle_boundary_sampling.f90 | 22 ++++++++++++++++--- .../boundary/particle_boundary_vars.f90 | 3 --- src/particles/dsmc/dsmc_analyze.f90 | 7 +++--- .../emission/particle_surface_chemflux.f90 | 21 +++++++++--------- .../emission/particle_surface_flux_init.f90 | 3 +++ .../particle_mpi_boundary_sampling.f90 | 19 ++-------------- .../surfacemodel/surfacemodel_chemistry.f90 | 11 +++++----- .../surfacemodel/surfacemodel_main.f90 | 6 ++--- src/timedisc/timedisc_TimeStep_DSMC.f90 | 17 -------------- 10 files changed, 45 insertions(+), 71 deletions(-) diff --git a/src/particles/boundary/particle_boundary_init.f90 b/src/particles/boundary/particle_boundary_init.f90 index 8fe44d0be..fc844e5e0 100644 --- a/src/particles/boundary/particle_boundary_init.f90 +++ b/src/particles/boundary/particle_boundary_init.f90 @@ -316,9 +316,6 @@ SUBROUTINE InitializeVariablesPartBoundary() PartBound%SurfaceModel = 0 ALLOCATE(PartBound%CoverageIni(nPartBound, nSpecies)) ALLOCATE(PartBound%MaxCoverage(nPartBound, nSpecies)) -ALLOCATE(PartBound%AdCount(nPartBound, nSpecies)) -ALLOCATE(PartBound%DesCount(nPartBound, nSpecies)) -ALLOCATE(PartBound%LHCount(nPartBound, nSpecies)) ALLOCATE(PartBound%TotalCoverage(nPartBound)) ALLOCATE(PartBound%LatticeVec(nPartBound)) ALLOCATE(PartBound%MolPerUnitCell(nPartBound)) @@ -425,10 +422,6 @@ SUBROUTINE InitializeVariablesPartBoundary() PartBound%CoverageIni(iPartBound, iSpec) = GETREAL('Part-Boundary'//TRIM(hilf)//'-Species'//TRIM(hilf2)//'-Coverage', '0.') PartBound%MaxCoverage(iPartBound, iSpec) = GETREAL('Part-Boundary'//TRIM(hilf)//'-Species'//TRIM(hilf2)//'-MaxCoverage', '1.') PartBound%TotalCoverage(iPartBound) = PartBound%TotalCoverage(iPartBound) + PartBound%CoverageIni(iPartBound, iSpec) - ! Output - PartBound%AdCount(iPartBound, iSpec) = 0. - PartBound%DesCount(iPartBound, iSpec) = 0. - PartBound%LHCount(iPartBound, iSpec) = 0. END DO IF (PartBound%TotalCoverage(iPartBound).GT.1.) THEN CALL abort(& diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index 1e44e3b21..9f3012107 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -895,14 +895,14 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) CHARACTER(LEN=255) :: NodeTypeTemp CHARACTER(LEN=255) :: SpecID, PBCID CHARACTER(LEN=255),ALLOCATABLE :: Str2DVarNames(:) -INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, iSpec, iPBC, iSurfSide +INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, iSpec, iPBC, iSurfSide, nVar2D_Heat INTEGER :: p,q,OutputCounter REAL :: tstart,tend REAL, ALLOCATABLE :: MacroSurfaceSpecChemVal(:,:,:,:,:) +REAL, ALLOCATABLE :: MacroSurfaceHeatVal(:,:,:,:) !=================================================================================================================================== #if USE_MPI -CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win,MPI_COMM_SHARED) ! Return if not a sampling leader IF (MPI_COMM_LEADERS_SURF.EQ.MPI_COMM_NULL) RETURN CALL MPI_BARRIER(MPI_COMM_LEADERS_SURF,iERROR) @@ -922,9 +922,10 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) ! Create dataset attribute "SurfVarNames" nVar2D = 0 nVar2D_Spec = 1 +nVar2D_Heat = 1 -nVar2D_Total = nVar2D + nVar2D_Spec*nSpecies +nVar2D_Total = nVar2D + nVar2D_Spec*nSpecies + nVar2D_Heat ! Generate skeleton for the file with all relevant data on a single proc (MPIRoot) #if USE_MPI @@ -956,6 +957,8 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) ! ! fill varnames for total values ! CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Total_Coverage') + CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Heat_Flux') + CALL WriteAttributeToHDF5(File_ID,'VarNamesSurface',nVar2D_Total,StrArray=Str2DVarNames) CALL CloseDataFile() DEALLOCATE(Str2DVarNames) @@ -972,6 +975,10 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) ALLOCATE(MacroSurfaceSpecChemVal(1:nVar2D_Spec , 1:nSurfSample , 1:nSurfSample , nComputeNodeSurfOutputSides , nSpecies)) MacroSurfaceSpecChemVal = 0. +ALLOCATE(MacroSurfaceHeatVal(1:nVar2D_Heat , 1:nSurfSample , 1:nSurfSample , nComputeNodeSurfOutputSides)) +MacroSurfaceHeatVal = 0. + + OutputCounter = 0 DO iSurfSide = 1,nComputeNodeSurfSides !================== INNER BC CHECK TODO ! @@ -990,6 +997,7 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) DO p = 1,nSurfSample ! --- Total output (force per area, heat flux, simulation particle impact per iteration) ! --- Species-specific output + MacroSurfaceHeatVal(1,p,q,OutputCounter) = SUM(ChemWallProp(:,2,p, q, iSurfSide)) DO iSpec=1,nSpecies ! Species-specific counter of simulation particle impacts per iteration MacroSurfaceSpecChemVal(1,p,q,OutputCounter,iSpec) = ChemWallProp(iSpec,1,p, q, iSurfSide) @@ -1024,6 +1032,14 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) ! offset =(/INT(nVarCount,IK), 0_IK , 0_IK , offsetSurfSide/) , & ! collective =.FALSE. , & ! RealArray = MacroSurfaceVal(1:nVar2D,1:nSurfSample,1:nSurfSample,1:nLocalSides)) + + CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , & + nValGlobal =(/nVar2D_Total , nSurfSample, nSurfSample , nGlobalSides/) , & + nVal =(/nVar2D , nSurfSample, nSurfSample , nLocalSides/) , & + offset =(/INT(nVarCount,IK), 0_IK , 0_IK , offsetSurfSide/) , & + collective =.FALSE. , & + RealArray = MacroSurfaceHeatVal(1:nVar2D_Spec,1:nSurfSample,1:nSurfSample,1:nLocalSides)) + END ASSOCIATE CALL CloseDataFile() diff --git a/src/particles/boundary/particle_boundary_vars.f90 b/src/particles/boundary/particle_boundary_vars.f90 index 0e16c179e..d5feb9bc6 100644 --- a/src/particles/boundary/particle_boundary_vars.f90 +++ b/src/particles/boundary/particle_boundary_vars.f90 @@ -250,9 +250,6 @@ MODULE MOD_Particle_Boundary_Vars REAL , ALLOCATABLE :: MolPerUnitCell(:) ! Molecules per unit cell REAL , ALLOCATABLE :: CoverageIni(:,:) ! Initial boundary coverage REAL , ALLOCATABLE :: MaxCoverage(:,:) - REAL, ALLOCATABLE :: AdCount(:,:) ! number of adsorped molecules for the individual species - REAL, ALLOCATABLE :: DesCount(:,:) ! number of desorped molecules for the individual species - REAL, ALLOCATABLE :: LHCount(:,:) ! number of molecules created by the Langmuir-Hinshlewood reaction LOGICAL , ALLOCATABLE :: Reactive(:) ! flag defining if surface is treated reactively LOGICAL , ALLOCATABLE :: Resample(:) ! Resample Equilibrium Distribution with reflection LOGICAL , ALLOCATABLE :: UseAdaptedWallTemp(:) diff --git a/src/particles/dsmc/dsmc_analyze.f90 b/src/particles/dsmc/dsmc_analyze.f90 index 791fd09ca..cd08397ed 100644 --- a/src/particles/dsmc/dsmc_analyze.f90 +++ b/src/particles/dsmc/dsmc_analyze.f90 @@ -45,7 +45,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) USE MOD_Mesh_Vars ,ONLY: MeshFile USE MOD_Particle_Boundary_Sampling ,ONLY: WriteSurfSampleToHDF5,WriteSurfSampleChemToHDF5 USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample,CalcSurfaceImpact USE MOD_Particle_Boundary_Vars ,ONLY: SurfSide2GlobalSide, GlobalSide2SurfSide, PartBound USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfSides,nComputeNodeSurfOutputSides, BoundaryWallTemp @@ -64,6 +64,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) USE MOD_Particle_Boundary_vars ,ONLY: SurfSideArea_Shared USE MOD_Particle_MPI_Boundary_Sampling,ONLY: ExchangeSurfData USE MOD_Particle_Boundary_Vars ,ONLY: BoundaryWallTemp_Shared_Win +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win #else USE MOD_Particle_Boundary_Vars ,ONLY: SampWallPumpCapacity USE MOD_Particle_Boundary_vars ,ONLY: SampWallState,SampWallImpactNumber,SampWallImpactEnergy @@ -116,7 +117,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) #if USE_MPI CALL ExchangeSurfData() - +IF(SurfChemReac%NumOfReact.GT.0) CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win,MPI_COMM_SHARED) ! Only surface sampling leaders take part in the remainder of this routine IF (MPI_COMM_LEADERS_SURF.EQ.MPI_COMM_NULL) THEN IF (ANY(PartBound%UseAdaptedWallTemp)) THEN @@ -278,7 +279,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) #endif /*USE_MPI*/ CALL WriteSurfSampleToHDF5(TRIM(MeshFile),ActualTime) -CALL WriteSurfSampleChemToHDF5(TRIM(MeshFile),ActualTime) +IF(SurfChemReac%NumOfReact.GT.0) CALL WriteSurfSampleChemToHDF5(TRIM(MeshFile),ActualTime) DEALLOCATE(MacroSurfaceVal,MacroSurfaceSpecVal) diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index 7141ad11a..d0c0af86f 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -78,10 +78,10 @@ SUBROUTINE ParticleSurfChemFlux() REAL :: Particle_pos(3), RandVal1, xyzNod(3), RVec(2), minPos(2), xi(2), Vector1(3), Vector2(3) REAL :: ndist(3), midpoint(3) REAL,ALLOCATABLE :: particle_positions(:) -REAL :: ReacHeat, DesHeat, BetaCoeff +REAL :: ReacHeat, DesHeat REAL :: nu, E_act, Coverage, Prob, Rate, DissOrder, AdCount REAL :: MPF -REAL :: area +REAL :: BetaCoeff REAL :: Vectors(3,3) REAL :: WallTemp REAL :: RanNum @@ -122,7 +122,6 @@ SUBROUTINE ParticleSurfChemFlux() ! Calculate the number of molecules on the surface IF(PartBound%LatticeVec(BoundID).GT.0.) THEN ! Surface molecules in dependence of the occupancy of the unit cell - area = SurfSideArea_Shared(SubP, SubQ,SurfSideID) SurfMol = PartBound%MolPerUnitCell(BoundID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & /(PartBound%LatticeVec(BoundID)*PartBound%LatticeVec(BoundID)) ELSE @@ -194,7 +193,6 @@ SUBROUTINE ParticleSurfChemFlux() END IF ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,2, SubP, SubQ, SurfSideID)) * DesHeat - PartBound%HeatIter(BoundID) = PartBound%HeatIter(BoundID) - INT(ChemDesorpWall(iSpec,2, SubP, SubQ, SurfSideID)) * DesHeat ! Current boundary condition currentBC = BoundID @@ -219,8 +217,7 @@ SUBROUTINE ParticleSurfChemFlux() ndist(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) - ! Output - PartBound%DesCount(BoundID, iSpec) = PartBound%DesCount(BoundID, iSpec) + PartInsSubSide + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) NbrOfParticle = NbrOfParticle + PartInsSubSide ALLOCATE(particle_positions(1:PartInsSubSide*3)) @@ -250,6 +247,9 @@ SUBROUTINE ParticleSurfChemFlux() PEM%GlobalElemID(ParticleIndexNbr) = globElemId PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId !needed when ParticlePush is not executed, e.g. "delay" iPartTotal = iPartTotal + 1 + IF (RadialWeighting%DoRadialWeighting) THEN + PartMPF(ParticleIndexNbr) = CalcRadWeightMPF(PartState(2,ParticleIndexNbr), iSpec,ParticleIndexNbr) + END IF ELSE CALL abort(& __STAMP__& @@ -325,7 +325,7 @@ SUBROUTINE ParticleSurfChemFlux() END DO ! Determine the reaction energy [J] - !BetaCoeff = SurfChemReac%HeatAccomodation(iReac) + BetaCoeff = SurfChemReac%HeatAccomodation(iReac) ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) ! Calculate the number of molecules on the surface @@ -377,10 +377,6 @@ SUBROUTINE ParticleSurfChemFlux() END IF ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) * ReacHeat * BetaCoeff - PartBound%HeatIter(BoundID) = PartBound%HeatIter(BoundID) - INT(ChemDesorpWall(iSpec,2, SubP, SubQ, SurfSideID)) * DesHeat - - ! Output - PartBound%LHCount(BoundID, iSpec) = PartBound%LHCount(BoundID, iSpec) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) ! Current boundary condition currentBC = BoundID @@ -434,6 +430,9 @@ SUBROUTINE ParticleSurfChemFlux() PEM%GlobalElemID(ParticleIndexNbr) = globElemId PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId !needed when ParticlePush is not executed, e.g. "delay" iPartTotal = iPartTotal + 1 + IF (RadialWeighting%DoRadialWeighting) THEN + PartMPF(ParticleIndexNbr) = CalcRadWeightMPF(PartState(2,ParticleIndexNbr), iSpec,ParticleIndexNbr) + END IF ELSE CALL abort(& __STAMP__& diff --git a/src/particles/emission/particle_surface_flux_init.f90 b/src/particles/emission/particle_surface_flux_init.f90 index b9ffa7af5..8a691856d 100644 --- a/src/particles/emission/particle_surface_flux_init.f90 +++ b/src/particles/emission/particle_surface_flux_init.f90 @@ -788,6 +788,9 @@ SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp) DO iSF=1,SurfChemReac%NumOfBounds(iReac) IF (TmpMapToBC(iBC).EQ.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC) THEN !only surfacefluxes with iBC ALLOCATE(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(SurfFluxSideSize(1),SurfFluxSideSize(2),1:TmpSideNumber(iBC))) + IF(RadialWeighting%DoRadialWeighting) THEN + ALLOCATE(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%nVFRSub(1:TmpSideNumber(iBC),1:RadialWeighting%nSubSides)) + END IF END IF END DO END DO diff --git a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 index ad61baea2..09c7e27f6 100644 --- a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 +++ b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 @@ -422,7 +422,7 @@ SUBROUTINE ExchangeChemSurfData() IF (.NOT.SurfOnNode) RETURN ! collect the information from the proc-local shadow arrays in the compute-node shared array -MessageSize = nSpecies*1*nSurfSample*nSurfSample*nComputeNodeSurfTotalSides +MessageSize = nSpecies*2*nSurfSample*nSurfSample*nComputeNodeSurfTotalSides IF (myComputeNodeRank.EQ.0) THEN CALL MPI_REDUCE(ChemSampWall,ChemSampWall_Shared,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_SHARED,IERROR) ELSE @@ -455,7 +455,7 @@ SUBROUTINE ExchangeChemSurfData() ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall_Shared(iSpec,1,:,:,iSide) / & (10.**(19)*SurfSideArea_Shared(:,:,iSide)) END IF - !ChemWallProp(iSpec,2,:,:,iSide) = ChemWallProp(iSpec,2,:,:,iSide) + ChemSampWall_Shared(iSpec,2,:,:,iSide)/SurfMol + ChemWallProp(iSpec,2,:,:,iSide) = ChemWallProp(iSpec,2,:,:,iSide) + ChemSampWall_Shared(iSpec,2,:,:,iSide) END DO ChemSampWall_Shared(:,:,:,:,iSide) = 0.0 END DO @@ -463,21 +463,6 @@ SUBROUTINE ExchangeChemSurfData() CALL BARRIER_AND_SYNC(ChemSampWall_Shared_Win ,MPI_COMM_SHARED) CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win ,MPI_COMM_SHARED) -IF (myComputeNodeRank.EQ.0) THEN - - Cov1 = SUM(ChemWallProp(2, 1, 1,1,:))/iter - Cov2 = SUM(ChemWallProp(4, 1, 1,1,:))/iter -END IF - - OPEN(40, file='cov1.txt', position="APPEND") - OPEN(50, file='cov2.txt', position="APPEND") - - WRITE(40,*) Cov1 - WRITE(50,*) Cov2 - - CLOSE(40) - CLOSE(50) - ! prepare buffers for surf leader communication !IF (myComputeNodeRank.EQ.0) THEN ! nValues = SurfSampSize*nSurfSample**2 diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index 4683c6f99..6f4dfc508 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -247,20 +247,19 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%EForm(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-FormationEnergy','0') END DO -!ALLOCATE( ChemSampWall(1:nSpecies,2,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) -ALLOCATE( ChemSampWall(1:nSpecies,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) -ALLOCATE(ChemDesorpWall(1:nSpecies,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) +ALLOCATE( ChemSampWall(1:nSpecies,2,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) +ALLOCATE(ChemDesorpWall(1:nSpecies,2,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) ChemDesorpWall = 0.0 ChemSampWall = 0.0 #if USE_MPI - CALL Allocate_Shared((/nSpecies,1,nSurfSample,nSurfSample,nComputeNodeSurfTotalSides/),ChemSampWall_Shared_Win,ChemSampWall_Shared) + CALL Allocate_Shared((/nSpecies,2,nSurfSample,nSurfSample,nComputeNodeSurfTotalSides/),ChemSampWall_Shared_Win,ChemSampWall_Shared) CALL MPI_WIN_LOCK_ALL(0,ChemSampWall_Shared_Win,IERROR) IF (myComputeNodeRank.EQ.0) THEN ChemSampWall_Shared = 0. END IF CALL BARRIER_AND_SYNC(ChemSampWall_Shared_Win,MPI_COMM_SHARED) - CALL Allocate_Shared((/nSpecies,1,nSurfSample,nSurfSample,nComputeNodeSurfTotalSides/),ChemWallProp_Shared_Win,ChemWallProp_Shared) + CALL Allocate_Shared((/nSpecies,2,nSurfSample,nSurfSample,nComputeNodeSurfTotalSides/),ChemWallProp_Shared_Win,ChemWallProp_Shared) CALL MPI_WIN_LOCK_ALL(0,ChemWallProp_Shared_Win,IERROR) ChemWallProp => ChemWallProp_Shared IF (myComputeNodeRank.EQ.0) THEN @@ -279,7 +278,7 @@ SUBROUTINE SurfaceModel_Chemistry_Init() END IF CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win,MPI_COMM_SHARED) #else - ALLOCATE(ChemWallProp(1:nSpecies,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) + ALLOCATE(ChemWallProp(1:nSpecies,2,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) ChemWallProp = 0.0 DO iSide = 1, nComputeNodeSurfTotalSides ! get global SideID. This contains only nonUniqueSide, no special mortar treatment required diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index 2e6d6ed4a..f381e26bd 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -320,7 +320,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) MPF = Species(speciesID)%MacroParticleFactor ! Calculate the heat flux on the boundary from the adsorption energy - ! PartBound%HeatTransferIter(locBCID) = PartBound%HeatTransferIter(locBCID) + AdsHeat * MPF + ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID)+ AdsHeat * MPF ! Update the number of adsorbed molecules IF(ANY(SurfChemReac%Products(iReac,:).NE.0)) THEN @@ -332,8 +332,6 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) END DO ELSE ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) + DissOrder * MPF - ! Output - PartBound%AdCount(locBCID, speciesID) = PartBound%AdCount(locBCID, speciesID) + 1. END IF CASE('ER') @@ -341,7 +339,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) MPF = Species(speciesID)%MacroParticleFactor ! Heat flux on the surface created by the reaction - !PartBound%HeatTransferIter(locBCID) = PartBound%HeatTransferIter(locBCID) + ReacHeat * MPF * BetaCoeff + ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) + ReacHeat * MPF * BetaCoeff ! Create the Eley-Rideal reaction product diff --git a/src/timedisc/timedisc_TimeStep_DSMC.f90 b/src/timedisc/timedisc_TimeStep_DSMC.f90 index 5e8052ba6..79d5c0c17 100644 --- a/src/timedisc/timedisc_TimeStep_DSMC.f90 +++ b/src/timedisc/timedisc_TimeStep_DSMC.f90 @@ -90,23 +90,6 @@ SUBROUTINE TimeStep_DSMC() CALL ParticleSurfChemFlux() END IF - ! Output - OPEN(10, file='ads.txt', position="APPEND") - OPEN(20, file='des.txt', position="APPEND") - OPEN(30, file='rct.txt', position="APPEND") - - WRITE(10,*) PartBound%AdCount(1,2) - WRITE(20,*) PartBound%DesCount(1,2) - WRITE(30,*) PartBound%LHCount(1,1) - - CLOSE(10) - CLOSE(20) - CLOSE(30) - - PartBound%AdCount(1,2) = 0.0 - PartBound%DesCount(1,2) = 0.0 - PartBound%LHCount(1,1) = 0.0 - END IF #if USE_LOADBALANCE From a2dc6f5e4146c016099233c84778bd8e9cce1f70 Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Mon, 20 Jun 2022 15:31:31 +0200 Subject: [PATCH 011/222] Output for the heat flux --- .../boundary/particle_boundary_init.f90 | 10 ++++ .../boundary/particle_boundary_sampling.f90 | 35 ++++++++++---- src/particles/dsmc/dsmc_polyatomic_model.f90 | 3 ++ .../emission/particle_emission_tools.f90 | 3 ++ .../emission/particle_surface_chemflux.f90 | 38 ++++++++------- .../particle_mpi_boundary_sampling.f90 | 12 +---- .../surfacemodel/surfacemodel_chemistry.f90 | 10 +--- .../surfacemodel/surfacemodel_init.f90 | 46 +++++++++++++++++++ .../surfacemodel/surfacemodel_main.f90 | 24 ++++++---- src/timedisc/timedisc_TimeStep_DSMC.f90 | 1 - 10 files changed, 125 insertions(+), 57 deletions(-) diff --git a/src/particles/boundary/particle_boundary_init.f90 b/src/particles/boundary/particle_boundary_init.f90 index fc844e5e0..492c3c3a7 100644 --- a/src/particles/boundary/particle_boundary_init.f90 +++ b/src/particles/boundary/particle_boundary_init.f90 @@ -315,10 +315,15 @@ SUBROUTINE InitializeVariablesPartBoundary() ALLOCATE(PartBound%SurfaceModel( 1:nPartBound)) PartBound%SurfaceModel = 0 ALLOCATE(PartBound%CoverageIni(nPartBound, nSpecies)) +PartBound%CoverageIni = 0. ALLOCATE(PartBound%MaxCoverage(nPartBound, nSpecies)) +PartBound%MaxCoverage = 0. ALLOCATE(PartBound%TotalCoverage(nPartBound)) +PartBound%TotalCoverage = 0. ALLOCATE(PartBound%LatticeVec(nPartBound)) +PartBound%LatticeVec = 0. ALLOCATE(PartBound%MolPerUnitCell(nPartBound)) +PartBound%MolPerUnitCell = 0. ALLOCATE(PartBound%Reactive( 1:nPartBound)) PartBound%Reactive = .FALSE. ALLOCATE(PartBound%Voltage(1:nPartBound)) @@ -1140,6 +1145,11 @@ SUBROUTINE FinalizeParticleBoundary() SDEALLOCATE(PartBound%SpeciesSwaps) SDEALLOCATE(PartBound%MapToPartBC) SDEALLOCATE(PartBound%SurfaceModel) +SDEALLOCATE(PartBound%CoverageIni) +SDEALLOCATE(PartBound%MaxCoverage) +SDEALLOCATE(PartBound%TotalCoverage) +SDEALLOCATE(PartBound%LatticeVec) +SDEALLOCATE(PartBound%MolPerUnitCell) SDEALLOCATE(PartBound%Reactive) SDEALLOCATE(PartBound%Dielectric) SDEALLOCATE(PartBound%BoundaryParticleOutputHDF5) diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index 9f3012107..f7a055fd3 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -680,7 +680,7 @@ SUBROUTINE WriteSurfSampleToHDF5(MeshFileName,OutputTime) !----------------------------------------------------------------------------------------------------------------------------------! USE MOD_Globals USE MOD_Globals_Vars ,ONLY: ProjectName -USE MOD_DSMC_Vars ,ONLY: MacroSurfaceVal,MacroSurfaceSpecVal, CollisMode +USE MOD_DSMC_Vars ,ONLY: MacroSurfaceVal,MacroSurfaceSpecVal, CollisMode, DSMC USE MOD_HDF5_Output ,ONLY: WriteAttributeToHDF5,WriteArrayToHDF5,WriteHDF5Header USE MOD_IO_HDF5 USE MOD_MPI_Shared_Vars ,ONLY: mySurfRank @@ -690,6 +690,7 @@ SUBROUTINE WriteSurfSampleToHDF5(MeshFileName,OutputTime) USE MOD_Particle_boundary_Vars ,ONLY: nComputeNodeSurfOutputSides,offsetComputeNodeSurfOutputSide USE MOD_Particle_Boundary_Vars ,ONLY: nSurfBC,SurfBCName, PartBound USE MOD_Particle_Vars ,ONLY: nSpecies +USE MOD_Timedisc_Vars ,ONLY: time #if USE_MPI USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SURF @@ -865,7 +866,7 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) !----------------------------------------------------------------------------------------------------------------------------------! USE MOD_Globals USE MOD_Globals_Vars ,ONLY: ProjectName -USE MOD_DSMC_Vars ,ONLY: CollisMode +USE MOD_DSMC_Vars ,ONLY: CollisMode, DSMC USE MOD_HDF5_Output ,ONLY: WriteAttributeToHDF5,WriteArrayToHDF5,WriteHDF5Header USE MOD_IO_HDF5 USE MOD_MPI_Shared_Vars ,ONLY: mySurfRank @@ -873,10 +874,13 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample,CalcSurfaceImpact USE MOD_Particle_Boundary_Vars ,ONLY: nOutputSides, nComputeNodeSurfSides USE MOD_Particle_boundary_Vars ,ONLY: nComputeNodeSurfOutputSides,offsetComputeNodeSurfOutputSide +USE MOD_Particle_Vars ,ONLY: WriteMacroSurfaceValues,MacroValSampTime USE MOD_Particle_Boundary_Vars ,ONLY: nSurfBC,SurfBCName, PartBound USE MOD_Particle_Vars ,ONLY: nSpecies +USE MOD_Timedisc_Vars ,ONLY: time, TEnd +USE MOD_Particle_VarTimeStep #if USE_MPI -USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides +USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides, SurfSideArea_Shared, SurfSideArea USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SURF, MPI_COMM_SHARED USE MOD_MPI_Shared #endif @@ -897,7 +901,8 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) CHARACTER(LEN=255),ALLOCATABLE :: Str2DVarNames(:) INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, iSpec, iPBC, iSurfSide, nVar2D_Heat INTEGER :: p,q,OutputCounter -REAL :: tstart,tend +REAL :: tstart +REAL :: TimeSample REAL, ALLOCATABLE :: MacroSurfaceSpecChemVal(:,:,:,:,:) REAL, ALLOCATABLE :: MacroSurfaceHeatVal(:,:,:,:) !=================================================================================================================================== @@ -978,6 +983,14 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) ALLOCATE(MacroSurfaceHeatVal(1:nVar2D_Heat , 1:nSurfSample , 1:nSurfSample , nComputeNodeSurfOutputSides)) MacroSurfaceHeatVal = 0. +! IF (WriteMacroSurfaceValues) THEN +! ! Elapsed time since last sampling (variable dt's possible!) +! TimeSample = Time - MacroValSampTime +! MacroValSampTime = Time +! ELSE +! ! Sampling at the end of the simulation: calculated from the user given input +! TimeSample = (Time-(1-DSMC%TimeFracSamp)*TEnd) +! END IF OutputCounter = 0 DO iSurfSide = 1,nComputeNodeSurfSides @@ -997,7 +1010,7 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) DO p = 1,nSurfSample ! --- Total output (force per area, heat flux, simulation particle impact per iteration) ! --- Species-specific output - MacroSurfaceHeatVal(1,p,q,OutputCounter) = SUM(ChemWallProp(:,2,p, q, iSurfSide)) + MacroSurfaceHeatVal(1,p,q,OutputCounter) = SUM(ChemWallProp(:,2,p, q, iSurfSide))/ (SurfSideArea(p,q,iSurfSide)) DO iSpec=1,nSpecies ! Species-specific counter of simulation particle impacts per iteration MacroSurfaceSpecChemVal(1,p,q,OutputCounter,iSpec) = ChemWallProp(iSpec,1,p, q, iSurfSide) @@ -1006,7 +1019,6 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) END DO ! p=1,nSurfSample END DO ! iSurfSide=1,nComputeNodeSurfSides - nVarCount=0 WRITE(H5_Name,'(A)') 'SurfaceData' ASSOCIATE (& @@ -1016,7 +1028,9 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) nLocalSides => INT(nComputeNodeSurfOutputSides,IK) , & offsetSurfSide => INT(offsetComputeNodeSurfOutputSide,IK) , & nVar2D_Spec => INT(nVar2D_Spec,IK) , & + nVar2D_Heat => INT(nVar2D_Heat,IK) , & nVar2D => INT(nVar2D,IK)) + DO iSpec = 1,nSpecies CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , & nValGlobal =(/nVar2D_Total , nSurfSample , nSurfSample , nGlobalSides /) , & @@ -1024,8 +1038,9 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) offset =(/INT(nVarCount,IK) , 0_IK , 0_IK , offsetSurfSide/) , & collective =.FALSE. , & RealArray = MacroSurfaceSpecChemVal(1:nVar2D_Spec,1:nSurfSample,1:nSurfSample,1:nLocalSides,iSpec)) - nVarCount = nVarCount + INT(nVar2D_Spec) + nVarCount = nVarCount + INT(nVar2D_Spec) END DO + ! CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , & ! nValGlobal =(/nVar2D_Total , nSurfSample, nSurfSample , nGlobalSides/) , & ! nVal =(/nVar2D , nSurfSample, nSurfSample , nLocalSides/) , & @@ -1033,12 +1048,12 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) ! collective =.FALSE. , & ! RealArray = MacroSurfaceVal(1:nVar2D,1:nSurfSample,1:nSurfSample,1:nLocalSides)) - CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , & + CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , & nValGlobal =(/nVar2D_Total , nSurfSample, nSurfSample , nGlobalSides/) , & - nVal =(/nVar2D , nSurfSample, nSurfSample , nLocalSides/) , & + nVal =(/nVar2D_Heat , nSurfSample, nSurfSample , nLocalSides/) , & offset =(/INT(nVarCount,IK), 0_IK , 0_IK , offsetSurfSide/) , & collective =.FALSE. , & - RealArray = MacroSurfaceHeatVal(1:nVar2D_Spec,1:nSurfSample,1:nSurfSample,1:nLocalSides)) + RealArray = MacroSurfaceHeatVal(1:nVar2D_Heat,1:nSurfSample,1:nSurfSample,1:nLocalSides)) END ASSOCIATE diff --git a/src/particles/dsmc/dsmc_polyatomic_model.f90 b/src/particles/dsmc/dsmc_polyatomic_model.f90 index 7c94b9a95..a59e661d4 100644 --- a/src/particles/dsmc/dsmc_polyatomic_model.f90 +++ b/src/particles/dsmc/dsmc_polyatomic_model.f90 @@ -232,6 +232,9 @@ SUBROUTINE DSMC_SetInternalEnr_Poly_ARM_SingleMode(iSpecies, iInit, iPart, init_ CASE(3) ! reactive surface TVib=PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iInit)%BC) TRot=PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iInit)%BC) + CASE(4) ! reactive surface + TVib=PartBound%WallTemp(iInit) + TRot=PartBound%WallTemp(iInit) CASE DEFAULT CALL abort(& __STAMP__& diff --git a/src/particles/emission/particle_emission_tools.f90 b/src/particles/emission/particle_emission_tools.f90 index 40ac855e6..84a41f778 100644 --- a/src/particles/emission/particle_emission_tools.f90 +++ b/src/particles/emission/particle_emission_tools.f90 @@ -441,6 +441,9 @@ SUBROUTINE DSMC_SetInternalEnr_LauxVFD(iSpecies, iInit, iPart, init_or_sf,iReac) CASE(3) !reactive surface TVib=PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iInit)%BC) TRot=PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iInit)%BC) + CASE(4) !reactive surface + TVib=PartBound%WallTemp(iInit) + TRot=PartBound%WallTemp(iInit) CASE DEFAULT CALL abort(& __STAMP__& diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index d0c0af86f..0a2e0344f 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -41,15 +41,13 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Mesh_Vars ,ONLY: SideToElem, offsetElem USE MOD_Part_Tools ,ONLY: GetParticleWeight USE MOD_Part_Emission_Tools ,ONLY: SetParticleChargeAndMass, SetParticleMPF -USE MOD_Particle_Analyze_Vars ,ONLY: CalcPartBalance, CalcAdaptiveBCInfo, nPartIn, PartEkinIn +USE MOD_Particle_Analyze_Vars ,ONLY: CalcPartBalance, nPartIn, PartEkinIn USE MOD_Particle_Analyze_Tools ,ONLY: CalcEkinPart USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID -USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCPartNumOut USE MOD_Particle_VarTimeStep ,ONLY: CalcVarTimeStep -USE MOD_Timedisc_Vars ,ONLY: RKdtFrac, dt +USE MOD_Timedisc_Vars ,ONLY: dt USE MOD_Particle_Surfaces_Vars USE MOD_Particle_Boundary_Vars -USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared USE MOD_SurfaceModel USE MOD_SurfaceModel_Chemistry USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win,SurfChemReac, ChemWallProp, ChemDesorpWall @@ -60,7 +58,6 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod, TrackInfo #endif /*IMPA*/ #if USE_LOADBALANCE -USE MOD_LoadBalance_Vars ,ONLY: nSurfacefluxPerElem USE MOD_LoadBalance_Timers ,ONLY: LBStartTime, LBElemSplitTime, LBPauseTime #endif /*USE_LOADBALANCE*/ ! IMPLICIT VARIABLE HANDLING @@ -75,18 +72,15 @@ SUBROUTINE ParticleSurfChemFlux() INTEGER :: iSpec , PositionNbr, iSF, iSide, currentBC, SideID, NbrOfParticle, ParticleIndexNbr INTEGER :: BCSideID, ElemID, iLocSide, iSample, jSample, PartInsSubSide, iPart, iPartTotal INTEGER :: PartsEmitted, Node1, Node2, globElemId -REAL :: Particle_pos(3), RandVal1, xyzNod(3), RVec(2), minPos(2), xi(2), Vector1(3), Vector2(3) +REAL :: Particle_pos(3), xyzNod(3), Vector1(3), Vector2(3) REAL :: ndist(3), midpoint(3) REAL,ALLOCATABLE :: particle_positions(:) REAL :: ReacHeat, DesHeat -REAL :: nu, E_act, Coverage, Prob, Rate, DissOrder, AdCount -REAL :: MPF +REAL :: nu, E_act, Coverage, Rate, DissOrder, AdCount REAL :: BetaCoeff -REAL :: Vectors(3,3) REAL :: WallTemp -REAL :: RanNum REAL :: SurfMol -INTEGER :: iSurfSite, SurfNumOfReac, iReac +INTEGER :: SurfNumOfReac, iReac INTEGER :: BoundID INTEGER :: iVal, iReactant, iValReac, SurfSideID INTEGER :: SubP, SubQ @@ -96,10 +90,13 @@ SUBROUTINE ParticleSurfChemFlux() #endif /*USE_LOADBALANCE*/ !=================================================================================================================================== SurfNumOfReac = SurfChemReac%NumOfReact +SubP = 1 +SubQ = 1 DO iReac = 1, SurfNumOfReac SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) - ! Desorption + + ! Desorption CASE('D') DO iVal=1, SIZE(SurfChemReac%Products(iReac,:)) IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN @@ -116,8 +113,6 @@ SUBROUTINE ParticleSurfChemFlux() SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) ! SubP = TrackInfo%p ! SubQ = TrackInfo%q - SubP = 1 - SubQ = 1 ! Calculate the number of molecules on the surface IF(PartBound%LatticeVec(BoundID).GT.0.) THEN @@ -179,7 +174,7 @@ SUBROUTINE ParticleSurfChemFlux() END IF ! Update the adsorbtion and desorption count - IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GT.1.)THEN + IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.1.)THEN IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN @@ -201,7 +196,7 @@ SUBROUTINE ParticleSurfChemFlux() iPartTotal = 0 ! Loop over the side numbers - IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)).GT.1) THEN + IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)).GE.1) THEN ! Random distribution of the particles on the surface ! Define the necessary variables @@ -297,6 +292,7 @@ SUBROUTINE ParticleSurfChemFlux() END IF END DO !iSpec + ! LH-reaction CASE('LH') ! Choose the reactive boundaries DO iSF=1,SurfChemReac%NumOfBounds(iReac) @@ -308,6 +304,9 @@ SUBROUTINE ParticleSurfChemFlux() globElemId = ElemID + offSetElem SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + ! SubP = TrackInfo%p + ! SubQ = TrackInfo%q + IF (SurfSideID.LT.1) THEN CALL abort(& __STAMP__& @@ -367,7 +366,7 @@ SUBROUTINE ParticleSurfChemFlux() END DO ! Update the surface coverage values - IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GT.1.) THEN + IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.1.) THEN DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) @@ -385,7 +384,7 @@ SUBROUTINE ParticleSurfChemFlux() iPartTotal = 0 ! Loop over the side numbers - IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)).GT.1) THEN + IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)).GE.1) THEN ! Random distribution of the particles on the surface ! Define the necessary variables xyzNod(1:3) = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) @@ -587,7 +586,7 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSide ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -INTEGER :: i,PositionNbr,envelope,currentBC,SampleElemID +INTEGER :: i,PositionNbr,envelope,currentBC REAL :: Vec3D(3), vec_nIn(1:3), vec_t1(1:3), vec_t2(1:3) REAL :: a,zstar,RandVal1,RandVal2(2),RandVal3(3),u,RandN,RandN_save,Velo1,Velo2,Velosq,T,beta,z LOGICAL :: RandN_in_Mem @@ -595,7 +594,6 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSide REAL :: Velo_t1 ! Velo comp. of first orth. vector in tria REAL :: Velo_t2 ! Velo comp. of second orth. vector in tria REAL :: VeloIC -REAL :: VeloVec(1:3) !=================================================================================================================================== IF(PartIns.LT.1) RETURN diff --git a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 index 09c7e27f6..fca3fed4a 100644 --- a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 +++ b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 @@ -395,8 +395,8 @@ SUBROUTINE ExchangeChemSurfData() USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactNumber,SampWallImpactNumber_Shared,SampWallImpactNumber_Shared_Win USE MOD_Particle_MPI_Vars ,ONLY: SurfSendBuf,SurfRecvBuf USE MOD_Particle_Vars ,ONLY: nSpecies -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, ChemWallProp, ChemSampWall, ChemSampWall_Shared, ChemWallProp_Shared_Win -USE MOD_SurfaceModel_Vars ,ONLY: ChemSampWall_Shared_Win, ChemDesorpWall +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp, ChemSampWall, ChemSampWall_Shared, ChemWallProp_Shared_Win +USE MOD_SurfaceModel_Vars ,ONLY: ChemSampWall_Shared_Win USE MOD_Particle_Boundary_vars ,ONLY: SurfSideArea_Shared, SurfSide2GlobalSide USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared ! IMPLICIT VARIABLE HANDLING @@ -407,9 +407,6 @@ SUBROUTINE ExchangeChemSurfData() ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -REAL :: SurfMol(2,2) -REAL :: Cov1, Cov2 -INTEGER :: iter INTEGER :: iProc,SideID, firstSide, lastSide, GlobalSideID, locBCID, iSide, iSpec INTEGER :: iPos,p,q INTEGER :: MessageSize,iSurfSide,SurfSideID @@ -438,16 +435,11 @@ SUBROUTINE ExchangeChemSurfData() lastSide = nSurfTotalSides #endif /*USE_MPI*/ -iter = 0 - DO iSide = firstSide, lastSide GlobalSideID = SurfSide2GlobalSide(SURF_SIDEID,iSide) locBCID = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,GlobalSideID)) DO iSpec =1, nSpecies - IF((locBCID.EQ.1).AND.(iSpec.EQ.4)) THEN - iter = iter + 1 - END IF IF (PartBound%LatticeVec(locBCID).GT.0.) THEN ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall_Shared(iSpec,1,:,:,iSide) * PartBound%LatticeVec(locBCID)* & PartBound%LatticeVec(locBCID)/(PartBound%MolPerUnitCell(locBCID)*SurfSideArea_Shared(:,:,iSide)) diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index 6f4dfc508..1ac1cb752 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -93,7 +93,6 @@ SUBROUTINE SurfaceModel_Chemistry_Init() ! MODULES USE MOD_Globals USE MOD_ReadInTools -USE MOD_DSMC_Vars ,ONLY: SpecDSMC USE MOD_PARTICLE_Vars ,ONLY: nSpecies USE MOD_Mesh_Vars ,ONLY: SideToElem, offsetElem USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID @@ -114,14 +113,9 @@ SUBROUTINE SurfaceModel_Chemistry_Init() !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES CHARACTER(LEN=3) :: hilf -INTEGER :: iReac, iReac2, iSpec, iPart +INTEGER :: iReac, iReac2, iSpec INTEGER :: ReadInNumOfReact -INTEGER :: firstSide, lastSide -INTEGER :: iSF, iSide, SideID, iBC, SurfSideID -INTEGER :: BCSideID, ElemID, iLocSide -INTEGER :: globElemId -INTEGER :: GlobalSideID -INTEGER :: SurfNumOfReac +INTEGER :: iSide, SideID, iBC REAL, ALLOCATABLE :: StoichCoeff(:,:) !=================================================================================================================================== diff --git a/src/particles/surfacemodel/surfacemodel_init.f90 b/src/particles/surfacemodel/surfacemodel_init.f90 index 8d7000e50..5b7fd68fe 100644 --- a/src/particles/surfacemodel/surfacemodel_init.f90 +++ b/src/particles/surfacemodel/surfacemodel_init.f90 @@ -161,7 +161,12 @@ SUBROUTINE FinalizeSurfaceModel() !> Deallocate surface model vars !=================================================================================================================================== ! MODULES +USE MOD_Globals USE MOD_SurfaceModel_Vars +#if USE_MPI +USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED +USE MOD_MPI_Shared +#endif ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -173,6 +178,47 @@ SUBROUTINE FinalizeSurfaceModel() !=================================================================================================================================== SDEALLOCATE(SurfModResultSpec) SDEALLOCATE(SurfModEnergyDistribution) +!SDEALLOCATE(StoichCoeff) +SDEALLOCATE(SurfChemReac%ReactType) +SDEALLOCATE(SurfChemReac%Reactants) +SDEALLOCATE(SurfChemReac%Products) +SDEALLOCATE(SurfChemReac%Inhibition) +SDEALLOCATE(SurfChemReac%EForm) +SDEALLOCATE(SurfChemReac%EReact) +SDEALLOCATE(SurfChemReac%EScale) +SDEALLOCATE(SurfChemReac%HeatAccomodation) +SDEALLOCATE(SurfChemReac%BoundisChemSurf) +SDEALLOCATE(SurfChemReac%NumOfBounds) +SDEALLOCATE(SurfChemReac%BoundMap) +SDEALLOCATE(SurfChemReac%S_initial) +SDEALLOCATE(SurfChemReac%EqConstant) +SDEALLOCATE(SurfChemReac%DissOrder) +SDEALLOCATE(SurfChemReac%StickCoeff) +SDEALLOCATE(SurfChemReac%E_initial) +SDEALLOCATE(SurfChemReac%W_interact) +SDEALLOCATE(SurfChemReac%C_a) +SDEALLOCATE(SurfChemReac%C_b) +SDEALLOCATE(SurfChemReac%Rate) +SDEALLOCATE(SurfChemReac%Prob) +SDEALLOCATE(SurfChemReac%ArrheniusEnergy) +SDEALLOCATE(SurfChemReac%Prefactor) + +#if USE_MPI + CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR) + CALL UNLOCK_AND_FREE(ChemWallProp_Shared_Win) + CALL UNLOCK_AND_FREE(ChemSampWall_Shared_Win) + ADEALLOCATE(ChemSampWall_Shared) + ADEALLOCATE(ChemWallProp_Shared) + SDEALLOCATE(ChemDesorpWall) + SDEALLOCATE(ChemSampWall) +#else + SDEALLOCATE(ChemDesorpWall) + SDEALLOCATE(ChemSampWall) + SDEALLOCATE(ChemWallProp) +#endif + +SDEALLOCATE(SurfChemReac%SFMap) + END SUBROUTINE FinalizeSurfaceModel END MODULE MOD_SurfaceModel_Init diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index f381e26bd..63987565a 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -68,7 +68,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD USE MOD_PICDepo_Tools ,ONLY: DepositParticleOnNodes USE MOD_part_operations ,ONLY: RemoveParticle, CreateParticle -USE MOD_part_tools ,ONLY: CalcRadWeightMPF, VeloFromDistribution +USE MOD_part_tools ,ONLY: CalcRadWeightMPF, VeloFromDistribution, GetParticleWeight USE MOD_TimeDisc_Vars ,ONLY: dt ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -110,6 +110,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) REAL :: SurfMol REAL :: tang1(1:3), tang2(1:3), WallVelo(1:3), BoundsOfElemCenter(1:3), NewVelo(3) REAL :: AdsHeat, ReacHeat, BetaCoeff +REAL :: partWeight REAL,PARAMETER :: eps=1e-6 REAL,PARAMETER :: eps2=1.0-eps INTEGER :: speciesID @@ -318,28 +319,35 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) CASE('A') CALL RemoveParticle(PartID) MPF = Species(speciesID)%MacroParticleFactor + partWeight = GetParticleWeight(PartID) + IF(.NOT.(usevMPF.OR.RadialWeighting%DoRadialWeighting)) THEN + partWeight = partWeight * Species(speciesID)%MacroParticleFactor + END IF ! Calculate the heat flux on the boundary from the adsorption energy - ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID)+ AdsHeat * MPF - + ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID)+ AdsHeat * partWeight ! Update the number of adsorbed molecules IF(ANY(SurfChemReac%Products(iReac,:).NE.0)) THEN DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN iProd = SurfChemReac%Reactants(iReac,iValProd) - ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) + DissOrder * MPF + ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) + DissOrder * partWeight END IF END DO ELSE - ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) + DissOrder * MPF + ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) + DissOrder * partWeight END IF CASE('ER') CALL RemoveParticle(PartID) MPF = Species(speciesID)%MacroParticleFactor + partWeight = GetParticleWeight(PartID) + IF(.NOT.(usevMPF.OR.RadialWeighting%DoRadialWeighting)) THEN + partWeight = partWeight * Species(speciesID)%MacroParticleFactor + END IF ! Heat flux on the surface created by the reaction - ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) + ReacHeat * MPF * BetaCoeff + ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) + ReacHeat * partWeight * BetaCoeff ! Create the Eley-Rideal reaction product @@ -366,7 +374,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) NewVelo(1:3) = tang1(1:3)*NewVelo(1) + tang2(1:3)*NewVelo(2) - n_loc(1:3)*NewVelo(3) + WallVelo(1:3) NewPos(1:3) = eps*BoundsOfElemCenter(1:3) + eps2*PartPosImpact(1:3) - CALL CreateParticle(iProd,NewPos(1:3),GlobalElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID, NewMPF=MPF) + CALL CreateParticle(iProd,NewPos(1:3),GlobalElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID, NewMPF=partWeight) IF (SpecDSMC(iProd)%PolyatomicMol) THEN CALL DSMC_SetInternalEnr_Poly(iProd,locBCID,NewPartID,4,iReac) @@ -380,7 +388,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) - 1.0*MPF + ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) - 1.0*partWeight END IF END DO diff --git a/src/timedisc/timedisc_TimeStep_DSMC.f90 b/src/timedisc/timedisc_TimeStep_DSMC.f90 index 79d5c0c17..741d6148f 100644 --- a/src/timedisc/timedisc_TimeStep_DSMC.f90 +++ b/src/timedisc/timedisc_TimeStep_DSMC.f90 @@ -49,7 +49,6 @@ SUBROUTINE TimeStep_DSMC() USE MOD_Particle_Tracking ,ONLY: PerformTracking USE MOD_SurfaceModel_Porous ,ONLY: PorousBoundaryRemovalProb_Pressure USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, DoChemSurface -USE MOD_Particle_Boundary_Vars ,ONLY: PartBound USE MOD_vMPF ,ONLY: SplitAndMerge #if USE_MPI USE MOD_Particle_MPI ,ONLY: IRecvNbOfParticles, MPIParticleSend,MPIParticleRecv,SendNbOfparticles From 94299f681b3f58d3ea4e629a153cf9eaf44e196c Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Wed, 29 Jun 2022 08:55:38 +0200 Subject: [PATCH 012/222] Separate LH-reaction and desorption --- .../boundary/particle_boundary_sampling.f90 | 18 +- .../emission/particle_surface_chemflux.f90 | 277 ++++++++++++------ .../surfacemodel/surfacemodel_chemistry.f90 | 6 + 3 files changed, 191 insertions(+), 110 deletions(-) diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index f7a055fd3..45c9c37f9 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -680,7 +680,7 @@ SUBROUTINE WriteSurfSampleToHDF5(MeshFileName,OutputTime) !----------------------------------------------------------------------------------------------------------------------------------! USE MOD_Globals USE MOD_Globals_Vars ,ONLY: ProjectName -USE MOD_DSMC_Vars ,ONLY: MacroSurfaceVal,MacroSurfaceSpecVal, CollisMode, DSMC +USE MOD_DSMC_Vars ,ONLY: MacroSurfaceVal,MacroSurfaceSpecVal, CollisMode USE MOD_HDF5_Output ,ONLY: WriteAttributeToHDF5,WriteArrayToHDF5,WriteHDF5Header USE MOD_IO_HDF5 USE MOD_MPI_Shared_Vars ,ONLY: mySurfRank @@ -690,7 +690,6 @@ SUBROUTINE WriteSurfSampleToHDF5(MeshFileName,OutputTime) USE MOD_Particle_boundary_Vars ,ONLY: nComputeNodeSurfOutputSides,offsetComputeNodeSurfOutputSide USE MOD_Particle_Boundary_Vars ,ONLY: nSurfBC,SurfBCName, PartBound USE MOD_Particle_Vars ,ONLY: nSpecies -USE MOD_Timedisc_Vars ,ONLY: time #if USE_MPI USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SURF @@ -874,11 +873,8 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample,CalcSurfaceImpact USE MOD_Particle_Boundary_Vars ,ONLY: nOutputSides, nComputeNodeSurfSides USE MOD_Particle_boundary_Vars ,ONLY: nComputeNodeSurfOutputSides,offsetComputeNodeSurfOutputSide -USE MOD_Particle_Vars ,ONLY: WriteMacroSurfaceValues,MacroValSampTime USE MOD_Particle_Boundary_Vars ,ONLY: nSurfBC,SurfBCName, PartBound USE MOD_Particle_Vars ,ONLY: nSpecies -USE MOD_Timedisc_Vars ,ONLY: time, TEnd -USE MOD_Particle_VarTimeStep #if USE_MPI USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides, SurfSideArea_Shared, SurfSideArea USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SURF, MPI_COMM_SHARED @@ -901,8 +897,7 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) CHARACTER(LEN=255),ALLOCATABLE :: Str2DVarNames(:) INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, iSpec, iPBC, iSurfSide, nVar2D_Heat INTEGER :: p,q,OutputCounter -REAL :: tstart -REAL :: TimeSample +REAL :: tstart,tend REAL, ALLOCATABLE :: MacroSurfaceSpecChemVal(:,:,:,:,:) REAL, ALLOCATABLE :: MacroSurfaceHeatVal(:,:,:,:) !=================================================================================================================================== @@ -983,15 +978,6 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) ALLOCATE(MacroSurfaceHeatVal(1:nVar2D_Heat , 1:nSurfSample , 1:nSurfSample , nComputeNodeSurfOutputSides)) MacroSurfaceHeatVal = 0. -! IF (WriteMacroSurfaceValues) THEN -! ! Elapsed time since last sampling (variable dt's possible!) -! TimeSample = Time - MacroValSampTime -! MacroValSampTime = Time -! ELSE -! ! Sampling at the end of the simulation: calculated from the user given input -! TimeSample = (Time-(1-DSMC%TimeFracSamp)*TEnd) -! END IF - OutputCounter = 0 DO iSurfSide = 1,nComputeNodeSurfSides !================== INNER BC CHECK TODO ! diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index 0a2e0344f..367a408d3 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -96,100 +96,91 @@ SUBROUTINE ParticleSurfChemFlux() SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) - ! Desorption - CASE('D') - DO iVal=1, SIZE(SurfChemReac%Products(iReac,:)) - IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN - iSpec = SurfChemReac%Products(iReac,iVal) - ! Choose the reactive boundaries - DO iSF=1, SurfChemReac%NumOfBounds(iReac) - BoundID = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC - DO iSide = 1, BCdata_auxSF(BoundID)%SideNumber - BCSideID=BCdata_auxSF(BoundID)%SideList(iSide) - ElemID = SideToElem(S2E_ELEM_ID,BCSideID) - iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) - globElemId = ElemID + offSetElem - SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) - SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) - ! SubP = TrackInfo%p - ! SubQ = TrackInfo%q + ! LH-reaction + CASE('LHD') + ! Choose the reactive boundaries + DO iSF=1,SurfChemReac%NumOfBounds(iReac) + BoundID = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC + DO iSide = 1, BCdata_auxSF(BoundID)%SideNumber + BCSideID=BCdata_auxSF(BoundID)%SideList(iSide) + ElemID = SideToElem(S2E_ELEM_ID,BCSideID) + iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) + globElemId = ElemID + offSetElem + SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + ! SubP = TrackInfo%p + ! SubQ = TrackInfo%q - ! Calculate the number of molecules on the surface - IF(PartBound%LatticeVec(BoundID).GT.0.) THEN - ! Surface molecules in dependence of the occupancy of the unit cell - SurfMol = PartBound%MolPerUnitCell(BoundID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & - /(PartBound%LatticeVec(BoundID)*PartBound%LatticeVec(BoundID)) - ELSE - ! Alternative calculation by average number of molecules per area for a monolayer - SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) - END IF - IF (SurfSideID.LT.1) THEN - CALL abort(& - __STAMP__& - ,'Chemical Surface Flux is not allowed on non-sampling sides!') - END IF + IF (SurfSideID.LT.1) THEN + CALL abort(& + __STAMP__& + ,'Chemical Surface Flux is not allowed on non-sampling sides!') + END IF + ! Define the variables + Coverage = 1. + ! prefactor for the rate equation including the dependency on all coverage values + DO iVal=1,SIZE(SurfChemReac%Reactants(iReac,:)) - IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) - AdCount = Coverage * SurfMol - END IF - END DO - ELSE - Coverage = ChemWallProp(iSpec,1,SubP, SubQ, SurfSideID) - AdCount = Coverage * SurfMol - END IF + IF(SurfChemReac%Reactants(iReac,iVal).GT.0) THEN + iSpec = SurfChemReac%Reactants(iReac,iVal) + Coverage = Coverage * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) + END IF + END DO - ! Calculate the desorption energy in dependence of the coverage [J] - DesHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) + ! Determine the reaction energy [J] + BetaCoeff = SurfChemReac%HeatAccomodation(iReac) + ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) - ! Define the variables - DissOrder = SurfChemReac%DissOrder(iReac) - nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) - Rate = SurfChemReac%Rate(iReac) + ! Calculate the number of molecules on the surface + IF(PartBound%LatticeVec(BoundID).GT.0.) THEN + ! Surface molecules in dependence of the occupancy of the unit cell + SurfMol = PartBound%MolPerUnitCell(BoundID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & + /(PartBound%LatticeVec(BoundID)*PartBound%LatticeVec(BoundID)) + ELSE + ! Alternative calculation by average number of molecules per area for a monolayer + SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) + END IF - ! Calculate the desorption parameters in dependence of coverage and temperature of the boundary - IF(nu.EQ.0.) THEN - nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) - IF (DissOrder.EQ.2) THEN - ! Convert the prefactor to coverage values for the associative desorption - nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) *10.**(15) - END IF - END IF - - ! Boundary temperature - WallTemp = PartBound%WallTemp(BoundID) - E_act = SurfChemReac%E_initial(iReac) + Coverage * SurfChemReac%W_interact(iReac) - Rate = nu * Coverage**DissOrder * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol + WallTemp = PartBound%WallTemp(BoundID) - ! Determine the desorption probability - ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = Rate * dt * SurfMol + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/DissOrder + nu = SurfChemReac%Prefactor(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) - IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.(AdCount/DissOrder)) THEN - ! Upper bound for the desorption number - ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = AdCount/DissOrder - END IF + ! Calculate the rate in dependence of the temperature and coverage + Rate = nu * Coverage * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol + ! Is the LH routine in this way redundant for the consideration of multiple products s? + DO iVal=1,SIZE(SurfChemReac%Products(iReac,:)) + IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN + iSpec = SurfChemReac%Products(iReac,iVal) - ! Update the adsorbtion and desorption count - IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.1.)THEN - IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) - DissOrder*ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfMol - END IF - END DO - ELSE - ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) = ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) - DissOrder*ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfMol + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = Rate * dt * SurfMol + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) + + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + Coverage = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) + AdCount = Coverage * SurfMol + + !Check if enough reactants exist on the surface + IF(ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) .GT. AdCount) THEN + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = AdCount END IF + END IF + END DO - ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,2, SubP, SubQ, SurfSideID)) * DesHeat + ! Update the surface coverage values + IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.1.) THEN + ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) * ReacHeat * BetaCoeff + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) - ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfMol + END IF + END DO + END IF - ! Current boundary condition + ! Current boundary condition currentBC = BoundID PartsEmitted = 0 NbrOfParticle = 0 @@ -197,7 +188,6 @@ SUBROUTINE ParticleSurfChemFlux() ! Loop over the side numbers IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)).GE.1) THEN - ! Random distribution of the particles on the surface ! Define the necessary variables xyzNod(1:3) = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) @@ -212,7 +202,7 @@ SUBROUTINE ParticleSurfChemFlux() ndist(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) - + ! Output ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) NbrOfParticle = NbrOfParticle + PartInsSubSide ALLOCATE(particle_positions(1:PartInsSubSide*3)) @@ -287,12 +277,12 @@ SUBROUTINE ParticleSurfChemFlux() __STAMP__& ,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') END IF - END DO - END DO ! iSF - END IF + END IF + END DO + END DO ! iSF END DO !iSpec - ! LH-reaction + ! LH-reaction CASE('LH') ! Choose the reactive boundaries DO iSF=1,SurfChemReac%NumOfBounds(iReac) @@ -367,6 +357,8 @@ SUBROUTINE ParticleSurfChemFlux() ! Update the surface coverage values IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.1.) THEN + ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfMol + ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) * ReacHeat * BetaCoeff DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) @@ -375,9 +367,104 @@ SUBROUTINE ParticleSurfChemFlux() END DO END IF - ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) * ReacHeat * BetaCoeff + END IF + END DO + END DO ! iSF + END DO !iSpec - ! Current boundary condition + ! Desorption + CASE('D') + DO iVal=1, SIZE(SurfChemReac%Products(iReac,:)) + IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN + iSpec = SurfChemReac%Products(iReac,iVal) + ! Choose the reactive boundaries + DO iSF=1, SurfChemReac%NumOfBounds(iReac) + BoundID = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC + DO iSide = 1, BCdata_auxSF(BoundID)%SideNumber + BCSideID=BCdata_auxSF(BoundID)%SideList(iSide) + ElemID = SideToElem(S2E_ELEM_ID,BCSideID) + iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) + globElemId = ElemID + offSetElem + SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + ! SubP = TrackInfo%p + ! SubQ = TrackInfo%q + + ! Calculate the number of molecules on the surface + IF(PartBound%LatticeVec(BoundID).GT.0.) THEN + ! Surface molecules in dependence of the occupancy of the unit cell + SurfMol = PartBound%MolPerUnitCell(BoundID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & + /(PartBound%LatticeVec(BoundID)*PartBound%LatticeVec(BoundID)) + ELSE + ! Alternative calculation by average number of molecules per area for a monolayer + SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) + END IF + IF (SurfSideID.LT.1) THEN + CALL abort(& + __STAMP__& + ,'Chemical Surface Flux is not allowed on non-sampling sides!') + END IF + + IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) + AdCount = Coverage * SurfMol + END IF + END DO + ELSE + Coverage = ChemWallProp(iSpec,1,SubP, SubQ, SurfSideID) + AdCount = Coverage * SurfMol + END IF + + ! Calculate the desorption energy in dependence of the coverage [J] + DesHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) + + ! Define the variables + DissOrder = SurfChemReac%DissOrder(iReac) + nu = SurfChemReac%Prefactor(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) + Rate = SurfChemReac%Rate(iReac) + + ! Calculate the desorption parameters in dependence of coverage and temperature of the boundary + IF(nu.EQ.0.) THEN + nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) + IF (DissOrder.EQ.2) THEN + ! Convert the prefactor to coverage values for the associative desorption + nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) *10.**(15) + END IF + END IF + + ! Boundary temperature + WallTemp = PartBound%WallTemp(BoundID) + E_act = SurfChemReac%E_initial(iReac) + Coverage * SurfChemReac%W_interact(iReac) + Rate = nu * Coverage**DissOrder * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol + + ! Determine the desorption probability + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = Rate * dt * SurfMol + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/DissOrder + + IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.(AdCount/DissOrder)) THEN + ! Upper bound for the desorption number + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = AdCount/DissOrder + END IF + + ! Update the adsorbtion and desorption count + IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.1.)THEN + ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,2, SubP, SubQ, SurfSideID)) * DesHeat + IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) - DissOrder*ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfMol + END IF + END DO + ELSE + ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) = ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) - DissOrder*ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfMol + END IF + END IF + + ! Current boundary condition currentBC = BoundID PartsEmitted = 0 NbrOfParticle = 0 @@ -385,6 +472,7 @@ SUBROUTINE ParticleSurfChemFlux() ! Loop over the side numbers IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)).GE.1) THEN + ! Random distribution of the particles on the surface ! Define the necessary variables xyzNod(1:3) = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) @@ -399,7 +487,7 @@ SUBROUTINE ParticleSurfChemFlux() ndist(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) - ! Output + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) NbrOfParticle = NbrOfParticle + PartInsSubSide ALLOCATE(particle_positions(1:PartInsSubSide*3)) @@ -474,10 +562,11 @@ SUBROUTINE ParticleSurfChemFlux() __STAMP__& ,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') END IF - END IF - END DO - END DO ! iSF + END DO + END DO ! iSF + END IF END DO !iSpec + CASE DEFAULT END SELECT diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index 1ac1cb752..e40167f6f 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -230,6 +230,12 @@ SUBROUTINE SurfaceModel_Chemistry_Init() ! Convert the prefactor to coverage dependent values SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) + CASE('LHD') + SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') + SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') + ! Convert the prefactor to coverage dependent values + SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) + CASE('ER') SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') From 3bde53e03ec0cf003677a7ae76ac4149f3e5238d Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Thu, 30 Jun 2022 10:53:18 +0200 Subject: [PATCH 013/222] remove loop in surface chemflux --- .../boundary/particle_boundary_sampling.f90 | 5 +- .../emission/particle_surface_chemflux.f90 | 601 +++++++----------- .../surfacemodel/surfacemodel_chemistry.f90 | 16 +- .../surfacemodel/surfacemodel_init.f90 | 1 + .../surfacemodel/surfacemodel_vars.f90 | 7 +- 5 files changed, 252 insertions(+), 378 deletions(-) diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index 45c9c37f9..09839109a 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -897,7 +897,7 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) CHARACTER(LEN=255),ALLOCATABLE :: Str2DVarNames(:) INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, iSpec, iPBC, iSurfSide, nVar2D_Heat INTEGER :: p,q,OutputCounter -REAL :: tstart,tend +REAL :: tstart,tend, tout REAL, ALLOCATABLE :: MacroSurfaceSpecChemVal(:,:,:,:,:) REAL, ALLOCATABLE :: MacroSurfaceHeatVal(:,:,:,:) !=================================================================================================================================== @@ -996,7 +996,8 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) DO p = 1,nSurfSample ! --- Total output (force per area, heat flux, simulation particle impact per iteration) ! --- Species-specific output - MacroSurfaceHeatVal(1,p,q,OutputCounter) = SUM(ChemWallProp(:,2,p, q, iSurfSide))/ (SurfSideArea(p,q,iSurfSide)) + tout = OutputTime + MacroSurfaceHeatVal(1,p,q,OutputCounter) = SUM(ChemWallProp(:,2,p, q, iSurfSide))/ (SurfSideArea(p,q,iSurfSide)*tout) DO iSpec=1,nSpecies ! Species-specific counter of simulation particle impacts per iteration MacroSurfaceSpecChemVal(1,p,q,OutputCounter,iSpec) = ChemWallProp(iSpec,1,p, q, iSurfSide) diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index 367a408d3..b77e53218 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -76,6 +76,7 @@ SUBROUTINE ParticleSurfChemFlux() REAL :: ndist(3), midpoint(3) REAL,ALLOCATABLE :: particle_positions(:) REAL :: ReacHeat, DesHeat +REAL :: DesCount REAL :: nu, E_act, Coverage, Rate, DissOrder, AdCount REAL :: BetaCoeff REAL :: WallTemp @@ -90,33 +91,51 @@ SUBROUTINE ParticleSurfChemFlux() #endif /*USE_LOADBALANCE*/ !=================================================================================================================================== SurfNumOfReac = SurfChemReac%NumOfReact + +! SubP = TrackInfo%p +! SubQ = TrackInfo%q SubP = 1 SubQ = 1 -DO iReac = 1, SurfNumOfReac - - SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) - - ! LH-reaction - CASE('LHD') - ! Choose the reactive boundaries - DO iSF=1,SurfChemReac%NumOfBounds(iReac) - BoundID = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC - DO iSide = 1, BCdata_auxSF(BoundID)%SideNumber - BCSideID=BCdata_auxSF(BoundID)%SideList(iSide) - ElemID = SideToElem(S2E_ELEM_ID,BCSideID) - iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) - globElemId = ElemID + offSetElem - SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) - SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) - ! SubP = TrackInfo%p - ! SubQ = TrackInfo%q - - IF (SurfSideID.LT.1) THEN - CALL abort(& - __STAMP__& - ,'Chemical Surface Flux is not allowed on non-sampling sides!') - END IF - ! Define the variables + +DO iSF = 1, nPartBound + ! determine the reactive boundaries + IF(ANY(SurfChemReac%PSMap(iSF)%PureSurfReac)) THEN + BoundID = iSF + + DO iSide = 1, BCdata_auxSF(BoundID)%SideNumber + BCSideID=BCdata_auxSF(BoundID)%SideList(iSide) + ElemID = SideToElem(S2E_ELEM_ID,BCSideID) + iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) + globElemId = ElemID + offSetElem + SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + + IF (SurfSideID.LT.1) THEN + CALL abort(& + __STAMP__& + ,'Chemical Surface Flux is not allowed on non-sampling sides!') + END IF + + ! Boundary temperature + WallTemp = PartBound%WallTemp(BoundID) + + ! Calculate the number of molecules on the surface + IF(PartBound%LatticeVec(BoundID).GT.0.) THEN + ! Surface molecules in dependence of the occupancy of the unit cell + SurfMol = PartBound%MolPerUnitCell(BoundID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & + /(PartBound%LatticeVec(BoundID)*PartBound%LatticeVec(BoundID)) + ELSE + ! Alternative calculation by average number of molecules per area for a monolayer + SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) + END IF + + ! Loop over the reaction types + DO iReac = 1, SurfNumOfReac + SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) + + ! LH-reaction with immediate desorption + CASE('LHD') + ! Define the variables Coverage = 1. ! prefactor for the rate equation including the dependency on all coverage values DO iVal=1,SIZE(SurfChemReac%Reactants(iReac,:)) @@ -127,21 +146,9 @@ SUBROUTINE ParticleSurfChemFlux() END IF END DO - ! Determine the reaction energy [J] - BetaCoeff = SurfChemReac%HeatAccomodation(iReac) - ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) - - ! Calculate the number of molecules on the surface - IF(PartBound%LatticeVec(BoundID).GT.0.) THEN - ! Surface molecules in dependence of the occupancy of the unit cell - SurfMol = PartBound%MolPerUnitCell(BoundID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & - /(PartBound%LatticeVec(BoundID)*PartBound%LatticeVec(BoundID)) - ELSE - ! Alternative calculation by average number of molecules per area for a monolayer - SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) - END IF - - WallTemp = PartBound%WallTemp(BoundID) + ! Determine the reaction energy [J] + BetaCoeff = SurfChemReac%HeatAccomodation(iReac) + ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) nu = SurfChemReac%Prefactor(iReac) E_act = SurfChemReac%ArrheniusEnergy(iReac) @@ -179,130 +186,12 @@ SUBROUTINE ParticleSurfChemFlux() END IF END DO END IF - - ! Current boundary condition - currentBC = BoundID - PartsEmitted = 0 - NbrOfParticle = 0 - iPartTotal = 0 - - ! Loop over the side numbers - IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)).GE.1) THEN - ! Random distribution of the particles on the surface - ! Define the necessary variables - xyzNod(1:3) = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) - - DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - ! Number of additional particles to be inserted - Node1 = jSample+1 - Node2 = jSample+2 ! - Vector1 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node1-1) - Vector2 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node2-1) - midpoint(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) - ndist(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) - - PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) - ! Output - ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) - NbrOfParticle = NbrOfParticle + PartInsSubSide - ALLOCATE(particle_positions(1:PartInsSubSide*3)) - - iPart = 1 - !-- Set Positions - DO WHILE (iPart .LE. PartInsSubSide) - Particle_pos(1:3) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) - particle_positions(iPart*3-2) = Particle_pos(1) - particle_positions(iPart*3-1) = Particle_pos(2) - particle_positions(iPart*3 ) = Particle_pos(3) - iPart=iPart+1 - END DO - - !-- Fill Particle Informations (PartState, Partelem, etc.) - ParticleIndexNbr = 1 - DO iPart=1,PartInsSubSide - IF ((iPart.EQ.1).OR.PDM%ParticleInside(ParticleIndexNbr)) THEN - ParticleIndexNbr = PDM%nextFreePosition(iPartTotal + 1 + PDM%CurrentNextFreePosition) - END IF - IF (ParticleIndexNbr .ne. 0) THEN - PartState(1:3,ParticleIndexNbr) = particle_positions(3*(iPart-1)+1:3*(iPart-1)+3) - LastPartPos(1:3,ParticleIndexNbr)=PartState(1:3,ParticleIndexNbr) - PDM%ParticleInside(ParticleIndexNbr) = .TRUE. - PDM%dtFracPush(ParticleIndexNbr) = .TRUE. - PDM%IsNewPart(ParticleIndexNbr) = .TRUE. - PEM%GlobalElemID(ParticleIndexNbr) = globElemId - PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId !needed when ParticlePush is not executed, e.g. "delay" - iPartTotal = iPartTotal + 1 - IF (RadialWeighting%DoRadialWeighting) THEN - PartMPF(ParticleIndexNbr) = CalcRadWeightMPF(PartState(2,ParticleIndexNbr), iSpec,ParticleIndexNbr) - END IF - ELSE - CALL abort(& - __STAMP__& - ,'ERROR in ParticleSurfaceflux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?') - END IF - END DO - DEALLOCATE(particle_positions) - CALL SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) - - PartsEmitted = PartsEmitted + PartInsSubSide - END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) - END IF ! iSide - IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'Error 2 in ParticleSurfaceflux!') - !----- 2b.: set remaining properties - - CALL SetParticleChargeAndMass(iSpec,NbrOfParticle) - - IF (usevMPF.AND.(.NOT.RadialWeighting%DoRadialWeighting)) CALL SetParticleMPF(iSpec,-1,NbrOfParticle) - ! define molecule stuff - - IF (useDSMC.AND.(CollisMode.GT.1)) CALL SetInnerEnergies(iSpec, iSF, NbrOfParticle,iReac) - - IF(CalcPartBalance) THEN - ! Compute number of input particles and energy - nPartIn(iSpec)=nPartIn(iSpec) + NBrofParticle - - DO iPart=1,NbrOfparticle - PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) - IF (PositionNbr .ne. 0) PartEkinIn(PartSpecies(PositionNbr))= & - PartEkinIn(PartSpecies(PositionNbr))+CalcEkinPart(PositionNbr) - END DO ! iPart - END IF ! CalcPartBalance - ! instead of an UpdateNextfreePosition we update the particleVecLength only - enough ?!? - PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle - PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle - ! Sample Energies on Surfaces when particles are emitted from them - IF (NbrOfParticle.NE.PartsEmitted) THEN - ! should be equal for including the following lines in tSurfaceFlux - CALL abort(& - __STAMP__& - ,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') - END IF - END IF - END DO - END DO ! iSF - END DO !iSpec + END IF ! iVal in Products + END DO ! iVal ! LH-reaction - CASE('LH') - ! Choose the reactive boundaries - DO iSF=1,SurfChemReac%NumOfBounds(iReac) - BoundID = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC - DO iSide = 1, BCdata_auxSF(BoundID)%SideNumber - BCSideID=BCdata_auxSF(BoundID)%SideList(iSide) - ElemID = SideToElem(S2E_ELEM_ID,BCSideID) - iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) - globElemId = ElemID + offSetElem - SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) - SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) - ! SubP = TrackInfo%p - ! SubQ = TrackInfo%q - - IF (SurfSideID.LT.1) THEN - CALL abort(& - __STAMP__& - ,'Chemical Surface Flux is not allowed on non-sampling sides!') - END IF - ! Define the variables + CASE('LH') + ! Define the variables Coverage = 1. ! prefactor for the rate equation including the dependency on all coverage values DO iVal=1,SIZE(SurfChemReac%Reactants(iReac,:)) @@ -313,21 +202,9 @@ SUBROUTINE ParticleSurfChemFlux() END IF END DO - ! Determine the reaction energy [J] - BetaCoeff = SurfChemReac%HeatAccomodation(iReac) - ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) - - ! Calculate the number of molecules on the surface - IF(PartBound%LatticeVec(BoundID).GT.0.) THEN - ! Surface molecules in dependence of the occupancy of the unit cell - SurfMol = PartBound%MolPerUnitCell(BoundID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & - /(PartBound%LatticeVec(BoundID)*PartBound%LatticeVec(BoundID)) - ELSE - ! Alternative calculation by average number of molecules per area for a monolayer - SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) - END IF - - WallTemp = PartBound%WallTemp(BoundID) + ! Determine the reaction energy [J] + BetaCoeff = SurfChemReac%HeatAccomodation(iReac) + ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) nu = SurfChemReac%Prefactor(iReac) E_act = SurfChemReac%ArrheniusEnergy(iReac) @@ -339,238 +216,214 @@ SUBROUTINE ParticleSurfChemFlux() IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN iSpec = SurfChemReac%Products(iReac,iVal) - ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = Rate * dt * SurfMol + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) + DesCount = Rate * dt * SurfMol DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) Coverage = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) AdCount = Coverage * SurfMol - + !Check if enough reactants exist on the surface - IF(ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) .GT. AdCount) THEN - ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = AdCount + IF(DesCount .GT. AdCount) THEN + DesCount = AdCount END IF END IF END DO ! Update the surface coverage values - IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.1.) THEN - ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfMol - ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) * ReacHeat * BetaCoeff + IF(DesCount.GE.1.) THEN + ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) + INT(DesCount)/SurfMol + ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) + INT(DesCount) * ReacHeat * BetaCoeff DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) - ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfMol + ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) - INT(DesCount)/SurfMol END IF END DO END IF + END IF ! iVal in Products + END DO ! iVal - END IF - END DO - END DO ! iSF - END DO !iSpec - - ! Desorption - CASE('D') - DO iVal=1, SIZE(SurfChemReac%Products(iReac,:)) - IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN - iSpec = SurfChemReac%Products(iReac,iVal) - ! Choose the reactive boundaries - DO iSF=1, SurfChemReac%NumOfBounds(iReac) - BoundID = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC - DO iSide = 1, BCdata_auxSF(BoundID)%SideNumber - BCSideID=BCdata_auxSF(BoundID)%SideList(iSide) - ElemID = SideToElem(S2E_ELEM_ID,BCSideID) - iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) - globElemId = ElemID + offSetElem - SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) - SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) - ! SubP = TrackInfo%p - ! SubQ = TrackInfo%q - - ! Calculate the number of molecules on the surface - IF(PartBound%LatticeVec(BoundID).GT.0.) THEN - ! Surface molecules in dependence of the occupancy of the unit cell - SurfMol = PartBound%MolPerUnitCell(BoundID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & - /(PartBound%LatticeVec(BoundID)*PartBound%LatticeVec(BoundID)) - ELSE - ! Alternative calculation by average number of molecules per area for a monolayer - SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) - END IF - IF (SurfSideID.LT.1) THEN - CALL abort(& - __STAMP__& - ,'Chemical Surface Flux is not allowed on non-sampling sides!') + + ! Desorption + CASE('D') + DO iVal=1, SIZE(SurfChemReac%Products(iReac,:)) + IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN + iSpec = SurfChemReac%Products(iReac,iVal) + + IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) + AdCount = Coverage * SurfMol + END IF + END DO + ELSE + Coverage = ChemWallProp(iSpec,1,SubP, SubQ, SurfSideID) + AdCount = Coverage * SurfMol + END IF + + ! Calculate the desorption energy in dependence of the coverage [J] + DesHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) + + ! Define the variables + DissOrder = SurfChemReac%DissOrder(iReac) + nu = SurfChemReac%Prefactor(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) + Rate = SurfChemReac%Rate(iReac) + + ! Calculate the desorption parameters in dependence of coverage and temperature of the boundary + IF(nu.EQ.0.) THEN + nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) + IF (DissOrder.EQ.2) THEN + ! Convert the prefactor to coverage values for the associative desorption + nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) *10.**(15) END IF + END IF + + E_act = SurfChemReac%E_initial(iReac) + Coverage * SurfChemReac%W_interact(iReac) + Rate = nu * Coverage**DissOrder * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol + ! Determine the desorption probability + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = Rate * dt * SurfMol + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/DissOrder + + IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.(AdCount/DissOrder)) THEN + ! Upper bound for the desorption number + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = AdCount/DissOrder + END IF + + ! Update the adsorbtion and desorption count + IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.1.)THEN + ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,2, SubP, SubQ, SurfSideID)) * DesHeat IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) - AdCount = Coverage * SurfMol + ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) - DissOrder*ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfMol END IF END DO ELSE - Coverage = ChemWallProp(iSpec,1,SubP, SubQ, SurfSideID) - AdCount = Coverage * SurfMol - END IF - - ! Calculate the desorption energy in dependence of the coverage [J] - DesHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) - - ! Define the variables - DissOrder = SurfChemReac%DissOrder(iReac) - nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) - Rate = SurfChemReac%Rate(iReac) - - ! Calculate the desorption parameters in dependence of coverage and temperature of the boundary - IF(nu.EQ.0.) THEN - nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) - IF (DissOrder.EQ.2) THEN - ! Convert the prefactor to coverage values for the associative desorption - nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) *10.**(15) + ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) = ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) - DissOrder*ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfMol END IF END IF - - ! Boundary temperature - WallTemp = PartBound%WallTemp(BoundID) - E_act = SurfChemReac%E_initial(iReac) + Coverage * SurfChemReac%W_interact(iReac) - Rate = nu * Coverage**DissOrder * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol - - ! Determine the desorption probability - ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = Rate * dt * SurfMol + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/DissOrder - - IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.(AdCount/DissOrder)) THEN - ! Upper bound for the desorption number - ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = AdCount/DissOrder - END IF - - ! Update the adsorbtion and desorption count - IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.1.)THEN - ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,2, SubP, SubQ, SurfSideID)) * DesHeat - IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) - DissOrder*ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfMol - END IF - END DO - ELSE - ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) = ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) - DissOrder*ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfMol - END IF - END IF + END IF + END DO !iSpec + + CASE DEFAULT + END SELECT + + ! Current boundary condition + currentBC = BoundID + PartsEmitted = 0 + NbrOfParticle = 0 + iPartTotal = 0 + + DO iSpec = 1, nSpecies + + ! Loop over the side numbers + IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)).GE.1) THEN + + ! Random distribution of the particles on the surface + ! Define the necessary variables + xyzNod(1:3) = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) + + DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) + ! Number of additional particles to be inserted + Node1 = jSample+1 + Node2 = jSample+2 ! + Vector1 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node1-1) + Vector2 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node2-1) + midpoint(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) + ndist(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) + + PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) + + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) + NbrOfParticle = NbrOfParticle + PartInsSubSide + ALLOCATE(particle_positions(1:PartInsSubSide*3)) + + iPart = 1 + !-- Set Positions + DO WHILE (iPart .LE. PartInsSubSide) + Particle_pos(1:3) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) + particle_positions(iPart*3-2) = Particle_pos(1) + particle_positions(iPart*3-1) = Particle_pos(2) + particle_positions(iPart*3 ) = Particle_pos(3) + iPart=iPart+1 + END DO - ! Current boundary condition - currentBC = BoundID - PartsEmitted = 0 - NbrOfParticle = 0 - iPartTotal = 0 - - ! Loop over the side numbers - IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)).GE.1) THEN - - ! Random distribution of the particles on the surface - ! Define the necessary variables - xyzNod(1:3) = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) - - DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - ! Number of additional particles to be inserted - Node1 = jSample+1 - Node2 = jSample+2 ! - Vector1 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node1-1) - Vector2 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node2-1) - midpoint(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) - ndist(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) - - PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) - - ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) - NbrOfParticle = NbrOfParticle + PartInsSubSide - ALLOCATE(particle_positions(1:PartInsSubSide*3)) - - iPart = 1 - !-- Set Positions - DO WHILE (iPart .LE. PartInsSubSide) - Particle_pos(1:3) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) - particle_positions(iPart*3-2) = Particle_pos(1) - particle_positions(iPart*3-1) = Particle_pos(2) - particle_positions(iPart*3 ) = Particle_pos(3) - iPart=iPart+1 - END DO - - !-- Fill Particle Informations (PartState, Partelem, etc.) - ParticleIndexNbr = 1 - DO iPart=1,PartInsSubSide - IF ((iPart.EQ.1).OR.PDM%ParticleInside(ParticleIndexNbr)) THEN - ParticleIndexNbr = PDM%nextFreePosition(iPartTotal + 1 + PDM%CurrentNextFreePosition) - END IF - IF (ParticleIndexNbr .ne. 0) THEN - PartState(1:3,ParticleIndexNbr) = particle_positions(3*(iPart-1)+1:3*(iPart-1)+3) - LastPartPos(1:3,ParticleIndexNbr)=PartState(1:3,ParticleIndexNbr) - PDM%ParticleInside(ParticleIndexNbr) = .TRUE. - PDM%dtFracPush(ParticleIndexNbr) = .TRUE. - PDM%IsNewPart(ParticleIndexNbr) = .TRUE. - PEM%GlobalElemID(ParticleIndexNbr) = globElemId - PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId !needed when ParticlePush is not executed, e.g. "delay" - iPartTotal = iPartTotal + 1 - IF (RadialWeighting%DoRadialWeighting) THEN - PartMPF(ParticleIndexNbr) = CalcRadWeightMPF(PartState(2,ParticleIndexNbr), iSpec,ParticleIndexNbr) - END IF - ELSE - CALL abort(& - __STAMP__& - ,'ERROR in ParticleSurfaceflux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?') - END IF - END DO - DEALLOCATE(particle_positions) - CALL SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) - - PartsEmitted = PartsEmitted + PartInsSubSide - END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) - END IF ! iSide - IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'Error 2 in ParticleSurfaceflux!') - !----- 2b.: set remaining properties - - CALL SetParticleChargeAndMass(iSpec,NbrOfParticle) - - IF (usevMPF.AND.(.NOT.RadialWeighting%DoRadialWeighting)) CALL SetParticleMPF(iSpec,-1,NbrOfParticle) - ! define molecule stuff - - IF (useDSMC.AND.(CollisMode.GT.1)) CALL SetInnerEnergies(iSpec, iSF, NbrOfParticle,iReac) - - IF(CalcPartBalance) THEN - ! Compute number of input particles and energy - nPartIn(iSpec)=nPartIn(iSpec) + NBrofParticle - - DO iPart=1,NbrOfparticle - PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) - IF (PositionNbr .ne. 0) PartEkinIn(PartSpecies(PositionNbr))= & - PartEkinIn(PartSpecies(PositionNbr))+CalcEkinPart(PositionNbr) - END DO ! iPart - END IF ! CalcPartBalance - ! instead of an UpdateNextfreePosition we update the particleVecLength only - enough ?!? - PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle - PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle - ! Sample Energies on Surfaces when particles are emitted from them - IF (NbrOfParticle.NE.PartsEmitted) THEN - ! should be equal for including the following lines in tSurfaceFlux - CALL abort(& + !-- Fill Particle Informations (PartState, Partelem, etc.) + ParticleIndexNbr = 1 + DO iPart=1,PartInsSubSide + IF ((iPart.EQ.1).OR.PDM%ParticleInside(ParticleIndexNbr)) THEN + ParticleIndexNbr = PDM%nextFreePosition(iPartTotal + 1 + PDM%CurrentNextFreePosition) + END IF + IF (ParticleIndexNbr .ne. 0) THEN + PartState(1:3,ParticleIndexNbr) = particle_positions(3*(iPart-1)+1:3*(iPart-1)+3) + LastPartPos(1:3,ParticleIndexNbr)=PartState(1:3,ParticleIndexNbr) + PDM%ParticleInside(ParticleIndexNbr) = .TRUE. + PDM%dtFracPush(ParticleIndexNbr) = .TRUE. + PDM%IsNewPart(ParticleIndexNbr) = .TRUE. + PEM%GlobalElemID(ParticleIndexNbr) = globElemId + PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId !needed when ParticlePush is not executed, e.g. "delay" + iPartTotal = iPartTotal + 1 + IF (RadialWeighting%DoRadialWeighting) THEN + PartMPF(ParticleIndexNbr) = CalcRadWeightMPF(PartState(2,ParticleIndexNbr), iSpec,ParticleIndexNbr) + END IF + ELSE + CALL abort(& __STAMP__& - ,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') - END IF - END DO - END DO ! iSF - END IF - END DO !iSpec + ,'ERROR in ParticleSurfaceflux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?') + END IF + END DO + DEALLOCATE(particle_positions) + + CALL SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) + + PartsEmitted = PartsEmitted + PartInsSubSide + END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) + END IF ! iSide + IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'Error 2 in ParticleSurfaceflux!') + + CALL SetParticleChargeAndMass(iSpec,NbrOfParticle) + + IF (usevMPF.AND.(.NOT.RadialWeighting%DoRadialWeighting)) CALL SetParticleMPF(iSpec,-1,NbrOfParticle) + ! define molecule stuff + + IF (useDSMC.AND.(CollisMode.GT.1)) CALL SetInnerEnergies(iSpec, iSF, NbrOfParticle,iReac) + + IF(CalcPartBalance) THEN + ! Compute number of input particles and energy + nPartIn(iSpec)=nPartIn(iSpec) + NBrofParticle + + DO iPart=1,NbrOfparticle + PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) + IF (PositionNbr .ne. 0) PartEkinIn(PartSpecies(PositionNbr))= & + PartEkinIn(PartSpecies(PositionNbr))+CalcEkinPart(PositionNbr) + END DO ! iPart + END IF ! CalcPartBalance + ! instead of an UpdateNextfreePosition we update the particleVecLength only - enough ?!? + PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle + PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle + ! Sample Energies on Surfaces when particles are emitted from them + IF (NbrOfParticle.NE.PartsEmitted) THEN + ! should be equal for including the following lines in tSurfaceFlux + CALL abort(& + __STAMP__& + ,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') + END IF + END DO ! iSpec - CASE DEFAULT + END DO !iReac + END DO ! iSide - END SELECT -END DO ! iReac + ELSE + CYCLE + END IF ! PureSurfReac +END DO !iSF #if USE_MPI CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win,MPI_COMM_SHARED) diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index e40167f6f..5c4b15aee 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -113,7 +113,7 @@ SUBROUTINE SurfaceModel_Chemistry_Init() !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES CHARACTER(LEN=3) :: hilf -INTEGER :: iReac, iReac2, iSpec +INTEGER :: iReac, iReac2, iSpec, iBound, iVal INTEGER :: ReadInNumOfReact INTEGER :: iSide, SideID, iBC REAL, ALLOCATABLE :: StoichCoeff(:,:) @@ -148,6 +148,13 @@ SUBROUTINE SurfaceModel_Chemistry_Init() ALLOCATE(SurfChemReac%BoundisChemSurf(nPartBound)) ALLOCATE(SurfChemReac%NumOfBounds(SurfChemReac%NumOfReact)) ALLOCATE(SurfChemReac%BoundMap(SurfChemReac%NumOfReact)) +ALLOCATE(SurfChemReac%PSMap(nPartBound)) + +! Surface map +DO iBound=1, nPartBound + ALLOCATE(SurfChemReac%PSMap(iBound)%PureSurfReac(ReadInNumOfReact)) + SurfChemReac%PSMap(iBound)%PureSurfReac = .FALSE. +END DO ! Adsorption parameter ALLOCATE(SurfChemReac%S_initial(SurfChemReac%NumOfReact)) @@ -205,6 +212,12 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%BoundisChemSurf(SurfChemReac%BoundMap(iReac)%Boundaries(iReac2)) = .TRUE. END DO + ! Select pure surface reactions + DO iVal = 1, SurfChemReac%NumOfBounds(iReac) + iBound = SurfChemReac%BoundMap(iReac)%Boundaries(iVal) + SurfChemReac%PSMap(iBound)%PureSurfReac(iReac) = .TRUE. + END DO + SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) CASE('A') SurfChemReac%S_initial(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-StickingCoefficient','1.') @@ -247,6 +260,7 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%EForm(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-FormationEnergy','0') END DO + ALLOCATE( ChemSampWall(1:nSpecies,2,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) ALLOCATE(ChemDesorpWall(1:nSpecies,2,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) ChemDesorpWall = 0.0 diff --git a/src/particles/surfacemodel/surfacemodel_init.f90 b/src/particles/surfacemodel/surfacemodel_init.f90 index 5b7fd68fe..668273a05 100644 --- a/src/particles/surfacemodel/surfacemodel_init.f90 +++ b/src/particles/surfacemodel/surfacemodel_init.f90 @@ -190,6 +190,7 @@ SUBROUTINE FinalizeSurfaceModel() SDEALLOCATE(SurfChemReac%BoundisChemSurf) SDEALLOCATE(SurfChemReac%NumOfBounds) SDEALLOCATE(SurfChemReac%BoundMap) +SDEALLOCATE(SurfChemReac%PSMap) SDEALLOCATE(SurfChemReac%S_initial) SDEALLOCATE(SurfChemReac%EqConstant) SDEALLOCATE(SurfChemReac%DissOrder) diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90 index 161828c31..0d6c5eb0d 100644 --- a/src/particles/surfacemodel/surfacemodel_vars.f90 +++ b/src/particles/surfacemodel/surfacemodel_vars.f90 @@ -53,6 +53,10 @@ MODULE MOD_SurfaceModel_Vars INTEGER, ALLOCATABLE :: Boundaries(:) END TYPE +TYPE tPureSurf + LOGICAL, ALLOCATABLE :: PureSurfReac(:) +END TYPE + TYPE tSurfFluxMap TYPE(typeSurfaceflux),ALLOCATABLE :: Surfaceflux(:) END TYPE @@ -92,7 +96,8 @@ MODULE MOD_SurfaceModel_Vars REAL, ALLOCATABLE :: Prefactor(:) REAL, ALLOCATABLE :: ArrheniusEnergy(:) LOGICAL, ALLOCATABLE :: BoundisChemSurf(:) - TYPE(tBoundMap), ALLOCATABLE :: BoundMap(:) + TYPE(tBoundMap), ALLOCATABLE :: BoundMap(:) + TYPE(tPureSurf), ALLOCATABLE :: PSMap(:) ! MAp for reactions occurring only on the surface TYPE(tCollCaseInfo), ALLOCATABLE :: CollCaseInfo(:) ! Information of collision cases (nCase) TYPE(tSurfFluxMap), ALLOCATABLE :: SFMap(:) END TYPE From 8a780e94dfb6257c9b462c70e40808461ddb0b1d Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Wed, 20 Jul 2022 22:26:35 +0200 Subject: [PATCH 014/222] Moved DSMC_SetInternalEnr temporarily to polyatomic module to avoid circular definition --- .../boundary/particle_boundary_condition.f90 | 4 +- src/particles/dsmc/dsmc_bg_gas.f90 | 24 +-- src/particles/dsmc/dsmc_init.f90 | 13 +- src/particles/dsmc/dsmc_polyatomic_model.f90 | 148 ++++++++++++------ src/particles/dsmc/dsmc_relaxation.f90 | 41 ++++- src/particles/emission/particle_emission.f90 | 9 +- .../emission/particle_emission_tools.f90 | 110 +------------ .../emission/particle_surface_chemflux.f90 | 11 +- .../emission/particle_surface_flux.f90 | 9 +- .../emission/particle_surface_flux_init.f90 | 4 - .../particle_mpi_boundary_sampling.f90 | 2 - .../surfacemodel/surfacemodel_chemistry.f90 | 4 +- .../surfacemodel/surfacemodel_main.f90 | 21 +-- 13 files changed, 164 insertions(+), 236 deletions(-) diff --git a/src/particles/boundary/particle_boundary_condition.f90 b/src/particles/boundary/particle_boundary_condition.f90 index a2cd8aaa9..8b40b3f63 100644 --- a/src/particles/boundary/particle_boundary_condition.f90 +++ b/src/particles/boundary/particle_boundary_condition.f90 @@ -52,7 +52,7 @@ SUBROUTINE GetBoundaryInteraction(iPart,SideID,flip,ElemID,crossedBC,TriNum) USE MOD_Particle_Mesh_Vars USE MOD_Particle_Boundary_Vars ,ONLY: PartBound,DoBoundaryParticleOutputHDF5 USE MOD_Particle_Surfaces_vars ,ONLY: SideNormVec,SideType -USE MOD_SurfaceModel ,ONLY: SurfaceModel,PerfectReflection +USE MOD_SurfaceModel ,ONLY: SurfaceModelling,PerfectReflection USE MOD_Particle_Vars ,ONLY: LastPartPos USE MOD_Particle_Boundary_Tools ,ONLY: StoreBoundaryParticleProperties #ifdef CODE_ANALYZE @@ -146,7 +146,7 @@ SUBROUTINE GetBoundaryInteraction(iPart,SideID,flip,ElemID,crossedBC,TriNum) CASE(2) !PartBound%ReflectiveBC) !----------------------------------------------------------------------------------------------------------------------------------- ! Decide which interaction (specular/diffuse reflection, species swap, SEE) - CALL SurfaceModel(iPart,SideID,ElemID,n_loc) + CALL SurfaceModelling(iPart,SideID,ElemID,n_loc) !----------------------------------------------------------------------------------------------------------------------------------- CASE(3) !PartBound%PeriodicBC) !----------------------------------------------------------------------------------------------------------------------------------- diff --git a/src/particles/dsmc/dsmc_bg_gas.f90 b/src/particles/dsmc/dsmc_bg_gas.f90 index 8a1bd79f5..59e482d57 100644 --- a/src/particles/dsmc/dsmc_bg_gas.f90 +++ b/src/particles/dsmc/dsmc_bg_gas.f90 @@ -261,10 +261,10 @@ SUBROUTINE BGGas_AssignParticleProperties(SpecID,PartIndex,bggPartIndex,GetVeloc ! MODULES USE MOD_Globals USE MOD_Particle_Vars ,ONLY: PDM, PEM, PartState,PartSpecies,PartPosRef, VarTimeStep, usevMPF, PartMPF -USE MOD_DSMC_Vars ,ONLY: CollisMode, SpecDSMC, BGGas +USE MOD_DSMC_Vars ,ONLY: CollisMode, BGGas USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod -USE MOD_part_emission_tools ,ONLY: CalcVelocity_maxwell_lpn, DSMC_SetInternalEnr_LauxVFD -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly +USE MOD_part_emission_tools ,ONLY: CalcVelocity_maxwell_lpn +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr USE MOD_Macro_Restart ,ONLY: CalcVelocity_maxwell_particle !----------------------------------------------------------------------------------------------------------------------------------! IMPLICIT NONE @@ -314,11 +314,7 @@ SUBROUTINE BGGas_AssignParticleProperties(SpecID,PartIndex,bggPartIndex,GetVeloc ! Internal energy IF(CollisMode.GT.1) THEN IF(GetInternalEnergy) THEN - IF(SpecDSMC(SpecID)%PolyatomicMol) THEN - CALL DSMC_SetInternalEnr_Poly(SpecID,1,bggPartIndex,1) - ELSE - CALL DSMC_SetInternalEnr_LauxVFD(SpecID,1,bggPartIndex,1) - END IF + CALL DSMC_SetInternalEnr(SpecID,1,bggPartIndex,1) END IF END IF ! Simulation flags @@ -529,12 +525,10 @@ SUBROUTINE BGGas_PhotoIonization(iSpec,iInit,TotalNbrOfReactions) USE MOD_Globals USE MOD_DSMC_Analyze ,ONLY: CalcGammaVib, CalcMeanFreePath USE MOD_DSMC_Vars ,ONLY: Coll_pData, CollisMode, ChemReac, PartStateIntEn, DSMC -USE MOD_DSMC_Vars ,ONLY: SpecDSMC, DSMCSumOfFormedParticles +USE MOD_DSMC_Vars ,ONLY: DSMCSumOfFormedParticles USE MOD_DSMC_Vars ,ONLY: newAmbiParts, iPartIndx_NodeNewAmbi, BGGas USE MOD_Particle_Vars ,ONLY: PEM, PDM, PartSpecies, PartState, Species, usevMPF, PartMPF, Species, PartPosRef -USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly -USE MOD_part_pos_and_velo ,ONLY: SetParticleVelocity +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod USE MOD_part_emission_tools ,ONLY: CalcVelocity_maxwell_lpn USE MOD_DSMC_ChemReact ,ONLY: PhotoIonization_InsertProducts @@ -701,11 +695,7 @@ SUBROUTINE BGGas_PhotoIonization(iSpec,iInit,TotalNbrOfReactions) ! Particle element PEM%GlobalElemID(NewParticleIndex) = PEM%GlobalElemID(ParticleIndex) IF(CollisMode.GT.1) THEN - IF(SpecDSMC(bgSpec)%PolyatomicMol) THEN - CALL DSMC_SetInternalEnr_Poly(bgSpec,1,NewParticleIndex,1) - ELSE - CALL DSMC_SetInternalEnr_LauxVFD(bgSpec,1,NewParticleIndex,1) - END IF + CALL DSMC_SetInternalEnr(bgSpec,1,NewParticleIndex,1) END IF IF(BGGas%UseDistribution) THEN iBGGSpec = BGGas%MapSpecToBGSpec(bgSpec) diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index 427a7b91f..7065498df 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -34,9 +34,8 @@ MODULE MOD_DSMC_Init !----------------------------------------------------------------------------------------------------------------------------------- ! Private Part --------------------------------------------------------------------------------------------------------------------- ! Public Part ---------------------------------------------------------------------------------------------------------------------- -PUBLIC :: InitDSMC, FinalizeDSMC +PUBLIC :: DefineParametersDSMC, InitDSMC, FinalizeDSMC !=================================================================================================================================== -PUBLIC::DefineParametersDSMC CONTAINS !================================================================================================================================== @@ -297,9 +296,9 @@ SUBROUTINE InitDSMC() USE MOD_Particle_Vars ,ONLY: DoFieldIonization USE MOD_DSMC_ParticlePairing ,ONLY: DSMC_init_octree USE MOD_DSMC_ChemInit ,ONLY: DSMC_chemical_init -USE MOD_DSMC_PolyAtomicModel ,ONLY: InitPolyAtomicMolecs, DSMC_SetInternalEnr_Poly +USE MOD_DSMC_PolyAtomicModel ,ONLY: InitPolyAtomicMolecs USE MOD_DSMC_CollisVec ,ONLY: DiceDeflectedVelocityVector4Coll, DiceVelocityVector4Coll, PostCollVec -USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -803,11 +802,7 @@ SUBROUTINE InitDSMC() IF (PDM%ParticleInside(iPart)) THEN IF (Species(PartSpecies(iPart))%NumberOfInits.GT.0) THEN iInit = PDM%PartInit(iPart) - IF (SpecDSMC(PartSpecies(iPart))%PolyatomicMol) THEN - CALL DSMC_SetInternalEnr_Poly(PartSpecies(iPart),iInit,iPart,1) - ELSE - CALL DSMC_SetInternalEnr_LauxVFD(PartSpecies(iPart),iInit,iPart,1) - END IF + CALL DSMC_SetInternalEnr(PartSpecies(iPart),iInit,iPart,1) END IF END IF END DO diff --git a/src/particles/dsmc/dsmc_polyatomic_model.f90 b/src/particles/dsmc/dsmc_polyatomic_model.f90 index a59e661d4..0f80807ff 100644 --- a/src/particles/dsmc/dsmc_polyatomic_model.f90 +++ b/src/particles/dsmc/dsmc_polyatomic_model.f90 @@ -35,7 +35,7 @@ MODULE MOD_DSMC_PolyAtomicModel ! Public Part ---------------------------------------------------------------------------------------------------------------------- PUBLIC :: InitPolyAtomicMolecs, DSMC_SetInternalEnr_Poly_ARM, DSMC_SetInternalEnr_Poly_MH, DSMC_SetInternalEnr_Poly_MH_FirstPick PUBLIC :: DSMC_RotRelaxPoly, DSMC_VibRelaxPoly_ARM, DSMC_VibRelaxPoly_MH, DSMC_VibRelaxPoly_ARM_MH -PUBLIC :: DSMC_FindFirstVibPick, DSMC_RelaxVibPolyProduct +PUBLIC :: DSMC_FindFirstVibPick, DSMC_RelaxVibPolyProduct, DSMC_SetInternalEnr !=================================================================================================================================== CONTAINS @@ -176,85 +176,127 @@ SUBROUTINE DSMC_FindFirstVibPick(iInitTmp, iSpec, init_or_sf) END SUBROUTINE DSMC_FindFirstVibPick -SUBROUTINE DSMC_SetInternalEnr_Poly_ARM_SingleMode(iSpecies, iInit, iPart, init_or_sf,iReac) +SUBROUTINE DSMC_SetInternalEnr(iSpec, iInit, iPart, init_or_sf, iReac) !=================================================================================================================================== -! Initialization of polyatomic molecules by treating every mode separately in a loop +!> Energy distribution according to dissertation of Laux (diatomic) !=================================================================================================================================== ! MODULES -USE MOD_Globals ,ONLY: Abort -USE MOD_Globals_Vars ,ONLY: BoltzmannConst -USE MOD_DSMC_Vars ,ONLY: PartStateIntEn, SpecDSMC, DSMC,PolyatomMolDSMC,VibQuantsPar,BGGas -USE MOD_Particle_Vars ,ONLY: PEM, Species -USE MOD_Particle_Sampling_Vars,ONLY: AdaptBCMacroVal, AdaptBCMapElemToSample -USE MOD_DSMC_ElectronicModel ,ONLY: InitElectronShell -USE MOD_Particle_Boundary_Vars,ONLY: PartBound -USE MOD_SurfaceModel_Vars +USE MOD_Globals ,ONLY: abort +USE MOD_Globals_Vars ,ONLY: BoltzmannConst +USE MOD_DSMC_Vars ,ONLY: PartStateIntEn, SpecDSMC, DSMC, BGGas +USE MOD_Particle_Vars ,ONLY: Species, PEM +USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCMacroVal, AdaptBCMapElemToSample +USE MOD_DSMC_ElectronicModel ,ONLY: InitElectronShell +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound +USE MOD_DSMC_Relaxation ,ONLY: DSMC_SetInternalEnr_Diatomic +! USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly +USE MOD_SurfaceModel_Vars ,ONLY: SurfChemReac ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES -INTEGER, INTENT(IN) :: iSpecies, iInit, iPart, init_or_sf -INTEGER, INTENT(IN), OPTIONAL :: iReac +INTEGER, INTENT(IN) :: iSpec, iInit, iPart, init_or_sf +INTEGER, INTENT(IN), OPTIONAL :: iReac !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -REAL :: iRan, iRan2, NormProb -INTEGER :: iQuant, iDOF, iPolyatMole -REAL :: TVib ! vibrational temperature -REAL :: TRot ! rotational temperature -INTEGER :: ElemID +REAL :: iRan +INTEGER :: iQuant +REAL :: TVib ! vibrational temperature +REAL :: TRot ! rotational temperature +INTEGER :: ElemID !=================================================================================================================================== -ElemID = PEM%LocalElemID(iPart) -SELECT CASE (init_or_sf) +! Nullify energy for atomic species +!----------------------------------------------------------------------------------------------------------------------------------- +PartStateIntEn( 1,iPart) = 0 +PartStateIntEn( 2,iPart) = 0 +!----------------------------------------------------------------------------------------------------------------------------------- +! Set vibrational and rotational energies for molecules +!----------------------------------------------------------------------------------------------------------------------------------- +IF ((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + ElemID = PEM%LocalElemID(iPart) + SELECT CASE (init_or_sf) CASE(1) !iInit - TVib=SpecDSMC(iSpecies)%Init(iInit)%TVib - TRot=SpecDSMC(iSpecies)%Init(iInit)%TRot + TVib=SpecDSMC(iSpec)%Init(iInit)%TVib + TRot=SpecDSMC(iSpec)%Init(iInit)%TRot CASE(2) !SurfaceFlux - IF(Species(iSpecies)%Surfaceflux(iInit)%Adaptive) THEN - SELECT CASE(Species(iSpecies)%Surfaceflux(iInit)%AdaptiveType) + IF(Species(iSpec)%Surfaceflux(iInit)%Adaptive) THEN + SELECT CASE(Species(iSpec)%Surfaceflux(iInit)%AdaptiveType) CASE(1,3,4) ! Pressure and massflow inlet (pressure/massflow, temperature const) - TVib=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TVib - TRot=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TRot + TVib=SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib + TRot=SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot CASE(2) ! adaptive Outlet/freestream - TVib = Species(iSpecies)%Surfaceflux(iInit)%AdaptivePressure & - / (BoltzmannConst * AdaptBCMacroVal(4,AdaptBCMapElemToSample(ElemID),iSpecies)) + TVib = Species(iSpec)%Surfaceflux(iInit)%AdaptivePressure & + / (BoltzmannConst * AdaptBCMacroVal(4,AdaptBCMapElemToSample(ElemID),iSpec)) TRot = TVib CASE DEFAULT - CALL abort(& - __STAMP__& - ,'Wrong adaptive type for Surfaceflux in vib/rot poly!') + CALL abort(__STAMP__,'ERROR: Wrong adaptive type for Surfaceflux in DSMC_SetInternalEnr!') END SELECT ELSE - TVib=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TVib - TRot=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TRot + TVib=SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib + TRot=SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot END IF - CASE(3) ! reactive surface + CASE(3) !reactive surface TVib=PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iInit)%BC) TRot=PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iInit)%BC) - CASE(4) ! reactive surface + CASE(4) !reactive surface TVib=PartBound%WallTemp(iInit) - TRot=PartBound%WallTemp(iInit) + TRot=PartBound%WallTemp(iInit) CASE DEFAULT - CALL abort(& - __STAMP__& - ,'Neither iInit nor SurfaceFlux defined as reference!') -END SELECT - -! Background gas distribution -IF(BGGas%NumberOfSpecies.GT.0) THEN - IF(BGGas%BackgroundSpecies(iSpecies).AND.BGGas%UseDistribution) THEN - TVib = BGGas%Distribution(BGGas%MapSpecToBGSpec(iSpecies),DSMC_TVIB,ElemID) - TRot = BGGas%Distribution(BGGas%MapSpecToBGSpec(iSpecies),DSMC_TROT,ElemID) + CALL abort(__STAMP__,'ERROR: Neither iInit nor Surfaceflux defined as reference in DSMC_SetInternalEnr!') + END SELECT + ! Background gas distribution + IF(BGGas%NumberOfSpecies.GT.0) THEN + IF(BGGas%BackgroundSpecies(iSpec).AND.BGGas%UseDistribution) THEN + TVib = BGGas%Distribution(BGGas%MapSpecToBGSpec(iSpec),DSMC_TVIB,ElemID) + TRot = BGGas%Distribution(BGGas%MapSpecToBGSpec(iSpec),DSMC_TROT,ElemID) + END IF + END IF + IF(SpecDSMC(iSpec)%PolyatomicMol) THEN + CALL DSMC_SetInternalEnr_Poly(iSpec, iPart, TRot, TVib) + ELSE + CALL DSMC_SetInternalEnr_Diatomic(iSpec, iPart, TRot, TVib) END IF END IF - +!----------------------------------------------------------------------------------------------------------------------------------- +! Set electronic energy +!----------------------------------------------------------------------------------------------------------------------------------- IF (DSMC%ElectronicModel.GT.0) THEN - CALL InitElectronShell(iSpecies,iPart,iInit,init_or_sf) + IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + CALL InitElectronShell(iSpec,iPart,iInit,init_or_sf) + ELSE + PartStateIntEn( 3,iPart) = 0. + END IF ENDIF -! set vibrational energy -iPolyatMole = SpecDSMC(iSpecies)%SpecToPolyArray +END SUBROUTINE DSMC_SetInternalEnr + + +SUBROUTINE DSMC_SetInternalEnr_Poly_ARM_SingleMode(iSpec, iPart, TRot, TVib) +!=================================================================================================================================== +! Initialization of polyatomic molecules by treating every mode separately in a loop +!=================================================================================================================================== +! MODULES +USE MOD_Globals_Vars ,ONLY: BoltzmannConst +USE MOD_DSMC_Vars ,ONLY: PartStateIntEn, SpecDSMC, DSMC,PolyatomMolDSMC,VibQuantsPar +USE MOD_SurfaceModel_Vars +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER, INTENT(IN) :: iSpec, iPart +REAL, INTENT(IN) :: TRot, TVib +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +REAL :: iRan, iRan2, NormProb +INTEGER :: iQuant, iDOF, iPolyatMole +!=================================================================================================================================== + +! Set vibrational energy +iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray IF(ALLOCATED(VibQuantsPar(iPart)%Quants)) DEALLOCATE(VibQuantsPar(iPart)%Quants) ALLOCATE(VibQuantsPar(iPart)%Quants(PolyatomMolDSMC(iPolyatMole)%VibDOF)) PartStateIntEn( 1,iPart) = 0.0 @@ -269,10 +311,12 @@ SUBROUTINE DSMC_SetInternalEnr_Poly_ARM_SingleMode(iSpecies, iInit, iPart, init_ + (iQuant + DSMC%GammaQuant)*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF)*BoltzmannConst VibQuantsPar(iPart)%Quants(iDOF)=iQuant END DO -IF (SpecDSMC(iSpecies)%Xi_Rot.EQ.2) THEN + +! Set rotational energy +IF (SpecDSMC(iSpec)%Xi_Rot.EQ.2) THEN CALL RANDOM_NUMBER(iRan2) PartStateIntEn( 2,iPart) = -BoltzmannConst*TRot*LOG(iRan2) -ELSE IF (SpecDSMC(iSpecies)%Xi_Rot.EQ.3) THEN +ELSE IF (SpecDSMC(iSpec)%Xi_Rot.EQ.3) THEN CALL RANDOM_NUMBER(iRan2) PartStateIntEn( 2,iPart) = iRan2*10 !the distribution function has only non-negligible values betwenn 0 and 10 NormProb = SQRT(PartStateIntEn( 2,iPart))*EXP(-PartStateIntEn( 2,iPart))/(SQRT(0.5)*EXP(-0.5)) diff --git a/src/particles/dsmc/dsmc_relaxation.f90 b/src/particles/dsmc/dsmc_relaxation.f90 index 0b532ac26..08969832c 100644 --- a/src/particles/dsmc/dsmc_relaxation.f90 +++ b/src/particles/dsmc/dsmc_relaxation.f90 @@ -14,7 +14,7 @@ MODULE MOD_DSMC_Relaxation !=================================================================================================================================== -! Module including collisions, relaxation and reaction decision +! Module with routines for relaxation !=================================================================================================================================== ! MODULES ! IMPLICIT VARIABLE HANDLING @@ -27,11 +27,48 @@ MODULE MOD_DSMC_Relaxation ! Private Part --------------------------------------------------------------------------------------------------------------------- ! Public Part ---------------------------------------------------------------------------------------------------------------------- PUBLIC :: DSMC_VibRelaxDiatomic, CalcMeanVibQuaDiatomic, CalcXiVib, CalcXiTotalEqui, DSMC_calc_P_rot, DSMC_calc_var_P_vib -PUBLIC :: InitCalcVibRelaxProb, DSMC_calc_P_vib, SumVibRelaxProb, FinalizeCalcVibRelaxProb +PUBLIC :: InitCalcVibRelaxProb, DSMC_calc_P_vib, SumVibRelaxProb, FinalizeCalcVibRelaxProb, DSMC_SetInternalEnr_Diatomic !=================================================================================================================================== CONTAINS +SUBROUTINE DSMC_SetInternalEnr_Diatomic(iSpec, iPart, TRot, TVib) +!=================================================================================================================================== +!> Energy distribution according to dissertation of Laux (diatomic) +!=================================================================================================================================== +! MODULES +USE MOD_Globals_Vars ,ONLY: BoltzmannConst +USE MOD_DSMC_Vars ,ONLY: PartStateIntEn, SpecDSMC, DSMC +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER, INTENT(IN) :: iSpec, iPart +REAL, INTENT(IN) :: TRot, TVib +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +REAL :: iRan +INTEGER :: iQuant +!=================================================================================================================================== +! Nullify energy for atomic species +PartStateIntEn(1:2,iPart) = 0 +! Set vibrational energy +CALL RANDOM_NUMBER(iRan) +iQuant = INT(-LOG(iRan)*TVib/SpecDSMC(iSpec)%CharaTVib) +DO WHILE (iQuant.GE.SpecDSMC(iSpec)%MaxVibQuant) + CALL RANDOM_NUMBER(iRan) + iQuant = INT(-LOG(iRan)*TVib/SpecDSMC(iSpec)%CharaTVib) +END DO +PartStateIntEn( 1,iPart) = (iQuant + DSMC%GammaQuant)*SpecDSMC(iSpec)%CharaTVib*BoltzmannConst +! Set rotational energy +CALL RANDOM_NUMBER(iRan) +PartStateIntEn( 2,iPart) = -BoltzmannConst*TRot*LOG(iRan) + +END SUBROUTINE DSMC_SetInternalEnr_Diatomic + + SUBROUTINE DSMC_VibRelaxDiatomic(iPair, iPart, FakXi) !=================================================================================================================================== ! Performs the vibrational relaxation of diatomic molecules diff --git a/src/particles/emission/particle_emission.f90 b/src/particles/emission/particle_emission.f90 index 8ca1127a2..bb82303de 100644 --- a/src/particles/emission/particle_emission.f90 +++ b/src/particles/emission/particle_emission.f90 @@ -44,8 +44,7 @@ SUBROUTINE ParticleInserting() USE MOD_PIC_Vars USE MOD_part_tools ,ONLY: UpdateNextFreePosition USE MOD_DSMC_Vars ,ONLY: useDSMC, CollisMode, SpecDSMC -USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr USE MOD_Particle_Analyze_Vars ,ONLY: CalcPartBalance,nPartIn,PartEkinIn USE MOD_Particle_Analyze_Tools ,ONLY: CalcEkinPart USE MOD_part_emission_tools ,ONLY: SetParticleChargeAndMass,SetParticleMPF,SamplePoissonDistri,SetParticleTimeStep,CalcNbrOfPhotons @@ -312,11 +311,7 @@ SUBROUTINE ParticleInserting() DO WHILE (iPart.LE.NbrOfParticle) PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) IF (PositionNbr.NE.0) THEN - IF (SpecDSMC(i)%PolyatomicMol) THEN - CALL DSMC_SetInternalEnr_Poly(i,iInit,PositionNbr,1) - ELSE - CALL DSMC_SetInternalEnr_LauxVFD(i,iInit,PositionNbr,1) - END IF + CALL DSMC_SetInternalEnr(i,iInit,PositionNbr,1) END IF iPart = iPart + 1 END DO diff --git a/src/particles/emission/particle_emission_tools.f90 b/src/particles/emission/particle_emission_tools.f90 index 84a41f778..b8bd10193 100644 --- a/src/particles/emission/particle_emission_tools.f90 +++ b/src/particles/emission/particle_emission_tools.f90 @@ -82,10 +82,6 @@ MODULE MOD_part_emission_tools MODULE PROCEDURE CalcVelocity_FromWorkFuncSEE END INTERFACE -INTERFACE DSMC_SetInternalEnr_LauxVFD - MODULE PROCEDURE DSMC_SetInternalEnr_LauxVFD -END INTERFACE - #ifdef CODE_ANALYZE INTERFACE CalcVectorAdditionCoeffs MODULE PROCEDURE CalcVectorAdditionCoeffs @@ -102,7 +98,7 @@ MODULE MOD_part_emission_tools PUBLIC :: SetParticlePositionSphere, SetParticlePositionSinDeviation, SetParticleTimeStep PUBLIC :: CalcNbrOfPhotons, CalcPhotonEnergy PUBLIC :: CalcIntensity_Gaussian -PUBLIC :: CalcVelocity_FromWorkFuncSEE, DSMC_SetInternalEnr_LauxVFD +PUBLIC :: CalcVelocity_FromWorkFuncSEE PUBLIC :: SetParticlePositionPhotonSEEDisc, SetParticlePositionPhotonCylinder PUBLIC :: SetParticlePositionPhotonSEERectangle, SetParticlePositionPhotonRectangle PUBLIC :: SetParticlePositionPhotonHoneycomb, SetParticlePositionPhotonSEEHoneycomb @@ -381,110 +377,6 @@ SUBROUTINE CalcVelocity_maxwell_lpn(FractNbr, Vec3D, iInit, Temperature) END SUBROUTINE CalcVelocity_maxwell_lpn -SUBROUTINE DSMC_SetInternalEnr_LauxVFD(iSpecies, iInit, iPart, init_or_sf,iReac) -!=================================================================================================================================== -!> Energy distribution according to dissertation of Laux (diatomic) -!=================================================================================================================================== -! MODULES -USE MOD_Globals ,ONLY: abort -USE MOD_Globals_Vars ,ONLY: BoltzmannConst -USE MOD_DSMC_Vars ,ONLY: PartStateIntEn, SpecDSMC, DSMC, BGGas -USE MOD_Particle_Vars ,ONLY: Species, PEM -USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCMacroVal, AdaptBCMapElemToSample -USE MOD_DSMC_ElectronicModel ,ONLY: InitElectronShell -USE MOD_Particle_Boundary_Vars ,ONLY: PartBound -USE MOD_SurfaceModel_Vars -! IMPLICIT VARIABLE HANDLING -IMPLICIT NONE -!----------------------------------------------------------------------------------------------------------------------------------- -! INPUT VARIABLES -INTEGER, INTENT(IN) :: iSpecies, iInit, iPart, init_or_sf -INTEGER, INTENT(IN), OPTIONAL :: iReac -!----------------------------------------------------------------------------------------------------------------------------------- -! OUTPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! LOCAL VARIABLES -REAL :: iRan -INTEGER :: iQuant -REAL :: TVib ! vibrational temperature -REAL :: TRot ! rotational temperature -INTEGER :: ElemID -!=================================================================================================================================== -!----------------------------------------------------------------------------------------------------------------------------------- -! Set internal energies (vibrational and rotational) -!----------------------------------------------------------------------------------------------------------------------------------- -ElemID = PEM%LocalElemID(iPart) -IF ((SpecDSMC(iSpecies)%InterID.EQ.2).OR.(SpecDSMC(iSpecies)%InterID.EQ.20)) THEN - SELECT CASE (init_or_sf) - CASE(1) !iInit - TVib=SpecDSMC(iSpecies)%Init(iInit)%TVib - TRot=SpecDSMC(iSpecies)%Init(iInit)%TRot - CASE(2) !SurfaceFlux - IF(Species(iSpecies)%Surfaceflux(iInit)%Adaptive) THEN - SELECT CASE(Species(iSpecies)%Surfaceflux(iInit)%AdaptiveType) - CASE(1,3,4) ! Pressure and massflow inlet (pressure/massflow, temperature const) - TVib=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TVib - TRot=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TRot - CASE(2) ! adaptive Outlet/freestream - TVib = Species(iSpecies)%Surfaceflux(iInit)%AdaptivePressure & - / (BoltzmannConst * AdaptBCMacroVal(4,AdaptBCMapElemToSample(ElemID),iSpecies)) - TRot = TVib - CASE DEFAULT - CALL abort(& - __STAMP__& - ,'Wrong adaptive type for Surfaceflux in int_energy -> lauxVDF!') - END SELECT - ELSE - TVib=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TVib - TRot=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TRot - END IF - CASE(3) !reactive surface - TVib=PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iInit)%BC) - TRot=PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iInit)%BC) - CASE(4) !reactive surface - TVib=PartBound%WallTemp(iInit) - TRot=PartBound%WallTemp(iInit) - CASE DEFAULT - CALL abort(& - __STAMP__& - ,'neither iInit nor Surfaceflux defined as reference!') - END SELECT - ! Background gas distribution - IF(BGGas%NumberOfSpecies.GT.0) THEN - IF(BGGas%BackgroundSpecies(iSpecies).AND.BGGas%UseDistribution) THEN - TVib = BGGas%Distribution(BGGas%MapSpecToBGSpec(iSpecies),DSMC_TVIB,ElemID) - TRot = BGGas%Distribution(BGGas%MapSpecToBGSpec(iSpecies),DSMC_TROT,ElemID) - END IF - END IF - ! Set vibrational energy - CALL RANDOM_NUMBER(iRan) - iQuant = INT(-LOG(iRan)*TVib/SpecDSMC(iSpecies)%CharaTVib) - DO WHILE (iQuant.GE.SpecDSMC(iSpecies)%MaxVibQuant) - CALL RANDOM_NUMBER(iRan) - iQuant = INT(-LOG(iRan)*TVib/SpecDSMC(iSpecies)%CharaTVib) - END DO - PartStateIntEn( 1,iPart) = (iQuant + DSMC%GammaQuant)*SpecDSMC(iSpecies)%CharaTVib*BoltzmannConst - ! Set rotational energy - CALL RANDOM_NUMBER(iRan) - PartStateIntEn( 2,iPart) = -BoltzmannConst*TRot*LOG(iRan) -ELSE - ! Nullify energy for atomic species - PartStateIntEn( 1,iPart) = 0 - PartStateIntEn( 2,iPart) = 0 -END IF -!----------------------------------------------------------------------------------------------------------------------------------- -! Set electronic energy -!----------------------------------------------------------------------------------------------------------------------------------- -IF (DSMC%ElectronicModel.GT.0) THEN - IF((SpecDSMC(iSpecies)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpecies)%FullyIonized)) THEN - CALL InitElectronShell(iSpecies,iPart,iInit,init_or_sf) - ELSE - PartStateIntEn( 3,iPart) = 0. - END IF -ENDIF - -END SUBROUTINE DSMC_SetInternalEnr_LauxVFD - SUBROUTINE CalcVelocity_taylorgreenvortex(FractNbr, Vec3D, iInit, Element) !=================================================================================================================================== !> diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index b77e53218..fac305836 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -48,8 +48,6 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Timedisc_Vars ,ONLY: dt USE MOD_Particle_Surfaces_Vars USE MOD_Particle_Boundary_Vars -USE MOD_SurfaceModel -USE MOD_SurfaceModel_Chemistry USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win,SurfChemReac, ChemWallProp, ChemDesorpWall USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED @@ -440,8 +438,7 @@ SUBROUTINE SetInnerEnergies(iSpec, iSF, NbrOfParticle,iReac) USE MOD_Globals USE MOD_DSMC_Vars ,ONLY: SpecDSMC USE MOD_Particle_Vars ,ONLY: PDM -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly -USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -459,11 +456,7 @@ SUBROUTINE SetInnerEnergies(iSpec, iSF, NbrOfParticle,iReac) PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) IF (PositionNbr .ne. 0) THEN - IF (SpecDSMC(iSpec)%PolyatomicMol) THEN - CALL DSMC_SetInternalEnr_Poly(iSpec,iSF,PositionNbr,3,iReac) - ELSE - CALL DSMC_SetInternalEnr_LauxVFD(iSpec, iSF, PositionNbr,3,iReac) - END IF + CALL DSMC_SetInternalEnr(iSpec, iSF, PositionNbr,3,iReac) END IF iPart = iPart + 1 END DO diff --git a/src/particles/emission/particle_surface_flux.f90 b/src/particles/emission/particle_surface_flux.f90 index cfd53b0e2..3cefbdc4f 100644 --- a/src/particles/emission/particle_surface_flux.f90 +++ b/src/particles/emission/particle_surface_flux.f90 @@ -512,8 +512,7 @@ SUBROUTINE SetInnerEnergies(iSpec, iSF, NbrOfParticle) USE MOD_Globals USE MOD_DSMC_Vars ,ONLY: SpecDSMC USE MOD_Particle_Vars ,ONLY: PDM -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly -USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -529,11 +528,7 @@ SUBROUTINE SetInnerEnergies(iSpec, iSF, NbrOfParticle) DO WHILE (iPart .le. NbrOfParticle) PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) IF (PositionNbr .ne. 0) THEN - IF (SpecDSMC(iSpec)%PolyatomicMol) THEN - CALL DSMC_SetInternalEnr_Poly(iSpec,iSF,PositionNbr,2) - ELSE - CALL DSMC_SetInternalEnr_LauxVFD(iSpec, iSF, PositionNbr,2) - END IF + CALL DSMC_SetInternalEnr(iSpec, iSF, PositionNbr,2) END IF iPart = iPart + 1 END DO diff --git a/src/particles/emission/particle_surface_flux_init.f90 b/src/particles/emission/particle_surface_flux_init.f90 index 8a691856d..f3d2716ce 100644 --- a/src/particles/emission/particle_surface_flux_init.f90 +++ b/src/particles/emission/particle_surface_flux_init.f90 @@ -121,7 +121,6 @@ SUBROUTINE InitializeParticleSurfaceflux() USE MOD_Particle_Vars ,ONLY: Species, nSpecies, DoSurfaceFlux USE MOD_Particle_Vars ,ONLY: UseCircularInflow, DoForceFreeSurfaceFlux USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive -USE MOD_SurfaceModel_Chemistry USE MOD_SurfaceModel_Vars !USE MOD_Particle_SurfChemFlux_Init USE MOD_Restart_Vars ,ONLY: DoRestart, RestartTime @@ -417,7 +416,6 @@ SUBROUTINE ReadInAndPrepareSurfaceFlux(MaxSurfacefluxBCs, nDataBC) USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, BezierSampleN, TriaSurfaceFlux USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod USE MOD_Mesh_Vars ,ONLY: NGeo -USE MOD_SurfaceModel_Chemistry USE MOD_SurfaceModel_Vars ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -613,7 +611,6 @@ SUBROUTINE BCSurfMeshSideAreasandNormals() USE MOD_Mesh_Vars ,ONLY: nBCSides, offsetElem, SideToElem USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID USE MOD_Particle_Surfaces ,ONLY: GetBezierSampledAreas, CalcNormAndTangTriangle -USE MOD_SurfaceModel_Chemistry USE MOD_SurfaceModel_Vars ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -696,7 +693,6 @@ SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp) USE MOD_DSMC_Symmetry ,ONLY: DSMC_1D_CalcSymmetryArea, DSMC_2D_CalcSymmetryArea, DSMC_2D_CalcSymmetryAreaSubSides USE MOD_DSMC_Vars ,ONLY: RadialWeighting USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle -USE MOD_SurfaceModel_Chemistry USE MOD_SurfaceModel_Vars #if USE_MPI USE MOD_Particle_MPI_Vars ,ONLY: PartMPI diff --git a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 index fca3fed4a..bc21f9f2f 100644 --- a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 +++ b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 @@ -460,8 +460,6 @@ SUBROUTINE ExchangeChemSurfData() ! nValues = SurfSampSize*nSurfSample**2 ! ! Sampling of impact energy for each species (trans, rot, vib, elec), impact vector (x,y,z), angle and number: Add 9*nSpecies ! ! to the buffer length -! IF(CalcSurfaceImpact) nValues=nValues+9*nSpecies -! IF(nPorousBC.GT.0) nValues = nValues + 1 ! ! open receive buffer ! DO iProc = 0,nSurfLeaders-1 diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index 5c4b15aee..e9e1252c0 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -14,7 +14,7 @@ MODULE MOD_SurfaceModel_Chemistry !=================================================================================================================================== -! Initialization of chemical module +!> !=================================================================================================================================== ! MODULES ! IMPLICIT VARIABLE HANDLING @@ -32,7 +32,7 @@ MODULE MOD_SurfaceModel_Chemistry CONTAINS !================================================================================================================================== -!> Define parameters for DSMC (Direct Simulation Monte Carlo) +!> !================================================================================================================================== SUBROUTINE DefineParametersSurfaceChemistry() ! MODULES diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index 63987565a..cea5da1b4 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -25,7 +25,7 @@ MODULE MOD_SurfaceModel !----------------------------------------------------------------------------------------------------------------------------------- ! Private Part --------------------------------------------------------------------------------------------------------------------- ! Public Part ---------------------------------------------------------------------------------------------------------------------- -PUBLIC :: SurfaceModel, MaxwellScattering, PerfectReflection, DiffuseReflection, SpeciesSwap +PUBLIC :: SurfaceModelling, MaxwellScattering, PerfectReflection, DiffuseReflection, SpeciesSwap !=================================================================================================================================== CONTAINS @@ -41,13 +41,14 @@ MODULE MOD_SurfaceModel !> 4.) PIC ONLY: Deposit charges on dielectric surface (when activated), if these were removed/changed in SpeciesSwap or SurfaceModel !> 5.) Count and sample the properties AFTER the surface interaction !=================================================================================================================================== -SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) +SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) ! MODULES USE MOD_Globals ,ONLY: abort,UNITVECTOR,OrthoNormVec #if USE_MPI USE MOD_Globals ,ONLY: myrank #endif /*USE_MPI*/ -USE MOD_Globals_Vars ,ONLY : PI, BoltzmannConst +USE MOD_Globals_Vars ,ONLY: PI, BoltzmannConst +USE MOD_TimeDisc_Vars ,ONLY: dt USE MOD_Particle_Vars ,ONLY: PartSpecies,WriteMacroSurfaceValues,Species,usevMPF,PartMPF USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod, TrackInfo USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, dXiEQ_SurfSample,SurfSideArea_Shared @@ -61,15 +62,11 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) USE MOD_SurfaceModel_Tools ,ONLY: SurfaceModel_ParticleEmission, GetWallTemperature, SurfaceModel_EnergyAccommodation USE MOD_SEE ,ONLY: SecondaryElectronEmission USE MOD_SurfaceModel_Porous ,ONLY: PorousBoundaryTreatment -USE MOD_SurfaceModel_Chemistry -USE MOD_DSMC_Vars ,ONLY: SpecDSMC USE MOD_Particle_Boundary_Tools ,ONLY: CalcWallSample -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly -USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr USE MOD_PICDepo_Tools ,ONLY: DepositParticleOnNodes USE MOD_part_operations ,ONLY: RemoveParticle, CreateParticle USE MOD_part_tools ,ONLY: CalcRadWeightMPF, VeloFromDistribution, GetParticleWeight -USE MOD_TimeDisc_Vars ,ONLY: dt ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -376,11 +373,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) CALL CreateParticle(iProd,NewPos(1:3),GlobalElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID, NewMPF=partWeight) - IF (SpecDSMC(iProd)%PolyatomicMol) THEN - CALL DSMC_SetInternalEnr_Poly(iProd,locBCID,NewPartID,4,iReac) - ELSE - CALL DSMC_SetInternalEnr_LauxVFD(iProd,locBCID,NewPartID,4,iReac) - END IF + CALL DSMC_SetInternalEnr(iProd,locBCID,NewPartID,4,iReac) END IF END DO @@ -490,7 +483,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) CALL CalcWallSample(PartID,SurfSideID,'new',SurfaceNormal_opt=n_loc) END IF -END SUBROUTINE SurfaceModel +END SUBROUTINE SurfaceModelling SUBROUTINE MaxwellScattering(PartID,SideID,n_loc,SpecularReflectionOnly_opt) From 1f3daf7c1404a677826ff226a0bc277901b41b49 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Tue, 26 Jul 2022 00:58:26 +0200 Subject: [PATCH 015/222] Internode communication for surface chemistry, including communication of coverage to the halo cells; regression test in WEK_DSMC --- REGGIE.md | 132 ++--- .../DSMC.ini | 26 + .../PartAnalyze_ref.csv | 7 + .../analyze.ini | 14 + .../command_line.ini | 2 + ...ge_DSMCSurfChemState_000.0000000100_ref.h5 | Bin 0 -> 8576 bytes .../cube_mesh.h5 | Bin 0 -> 1007858 bytes .../hopr.ini | 42 ++ .../parameter.ini | 147 ++++++ .../readme.md | 4 + .../emission/particle_surface_chemflux.f90 | 4 +- .../particle_mpi_boundary_sampling.f90 | 472 ++++++++++-------- 12 files changed, 565 insertions(+), 285 deletions(-) create mode 100755 regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/DSMC.ini create mode 100644 regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/PartAnalyze_ref.csv create mode 100644 regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/analyze.ini create mode 100644 regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/command_line.ini create mode 100644 regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/coverage_DSMCSurfChemState_000.0000000100_ref.h5 create mode 100755 regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/cube_mesh.h5 create mode 100755 regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/hopr.ini create mode 100755 regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/parameter.ini create mode 100644 regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/readme.md diff --git a/REGGIE.md b/REGGIE.md index 7c8e312d4..d89368550 100644 --- a/REGGIE.md +++ b/REGGIE.md @@ -170,13 +170,13 @@ Convergence tests (temporally by varying the time step) for integrating the path Testing more complex DSMC routines: [Link CMAKE-CONFIG](regressioncheck/NIG_DSMC/builds.ini). -| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | -| :-----: | :-------------------: | :--------------: | :---------------------------------: | :-----------: | :------------------------------------------: | :-------------------------------------------------------------------: | -| 1 | 2D_VTS_Distribution | | | nProcs=1,2,4 | h5diff PartTimeStep | [Link](regressioncheck/NIG_DSMC/2D_VTS_Distribution/readme.md) | -| 2 | Ambipolar_Diffusion | | | nProcs=6 | PartAnalyze.csv | [Link](regressioncheck/NIG_DSMC/Ambipolar_Diffusion/readme.md) | -| 3 | Macroscopic_Restart | | | nProcs=6 | PartAnalyze.csv | [Link](regressioncheck/NIG_DSMC/Macroscopic_Restart/readme.md) | -| 4 | RotPeriodicBC | | | nProcs=1,2,7,15,25 | h5 bounds check PartData and PartAnalyze.csv | [Link](regressioncheck/nig_dsmc/RotPeriodicBC/readme.md) | -| 5 | VSS_VHS_SelfDiffusion | | Testing the VHS/VSS collision model | nProcs=6 | Number Density | [Link](regressioncheck/NIG_DSMC/VSS_VHS_SelfDiffusion/readme.md) | +| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | +| :-----: | :-------------------: | :--------------: | :---------------------------------: | :----------------: | :------------------------------------------: | :--------------------------------------------------------------: | +| 1 | 2D_VTS_Distribution | | | nProcs=1,2,4 | h5diff PartTimeStep | [Link](regressioncheck/NIG_DSMC/2D_VTS_Distribution/readme.md) | +| 2 | Ambipolar_Diffusion | | | nProcs=6 | PartAnalyze.csv | [Link](regressioncheck/NIG_DSMC/Ambipolar_Diffusion/readme.md) | +| 3 | Macroscopic_Restart | | | nProcs=6 | PartAnalyze.csv | [Link](regressioncheck/NIG_DSMC/Macroscopic_Restart/readme.md) | +| 4 | RotPeriodicBC | | | nProcs=1,2,7,15,25 | h5 bounds check PartData and PartAnalyze.csv | [Link](regressioncheck/nig_dsmc/RotPeriodicBC/readme.md) | +| 5 | VSS_VHS_SelfDiffusion | | Testing the VHS/VSS collision model | nProcs=6 | Number Density | [Link](regressioncheck/NIG_DSMC/VSS_VHS_SelfDiffusion/readme.md) | ### NIG_Dielectric @@ -253,45 +253,45 @@ Testing of different tracking routines with DSMC: [Link to build](regressionchec Testing of different SuperB examples (via piclas or standalone superB binary), which generate a 3D magnetic field distribution to be used in piclas: [Link to build](regressioncheck/NIG_SuperB/builds.ini). -| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | -| :-------: | :------------------------: | :------------------------------------------: | :--------------------------------------------------------------------------------------: | :-----------------------------------: | :--------------------------------------------------------------: | :----------------------------------------------------------------------------------: | -| 1 | LinearConductor | PICLAS_BUILD_POSTI=ON, POSTI_BUILD_SUPERB=ON | straight conducting line | piclas, superB binaries (single-core) | convergence test with number of segments of the linear conductor | [Link](regressioncheck/NIG_SuperB/LinearConductor/readme.md) | -| 2 | CircularCoil | - | circular shaped coil | - | reference solution h5diff | [Link](regressioncheck/NIG_SuperB/CircularCoil/readme.md) | -| 3 | CircularCoilTimeDependent | - | circular shaped coil, time-dependent current (sin function) | nProcs=1,4 | - | [Link](~/piclas/regressioncheck/NIG_SuperB/CircularCoilTimeDependent/readme.md) | -| 4 | CircularCoilTimeDependentMuli | - | three circular shaped coils, time-dependent current (sin function) | nProcs=1,4 | - | [Link](~/piclas/regressioncheck/NIG_SuperB/CircularCoilTimeDependentMuli/readme.md) | -| 5 | RectangularCoil | - | rectangular shaped coil | - | reference solution h5diff | [Link](regressioncheck/NIG_SuperB/RectangularCoil/readme.md) | -| 6 | SphericalMagnet | - | spherically shaped hard magnet | - | convergence test with number of nodes of the spherical magnet | [Link](regressioncheck/NIG_SuperB/SphericalMagnet/readme.md) | -| 7 | CubicMagnet | - | cubic shaped hard magnet | - | magnetic field reference solution h5diff | [Link](regressioncheck/NIG_SuperB/CubicMagnet/readme.md) | -| 8 | CylindricalMagnet | - | cylindrically shaped hard magnet | - | magnetic field reference solution h5diff | [Link](regressioncheck/NIG_SuperB/CylindricalMagnet/readme.md) | -| 9 | HollowCylinderMagnet | - | hollow cylinder hard magnet, placed outside of simulation domain | - | magnetic field reference solution h5diff | [Link](regressioncheck/NIG_SuperB/HollowCylinderMagnet/readme.md) | -| 10 | HollowCylinderMagnetCurved | - | hollow cylinder hard magnet (analytic solution along z-axis available), curvilinear grid | - | magnetic field reference solution h5diff | [Link](regressioncheck/NIG_SuperB/HollowCylinderMagnetCurved/readme.md) | +| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | +| :-----: | :---------------------------: | :------------------------------------------: | :--------------------------------------------------------------------------------------: | :-----------------------------------: | :--------------------------------------------------------------: | :---------------------------------------------------------------------------------: | +| 1 | LinearConductor | PICLAS_BUILD_POSTI=ON, POSTI_BUILD_SUPERB=ON | straight conducting line | piclas, superB binaries (single-core) | convergence test with number of segments of the linear conductor | [Link](regressioncheck/NIG_SuperB/LinearConductor/readme.md) | +| 2 | CircularCoil | - | circular shaped coil | - | reference solution h5diff | [Link](regressioncheck/NIG_SuperB/CircularCoil/readme.md) | +| 3 | CircularCoilTimeDependent | - | circular shaped coil, time-dependent current (sin function) | nProcs=1,4 | - | [Link](~/piclas/regressioncheck/NIG_SuperB/CircularCoilTimeDependent/readme.md) | +| 4 | CircularCoilTimeDependentMuli | - | three circular shaped coils, time-dependent current (sin function) | nProcs=1,4 | - | [Link](~/piclas/regressioncheck/NIG_SuperB/CircularCoilTimeDependentMuli/readme.md) | +| 5 | RectangularCoil | - | rectangular shaped coil | - | reference solution h5diff | [Link](regressioncheck/NIG_SuperB/RectangularCoil/readme.md) | +| 6 | SphericalMagnet | - | spherically shaped hard magnet | - | convergence test with number of nodes of the spherical magnet | [Link](regressioncheck/NIG_SuperB/SphericalMagnet/readme.md) | +| 7 | CubicMagnet | - | cubic shaped hard magnet | - | magnetic field reference solution h5diff | [Link](regressioncheck/NIG_SuperB/CubicMagnet/readme.md) | +| 8 | CylindricalMagnet | - | cylindrically shaped hard magnet | - | magnetic field reference solution h5diff | [Link](regressioncheck/NIG_SuperB/CylindricalMagnet/readme.md) | +| 9 | HollowCylinderMagnet | - | hollow cylinder hard magnet, placed outside of simulation domain | - | magnetic field reference solution h5diff | [Link](regressioncheck/NIG_SuperB/HollowCylinderMagnet/readme.md) | +| 10 | HollowCylinderMagnetCurved | - | hollow cylinder hard magnet (analytic solution along z-axis available), curvilinear grid | - | magnetic field reference solution h5diff | [Link](regressioncheck/NIG_SuperB/HollowCylinderMagnetCurved/readme.md) | ### NIG_PIC_poisson_Leapfrog Testing PIC compiled with Leapfrog integration (poisson,Leapfrog), solving Poisson's equation: [Link to build](regressioncheck/NIG_PIC_poisson_Leapfrog/builds.ini). - | **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | + | **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | | :-----: | :--------------------------------------------: | :-----------------: | :--------------------------------------------------------------------------------------: | :---------------: | :------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------: | - | 1 | 2D_innerBC_dielectric_surface_charge | PICLAS_MPI = OFF,ON | Poisson-PIC,Dielectric surface charging,Cartesian geometry | nProcs=1,2,5,7,12 | DG_Source,DG_SourceExt,ElemData | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/2D_innerBC_dielectric_surface_charge/readme.md) | - | 2 | parallel_plates | - | Poisson-PIC,CalcCoupledPower,Part-LorentzType=non-relativistic (0) | nProcs=1 | PartAnalyzeLeapfrog_ref.csv | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates/readme.md) | - | 3 | parallel_plates_AC | - | Poisson-PIC,CalcCoupledPower | nProcs=1 | PartAnalyzeLeapfrog_ref.csv | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_AC/readme.md) | - | 4 | parallel_plates_SEE_Dunaevsky2003 | - | Poisson-PIC (no deposition), secondary electron emission (SEE-E model by Dunaevsky) | nProcs=1,2,5,8,10 | different SEE yields depending on bombarding e- energy on quartz (SiO2) | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_SEE_Dunaevsky2003/readme.md) | - | 5 | parallel_plates_SEE-I | - | Poisson-PIC (no deposition), CalcCoupledPower, secondary electron emission (SEE-I model) | nProcs=1,2,5,10 | 13 % and 1 % of bombarding ions create secondary electrons | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_AC/readme.md) | - | 6 | parallel_plates_SEE_Morozov2004 | - | Poisson-PIC (no deposition), secondary electron emission (SEE-E model by Morozov) | nProcs=1,2,5,8,10 | 1 and 2 SEE from bombarding electrons on dielectric surfaces | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_SEE_Morozov2004/parameter.ini) | - | 7 | parallel_plates_SEE_Phelps1999 | - | Poisson-PIC (no deposition), secondary electron emission (SEE-E model by Phelps) | nProcs=1,2,5,8,10 | different SEE yields depending on bombarding Ar+ energy on copper | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_SEE_Phelps1999/parameter.ini) | - | 8 | Dielectric_sphere_surface_charging | - | Poisson-PIC,Dielectric surface charging | nProcs=1,2,3,7,12 | DG_Source,DG_SourceExt,ElemData,DielectricGlobal | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/Dielectric_sphere_surface_charging/readme.md) | - | 9 | Dielectric_sphere_surface_charging_mortar | - | Poisson-PIC,Dielectric surface charging,mortars | nProcs=1,2,3,7,12 | DG_Source,DG_SourceExt,ElemData,DielectricGlobal | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/Dielectric_sphere_surface_charging_mortar/readme.md) | - | 10 | Dielectric_sphere_surface_charging_PStateBound | - | Poisson-PIC,Dielectric surface charging,PartStateBoundary | nProcs=1,2 | PartStateBoundary,DSMCSurfState,DG_Source,DG_SourceExt,ElemData,DielectricGlobal | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/Dielectric_sphere_surface_charging_PStateBound/readme.md) | + | 1 | 2D_innerBC_dielectric_surface_charge | PICLAS_MPI = OFF,ON | Poisson-PIC,Dielectric surface charging,Cartesian geometry | nProcs=1,2,5,7,12 | DG_Source,DG_SourceExt,ElemData | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/2D_innerBC_dielectric_surface_charge/readme.md) | + | 2 | parallel_plates | - | Poisson-PIC,CalcCoupledPower,Part-LorentzType=non-relativistic (0) | nProcs=1 | PartAnalyzeLeapfrog_ref.csv | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates/readme.md) | + | 3 | parallel_plates_AC | - | Poisson-PIC,CalcCoupledPower | nProcs=1 | PartAnalyzeLeapfrog_ref.csv | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_AC/readme.md) | + | 4 | parallel_plates_SEE_Dunaevsky2003 | - | Poisson-PIC (no deposition), secondary electron emission (SEE-E model by Dunaevsky) | nProcs=1,2,5,8,10 | different SEE yields depending on bombarding e- energy on quartz (SiO2) | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_SEE_Dunaevsky2003/readme.md) | + | 5 | parallel_plates_SEE-I | - | Poisson-PIC (no deposition), CalcCoupledPower, secondary electron emission (SEE-I model) | nProcs=1,2,5,10 | 13 % and 1 % of bombarding ions create secondary electrons | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_AC/readme.md) | + | 6 | parallel_plates_SEE_Morozov2004 | - | Poisson-PIC (no deposition), secondary electron emission (SEE-E model by Morozov) | nProcs=1,2,5,8,10 | 1 and 2 SEE from bombarding electrons on dielectric surfaces | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_SEE_Morozov2004/parameter.ini) | + | 7 | parallel_plates_SEE_Phelps1999 | - | Poisson-PIC (no deposition), secondary electron emission (SEE-E model by Phelps) | nProcs=1,2,5,8,10 | different SEE yields depending on bombarding Ar+ energy on copper | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_SEE_Phelps1999/parameter.ini) | + | 8 | Dielectric_sphere_surface_charging | - | Poisson-PIC,Dielectric surface charging | nProcs=1,2,3,7,12 | DG_Source,DG_SourceExt,ElemData,DielectricGlobal | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/Dielectric_sphere_surface_charging/readme.md) | + | 9 | Dielectric_sphere_surface_charging_mortar | - | Poisson-PIC,Dielectric surface charging,mortars | nProcs=1,2,3,7,12 | DG_Source,DG_SourceExt,ElemData,DielectricGlobal | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/Dielectric_sphere_surface_charging_mortar/readme.md) | + | 10 | Dielectric_sphere_surface_charging_PStateBound | - | Poisson-PIC,Dielectric surface charging,PartStateBoundary | nProcs=1,2 | PartStateBoundary,DSMCSurfState,DG_Source,DG_SourceExt,ElemData,DielectricGlobal | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/Dielectric_sphere_surface_charging_PStateBound/readme.md) | ### NIG_PIC_poisson_Boris-Leapfrog Testing PIC compiled with Boris-Leapfrog integration (poisson,Boris-Leapfrog), solving Poisson's equation: [Link to build](regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/builds.ini). -| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | -| :-----: | :---------: | :------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------: | :--------------------------------------------------------------------: | :--------------------------------------------------------------------------: | -| 1 | 2D_HET_Liu2010 | CMAKE_BUILD_TYPE = Release,Debug | 2D Poisson-PIC, BGGas distribution, null collision on/off, pre-defined external magnetic field, neutralization BC, SEE model with variable electron bulk temperature | nProcs=3,6,12 | integrate number of electrons impinging the anode (SurfaceAnalyze.csv) | [Link](regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/2D_HET_Liu2010/readme.md) | -| 1 | 3D_HET_Liu2010 | CMAKE_BUILD_TYPE = Release,Debug | 3D Poisson-PIC, BGGas distribution, null collision on/off, pre-defined external magnetic field, neutralization BC, SEE model with variable electron bulk temperature, dielectric surface charging (hollow cylinder) | nProcs=6 | integrate number of electrons impinging the anode (SurfaceAnalyze.csv) | [Link](regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/3D_HET_Liu2010/readme.md) | -| 1 | 2D_Landmark | CMAKE_BUILD_TYPE = Release,Debug | 2D Poisson-PIC, emission models for Landmark (volumetric ionization and neutralizer) | nProcs=4 | integrate number of electrons impinging the anode (SurfaceAnalyze.csv) | [Link](regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/2D_Landmark/readme.md) | +| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | +| :-----: | :------------: | :------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------: | :--------------------------------------------------------------------: | :-----------------------------------------------------------------------------: | +| 1 | 2D_HET_Liu2010 | CMAKE_BUILD_TYPE = Release,Debug | 2D Poisson-PIC, BGGas distribution, null collision on/off, pre-defined external magnetic field, neutralization BC, SEE model with variable electron bulk temperature | nProcs=3,6,12 | integrate number of electrons impinging the anode (SurfaceAnalyze.csv) | [Link](regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/2D_HET_Liu2010/readme.md) | +| 1 | 3D_HET_Liu2010 | CMAKE_BUILD_TYPE = Release,Debug | 3D Poisson-PIC, BGGas distribution, null collision on/off, pre-defined external magnetic field, neutralization BC, SEE model with variable electron bulk temperature, dielectric surface charging (hollow cylinder) | nProcs=6 | integrate number of electrons impinging the anode (SurfaceAnalyze.csv) | [Link](regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/3D_HET_Liu2010/readme.md) | +| 1 | 2D_Landmark | CMAKE_BUILD_TYPE = Release,Debug | 2D Poisson-PIC, emission models for Landmark (volumetric ionization and neutralizer) | nProcs=4 | integrate number of electrons impinging the anode (SurfaceAnalyze.csv) | [Link](regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/2D_Landmark/readme.md) | ### NIG_PIC_poisson_RK3 @@ -352,40 +352,42 @@ Pure Poisson solver without particles: [Link to build](regressioncheck/NIG_poiss Test all features of photoionization within the HDG solver (without interpolation and deposition): [Link to build](regressioncheck/NIG_Photoionization/builds.ini). -| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | -| :-----: | :--------------: | :--------------: | :----------------------------------------: | :------------: | :----------------------------------------------------------------------------: | :--------------------------------------------------------------------: | +| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | +| :-----: | :---------------------------: | :--------------: | :--------------------------------------------------------------------------------------------------------------------------: | :------------: | :--------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------: | | 1 | volume_emission | | photoionization in the volume (circle and honeycomb) | nProcs=1,2,5,8 | the total number of real electrons in the system with an analytical expression | [Link](regressioncheck/NIG_Photoionization/volume_emission/readme.md) | -| 2 | volume_emission_rectangle | | photoionization in the volume (rectangle) | nProcs=1,2,5,8 | the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionization/volume_emission_rectangle/readme.md) | -| 3 | surface_emission | | secondary electron emission from a surface (circle and honeycomb) | nProcs=1,2,5,8 | the total number of real electrons in the system with an analytical expression | [Link](regressioncheck/NIG_Photoionization/surface_emission/readme.md) | -| 4 | surface_emission_rectangle | | secondary electron emission from a surface (rectangle), PartBCIndex=1 (BoundaryParticleOutput), emission-specific MPF (vMPF) | nProcs=1,2,5,8 | the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionization/surface_emission_rectangle/readme.md) | +| 2 | volume_emission_rectangle | | photoionization in the volume (rectangle) | nProcs=1,2,5,8 | the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionization/volume_emission_rectangle/readme.md) | +| 3 | surface_emission | | secondary electron emission from a surface (circle and honeycomb) | nProcs=1,2,5,8 | the total number of real electrons in the system with an analytical expression | [Link](regressioncheck/NIG_Photoionization/surface_emission/readme.md) | +| 4 | surface_emission_rectangle | | secondary electron emission from a surface (rectangle), PartBCIndex=1 (BoundaryParticleOutput), emission-specific MPF (vMPF) | nProcs=1,2,5,8 | the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionization/surface_emission_rectangle/readme.md) | | 5 | volume_emission_polychromatic | | photoionization in the volume with polychromatic photon spectrum and energy-dependent cross-section data | nProcs=1,2,5,8 | the total number of real electrons in the system with a reference solution and particle numbers for different MPFs | [Link](regressioncheck/NIG_Photoionization/volume_emission_polychromatic/readme.md) | -| 6 | volume_emission_vMPF | | photoionization in the volume with vMPF | nProcs=1,2,5,8 | the total number of real electrons in the system with an analytical expression and particle numbers for different MPFs | [Link](regressioncheck/NIG_Photoionization/volume_emission_vMPF/readme.md) | +| 6 | volume_emission_vMPF | | photoionization in the volume with vMPF | nProcs=1,2,5,8 | the total number of real electrons in the system with an analytical expression and particle numbers for different MPFs | [Link](regressioncheck/NIG_Photoionization/volume_emission_vMPF/readme.md) | ## Weekly Overview of the test cases performed every week. -| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | -| :-----: | :----------------------------------------: | :-------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------: | :---------------------------: | :-------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------: | -| 1 | plasma_wave | [PIC-Maxwell](regressioncheck/WEK_PIC_maxwell/builds.ini) | Maxwell-PIC,SF1D, FastPeriodic | nProcs=6, IMEX for ImplicitO4 | W_el LineIntegration (FieldAnalyze.csv) | [Link](regressioncheck/WEK_PIC_maxwell/plasma_wave/readme.md) | -| ** | 3D_periodic_shape_function | ** | Maxwell-PIC,shape function deposition over periodic sides 3D | nProcs= 1,2,6,10,20 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_shape_function/readme.md) | -| 2 | HEMPT-90deg-symmetry | [PIC-HDG](regressioncheck/WEK_PIC_poisson/builds.ini) | create mesh (hopr) and external magnetic field (superB) and use both in simulation | nProcs=1,10,20 | | [Link](regressioncheck/WEK_PIC_poisson/HEMPT-90deg-symmetry/readme.md) | -| 3 | CHEM_EQUI_diss_CH4 | [Reservoir](regressioncheck/WEK_Reservoir/builds.ini) | Relaxation into equilibrium with dissociation and recombination of CH4 | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4/readme.md) | -| ** | CHEM_EQUI_exch_CH3-H | ** | Relaxation into equilibrium with exchange/radical reaction of CH3+H <-> CH2+H2 | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_exch_CH3-H/readme.md) | -| ** | CHEM_EQUI_ionization_H | ** | Relaxation into equilibrium with ionization and recombination of H | nProcs=1 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_ionization_H/readme.md) | -| ** | CHEM_EQUI_diss_CH4_2DAxi_RadWeight | ** | Analogous to CHEM_EQUI_diss_CH4 with 2D axisymmetric mesh with radial weighting | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4_2DAxi_RadWeight/readme.md) | -| ** | CHEM_EQUI_Titan_Chemistry | ** | Reservoir simulation of conditions similar to Titan's atmosphere (18 species, 28 reactions) | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry/readme.md) | -| ** | MCC_MultiSpec_XSec | ** | Multi-species reservoir: Collision rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/MCC_MultiSpec_XSec/readme.md) | -| ** | MCC_MultiSpec_XSec_TCE_QK_Chem | ** | Multi-species reservoir: QK ionization and TCE dissociation | nProcs=2 | | [Link](regressioncheck/WEK_Reservoir/MCC_MultiSpec_XSec_Chem/readme.md) | -| ** | BGG_MultiSpec_XSec_Elec | ** | Background gas reservoir with VHS: Electronic excitation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/BGG_MultiSpec_XSec_Elec/readme.md) | -| ** | MCC_N2_XSec_Elec | ** | Regular reservoir with MCC/VHS: Electronic excitation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/MCC_N2_XSec_Elec/readme.md) | -| ** | 1D_Sod_Shocktube | ** | 1D test case shock tube | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/1D_Sod_Shocktube/readme.md) | -| 4 | ChannelFlow_AdaptiveBoundary_ConstPressure | [DSMC](regressioncheck/WEK_DSMC/builds.ini) | Pressure gradient driven channel flow with adaptive surface flux boundary conditions | nProcs=6 | PartAnalyze: Average pressure and mass flow rate at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/readme.md) | -| ** | Flow_Argon_Cylinder_Curved | ** | Hypersonic Argon flow around a cylinder (pseudo 2D) with DSMC on a curved mesh | nProcs=2 | | [Link](regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_Curved/readme.md) | -| ** | Flow_Argon_Cylinder_LinearMesh | ** | Hypersonic Argon flow around a cylinder (2D) with DSMC on a linear mesh | nProcs=4 | | [Link](regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/readme.md) | -| ** | Flow_N2_70degCone | ** | 2D axisymmetric 70 degree cone | nProcs=6 | Surface Sampling, includes CalcSurfaceImpact and adaptive wall temperature | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) | -| ** | fully_periodic_3D | ** | Periodic boundary conditions in all three directions | nProcs=10,20,30 | Check whether particles end up outside of the domain | [Link](regressioncheck/WEK_DSMC/fully_periodic_3D/readme.md) | -| 5 | Flow_N2-O2_70degCone | [BGK](regressioncheck/WEK_BGKFlow/builds.ini) | 2D axisymmetric 70 degree cone with a N2-O2 mixture | nProcs=6 | | [Link](regressioncheck/WEK_DSMC/Flow_N2-O2_70degCone/readme.md) | -| ** | Flow_N2_70degCone | ** | 2D axisymmetric 70 degree cone | nProcs=6 | | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) | -| ** | MultiSpec_Supersonic_Couette_Ar-He | ** | Supersonic Couette flow with an Ar-He mixture | nProcs=5 | Temperature | [Link](regressioncheck/WEK_DSMC/MultiSpec_Supersonic_Couette_Ar-He/readme.md) | -| 6 | Flow_N2_70degCone | [FP](regressioncheck/WEK_FPFlow/builds.ini) | 2D axisymmetric 70 degree cone | nProcs=6 | Surface Sampling, includes CalcSurfaceImpact | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) | +| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | +| :-----: | :----------------------------------------: | :-------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------: | :---------------------------: | :--------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------: | +| 1 | plasma_wave | [PIC-Maxwell](regressioncheck/WEK_PIC_maxwell/builds.ini) | Maxwell-PIC,SF1D, FastPeriodic | nProcs=6, IMEX for ImplicitO4 | W_el LineIntegration (FieldAnalyze.csv) | [Link](regressioncheck/WEK_PIC_maxwell/plasma_wave/readme.md) | +| ** | 3D_periodic_shape_function | ** | Maxwell-PIC,shape function deposition over periodic sides 3D | nProcs= 1,2,6,10,20 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_shape_function/readme.md) | +| 2 | HEMPT-90deg-symmetry | [PIC-HDG](regressioncheck/WEK_PIC_poisson/builds.ini) | create mesh (hopr) and external magnetic field (superB) and use both in simulation | nProcs=1,10,20 | | [Link](regressioncheck/WEK_PIC_poisson/HEMPT-90deg-symmetry/readme.md) | +| 3 | CHEM_EQUI_diss_CH4 | [Reservoir](regressioncheck/WEK_Reservoir/builds.ini) | Relaxation into equilibrium with dissociation and recombination of CH4 | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4/readme.md) | +| ** | CHEM_EQUI_exch_CH3-H | ** | Relaxation into equilibrium with exchange/radical reaction of CH3+H <-> CH2+H2 | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_exch_CH3-H/readme.md) | +| ** | CHEM_EQUI_ionization_H | ** | Relaxation into equilibrium with ionization and recombination of H | nProcs=1 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_ionization_H/readme.md) | +| ** | CHEM_EQUI_diss_CH4_2DAxi_RadWeight | ** | Analogous to CHEM_EQUI_diss_CH4 with 2D axisymmetric mesh with radial weighting | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4_2DAxi_RadWeight/readme.md) | +| ** | CHEM_EQUI_Titan_Chemistry | ** | Reservoir simulation of conditions similar to Titan's atmosphere (18 species, 28 reactions) | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry/readme.md) | +| ** | MCC_MultiSpec_XSec | ** | Multi-species reservoir: Collision rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/MCC_MultiSpec_XSec/readme.md) | +| ** | MCC_MultiSpec_XSec_TCE_QK_Chem | ** | Multi-species reservoir: QK ionization and TCE dissociation | nProcs=2 | | [Link](regressioncheck/WEK_Reservoir/MCC_MultiSpec_XSec_Chem/readme.md) | +| ** | BGG_MultiSpec_XSec_Elec | ** | Background gas reservoir with VHS: Electronic excitation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/BGG_MultiSpec_XSec_Elec/readme.md) | +| ** | MCC_N2_XSec_Elec | ** | Regular reservoir with MCC/VHS: Electronic excitation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/MCC_N2_XSec_Elec/readme.md) | +| ** | 1D_Sod_Shocktube | ** | 1D test case shock tube | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/1D_Sod_Shocktube/readme.md) | +| 4 | ChannelFlow_AdaptiveBoundary_ConstMassflow | [DSMC](regressioncheck/WEK_DSMC/builds.ini) | Channel flow with constant mass flow and adaptive surface flux boundary conditions | nProcs=6 | PartAnalyze: Average pressure and mass flow rate at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/readme.md) | +| | ChannelFlow_AdaptiveBoundary_ConstPressure | ** | Pressure gradient driven channel flow with adaptive surface flux boundary conditions | nProcs=6 | PartAnalyze: Average pressure and mass flow rate at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/readme.md) | +| | ChannelFlow_SurfChem_AdsorpDesorp_CO_O2 | ** | Channel flow with surface chemistry, testing adsorption/desorption of CO and O2 | nProcs=6 | Coverage (DSMCSurfChemStatePartAnalyze), Number density, temperature (PartAnalyze) | [Link](regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/readme.md) | +| ** | Flow_Argon_Cylinder_Curved | ** | Hypersonic Argon flow around a cylinder (pseudo 2D) with DSMC on a curved mesh | nProcs=2 | | [Link](regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_Curved/readme.md) | +| ** | Flow_Argon_Cylinder_LinearMesh | ** | Hypersonic Argon flow around a cylinder (2D) with DSMC on a linear mesh | nProcs=4 | | [Link](regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/readme.md) | +| ** | Flow_N2_70degCone | ** | 2D axisymmetric 70 degree cone | nProcs=6 | Surface Sampling, includes CalcSurfaceImpact and adaptive wall temperature | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) | +| ** | fully_periodic_3D | ** | Periodic boundary conditions in all three directions | nProcs=10,20,30 | Check whether particles end up outside of the domain | [Link](regressioncheck/WEK_DSMC/fully_periodic_3D/readme.md) | +| 5 | Flow_N2-O2_70degCone | [BGK](regressioncheck/WEK_BGKFlow/builds.ini) | 2D axisymmetric 70 degree cone with a N2-O2 mixture | nProcs=6 | | [Link](regressioncheck/WEK_DSMC/Flow_N2-O2_70degCone/readme.md) | +| ** | Flow_N2_70degCone | ** | 2D axisymmetric 70 degree cone | nProcs=6 | | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) | +| ** | MultiSpec_Supersonic_Couette_Ar-He | ** | Supersonic Couette flow with an Ar-He mixture | nProcs=5 | Temperature | [Link](regressioncheck/WEK_DSMC/MultiSpec_Supersonic_Couette_Ar-He/readme.md) | +| 6 | Flow_N2_70degCone | [FP](regressioncheck/WEK_FPFlow/builds.ini) | 2D axisymmetric 70 degree cone | nProcs=6 | Surface Sampling, includes CalcSurfaceImpact | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) | diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/DSMC.ini b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/DSMC.ini new file mode 100755 index 000000000..a7e688c29 --- /dev/null +++ b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/DSMC.ini @@ -0,0 +1,26 @@ +! =============================================================================== ! +! Species1, CO +! =============================================================================== ! +Part-Species1-SpeciesName=CO +Part-Species1-InteractionID=2 +Part-Species1-Tref=273 +Part-Species1-dref=4.17E-10 +Part-Species1-omega=0.24 +Part-Species1-CharaTempVib=3120.7 +Part-Species1-Ediss_eV=11.06 +Part-Species1-HeatOfFormation_K=-13293.70 +Part-Species1-CharaTempRot = 2.8 +Part-Species1-SymmetryFactor = 1 +! =============================================================================== ! +! Species2, O2 +! =============================================================================== ! +Part-Species2-SpeciesName=O2 +Part-Species2-InteractionID = 2 +Part-Species2-Tref =273 +Part-Species2-dref = 3.96E-10 +Part-Species2-omega=0.24 +Part-Species2-CharaTempVib=2272.8 +Part-Species2-Ediss_eV=5.115 +Part-Species2-CharaTempRot = 2.1 +Part-Species2-SymmetryFactor = 2 +Part-Species2-HeatOfFormation_K=0.0 diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/PartAnalyze_ref.csv b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/PartAnalyze_ref.csv new file mode 100644 index 000000000..89af6c196 --- /dev/null +++ b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/PartAnalyze_ref.csv @@ -0,0 +1,7 @@ +001-TIME,002-NumDens-Spec-001,003-NumDens-Spec-002,004-NumDens-Spec-003,005-TempTra-001,006-TempTra-002,007-TempTra-003,008-TempVib001,009-TempVib002,010-XiVibMean001,011-XiVibMean002,012-TempRot001,013-TempRot002,014-TempTotal001,015-TempTotal002,016-TempTotal003 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +0.2000000000000000E-008,0.6338437499999762E+024,0.6331381249999761E+025,0.6965224999999738E+025,0.6411018430774229E+003,0.8215923504537280E+003,0.8051674998516585E+003,0.7274124038992940E+003,0.7218929792236388E+003,0.1192092930091866E+000,0.2823856911626711E+000,0.6953227826980432E+003,0.7097399937898869E+003,0.6642950538606160E+003,0.7739134409787291E+003,0.7639380375194156E+003 +0.4000000000000000E-008,0.9390499999999646E+024,0.1116445624999958E+026,0.1210350624999954E+026,0.7920040716494817E+003,0.8629059589921339E+003,0.8574050391814702E+003,0.7224481216989512E+003,0.7236838187935817E+003,0.1164946797142770E+000,0.2839897173776707E+000,0.7558464562377324E+003,0.7822090077092306E+003,0.7762866451750542E+003,0.8248794734082016E+003,0.8211094009672231E+003 +0.6000000000000001E-008,0.1105924999999958E+025,0.1425326249999946E+026,0.1535918749999942E+026,0.7946388375065911E+003,0.8372215666359040E+003,0.8341554340873993E+003,0.7217534227049695E+003,0.7261782356300544E+003,0.1161165015475386E+000,0.2862242425162172E+000,0.7753045385010607E+003,0.8068128845430016E+003,0.7854264207491913E+003,0.8197042133717990E+003,0.8172360705871525E+003 +0.8000000000000000E-008,0.1177737499999956E+025,0.1643612499999938E+026,0.1761386249999934E+026,0.7954213044069562E+003,0.8219046188858503E+003,0.8201338322349333E+003,0.7265138557017924E+003,0.7285897182378201E+003,0.1187163700829218E+000,0.2883847600292976E+000,0.7843800638176004E+003,0.8104678894112716E+003,0.7895090949441425E+003,0.8124907701515494E+003,0.8109541179434046E+003 +0.1000000000000000E-007,0.1188306249999955E+025,0.1772683749999933E+026,0.1891514374999929E+026,0.7821143706389221E+003,0.8062653730135906E+003,0.8047481343689949E+003,0.7269346934650727E+003,0.7307497737871059E+003,0.1189471462161827E+000,0.2903201994961861E+000,0.7801574554084691E+003,0.8027645411393565E+003,0.7800676029559211E+003,0.8007977705830742E+003,0.7994954390713249E+003 diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/analyze.ini b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/analyze.ini new file mode 100644 index 000000000..e8a06e718 --- /dev/null +++ b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/analyze.ini @@ -0,0 +1,14 @@ +! hdf5 diff +h5diff_file = coverage_DSMCSurfChemState_000.0000000100.h5 +h5diff_reference_file = coverage_DSMCSurfChemState_000.0000000100_ref.h5 +h5diff_data_set = SurfaceData +h5diff_tolerance_value = 20E-2 +h5diff_tolerance_type = relative +!h5diff_max_differences = 5 + +! PartAnalyze diff +compare_data_file_name = PartAnalyze.csv +compare_data_file_reference = PartAnalyze_ref.csv +compare_data_file_tolerance = 5E-2 +compare_data_file_tolerance_type = relative +!compare_data_file_max_differences = 2 diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/command_line.ini b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/command_line.ini new file mode 100644 index 000000000..11fbc4524 --- /dev/null +++ b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/command_line.ini @@ -0,0 +1,2 @@ +MPI=6 +cmd_suffix=DSMC.ini diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/coverage_DSMCSurfChemState_000.0000000100_ref.h5 b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/coverage_DSMCSurfChemState_000.0000000100_ref.h5 new file mode 100644 index 0000000000000000000000000000000000000000..27fff07c82dbab687ee256a8b1d86fa4213eeb2f GIT binary patch literal 8576 zcmeHLX;c))79Lg+L4*W@1QmCKMuC75)Lcpi5Dkb78lvbh41<7d&H%=!XmBf6j5|aL zC@5~hr=o`G2BT3iBHAtyqJ@ob!G_aZXoFb@i=V-~H}) zyO}pc>Thl7XerS(3k!*X+kUY=o_(aA6){ub{?;=l-dihYr>VPM4U>Fzn;d>gdy zY=RTkhCVFR&riZuiuT1GS4muL4I>M2qPcHU2n_KfA-V&HY#07t|w?)3b%4;i$tKPJc#De`fNJ7-f~yXKW86Bg4+({$d{z z==-rkOI4(*nii5T;b$%K zE?%Wfl?N*l^$@-ZKV@>dO05{*#9(_)5{92%Mp&h>mb}gKR?ojtDzzpqIY~!BTW4Un z>Y9(lqm{(t8P=)S<#SH9u9^9~;I)k*E^*2Pg+~6|@|)tK-%@{h?rT#Tyc8E(Hg=Hc z@?4&z%XFC{F(pBi2T2P`WQbv%r1i^oQ&h@0m4@B!#uO?oIXhLsW`Xxqm|1XRpwziTu>-m%0A?-Eh(A8P-!%gF;24 zu8Ddj_G13L>AnfeN!>HAt50SuYjyXHjg0lCbvdjXm>4U{|uCA@uLi9Y2o3KHE z3h5TxL+vRUH>@q6`izHbBYO1`b_j6gSW!guPD*b7vG2}%xg1n{oppRqu>g16rk0w7 zQR4f4xOG1h4(ePJw`Nwb^~Dc;b_}Lu{l31DS(`Z+g!^{PJ7;YgNy*xAcRT#%&coEk z8pmHx3*dHbyG6rVO19@EInfq8v@<iV=f;ICKE8;OIoo7U9VYP*c-C1Fx?X_7%w-o`zM$lY?ShhF z(|9<&FDTeNM}Q3h;q{iEQ?fhyTJDMaS~!>?gv1>b;ParMt8^eGEtOX+Ekeq`AMIQk zyJ*bCZz<{XTa8V29}Xm%YnwW*6=3*9uT_EFD7ow$Z#`j385~1=&K?YY>%s|279gI0 zILu#sW5$Qf&UB~rPQl}NkOlaZR|x`iFSKqEy@8Sedq0YQH=KtqsaNV^>I86#=$%J) zGn^lmj^Epxhi=_wn|+ukKy~n@`xWt&*!NH@3IQIbAUYQeI@C~cKsOXD|)lF`YhEl-`*f{5E1kB;|FGoJi%#>{JZ z0tc6nhs)m|7L)7#g3sdmfe%!(vnf@pDd~cE_Q&}@%6DCk z96^aXV`tReGaM8n4wY3okM_tZNyB{q1aW>cT6@!l?YnYf)eJ=p2fN0;b<(j$fN8$M z0oNoJ7j8hRdXX094+wXdy-9%9)@5H7GMvK~td`F7^w>yu9&%fc6T16s2iFdI8F#Hzl>dADZ%&4F~6thZQyTyVmugq}}MJ?p5|2l%pMWWBeDJnEv0) z+!$=rz=Ia&eQoHE>%XI<*m&#M-qSg_ih91luFq9>B_+@5>aupm^Wcs6ICK`YeTAsOwyD(XUs+2@9O z*NFN1xXQElG=G*C$lG3sb4vco_t(D1_C-F7c<}RuyhQ@2uV3%qkLkmhf&En@jd%#b z`8x+1*4GCy{1Io754LiXPJ;s}>5uhD)T>*^bFF8UQnJqN=+C5oy&W3J&ZX%!a&lrs8CYRnxI~)TjXfpZke~ULp1%*@FF+UDIBR#NSHTeviXsX)7>e~}YlUOccBb18 zMVxQde{;D(fVPu&p3L}~5)%i*d%`%x;nA4OKH2Y5B11bo=F!95=Vh{wD9O8h{87m; z9`>ScY`qb)#CJ0#4KbJAme1zk4}5=kl)643DTERi^izxLWhak&Wp1Oy2IClo`R?LT zePlL^uLb%u6ZN*c&5Cb4hf=Z;~jbM;u&Yq=$_BSpCBJ u>1c=KE(3e^elqp(uAlt1Jak4q`NFAoMB60{2lTTP^P)8L%VkbX=l=wIr)d@d literal 0 HcmV?d00001 diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/cube_mesh.h5 b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/cube_mesh.h5 new file mode 100755 index 0000000000000000000000000000000000000000..5177ac376f1c969e473378728b41c3935b1e7578 GIT binary patch literal 1007858 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�i7#U|_eFf^pSdqJ;I2;gd3@%s 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 CwWWFh literal 0 HcmV?d00001 diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/hopr.ini b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/hopr.ini new file mode 100755 index 000000000..2456df258 --- /dev/null +++ b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/hopr.ini @@ -0,0 +1,42 @@ +ProjectName = cube +Debugvisu = F +DebugVisuLevel=1 +NVisu =1 +Mode =1 + +! Units in [nm] analogous to J. A. H. Dreyer et al., “Simulation of gas diffusion in highly porous nanostructures +! by direct simulation Monte Carlo,” Chem. Eng. Sci., vol. 105, pp. 69–76, 2014. +DEFVAR = (REAL): minus_x = 0.0 +DEFVAR = (REAL): plus_x = 1000.0 + +DEFVAR = (REAL): minus_y = 0.0 +DEFVAR = (REAL): plus_y = 400.0 + +DEFVAR = (REAL): minus_z = 0.0 +DEFVAR = (REAL): plus_z = 400.0 + +Corner =(/minus_x,minus_y,minus_z ,, plus_x,minus_y,minus_z ,, plus_x,plus_y,minus_z ,, minus_x,plus_y,minus_z ,, minus_x,minus_y,plus_z ,, plus_x,minus_y,plus_z ,, plus_x,plus_y,plus_z ,, minus_x,plus_y,plus_z /) +!nElems =(/125,50,50/) +nElems =(/25,10,10/) +elemtype =108 + +BCIndex =(/6 ,4 ,1 ,3 ,2 ,5/) +! =(/z-,y-,x+,y+,x-,z+/) +nZones = 1 +nUserDefinedBoundaries=6 +BoundaryName=BC_Xplus +BoundaryType=(/3,0,0,0/) +BoundaryName=BC_Xminus +BoundaryType=(/3,0,0,0/) +BoundaryName=BC_Yplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Yminus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zminus +BoundaryType=(/4,0,0,0/) + +postscalemesh=true +meshscale=1e-9 +jacobiantolerance=1e-20 diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/parameter.ini b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/parameter.ini new file mode 100755 index 000000000..25838cf8c --- /dev/null +++ b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/parameter.ini @@ -0,0 +1,147 @@ +! =============================================================================== ! +! EQUATION (linearscalaradvection) +! =============================================================================== ! +IniExactFunc = 0 + +! =============================================================================== ! +! DISCRETIZATION +! =============================================================================== ! +N = 1 ! Polynomial degree +NAnalyze = 1 ! Number of analyze points +CFLscale = 0.2 ! Scaling of theoretical CFL number +! =============================================================================== ! +! MESH +! =============================================================================== ! +MeshFile = cube_mesh.h5 +useCurveds = F +TrackingMethod = triatracking +! =============================================================================== ! +! OUTPUT / VISUALIZATION +! =============================================================================== ! +ProjectName = coverage +TimeStampLength = 14 +NVisu = 1 +IterDisplayStep = 10 +Part-AnalyzeStep = 200 +CalcTemp = TRUE +CalcNumDens = TRUE +! =============================================================================== ! +! CALCULATION +! =============================================================================== ! +tend = 10E-9 +Analyze_dt = 2E-9 +ManualTimeStep = 2.0E-11 +DoLoadBalance = T +PartWeightLoadBalance = T +LoadBalanceMaxSteps = 2 +! =============================================================================== ! +! BOUNDARY CONDITIONS +! =============================================================================== ! +Part-maxParticleNumber = 750000 +Part-nBounds=6 +Part-Boundary1-SourceName = BC_Xplus +Part-Boundary1-Condition = reflective +Part-Boundary1-WallTemp = 723 +Part-Boundary1-LatticeVector = 0.389E-9 +Part-Boundary1-SurfaceArea = 7.84E-14 +Part-Boundary1-Species2-MaxCoverage = 0.333 +Part-Boundary1-Species4-Coverage = 0.25 +Part-Boundary1-Species4-MaxCoverage = 0.25 +Part-Boundary2-SourceName = BC_Xminus +Part-Boundary2-Condition = open +Part-Boundary3-SourceName = BC_Yplus +Part-Boundary3-Condition = symmetric +Part-Boundary4-SourceName = BC_Yminus +Part-Boundary4-Condition = symmetric +Part-Boundary5-SourceName = BC_Zplus +Part-Boundary5-Condition = symmetric +Part-Boundary6-SourceName = BC_Zminus +Part-Boundary6-Condition = symmetric +Part-FIBGMdeltas = (/10e-9,10e-9,10e-9/) + +Part-nSpecies = 2 +Part-Species$-MacroParticleFactor = 2.0 +! =============================================================================== ! +! Species1 - CO +! =============================================================================== ! +Part-Species1-MassIC = 4.65100E-26 ! CO Molecular Mass +Part-Species1-ChargeIC = 0 + +Part-Species1-nSurfaceFluxBCs = 1 +Part-Species1-Surfaceflux1-BC = 2 +Part-Species1-Surfaceflux1-velocityDistribution = maxwell_lpn +Part-Species1-Surfaceflux1-MWTemperatureIC = 723 +Part-Species1-Surfaceflux1-TempVib = 723 +Part-Species1-Surfaceflux1-TempRot = 723 +Part-Species1-Surfaceflux1-PartDensity = 2.271E+24 +! =============================================================================== ! +! Species2 - O2 +! =============================================================================== ! +Part-Species2-MassIC = 5.31400E-26 ! O2 Molecular Mass +Part-Species2-ChargeIC = 0 + +Part-Species2-nSurfaceFluxBCs = 1 +Part-Species2-Surfaceflux1-BC = 2 +Part-Species2-Surfaceflux1-velocityDistribution = maxwell_lpn +Part-Species2-Surfaceflux1-MWTemperatureIC = 723 +Part-Species2-Surfaceflux1-TempVib = 723 +Part-Species2-Surfaceflux1-TempRot = 723 +Part-Species2-Surfaceflux1-PartDensity = 2.04E+25 +! =============================================================================== ! +! Surface Chemistry +! =============================================================================== ! +Surface-NumOfReactions = 4 +! Adsorption of CO +Surface-Reaction1-Type = A +Surface-Reaction1-Reactants = (/1,0/) +Surface-Reaction1-NumOfBoundaries = 1 +Surface-Reaction1-Boundaries = 1 +Surface-Reaction1-StickingCoefficient = 1.0 +Surface-Reaction1-EqConstant = 0.6 +Surface-Reaction1-ReactHeat = 135 +Surface-Reaction1-HeatScaling = 61 +! Adsorption of O2 +Surface-Reaction2-Type = A +Surface-Reaction2-Reactants = (/2,0/) +Surface-Reaction2-NumOfBoundaries = 1 +Surface-Reaction2-Boundaries = 1 +Surface-Reaction2-StickingCoefficient = 0.42 +Surface-Reaction2-DissOrder = 2 +Surface-Reaction2-EqConstant = 1.49 +Surface-Reaction2-ReactHeat = 230 +! Desorption of CO +Surface-Reaction3-Type = D +Surface-Reaction3-Products = (/1,0/) +Surface-Reaction3-NumOfBoundaries = 1 +Surface-Reaction3-Boundaries = 1 +Surface-Reaction3-Energy = 147 +Surface-Reaction3-LateralInteraction = -153 +Surface-Reaction3-Ca = 16 +Surface-Reaction3-Cb = -15 +Surface-Reaction3-ReactHeat = 135 +Surface-Reaction3-HeatScaling = 61 +! Desorption of O2 +Surface-Reaction4-Type = D +Surface-Reaction4-Products = (/2,0/) +Surface-Reaction4-NumOfBoundaries = 1 +Surface-Reaction4-Boundaries = 1 +Surface-Reaction4-Energy = 222 +Surface-Reaction4-LateralInteraction = -69.6 +Surface-Reaction4-DissOrder = 2 +Surface-Reaction4-Ca = -1.7 +Surface-Reaction4-Cb = 0 +Surface-Reaction4-ReactHeat = 230 +! =============================================================================== ! +! DSMC +! =============================================================================== ! +UseDSMC = true +Particles-DSMC-CollisMode = 2 !(1:elast coll, 2: elast + rela, 3:chem) +Part-NumberOfRandomSeeds = 2 +Particles-RandomSeed1 = 3 +Particles-RandomSeed2 = 4 +Part-TimeFracForSampling = 0.2 +Particles-DSMC-CalcSurfaceVal = true +Particles-NumberForDSMCOutputs = 1 +Particles-DSMC-CalcQualityFactors = F + +Particles-HaloEpsVelo = 3E4 diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/readme.md b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/readme.md new file mode 100644 index 000000000..b6ffc936a --- /dev/null +++ b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/readme.md @@ -0,0 +1,4 @@ +# DSMC - Channel Flow with Adsorption/Desorption +* CO/O2 channel flow with adsorption/desorption +* Comparison of coverage and heat flux after 10 ns (DSMCSurfChemState) +* Comparison of number density and temperature after 10 ns (PartAnalyze) \ No newline at end of file diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index fac305836..8f3c06e79 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -129,7 +129,7 @@ SUBROUTINE ParticleSurfChemFlux() ! Loop over the reaction types DO iReac = 1, SurfNumOfReac - SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) + SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) ! LH-reaction with immediate desorption CASE('LHD') @@ -311,7 +311,7 @@ SUBROUTINE ParticleSurfChemFlux() END DO !iSpec CASE DEFAULT - END SELECT + END SELECT ! Current boundary condition currentBC = BoundID diff --git a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 index bc21f9f2f..cdf5162ba 100644 --- a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 +++ b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 @@ -374,7 +374,9 @@ SUBROUTINE ExchangeChemSurfData() ! exchange the surface data !> 1) collect the information on the local compute-node !> 2) compute-node leaders with sampling sides in their halo region and the original node communicate the sampling information -!> 3) compute-node leaders ensure synchronization of shared arrays on their node +!> 3) calculation of the coverage (needed without MPI as well) +!> 4) compute-node leaders communicate the calculated coverage to the halo sides +!> 5) compute-node leaders ensure synchronization of shared arrays on their node !!=================================================================================================================================== ! MODULES ! !----------------------------------------------------------------------------------------------------------------------------------! @@ -383,20 +385,14 @@ SUBROUTINE ExchangeChemSurfData() USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED,MPI_COMM_LEADERS_SURF, nComputeNodeProcessors USE MOD_MPI_Shared_Vars ,ONLY: nSurfLeaders,myComputeNodeRank,mySurfRank USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode, PartBound -USE MOD_Particle_Boundary_Vars ,ONLY: SurfSampSize,nSurfSample +USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfTotalSides USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide -USE MOD_Particle_Boundary_Vars ,ONLY: SurfMapping,CalcSurfaceImpact -USE MOD_Particle_Boundary_Vars ,ONLY: SampWallState,SampWallState_Shared,SampWallState_Shared_Win -USE MOD_Particle_Boundary_Vars ,ONLY: SampWallPumpCapacity,SampWallPumpCapacity_Shared,SampWallPumpCapacity_Shared_Win -USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactEnergy,SampWallImpactEnergy_Shared,SampWallImpactEnergy_Shared_Win -USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactVector,SampWallImpactVector_Shared,SampWallImpactVector_Shared_Win -USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactAngle ,SampWallImpactAngle_Shared ,SampWallImpactAngle_Shared_Win -USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactNumber,SampWallImpactNumber_Shared,SampWallImpactNumber_Shared_Win +USE MOD_Particle_Boundary_Vars ,ONLY: SurfMapping USE MOD_Particle_MPI_Vars ,ONLY: SurfSendBuf,SurfRecvBuf USE MOD_Particle_Vars ,ONLY: nSpecies -USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp, ChemSampWall, ChemSampWall_Shared, ChemWallProp_Shared_Win -USE MOD_SurfaceModel_Vars ,ONLY: ChemSampWall_Shared_Win +USE MOD_SurfaceModel_Vars ,ONLY: ChemSampWall, ChemSampWall_Shared, ChemSampWall_Shared_Win +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp, ChemWallProp_Shared, ChemWallProp_Shared_Win USE MOD_Particle_Boundary_vars ,ONLY: SurfSideArea_Shared, SurfSide2GlobalSide USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared ! IMPLICIT VARIABLE HANDLING @@ -410,249 +406,289 @@ SUBROUTINE ExchangeChemSurfData() INTEGER :: iProc,SideID, firstSide, lastSide, GlobalSideID, locBCID, iSide, iSpec INTEGER :: iPos,p,q INTEGER :: MessageSize,iSurfSide,SurfSideID -INTEGER :: nValues +INTEGER :: nValues, SurfChemVarNum, SurfChemSampSize INTEGER :: RecvRequest(0:nSurfLeaders-1),SendRequest(0:nSurfLeaders-1) -!INTEGER :: iPos,p,q,iProc,iReact -!INTEGER :: recv_status_list(1:MPI_STATUS_SIZE,1:SurfCOMM%nMPINeighbors) !=================================================================================================================================== ! nodes without sampling surfaces do not take part in this routine IF (.NOT.SurfOnNode) RETURN +#if USE_MPI +SurfChemVarNum = 2 +SurfChemSampSize = SurfChemVarNum * nSpecies ! collect the information from the proc-local shadow arrays in the compute-node shared array -MessageSize = nSpecies*2*nSurfSample*nSurfSample*nComputeNodeSurfTotalSides +MessageSize = SurfChemSampSize*nSurfSample*nSurfSample*nComputeNodeSurfTotalSides IF (myComputeNodeRank.EQ.0) THEN - CALL MPI_REDUCE(ChemSampWall,ChemSampWall_Shared,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_SHARED,IERROR) + CALL MPI_REDUCE(ChemSampWall,ChemSampWall_Shared ,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_SHARED,IERROR) ELSE CALL MPI_REDUCE(ChemSampWall,0 ,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_SHARED,IERROR) ENDIF +ChemSampWall = 0. +ASSOCIATE(ChemSampWall => ChemSampWall_Shared) CALL BARRIER_AND_SYNC(ChemSampWall_Shared_Win ,MPI_COMM_SHARED) -#if USE_MPI firstSide = INT(REAL( myComputeNodeRank *nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors))+1 lastSide = INT(REAL((myComputeNodeRank+1)*nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors)) + +! surf leader communication of the sampled values in ChemSampWall +IF (myComputeNodeRank.EQ.0) THEN + nValues = SurfChemSampSize*nSurfSample**2 + ! open receive buffer + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE + + ! Only open recv buffer if we are expecting sides from this leader node + IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE + + ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc + MessageSize = SurfMapping(iProc)%nRecvSurfSides * nValues + CALL MPI_IRECV( SurfRecvBuf(iProc)%content & + , MessageSize & + , MPI_DOUBLE_PRECISION & + , iProc & + , 1209 & + , MPI_COMM_LEADERS_SURF & + , RecvRequest(iProc) & + , IERROR) + END DO ! iProc + + ! build message + DO iProc = 0,nSurfLeaders-1 + ! Ignore myself + IF (iProc .EQ. mySurfRank) CYCLE + + ! Only assemble message if we are expecting sides to send to this leader node + IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE + + ! Nullify everything + iPos = 0 + SurfSendBuf(iProc)%content = 0. + + DO iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides + SideID = SurfMapping(iProc)%SendSurfGlobalID(iSurfSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + + ! Assemble message + DO q = 1,nSurfSample + DO p = 1,nSurfSample + DO iSpec =1, nSpecies + SurfSendBuf(iProc)%content(iPos+1:iPos+SurfChemVarNum) = ChemSampWall(iSpec,:,p,q,SurfSideID) + iPos = iPos + SurfChemVarNum + END DO + END DO ! p=0,nSurfSample + END DO ! q=0,nSurfSample + + ChemSampWall(:,:,:,:,SurfSideID)=0. + END DO ! iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides + END DO + + ! send message + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE + + ! Only open recv buffer if we are expecting sides from this leader node + IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE + + ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc + MessageSize = SurfMapping(iProc)%nSendSurfSides * nValues + CALL MPI_ISEND( SurfSendBuf(iProc)%content & + , MessageSize & + , MPI_DOUBLE_PRECISION & + , iProc & + , 1209 & + , MPI_COMM_LEADERS_SURF & + , SendRequest(iProc) & + , IERROR) + END DO ! iProc + + ! Finish received number of sampling surfaces + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE + + IF (SurfMapping(iProc)%nSendSurfSides.NE.0) THEN + CALL MPI_WAIT(SendRequest(iProc),MPIStatus,IERROR) + IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) + END IF + + IF (SurfMapping(iProc)%nRecvSurfSides.NE.0) THEN + CALL MPI_WAIT(RecvRequest(iProc),MPIStatus,IERROR) + IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) + END IF + END DO ! iProc + + ! add data do my list + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE + + ! Only open recv buffer if we are expecting sides from this leader node + IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE + + iPos=0 + DO iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides + SideID = SurfMapping(iProc)%RecvSurfGlobalID(iSurfSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + + DO q=1,nSurfSample + DO p=1,nSurfSample + DO iSpec =1, nSpecies + ChemSampWall(iSpec,:,p,q,SurfSideID) = ChemSampWall(iSpec,:,p,q,SurfSideID) & + + SurfRecvBuf(iProc)%content(iPos+1:iPos+SurfChemVarNum) + iPos = iPos + SurfChemVarNum + END DO + END DO ! p = 0,nSurfSample + END DO ! q = 0,nSurfSample + END DO ! iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides + ! Nullify buffer + SurfRecvBuf(iProc)%content = 0. + END DO ! iProc +END IF #else firstSide = 1 lastSide = nSurfTotalSides #endif /*USE_MPI*/ +! calculate the coverage from the sampled values (also required in the MPI=OFF case) and nullify the ChemSampWall array +! in the case of MPI, ChemSampWall is associated to the _Shared variant DO iSide = firstSide, lastSide GlobalSideID = SurfSide2GlobalSide(SURF_SIDEID,iSide) locBCID = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,GlobalSideID)) DO iSpec =1, nSpecies IF (PartBound%LatticeVec(locBCID).GT.0.) THEN - ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall_Shared(iSpec,1,:,:,iSide) * PartBound%LatticeVec(locBCID)* & + ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall(iSpec,1,:,:,iSide) * PartBound%LatticeVec(locBCID)* & PartBound%LatticeVec(locBCID)/(PartBound%MolPerUnitCell(locBCID)*SurfSideArea_Shared(:,:,iSide)) ELSE - ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall_Shared(iSpec,1,:,:,iSide) / & + ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall(iSpec,1,:,:,iSide) / & (10.**(19)*SurfSideArea_Shared(:,:,iSide)) END IF - ChemWallProp(iSpec,2,:,:,iSide) = ChemWallProp(iSpec,2,:,:,iSide) + ChemSampWall_Shared(iSpec,2,:,:,iSide) + ChemWallProp(iSpec,2,:,:,iSide) = ChemWallProp(iSpec,2,:,:,iSide) + ChemSampWall(iSpec,2,:,:,iSide) END DO - ChemSampWall_Shared(:,:,:,:,iSide) = 0.0 + ChemSampWall(:,:,:,:,iSide) = 0.0 END DO -ChemSampWall = 0.0 + +#if USE_MPI CALL BARRIER_AND_SYNC(ChemSampWall_Shared_Win ,MPI_COMM_SHARED) CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win ,MPI_COMM_SHARED) +! communication of the coverage values to the halo region of compute nodes +! swap the receive/send array, send coverage values to the sides, where you would receive from +IF (myComputeNodeRank.EQ.0) THEN + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE -! prepare buffers for surf leader communication -!IF (myComputeNodeRank.EQ.0) THEN -! nValues = SurfSampSize*nSurfSample**2 -! ! Sampling of impact energy for each species (trans, rot, vib, elec), impact vector (x,y,z), angle and number: Add 9*nSpecies -! ! to the buffer length - -! ! open receive buffer -! DO iProc = 0,nSurfLeaders-1 -! ! ignore myself -! IF (iProc.EQ.mySurfRank) CYCLE - -! ! Only open recv buffer if we are expecting sides from this leader node -! IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE - -! ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc -! MessageSize = SurfMapping(iProc)%nRecvSurfSides * nValues -! CALL MPI_IRECV( SurfRecvBuf(iProc)%content & -! , MessageSize & -! , MPI_DOUBLE_PRECISION & -! , iProc & -! , 1209 & -! , MPI_COMM_LEADERS_SURF & -! , RecvRequest(iProc) & -! , IERROR) -! END DO ! iProc - -! ! build message -! DO iProc = 0,nSurfLeaders-1 -! ! Ignore myself -! IF (iProc .EQ. mySurfRank) CYCLE - -! ! Only assemble message if we are expecting sides to send to this leader node -! IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE - -! ! Nullify everything -! iPos = 0 -! SurfSendBuf(iProc)%content = 0. - -! DO iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides -! SideID = SurfMapping(iProc)%SendSurfGlobalID(iSurfSide) -! SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) - -! ! Assemble message -! DO q = 1,nSurfSample -! DO p = 1,nSurfSample -! SurfSendBuf(iProc)%content(iPos+1:iPos+SurfSampSize) = SampWallState_Shared(:,p,q,SurfSideID) -! iPos = iPos + SurfSampSize -! ! Sampling of impact energy for each species (trans, rot, vib), impact vector (x,y,z), angle and number of impacts -! IF (CalcSurfaceImpact) THEN -! ! Add average impact energy for each species (trans, rot, vib) -! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactEnergy_Shared(:,1,p,q,SurfSideID) -! iPos = iPos + nSpecies -! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactEnergy_Shared(:,2,p,q,SurfSideID) -! iPos=iPos + nSpecies -! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactEnergy_Shared(:,3,p,q,SurfSideID) -! iPos=iPos + nSpecies -! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactEnergy_Shared(:,4,p,q,SurfSideID) -! iPos=iPos + nSpecies - -! ! Add average impact vector (x,y,z) for each species -! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactVector_Shared(:,1,p,q,SurfSideID) -! iPos = iPos + nSpecies -! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactVector_Shared(:,2,p,q,SurfSideID) -! iPos = iPos + nSpecies -! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactVector_Shared(:,3,p,q,SurfSideID) -! iPos = iPos + nSpecies - -! ! Add average impact angle for each species -! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactAngle_Shared(:,p,q,SurfSideID) -! iPos = iPos + nSpecies - -! ! Add number of particle impacts -! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactNumber_Shared(:,p,q,SurfSideID) -! iPos = iPos + nSpecies -! END IF ! CalcSurfaceImpact -! END DO ! p=0,nSurfSample -! END DO ! q=0,nSurfSample -! IF(nPorousBC.GT.0) THEN -! SurfSendBuf(iProc)%content(iPos+1:iPos+1) = SampWallPumpCapacity_Shared(SurfSideID) -! iPos = iPos + 1 -! END IF - -! SampWallState_Shared(:,:,:,SurfSideID)=0. -! ! Sampling of impact energy for each species (trans, rot, vib), impact vector (x,y,z), angle and number of impacts -! IF (CalcSurfaceImpact) THEN -! SampWallImpactEnergy_Shared(:,:,:,:,SurfSideID) = 0. -! SampWallImpactVector_Shared(:,:,:,:,SurfSideID) = 0. -! SampWallImpactAngle_Shared (:,:,:,SurfSideID) = 0. -! SampWallImpactNumber_Shared(:,:,:,SurfSideID) = 0. -! END IF ! CalcSurfaceImpact -! IF(nPorousBC.GT.0) THEN -! SampWallPumpCapacity_Shared(SurfSideID) = 0. -! END IF -! END DO ! iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides -! END DO - -! ! send message -! DO iProc = 0,nSurfLeaders-1 -! ! ignore myself -! IF (iProc.EQ.mySurfRank) CYCLE - -! ! Only open recv buffer if we are expecting sides from this leader node -! IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE - -! ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc -! MessageSize = SurfMapping(iProc)%nSendSurfSides * nValues -! CALL MPI_ISEND( SurfSendBuf(iProc)%content & -! , MessageSize & -! , MPI_DOUBLE_PRECISION & -! , iProc & -! , 1209 & -! , MPI_COMM_LEADERS_SURF & -! , SendRequest(iProc) & -! , IERROR) -! END DO ! iProc - -! ! Finish received number of sampling surfaces -! DO iProc = 0,nSurfLeaders-1 -! ! ignore myself -! IF (iProc.EQ.mySurfRank) CYCLE - -! IF (SurfMapping(iProc)%nSendSurfSides.NE.0) THEN -! CALL MPI_WAIT(SendRequest(iProc),MPIStatus,IERROR) -! IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) -! END IF - -! IF (SurfMapping(iProc)%nRecvSurfSides.NE.0) THEN -! CALL MPI_WAIT(RecvRequest(iProc),MPIStatus,IERROR) -! IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) -! END IF -! END DO ! iProc - -! ! add data do my list -! DO iProc = 0,nSurfLeaders-1 -! ! ignore myself -! IF (iProc.EQ.mySurfRank) CYCLE - -! ! Only open recv buffer if we are expecting sides from this leader node -! IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE - -! iPos=0 -! DO iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides -! SideID = SurfMapping(iProc)%RecvSurfGlobalID(iSurfSide) -! SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) - -! DO q=1,nSurfSample -! DO p=1,nSurfSample -! SampWallState_Shared(:,p,q,SurfSideID) = SampWallState_Shared(:,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+SurfSampSize) -! iPos = iPos + SurfSampSize -! ! Sampling of impact energy for each species (trans, rot, vib), impact vector (x,y,z) and angle -! IF(CalcSurfaceImpact)THEN -! ! Add average impact energy for each species (trans, rot, vib) -! SampWallImpactEnergy_Shared(:,1,p,q,SurfSideID) = SampWallImpactEnergy_Shared(:,1,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) -! iPos = iPos + nSpecies -! SampWallImpactEnergy_Shared(:,2,p,q,SurfSideID) = SampWallImpactEnergy_Shared(:,2,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) -! iPos = iPos + nSpecies -! SampWallImpactEnergy_Shared(:,3,p,q,SurfSideID) = SampWallImpactEnergy_Shared(:,3,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) -! iPos = iPos + nSpecies -! SampWallImpactEnergy_Shared(:,4,p,q,SurfSideID) = SampWallImpactEnergy_Shared(:,4,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) -! iPos = iPos + nSpecies -! ! Add average impact vector (x,y,z) for each species -! SampWallImpactVector_Shared(:,1,p,q,SurfSideID) = SampWallImpactVector_Shared(:,1,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) -! iPos = iPos + nSpecies -! SampWallImpactVector_Shared(:,2,p,q,SurfSideID) = SampWallImpactVector_Shared(:,2,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) -! iPos = iPos + nSpecies -! SampWallImpactVector_Shared(:,3,p,q,SurfSideID) = SampWallImpactVector_Shared(:,3,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) -! iPos = iPos + nSpecies -! ! Add average impact angle for each species -! SampWallImpactAngle_Shared(:,p,q,SurfSideID) = SampWallImpactAngle_Shared(:,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) -! iPos = iPos + nSpecies -! ! Add number of particle impacts -! SampWallImpactNumber_Shared(:,p,q,SurfSideID) = SampWallImpactNumber_Shared(:,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) -! iPos = iPos + nSpecies -! END IF ! CalcSurfaceImpact -! END DO ! p = 0,nSurfSample -! END DO ! q = 0,nSurfSample -! IF(nPorousBC.GT.0) THEN -! SampWallPumpCapacity_Shared(SurfSideID) = SurfRecvBuf(iProc)%content(iPos+1) -! iPos = iPos + 1 -! END IF -! END DO ! iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides -! ! Nullify buffer -! SurfRecvBuf(iProc)%content = 0. -! END DO ! iProc -!END IF + ! Only open recv buffer if we would have sent to this leader node (thus SendSurfSides) + IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE + + ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc + MessageSize = SurfMapping(iProc)%nSendSurfSides * nValues + CALL MPI_IRECV( SurfSendBuf(iProc)%content & + , MessageSize & + , MPI_DOUBLE_PRECISION & + , iProc & + , 1209 & + , MPI_COMM_LEADERS_SURF & + , RecvRequest(iProc) & + , IERROR) + END DO ! iProc + + ! build message + DO iProc = 0,nSurfLeaders-1 + ! Ignore myself + IF (iProc .EQ. mySurfRank) CYCLE + + ! Only assemble message if we would have received from this leader node + IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE + + ! Nullify everything + iPos = 0 + SurfRecvBuf(iProc)%content = 0. + + DO iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides + ! Get the right side id through the receive global id mapping + SideID = SurfMapping(iProc)%RecvSurfGlobalID(iSurfSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + ! Assemble message + DO q = 1,nSurfSample + DO p = 1,nSurfSample + DO iSpec =1, nSpecies + SurfRecvBuf(iProc)%content(iPos+1:iPos+SurfChemVarNum) = ChemWallProp_Shared(iSpec,:,p,q,SurfSideID) + iPos = iPos + SurfChemVarNum + END DO + END DO ! p=0,nSurfSample + END DO ! q=0,nSurfSample + END DO ! iSurfSide=1,SurfMapping(iProc)%nRecvSurfSides + END DO + + ! send message + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE + + ! Only open recv buffer if we are expecting sides from this leader node + IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE + + ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc + MessageSize = SurfMapping(iProc)%nRecvSurfSides * nValues + CALL MPI_ISEND( SurfRecvBuf(iProc)%content & + , MessageSize & + , MPI_DOUBLE_PRECISION & + , iProc & + , 1209 & + , MPI_COMM_LEADERS_SURF & + , SendRequest(iProc) & + , IERROR) + END DO ! iProc + + ! Finish received number of sampling surfaces + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE + + IF (SurfMapping(iProc)%nRecvSurfSides.NE.0) THEN + CALL MPI_WAIT(SendRequest(iProc),MPIStatus,IERROR) + IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) + END IF + + IF (SurfMapping(iProc)%nSendSurfSides.NE.0) THEN + CALL MPI_WAIT(RecvRequest(iProc),MPIStatus,IERROR) + IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) + END IF + END DO ! iProc + + ! add data do my list + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE + + ! Only open recv buffer if we would have sent this leader node + IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE + + iPos=0 + DO iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides + SideID = SurfMapping(iProc)%SendSurfGlobalID(iSurfSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + ! Store values in the halo regions + DO q = 1,nSurfSample + DO p = 1,nSurfSample + DO iSpec =1, nSpecies + ChemWallProp_Shared(iSpec,:,p,q,SurfSideID) = SurfSendBuf(iProc)%content(iPos+1:iPos+SurfChemVarNum) + iPos = iPos + SurfChemVarNum + END DO + END DO ! p=0,nSurfSample + END DO ! q=0,nSurfSample + END DO ! iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides + ! Nullify buffer + SurfSendBuf(iProc)%content = 0. + END DO ! iProc +END IF ! ensure synchronization on compute node -!CALL BARRIER_AND_SYNC(SampWallState_Shared_Win ,MPI_COMM_SHARED) +END ASSOCIATE +CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win ,MPI_COMM_SHARED) +#endif /*USE_MPI*/ END SUBROUTINE ExchangeChemSurfData From d344780d3709cf2f9c27e7c7b2de841ef45c9b99 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 19 Sep 2022 17:47:45 +0200 Subject: [PATCH 016/222] Unified Species Database: new database combining cross-section data, electronic states and species parameters currently read-in through ini files. Added species parameters as attributes to the electronic state dataset, ChargeIC and MassIC are read-in as a test from new database in CHEM_RATES_XSec_Chem_H2_Plasma. A script to create the new database using old DSMC.ini files, cross-section and electronic state database can be found in the tools/species_database folder. --- .../Species_Database.h5 | Bin 0 -> 53408 bytes .../parameter.ini | 1 + src/io_hdf5/hdf5_input.f90 | 15 +- src/particles/dsmc/dsmc_init.f90 | 4 - .../emission/particle_emission_init.f90 | 2 - src/particles/particle_init.f90 | 82 +++++++++++ src/particles/particle_vars.f90 | 1 + tools/species_database/DSMC.ini | 137 ++++++++++++++++++ .../Electronic-State-Database.h5 | Bin 0 -> 8624 bytes tools/species_database/Species_Database.h5 | Bin 0 -> 53408 bytes .../XSec_Database_H2_Plasma.h5 | Bin 0 -> 52056 bytes .../create_species_database.py | 82 +++++++++++ 12 files changed, 310 insertions(+), 14 deletions(-) create mode 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/Species_Database.h5 create mode 100755 tools/species_database/DSMC.ini create mode 100755 tools/species_database/Electronic-State-Database.h5 create mode 100644 tools/species_database/Species_Database.h5 create mode 100755 tools/species_database/XSec_Database_H2_Plasma.h5 create mode 100644 tools/species_database/create_species_database.py diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/Species_Database.h5 b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/Species_Database.h5 new file mode 100644 index 0000000000000000000000000000000000000000..e0b2353eeaa49ca3bb8549cd6b6d3f13104cdfff GIT binary patch literal 53408 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 F`G10aWpe-k literal 0 HcmV?d00001 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/parameter.ini index 10635d038..a45861b64 100755 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/parameter.ini +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/parameter.ini @@ -73,6 +73,7 @@ Part-FIBGMdeltas = (/0.01,0.01,0.01/) ! SPECIES ! =============================================================================== ! Part-nSpecies=6 +Particles-Species-Database = Species_Database.h5 ! =============================================================================== ! ! Weighting Factor ! =============================================================================== ! diff --git a/src/io_hdf5/hdf5_input.f90 b/src/io_hdf5/hdf5_input.f90 index 37e372d4b..8396ec817 100644 --- a/src/io_hdf5/hdf5_input.f90 +++ b/src/io_hdf5/hdf5_input.f90 @@ -582,7 +582,7 @@ END SUBROUTINE ReadArray !================================================================================================================================== !> Subroutine to read attributes from HDF5 file. !================================================================================================================================== -SUBROUTINE ReadAttribute(Loc_ID_in,AttribName,nVal,DatasetName,RealScalar,IntScalar,& +SUBROUTINE ReadAttribute(File_ID_in,AttribName,nVal,DatasetName,RealScalar,IntScalar,& StrScalar,LogicalScalar,RealArray,IntArray,StrArray) ! MODULES USE MOD_Globals @@ -590,7 +590,7 @@ SUBROUTINE ReadAttribute(Loc_ID_in,AttribName,nVal,DatasetName,RealScalar,IntSca IMPLICIT NONE !---------------------------------------------------------------------------------------------------------------------------------- ! INPUT/OUTPUT VARIABLES -INTEGER(HID_T) ,INTENT(IN) :: Loc_ID_in !< HDF5 file id of opened file +INTEGER(HID_T) ,INTENT(IN) :: File_ID_in !< HDF5 file id of opened file INTEGER ,INTENT(IN) :: nVal !< number of attributes in case an array is expected CHARACTER(LEN=*) ,INTENT(IN) :: AttribName !< name of attribute to be read CHARACTER(LEN=*) ,INTENT(IN) ,OPTIONAL :: DatasetName !< dataset name in case attribute is located in a dataset @@ -612,10 +612,11 @@ SUBROUTINE ReadAttribute(Loc_ID_in,AttribName,nVal,DatasetName,RealScalar,IntSca LOGWRITE(*,*)' READ ATTRIBUTE "',TRIM(AttribName),'" FROM HDF5 FILE...' Dimsf(1)=nVal -Loc_ID=Loc_ID_in IF(PRESENT(DatasetName))THEN ! Open dataset - IF(TRIM(DataSetName).NE.'') CALL H5DOPEN_F(File_ID, TRIM(DatasetName),Loc_ID, iError) + IF(TRIM(DataSetName).NE.'') CALL H5DOPEN_F(File_ID_in, TRIM(DatasetName),Loc_ID, iError) +ELSE + Loc_ID = File_ID_in END IF ! Create the attribute for group Loc_ID. @@ -660,10 +661,8 @@ SUBROUTINE ReadAttribute(Loc_ID_in,AttribName,nVal,DatasetName,RealScalar,IntSca ! Close the attribute. CALL H5ACLOSE_F(Attr_ID, iError) -IF(Loc_ID.NE.Loc_ID_in)THEN - ! Close the dataset and property list. - CALL H5DCLOSE_F(Loc_ID, iError) -END IF +! Close the dataset and property list. +CALL H5DCLOSE_F(Loc_ID, iError) LOGWRITE(*,*)'...DONE!' END SUBROUTINE ReadAttribute diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index 67bfcfb7b..f041dbd22 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -180,8 +180,6 @@ SUBROUTINE DefineParametersDSMC() CALL prms%SetSection("DSMC Species") -CALL prms%CreateStringOption( 'Part-Species[$]-SpeciesName' & - ,'Species name of Species[$]', 'none', numberedmulti=.TRUE.) CALL prms%CreateIntOption( 'Part-Species[$]-InteractionID' , 'ID for identification of particles \n'//& ' 1: Atom\n'//& ' 2: Molecule\n'//& @@ -414,10 +412,8 @@ SUBROUTINE InitDSMC() ! Flags for collision parameters CollInf%averagedCollisionParameters = GETLOGICAL('Particles-DSMC-averagedCollisionParameters') CollInf%crossSectionConstantMode = GETINT('Particles-DSMC-crossSectionConstantMode','0') - ALLOCATE(SpecDSMC(nSpecies)) DO iSpec = 1, nSpecies WRITE(UNIT=hilf,FMT='(I0)') iSpec - SpecDSMC(iSpec)%Name = TRIM(GETSTR('Part-Species'//TRIM(hilf)//'-SpeciesName','none')) SpecDSMC(iSpec)%InterID = GETINT('Part-Species'//TRIM(hilf)//'-InteractionID','0') ! averagedCollisionParameters set true: species-specific collision parameters get read in IF(CollInf%averagedCollisionParameters) THEN diff --git a/src/particles/emission/particle_emission_init.f90 b/src/particles/emission/particle_emission_init.f90 index 155fea2c9..098bbb1ab 100644 --- a/src/particles/emission/particle_emission_init.f90 +++ b/src/particles/emission/particle_emission_init.f90 @@ -231,8 +231,6 @@ SUBROUTINE InitializeVariablesSpeciesInits() #if USE_MPI END IF #endif /*USE_MPI*/ - Species(iSpec)%ChargeIC = GETREAL('Part-Species'//TRIM(hilf)//'-ChargeIC') - Species(iSpec)%MassIC = GETREAL('Part-Species'//TRIM(hilf)//'-MassIC') Species(iSpec)%MacroParticleFactor = GETREAL('Part-Species'//TRIM(hilf)//'-MacroParticleFactor') #if defined(IMPA) Species(iSpec)%IsImplicit = GETLOGICAL('Part-Species'//TRIM(hilf)//'-IsImplicit') diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index d3d0f0a24..d95fdea42 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -80,6 +80,8 @@ SUBROUTINE DefineParametersParticles() CALL prms%CreateRealOption( 'Particles-ManualTimeStep' , 'Manual timestep [sec]. This variable is deprecated. '//& 'Use ManualTimestep instead.', '-1.0') CALL prms%CreateIntOption( 'Part-nSpecies' , 'Number of species used in calculation', '1') +CALL prms%CreateStringOption( 'Part-Species[$]-SpeciesName' ,'Species name of Species[$]', 'none', numberedmulti=.TRUE.) +CALL prms%CreateStringOption( 'Particles-Species-Database', 'File name for the species database', 'none') ! Ionization CALL prms%CreateLogicalOption( 'Part-DoInitialIonization' , 'When restarting from a state, ionize the species to a '//& 'specific degree', '.FALSE.') @@ -443,6 +445,7 @@ SUBROUTINE InitializeVariables() IF(nSpecies.LE.0) CALL abort(__STAMP__,'ERROR: nSpecies .LE. 0:', nSpecies) ALLOCATE(Species(1:nSpecies)) +CALL InitializeSpeciesParameter() CALL InitializeVariablesSpeciesInits() ! Which Lorentz boost method should be used? CALL InitPartRHS() @@ -1490,4 +1493,83 @@ SUBROUTINE InitRandomSeed(nRandomSeeds,SeedSize,Seeds) END SUBROUTINE InitRandomSeed +SUBROUTINE InitializeSpeciesParameter() +!=================================================================================================================================== +! Initialize the species parameter +!=================================================================================================================================== +! MODULES +USE MOD_Globals +USE MOD_Globals_Vars +USE MOD_ReadInTools +USE MOD_Particle_Vars +USE MOD_io_hdf5 +USE MOD_HDF5_input, ONLY:ReadAttribute +USE MOD_DSMC_Vars ,ONLY: SpecDSMC +#if USE_MPI +USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance +#endif /*USE_MPI*/ +! IMPLICIT VARIABLE HANDLING + IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: iSpec,err +CHARACTER(32) :: hilf, hilf2 +CHARACTER(LEN=64) :: dsetname +INTEGER(HID_T) :: file_id_specdb ! File identifier +INTEGER(HID_T) :: dset_id_specdb ! Dataset identifier +!=================================================================================================================================== + +! Read-in of the species database +SpeciesDatabase = GETSTR('Particles-Species-Database') + +ALLOCATE(SpecDSMC(nSpecies)) + +DO iSpec = 1, nSpecies + WRITE(UNIT=hilf,FMT='(I0)') iSpec + SpecDSMC(iSpec)%Name = TRIM(GETSTR('Part-Species'//TRIM(hilf)//'-SpeciesName','none')) +END DO ! iSpec + +IF(SpeciesDatabase.EQ.'none') THEN + DO iSpec = 1, nSpecies + LBWRITE (UNIT_stdOut,'(66(". "))') + WRITE(UNIT=hilf,FMT='(I0)') iSpec + Species(iSpec)%ChargeIC = GETREAL('Part-Species'//TRIM(hilf)//'-ChargeIC') + Species(iSpec)%MassIC = GETREAL('Part-Species'//TRIM(hilf)//'-MassIC') + END DO ! iSpec +ELSE + ! Initialize FORTRAN interface. + CALL H5OPEN_F(err) + + ! Check if file exists + IF(.NOT.FILEEXISTS(SpeciesDatabase)) THEN + CALL abort(__STAMP__,'ERROR: Database ['//TRIM(SpeciesDatabase)//'] does not exist.') + END IF + + CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) + + DO iSpec = 1, nSpecies + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + CALL ReadAttribute(file_id_specdb,'ChargeIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%ChargeIC) + LBWRITE (UNIT_stdOut,*) 'ChargeIC: ', Species(iSpec)%ChargeIC + CALL ReadAttribute(file_id_specdb,'MassIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%MassIC) + LBWRITE (UNIT_stdOut,*) 'MassIC: ', Species(iSpec)%MassIC + END DO + ! Close the file. + CALL H5FCLOSE_F(file_id_specdb, err) + ! Close FORTRAN interface. + CALL H5CLOSE_F(err) +END IF + +IF(nSpecies.GT.0)THEN + LBWRITE (UNIT_stdOut,'(66(". "))') +END IF ! nSpecies.GT.0 + +END SUBROUTINE InitializeSpeciesParameter + + END MODULE MOD_ParticleInit diff --git a/src/particles/particle_vars.f90 b/src/particles/particle_vars.f90 index 8925199f4..85a879686 100644 --- a/src/particles/particle_vars.f90 +++ b/src/particles/particle_vars.f90 @@ -141,6 +141,7 @@ MODULE MOD_Particle_Vars END TYPE INTEGER :: nSpecies ! number of species +CHARACTER(LEN=256) :: SpeciesDatabase ! Name of the species database TYPE(tSpecies), ALLOCATABLE :: Species(:) ! => NULL() ! Species Data Vector LOGICAL :: PartMeshHasPeriodicBCs diff --git a/tools/species_database/DSMC.ini b/tools/species_database/DSMC.ini new file mode 100755 index 000000000..cad85334f --- /dev/null +++ b/tools/species_database/DSMC.ini @@ -0,0 +1,137 @@ + +! =============================================================================== ! +! Species1, H2 +! =============================================================================== ! +Part-Species1-SpeciesName = H2 +Part-Species1-MassIC = 3.34800E-27 +Part-Species1-ChargeIC = 0.0 +Part-Species1-InteractionID = 2 +Part-Species1-Tref = 1000 +Part-Species1-dref = 2.68E-10 +Part-Species1-omega = 0.407 +Part-Species1-HeatOfFormation_K = 0.0 +Part-Species1-CharaTempVib = 6332.37 +Part-Species1-Ediss_eV = 4.47 +! =============================================================================== ! +! Species2, H +! =============================================================================== ! +Part-Species2-SpeciesName = H +Part-Species2-MassIC = 1.67400E-27 +Part-Species2-ChargeIC = 0.0 +Part-Species2-InteractionID = 1 +Part-Species2-Tref = 1000 +Part-Species2-dref = 2.581E-10 +Part-Species2-omega = 0.407 +Part-Species2-HeatOfFormation_K = 26159.76 +! =============================================================================== ! +! Species3, e +! =============================================================================== ! +Part-Species3-SpeciesName = electron +Part-Species3-MassIC = 9.11E-31 +Part-Species3-ChargeIC = -1.60217653E-19 +Part-Species3-InteractionID = 4 +Part-Species3-Tref = 1000 +Part-Species3-dref = 2.817920E-15 +Part-Species3-omega = 0.407 +! =============================================================================== ! +! Species4, H2Ion +! =============================================================================== ! +Part-Species4-SpeciesName = H2Ion1 +Part-Species4-MassIC = 3.3470890E-27 +Part-Species4-ChargeIC = 1.60217653E-19 +Part-Species4-InteractionID = 20 +Part-Species4-Tref = 1000 +Part-Species4-dref = 3.883E-10 +Part-Species4-omega = 0.407 +Part-Species4-CharaTempVib = 3341.01 +Part-Species4-Ediss_eV = 2.65 +! =============================================================================== ! +! Species5, HIon +! =============================================================================== ! +Part-Species5-SpeciesName = HIon1 +Part-Species5-MassIC = 1.6730890E-27 +Part-Species5-ChargeIC = 1.60217653E-19 +Part-Species5-InteractionID = 10 +Part-Species5-Tref = 1000 +Part-Species5-dref = 3.912E-10 +Part-Species5-omega = 0.407 +! =============================================================================== ! +! Species6, H3Ion +! =============================================================================== ! +Part-Species6-SpeciesName = H3Ion1 +Part-Species6-MassIC = 5.0210890E-27 +Part-Species6-ChargeIC = 1.60217653E-19 +Part-Species6-InteractionID = 20 +Part-Species6-PolyatomicMol = T +Part-Species6-NumOfAtoms = 3 +Part-Species6-LinearMolec = F +Part-Species6-Tref = 1000 +Part-Species6-dref = 4.5E-10 ! Guess +Part-Species6-omega = 0.407 +Part-Species6-CharaTempVib1 = 4572.92 +Part-Species6-CharaTempVib2 = 3627.94 +Part-Species6-CharaTempVib3 = 3627.94 +Part-Species6-Ediss_eV = 4.51 +Part-Species6-HeatOfFormation_K = 132803.52 +! =============================================================================== ! +! Reactions +! =============================================================================== ! +DSMC-NumOfReactions=11 +! ---------------------------------------------------- +! Electron impact +! ---------------------------------------------------- +! Dissociation: H2 + e --> H + H + e +DSMC-Reaction4-ReactionModel = XSec +DSMC-Reaction4-Reactants = (/1,3,0/) +DSMC-Reaction4-Products = (/2,3,2,0/) +! ---------------------------------------------------- +! Ionization: H2 + e --> H2Ion1 + electron + electron +DSMC-Reaction5-ReactionModel = XSec +DSMC-Reaction5-Reactants = (/1,3,0/) +DSMC-Reaction5-Products = (/4,3,3,0/) +! ---------------------------------------------------- +! Dissociative ionization: H2 + e --> H + HIon + electron + electron +DSMC-Reaction6-ReactionModel = XSec +DSMC-Reaction6-Reactants = (/1,3,0/) +DSMC-Reaction6-Products = (/2,3,3,5/) +! ---------------------------------------------------- +! H2Ion1 impact +! ---------------------------------------------------- +! H3Ion formation: H2 + H2Ion1 --> H + H3Ion +DSMC-Reaction7-ReactionModel = XSec +DSMC-Reaction7-Reactants = (/1,4,0/) +DSMC-Reaction7-Products = (/2,6,0,0/) +! Charge exchange: H2 + H2Ion1 --> H2Ion1 + H2 +DSMC-Reaction8-ReactionModel = XSec +DSMC-Reaction8-Reactants = (/1,4,0/) +DSMC-Reaction8-Products = (/4,1,0,0/) +! Dissociative charge exchange: H2 + H2Ion1 --> H + H2 + HIon1 +DSMC-Reaction9-ReactionModel = XSec +DSMC-Reaction9-Reactants = (/1,4,0/) +DSMC-Reaction9-Products = (/2,1,5,0/) +! ---------------------------------------------------- +! HIon1 impact +! ---------------------------------------------------- +! Charge exchange: H2 + HIon1 --> H2Ion1 + H +DSMC-Reaction10-ReactionModel = XSec +DSMC-Reaction10-Reactants = (/1,5,0/) +DSMC-Reaction10-Products = (/4,2,0,0/) +! ---------------------------------------------------- +! H3Ion1 impact +! ---------------------------------------------------- +! Ionization: H2 + H3Ion1 --> H2Ion1 + H3Ion1 + electron +DSMC-Reaction11-ReactionModel = XSec +DSMC-Reaction11-Reactants = (/1,6,0/) +DSMC-Reaction11-Products = (/4,6,3,0/) +! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H + H2Ion1 +DSMC-Reaction1-ReactionModel = XSec +DSMC-Reaction1-Reactants = (/1,6,0/) +DSMC-Reaction1-Products = (/1,2,4,0/) +! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H + H + HIon1 +DSMC-Reaction2-ReactionModel = XSec +DSMC-Reaction2-Reactants = (/1,6,0/) +DSMC-Reaction2-Products = (/1,2,2,5/) +! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H2 + HIon1 +DSMC-Reaction3-ReactionModel = XSec +DSMC-Reaction3-Reactants = (/1,6,0/) +DSMC-Reaction3-Products = (/1,1,5,0/) \ No newline at end of file diff --git a/tools/species_database/Electronic-State-Database.h5 b/tools/species_database/Electronic-State-Database.h5 new file mode 100755 index 0000000000000000000000000000000000000000..dbf34fd367eecb7035d7028b06eb8d4a8905d717 GIT binary patch literal 8624 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 F`G10aWpe-k literal 0 HcmV?d00001 diff --git a/tools/species_database/XSec_Database_H2_Plasma.h5 b/tools/species_database/XSec_Database_H2_Plasma.h5 new file mode 100755 index 0000000000000000000000000000000000000000..903c23a896d281cd3b3c38d38f0d9a021e4f6567 GIT binary patch literal 52056 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 literal 0 HcmV?d00001 diff --git a/tools/species_database/create_species_database.py b/tools/species_database/create_species_database.py new file mode 100644 index 000000000..932fa4397 --- /dev/null +++ b/tools/species_database/create_species_database.py @@ -0,0 +1,82 @@ +import numpy as np +import h5py +from argparse import ArgumentParser + +database_output = "Species_Database.h5" +database_electronic = "Electronic-State-Database.h5" +database_crosssection = "XSec_Database_H2_Plasma.h5" + +hdf = h5py.File(database_output, 'a') +h5_electronic = h5py.File(database_electronic, 'r') +h5_crosssection = h5py.File(database_crosssection, 'r') + +parser = ArgumentParser(prog='create_species_database') +parser.add_argument("-f", "--file", dest="ini_filename", + help="DSMC.ini file to read-in parameters", metavar="FILE") + +args = parser.parse_args() + +def is_float(value): + try: + float(value) + return True + except: + return False + +# Create general structure +hdf_species_group = 'Species' +if hdf_species_group in hdf.keys(): + print('Group Species already exists.') + hdf_species_group = hdf['Species'] +else: + print('Group Species does not exist, creating new group.') + hdf_species_group = hdf.create_group('Species') + +hdf_xsec_group = 'Cross-Sections' +if hdf_xsec_group in hdf.keys(): + print('Group Cross-Sections already exists.') + hdf_xsec_group = hdf['Cross-Sections'] +else: + print('Group Cross-Sections does not exist, creating new group.') + hdf_xsec_group = hdf.create_group('Cross-Sections') + +# Read-in of DSMC.ini parameters and electronic state +with open(args.ini_filename) as file: + for line in file: + if not line.startswith('!'): + if line.startswith('Part-'): + var_name = line.strip().replace(" ","").replace("Part-Species","").split('=')[0].split('-') + var_value = line.strip().replace(" ","").replace("Part-Species","").split('=')[1].split('!', 1)[0] + if var_name[1].startswith('SpeciesName'): + hdf_species = var_value + if hdf_species in hdf_species_group.keys(): + print('Species already exists: ', hdf_species) + species_count = var_name[0] + hdf_species = hdf_species_group[hdf_species] + elif hdf_species == 'electron': + print('Species added to the database: ', hdf_species) + hdf_species = hdf_species_group.create_dataset(hdf_species,data=[0]) + else: + hdf_input_data = h5_electronic[hdf_species] + print('Species added to the database: ', hdf_species) + hdf_species = hdf_species_group.create_dataset(hdf_species,data=hdf_input_data) + else: + if var_name[1] in hdf_species.attrs: + print('Species parameter is already set: ', var_name[1]) + else: + if is_float(var_value): + var_value = float(var_value) + hdf_species.attrs[var_name[1]] = var_value + print('Species parameter set: ', var_name[1]) + +# Copy cross-section data +for dataset in h5_crosssection.keys(): + if dataset in hdf_xsec_group.keys(): + print('Cross-section is already set: ', dataset) + else: + print('Cross-section added: ', dataset) + hdf_xsec_group.copy(source=h5_crosssection[dataset],dest=hdf_xsec_group) + +hdf.close() +h5_electronic.close() +h5_crosssection.close() \ No newline at end of file From 7b7f9515b8353ee222a46d31856838eb90aa1675 Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Tue, 20 Sep 2022 16:52:54 +0200 Subject: [PATCH 017/222] new initialisation surface chem flux --- .../boundary/particle_boundary_condition.f90 | 4 +- .../boundary/particle_boundary_sampling.f90 | 68 +- src/particles/dsmc/dsmc_bg_gas.f90 | 24 +- src/particles/dsmc/dsmc_init.f90 | 13 +- src/particles/dsmc/dsmc_polyatomic_model.f90 | 152 ++-- src/particles/dsmc/dsmc_relaxation.f90 | 41 +- src/particles/emission/particle_emission.f90 | 9 +- .../emission/particle_emission_tools.f90 | 110 +-- .../emission/particle_surface_chemflux.f90 | 745 +++++++++++------- .../emission/particle_surface_flux.f90 | 9 +- .../emission/particle_surface_flux_init.f90 | 329 ++++---- .../particle_mpi_boundary_sampling.f90 | 474 +++++------ .../surfacemodel/surfacemodel_chemistry.f90 | 41 +- .../surfacemodel/surfacemodel_init.f90 | 4 +- .../surfacemodel/surfacemodel_main.f90 | 196 +++-- .../surfacemodel/surfacemodel_vars.f90 | 27 +- src/timedisc/timedisc_TimeStep_DSMC.f90 | 1 + 17 files changed, 1249 insertions(+), 998 deletions(-) diff --git a/src/particles/boundary/particle_boundary_condition.f90 b/src/particles/boundary/particle_boundary_condition.f90 index a2cd8aaa9..8b40b3f63 100644 --- a/src/particles/boundary/particle_boundary_condition.f90 +++ b/src/particles/boundary/particle_boundary_condition.f90 @@ -52,7 +52,7 @@ SUBROUTINE GetBoundaryInteraction(iPart,SideID,flip,ElemID,crossedBC,TriNum) USE MOD_Particle_Mesh_Vars USE MOD_Particle_Boundary_Vars ,ONLY: PartBound,DoBoundaryParticleOutputHDF5 USE MOD_Particle_Surfaces_vars ,ONLY: SideNormVec,SideType -USE MOD_SurfaceModel ,ONLY: SurfaceModel,PerfectReflection +USE MOD_SurfaceModel ,ONLY: SurfaceModelling,PerfectReflection USE MOD_Particle_Vars ,ONLY: LastPartPos USE MOD_Particle_Boundary_Tools ,ONLY: StoreBoundaryParticleProperties #ifdef CODE_ANALYZE @@ -146,7 +146,7 @@ SUBROUTINE GetBoundaryInteraction(iPart,SideID,flip,ElemID,crossedBC,TriNum) CASE(2) !PartBound%ReflectiveBC) !----------------------------------------------------------------------------------------------------------------------------------- ! Decide which interaction (specular/diffuse reflection, species swap, SEE) - CALL SurfaceModel(iPart,SideID,ElemID,n_loc) + CALL SurfaceModelling(iPart,SideID,ElemID,n_loc) !----------------------------------------------------------------------------------------------------------------------------------- CASE(3) !PartBound%PeriodicBC) !----------------------------------------------------------------------------------------------------------------------------------- diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index 09839109a..c9d2c04d3 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -680,18 +680,19 @@ SUBROUTINE WriteSurfSampleToHDF5(MeshFileName,OutputTime) !----------------------------------------------------------------------------------------------------------------------------------! USE MOD_Globals USE MOD_Globals_Vars ,ONLY: ProjectName -USE MOD_DSMC_Vars ,ONLY: MacroSurfaceVal,MacroSurfaceSpecVal, CollisMode +USE MOD_DSMC_Vars ,ONLY: MacroSurfaceVal,MacroSurfaceSpecVal, CollisMode, DSMC USE MOD_HDF5_Output ,ONLY: WriteAttributeToHDF5,WriteArrayToHDF5,WriteHDF5Header USE MOD_IO_HDF5 USE MOD_MPI_Shared_Vars ,ONLY: mySurfRank USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample,CalcSurfaceImpact -USE MOD_Particle_Boundary_Vars ,ONLY: nOutputSides -USE MOD_Particle_boundary_Vars ,ONLY: nComputeNodeSurfOutputSides,offsetComputeNodeSurfOutputSide +USE MOD_SurfaceModel_Vars ,ONLY: SurfChemReac, ChemWallProp_Shared_Win, ChemWallProp +USE MOD_Particle_Boundary_Vars ,ONLY: nOutputSides, nComputeNodeSurfSides +USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfOutputSides,offsetComputeNodeSurfOutputSide USE MOD_Particle_Boundary_Vars ,ONLY: nSurfBC,SurfBCName, PartBound USE MOD_Particle_Vars ,ONLY: nSpecies #if USE_MPI -USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides +USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides, SurfSideArea_Shared, SurfSideArea USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SURF #endif !----------------------------------------------------------------------------------------------------------------------------------! @@ -709,8 +710,9 @@ SUBROUTINE WriteSurfSampleToHDF5(MeshFileName,OutputTime) CHARACTER(LEN=255) :: NodeTypeTemp CHARACTER(LEN=255) :: SpecID, PBCID CHARACTER(LEN=255),ALLOCATABLE :: Str2DVarNames(:) -INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, iSpec, iPBC -REAL :: tstart,tend +INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, iSpec, iPBC, iSurfSide +INTEGER :: p, q, OutputCounter +REAL :: tstart, tend, tout !=================================================================================================================================== #if USE_MPI @@ -796,6 +798,20 @@ SUBROUTINE WriteSurfSampleToHDF5(MeshFileName,OutputTime) CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Total_HeatFlux') CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Total_SimPartPerIter') + ! Add the heat flux due to catalytic reactions on the surface + IF(SurfChemReac%NumOfReact.GT.0) THEN + OutputCounter = 0 + DO iSurfSide = 1,nComputeNodeSurfSides + OutputCounter = OutputCounter + 1 + DO q = 1,nSurfSample + DO p = 1,nSurfSample + tout = OutputTime + MacroSurfaceVal(4,p,q,OutputCounter) = MacroSurfaceVal(4,p,q,OutputCounter) + SUM(ChemWallProp(:,2,p, q, iSurfSide))/ (SurfSideArea(p,q,iSurfSide)*tout) + END DO ! q=1,nSurfSample + END DO ! p=1,nSurfSample + END DO ! iSurfSide=1,nComputeNodeSurfSides + END IF + IF(nPorousBC.GT.0) THEN DO iPBC = 1, nPorousBC WRITE(PBCID,'(I2.2)') iPBC @@ -869,7 +885,7 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) USE MOD_HDF5_Output ,ONLY: WriteAttributeToHDF5,WriteArrayToHDF5,WriteHDF5Header USE MOD_IO_HDF5 USE MOD_MPI_Shared_Vars ,ONLY: mySurfRank -USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win, ChemWallProp +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win, ChemWallProp, SurfChemReac, ChemCountReacWall USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample,CalcSurfaceImpact USE MOD_Particle_Boundary_Vars ,ONLY: nOutputSides, nComputeNodeSurfSides USE MOD_Particle_boundary_Vars ,ONLY: nComputeNodeSurfOutputSides,offsetComputeNodeSurfOutputSide @@ -893,14 +909,17 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) CHARACTER(LEN=255) :: FileName,FileString,Statedummy CHARACTER(LEN=255) :: H5_Name CHARACTER(LEN=255) :: NodeTypeTemp -CHARACTER(LEN=255) :: SpecID, PBCID +CHARACTER(LEN=255) :: SpecID, PBCID, ReacID CHARACTER(LEN=255),ALLOCATABLE :: Str2DVarNames(:) -INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, iSpec, iPBC, iSurfSide, nVar2D_Heat +INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, nVar2D_Heat, nVar2D_Count +INTEGER :: iSpec, iPBC, iSurfSide, nReac, iReac INTEGER :: p,q,OutputCounter REAL :: tstart,tend, tout REAL, ALLOCATABLE :: MacroSurfaceSpecChemVal(:,:,:,:,:) REAL, ALLOCATABLE :: MacroSurfaceHeatVal(:,:,:,:) +REAL, ALLOCATABLE :: MacroSurfaceReacCount(:,:,:,:,:) !=================================================================================================================================== +nReac = SurfChemReac%NumOfReact #if USE_MPI ! Return if not a sampling leader @@ -923,9 +942,9 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) nVar2D = 0 nVar2D_Spec = 1 nVar2D_Heat = 1 +nVar2D_Count = 1 - -nVar2D_Total = nVar2D + nVar2D_Spec*nSpecies + nVar2D_Heat +nVar2D_Total = nVar2D + nVar2D_Spec*nSpecies + nVar2D_Heat + nVar2D_Count*nReac ! Generate skeleton for the file with all relevant data on a single proc (MPIRoot) #if USE_MPI @@ -959,6 +978,11 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Heat_Flux') + DO iReac = 1, nReac + WRITE(ReacID,'(I3.3)') iReac + CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Reaction'//TRIM(ReacID)//'_Count') + END DO ! iReac + CALL WriteAttributeToHDF5(File_ID,'VarNamesSurface',nVar2D_Total,StrArray=Str2DVarNames) CALL CloseDataFile() DEALLOCATE(Str2DVarNames) @@ -978,6 +1002,9 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) ALLOCATE(MacroSurfaceHeatVal(1:nVar2D_Heat , 1:nSurfSample , 1:nSurfSample , nComputeNodeSurfOutputSides)) MacroSurfaceHeatVal = 0. +ALLOCATE(MacroSurfaceReacCount(1:nVar2D_Count , 1:nSurfSample , 1:nSurfSample , nComputeNodeSurfOutputSides , nReac)) +MacroSurfaceReacCount = 0. + OutputCounter = 0 DO iSurfSide = 1,nComputeNodeSurfSides !================== INNER BC CHECK TODO ! @@ -1002,6 +1029,10 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) ! Species-specific counter of simulation particle impacts per iteration MacroSurfaceSpecChemVal(1,p,q,OutputCounter,iSpec) = ChemWallProp(iSpec,1,p, q, iSurfSide) END DO ! iSpec=1,nSpecies + DO iReac=1,nReac + ! Species-specific counter of simulation particle impacts per iteration + MacroSurfaceReacCount(1,p,q,OutputCounter,iReac) = ChemCountReacWall(iReac,1,p, q, iSurfSide) + END DO ! iReac END DO ! q=1,nSurfSample END DO ! p=1,nSurfSample END DO ! iSurfSide=1,nComputeNodeSurfSides @@ -1016,6 +1047,7 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) offsetSurfSide => INT(offsetComputeNodeSurfOutputSide,IK) , & nVar2D_Spec => INT(nVar2D_Spec,IK) , & nVar2D_Heat => INT(nVar2D_Heat,IK) , & + nVar2D_Count => INT(nVar2D_Count,IK) , & nVar2D => INT(nVar2D,IK)) DO iSpec = 1,nSpecies @@ -1027,7 +1059,7 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) RealArray = MacroSurfaceSpecChemVal(1:nVar2D_Spec,1:nSurfSample,1:nSurfSample,1:nLocalSides,iSpec)) nVarCount = nVarCount + INT(nVar2D_Spec) END DO - + ! CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , & ! nValGlobal =(/nVar2D_Total , nSurfSample, nSurfSample , nGlobalSides/) , & ! nVal =(/nVar2D , nSurfSample, nSurfSample , nLocalSides/) , & @@ -1042,6 +1074,18 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) collective =.FALSE. , & RealArray = MacroSurfaceHeatVal(1:nVar2D_Heat,1:nSurfSample,1:nSurfSample,1:nLocalSides)) + nVarCount = nVarCount + INT(nVar2D_Heat) + + DO iReac = 1,nReac + CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , & + nValGlobal =(/nVar2D_Total , nSurfSample , nSurfSample , nGlobalSides /) , & + nVal =(/nVar2D_Count , nSurfSample , nSurfSample , nLocalSides/) , & + offset =(/INT(nVarCount,IK) , 0_IK , 0_IK , offsetSurfSide/) , & + collective =.FALSE. , & + RealArray = MacroSurfaceReacCount(1:nVar2D_Count,1:nSurfSample,1:nSurfSample,1:nLocalSides,iReac)) + nVarCount = nVarCount + INT(nVar2D_Count) + END DO + END ASSOCIATE CALL CloseDataFile() diff --git a/src/particles/dsmc/dsmc_bg_gas.f90 b/src/particles/dsmc/dsmc_bg_gas.f90 index 8a1bd79f5..92e25e684 100644 --- a/src/particles/dsmc/dsmc_bg_gas.f90 +++ b/src/particles/dsmc/dsmc_bg_gas.f90 @@ -261,10 +261,10 @@ SUBROUTINE BGGas_AssignParticleProperties(SpecID,PartIndex,bggPartIndex,GetVeloc ! MODULES USE MOD_Globals USE MOD_Particle_Vars ,ONLY: PDM, PEM, PartState,PartSpecies,PartPosRef, VarTimeStep, usevMPF, PartMPF -USE MOD_DSMC_Vars ,ONLY: CollisMode, SpecDSMC, BGGas +USE MOD_DSMC_Vars ,ONLY: CollisMode, BGGas USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod -USE MOD_part_emission_tools ,ONLY: CalcVelocity_maxwell_lpn, DSMC_SetInternalEnr_LauxVFD -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly +USE MOD_part_emission_tools ,ONLY: CalcVelocity_maxwell_lpn +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr USE MOD_Macro_Restart ,ONLY: CalcVelocity_maxwell_particle !----------------------------------------------------------------------------------------------------------------------------------! IMPLICIT NONE @@ -314,11 +314,7 @@ SUBROUTINE BGGas_AssignParticleProperties(SpecID,PartIndex,bggPartIndex,GetVeloc ! Internal energy IF(CollisMode.GT.1) THEN IF(GetInternalEnergy) THEN - IF(SpecDSMC(SpecID)%PolyatomicMol) THEN - CALL DSMC_SetInternalEnr_Poly(SpecID,1,bggPartIndex,1) - ELSE - CALL DSMC_SetInternalEnr_LauxVFD(SpecID,1,bggPartIndex,1) - END IF + CALL DSMC_SetInternalEnr(SpecID,1,bggPartIndex,1) END IF END IF ! Simulation flags @@ -529,12 +525,10 @@ SUBROUTINE BGGas_PhotoIonization(iSpec,iInit,TotalNbrOfReactions) USE MOD_Globals USE MOD_DSMC_Analyze ,ONLY: CalcGammaVib, CalcMeanFreePath USE MOD_DSMC_Vars ,ONLY: Coll_pData, CollisMode, ChemReac, PartStateIntEn, DSMC -USE MOD_DSMC_Vars ,ONLY: SpecDSMC, DSMCSumOfFormedParticles +USE MOD_DSMC_Vars ,ONLY: DSMCSumOfFormedParticles USE MOD_DSMC_Vars ,ONLY: newAmbiParts, iPartIndx_NodeNewAmbi, BGGas USE MOD_Particle_Vars ,ONLY: PEM, PDM, PartSpecies, PartState, Species, usevMPF, PartMPF, Species, PartPosRef -USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly -USE MOD_part_pos_and_velo ,ONLY: SetParticleVelocity +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod USE MOD_part_emission_tools ,ONLY: CalcVelocity_maxwell_lpn USE MOD_DSMC_ChemReact ,ONLY: PhotoIonization_InsertProducts @@ -701,11 +695,7 @@ SUBROUTINE BGGas_PhotoIonization(iSpec,iInit,TotalNbrOfReactions) ! Particle element PEM%GlobalElemID(NewParticleIndex) = PEM%GlobalElemID(ParticleIndex) IF(CollisMode.GT.1) THEN - IF(SpecDSMC(bgSpec)%PolyatomicMol) THEN - CALL DSMC_SetInternalEnr_Poly(bgSpec,1,NewParticleIndex,1) - ELSE - CALL DSMC_SetInternalEnr_LauxVFD(bgSpec,1,NewParticleIndex,1) - END IF + CALL DSMC_SetInternalEnr(bgSpec,1,NewParticleIndex,1) END IF IF(BGGas%UseDistribution) THEN iBGGSpec = BGGas%MapSpecToBGSpec(bgSpec) diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index 427a7b91f..7065498df 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -34,9 +34,8 @@ MODULE MOD_DSMC_Init !----------------------------------------------------------------------------------------------------------------------------------- ! Private Part --------------------------------------------------------------------------------------------------------------------- ! Public Part ---------------------------------------------------------------------------------------------------------------------- -PUBLIC :: InitDSMC, FinalizeDSMC +PUBLIC :: DefineParametersDSMC, InitDSMC, FinalizeDSMC !=================================================================================================================================== -PUBLIC::DefineParametersDSMC CONTAINS !================================================================================================================================== @@ -297,9 +296,9 @@ SUBROUTINE InitDSMC() USE MOD_Particle_Vars ,ONLY: DoFieldIonization USE MOD_DSMC_ParticlePairing ,ONLY: DSMC_init_octree USE MOD_DSMC_ChemInit ,ONLY: DSMC_chemical_init -USE MOD_DSMC_PolyAtomicModel ,ONLY: InitPolyAtomicMolecs, DSMC_SetInternalEnr_Poly +USE MOD_DSMC_PolyAtomicModel ,ONLY: InitPolyAtomicMolecs USE MOD_DSMC_CollisVec ,ONLY: DiceDeflectedVelocityVector4Coll, DiceVelocityVector4Coll, PostCollVec -USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -803,11 +802,7 @@ SUBROUTINE InitDSMC() IF (PDM%ParticleInside(iPart)) THEN IF (Species(PartSpecies(iPart))%NumberOfInits.GT.0) THEN iInit = PDM%PartInit(iPart) - IF (SpecDSMC(PartSpecies(iPart))%PolyatomicMol) THEN - CALL DSMC_SetInternalEnr_Poly(PartSpecies(iPart),iInit,iPart,1) - ELSE - CALL DSMC_SetInternalEnr_LauxVFD(PartSpecies(iPart),iInit,iPart,1) - END IF + CALL DSMC_SetInternalEnr(PartSpecies(iPart),iInit,iPart,1) END IF END IF END DO diff --git a/src/particles/dsmc/dsmc_polyatomic_model.f90 b/src/particles/dsmc/dsmc_polyatomic_model.f90 index a59e661d4..ee28f721f 100644 --- a/src/particles/dsmc/dsmc_polyatomic_model.f90 +++ b/src/particles/dsmc/dsmc_polyatomic_model.f90 @@ -35,7 +35,7 @@ MODULE MOD_DSMC_PolyAtomicModel ! Public Part ---------------------------------------------------------------------------------------------------------------------- PUBLIC :: InitPolyAtomicMolecs, DSMC_SetInternalEnr_Poly_ARM, DSMC_SetInternalEnr_Poly_MH, DSMC_SetInternalEnr_Poly_MH_FirstPick PUBLIC :: DSMC_RotRelaxPoly, DSMC_VibRelaxPoly_ARM, DSMC_VibRelaxPoly_MH, DSMC_VibRelaxPoly_ARM_MH -PUBLIC :: DSMC_FindFirstVibPick, DSMC_RelaxVibPolyProduct +PUBLIC :: DSMC_FindFirstVibPick, DSMC_RelaxVibPolyProduct, DSMC_SetInternalEnr !=================================================================================================================================== CONTAINS @@ -176,85 +176,127 @@ SUBROUTINE DSMC_FindFirstVibPick(iInitTmp, iSpec, init_or_sf) END SUBROUTINE DSMC_FindFirstVibPick -SUBROUTINE DSMC_SetInternalEnr_Poly_ARM_SingleMode(iSpecies, iInit, iPart, init_or_sf,iReac) +SUBROUTINE DSMC_SetInternalEnr(iSpec, iInit, iPart, init_or_sf, iReac) !=================================================================================================================================== -! Initialization of polyatomic molecules by treating every mode separately in a loop +!> Energy distribution according to dissertation of Laux (diatomic) !=================================================================================================================================== ! MODULES -USE MOD_Globals ,ONLY: Abort -USE MOD_Globals_Vars ,ONLY: BoltzmannConst -USE MOD_DSMC_Vars ,ONLY: PartStateIntEn, SpecDSMC, DSMC,PolyatomMolDSMC,VibQuantsPar,BGGas -USE MOD_Particle_Vars ,ONLY: PEM, Species -USE MOD_Particle_Sampling_Vars,ONLY: AdaptBCMacroVal, AdaptBCMapElemToSample -USE MOD_DSMC_ElectronicModel ,ONLY: InitElectronShell -USE MOD_Particle_Boundary_Vars,ONLY: PartBound -USE MOD_SurfaceModel_Vars +USE MOD_Globals ,ONLY: abort +USE MOD_Globals_Vars ,ONLY: BoltzmannConst +USE MOD_DSMC_Vars ,ONLY: PartStateIntEn, SpecDSMC, DSMC, BGGas +USE MOD_Particle_Vars ,ONLY: Species, PEM +USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCMacroVal, AdaptBCMapElemToSample +USE MOD_DSMC_ElectronicModel ,ONLY: InitElectronShell +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound +USE MOD_DSMC_Relaxation ,ONLY: DSMC_SetInternalEnr_Diatomic +! USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly +USE MOD_SurfaceModel_Vars ,ONLY: SurfChemReac ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES -INTEGER, INTENT(IN) :: iSpecies, iInit, iPart, init_or_sf -INTEGER, INTENT(IN), OPTIONAL :: iReac +INTEGER, INTENT(IN) :: iSpec, iInit, iPart, init_or_sf +INTEGER, INTENT(IN), OPTIONAL :: iReac !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -REAL :: iRan, iRan2, NormProb -INTEGER :: iQuant, iDOF, iPolyatMole -REAL :: TVib ! vibrational temperature -REAL :: TRot ! rotational temperature -INTEGER :: ElemID +REAL :: iRan +INTEGER :: iQuant +REAL :: TVib ! vibrational temperature +REAL :: TRot ! rotational temperature +INTEGER :: ElemID !=================================================================================================================================== -ElemID = PEM%LocalElemID(iPart) -SELECT CASE (init_or_sf) +! Nullify energy for atomic species +!----------------------------------------------------------------------------------------------------------------------------------- +PartStateIntEn( 1,iPart) = 0 +PartStateIntEn( 2,iPart) = 0 +!----------------------------------------------------------------------------------------------------------------------------------- +! Set vibrational and rotational energies for molecules +!----------------------------------------------------------------------------------------------------------------------------------- +IF ((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + ElemID = PEM%LocalElemID(iPart) + SELECT CASE (init_or_sf) CASE(1) !iInit - TVib=SpecDSMC(iSpecies)%Init(iInit)%TVib - TRot=SpecDSMC(iSpecies)%Init(iInit)%TRot + TVib=SpecDSMC(iSpec)%Init(iInit)%TVib + TRot=SpecDSMC(iSpec)%Init(iInit)%TRot CASE(2) !SurfaceFlux - IF(Species(iSpecies)%Surfaceflux(iInit)%Adaptive) THEN - SELECT CASE(Species(iSpecies)%Surfaceflux(iInit)%AdaptiveType) + IF(Species(iSpec)%Surfaceflux(iInit)%Adaptive) THEN + SELECT CASE(Species(iSpec)%Surfaceflux(iInit)%AdaptiveType) CASE(1,3,4) ! Pressure and massflow inlet (pressure/massflow, temperature const) - TVib=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TVib - TRot=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TRot + TVib=SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib + TRot=SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot CASE(2) ! adaptive Outlet/freestream - TVib = Species(iSpecies)%Surfaceflux(iInit)%AdaptivePressure & - / (BoltzmannConst * AdaptBCMacroVal(4,AdaptBCMapElemToSample(ElemID),iSpecies)) + TVib = Species(iSpec)%Surfaceflux(iInit)%AdaptivePressure & + / (BoltzmannConst * AdaptBCMacroVal(4,AdaptBCMapElemToSample(ElemID),iSpec)) TRot = TVib CASE DEFAULT - CALL abort(& - __STAMP__& - ,'Wrong adaptive type for Surfaceflux in vib/rot poly!') + CALL abort(__STAMP__,'ERROR: Wrong adaptive type for Surfaceflux in DSMC_SetInternalEnr!') END SELECT ELSE - TVib=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TVib - TRot=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TRot + TVib=SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib + TRot=SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot END IF - CASE(3) ! reactive surface - TVib=PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iInit)%BC) - TRot=PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iInit)%BC) - CASE(4) ! reactive surface + CASE(3) !reactive surface + TVib=PartBound%WallTemp(iInit) + TRot=PartBound%WallTemp(iInit) + CASE(4) !reactive surface TVib=PartBound%WallTemp(iInit) - TRot=PartBound%WallTemp(iInit) + TRot=PartBound%WallTemp(iInit) CASE DEFAULT - CALL abort(& - __STAMP__& - ,'Neither iInit nor SurfaceFlux defined as reference!') -END SELECT - -! Background gas distribution -IF(BGGas%NumberOfSpecies.GT.0) THEN - IF(BGGas%BackgroundSpecies(iSpecies).AND.BGGas%UseDistribution) THEN - TVib = BGGas%Distribution(BGGas%MapSpecToBGSpec(iSpecies),DSMC_TVIB,ElemID) - TRot = BGGas%Distribution(BGGas%MapSpecToBGSpec(iSpecies),DSMC_TROT,ElemID) + CALL abort(__STAMP__,'ERROR: Neither iInit nor Surfaceflux defined as reference in DSMC_SetInternalEnr!') + END SELECT + ! Background gas distribution + IF(BGGas%NumberOfSpecies.GT.0) THEN + IF(BGGas%BackgroundSpecies(iSpec).AND.BGGas%UseDistribution) THEN + TVib = BGGas%Distribution(BGGas%MapSpecToBGSpec(iSpec),DSMC_TVIB,ElemID) + TRot = BGGas%Distribution(BGGas%MapSpecToBGSpec(iSpec),DSMC_TROT,ElemID) + END IF + END IF + IF(SpecDSMC(iSpec)%PolyatomicMol) THEN + CALL DSMC_SetInternalEnr_Poly(iSpec, iPart, TRot, TVib) + ELSE + CALL DSMC_SetInternalEnr_Diatomic(iSpec, iPart, TRot, TVib) END IF END IF - +!----------------------------------------------------------------------------------------------------------------------------------- +! Set electronic energy +!----------------------------------------------------------------------------------------------------------------------------------- IF (DSMC%ElectronicModel.GT.0) THEN - CALL InitElectronShell(iSpecies,iPart,iInit,init_or_sf) + IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + CALL InitElectronShell(iSpec,iPart,iInit,init_or_sf) + ELSE + PartStateIntEn( 3,iPart) = 0. + END IF ENDIF -! set vibrational energy -iPolyatMole = SpecDSMC(iSpecies)%SpecToPolyArray +END SUBROUTINE DSMC_SetInternalEnr + + +SUBROUTINE DSMC_SetInternalEnr_Poly_ARM_SingleMode(iSpec, iPart, TRot, TVib) +!=================================================================================================================================== +! Initialization of polyatomic molecules by treating every mode separately in a loop +!=================================================================================================================================== +! MODULES +USE MOD_Globals_Vars ,ONLY: BoltzmannConst +USE MOD_DSMC_Vars ,ONLY: PartStateIntEn, SpecDSMC, DSMC,PolyatomMolDSMC,VibQuantsPar +USE MOD_SurfaceModel_Vars +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER, INTENT(IN) :: iSpec, iPart +REAL, INTENT(IN) :: TRot, TVib +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +REAL :: iRan, iRan2, NormProb +INTEGER :: iQuant, iDOF, iPolyatMole +!=================================================================================================================================== + +! Set vibrational energy +iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray IF(ALLOCATED(VibQuantsPar(iPart)%Quants)) DEALLOCATE(VibQuantsPar(iPart)%Quants) ALLOCATE(VibQuantsPar(iPart)%Quants(PolyatomMolDSMC(iPolyatMole)%VibDOF)) PartStateIntEn( 1,iPart) = 0.0 @@ -269,10 +311,12 @@ SUBROUTINE DSMC_SetInternalEnr_Poly_ARM_SingleMode(iSpecies, iInit, iPart, init_ + (iQuant + DSMC%GammaQuant)*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF)*BoltzmannConst VibQuantsPar(iPart)%Quants(iDOF)=iQuant END DO -IF (SpecDSMC(iSpecies)%Xi_Rot.EQ.2) THEN + +! Set rotational energy +IF (SpecDSMC(iSpec)%Xi_Rot.EQ.2) THEN CALL RANDOM_NUMBER(iRan2) PartStateIntEn( 2,iPart) = -BoltzmannConst*TRot*LOG(iRan2) -ELSE IF (SpecDSMC(iSpecies)%Xi_Rot.EQ.3) THEN +ELSE IF (SpecDSMC(iSpec)%Xi_Rot.EQ.3) THEN CALL RANDOM_NUMBER(iRan2) PartStateIntEn( 2,iPart) = iRan2*10 !the distribution function has only non-negligible values betwenn 0 and 10 NormProb = SQRT(PartStateIntEn( 2,iPart))*EXP(-PartStateIntEn( 2,iPart))/(SQRT(0.5)*EXP(-0.5)) diff --git a/src/particles/dsmc/dsmc_relaxation.f90 b/src/particles/dsmc/dsmc_relaxation.f90 index 0b532ac26..08969832c 100644 --- a/src/particles/dsmc/dsmc_relaxation.f90 +++ b/src/particles/dsmc/dsmc_relaxation.f90 @@ -14,7 +14,7 @@ MODULE MOD_DSMC_Relaxation !=================================================================================================================================== -! Module including collisions, relaxation and reaction decision +! Module with routines for relaxation !=================================================================================================================================== ! MODULES ! IMPLICIT VARIABLE HANDLING @@ -27,11 +27,48 @@ MODULE MOD_DSMC_Relaxation ! Private Part --------------------------------------------------------------------------------------------------------------------- ! Public Part ---------------------------------------------------------------------------------------------------------------------- PUBLIC :: DSMC_VibRelaxDiatomic, CalcMeanVibQuaDiatomic, CalcXiVib, CalcXiTotalEqui, DSMC_calc_P_rot, DSMC_calc_var_P_vib -PUBLIC :: InitCalcVibRelaxProb, DSMC_calc_P_vib, SumVibRelaxProb, FinalizeCalcVibRelaxProb +PUBLIC :: InitCalcVibRelaxProb, DSMC_calc_P_vib, SumVibRelaxProb, FinalizeCalcVibRelaxProb, DSMC_SetInternalEnr_Diatomic !=================================================================================================================================== CONTAINS +SUBROUTINE DSMC_SetInternalEnr_Diatomic(iSpec, iPart, TRot, TVib) +!=================================================================================================================================== +!> Energy distribution according to dissertation of Laux (diatomic) +!=================================================================================================================================== +! MODULES +USE MOD_Globals_Vars ,ONLY: BoltzmannConst +USE MOD_DSMC_Vars ,ONLY: PartStateIntEn, SpecDSMC, DSMC +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER, INTENT(IN) :: iSpec, iPart +REAL, INTENT(IN) :: TRot, TVib +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +REAL :: iRan +INTEGER :: iQuant +!=================================================================================================================================== +! Nullify energy for atomic species +PartStateIntEn(1:2,iPart) = 0 +! Set vibrational energy +CALL RANDOM_NUMBER(iRan) +iQuant = INT(-LOG(iRan)*TVib/SpecDSMC(iSpec)%CharaTVib) +DO WHILE (iQuant.GE.SpecDSMC(iSpec)%MaxVibQuant) + CALL RANDOM_NUMBER(iRan) + iQuant = INT(-LOG(iRan)*TVib/SpecDSMC(iSpec)%CharaTVib) +END DO +PartStateIntEn( 1,iPart) = (iQuant + DSMC%GammaQuant)*SpecDSMC(iSpec)%CharaTVib*BoltzmannConst +! Set rotational energy +CALL RANDOM_NUMBER(iRan) +PartStateIntEn( 2,iPart) = -BoltzmannConst*TRot*LOG(iRan) + +END SUBROUTINE DSMC_SetInternalEnr_Diatomic + + SUBROUTINE DSMC_VibRelaxDiatomic(iPair, iPart, FakXi) !=================================================================================================================================== ! Performs the vibrational relaxation of diatomic molecules diff --git a/src/particles/emission/particle_emission.f90 b/src/particles/emission/particle_emission.f90 index 8ca1127a2..d2f784180 100644 --- a/src/particles/emission/particle_emission.f90 +++ b/src/particles/emission/particle_emission.f90 @@ -44,8 +44,7 @@ SUBROUTINE ParticleInserting() USE MOD_PIC_Vars USE MOD_part_tools ,ONLY: UpdateNextFreePosition USE MOD_DSMC_Vars ,ONLY: useDSMC, CollisMode, SpecDSMC -USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr USE MOD_Particle_Analyze_Vars ,ONLY: CalcPartBalance,nPartIn,PartEkinIn USE MOD_Particle_Analyze_Tools ,ONLY: CalcEkinPart USE MOD_part_emission_tools ,ONLY: SetParticleChargeAndMass,SetParticleMPF,SamplePoissonDistri,SetParticleTimeStep,CalcNbrOfPhotons @@ -312,11 +311,7 @@ SUBROUTINE ParticleInserting() DO WHILE (iPart.LE.NbrOfParticle) PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) IF (PositionNbr.NE.0) THEN - IF (SpecDSMC(i)%PolyatomicMol) THEN - CALL DSMC_SetInternalEnr_Poly(i,iInit,PositionNbr,1) - ELSE - CALL DSMC_SetInternalEnr_LauxVFD(i,iInit,PositionNbr,1) - END IF + CALL DSMC_SetInternalEnr(i,iInit,PositionNbr,1) END IF iPart = iPart + 1 END DO diff --git a/src/particles/emission/particle_emission_tools.f90 b/src/particles/emission/particle_emission_tools.f90 index 84a41f778..b8bd10193 100644 --- a/src/particles/emission/particle_emission_tools.f90 +++ b/src/particles/emission/particle_emission_tools.f90 @@ -82,10 +82,6 @@ MODULE MOD_part_emission_tools MODULE PROCEDURE CalcVelocity_FromWorkFuncSEE END INTERFACE -INTERFACE DSMC_SetInternalEnr_LauxVFD - MODULE PROCEDURE DSMC_SetInternalEnr_LauxVFD -END INTERFACE - #ifdef CODE_ANALYZE INTERFACE CalcVectorAdditionCoeffs MODULE PROCEDURE CalcVectorAdditionCoeffs @@ -102,7 +98,7 @@ MODULE MOD_part_emission_tools PUBLIC :: SetParticlePositionSphere, SetParticlePositionSinDeviation, SetParticleTimeStep PUBLIC :: CalcNbrOfPhotons, CalcPhotonEnergy PUBLIC :: CalcIntensity_Gaussian -PUBLIC :: CalcVelocity_FromWorkFuncSEE, DSMC_SetInternalEnr_LauxVFD +PUBLIC :: CalcVelocity_FromWorkFuncSEE PUBLIC :: SetParticlePositionPhotonSEEDisc, SetParticlePositionPhotonCylinder PUBLIC :: SetParticlePositionPhotonSEERectangle, SetParticlePositionPhotonRectangle PUBLIC :: SetParticlePositionPhotonHoneycomb, SetParticlePositionPhotonSEEHoneycomb @@ -381,110 +377,6 @@ SUBROUTINE CalcVelocity_maxwell_lpn(FractNbr, Vec3D, iInit, Temperature) END SUBROUTINE CalcVelocity_maxwell_lpn -SUBROUTINE DSMC_SetInternalEnr_LauxVFD(iSpecies, iInit, iPart, init_or_sf,iReac) -!=================================================================================================================================== -!> Energy distribution according to dissertation of Laux (diatomic) -!=================================================================================================================================== -! MODULES -USE MOD_Globals ,ONLY: abort -USE MOD_Globals_Vars ,ONLY: BoltzmannConst -USE MOD_DSMC_Vars ,ONLY: PartStateIntEn, SpecDSMC, DSMC, BGGas -USE MOD_Particle_Vars ,ONLY: Species, PEM -USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCMacroVal, AdaptBCMapElemToSample -USE MOD_DSMC_ElectronicModel ,ONLY: InitElectronShell -USE MOD_Particle_Boundary_Vars ,ONLY: PartBound -USE MOD_SurfaceModel_Vars -! IMPLICIT VARIABLE HANDLING -IMPLICIT NONE -!----------------------------------------------------------------------------------------------------------------------------------- -! INPUT VARIABLES -INTEGER, INTENT(IN) :: iSpecies, iInit, iPart, init_or_sf -INTEGER, INTENT(IN), OPTIONAL :: iReac -!----------------------------------------------------------------------------------------------------------------------------------- -! OUTPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! LOCAL VARIABLES -REAL :: iRan -INTEGER :: iQuant -REAL :: TVib ! vibrational temperature -REAL :: TRot ! rotational temperature -INTEGER :: ElemID -!=================================================================================================================================== -!----------------------------------------------------------------------------------------------------------------------------------- -! Set internal energies (vibrational and rotational) -!----------------------------------------------------------------------------------------------------------------------------------- -ElemID = PEM%LocalElemID(iPart) -IF ((SpecDSMC(iSpecies)%InterID.EQ.2).OR.(SpecDSMC(iSpecies)%InterID.EQ.20)) THEN - SELECT CASE (init_or_sf) - CASE(1) !iInit - TVib=SpecDSMC(iSpecies)%Init(iInit)%TVib - TRot=SpecDSMC(iSpecies)%Init(iInit)%TRot - CASE(2) !SurfaceFlux - IF(Species(iSpecies)%Surfaceflux(iInit)%Adaptive) THEN - SELECT CASE(Species(iSpecies)%Surfaceflux(iInit)%AdaptiveType) - CASE(1,3,4) ! Pressure and massflow inlet (pressure/massflow, temperature const) - TVib=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TVib - TRot=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TRot - CASE(2) ! adaptive Outlet/freestream - TVib = Species(iSpecies)%Surfaceflux(iInit)%AdaptivePressure & - / (BoltzmannConst * AdaptBCMacroVal(4,AdaptBCMapElemToSample(ElemID),iSpecies)) - TRot = TVib - CASE DEFAULT - CALL abort(& - __STAMP__& - ,'Wrong adaptive type for Surfaceflux in int_energy -> lauxVDF!') - END SELECT - ELSE - TVib=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TVib - TRot=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TRot - END IF - CASE(3) !reactive surface - TVib=PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iInit)%BC) - TRot=PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iInit)%BC) - CASE(4) !reactive surface - TVib=PartBound%WallTemp(iInit) - TRot=PartBound%WallTemp(iInit) - CASE DEFAULT - CALL abort(& - __STAMP__& - ,'neither iInit nor Surfaceflux defined as reference!') - END SELECT - ! Background gas distribution - IF(BGGas%NumberOfSpecies.GT.0) THEN - IF(BGGas%BackgroundSpecies(iSpecies).AND.BGGas%UseDistribution) THEN - TVib = BGGas%Distribution(BGGas%MapSpecToBGSpec(iSpecies),DSMC_TVIB,ElemID) - TRot = BGGas%Distribution(BGGas%MapSpecToBGSpec(iSpecies),DSMC_TROT,ElemID) - END IF - END IF - ! Set vibrational energy - CALL RANDOM_NUMBER(iRan) - iQuant = INT(-LOG(iRan)*TVib/SpecDSMC(iSpecies)%CharaTVib) - DO WHILE (iQuant.GE.SpecDSMC(iSpecies)%MaxVibQuant) - CALL RANDOM_NUMBER(iRan) - iQuant = INT(-LOG(iRan)*TVib/SpecDSMC(iSpecies)%CharaTVib) - END DO - PartStateIntEn( 1,iPart) = (iQuant + DSMC%GammaQuant)*SpecDSMC(iSpecies)%CharaTVib*BoltzmannConst - ! Set rotational energy - CALL RANDOM_NUMBER(iRan) - PartStateIntEn( 2,iPart) = -BoltzmannConst*TRot*LOG(iRan) -ELSE - ! Nullify energy for atomic species - PartStateIntEn( 1,iPart) = 0 - PartStateIntEn( 2,iPart) = 0 -END IF -!----------------------------------------------------------------------------------------------------------------------------------- -! Set electronic energy -!----------------------------------------------------------------------------------------------------------------------------------- -IF (DSMC%ElectronicModel.GT.0) THEN - IF((SpecDSMC(iSpecies)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpecies)%FullyIonized)) THEN - CALL InitElectronShell(iSpecies,iPart,iInit,init_or_sf) - ELSE - PartStateIntEn( 3,iPart) = 0. - END IF -ENDIF - -END SUBROUTINE DSMC_SetInternalEnr_LauxVFD - SUBROUTINE CalcVelocity_taylorgreenvortex(FractNbr, Vec3D, iInit, Element) !=================================================================================================================================== !> diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index b77e53218..67b385126 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -24,7 +24,7 @@ MODULE MOD_Particle_SurfChemFlux !----------------------------------------------------------------------------------------------------------------------------------- ! Private Part --------------------------------------------------------------------------------------------------------------------- ! Public Part ---------------------------------------------------------------------------------------------------------------------- -PUBLIC :: ParticleSurfChemFlux +PUBLIC :: ParticleSurfChemFlux, ParticleSurfDiffusion, RemoveBias !=================================================================================================================================== CONTAINS @@ -35,6 +35,7 @@ SUBROUTINE ParticleSurfChemFlux() ! Modules USE MOD_Globals USE MOD_Particle_Vars +USE MOD_Globals_Vars ,ONLY: PI, BoltzmannConst USE MOD_part_tools ,ONLY: CalcRadWeightMPF USE MOD_DSMC_Vars ,ONLY: useDSMC, CollisMode, RadialWeighting USE MOD_Eval_xyz ,ONLY: GetPositionInRefElem @@ -48,15 +49,13 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Timedisc_Vars ,ONLY: dt USE MOD_Particle_Surfaces_Vars USE MOD_Particle_Boundary_Vars -USE MOD_SurfaceModel -USE MOD_SurfaceModel_Chemistry -USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win,SurfChemReac, ChemWallProp, ChemDesorpWall +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win,SurfChemReac, ChemWallProp, ChemDesorpWall, ChemCountReacWall USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC -#if defined(IMPA) || defined(ROS) +!#if defined(IMPA) || defined(ROS) USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod, TrackInfo -#endif /*IMPA*/ +!#endif /*IMPA*/ #if USE_LOADBALANCE USE MOD_LoadBalance_Timers ,ONLY: LBStartTime, LBElemSplitTime, LBPauseTime #endif /*USE_LOADBALANCE*/ @@ -69,7 +68,7 @@ SUBROUTINE ParticleSurfChemFlux() !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES ! Local variable declaration -INTEGER :: iSpec , PositionNbr, iSF, iSide, currentBC, SideID, NbrOfParticle, ParticleIndexNbr +INTEGER :: iSpec , PositionNbr, iSF, iSide, SideID, NbrOfParticle, ParticleIndexNbr INTEGER :: BCSideID, ElemID, iLocSide, iSample, jSample, PartInsSubSide, iPart, iPartTotal INTEGER :: PartsEmitted, Node1, Node2, globElemId REAL :: Particle_pos(3), xyzNod(3), Vector1(3), Vector2(3) @@ -81,26 +80,27 @@ SUBROUTINE ParticleSurfChemFlux() REAL :: BetaCoeff REAL :: WallTemp REAL :: SurfMol -INTEGER :: SurfNumOfReac, iReac -INTEGER :: BoundID -INTEGER :: iVal, iReactant, iValReac, SurfSideID +REAL :: MPF +INTEGER :: SurfNumOfReac, iReac, ReactantCount, BoundID, nSF +INTEGER :: iVal, iReactant, iValReac, SurfSideID, iBias INTEGER :: SubP, SubQ +INTEGER, ALLOCATABLE :: SurfReacBias(:) #if USE_LOADBALANCE REAL :: tLBStart #endif /*USE_LOADBALANCE*/ !=================================================================================================================================== SurfNumOfReac = SurfChemReac%NumOfReact +nSF = SurfChemReac%CatBoundNum -! SubP = TrackInfo%p -! SubQ = TrackInfo%q -SubP = 1 -SubQ = 1 +SubP = TrackInfo%p +SubQ = TrackInfo%q + +ALLOCATE(SurfReacBias(SurfNumOfReac)) -DO iSF = 1, nPartBound - ! determine the reactive boundaries - IF(ANY(SurfChemReac%PSMap(iSF)%PureSurfReac)) THEN - BoundID = iSF +DO iSF = 1, nSF + BoundID = SurfChemReac%Surfaceflux(iSF)%BC + IF(ANY(SurfChemReac%PSMap(BoundID)%PureSurfReac)) THEN DO iSide = 1, BCdata_auxSF(BoundID)%SideNumber BCSideID=BCdata_auxSF(BoundID)%SideList(iSide) @@ -129,300 +129,327 @@ SUBROUTINE ParticleSurfChemFlux() SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) END IF - ! Loop over the reaction types - DO iReac = 1, SurfNumOfReac - SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) + ! Randomize the order in which the reactions are called + CALL RemoveBias(SurfNumOfReac, SurfReacBias) - ! LH-reaction with immediate desorption - CASE('LHD') - ! Define the variables - Coverage = 1. - ! prefactor for the rate equation including the dependency on all coverage values - DO iVal=1,SIZE(SurfChemReac%Reactants(iReac,:)) + ! Loop over the reaction types + DO iBias = 1, SurfNumOfReac + iReac = SurfReacBias(iBias) + IF (SurfChemReac%PSMap(BoundID)%PureSurfReac(iReac)) THEN - IF(SurfChemReac%Reactants(iReac,iVal).GT.0) THEN - iSpec = SurfChemReac%Reactants(iReac,iVal) - Coverage = Coverage * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) - END IF - END DO + SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) - ! Determine the reaction energy [J] - BetaCoeff = SurfChemReac%HeatAccomodation(iReac) - ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) + ! LH-reaction with immediate desorption + CASE('LHD') + ! Define the variables + Coverage = 1. + ! prefactor for the rate equation including the dependency on all coverage values + DO iVal=1,SIZE(SurfChemReac%Reactants(iReac,:)) - nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) + IF(SurfChemReac%Reactants(iReac,iVal).GT.0) THEN + iSpec = SurfChemReac%Reactants(iReac,iVal) + MPF = Species(iSpec)%MacroParticleFactor + Coverage = Coverage * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) + END IF + END DO - ! Calculate the rate in dependence of the temperature and coverage - Rate = nu * Coverage * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol - ! Is the LH routine in this way redundant for the consideration of multiple products s? - DO iVal=1,SIZE(SurfChemReac%Products(iReac,:)) - IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN - iSpec = SurfChemReac%Products(iReac,iVal) + ! Determine the reaction energy [K] + BetaCoeff = SurfChemReac%HeatAccomodation(iReac) + ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) * BoltzmannConst - ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = Rate * dt * SurfMol + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) + nu = SurfChemReac%Prefactor(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - Coverage = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) - AdCount = Coverage * SurfMol - - !Check if enough reactants exist on the surface - IF(ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) .GT. AdCount) THEN - ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = AdCount - END IF + ! Calculate the rate in dependence of the temperature and coverage + Rate = nu * Coverage * exp(-E_act/WallTemp) ! Energy in K - END IF - END DO + DO iVal=1,SIZE(SurfChemReac%Products(iReac,:)) + IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN + iSpec = SurfChemReac%Products(iReac,iVal) - ! Update the surface coverage values - IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.1.) THEN - ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) * ReacHeat * BetaCoeff - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) - ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfMol - END IF - END DO - END IF - END IF ! iVal in Products - END DO ! iVal - - ! LH-reaction - CASE('LH') - ! Define the variables - Coverage = 1. - ! prefactor for the rate equation including the dependency on all coverage values - DO iVal=1,SIZE(SurfChemReac%Reactants(iReac,:)) - - IF(SurfChemReac%Reactants(iReac,iVal).GT.0) THEN - iSpec = SurfChemReac%Reactants(iReac,iVal) - Coverage = Coverage * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) - END IF - END DO + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = Rate * dt * SurfMol + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) - ! Determine the reaction energy [J] - BetaCoeff = SurfChemReac%HeatAccomodation(iReac) - ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + ! Test for multiples of the same reactant + ReactantCount = COUNT(SurfChemReac%Reactants(iReac,:) == iReactant) - nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) + Coverage = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) + AdCount = Coverage * SurfMol - ! Calculate the rate in dependence of the temperature and coverage - Rate = nu * Coverage * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol - ! Is the LH routine in this way redundant for the consideration of multiple products s? - DO iVal=1,SIZE(SurfChemReac%Products(iReac,:)) - IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN - iSpec = SurfChemReac%Products(iReac,iVal) + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = AdCount/ReactantCount - DesCount = Rate * dt * SurfMol + ! Test if enough reactants exist on the surface + IF(ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) .GT. AdCount/ReactantCount) THEN + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = AdCount/ReactantCount + END IF - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - Coverage = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) - AdCount = Coverage * SurfMol - - !Check if enough reactants exist on the surface - IF(DesCount .GT. AdCount) THEN - DesCount = AdCount END IF + END DO + ! Update the surface coverage values + IF(INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/MPF).GE.1) THEN + ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) * ReacHeat * BetaCoeff + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8)/SurfMol + END IF + END DO + ! Count the number of surface reactions + ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/MPF) END IF - END DO - - ! Update the surface coverage values - IF(DesCount.GE.1.) THEN - ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) + INT(DesCount)/SurfMol - ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) + INT(DesCount) * ReacHeat * BetaCoeff - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) - INT(DesCount)/SurfMol - END IF - END DO + END IF ! iVal in Products + END DO ! iVal + + ! LH-reaction + CASE('LH') + ! Define the variables + Coverage = 1. + ! prefactor for the rate equation including the dependency on all coverage values + DO iVal=1,SIZE(SurfChemReac%Reactants(iReac,:)) + + IF(SurfChemReac%Reactants(iReac,iVal).GT.0) THEN + iSpec = SurfChemReac%Reactants(iReac,iVal) + MPF = Species(iSpec)%MacroParticleFactor + Coverage = Coverage * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) END IF - END IF ! iVal in Products - END DO ! iVal - - - ! Desorption - CASE('D') - DO iVal=1, SIZE(SurfChemReac%Products(iReac,:)) - IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN - iSpec = SurfChemReac%Products(iReac,iVal) - - IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + END DO + + ! Determine the reaction energy [K] + BetaCoeff = SurfChemReac%HeatAccomodation(iReac) + ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) * BoltzmannConst + + nu = SurfChemReac%Prefactor(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) + ! Calculate the rate in dependence of the temperature and coverage + Rate = nu * Coverage * exp(-E_act/WallTemp) ! Energy in K + + DO iVal=1,SIZE(SurfChemReac%Products(iReac,:)) + IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN + iSpec = SurfChemReac%Products(iReac,iVal) + + DesCount = Rate * dt * SurfMol + + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) + ! Check for multiples of the same reactant + ReactantCount = COUNT(SurfChemReac%Reactants(iReac,:) == iReactant) + + Coverage = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) AdCount = Coverage * SurfMol + + !Check if enough reactants exist on the surface + IF(DesCount .GT. AdCount/ReactantCount) THEN + DesCount = AdCount/ReactantCount + END IF + END IF END DO - ELSE - Coverage = ChemWallProp(iSpec,1,SubP, SubQ, SurfSideID) - AdCount = Coverage * SurfMol - END IF - - ! Calculate the desorption energy in dependence of the coverage [J] - DesHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) /(6.022*10.0**(20)) - - ! Define the variables - DissOrder = SurfChemReac%DissOrder(iReac) - nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) - Rate = SurfChemReac%Rate(iReac) - - ! Calculate the desorption parameters in dependence of coverage and temperature of the boundary - IF(nu.EQ.0.) THEN - nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) - IF (DissOrder.EQ.2) THEN - ! Convert the prefactor to coverage values for the associative desorption - nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) *10.**(15) - END IF - END IF - - E_act = SurfChemReac%E_initial(iReac) + Coverage * SurfChemReac%W_interact(iReac) - Rate = nu * Coverage**DissOrder * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol - ! Determine the desorption probability - ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = Rate * dt * SurfMol + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/DissOrder + ! Update the surface coverage values + IF(INT(DesCount/MPF).GE.1) THEN + ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) + INT(DesCount,8)/SurfMol + ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) + INT(DesCount,8) * ReacHeat * BetaCoeff + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) - INT(DesCount,8)/SurfMol + END IF + END DO + ! Count the number of surface reactions + ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + INT(DesCount/MPF) + END IF + END IF ! iVal in Products + END DO ! iVal - IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.(AdCount/DissOrder)) THEN - ! Upper bound for the desorption number - ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = AdCount/DissOrder - END IF - ! Update the adsorbtion and desorption count - IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.1.)THEN - ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,2, SubP, SubQ, SurfSideID)) * DesHeat + ! Desorption + CASE('D') + DO iVal=1, SIZE(SurfChemReac%Products(iReac,:)) + IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN + iSpec = SurfChemReac%Products(iReac,iVal) + MPF = Species(iSpec)%MacroParticleFactor + IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) - DissOrder*ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfMol + Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) + AdCount = Coverage * SurfMol END IF END DO ELSE - ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) = ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) - DissOrder*ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfMol + Coverage = ChemWallProp(iSpec,1,SubP, SubQ, SurfSideID) + AdCount = Coverage * SurfMol + END IF + + ! Calculate the desorption energy in dependence of the coverage [K] + DesHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) * BoltzmannConst + + ! Define the variables + DissOrder = SurfChemReac%DissOrder(iReac) + nu = SurfChemReac%Prefactor(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) + Rate = SurfChemReac%Rate(iReac) + + ! Calculate the desorption parameters in dependence of coverage and temperature of the boundary + IF(nu.EQ.0.) THEN + nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) + IF (DissOrder.EQ.2) THEN + ! Convert the prefactor to coverage values for the associative desorption + nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) *10.**(15) + END IF END IF - END IF - END IF - END DO !iSpec - - CASE DEFAULT - END SELECT - - ! Current boundary condition - currentBC = BoundID - PartsEmitted = 0 - NbrOfParticle = 0 - iPartTotal = 0 - - DO iSpec = 1, nSpecies - - ! Loop over the side numbers - IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)).GE.1) THEN - - ! Random distribution of the particles on the surface - ! Define the necessary variables - xyzNod(1:3) = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%xyzNod(1:3) - - DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - ! Number of additional particles to be inserted - Node1 = jSample+1 - Node2 = jSample+2 ! - Vector1 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node1-1) - Vector2 = BCdata_auxSF(currentBC)%TriaSideGeo(iSide)%Vectors(:,Node2-1) - midpoint(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) - ndist(1:3) = BCdata_auxSF(currentBC)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) - - PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) - - ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) - NbrOfParticle = NbrOfParticle + PartInsSubSide - ALLOCATE(particle_positions(1:PartInsSubSide*3)) - - iPart = 1 - !-- Set Positions - DO WHILE (iPart .LE. PartInsSubSide) - Particle_pos(1:3) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) - particle_positions(iPart*3-2) = Particle_pos(1) - particle_positions(iPart*3-1) = Particle_pos(2) - particle_positions(iPart*3 ) = Particle_pos(3) - iPart=iPart+1 - END DO - - !-- Fill Particle Informations (PartState, Partelem, etc.) - ParticleIndexNbr = 1 - DO iPart=1,PartInsSubSide - IF ((iPart.EQ.1).OR.PDM%ParticleInside(ParticleIndexNbr)) THEN - ParticleIndexNbr = PDM%nextFreePosition(iPartTotal + 1 + PDM%CurrentNextFreePosition) + + E_act = SurfChemReac%E_initial(iReac) + Coverage * SurfChemReac%W_interact(iReac) + Rate = nu * Coverage**DissOrder * exp(-E_act/WallTemp) ! Energy in K + + ! Determine the desorption probability + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = Rate * dt * SurfMol + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/DissOrder + + IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.(AdCount/DissOrder)) THEN + ! Upper bound for the desorption number + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = AdCount/DissOrder END IF - IF (ParticleIndexNbr .ne. 0) THEN - PartState(1:3,ParticleIndexNbr) = particle_positions(3*(iPart-1)+1:3*(iPart-1)+3) - LastPartPos(1:3,ParticleIndexNbr)=PartState(1:3,ParticleIndexNbr) - PDM%ParticleInside(ParticleIndexNbr) = .TRUE. - PDM%dtFracPush(ParticleIndexNbr) = .TRUE. - PDM%IsNewPart(ParticleIndexNbr) = .TRUE. - PEM%GlobalElemID(ParticleIndexNbr) = globElemId - PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId !needed when ParticlePush is not executed, e.g. "delay" - iPartTotal = iPartTotal + 1 - IF (RadialWeighting%DoRadialWeighting) THEN - PartMPF(ParticleIndexNbr) = CalcRadWeightMPF(PartState(2,ParticleIndexNbr), iSpec,ParticleIndexNbr) + + ! Update the adsorbtion and desorption count + IF(INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/MPF).GE.1) THEN + ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) * DesHeat + IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) - DissOrder*INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8)/SurfMol + END IF + END DO + ELSE + ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) = ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) - DissOrder*INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8)/SurfMol END IF - ELSE - CALL abort(& - __STAMP__& - ,'ERROR in ParticleSurfaceflux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?') + + ! Count the number of surface reactions + ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/MPF) + END IF !ChemDesorbWall .GE. 1 + END IF ! Products .NE. 1 + END DO !iSpec + + CASE DEFAULT + END SELECT + + END IF !iReac.EQ.PureSurfReac + + END DO !iBias + + ! Current boundary condition + PartsEmitted = 0 + NbrOfParticle = 0 + iPartTotal = 0 + + DO iSpec = 1, nSpecies + + ! Loop over the side numbers + IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/Species(iSpec)%MacroParticleFactor).GE.1) THEN + + ! Random distribution of the particles on the surface + ! Define the necessary variables + xyzNod(1:3) = BCdata_auxSF(BoundID)%TriaSideGeo(iSide)%xyzNod(1:3) + + DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) + ! Number of additional particles to be inserted + Node1 = jSample+1 + Node2 = jSample+2 ! + Vector1 = BCdata_auxSF(BoundID)%TriaSideGeo(iSide)%Vectors(:,Node1-1) + Vector2 = BCdata_auxSF(BoundID)%TriaSideGeo(iSide)%Vectors(:,Node2-1) + midpoint(1:3) = BCdata_auxSF(BoundID)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) + ndist(1:3) = BCdata_auxSF(BoundID)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) + + !PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) + PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/Species(iSpec)%MacroParticleFactor) + + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) + NbrOfParticle = NbrOfParticle + PartInsSubSide + ALLOCATE(particle_positions(1:PartInsSubSide*3)) + + iPart = 1 + !-- Set Positions + DO WHILE (iPart .LE. PartInsSubSide) + Particle_pos(1:3) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) + particle_positions(iPart*3-2) = Particle_pos(1) + particle_positions(iPart*3-1) = Particle_pos(2) + particle_positions(iPart*3 ) = Particle_pos(3) + iPart=iPart+1 + END DO + + !-- Fill Particle Informations (PartState, Partelem, etc.) + ParticleIndexNbr = 1 + DO iPart=1,PartInsSubSide + IF ((iPart.EQ.1).OR.PDM%ParticleInside(ParticleIndexNbr)) THEN + ParticleIndexNbr = PDM%nextFreePosition(iPartTotal + 1 + PDM%CurrentNextFreePosition) + END IF + IF (ParticleIndexNbr .ne. 0) THEN + PartState(1:3,ParticleIndexNbr) = particle_positions(3*(iPart-1)+1:3*(iPart-1)+3) + LastPartPos(1:3,ParticleIndexNbr)=PartState(1:3,ParticleIndexNbr) + PDM%ParticleInside(ParticleIndexNbr) = .TRUE. + PDM%dtFracPush(ParticleIndexNbr) = .TRUE. + PDM%IsNewPart(ParticleIndexNbr) = .TRUE. + PEM%GlobalElemID(ParticleIndexNbr) = globElemId + PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId !needed when ParticlePush is not executed, e.g. "delay" + iPartTotal = iPartTotal + 1 + IF (RadialWeighting%DoRadialWeighting) THEN + PartMPF(ParticleIndexNbr) = CalcRadWeightMPF(PartState(2,ParticleIndexNbr), iSpec,ParticleIndexNbr) END IF - END DO - DEALLOCATE(particle_positions) + ELSE + CALL abort(& + __STAMP__& + ,'ERROR in ParticleSurfaceflux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?') + END IF + END DO + DEALLOCATE(particle_positions) + + CALL SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) + + PartsEmitted = PartsEmitted + PartInsSubSide + END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) + END IF ! iSide + IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'Error 2 in ParticleSurfaceflux!') + + CALL SetParticleChargeAndMass(iSpec,NbrOfParticle) + + IF (usevMPF.AND.(.NOT.RadialWeighting%DoRadialWeighting)) CALL SetParticleMPF(iSpec,-1,NbrOfParticle) + ! define molecule stuff + + IF (useDSMC.AND.(CollisMode.GT.1)) CALL SetInnerEnergies(iSpec, BoundID, NbrOfParticle,iReac) + + IF(CalcPartBalance) THEN + ! Compute number of input particles and energy + nPartIn(iSpec)=nPartIn(iSpec) + NBrofParticle + + DO iPart=1,NbrOfparticle + PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) + IF (PositionNbr .ne. 0) PartEkinIn(PartSpecies(PositionNbr))= & + PartEkinIn(PartSpecies(PositionNbr))+CalcEkinPart(PositionNbr) + END DO ! iPart + END IF ! CalcPartBalance + ! instead of an UpdateNextfreePosition we update the particleVecLength only - enough ?!? + PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle + PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle + ! Sample Energies on Surfaces when particles are emitted from them + IF (NbrOfParticle.NE.PartsEmitted) THEN + ! should be equal for including the following lines in tSurfaceFlux + CALL abort(& + __STAMP__& + ,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') + END IF + END DO ! iSpec - CALL SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) - - PartsEmitted = PartsEmitted + PartInsSubSide - END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) - END IF ! iSide - IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'Error 2 in ParticleSurfaceflux!') - - CALL SetParticleChargeAndMass(iSpec,NbrOfParticle) - - IF (usevMPF.AND.(.NOT.RadialWeighting%DoRadialWeighting)) CALL SetParticleMPF(iSpec,-1,NbrOfParticle) - ! define molecule stuff - - IF (useDSMC.AND.(CollisMode.GT.1)) CALL SetInnerEnergies(iSpec, iSF, NbrOfParticle,iReac) - - IF(CalcPartBalance) THEN - ! Compute number of input particles and energy - nPartIn(iSpec)=nPartIn(iSpec) + NBrofParticle - - DO iPart=1,NbrOfparticle - PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) - IF (PositionNbr .ne. 0) PartEkinIn(PartSpecies(PositionNbr))= & - PartEkinIn(PartSpecies(PositionNbr))+CalcEkinPart(PositionNbr) - END DO ! iPart - END IF ! CalcPartBalance - ! instead of an UpdateNextfreePosition we update the particleVecLength only - enough ?!? - PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle - PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle - ! Sample Energies on Surfaces when particles are emitted from them - IF (NbrOfParticle.NE.PartsEmitted) THEN - ! should be equal for including the following lines in tSurfaceFlux - CALL abort(& - __STAMP__& - ,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') - END IF - END DO ! iSpec - END DO !iReac - END DO ! iSide + END DO !iSide ELSE CYCLE - END IF ! PureSurfReac + END IF !ANY PureSurfReac END DO !iSF #if USE_MPI @@ -431,22 +458,164 @@ SUBROUTINE ParticleSurfChemFlux() END SUBROUTINE ParticleSurfChemFlux +!=================================================================================================================================== +!> Bias treatment for multiple reactions on the same surface element +!=================================================================================================================================== +SUBROUTINE RemoveBias(SurfNumOfReac, SurfReacBias) +! MODULES +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER, INTENT(IN) :: SurfNumOfReac +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +INTEGER, ALLOCATABLE, INTENT(OUT) :: SurfReacBias(:) +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: i, j, k, m +INTEGER :: temp +REAL :: RanNum +!=================================================================================================================================== + +SurfReacBias = [(i,i=1,SurfNumOfReac)] + +m = SurfNumOfReac +DO k = 1, 2 + DO i = 1, m + CALL RANDOM_NUMBER(RanNum) + j = 1 + FLOOR(m*RanNum) + temp = SurfReacBias(j) + SurfReacBias(j) = SurfReacBias(i) + SurfReacBias(i) = temp + END DO +END DO + +END SUBROUTINE RemoveBias + +!=================================================================================================================================== +!> Particle Inserting via Surface Flux and (if present) adaptiveBC (Surface Flux adapting part density, velocity or temperature) +!=================================================================================================================================== +SUBROUTINE ParticleSurfDiffusion() +! Modules +USE MOD_Globals +USE MOD_Particle_Vars +USE MOD_MPI_Shared_Vars ,ONLY: myComputeNodeRank, nComputeNodeProcessors +USE MOD_Mesh_Vars ,ONLY: SideToElem, offsetElem +USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID +USE MOD_Timedisc_Vars ,ONLY: dt +USE MOD_Particle_Surfaces_Vars +USE MOD_Particle_Boundary_Vars +USE MOD_SurfaceModel +USE MOD_SurfaceModel_Chemistry +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win,SurfChemReac, ChemWallProp +USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED +USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC +#if USE_LOADBALANCE +USE MOD_LoadBalance_Timers ,ONLY: LBStartTime, LBElemSplitTime, LBPauseTime +#endif /*USE_LOADBALANCE*/ +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +! Local variable declaration +INTEGER :: firstSide, lastSide, SideNumber +INTEGER :: iSpec , PositionNbr, iSF, iSide, BoundID, SideID +INTEGER :: BCSideID, ElemID, iLocSide, iSample, jSample +INTEGER :: Node1, Node2, globElemId +INTEGER :: CatBoundNum +INTEGER :: SurfSideID +INTEGER :: SubP, SubQ +REAL :: Coverage_Sum + +#if USE_LOADBALANCE +REAL :: tLBStart +#endif /*USE_LOADBALANCE*/ +!=================================================================================================================================== +CatBoundNum = SurfChemReac%CatBoundNum + +! SubP = TrackInfo%p +! SubQ = TrackInfo%q +SubP = 1 +SubQ = 1 + +#if USE_MPI +firstSide = INT(REAL( myComputeNodeRank *nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors))+1 +lastSide = INT(REAL((myComputeNodeRank+1)*nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors)) +#else +firstSide = 1 +lastSide = nSurfTotalSides +#endif /*USE_MPI*/ + +SideNumber = lastSide - firstSide + 1 + +IF(SurfChemReac%TotDiffusion) THEN + + DO iSpec = 1, nSpecies + ChemWallProp(iSpec,1,SubP,SubQ,:) = SUM(ChemWallProp(iSpec,1,SubP,SubQ,:))/SideNumber + END DO + +ELSE IF(SurfChemReac%Diffusion) THEN + DO iSF = 1, CatBoundNum + BoundID = SurfChemReac%Surfaceflux(iSF)%BC + SideNumber = BCdata_auxSF(BoundID)%SideNumber + + DO iSpec = 1, nSpecies + Coverage_Sum = 0.0 + DO iSide = 1, SideNumber + BCSideID=BCdata_auxSF(BoundID)%SideList(iSide) + ElemID = SideToElem(S2E_ELEM_ID,BCSideID) + iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) + globElemId = ElemID + offSetElem + SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + + Coverage_Sum = Coverage_Sum + ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) + + END DO + + DO iSide = 1, SideNumber + BCSideID=BCdata_auxSF(BoundID)%SideList(iSide) + ElemID = SideToElem(S2E_ELEM_ID,BCSideID) + iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) + globElemId = ElemID + offSetElem + SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + + ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) = Coverage_Sum/SideNumber + + END DO + + END DO !iSpec + END DO !iSF +END IF !Diffusion + +#if USE_MPI + CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win,MPI_COMM_SHARED) +#endif + +END SUBROUTINE ParticleSurfDiffusion + + !=================================================================================================================================== !> !=================================================================================================================================== -SUBROUTINE SetInnerEnergies(iSpec, iSF, NbrOfParticle,iReac) +SUBROUTINE SetInnerEnergies(iSpec, BoundID, NbrOfParticle,iReac) ! MODULES USE MOD_Globals USE MOD_DSMC_Vars ,ONLY: SpecDSMC USE MOD_Particle_Vars ,ONLY: PDM -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly -USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES -INTEGER, INTENT(IN) :: iSpec, iSF, NbrOfParticle,iReac +INTEGER, INTENT(IN) :: iSpec, BoundID, NbrOfParticle,iReac !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- @@ -459,11 +628,7 @@ SUBROUTINE SetInnerEnergies(iSpec, iSF, NbrOfParticle,iReac) PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) IF (PositionNbr .ne. 0) THEN - IF (SpecDSMC(iSpec)%PolyatomicMol) THEN - CALL DSMC_SetInternalEnr_Poly(iSpec,iSF,PositionNbr,3,iReac) - ELSE - CALL DSMC_SetInternalEnr_LauxVFD(iSpec, iSF, PositionNbr,3,iReac) - END IF + CALL DSMC_SetInternalEnr(iSpec, BoundID, PositionNbr,3,iReac) END IF iPart = iPart + 1 END DO @@ -528,7 +693,7 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSide ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -INTEGER :: i,PositionNbr,envelope,currentBC +INTEGER :: i,PositionNbr,envelope,BoundID REAL :: Vec3D(3), vec_nIn(1:3), vec_t1(1:3), vec_t2(1:3) REAL :: a,zstar,RandVal1,RandVal2(2),RandVal3(3),u,RandN,RandN_save,Velo1,Velo2,Velosq,T,beta,z LOGICAL :: RandN_in_Mem @@ -541,20 +706,20 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSide RandN_in_Mem=.FALSE. envelope=-1 -currentBC = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC +BoundID = SurfChemReac%Surfaceflux(iSF)%BC -IF (.NOT.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal) THEN +IF (.NOT.SurfChemReac%Surfaceflux(iSF)%VeloIsNormal) THEN vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3) vec_t1(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1(1:3) vec_t2(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2(1:3) END IF !.NOT.VeloIsNormal -VeloIC = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC -T = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%MWTemperatureIC -a = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%a_nIn -projFak = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%projFak -Velo_t1 = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 -Velo_t2 = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 +VeloIC = SurfChemReac%Surfaceflux(iSF)%VeloIC +T = SurfChemReac%Surfaceflux(iSF)%MWTemperatureIC +a = SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%a_nIn(iSpec) +projFak = SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%projFak +Velo_t1 = SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 +Velo_t2 = SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 ! Set velocities !-- determine envelope for most efficient ARM [Garcia and Wagner 2006, JCP217-2] @@ -581,7 +746,7 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSide PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition) IF (PositionNbr .NE. 0) THEN !-- 0a.: In case of side-normal velocities: calc n-/t-vectors at particle position, xi was saved in PartState(4:5) - IF (SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal .AND. TriaSurfaceFlux) THEN + IF (SurfChemReac%Surfaceflux(iSF)%VeloIsNormal .AND. TriaSurfaceFlux) THEN vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3) vec_t1(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1(1:3) vec_t2(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2(1:3) diff --git a/src/particles/emission/particle_surface_flux.f90 b/src/particles/emission/particle_surface_flux.f90 index cfd53b0e2..3cefbdc4f 100644 --- a/src/particles/emission/particle_surface_flux.f90 +++ b/src/particles/emission/particle_surface_flux.f90 @@ -512,8 +512,7 @@ SUBROUTINE SetInnerEnergies(iSpec, iSF, NbrOfParticle) USE MOD_Globals USE MOD_DSMC_Vars ,ONLY: SpecDSMC USE MOD_Particle_Vars ,ONLY: PDM -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly -USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -529,11 +528,7 @@ SUBROUTINE SetInnerEnergies(iSpec, iSF, NbrOfParticle) DO WHILE (iPart .le. NbrOfParticle) PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) IF (PositionNbr .ne. 0) THEN - IF (SpecDSMC(iSpec)%PolyatomicMol) THEN - CALL DSMC_SetInternalEnr_Poly(iSpec,iSF,PositionNbr,2) - ELSE - CALL DSMC_SetInternalEnr_LauxVFD(iSpec, iSF, PositionNbr,2) - END IF + CALL DSMC_SetInternalEnr(iSpec, iSF, PositionNbr,2) END IF iPart = iPart + 1 END DO diff --git a/src/particles/emission/particle_surface_flux_init.f90 b/src/particles/emission/particle_surface_flux_init.f90 index 8a691856d..ee016b21a 100644 --- a/src/particles/emission/particle_surface_flux_init.f90 +++ b/src/particles/emission/particle_surface_flux_init.f90 @@ -121,7 +121,6 @@ SUBROUTINE InitializeParticleSurfaceflux() USE MOD_Particle_Vars ,ONLY: Species, nSpecies, DoSurfaceFlux USE MOD_Particle_Vars ,ONLY: UseCircularInflow, DoForceFreeSurfaceFlux USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive -USE MOD_SurfaceModel_Chemistry USE MOD_SurfaceModel_Vars !USE MOD_Particle_SurfChemFlux_Init USE MOD_Restart_Vars ,ONLY: DoRestart, RestartTime @@ -141,7 +140,7 @@ SUBROUTINE InitializeParticleSurfaceflux() !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES ! Local variable declaration -INTEGER :: iReac, SurfNumReac +INTEGER :: iReac, SurfNumReac, CatBoundNum INTEGER :: iSpec,iSF,SideID,BCSideID,iSide,ElemID,iLocSide,iSample,jSample,currentBC INTEGER :: iCopy1, iCopy2, iCopy3, MaxSurfacefluxBCs,nDataBC REAL :: tmp_SubSideDmax(SurfFluxSideSize(1),SurfFluxSideSize(2)) @@ -168,7 +167,7 @@ SUBROUTINE InitializeParticleSurfaceflux() CALL ReadInAndPrepareSurfaceFlux(MaxSurfacefluxBCs, nDataBC) ! Call to the reactive surfaces -IF (SurfChemReac%NumOfReact.GT.0) CALL ReadInAndPrepareSurfChemFlux(nDataBC) +IF (SurfChemReac%CatBoundNum.GT.0) CALL ReadInAndPrepareSurfChemFlux(nDataBC) #if USE_MPI CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoPoissonRounding,1,MPI_LOGICAL,MPI_LAND,PartMPI%COMM,iError) !set T if this is for all procs @@ -264,74 +263,72 @@ SUBROUTINE InitializeParticleSurfaceflux() END DO !iSF END DO !iSpec -SurfNumReac = SurfChemReac%NumOfReact +CatBoundNum = SurfChemReac%CatBoundNum !initialize Surfaceflux-specific data -DO iReac=1,SurfNumReac - DO iSF=1,SurfChemReac%NumOfBounds(iReac) - currentBC = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC - IF (BCdata_auxSF(currentBC)%SideNumber.GT.0) THEN - - ! Loop over sides on the surface flux - DO iSide=1,BCdata_auxSF(currentBC)%SideNumber - BCSideID=BCdata_auxSF(currentBC)%SideList(iSide) - ElemID = SideToElem(S2E_ELEM_ID,BCSideID) - iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) - SideID=GetGlobalNonUniqueSideID(offsetElem+ElemID,iLocSide) - IF (SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%AcceptReject) THEN - CALL GetBezierSampledAreas(SideID=SideID,BezierSampleN=BezierSampleN & - ,BezierSurfFluxProjection_opt=.NOT.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal & - ,SurfMeshSubSideAreas=tmp_SubSideAreas,DmaxSampleN_opt=SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%ARM_DmaxSampleN & - ,Dmax_opt=tmp_SubSideDmax,BezierControlPoints2D_opt=tmp_BezierControlPoints2D) - ELSE IF (.NOT.TriaSurfaceFlux) THEN - CALL GetBezierSampledAreas(SideID=SideID,BezierSampleN=BezierSampleN & - ,BezierSurfFluxProjection_opt=.NOT.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal,SurfMeshSubSideAreas=tmp_SubSideAreas) - ELSE ! TriaSurfaceFlux - DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - tmp_SubSideAreas(iSample,jSample)=SurfMeshSubSideData(iSample,jSample,BCSideID)%area - END DO; END DO - END IF - ! Initialize surface flux - CALL InitSurfChemFlux(iReac, iSF, iSide, tmp_SubSideAreas, BCdata_auxSFTemp) - ! Initialize acceptance-rejection on SF - IF (SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%AcceptReject) THEN - DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Dmax = tmp_SubSideDmax(iSample,jSample) - ! IF (.NOT.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal) THEN - ! ALLOCATE(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample & - ! ,iSide)%BezierControlPoints2D(1:2,0:NGeo,0:NGeo)) - ! DO iCopy1=0,NGeo; DO iCopy2=0,NGeo; DO iCopy3=1,2 - ! SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample & - ! ,iSide)%BezierControlPoints2D(iCopy3,iCopy2,iCopy1) & - ! = tmp_BezierControlPoints2D(iCopy3,iCopy2,iCopy1,iSample,jSample) - ! END DO; END DO; END DO - !END IF !.NOT.VeloIsNormal - END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) - END IF - !Init adaptive SF - END DO ! iSide - ELSE IF (BCdata_auxSF(currentBC)%SideNumber.EQ.-1) THEN - CALL abort(__STAMP__& - ,'ERROR in ParticleSurfaceflux: Someting is wrong with SideNumber of BC ',currentBC) - END IF - !--- Finalize adaptive SF +DO iSF=1,CatBoundNum + currentBC = SurfChemReac%Surfaceflux(iSF)%BC + IF (BCdata_auxSF(currentBC)%SideNumber.GT.0) THEN + + ! Loop over sides on the surface flux + DO iSide=1,BCdata_auxSF(currentBC)%SideNumber + BCSideID=BCdata_auxSF(currentBC)%SideList(iSide) + ElemID = SideToElem(S2E_ELEM_ID,BCSideID) + iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) + SideID=GetGlobalNonUniqueSideID(offsetElem+ElemID,iLocSide) + IF (SurfChemReac%Surfaceflux(iSF)%AcceptReject) THEN + CALL GetBezierSampledAreas(SideID=SideID,BezierSampleN=BezierSampleN & + ,BezierSurfFluxProjection_opt=.NOT.SurfChemReac%Surfaceflux(iSF)%VeloIsNormal & + ,SurfMeshSubSideAreas=tmp_SubSideAreas,DmaxSampleN_opt=SurfChemReac%Surfaceflux(iSF)%ARM_DmaxSampleN & + ,Dmax_opt=tmp_SubSideDmax,BezierControlPoints2D_opt=tmp_BezierControlPoints2D) + ELSE IF (.NOT.TriaSurfaceFlux) THEN + CALL GetBezierSampledAreas(SideID=SideID,BezierSampleN=BezierSampleN & + ,BezierSurfFluxProjection_opt=.NOT.SurfChemReac%Surfaceflux(iSF)%VeloIsNormal,SurfMeshSubSideAreas=tmp_SubSideAreas) + ELSE ! TriaSurfaceFlux + DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) + tmp_SubSideAreas(iSample,jSample)=SurfMeshSubSideData(iSample,jSample,BCSideID)%area + END DO; END DO + END IF + ! Initialize surface flux + CALL InitSurfChemFlux(iSF, iSide, tmp_SubSideAreas, BCdata_auxSFTemp) + ! Initialize acceptance-rejection on SF + IF (SurfChemReac%Surfaceflux(iSF)%AcceptReject) THEN + DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) + SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Dmax = tmp_SubSideDmax(iSample,jSample) + ! IF (.NOT.SurfChemReac%Surfaceflux(iSF)%VeloIsNormal) THEN + ! ALLOCATE(SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample & + ! ,iSide)%BezierControlPoints2D(1:2,0:NGeo,0:NGeo)) + ! DO iCopy1=0,NGeo; DO iCopy2=0,NGeo; DO iCopy3=1,2 + ! SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample & + ! ,iSide)%BezierControlPoints2D(iCopy3,iCopy2,iCopy1) & + ! = tmp_BezierControlPoints2D(iCopy3,iCopy2,iCopy1,iSample,jSample) + ! END DO; END DO; END DO + !END IF !.NOT.VeloIsNormal + END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) + END IF + !Init adaptive SF + END DO ! iSide + ELSE IF (BCdata_auxSF(currentBC)%SideNumber.EQ.-1) THEN + CALL abort(__STAMP__& + ,'ERROR in ParticleSurfaceflux: Someting is wrong with SideNumber of BC ',currentBC) + END IF + !--- Finalize adaptive SF #if USE_MPI - IF(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%Adaptive) THEN - totalAreaSF_global = 0.0 - CALL MPI_ALLREDUCE(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%totalAreaSF,totalAreaSF_global,1, & - MPI_DOUBLE_PRECISION,MPI_SUM,PartMPI%COMM,IERROR) - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%totalAreaSF = totalAreaSF_global - END IF + IF(SurfChemReac%Surfaceflux(iSF)%Adaptive) THEN + totalAreaSF_global = 0.0 + CALL MPI_ALLREDUCE(SurfChemReac%Surfaceflux(iSF)%totalAreaSF,totalAreaSF_global,1, & + MPI_DOUBLE_PRECISION,MPI_SUM,PartMPI%COMM,IERROR) + SurfChemReac%Surfaceflux(iSF)%totalAreaSF = totalAreaSF_global + END IF #endif #ifdef CODE_ANALYZE - IF (BCdata_auxSF(currentBC)%SideNumber.GT.0 .AND. SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%CircularInflow) THEN - IPWRITE(*,'(I4,A,2(1X,I0),A,3(1X,I0))') ' For Surfaceflux/Spec',iSF,iSpec,' are nType0,1,2: ' & - , CountCircInflowType(1,iSF,iSpec),CountCircInflowType(2, iSF,iSpec) & - , CountCircInflowType(3, iSF,iSpec) - END IF + IF (BCdata_auxSF(currentBC)%SideNumber.GT.0 .AND. SurfChemReac%Surfaceflux(iSF)%CircularInflow) THEN + IPWRITE(*,'(I4,A,2(1X,I0),A,3(1X,I0))') ' For Surfaceflux/Spec',iSF,iSpec,' are nType0,1,2: ' & + , CountCircInflowType(1,iSF,iSpec),CountCircInflowType(2, iSF,iSpec) & + , CountCircInflowType(3, iSF,iSpec) + END IF #endif /*CODE_ANALYZE*/ - END DO !iSF -END DO !iSpec +END DO !iSF #ifdef CODE_ANALYZE @@ -342,10 +339,8 @@ SUBROUTINE InitializeParticleSurfaceflux() ! Setting variables required after a restart IF(DoRestart) THEN - DO iReac=1,SurfNumReac - DO iSF=1,SurfChemReac%NumOfBounds(iReac) - VFR_total = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total !proc local total - END DO + DO iSF=1,SurfChemReac%CatBoundNum + VFR_total = SurfChemReac%Surfaceflux(iSF)%VFR_total !proc local total END DO END IF @@ -417,7 +412,6 @@ SUBROUTINE ReadInAndPrepareSurfaceFlux(MaxSurfacefluxBCs, nDataBC) USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, BezierSampleN, TriaSurfaceFlux USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod USE MOD_Mesh_Vars ,ONLY: NGeo -USE MOD_SurfaceModel_Chemistry USE MOD_SurfaceModel_Vars ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -613,7 +607,6 @@ SUBROUTINE BCSurfMeshSideAreasandNormals() USE MOD_Mesh_Vars ,ONLY: nBCSides, offsetElem, SideToElem USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID USE MOD_Particle_Surfaces ,ONLY: GetBezierSampledAreas, CalcNormAndTangTriangle -USE MOD_SurfaceModel_Chemistry USE MOD_SurfaceModel_Vars ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -696,7 +689,6 @@ SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp) USE MOD_DSMC_Symmetry ,ONLY: DSMC_1D_CalcSymmetryArea, DSMC_2D_CalcSymmetryArea, DSMC_2D_CalcSymmetryAreaSubSides USE MOD_DSMC_Vars ,ONLY: RadialWeighting USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle -USE MOD_SurfaceModel_Chemistry USE MOD_SurfaceModel_Vars #if USE_MPI USE MOD_Particle_MPI_Vars ,ONLY: PartMPI @@ -711,7 +703,7 @@ SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp) ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -INTEGER :: iReac, SurfNumReac +INTEGER :: iReac, CatBoundNum INTEGER :: TmpMapToBC(1:nDataBC), TmpSideStart(1:nDataBC), TmpSideNumber(1:nDataBC), TmpSideEnd(1:nDataBC) ! PartBC, Start of Linked List for Sides in SurfacefluxBC, Number of Particles in Sides in SurfacefluxBC, End of Linked List for Sides in SurfacefluxBC INTEGER :: TmpSideNext(1:nBCSides) !Next: Sides of diff. BCs ar not overlapping! @@ -783,16 +775,14 @@ SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp) END DO END DO - SurfNumReac = SurfChemReac%NumOfReact - DO iReac=1,SurfNumReac - DO iSF=1,SurfChemReac%NumOfBounds(iReac) - IF (TmpMapToBC(iBC).EQ.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC) THEN !only surfacefluxes with iBC - ALLOCATE(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(SurfFluxSideSize(1),SurfFluxSideSize(2),1:TmpSideNumber(iBC))) - IF(RadialWeighting%DoRadialWeighting) THEN - ALLOCATE(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%nVFRSub(1:TmpSideNumber(iBC),1:RadialWeighting%nSubSides)) - END IF + CatBoundNum = SurfChemReac%CatBoundNum + DO iSF=1,CatBoundNum + IF (TmpMapToBC(iBC).EQ.SurfChemReac%Surfaceflux(iSF)%BC) THEN !only surfacefluxes with iBC + ALLOCATE(SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(SurfFluxSideSize(1),SurfFluxSideSize(2),1:TmpSideNumber(iBC))) + IF(RadialWeighting%DoRadialWeighting) THEN + ALLOCATE(SurfChemReac%Surfaceflux(iSF)%nVFRSub(1:TmpSideNumber(iBC),1:RadialWeighting%nSubSides)) END IF - END DO + END IF END DO BCSideID=TmpSideStart(iBC) @@ -1211,7 +1201,7 @@ SUBROUTINE CalcConstMassflowWeightForZeroMassFlow(iSpec,iSF) END SUBROUTINE CalcConstMassflowWeightForZeroMassFlow -SUBROUTINE InitSurfChemFlux(iReac, iSF, iSide, tmp_SubSideAreas, BCdata_auxSFTemp) +SUBROUTINE InitSurfChemFlux(iSF, iSide, tmp_SubSideAreas, BCdata_auxSFTemp) !=================================================================================================================================== !> Initialize surface flux variables in SurfFluxSubSideData type !=================================================================================================================================== @@ -1226,80 +1216,76 @@ SUBROUTINE InitSurfChemFlux(iReac, iSF, iSide, tmp_SubSideAreas, BCdata_auxSFTem IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES - INTEGER, INTENT(IN) :: iReac, iSF, iSide + INTEGER, INTENT(IN) :: iSF, iSide REAL, INTENT(IN) :: tmp_SubSideAreas(SurfFluxSideSize(1),SurfFluxSideSize(2)) TYPE(tBCdata_auxSFRadWeight), ALLOCATABLE, INTENT(IN) :: BCdata_auxSFTemp(:) !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES - INTEGER ::iSpec + INTEGER :: iSpec, iReac, SurfNumReac INTEGER :: jSample, iSample, iSub, currentBC, BCSideID REAL :: vec_nIn(3), nVFR, vec_t1(3), vec_t2(3), projFak, v_thermal, a, vSF !=================================================================================================================================== - currentBC = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC + currentBC = SurfChemReac%Surfaceflux(iSF)%BC BCSideID=BCdata_auxSF(currentBC)%SideList(iSide) DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) vec_nIn = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn vec_t1 = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1 vec_t2 = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2 - IF (.NOT.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal) THEN - projFak = DOT_PRODUCT(vec_nIn,SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloVecIC) !VeloVecIC projected to inwards normal + IF (.NOT.SurfChemReac%Surfaceflux(iSF)%VeloIsNormal) THEN + projFak = DOT_PRODUCT(vec_nIn,SurfChemReac%Surfaceflux(iSF)%VeloVecIC) !VeloVecIC projected to inwards normal ELSE projFak = 1. END IF + ALLOCATE(SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%nVFR(nSpecies)) + ALLOCATE(SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%a_nIn(nSpecies)) + DO iSpec=1,nSpecies - IF(ANY(SurfChemReac%Products(iReac,:).EQ.iSpec)) THEN - v_thermal = SQRT(2.*BoltzmannConst*SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%MWTemperatureIC/Species(iSpec)%MassIC) !thermal speed - ELSE - v_thermal = 0. - END IF - END DO - - a = 0 !dummy for projected speed ratio in constant v-distri - !-- compute total volume flow rate through surface - SELECT CASE(TRIM(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%velocityDistribution)) - CASE('constant') - vSF = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC * projFak !Velo proj. to inwards normal - nVFR = MAX(tmp_SubSideAreas(iSample,jSample) * vSF,0.) !VFR proj. to inwards normal (only positive parts!) - CASE('maxwell','maxwell_lpn') - IF(v_thermal.NE.0.) THEN - a = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC * projFak / v_thermal !speed ratio proj. to inwards n (can be negative!) - ELSE - a = 0. - END IF - vSF = v_thermal / (2.0*SQRT(PI)) * ( EXP(-(a*a)) + a*SQRT(PI)*(1+ERF(a)) ) !mean flux velocity through normal sub-face - nVFR = tmp_SubSideAreas(iSample,jSample) * vSF !VFR projected to inwards normal of sub-side - IF(RadialWeighting%DoRadialWeighting) THEN - nVFR = nVFR / BCdata_auxSFTemp(currentBC)%WeightingFactor(iSide) - DO iSub = 1, RadialWeighting%nSubSides - IF(ABS(BCdata_auxSFTemp(currentBC)%SubSideWeight(iSide,iSub)).GT.0.)THEN - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%nVFRSub(iSide,iSub) = BCdata_auxSFTemp(currentBC)%SubSideArea(iSide,iSub) & - * vSF / BCdata_auxSFTemp(currentBC)%SubSideWeight(iSide,iSub) - END IF - END DO - END IF - CASE DEFAULT - CALL abort(__STAMP__,& - 'ERROR in SurfaceFlux: Wrong velocity distribution!') - END SELECT + v_thermal = SQRT(2.*BoltzmannConst*SurfChemReac%Surfaceflux(iSF)%MWTemperatureIC/Species(iSpec)%MassIC) !thermal speed + a = 0 !dummy for projected speed ratio in constant v-distri + !-- compute total volume flow rate through surface + SELECT CASE(TRIM(SurfChemReac%Surfaceflux(iSF)%velocityDistribution)) + CASE('constant') + vSF = SurfChemReac%Surfaceflux(iSF)%VeloIC * projFak !Velo proj. to inwards normal + nVFR = MAX(tmp_SubSideAreas(iSample,jSample) * vSF,0.) !VFR proj. to inwards normal (only positive parts!) + CASE('maxwell','maxwell_lpn') + a = SurfChemReac%Surfaceflux(iSF)%VeloIC * projFak / v_thermal !speed ratio proj. to inwards n (can be negative!) + vSF = v_thermal / (2.0*SQRT(PI)) * ( EXP(-(a*a)) + a*SQRT(PI)*(1+ERF(a)) ) !mean flux velocity through normal sub-face + nVFR = tmp_SubSideAreas(iSample,jSample) * vSF !VFR projected to inwards normal of sub-side + + IF(RadialWeighting%DoRadialWeighting) THEN + nVFR = nVFR / BCdata_auxSFTemp(currentBC)%WeightingFactor(iSide) + DO iSub = 1, RadialWeighting%nSubSides + IF(ABS(BCdata_auxSFTemp(currentBC)%SubSideWeight(iSide,iSub)).GT.0.)THEN + SurfChemReac%Surfaceflux(iSF)%nVFRSub(iSide,iSub) = BCdata_auxSFTemp(currentBC)%SubSideArea(iSide,iSub) & + * vSF / BCdata_auxSFTemp(currentBC)%SubSideWeight(iSide,iSub) + END IF + END DO + END IF! DoRadialWeighting + CASE DEFAULT + CALL abort(__STAMP__,& + 'ERROR in SurfaceFlux: Wrong velocity distribution!') + END SELECT + + SurfChemReac%Surfaceflux(iSF)%VFR_total = SurfChemReac%Surfaceflux(iSF)%VFR_total + nVFR + !-- store SF-specific SubSide data in SurfFluxSubSideData (incl. projected velos) + SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%nVFR(iSpec) = nVFR + SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%a_nIn(iSpec) = a + END DO !iSpec - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total + nVFR - !-- store SF-specific SubSide data in SurfFluxSubSideData (incl. projected velos) - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%nVFR = nVFR - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%projFak = projFak - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%a_nIn = a - IF (.NOT.SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal) THEN - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 & - = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC & - * DOT_PRODUCT(vec_t1,SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloVecIC) !v in t1-dir - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 & - = SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC & - * DOT_PRODUCT(vec_t2,SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloVecIC) !v in t2-dir + SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%projFak = projFak + IF (.NOT.SurfChemReac%Surfaceflux(iSF)%VeloIsNormal) THEN + SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 & + = SurfChemReac%Surfaceflux(iSF)%VeloIC & + * DOT_PRODUCT(vec_t1,SurfChemReac%Surfaceflux(iSF)%VeloVecIC) !v in t1-dir + SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 & + = SurfChemReac%Surfaceflux(iSF)%VeloIC & + * DOT_PRODUCT(vec_t2,SurfChemReac%Surfaceflux(iSF)%VeloVecIC) !v in t2-dir ELSE - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 = 0. !v in t1-dir - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 = 0. !v in t2-dir + SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 = 0. !v in t1-dir + SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 = 0. !v in t2-dir END IF! .NOT.VeloIsNormal END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) @@ -1332,49 +1318,46 @@ SUBROUTINE ReadInAndPrepareSurfChemFlux(nDataBC) ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES - INTEGER :: iSF - INTEGER :: iReac, SurfNumReac + INTEGER :: iSF, iBound + INTEGER :: iReac, CatBoundNum !=================================================================================================================================== - SurfNumReac = SurfChemReac%NumOfReact - ALLOCATE(SurfChemReac%SFMap(SurfChemReac%NumOfReact)) - DO iReac=1,SurfNumReac - IF (SurfChemReac%NumOfBounds(iReac).EQ.0) THEN - CYCLE - ELSE - ALLOCATE(SurfChemReac%SFMap(iReac)%Surfaceflux(1:SurfChemReac%NumOfBounds(iReac))) - ! Initialize Surfaceflux to BC mapping - SurfChemReac%SFMap(iReac)%Surfaceflux(:)%BC=-1 - DO iSF=1,SurfChemReac%NumOfBounds(iReac) - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC = SurfChemReac%BoundMap(iReac)%Boundaries(iSF) - END DO + CatBoundNum = SurfChemReac%CatBoundNum + ALLOCATE(SurfChemReac%SurfaceFlux(1:CatBoundNum)) + ! Initialize Surfaceflux to BC mapping + SurfChemReac%Surfaceflux(:)%BC=-1 + + iSF = 1 + DO iBound=1,nPartBound + IF (SurfChemReac%BoundisChemSurf(iBound)) THEN + SurfChemReac%Surfaceflux(iSF)%BC = iBound + iSF = iSF + 1 END IF - - DO iSF=1,SurfChemReac%NumOfBounds(iReac) - IF (TriaSurfaceFlux) THEN - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%AcceptReject=.FALSE. - END IF + END DO - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%InsertedParticle = 0 - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total = 0 - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VFR_total_allProcsTotal = 0 - - ! get surfaceflux data - IF (SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC.LT.1 .OR. SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC.GT.nPartBound) THEN - CALL abort(& + DO iSF = 1, CatBoundNum + IF (TriaSurfaceFlux) THEN + SurfChemReac%Surfaceflux(iSF)%AcceptReject=.FALSE. + END IF + + SurfChemReac%Surfaceflux(iSF)%InsertedParticle = 0 + SurfChemReac%Surfaceflux(iSF)%VFR_total = 0 + SurfChemReac%Surfaceflux(iSF)%VFR_total_allProcsTotal = 0 + + ! get surfaceflux data + IF (SurfChemReac%Surfaceflux(iSF)%BC.LT.1 .OR. SurfChemReac%Surfaceflux(iSF)%BC.GT.nPartBound) THEN + CALL abort(& __STAMP__& , 'SurfacefluxBCs must be between 1 and nPartBound!') - ELSE IF (BCdata_auxSF(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC)%SideNumber.EQ. -1) THEN !not set yet - BCdata_auxSF(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC)%SideNumber=0 - nDataBC=nDataBC+1 - END IF + ELSE IF (BCdata_auxSF(SurfChemReac%Surfaceflux(iSF)%BC)%SideNumber.EQ. -1) THEN !not set yet + BCdata_auxSF(SurfChemReac%Surfaceflux(iSF)%BC)%SideNumber=0 + nDataBC=nDataBC+1 + END IF - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%velocityDistribution = 'maxwell_lpn' - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIC = 0. - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%VeloIsNormal = .FALSE. - SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%MWTemperatureIC = PartBound%WallTemp(SurfChemReac%SFMap(iReac)%Surfaceflux(iSF)%BC) - - END DO !iSF - END DO ! iReac + SurfChemReac%Surfaceflux(iSF)%velocityDistribution = 'maxwell_lpn' + SurfChemReac%Surfaceflux(iSF)%VeloIC = 0. + SurfChemReac%Surfaceflux(iSF)%VeloIsNormal = .FALSE. + SurfChemReac%Surfaceflux(iSF)%MWTemperatureIC = PartBound%WallTemp(SurfChemReac%Surfaceflux(iSF)%BC) + END DO !iSF END SUBROUTINE ReadInAndPrepareSurfChemFlux diff --git a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 index fca3fed4a..cdf5162ba 100644 --- a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 +++ b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 @@ -374,7 +374,9 @@ SUBROUTINE ExchangeChemSurfData() ! exchange the surface data !> 1) collect the information on the local compute-node !> 2) compute-node leaders with sampling sides in their halo region and the original node communicate the sampling information -!> 3) compute-node leaders ensure synchronization of shared arrays on their node +!> 3) calculation of the coverage (needed without MPI as well) +!> 4) compute-node leaders communicate the calculated coverage to the halo sides +!> 5) compute-node leaders ensure synchronization of shared arrays on their node !!=================================================================================================================================== ! MODULES ! !----------------------------------------------------------------------------------------------------------------------------------! @@ -383,20 +385,14 @@ SUBROUTINE ExchangeChemSurfData() USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED,MPI_COMM_LEADERS_SURF, nComputeNodeProcessors USE MOD_MPI_Shared_Vars ,ONLY: nSurfLeaders,myComputeNodeRank,mySurfRank USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode, PartBound -USE MOD_Particle_Boundary_Vars ,ONLY: SurfSampSize,nSurfSample +USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfTotalSides USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide -USE MOD_Particle_Boundary_Vars ,ONLY: SurfMapping,CalcSurfaceImpact -USE MOD_Particle_Boundary_Vars ,ONLY: SampWallState,SampWallState_Shared,SampWallState_Shared_Win -USE MOD_Particle_Boundary_Vars ,ONLY: SampWallPumpCapacity,SampWallPumpCapacity_Shared,SampWallPumpCapacity_Shared_Win -USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactEnergy,SampWallImpactEnergy_Shared,SampWallImpactEnergy_Shared_Win -USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactVector,SampWallImpactVector_Shared,SampWallImpactVector_Shared_Win -USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactAngle ,SampWallImpactAngle_Shared ,SampWallImpactAngle_Shared_Win -USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactNumber,SampWallImpactNumber_Shared,SampWallImpactNumber_Shared_Win +USE MOD_Particle_Boundary_Vars ,ONLY: SurfMapping USE MOD_Particle_MPI_Vars ,ONLY: SurfSendBuf,SurfRecvBuf USE MOD_Particle_Vars ,ONLY: nSpecies -USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp, ChemSampWall, ChemSampWall_Shared, ChemWallProp_Shared_Win -USE MOD_SurfaceModel_Vars ,ONLY: ChemSampWall_Shared_Win +USE MOD_SurfaceModel_Vars ,ONLY: ChemSampWall, ChemSampWall_Shared, ChemSampWall_Shared_Win +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp, ChemWallProp_Shared, ChemWallProp_Shared_Win USE MOD_Particle_Boundary_vars ,ONLY: SurfSideArea_Shared, SurfSide2GlobalSide USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared ! IMPLICIT VARIABLE HANDLING @@ -410,251 +406,289 @@ SUBROUTINE ExchangeChemSurfData() INTEGER :: iProc,SideID, firstSide, lastSide, GlobalSideID, locBCID, iSide, iSpec INTEGER :: iPos,p,q INTEGER :: MessageSize,iSurfSide,SurfSideID -INTEGER :: nValues +INTEGER :: nValues, SurfChemVarNum, SurfChemSampSize INTEGER :: RecvRequest(0:nSurfLeaders-1),SendRequest(0:nSurfLeaders-1) -!INTEGER :: iPos,p,q,iProc,iReact -!INTEGER :: recv_status_list(1:MPI_STATUS_SIZE,1:SurfCOMM%nMPINeighbors) !=================================================================================================================================== ! nodes without sampling surfaces do not take part in this routine IF (.NOT.SurfOnNode) RETURN +#if USE_MPI +SurfChemVarNum = 2 +SurfChemSampSize = SurfChemVarNum * nSpecies ! collect the information from the proc-local shadow arrays in the compute-node shared array -MessageSize = nSpecies*2*nSurfSample*nSurfSample*nComputeNodeSurfTotalSides +MessageSize = SurfChemSampSize*nSurfSample*nSurfSample*nComputeNodeSurfTotalSides IF (myComputeNodeRank.EQ.0) THEN - CALL MPI_REDUCE(ChemSampWall,ChemSampWall_Shared,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_SHARED,IERROR) + CALL MPI_REDUCE(ChemSampWall,ChemSampWall_Shared ,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_SHARED,IERROR) ELSE CALL MPI_REDUCE(ChemSampWall,0 ,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_SHARED,IERROR) ENDIF +ChemSampWall = 0. +ASSOCIATE(ChemSampWall => ChemSampWall_Shared) CALL BARRIER_AND_SYNC(ChemSampWall_Shared_Win ,MPI_COMM_SHARED) -#if USE_MPI firstSide = INT(REAL( myComputeNodeRank *nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors))+1 lastSide = INT(REAL((myComputeNodeRank+1)*nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors)) + +! surf leader communication of the sampled values in ChemSampWall +IF (myComputeNodeRank.EQ.0) THEN + nValues = SurfChemSampSize*nSurfSample**2 + ! open receive buffer + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE + + ! Only open recv buffer if we are expecting sides from this leader node + IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE + + ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc + MessageSize = SurfMapping(iProc)%nRecvSurfSides * nValues + CALL MPI_IRECV( SurfRecvBuf(iProc)%content & + , MessageSize & + , MPI_DOUBLE_PRECISION & + , iProc & + , 1209 & + , MPI_COMM_LEADERS_SURF & + , RecvRequest(iProc) & + , IERROR) + END DO ! iProc + + ! build message + DO iProc = 0,nSurfLeaders-1 + ! Ignore myself + IF (iProc .EQ. mySurfRank) CYCLE + + ! Only assemble message if we are expecting sides to send to this leader node + IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE + + ! Nullify everything + iPos = 0 + SurfSendBuf(iProc)%content = 0. + + DO iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides + SideID = SurfMapping(iProc)%SendSurfGlobalID(iSurfSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + + ! Assemble message + DO q = 1,nSurfSample + DO p = 1,nSurfSample + DO iSpec =1, nSpecies + SurfSendBuf(iProc)%content(iPos+1:iPos+SurfChemVarNum) = ChemSampWall(iSpec,:,p,q,SurfSideID) + iPos = iPos + SurfChemVarNum + END DO + END DO ! p=0,nSurfSample + END DO ! q=0,nSurfSample + + ChemSampWall(:,:,:,:,SurfSideID)=0. + END DO ! iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides + END DO + + ! send message + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE + + ! Only open recv buffer if we are expecting sides from this leader node + IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE + + ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc + MessageSize = SurfMapping(iProc)%nSendSurfSides * nValues + CALL MPI_ISEND( SurfSendBuf(iProc)%content & + , MessageSize & + , MPI_DOUBLE_PRECISION & + , iProc & + , 1209 & + , MPI_COMM_LEADERS_SURF & + , SendRequest(iProc) & + , IERROR) + END DO ! iProc + + ! Finish received number of sampling surfaces + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE + + IF (SurfMapping(iProc)%nSendSurfSides.NE.0) THEN + CALL MPI_WAIT(SendRequest(iProc),MPIStatus,IERROR) + IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) + END IF + + IF (SurfMapping(iProc)%nRecvSurfSides.NE.0) THEN + CALL MPI_WAIT(RecvRequest(iProc),MPIStatus,IERROR) + IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) + END IF + END DO ! iProc + + ! add data do my list + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE + + ! Only open recv buffer if we are expecting sides from this leader node + IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE + + iPos=0 + DO iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides + SideID = SurfMapping(iProc)%RecvSurfGlobalID(iSurfSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + + DO q=1,nSurfSample + DO p=1,nSurfSample + DO iSpec =1, nSpecies + ChemSampWall(iSpec,:,p,q,SurfSideID) = ChemSampWall(iSpec,:,p,q,SurfSideID) & + + SurfRecvBuf(iProc)%content(iPos+1:iPos+SurfChemVarNum) + iPos = iPos + SurfChemVarNum + END DO + END DO ! p = 0,nSurfSample + END DO ! q = 0,nSurfSample + END DO ! iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides + ! Nullify buffer + SurfRecvBuf(iProc)%content = 0. + END DO ! iProc +END IF #else firstSide = 1 lastSide = nSurfTotalSides #endif /*USE_MPI*/ +! calculate the coverage from the sampled values (also required in the MPI=OFF case) and nullify the ChemSampWall array +! in the case of MPI, ChemSampWall is associated to the _Shared variant DO iSide = firstSide, lastSide GlobalSideID = SurfSide2GlobalSide(SURF_SIDEID,iSide) locBCID = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,GlobalSideID)) DO iSpec =1, nSpecies IF (PartBound%LatticeVec(locBCID).GT.0.) THEN - ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall_Shared(iSpec,1,:,:,iSide) * PartBound%LatticeVec(locBCID)* & + ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall(iSpec,1,:,:,iSide) * PartBound%LatticeVec(locBCID)* & PartBound%LatticeVec(locBCID)/(PartBound%MolPerUnitCell(locBCID)*SurfSideArea_Shared(:,:,iSide)) ELSE - ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall_Shared(iSpec,1,:,:,iSide) / & + ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall(iSpec,1,:,:,iSide) / & (10.**(19)*SurfSideArea_Shared(:,:,iSide)) END IF - ChemWallProp(iSpec,2,:,:,iSide) = ChemWallProp(iSpec,2,:,:,iSide) + ChemSampWall_Shared(iSpec,2,:,:,iSide) + ChemWallProp(iSpec,2,:,:,iSide) = ChemWallProp(iSpec,2,:,:,iSide) + ChemSampWall(iSpec,2,:,:,iSide) END DO - ChemSampWall_Shared(:,:,:,:,iSide) = 0.0 + ChemSampWall(:,:,:,:,iSide) = 0.0 END DO -ChemSampWall = 0.0 + +#if USE_MPI CALL BARRIER_AND_SYNC(ChemSampWall_Shared_Win ,MPI_COMM_SHARED) CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win ,MPI_COMM_SHARED) +! communication of the coverage values to the halo region of compute nodes +! swap the receive/send array, send coverage values to the sides, where you would receive from +IF (myComputeNodeRank.EQ.0) THEN + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE -! prepare buffers for surf leader communication -!IF (myComputeNodeRank.EQ.0) THEN -! nValues = SurfSampSize*nSurfSample**2 -! ! Sampling of impact energy for each species (trans, rot, vib, elec), impact vector (x,y,z), angle and number: Add 9*nSpecies -! ! to the buffer length -! IF(CalcSurfaceImpact) nValues=nValues+9*nSpecies -! IF(nPorousBC.GT.0) nValues = nValues + 1 - -! ! open receive buffer -! DO iProc = 0,nSurfLeaders-1 -! ! ignore myself -! IF (iProc.EQ.mySurfRank) CYCLE - -! ! Only open recv buffer if we are expecting sides from this leader node -! IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE - -! ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc -! MessageSize = SurfMapping(iProc)%nRecvSurfSides * nValues -! CALL MPI_IRECV( SurfRecvBuf(iProc)%content & -! , MessageSize & -! , MPI_DOUBLE_PRECISION & -! , iProc & -! , 1209 & -! , MPI_COMM_LEADERS_SURF & -! , RecvRequest(iProc) & -! , IERROR) -! END DO ! iProc - -! ! build message -! DO iProc = 0,nSurfLeaders-1 -! ! Ignore myself -! IF (iProc .EQ. mySurfRank) CYCLE - -! ! Only assemble message if we are expecting sides to send to this leader node -! IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE - -! ! Nullify everything -! iPos = 0 -! SurfSendBuf(iProc)%content = 0. - -! DO iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides -! SideID = SurfMapping(iProc)%SendSurfGlobalID(iSurfSide) -! SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) - -! ! Assemble message -! DO q = 1,nSurfSample -! DO p = 1,nSurfSample -! SurfSendBuf(iProc)%content(iPos+1:iPos+SurfSampSize) = SampWallState_Shared(:,p,q,SurfSideID) -! iPos = iPos + SurfSampSize -! ! Sampling of impact energy for each species (trans, rot, vib), impact vector (x,y,z), angle and number of impacts -! IF (CalcSurfaceImpact) THEN -! ! Add average impact energy for each species (trans, rot, vib) -! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactEnergy_Shared(:,1,p,q,SurfSideID) -! iPos = iPos + nSpecies -! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactEnergy_Shared(:,2,p,q,SurfSideID) -! iPos=iPos + nSpecies -! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactEnergy_Shared(:,3,p,q,SurfSideID) -! iPos=iPos + nSpecies -! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactEnergy_Shared(:,4,p,q,SurfSideID) -! iPos=iPos + nSpecies - -! ! Add average impact vector (x,y,z) for each species -! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactVector_Shared(:,1,p,q,SurfSideID) -! iPos = iPos + nSpecies -! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactVector_Shared(:,2,p,q,SurfSideID) -! iPos = iPos + nSpecies -! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactVector_Shared(:,3,p,q,SurfSideID) -! iPos = iPos + nSpecies - -! ! Add average impact angle for each species -! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactAngle_Shared(:,p,q,SurfSideID) -! iPos = iPos + nSpecies - -! ! Add number of particle impacts -! SurfSendBuf(iProc)%content(iPos+1:iPos+nSpecies) = SampWallImpactNumber_Shared(:,p,q,SurfSideID) -! iPos = iPos + nSpecies -! END IF ! CalcSurfaceImpact -! END DO ! p=0,nSurfSample -! END DO ! q=0,nSurfSample -! IF(nPorousBC.GT.0) THEN -! SurfSendBuf(iProc)%content(iPos+1:iPos+1) = SampWallPumpCapacity_Shared(SurfSideID) -! iPos = iPos + 1 -! END IF - -! SampWallState_Shared(:,:,:,SurfSideID)=0. -! ! Sampling of impact energy for each species (trans, rot, vib), impact vector (x,y,z), angle and number of impacts -! IF (CalcSurfaceImpact) THEN -! SampWallImpactEnergy_Shared(:,:,:,:,SurfSideID) = 0. -! SampWallImpactVector_Shared(:,:,:,:,SurfSideID) = 0. -! SampWallImpactAngle_Shared (:,:,:,SurfSideID) = 0. -! SampWallImpactNumber_Shared(:,:,:,SurfSideID) = 0. -! END IF ! CalcSurfaceImpact -! IF(nPorousBC.GT.0) THEN -! SampWallPumpCapacity_Shared(SurfSideID) = 0. -! END IF -! END DO ! iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides -! END DO - -! ! send message -! DO iProc = 0,nSurfLeaders-1 -! ! ignore myself -! IF (iProc.EQ.mySurfRank) CYCLE - -! ! Only open recv buffer if we are expecting sides from this leader node -! IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE - -! ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc -! MessageSize = SurfMapping(iProc)%nSendSurfSides * nValues -! CALL MPI_ISEND( SurfSendBuf(iProc)%content & -! , MessageSize & -! , MPI_DOUBLE_PRECISION & -! , iProc & -! , 1209 & -! , MPI_COMM_LEADERS_SURF & -! , SendRequest(iProc) & -! , IERROR) -! END DO ! iProc - -! ! Finish received number of sampling surfaces -! DO iProc = 0,nSurfLeaders-1 -! ! ignore myself -! IF (iProc.EQ.mySurfRank) CYCLE - -! IF (SurfMapping(iProc)%nSendSurfSides.NE.0) THEN -! CALL MPI_WAIT(SendRequest(iProc),MPIStatus,IERROR) -! IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) -! END IF - -! IF (SurfMapping(iProc)%nRecvSurfSides.NE.0) THEN -! CALL MPI_WAIT(RecvRequest(iProc),MPIStatus,IERROR) -! IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) -! END IF -! END DO ! iProc - -! ! add data do my list -! DO iProc = 0,nSurfLeaders-1 -! ! ignore myself -! IF (iProc.EQ.mySurfRank) CYCLE - -! ! Only open recv buffer if we are expecting sides from this leader node -! IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE - -! iPos=0 -! DO iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides -! SideID = SurfMapping(iProc)%RecvSurfGlobalID(iSurfSide) -! SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) - -! DO q=1,nSurfSample -! DO p=1,nSurfSample -! SampWallState_Shared(:,p,q,SurfSideID) = SampWallState_Shared(:,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+SurfSampSize) -! iPos = iPos + SurfSampSize -! ! Sampling of impact energy for each species (trans, rot, vib), impact vector (x,y,z) and angle -! IF(CalcSurfaceImpact)THEN -! ! Add average impact energy for each species (trans, rot, vib) -! SampWallImpactEnergy_Shared(:,1,p,q,SurfSideID) = SampWallImpactEnergy_Shared(:,1,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) -! iPos = iPos + nSpecies -! SampWallImpactEnergy_Shared(:,2,p,q,SurfSideID) = SampWallImpactEnergy_Shared(:,2,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) -! iPos = iPos + nSpecies -! SampWallImpactEnergy_Shared(:,3,p,q,SurfSideID) = SampWallImpactEnergy_Shared(:,3,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) -! iPos = iPos + nSpecies -! SampWallImpactEnergy_Shared(:,4,p,q,SurfSideID) = SampWallImpactEnergy_Shared(:,4,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) -! iPos = iPos + nSpecies -! ! Add average impact vector (x,y,z) for each species -! SampWallImpactVector_Shared(:,1,p,q,SurfSideID) = SampWallImpactVector_Shared(:,1,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) -! iPos = iPos + nSpecies -! SampWallImpactVector_Shared(:,2,p,q,SurfSideID) = SampWallImpactVector_Shared(:,2,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) -! iPos = iPos + nSpecies -! SampWallImpactVector_Shared(:,3,p,q,SurfSideID) = SampWallImpactVector_Shared(:,3,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) -! iPos = iPos + nSpecies -! ! Add average impact angle for each species -! SampWallImpactAngle_Shared(:,p,q,SurfSideID) = SampWallImpactAngle_Shared(:,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) -! iPos = iPos + nSpecies -! ! Add number of particle impacts -! SampWallImpactNumber_Shared(:,p,q,SurfSideID) = SampWallImpactNumber_Shared(:,p,q,SurfSideID) & -! + SurfRecvBuf(iProc)%content(iPos+1:iPos+nSpecies) -! iPos = iPos + nSpecies -! END IF ! CalcSurfaceImpact -! END DO ! p = 0,nSurfSample -! END DO ! q = 0,nSurfSample -! IF(nPorousBC.GT.0) THEN -! SampWallPumpCapacity_Shared(SurfSideID) = SurfRecvBuf(iProc)%content(iPos+1) -! iPos = iPos + 1 -! END IF -! END DO ! iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides -! ! Nullify buffer -! SurfRecvBuf(iProc)%content = 0. -! END DO ! iProc -!END IF + ! Only open recv buffer if we would have sent to this leader node (thus SendSurfSides) + IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE + + ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc + MessageSize = SurfMapping(iProc)%nSendSurfSides * nValues + CALL MPI_IRECV( SurfSendBuf(iProc)%content & + , MessageSize & + , MPI_DOUBLE_PRECISION & + , iProc & + , 1209 & + , MPI_COMM_LEADERS_SURF & + , RecvRequest(iProc) & + , IERROR) + END DO ! iProc + + ! build message + DO iProc = 0,nSurfLeaders-1 + ! Ignore myself + IF (iProc .EQ. mySurfRank) CYCLE + + ! Only assemble message if we would have received from this leader node + IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE + + ! Nullify everything + iPos = 0 + SurfRecvBuf(iProc)%content = 0. + + DO iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides + ! Get the right side id through the receive global id mapping + SideID = SurfMapping(iProc)%RecvSurfGlobalID(iSurfSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + ! Assemble message + DO q = 1,nSurfSample + DO p = 1,nSurfSample + DO iSpec =1, nSpecies + SurfRecvBuf(iProc)%content(iPos+1:iPos+SurfChemVarNum) = ChemWallProp_Shared(iSpec,:,p,q,SurfSideID) + iPos = iPos + SurfChemVarNum + END DO + END DO ! p=0,nSurfSample + END DO ! q=0,nSurfSample + END DO ! iSurfSide=1,SurfMapping(iProc)%nRecvSurfSides + END DO + + ! send message + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE + + ! Only open recv buffer if we are expecting sides from this leader node + IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE + + ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc + MessageSize = SurfMapping(iProc)%nRecvSurfSides * nValues + CALL MPI_ISEND( SurfRecvBuf(iProc)%content & + , MessageSize & + , MPI_DOUBLE_PRECISION & + , iProc & + , 1209 & + , MPI_COMM_LEADERS_SURF & + , SendRequest(iProc) & + , IERROR) + END DO ! iProc + + ! Finish received number of sampling surfaces + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE + + IF (SurfMapping(iProc)%nRecvSurfSides.NE.0) THEN + CALL MPI_WAIT(SendRequest(iProc),MPIStatus,IERROR) + IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) + END IF + + IF (SurfMapping(iProc)%nSendSurfSides.NE.0) THEN + CALL MPI_WAIT(RecvRequest(iProc),MPIStatus,IERROR) + IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) + END IF + END DO ! iProc + + ! add data do my list + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE + + ! Only open recv buffer if we would have sent this leader node + IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE + + iPos=0 + DO iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides + SideID = SurfMapping(iProc)%SendSurfGlobalID(iSurfSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + ! Store values in the halo regions + DO q = 1,nSurfSample + DO p = 1,nSurfSample + DO iSpec =1, nSpecies + ChemWallProp_Shared(iSpec,:,p,q,SurfSideID) = SurfSendBuf(iProc)%content(iPos+1:iPos+SurfChemVarNum) + iPos = iPos + SurfChemVarNum + END DO + END DO ! p=0,nSurfSample + END DO ! q=0,nSurfSample + END DO ! iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides + ! Nullify buffer + SurfSendBuf(iProc)%content = 0. + END DO ! iProc +END IF ! ensure synchronization on compute node -!CALL BARRIER_AND_SYNC(SampWallState_Shared_Win ,MPI_COMM_SHARED) +END ASSOCIATE +CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win ,MPI_COMM_SHARED) +#endif /*USE_MPI*/ END SUBROUTINE ExchangeChemSurfData diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index 5c4b15aee..43d15fa3f 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -14,7 +14,7 @@ MODULE MOD_SurfaceModel_Chemistry !=================================================================================================================================== -! Initialization of chemical module +!> !=================================================================================================================================== ! MODULES ! IMPLICIT VARIABLE HANDLING @@ -32,7 +32,7 @@ MODULE MOD_SurfaceModel_Chemistry CONTAINS !================================================================================================================================== -!> Define parameters for DSMC (Direct Simulation Monte Carlo) +!> !================================================================================================================================== SUBROUTINE DefineParametersSurfaceChemistry() ! MODULES @@ -60,6 +60,8 @@ SUBROUTINE DefineParametersSurfaceChemistry() 'Energy accomodation coefficient', '0.' , numberedmulti=.TRUE.) CALL prms%CreateIntOption( 'Surface-Reaction[$]-Inhibition','Inhibition/Coadsorption behaviour due to other reactions', & '0', numberedmulti=.TRUE.) +CALL prms%CreateIntOption( 'Surface-Reaction[$]-Promotion','Promotion/Coadsorption behaviour due to other reactions', & + '0', numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-StickingCoefficient', & 'Ratio of adsorbed to impinging particles on a reactive surface', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-DissOrder', & @@ -78,12 +80,14 @@ SUBROUTINE DefineParametersSurfaceChemistry() 'Arrhenius energy for the reaction/desorption', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-FormationEnergy', & 'TODO', '0.' , numberedmulti=.TRUE.) +CALL prms%CreateLogicalOption( 'Surface-Diffusion', 'Diffusion along the surface', '.FALSE.') +CALL prms%CreateLogicalOption( 'Surface-TotalDiffusion', 'Diffusion along the surface', '.FALSE.') CALL prms%CreateIntOption( 'Surface-Reaction[$]-NumOfBoundaries', & 'Num of boundaries for surface reaction.', & numberedmulti=.TRUE.) CALL prms%CreateIntArrayOption( 'Surface-Reaction[$]-Boundaries' & ,'Array of boundary indices of surface reaction.' & - ,numberedmulti=.TRUE.) + ,numberedmulti=.TRUE.) END SUBROUTINE DefineParametersSurfaceChemistry SUBROUTINE SurfaceModel_Chemistry_Init() @@ -137,6 +141,8 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%Products = 0 ALLOCATE(SurfChemReac%Inhibition(SurfChemReac%NumOfReact)) SurfChemReac%Inhibition = 0 +ALLOCATE(SurfChemReac%Promotion(SurfChemReac%NumOfReact)) +SurfChemReac%Promotion = 0 ALLOCATE(SurfChemReac%EForm(SurfChemReac%NumOfReact)) SurfChemReac%EForm = 0.0 ALLOCATE(SurfChemReac%EReact(SurfChemReac%NumOfReact)) @@ -146,9 +152,11 @@ SUBROUTINE SurfaceModel_Chemistry_Init() ALLOCATE(SurfChemReac%HeatAccomodation(SurfChemReac%NumOfReact)) SurfChemReac%HeatAccomodation = 0.0 ALLOCATE(SurfChemReac%BoundisChemSurf(nPartBound)) +SurfChemReac%BoundisChemSurf = .FALSE. ALLOCATE(SurfChemReac%NumOfBounds(SurfChemReac%NumOfReact)) ALLOCATE(SurfChemReac%BoundMap(SurfChemReac%NumOfReact)) ALLOCATE(SurfChemReac%PSMap(nPartBound)) +SurfChemReac%CatBoundNum = 0 ! Surface map DO iBound=1, nPartBound @@ -185,17 +193,22 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%ArrheniusEnergy = 0.0 ALLOCATE(SurfChemReac%Prefactor(SurfChemReac%NumOfReact)) SurfChemReac%Prefactor = 0.0 - + +! Diffusion +SurfChemReac%Diffusion = GETLOGICAL('Surface-Diffusion', '.FALSE.') +SurfChemReac%TotDiffusion = GETLOGICAL('Surface-TotalDiffusion', '.FALSE.') + DO iReac = 1, ReadInNumOfReact WRITE(UNIT=hilf,FMT='(I0)') iReac SurfChemReac%ReactType(iReac) = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-Type')) SurfChemReac%Reactants(iReac,:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Reactants',2,'0,0') SurfChemReac%Products(iReac,:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Products',2,'0,0') - SurfChemReac%Inhibition(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-Inhibition','0') + SurfChemReac%Inhibition(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-Inhibition','0') + SurfChemReac%Promotion(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-Promotion','0') SurfChemReac%EReact(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-ReactHeat','0.') SurfChemReac%EScale(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-HeatScaling','0.') - SurfChemReac%HeatAccomodation(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EnergyAccomodation','0.') + SurfChemReac%HeatAccomodation(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EnergyAccomodation','1.') SurfChemReac%NumOfBounds(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-NumOfBoundaries','0') IF (SurfChemReac%NumOfBounds(iReac).EQ.0) THEN CALL abort(& @@ -209,13 +222,13 @@ SUBROUTINE SurfaceModel_Chemistry_Init() PartBound%SurfaceModel(SurfChemReac%BoundMap(iReac)%Boundaries) = 20 DO iReac2 = 1, SurfChemReac%NumOfBounds(iReac) - SurfChemReac%BoundisChemSurf(SurfChemReac%BoundMap(iReac)%Boundaries(iReac2)) = .TRUE. + SurfChemReac%BoundisChemSurf(SurfChemReac%BoundMap(iReac)%Boundaries(iReac2)) = .TRUE. END DO ! Select pure surface reactions DO iVal = 1, SurfChemReac%NumOfBounds(iReac) iBound = SurfChemReac%BoundMap(iReac)%Boundaries(iVal) - SurfChemReac%PSMap(iBound)%PureSurfReac(iReac) = .TRUE. + SurfChemReac%PSMap(iBound)%PureSurfReac(iReac) = .TRUE. END DO SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) @@ -229,7 +242,7 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%C_a(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Ca','0.') SurfChemReac%C_b(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Cb','0.') SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','0.') - SurfChemReac%E_initial(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','1.') + SurfChemReac%E_initial(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') SurfChemReac%DissOrder(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-DissOrder','1.') ! Convert the prefactor from absolute to coverage values for associative desorption @@ -260,11 +273,19 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%EForm(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-FormationEnergy','0') END DO +!Determine the number of boundaries with a surface reaction on them +DO iBound = 1, nPartBound + IF (SurfChemReac%BoundisChemSurf(iBound)) THEN + SurfChemReac%CatBoundNum = SurfChemReac%CatBoundNum + 1 + END IF +END DO ALLOCATE( ChemSampWall(1:nSpecies,2,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) +ChemSampWall = 0.0 ALLOCATE(ChemDesorpWall(1:nSpecies,2,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) ChemDesorpWall = 0.0 -ChemSampWall = 0.0 +ALLOCATE(ChemCountReacWall(1:ReadInNumOfReact,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) +ChemCountReacWall = 0.0 #if USE_MPI CALL Allocate_Shared((/nSpecies,2,nSurfSample,nSurfSample,nComputeNodeSurfTotalSides/),ChemSampWall_Shared_Win,ChemSampWall_Shared) CALL MPI_WIN_LOCK_ALL(0,ChemSampWall_Shared_Win,IERROR) diff --git a/src/particles/surfacemodel/surfacemodel_init.f90 b/src/particles/surfacemodel/surfacemodel_init.f90 index 668273a05..31884c566 100644 --- a/src/particles/surfacemodel/surfacemodel_init.f90 +++ b/src/particles/surfacemodel/surfacemodel_init.f90 @@ -211,14 +211,16 @@ SUBROUTINE FinalizeSurfaceModel() ADEALLOCATE(ChemSampWall_Shared) ADEALLOCATE(ChemWallProp_Shared) SDEALLOCATE(ChemDesorpWall) + SDEALLOCATE(ChemCountReacWall) SDEALLOCATE(ChemSampWall) #else SDEALLOCATE(ChemDesorpWall) + SDEALLOCATE(ChemCountReacWall) SDEALLOCATE(ChemSampWall) SDEALLOCATE(ChemWallProp) #endif -SDEALLOCATE(SurfChemReac%SFMap) +SDEALLOCATE(SurfChemReac%Surfaceflux) END SUBROUTINE FinalizeSurfaceModel diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index 63987565a..bc82fb81d 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -25,7 +25,7 @@ MODULE MOD_SurfaceModel !----------------------------------------------------------------------------------------------------------------------------------- ! Private Part --------------------------------------------------------------------------------------------------------------------- ! Public Part ---------------------------------------------------------------------------------------------------------------------- -PUBLIC :: SurfaceModel, MaxwellScattering, PerfectReflection, DiffuseReflection, SpeciesSwap +PUBLIC :: SurfaceModelling, MaxwellScattering, PerfectReflection, DiffuseReflection, SpeciesSwap !=================================================================================================================================== CONTAINS @@ -41,17 +41,18 @@ MODULE MOD_SurfaceModel !> 4.) PIC ONLY: Deposit charges on dielectric surface (when activated), if these were removed/changed in SpeciesSwap or SurfaceModel !> 5.) Count and sample the properties AFTER the surface interaction !=================================================================================================================================== -SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) +SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) ! MODULES USE MOD_Globals ,ONLY: abort,UNITVECTOR,OrthoNormVec #if USE_MPI USE MOD_Globals ,ONLY: myrank #endif /*USE_MPI*/ -USE MOD_Globals_Vars ,ONLY : PI, BoltzmannConst +USE MOD_Globals_Vars ,ONLY: PI, BoltzmannConst +USE MOD_TimeDisc_Vars ,ONLY: dt USE MOD_Particle_Vars ,ONLY: PartSpecies,WriteMacroSurfaceValues,Species,usevMPF,PartMPF USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod, TrackInfo USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, dXiEQ_SurfSample,SurfSideArea_Shared -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac , ChemWallProp, ChemSampWall !, RecombModel +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac , ChemWallProp, ChemSampWall, ChemCountReacWall !, RecombModel USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared, BoundsOfElem_Shared USE MOD_Particle_Vars ,ONLY: PDM, LastPartPos,PartState USE MOD_Particle_Vars ,ONLY: UseCircularInflow @@ -61,15 +62,11 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) USE MOD_SurfaceModel_Tools ,ONLY: SurfaceModel_ParticleEmission, GetWallTemperature, SurfaceModel_EnergyAccommodation USE MOD_SEE ,ONLY: SecondaryElectronEmission USE MOD_SurfaceModel_Porous ,ONLY: PorousBoundaryTreatment -USE MOD_SurfaceModel_Chemistry -USE MOD_DSMC_Vars ,ONLY: SpecDSMC USE MOD_Particle_Boundary_Tools ,ONLY: CalcWallSample -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly -USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr USE MOD_PICDepo_Tools ,ONLY: DepositParticleOnNodes USE MOD_part_operations ,ONLY: RemoveParticle, CreateParticle USE MOD_part_tools ,ONLY: CalcRadWeightMPF, VeloFromDistribution, GetParticleWeight -USE MOD_TimeDisc_Vars ,ONLY: dt ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -105,23 +102,21 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) REAL :: S_0, StickCoeff REAL :: EqConstant, DissOrder REAL :: WallTemp -REAL :: nu, E_act, Rate, Prob +REAL :: nu, E_act, Rate, Prob, Prob_new, Prob_Scaled REAL :: NewPos(1:3) -REAL :: SurfMol +REAL :: SurfMol, AdCountIter REAL :: tang1(1:3), tang2(1:3), WallVelo(1:3), BoundsOfElemCenter(1:3), NewVelo(3) REAL :: AdsHeat, ReacHeat, BetaCoeff REAL :: partWeight REAL,PARAMETER :: eps=1e-6 REAL,PARAMETER :: eps2=1.0-eps INTEGER :: speciesID -INTEGER :: iReac_Ads, iReac_ER -INTEGER :: iReac, iValProd, iProd -INTEGER :: iReactant, iValReac +INTEGER :: iReac_Ads, iReac_ER, iReac_ER_new +INTEGER :: iReac, iValProd, iProd, iReactant, iValReac INTEGER :: iCoadsReac, iCoadsSpec -INTEGER :: NewPartID +INTEGER :: NewPartID, iNewPart INTEGER :: SurfNumOfReac -INTEGER :: iNewPart -INTEGER :: SurfNumOfRecomb, SubP, SubQ +INTEGER :: SubP, SubQ !=================================================================================================================================== iBC = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) @@ -198,15 +193,22 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) InteractionType = 'None' StickCoeff = 0.0 Prob = 0.0 + iReac_ER = 0 speciesID = PartSpecies(PartID) SurfNumOfReac = SurfChemReac%NumOfReact + ! Determination of the particle weights and MPF + partWeight = GetParticleWeight(PartID) + IF(.NOT.(usevMPF.OR.RadialWeighting%DoRadialWeighting)) THEN + partWeight = partWeight * Species(speciesID)%MacroParticleFactor + END IF + ! Calculate the number of molecules on the surface IF(PartBound%LatticeVec(locBCID).GT.0.) THEN ! Surface molecules in dependence of the occupancy of the unit cell SurfMol = PartBound%MolPerUnitCell(locBCID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & - /(PartBound%LatticeVec(locBCID)*PartBound%LatticeVec(locBCID)) + /(PartBound%LatticeVec(locBCID)*PartBound%LatticeVec(locBCID)) ELSE ! Alternative calculation by average number of molecules per area for a monolayer SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) @@ -232,6 +234,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) Coverage = ChemWallProp(speciesID,1,SubP,SubQ,SurfSideID) END IF + ! Definition of the variables MaxCoverage = PartBound%MaxCoverage(locBCID,speciesID) TotalCoverage = SUM(ChemWallProp(:,1,SubP, SubQ, SurfSideID)) @@ -241,7 +244,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) StickCoeff = SurfChemReac%StickCoeff(iReac) ! Determine the heat of adsorption in dependence of the coverage [J] - AdsHeat = (SurfChemReac%EReact(iReac) - Coverage * SurfChemReac%EScale(iReac)) /(6.022 * 10.0**(20)) + AdsHeat = (SurfChemReac%EReact(iReac) - Coverage * SurfChemReac%EScale(iReac)) * BoltzmannConst ! Theta = free surface sites required for the adsorption ! Determination of possible coadsorption processes @@ -251,6 +254,12 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) CoAds_Coverage = ChemWallProp(iCoadsSpec,1,SubP, SubQ, SurfSideID) CoAds_MaxCov = PartBound%MaxCoverage(locBCID,iCoadsSpec) Theta = 1.0 - Coverage/MaxCoverage - CoAds_Coverage/CoAds_MaxCov + ELSE IF(SurfChemReac%Promotion(iReac).NE.0) THEN + iCoadsReac = SurfChemReac%Promotion(iReac) + iCoadsSpec = SurfChemReac%Reactants(iCoadsReac,1) + CoAds_Coverage = ChemWallProp(iCoadsSpec,1,SubP, SubQ, SurfSideID) + CoAds_MaxCov = PartBound%MaxCoverage(locBCID,iCoadsSpec) + Theta = 1.0 - Coverage/MaxCoverage + CoAds_Coverage/CoAds_MaxCov ELSE Theta = 1.0 - Coverage/MaxCoverage END IF @@ -269,8 +278,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) ! Eley-Rideal reaction mechanism CASE('ER') - IF(ANY(SurfChemReac%Reactants(iReac,:).EQ.speciesID)) THEN - iReac_ER = iReac + IF(ANY(SurfChemReac%Reactants(iReac,:).EQ.speciesID)) THEN ! Definition of the variables WallTemp = PartBound%WallTemp(locBCID) @@ -278,51 +286,95 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) E_act = SurfChemReac%ArrheniusEnergy(iReac) Rate = SurfChemReac%Rate(iReac) BetaCoeff = SurfChemReac%HeatAccomodation(iReac) - ReacHeat = SurfChemReac%EReact(iReac)/(6.022*10.0**(20)) - + ! Check for the coverage values for the reactant adsorbed on the surface - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) - END IF - END DO - - ! Coverage values in terms of the surface atoms or in terms of the surface area? - Rate = nu * Coverage * exp(-E_act*1000/(8.314*WallTemp)) ! Energy in J/mol + IF(ANY(SurfChemReac%Reactants(iReac,:).NE.speciesID)) THEN + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) + AdCountIter = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) + END IF + END DO + ELSE + Coverage = ChemWallProp(speciesID,1,SubP, SubQ, SurfSideID) + AdCountIter = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) + END IF + + ReacHeat = (SurfChemReac%EReact(iReac) - Coverage * SurfChemReac%EScale(iReac)) * BoltzmannConst + + ! Bias free calculation for multiple reaction channels + IF(iReac_ER.EQ.0) THEN + iReac_ER = iReac + Rate = nu * Coverage * exp(-E_act/WallTemp) ! Energy in K Prob = Rate * dt - END IF + ! Comparison of adsorbate numbers to reactant particle weights + IF(partWeight.GT.(Coverage*SurfMol)) THEN + Prob = 0.0 + ! Test for the changes during the iteration + ELSE IF ((Coverage*SurfMol + AdCountIter - partWeight).LT.0.0) THEN + Prob = 0.0 + END IF + + ELSE ! iReac.NE.0 + iReac_ER_new = iReac + Rate = nu * Coverage * exp(-E_act/WallTemp) ! Energy in K + Prob_new = Rate * dt + + ! Comparison of adsorbate numbers to reactant particle weights + IF(partWeight.GT.(Coverage*SurfMol)) THEN + Prob_new = 0.0 + ! Test for the changes during the iteration + ELSE IF ((Coverage*SurfMol + AdCountIter - partWeight).LT.0.0) THEN + Prob_new = 0.0 + END IF + + + ! determine most likely reaction channel + CALL RANDOM_NUMBER(RanNum) + + IF(Prob_new.GT.Prob) THEN + iReac_ER = iReac_ER_new + Prob = Prob_new + ELSE IF(Prob_new.EQ.Prob) THEN + IF(RanNum.GT.0.5) THEN + iReac_ER = iReac_ER_new + Prob = Prob_new + END IF + END IF + END IF !iReac.EQ.0 + + END IF !iReac.EQ.speciesID CASE DEFAULT - END SELECT + END SELECT !Surface reaction - END DO + END DO !iReac CALL RANDOM_NUMBER(RanNum) - IF(Prob.GT.StickCoeff) THEN - IF(Prob.GT.RanNum) THEN - InteractionType = 'ER' - iReac = iReac_ER - END IF - ELSE IF(StickCoeff.GT.Prob) THEN - IF (StickCoeff.GT.RanNum) THEN - InteractionType = 'A' - iReac = iReac_Ads + ! Rescale the probability (ER-Reaction) and the sticking coefficient (adsorption) + IF ((Prob+StickCoeff).GT.0.) THEN + Prob_Scaled = Prob/(Prob + StickCoeff) + IF(Prob_Scaled.GT.RanNum) THEN + IF(Prob.GT.RanNum) THEN + InteractionType = 'ER' + iReac = iReac_ER + END IF + ELSE + IF (StickCoeff.GT.RanNum) THEN + InteractionType = 'A' + iReac = iReac_Ads + END IF END IF END IF - + SELECT CASE(TRIM(InteractionType)) CASE('A') CALL RemoveParticle(PartID) - MPF = Species(speciesID)%MacroParticleFactor - partWeight = GetParticleWeight(PartID) - IF(.NOT.(usevMPF.OR.RadialWeighting%DoRadialWeighting)) THEN - partWeight = partWeight * Species(speciesID)%MacroParticleFactor - END IF ! Calculate the heat flux on the boundary from the adsorption energy ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID)+ AdsHeat * partWeight @@ -338,21 +390,18 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) + DissOrder * partWeight END IF + ! Count the number of surface reactions + ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + 1. + CASE('ER') CALL RemoveParticle(PartID) - MPF = Species(speciesID)%MacroParticleFactor - partWeight = GetParticleWeight(PartID) - IF(.NOT.(usevMPF.OR.RadialWeighting%DoRadialWeighting)) THEN - partWeight = partWeight * Species(speciesID)%MacroParticleFactor - END IF ! Heat flux on the surface created by the reaction ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) + ReacHeat * partWeight * BetaCoeff - + ! Create the Eley-Rideal reaction product - TempErgy = SQRT(2*BoltzmannConst*WallTemp/Species(speciesID)%MassIC) - WallVelo = PartBound%WallVelo(1:3,locBCID) + WallVelo = PartBound%WallVelo(1:3,locBCID) CALL OrthoNormVec(n_loc,tang1,tang2) @@ -376,25 +425,28 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) CALL CreateParticle(iProd,NewPos(1:3),GlobalElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID, NewMPF=partWeight) - IF (SpecDSMC(iProd)%PolyatomicMol) THEN - CALL DSMC_SetInternalEnr_Poly(iProd,locBCID,NewPartID,4,iReac) - ELSE - CALL DSMC_SetInternalEnr_LauxVFD(iProd,locBCID,NewPartID,4,iReac) - END IF + CALL DSMC_SetInternalEnr(iProd,locBCID,NewPartID,4,iReac) END IF END DO ! Update the number of adsorbed molecules - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) - 1.0*partWeight - END IF - END DO - + IF(ANY(SurfChemReac%Reactants(iReac,:).NE.speciesID)) THEN + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) - partWeight + END IF + END DO + ELSE + ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) - partWeight + END IF + + ! Count the number of surface reactions + ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + 1. + CASE DEFAULT CALL MaxwellScattering(PartID,SideID,n_Loc) - END SELECT + END SELECT !Interaction Type !----------------------------------------------------------------------------------------------------------------------------------- CASE (SEE_MODELS_ID) @@ -490,7 +542,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) CALL CalcWallSample(PartID,SurfSideID,'new',SurfaceNormal_opt=n_loc) END IF -END SUBROUTINE SurfaceModel +END SUBROUTINE SurfaceModelling SUBROUTINE MaxwellScattering(PartID,SideID,n_loc,SpecularReflectionOnly_opt) diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90 index 0d6c5eb0d..13e70ec60 100644 --- a/src/particles/surfacemodel/surfacemodel_vars.f90 +++ b/src/particles/surfacemodel/surfacemodel_vars.f90 @@ -57,10 +57,6 @@ MODULE MOD_SurfaceModel_Vars LOGICAL, ALLOCATABLE :: PureSurfReac(:) END TYPE -TYPE tSurfFluxMap - TYPE(typeSurfaceflux),ALLOCATABLE :: Surfaceflux(:) -END TYPE - LOGICAL :: DoChemSurface TYPE tSurfReactions @@ -73,8 +69,9 @@ MODULE MOD_SurfaceModel_Vars INTEGER, ALLOCATABLE :: Reactants(:,:) ! Reactants: indices of the species starting the reaction [NumOfReact,3] INTEGER, ALLOCATABLE :: Products(:,:) ! Products: indices of the species resulting from the reaction [NumOfReact,4] INTEGER, ALLOCATABLE :: Inhibition(:) ! Inhibition reaction + INTEGER, ALLOCATABLE :: Promotion(:) ! Promoting reaction INTEGER, ALLOCATABLE :: NumOfBounds(:) - REAL, ALLOCATABLE :: EReact(:) ! Energy exchange with the surface + REAL, ALLOCATABLE :: EReact(:) ! Energy exchange with the surface REAL, ALLOCATABLE :: EScale(:) ! dependence of the energy values on the coverage REAL, ALLOCATABLE :: HeatAccomodation(:) ! beta coefficient, determining the heat flux on the surface !REAL, ALLOCATABLE :: ReactProb(:) @@ -96,14 +93,17 @@ MODULE MOD_SurfaceModel_Vars REAL, ALLOCATABLE :: Prefactor(:) REAL, ALLOCATABLE :: ArrheniusEnergy(:) LOGICAL, ALLOCATABLE :: BoundisChemSurf(:) + LOGICAL :: Diffusion ! Activates instantaneous diffussion over the whole boundary + LOGICAL :: TotDiffusion ! Activates instantaneous diffussion over all boundaries + INTEGER :: CatBoundNum TYPE(tBoundMap), ALLOCATABLE :: BoundMap(:) - TYPE(tPureSurf), ALLOCATABLE :: PSMap(:) ! MAp for reactions occurring only on the surface + TYPE(tPureSurf), ALLOCATABLE :: PSMap(:) ! Map for reactions occurring only on the surface TYPE(tCollCaseInfo), ALLOCATABLE :: CollCaseInfo(:) ! Information of collision cases (nCase) - TYPE(tSurfFluxMap), ALLOCATABLE :: SFMap(:) + TYPE(tSurfaceflux), ALLOCATABLE :: SurfaceFlux(:) ! Surface flux data END TYPE TYPE(tSurfReactions) :: SurfChemReac -TYPE typeSurfaceflux +TYPE tSurfaceflux INTEGER :: BC CHARACTER(30) :: velocityDistribution REAL :: VeloIC @@ -130,16 +130,17 @@ MODULE MOD_SurfaceModel_Vars END TYPE TYPE tSurfFluxSubSideData - REAL :: projFak - REAL :: a_nIn + REAL :: projFak REAL :: Velo_t1 - REAL :: Velo_t2 - REAL :: nVFR - REAL :: Dmax + REAL :: Velo_t2 + REAL :: Dmax + REAL,ALLOCATABLE :: nVFR(:) + REAL,ALLOCATABLE :: a_nIn(:) END TYPE tSurfFluxSubSideData REAL,ALLOCATABLE :: ChemSampWall(:,:,:,:,:) REAL,ALLOCATABLE :: ChemDesorpWall(:,:,:,:,:) +REAL,ALLOCATABLE :: ChemCountReacWall(:,:,:,:,:) REAL,ALLOCPOINT :: ChemWallProp(:,:,:,:,:) #if USE_MPI diff --git a/src/timedisc/timedisc_TimeStep_DSMC.f90 b/src/timedisc/timedisc_TimeStep_DSMC.f90 index 741d6148f..b1cccf1b3 100644 --- a/src/timedisc/timedisc_TimeStep_DSMC.f90 +++ b/src/timedisc/timedisc_TimeStep_DSMC.f90 @@ -87,6 +87,7 @@ SUBROUTINE TimeStep_DSMC() IF (time.GT.0.0) THEN CALL ParticleSurfChemFlux() + CALL ParticleSurfDiffusion() END IF END IF From f75144f0572274cd590dd7265d248a0c9978e9db Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Mon, 17 Oct 2022 15:50:22 +0200 Subject: [PATCH 018/222] species database: first improvements --- tools/species_database/DSMC.ini | 3 +- tools/species_database/Species_Database.h5 | Bin 53408 -> 53888 bytes .../create_species_database.py | 53 +++++++++++++----- 3 files changed, 41 insertions(+), 15 deletions(-) diff --git a/tools/species_database/DSMC.ini b/tools/species_database/DSMC.ini index cad85334f..65a5bac7d 100755 --- a/tools/species_database/DSMC.ini +++ b/tools/species_database/DSMC.ini @@ -1,4 +1,3 @@ - ! =============================================================================== ! ! Species1, H2 ! =============================================================================== ! @@ -134,4 +133,4 @@ DSMC-Reaction2-Products = (/1,2,2,5/) ! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H2 + HIon1 DSMC-Reaction3-ReactionModel = XSec DSMC-Reaction3-Reactants = (/1,6,0/) -DSMC-Reaction3-Products = (/1,1,5,0/) \ No newline at end of file +DSMC-Reaction3-Products = (/1,1,5,0/) diff --git a/tools/species_database/Species_Database.h5 b/tools/species_database/Species_Database.h5 index e0b2353eeaa49ca3bb8549cd6b6d3f13104cdfff..7bf38ebf5b01355521c711af32f88052619c7b1c 100644 GIT binary patch delta 3009 zcma)8YfKbZ6rQ=fW=GUfVO@DSR(?<;%_>`6K?}Zcl?v+vi}+gcwNk`Y>DEHgK|!|^ z?5;koMQcri6isXPM`QTWG`3C5rfFKz7}NWhVOf$U-5-1JIdkrJ zUf;PhXU|0`UqpE`kn&WWmKzl}o})i_GU@}h`!EkKgA~{wGsqj{g)e)*Po&dNnYt+;T4cM>zUA+~ay};AcNOfDwf1EL~}H>XPYA2&PjD- zOPoZX2a}mu2R|%;L<7%_;iv|FHLVpr%$5_l5m*~0Ye58bZqOshLqcC*kx{ zK}aqYy&8^rBu;H|7-ukz;S3Jp;F1iF=wbmr2LWTWkKsqRwCj$ zGixHenrWsx8a3c(kmgnkC^Qe67M(%XJea=NvS2_1(T8FrxQY4Tqyo0l?e^Q4+`7!C{smIGjDiJ$ zTlqN3&Smh_=9a<+!=l{3v=oKr!w*X>$XcMPvv|lWkPbewMq-Dn!1Q_y+=@s$XCae4 zcD81)g&Wu!X=f{AvQyJ*?l@N!)lXm(i}%4j%y4j@PrXQzGRP~LMpD(W2>I>MQ|K1M zesPxy!CMqfI@MBCk3tI}#cn~$3fcj?kW{jUo!86eT*YKhv0gU$y};!axNQDn=vmb# zh7F)?wSugRA*C1tuF+fSbm%P=Hj^E`w2>e0?gl(-aC4m{*j|S8O$U&?7A|Z$gI=tK zJ3bk8xaFz6|3_AT|;B-+f@|41>Ef(b1rX{yv zU}t1^atAi=(yVGT`_xx$3Zm9VVBEr$KTcNGfiTo3Q=vY-y^6~EZ*0%~=UoqWx}@4?dn zot4$7djnW@pFy1)VS1kof9_5fYYX6RN8eN4kD77msiVjguT&Vx+$)Uj2kdB?R# zyY4GY9=OU@o#xVwNV~k-Om=j!Rhwka|A5NjagchLf%$`gd{T#pb!A97q_-fiLCc!&gmZ@`i#n*; zgDDM;!_`QshMx{ofOqOCz>)f1sTD2C97B(2JBB-PK!1i8A0m+AA3RpRhO` zu&!Y(3E-lao_Oi)MM5K<4GNQXoGP~;@8$h)<-}%U*aB4d9I#;%{>Gw)V@^`#nv=cA z*{u6J(n6JeEoI2>BMFfYC>h9(%xCKfsyihhsRi#uz2KfxL?6O>+hzQT6>zpzODK2@ zQ;)jJzm$(`ZE)<;UetdbUlL;wNbLgRu0c|JpBU~o{L!u;|7TEj)s<#zW7(1y7Gqe{ z5W|Akh&%E{XHvKGn( zTZZ7>QZe);J7q@tsh2eiViWKERQx<;fQIOmT755#) zao>IF*!Z9f^C5c|Uf1gERDgOB+Bc-$&0p>+3Z*9x<08$|C$Mwx2#L H>|gmWY+L5e delta 2830 zcmai0YfMvT7(VCYc6vl}1msqQ1Dd5VZs}%aASx9V@rHnkh~f&~&KP24rXzJoMU?7f zQeH2`ET%KjbW@aLjbSE=761jp{TYPe7ep5EUbG_y^`}SsnP52dhrf#vyR%>Yy+w z1B_>@^yYZ>#=^6eJ>$7t4AUVln_^C479--|UVf%)U>c0a#KM~d5m}R6Y6ch*jp$iA zkvy9P)R#%6L;<;H5vg>uz>mY>M7*)W_eOjf2S$A~&%qP@O7cu2&%HAX@Uv&;d~m17 zW9bj7zdvgk1k#AUPR<9bo=DC5Wg^c_;Yh9)1gn#*de78we$i}YPc8qvILpF#&Wvl( z0xpdU7O=NkSQ1?jEgq8#pb z^?c%TX@0?U&4mPgyYqxhiiu>+TJ+kK0>dUF)?b^*UZQVXK=h6UM8{+kP7OXc%*^4I zLh!S!m=z@S#5pR>O+}qKP?u{HOHC{(YYzOLTaJ`0Sdupv`4_^xWRp7Zke)da&x!uL zdC;0~la!B{>da#+1XswQ+}_G3K-(e{GAsSbFLUF18CuS_Jh)7f|IA zh+k+oyuNw##NL3+(k_9D|V?baEUSst@52OPDW_77;db#Nf8I;NRzBw zQ-vfm++1Tqm8(=WhX;9`)bcE6GIpdV%&z4iub=GaT+4KC30n{S*t+owaP$ z+S%Di^+ZZRB8K)chtx)wdYKkwE`>2MTOAnVL25`v{t~!YY7--Y@z6@ZS{6+PXDe$% zQX#x5Ga=7<+W2xIy=fzZ)cWfzW4d>P);IGe--!*lZ~hH%anpzxaR7UT163}AR}~m= zqc&6Lc5SAHPl!ZrNk5kQeM%*suCoIB%Me|22$?rSTg?R|RKhnP!}8iWNZ#qItHq(b zwa~iLCPwM+{0FxEu6QW30l=s9n+2V zE_H-9*01>L_K;NeK!htl|ZnA>0z zBSGN%1_v6gf_eK)D1bxa|BZ5i?}M6snNWI2$M3_30o+zQ8s7>@`!Ar;Z4e)j;g|h$ zkoimB%l$a7+(t+^U=t&Zpe-6dKql>bdY}!TqtBtf*+K?C(p;3G-5lg*-%zrCInTv# z+AS{~q$z9`TACarcW#1k&Ss{2TiB{GIB=EeTK~qsV>%bMYYaB_PWH3>z;wqQwibuC z`3I>GVY+dEy(t}ZsfX}DVxgfWJt4J~S!K3x@;Tr6mRL;97PxpAQ*$C)u(vvp@e6p> zN*l2KND=A7L zwNvBSc53{seVF&a->o$y#I)nY=Bqe9Ea?30EKLjKw{IaYk9E-vBVEJD;KZb-C~tro zi%t(CzY|WLrAFHsYV1FQJx^%HKhIKQ&beXa{7Nfrx0@QTxoeUC6e-A)DDY;O-kr(5 zPr8WB(Jk;ssOioWwT64o5PP6oK#JF;Hu#Fq+a(k_iD^dTzjpENZVLrQGVL6}{=NMWH)1nR5K~)~~A5csy$v`Ua{*=_cD{MB1*A=EB${OmYm+ zf3GoC86pl7N1NQZ) Date: Mon, 17 Oct 2022 16:10:06 +0200 Subject: [PATCH 019/222] improved read in of file names --- tools/species_database/Species_Database.h5 | Bin 53888 -> 53888 bytes ...Database_H2_Plasma.h5 => XSec_Database.h5} | Bin .../create_species_database.py | 34 +++++++----------- 3 files changed, 13 insertions(+), 21 deletions(-) rename tools/species_database/{XSec_Database_H2_Plasma.h5 => XSec_Database.h5} (100%) diff --git a/tools/species_database/Species_Database.h5 b/tools/species_database/Species_Database.h5 index 7bf38ebf5b01355521c711af32f88052619c7b1c..056b401756b86127d31eef5765d5936f8f67df9e 100644 GIT binary patch delta 63 zcmZoz%G|J&c|!{q(~HE(_e2~vAL9~(vcExutR@SHy#X>e{}bb51krpF5L!+$X(s?l Cc^O*( delta 63 zcmZoz%G|J&c|!{qlV;51dm;{-k8z1X+20^SR+9z9-T;}K|B3N2f@nSo2rVa>v=acu C6cob% diff --git a/tools/species_database/XSec_Database_H2_Plasma.h5 b/tools/species_database/XSec_Database.h5 similarity index 100% rename from tools/species_database/XSec_Database_H2_Plasma.h5 rename to tools/species_database/XSec_Database.h5 diff --git a/tools/species_database/create_species_database.py b/tools/species_database/create_species_database.py index abdce9dcf..05a6eee64 100644 --- a/tools/species_database/create_species_database.py +++ b/tools/species_database/create_species_database.py @@ -2,28 +2,20 @@ import h5py from argparse import ArgumentParser -# database_output = "Species_Database.h5" -# database_electronic = "Electronic-State-Database.h5" -# database_crosssection = "XSec_Database_H2_Plasma.h5" - -# hdf = h5py.File(database_output, 'a') -# h5_electronic = h5py.File(database_electronic, 'r') -# h5_crosssection = h5py.File(database_crosssection, 'r') - parser = ArgumentParser(prog='create_species_database') parser.add_argument("-p", "--parameter", dest="ini_filename", - help="DSMC.ini file to read-in parameters", metavar="FILE") + help="DSMC.ini file to read-in parameters", metavar="FILE", default="DSMC.ini") parser.add_argument("-e", "--electronic", dest="database_electronic", - help="Electronic excitation database to read-in parameters", metavar="FILE") + help="Electronic excitation database to read-in parameters", metavar="FILE", default="Electronic-State-Database.h5") parser.add_argument("-c", "--crosssection", dest="database_crosssection", - help="Crosssection database to read-in parameters", metavar="FILE") + help="Crosssection database to read-in parameters", metavar="FILE", default="XSec_Database.h5") parser.add_argument("-o", "--output", dest="database_output", - help="Output file name", metavar="FILE") + help="Output file name", metavar="FILE", default="Species_Database.h5") args = parser.parse_args() -hdf = h5py.File(args.database_output, 'a') -h5_electronic = h5py.File(args.database_electronic, 'r') +h5_species = h5py.File(args.database_output, 'a') +h5_electronic = h5py.File(args.database_electronic, 'r') h5_crosssection = h5py.File(args.database_crosssection, 'r') def is_float(value): @@ -35,20 +27,20 @@ def is_float(value): # Create general structure hdf_species_group = 'Species' -if hdf_species_group in hdf.keys(): +if hdf_species_group in h5_species.keys(): print('Group Species already exists.') - hdf_species_group = hdf['Species'] + hdf_species_group = h5_species['Species'] else: print('Group Species does not exist, creating new group.') - hdf_species_group = hdf.create_group('Species') + hdf_species_group = h5_species.create_group('Species') hdf_xsec_group = 'Cross-Sections' -if hdf_xsec_group in hdf.keys(): +if hdf_xsec_group in h5_species.keys(): print('Group Cross-Sections already exists.') - hdf_xsec_group = hdf['Cross-Sections'] + hdf_xsec_group = h5_species['Cross-Sections'] else: print('Group Cross-Sections does not exist, creating new group.') - hdf_xsec_group = hdf.create_group('Cross-Sections') + hdf_xsec_group = h5_species.create_group('Cross-Sections') # Read-in of DSMC.ini parameters and electronic state with open(args.ini_filename) as file: @@ -104,6 +96,6 @@ def is_float(value): print('Cross-section added: ', dataset) hdf_xsec_group.copy(source=h5_crosssection[dataset],dest=hdf_xsec_group) -hdf.close() +h5_species.close() h5_electronic.close() h5_crosssection.close() From ddde5300b3c96bf00b78ef75390f440b3ab8a496 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Mon, 17 Oct 2022 18:20:27 +0200 Subject: [PATCH 020/222] first version of USD tool including species parameter --- docs/documentation/userguide/tools.md | 48 +- tools/species_database/DSMC_Titan.ini | 516 ++++++++++++++++++ tools/species_database/Species_Database.h5 | Bin 53888 -> 58264 bytes .../create_species_database.py | 13 +- 4 files changed, 572 insertions(+), 5 deletions(-) create mode 100755 tools/species_database/DSMC_Titan.ini diff --git a/docs/documentation/userguide/tools.md b/docs/documentation/userguide/tools.md index 027b148e2..a18abdc44 100644 --- a/docs/documentation/userguide/tools.md +++ b/docs/documentation/userguide/tools.md @@ -4,8 +4,52 @@ This section gives an overview over the tools and scripts contained in the **PIC It also provides references to the tutorials where their usage is explained. An overview of the tools is given in [TOOLS.md](https://github.com/piclas-framework/piclas/blob/master/tools/TOOLS.md). -(sec:tools-xsec-collision)= -## Collision cross-section database +(sec:tools-usd)= +## Unified Species Database (USD) + +A tool to create a database containing cross-section, electronic and species data can be found in the *tools* folder: `piclas/tools/species_database/`. +The Python script (python3.7) `create_species_database.py` creates a new database combining cross-section data, electronic states and species parameters (formerly read-in through ini files). The script uses the `numpy`, `h5py` and `argparse` packages. To create the unified database with + + python3.7 create_species_database.py + +an electronic and cross-section database need to be built before ({ref}`ssec:tools-xsec-collision`, {ref}`ssec:tools-electronic-database`). +If nothing additionally is specified, the following filenames are called: `DSMC.ini` for the parameter input, `Electronic-State-Database.h5` for the electronic state database, `XSec_Database.h5` for the cross-section data and `Species_Database.h5` for the final output. For custom file names, the following options can be added: + + python3 create_species_database.py --parameter parameter-filename --electronic electronic_statefile --crosssection crosssection_statefile --output output_filename + +or + + python3 create_species_database.py -p parameter-filename -e electronic_statefile -c crosssection_statefile -o output_filename + +The data is grouped in the output file, as shown in the following example: + + Cross-Sections (group) + H2-H2Ion1 (dataset) + Species (group) + H2 (group) + Electronic levels (dataset) + Species parameters (attributes) + H2Ion1 (group) + Electronic levels (dataset) + Species parameters (attributes) + electron (group) + Electronic levels (dataset) + Species parameters (attributes) + + +(ssec:tools-electronic-database)= +### Electronic database + +A tool to create a database containing electronic excitation states can be found in the *tools* folder: `piclas/tools/electronic_database/`. +The Python script (python3.7) `create_electronic_database_atoms.py` can be used to populate a PICLas-compatible cross-section database, using +the `pandas`, `h5py`, `io`, `re`, `datetime` and `requests` packages. It can be excuted with + + python3.7 `create_electronic_database_atoms.py` + +The script gets the data from the NIST database (https://physics.nist.gov/cgi-bin/ASD/energy1.pl) and stores it in an h5-database. Additional species can be added by adapting the `species-list` parameter. + +(ssec:tools-xsec-collision)= +### Collision cross-section database A tool to create a database containing cross-section data can be found in the *tools* folder: `piclas/tools/crosssection_database/`. The Python script (python3.7) `create_xsec_db_lxcat.py` can be used to populate a PICLas-compatible cross-section database, using diff --git a/tools/species_database/DSMC_Titan.ini b/tools/species_database/DSMC_Titan.ini new file mode 100755 index 000000000..72abfc6ab --- /dev/null +++ b/tools/species_database/DSMC_Titan.ini @@ -0,0 +1,516 @@ +! =============================================================================== ! +! Species1, CH4 +! =============================================================================== ! +Part-Species1-SpeciesName=CH4 +Part-Species1-PolyatomicMol=true +Part-Species1-InteractionID=2 +Part-Species1-Tref=273 +Part-Species1-dref=4.63E-10 +Part-Species1-omega=0.24 +Part-Species1-NumOfAtoms=5 +Part-Species1-LinearMolec=.false. +Part-Species1-CharaTempVib1=4194.9 +Part-Species1-CharaTempVib2=2206.0 +Part-Species1-CharaTempVib3=2206.0 +Part-Species1-CharaTempVib4=4341.6 +Part-Species1-CharaTempVib5=4341.6 +Part-Species1-CharaTempVib6=4341.6 +Part-Species1-CharaTempVib7=1878.1 +Part-Species1-CharaTempVib8=1878.1 +Part-Species1-CharaTempVib9=1878.1 +Part-Species1-Ediss_eV=4.53 +Part-Species1-HeatOfFormation_K=-9002.71 +Part-Species1-CharaTempRot1 = 7.6 +Part-Species1-CharaTempRot2 = 7.6 +Part-Species1-CharaTempRot3 = 7.6 +Part-Species1-SymmetryFactor = 12 +! =============================================================================== ! +! Species2, CH3 +! =============================================================================== ! +Part-Species2-SpeciesName=CH3 +Part-Species2-PolyatomicMol=true +Part-Species2-InteractionID=2 +Part-Species2-Tref=273 +Part-Species2-dref=4.55E-10 +Part-Species2-omega=0.24 +Part-Species2-NumOfAtoms=4 +Part-Species2-LinearMolec=.false. +Part-Species2-CharaTempVib1=4320.6 +Part-Species2-CharaTempVib2=872.1 +Part-Species2-CharaTempVib3=4545.5 +Part-Species2-CharaTempVib4=4545.5 +Part-Species2-CharaTempVib5=2016.2 +Part-Species2-CharaTempVib6=2016.2 +Part-Species2-Ediss_eV=4.77 +Part-Species2-HeatOfFormation_K=17518.44 +Part-Species2-CharaTempRot1 = 13.5 +Part-Species2-CharaTempRot2 = 13.5 +Part-Species2-CharaTempRot3 = 6.8 +Part-Species2-SymmetryFactor = 6 +! =============================================================================== ! +! Species3, CH2 +! =============================================================================== ! +Part-Species3-SpeciesName=CH2 +Part-Species3-PolyatomicMol=true +Part-Species3-InteractionID=2 +Part-Species3-Tref=273 +Part-Species3-dref=4.47E-10 +Part-Species3-omega=0.24 +Part-Species3-NumOfAtoms=3 +Part-Species3-LinearMolec=.false. +Part-Species3-CharaTempVib1=4035.3 +Part-Species3-CharaTempVib2=1945.2 +Part-Species3-CharaTempVib3=4120.1 +Part-Species3-Ediss_eV=4.37 +Part-Species3-HeatOfFormation_K=46461.31 +Part-Species3-CharaTempRot1 = 72.1 +Part-Species3-CharaTempRot2 = 12.5 +Part-Species3-CharaTempRot3 = 10.6 +Part-Species3-SymmetryFactor = 2 +! =============================================================================== ! +! Species4, CH +! =============================================================================== ! +Part-Species4-SpeciesName=CH +Part-Species4-InteractionID = 2 +Part-Species4-Tref = 273 +Part-Species4-dref = 4.39E-10 +Part-Species4-omega=0.24 +Part-Species4-CharaTempVib=4314.3 +Part-Species4-Ediss_eV=3.49 +Part-Species4-HeatOfFormation_K=71440.92 +Part-Species4-CharaTempRot = 20.4 +Part-Species4-SymmetryFactor = 1 +! =============================================================================== ! +! Species5, N2 +! =============================================================================== ! +Part-Species5-SpeciesName=N2 +Part-Species5-InteractionID = 2 +Part-Species5-Tref = 273 +Part-Species5-dref = 4.17E-10 +Part-Species5-omega=0.24 +Part-Species5-CharaTempVib=3392.5 +Part-Species5-Ediss_eV=9.79 +Part-Species5-HeatOfFormation_K=0.0 +Part-Species5-CharaTempRot = 2.9 +Part-Species5-SymmetryFactor = 2 +! =============================================================================== ! +! Species6, C2 +! =============================================================================== ! +Part-Species6-SpeciesName=C2 +Part-Species6-InteractionID = 2 +Part-Species6-Tref = 273 +Part-Species6-dref = 4.88E-10 +Part-Species6-omega=0.24 +Part-Species6-CharaTempVib=2667.7 +Part-Species6-Ediss_eV=6.26 +Part-Species6-HeatOfFormation_K=100733.71 +Part-Species6-CharaTempRot = 2.6 +Part-Species6-SymmetryFactor = 2 +! =============================================================================== ! +! Species7, H2 +! =============================================================================== ! +Part-Species7-SpeciesName=H2 +Part-Species7-InteractionID = 2 +Part-Species7-Tref = 273 +Part-Species7-dref = 3.06E-10 +Part-Species7-omega=0.24 +Part-Species7-CharaTempVib=6329.0 +Part-Species7-Ediss_eV=4.50 +Part-Species7-HeatOfFormation_K=0.0 +Part-Species7-CharaTempRot = 87.5 +Part-Species7-SymmetryFactor = 2 +! =============================================================================== ! +! Species8, CN +! =============================================================================== ! +Part-Species8-SpeciesName=CN +Part-Species8-InteractionID = 2 +Part-Species8-Tref = 273 +Part-Species8-dref = 5.45E-10 +Part-Species8-omega=0.24 +Part-Species8-CharaTempVib=2975.4 +Part-Species8-Ediss_eV=7.72 +Part-Species8-HeatOfFormation_K=52323.23 +Part-Species8-CharaTempRot = 2.7 +Part-Species8-SymmetryFactor = 1 +! =============================================================================== ! +! Species9, NH +! =============================================================================== ! +Part-Species9-SpeciesName=NH +Part-Species9-InteractionID = 2 +Part-Species9-Tref = 273 +Part-Species9-dref = 4.64E-10 +Part-Species9-omega=0.24 +Part-Species9-CharaTempVib=4721.2 +Part-Species9-Ediss_eV=4.02 +Part-Species9-HeatOfFormation_K=45279.31 +Part-Species9-CharaTempRot = 24.0 +Part-Species9-SymmetryFactor = 1 +! =============================================================================== ! +! Species10, HCN +! =============================================================================== ! +Part-Species10-SpeciesName=HCN +Part-Species10-PolyatomicMol=true +Part-Species10-InteractionID = 2 +Part-Species10-Tref = 273 +Part-Species10-dref = 3.94E-10 +Part-Species10-omega=0.24 +Part-Species10-NumOfAtoms=3 +Part-Species10-LinearMolec=.true. +Part-Species10-CharaTempVib1=4761.5 +Part-Species10-CharaTempVib2=1023.9 +Part-Species10-CharaTempVib3=1023.9 +Part-Species10-CharaTempVib4=3015.7 +Part-Species10-Ediss_eV=9.93 +Part-Species10-HeatOfFormation_K=16249.85 +Part-Species10-CharaTempRot = 2.1 +Part-Species10-SymmetryFactor = 1 +! =============================================================================== ! +! Species11, N +! =============================================================================== ! +Part-Species11-SpeciesName=N +Part-Species11-InteractionID = 1 +Part-Species11-Tref = 273 +Part-Species11-dref = 3.00E-10 +Part-Species11-omega=0.24 +Part-Species11-HeatOfFormation_K=56837.22 +! =============================================================================== ! +! Species12, C +! =============================================================================== ! +Part-Species12-SpeciesName=C +Part-Species12-InteractionID = 1 +Part-Species12-Tref = 273 +Part-Species12-dref = 4.67E-10 +Part-Species12-omega=0.24 +Part-Species12-HeatOfFormation_K=86175.70 +! =============================================================================== ! +! Species13, H +! =============================================================================== ! +Part-Species13-SpeciesName=H +Part-Species13-InteractionID = 1 +Part-Species13-Tref = 273 +Part-Species13-dref = 2.03E-10 +Part-Species13-omega=0.24 +Part-Species13-HeatOfFormation_K=26213.32 +! =============================================================================== ! +! Species14, e +! =============================================================================== ! +Part-Species14-SpeciesName=electron +Part-Species14-InteractionID = 4 +Part-Species14-Tref = 273 +Part-Species14-dref = 1E-10 +Part-Species14-omega=0.24 +! =============================================================================== ! +! Species15, N2+ +! =============================================================================== ! +Part-Species15-SpeciesName=N2Ion1 +Part-Species15-InteractionID = 20 +Part-Species15-Tref = 273 +Part-Species15-dref = 4.17E-10 +Part-Species15-omega=0.24 +Part-Species15-CharaTempVib=3174.7 +Part-Species15-Ediss_eV=9.79 +Part-Species15-CharaTempRot = 2.8 +Part-Species15-SymmetryFactor = 2 +Part-Species15-PreviousState = 5 +! =============================================================================== ! +! Species16, CN+ +! =============================================================================== ! +Part-Species16-SpeciesName=CNIon1 +Part-Species16-InteractionID = 20 +Part-Species16-Tref = 273 +Part-Species16-dref = 5.45E-10 +Part-Species16-omega=0.24 +Part-Species16-CharaTempVib=2924.4 +Part-Species16-Ediss_eV=7.72 +Part-Species16-CharaTempRot = 2.5 +Part-Species16-SymmetryFactor = 1 +Part-Species16-PreviousState = 8 +! =============================================================================== ! +! Species17, N+ +! =============================================================================== ! +Part-Species17-SpeciesName=NIon1 +Part-Species17-InteractionID = 10 +Part-Species17-Tref = 273 +Part-Species17-dref = 3.00E-10 +Part-Species17-omega=0.24 +Part-Species17-PreviousState = 11 +! =============================================================================== ! +! Species18, C+ +! =============================================================================== ! +Part-Species18-SpeciesName=CIon1 +Part-Species18-InteractionID = 10 +Part-Species18-Tref = 273 +Part-Species18-dref = 4.67E-10 +Part-Species18-omega=0.24 +Part-Species18-PreviousState = 12 +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=30 ! 18 Species, 28 Reactions +!--------------------------------------------------------------------! +!##################### Dissociation Reactions #######################! +!--------------------------------------------------------------------! +!--------- Reaction1: CH4 + M -> CH3 + H + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction1-Reactants=(/1,0,0/) +DSMC-Reaction1-Products=(/2,0,13,0/) +DSMC-Reaction1-Arrhenius-Prefactor=7.8047E+17 ! A_f +DSMC-Reaction1-Arrhenius-Powerfactor=-8.2 ! B_f +DSMC-Reaction1-Activation-Energy_K=59200.0 ! E_a +DSMC-Reaction1-NumberOfNonReactives=18 +DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction2: CH3 + M -> CH2 + H + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction2-Reactants=(/2,0,0/) +DSMC-Reaction2-Products=(/3,0,13,0/) +DSMC-Reaction2-Arrhenius-Prefactor=1.6938E-14 ! A_f +DSMC-Reaction2-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction2-Activation-Energy_K=45600 ! E_a +DSMC-Reaction2-NumberOfNonReactives=18 +DSMC-Reaction2-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction3: CH3 + M -> CH + H2 + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction3-Reactants=(/2,0,0/) +DSMC-Reaction3-Products=(/4,0,7,0/) +DSMC-Reaction3-Arrhenius-Prefactor=8.3029E-15 ! A_f +DSMC-Reaction3-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction3-Activation-Energy_K=42800 ! E_a +DSMC-Reaction3-NumberOfNonReactives=18 +DSMC-Reaction3-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction4: CH2 + M -> CH + H + M -------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction4-Reactants=(/3,0,0/) +DSMC-Reaction4-Products=(/4,0,13,0/) +DSMC-Reaction4-Arrhenius-Prefactor=6.6423E-15 ! A_f +DSMC-Reaction4-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction4-Activation-Energy_K=41800 ! E_a +DSMC-Reaction4-NumberOfNonReactives=18 +DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction5: CH2 + M -> C + H2 + M -------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction5-Reactants=(/3,0,0/) +DSMC-Reaction5-Products=(/7,0,12,0/) +DSMC-Reaction5-Arrhenius-Prefactor=2.1588E-16 ! A_f +DSMC-Reaction5-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction5-Activation-Energy_K=29700 ! E_a +DSMC-Reaction5-NumberOfNonReactives=18 +DSMC-Reaction5-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction6: CH + M -> C + H2 + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction6-Reactants=(/4,0,0/) +DSMC-Reaction6-Products=(/12,0,13,0/) +DSMC-Reaction6-Arrhenius-Prefactor=3.1551E-16 ! A_f +DSMC-Reaction6-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction6-Activation-Energy_K=33700 ! E_a +DSMC-Reaction6-NumberOfNonReactives=18 +DSMC-Reaction6-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction7a: N2 + M -> N + N + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction7-Reactants=(/5,0,0/) +DSMC-Reaction7-Products=(/11,0,11,0/) +DSMC-Reaction7-Arrhenius-Prefactor=1.1624E-08 ! A_f +DSMC-Reaction7-Arrhenius-Powerfactor=-1.6 ! B_f +DSMC-Reaction7-Activation-Energy_K=113200 ! E_a +DSMC-Reaction7-NumberOfNonReactives=13 +DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,14,15,16/) +!--------------------------------------------------------------------! +!--------- Reaction7b: N2 + N/C/H -> N + N + N/C/H ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction8-Reactants=(/5,0,0/) +DSMC-Reaction8-Products=(/11,0,11,0/) +DSMC-Reaction8-Arrhenius-Prefactor=4.9817E-08 ! A_f +DSMC-Reaction8-Arrhenius-Powerfactor=-1.6 ! B_f +DSMC-Reaction8-Activation-Energy_K=113200 ! E_a +DSMC-Reaction8-NumberOfNonReactives=5 +DSMC-Reaction8-NonReactiveSpecies=(/11,12,13,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction8: C2 + M -> C + C + M ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction9-Reactants=(/6,0,0/) +DSMC-Reaction9-Products=(/12,0,12,0/) +DSMC-Reaction9-Arrhenius-Prefactor=2.4909E-14 ! A_f +DSMC-Reaction9-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction9-Activation-Energy_K=71600 ! E_a +DSMC-Reaction9-NumberOfNonReactives=18 +DSMC-Reaction9-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction9: H2 + M -> H + H + M ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction10-Reactants=(/7,0,0/) +DSMC-Reaction10-Products=(/13,0,13,0/) +DSMC-Reaction10-Arrhenius-Prefactor=3.7031E-16 ! A_f +DSMC-Reaction10-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction10-Activation-Energy_K=48350 ! E_a +DSMC-Reaction10-NumberOfNonReactives=18 +DSMC-Reaction10-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction10: CN + M -> C + N + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction11-Reactants=(/8,0,0/) +DSMC-Reaction11-Products=(/11,0,12,0/) +DSMC-Reaction11-Arrhenius-Prefactor=4.2013E-16 ! A_f +DSMC-Reaction11-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction11-Activation-Energy_K=71000 ! E_a +DSMC-Reaction11-NumberOfNonReactives=18 +DSMC-Reaction11-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction11: HN + M -> N + H + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction12-Reactants=(/9,0,0/) +DSMC-Reaction12-Products=(/11,0,13,0/) +DSMC-Reaction12-Arrhenius-Prefactor=2.9890E-16 ! A_f +DSMC-Reaction12-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction12-Activation-Energy_K=37600 ! E_a +DSMC-Reaction12-NumberOfNonReactives=18 +DSMC-Reaction12-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction12: HCN + M -> CN + H + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction13-Reactants=(/10,0,0/) +DSMC-Reaction13-Products=(/8,0,13,0/) +DSMC-Reaction13-Arrhenius-Prefactor=5.9283E-04 ! A_f +DSMC-Reaction13-Arrhenius-Powerfactor=-2.6 ! B_f +DSMC-Reaction13-Activation-Energy_K=62845 ! E_a +DSMC-Reaction13-NumberOfNonReactives=18 +DSMC-Reaction13-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!################## Exchange & Radical Reactions ####################! +!--------------------------------------------------------------------! +!--------- Reaction13: CH3 + H -> CH2 + H2 --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction14-Reactants=(/2,13,0/) +DSMC-Reaction14-Products=(/3,7,0,0/) +DSMC-Reaction14-Arrhenius-Prefactor=2.1000E-14 ! A_f +DSMC-Reaction14-Arrhenius-Powerfactor=-0.56 ! B_f +DSMC-Reaction14-Activation-Energy_K=8000 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction2: CH + N2 -> HCN + N ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction15-Reactants=(/4,5,0/) +DSMC-Reaction15-Products=(/10,11,0,0/) +DSMC-Reaction15-Arrhenius-Prefactor=7.3065E-18 ! A_f +DSMC-Reaction15-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction15-Activation-Energy_K=11060 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction15: CH + C -> C2 + H -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction16-Reactants=(/4,12,0/) +DSMC-Reaction16-Products=(/6,13,0,0/) +DSMC-Reaction16-Arrhenius-Prefactor=3.3212E-16 ! A_f +DSMC-Reaction16-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction16-Activation-Energy_K=0.0 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction16: C2 + N2 -> CN + CN ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction17-Reactants=(/5,6,0/) +DSMC-Reaction17-Products=(/8,8,0,0/) +DSMC-Reaction17-Arrhenius-Prefactor=2.4909E-17 ! A_f +DSMC-Reaction17-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction17-Activation-Energy_K=21000 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction17: H2 + CN -> HCN + H ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction18-Reactants=(/7,8,0/) +DSMC-Reaction18-Products=(/10,13,0,0/) +DSMC-Reaction18-Arrhenius-Prefactor=1.8000E-25 ! A_f +DSMC-Reaction18-Arrhenius-Powerfactor=2.6 ! B_f +DSMC-Reaction18-Activation-Energy_K=960 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction18: CN + C -> C2 + N -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction19-Reactants=(/8,12,0/) +DSMC-Reaction19-Products=(/6,11,0,0/) +DSMC-Reaction19-Arrhenius-Prefactor=8.3029E-17 ! A_f +DSMC-Reaction19-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction19-Activation-Energy_K=13000 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction19: H2 + N -> NH + H -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction20-Reactants=(/7,11,0/) +DSMC-Reaction20-Products=(/9,13,0,0/) +DSMC-Reaction20-Arrhenius-Prefactor=2.6569E-16 ! A_f +DSMC-Reaction20-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction20-Activation-Energy_K=12650 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction20: N2 + C -> CN + N -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction21-Reactants=(/5,12,0/) +DSMC-Reaction21-Products=(/8,11,0,0/) +DSMC-Reaction21-Arrhenius-Prefactor=8.7014E-17 ! A_f +DSMC-Reaction21-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction21-Activation-Energy_K=22600 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction21: H2 + C -> CH + H -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction22-Reactants=(/7,12,0/) +DSMC-Reaction22-Products=(/4,13,0,0/) +DSMC-Reaction22-Arrhenius-Prefactor=6.6423E-16 ! A_f +DSMC-Reaction22-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction22-Activation-Energy_K=11700 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction22: N2 + H -> NH + N -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction23-Reactants=(/5,13,0/) +DSMC-Reaction23-Products=(/9,11,0,0/) +DSMC-Reaction23-Arrhenius-Prefactor=4.9817E-18 ! A_f +DSMC-Reaction23-Arrhenius-Powerfactor=0.50 ! B_f +DSMC-Reaction23-Activation-Energy_K=71400 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction23: CH4 + H -> CH3 + H2 --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction24-Reactants=(/1,13,0/) +DSMC-Reaction24-Products=(/2,7,0,0/) +DSMC-Reaction24-Arrhenius-Prefactor=2.1919E-26 ! A_f +DSMC-Reaction24-Arrhenius-Powerfactor=3.0 ! B_f +DSMC-Reaction24-Activation-Energy_K=4045 ! E_a +!########## IONIZED SPECIES ########################################### +!--------------------------------------------------------------------! +!--------- Reaction7c: N2 + e -> N + N + e ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction25-Reactants=(/5,14,0/) +DSMC-Reaction25-Products=(/11,14,11,0/) +DSMC-Reaction25-Arrhenius-Prefactor=4.98161783020654E-06 ! A_f +DSMC-Reaction25-Arrhenius-Powerfactor=-1.6 ! B_f +DSMC-Reaction25-Activation-Energy_K=113200 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction24: N + N -> N2+ + e ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction26-Reactants=(/11,11,0/) +DSMC-Reaction26-Products=(/15,14,0,0/) +DSMC-Reaction26-Arrhenius-Prefactor=7.30637281763626E-23 +DSMC-Reaction26-Arrhenius-Powerfactor=1.5 ! B_f +DSMC-Reaction26-Activation-Energy_K=67500 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction25: C + N -> CN+ + e ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction27-Reactants=(/11,12,0/) +DSMC-Reaction27-Products=(/16,14,0,0/) +DSMC-Reaction27-Arrhenius-Prefactor=1.66053927673551E-15 +DSMC-Reaction27-Arrhenius-Powerfactor=1.5 ! B_f +DSMC-Reaction27-Activation-Energy_K=164400 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction26: N + e -> N+ + e + e ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction28-ReactionModel=QK +DSMC-Reaction28-Reactants=(/11,14,0/) +DSMC-Reaction28-Products=(/17,14,14,0/) +!--------------------------------------------------------------------! +!--------- Reaction27: C + e -> C+ + e + e ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction29-ReactionModel=QK +DSMC-Reaction29-Reactants=(/12,14,0/) +DSMC-Reaction29-Products=(/18,14,14,0/) +!--------------------------------------------------------------------! +!--------- Reaction28: CN+ + N -> CN + N+ ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction30-Reactants=(/16,11,0/) +DSMC-Reaction30-Products=(/8,17,0,0/) +DSMC-Reaction30-Arrhenius-Prefactor=1.6273284912008E-17 +DSMC-Reaction30-Arrhenius-Powerfactor=0. +DSMC-Reaction30-Activation-Energy_K=40700 diff --git a/tools/species_database/Species_Database.h5 b/tools/species_database/Species_Database.h5 index 056b401756b86127d31eef5765d5936f8f67df9e..987df9e99e013e3ebf838045f701a4eb7d0c5c65 100644 GIT binary patch delta 6528 zcmbtYe^3GYylDGxt}+WNfBy-`m~u%uGi2 z_K)57eee7Ie1E+6{eIuwz?*SnAI2TaXUF~}6;vjgH!$RJN>U;V16(_@!hg7vZ2SQH zBi#ibSgg5-a_|gK2Ga$UzN^kdkhjVFj8YDoGjqV3zMslgbD=`Y*Z}t|x!_7qgXWAL zy0`-POx}`TOc~596l6N#b1nx4GKu(Cnbn-VgszUM;sP9-MHZ87)!fa+swi0;u$@+L zbF!-Wkb^FGP4o-FXWoLG?4dY@vHPV>(2!>nRkh5wclNXhrFQ$WLSa=)i?5})-q+i+ z)AzEkMd<7h>UQ*YHv4*n61-e$FD)%%SPID)mB%(Hk7yV`^~tb&ysFE!n@}h!abPp{t8ZblEZ`gpO7!8<7{Wl(gl^4}^nrjq5l@|=ki&{UQV-P@-pKDBB)Griy#sGBr=M2eF}J&Q%PaJ9NGMPGizs)m|vXf3=` z<3M$iv=o7`K2Yj@TRo+R)e5f_{>ipzK6fjn+thh2c3peue46IZ z-IwUZbe~^(i})jKhWnPeQt&EW$f(1dOBYcJrSZH4ojZgcuF?A<(ws^H;f2Wq6-$e|W8u$qw> zQd@H&u!U2;{$N0EYruQ@9n39&sYyiJ;nk+I_L^p0|gy@oUQ;ab_^mf6m~ig zR)+sF>f}%_jhUHszT}tw4P#yVP!ptgpGD1(6cXT0_j9c4C-Rrw*q%L**4xMFn@^%L z*&Eqar~IHd&y-rZx^5jgD(bII1k(K5h=sugxhPIPw;%-}6CvW|kMc2*K!`*c6=1?l z2o6dXeugY$JVRbySd35-A!fqiMW3Q%GER{X7v&)sO0OICH2B_yeXKzCW^YFVxnp zK}fDVOkTFJ&QbXC@-6=EV;;!-E0b~Z_~BrjU-IGt#xDM_^$Km$}BbrT7n&V;jk3K*9FWhL`?<`WEEVyG?xp%OM{627ykl* zO%lL+umDy(Z)Ybj!p2{A>4~J=VQ3=7>4`M`Yelcpik-hvMu9D6WS2{>G$Gb|2}Y%^ z4DB>3|AQbVft>d#NG5O{Cvt;suK!0y-{LgZmFQcIq!A0QF{eJS0iUhyc77Y_v@MjRM$N0x+fK zKMVcuS8y7oB;{%_|1m$o`>DeINH?&t-aAlz{bfs}FevzP_*Ylr8hq|d~||88t!r~a;6I;m}%@K2?QD2HY29yu(UVM>0M!Ie-1BoQV; bH@LP>s8?ZQ79()vWic@lgov!#lX>$+f delta 2994 zcmZWreQ*=U6~A4{)|~+PY}vAG7g>C?C=?oz#sq>h$dgip&4&%KW2BJEOhScejrpow zK5WS$iQ>j!@zTa+QY>JgYMKy^b%Jq+pfH4FI%BM4=)??^sL4#rq{EEzPiuG5PWN_o zcTsYG+`hN_?)TpQ-rIdQ^nodI#x&@`k&l&yt1aR>fj!F<#eyLswZm423({u-u+=&j z-)n=rr9QZBwZoFK>UgRUuFEAvp7D?byUSe=Dm}g|(N9OpdZqaes}rObo`8*D0z za;rx{cF5M)Y;MtsAidBNPuaj%>V}AeLH*BBZ=Z5;gQ;&r{ZpC^gXPT9=B&48-5L}h zxl@QZUsD~rD(dHk=H{?+2C^VCsr83^ViJ@73I~GB;uu7}KV;$vB)uqss4SAI2e%+B z2oSZqh<8awomBS)-X%w%<>9NjB}muYENY#{A$ioyYO2y%tZm|nTm%@}zFUq=aB0C& zWQI8pe1ZztyAY-yxQHyEEUZQ%%sDiHB>3`BHL{Z8o+5;1Fl8pG>!r#prr5}?2vv%h zBE!k(KTt7~OUNJk9z@8_lv0>}?o(98WCxi(T#ZmUQ=DY^3#$>TU`i!9`QieEs^H6C zEkK#L@(B!9SYd2w-%M>=bgKfmE4xYRkx|AC>{z>4^seUHq6AedsapsdYb($)Xs_*( zmhzRxW$;DqMoEJ)!8*%4oUDaKj)#@hpAmFQvUORGo7f8ITiI2#oU7p#Iqd8jH#Cj~ zpwIURs*NiyXbg%tyNXK3>Lm2zxbk*3tIMquY&K3}3ap4`PJruM{@vur=^ zjii4g-A^N&dZJ6x{m~??ht6iRo+vXMYVJXg!&l8UsELu@A~{>~!w7HUdJLAdRKsA) zG3jaRRcIS&-$ucofxd8;q%-iX$O~Z0_8t^~JKJj@8mtCyyHvM5KXCs~ zxgO5VySXaFI`ZwZJGd@)#FZP2zGORT-$8@e4t+oGD*6TtsFmvJ2%;by?x;cStQ@jC z=U8@f82yyUyDLx!EZp5C=?>ua-BI)uEZS3ps52Kt_DHBx72Kl|+C^&|hV~vnTcC8` zFnSv95I5Z1Hy^uu$ba_HaP~q;cbB9mn{krqHnLer?sv~K6ZzK}6UYMxsQt?WAwAa? zcx-qDc#oJ}+A$Srz?;@@_z@Bc1XWg_>_L{YpxE2m$7i%E3-@w87UiQ>w&%~~+ok@< z^~{@m)XG-AkZ7}HGactL<`4{MbR(eJ77>DQ7TsI#8_b*8cH}3W}S#gA0whg#J=Zql;F`9 zRB7;cBKF2;8AIZ{8@f*f(SEpj!a$#qhdvYjde#r)!#(IHur^^>&C0W~!G9Ci(Sf`u zi(v67BT5+tM%G}Dk7S2ZrqhX}Ij;Cv0GU$(oO}stPaD|9EY+FQMroA5{nPJT#ePm! zLV!CbT6F^KF#C+*sFVi02F{&1h?D)W=&XTS#!%B|4O9m;eIJW2=b4qmtfYbFq~ty> zZe!06Xu!wzOjahj|1{ROa1LsAW)T6NXVyDZ0oEu|0@FF$oMLKy-WkBte zPDPaxK@s^$(`XyQo-&j3Ur>xedM;@0Q#nd?5|DPi)p*6~Oq7mAY1_767zPIPv6V zHAMBwODT#CvEuzO9k6EK<|tmws#1&C0s|izFd~C-e(Vwb*SY!E?pY^pyas`rzpxrt z1wHlO1MzM^a*uNJNM4K*jNdiD)f<4u_^A`8=^aA}rKf&yLZepvNd5U3y47gTCEUXk vKKKDkxEAjW82Fn3sUG_^;QH(!4t)r(eHPOBP|y7e@O^I9XKb+U^M?NeK;ROg diff --git a/tools/species_database/create_species_database.py b/tools/species_database/create_species_database.py index 05a6eee64..ac657460b 100644 --- a/tools/species_database/create_species_database.py +++ b/tools/species_database/create_species_database.py @@ -1,6 +1,7 @@ import numpy as np import h5py from argparse import ArgumentParser +from datetime import date parser = ArgumentParser(prog='create_species_database') parser.add_argument("-p", "--parameter", dest="ini_filename", @@ -11,6 +12,8 @@ help="Crosssection database to read-in parameters", metavar="FILE", default="XSec_Database.h5") parser.add_argument("-o", "--output", dest="database_output", help="Output file name", metavar="FILE", default="Species_Database.h5") +parser.add_argument("-r", "--reference", dest="reference", + help="Reference for species data", default="Unknown") args = parser.parse_args() @@ -66,7 +69,7 @@ def is_float(value): print('Species added to the database: ', hdf_species) hdf_species = hdf_species_group.create_dataset(hdf_species,data=hdf_input_data) else: - print('Species added to the database: ', hdf_species) + print('Species added to the database, but electronic levels are unknown: ', hdf_species) hdf_species = hdf_species_group.create_dataset(hdf_species,data=[0]) with open(args.ini_filename) as file: @@ -81,12 +84,14 @@ def is_float(value): hdf_species = array_dict[species_count] hdf_species = hdf_species_group[hdf_species] if var_name[1] in hdf_species.attrs: - print('Species parameter is already set: ', var_name[1]) + print('Species parameter is already set: ', var_name[1]) #raus?? else: if is_float(var_value): var_value = float(var_value) hdf_species.attrs[var_name[1]] = var_value - print('Species parameter set: ', var_name[1]) + print('Species parameter set: ', var_name[1]) #raus?? + # Write attributes for source and time of retrieval + hdf_species.attrs['Reference'] = args.reference + ', Added/Retrieved on ' + date.today().strftime("%B %d, %Y") + '.' # Copy cross-section data for dataset in h5_crosssection.keys(): @@ -96,6 +101,8 @@ def is_float(value): print('Cross-section added: ', dataset) hdf_xsec_group.copy(source=h5_crosssection[dataset],dest=hdf_xsec_group) +print('*** Database successfully built. ***') + h5_species.close() h5_electronic.close() h5_crosssection.close() From 655ed84f5d472ecc39852fee951bec153c021b85 Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Mon, 17 Oct 2022 18:27:02 +0200 Subject: [PATCH 021/222] add species name in all DSMC.ini --- regressioncheck/CHE_BGK/2D_VTS_Insert_CellLocal/DSMC.ini | 3 ++- regressioncheck/CHE_BGK/2D_VTS_SurfFlux_Tria/DSMC.ini | 3 ++- regressioncheck/CHE_BGK/RELAX_CH4/DSMC.ini | 3 ++- regressioncheck/CHE_DSMC/2D_VTS_Insert_CellLocal/DSMC.ini | 3 ++- regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/DSMC.ini | 3 ++- .../CHE_DSMC/2D_VTS_SurfFlux_Tria_CircInflow/DSMC.ini | 3 ++- regressioncheck/CHE_DSMC/BC_DiffuseWall_TempGrad/DSMC.ini | 3 ++- regressioncheck/CHE_DSMC/BC_PorousBC/DSMC.ini | 2 ++ regressioncheck/CHE_DSMC/BC_PorousBC_2DAxi/DSMC.ini | 2 ++ regressioncheck/CHE_DSMC/DSMC_QualityFactors/DSMC.ini | 3 ++- .../SurfFlux_RefMapping_Tracing_TriaTracking/DSMC.ini | 1 + .../CHE_DSMC/SurfFlux_Tria_Adaptive_ConstMassflow/DSMC.ini | 1 + .../CHE_DSMC/SurfFlux_Tria_Adaptive_ConstPressure/DSMC.ini | 1 + regressioncheck/CHE_FPFlow/2D_VTS_Insert_CellLocal/DSMC.ini | 1 + regressioncheck/CHE_FPFlow/2D_VTS_SurfFlux_Tria/DSMC.ini | 3 ++- regressioncheck/CHE_FPFlow/RELAX_CH4/DSMC.ini | 3 ++- regressioncheck/NIG_DSMC/2D_VTS_Distribution/DSMC.ini | 3 ++- regressioncheck/NIG_DSMC/Macroscopic_Restart/DSMC.ini | 1 + regressioncheck/NIG_DSMC/VSS_VHS_SelfDiffusion/DSMC.ini | 4 +++- regressioncheck/NIG_IntKind8/periodic/DSMC.ini | 1 + regressioncheck/NIG_LoadBalance/sphere_soft_DSMC/DSMC.ini | 1 + .../NIG_LoadBalance/sphere_soft_RK4_with_DSMC/DSMC.ini | 1 + regressioncheck/NIG_Reservoir/RELAX_CH4/DSMC.ini | 3 ++- regressioncheck/NIG_Reservoir/RELAX_CH4_PDR/DSMC.ini | 3 ++- regressioncheck/NIG_Reservoir/RELAX_CO2/DSMC.ini | 1 + regressioncheck/NIG_code_analyze/periodic/DSMC.ini | 1 + regressioncheck/NIG_tracking_DSMC/periodic/DSMC.ini | 1 + regressioncheck/NIG_tracking_DSMC/periodic_2cells/DSMC.ini | 1 + regressioncheck/WEK_BGKFlow/Flow_N2_70degCone/DSMC.ini | 1 + .../ChannelFlow_AdaptiveBoundary_ConstMassflow/DSMC.ini | 1 + .../ChannelFlow_AdaptiveBoundary_ConstPressure/DSMC.ini | 1 + regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_Curved/DSMC.ini | 1 + .../WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/DSMC.ini | 1 + regressioncheck/WEK_DSMC/Flow_N2_70degCone/DSMC.ini | 1 + regressioncheck/WEK_DSMC/fully_periodic_3D/DSMC.ini | 1 + regressioncheck/WEK_FPFlow/Flow_N2_70degCone/DSMC.ini | 1 + regressioncheck/run_basic/maxwell_DSMC/DSMC.ini | 1 + 37 files changed, 54 insertions(+), 14 deletions(-) diff --git a/regressioncheck/CHE_BGK/2D_VTS_Insert_CellLocal/DSMC.ini b/regressioncheck/CHE_BGK/2D_VTS_Insert_CellLocal/DSMC.ini index fa26a45d0..0afd6329c 100644 --- a/regressioncheck/CHE_BGK/2D_VTS_Insert_CellLocal/DSMC.ini +++ b/regressioncheck/CHE_BGK/2D_VTS_Insert_CellLocal/DSMC.ini @@ -1,10 +1,11 @@ ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! +Part-Species1-SpeciesName = O2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 Part-Species1-omega=0.27 Part-Species1-CharaTempRot=2.1 Part-Species1-CharaTempVib=2272.18 -Part-Species1-Ediss_eV=5.17 \ No newline at end of file +Part-Species1-Ediss_eV=5.17 diff --git a/regressioncheck/CHE_BGK/2D_VTS_SurfFlux_Tria/DSMC.ini b/regressioncheck/CHE_BGK/2D_VTS_SurfFlux_Tria/DSMC.ini index fa26a45d0..0afd6329c 100644 --- a/regressioncheck/CHE_BGK/2D_VTS_SurfFlux_Tria/DSMC.ini +++ b/regressioncheck/CHE_BGK/2D_VTS_SurfFlux_Tria/DSMC.ini @@ -1,10 +1,11 @@ ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! +Part-Species1-SpeciesName = O2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 Part-Species1-omega=0.27 Part-Species1-CharaTempRot=2.1 Part-Species1-CharaTempVib=2272.18 -Part-Species1-Ediss_eV=5.17 \ No newline at end of file +Part-Species1-Ediss_eV=5.17 diff --git a/regressioncheck/CHE_BGK/RELAX_CH4/DSMC.ini b/regressioncheck/CHE_BGK/RELAX_CH4/DSMC.ini index 4e84a6d7d..bd516b755 100644 --- a/regressioncheck/CHE_BGK/RELAX_CH4/DSMC.ini +++ b/regressioncheck/CHE_BGK/RELAX_CH4/DSMC.ini @@ -1,6 +1,7 @@ ! =============================================================================== ! ! Species1, CH4 ! =============================================================================== ! +Part-Species1-SpeciesName=CH4 Part-Species1-PolyatomicMol=true Part-Species1-InteractionID=2 Part-Species1-Tref=273 @@ -17,4 +18,4 @@ Part-Species1-CharaTempVib6=4341.6 Part-Species1-CharaTempVib7=1878.1 Part-Species1-CharaTempVib8=1878.1 Part-Species1-CharaTempVib9=1878.1 -Part-Species1-Ediss_eV=4.53 \ No newline at end of file +Part-Species1-Ediss_eV=4.53 diff --git a/regressioncheck/CHE_DSMC/2D_VTS_Insert_CellLocal/DSMC.ini b/regressioncheck/CHE_DSMC/2D_VTS_Insert_CellLocal/DSMC.ini index fa26a45d0..0afd6329c 100644 --- a/regressioncheck/CHE_DSMC/2D_VTS_Insert_CellLocal/DSMC.ini +++ b/regressioncheck/CHE_DSMC/2D_VTS_Insert_CellLocal/DSMC.ini @@ -1,10 +1,11 @@ ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! +Part-Species1-SpeciesName = O2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 Part-Species1-omega=0.27 Part-Species1-CharaTempRot=2.1 Part-Species1-CharaTempVib=2272.18 -Part-Species1-Ediss_eV=5.17 \ No newline at end of file +Part-Species1-Ediss_eV=5.17 diff --git a/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/DSMC.ini b/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/DSMC.ini index fa26a45d0..0afd6329c 100644 --- a/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/DSMC.ini +++ b/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/DSMC.ini @@ -1,10 +1,11 @@ ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! +Part-Species1-SpeciesName = O2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 Part-Species1-omega=0.27 Part-Species1-CharaTempRot=2.1 Part-Species1-CharaTempVib=2272.18 -Part-Species1-Ediss_eV=5.17 \ No newline at end of file +Part-Species1-Ediss_eV=5.17 diff --git a/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria_CircInflow/DSMC.ini b/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria_CircInflow/DSMC.ini index fa26a45d0..0afd6329c 100644 --- a/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria_CircInflow/DSMC.ini +++ b/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria_CircInflow/DSMC.ini @@ -1,10 +1,11 @@ ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! +Part-Species1-SpeciesName = O2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 Part-Species1-omega=0.27 Part-Species1-CharaTempRot=2.1 Part-Species1-CharaTempVib=2272.18 -Part-Species1-Ediss_eV=5.17 \ No newline at end of file +Part-Species1-Ediss_eV=5.17 diff --git a/regressioncheck/CHE_DSMC/BC_DiffuseWall_TempGrad/DSMC.ini b/regressioncheck/CHE_DSMC/BC_DiffuseWall_TempGrad/DSMC.ini index fa26a45d0..0afd6329c 100644 --- a/regressioncheck/CHE_DSMC/BC_DiffuseWall_TempGrad/DSMC.ini +++ b/regressioncheck/CHE_DSMC/BC_DiffuseWall_TempGrad/DSMC.ini @@ -1,10 +1,11 @@ ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! +Part-Species1-SpeciesName = O2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 Part-Species1-omega=0.27 Part-Species1-CharaTempRot=2.1 Part-Species1-CharaTempVib=2272.18 -Part-Species1-Ediss_eV=5.17 \ No newline at end of file +Part-Species1-Ediss_eV=5.17 diff --git a/regressioncheck/CHE_DSMC/BC_PorousBC/DSMC.ini b/regressioncheck/CHE_DSMC/BC_PorousBC/DSMC.ini index 558252b62..efdae24d4 100644 --- a/regressioncheck/CHE_DSMC/BC_PorousBC/DSMC.ini +++ b/regressioncheck/CHE_DSMC/BC_PorousBC/DSMC.ini @@ -1,6 +1,7 @@ ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! +Part-Species1-SpeciesName = O2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 @@ -11,6 +12,7 @@ Part-Species1-Ediss_eV=5.17 ! =============================================================================== ! ! Species2, O2 ! =============================================================================== ! +Part-Species2-SpeciesName = O2 Part-Species2-InteractionID = 2 Part-Species2-Tref = 273 Part-Species2-dref = 4.07E-10 diff --git a/regressioncheck/CHE_DSMC/BC_PorousBC_2DAxi/DSMC.ini b/regressioncheck/CHE_DSMC/BC_PorousBC_2DAxi/DSMC.ini index 558252b62..efdae24d4 100644 --- a/regressioncheck/CHE_DSMC/BC_PorousBC_2DAxi/DSMC.ini +++ b/regressioncheck/CHE_DSMC/BC_PorousBC_2DAxi/DSMC.ini @@ -1,6 +1,7 @@ ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! +Part-Species1-SpeciesName = O2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 @@ -11,6 +12,7 @@ Part-Species1-Ediss_eV=5.17 ! =============================================================================== ! ! Species2, O2 ! =============================================================================== ! +Part-Species2-SpeciesName = O2 Part-Species2-InteractionID = 2 Part-Species2-Tref = 273 Part-Species2-dref = 4.07E-10 diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/DSMC.ini b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/DSMC.ini index fa26a45d0..0afd6329c 100644 --- a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/DSMC.ini +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/DSMC.ini @@ -1,10 +1,11 @@ ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! +Part-Species1-SpeciesName = O2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 Part-Species1-omega=0.27 Part-Species1-CharaTempRot=2.1 Part-Species1-CharaTempVib=2272.18 -Part-Species1-Ediss_eV=5.17 \ No newline at end of file +Part-Species1-Ediss_eV=5.17 diff --git a/regressioncheck/CHE_DSMC/SurfFlux_RefMapping_Tracing_TriaTracking/DSMC.ini b/regressioncheck/CHE_DSMC/SurfFlux_RefMapping_Tracing_TriaTracking/DSMC.ini index 5b8b47aba..944eabf56 100644 --- a/regressioncheck/CHE_DSMC/SurfFlux_RefMapping_Tracing_TriaTracking/DSMC.ini +++ b/regressioncheck/CHE_DSMC/SurfFlux_RefMapping_Tracing_TriaTracking/DSMC.ini @@ -5,6 +5,7 @@ ! =============================================================================== ! ! Species1, Ar ! =============================================================================== ! +Part-Species1-SpeciesName = Ar Part-Species1-InteractionID = 1 Part-Species1-Tref = 1000 Part-Species1-dref = 3.595E-10 diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstMassflow/DSMC.ini b/regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstMassflow/DSMC.ini index 37bc4124e..e93c80486 100644 --- a/regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstMassflow/DSMC.ini +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstMassflow/DSMC.ini @@ -1,6 +1,7 @@ ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! +Part-Species1-SpeciesName = O2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstPressure/DSMC.ini b/regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstPressure/DSMC.ini index 37bc4124e..e93c80486 100644 --- a/regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstPressure/DSMC.ini +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstPressure/DSMC.ini @@ -1,6 +1,7 @@ ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! +Part-Species1-SpeciesName = O2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 diff --git a/regressioncheck/CHE_FPFlow/2D_VTS_Insert_CellLocal/DSMC.ini b/regressioncheck/CHE_FPFlow/2D_VTS_Insert_CellLocal/DSMC.ini index 28cd5c7c7..956e225b1 100644 --- a/regressioncheck/CHE_FPFlow/2D_VTS_Insert_CellLocal/DSMC.ini +++ b/regressioncheck/CHE_FPFlow/2D_VTS_Insert_CellLocal/DSMC.ini @@ -1,6 +1,7 @@ ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! +Part-Species1-SpeciesName = O2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 diff --git a/regressioncheck/CHE_FPFlow/2D_VTS_SurfFlux_Tria/DSMC.ini b/regressioncheck/CHE_FPFlow/2D_VTS_SurfFlux_Tria/DSMC.ini index fa26a45d0..0afd6329c 100644 --- a/regressioncheck/CHE_FPFlow/2D_VTS_SurfFlux_Tria/DSMC.ini +++ b/regressioncheck/CHE_FPFlow/2D_VTS_SurfFlux_Tria/DSMC.ini @@ -1,10 +1,11 @@ ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! +Part-Species1-SpeciesName = O2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 Part-Species1-omega=0.27 Part-Species1-CharaTempRot=2.1 Part-Species1-CharaTempVib=2272.18 -Part-Species1-Ediss_eV=5.17 \ No newline at end of file +Part-Species1-Ediss_eV=5.17 diff --git a/regressioncheck/CHE_FPFlow/RELAX_CH4/DSMC.ini b/regressioncheck/CHE_FPFlow/RELAX_CH4/DSMC.ini index 4e84a6d7d..3ac33e5ea 100644 --- a/regressioncheck/CHE_FPFlow/RELAX_CH4/DSMC.ini +++ b/regressioncheck/CHE_FPFlow/RELAX_CH4/DSMC.ini @@ -1,6 +1,7 @@ ! =============================================================================== ! ! Species1, CH4 ! =============================================================================== ! +Part-Species1-SpeciesName = CH4 Part-Species1-PolyatomicMol=true Part-Species1-InteractionID=2 Part-Species1-Tref=273 @@ -17,4 +18,4 @@ Part-Species1-CharaTempVib6=4341.6 Part-Species1-CharaTempVib7=1878.1 Part-Species1-CharaTempVib8=1878.1 Part-Species1-CharaTempVib9=1878.1 -Part-Species1-Ediss_eV=4.53 \ No newline at end of file +Part-Species1-Ediss_eV=4.53 diff --git a/regressioncheck/NIG_DSMC/2D_VTS_Distribution/DSMC.ini b/regressioncheck/NIG_DSMC/2D_VTS_Distribution/DSMC.ini index fa26a45d0..0afd6329c 100644 --- a/regressioncheck/NIG_DSMC/2D_VTS_Distribution/DSMC.ini +++ b/regressioncheck/NIG_DSMC/2D_VTS_Distribution/DSMC.ini @@ -1,10 +1,11 @@ ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! +Part-Species1-SpeciesName = O2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 Part-Species1-omega=0.27 Part-Species1-CharaTempRot=2.1 Part-Species1-CharaTempVib=2272.18 -Part-Species1-Ediss_eV=5.17 \ No newline at end of file +Part-Species1-Ediss_eV=5.17 diff --git a/regressioncheck/NIG_DSMC/Macroscopic_Restart/DSMC.ini b/regressioncheck/NIG_DSMC/Macroscopic_Restart/DSMC.ini index 079160ced..139714b99 100644 --- a/regressioncheck/NIG_DSMC/Macroscopic_Restart/DSMC.ini +++ b/regressioncheck/NIG_DSMC/Macroscopic_Restart/DSMC.ini @@ -5,6 +5,7 @@ ! =============================================================================== ! ! Species1, N2 ! =============================================================================== ! +Part-Species1-SpeciesName = N2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273.00 Part-Species1-dref = 4.17E-10 diff --git a/regressioncheck/NIG_DSMC/VSS_VHS_SelfDiffusion/DSMC.ini b/regressioncheck/NIG_DSMC/VSS_VHS_SelfDiffusion/DSMC.ini index 590bdbda0..20e2426a7 100644 --- a/regressioncheck/NIG_DSMC/VSS_VHS_SelfDiffusion/DSMC.ini +++ b/regressioncheck/NIG_DSMC/VSS_VHS_SelfDiffusion/DSMC.ini @@ -1,6 +1,7 @@ ! =============================================================================== ! ! Species1, N2 ! =============================================================================== ! +Part-Species1-SpeciesName = N2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.17E-10 @@ -10,9 +11,10 @@ Part-Species1-Ediss_eV = 9.79 ! =============================================================================== ! ! Species2, N2 ! =============================================================================== ! +Part-Species1-SpeciesName = N2 Part-Species2-InteractionID = 2 Part-Species2-Tref = 273 Part-Species2-dref = 4.17E-10 Part-Species2-omega = 0.24 Part-Species2-CharaTempVib = 3393.3 -Part-Species2-Ediss_eV = 9.79 \ No newline at end of file +Part-Species2-Ediss_eV = 9.79 diff --git a/regressioncheck/NIG_IntKind8/periodic/DSMC.ini b/regressioncheck/NIG_IntKind8/periodic/DSMC.ini index 5b8b47aba..944eabf56 100644 --- a/regressioncheck/NIG_IntKind8/periodic/DSMC.ini +++ b/regressioncheck/NIG_IntKind8/periodic/DSMC.ini @@ -5,6 +5,7 @@ ! =============================================================================== ! ! Species1, Ar ! =============================================================================== ! +Part-Species1-SpeciesName = Ar Part-Species1-InteractionID = 1 Part-Species1-Tref = 1000 Part-Species1-dref = 3.595E-10 diff --git a/regressioncheck/NIG_LoadBalance/sphere_soft_DSMC/DSMC.ini b/regressioncheck/NIG_LoadBalance/sphere_soft_DSMC/DSMC.ini index 5b8b47aba..944eabf56 100644 --- a/regressioncheck/NIG_LoadBalance/sphere_soft_DSMC/DSMC.ini +++ b/regressioncheck/NIG_LoadBalance/sphere_soft_DSMC/DSMC.ini @@ -5,6 +5,7 @@ ! =============================================================================== ! ! Species1, Ar ! =============================================================================== ! +Part-Species1-SpeciesName = Ar Part-Species1-InteractionID = 1 Part-Species1-Tref = 1000 Part-Species1-dref = 3.595E-10 diff --git a/regressioncheck/NIG_LoadBalance/sphere_soft_RK4_with_DSMC/DSMC.ini b/regressioncheck/NIG_LoadBalance/sphere_soft_RK4_with_DSMC/DSMC.ini index 5b8b47aba..944eabf56 100644 --- a/regressioncheck/NIG_LoadBalance/sphere_soft_RK4_with_DSMC/DSMC.ini +++ b/regressioncheck/NIG_LoadBalance/sphere_soft_RK4_with_DSMC/DSMC.ini @@ -5,6 +5,7 @@ ! =============================================================================== ! ! Species1, Ar ! =============================================================================== ! +Part-Species1-SpeciesName = Ar Part-Species1-InteractionID = 1 Part-Species1-Tref = 1000 Part-Species1-dref = 3.595E-10 diff --git a/regressioncheck/NIG_Reservoir/RELAX_CH4/DSMC.ini b/regressioncheck/NIG_Reservoir/RELAX_CH4/DSMC.ini index 4e84a6d7d..3ac33e5ea 100644 --- a/regressioncheck/NIG_Reservoir/RELAX_CH4/DSMC.ini +++ b/regressioncheck/NIG_Reservoir/RELAX_CH4/DSMC.ini @@ -1,6 +1,7 @@ ! =============================================================================== ! ! Species1, CH4 ! =============================================================================== ! +Part-Species1-SpeciesName = CH4 Part-Species1-PolyatomicMol=true Part-Species1-InteractionID=2 Part-Species1-Tref=273 @@ -17,4 +18,4 @@ Part-Species1-CharaTempVib6=4341.6 Part-Species1-CharaTempVib7=1878.1 Part-Species1-CharaTempVib8=1878.1 Part-Species1-CharaTempVib9=1878.1 -Part-Species1-Ediss_eV=4.53 \ No newline at end of file +Part-Species1-Ediss_eV=4.53 diff --git a/regressioncheck/NIG_Reservoir/RELAX_CH4_PDR/DSMC.ini b/regressioncheck/NIG_Reservoir/RELAX_CH4_PDR/DSMC.ini index 4e84a6d7d..3ac33e5ea 100644 --- a/regressioncheck/NIG_Reservoir/RELAX_CH4_PDR/DSMC.ini +++ b/regressioncheck/NIG_Reservoir/RELAX_CH4_PDR/DSMC.ini @@ -1,6 +1,7 @@ ! =============================================================================== ! ! Species1, CH4 ! =============================================================================== ! +Part-Species1-SpeciesName = CH4 Part-Species1-PolyatomicMol=true Part-Species1-InteractionID=2 Part-Species1-Tref=273 @@ -17,4 +18,4 @@ Part-Species1-CharaTempVib6=4341.6 Part-Species1-CharaTempVib7=1878.1 Part-Species1-CharaTempVib8=1878.1 Part-Species1-CharaTempVib9=1878.1 -Part-Species1-Ediss_eV=4.53 \ No newline at end of file +Part-Species1-Ediss_eV=4.53 diff --git a/regressioncheck/NIG_Reservoir/RELAX_CO2/DSMC.ini b/regressioncheck/NIG_Reservoir/RELAX_CO2/DSMC.ini index 95eb6b01e..ac9c9fb27 100644 --- a/regressioncheck/NIG_Reservoir/RELAX_CO2/DSMC.ini +++ b/regressioncheck/NIG_Reservoir/RELAX_CO2/DSMC.ini @@ -1,6 +1,7 @@ ! =============================================================================== ! ! Species1, CO2 ! =============================================================================== ! +Part-Species1-SpeciesName = CO2 Part-Species1-PolyatomicMol=true Part-Species1-InteractionID=2 Part-Species1-Tref=273 diff --git a/regressioncheck/NIG_code_analyze/periodic/DSMC.ini b/regressioncheck/NIG_code_analyze/periodic/DSMC.ini index 5b8b47aba..944eabf56 100644 --- a/regressioncheck/NIG_code_analyze/periodic/DSMC.ini +++ b/regressioncheck/NIG_code_analyze/periodic/DSMC.ini @@ -5,6 +5,7 @@ ! =============================================================================== ! ! Species1, Ar ! =============================================================================== ! +Part-Species1-SpeciesName = Ar Part-Species1-InteractionID = 1 Part-Species1-Tref = 1000 Part-Species1-dref = 3.595E-10 diff --git a/regressioncheck/NIG_tracking_DSMC/periodic/DSMC.ini b/regressioncheck/NIG_tracking_DSMC/periodic/DSMC.ini index 5b8b47aba..944eabf56 100644 --- a/regressioncheck/NIG_tracking_DSMC/periodic/DSMC.ini +++ b/regressioncheck/NIG_tracking_DSMC/periodic/DSMC.ini @@ -5,6 +5,7 @@ ! =============================================================================== ! ! Species1, Ar ! =============================================================================== ! +Part-Species1-SpeciesName = Ar Part-Species1-InteractionID = 1 Part-Species1-Tref = 1000 Part-Species1-dref = 3.595E-10 diff --git a/regressioncheck/NIG_tracking_DSMC/periodic_2cells/DSMC.ini b/regressioncheck/NIG_tracking_DSMC/periodic_2cells/DSMC.ini index 5b8b47aba..944eabf56 100644 --- a/regressioncheck/NIG_tracking_DSMC/periodic_2cells/DSMC.ini +++ b/regressioncheck/NIG_tracking_DSMC/periodic_2cells/DSMC.ini @@ -5,6 +5,7 @@ ! =============================================================================== ! ! Species1, Ar ! =============================================================================== ! +Part-Species1-SpeciesName = Ar Part-Species1-InteractionID = 1 Part-Species1-Tref = 1000 Part-Species1-dref = 3.595E-10 diff --git a/regressioncheck/WEK_BGKFlow/Flow_N2_70degCone/DSMC.ini b/regressioncheck/WEK_BGKFlow/Flow_N2_70degCone/DSMC.ini index e08cf0591..90960895d 100644 --- a/regressioncheck/WEK_BGKFlow/Flow_N2_70degCone/DSMC.ini +++ b/regressioncheck/WEK_BGKFlow/Flow_N2_70degCone/DSMC.ini @@ -5,6 +5,7 @@ ! =============================================================================== ! ! Species1, N2 ! =============================================================================== ! +Part-Species1-SpeciesName = N2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273.00 Part-Species1-dref = 4.17E-10 diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/DSMC.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/DSMC.ini index 37bc4124e..e93c80486 100644 --- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/DSMC.ini +++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/DSMC.ini @@ -1,6 +1,7 @@ ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! +Part-Species1-SpeciesName = O2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/DSMC.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/DSMC.ini index 37bc4124e..e93c80486 100644 --- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/DSMC.ini +++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/DSMC.ini @@ -1,6 +1,7 @@ ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! +Part-Species1-SpeciesName = O2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 diff --git a/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_Curved/DSMC.ini b/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_Curved/DSMC.ini index 5b8b47aba..944eabf56 100644 --- a/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_Curved/DSMC.ini +++ b/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_Curved/DSMC.ini @@ -5,6 +5,7 @@ ! =============================================================================== ! ! Species1, Ar ! =============================================================================== ! +Part-Species1-SpeciesName = Ar Part-Species1-InteractionID = 1 Part-Species1-Tref = 1000 Part-Species1-dref = 3.595E-10 diff --git a/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/DSMC.ini b/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/DSMC.ini index 5b8b47aba..944eabf56 100644 --- a/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/DSMC.ini +++ b/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/DSMC.ini @@ -5,6 +5,7 @@ ! =============================================================================== ! ! Species1, Ar ! =============================================================================== ! +Part-Species1-SpeciesName = Ar Part-Species1-InteractionID = 1 Part-Species1-Tref = 1000 Part-Species1-dref = 3.595E-10 diff --git a/regressioncheck/WEK_DSMC/Flow_N2_70degCone/DSMC.ini b/regressioncheck/WEK_DSMC/Flow_N2_70degCone/DSMC.ini index e08cf0591..90960895d 100644 --- a/regressioncheck/WEK_DSMC/Flow_N2_70degCone/DSMC.ini +++ b/regressioncheck/WEK_DSMC/Flow_N2_70degCone/DSMC.ini @@ -5,6 +5,7 @@ ! =============================================================================== ! ! Species1, N2 ! =============================================================================== ! +Part-Species1-SpeciesName = N2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273.00 Part-Species1-dref = 4.17E-10 diff --git a/regressioncheck/WEK_DSMC/fully_periodic_3D/DSMC.ini b/regressioncheck/WEK_DSMC/fully_periodic_3D/DSMC.ini index 5b8b47aba..944eabf56 100644 --- a/regressioncheck/WEK_DSMC/fully_periodic_3D/DSMC.ini +++ b/regressioncheck/WEK_DSMC/fully_periodic_3D/DSMC.ini @@ -5,6 +5,7 @@ ! =============================================================================== ! ! Species1, Ar ! =============================================================================== ! +Part-Species1-SpeciesName = Ar Part-Species1-InteractionID = 1 Part-Species1-Tref = 1000 Part-Species1-dref = 3.595E-10 diff --git a/regressioncheck/WEK_FPFlow/Flow_N2_70degCone/DSMC.ini b/regressioncheck/WEK_FPFlow/Flow_N2_70degCone/DSMC.ini index e08cf0591..90960895d 100644 --- a/regressioncheck/WEK_FPFlow/Flow_N2_70degCone/DSMC.ini +++ b/regressioncheck/WEK_FPFlow/Flow_N2_70degCone/DSMC.ini @@ -5,6 +5,7 @@ ! =============================================================================== ! ! Species1, N2 ! =============================================================================== ! +Part-Species1-SpeciesName = N2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273.00 Part-Species1-dref = 4.17E-10 diff --git a/regressioncheck/run_basic/maxwell_DSMC/DSMC.ini b/regressioncheck/run_basic/maxwell_DSMC/DSMC.ini index 5b8b47aba..944eabf56 100644 --- a/regressioncheck/run_basic/maxwell_DSMC/DSMC.ini +++ b/regressioncheck/run_basic/maxwell_DSMC/DSMC.ini @@ -5,6 +5,7 @@ ! =============================================================================== ! ! Species1, Ar ! =============================================================================== ! +Part-Species1-SpeciesName = Ar Part-Species1-InteractionID = 1 Part-Species1-Tref = 1000 Part-Species1-dref = 3.595E-10 From 830613f3a560118a40330532a0dc1371c3aa1924 Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Tue, 18 Oct 2022 13:25:58 +0200 Subject: [PATCH 022/222] read-in --- src/particles/particle_init.f90 | 96 +++++++++++++++++++++++++++------ src/particles/particle_vars.f90 | 1 + 2 files changed, 82 insertions(+), 15 deletions(-) diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index d95fdea42..38841b55d 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -82,6 +82,7 @@ SUBROUTINE DefineParametersParticles() CALL prms%CreateIntOption( 'Part-nSpecies' , 'Number of species used in calculation', '1') CALL prms%CreateStringOption( 'Part-Species[$]-SpeciesName' ,'Species name of Species[$]', 'none', numberedmulti=.TRUE.) CALL prms%CreateStringOption( 'Particles-Species-Database', 'File name for the species database', 'none') +CALL prms%CreateLogicalOption( 'Part-Species[$]-DoOverwriteParameters', 'Flag to set parameters in ini-file manually', '.FALSE.') ! Ionization CALL prms%CreateLogicalOption( 'Part-DoInitialIonization' , 'When restarting from a state, ionize the species to a '//& 'specific degree', '.FALSE.') @@ -1503,7 +1504,7 @@ SUBROUTINE InitializeSpeciesParameter() USE MOD_ReadInTools USE MOD_Particle_Vars USE MOD_io_hdf5 -USE MOD_HDF5_input, ONLY:ReadAttribute +USE MOD_HDF5_input, ONLY:ReadAttribute, DatasetExists USE MOD_DSMC_Vars ,ONLY: SpecDSMC #if USE_MPI USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance @@ -1521,32 +1522,36 @@ SUBROUTINE InitializeSpeciesParameter() CHARACTER(LEN=64) :: dsetname INTEGER(HID_T) :: file_id_specdb ! File identifier INTEGER(HID_T) :: dset_id_specdb ! Dataset identifier +LOGICAL :: DataSetFound !=================================================================================================================================== ! Read-in of the species database -SpeciesDatabase = GETSTR('Particles-Species-Database') +SpeciesDatabase = GETSTR('Particles-Species-Database') ALLOCATE(SpecDSMC(nSpecies)) DO iSpec = 1, nSpecies WRITE(UNIT=hilf,FMT='(I0)') iSpec SpecDSMC(iSpec)%Name = TRIM(GETSTR('Part-Species'//TRIM(hilf)//'-SpeciesName','none')) + IF(SpecDSMC(iSpec)%Name .EQ. 'none') THEN + ! CALL abort(__STAMP__,'ERROR: Species-name is not defined for Species:', iSpec) + END IF END DO ! iSpec -IF(SpeciesDatabase.EQ.'none') THEN - DO iSpec = 1, nSpecies - LBWRITE (UNIT_stdOut,'(66(". "))') - WRITE(UNIT=hilf,FMT='(I0)') iSpec - Species(iSpec)%ChargeIC = GETREAL('Part-Species'//TRIM(hilf)//'-ChargeIC') - Species(iSpec)%MassIC = GETREAL('Part-Species'//TRIM(hilf)//'-MassIC') - END DO ! iSpec -ELSE +DO iSpec = 1, nSpecies + Species(iSpec)%DoOverwriteParameters = GETLOGICAL('Part-Species'//TRIM(hilf)//'-DoOverwriteParameters') + IF(SpeciesDatabase.EQ.'none') THEN + Species(iSpec)%DoOverwriteParameters = .TRUE. + END IF +END DO + +IF(SpeciesDatabase.NE.'none') THEN ! Initialize FORTRAN interface. CALL H5OPEN_F(err) ! Check if file exists IF(.NOT.FILEEXISTS(SpeciesDatabase)) THEN - CALL abort(__STAMP__,'ERROR: Database ['//TRIM(SpeciesDatabase)//'] does not exist.') + ! CALL abort(__STAMP__,'ERROR: Database ['//TRIM(SpeciesDatabase)//'] does not exist.') END IF CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) @@ -1554,17 +1559,78 @@ SUBROUTINE InitializeSpeciesParameter() DO iSpec = 1, nSpecies LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) - CALL ReadAttribute(file_id_specdb,'ChargeIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%ChargeIC) - LBWRITE (UNIT_stdOut,*) 'ChargeIC: ', Species(iSpec)%ChargeIC - CALL ReadAttribute(file_id_specdb,'MassIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%MassIC) - LBWRITE (UNIT_stdOut,*) 'MassIC: ', Species(iSpec)%MassIC + + CALL DatasetExists(file_id_specdb,TRIM(dsetname),DataSetFound) + IF(.NOT.DataSetFound)THEN + Species(iSpec)%DoOverwriteParameters = .TRUE. + ! SWRITE(*,*) 'WARNING: DataSet not found: ['//TRIM(dsetname)//'] ['//TRIM(SpeciesDatabase)//']' + ELSE + CALL ReadAttribute(file_id_specdb,'ChargeIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%ChargeIC) + ! LBWRITE (UNIT_stdOut,*) 'ChargeIC: ', Species(iSpec)%ChargeIC + CALL ReadAttribute(file_id_specdb,'MassIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%MassIC) + ! LBWRITE (UNIT_stdOut,*) 'MassIC: ', Species(iSpec)%MassIC + END IF + END DO ! Close the file. CALL H5FCLOSE_F(file_id_specdb, err) ! Close FORTRAN interface. CALL H5CLOSE_F(err) + +END IF + +IF(ANY(Species(:)%DoOverwriteParameters)) THEN + DO iSpec = 1, nSpecies + IF(Species(iSpec)%DoOverwriteParameters) THEN + LBWRITE (UNIT_stdOut,'(66(". "))') + WRITE(UNIT=hilf,FMT='(I0)') iSpec + Species(iSpec)%ChargeIC = GETREAL('Part-Species'//TRIM(hilf)//'-ChargeIC') + Species(iSpec)%MassIC = GETREAL('Part-Species'//TRIM(hilf)//'-MassIC') + END IF + END DO ! iSpec END IF + +! IF(SpeciesDatabase.EQ.'none') THEN +! DO iSpec = 1, nSpecies +! LBWRITE (UNIT_stdOut,'(66(". "))') +! WRITE(UNIT=hilf,FMT='(I0)') iSpec +! Species(iSpec)%ChargeIC = GETREAL('Part-Species'//TRIM(hilf)//'-ChargeIC') +! Species(iSpec)%MassIC = GETREAL('Part-Species'//TRIM(hilf)//'-MassIC') +! END DO ! iSpec +! ELSE +! ! Initialize FORTRAN interface. +! CALL H5OPEN_F(err) + +! ! Check if file exists +! IF(.NOT.FILEEXISTS(SpeciesDatabase)) THEN +! CALL abort(__STAMP__,'ERROR: Database ['//TRIM(SpeciesDatabase)//'] does not exist.') +! END IF + +! CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) + +! DO iSpec = 1, nSpecies +! LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) +! dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + +! CALL DatasetExists(file_id_specdb,TRIM(dsetname),DataSetFound) +! IF(.NOT.DataSetFound)THEN +! CALL abort(& +! __STAMP__& +! ,'DataSet not found: ['//TRIM(dsetname)//'] ['//TRIM(SpeciesDatabase)//']') +! END IF + +! CALL ReadAttribute(file_id_specdb,'ChargeIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%ChargeIC) +! LBWRITE (UNIT_stdOut,*) 'ChargeIC: ', Species(iSpec)%ChargeIC +! CALL ReadAttribute(file_id_specdb,'MassIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%MassIC) +! LBWRITE (UNIT_stdOut,*) 'MassIC: ', Species(iSpec)%MassIC +! END DO +! ! Close the file. +! CALL H5FCLOSE_F(file_id_specdb, err) +! ! Close FORTRAN interface. +! CALL H5CLOSE_F(err) +! END IF + IF(nSpecies.GT.0)THEN LBWRITE (UNIT_stdOut,'(66(". "))') END IF ! nSpecies.GT.0 diff --git a/src/particles/particle_vars.f90 b/src/particles/particle_vars.f90 index 85a879686..3bbcc1feb 100644 --- a/src/particles/particle_vars.f90 +++ b/src/particles/particle_vars.f90 @@ -135,6 +135,7 @@ MODULE MOD_Particle_Vars INTEGER :: NumberOfInits ! Number of different initial particle placements TYPE(typeSurfaceflux),ALLOCATABLE :: Surfaceflux(:) ! Particle Data for each SurfaceFlux emission INTEGER :: nSurfacefluxBCs ! Number of SF emissions + LOGICAL :: DoOverwriteParameters ! Flag to read in parameters manually #if IMPA LOGICAL :: IsImplicit #endif From 7aa2a8ecaa9451d9a4f52ff0f9b3d0aa75a859dc Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Tue, 18 Oct 2022 16:51:44 +0200 Subject: [PATCH 023/222] current state + start interid in species --- src/particles/dsmc/dsmc_init.f90 | 12 ------------ src/particles/dsmc/dsmc_vars.f90 | 11 ----------- src/particles/particle_init.f90 | 24 ++++++++++++++++++------ src/particles/particle_vars.f90 | 11 +++++++++++ 4 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index f041dbd22..d996dbf01 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -179,17 +179,6 @@ SUBROUTINE DefineParametersDSMC() , '1.', numberedmulti=.TRUE.) CALL prms%SetSection("DSMC Species") - -CALL prms%CreateIntOption( 'Part-Species[$]-InteractionID' , 'ID for identification of particles \n'//& - ' 1: Atom\n'//& - ' 2: Molecule\n'//& - ' 4: Electron\n'//& - ' 10: Atomic Ion\n'//& - ' 20: Molecular Ion\n'//& - ' 40: Excited Atom\n'//& - '100: Excited Atomic Ion\n'//& - '200: Excited Molecule\n'//& - '400: Excited Molecular Ion)', '0', numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Part-Species[$]-Tref' & ,'collision parameter: species-specific reference temperature for VHS/VSS model.' & , numberedmulti=.TRUE.) @@ -414,7 +403,6 @@ SUBROUTINE InitDSMC() CollInf%crossSectionConstantMode = GETINT('Particles-DSMC-crossSectionConstantMode','0') DO iSpec = 1, nSpecies WRITE(UNIT=hilf,FMT='(I0)') iSpec - SpecDSMC(iSpec)%InterID = GETINT('Part-Species'//TRIM(hilf)//'-InteractionID','0') ! averagedCollisionParameters set true: species-specific collision parameters get read in IF(CollInf%averagedCollisionParameters) THEN SpecDSMC(iSpec)%Tref = GETREAL('Part-Species'//TRIM(hilf)//'-Tref' ) diff --git a/src/particles/dsmc/dsmc_vars.f90 b/src/particles/dsmc/dsmc_vars.f90 index 3d8896eed..3ff45d2f9 100644 --- a/src/particles/dsmc/dsmc_vars.f90 +++ b/src/particles/dsmc/dsmc_vars.f90 @@ -109,17 +109,6 @@ MODULE MOD_DSMC_Vars LOGICAL :: PolyatomicMol ! Species is a polyatomic molecule INTEGER :: SpecToPolyArray ! CHARACTER(LEN=64) :: Name ! Species Name, required for DSMCSpeciesElectronicDatabase - INTEGER :: InterID ! Identification number (e.g. for DSMC_prob_calc), ini_2 - ! 1 : Atom - ! 2 : Molecule - ! 4 : Electron - ! 10 : Atomic ion - ! 15 : Atomic CEX/MEX ion - ! 20 : Molecular ion - ! 40 : Excited atom - ! 100 : Excited atomic ion - ! 200 : Excited molecule - ! 400 : Excited molecular ion REAL :: Tref ! collision model: reference temperature , ini_2 REAL :: dref ! collision model: reference diameter , ini_2 REAL :: omega ! collision model: temperature exponent , ini_2 diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 38841b55d..c25086710 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -82,7 +82,18 @@ SUBROUTINE DefineParametersParticles() CALL prms%CreateIntOption( 'Part-nSpecies' , 'Number of species used in calculation', '1') CALL prms%CreateStringOption( 'Part-Species[$]-SpeciesName' ,'Species name of Species[$]', 'none', numberedmulti=.TRUE.) CALL prms%CreateStringOption( 'Particles-Species-Database', 'File name for the species database', 'none') -CALL prms%CreateLogicalOption( 'Part-Species[$]-DoOverwriteParameters', 'Flag to set parameters in ini-file manually', '.FALSE.') +CALL prms%CreateLogicalOption( 'Part-Species[$]-DoOverwriteParameters', 'Flag to set parameters in ini-file manually', '.FALSE.'& + , numberedmulti=.TRUE.) +CALL prms%CreateIntOption( 'Part-Species[$]-InteractionID' , 'ID for identification of particles \n'//& + ' 1: Atom\n'//& + ' 2: Molecule\n'//& + ' 4: Electron\n'//& + ' 10: Atomic Ion\n'//& + ' 20: Molecular Ion\n'//& + ' 40: Excited Atom\n'//& + '100: Excited Atomic Ion\n'//& + '200: Excited Molecule\n'//& + '400: Excited Molecular Ion)', '0', numberedmulti=.TRUE.) ! Ionization CALL prms%CreateLogicalOption( 'Part-DoInitialIonization' , 'When restarting from a state, ionize the species to a '//& 'specific degree', '.FALSE.') @@ -1534,7 +1545,7 @@ SUBROUTINE InitializeSpeciesParameter() WRITE(UNIT=hilf,FMT='(I0)') iSpec SpecDSMC(iSpec)%Name = TRIM(GETSTR('Part-Species'//TRIM(hilf)//'-SpeciesName','none')) IF(SpecDSMC(iSpec)%Name .EQ. 'none') THEN - ! CALL abort(__STAMP__,'ERROR: Species-name is not defined for Species:', iSpec) + CALL abort(__STAMP__,'ERROR: Species-name is not defined for Species:', iSpec) END IF END DO ! iSpec @@ -1551,7 +1562,7 @@ SUBROUTINE InitializeSpeciesParameter() ! Check if file exists IF(.NOT.FILEEXISTS(SpeciesDatabase)) THEN - ! CALL abort(__STAMP__,'ERROR: Database ['//TRIM(SpeciesDatabase)//'] does not exist.') + CALL abort(__STAMP__,'ERROR: Database ['//TRIM(SpeciesDatabase)//'] does not exist.') END IF CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) @@ -1563,12 +1574,12 @@ SUBROUTINE InitializeSpeciesParameter() CALL DatasetExists(file_id_specdb,TRIM(dsetname),DataSetFound) IF(.NOT.DataSetFound)THEN Species(iSpec)%DoOverwriteParameters = .TRUE. - ! SWRITE(*,*) 'WARNING: DataSet not found: ['//TRIM(dsetname)//'] ['//TRIM(SpeciesDatabase)//']' + SWRITE(*,*) 'WARNING: DataSet not found: ['//TRIM(dsetname)//'] ['//TRIM(SpeciesDatabase)//']' ELSE CALL ReadAttribute(file_id_specdb,'ChargeIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%ChargeIC) - ! LBWRITE (UNIT_stdOut,*) 'ChargeIC: ', Species(iSpec)%ChargeIC + LBWRITE (UNIT_stdOut,*) 'ChargeIC: ', Species(iSpec)%ChargeIC CALL ReadAttribute(file_id_specdb,'MassIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%MassIC) - ! LBWRITE (UNIT_stdOut,*) 'MassIC: ', Species(iSpec)%MassIC + LBWRITE (UNIT_stdOut,*) 'MassIC: ', Species(iSpec)%MassIC END IF END DO @@ -1586,6 +1597,7 @@ SUBROUTINE InitializeSpeciesParameter() WRITE(UNIT=hilf,FMT='(I0)') iSpec Species(iSpec)%ChargeIC = GETREAL('Part-Species'//TRIM(hilf)//'-ChargeIC') Species(iSpec)%MassIC = GETREAL('Part-Species'//TRIM(hilf)//'-MassIC') + Species(iSpec)%InterID = GETINT('Part-Species'//TRIM(hilf)//'-InteractionID') END IF END DO ! iSpec END IF diff --git a/src/particles/particle_vars.f90 b/src/particles/particle_vars.f90 index 3bbcc1feb..8c754ca69 100644 --- a/src/particles/particle_vars.f90 +++ b/src/particles/particle_vars.f90 @@ -131,6 +131,17 @@ MODULE MOD_Particle_Vars TYPE(tInit), ALLOCATABLE :: Init(:) ! =>NULL() ! Particle Data for each Initialisation REAL :: ChargeIC ! Particle Charge (without MPF) REAL :: MassIC ! Particle Mass (without MPF) + INTEGER :: InterID ! Identification number (e.g. for DSMC_prob_calc), ini_2 + ! 1 : Atom + ! 2 : Molecule + ! 4 : Electron + ! 10 : Atomic ion + ! 15 : Atomic CEX/MEX ion + ! 20 : Molecular ion + ! 40 : Excited atom + ! 100 : Excited atomic ion + ! 200 : Excited molecule + ! 400 : Excited molecular ion REAL :: MacroParticleFactor ! Number of Microparticle per Macroparticle INTEGER :: NumberOfInits ! Number of different initial particle placements TYPE(typeSurfaceflux),ALLOCATABLE :: Surfaceflux(:) ! Particle Data for each SurfaceFlux emission From 161b452b7d125c7a0a1945f3932fd5cd126fb9a1 Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Tue, 18 Oct 2022 17:47:00 +0200 Subject: [PATCH 024/222] move InterID from SpecDSMC to Species --- src/io_hdf5/hdf5_output_particle.f90 | 8 ++--- src/particles/analyze/particle_analyze.f90 | 8 ++--- .../analyze/particle_analyze_tools.f90 | 10 +++--- src/particles/bgk/bgk_colloperator.f90 | 36 +++++++++---------- src/particles/bgk/bgk_init.f90 | 2 +- .../boundary/particle_boundary_tools.f90 | 2 +- src/particles/dsmc/dsmc_analyze.f90 | 14 ++++---- src/particles/dsmc/dsmc_bg_gas.f90 | 2 +- src/particles/dsmc/dsmc_chemical_init.f90 | 16 ++++----- .../dsmc/dsmc_chemical_reactions.f90 | 30 ++++++++-------- src/particles/dsmc/dsmc_collis_mode.f90 | 20 +++++------ src/particles/dsmc/dsmc_collision_prob.f90 | 2 +- src/particles/dsmc/dsmc_electronic_model.f90 | 36 ++++++++++--------- src/particles/dsmc/dsmc_qk_procedures.f90 | 2 +- src/particles/dsmc/dsmc_relaxation.f90 | 17 ++++----- src/particles/dsmc/dsmc_symmetry.f90 | 4 +-- .../emission/particle_emission_tools.f90 | 4 +-- .../emission/particle_macroscopic_restart.f90 | 4 +-- src/particles/fp_flow/fpflow_colloperator.f90 | 10 +++--- src/particles/mcc/mcc.f90 | 9 ++--- src/particles/mcc/mcc_init.f90 | 10 +++--- src/particles/mcc/mcc_xsec.f90 | 12 +++---- src/particles/particle_mpi/particle_mpi.f90 | 6 ++-- src/particles/particle_vMPF.f90 | 20 +++++------ src/particles/restart/particle_readin.f90 | 6 ++-- src/particles/restart/particle_restart.f90 | 24 ++++++------- .../surfacemodel/surfacemodel_tools.f90 | 6 ++-- 27 files changed, 162 insertions(+), 158 deletions(-) diff --git a/src/io_hdf5/hdf5_output_particle.f90 b/src/io_hdf5/hdf5_output_particle.f90 index ff9288c80..b27481226 100644 --- a/src/io_hdf5/hdf5_output_particle.f90 +++ b/src/io_hdf5/hdf5_output_particle.f90 @@ -1333,7 +1333,7 @@ SUBROUTINE WriteClonesToHDF5(FileName) IF (withDSMC.AND.(DSMC%ElectronicModel.EQ.2)) THEN MaxElecQuant = 0 DO iSpec = 1, nSpecies - IF (.NOT.((SpecDSMC(iSpec)%InterID.EQ.4).OR.SpecDSMC(iSpec)%FullyIonized)) THEN + IF (.NOT.((Species(iSpec)%InterID.EQ.4).OR.SpecDSMC(iSpec)%FullyIonized)) THEN IF (SpecDSMC(iSpec)%MaxElecQuant.GT.MaxElecQuant) MaxElecQuant = SpecDSMC(iSpec)%MaxElecQuant END IF END DO @@ -1422,7 +1422,7 @@ SUBROUTINE WriteClonesToHDF5(FileName) END IF END IF IF (withDSMC.AND.(DSMC%ElectronicModel.EQ.2)) THEN - IF (.NOT.((SpecDSMC(ClonedParticles(pcount,iDelay)%Species)%InterID.EQ.4) & + IF (.NOT.((Species(ClonedParticles(pcount,iDelay)%Species)%InterID.EQ.4) & .OR.SpecDSMC(ClonedParticles(pcount,iDelay)%Species)%FullyIonized)) THEN ElecDistriData(1:SpecDSMC(ClonedParticles(pcount,iDelay)%Species)%MaxElecQuant,iPart) = & ClonedParticles(pcount,iDelay)%DistriFunc(1:SpecDSMC(ClonedParticles(pcount,iDelay)%Species)%MaxElecQuant) @@ -1875,7 +1875,7 @@ SUBROUTINE FillParticleData() IF (withDSMC.AND.(DSMC%ElectronicModel.EQ.2)) THEN MaxElecQuant = 0 DO iSpec = 1, nSpecies - IF (.NOT.((SpecDSMC(iSpec)%InterID.EQ.4).OR.SpecDSMC(iSpec)%FullyIonized)) THEN + IF (.NOT.((Species(iSpec)%InterID.EQ.4).OR.SpecDSMC(iSpec)%FullyIonized)) THEN IF (SpecDSMC(iSpec)%MaxElecQuant.GT.MaxElecQuant) MaxElecQuant = SpecDSMC(iSpec)%MaxElecQuant END IF END DO @@ -2037,7 +2037,7 @@ SUBROUTINE FillParticleData() PartInt(2,iElem_glob) = PartInt(1,iElem_glob) + INT(PEM%pNumber(iElem_loc),IK) pcount = PEM%pStart(iElem_loc) DO iPart=PartInt(1,iElem_glob)+1_IK,PartInt(2,iElem_glob) - IF (.NOT.((SpecDSMC(PartSpecies(pcount))%InterID.EQ.4).OR.SpecDSMC(PartSpecies(pcount))%FullyIonized)) THEN + IF (.NOT.((Species(PartSpecies(pcount))%InterID.EQ.4).OR.SpecDSMC(PartSpecies(pcount))%FullyIonized)) THEN ElecDistriData(1:SpecDSMC(PartSpecies(pcount))%MaxElecQuant,iPart) = & ElectronicDistriPart(pcount)%DistriFunc(1:SpecDSMC(PartSpecies(pcount))%MaxElecQuant) ELSE diff --git a/src/particles/analyze/particle_analyze.f90 b/src/particles/analyze/particle_analyze.f90 index 9fc434818..964d8ae50 100644 --- a/src/particles/analyze/particle_analyze.f90 +++ b/src/particles/analyze/particle_analyze.f90 @@ -1185,8 +1185,8 @@ SUBROUTINE AnalyzeParticles(Time) DO jSpec = iSpec, nSpecies IF(SpecXSec(CollInf%Coll_Case(iSpec,jSpec))%UseVibXSec) THEN ! Skip entry if both species are NOT molecules - IF(((SpecDSMC(iSpec)%InterID.NE.2).AND.(SpecDSMC(iSpec)%InterID.NE.20)).AND. & - ((SpecDSMC(jSpec)%InterID.NE.2).AND.(SpecDSMC(jSpec)%InterID.NE.20))) CYCLE + IF(((Species(iSpec)%InterID.NE.2).AND.(Species(iSpec)%InterID.NE.20)).AND. & + ((Species(jSpec)%InterID.NE.2).AND.(Species(jSpec)%InterID.NE.20))) CYCLE WRITE(unit_index,'(A1)',ADVANCE='NO') ',' WRITE(unit_index,'(I3.3,A,I3.3,A,I3.3)',ADVANCE='NO') OutputCounter,'-VibRelaxRate', iSpec, '+', jSpec OutputCounter = OutputCounter + 1 @@ -1569,8 +1569,8 @@ SUBROUTINE AnalyzeParticles(Time) iCase = CollInf%Coll_Case(iSpec,jSpec) IF(SpecXSec(iCase)%UseVibXSec) THEN ! Skip entry if both species are NOT molecules - IF(((SpecDSMC(iSpec)%InterID.NE.2).AND.(SpecDSMC(iSpec)%InterID.NE.20)).AND. & - ((SpecDSMC(jSpec)%InterID.NE.2).AND.(SpecDSMC(jSpec)%InterID.NE.20))) CYCLE + IF(((Species(iSpec)%InterID.NE.2).AND.(Species(iSpec)%InterID.NE.20)).AND. & + ((Species(jSpec)%InterID.NE.2).AND.(Species(jSpec)%InterID.NE.20))) CYCLE WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', VibRelaxRate(iCase) END IF END DO diff --git a/src/particles/analyze/particle_analyze_tools.f90 b/src/particles/analyze/particle_analyze_tools.f90 index 60a6d8dec..faf60934e 100644 --- a/src/particles/analyze/particle_analyze_tools.f90 +++ b/src/particles/analyze/particle_analyze_tools.f90 @@ -1343,7 +1343,7 @@ SUBROUTINE CalcMixtureTemp(NumSpec,Temp,IntTemp,IntEn,TempTotal,Xi_Vib,Xi_Elec) ! MODULES ! !----------------------------------------------------------------------------------------------------------------------------------! USE MOD_Globals -USE MOD_PARTICLE_Vars ,ONLY: nSpecies +USE MOD_PARTICLE_Vars ,ONLY: nSpecies, Species USE MOD_Particle_Analyze_Vars ,ONLY: nSpecAnalyze USE MOD_Particle_MPI_Vars ,ONLY: PartMPI USE MOD_DSMC_Vars ,ONLY: SpecDSMC, CollisMode, DSMC @@ -1377,7 +1377,7 @@ SUBROUTINE CalcMixtureTemp(NumSpec,Temp,IntTemp,IntEn,TempTotal,Xi_Vib,Xi_Elec) TempTotalDOF = 3.*Temp(iSpec) XiTotal = 3. ! If the species is molecular, add the vibrational energy to the temperature calculation - IF(((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)).AND.(NumSpec(iSpec).GT.0)) THEN + IF(((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)).AND.(NumSpec(iSpec).GT.0)) THEN XiTotal = XiTotal + SpecDSMC(iSpec)%Xi_Rot TempTotalDOF = TempTotalDOF + SpecDSMC(iSpec)%Xi_Rot*IntTemp(iSpec,2) IF(IntTemp(iSpec,1).GT.0) THEN @@ -1463,7 +1463,7 @@ SUBROUTINE CalcIntTempsAndEn(NumSpec,IntTemp,IntEn) EVib(iSpec) = EVib(iSpec) + PartStateIntEn(1,iPart) * GetParticleWeight(iPart) ERot(iSpec) = ERot(iSpec) + PartStateIntEn(2,iPart) * GetParticleWeight(iPart) IF (DSMC%ElectronicModel.GT.0) THEN - IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN Eelec(iSpec) = Eelec(iSpec) + PartStateIntEn(3,iPart) * GetParticleWeight(iPart) END IF END IF @@ -1487,7 +1487,7 @@ SUBROUTINE CalcIntTempsAndEn(NumSpec,IntTemp,IntEn) ! Calc TVib, TRot DO iSpec = 1, nSpecies NumSpecTemp = NumSpec(iSpec) - IF(((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)).AND.(NumSpecTemp.GT.0.0)) THEN + IF(((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)).AND.(NumSpecTemp.GT.0.0)) THEN IF (SpecDSMC(iSpec)%PolyatomicMol.AND.(SpecDSMC(iSpec)%Xi_Rot.EQ.3)) THEN IntTemp(iSpec,2) = 2.0*ERot(iSpec)/(3.0*BoltzmannConst*NumSpecTemp) !Calc TRot ELSE @@ -1513,7 +1513,7 @@ SUBROUTINE CalcIntTempsAndEn(NumSpec,IntTemp,IntEn) END IF IF(DSMC%ElectronicModel.GT.0) THEN IF(NumSpecTemp.GT.0) THEN - IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN IntTemp(iSpec,3) = CalcTelec(Eelec(iSpec)/NumSpecTemp,iSpec) END IF ELSE diff --git a/src/particles/bgk/bgk_colloperator.f90 b/src/particles/bgk/bgk_colloperator.f90 index 6e4aba53b..9e750775f 100644 --- a/src/particles/bgk/bgk_colloperator.f90 +++ b/src/particles/bgk/bgk_colloperator.f90 @@ -104,7 +104,7 @@ SUBROUTINE BGK_CollisionOperator(iPartIndx_Node, nPart, NodeVolume) partWeight = GetParticleWeight(iPart) Momentum_old(1:3) = Momentum_old(1:3) + PartState(4:6,iPart)*Species(iSpec)%MassIC*partWeight Energy_old = Energy_old + DOTPRODUCT(PartState(4:6,iPart))*0.5*Species(iSpec)%MassIC*partWeight - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN Energy_old = Energy_old + (PartStateIntEn(1,iPart) + PartStateIntEn(2,iPart))*partWeight END IF END DO @@ -133,7 +133,7 @@ SUBROUTINE BGK_CollisionOperator(iPartIndx_Node, nPart, NodeVolume) ! Calculation of the rotational and vibrational degrees of freedom for molecules nXiVibDOF=0 ! Initialize IF (nSpecies.EQ.1) THEN - IF((SpecDSMC(1)%InterID.EQ.2).OR.(SpecDSMC(1)%InterID.EQ.20)) THEN + IF((Species(1)%InterID.EQ.2).OR.(Species(1)%InterID.EQ.20)) THEN IF(SpecDSMC(1)%PolyatomicMol) THEN iPolyatMole = SpecDSMC(1)%SpecToPolyArray nXiVibDOF = PolyatomMolDSMC(iPolyatMole)%VibDOF @@ -159,7 +159,7 @@ SUBROUTINE BGK_CollisionOperator(iPartIndx_Node, nPart, NodeVolume) ! 3.) Treatment of molecules: determination of the rotational and vibrational relaxation frequency using the collision frequency, ! which is not the same as the relaxation frequency of distribution function, calculated above. -IF(ANY(SpecDSMC(:)%InterID.EQ.2).OR.ANY(SpecDSMC(:)%InterID.EQ.20)) THEN +IF(ANY(Species(:)%InterID.EQ.2).OR.ANY(Species(:)%InterID.EQ.20)) THEN collisionfreqSpec = 0.0 DO iSpec = 1, nSpecies DO jSpec = 1, nSpecies @@ -230,7 +230,7 @@ SUBROUTINE BGK_CollisionOperator(iPartIndx_Node, nPart, NodeVolume) END DO ! 7.) Vibrational energy of the molecules: Ensure energy conservation by scaling the new vibrational states with the factor alpha -IF(ANY(SpecDSMC(:)%InterID.EQ.2).OR.ANY(SpecDSMC(:)%InterID.EQ.20)) THEN +IF(ANY(Species(:)%InterID.EQ.2).OR.ANY(Species(:)%InterID.EQ.20)) THEN CALL EnergyConsVib(nPart, nVibRelax, nVibRelaxSpec, iPartIndx_NodeRelaxVib, NewEnVib, OldEn, nXiVibDOF, Xi_VibSpec, VibEnergyDOF, TEqui) END IF @@ -265,7 +265,7 @@ SUBROUTINE BGK_CollisionOperator(iPartIndx_Node, nPart, NodeVolume) partWeight = GetParticleWeight(iPart) Momentum_new(1:3) = Momentum_new(1:3) + (PartState(4:6,iPart)) * Species(iSpec)%MassIC*partWeight Energy_new = Energy_new + DOTPRODUCT((PartState(4:6,iPart)))*0.5*Species(iSpec)%MassIC*partWeight - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN Energy_new = Energy_new + (PartStateIntEn(1,iPart) + PartStateIntEn(2,iPart))*partWeight END IF END DO @@ -387,7 +387,7 @@ SUBROUTINE CalcMoments(nPart, iPartIndx_Node, nSpec, vBulkAll, totalWeight, tota totalWeight3 = totalWeight3 + partWeight*partWeight*partWeight END IF OldEn = OldEn + 0.5*Species(iSpec)%MassIC * vmag2*partWeight - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN IF(BGKDoVibRelaxation) THEN EVibSpec(iSpec) = EVibSpec(iSpec) + (PartStateIntEn(1,iPart) - SpecDSMC(iSpec)%EZeroPoint) * partWeight END IF @@ -436,7 +436,7 @@ SUBROUTINE CalcInnerDOFs(nSpec, EVibSpec, ERotSpec, totalWeightSpec, TVibSpec, T !> Determine the internal degrees of freedom and the respective temperature (rotation/vibration) for diatomic/polyatomic species !=================================================================================================================================== ! MODULES -USE MOD_Particle_Vars ,ONLY: nSpecies +USE MOD_Particle_Vars ,ONLY: nSpecies, Species USE MOD_DSMC_Vars ,ONLY: SpecDSMC, PolyatomMolDSMC USE MOD_BGK_Vars ,ONLY: BGKDoVibRelaxation USE MOD_Globals_Vars ,ONLY: BoltzmannConst @@ -459,7 +459,7 @@ SUBROUTINE CalcInnerDOFs(nSpec, EVibSpec, ERotSpec, totalWeightSpec, TVibSpec, T Xi_VibSpec=0.; InnerDOF=0.; Xi_RotSpec=0.; Xi_Vib_oldSpec=0.; TVibSpec=0.; TRotSpec=0. DO iSpec = 1, nSpecies IF (nSpec(iSpec).EQ.0) CYCLE - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN IF(BGKDoVibRelaxation) THEN IF(SpecDSMC(iSpec)%PolyatomicMol) THEN iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray @@ -528,7 +528,7 @@ SUBROUTINE CalcGasProperties(nSpec, dens, InnerDOF, totalWeightSpec, totalWeight DO iSpec = 1, nSpecies IF (nSpec(iSpec).EQ.0) CYCLE PrandtlCorrection = PrandtlCorrection + MolarFraction(iSpec)*MassIC_Mixture/Species(iSpec)%MassIC - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN C_P = C_P + ((5. + (Xi_VibSpec(iSpec)+Xi_RotSpec(iSpec)))/2.) * BoltzmannConst / Species(iSpec)%MassIC * MassFraction(iSpec) ELSE C_P = C_P + (5./2.) * BoltzmannConst / Species(iSpec)%MassIC * MassFraction(iSpec) @@ -551,7 +551,7 @@ SUBROUTINE CalcGasProperties(nSpec, dens, InnerDOF, totalWeightSpec, totalWeight *CollInf%Tref(iSpec,iSpec)**(CollInf%omega(iSpec,iSpec) + 0.5)*CellTemp**(-CollInf%omega(iSpec,iSpec) - 0.5)) END IF ! Thermal conductivity per species (Eucken's formula with a correction by Hirschfelder for the internal degrees of freedom) - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN thermalcondspec(iSpec) = 0.25 * (15. + 2. * (Xi_VibSpec(iSpec)+Xi_RotSpec(iSpec)) * 1.328) & * dynamicvisSpec(iSpec) * BoltzmannConst / Species(iSpec)%MassIC ELSE @@ -658,7 +658,7 @@ SUBROUTINE DetermineRelaxPart(nPart, iPartIndx_Node, relaxfreq, dtCell, RotExpSp iPartIndx_NodeRelaxTemp(nNotRelax) = iPart vBulk(1:3) = vBulk(1:3) + PartState(4:6,iPart)*Species(iSpec)%MassIC*partWeight END IF - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN !Rotation CALL RANDOM_NUMBER(iRan) IF ((1.-RotExpSpec(iSpec)).GT.iRan) THEN @@ -1358,7 +1358,7 @@ SUBROUTINE CalcTEquiMulti(nPart, nSpec, CellTemp, TRotSpec, TVibSpec, Xi_VibSpec ! MODULES USE MOD_DSMC_Vars, ONLY: SpecDSMC USE MOD_BGK_Vars, ONLY: BGKDoVibRelaxation -USE MOD_Particle_Vars, ONLY: nSpecies +USE MOD_Particle_Vars, ONLY: nSpecies, Species ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -1394,7 +1394,7 @@ SUBROUTINE CalcTEquiMulti(nPart, nSpec, CellTemp, TRotSpec, TVibSpec, Xi_VibSpec RotFracSpec = 0.0 VibFracSpec = 0.0 DO iSpec=1, nSpecies - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN RotExpSpec(iSpec) = exp(-rotrelaxfreqSpec(iSpec)*dtCell/correctFacRot) RotFracSpec(iSpec) = nSpec(iSpec)*(1.-RotExpSpec(iSpec)) IF(DoVibRelax) THEN @@ -1411,7 +1411,7 @@ SUBROUTINE CalcTEquiMulti(nPart, nSpec, CellTemp, TRotSpec, TVibSpec, Xi_VibSpec TEqui = 3.*(nPart-1.)*CellTemp TEquiNumDof = 3.*(nPart-1.) DO iSpec=1, nSpecies - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN TEqui = TEqui + 2.*RotFracSpec(iSpec)*TRotSpec(iSpec)+Xi_Vib_oldSpec(iSpec)*VibFracSpec(iSpec)*TVibSpec(iSpec) TEquiNumDof = TEquiNumDof + 2.*RotFracSpec(iSpec) + Xi_Vib_oldSpec(iSpec)*VibFracSpec(iSpec) END IF @@ -1419,7 +1419,7 @@ SUBROUTINE CalcTEquiMulti(nPart, nSpec, CellTemp, TRotSpec, TVibSpec, Xi_VibSpec TEqui = TEqui / TEquiNumDof DO WHILE ( ABS( TEqui - TEqui_Old ) .GT. eps_prec ) DO iSpec = 1, nSpecies - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN IF (ABS(TRotSpec(iSpec)-TEqui).LT.1E-3) THEN RotExpSpec(iSpec) = exp(-rotrelaxfreqSpec(iSpec)*dtCell/correctFacRot) ELSE @@ -1462,7 +1462,7 @@ SUBROUTINE CalcTEquiMulti(nPart, nSpec, CellTemp, TRotSpec, TVibSpec, Xi_VibSpec TEqui = 3.*(nPart-1.)*CellTemp TEquiNumDof = 3.*(nPart-1.) DO iSpec=1, nSpecies - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN TEqui = TEqui + 2.*RotFracSpec(iSpec)*TRotSpec(iSpec)+Xi_Vib_oldSpec(iSpec)*VibFracSpec(iSpec)*TVibSpec(iSpec) TEquiNumDof = TEquiNumDof + 2.*RotFracSpec(iSpec) + Xi_VibSpec(iSpec)*VibFracSpec(iSpec) END IF @@ -1472,7 +1472,7 @@ SUBROUTINE CalcTEquiMulti(nPart, nSpec, CellTemp, TRotSpec, TVibSpec, Xi_VibSpec DO WHILE( ABS( TEqui - TEqui_Old2 ) .GT. eps_prec ) TEqui =(TEqui + TEqui_Old2)*0.5 DO iSpec=1, nSpecies - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN exparg = SpecDSMC(iSpec)%CharaTVib/TEqui IF(CHECKEXP(exparg))THEN Xi_VibSpec(iSpec) = 2.*SpecDSMC(iSpec)%CharaTVib/TEqui/(EXP(exparg)-1.) @@ -1485,7 +1485,7 @@ SUBROUTINE CalcTEquiMulti(nPart, nSpec, CellTemp, TRotSpec, TVibSpec, Xi_VibSpec TEqui = 3.*(nPart-1.)*CellTemp TEquiNumDof = 3.*(nPart-1.) DO iSpec=1, nSpecies - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN TEqui = TEqui + 2.*RotFracSpec(iSpec)*TRotSpec(iSpec)+Xi_Vib_oldSpec(iSpec)*VibFracSpec(iSpec)*TVibSpec(iSpec) TEquiNumDof = TEquiNumDof + 2.*RotFracSpec(iSpec) + Xi_VibSpec(iSpec)*VibFracSpec(iSpec) END IF diff --git a/src/particles/bgk/bgk_init.f90 b/src/particles/bgk/bgk_init.f90 index ceec41997..c143ba04e 100644 --- a/src/particles/bgk/bgk_init.f90 +++ b/src/particles/bgk/bgk_init.f90 @@ -117,7 +117,7 @@ SUBROUTINE InitBGK() MoleculePresent = .FALSE. ALLOCATE(SpecBGK(nSpecies)) DO iSpec=1, nSpecies - IF ((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) MoleculePresent = .TRUE. + IF ((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) MoleculePresent = .TRUE. ALLOCATE(SpecBGK(iSpec)%CollFreqPreFactor(nSpecies)) DO iSpec2=1, nSpecies IF (iSpec.EQ.iSpec2) THEN diff --git a/src/particles/boundary/particle_boundary_tools.f90 b/src/particles/boundary/particle_boundary_tools.f90 index 8e073254a..d4b9ff75c 100644 --- a/src/particles/boundary/particle_boundary_tools.f90 +++ b/src/particles/boundary/particle_boundary_tools.f90 @@ -152,7 +152,7 @@ SUBROUTINE CalcWallSample(PartID,SurfSideID,SampleType,SurfaceNormal_opt) SampWallState(ETransID ,SubP,SubQ,SurfSideID) = SampWallState(ETransID ,SubP,SubQ,SurfSideID) + ETrans * MPF IF (useDSMC) THEN IF (CollisMode.GT.1) THEN - IF ((SpecDSMC(SpecID)%InterID.EQ.2).OR.SpecDSMC(SpecID)%InterID.EQ.20) THEN + IF ((Species(SpecID)%InterID.EQ.2).OR.Species(SpecID)%InterID.EQ.20) THEN !---- Sampling the internal (rotational) energy accommodation at walls SampWallState(ERotID ,SubP,SubQ,SurfSideID) = SampWallState(ERotID ,SubP,SubQ,SurfSideID) + PartStateIntEn(2,PartID) * MPF !---- Sampling for internal (vibrational) energy accommodation at walls diff --git a/src/particles/dsmc/dsmc_analyze.f90 b/src/particles/dsmc/dsmc_analyze.f90 index e478ab743..9d1eb1953 100644 --- a/src/particles/dsmc/dsmc_analyze.f90 +++ b/src/particles/dsmc/dsmc_analyze.f90 @@ -424,7 +424,7 @@ SUBROUTINE CalcGammaVib() !=================================================================================================================================== ! MODULES USE MOD_Globals -USE MOD_Particle_Vars ,ONLY: nSpecies +USE MOD_Particle_Vars ,ONLY: nSpecies, Species USE MOD_DSMC_Vars ,ONLY: SpecDSMC, PolyatomMolDSMC, DSMC ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -440,7 +440,7 @@ SUBROUTINE CalcGammaVib() ! Calculate GammaVib Factor = Xi_Vib² * exp(CharaTVib/T_trans) / 2 DO iSpec = 1, nSpecies - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN ! First, reset the GammaVib array/value IF(SpecDSMC(iSpec)%PolyatomicMol) THEN iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray @@ -478,7 +478,7 @@ SUBROUTINE CalcGammaVib() END IF END IF ! CharaTVib/TempTrans.LT.80 END IF ! TempTrans.GT.0.0 - END IF ! (SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20) + END IF ! (Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20) END DO ! iSpec = 1, nSpecies END SUBROUTINE CalcGammaVib @@ -676,13 +676,13 @@ SUBROUTINE DSMC_data_sampling() DSMC_Solution(7,iElem,iSpec) = DSMC_Solution(7,iElem, iSpec) + partWeight !density number IF(useDSMC)THEN IF ((CollisMode.EQ.2).OR.(CollisMode.EQ.3)) THEN - IF ((SpecDSMC(PartSpecies(iPart))%InterID.EQ.2).OR.(SpecDSMC(PartSpecies(iPart))%InterID.EQ.20)) THEN + IF ((Species(PartSpecies(iPart))%InterID.EQ.2).OR.(Species(PartSpecies(iPart))%InterID.EQ.20)) THEN DSMC_Solution(8,iElem, iSpec) = DSMC_Solution(8,iElem, iSpec) & + (PartStateIntEn(1,iPart) - SpecDSMC(iSpec)%EZeroPoint)*partWeight DSMC_Solution(9,iElem, iSpec) = DSMC_Solution(9,iElem, iSpec)+PartStateIntEn(2,iPart)*partWeight END IF IF (DSMC%ElectronicModel.GT.0) THEN - IF ((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF ((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN DSMC_Solution(10,iElem,iSpec)=DSMC_Solution(10,iElem,iSpec)+PartStateIntEn(3,iPart)*partWeight END IF END IF @@ -815,7 +815,7 @@ SUBROUTINE DSMC_output_calc(nVar,nVar_quality,nVarloc,DSMC_MacroVal) ! compute internal energies / has to be changed for vfd IF(useDSMC)THEN IF ((CollisMode.EQ.2).OR.(CollisMode.EQ.3))THEN - IF ((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF ((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN IF(SpecDSMC(iSpec)%PolyatomicMol) THEN IF( (PartEvib/PartNum) .GT. 0.0 ) THEN Macro_TempVib = CalcTVibPoly(PartEvib/PartNum + SpecDSMC(iSpec)%EZeroPoint, iSpec) @@ -838,7 +838,7 @@ SUBROUTINE DSMC_output_calc(nVar,nVar_quality,nVarloc,DSMC_MacroVal) END IF END IF IF (DSMC%ElectronicModel.GT.0) THEN - IF ((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF ((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN Macro_TempElec = CalcTelec(PartEelec/PartNum, iSpec) HeavyPartNum = HeavyPartNum + Macro_PartNum END IF diff --git a/src/particles/dsmc/dsmc_bg_gas.f90 b/src/particles/dsmc/dsmc_bg_gas.f90 index 0af9890c4..a10111ee3 100644 --- a/src/particles/dsmc/dsmc_bg_gas.f90 +++ b/src/particles/dsmc/dsmc_bg_gas.f90 @@ -1171,7 +1171,7 @@ SUBROUTINE BGGas_RegionsSetInternalTemp() ! Loop over all the inits for the species (different inits for different regions) DO iInit = 1, Species(iSpec)%NumberOfInits IF(BGGas%RegionElemType(iElem).EQ.Species(iSpec)%Init(iInit)%BGGRegion) THEN - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN ! Vibrational temperature BGGas%Distribution(BGGas%MapSpecToBGSpec(iSpec),8,iElem) = SpecDSMC(iSpec)%Init(iInit)%TVib ! Rotational temperature diff --git a/src/particles/dsmc/dsmc_chemical_init.f90 b/src/particles/dsmc/dsmc_chemical_init.f90 index f68d7a5d9..893a894b4 100644 --- a/src/particles/dsmc/dsmc_chemical_init.f90 +++ b/src/particles/dsmc/dsmc_chemical_init.f90 @@ -267,7 +267,7 @@ SUBROUTINE DSMC_chemical_init() DO iSpec = 1, nSpecies IF(BGGas%BackgroundSpecies(iSpec)) THEN ! Background gas: Calculation of the mean vibrational quantum number of diatomic molecules - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN IF(.NOT.SpecDSMC(iSpec)%PolyatomicMol) THEN BGGasEVib = DSMC%GammaQuant * BoltzmannConst * SpecDSMC(iSpec)%CharaTVib & + BoltzmannConst * SpecDSMC(iSpec)%CharaTVib / (EXP(SpecDSMC(iSpec)%CharaTVib / SpecDSMC(iSpec)%Init(1)%TVib) - 1) @@ -462,8 +462,8 @@ SUBROUTINE DSMC_chemical_init() END IF END IF ! At least a molecule is given as a reactant - IF((SpecDSMC(ChemReac%Reactants(iReac,1))%InterID.NE.2).AND.(SpecDSMC(ChemReac%Reactants(iReac,1))%InterID.NE.20) & - .AND.(SpecDSMC(ChemReac%Reactants(iReac,2))%InterID.NE.2).AND.(SpecDSMC(ChemReac%Reactants(iReac,2))%InterID.NE.20)) THEN + IF((Species(ChemReac%Reactants(iReac,1))%InterID.NE.2).AND.(Species(ChemReac%Reactants(iReac,1))%InterID.NE.20) & + .AND.(Species(ChemReac%Reactants(iReac,2))%InterID.NE.2).AND.(Species(ChemReac%Reactants(iReac,2))%InterID.NE.20)) THEN CALL abort(__STAMP__,& 'Dissociation - Error in Definition: None of the reactants is a molecule, check species indices and charge definition. ReacNbr: ',iReac) END IF @@ -565,7 +565,7 @@ SUBROUTINE InitReactionPaths() IF(UseBRElectronFluid) THEN DO iProd = 1,4 IF(ChemReac%Products(iReac,iProd).NE.0)THEN - IF(SpecDSMC(ChemReac%Products(iReac,iProd))%InterID.EQ.4) CYCLE REACLOOP + IF(Species(ChemReac%Products(iReac,iProd))%InterID.EQ.4) CYCLE REACLOOP END IF ! ChemReac%Products(iReac,iProd).NE.0 END DO END IF @@ -602,7 +602,7 @@ SUBROUTINE InitReactionPaths() IF(UseBRElectronFluid) THEN DO iProd = 1,4 IF(ChemReac%Products(iReac,iProd).NE.0)THEN - IF(SpecDSMC(ChemReac%Products(iReac,iProd))%InterID.EQ.4) CYCLE REACLOOP2 + IF(Species(ChemReac%Products(iReac,iProd))%InterID.EQ.4) CYCLE REACLOOP2 END IF ! ChemReac%Products(iReac,iProd).NE.0 END DO END IF @@ -647,7 +647,7 @@ SUBROUTINE DSMC_BackwardRate_init() USE MOD_Globals USE MOD_ReadInTools USE MOD_DSMC_Vars ,ONLY: ChemReac, DSMC, SpecDSMC, PolyatomMolDSMC -USE MOD_PARTICLE_Vars ,ONLY: nSpecies +USE MOD_PARTICLE_Vars ,ONLY: nSpecies, Species USE MOD_DSMC_ChemReact ,ONLY: CalcPartitionFunction ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -667,7 +667,7 @@ SUBROUTINE DSMC_BackwardRate_init() ! 1.) Read-in of species parameters for the partition function calculation DO iSpec = 1, nSpecies - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN WRITE(UNIT=hilf,FMT='(I0)') iSpec SpecDSMC(iSpec)%SymmetryFactor = GETINT('Part-Species'//TRIM(hilf)//'-SymmetryFactor') IF(SpecDSMC(iSpec)%PolyatomicMol) THEN @@ -694,7 +694,7 @@ SUBROUTINE DSMC_BackwardRate_init() END IF END IF END IF - IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN IF(.NOT.ALLOCATED(SpecDSMC(iSpec)%ElectronicState)) THEN CALL abort(& __STAMP__& diff --git a/src/particles/dsmc/dsmc_chemical_reactions.f90 b/src/particles/dsmc/dsmc_chemical_reactions.f90 index c924ecded..288af50f0 100644 --- a/src/particles/dsmc/dsmc_chemical_reactions.f90 +++ b/src/particles/dsmc/dsmc_chemical_reactions.f90 @@ -178,12 +178,12 @@ SUBROUTINE CalcReactionProb(iPair,iReac,ReactionProb,nPair,NumDens) !--------------------------------------------------------------------------------------------------------------------------------- EZeroPoint_Educt = 0.0; EZeroPoint_Prod = 0.0 DO iPart = 1, NINT(NumWeightEduct) - IF((SpecDSMC(EductReac(iPart))%InterID.EQ.2).OR.(SpecDSMC(EductReac(iPart))%InterID.EQ.20)) THEN + IF((Species(EductReac(iPart))%InterID.EQ.2).OR.(Species(EductReac(iPart))%InterID.EQ.20)) THEN EZeroPoint_Educt = EZeroPoint_Educt + SpecDSMC(EductReac(iPart))%EZeroPoint * Weight(iPart) END IF END DO DO iPart = 1, NINT(NumWeightProd) - IF((SpecDSMC(ProductReac(iPart))%InterID.EQ.2).OR.(SpecDSMC(ProductReac(iPart))%InterID.EQ.20)) THEN + IF((Species(ProductReac(iPart))%InterID.EQ.2).OR.(Species(ProductReac(iPart))%InterID.EQ.20)) THEN EZeroPoint_Prod = EZeroPoint_Prod + SpecDSMC(ProductReac(iPart))%EZeroPoint * Weight(iPart) END IF END DO @@ -198,7 +198,7 @@ SUBROUTINE CalcReactionProb(iPair,iReac,ReactionProb,nPair,NumDens) !--------------------------------------------------------------------------------------------------------------------------------- Xi_vib = 0.0; Xi_elec = 0.0 DO iPart = 1, NINT(NumWeightEduct) - IF((SpecDSMC(EductReac(iPart))%InterID.EQ.2).OR.(SpecDSMC(EductReac(iPart))%InterID.EQ.20)) THEN + IF((Species(EductReac(iPart))%InterID.EQ.2).OR.(Species(EductReac(iPart))%InterID.EQ.20)) THEN IF(SpecDSMC(EductReac(iPart))%PolyatomicMol) THEN IF (PartStateIntEn(1,ReactInx(iPart)).GT.SpecDSMC(EductReac(iPart))%EZeroPoint) THEN Xi_vib(iPart) = 2.*(PartStateIntEn(1,ReactInx(iPart))-SpecDSMC(EductReac(iPart))%EZeroPoint) & @@ -209,7 +209,7 @@ SUBROUTINE CalcReactionProb(iPair,iReac,ReactionProb,nPair,NumDens) END IF END IF IF (DSMC%ElectronicModel.GT.0) THEN - IF((SpecDSMC(EductReac(iPart))%InterID.NE.4).AND.(.NOT.SpecDSMC(EductReac(iPart))%FullyIonized)) THEN + IF((Species(EductReac(iPart))%InterID.NE.4).AND.(.NOT.SpecDSMC(EductReac(iPart))%FullyIonized)) THEN IF(PartStateIntEn(3,ReactInx(iPart)).GT.0.0)THEN Telec=CalcTelec( PartStateIntEn(3,ReactInx(iPart)) , EductReac(iPart)) Xi_elec(iPart)=2.*PartStateIntEn(3,ReactInx(iPart))/(BoltzmannConst*Telec) @@ -678,7 +678,7 @@ SUBROUTINE DSMC_Chemistry(iPair, iReac) ! Determining the maximal number of vibrational SHOs for allocation of the XiVibPart array nDOFMAX = 0 DO iProd = 1, NumProd - IF((SpecDSMC(ProductReac(iProd))%InterID.EQ.2).OR.(SpecDSMC(ProductReac(iProd))%InterID.EQ.20)) THEN + IF((Species(ProductReac(iProd))%InterID.EQ.2).OR.(Species(ProductReac(iProd))%InterID.EQ.20)) THEN IF(SpecDSMC(ProductReac(iProd))%PolyatomicMol) THEN iPolyatMole = SpecDSMC(ProductReac(iProd))%SpecToPolyArray nDOFMAX = MAX(nDOFMAX,PolyatomMolDSMC(iPolyatMole)%VibDOF) @@ -708,7 +708,7 @@ SUBROUTINE DSMC_Chemistry(iPair, iReac) !------------------------------------------------------------------------------------------------------------------------------- IF(nDOFMAX.GT.0) THEN DO iProd = 1, NumProd - IF((SpecDSMC(ProductReac(iProd))%InterID.EQ.2).OR.(SpecDSMC(ProductReac(iProd))%InterID.EQ.20)) THEN + IF((Species(ProductReac(iProd))%InterID.EQ.2).OR.(Species(ProductReac(iProd))%InterID.EQ.20)) THEN Xi_total = Xi_total + SUM(XiVibPart(iProd,:)) EZeroTempToExec(iProd) = SpecDSMC(ProductReac(iProd))%EZeroPoint*Weight(iProd) END IF @@ -733,7 +733,7 @@ SUBROUTINE DSMC_Chemistry(iPair, iReac) !-------------------------------------------------------------------------------------------------- IF (DSMC%ElectronicModel.GT.0) THEN DO iProd = 1, NumProd - IF((SpecDSMC(ProductReac(iProd))%InterID.EQ.4).OR.SpecDSMC(ProductReac(iProd))%FullyIonized) THEN + IF((Species(ProductReac(iProd))%InterID.EQ.4).OR.SpecDSMC(ProductReac(iProd))%FullyIonized) THEN IF (DSMC%ElectronicModel.EQ.2) THEN IF(ALLOCATED(ElectronicDistriPart(ReactInx(iProd))%DistriFunc)) DEALLOCATE(ElectronicDistriPart(ReactInx(iProd))%DistriFunc) END IF @@ -767,7 +767,7 @@ SUBROUTINE DSMC_Chemistry(iPair, iReac) ! Vibrational energy exchange !-------------------------------------------------------------------------------------------------- DO iProd = 1, NumProd - IF((SpecDSMC(ProductReac(iProd))%InterID.EQ.2).OR.(SpecDSMC(ProductReac(iProd))%InterID.EQ.20)) THEN + IF((Species(ProductReac(iProd))%InterID.EQ.2).OR.(Species(ProductReac(iProd))%InterID.EQ.20)) THEN FakXi = FakXi - 0.5*XiVibPart(iProd,1) IF(SpecDSMC(ProductReac(iProd))%PolyatomicMol) THEN ! Zero-point energy is added (for every vibrational dof separately) and new vibrational state is substracted @@ -787,7 +787,7 @@ SUBROUTINE DSMC_Chemistry(iPair, iReac) ! Rotational energy exchange (additional check: If new particle is an atom, internal energies are zero) !-------------------------------------------------------------------------------------------------- DO iProd = 1, NumProd - IF ((SpecDSMC(ProductReac(iProd))%InterID.EQ.2).OR.(SpecDSMC(ProductReac(iProd))%InterID.EQ.20)) THEN + IF ((Species(ProductReac(iProd))%InterID.EQ.2).OR.(Species(ProductReac(iProd))%InterID.EQ.20)) THEN IF(SpecDSMC(ProductReac(iProd))%Xi_Rot.EQ.3) THEN FakXi = FakXi - 0.5*SpecDSMC(ProductReac(iProd))%Xi_Rot CALL DSMC_RotRelaxPoly(iPair, ReactInx(iProd), FakXi) @@ -1205,7 +1205,7 @@ SUBROUTINE CalcPartitionFunction(iSpec, Temp, Qtra, Qrot, Qvib, Qelec) Qtra = (2. * Pi * Species(iSpec)%MassIC * BoltzmannConst * Temp / (PlanckConst**2))**(1.5) Qvib = 1. Qrot = 1. -IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN +IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN IF(SpecDSMC(iSpec)%PolyatomicMol) THEN iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray IF(PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN @@ -1229,7 +1229,7 @@ SUBROUTINE CalcPartitionFunction(iSpec, Temp, Qtra, Qrot, Qvib, Qelec) END IF END IF END IF -IF((SpecDSMC(iSpec)%InterID.EQ.4).OR.SpecDSMC(iSpec)%FullyIonized) THEN +IF((Species(iSpec)%InterID.EQ.4).OR.SpecDSMC(iSpec)%FullyIonized) THEN Qelec = 1. ELSE Qelec = 0. @@ -1660,7 +1660,7 @@ SUBROUTINE PhotoIonization_InsertProducts(iPair, iReac, iInit, InitSpec, iLineOp VeloCOM(1:3) = PartState(4:6,ReactInx(1)) ! Get the properties of the background species used for the photo-ionization reaction Temp_Trans = Species(EductReac(1))%Init(1)%MWTemperatureIC -IF((SpecDSMC(EductReac(1))%InterID.EQ.2).OR.(SpecDSMC(EductReac(1))%InterID.EQ.20)) THEN +IF((Species(EductReac(1))%InterID.EQ.2).OR.(Species(EductReac(1))%InterID.EQ.20)) THEN Temp_Vib = SpecDSMC(EductReac(1))%Init(1)%TVib Temp_Rot = SpecDSMC(EductReac(1))%Init(1)%TRot ELSE @@ -1676,14 +1676,14 @@ SUBROUTINE PhotoIonization_InsertProducts(iPair, iReac, iInit, InitSpec, iLineOp DO iProd = 1, NumProd iPart = ReactInx(iProd) iSpec = ProductReac(iProd) - IF(SpecDSMC(iSpec)%InterID.EQ.4) THEN + IF(Species(iSpec)%InterID.EQ.4) THEN NumElec = NumElec + Weight(iProd) Mass_Electron = Species(iSpec)%MassIC IonizationReaction = .TRUE. CYCLE END IF ! Set the internal energies - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN PartStateIntEn(1,iPart) = CalcEVib_particle(iSpec,Temp_Vib,iPart) PartStateIntEn(2,iPart) = CalcERot_particle(iSpec,Temp_Rot) ELSE @@ -1723,7 +1723,7 @@ SUBROUTINE PhotoIonization_InsertProducts(iPair, iReac, iInit, InitSpec, iLineOp iPart = ReactInx(iProd) iSpec = ProductReac(iProd) ! Check if particle is an electron - IF(SpecDSMC(iSpec)%InterID.EQ.4) THEN + IF(Species(iSpec)%InterID.EQ.4) THEN PartState(4:6,iPart) = VeloCOM(1:3) + SQRT(CRela2_Electron) * DiceUnitVector() ! Change the direction of its velocity vector (randomly) to be perpendicular to the photon's path ASSOCIATE( b1 => Species(InitSpec)%Init(iInit)%NormalVector1IC(1:3) ,& diff --git a/src/particles/dsmc/dsmc_collis_mode.f90 b/src/particles/dsmc/dsmc_collis_mode.f90 index dab4ed670..50ed51c5e 100644 --- a/src/particles/dsmc/dsmc_collis_mode.f90 +++ b/src/particles/dsmc/dsmc_collis_mode.f90 @@ -433,7 +433,7 @@ SUBROUTINE DSMC_Relax_Col_LauxTSHO(iPair) !--------------------------------------------------------------------------------------------------! IF ((DSMC%ElectronicModel.EQ.1).OR.(DSMC%ElectronicModel.EQ.2).OR.(DSMC%ElectronicModel.EQ.3)) THEN ! Model 1/2 - IF((SpecDSMC(iSpec1)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec1)%FullyIonized)) THEN + IF((Species(iSpec1)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec1)%FullyIonized)) THEN SELECT CASE(DSMC%ElectronicModel) CASE(1) CALL RANDOM_NUMBER(iRan) @@ -443,7 +443,7 @@ SUBROUTINE DSMC_Relax_Col_LauxTSHO(iPair) DoElec1 = .TRUE. END SELECT END IF - IF((SpecDSMC(iSpec2)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec2)%FullyIonized)) THEN + IF((Species(iSpec2)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec2)%FullyIonized)) THEN SELECT CASE(DSMC%ElectronicModel) CASE(1) CALL RANDOM_NUMBER(iRan) @@ -463,7 +463,7 @@ SUBROUTINE DSMC_Relax_Col_LauxTSHO(iPair) !--------------------------------------------------------------------------------------------------! ! ROTATIONAL + VIBRATIONAL !--------------------------------------------------------------------------------------------------! - IF((SpecDSMC(iSpec1)%InterID.EQ.2).OR.(SpecDSMC(iSpec1)%InterID.EQ.20)) THEN + IF((Species(iSpec1)%InterID.EQ.2).OR.(Species(iSpec1)%InterID.EQ.20)) THEN CALL RANDOM_NUMBER(iRan) CALL DSMC_calc_P_rot(iSpec1, iSpec2, iPair, Coll_pData(iPair)%iPart_p1, Xi_rel, ProbRot1, ProbRotMax1) IF(ProbRot1.GT.iRan) THEN @@ -494,7 +494,7 @@ SUBROUTINE DSMC_Relax_Col_LauxTSHO(iPair) END IF #endif - IF((SpecDSMC(iSpec2)%InterID.EQ.2).OR.(SpecDSMC(iSpec2)%InterID.EQ.20)) THEN + IF((Species(iSpec2)%InterID.EQ.2).OR.(Species(iSpec2)%InterID.EQ.20)) THEN CALL RANDOM_NUMBER(iRan) CALL DSMC_calc_P_rot(iSpec2, iSpec1, iPair, Coll_pData(iPair)%iPart_p2, Xi_rel, ProbRot2, ProbRotMax2) IF(ProbRot2.GT.iRan) THEN @@ -814,14 +814,14 @@ SUBROUTINE DSMC_Relax_Col_Gimelshein(iPair) !--------------------------------------------------------------------------------------------------! ! calculate probability for rotational/vibrational relaxation for both particles - IF ((SpecDSMC(iSpec1)%InterID.EQ.2).OR.(SpecDSMC(iSpec1)%InterID.EQ.20)) THEN + IF ((Species(iSpec1)%InterID.EQ.2).OR.(Species(iSpec1)%InterID.EQ.20)) THEN CALL DSMC_calc_P_vib(iPair, iSpec1, iSpec2, Xi_rel, iElem, ProbVib1) CALL DSMC_calc_P_rot(iSpec1, iSpec2, iPair, iPart1, Xi_rel, ProbRot1, ProbRotMax1) ELSE ProbVib1 = 0. ProbRot1 = 0. END IF - IF ((SpecDSMC(iSpec2)%InterID.EQ.2).OR.(SpecDSMC(iSpec2)%InterID.EQ.20)) THEN + IF ((Species(iSpec2)%InterID.EQ.2).OR.(Species(iSpec2)%InterID.EQ.20)) THEN CALL DSMC_calc_P_vib(iPair, iSpec2, iSpec1, Xi_rel, iElem, ProbVib2) CALL DSMC_calc_P_rot(iSpec2, iSpec1, iPair, iPart2, Xi_rel, ProbRot2, ProbRotMax2) ELSE @@ -830,10 +830,10 @@ SUBROUTINE DSMC_Relax_Col_Gimelshein(iPair) END IF IF (DSMC%ElectronicModel.EQ.1) THEN ! Model 1/2 - IF((SpecDSMC(iSpec1)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec1)%FullyIonized)) THEN + IF((Species(iSpec1)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec1)%FullyIonized)) THEN CALL DSMC_calc_P_elec(iSpec1, iSpec2, ProbElec1) END IF - IF((SpecDSMC(iSpec2)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec2)%FullyIonized)) THEN + IF((Species(iSpec2)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec2)%FullyIonized)) THEN CALL DSMC_calc_P_elec(iSpec2, iSpec1, ProbElec2) END IF END IF @@ -922,8 +922,8 @@ SUBROUTINE DSMC_Relax_Col_Gimelshein(iPair) END IF IF (DSMC%ElectronicModel.EQ.2) THEN - IF((SpecDSMC(iSpec1)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec1)%FullyIonized)) DoElec1 = .TRUE. - IF((SpecDSMC(iSpec2)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec2)%FullyIonized)) DoElec2 = .TRUE. + IF((Species(iSpec1)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec1)%FullyIonized)) DoElec1 = .TRUE. + IF((Species(iSpec2)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec2)%FullyIonized)) DoElec2 = .TRUE. END IF !--------------------------------------------------------------------------------------------------! diff --git a/src/particles/dsmc/dsmc_collision_prob.f90 b/src/particles/dsmc/dsmc_collision_prob.f90 index 54003b838..c7fb63df9 100644 --- a/src/particles/dsmc/dsmc_collision_prob.f90 +++ b/src/particles/dsmc/dsmc_collision_prob.f90 @@ -70,7 +70,7 @@ SUBROUTINE DSMC_prob_calc(iElem, iPair, NodeVolume) iSpec_p1 = PartSpecies(iPart_p1); iSpec_p2 = PartSpecies(iPart_p2) iCase = CollInf%Coll_Case(iSpec_p1,iSpec_p2) -iPType = SpecDSMC(iSpec_p1)%InterID + SpecDSMC(iSpec_p2)%InterID !definition of collision case +iPType = Species(iSpec_p1)%InterID + Species(iSpec_p2)%InterID !definition of collision case IF (PRESENT(NodeVolume)) THEN Volume = NodeVolume diff --git a/src/particles/dsmc/dsmc_electronic_model.f90 b/src/particles/dsmc/dsmc_electronic_model.f90 index 394a954f0..d8692232e 100644 --- a/src/particles/dsmc/dsmc_electronic_model.f90 +++ b/src/particles/dsmc/dsmc_electronic_model.f90 @@ -459,7 +459,7 @@ SUBROUTINE LT_ElectronicEnergyExchange(iPartIndx_Node, nPart, NodeVolume) Xi_ElecSpec=0.; Xi_Elec_oldSpec=0.; TElecSpec=0. DO iSpec = 1, nSpecies IF (nSpec(iSpec).EQ.0) CYCLE - IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN TElecSpec(iSpec)=CalcTelec( EElecSpec(iSpec)/totalWeightSpec(iSpec), iSpec) Xi_ElecSpec(iSpec)=CalcXiElec(TElecSpec(iSpec),iSpec) Xi_Elec_oldSpec(iSpec) = Xi_ElecSpec(iSpec) @@ -499,7 +499,7 @@ SUBROUTINE LT_ElectronicEnergyExchange(iPartIndx_Node, nPart, NodeVolume) DO iLoop = 1, nPart iPart = iPartIndx_Node(iLoop) iSpec = PartSpecies(iPart) - IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN IF (.NOT.ElecRelaxPart(iPart)) CYCLE partWeight = GetParticleWeight(iPart) CALL RANDOM_NUMBER(iRan) @@ -515,7 +515,7 @@ SUBROUTINE LT_ElectronicEnergyExchange(iPartIndx_Node, nPart, NodeVolume) ElectronicPartition = 0. DO iSpec =1, nSpecies - IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN ElectronicPartitionTemp = 0. ! calculate sum over all energy levels == partition function for temperature Telec DO iQua = 0, SpecDSMC(iSpec)%MaxElecQuant - 1 @@ -632,7 +632,7 @@ SUBROUTINE LT_ElectronicEnergyExchangeChem(iPartIndx_Node, nPart) DO iLoop = 1, nPart iPart = iPartIndx_Node(iLoop) iSpec = PartSpecies(iPart) - IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN partWeight = GetParticleWeight(iPart) OldEn = OldEn + PartStateIntEn(3,iPart)* partWeight END IF @@ -652,7 +652,7 @@ SUBROUTINE LT_ElectronicEnergyExchangeChem(iPartIndx_Node, nPart) Xi_ElecSpec(iSpec)= 0.0 CYCLE END IF - IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN Xi_ElecSpec(iSpec)=CalcXiElec(DSMC%InstantTransTemp(nSpecies + 1),iSpec) TEqui = DSMC%InstantTransTemp(nSpecies + 1) END IF @@ -665,7 +665,7 @@ SUBROUTINE LT_ElectronicEnergyExchangeChem(iPartIndx_Node, nPart) Xi_ElecSpec(iSpec)= 0.0 CYCLE END IF - IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN Xi_ElecSpec(iSpec)=CalcXiElec(Tequi,iSpec) END IF END DO @@ -684,7 +684,7 @@ SUBROUTINE LT_ElectronicEnergyExchangeChem(iPartIndx_Node, nPart) ElectronicPartition = 0. DO iSpec =1, nSpecies - IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN ElectronicPartitionTemp = 0. ! calculate sum over all energy levels == partition function for temperature Telec DO iQua = 0, SpecDSMC(iSpec)%MaxElecQuant - 1 @@ -705,7 +705,7 @@ SUBROUTINE LT_ElectronicEnergyExchangeChem(iPartIndx_Node, nPart) DO iLoop = 1, nPart iPart = iPartIndx_Node(iLoop) iSpec = PartSpecies(iPart) - IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN nElecRelax = nElecRelax + 1 nElecRelaxSpec(iSpec) = nElecRelaxSpec(iSpec) + 1 iPartIndx_NodeRelaxElec(nElecRelax) = iPart @@ -874,7 +874,7 @@ SUBROUTINE CalcMoments_ElectronicExchange(nPart, iPartIndx_Node, nSpec, vBulkAll V_rel(1:3)=PartState(4:6,iPart)-vBulkAll(1:3) vmag2 = V_rel(1)**2 + V_rel(2)**2 + V_rel(3)**2 OldEn = OldEn + 0.5*Species(iSpec)%MassIC * vmag2*partWeight - IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN EElecSpec(iSpec) = EElecSpec(iSpec) + PartStateIntEn(3,iPart) * partWeight END IF END DO @@ -917,7 +917,7 @@ SUBROUTINE CalcTEquiMultiElec(nPart, nSpec, CellTemp, TElecSpec, Xi_ElecSpec, Xi ! MODULES USE MOD_Globals_Vars, ONLY: BoltzmannConst USE MOD_DSMC_Vars, ONLY: SpecDSMC -USE MOD_Particle_Vars, ONLY: nSpecies +USE MOD_Particle_Vars, ONLY: nSpecies, Species USE MOD_part_tools, ONLY: CalcXiElec USE MOD_Particle_Analyze_Tools, ONLY: CalcEelec ! IMPLICIT VARIABLE HANDLING @@ -946,7 +946,7 @@ SUBROUTINE CalcTEquiMultiElec(nPart, nSpec, CellTemp, TElecSpec, Xi_ElecSpec, Xi correctFac = 1. ElecFracSpec = 0.0 DO iSpec=1, nSpecies - IF ((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF ((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN ElecExpSpec(iSpec) = exp(-elecrelaxfreqSpec(iSpec)*dtCell/correctFac) ElecFracSpec(iSpec) = nSpec(iSpec)*(1.-ElecExpSpec(iSpec)) EelecTtrans(iSpec) = CalcEelec(CellTemp, iSpec) @@ -956,7 +956,7 @@ SUBROUTINE CalcTEquiMultiElec(nPart, nSpec, CellTemp, TElecSpec, Xi_ElecSpec, Xi TEqui = 3.*(nPart-1.)*CellTemp TEquiNumDof = 3.*(nPart-1.) DO iSpec=1, nSpecies - IF ((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF ((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN TEqui = TEqui + Xi_Elec_oldSpec(iSpec)*ElecFracSpec(iSpec)*TElecSpec(iSpec) TEquiNumDof = TEquiNumDof + Xi_Elec_oldSpec(iSpec)*ElecFracSpec(iSpec) END IF @@ -964,7 +964,7 @@ SUBROUTINE CalcTEquiMultiElec(nPart, nSpec, CellTemp, TElecSpec, Xi_ElecSpec, Xi TEqui = TEqui / TEquiNumDof DO WHILE ( ABS( TEqui - TEqui_Old ) .GT. eps_prec ) DO iSpec = 1, nSpecies - IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN Xi_ElecSpec(iSpec) = CalcXiElec(TEqui,iSpec) EElecTequi= CalcEelec(TEqui, iSpec) IF (ABS(meanEelecSpec(iSpec)-EElecTequi).LT.1E-3) THEN @@ -988,7 +988,7 @@ SUBROUTINE CalcTEquiMultiElec(nPart, nSpec, CellTemp, TElecSpec, Xi_ElecSpec, Xi TEqui = 3.*(nPart-1.)*CellTemp TEquiNumDof = 3.*(nPart-1.) DO iSpec=1, nSpecies - IF ((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF ((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN TEqui = TEqui + Xi_Elec_oldSpec(iSpec)*ElecFracSpec(iSpec)*TElecSpec(iSpec) TEquiNumDof = TEquiNumDof + Xi_ElecSpec(iSpec)*ElecFracSpec(iSpec) END IF @@ -1190,6 +1190,7 @@ SUBROUTINE ReadSpeciesLevel ( Dsetname, iSpec ) USE MOD_DSMC_Vars ,ONLY: DSMC, SpecDSMC USE MOD_HDF5_Input ,ONLY: DatasetExists USE MOD_part_tools ,ONLY: CalcXiElec +USE MOD_Particle_Vars ,ONLY: Species #if USE_LOADBALANCE USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance #endif /*USE_LOADBALANCE*/ @@ -1295,7 +1296,7 @@ SUBROUTINE ReadSpeciesLevel ( Dsetname, iSpec ) IF (DSMC%ElectronicModel.EQ.4) THEN SpecDSMC(iSpec)%MaxMeanXiElec = 0. - IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN MaxTemp = SpecDSMC(iSpec)%ElectronicState(2,SpecDSMC(iSpec)%MaxElecQuant - 1) MinTemp = 0. MeanTemp = 0.5*(MaxTemp+MinTemp) @@ -1325,6 +1326,7 @@ SUBROUTINE SortEnergies(ElectronicState, nQuants) !=================================================================================================================================== ! use module USE MOD_Globals + USE MOD_Particle_Vars ,ONLY: Species ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -1365,7 +1367,7 @@ SUBROUTINE CalcProbCorrFactorElec() ! use module USE MOD_Globals_Vars, ONLY: BoltzmannConst USE MOD_DSMC_Vars, ONLY: DSMC, SpecDSMC, CollInf - USE MOD_Particle_Vars, ONLY: nSpecies + USE MOD_Particle_Vars, ONLY: nSpecies, SPecies USE MOD_Particle_Analyze_Tools, ONLY: CalcEelec USE MOD_part_tools ,ONLY: CalcXiElec ! IMPLICIT VARIABLE HANDLING @@ -1382,7 +1384,7 @@ SUBROUTINE CalcProbCorrFactorElec() !=================================================================================================================================== DO iSpec = 1, nSpecies SpecDSMC(iSpec)%ElecRelaxCorrectFac = 0. - IF((SpecDSMC(iSpec)%InterID.EQ.4).OR.(SpecDSMC(iSpec)%FullyIonized)) CYCLE + IF((Species(iSpec)%InterID.EQ.4).OR.(SpecDSMC(iSpec)%FullyIonized)) CYCLE DO jSpec = 1, nSpecies doConverge = .TRUE. Xi_rel = 2.*(2. - CollInf%omega(iSpec,jSpec)) diff --git a/src/particles/dsmc/dsmc_qk_procedures.f90 b/src/particles/dsmc/dsmc_qk_procedures.f90 index ac60c0018..0a19aa187 100644 --- a/src/particles/dsmc/dsmc_qk_procedures.f90 +++ b/src/particles/dsmc/dsmc_qk_procedures.f90 @@ -160,7 +160,7 @@ SUBROUTINE QK_TestReaction(iPair,iReac,PerformReaction) CASE('D') Ec = Ec + PartStateIntEn(1,React1Inx)*Weight1 ! Correction for second collision partner - IF ((SpecDSMC(PartSpecies(React2Inx))%InterID.EQ.2).OR.(SpecDSMC(PartSpecies(React2Inx))%InterID.EQ.20)) THEN + IF ((Species(PartSpecies(React2Inx))%InterID.EQ.2).OR.(Species(PartSpecies(React2Inx))%InterID.EQ.20)) THEN Ec = Ec - SpecDSMC(PartSpecies(React2Inx))%EZeroPoint*Weight2 END IF ! Determination of the quantum number corresponding to the collision energy diff --git a/src/particles/dsmc/dsmc_relaxation.f90 b/src/particles/dsmc/dsmc_relaxation.f90 index bc6881715..f79ebeb3d 100644 --- a/src/particles/dsmc/dsmc_relaxation.f90 +++ b/src/particles/dsmc/dsmc_relaxation.f90 @@ -89,7 +89,7 @@ SUBROUTINE CalcMeanVibQuaDiatomic() USE MOD_Globals USE MOD_Globals_Vars, ONLY : BoltzmannConst USE MOD_DSMC_Vars, ONLY : DSMC, CollInf, SpecDSMC, ChemReac, BGGas -USE MOD_Particle_Vars, ONLY : nSpecies +USE MOD_Particle_Vars, ONLY : nSpecies, Species ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -103,7 +103,7 @@ SUBROUTINE CalcMeanVibQuaDiatomic() !=================================================================================================================================== DO iSpec = 1, nSpecies - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN IF(.NOT.SpecDSMC(iSpec)%PolyatomicMol) THEN ! Skip the background gas species (value initialized in dsmc_chemical_init.f90) IF(BGGas%BackgroundSpecies(iSpec)) CYCLE @@ -128,7 +128,7 @@ SUBROUTINE CalcMeanVibQuaDiatomic() ChemReac%MeanXiVib_PerIter(iSpec) = 0. END IF ! CollInf%Coll_SpecPartNum(iSpec).GT.0 END IF ! .NOT.SpecDSMC(iSpec)%PolyatomicMol - END IF ! (SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20) + END IF ! (Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20) END DO ! iSpec = 1, nSpecies END SUBROUTINE CalcMeanVibQuaDiatomic @@ -203,6 +203,7 @@ SUBROUTINE CalcXiTotalEqui(iReac, iPair, nProd, Xi_Total, Weight, XiVibPart, XiE USE MOD_Globals_Vars ,ONLY: BoltzmannConst USE MOD_DSMC_Vars ,ONLY: SpecDSMC, ChemReac, Coll_pData, DSMC USE MOD_part_tools ,ONLY: CalcXiElec +USE MOD_Particle_Vars ,ONLY: Species ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -238,14 +239,14 @@ SUBROUTINE CalcXiTotalEqui(iReac, iPair, nProd, Xi_Total, Weight, XiVibPart, XiE Xi_TotalTemp = Xi_Total DO iProd = 1, nProd iSpec = ProductReac(iProd) - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN CALL CalcXiVib(MiddleTemp, iSpec, XiVibDOF=XiVibPart(iProd,:), XiVibTotal=XiVibTotal) Xi_TotalTemp = Xi_TotalTemp + XiVibTotal ELSE IF(PRESENT(XiVibPart)) XiVibPart(iProd,:) = 0.0 END IF IF((DSMC%ElectronicModel.EQ.1).OR.(DSMC%ElectronicModel.EQ.2).OR.(DSMC%ElectronicModel.EQ.4)) THEN - IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN XiElecPart(iProd) = CalcXiElec(MiddleTemp, iSpec) Xi_TotalTemp = Xi_TotalTemp + XiElecPart(iProd) ELSE @@ -528,7 +529,7 @@ SUBROUTINE SumVibRelaxProb(iPair) !=================================================================================================================================== ! MODULES USE MOD_DSMC_Vars ,ONLY: DSMC, VarVibRelaxProb, Coll_pData, SpecDSMC -USE MOD_Particle_Vars ,ONLY: PartSpecies +USE MOD_Particle_Vars ,ONLY: PartSpecies, Species ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -545,7 +546,7 @@ SUBROUTINE SumVibRelaxProb(iPair) IF(DSMC%VibRelaxProb.EQ.2.0) THEN cSpec1 = PartSpecies(Coll_pData(iPair)%iPart_p1) cSpec2 = PartSpecies(Coll_pData(iPair)%iPart_p2) - IF((SpecDSMC(cSpec1)%InterID.EQ.2).OR.(SpecDSMC(cSpec1)%InterID.EQ.20)) THEN + IF((Species(cSpec1)%InterID.EQ.2).OR.(Species(cSpec1)%InterID.EQ.20)) THEN CALL DSMC_calc_var_P_vib(cSpec1,cSpec2,iPair,VibProb) VarVibRelaxProb%ProbVibAvNew(cSpec1) = VarVibRelaxProb%ProbVibAvNew(cSpec1) + VibProb VarVibRelaxProb%nCollis(cSpec1) = VarVibRelaxProb%nCollis(cSpec1) + 1 @@ -553,7 +554,7 @@ SUBROUTINE SumVibRelaxProb(iPair) DSMC%CalcVibProb(cSpec1,2) = MAX(DSMC%CalcVibProb(cSpec1,2),VibProb) END IF END IF - IF((SpecDSMC(cSpec2)%InterID.EQ.2).OR.(SpecDSMC(cSpec2)%InterID.EQ.20)) THEN + IF((Species(cSpec2)%InterID.EQ.2).OR.(Species(cSpec2)%InterID.EQ.20)) THEN CALL DSMC_calc_var_P_vib(cSpec2,cSpec1,iPair,VibProb) VarVibRelaxProb%ProbVibAvNew(cSpec2) = VarVibRelaxProb%ProbVibAvNew(cSpec2) + VibProb VarVibRelaxProb%nCollis(cSpec2) = VarVibRelaxProb%nCollis(cSpec2) + 1 diff --git a/src/particles/dsmc/dsmc_symmetry.f90 b/src/particles/dsmc/dsmc_symmetry.f90 index 64ca258a0..5d067aa18 100644 --- a/src/particles/dsmc/dsmc_symmetry.f90 +++ b/src/particles/dsmc/dsmc_symmetry.f90 @@ -470,7 +470,7 @@ SUBROUTINE DSMC_2D_RadialWeighting(iPart,iElem) ClonedParticles(cloneIndex,DelayCounter)%PartStateIntEn(1:2) = PartStateIntEn(1:2,iPart) IF(DSMC%ElectronicModel.GT.0) THEN ClonedParticles(cloneIndex,DelayCounter)%PartStateIntEn(3) = PartStateIntEn(3,iPart) - IF ((DSMC%ElectronicModel.EQ.2).AND.(.NOT.((SpecDSMC(SpecID)%InterID.EQ.4).OR.SpecDSMC(SpecID)%FullyIonized))) THEN + IF ((DSMC%ElectronicModel.EQ.2).AND.(.NOT.((Species(SpecID)%InterID.EQ.4).OR.SpecDSMC(SpecID)%FullyIonized))) THEN IF(ALLOCATED(ClonedParticles(cloneIndex,DelayCounter)%DistriFunc)) & DEALLOCATE(ClonedParticles(cloneIndex,DelayCounter)%DistriFunc) ALLOCATE(ClonedParticles(cloneIndex,DelayCounter)%DistriFunc(1:SpecDSMC(SpecID)%MaxElecQuant)) @@ -595,7 +595,7 @@ SUBROUTINE DSMC_2D_SetInClones() PartStateIntEn(1:2,PositionNbr) = ClonedParticles(iPart,DelayCounter)%PartStateIntEn(1:2) IF(DSMC%ElectronicModel.GT.0) THEN PartStateIntEn(3,PositionNbr) = ClonedParticles(iPart,DelayCounter)%PartStateIntEn(3) - IF ((DSMC%ElectronicModel.EQ.2).AND.(.NOT.((SpecDSMC(ClonedParticles(iPart,DelayCounter)%Species)%InterID.EQ.4) & + IF ((DSMC%ElectronicModel.EQ.2).AND.(.NOT.((Species(ClonedParticles(iPart,DelayCounter)%Species)%InterID.EQ.4) & .OR.SpecDSMC(ClonedParticles(iPart,DelayCounter)%Species)%FullyIonized))) THEN IF(ALLOCATED(ElectronicDistriPart(PositionNbr)%DistriFunc)) DEALLOCATE(ElectronicDistriPart(PositionNbr)%DistriFunc) ALLOCATE(ElectronicDistriPart(PositionNbr)%DistriFunc(1:SpecDSMC(ClonedParticles(iPart,DelayCounter)%Species)%MaxElecQuant)) diff --git a/src/particles/emission/particle_emission_tools.f90 b/src/particles/emission/particle_emission_tools.f90 index d5fda60c3..a6280c098 100644 --- a/src/particles/emission/particle_emission_tools.f90 +++ b/src/particles/emission/particle_emission_tools.f90 @@ -411,7 +411,7 @@ SUBROUTINE DSMC_SetInternalEnr_LauxVFD(iSpecies, iInit, iPart, init_or_sf) ! Set internal energies (vibrational and rotational) !----------------------------------------------------------------------------------------------------------------------------------- ElemID = PEM%LocalElemID(iPart) -IF ((SpecDSMC(iSpecies)%InterID.EQ.2).OR.(SpecDSMC(iSpecies)%InterID.EQ.20)) THEN +IF ((Species(iSpecies)%InterID.EQ.2).OR.(Species(iSpecies)%InterID.EQ.20)) THEN SELECT CASE (init_or_sf) CASE(1) !iInit TVib=SpecDSMC(iSpecies)%Init(iInit)%TVib @@ -463,7 +463,7 @@ SUBROUTINE DSMC_SetInternalEnr_LauxVFD(iSpecies, iInit, iPart, init_or_sf) ! Set electronic energy !----------------------------------------------------------------------------------------------------------------------------------- IF (DSMC%ElectronicModel.GT.0) THEN - IF((SpecDSMC(iSpecies)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpecies)%FullyIonized)) THEN + IF((Species(iSpecies)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpecies)%FullyIonized)) THEN CALL InitElectronShell(iSpecies,iPart,iInit,init_or_sf) ELSE PartStateIntEn( 3,iPart) = 0. diff --git a/src/particles/emission/particle_macroscopic_restart.f90 b/src/particles/emission/particle_macroscopic_restart.f90 index 5620e4284..58c9c7482 100644 --- a/src/particles/emission/particle_macroscopic_restart.f90 +++ b/src/particles/emission/particle_macroscopic_restart.f90 @@ -259,14 +259,14 @@ SUBROUTINE MacroRestart_InitializeParticle_Maxwell(iPart,iSpec,iElem) END IF ! 2) Set internal energies (rotational, vibrational, electronic) IF(CollisMode.GT.1) THEN - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN PartStateIntEn(1,iPart) = CalcEVib_particle(iSpec,MacroRestartValues(iElem,iSpec,DSMC_TVIB),iPart) PartStateIntEn(2,iPart) = CalcERot_particle(iSpec,MacroRestartValues(iElem,iSpec,DSMC_TROT)) ELSE PartStateIntEn(1:2,iPart) = 0.0 END IF IF(DSMC%ElectronicModel.GT.0) THEN - IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN PartStateIntEn(3,iPart) = CalcEElec_particle(iSpec,MacroRestartValues(iElem,iSpec,DSMC_TELEC),iPart) ELSE PartStateIntEn(3,iPart) = 0.0 diff --git a/src/particles/fp_flow/fpflow_colloperator.f90 b/src/particles/fp_flow/fpflow_colloperator.f90 index dd2c6b318..cc6701cb6 100644 --- a/src/particles/fp_flow/fpflow_colloperator.f90 +++ b/src/particles/fp_flow/fpflow_colloperator.f90 @@ -93,7 +93,7 @@ SUBROUTINE FP_CollisionOperator(iPartIndx_Node, nPart, NodeVolume) Momentum_old(1:3) = Momentum_old(1:3) + PartState(4:6,iPart) * partWeight Energy_old = Energy_old + (PartState(4,iPart)**2. + PartState(5,iPart)**2. & + PartState(6,iPart)**2.)*0.5*Species(1)%MassIC * partWeight - IF((SpecDSMC(1)%InterID.EQ.2).OR.(SpecDSMC(1)%InterID.EQ.20)) THEN + IF((Species(1)%InterID.EQ.2).OR.(Species(1)%InterID.EQ.20)) THEN Energy_old = Energy_old + (PartStateIntEn(1,iPart) + PartStateIntEn(2,iPart)) * partWeight END IF END DO @@ -144,7 +144,7 @@ SUBROUTINE FP_CollisionOperator(iPartIndx_Node, nPart, NodeVolume) END DO u0i(1:3) = u0i(1:3) + V_rel(1:3) * partWeight END IF - IF((SpecDSMC(1)%InterID.EQ.2).OR.(SpecDSMC(1)%InterID.EQ.20)) THEN + IF((Species(1)%InterID.EQ.2).OR.(Species(1)%InterID.EQ.20)) THEN IF(FPDoVibRelaxation) Evib = Evib + (PartStateIntEn(1,iPartIndx_Node(iLoop2)) - SpecDSMC(1)%EZeroPoint) * partWeight ERot = ERot + PartStateIntEn(2,iPartIndx_Node(iLoop2)) * partWeight END IF @@ -178,7 +178,7 @@ SUBROUTINE FP_CollisionOperator(iPartIndx_Node, nPart, NodeVolume) u0i = u0i / totalWeight END IF -IF((SpecDSMC(1)%InterID.EQ.2).OR.(SpecDSMC(1)%InterID.EQ.20)) THEN +IF((Species(1)%InterID.EQ.2).OR.(Species(1)%InterID.EQ.20)) THEN Xi_vib = 0.0 IF(FPDoVibRelaxation) THEN IF(SpecDSMC(1)%PolyatomicMol) THEN @@ -248,7 +248,7 @@ SUBROUTINE FP_CollisionOperator(iPartIndx_Node, nPart, NodeVolume) END IF END IF -IF((SpecDSMC(1)%InterID.EQ.2).OR.(SpecDSMC(1)%InterID.EQ.20)) THEN +IF((Species(1)%InterID.EQ.2).OR.(Species(1)%InterID.EQ.20)) THEN ! 3.) Treatment of molecules: determination of the rotational and vibrational relaxation frequency using the collision frequency, ! which is not the same as the relaxation frequency of distribution function, calculated above. collisionfreq = SpecFP(1)%CollFreqPreFactor(1) * dens *CellTemp**(-CollInf%omega(1,1) +0.5) @@ -656,7 +656,7 @@ SUBROUTINE FP_CollisionOperator(iPartIndx_Node, nPart, NodeVolume) Energy_new = Energy_new & + ((PartState(4,iPart))**2. + (PartState(5,iPart))**2. & + (PartState(6,iPart))**2.)*0.5*Species(1)%MassIC*partWeight - IF((SpecDSMC(1)%InterID.EQ.2).OR.(SpecDSMC(1)%InterID.EQ.20)) THEN + IF((Species(1)%InterID.EQ.2).OR.(Species(1)%InterID.EQ.20)) THEN Energy_new = Energy_new + (PartStateIntEn(1,iPart) + PartStateIntEn(2,iPart))*partWeight END IF END DO diff --git a/src/particles/mcc/mcc.f90 b/src/particles/mcc/mcc.f90 index b86a3e0cd..b883b32c6 100644 --- a/src/particles/mcc/mcc.f90 +++ b/src/particles/mcc/mcc.f90 @@ -598,6 +598,7 @@ SUBROUTINE MCC_CalcReactionProb(iCase,bgSpec,CRela2,CollEnergy_in,PartIndex,bggP ! MODULES USE MOD_DSMC_Vars ,ONLY: SpecDSMC, BGGas, ChemReac, DSMC, PartStateIntEn USE MOD_MCC_Vars ,ONLY: SpecXSec +USE MOD_Particle_Vars ,ONLY: Species USE MOD_TimeDisc_Vars ,ONLY: dt USE MOD_part_tools ,ONLY: CalcERot_particle, CalcEVib_particle, CalcEElec_particle USE MOD_MCC_XSec ,ONLY: InterpolateCrossSection_Chem @@ -625,10 +626,10 @@ SUBROUTINE MCC_CalcReactionProb(iCase,bgSpec,CRela2,CollEnergy_in,PartIndex,bggP ! Sum of the zero-point energies of the reactants EZeroPoint_Educt = 0.0; EZeroPoint_Prod = 0.0 - IF((SpecDSMC(EductReac(1))%InterID.EQ.2).OR.(SpecDSMC(EductReac(1))%InterID.EQ.20)) THEN + IF((Species(EductReac(1))%InterID.EQ.2).OR.(Species(EductReac(1))%InterID.EQ.20)) THEN EZeroPoint_Educt = EZeroPoint_Educt + SpecDSMC(EductReac(1))%EZeroPoint END IF - IF((SpecDSMC(EductReac(2))%InterID.EQ.2).OR.(SpecDSMC(EductReac(2))%InterID.EQ.20)) THEN + IF((Species(EductReac(2))%InterID.EQ.2).OR.(Species(EductReac(2))%InterID.EQ.20)) THEN EZeroPoint_Educt = EZeroPoint_Educt + SpecDSMC(EductReac(2))%EZeroPoint END IF ! Sum of the zero-point energies of the products @@ -640,14 +641,14 @@ SUBROUTINE MCC_CalcReactionProb(iCase,bgSpec,CRela2,CollEnergy_in,PartIndex,bggP NumWeightProd = 3 END IF DO iProd = 1, NumWeightProd - IF((SpecDSMC(ProductReac(iProd))%InterID.EQ.2).OR.(SpecDSMC(ProductReac(iProd))%InterID.EQ.20)) THEN + IF((Species(ProductReac(iProd))%InterID.EQ.2).OR.(Species(ProductReac(iProd))%InterID.EQ.20)) THEN EZeroPoint_Prod = EZeroPoint_Prod + SpecDSMC(ProductReac(iProd))%EZeroPoint END IF END DO ! Adding the internal energy of particle species CollEnergy = CollEnergy_in + PartStateIntEn(1,PartIndex) + PartStateIntEn(2,PartIndex) ! Internal energy of background species - IF((SpecDSMC(jSpec)%InterID.EQ.2).OR.(SpecDSMC(jSpec)%InterID.EQ.20)) THEN + IF((Species(jSpec)%InterID.EQ.2).OR.(Species(jSpec)%InterID.EQ.20)) THEN IF(BGGas%UseDistribution) THEN Temp_Vib = BGGas%Distribution(bgSpec,8,iElem) Temp_Rot = BGGas%Distribution(bgSpec,9,iElem) diff --git a/src/particles/mcc/mcc_init.f90 b/src/particles/mcc/mcc_init.f90 index 9848de004..e7e91c971 100644 --- a/src/particles/mcc/mcc_init.f90 +++ b/src/particles/mcc/mcc_init.f90 @@ -71,7 +71,7 @@ SUBROUTINE InitMCC() USE MOD_Globals USE MOD_ReadInTools USE MOD_Globals_Vars ,ONLY: ElementaryCharge -USE MOD_PARTICLE_Vars ,ONLY: nSpecies +USE MOD_PARTICLE_Vars ,ONLY: nSpecies, Species USE MOD_Mesh_Vars ,ONLY: nElems USE MOD_DSMC_Vars ,ONLY: BGGas, SpecDSMC, CollInf, DSMC, ChemReac, CollisMode USE MOD_MCC_Vars ,ONLY: UseMCC, XSec_Database, SpecXSec, XSec_NullCollision, XSec_Relaxation @@ -108,7 +108,7 @@ SUBROUTINE InitMCC() IF(SpecDSMC(iSpec)%UseCollXSec.AND.BGGas%BackgroundSpecies(iSpec)) THEN CALL Abort(__STAMP__,'ERROR: Please supply the collision cross-section flag for the particle species and NOT the background species!') END IF - IF(SpecDSMC(iSpec)%UseElecXSec.AND.SpecDSMC(iSpec)%InterID.EQ.4) THEN + IF(SpecDSMC(iSpec)%UseElecXSec.AND.Species(iSpec)%InterID.EQ.4) THEN CALL Abort(__STAMP__,'ERROR: Electronic relaxation should be enabled for the respective heavy species, not the electrons!') END IF #if (PP_TimeDiscMethod!=42) @@ -194,13 +194,13 @@ SUBROUTINE InitMCC() ! If the species which was given the UseVibXSec flag is diatomic/polyatomic, use the cross-section for that species ! If the species is an atom/electron, use the cross-section for the other collision partner (the background species) IF(SpecDSMC(iSpec)%UseVibXSec) THEN - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN SpecXSec(iCase)%SpeciesToRelax = iSpec ELSE SpecXSec(iCase)%SpeciesToRelax = jSpec END IF ELSE - IF((SpecDSMC(jSpec)%InterID.EQ.2).OR.(SpecDSMC(jSpec)%InterID.EQ.20)) THEN + IF((Species(jSpec)%InterID.EQ.2).OR.(Species(jSpec)%InterID.EQ.20)) THEN SpecXSec(iCase)%SpeciesToRelax = jSpec ELSE SpecXSec(iCase)%SpeciesToRelax = iSpec @@ -260,7 +260,7 @@ SUBROUTINE InitMCC() END DO ! Interpolate and store levels at the collision cross-section intervals IF(SpecXSec(iCase)%UseCollXSec) THEN - IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(SpecDSMC(jSpec)%InterID.NE.4)) THEN + IF((Species(iSpec)%InterID.NE.4).AND.(Species(jSpec)%InterID.NE.4)) THEN ! Special treatment required if both collision partners have electronic energy levels (ie. one is not an electron) CALL abort(__STAMP__,'ERROR: Electronic relaxation with cross-section is only possible for electron collisions!') END IF diff --git a/src/particles/mcc/mcc_xsec.f90 b/src/particles/mcc/mcc_xsec.f90 index d66fb2269..ba2c39637 100644 --- a/src/particles/mcc/mcc_xsec.f90 +++ b/src/particles/mcc/mcc_xsec.f90 @@ -764,10 +764,10 @@ SUBROUTINE XSec_ElectronicRelaxation(iPair,iCase,iPart_p1,iPart_p2,DoElec1,DoEle USE MOD_DSMC_Vars ,ONLY: SpecDSMC, Coll_pData, PartStateIntEn USE MOD_MCC_Vars ,ONLY: SpecXSec USE MOD_part_tools ,ONLY: GetParticleWeight -USE MOD_Particle_Vars ,ONLY: PartSpecies +USE MOD_Particle_Vars ,ONLY: PartSpecies, Species #if (PP_TimeDiscMethod==42) USE MOD_Particle_Analyze_Vars ,ONLY: CalcRelaxProb -USE MOD_Particle_Vars ,ONLY: Species, usevMPF +USE MOD_Particle_Vars ,ONLY: usevMPF USE MOD_DSMC_Vars ,ONLY: DSMC, RadialWeighting #endif IMPLICIT NONE @@ -811,7 +811,7 @@ SUBROUTINE XSec_ElectronicRelaxation(iPair,iCase,iPart_p1,iPart_p2,DoElec1,DoEle DO iLevel = 1, SpecXSec(iCase)%NumElecLevel ProbElec = ProbElec + SpecXSec(iCase)%ElecLevel(iLevel)%Prob IF((ProbElec/ProbSum).GT.iRan) THEN - IF((SpecDSMC(iSpec_p1)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec_p1)%FullyIonized)) THEN + IF((Species(iSpec_p1)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec_p1)%FullyIonized)) THEN DoElec1 = .TRUE. ELSE DoElec2 = .TRUE. @@ -1412,12 +1412,12 @@ SUBROUTINE XSec_CalcReactionProb(iPair,iCase,iElem,SpecNum1,SpecNum2,MacroPartic EZeroPoint_Educt = 0.0; EZeroPoint_Prod = 0.0 ! Testing if the first reacting particle is an atom or molecule, if molecule: is it polyatomic? - IF((SpecDSMC(EductReac(1))%InterID.EQ.2).OR.(SpecDSMC(EductReac(1))%InterID.EQ.20)) THEN + IF((Species(EductReac(1))%InterID.EQ.2).OR.(Species(EductReac(1))%InterID.EQ.20)) THEN EZeroPoint_Educt = EZeroPoint_Educt + SpecDSMC(EductReac(1))%EZeroPoint * Weight(1) END IF !--------------------------------------------------------------------------------------------------------------------------------- ! Testing if the second particle is an atom or molecule, if molecule: is it polyatomic? - IF((SpecDSMC(EductReac(2))%InterID.EQ.2).OR.(SpecDSMC(EductReac(2))%InterID.EQ.20)) THEN + IF((Species(EductReac(2))%InterID.EQ.2).OR.(Species(EductReac(2))%InterID.EQ.20)) THEN EZeroPoint_Educt = EZeroPoint_Educt + SpecDSMC(EductReac(2))%EZeroPoint * Weight(2) END IF @@ -1441,7 +1441,7 @@ SUBROUTINE XSec_CalcReactionProb(iPair,iCase,iElem,SpecNum1,SpecNum2,MacroPartic END IF DO iProd = 1, NumWeightProd - IF((SpecDSMC(ProductReac(iProd))%InterID.EQ.2).OR.(SpecDSMC(ProductReac(iProd))%InterID.EQ.20)) THEN + IF((Species(ProductReac(iProd))%InterID.EQ.2).OR.(Species(ProductReac(iProd))%InterID.EQ.20)) THEN EZeroPoint_Prod = EZeroPoint_Prod + SpecDSMC(ProductReac(iProd))%EZeroPoint * Weight(iProd) END IF END DO diff --git a/src/particles/particle_mpi/particle_mpi.f90 b/src/particles/particle_mpi/particle_mpi.f90 index 41c49699c..3da44f28f 100644 --- a/src/particles/particle_mpi/particle_mpi.f90 +++ b/src/particles/particle_mpi/particle_mpi.f90 @@ -384,7 +384,7 @@ SUBROUTINE SendNbOfParticles(doParticle_In) PartMPIExchange%nPartsSend(2,GlobalProcToExchangeProc(EXCHANGE_PROC_RANK,ProcID)) + PolyatomMolDSMC(iPolyatMole)%VibDOF END IF IF ((DSMC%ElectronicModel.EQ.2).AND. & - (.NOT.((SpecDSMC(PartSpecies(iPart))%InterID.EQ.4).OR.SpecDSMC(PartSpecies(iPart))%FullyIonized))) THEN + (.NOT.((Species(PartSpecies(iPart))%InterID.EQ.4).OR.SpecDSMC(PartSpecies(iPart))%FullyIonized))) THEN PartMPIExchange%nPartsSend(3,GlobalProcToExchangeProc(EXCHANGE_PROC_RANK,ProcID)) = & PartMPIExchange%nPartsSend(3,GlobalProcToExchangeProc(EXCHANGE_PROC_RANK,ProcID)) + SpecDSMC(PartSpecies(iPart))%MaxElecQuant END IF @@ -708,7 +708,7 @@ SUBROUTINE MPIParticleSend(UseOldVecLength) END IF IF (DSMC%ElectronicModel.EQ.2) THEN - IF(.NOT.((SpecDSMC(PartSpecies(iPart))%InterID.EQ.4).OR.SpecDSMC(PartSpecies(iPart))%FullyIonized)) THEN + IF(.NOT.((Species(PartSpecies(iPart))%InterID.EQ.4).OR.SpecDSMC(PartSpecies(iPart))%FullyIonized)) THEN PartSendBuf(iProc)%content(pos_elec(iProc)+1:pos_elec(iProc)+ SpecDSMC(PartSpecies(iPart))%MaxElecQuant) & = ElectronicDistriPart(iPart)%DistriFunc(1:SpecDSMC(PartSpecies(iPart))%MaxElecQuant) pos_elec(iProc) = pos_elec(iProc) + SpecDSMC(PartSpecies(iPart))%MaxElecQuant @@ -1224,7 +1224,7 @@ SUBROUTINE MPIParticleRecv(DoMPIUpdateNextFreePos) END IF IF (DSMC%ElectronicModel.EQ.2) THEN - IF(.NOT.((SpecDSMC(PartSpecies(PartID))%InterID.EQ.4).OR.SpecDSMC(PartSpecies(PartID))%FullyIonized)) THEN + IF(.NOT.((Species(PartSpecies(PartID))%InterID.EQ.4).OR.SpecDSMC(PartSpecies(PartID))%FullyIonized)) THEN IF(ALLOCATED(ElectronicDistriPart(PartID)%DistriFunc)) DEALLOCATE(ElectronicDistriPart(PartID)%DistriFunc) ALLOCATE(ElectronicDistriPart(PartID)%DistriFunc(1:SpecDSMC(PartSpecies(PartID))%MaxElecQuant)) ElectronicDistriPart(PartID)%DistriFunc(1:SpecDSMC(PartSpecies(PartID))%MaxElecQuant) & diff --git a/src/particles/particle_vMPF.f90 b/src/particles/particle_vMPF.f90 index bd87cb0da..b9bd41ab5 100644 --- a/src/particles/particle_vMPF.f90 +++ b/src/particles/particle_vMPF.f90 @@ -191,7 +191,7 @@ SUBROUTINE MergeParticles(iPartIndx_Node, nPart, nPartNew, iElem) Energy_old = Energy_old + 0.5 * Species(iSpec)%MassIC & * DOT_PRODUCT(PartState(4:6,iPart),PartState(4:6,iPart)) * partWeight IF(CollisMode.GT.1) THEN - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN Energy_old = Energy_old + (PartStateIntEn(1,iPart) + PartStateIntEn(2,iPart)) * partWeight END IF IF(DSMC%ElectronicModel.GT.0) Energy_old = Energy_old + PartStateIntEn(3,iPart)*partWeight @@ -212,13 +212,13 @@ SUBROUTINE MergeParticles(iPartIndx_Node, nPart, nPartNew, iElem) vmag2 = V_rel(1)**2 + V_rel(2)**2 + V_rel(3)**2 E_trans = E_trans + 0.5 * vmag2 * partWeight * Species(iSpec)%MassIC IF(CollisMode.GT.1) THEN - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN ! Rotational and vibrational energy E_vib = E_vib + (PartStateIntEn(1,iPart) - SpecDSMC(iSpec)%EZeroPoint) * partWeight E_rot = E_rot + partWeight * PartStateIntEn(2,iPart) END IF ! Electronic energy - IF(DSMC%ElectronicModel.GT.0.AND.SpecDSMC(iSpec)%InterID.NE.4) THEN + IF(DSMC%ElectronicModel.GT.0.AND.Species(iSpec)%InterID.NE.4) THEN E_elec = E_elec + partWeight * PartStateIntEn(3,iPart) END IF END IF @@ -235,7 +235,7 @@ SUBROUTINE MergeParticles(iPartIndx_Node, nPart, nPartNew, iElem) ! 2.2) Calc temperature and degree of freedoms IF(CollisMode.GT.1) THEN - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN IF(SpecDSMC(iSpec)%PolyatomicMol) THEN iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray ALLOCATE(DOF_vib_poly(PolyatomMolDSMC(iPolyatMole)%VibDOF)) @@ -261,7 +261,7 @@ SUBROUTINE MergeParticles(iPartIndx_Node, nPart, nPartNew, iElem) DOF_rot = SpecDSMC(iSpec)%Xi_Rot T_rot = 2.*E_rot/(DOF_rot*totalWeight*BoltzmannConst) END IF - IF(DSMC%ElectronicModel.GT.0.AND.SpecDSMC(iSpec)%InterID.NE.4) THEN + IF(DSMC%ElectronicModel.GT.0.AND.Species(iSpec)%InterID.NE.4) THEN T_elec = CalcTelec(E_elec/totalWeight, iSpec) IF (T_elec.GT.0.0) DOF_elec = 2.*E_elec/(totalWeight*BoltzmannConst*T_elec) END IF @@ -296,13 +296,13 @@ SUBROUTINE MergeParticles(iPartIndx_Node, nPart, nPartNew, iElem) vmag2 = V_rel(1)**2 + V_rel(2)**2 + V_rel(3)**2 E_trans_new = E_trans_new + 0.5 * vmag2 * partWeight * Species(iSpec)%MassIC IF(CollisMode.GT.1) THEN - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN ! Rotational and vibrational energy E_vib_new = E_vib_new + (PartStateIntEn(1,iPart) - SpecDSMC(iSpec)%EZeroPoint) * partWeight E_rot_new = E_rot_new + partWeight * PartStateIntEn(2,iPart) END IF ! Electronic energy - IF(DSMC%ElectronicModel.GT.0.AND.SpecDSMC(iSpec)%InterID.NE.4) THEN + IF(DSMC%ElectronicModel.GT.0.AND.Species(iSpec)%InterID.NE.4) THEN E_elec_new = E_elec_new + partWeight * PartStateIntEn(3,iPart) END IF END IF @@ -311,7 +311,7 @@ SUBROUTINE MergeParticles(iPartIndx_Node, nPart, nPartNew, iElem) ! 6.) ensuring momentum and energy conservation ! 6.1) ensuring electronic excitation IF(CollisMode.GT.1) THEN - IF(DSMC%ElectronicModel.GT.0.AND.SpecDSMC(iSpec)%InterID.NE.4) THEN + IF(DSMC%ElectronicModel.GT.0.AND.Species(iSpec)%InterID.NE.4) THEN Energy_Sum = E_elec IF (E_elec.GT.0.0) THEN IF (E_elec_new.EQ.0.0) THEN @@ -358,7 +358,7 @@ SUBROUTINE MergeParticles(iPartIndx_Node, nPart, nPartNew, iElem) ! 6.2) ensuring vibrational excitation IF(CollisMode.GT.1) THEN - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN Energy_Sum = Energy_Sum + E_vib IF (E_vib.GT.0.0) THEN IF (E_vib_new.EQ.0.0) THEN @@ -461,7 +461,7 @@ SUBROUTINE MergeParticles(iPartIndx_Node, nPart, nPartNew, iElem) ! Energy conservation Energy_new = Energy_new + 0.5*Species(iSpec)%MassIC * DOT_PRODUCT(PartState(4:6,iPart),PartState(4:6,iPart)) * partWeight IF(CollisMode.GT.1) THEN - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN Energy_new = Energy_new + (PartStateIntEn(1,iPart) + PartStateIntEn(2,iPart)) * partWeight END IF IF(DSMC%ElectronicModel.GT.0) Energy_new = Energy_new + PartStateIntEn(3,iPart)*partWeight diff --git a/src/particles/restart/particle_readin.f90 b/src/particles/restart/particle_readin.f90 index dc7b64278..5a6822a92 100644 --- a/src/particles/restart/particle_readin.f90 +++ b/src/particles/restart/particle_readin.f90 @@ -50,7 +50,7 @@ SUBROUTINE ParticleReadin() ! Particles USE MOD_Dielectric_Vars ,ONLY: DoDielectricSurfaceCharge USE MOD_HDF5_Input_Particles ,ONLY: ReadEmissionVariablesFromHDF5,ReadNodeSourceExtFromHDF5 -USE MOD_Particle_Vars ,ONLY: PartInt,PartData,nSpecies,usevMPF +USE MOD_Particle_Vars ,ONLY: PartInt,PartData,nSpecies,usevMPF, Species USE MOD_PICDepo_Vars ,ONLY: DoDeposition,RelaxDeposition,PartSourceOld ! Restart USE MOD_Restart_Vars ,ONLY: RestartFile,InterpolateSolution,RestartNullifySolution @@ -226,7 +226,7 @@ SUBROUTINE ParticleReadin() IF (DSMC%ElectronicModel.EQ.2) THEN MaxElecQuant = 0 DO iSpec = 1,nSpecies - IF (.NOT.((SpecDSMC(iSpec)%InterID.EQ.4).OR.SpecDSMC(iSpec)%FullyIonized)) THEN + IF (.NOT.((Species(iSpec)%InterID.EQ.4).OR.SpecDSMC(iSpec)%FullyIonized)) THEN IF (SpecDSMC(iSpec)%MaxElecQuant.GT.MaxElecQuant) MaxElecQuant = SpecDSMC(iSpec)%MaxElecQuant END IF END DO @@ -519,7 +519,7 @@ SUBROUTINE ParticleReadin() IF (useDSMC.AND.(DSMC%ElectronicModel.EQ.2)) THEN MaxElecQuant = 0 DO iSpec = 1, nSpecies - IF (.NOT.((SpecDSMC(iSpec)%InterID.EQ.4).OR.SpecDSMC(iSpec)%FullyIonized)) THEN + IF (.NOT.((Species(iSpec)%InterID.EQ.4).OR.SpecDSMC(iSpec)%FullyIonized)) THEN IF (SpecDSMC(iSpec)%MaxElecQuant.GT.MaxElecQuant) MaxElecQuant = SpecDSMC(iSpec)%MaxElecQuant END IF END DO diff --git a/src/particles/restart/particle_restart.f90 b/src/particles/restart/particle_restart.f90 index 360a9ca40..2114c9d1f 100644 --- a/src/particles/restart/particle_restart.f90 +++ b/src/particles/restart/particle_restart.f90 @@ -185,14 +185,14 @@ SUBROUTINE ParticleRestart() IF (readVarFromState(8).AND.readVarFromState(9)) THEN PartStateIntEn(1,iPart)=PartData(8,offsetnPart+iLoop) PartStateIntEn(2,iPart)=PartData(9,offsetnPart+iLoop) - ELSE IF ((SpecDSMC(PartSpecies(iPart))%InterID.EQ.1).OR.& - (SpecDSMC(PartSpecies(iPart))%InterID.EQ.10).OR.& - (SpecDSMC(PartSpecies(iPart))%InterID.EQ.15)) THEN + ELSE IF ((Species(PartSpecies(iPart))%InterID.EQ.1).OR.& + (Species(PartSpecies(iPart))%InterID.EQ.10).OR.& + (Species(PartSpecies(iPart))%InterID.EQ.15)) THEN !- setting inner DOF to 0 for atoms PartStateIntEn(1,iPart)=0. PartStateIntEn(2,iPart)=0. ELSE - IPWRITE(UNIT_StdOut,*) "SpecDSMC(PartSpecies(iPart))%InterID =", SpecDSMC(PartSpecies(iPart))%InterID + IPWRITE(UNIT_StdOut,*) "Species(PartSpecies(iPart))%InterID =", Species(PartSpecies(iPart))%InterID IPWRITE(UNIT_StdOut,*) "SpecID =", SpecID IPWRITE(UNIT_StdOut,*) "iPart =", iPart CALL Abort(__STAMP__,"resetting inner DOF for molecules is not implemented yet!") @@ -214,7 +214,7 @@ SUBROUTINE ParticleRestart() ! Electronic IF (DSMC%ElectronicModel.EQ.2) THEN - IF (.NOT.((SpecDSMC(PartSpecies(iPart))%InterID.EQ.4).OR.SpecDSMC(PartSpecies(iPart))%FullyIonized)) THEN + IF (.NOT.((Species(PartSpecies(iPart))%InterID.EQ.4).OR.SpecDSMC(PartSpecies(iPart))%FullyIonized)) THEN SDEALLOCATE(ElectronicDistriPart(iPart)%DistriFunc) ALLOCATE( ElectronicDistriPart(iPart)%DistriFunc(1:SpecDSMC(PartSpecies(iPart))%MaxElecQuant)) ElectronicDistriPart(iPart)%DistriFunc(1:SpecDSMC(PartSpecies(iPart))%MaxElecQuant)= & @@ -328,7 +328,7 @@ SUBROUTINE ParticleRestart() END IF ! Electronic IF (DSMC%ElectronicModel.EQ.2) THEN - IF (.NOT.((SpecDSMC(PartSpecies(iPart))%InterID.EQ.4).OR.SpecDSMC(PartSpecies(iPart))%FullyIonized)) & + IF (.NOT.((Species(PartSpecies(iPart))%InterID.EQ.4).OR.SpecDSMC(PartSpecies(iPart))%FullyIonized)) & CounterElec = CounterElec + SpecDSMC(PartSpecies(iPart))%MaxElecQuant END IF ! Ambipolar Diffusion @@ -376,7 +376,7 @@ SUBROUTINE ParticleRestart() END IF ! Electronic IF (DSMC%ElectronicModel.EQ.2) THEN - IF (.NOT.((SpecDSMC(PartSpecies(iPart))%InterID.EQ.4).OR.SpecDSMC(PartSpecies(iPart))%FullyIonized)) & + IF (.NOT.((Species(PartSpecies(iPart))%InterID.EQ.4).OR.SpecDSMC(PartSpecies(iPart))%FullyIonized)) & CounterElec = CounterElec + SpecDSMC(PartSpecies(iPart))%MaxElecQuant END IF ! Ambipolar Diffusion @@ -424,7 +424,7 @@ SUBROUTINE ParticleRestart() END IF ! Electronic IF (DSMC%ElectronicModel.EQ.2) THEN - IF (.NOT.((SpecDSMC(PartSpecies(iPart))%InterID.EQ.4).OR.SpecDSMC(PartSpecies(iPart))%FullyIonized)) & + IF (.NOT.((Species(PartSpecies(iPart))%InterID.EQ.4).OR.SpecDSMC(PartSpecies(iPart))%FullyIonized)) & CounterElec = CounterElec + SpecDSMC(PartSpecies(iPart))%MaxElecQuant END IF ! Ambipolar Diffusion @@ -531,7 +531,7 @@ SUBROUTINE ParticleRestart() !--- receive the polyatomic vibquants per particle at the end of the message ! Electronic IF(useDSMC.AND.(DSMC%ElectronicModel.EQ.2)) THEN - IF (.NOT.((SpecDSMC(PartSpecies(iPart))%InterID.EQ.4).OR.SpecDSMC(PartSpecies(iPart))%FullyIonized)) THEN + IF (.NOT.((Species(PartSpecies(iPart))%InterID.EQ.4).OR.SpecDSMC(PartSpecies(iPart))%FullyIonized)) THEN SendBuffElec(CounterElec+1:CounterElec+SpecDSMC(PartSpecies(iPart))%MaxElecQuant) & = ElectronicDistriPart(iPart)%DistriFunc(1:SpecDSMC(PartSpecies(iPart))%MaxElecQuant) CounterElec = CounterElec + SpecDSMC(PartSpecies(iPart))%MaxElecQuant @@ -684,7 +684,7 @@ SUBROUTINE ParticleRestart() END IF ! Electronic IF (DSMC%ElectronicModel.EQ.2) THEN - IF (.NOT.((SpecDSMC(PartSpecies(CurrentPartNum))%InterID.EQ.4) & + IF (.NOT.((Species(PartSpecies(CurrentPartNum))%InterID.EQ.4) & .OR.SpecDSMC(PartSpecies(CurrentPartNum))%FullyIonized)) THEN SDEALLOCATE(ElectronicDistriPart(CurrentPartNum)%DistriFunc) ALLOCATE(ElectronicDistriPart(CurrentPartNum)%DistriFunc(1:SpecDSMC(PartSpecies(CurrentPartNum))%MaxElecQuant)) @@ -914,7 +914,7 @@ SUBROUTINE RestartClones() IF (UseDSMC.AND.(DSMC%ElectronicModel.EQ.2)) THEN MaxElecQuant = 0 DO iSpec = 1, nSpecies - IF (.NOT.((SpecDSMC(iSpec)%InterID.EQ.4).OR.SpecDSMC(iSpec)%FullyIonized)) THEN + IF (.NOT.((Species(iSpec)%InterID.EQ.4).OR.SpecDSMC(iSpec)%FullyIonized)) THEN IF (SpecDSMC(iSpec)%MaxElecQuant.GT.MaxElecQuant) MaxElecQuant = SpecDSMC(iSpec)%MaxElecQuant END IF END DO @@ -978,7 +978,7 @@ SUBROUTINE RestartClones() END IF END IF IF (UseDSMC.AND.(DSMC%ElectronicModel.EQ.2)) THEN - IF (.NOT.((SpecDSMC(ClonedParticles(pcount(iDelay),iDelay)%Species)%InterID.EQ.4) & + IF (.NOT.((Species(ClonedParticles(pcount(iDelay),iDelay)%Species)%InterID.EQ.4) & .OR.SpecDSMC(ClonedParticles(pcount(iDelay),iDelay)%Species)%FullyIonized)) THEN ALLOCATE(ClonedParticles(pcount(iDelay),iDelay)%DistriFunc( & 1:SpecDSMC(ClonedParticles(pcount(iDelay),iDelay)%Species)%MaxElecQuant)) diff --git a/src/particles/surfacemodel/surfacemodel_tools.f90 b/src/particles/surfacemodel/surfacemodel_tools.f90 index 318bde7cd..f9e786762 100644 --- a/src/particles/surfacemodel/surfacemodel_tools.f90 +++ b/src/particles/surfacemodel/surfacemodel_tools.f90 @@ -120,7 +120,7 @@ SUBROUTINE SurfaceModel_EnergyAccommodation(PartID,locBCID,WallTemp) !> Energy accommodation at the surface: Particle internal energies PartStateIntEn() are sampled at surface temperature !=================================================================================================================================== USE MOD_Globals_Vars ,ONLY: BoltzmannConst -USE MOD_Particle_Vars ,ONLY: PartSpecies +USE MOD_Particle_Vars ,ONLY: PartSpecies, Species USE MOD_Particle_Boundary_Vars,ONLY: PartBound USE MOD_DSMC_Vars ,ONLY: CollisMode, PolyatomMolDSMC, useDSMC USE MOD_DSMC_Vars ,ONLY: PartStateIntEn, SpecDSMC, DSMC, VibQuantsPar @@ -158,7 +158,7 @@ SUBROUTINE SurfaceModel_EnergyAccommodation(PartID,locBCID,WallTemp) IF (useDSMC) THEN IF (CollisMode.GT.1) THEN - IF ((SpecDSMC(SpecID)%InterID.EQ.2).OR.(SpecDSMC(SpecID)%InterID.EQ.20)) THEN + IF ((Species(SpecID)%InterID.EQ.2).OR.(Species(SpecID)%InterID.EQ.20)) THEN !---- Rotational energy accommodation IF (SpecDSMC(SpecID)%Xi_Rot.EQ.2) THEN CALL RANDOM_NUMBER(RanNum) @@ -239,7 +239,7 @@ SUBROUTINE SurfaceModel_EnergyAccommodation(PartID,locBCID,WallTemp) END IF IF (DSMC%ElectronicModel.GT.0) THEN - IF((SpecDSMC(SpecID)%InterID.NE.4).AND.(.NOT.SpecDSMC(SpecID)%FullyIonized)) THEN + IF((Species(SpecID)%InterID.NE.4).AND.(.NOT.SpecDSMC(SpecID)%FullyIonized)) THEN CALL RANDOM_NUMBER(RanNum) IF (RanNum.LT.ElecACC) THEN PartStateIntEn(3,PartID) = RelaxElectronicShellWall(PartID, WallTemp) From 9b579e473f5404ad3ccdaba214e0777d2e3218d0 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Tue, 18 Oct 2022 18:21:03 +0200 Subject: [PATCH 025/222] adapt interid in dsmc init --- src/particles/dsmc/dsmc_init.f90 | 126 +++++++++++++++++++------------ src/particles/particle_init.f90 | 43 +---------- 2 files changed, 81 insertions(+), 88 deletions(-) diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index d996dbf01..1543cb7bf 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -279,13 +279,15 @@ SUBROUTINE InitDSMC() USE MOD_Mesh_Vars ,ONLY: nElems, NGEo USE MOD_Globals_Vars ,ONLY: Pi, BoltzmannConst, ElementaryCharge USE MOD_Particle_Vars ,ONLY: nSpecies, Species, PDM, PartSpecies, Symmetry, VarTimeStep, usevMPF -USE MOD_Particle_Vars ,ONLY: DoFieldIonization +USE MOD_Particle_Vars ,ONLY: DoFieldIonization, SpeciesDatabase USE MOD_DSMC_ParticlePairing ,ONLY: DSMC_init_octree USE MOD_DSMC_ChemInit ,ONLY: DSMC_chemical_init USE MOD_DSMC_PolyAtomicModel ,ONLY: InitPolyAtomicMolecs, DSMC_SetInternalEnr_Poly USE MOD_DSMC_CollisVec ,ONLY: DiceDeflectedVelocityVector4Coll, DiceVelocityVector4Coll, PostCollVec USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD USE MOD_DSMC_BGGas ,ONLY: BGGas_RegionsSetInternalTemp +USE MOD_io_hdf5 +USE MOD_HDF5_input ,ONLY:ReadAttribute, DatasetExists #if USE_LOADBALANCE USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance #endif /*USE_LOADBALANCE*/ @@ -298,10 +300,13 @@ SUBROUTINE InitDSMC() !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES CHARACTER(32) :: hilf , hilf2 -INTEGER :: iCase, iSpec, jSpec, nCase, iPart, iInit, iDOF, VarNum +INTEGER :: iCase, iSpec, jSpec, nCase, iPart, iInit, iDOF, VarNum, err INTEGER :: iColl, jColl, pColl, nCollision ! for collision parameter read in REAL :: A1, A2, delta_ij ! species constant for cross section (p. 24 Laux) LOGICAL :: PostCollPointerSet +CHARACTER(LEN=64) :: dsetname +INTEGER(HID_T) :: file_id_specdb ! File identifier +INTEGER(HID_T) :: dset_id_specdb ! Dataset identifier !=================================================================================================================================== LBWRITE(UNIT_StdOut,'(132("-"))') LBWRITE(UNIT_stdOut,'(A)') ' DSMC INIT ...' @@ -401,29 +406,56 @@ SUBROUTINE InitDSMC() ! Flags for collision parameters CollInf%averagedCollisionParameters = GETLOGICAL('Particles-DSMC-averagedCollisionParameters') CollInf%crossSectionConstantMode = GETINT('Particles-DSMC-crossSectionConstantMode','0') - DO iSpec = 1, nSpecies - WRITE(UNIT=hilf,FMT='(I0)') iSpec - ! averagedCollisionParameters set true: species-specific collision parameters get read in - IF(CollInf%averagedCollisionParameters) THEN - SpecDSMC(iSpec)%Tref = GETREAL('Part-Species'//TRIM(hilf)//'-Tref' ) - SpecDSMC(iSpec)%dref = GETREAL('Part-Species'//TRIM(hilf)//'-dref' ) - SpecDSMC(iSpec)%omega = GETREAL('Part-Species'//TRIM(hilf)//'-omega' ) - SpecDSMC(iSpec)%alphaVSS = GETREAL('Part-Species'//TRIM(hilf)//'-alphaVSS' ) - ! check for faulty parameters - IF((SpecDSMC(iSpec)%InterID * SpecDSMC(iSpec)%Tref * SpecDSMC(iSpec)%dref * SpecDSMC(iSpec)%alphaVSS) .EQ. 0) THEN - CALL Abort(__STAMP__,'ERROR in species data: check collision parameters in ini \n'//& - 'Part-Species'//TRIM(hilf)//'-(InterID * Tref * dref * alphaVSS) .EQ. 0 - but must not be 0') - END IF ! (Tref * dref * alphaVSS) .EQ. 0 - IF ((SpecDSMC(iSpec)%alphaVSS.LT.0.0) .OR. (SpecDSMC(iSpec)%alphaVSS.GT.2.0)) THEN - CALL Abort(__STAMP__,'ERROR: Check set parameter Part-Species'//TRIM(hilf)//'-alphaVSS must not be lower 0 or greater 2') - END IF ! alphaVSS parameter check - END IF ! averagedCollisionParameters - SpecDSMC(iSpec)%FullyIonized = GETLOGICAL('Part-Species'//TRIM(hilf)//'-FullyIonized') - ! Save the electron species into a global variable - IF(SpecDSMC(iSpec)%InterID.EQ.4) DSMC%ElectronSpecies = iSpec - ! reading electronic state informations from HDF5 file - IF((DSMC%ElectronicModelDatabase.NE.'none').AND.(SpecDSMC(iSpec)%InterID.NE.4)) CALL SetElectronicModel(iSpec) - END DO ! iSpec = nSpecies + + IF(SpeciesDatabase.NE.'none') THEN + ! Initialize FORTRAN interface. + CALL H5OPEN_F(err) + + CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) + + DO iSpec = 1, nSpecies + WRITE(UNIT=hilf,FMT='(I0)') iSpec + ! averagedCollisionParameters set true: species-specific collision parameters get read in + IF(CollInf%averagedCollisionParameters) THEN + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + + IF(Species(iSpec)%DoOverwriteParameters) THEN + SpecDSMC(iSpec)%Tref = GETREAL('Part-Species'//TRIM(hilf)//'-Tref' ) + SpecDSMC(iSpec)%dref = GETREAL('Part-Species'//TRIM(hilf)//'-dref' ) + SpecDSMC(iSpec)%omega = GETREAL('Part-Species'//TRIM(hilf)//'-omega' ) + SpecDSMC(iSpec)%alphaVSS = GETREAL('Part-Species'//TRIM(hilf)//'-alphaVSS' ) + ! check for faulty parameters + ! IF((Species(iSpec)%InterID * SpecDSMC(iSpec)%Tref * SpecDSMC(iSpec)%dref * SpecDSMC(iSpec)%alphaVSS) .EQ. 0) THEN + ! CALL Abort(__STAMP__,'ERROR in species data: check collision parameters in ini \n'//& + ! 'Part-Species'//TRIM(hilf)//'-(InterID * Tref * dref * alphaVSS) .EQ. 0 - but must not be 0') + ! END IF ! (Tref * dref * alphaVSS) .EQ. 0 + ! IF ((SpecDSMC(iSpec)%alphaVSS.LT.0.0) .OR. (SpecDSMC(iSpec)%alphaVSS.GT.2.0)) THEN + ! CALL Abort(__STAMP__,'ERROR: Check set parameter Part-Species'//TRIM(hilf)//'-alphaVSS must not be lower 0 or greater 2') + ! END IF ! alphaVSS parameter check + ELSE + CALL ReadAttribute(file_id_specdb,'Tref',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%Tref) + LBWRITE (UNIT_stdOut,*) 'Tref: ', SpecDSMC(iSpec)%Tref + CALL ReadAttribute(file_id_specdb,'dref',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%dref) + LBWRITE (UNIT_stdOut,*) 'dref: ', SpecDSMC(iSpec)%dref + CALL ReadAttribute(file_id_specdb,'omega',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%omega) + LBWRITE (UNIT_stdOut,*) 'omega: ', SpecDSMC(iSpec)%omega + END IF + + END IF ! averagedCollisionParameters + SpecDSMC(iSpec)%FullyIonized = GETLOGICAL('Part-Species'//TRIM(hilf)//'-FullyIonized') + ! Save the electron species into a global variable + IF(Species(iSpec)%InterID.EQ.4) DSMC%ElectronSpecies = iSpec + ! reading electronic state informations from HDF5 file + IF((DSMC%ElectronicModelDatabase.NE.'none').AND.(Species(iSpec)%InterID.NE.4)) CALL SetElectronicModel(iSpec) + END DO ! iSpec = nSpecies + + ! Close the file. + CALL H5FCLOSE_F(file_id_specdb, err) + ! Close FORTRAN interface. + CALL H5CLOSE_F(err) + + END IF !database ! determine number of different species combinations and allocate collidingSpecies array nCollision=0 @@ -620,7 +652,7 @@ SUBROUTINE InitDSMC() SpecDSMC(1:nSpecies)%SpecToPolyArray = 0 useRelaxProbCorrFactor=GETLOGICAL('Particles-DSMC-useRelaxProbCorrFactor','.FALSE.') DO iSpec = 1, nSpecies - IF(SpecDSMC(iSpec)%InterID.NE.4) THEN + IF(Species(iSpec)%InterID.NE.4) THEN WRITE(UNIT=hilf,FMT='(I0)') iSpec SpecDSMC(iSpec)%PolyatomicMol=GETLOGICAL('Part-Species'//TRIM(hilf)//'-PolyatomicMol','.FALSE.') IF(SpecDSMC(iSpec)%PolyatomicMol.AND.DSMC%DoTEVRRelaxation) THEN @@ -631,7 +663,7 @@ SUBROUTINE InitDSMC() IF(SpecDSMC(iSpec)%PolyatomicMol) THEN DSMC%NumPolyatomMolecs = DSMC%NumPolyatomMolecs + 1 SpecDSMC(iSpec)%SpecToPolyArray = DSMC%NumPolyatomMolecs - ELSEIF ((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + ELSEIF ((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN SpecDSMC(iSpec)%Xi_Rot = 2 SpecDSMC(iSpec)%CharaTVib = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempVib') SpecDSMC(iSpec)%CharaTRot = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempRot','0') @@ -643,7 +675,7 @@ SUBROUTINE InitDSMC() SpecDSMC(iSpec)%DissQuant = INT(SpecDSMC(iSpec)%Ediss_eV*ElementaryCharge/(BoltzmannConst*SpecDSMC(iSpec)%CharaTVib)) END IF ! Read in species values for rotational relaxation models of Boyd/Zhang if necessary - IF(DSMC%RotRelaxProb.GT.1.0.AND.((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20))) THEN + IF(DSMC%RotRelaxProb.GT.1.0.AND.((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) THEN SpecDSMC(iSpec)%CollNumRotInf = GETREAL('Part-Species'//TRIM(hilf)//'-CollNumRotInf') SpecDSMC(iSpec)%TempRefRot = GETREAL('Part-Species'//TRIM(hilf)//'-TempRefRot') IF(SpecDSMC(iSpec)%CollNumRotInf*SpecDSMC(iSpec)%TempRefRot.EQ.0) THEN @@ -655,7 +687,7 @@ SUBROUTINE InitDSMC() ! Read in species values for vibrational relaxation models of Milikan-White if necessary IF(DSMC%VibRelaxProb.EQ.2.0) THEN ! Only molecules or charged molecules - IF(((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20))) THEN + IF(((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) THEN ALLOCATE(SpecDSMC(iSpec)%MW_ConstA(1:nSpecies)) ALLOCATE(SpecDSMC(iSpec)%MW_ConstB(1:nSpecies)) DO jSpec = 1, nSpecies @@ -678,7 +710,7 @@ SUBROUTINE InitDSMC() END IF SpecDSMC(iSpec)%VibCrossSec = GETREAL('Part-Species'//TRIM(hilf)//'-VibCrossSection') ! Only molecules or charged molecules - IF((SpecDSMC(iSpec)%VibCrossSec.EQ.0).AND.((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20))) THEN + IF((SpecDSMC(iSpec)%VibCrossSec.EQ.0).AND.((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) THEN CALL Abort(& __STAMP__& ,'Error! VibCrossSec is equal to zero for species:', iSpec) @@ -702,7 +734,7 @@ SUBROUTINE InitDSMC() DO iInit = 1, Species(iSpec)%NumberOfInits WRITE(UNIT=hilf2,FMT='(I0)') iInit hilf2=TRIM(hilf)//'-Init'//TRIM(hilf2) - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN SpecDSMC(iSpec)%Init(iInit)%TVib = GETREAL('Part-Species'//TRIM(hilf2)//'-TempVib') SpecDSMC(iSpec)%Init(iInit)%TRot = GETREAL('Part-Species'//TRIM(hilf2)//'-TempRot') END IF @@ -715,7 +747,7 @@ SUBROUTINE InitDSMC() DO iInit = 1, Species(iSpec)%nSurfacefluxBCs WRITE(UNIT=hilf2,FMT='(I0)') iInit hilf2=TRIM(hilf)//'-Surfaceflux'//TRIM(hilf2) - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib = GETREAL('Part-Species'//TRIM(hilf2)//'-TempVib','0.') SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot = GETREAL('Part-Species'//TRIM(hilf2)//'-TempRot','0.') IF (SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot*SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib.EQ.0.) THEN @@ -802,7 +834,7 @@ SUBROUTINE InitDSMC() WRITE(UNIT=hilf,FMT='(I0)') iSpec ! Read-in of heat of formation, ions are treated later using the heat of formation of their ground state and data from the ! from the electronic state database to ensure consistent energies across chemical reactions of QK and Arrhenius type. - IF((SpecDSMC(iSpec)%InterID.EQ.10).OR.(SpecDSMC(iSpec)%InterID.EQ.20).OR.(SpecDSMC(iSpec)%InterID.EQ.4)) THEN + IF((Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20).OR.(Species(iSpec)%InterID.EQ.4)) THEN SpecDSMC(iSpec)%HeatOfFormation = 0.0 ELSE SpecDSMC(iSpec)%HeatOfFormation = GETREAL('Part-Species'//TRIM(hilf)//'-HeatOfFormation_K') @@ -810,13 +842,13 @@ SUBROUTINE InitDSMC() END IF ! Heat of formation of ionized species is modified with the ionization energy directly from read-in electronic energy levels ! of the ground/previous state of the respective species (Input requires a species number (eg species number of N for NIon1)) - IF((SpecDSMC(iSpec)%InterID.EQ.10).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20)) THEN SpecDSMC(iSpec)%PreviousState = GETINT('Part-Species'//TRIM(hilf)//'-PreviousState') ELSE SpecDSMC(iSpec)%PreviousState = 0 END IF ! Read-in of species for field ionization (only required if it cannot be determined automatically) - IF(SpecDSMC(iSpec)%InterID.NE.4) THEN + IF(Species(iSpec)%InterID.NE.4) THEN SpecDSMC(iSpec)%NextIonizationSpecies = GETINT('Part-Species'//TRIM(hilf)//'-NextIonizationSpecies') ELSE SpecDSMC(iSpec)%NextIonizationSpecies = 0 @@ -824,7 +856,7 @@ SUBROUTINE InitDSMC() END IF ! Read-in of electronic levels for QK and backward reaction rate ------------------------------------------------------------- IF (DSMC%ElectronicModelDatabase .EQ.'none') THEN - IF ((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF ((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN SpecDSMC(iSpec)%MaxElecQuant = GETINT('Part-Species'//TRIM(hilf)//'-NumElectronicLevels','0') IF(SpecDSMC(iSpec)%MaxElecQuant.GT.0) THEN ALLOCATE(SpecDSMC(iSpec)%ElectronicState(2,0:SpecDSMC(iSpec)%MaxElecQuant-1)) @@ -910,7 +942,7 @@ SUBROUTINE InitDSMC() END IF DO iSpec = 1, nSpecies IF(BGGas%BackgroundSpecies(iSpec)) THEN - IF(SpecDSMC(iSpec)%InterID.EQ.4) CALL abort(__STAMP__,'ERROR in BGGas: Electrons as background gas are not yet available!') + IF(Species(iSpec)%InterID.EQ.4) CALL abort(__STAMP__,'ERROR in BGGas: Electrons as background gas are not yet available!') END IF END DO ELSE @@ -931,7 +963,7 @@ SUBROUTINE InitDSMC() ,'ERROR: Particles-DSMC-alpha has to be in the range between 0 and 1') END IF DO iSpec = 1, nSpecies - IF(.NOT.((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20))) CYCLE + IF(.NOT.((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) CYCLE ALLOCATE(SpecDSMC(iSpec)%CharaVelo(1:nSpecies)) ALLOCATE(SpecDSMC(iSpec)%CollNumVib(1:nSpecies)) DO jSpec = 1, nSpecies @@ -992,14 +1024,14 @@ SUBROUTINE InitDSMC() WRITE(UNIT=hilf,FMT='(I0)') iSpec ! Heat of formation of ionized species is modified with the ionization energy directly from read-in electronic energy levels ! of the ground/previous state of the respective species (Input requires a species number (eg species number of N for NIon1)) - IF((SpecDSMC(iSpec)%InterID.EQ.10).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20)) THEN SpecDSMC(iSpec)%PreviousState = GETINT('Part-Species'//TRIM(hilf)//'-PreviousState') ELSE SpecDSMC(iSpec)%PreviousState = 0 - END IF ! (SpecDSMC(iSpec)%InterID.EQ.10).OR.(SpecDSMC(iSpec)%InterID.EQ.20) + END IF ! (Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20) ! Read-in of species for field ionization (only required if it cannot be determined automatically) - IF ((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF ((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN SpecDSMC(iSpec)%NextIonizationSpecies = GETINT('Part-Species'//TRIM(hilf)//'-NextIonizationSpecies') ELSE SpecDSMC(iSpec)%NextIonizationSpecies = 0 @@ -1066,7 +1098,7 @@ SUBROUTINE CalcHeatOfFormation() USE MOD_Globals ,ONLY: mpiroot #endif USE MOD_Globals_Vars ,ONLY: BoltzmannConst,Joule2eV -USE MOD_PARTICLE_Vars ,ONLY: nSpecies +USE MOD_PARTICLE_Vars ,ONLY: nSpecies, Species USE MOD_DSMC_Vars ,ONLY: SpecDSMC #if USE_LOADBALANCE USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance @@ -1083,7 +1115,7 @@ SUBROUTINE CalcHeatOfFormation() AutoDetect=.TRUE. DO iSpec = 1, nSpecies counter = 0 - IF((SpecDSMC(iSpec)%InterID.EQ.10).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20)) THEN IF(SpecDSMC(iSpec)%PreviousState.EQ.0) THEN WRITE(UNIT=hilf2,FMT='(I0)') iSpec SpecDSMC(iSpec)%HeatOfFormation = GETREAL('Part-Species'//TRIM(hilf2)//'-HeatOfFormation_K') * BoltzmannConst @@ -1134,7 +1166,7 @@ SUBROUTINE SetNextIonizationSpecies() #if USE_MPI USE MOD_Globals ,ONLY: mpiroot #endif -USE MOD_PARTICLE_Vars ,ONLY: nSpecies +USE MOD_PARTICLE_Vars ,ONLY: nSpecies, Species USE MOD_DSMC_Vars ,ONLY: SpecDSMC USE MOD_ReadInTools ,ONLY: PrintOption #if USE_LOADBALANCE @@ -1152,7 +1184,7 @@ SUBROUTINE SetNextIonizationSpecies() AutoDetect=.FALSE. DO iSpec = 1, nSpecies ! loop all species, except electrons (also loop over fully ionized species!) - IF(SpecDSMC(iSpec)%InterID.NE.4) THEN + IF(Species(iSpec)%InterID.NE.4) THEN IF(SpecDSMC(iSpec)%PreviousState.NE.0)THEN SpecDSMC(SpecDSMC(iSpec)%PreviousState)%NextIonizationSpecies = iSpec AutoDetect=.TRUE. @@ -1179,7 +1211,7 @@ SUBROUTINE SetVarVibProb2Elems() USE MOD_Globals ,ONLY: abort, IK, MPI_COMM_WORLD USE MOD_PARTICLE_Vars ,ONLY: nSpecies, Species USE MOD_Restart_Vars ,ONLY: DoRestart,RestartFile -USE MOD_Particle_Vars ,ONLY: nSpecies, PartSpecies +USE MOD_Particle_Vars ,ONLY: nSpecies, PartSpecies, Species USE MOD_part_tools ,ONLY: GetParticleWeight USE MOD_HDF5_INPUT ,ONLY: DatasetExists,ReadAttribute,ReadArray USE MOD_IO_HDF5 @@ -1274,7 +1306,7 @@ SUBROUTINE SetVarVibProb2Elems() END DO CALL CalcInstantTransTemp(iPartIndx,nPart) DO iSpec = 1, nSpecies - IF(.NOT.((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)))CYCLE + IF(.NOT.((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)))CYCLE IF((DSMC%InstantTransTemp(iSpec).NE.0).AND.(nPerSpec(iSpec).GE.5)) THEN Ti = DSMC%InstantTransTemp(iSpec) ELSE diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index c25086710..2a2d908cd 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -1580,6 +1580,8 @@ SUBROUTINE InitializeSpeciesParameter() LBWRITE (UNIT_stdOut,*) 'ChargeIC: ', Species(iSpec)%ChargeIC CALL ReadAttribute(file_id_specdb,'MassIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%MassIC) LBWRITE (UNIT_stdOut,*) 'MassIC: ', Species(iSpec)%MassIC + CALL ReadAttribute(file_id_specdb,'InteractionID',1,DatasetName = dsetname,RealScalar=Species(iSpec)%MassIC) + LBWRITE (UNIT_stdOut,*) 'InteractionID: ', Species(iSpec)%InterID END IF END DO @@ -1602,47 +1604,6 @@ SUBROUTINE InitializeSpeciesParameter() END DO ! iSpec END IF - -! IF(SpeciesDatabase.EQ.'none') THEN -! DO iSpec = 1, nSpecies -! LBWRITE (UNIT_stdOut,'(66(". "))') -! WRITE(UNIT=hilf,FMT='(I0)') iSpec -! Species(iSpec)%ChargeIC = GETREAL('Part-Species'//TRIM(hilf)//'-ChargeIC') -! Species(iSpec)%MassIC = GETREAL('Part-Species'//TRIM(hilf)//'-MassIC') -! END DO ! iSpec -! ELSE -! ! Initialize FORTRAN interface. -! CALL H5OPEN_F(err) - -! ! Check if file exists -! IF(.NOT.FILEEXISTS(SpeciesDatabase)) THEN -! CALL abort(__STAMP__,'ERROR: Database ['//TRIM(SpeciesDatabase)//'] does not exist.') -! END IF - -! CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) - -! DO iSpec = 1, nSpecies -! LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) -! dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) - -! CALL DatasetExists(file_id_specdb,TRIM(dsetname),DataSetFound) -! IF(.NOT.DataSetFound)THEN -! CALL abort(& -! __STAMP__& -! ,'DataSet not found: ['//TRIM(dsetname)//'] ['//TRIM(SpeciesDatabase)//']') -! END IF - -! CALL ReadAttribute(file_id_specdb,'ChargeIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%ChargeIC) -! LBWRITE (UNIT_stdOut,*) 'ChargeIC: ', Species(iSpec)%ChargeIC -! CALL ReadAttribute(file_id_specdb,'MassIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%MassIC) -! LBWRITE (UNIT_stdOut,*) 'MassIC: ', Species(iSpec)%MassIC -! END DO -! ! Close the file. -! CALL H5FCLOSE_F(file_id_specdb, err) -! ! Close FORTRAN interface. -! CALL H5CLOSE_F(err) -! END IF - IF(nSpecies.GT.0)THEN LBWRITE (UNIT_stdOut,'(66(". "))') END IF ! nSpecies.GT.0 From 6559cc00ac306dadcb85a0f715cd63b3f226cf47 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Wed, 19 Oct 2022 09:08:13 +0200 Subject: [PATCH 026/222] current state --- src/io_hdf5/hdf5_input.f90 | 2 +- src/particles/dsmc/dsmc_init.f90 | 16 +++++++++------- src/particles/particle_init.f90 | 18 +++++++++++++++++- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/io_hdf5/hdf5_input.f90 b/src/io_hdf5/hdf5_input.f90 index 8396ec817..c1a3f5ba8 100644 --- a/src/io_hdf5/hdf5_input.f90 +++ b/src/io_hdf5/hdf5_input.f90 @@ -623,7 +623,7 @@ SUBROUTINE ReadAttribute(File_ID_in,AttribName,nVal,DatasetName,RealScalar,IntSc CALL H5AOPEN_F(Loc_ID, TRIM(AttribName), Attr_ID, iError) IF(iError.NE.0) CALL abort(__STAMP__,& - 'Attribute '//TRIM(AttribName)//' does not exist or h5 file already opened by a differen program') + 'Attribute '//TRIM(AttribName)//' does not exist or h5 file already opened by a different program') IF(PRESENT(RealArray)) RealArray=0. IF(PRESENT(RealScalar)) RealScalar=0. diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index 1543cb7bf..9e6fc4e8d 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -426,13 +426,13 @@ SUBROUTINE InitDSMC() SpecDSMC(iSpec)%omega = GETREAL('Part-Species'//TRIM(hilf)//'-omega' ) SpecDSMC(iSpec)%alphaVSS = GETREAL('Part-Species'//TRIM(hilf)//'-alphaVSS' ) ! check for faulty parameters - ! IF((Species(iSpec)%InterID * SpecDSMC(iSpec)%Tref * SpecDSMC(iSpec)%dref * SpecDSMC(iSpec)%alphaVSS) .EQ. 0) THEN - ! CALL Abort(__STAMP__,'ERROR in species data: check collision parameters in ini \n'//& - ! 'Part-Species'//TRIM(hilf)//'-(InterID * Tref * dref * alphaVSS) .EQ. 0 - but must not be 0') - ! END IF ! (Tref * dref * alphaVSS) .EQ. 0 - ! IF ((SpecDSMC(iSpec)%alphaVSS.LT.0.0) .OR. (SpecDSMC(iSpec)%alphaVSS.GT.2.0)) THEN - ! CALL Abort(__STAMP__,'ERROR: Check set parameter Part-Species'//TRIM(hilf)//'-alphaVSS must not be lower 0 or greater 2') - ! END IF ! alphaVSS parameter check + IF((Species(iSpec)%InterID * SpecDSMC(iSpec)%Tref * SpecDSMC(iSpec)%dref * SpecDSMC(iSpec)%alphaVSS) .EQ. 0) THEN + CALL Abort(__STAMP__,'ERROR in species data: check collision parameters in ini \n'//& + 'Part-Species'//TRIM(hilf)//'-(InterID * Tref * dref * alphaVSS) .EQ. 0 - but must not be 0') + END IF ! (Tref * dref * alphaVSS) .EQ. 0 + IF ((SpecDSMC(iSpec)%alphaVSS.LT.0.0) .OR. (SpecDSMC(iSpec)%alphaVSS.GT.2.0)) THEN + CALL Abort(__STAMP__,'ERROR: Check set parameter Part-Species'//TRIM(hilf)//'-alphaVSS must not be lower 0 or greater 2') + END IF ! alphaVSS parameter check ELSE CALL ReadAttribute(file_id_specdb,'Tref',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%Tref) LBWRITE (UNIT_stdOut,*) 'Tref: ', SpecDSMC(iSpec)%Tref @@ -440,6 +440,8 @@ SUBROUTINE InitDSMC() LBWRITE (UNIT_stdOut,*) 'dref: ', SpecDSMC(iSpec)%dref CALL ReadAttribute(file_id_specdb,'omega',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%omega) LBWRITE (UNIT_stdOut,*) 'omega: ', SpecDSMC(iSpec)%omega + CALL ReadAttribute(file_id_specdb,'alphaVSS',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%alphaVSS) + LBWRITE (UNIT_stdOut,*) 'alphaVSS: ', SpecDSMC(iSpec)%alphaVSS END IF END IF ! averagedCollisionParameters diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 2a2d908cd..1490f6553 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -1531,10 +1531,13 @@ SUBROUTINE InitializeSpeciesParameter() INTEGER :: iSpec,err CHARACTER(32) :: hilf, hilf2 CHARACTER(LEN=64) :: dsetname +CHARACTER(LEN=64) :: attrname INTEGER(HID_T) :: file_id_specdb ! File identifier INTEGER(HID_T) :: dset_id_specdb ! Dataset identifier LOGICAL :: DataSetFound +LOGICAL :: AttrExists !=================================================================================================================================== +AttrExists = .TRUE. ! Read-in of the species database SpeciesDatabase = GETSTR('Particles-Species-Database') @@ -1571,16 +1574,29 @@ SUBROUTINE InitializeSpeciesParameter() LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + ! CALL DatasetExists(file_id_specdb,TRIM(TRIM(dsetname)//'/ChargeIC'),DataSetFound,attrib=.TRUE.) + ! print*, '********************', DataSetFound + ! IF(DatasetFound) THEN + + ! END IF + + + CALL DatasetExists(file_id_specdb,TRIM(dsetname),DataSetFound) IF(.NOT.DataSetFound)THEN Species(iSpec)%DoOverwriteParameters = .TRUE. SWRITE(*,*) 'WARNING: DataSet not found: ['//TRIM(dsetname)//'] ['//TRIM(SpeciesDatabase)//']' ELSE + ! attrname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name//'/ChargeIC')) + attrname = TRIM('ChargeIC') + !CALL DatasetExists(file_id_specdb,'ChargeIC',AttrExists,attrib=.TRUE.) + ! CALL H5AEXISTS_BY_NAME_F(file_id_specdb,'/Species/H2/ChargeIC',AttrExists,iError) + ! print*, 'Attribute exists ', TRIM(attrname), AttrExists CALL ReadAttribute(file_id_specdb,'ChargeIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%ChargeIC) LBWRITE (UNIT_stdOut,*) 'ChargeIC: ', Species(iSpec)%ChargeIC CALL ReadAttribute(file_id_specdb,'MassIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%MassIC) LBWRITE (UNIT_stdOut,*) 'MassIC: ', Species(iSpec)%MassIC - CALL ReadAttribute(file_id_specdb,'InteractionID',1,DatasetName = dsetname,RealScalar=Species(iSpec)%MassIC) + CALL ReadAttribute(file_id_specdb,'InteractionID',1,DatasetName = dsetname,IntScalar=Species(iSpec)%InterID) LBWRITE (UNIT_stdOut,*) 'InteractionID: ', Species(iSpec)%InterID END IF From ce28ed342b13d91f66ba52d7219b393965f27c19 Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Wed, 19 Oct 2022 10:26:27 +0200 Subject: [PATCH 027/222] attribute exists --- src/io_hdf5/hdf5_input.f90 | 43 +++++++++++++++++++++++++++++++- src/particles/dsmc/dsmc_init.f90 | 21 +++++++++++++--- src/particles/particle_init.f90 | 30 ++++++++-------------- 3 files changed, 71 insertions(+), 23 deletions(-) diff --git a/src/io_hdf5/hdf5_input.f90 b/src/io_hdf5/hdf5_input.f90 index c1a3f5ba8..e2bce8a57 100644 --- a/src/io_hdf5/hdf5_input.f90 +++ b/src/io_hdf5/hdf5_input.f90 @@ -62,6 +62,10 @@ MODULE MOD_HDF5_Input MODULE PROCEDURE ReadAttribute END INTERFACE +INTERFACE AttributeExists + MODULE PROCEDURE AttributeExists +END INTERFACE + INTERFACE GetVarnames MODULE PROCEDURE GetVarnames END INTERFACE @@ -74,6 +78,7 @@ MODULE MOD_HDF5_Input PUBLIC :: GetDataSize PUBLIC :: GetVarnames PUBLIC :: GetArrayAndName +PUBLIC :: AttributeExists !=================================================================================================================================== CONTAINS @@ -600,7 +605,7 @@ SUBROUTINE ReadAttribute(File_ID_in,AttribName,nVal,DatasetName,RealScalar,IntSc INTEGER ,INTENT(OUT),OPTIONAL,TARGET :: IntScalar !< Scalar integer attribute CHARACTER(LEN=255),INTENT(OUT),OPTIONAL,TARGET :: StrScalar !< Scalar string attribute CHARACTER(LEN=255),INTENT(OUT),OPTIONAL,TARGET :: StrArray(nVal) !< Array for character array attributes -LOGICAL ,INTENT(OUT),OPTIONAL :: LogicalScalar !< Scalar logical attribute +LOGICAL ,INTENT(OUT),OPTIONAL :: LogicalScalar !< Scalar logical attribute !---------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER(HID_T) :: Attr_ID,Type_ID,Loc_ID @@ -666,6 +671,42 @@ SUBROUTINE ReadAttribute(File_ID_in,AttribName,nVal,DatasetName,RealScalar,IntSc LOGWRITE(*,*)'...DONE!' END SUBROUTINE ReadAttribute +!================================================================================================================================== +!> Subroutine to check if attributes exist in sub layer datasets. +!================================================================================================================================== +SUBROUTINE AttributeExists(File_ID_in,AttribName,DatasetName,AttrExists) +! MODULES +USE MOD_Globals +USE,INTRINSIC :: ISO_C_BINDING +IMPLICIT NONE +!---------------------------------------------------------------------------------------------------------------------------------- +! INPUT/OUTPUT VARIABLES +INTEGER(HID_T) ,INTENT(IN) :: File_ID_in !< HDF5 file id of opened file +CHARACTER(LEN=*) ,INTENT(IN) :: AttribName !< name of attribute to be read +CHARACTER(LEN=*) ,INTENT(IN) :: DatasetName !< dataset name +LOGICAL ,INTENT(OUT) :: AttrExists +!---------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER(HID_T) :: Attr_ID,Type_ID,Loc_ID +!================================================================================================================================== +CALL H5DOPEN_F(File_ID_in, TRIM(DatasetName),Loc_ID, iError) + +! Create the attribute for group Loc_ID. +CALL H5AOPEN_F(Loc_ID, TRIM(AttribName), Attr_ID, iError) + +IF(iError.NE.0) THEN + AttrExists = .FALSE. +ELSE + AttrExists = .TRUE. +END IF + +! Close the attribute. +CALL H5ACLOSE_F(Attr_ID, iError) +! Close the dataset and property list. +CALL H5DCLOSE_F(Loc_ID, iError) + +END SUBROUTINE AttributeExists + !=================================================================================================================================== !> Subroutine to determine filename of next HDF5 file for FlushHDF5 diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index 9e6fc4e8d..549012142 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -287,7 +287,7 @@ SUBROUTINE InitDSMC() USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD USE MOD_DSMC_BGGas ,ONLY: BGGas_RegionsSetInternalTemp USE MOD_io_hdf5 -USE MOD_HDF5_input ,ONLY:ReadAttribute, DatasetExists +USE MOD_HDF5_input ,ONLY:ReadAttribute, DatasetExists, AttributeExists #if USE_LOADBALANCE USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance #endif /*USE_LOADBALANCE*/ @@ -304,6 +304,7 @@ SUBROUTINE InitDSMC() INTEGER :: iColl, jColl, pColl, nCollision ! for collision parameter read in REAL :: A1, A2, delta_ij ! species constant for cross section (p. 24 Laux) LOGICAL :: PostCollPointerSet +LOGICAL :: Attr_Exists CHARACTER(LEN=64) :: dsetname INTEGER(HID_T) :: file_id_specdb ! File identifier INTEGER(HID_T) :: dset_id_specdb ! Dataset identifier @@ -419,6 +420,7 @@ SUBROUTINE InitDSMC() IF(CollInf%averagedCollisionParameters) THEN LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + print*, 'DatasetName', dsetname, file_id_specdb IF(Species(iSpec)%DoOverwriteParameters) THEN SpecDSMC(iSpec)%Tref = GETREAL('Part-Species'//TRIM(hilf)//'-Tref' ) @@ -435,13 +437,26 @@ SUBROUTINE InitDSMC() END IF ! alphaVSS parameter check ELSE CALL ReadAttribute(file_id_specdb,'Tref',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%Tref) - LBWRITE (UNIT_stdOut,*) 'Tref: ', SpecDSMC(iSpec)%Tref + LBWRITE (UNIT_stdOut,*) 'Tref: ', SpecDSMC(iSpec)%Tref, iSpec, dsetname, file_id_specdb CALL ReadAttribute(file_id_specdb,'dref',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%dref) LBWRITE (UNIT_stdOut,*) 'dref: ', SpecDSMC(iSpec)%dref CALL ReadAttribute(file_id_specdb,'omega',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%omega) LBWRITE (UNIT_stdOut,*) 'omega: ', SpecDSMC(iSpec)%omega - CALL ReadAttribute(file_id_specdb,'alphaVSS',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%alphaVSS) + ! CALL AttributeExists(file_id_specdb,'alphaVSS',TRIM(dsetname), AttrExists=Attr_Exists) + ! IF (Attr_Exists) THEN + ! CALL ReadAttribute(file_id_specdb,'alphaVSS',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%alphaVSS) + ! ELSE + SpecDSMC(iSpec)%alphaVSS = 1.0 + !END IF LBWRITE (UNIT_stdOut,*) 'alphaVSS: ', SpecDSMC(iSpec)%alphaVSS + ! check for faulty parameters + IF((Species(iSpec)%InterID * SpecDSMC(iSpec)%Tref * SpecDSMC(iSpec)%dref * SpecDSMC(iSpec)%alphaVSS) .EQ. 0) THEN + CALL Abort(__STAMP__,'ERROR in species data: check collision parameters in ini \n'//& + 'Part-Species'//TRIM(hilf)//'-(InterID * Tref * dref * alphaVSS) .EQ. 0 - but must not be 0') + END IF ! (Tref * dref * alphaVSS) .EQ. 0 + IF ((SpecDSMC(iSpec)%alphaVSS.LT.0.0) .OR. (SpecDSMC(iSpec)%alphaVSS.GT.2.0)) THEN + CALL Abort(__STAMP__,'ERROR: Check set parameter Part-Species'//TRIM(hilf)//'-alphaVSS must not be lower 0 or greater 2') + END IF ! alphaVSS parameter check END IF END IF ! averagedCollisionParameters diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 1490f6553..7371bc63c 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -1515,7 +1515,7 @@ SUBROUTINE InitializeSpeciesParameter() USE MOD_ReadInTools USE MOD_Particle_Vars USE MOD_io_hdf5 -USE MOD_HDF5_input, ONLY:ReadAttribute, DatasetExists +USE MOD_HDF5_input, ONLY:ReadAttribute, DatasetExists, AttributeExists USE MOD_DSMC_Vars ,ONLY: SpecDSMC #if USE_MPI USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance @@ -1531,14 +1531,13 @@ SUBROUTINE InitializeSpeciesParameter() INTEGER :: iSpec,err CHARACTER(32) :: hilf, hilf2 CHARACTER(LEN=64) :: dsetname -CHARACTER(LEN=64) :: attrname +CHARACTER(LEN=64) :: AttribName INTEGER(HID_T) :: file_id_specdb ! File identifier INTEGER(HID_T) :: dset_id_specdb ! Dataset identifier LOGICAL :: DataSetFound -LOGICAL :: AttrExists +LOGICAL :: Attr_Exists +INTEGER(HID_T) :: Loc_ID, Attr_ID !=================================================================================================================================== -AttrExists = .TRUE. - ! Read-in of the species database SpeciesDatabase = GETSTR('Particles-Species-Database') @@ -1574,25 +1573,18 @@ SUBROUTINE InitializeSpeciesParameter() LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) - ! CALL DatasetExists(file_id_specdb,TRIM(TRIM(dsetname)//'/ChargeIC'),DataSetFound,attrib=.TRUE.) - ! print*, '********************', DataSetFound - ! IF(DatasetFound) THEN - - ! END IF - - - CALL DatasetExists(file_id_specdb,TRIM(dsetname),DataSetFound) IF(.NOT.DataSetFound)THEN Species(iSpec)%DoOverwriteParameters = .TRUE. SWRITE(*,*) 'WARNING: DataSet not found: ['//TRIM(dsetname)//'] ['//TRIM(SpeciesDatabase)//']' ELSE - ! attrname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name//'/ChargeIC')) - attrname = TRIM('ChargeIC') - !CALL DatasetExists(file_id_specdb,'ChargeIC',AttrExists,attrib=.TRUE.) - ! CALL H5AEXISTS_BY_NAME_F(file_id_specdb,'/Species/H2/ChargeIC',AttrExists,iError) - ! print*, 'Attribute exists ', TRIM(attrname), AttrExists - CALL ReadAttribute(file_id_specdb,'ChargeIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%ChargeIC) + + CALL AttributeExists(file_id_specdb,'ChargeIC',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'ChargeIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%ChargeIC) + ELSE + Species(iSpec)%ChargeIC = 0.0 + END IF LBWRITE (UNIT_stdOut,*) 'ChargeIC: ', Species(iSpec)%ChargeIC CALL ReadAttribute(file_id_specdb,'MassIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%MassIC) LBWRITE (UNIT_stdOut,*) 'MassIC: ', Species(iSpec)%MassIC From 9f3d3485fb5f84ad5c8d6db85737958d0a1f7dbf Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Wed, 19 Oct 2022 10:34:37 +0200 Subject: [PATCH 028/222] fix bug in indices --- src/particles/particle_init.f90 | 1 + 1 file changed, 1 insertion(+) diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 7371bc63c..3a7520cd6 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -1552,6 +1552,7 @@ SUBROUTINE InitializeSpeciesParameter() END DO ! iSpec DO iSpec = 1, nSpecies + WRITE(UNIT=hilf,FMT='(I0)') iSpec Species(iSpec)%DoOverwriteParameters = GETLOGICAL('Part-Species'//TRIM(hilf)//'-DoOverwriteParameters') IF(SpeciesDatabase.EQ.'none') THEN Species(iSpec)%DoOverwriteParameters = .TRUE. From f5e33b3b7763b66f5f8036d7fc2f95f580252833 Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Wed, 19 Oct 2022 11:04:11 +0200 Subject: [PATCH 029/222] electronic database --- src/particles/dsmc/dsmc_electronic_model.f90 | 23 ++++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/particles/dsmc/dsmc_electronic_model.f90 b/src/particles/dsmc/dsmc_electronic_model.f90 index d8692232e..afa72fce3 100644 --- a/src/particles/dsmc/dsmc_electronic_model.f90 +++ b/src/particles/dsmc/dsmc_electronic_model.f90 @@ -1190,7 +1190,7 @@ SUBROUTINE ReadSpeciesLevel ( Dsetname, iSpec ) USE MOD_DSMC_Vars ,ONLY: DSMC, SpecDSMC USE MOD_HDF5_Input ,ONLY: DatasetExists USE MOD_part_tools ,ONLY: CalcXiElec -USE MOD_Particle_Vars ,ONLY: Species +USE MOD_Particle_Vars ,ONLY: Species, SpeciesDatabase #if USE_LOADBALANCE USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance #endif /*USE_LOADBALANCE*/ @@ -1207,6 +1207,8 @@ SUBROUTINE ReadSpeciesLevel ( Dsetname, iSpec ) ! LOCAL VARIABLES INTEGER :: err ! HDF5 specifier taken from extractParticles +CHARACTER(LEN=256) :: ElLevelDatabase +CHARACTER(LEN=64) :: datasetname INTEGER(HSIZE_T), DIMENSION(2) :: dims,sizeMax INTEGER(HID_T) :: file_id_dsmc ! File identifier INTEGER(HID_T) :: dset_id_dsmc ! Dataset identifier @@ -1218,19 +1220,26 @@ SUBROUTINE ReadSpeciesLevel ( Dsetname, iSpec ) REAL :: XiMean, XiMeanMax LOGICAL :: DataSetFound !=================================================================================================================================== -LBWRITE(UNIT_StdOut,'(A)') 'Read electronic level entries '//TRIM(dsetname)//' from '//TRIM(DSMC%ElectronicModelDatabase) +IF (Species(iSpec)%DoOverwriteParameters) THEN + datasetname = dsetname + ElLevelDatabase = TRIM(DSMC%ElectronicModelDatabase) +ELSE + datasetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + ElLevelDatabase = TRIM(SpeciesDatabase) +END IF +LBWRITE(UNIT_StdOut,'(A)') 'Read electronic level entries '//TRIM(datasetname)//' from '//TRIM(ElLevelDatabase) ! Initialize FORTRAN interface. CALL H5OPEN_F(err) ! Open the file. -CALL H5FOPEN_F (TRIM(DSMC%ElectronicModelDatabase), H5F_ACC_RDONLY_F, file_id_dsmc, err) -CALL DatasetExists(File_ID_DSMC,TRIM(dsetname),DataSetFound) +CALL H5FOPEN_F (TRIM(ElLevelDatabase), H5F_ACC_RDONLY_F, file_id_dsmc, err) +CALL DatasetExists(File_ID_DSMC,TRIM(datasetname),DataSetFound) IF(.NOT.DataSetFound)THEN CALL abort(& __STAMP__& - ,'DataSet not found: ['//TRIM(dsetname)//'] ['//TRIM(DSMC%ElectronicModelDatabase)//']') + ,'DataSet not found: ['//TRIM(datasetname)//'] ['//TRIM(ElLevelDatabase)//']') END IF ! Open the dataset. -CALL H5DOPEN_F(file_id_dsmc, dsetname, dset_id_dsmc, err) +CALL H5DOPEN_F(file_id_dsmc, datasetname, dset_id_dsmc, err) ! Get the file space of the dataset. CALL H5DGET_SPACE_F(dset_id_dsmc, FileSpace, err) ! get size @@ -1279,7 +1288,7 @@ SUBROUTINE ReadSpeciesLevel ( Dsetname, iSpec ) SpecDSMC(iSpec)%ElectronicState( 1:2, 0) = ElectronicState(1:2,0) SpecDSMC(iSpec)%ElectronicState( 1:2, nQuants) = ElectronicState(1:2,dims(2)-1) SpecDSMC(iSpec)%MaxElecQuant = SIZE( SpecDSMC(iSpec)%ElectronicState,2) - LBWRITE(UNIT_StdOut,'(A,I5,A,I5,A,A,A)') 'Merged ',dims(2),' Electronic States to ',nQuants, ' for ',TRIM(dsetname),& + LBWRITE(UNIT_StdOut,'(A,I5,A,I5,A,A,A)') 'Merged ',dims(2),' Electronic States to ',nQuants, ' for ',TRIM(datasetname),& ' (+1 for the ground state)' END IF ! Close the file. From ad8b3147cf50e6dd2c6ebd553e04c39d79be62ce Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Wed, 19 Oct 2022 12:05:11 +0200 Subject: [PATCH 030/222] cross-section data --- src/particles/mcc/mcc_init.f90 | 6 +- src/particles/mcc/mcc_xsec.f90 | 158 +++++++++++++++++++++++++++------ 2 files changed, 137 insertions(+), 27 deletions(-) diff --git a/src/particles/mcc/mcc_init.f90 b/src/particles/mcc/mcc_init.f90 index e7e91c971..5bf866449 100644 --- a/src/particles/mcc/mcc_init.f90 +++ b/src/particles/mcc/mcc_init.f90 @@ -71,7 +71,7 @@ SUBROUTINE InitMCC() USE MOD_Globals USE MOD_ReadInTools USE MOD_Globals_Vars ,ONLY: ElementaryCharge -USE MOD_PARTICLE_Vars ,ONLY: nSpecies, Species +USE MOD_PARTICLE_Vars ,ONLY: nSpecies, Species, SpeciesDatabase USE MOD_Mesh_Vars ,ONLY: nElems USE MOD_DSMC_Vars ,ONLY: BGGas, SpecDSMC, CollInf, DSMC, ChemReac, CollisMode USE MOD_MCC_Vars ,ONLY: UseMCC, XSec_Database, SpecXSec, XSec_NullCollision, XSec_Relaxation @@ -144,7 +144,9 @@ SUBROUTINE InitMCC() ! Initialize & read-in of cross-section data !----------------------------------------------------------------------------------------------------------------------------------- ! Read-in of the cross-section database -XSec_Database = GETSTR('Particles-CollXSec-Database') +IF (SpeciesDatabase.EQ.'none') THEN + XSec_Database = GETSTR('Particles-CollXSec-Database') +END IF ! Null collision method only works with a background gas IF(BGGas%NumberOfSpecies.GT.0) XSec_NullCollision = GETLOGICAL('Particles-CollXSec-NullCollision') diff --git a/src/particles/mcc/mcc_xsec.f90 b/src/particles/mcc/mcc_xsec.f90 index ba2c39637..a5168bb24 100644 --- a/src/particles/mcc/mcc_xsec.f90 +++ b/src/particles/mcc/mcc_xsec.f90 @@ -37,6 +37,7 @@ SUBROUTINE ReadCollXSec(iCase,iSpec,jSpec) ! use module USE MOD_io_hdf5 USE MOD_Globals +USE MOD_Particle_Vars ,ONLY: SpeciesDatabase USE MOD_DSMC_Vars ,ONLY: SpecDSMC USE MOD_MCC_Vars ,ONLY: XSec_Database, SpecXSec USE MOD_HDF5_Input ,ONLY: DatasetExists @@ -52,7 +53,8 @@ SUBROUTINE ReadCollXSec(iCase,iSpec,jSpec) ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -CHARACTER(LEN=64) :: dsetname, spec_pair +CHARACTER(LEN=64) :: dsetname, spec_pair, spec_pair_exists +CHARACTER(LEN=265) :: XSecDatabaseName INTEGER :: err INTEGER(HSIZE_T), DIMENSION(2) :: dims,sizeMax INTEGER(HID_T) :: file_id_dsmc ! File identifier @@ -68,18 +70,29 @@ SUBROUTINE ReadCollXSec(iCase,iSpec,jSpec) CALL H5OPEN_F(err) ! Check if file exists -IF(.NOT.FILEEXISTS(XSec_Database)) THEN +IF((.NOT.FILEEXISTS(XSec_Database)).AND.(SpeciesDatabase.EQ.'none')) THEN CALL abort(__STAMP__,'ERROR: Database ['//TRIM(XSec_Database)//'] does not exist.') END IF +IF(SpeciesDatabase.EQ.'none') THEN + XSecDatabaseName = TRIM(XSec_Database) +ELSE + XSecDatabaseName = TRIM(SpeciesDatabase) + spec_pair = TRIM('/Cross-Sections/'//SpecDSMC(jSpec)%Name)//'-'//TRIM(SpecDSMC(iSpec)%Name) +END IF + ! Open the file. -CALL H5FOPEN_F (TRIM(XSec_Database), H5F_ACC_RDONLY_F, file_id_dsmc, err) +CALL H5FOPEN_F (TRIM(XSecDatabaseName), H5F_ACC_RDONLY_F, file_id_dsmc, err) ! Check if the species pair group exists CALL H5LEXISTS_F(file_id_dsmc, TRIM(spec_pair), DatasetFound, err) IF(.NOT.DatasetFound) THEN ! Try to swap the species names - spec_pair = TRIM(SpecDSMC(iSpec)%Name)//'-'//TRIM(SpecDSMC(jSpec)%Name) + IF (SpeciesDatabase.EQ.'none') THEN + spec_pair = TRIM(SpecDSMC(iSpec)%Name)//'-'//TRIM(SpecDSMC(jSpec)%Name) + ELSE + spec_pair = TRIM('Cross-Sections/'//SpecDSMC(iSpec)%Name)//'-'//TRIM(SpecDSMC(jSpec)%Name) + END IF CALL H5LEXISTS_F(file_id_dsmc, TRIM(spec_pair), DatasetFound, err) IF(.NOT.DatasetFound) THEN LBWRITE(UNIT_StdOut,'(A)') TRIM(spec_pair)//': No data set found. Using standard collision modelling.' @@ -87,18 +100,31 @@ SUBROUTINE ReadCollXSec(iCase,iSpec,jSpec) END IF END IF -dsetname = TRIM('/'//TRIM(spec_pair)//'/EFFECTIVE') +IF (SpeciesDatabase.EQ.'none') THEN + dsetname = TRIM('/'//TRIM(spec_pair)//'/EFFECTIVE') +ELSE + dsetname = TRIM(TRIM(spec_pair)//'/EFFECTIVE') +END IF CALL DatasetExists(File_ID_DSMC,TRIM(dsetname),DatasetFound) IF(DatasetFound) THEN SpecXSec(iCase)%UseCollXSec = .TRUE. SpecXSec(iCase)%CollXSec_Effective = .TRUE. - CALL DatasetExists(File_ID_DSMC,TRIM('/'//TRIM(spec_pair)//'/ELASTIC'),DatasetFound) + IF (SpeciesDatabase.EQ.'none') THEN + CALL DatasetExists(File_ID_DSMC,TRIM('/'//TRIM(spec_pair)//'/ELASTIC'),DatasetFound) + ELSE + CALL DatasetExists(File_ID_DSMC,TRIM(TRIM(spec_pair)//'/ELASTIC'),DatasetFound) + END IF IF(DatasetFound) CALL abort(__STAMP__,'ERROR: Please provide either elastic or effective collision cross-section data '//& & 'for '//TRIM(spec_pair)//'.') LBWRITE(UNIT_StdOut,'(A)') TRIM(spec_pair)//': Found EFFECTIVE collision cross section.' ELSE - dsetname = TRIM('/'//TRIM(spec_pair)//'/ELASTIC') + + IF (SpeciesDatabase.EQ.'none') THEN + dsetname = TRIM('/'//TRIM(spec_pair)//'/ELASTIC') + ELSE + dsetname = TRIM(TRIM(spec_pair)//'/ELASTIC') + END IF CALL DatasetExists(File_ID_DSMC,TRIM(dsetname),DatasetFound) IF(DatasetFound) THEN SpecXSec(iCase)%UseCollXSec = .TRUE. @@ -140,6 +166,7 @@ SUBROUTINE ReadVibXSec(iCase,iSpec,jSpec) ! use module USE MOD_io_hdf5 USE MOD_Globals +USE MOD_Particle_Vars ,ONLY: SpeciesDatabase USE MOD_DSMC_Vars ,ONLY: SpecDSMC USE MOD_MCC_Vars ,ONLY: XSec_Database, SpecXSec USE MOD_HDF5_Input ,ONLY: DatasetExists @@ -156,6 +183,7 @@ SUBROUTINE ReadVibXSec(iCase,iSpec,jSpec) !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES CHARACTER(LEN=64) :: dsetname, spec_pair, groupname +CHARACTER(LEN=265) :: XSecDatabaseName INTEGER :: err INTEGER(HSIZE_T), DIMENSION(2) :: dims,sizeMax INTEGER(HID_T) :: file_id_dsmc ! File identifier @@ -172,16 +200,23 @@ SUBROUTINE ReadVibXSec(iCase,iSpec,jSpec) GroupFound = .FALSE. SpecXSec(iCase)%UseVibXSec = .FALSE. +IF(SpeciesDatabase.EQ.'none') THEN + XSecDatabaseName = TRIM(XSec_Database) +ELSE + XSecDatabaseName = TRIM(SpeciesDatabase) + spec_pair = TRIM('/Cross-Sections/'//SpecDSMC(jSpec)%Name)//'-'//TRIM(SpecDSMC(iSpec)%Name) +END IF + ! Initialize FORTRAN interface. CALL H5OPEN_F(err) ! Check if file exists -IF(.NOT.FILEEXISTS(XSec_Database)) THEN +IF(.NOT.FILEEXISTS(XSecDatabaseName)) THEN CALL abort(__STAMP__,'ERROR: Database '//TRIM(XSec_Database)//' does not exist.') END IF ! Open the file. -CALL H5FOPEN_F (TRIM(XSec_Database), H5F_ACC_RDONLY_F, file_id_dsmc, err) +CALL H5FOPEN_F (TRIM(XSecDatabaseName), H5F_ACC_RDONLY_F, file_id_dsmc, err) ! Check if the species pair group exists CALL H5LEXISTS_F(file_id_dsmc, TRIM(spec_pair), GroupFound, err) @@ -254,6 +289,7 @@ SUBROUTINE ReadElecXSec(iCase,iSpec,jSpec) ! use module USE MOD_io_hdf5 USE MOD_Globals +USE MOD_Particle_Vars ,ONLY: SpeciesDatabase USE MOD_DSMC_Vars ,ONLY: SpecDSMC USE MOD_MCC_Vars ,ONLY: XSec_Database, SpecXSec USE MOD_HDF5_Input ,ONLY: DatasetExists @@ -270,6 +306,7 @@ SUBROUTINE ReadElecXSec(iCase,iSpec,jSpec) !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES CHARACTER(LEN=64) :: dsetname, spec_pair, groupname +CHARACTER(LEN=265) :: XSecDatabaseName INTEGER :: err INTEGER(HSIZE_T), DIMENSION(2) :: dims,sizeMax INTEGER(HID_T) :: file_id_dsmc ! File identifier @@ -286,22 +323,33 @@ SUBROUTINE ReadElecXSec(iCase,iSpec,jSpec) GroupFound = .FALSE. SpecXSec(iCase)%UseElecXSec = .FALSE. +IF(SpeciesDatabase.EQ.'none') THEN + XSecDatabaseName = TRIM(XSec_Database) +ELSE + XSecDatabaseName = TRIM(SpeciesDatabase) + spec_pair = TRIM('/Cross-Sections/'//SpecDSMC(jSpec)%Name)//'-'//TRIM(SpecDSMC(iSpec)%Name) +END IF + ! Initialize FORTRAN interface. CALL H5OPEN_F(err) ! Check if file exists -IF(.NOT.FILEEXISTS(XSec_Database)) THEN - CALL abort(__STAMP__,'ERROR: Database '//TRIM(XSec_Database)//' does not exist.') +IF(.NOT.FILEEXISTS(XSecDatabaseName)) THEN + CALL abort(__STAMP__,'ERROR: Database '//TRIM(XSecDatabaseName)//' does not exist.') END IF ! Open the file. -CALL H5FOPEN_F (TRIM(XSec_Database), H5F_ACC_RDONLY_F, file_id_dsmc, err) +CALL H5FOPEN_F (TRIM(XSecDatabaseName), H5F_ACC_RDONLY_F, file_id_dsmc, err) ! Check if the species pair group exists CALL H5LEXISTS_F(file_id_dsmc, TRIM(spec_pair), GroupFound, err) IF(.NOT.GroupFound) THEN ! Try to swap the species names - spec_pair = TRIM(SpecDSMC(iSpec)%Name)//'-'//TRIM(SpecDSMC(jSpec)%Name) + IF (SpeciesDatabase.EQ.'none') THEN + spec_pair = TRIM(SpecDSMC(iSpec)%Name)//'-'//TRIM(SpecDSMC(jSpec)%Name) + ELSE + spec_pair = TRIM('/Cross-Sections/'//SpecDSMC(iSpec)%Name)//'-'//TRIM(SpecDSMC(jSpec)%Name) + END IF CALL H5LEXISTS_F(file_id_dsmc, TRIM(spec_pair), GroupFound, err) IF(.NOT.GroupFound) THEN LBWRITE(UNIT_StdOut,'(A)') TRIM(spec_pair)//': No electronic excitation cross sections found, using constant read-in values.' @@ -998,6 +1046,7 @@ SUBROUTINE ReadReacXSec(iCase,iPath) ! use module USE MOD_io_hdf5 USE MOD_Globals +USE MOD_Particle_Vars ,ONLY: SpeciesDatabase USE MOD_Globals_Vars ,ONLY: ElementaryCharge,Joule2eV USE MOD_DSMC_Vars ,ONLY: SpecDSMC, ChemReac USE MOD_MCC_Vars ,ONLY: XSec_Database, SpecXSec @@ -1015,6 +1064,7 @@ SUBROUTINE ReadReacXSec(iCase,iPath) !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES CHARACTER(LEN=128) :: dsetname, groupname, EductPair, dsetname2, ProductPair +CHARACTER(LEN=265) :: XSecDatabaseName INTEGER :: err INTEGER(HSIZE_T), DIMENSION(2) :: dims,sizeMax INTEGER(HID_T) :: file_id_dsmc ! File identifier @@ -1038,21 +1088,35 @@ SUBROUTINE ReadReacXSec(iCase,iPath) EductPair = TRIM(SpecDSMC(EductReac(1))%Name)//'-'//TRIM(SpecDSMC(EductReac(2))%Name) +IF(SpeciesDatabase.EQ.'none') THEN + XSecDatabaseName = TRIM(XSec_Database) +ELSE + XSecDatabaseName = TRIM(SpeciesDatabase) +END IF + ! Initialize FORTRAN interface. CALL H5OPEN_F(err) ! Open the file. -CALL H5FOPEN_F (TRIM(XSec_Database), H5F_ACC_RDONLY_F, file_id_dsmc, err) +CALL H5FOPEN_F (TRIM(XSecDatabaseName), H5F_ACC_RDONLY_F, file_id_dsmc, err) ! Check if the species pair group exists CALL H5LEXISTS_F(file_id_dsmc, TRIM(EductPair), GroupFound, err) IF(.NOT.GroupFound) THEN ! Try to swap the species names - EductPair = TRIM(SpecDSMC(EductReac(2))%Name)//'-'//TRIM(SpecDSMC(EductReac(1))%Name) + IF (SpeciesDatabase.EQ.'none') THEN + EductPair = TRIM(SpecDSMC(EductReac(2))%Name)//'-'//TRIM(SpecDSMC(EductReac(1))%Name) + ELSE + EductPair = TRIM('/Cross-Sections/'//SpecDSMC(EductReac(2))%Name)//'-'//TRIM(SpecDSMC(EductReac(1))%Name) + END IF CALL H5LEXISTS_F(file_id_dsmc, TRIM(EductPair), GroupFound, err) IF(.NOT.GroupFound) CALL abort(__STAMP__,'No reaction cross sections found in database for reaction number:',IntInfoOpt=iReac) END IF -groupname = TRIM('/'//TRIM(EductPair)//'/REACTION/') +IF (SpeciesDatabase.EQ.'none') THEN + groupname = TRIM('/'//TRIM(EductPair)//'/REACTION/') +ELSE + groupname = TRIM(TRIM(EductPair)//'/REACTION/') +END IF CALL H5LEXISTS_F(file_id_dsmc, groupname, GroupFound, err) IF(.NOT.GroupFound) CALL abort(__STAMP__,'No reaction cross sections found in database for reaction number:',IntInfoOpt=iReac) @@ -1060,10 +1124,11 @@ SUBROUTINE ReadReacXSec(iCase,iPath) CALL H5Gget_info_f(group_id, storage, nSets,max_corder, err) IF(nSets.EQ.0) CALL abort(__STAMP__,'No reaction cross sections found in database for reaction number:',IntInfoOpt=iReac) -LBWRITE(UNIT_StdOut,'(A,I0)') 'Read cross section for '//TRIM(EductPair)//' from '//TRIM(XSec_Database)//' for reaction # ', iReac +LBWRITE(UNIT_StdOut,'(A,I0)') 'Read cross section for '//TRIM(EductPair)//' from '//TRIM(XSecDatabaseName)//' for reaction # ', iReac SELECT CASE(COUNT(ProductReac.GT.0)) CASE(2) + ProductPair = TRIM(SpecDSMC(ProductReac(1))%Name)//'-'//TRIM(SpecDSMC(ProductReac(2))%Name) CASE(3) ProductPair = TRIM(SpecDSMC(ProductReac(1))%Name)//'-'//TRIM(SpecDSMC(ProductReac(2))%Name)//& @@ -1075,6 +1140,10 @@ SUBROUTINE ReadReacXSec(iCase,iPath) CALL abort(__STAMP__,'Number of products is not supported yet! Reaction number:', IntInfoOpt=iReac) END SELECT +IF (SpeciesDatabase.NE.'none') THEN + groupname = TRIM('/Cross-Sections/'//TRIM(ProductPair)) +END IF + ReactionFound = .FALSE. DO iSet = 0, nSets-1 @@ -1150,6 +1219,7 @@ SUBROUTINE ReadReacPhotonXSec(iPhotoReac) USE MOD_io_hdf5 USE MOD_Globals USE MOD_Globals_Vars ,ONLY: ElementaryCharge +USE MOD_Particle_Vars ,ONLY: SpeciesDatabase USE MOD_DSMC_Vars ,ONLY: SpecDSMC, ChemReac USE MOD_HDF5_Input ,ONLY: DatasetExists USE MOD_MCC_Vars ,ONLY: XSec_Database,SpecPhotonXSec,PhotoReacToReac @@ -1166,6 +1236,7 @@ SUBROUTINE ReadReacPhotonXSec(iPhotoReac) !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES CHARACTER(LEN=128) :: dsetname, groupname, EductPair, dsetname2, ProductPair +CHARACTER(LEN=265) :: XSecDatabaseName INTEGER :: err INTEGER(HSIZE_T), DIMENSION(2) :: dims,sizeMax INTEGER(HID_T) :: file_id_dsmc ! File identifier @@ -1187,21 +1258,36 @@ SUBROUTINE ReadReacPhotonXSec(iPhotoReac) GroupFound = .FALSE. +IF(SpeciesDatabase.EQ.'none') THEN + XSecDatabaseName = TRIM(XSec_Database) +ELSE + XSecDatabaseName = TRIM(SpeciesDatabase) + EductPair = TRIM('Cross-Sections/'//SpecDSMC(ChemReac%Reactants(iReac,1))%Name)//'-photon' +END IF + ! Initialize FORTRAN interface. CALL H5OPEN_F(err) ! Open the file. -CALL H5FOPEN_F (TRIM(XSec_Database), H5F_ACC_RDONLY_F, file_id_dsmc, err) +CALL H5FOPEN_F (TRIM(XSecDatabaseName), H5F_ACC_RDONLY_F, file_id_dsmc, err) ! Check if the species pair group exists CALL H5LEXISTS_F(file_id_dsmc, TRIM(EductPair), GroupFound, err) IF(.NOT.GroupFound) THEN ! Try to swap the species names - EductPair = 'photon-'//TRIM(SpecDSMC(ChemReac%Reactants(iReac,1))%Name) + IF (SpeciesDatabase.EQ.'none') THEN + EductPair = 'photon-'//TRIM(SpecDSMC(ChemReac%Reactants(iReac,1))%Name) + ELSE + EductPair = '/Cross-Sections/photon-'//TRIM(SpecDSMC(ChemReac%Reactants(iReac,1))%Name) + END IF CALL H5LEXISTS_F(file_id_dsmc, TRIM(EductPair), GroupFound, err) IF(.NOT.GroupFound) CALL abort(__STAMP__,'No reaction cross sections found in database for reaction number:',IntInfoOpt=iReac) END IF -groupname = TRIM('/'//TRIM(EductPair)//'/REACTION/') +IF (SpeciesDatabase.EQ.'none') THEN + groupname = TRIM('/'//TRIM(EductPair)//'/REACTION/') +ELSE + groupname = TRIM(TRIM(EductPair)//'/REACTION/') +END IF CALL H5LEXISTS_F(file_id_dsmc, groupname, GroupFound, err) IF(.NOT.GroupFound) CALL abort(__STAMP__,'No reaction cross sections found in database for reaction number:',IntInfoOpt=iReac) @@ -1209,7 +1295,7 @@ SUBROUTINE ReadReacPhotonXSec(iPhotoReac) CALL H5Gget_info_f(group_id, storage, nSets,max_corder, err) IF(nSets.EQ.0) CALL abort(__STAMP__,'No reaction cross sections found in database for reaction number:',IntInfoOpt=iReac) -LBWRITE(UNIT_StdOut,'(A,I0)') 'Read cross section for '//TRIM(EductPair)//' from '//TRIM(XSec_Database)//' for reaction # ', iReac +LBWRITE(UNIT_StdOut,'(A,I0)') 'Read cross section for '//TRIM(EductPair)//' from '//TRIM(XSecDatabaseName)//' for reaction # ', iReac SELECT CASE(COUNT(ProductReac.GT.0)) CASE(2) @@ -1224,6 +1310,10 @@ SUBROUTINE ReadReacPhotonXSec(iPhotoReac) CALL abort(__STAMP__,'Number of products is not supported yet! Reaction number:', IntInfoOpt=iReac) END SELECT +IF (SpeciesDatabase.NE.'none') THEN + groupname = TRIM('/Cross-Sections/'//TRIM(ProductPair)) +END IF + ReactionFound = .FALSE. DO iSet = 0, nSets-1 @@ -1270,6 +1360,7 @@ SUBROUTINE ReadReacPhotonSpectrum(iPhotoReac) ! use module USE MOD_io_hdf5 USE MOD_Globals +USE MOD_Particle_Vars ,ONLY: SpeciesDatabase USE MOD_Globals_Vars ,ONLY: ElementaryCharge USE MOD_DSMC_Vars ,ONLY: SpecDSMC, ChemReac USE MOD_MCC_Vars ,ONLY: XSec_Database, PhotoReacToReac, PhotonSpectrum @@ -1287,6 +1378,7 @@ SUBROUTINE ReadReacPhotonSpectrum(iPhotoReac) !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES CHARACTER(LEN=128) :: dsetname, groupname, EductPair, dsetname2, ProductPair +CHARACTER(LEN=265) :: XSecDatabaseName INTEGER :: err INTEGER(HSIZE_T), DIMENSION(2) :: dims,sizeMax INTEGER(HID_T) :: file_id_dsmc ! File identifier @@ -1308,21 +1400,37 @@ SUBROUTINE ReadReacPhotonSpectrum(iPhotoReac) GroupFound = .FALSE. +IF(SpeciesDatabase.EQ.'none') THEN + XSecDatabaseName = TRIM(XSec_Database) +ELSE + XSecDatabaseName = TRIM(SpeciesDatabase) + EductPair = TRIM('/Cross-Sections/'//SpecDSMC(ChemReac%Reactants(iReac,1))%Name)//'-photon' +ProductPair = EductPair +END IF + ! Initialize FORTRAN interface. CALL H5OPEN_F(err) ! Open the file. -CALL H5FOPEN_F (TRIM(XSec_Database), H5F_ACC_RDONLY_F, file_id_dsmc, err) +CALL H5FOPEN_F (TRIM(XSecDatabaseName), H5F_ACC_RDONLY_F, file_id_dsmc, err) ! Check if the species pair group exists CALL H5LEXISTS_F(file_id_dsmc, TRIM(EductPair), GroupFound, err) IF(.NOT.GroupFound) THEN ! Try to swap the species names - EductPair = 'photon-'//TRIM(SpecDSMC(ChemReac%Reactants(iReac,1))%Name) + IF (SpeciesDatabase.NE.'none') THEN + EductPair = 'photon-'//TRIM(SpecDSMC(ChemReac%Reactants(iReac,1))%Name) + ELSE + EductPair = '/Cross-Sections/photon-'//TRIM(SpecDSMC(ChemReac%Reactants(iReac,1))%Name) + END IF CALL H5LEXISTS_F(file_id_dsmc, TRIM(EductPair), GroupFound, err) IF(.NOT.GroupFound) CALL abort(__STAMP__,'No reaction cross sections found in database for reaction number:',IntInfoOpt=iReac) END IF -groupname = TRIM('/'//TRIM(EductPair)//'/SPECTRUM/') +IF (SpeciesDatabase.NE.'none') THEN + groupname = TRIM('/'//TRIM(EductPair)//'/SPECTRUM/') + ELSE + groupname = TRIM(TRIM(EductPair)//'/SPECTRUM/') + END IF CALL H5LEXISTS_F(file_id_dsmc, groupname, GroupFound, err) IF(.NOT.GroupFound) CALL abort(__STAMP__,'No reaction cross sections found in database for reaction number:',IntInfoOpt=iReac) @@ -1330,7 +1438,7 @@ SUBROUTINE ReadReacPhotonSpectrum(iPhotoReac) CALL H5Gget_info_f(group_id, storage, nSets,max_corder, err) IF(nSets.EQ.0) CALL abort(__STAMP__,'No reaction cross sections found in database for reaction number:',IntInfoOpt=iReac) -LBWRITE(UNIT_StdOut,'(A)') 'Read photon energy spectrum for '//TRIM(EductPair)//' from '//TRIM(XSec_Database) +LBWRITE(UNIT_StdOut,'(A)') 'Read photon energy spectrum for '//TRIM(EductPair)//' from '//TRIM(XSecDatabaseName) ReactionFound = .FALSE. From 5957694f0dafb980f81fcafb06351247969c521c Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Wed, 19 Oct 2022 12:10:07 +0200 Subject: [PATCH 031/222] further read-ins of database --- src/particles/dsmc/dsmc_init.f90 | 460 +++++++++++++++++++++---------- 1 file changed, 312 insertions(+), 148 deletions(-) diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index 549012142..613d70df0 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -287,7 +287,7 @@ SUBROUTINE InitDSMC() USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD USE MOD_DSMC_BGGas ,ONLY: BGGas_RegionsSetInternalTemp USE MOD_io_hdf5 -USE MOD_HDF5_input ,ONLY:ReadAttribute, DatasetExists, AttributeExists +USE MOD_HDF5_input ,ONLY: ReadAttribute, DatasetExists, AttributeExists #if USE_LOADBALANCE USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance #endif /*USE_LOADBALANCE*/ @@ -420,51 +420,30 @@ SUBROUTINE InitDSMC() IF(CollInf%averagedCollisionParameters) THEN LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) - print*, 'DatasetName', dsetname, file_id_specdb - IF(Species(iSpec)%DoOverwriteParameters) THEN - SpecDSMC(iSpec)%Tref = GETREAL('Part-Species'//TRIM(hilf)//'-Tref' ) - SpecDSMC(iSpec)%dref = GETREAL('Part-Species'//TRIM(hilf)//'-dref' ) - SpecDSMC(iSpec)%omega = GETREAL('Part-Species'//TRIM(hilf)//'-omega' ) - SpecDSMC(iSpec)%alphaVSS = GETREAL('Part-Species'//TRIM(hilf)//'-alphaVSS' ) - ! check for faulty parameters - IF((Species(iSpec)%InterID * SpecDSMC(iSpec)%Tref * SpecDSMC(iSpec)%dref * SpecDSMC(iSpec)%alphaVSS) .EQ. 0) THEN - CALL Abort(__STAMP__,'ERROR in species data: check collision parameters in ini \n'//& - 'Part-Species'//TRIM(hilf)//'-(InterID * Tref * dref * alphaVSS) .EQ. 0 - but must not be 0') - END IF ! (Tref * dref * alphaVSS) .EQ. 0 - IF ((SpecDSMC(iSpec)%alphaVSS.LT.0.0) .OR. (SpecDSMC(iSpec)%alphaVSS.GT.2.0)) THEN - CALL Abort(__STAMP__,'ERROR: Check set parameter Part-Species'//TRIM(hilf)//'-alphaVSS must not be lower 0 or greater 2') - END IF ! alphaVSS parameter check - ELSE - CALL ReadAttribute(file_id_specdb,'Tref',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%Tref) - LBWRITE (UNIT_stdOut,*) 'Tref: ', SpecDSMC(iSpec)%Tref, iSpec, dsetname, file_id_specdb - CALL ReadAttribute(file_id_specdb,'dref',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%dref) - LBWRITE (UNIT_stdOut,*) 'dref: ', SpecDSMC(iSpec)%dref - CALL ReadAttribute(file_id_specdb,'omega',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%omega) - LBWRITE (UNIT_stdOut,*) 'omega: ', SpecDSMC(iSpec)%omega - ! CALL AttributeExists(file_id_specdb,'alphaVSS',TRIM(dsetname), AttrExists=Attr_Exists) - ! IF (Attr_Exists) THEN - ! CALL ReadAttribute(file_id_specdb,'alphaVSS',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%alphaVSS) - ! ELSE - SpecDSMC(iSpec)%alphaVSS = 1.0 - !END IF - LBWRITE (UNIT_stdOut,*) 'alphaVSS: ', SpecDSMC(iSpec)%alphaVSS - ! check for faulty parameters - IF((Species(iSpec)%InterID * SpecDSMC(iSpec)%Tref * SpecDSMC(iSpec)%dref * SpecDSMC(iSpec)%alphaVSS) .EQ. 0) THEN - CALL Abort(__STAMP__,'ERROR in species data: check collision parameters in ini \n'//& - 'Part-Species'//TRIM(hilf)//'-(InterID * Tref * dref * alphaVSS) .EQ. 0 - but must not be 0') - END IF ! (Tref * dref * alphaVSS) .EQ. 0 - IF ((SpecDSMC(iSpec)%alphaVSS.LT.0.0) .OR. (SpecDSMC(iSpec)%alphaVSS.GT.2.0)) THEN - CALL Abort(__STAMP__,'ERROR: Check set parameter Part-Species'//TRIM(hilf)//'-alphaVSS must not be lower 0 or greater 2') - END IF ! alphaVSS parameter check + CALL ReadAttribute(file_id_specdb,'Tref',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%Tref) + LBWRITE (UNIT_stdOut,*) 'Tref: ', SpecDSMC(iSpec)%Tref + CALL ReadAttribute(file_id_specdb,'dref',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%dref) + LBWRITE (UNIT_stdOut,*) 'dref: ', SpecDSMC(iSpec)%dref + CALL ReadAttribute(file_id_specdb,'omega',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%omega) + LBWRITE (UNIT_stdOut,*) 'omega: ', SpecDSMC(iSpec)%omega + CALL AttributeExists(file_id_specdb,'alphaVSS',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'alphaVSS',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%alphaVSS) + ELSE + SpecDSMC(iSpec)%alphaVSS = 1.0 END IF + LBWRITE (UNIT_stdOut,*) 'alphaVSS: ', SpecDSMC(iSpec)%alphaVSS + ! check for faulty parameters + IF((Species(iSpec)%InterID * SpecDSMC(iSpec)%Tref * SpecDSMC(iSpec)%dref * SpecDSMC(iSpec)%alphaVSS) .EQ. 0) THEN + CALL Abort(__STAMP__,'ERROR in species data: check collision parameters in ini \n'//& + 'Part-Species'//TRIM(hilf)//'-(InterID * Tref * dref * alphaVSS) .EQ. 0 - but must not be 0') + END IF ! (Tref * dref * alphaVSS) .EQ. 0 + IF ((SpecDSMC(iSpec)%alphaVSS.LT.0.0) .OR. (SpecDSMC(iSpec)%alphaVSS.GT.2.0)) THEN + CALL Abort(__STAMP__,'ERROR: Check set parameter Part-Species'//TRIM(hilf)//'-alphaVSS must not be lower 0 or greater 2') + END IF ! alphaVSS parameter check END IF ! averagedCollisionParameters - SpecDSMC(iSpec)%FullyIonized = GETLOGICAL('Part-Species'//TRIM(hilf)//'-FullyIonized') - ! Save the electron species into a global variable - IF(Species(iSpec)%InterID.EQ.4) DSMC%ElectronSpecies = iSpec - ! reading electronic state informations from HDF5 file - IF((DSMC%ElectronicModelDatabase.NE.'none').AND.(Species(iSpec)%InterID.NE.4)) CALL SetElectronicModel(iSpec) END DO ! iSpec = nSpecies ! Close the file. @@ -474,6 +453,35 @@ SUBROUTINE InitDSMC() END IF !database + IF(ANY(Species(:)%DoOverwriteParameters)) THEN + DO iSpec = 1, nSpecies + IF(Species(iSpec)%DoOverwriteParameters) THEN + LBWRITE (UNIT_stdOut,'(66(". "))') + WRITE(UNIT=hilf,FMT='(I0)') iSpec + SpecDSMC(iSpec)%Tref = GETREAL('Part-Species'//TRIM(hilf)//'-Tref' ) + SpecDSMC(iSpec)%dref = GETREAL('Part-Species'//TRIM(hilf)//'-dref' ) + SpecDSMC(iSpec)%omega = GETREAL('Part-Species'//TRIM(hilf)//'-omega' ) + SpecDSMC(iSpec)%alphaVSS = GETREAL('Part-Species'//TRIM(hilf)//'-alphaVSS' ) + ! check for faulty parameters + IF((Species(iSpec)%InterID * SpecDSMC(iSpec)%Tref * SpecDSMC(iSpec)%dref * SpecDSMC(iSpec)%alphaVSS) .EQ. 0) THEN + CALL Abort(__STAMP__,'ERROR in species data: check collision parameters in ini \n'//& + 'Part-Species'//TRIM(hilf)//'-(InterID * Tref * dref * alphaVSS) .EQ. 0 - but must not be 0') + END IF ! (Tref * dref * alphaVSS) .EQ. 0 + IF ((SpecDSMC(iSpec)%alphaVSS.LT.0.0) .OR. (SpecDSMC(iSpec)%alphaVSS.GT.2.0)) THEN + CALL Abort(__STAMP__,'ERROR: Check set parameter Part-Species'//TRIM(hilf)//'-alphaVSS must not be lower 0 or greater 2') + END IF ! alphaVSS parameter check + END IF + END DO !iSpec + END IF + + DO iSpec=1, nSpecies + SpecDSMC(iSpec)%FullyIonized = GETLOGICAL('Part-Species'//TRIM(hilf)//'-FullyIonized') + ! Save the electron species into a global variable + IF(Species(iSpec)%InterID.EQ.4) DSMC%ElectronSpecies = iSpec + ! reading electronic state informations from HDF5 file + IF((DSMC%ElectronicModelDatabase.NE.'none').AND.(Species(iSpec)%InterID.NE.4)) CALL SetElectronicModel(iSpec) + END DO + ! determine number of different species combinations and allocate collidingSpecies array nCollision=0 DO iColl=1,nSpecies @@ -668,123 +676,279 @@ SUBROUTINE InitDSMC() SpecDSMC(1:nSpecies)%PolyatomicMol=.false. SpecDSMC(1:nSpecies)%SpecToPolyArray = 0 useRelaxProbCorrFactor=GETLOGICAL('Particles-DSMC-useRelaxProbCorrFactor','.FALSE.') - DO iSpec = 1, nSpecies - IF(Species(iSpec)%InterID.NE.4) THEN - WRITE(UNIT=hilf,FMT='(I0)') iSpec - SpecDSMC(iSpec)%PolyatomicMol=GETLOGICAL('Part-Species'//TRIM(hilf)//'-PolyatomicMol','.FALSE.') - IF(SpecDSMC(iSpec)%PolyatomicMol.AND.DSMC%DoTEVRRelaxation) THEN - CALL Abort(& - __STAMP__& - ,'! Simulation of Polyatomic Molecules and T-E-V-R relaxation not possible yet!!!') - END IF - IF(SpecDSMC(iSpec)%PolyatomicMol) THEN - DSMC%NumPolyatomMolecs = DSMC%NumPolyatomMolecs + 1 - SpecDSMC(iSpec)%SpecToPolyArray = DSMC%NumPolyatomMolecs - ELSEIF ((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN - SpecDSMC(iSpec)%Xi_Rot = 2 - SpecDSMC(iSpec)%CharaTVib = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempVib') - SpecDSMC(iSpec)%CharaTRot = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempRot','0') - SpecDSMC(iSpec)%Ediss_eV = GETREAL('Part-Species'//TRIM(hilf)//'-Ediss_eV') - SpecDSMC(iSpec)%MaxVibQuant = 200 - ! Calculation of the zero-point energy - SpecDSMC(iSpec)%EZeroPoint = DSMC%GammaQuant * BoltzmannConst * SpecDSMC(iSpec)%CharaTVib - ! Calculation of the dissociation quantum number (used for QK chemistry) - SpecDSMC(iSpec)%DissQuant = INT(SpecDSMC(iSpec)%Ediss_eV*ElementaryCharge/(BoltzmannConst*SpecDSMC(iSpec)%CharaTVib)) - END IF - ! Read in species values for rotational relaxation models of Boyd/Zhang if necessary - IF(DSMC%RotRelaxProb.GT.1.0.AND.((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) THEN - SpecDSMC(iSpec)%CollNumRotInf = GETREAL('Part-Species'//TRIM(hilf)//'-CollNumRotInf') - SpecDSMC(iSpec)%TempRefRot = GETREAL('Part-Species'//TRIM(hilf)//'-TempRefRot') - IF(SpecDSMC(iSpec)%CollNumRotInf*SpecDSMC(iSpec)%TempRefRot.EQ.0) THEN - CALL Abort(& - __STAMP__& - ,'Error! CollNumRotRef or TempRefRot is equal to zero for species:', iSpec) - END IF - END IF - ! Read in species values for vibrational relaxation models of Milikan-White if necessary - IF(DSMC%VibRelaxProb.EQ.2.0) THEN - ! Only molecules or charged molecules - IF(((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) THEN - ALLOCATE(SpecDSMC(iSpec)%MW_ConstA(1:nSpecies)) - ALLOCATE(SpecDSMC(iSpec)%MW_ConstB(1:nSpecies)) - DO jSpec = 1, nSpecies - WRITE(UNIT=hilf2,FMT='(I0)') jSpec - hilf2=TRIM(hilf)//'-'//TRIM(hilf2) - SpecDSMC(iSpec)%MW_ConstA(jSpec) = GETREAL('Part-Species'//TRIM(hilf)//'-MWConstA-'//TRIM(hilf2)) - SpecDSMC(iSpec)%MW_ConstB(jSpec) = GETREAL('Part-Species'//TRIM(hilf)//'-MWConstB-'//TRIM(hilf2)) - - IF(SpecDSMC(iSpec)%MW_ConstA(jSpec).EQ.0) THEN + + IF(SpeciesDatabase.NE.'none') THEN + ! Initialize FORTRAN interface. + CALL H5OPEN_F(err) + + CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) + + DO iSpec = 1, nSpecies + IF(.NOT.Species(iSpec)%DoOverwriteParameters) THEN + WRITE(UNIT=hilf,FMT='(I0)') iSpec + IF(Species(iSpec)%InterID.NE.4) THEN + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + CALL AttributeExists(file_id_specdb,'PolyatomicMol',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'PolyatomicMol',1,DatasetName = dsetname,LogicalScalar=SpecDSMC(iSpec)%PolyatomicMol) + LBWRITE (UNIT_stdOut,*) 'PolyatomicMol: ', SpecDSMC(iSpec)%PolyatomicMol + ELSE + SpecDSMC(iSpec)%PolyatomicMol = .FALSE. + END IF + IF(SpecDSMC(iSpec)%PolyatomicMol.AND.DSMC%DoTEVRRelaxation) THEN + CALL Abort(& + __STAMP__& + ,'! Simulation of Polyatomic Molecules and T-E-V-R relaxation not possible yet!!!') + END IF + IF(SpecDSMC(iSpec)%PolyatomicMol) THEN + DSMC%NumPolyatomMolecs = DSMC%NumPolyatomMolecs + 1 + SpecDSMC(iSpec)%SpecToPolyArray = DSMC%NumPolyatomMolecs + ELSEIF ((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN + SpecDSMC(iSpec)%Xi_Rot = 2 + CALL ReadAttribute(file_id_specdb,'CharaTempVib',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%CharaTVib) + LBWRITE (UNIT_stdOut,*) 'CharaTempVib: ', SpecDSMC(iSpec)%CharaTVib + CALL AttributeExists(file_id_specdb,'CharaTempRot',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'CharaTempRot',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%CharaTRot) + ELSE + SpecDSMC(iSpec)%CharaTRot = 0.0 + END IF + LBWRITE (UNIT_stdOut,*) 'CharaTempRot: ', SpecDSMC(iSpec)%CharaTRot + CALL ReadAttribute(file_id_specdb,'Ediss_eV',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%Ediss_eV) + LBWRITE (UNIT_stdOut,*) 'Ediss_eV: ', SpecDSMC(iSpec)%Ediss_eV + + SpecDSMC(iSpec)%MaxVibQuant = 200 + ! Calculation of the zero-point energy + SpecDSMC(iSpec)%EZeroPoint = DSMC%GammaQuant * BoltzmannConst * SpecDSMC(iSpec)%CharaTVib + ! Calculation of the dissociation quantum number (used for QK chemistry) + SpecDSMC(iSpec)%DissQuant = INT(SpecDSMC(iSpec)%Ediss_eV*ElementaryCharge/(BoltzmannConst*SpecDSMC(iSpec)%CharaTVib)) + END IF + ! Read in species values for rotational relaxation models of Boyd/Zhang if necessary + IF(DSMC%RotRelaxProb.GT.1.0.AND.((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) THEN + SpecDSMC(iSpec)%CollNumRotInf = GETREAL('Part-Species'//TRIM(hilf)//'-CollNumRotInf') + SpecDSMC(iSpec)%TempRefRot = GETREAL('Part-Species'//TRIM(hilf)//'-TempRefRot') + IF(SpecDSMC(iSpec)%CollNumRotInf*SpecDSMC(iSpec)%TempRefRot.EQ.0) THEN CALL Abort(& __STAMP__& - ,'Error! MW_ConstA is equal to zero for species:', iSpec) + ,'Error! CollNumRotRef or TempRefRot is equal to zero for species:', iSpec) + END IF + END IF + ! Read in species values for vibrational relaxation models of Milikan-White if necessary + IF(DSMC%VibRelaxProb.EQ.2.0) THEN + ! Only molecules or charged molecules + IF(((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) THEN + ALLOCATE(SpecDSMC(iSpec)%MW_ConstA(1:nSpecies)) + ALLOCATE(SpecDSMC(iSpec)%MW_ConstB(1:nSpecies)) + DO jSpec = 1, nSpecies + WRITE(UNIT=hilf2,FMT='(I0)') jSpec + hilf2=TRIM(hilf)//'-'//TRIM(hilf2) + SpecDSMC(iSpec)%MW_ConstA(jSpec) = GETREAL('Part-Species'//TRIM(hilf)//'-MWConstA-'//TRIM(hilf2)) + SpecDSMC(iSpec)%MW_ConstB(jSpec) = GETREAL('Part-Species'//TRIM(hilf)//'-MWConstB-'//TRIM(hilf2)) + + IF(SpecDSMC(iSpec)%MW_ConstA(jSpec).EQ.0) THEN + CALL Abort(& + __STAMP__& + ,'Error! MW_ConstA is equal to zero for species:', iSpec) + END IF + IF(SpecDSMC(iSpec)%MW_ConstB(jSpec).EQ.0) THEN + CALL Abort(& + __STAMP__& + ,'Error! MW_ConstB is equal to zero for species:', iSpec) + END IF + END DO END IF - IF(SpecDSMC(iSpec)%MW_ConstB(jSpec).EQ.0) THEN + SpecDSMC(iSpec)%VibCrossSec = GETREAL('Part-Species'//TRIM(hilf)//'-VibCrossSection') + ! Only molecules or charged molecules + IF((SpecDSMC(iSpec)%VibCrossSec.EQ.0).AND.((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) THEN CALL Abort(& __STAMP__& - ,'Error! MW_ConstB is equal to zero for species:', iSpec) + ,'Error! VibCrossSec is equal to zero for species:', iSpec) END IF - END DO - END IF - SpecDSMC(iSpec)%VibCrossSec = GETREAL('Part-Species'//TRIM(hilf)//'-VibCrossSection') - ! Only molecules or charged molecules - IF((SpecDSMC(iSpec)%VibCrossSec.EQ.0).AND.((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) THEN - CALL Abort(& - __STAMP__& - ,'Error! VibCrossSec is equal to zero for species:', iSpec) - END IF - END IF - ! Setting the values of Rot-/Vib-RelaxProb to a fix value (electronic: species-specific values are possible) - SpecDSMC(iSpec)%RotRelaxProb = DSMC%RotRelaxProb - SpecDSMC(iSpec)%VibRelaxProb = DSMC%VibRelaxProb - SpecDSMC(iSpec)%ElecRelaxProb = GETREAL('Part-Species'//TRIM(hilf)//'-ElecRelaxProb') - ! multi init stuff - ALLOCATE(SpecDSMC(iSpec)%Init(0:Species(iSpec)%NumberOfInits)) - ! Skip the read-in of temperatures if a background gas distribution is used but not if background gas regions are used - IF(BGGas%NumberOfSpecies.GT.0) THEN - IF(BGGas%BackgroundSpecies(iSpec).AND.BGGas%UseDistribution.AND.(.NOT.BGGas%UseRegions)) THEN - SpecDSMC(iSpec)%Init(1)%TVib = 0. - SpecDSMC(iSpec)%Init(1)%TRot = 0. - SpecDSMC(iSpec)%Init(1)%Telec = 0. - CYCLE - END IF + END IF + ! Setting the values of Rot-/Vib-RelaxProb to a fix value (electronic: species-specific values are possible) + SpecDSMC(iSpec)%RotRelaxProb = DSMC%RotRelaxProb + SpecDSMC(iSpec)%VibRelaxProb = DSMC%VibRelaxProb + SpecDSMC(iSpec)%ElecRelaxProb = GETREAL('Part-Species'//TRIM(hilf)//'-ElecRelaxProb') + ! multi init stuff + ALLOCATE(SpecDSMC(iSpec)%Init(0:Species(iSpec)%NumberOfInits)) + ! Skip the read-in of temperatures if a background gas distribution is used but not if background gas regions are used + IF(BGGas%NumberOfSpecies.GT.0) THEN + IF(BGGas%BackgroundSpecies(iSpec).AND.BGGas%UseDistribution.AND.(.NOT.BGGas%UseRegions)) THEN + SpecDSMC(iSpec)%Init(1)%TVib = 0. + SpecDSMC(iSpec)%Init(1)%TRot = 0. + SpecDSMC(iSpec)%Init(1)%Telec = 0. + CYCLE + END IF + END IF + DO iInit = 1, Species(iSpec)%NumberOfInits + WRITE(UNIT=hilf2,FMT='(I0)') iInit + hilf2=TRIM(hilf)//'-Init'//TRIM(hilf2) + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN + SpecDSMC(iSpec)%Init(iInit)%TVib = GETREAL('Part-Species'//TRIM(hilf2)//'-TempVib') + SpecDSMC(iSpec)%Init(iInit)%TRot = GETREAL('Part-Species'//TRIM(hilf2)//'-TempRot') + END IF + ! read electronic temperature + IF (DSMC%ElectronicModel.GT.0) THEN + SpecDSMC(iSpec)%Init(iInit)%Telec = GETREAL('Part-Species'//TRIM(hilf2)//'-TempElec') + END IF ! electronic model + END DO !Inits + ALLOCATE(SpecDSMC(iSpec)%Surfaceflux(1:Species(iSpec)%nSurfacefluxBCs)) + DO iInit = 1, Species(iSpec)%nSurfacefluxBCs + WRITE(UNIT=hilf2,FMT='(I0)') iInit + hilf2=TRIM(hilf)//'-Surfaceflux'//TRIM(hilf2) + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN + SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib = GETREAL('Part-Species'//TRIM(hilf2)//'-TempVib','0.') + SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot = GETREAL('Part-Species'//TRIM(hilf2)//'-TempRot','0.') + IF (SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot*SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib.EQ.0.) THEN + CALL Abort(& + __STAMP__& + ,'Error! TVib and TRot not def. in Part-SpeciesXX-SurfacefluxXX-TempVib/TempRot for iSpec, iInit',iSpec,REAL(iInit)) + END IF + END IF + ! read electronic temperature + IF (DSMC%ElectronicModel.GT.0) THEN + SpecDSMC(iSpec)%Surfaceflux(iInit)%Telec = GETREAL('Part-Species'//TRIM(hilf2)//'-TempElec','0.') + IF (SpecDSMC(iSpec)%Surfaceflux(iInit)%Telec.EQ.0.) THEN + CALL Abort(& + __STAMP__& + ,' Error! Telec not defined in Part-SpeciesXX-SurfacefluxXX-Tempelec for iSpec, iInit',iSpec,REAL(iInit)) + END IF + END IF + END DO !SurfaceFluxBCs + END IF ! not electron END IF - DO iInit = 1, Species(iSpec)%NumberOfInits - WRITE(UNIT=hilf2,FMT='(I0)') iInit - hilf2=TRIM(hilf)//'-Init'//TRIM(hilf2) - IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN - SpecDSMC(iSpec)%Init(iInit)%TVib = GETREAL('Part-Species'//TRIM(hilf2)//'-TempVib') - SpecDSMC(iSpec)%Init(iInit)%TRot = GETREAL('Part-Species'//TRIM(hilf2)//'-TempRot') - END IF - ! read electronic temperature - IF (DSMC%ElectronicModel.GT.0) THEN - SpecDSMC(iSpec)%Init(iInit)%Telec = GETREAL('Part-Species'//TRIM(hilf2)//'-TempElec') - END IF ! electronic model - END DO !Inits - ALLOCATE(SpecDSMC(iSpec)%Surfaceflux(1:Species(iSpec)%nSurfacefluxBCs)) - DO iInit = 1, Species(iSpec)%nSurfacefluxBCs - WRITE(UNIT=hilf2,FMT='(I0)') iInit - hilf2=TRIM(hilf)//'-Surfaceflux'//TRIM(hilf2) - IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN - SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib = GETREAL('Part-Species'//TRIM(hilf2)//'-TempVib','0.') - SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot = GETREAL('Part-Species'//TRIM(hilf2)//'-TempRot','0.') - IF (SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot*SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib.EQ.0.) THEN + END DO !Species + + ! Close the file. + CALL H5FCLOSE_F(file_id_specdb, err) + ! Close FORTRAN interface. + CALL H5CLOSE_F(err) + + END IF !database + + IF(ANY(Species(:)%DoOverwriteParameters)) THEN + DO iSpec = 1, nSpecies + IF(Species(iSpec)%DoOverwriteParameters) THEN + IF(Species(iSpec)%InterID.NE.4) THEN + LBWRITE (UNIT_stdOut,'(66(". "))') + WRITE(UNIT=hilf,FMT='(I0)') iSpec + SpecDSMC(iSpec)%PolyatomicMol=GETLOGICAL('Part-Species'//TRIM(hilf)//'-PolyatomicMol','.FALSE.') + IF(SpecDSMC(iSpec)%PolyatomicMol.AND.DSMC%DoTEVRRelaxation) THEN CALL Abort(& __STAMP__& - ,'Error! TVib and TRot not def. in Part-SpeciesXX-SurfacefluxXX-TempVib/TempRot for iSpec, iInit',iSpec,REAL(iInit)) + ,'! Simulation of Polyatomic Molecules and T-E-V-R relaxation not possible yet!!!') END IF - END IF - ! read electronic temperature - IF (DSMC%ElectronicModel.GT.0) THEN - SpecDSMC(iSpec)%Surfaceflux(iInit)%Telec = GETREAL('Part-Species'//TRIM(hilf2)//'-TempElec','0.') - IF (SpecDSMC(iSpec)%Surfaceflux(iInit)%Telec.EQ.0.) THEN - CALL Abort(& - __STAMP__& - ,' Error! Telec not defined in Part-SpeciesXX-SurfacefluxXX-Tempelec for iSpec, iInit',iSpec,REAL(iInit)) + IF(SpecDSMC(iSpec)%PolyatomicMol) THEN + DSMC%NumPolyatomMolecs = DSMC%NumPolyatomMolecs + 1 + SpecDSMC(iSpec)%SpecToPolyArray = DSMC%NumPolyatomMolecs + ELSEIF ((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN + SpecDSMC(iSpec)%Xi_Rot = 2 + SpecDSMC(iSpec)%CharaTVib = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempVib') + SpecDSMC(iSpec)%CharaTRot = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempRot','0') + SpecDSMC(iSpec)%Ediss_eV = GETREAL('Part-Species'//TRIM(hilf)//'-Ediss_eV') + SpecDSMC(iSpec)%MaxVibQuant = 200 + ! Calculation of the zero-point energy + SpecDSMC(iSpec)%EZeroPoint = DSMC%GammaQuant * BoltzmannConst * SpecDSMC(iSpec)%CharaTVib + ! Calculation of the dissociation quantum number (used for QK chemistry) + SpecDSMC(iSpec)%DissQuant = INT(SpecDSMC(iSpec)%Ediss_eV*ElementaryCharge/(BoltzmannConst*SpecDSMC(iSpec)%CharaTVib)) END IF - END IF - END DO !SurfaceFluxBCs - END IF ! not electron - END DO !Species + ! Read in species values for rotational relaxation models of Boyd/Zhang if necessary + IF(DSMC%RotRelaxProb.GT.1.0.AND.((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) THEN + SpecDSMC(iSpec)%CollNumRotInf = GETREAL('Part-Species'//TRIM(hilf)//'-CollNumRotInf') + SpecDSMC(iSpec)%TempRefRot = GETREAL('Part-Species'//TRIM(hilf)//'-TempRefRot') + IF(SpecDSMC(iSpec)%CollNumRotInf*SpecDSMC(iSpec)%TempRefRot.EQ.0) THEN + CALL Abort(& + __STAMP__& + ,'Error! CollNumRotRef or TempRefRot is equal to zero for species:', iSpec) + END IF + END IF + ! Read in species values for vibrational relaxation models of Milikan-White if necessary + IF(DSMC%VibRelaxProb.EQ.2.0) THEN + ! Only molecules or charged molecules + IF(((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) THEN + ALLOCATE(SpecDSMC(iSpec)%MW_ConstA(1:nSpecies)) + ALLOCATE(SpecDSMC(iSpec)%MW_ConstB(1:nSpecies)) + DO jSpec = 1, nSpecies + WRITE(UNIT=hilf2,FMT='(I0)') jSpec + hilf2=TRIM(hilf)//'-'//TRIM(hilf2) + SpecDSMC(iSpec)%MW_ConstA(jSpec) = GETREAL('Part-Species'//TRIM(hilf)//'-MWConstA-'//TRIM(hilf2)) + SpecDSMC(iSpec)%MW_ConstB(jSpec) = GETREAL('Part-Species'//TRIM(hilf)//'-MWConstB-'//TRIM(hilf2)) + + IF(SpecDSMC(iSpec)%MW_ConstA(jSpec).EQ.0) THEN + CALL Abort(& + __STAMP__& + ,'Error! MW_ConstA is equal to zero for species:', iSpec) + END IF + IF(SpecDSMC(iSpec)%MW_ConstB(jSpec).EQ.0) THEN + CALL Abort(& + __STAMP__& + ,'Error! MW_ConstB is equal to zero for species:', iSpec) + END IF + END DO + END IF + SpecDSMC(iSpec)%VibCrossSec = GETREAL('Part-Species'//TRIM(hilf)//'-VibCrossSection') + ! Only molecules or charged molecules + IF((SpecDSMC(iSpec)%VibCrossSec.EQ.0).AND.((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) THEN + CALL Abort(& + __STAMP__& + ,'Error! VibCrossSec is equal to zero for species:', iSpec) + END IF + END IF + ! Setting the values of Rot-/Vib-RelaxProb to a fix value (electronic: species-specific values are possible) + SpecDSMC(iSpec)%RotRelaxProb = DSMC%RotRelaxProb + SpecDSMC(iSpec)%VibRelaxProb = DSMC%VibRelaxProb + SpecDSMC(iSpec)%ElecRelaxProb = GETREAL('Part-Species'//TRIM(hilf)//'-ElecRelaxProb') + ! multi init stuff + ALLOCATE(SpecDSMC(iSpec)%Init(0:Species(iSpec)%NumberOfInits)) + ! Skip the read-in of temperatures if a background gas distribution is used but not if background gas regions are used + IF(BGGas%NumberOfSpecies.GT.0) THEN + IF(BGGas%BackgroundSpecies(iSpec).AND.BGGas%UseDistribution.AND.(.NOT.BGGas%UseRegions)) THEN + SpecDSMC(iSpec)%Init(1)%TVib = 0. + SpecDSMC(iSpec)%Init(1)%TRot = 0. + SpecDSMC(iSpec)%Init(1)%Telec = 0. + CYCLE + END IF + END IF + DO iInit = 1, Species(iSpec)%NumberOfInits + WRITE(UNIT=hilf2,FMT='(I0)') iInit + hilf2=TRIM(hilf)//'-Init'//TRIM(hilf2) + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN + SpecDSMC(iSpec)%Init(iInit)%TVib = GETREAL('Part-Species'//TRIM(hilf2)//'-TempVib') + SpecDSMC(iSpec)%Init(iInit)%TRot = GETREAL('Part-Species'//TRIM(hilf2)//'-TempRot') + END IF + ! read electronic temperature + IF (DSMC%ElectronicModel.GT.0) THEN + SpecDSMC(iSpec)%Init(iInit)%Telec = GETREAL('Part-Species'//TRIM(hilf2)//'-TempElec') + END IF ! electronic model + END DO !Inits + ALLOCATE(SpecDSMC(iSpec)%Surfaceflux(1:Species(iSpec)%nSurfacefluxBCs)) + DO iInit = 1, Species(iSpec)%nSurfacefluxBCs + WRITE(UNIT=hilf2,FMT='(I0)') iInit + hilf2=TRIM(hilf)//'-Surfaceflux'//TRIM(hilf2) + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN + SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib = GETREAL('Part-Species'//TRIM(hilf2)//'-TempVib','0.') + SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot = GETREAL('Part-Species'//TRIM(hilf2)//'-TempRot','0.') + IF (SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot*SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib.EQ.0.) THEN + CALL Abort(& + __STAMP__& + ,'Error! TVib and TRot not def. in Part-SpeciesXX-SurfacefluxXX-TempVib/TempRot for iSpec, iInit',iSpec,REAL(iInit)) + END IF + END IF + ! read electronic temperature + IF (DSMC%ElectronicModel.GT.0) THEN + SpecDSMC(iSpec)%Surfaceflux(iInit)%Telec = GETREAL('Part-Species'//TRIM(hilf2)//'-TempElec','0.') + IF (SpecDSMC(iSpec)%Surfaceflux(iInit)%Telec.EQ.0.) THEN + CALL Abort(& + __STAMP__& + ,' Error! Telec not defined in Part-SpeciesXX-SurfacefluxXX-Tempelec for iSpec, iInit',iSpec,REAL(iInit)) + END IF + END IF + END DO !SurfaceFluxBCs + END IF ! not electron + END IF !iSpec overwrite parameters + END DO !Species + END IF ! Initialization of polyatomic species and burn-in phase (Metropolis-Hastings) per initialization region IF(DSMC%NumPolyatomMolecs.GT.0) THEN From c4c454ba7470bcb33c33095d3ebda5b5871c0b1a Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Wed, 19 Oct 2022 12:20:04 +0200 Subject: [PATCH 032/222] update --- src/particles/dsmc/dsmc_init.f90 | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index 613d70df0..1d2b91fe0 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -360,12 +360,18 @@ SUBROUTINE InitDSMC() PartStateIntEn = 0. ! nullify -DSMC%ElectronicModelDatabase = TRIM(GETSTR('Particles-DSMCElectronicDatabase','none')) -IF ((DSMC%ElectronicModelDatabase .NE. 'none').AND.((CollisMode .GT. 1).OR.(CollisMode .EQ. 0))) THEN - ! CollisMode=0 is for use of in PIC simulation without collisions - DSMC%EpsElecBin = GETREAL('EpsMergeElectronicState','1E-4') -ELSEIF(DSMC%ElectronicModel.EQ.1.OR.DSMC%ElectronicModel.EQ.2.OR.DSMC%ElectronicModel.EQ.4) THEN - CALL Abort(__STAMP__,'ERROR: Electronic models 1, 2 & 4 require an electronic levels database and CollisMode > 1!') + DSMC%ElectronicModelDatabase = TRIM(GETSTR('Particles-DSMCElectronicDatabase','none')) +IF (SpeciesDatabase.EQ.'none') THEN + IF ((DSMC%ElectronicModelDatabase .NE. 'none').AND.((CollisMode .GT. 1).OR.(CollisMode .EQ. 0))) THEN + ! CollisMode=0 is for use of in PIC simulation without collisions + DSMC%EpsElecBin = GETREAL('EpsMergeElectronicState','1E-4') + ELSEIF(DSMC%ElectronicModel.EQ.1.OR.DSMC%ElectronicModel.EQ.2.OR.DSMC%ElectronicModel.EQ.4) THEN + CALL Abort(__STAMP__,'ERROR: Electronic models 1, 2 & 4 require an electronic levels database and CollisMode > 1!') + END IF +ELSE + IF ((CollisMode .GT. 1).OR.(CollisMode .EQ. 0)) THEN + DSMC%EpsElecBin = GETREAL('EpsMergeElectronicState','1E-4') + END IF END IF DSMC%DoTEVRRelaxation = GETLOGICAL('Particles-DSMC-TEVR-Relaxation') @@ -474,13 +480,15 @@ SUBROUTINE InitDSMC() END DO !iSpec END IF - DO iSpec=1, nSpecies + DO iSpec=1, nSpecies SpecDSMC(iSpec)%FullyIonized = GETLOGICAL('Part-Species'//TRIM(hilf)//'-FullyIonized') ! Save the electron species into a global variable IF(Species(iSpec)%InterID.EQ.4) DSMC%ElectronSpecies = iSpec ! reading electronic state informations from HDF5 file - IF((DSMC%ElectronicModelDatabase.NE.'none').AND.(Species(iSpec)%InterID.NE.4)) CALL SetElectronicModel(iSpec) - END DO + IF(((DSMC%ElectronicModelDatabase.NE.'none').OR.(SpeciesDatabase.NE.'none')).AND.(Species(iSpec)%InterID.NE.4)) THEN + CALL SetElectronicModel(iSpec) + END IF + END DO ! determine number of different species combinations and allocate collidingSpecies array nCollision=0 @@ -1036,7 +1044,7 @@ SUBROUTINE InitDSMC() DSMC%ElectronSpecies = iSpec END IF ! Read-in of electronic levels for QK and backward reaction rate ------------------------------------------------------------- - IF (DSMC%ElectronicModelDatabase .EQ.'none') THEN + IF ((DSMC%ElectronicModelDatabase .EQ.'none').AND.(SpeciesDatabase.EQ.'none')) THEN IF ((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN SpecDSMC(iSpec)%MaxElecQuant = GETINT('Part-Species'//TRIM(hilf)//'-NumElectronicLevels','0') IF(SpecDSMC(iSpec)%MaxElecQuant.GT.0) THEN From d3da478b22d9373939875d3455e1434b992d3aa1 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Thu, 20 Oct 2022 09:29:22 +0200 Subject: [PATCH 033/222] current state --- src/particles/dsmc/dsmc_init.f90 | 40 +++++++++++++++--- tools/species_database/Species_Database.h5 | Bin 58264 -> 55824 bytes .../create_species_database.py | 13 +++++- 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index 1d2b91fe0..458d9bc06 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -695,11 +695,11 @@ SUBROUTINE InitDSMC() IF(.NOT.Species(iSpec)%DoOverwriteParameters) THEN WRITE(UNIT=hilf,FMT='(I0)') iSpec IF(Species(iSpec)%InterID.NE.4) THEN - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) CALL AttributeExists(file_id_specdb,'PolyatomicMol',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'PolyatomicMol',1,DatasetName = dsetname,LogicalScalar=SpecDSMC(iSpec)%PolyatomicMol) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) LBWRITE (UNIT_stdOut,*) 'PolyatomicMol: ', SpecDSMC(iSpec)%PolyatomicMol ELSE SpecDSMC(iSpec)%PolyatomicMol = .FALSE. @@ -713,6 +713,7 @@ SUBROUTINE InitDSMC() DSMC%NumPolyatomMolecs = DSMC%NumPolyatomMolecs + 1 SpecDSMC(iSpec)%SpecToPolyArray = DSMC%NumPolyatomMolecs ELSEIF ((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) SpecDSMC(iSpec)%Xi_Rot = 2 CALL ReadAttribute(file_id_specdb,'CharaTempVib',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%CharaTVib) LBWRITE (UNIT_stdOut,*) 'CharaTempVib: ', SpecDSMC(iSpec)%CharaTVib @@ -1019,15 +1020,42 @@ SUBROUTINE InitDSMC() ! Define chemical reactions (including ionization and backward reaction rate) !----------------------------------------------------------------------------------------------------------------------------------- IF (CollisMode.EQ.3) THEN ! perform chemical reactions + + IF(SpeciesDatabase.NE.'none') THEN + ! Initialize FORTRAN interface. + CALL H5OPEN_F(err) + CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) + DO iSpec = 1, nSpecies + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + WRITE(UNIT=hilf,FMT='(I0)') iSpec + ! Read-in of heat of formation, ions are treated later using the heat of formation of their ground state and data from the + ! from the electronic state database to ensure consistent energies across chemical reactions of QK and Arrhenius type. + IF((Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20).OR.(Species(iSpec)%InterID.EQ.4)) THEN + SpecDSMC(iSpec)%HeatOfFormation = 0.0 + ELSE + CALL ReadAttribute(file_id_specdb,'HeatOfFormation_K',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%HeatOfFormation) + LBWRITE (UNIT_stdOut,*) 'HeatOfFormation_K: ', SpecDSMC(iSpec)%HeatOfFormation + SpecDSMC(iSpec)%HeatOfFormation = SpecDSMC(iSpec)%HeatOfFormation * BoltzmannConst + ENDIF + END DO ! iSpec = nSpecies + ! Close the file. + CALL H5FCLOSE_F(file_id_specdb, err) + ! Close FORTRAN interface. + CALL H5CLOSE_F(err) + END IF !database + DO iSpec = 1, nSpecies WRITE(UNIT=hilf,FMT='(I0)') iSpec + IF(Species(iSpec)%DoOverwriteParameters) THEN ! Read-in of heat of formation, ions are treated later using the heat of formation of their ground state and data from the ! from the electronic state database to ensure consistent energies across chemical reactions of QK and Arrhenius type. - IF((Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20).OR.(Species(iSpec)%InterID.EQ.4)) THEN - SpecDSMC(iSpec)%HeatOfFormation = 0.0 - ELSE - SpecDSMC(iSpec)%HeatOfFormation = GETREAL('Part-Species'//TRIM(hilf)//'-HeatOfFormation_K') - SpecDSMC(iSpec)%HeatOfFormation = SpecDSMC(iSpec)%HeatOfFormation * BoltzmannConst + IF((Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20).OR.(Species(iSpec)%InterID.EQ.4)) THEN + SpecDSMC(iSpec)%HeatOfFormation = 0.0 + ELSE + SpecDSMC(iSpec)%HeatOfFormation = GETREAL('Part-Species'//TRIM(hilf)//'-HeatOfFormation_K') + SpecDSMC(iSpec)%HeatOfFormation = SpecDSMC(iSpec)%HeatOfFormation * BoltzmannConst + END IF END IF ! Heat of formation of ionized species is modified with the ionization energy directly from read-in electronic energy levels ! of the ground/previous state of the respective species (Input requires a species number (eg species number of N for NIon1)) diff --git a/tools/species_database/Species_Database.h5 b/tools/species_database/Species_Database.h5 index 987df9e99e013e3ebf838045f701a4eb7d0c5c65..4ac06032f25dcdc7694aaa6e9e2d5683bce01c41 100644 GIT binary patch delta 5744 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 W;hj$j&$6CkkUk3~dlHm?R`y@y*>Y6? delta 6719 zcmbtZeNa@_6@TyU0&kxn59MR!^BGfJL2)HSS7O3LFh!%dA=&~4vqrE>A_&wFO0>J_ z)D}%tmSbB~Ky*w(3F-KJj-pkEI?-tB2kqDqopwUgnaUr@%=Vv_I@6^0zWYAh{1MZ) z?~i@=+;@Jzd(OS*p8K&~r)@o-*t%S(=kIdv6oR43RB*=$-A)lr%}`#m{S2kM;u!T| z>5K7daW3yQZ*E$o;I#mh2N}KHvU!(w!EXN^mr*o*w0Y&MXx?Li8duz}X55v8p zJtnwz3yft*xdJ1ofUa2-SFSav*H7ir`f*lym=nu^By-@-5XY-vS|ivA`%8do{1ZK zn&NzRipx;kc>-%=75a7P#F@7l$EpD_Dmq}DAXX)?j#uXzZr`#8 z`n<5(0}k9aY2UH|JOSg!ssYoq_AL{{)AlXn6R7{zJ(wP)0f}n=N702^g0kELfutxs zm=PU5z|4$}fJu%DAIN7?q9Vv=Qlr5Ka4JoUh5+N8QQ!k4musuCos})H}KYfo4ua4JGY!4@}ML>EuihREwe2A z1~X(zv5EKs!4ahWuZ9cCykGL}`F_3bACsO0v=vMrpv)usGoW zy99ohaF<=G{(7J#@hrOx<_kH{o|zOnm!?Pya@j;4Zwxr5vVLoQYkkv}dZ><@mp}$? zN?WWP%EJ5<^jI|kvX-1;FDT86XFQ%W6)XQo`SPikAFrCNWG%V!c(o@9BlItO-l5y= zf-jaGh}We&>=BISwV!(C^5e-0VPXF35Pnv4xL=^-;8f4=qJ&S+%OO{4-!sFU8G+78Y=g|v9bpte0s*N zq49O{&~yY+C5J{TV0C31Z>Uwk?<<2Syb{*DRERw5WO)e-6EU%HX+0mfwmg#C?1)Gk zm<^G7{z@u$YROj5!4v*Sz4EP8_G|SXDl*OOYGEe5bin2DH|UqCH$(FK#3P&dJ#sOT zA&-8>f>`B5gX^KFs*N{WhVxaGMtm%RzS241sjflc@4~_ALKNIU24M6ZF1@OTQtSQf z|2~yFt3&d?)VL5g(i(iP^A!uOS^*7KLs9K5-c*H$KL{evD%j~4;q<0t6s*xl+Fz%S zG*?ebmel%GN7aGbO%xkngQH?`k8;3gmkiM;rH@hps zxuu$O8`({;qp^_nLCGsQ#J3d_jgh{UzfNVpRxeVK>1>VE3vZ{g&>E6&sR1I1vskW!;+}${AmXYw}XAR&xqh<(73xeTi9g|)JqlX z%2*}_=X3f9`?PKgw0E0Yq||wU%7Y>L)~Dm-K`QH^KYp6ZPOV;_j-wYN^<2NDa=BJt zPDN(qj#@CMt@tPUMYib`7u0OK{_OYa5fjtXSp50Uux#Vk-gQ11@;JgVxYFK9Macn#T zzQcB-k!jF)_zLnK!udpm&-Y8lhj{2aQjCOMu>b06XwHj;{N9}?d--?@-72-uq@y)xV34>+ zuwUL?0n&hJ=S)~T@WKol$+3(cm!rqY7?A60&k1!jaLzpWo;pG@hg=`v60gVHz)4as zoWj@N3clb5@oonahM@PZ=}$5=Dyq+y?yZI?#l?n|*{5+P51;8k6GO1=Y_l=1$gKsn z#%9c`sWYSne1(qF(d?0V$bBBK*x)|bfqWmr@VREAZ`0t5Gjm|H6gxbO*Lx8@zU-Z* z_Yz*N$!5XkyKSsn-7QY!zXO3Y3ll~=b33L>BAf&O~H%9 z|JJjV((q9niv(Wz+gNd|5+3`+rjEd93ys?L-_WQXi-_7;u=Z-PV^W{tWGrF)suNA# zRQvlKyjqRP@^n_ED!*34PyU(GxDoX3tul}Z60Vy(WHy#U&vlo>_bFAUtAOtg-2X!x zZ{`I;t&CkfX;Z}8Uc1^z@J0=Cj>BJW_zZHp8j-=9cB3W+_TAiwCjV*}IiU>_5V!Z diff --git a/tools/species_database/create_species_database.py b/tools/species_database/create_species_database.py index ac657460b..24cf9eecf 100644 --- a/tools/species_database/create_species_database.py +++ b/tools/species_database/create_species_database.py @@ -27,23 +27,27 @@ def is_float(value): return True except: return False - + # Create general structure hdf_species_group = 'Species' if hdf_species_group in h5_species.keys(): print('Group Species already exists.') hdf_species_group = h5_species['Species'] + hdf_species_group.attrs['* Last Modified'] = date.today().strftime("%B %d, %Y") else: print('Group Species does not exist, creating new group.') hdf_species_group = h5_species.create_group('Species') + hdf_species_group.attrs['* Created'] = date.today().strftime("%B %d, %Y") hdf_xsec_group = 'Cross-Sections' if hdf_xsec_group in h5_species.keys(): print('Group Cross-Sections already exists.') hdf_xsec_group = h5_species['Cross-Sections'] + hdf_xsec_group.attrs['* Last Modified'] = date.today().strftime("%B %d, %Y") else: print('Group Cross-Sections does not exist, creating new group.') hdf_xsec_group = h5_species.create_group('Cross-Sections') + hdf_xsec_group.attrs['* Created'] = date.today().strftime("%B %d, %Y") # Read-in of DSMC.ini parameters and electronic state with open(args.ini_filename) as file: @@ -63,14 +67,17 @@ def is_float(value): elif hdf_species == 'electron': print('Species added to the database: ', hdf_species) hdf_species = hdf_species_group.create_dataset(hdf_species,data=[0]) + hdf_species.attrs['* Created'] = 1 #date.today().strftime("%B %d, %Y, %H:%M:%S") else: if hdf_species in h5_electronic.keys(): hdf_input_data = h5_electronic[hdf_species] print('Species added to the database: ', hdf_species) hdf_species = hdf_species_group.create_dataset(hdf_species,data=hdf_input_data) + hdf_species.attrs['* Created'] = 1 #date.today().strftime("%B %d, %Y, %H:%M:%S") else: print('Species added to the database, but electronic levels are unknown: ', hdf_species) hdf_species = hdf_species_group.create_dataset(hdf_species,data=[0]) + hdf_species.attrs['* Created'] = 1 #date.today().strftime("%B %d, %Y, %H:%M:%S") with open(args.ini_filename) as file: for line in file: @@ -91,7 +98,9 @@ def is_float(value): hdf_species.attrs[var_name[1]] = var_value print('Species parameter set: ', var_name[1]) #raus?? # Write attributes for source and time of retrieval - hdf_species.attrs['Reference'] = args.reference + ', Added/Retrieved on ' + date.today().strftime("%B %d, %Y") + '.' + hdf_species.attrs['* Reference'] = args.reference + hdf_species.attrs['* Created'] = 1 #date.today().strftime("%B %d, %Y, %H:%M:%S") + hdf_species.attrs['* Last Modified'] = 2#date.today().strftime("%B %d, %Y, %H:%M:%S") # Copy cross-section data for dataset in h5_crosssection.keys(): From 8983ed14a64155e61c85507b3d8338c46ac14778 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Thu, 20 Oct 2022 10:18:46 +0200 Subject: [PATCH 034/222] introduce reaction name --- src/particles/dsmc/dsmc_chemical_init.f90 | 3 + src/particles/dsmc/dsmc_vars.f90 | 1 + tools/species_database/DSMC_Titan_full.ini | 516 +++++++++++++++++++++ 3 files changed, 520 insertions(+) create mode 100755 tools/species_database/DSMC_Titan_full.ini diff --git a/src/particles/dsmc/dsmc_chemical_init.f90 b/src/particles/dsmc/dsmc_chemical_init.f90 index 893a894b4..a2ff6b59e 100644 --- a/src/particles/dsmc/dsmc_chemical_init.f90 +++ b/src/particles/dsmc/dsmc_chemical_init.f90 @@ -57,6 +57,7 @@ SUBROUTINE DefineParametersChemistry() 'phIonXSec: photon-ionization with cross-section-based data for the reaction\n'//& 'QK: quantum kinetic\n'//& 'XSec: cross-section-based data for the reaction', 'TCE', numberedmulti=.TRUE.) +CALL prms%CreateStringOption( 'DSMC-Reaction[$]-ReactionName', 'name to identify reaction', numberedmulti=.TRUE.) CALL prms%CreateIntArrayOption( 'DSMC-Reaction[$]-Reactants' & ,'Reactants of Reaction[$]\n'//& '(SpecNumOfReactant1,\n'//& @@ -230,6 +231,7 @@ SUBROUTINE DSMC_chemical_init() ChemReac%ReactType = '0' ALLOCATE(ChemReac%ReactModel(ChemReac%NumOfReact)) ChemReac%ReactModel = '0' +ALLOCATE(ChemReac%ReactionName(ChemReac%NumOfReact)) ALLOCATE(ChemReac%Reactants(ChemReac%NumOfReact,3)) ChemReac%Reactants = 0 ALLOCATE(ChemReac%Products(ChemReac%NumOfReact,4)) @@ -288,6 +290,7 @@ SUBROUTINE DSMC_chemical_init() DO iReac = 1, ReadInNumOfReact WRITE(UNIT=hilf,FMT='(I0)') iReac ChemReac%ReactModel(iReac) = TRIM(GETSTR('DSMC-Reaction'//TRIM(hilf)//'-ReactionModel')) + ChemReac%ReactionName(iReac)= TRIM(GETSTR('DSMC-Reaction'//TRIM(hilf)//'-ReactionName')) ChemReac%Reactants(iReac,:) = GETINTARRAY('DSMC-Reaction'//TRIM(hilf)//'-Reactants',3) ChemReac%Products(iReac,:) = GETINTARRAY('DSMC-Reaction'//TRIM(hilf)//'-Products',4) SELECT CASE (TRIM(ChemReac%ReactModel(iReac))) diff --git a/src/particles/dsmc/dsmc_vars.f90 b/src/particles/dsmc/dsmc_vars.f90 index 3ff45d2f9..207368bc6 100644 --- a/src/particles/dsmc/dsmc_vars.f90 +++ b/src/particles/dsmc/dsmc_vars.f90 @@ -395,6 +395,7 @@ MODULE MOD_DSMC_Vars ! phIon (photon-ionization) ! phIonXSec (photon-ionization based on cross-section data) ! XSec (based on cross-section data) + CHARACTER(LEN=200),ALLOCATABLE :: ReactionName(:) ! Name of reaction to identify reaction [NumofReact] INTEGER, ALLOCATABLE :: Reactants(:,:) ! Reactants: indices of the species starting the reaction [NumOfReact,3] INTEGER, ALLOCATABLE :: Products(:,:) ! Products: indices of the species resulting from the reaction [NumOfReact,4] INTEGER, ALLOCATABLE :: ReactCase(:) ! Case/pair of the reaction (1:NumOfReact) diff --git a/tools/species_database/DSMC_Titan_full.ini b/tools/species_database/DSMC_Titan_full.ini new file mode 100755 index 000000000..72abfc6ab --- /dev/null +++ b/tools/species_database/DSMC_Titan_full.ini @@ -0,0 +1,516 @@ +! =============================================================================== ! +! Species1, CH4 +! =============================================================================== ! +Part-Species1-SpeciesName=CH4 +Part-Species1-PolyatomicMol=true +Part-Species1-InteractionID=2 +Part-Species1-Tref=273 +Part-Species1-dref=4.63E-10 +Part-Species1-omega=0.24 +Part-Species1-NumOfAtoms=5 +Part-Species1-LinearMolec=.false. +Part-Species1-CharaTempVib1=4194.9 +Part-Species1-CharaTempVib2=2206.0 +Part-Species1-CharaTempVib3=2206.0 +Part-Species1-CharaTempVib4=4341.6 +Part-Species1-CharaTempVib5=4341.6 +Part-Species1-CharaTempVib6=4341.6 +Part-Species1-CharaTempVib7=1878.1 +Part-Species1-CharaTempVib8=1878.1 +Part-Species1-CharaTempVib9=1878.1 +Part-Species1-Ediss_eV=4.53 +Part-Species1-HeatOfFormation_K=-9002.71 +Part-Species1-CharaTempRot1 = 7.6 +Part-Species1-CharaTempRot2 = 7.6 +Part-Species1-CharaTempRot3 = 7.6 +Part-Species1-SymmetryFactor = 12 +! =============================================================================== ! +! Species2, CH3 +! =============================================================================== ! +Part-Species2-SpeciesName=CH3 +Part-Species2-PolyatomicMol=true +Part-Species2-InteractionID=2 +Part-Species2-Tref=273 +Part-Species2-dref=4.55E-10 +Part-Species2-omega=0.24 +Part-Species2-NumOfAtoms=4 +Part-Species2-LinearMolec=.false. +Part-Species2-CharaTempVib1=4320.6 +Part-Species2-CharaTempVib2=872.1 +Part-Species2-CharaTempVib3=4545.5 +Part-Species2-CharaTempVib4=4545.5 +Part-Species2-CharaTempVib5=2016.2 +Part-Species2-CharaTempVib6=2016.2 +Part-Species2-Ediss_eV=4.77 +Part-Species2-HeatOfFormation_K=17518.44 +Part-Species2-CharaTempRot1 = 13.5 +Part-Species2-CharaTempRot2 = 13.5 +Part-Species2-CharaTempRot3 = 6.8 +Part-Species2-SymmetryFactor = 6 +! =============================================================================== ! +! Species3, CH2 +! =============================================================================== ! +Part-Species3-SpeciesName=CH2 +Part-Species3-PolyatomicMol=true +Part-Species3-InteractionID=2 +Part-Species3-Tref=273 +Part-Species3-dref=4.47E-10 +Part-Species3-omega=0.24 +Part-Species3-NumOfAtoms=3 +Part-Species3-LinearMolec=.false. +Part-Species3-CharaTempVib1=4035.3 +Part-Species3-CharaTempVib2=1945.2 +Part-Species3-CharaTempVib3=4120.1 +Part-Species3-Ediss_eV=4.37 +Part-Species3-HeatOfFormation_K=46461.31 +Part-Species3-CharaTempRot1 = 72.1 +Part-Species3-CharaTempRot2 = 12.5 +Part-Species3-CharaTempRot3 = 10.6 +Part-Species3-SymmetryFactor = 2 +! =============================================================================== ! +! Species4, CH +! =============================================================================== ! +Part-Species4-SpeciesName=CH +Part-Species4-InteractionID = 2 +Part-Species4-Tref = 273 +Part-Species4-dref = 4.39E-10 +Part-Species4-omega=0.24 +Part-Species4-CharaTempVib=4314.3 +Part-Species4-Ediss_eV=3.49 +Part-Species4-HeatOfFormation_K=71440.92 +Part-Species4-CharaTempRot = 20.4 +Part-Species4-SymmetryFactor = 1 +! =============================================================================== ! +! Species5, N2 +! =============================================================================== ! +Part-Species5-SpeciesName=N2 +Part-Species5-InteractionID = 2 +Part-Species5-Tref = 273 +Part-Species5-dref = 4.17E-10 +Part-Species5-omega=0.24 +Part-Species5-CharaTempVib=3392.5 +Part-Species5-Ediss_eV=9.79 +Part-Species5-HeatOfFormation_K=0.0 +Part-Species5-CharaTempRot = 2.9 +Part-Species5-SymmetryFactor = 2 +! =============================================================================== ! +! Species6, C2 +! =============================================================================== ! +Part-Species6-SpeciesName=C2 +Part-Species6-InteractionID = 2 +Part-Species6-Tref = 273 +Part-Species6-dref = 4.88E-10 +Part-Species6-omega=0.24 +Part-Species6-CharaTempVib=2667.7 +Part-Species6-Ediss_eV=6.26 +Part-Species6-HeatOfFormation_K=100733.71 +Part-Species6-CharaTempRot = 2.6 +Part-Species6-SymmetryFactor = 2 +! =============================================================================== ! +! Species7, H2 +! =============================================================================== ! +Part-Species7-SpeciesName=H2 +Part-Species7-InteractionID = 2 +Part-Species7-Tref = 273 +Part-Species7-dref = 3.06E-10 +Part-Species7-omega=0.24 +Part-Species7-CharaTempVib=6329.0 +Part-Species7-Ediss_eV=4.50 +Part-Species7-HeatOfFormation_K=0.0 +Part-Species7-CharaTempRot = 87.5 +Part-Species7-SymmetryFactor = 2 +! =============================================================================== ! +! Species8, CN +! =============================================================================== ! +Part-Species8-SpeciesName=CN +Part-Species8-InteractionID = 2 +Part-Species8-Tref = 273 +Part-Species8-dref = 5.45E-10 +Part-Species8-omega=0.24 +Part-Species8-CharaTempVib=2975.4 +Part-Species8-Ediss_eV=7.72 +Part-Species8-HeatOfFormation_K=52323.23 +Part-Species8-CharaTempRot = 2.7 +Part-Species8-SymmetryFactor = 1 +! =============================================================================== ! +! Species9, NH +! =============================================================================== ! +Part-Species9-SpeciesName=NH +Part-Species9-InteractionID = 2 +Part-Species9-Tref = 273 +Part-Species9-dref = 4.64E-10 +Part-Species9-omega=0.24 +Part-Species9-CharaTempVib=4721.2 +Part-Species9-Ediss_eV=4.02 +Part-Species9-HeatOfFormation_K=45279.31 +Part-Species9-CharaTempRot = 24.0 +Part-Species9-SymmetryFactor = 1 +! =============================================================================== ! +! Species10, HCN +! =============================================================================== ! +Part-Species10-SpeciesName=HCN +Part-Species10-PolyatomicMol=true +Part-Species10-InteractionID = 2 +Part-Species10-Tref = 273 +Part-Species10-dref = 3.94E-10 +Part-Species10-omega=0.24 +Part-Species10-NumOfAtoms=3 +Part-Species10-LinearMolec=.true. +Part-Species10-CharaTempVib1=4761.5 +Part-Species10-CharaTempVib2=1023.9 +Part-Species10-CharaTempVib3=1023.9 +Part-Species10-CharaTempVib4=3015.7 +Part-Species10-Ediss_eV=9.93 +Part-Species10-HeatOfFormation_K=16249.85 +Part-Species10-CharaTempRot = 2.1 +Part-Species10-SymmetryFactor = 1 +! =============================================================================== ! +! Species11, N +! =============================================================================== ! +Part-Species11-SpeciesName=N +Part-Species11-InteractionID = 1 +Part-Species11-Tref = 273 +Part-Species11-dref = 3.00E-10 +Part-Species11-omega=0.24 +Part-Species11-HeatOfFormation_K=56837.22 +! =============================================================================== ! +! Species12, C +! =============================================================================== ! +Part-Species12-SpeciesName=C +Part-Species12-InteractionID = 1 +Part-Species12-Tref = 273 +Part-Species12-dref = 4.67E-10 +Part-Species12-omega=0.24 +Part-Species12-HeatOfFormation_K=86175.70 +! =============================================================================== ! +! Species13, H +! =============================================================================== ! +Part-Species13-SpeciesName=H +Part-Species13-InteractionID = 1 +Part-Species13-Tref = 273 +Part-Species13-dref = 2.03E-10 +Part-Species13-omega=0.24 +Part-Species13-HeatOfFormation_K=26213.32 +! =============================================================================== ! +! Species14, e +! =============================================================================== ! +Part-Species14-SpeciesName=electron +Part-Species14-InteractionID = 4 +Part-Species14-Tref = 273 +Part-Species14-dref = 1E-10 +Part-Species14-omega=0.24 +! =============================================================================== ! +! Species15, N2+ +! =============================================================================== ! +Part-Species15-SpeciesName=N2Ion1 +Part-Species15-InteractionID = 20 +Part-Species15-Tref = 273 +Part-Species15-dref = 4.17E-10 +Part-Species15-omega=0.24 +Part-Species15-CharaTempVib=3174.7 +Part-Species15-Ediss_eV=9.79 +Part-Species15-CharaTempRot = 2.8 +Part-Species15-SymmetryFactor = 2 +Part-Species15-PreviousState = 5 +! =============================================================================== ! +! Species16, CN+ +! =============================================================================== ! +Part-Species16-SpeciesName=CNIon1 +Part-Species16-InteractionID = 20 +Part-Species16-Tref = 273 +Part-Species16-dref = 5.45E-10 +Part-Species16-omega=0.24 +Part-Species16-CharaTempVib=2924.4 +Part-Species16-Ediss_eV=7.72 +Part-Species16-CharaTempRot = 2.5 +Part-Species16-SymmetryFactor = 1 +Part-Species16-PreviousState = 8 +! =============================================================================== ! +! Species17, N+ +! =============================================================================== ! +Part-Species17-SpeciesName=NIon1 +Part-Species17-InteractionID = 10 +Part-Species17-Tref = 273 +Part-Species17-dref = 3.00E-10 +Part-Species17-omega=0.24 +Part-Species17-PreviousState = 11 +! =============================================================================== ! +! Species18, C+ +! =============================================================================== ! +Part-Species18-SpeciesName=CIon1 +Part-Species18-InteractionID = 10 +Part-Species18-Tref = 273 +Part-Species18-dref = 4.67E-10 +Part-Species18-omega=0.24 +Part-Species18-PreviousState = 12 +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=30 ! 18 Species, 28 Reactions +!--------------------------------------------------------------------! +!##################### Dissociation Reactions #######################! +!--------------------------------------------------------------------! +!--------- Reaction1: CH4 + M -> CH3 + H + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction1-Reactants=(/1,0,0/) +DSMC-Reaction1-Products=(/2,0,13,0/) +DSMC-Reaction1-Arrhenius-Prefactor=7.8047E+17 ! A_f +DSMC-Reaction1-Arrhenius-Powerfactor=-8.2 ! B_f +DSMC-Reaction1-Activation-Energy_K=59200.0 ! E_a +DSMC-Reaction1-NumberOfNonReactives=18 +DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction2: CH3 + M -> CH2 + H + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction2-Reactants=(/2,0,0/) +DSMC-Reaction2-Products=(/3,0,13,0/) +DSMC-Reaction2-Arrhenius-Prefactor=1.6938E-14 ! A_f +DSMC-Reaction2-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction2-Activation-Energy_K=45600 ! E_a +DSMC-Reaction2-NumberOfNonReactives=18 +DSMC-Reaction2-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction3: CH3 + M -> CH + H2 + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction3-Reactants=(/2,0,0/) +DSMC-Reaction3-Products=(/4,0,7,0/) +DSMC-Reaction3-Arrhenius-Prefactor=8.3029E-15 ! A_f +DSMC-Reaction3-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction3-Activation-Energy_K=42800 ! E_a +DSMC-Reaction3-NumberOfNonReactives=18 +DSMC-Reaction3-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction4: CH2 + M -> CH + H + M -------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction4-Reactants=(/3,0,0/) +DSMC-Reaction4-Products=(/4,0,13,0/) +DSMC-Reaction4-Arrhenius-Prefactor=6.6423E-15 ! A_f +DSMC-Reaction4-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction4-Activation-Energy_K=41800 ! E_a +DSMC-Reaction4-NumberOfNonReactives=18 +DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction5: CH2 + M -> C + H2 + M -------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction5-Reactants=(/3,0,0/) +DSMC-Reaction5-Products=(/7,0,12,0/) +DSMC-Reaction5-Arrhenius-Prefactor=2.1588E-16 ! A_f +DSMC-Reaction5-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction5-Activation-Energy_K=29700 ! E_a +DSMC-Reaction5-NumberOfNonReactives=18 +DSMC-Reaction5-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction6: CH + M -> C + H2 + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction6-Reactants=(/4,0,0/) +DSMC-Reaction6-Products=(/12,0,13,0/) +DSMC-Reaction6-Arrhenius-Prefactor=3.1551E-16 ! A_f +DSMC-Reaction6-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction6-Activation-Energy_K=33700 ! E_a +DSMC-Reaction6-NumberOfNonReactives=18 +DSMC-Reaction6-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction7a: N2 + M -> N + N + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction7-Reactants=(/5,0,0/) +DSMC-Reaction7-Products=(/11,0,11,0/) +DSMC-Reaction7-Arrhenius-Prefactor=1.1624E-08 ! A_f +DSMC-Reaction7-Arrhenius-Powerfactor=-1.6 ! B_f +DSMC-Reaction7-Activation-Energy_K=113200 ! E_a +DSMC-Reaction7-NumberOfNonReactives=13 +DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,14,15,16/) +!--------------------------------------------------------------------! +!--------- Reaction7b: N2 + N/C/H -> N + N + N/C/H ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction8-Reactants=(/5,0,0/) +DSMC-Reaction8-Products=(/11,0,11,0/) +DSMC-Reaction8-Arrhenius-Prefactor=4.9817E-08 ! A_f +DSMC-Reaction8-Arrhenius-Powerfactor=-1.6 ! B_f +DSMC-Reaction8-Activation-Energy_K=113200 ! E_a +DSMC-Reaction8-NumberOfNonReactives=5 +DSMC-Reaction8-NonReactiveSpecies=(/11,12,13,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction8: C2 + M -> C + C + M ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction9-Reactants=(/6,0,0/) +DSMC-Reaction9-Products=(/12,0,12,0/) +DSMC-Reaction9-Arrhenius-Prefactor=2.4909E-14 ! A_f +DSMC-Reaction9-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction9-Activation-Energy_K=71600 ! E_a +DSMC-Reaction9-NumberOfNonReactives=18 +DSMC-Reaction9-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction9: H2 + M -> H + H + M ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction10-Reactants=(/7,0,0/) +DSMC-Reaction10-Products=(/13,0,13,0/) +DSMC-Reaction10-Arrhenius-Prefactor=3.7031E-16 ! A_f +DSMC-Reaction10-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction10-Activation-Energy_K=48350 ! E_a +DSMC-Reaction10-NumberOfNonReactives=18 +DSMC-Reaction10-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction10: CN + M -> C + N + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction11-Reactants=(/8,0,0/) +DSMC-Reaction11-Products=(/11,0,12,0/) +DSMC-Reaction11-Arrhenius-Prefactor=4.2013E-16 ! A_f +DSMC-Reaction11-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction11-Activation-Energy_K=71000 ! E_a +DSMC-Reaction11-NumberOfNonReactives=18 +DSMC-Reaction11-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction11: HN + M -> N + H + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction12-Reactants=(/9,0,0/) +DSMC-Reaction12-Products=(/11,0,13,0/) +DSMC-Reaction12-Arrhenius-Prefactor=2.9890E-16 ! A_f +DSMC-Reaction12-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction12-Activation-Energy_K=37600 ! E_a +DSMC-Reaction12-NumberOfNonReactives=18 +DSMC-Reaction12-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction12: HCN + M -> CN + H + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction13-Reactants=(/10,0,0/) +DSMC-Reaction13-Products=(/8,0,13,0/) +DSMC-Reaction13-Arrhenius-Prefactor=5.9283E-04 ! A_f +DSMC-Reaction13-Arrhenius-Powerfactor=-2.6 ! B_f +DSMC-Reaction13-Activation-Energy_K=62845 ! E_a +DSMC-Reaction13-NumberOfNonReactives=18 +DSMC-Reaction13-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!################## Exchange & Radical Reactions ####################! +!--------------------------------------------------------------------! +!--------- Reaction13: CH3 + H -> CH2 + H2 --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction14-Reactants=(/2,13,0/) +DSMC-Reaction14-Products=(/3,7,0,0/) +DSMC-Reaction14-Arrhenius-Prefactor=2.1000E-14 ! A_f +DSMC-Reaction14-Arrhenius-Powerfactor=-0.56 ! B_f +DSMC-Reaction14-Activation-Energy_K=8000 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction2: CH + N2 -> HCN + N ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction15-Reactants=(/4,5,0/) +DSMC-Reaction15-Products=(/10,11,0,0/) +DSMC-Reaction15-Arrhenius-Prefactor=7.3065E-18 ! A_f +DSMC-Reaction15-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction15-Activation-Energy_K=11060 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction15: CH + C -> C2 + H -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction16-Reactants=(/4,12,0/) +DSMC-Reaction16-Products=(/6,13,0,0/) +DSMC-Reaction16-Arrhenius-Prefactor=3.3212E-16 ! A_f +DSMC-Reaction16-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction16-Activation-Energy_K=0.0 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction16: C2 + N2 -> CN + CN ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction17-Reactants=(/5,6,0/) +DSMC-Reaction17-Products=(/8,8,0,0/) +DSMC-Reaction17-Arrhenius-Prefactor=2.4909E-17 ! A_f +DSMC-Reaction17-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction17-Activation-Energy_K=21000 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction17: H2 + CN -> HCN + H ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction18-Reactants=(/7,8,0/) +DSMC-Reaction18-Products=(/10,13,0,0/) +DSMC-Reaction18-Arrhenius-Prefactor=1.8000E-25 ! A_f +DSMC-Reaction18-Arrhenius-Powerfactor=2.6 ! B_f +DSMC-Reaction18-Activation-Energy_K=960 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction18: CN + C -> C2 + N -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction19-Reactants=(/8,12,0/) +DSMC-Reaction19-Products=(/6,11,0,0/) +DSMC-Reaction19-Arrhenius-Prefactor=8.3029E-17 ! A_f +DSMC-Reaction19-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction19-Activation-Energy_K=13000 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction19: H2 + N -> NH + H -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction20-Reactants=(/7,11,0/) +DSMC-Reaction20-Products=(/9,13,0,0/) +DSMC-Reaction20-Arrhenius-Prefactor=2.6569E-16 ! A_f +DSMC-Reaction20-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction20-Activation-Energy_K=12650 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction20: N2 + C -> CN + N -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction21-Reactants=(/5,12,0/) +DSMC-Reaction21-Products=(/8,11,0,0/) +DSMC-Reaction21-Arrhenius-Prefactor=8.7014E-17 ! A_f +DSMC-Reaction21-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction21-Activation-Energy_K=22600 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction21: H2 + C -> CH + H -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction22-Reactants=(/7,12,0/) +DSMC-Reaction22-Products=(/4,13,0,0/) +DSMC-Reaction22-Arrhenius-Prefactor=6.6423E-16 ! A_f +DSMC-Reaction22-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction22-Activation-Energy_K=11700 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction22: N2 + H -> NH + N -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction23-Reactants=(/5,13,0/) +DSMC-Reaction23-Products=(/9,11,0,0/) +DSMC-Reaction23-Arrhenius-Prefactor=4.9817E-18 ! A_f +DSMC-Reaction23-Arrhenius-Powerfactor=0.50 ! B_f +DSMC-Reaction23-Activation-Energy_K=71400 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction23: CH4 + H -> CH3 + H2 --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction24-Reactants=(/1,13,0/) +DSMC-Reaction24-Products=(/2,7,0,0/) +DSMC-Reaction24-Arrhenius-Prefactor=2.1919E-26 ! A_f +DSMC-Reaction24-Arrhenius-Powerfactor=3.0 ! B_f +DSMC-Reaction24-Activation-Energy_K=4045 ! E_a +!########## IONIZED SPECIES ########################################### +!--------------------------------------------------------------------! +!--------- Reaction7c: N2 + e -> N + N + e ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction25-Reactants=(/5,14,0/) +DSMC-Reaction25-Products=(/11,14,11,0/) +DSMC-Reaction25-Arrhenius-Prefactor=4.98161783020654E-06 ! A_f +DSMC-Reaction25-Arrhenius-Powerfactor=-1.6 ! B_f +DSMC-Reaction25-Activation-Energy_K=113200 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction24: N + N -> N2+ + e ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction26-Reactants=(/11,11,0/) +DSMC-Reaction26-Products=(/15,14,0,0/) +DSMC-Reaction26-Arrhenius-Prefactor=7.30637281763626E-23 +DSMC-Reaction26-Arrhenius-Powerfactor=1.5 ! B_f +DSMC-Reaction26-Activation-Energy_K=67500 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction25: C + N -> CN+ + e ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction27-Reactants=(/11,12,0/) +DSMC-Reaction27-Products=(/16,14,0,0/) +DSMC-Reaction27-Arrhenius-Prefactor=1.66053927673551E-15 +DSMC-Reaction27-Arrhenius-Powerfactor=1.5 ! B_f +DSMC-Reaction27-Activation-Energy_K=164400 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction26: N + e -> N+ + e + e ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction28-ReactionModel=QK +DSMC-Reaction28-Reactants=(/11,14,0/) +DSMC-Reaction28-Products=(/17,14,14,0/) +!--------------------------------------------------------------------! +!--------- Reaction27: C + e -> C+ + e + e ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction29-ReactionModel=QK +DSMC-Reaction29-Reactants=(/12,14,0/) +DSMC-Reaction29-Products=(/18,14,14,0/) +!--------------------------------------------------------------------! +!--------- Reaction28: CN+ + N -> CN + N+ ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction30-Reactants=(/16,11,0/) +DSMC-Reaction30-Products=(/8,17,0,0/) +DSMC-Reaction30-Arrhenius-Prefactor=1.6273284912008E-17 +DSMC-Reaction30-Arrhenius-Powerfactor=0. +DSMC-Reaction30-Activation-Energy_K=40700 From 683f05fba3fc3bf73b481d6f864a0c1b88555545 Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Thu, 20 Oct 2022 11:46:04 +0200 Subject: [PATCH 035/222] Read-in of reactions in the database --- tools/species_database/DSMC2.ini | 113 +++++++++++ tools/species_database/Rad.dat | 136 +++++++++++++ tools/species_database/Species_Database.h5 | Bin 55824 -> 117616 bytes .../create_species_database.py | 183 +++++++++++++++++- 4 files changed, 422 insertions(+), 10 deletions(-) create mode 100755 tools/species_database/DSMC2.ini create mode 100755 tools/species_database/Rad.dat diff --git a/tools/species_database/DSMC2.ini b/tools/species_database/DSMC2.ini new file mode 100755 index 000000000..5405b555d --- /dev/null +++ b/tools/species_database/DSMC2.ini @@ -0,0 +1,113 @@ +! =============================================================================== ! +! Species1, CO2 +! =============================================================================== ! +Part-Species1-SpeciesName=CO2 +Part-Species1-PolyatomicMol=true +Part-Species1-InteractionID=2 +Part-Species1-Tref=273 +Part-Species1-dref=5.10E-10 +Part-Species1-omega=0.24 +Part-Species1-NumOfAtoms=3 +Part-Species1-LinearMolec=true +Part-Species1-CharaTempVib1=959.2 +Part-Species1-CharaTempVib2=959.2 +Part-Species1-CharaTempVib3=1917 +Part-Species1-CharaTempVib4=3378.1 +Part-Species1-Ediss_eV=5.43 +Part-Species1-HeatOfFormation_K=-47328.35 +Part-Species1-CharaTempRot = 0.6 +Part-Species1-SymmetryFactor = 2 +! =============================================================================== ! +! Species2, CO +! =============================================================================== ! +Part-Species2-SpeciesName=CO +Part-Species2-InteractionID=2 +Part-Species2-Tref=273 +Part-Species2-dref=4.17E-10 +Part-Species2-omega=0.24 +Part-Species2-CharaTempVib=3120.7 +Part-Species2-Ediss_eV=11.06 +Part-Species2-HeatOfFormation_K=-13293.70 +Part-Species2-CharaTempRot = 2.8 +Part-Species2-SymmetryFactor = 1 +! =============================================================================== ! +! Species3, O +! =============================================================================== ! +Part-Species3-SpeciesName=O +Part-Species3-InteractionID=1 +Part-Species3-Tref=273 +Part-Species3-dref=3.49E-10 +Part-Species3-omega=0.24 +Part-Species3-HeatOfFormation_K=29969.45 +! =============================================================================== ! +! Species4, O2 +! =============================================================================== ! +Part-Species4-SpeciesName=O2 +Part-Species4-InteractionID = 2 +Part-Species4-Tref =273 +Part-Species4-dref = 3.96E-10 +Part-Species4-omega=0.24 +Part-Species4-CharaTempVib=2272.8 +Part-Species4-Ediss_eV=5.115 +Part-Species4-CharaTempRot = 2.1 +Part-Species4-SymmetryFactor = 2 +Part-Species4-HeatOfFormation_K=0.0 + +! =============================================================================== ! +! Surface Chemistry +! =============================================================================== ! +Surface-NumOfReactions = 5 +! Adsorption of CO +Surface-Reaction1-SurfName = Adsorption_CO +Surface-Reaction1-Type = A +Surface-Reaction1-Reactants = (/2,0/) +Surface-Reaction1-NumOfBoundaries = 5 +Surface-Reaction1-Boundaries = (/1,3,4,5,6/) +Surface-Reaction1-StickingCoefficient = 1.0 +Surface-Reaction1-EqConstant = 0.6 +Surface-Reaction1-ReactHeat = 135 +Surface-Reaction1-HeatScaling = 61 +! Adsorption of O2 +Surface-Reaction2-SurfName = Adsorption_O2 +Surface-Reaction2-Type = A +Surface-Reaction2-Reactants = (/4,0/) +Surface-Reaction2-NumOfBoundaries = 5 +Surface-Reaction2-Boundaries = (/1,3,4,5,6/) +Surface-Reaction2-StickingCoefficient = 0.42 +Surface-Reaction2-DissOrder = 2 +Surface-Reaction2-EqConstant = 1.49 +Surface-Reaction2-ReactHeat = 230 +! Desorption of CO +Surface-Reaction3-SurfName = Desorption_CO +Surface-Reaction3-Type = D +Surface-Reaction3-Products = (/2,0/) +Surface-Reaction3-NumOfBoundaries = 5 +Surface-Reaction3-Boundaries = (/1,3,4,5,6/) +Surface-Reaction3-Energy = 147 +Surface-Reaction3-LateralInteraction = -153 +Surface-Reaction3-Ca = 16 +Surface-Reaction3-Cb = -15 +Surface-Reaction3-ReactHeat = 135 +Surface-Reaction3-HeatScaling = 61 +! Desorption of O2 +Surface-Reaction4-SurfName = Desorption_O2 +Surface-Reaction4-Type = D +Surface-Reaction4-Products = (/4,0/) +Surface-Reaction4-NumOfBoundaries = 5 +Surface-Reaction4-Boundaries = (/1,3,4,5,6/) +Surface-Reaction4-Energy = 222 +Surface-Reaction4-LateralInteraction = -69.6 +Surface-Reaction4-DissOrder = 2 +Surface-Reaction4-Ca = -1.7 +Surface-Reaction4-Cb = 0 +Surface-Reaction4-ReactHeat = 230 +! Langmuir-Hinshlewood formation of CO2 +Surface-Reaction5-SurfName = LH_Oxidation_CO +Surface-Reaction5-Type = LH +Surface-Reaction5-Reactants = (/2,4/) +Surface-Reaction5-Products = (/1,0/) +Surface-Reaction5-NumOfBoundaries = 5 +Surface-Reaction5-Boundaries = (/1,3,4,5,6/) +Surface-Reaction5-Energy = 84 +Surface-Reaction5-Prefactor = 2.5E-3 +Surface-Reaction5-ReactHeat = 71 diff --git a/tools/species_database/Rad.dat b/tools/species_database/Rad.dat new file mode 100755 index 000000000..65a5bac7d --- /dev/null +++ b/tools/species_database/Rad.dat @@ -0,0 +1,136 @@ +! =============================================================================== ! +! Species1, H2 +! =============================================================================== ! +Part-Species1-SpeciesName = H2 +Part-Species1-MassIC = 3.34800E-27 +Part-Species1-ChargeIC = 0.0 +Part-Species1-InteractionID = 2 +Part-Species1-Tref = 1000 +Part-Species1-dref = 2.68E-10 +Part-Species1-omega = 0.407 +Part-Species1-HeatOfFormation_K = 0.0 +Part-Species1-CharaTempVib = 6332.37 +Part-Species1-Ediss_eV = 4.47 +! =============================================================================== ! +! Species2, H +! =============================================================================== ! +Part-Species2-SpeciesName = H +Part-Species2-MassIC = 1.67400E-27 +Part-Species2-ChargeIC = 0.0 +Part-Species2-InteractionID = 1 +Part-Species2-Tref = 1000 +Part-Species2-dref = 2.581E-10 +Part-Species2-omega = 0.407 +Part-Species2-HeatOfFormation_K = 26159.76 +! =============================================================================== ! +! Species3, e +! =============================================================================== ! +Part-Species3-SpeciesName = electron +Part-Species3-MassIC = 9.11E-31 +Part-Species3-ChargeIC = -1.60217653E-19 +Part-Species3-InteractionID = 4 +Part-Species3-Tref = 1000 +Part-Species3-dref = 2.817920E-15 +Part-Species3-omega = 0.407 +! =============================================================================== ! +! Species4, H2Ion +! =============================================================================== ! +Part-Species4-SpeciesName = H2Ion1 +Part-Species4-MassIC = 3.3470890E-27 +Part-Species4-ChargeIC = 1.60217653E-19 +Part-Species4-InteractionID = 20 +Part-Species4-Tref = 1000 +Part-Species4-dref = 3.883E-10 +Part-Species4-omega = 0.407 +Part-Species4-CharaTempVib = 3341.01 +Part-Species4-Ediss_eV = 2.65 +! =============================================================================== ! +! Species5, HIon +! =============================================================================== ! +Part-Species5-SpeciesName = HIon1 +Part-Species5-MassIC = 1.6730890E-27 +Part-Species5-ChargeIC = 1.60217653E-19 +Part-Species5-InteractionID = 10 +Part-Species5-Tref = 1000 +Part-Species5-dref = 3.912E-10 +Part-Species5-omega = 0.407 +! =============================================================================== ! +! Species6, H3Ion +! =============================================================================== ! +Part-Species6-SpeciesName = H3Ion1 +Part-Species6-MassIC = 5.0210890E-27 +Part-Species6-ChargeIC = 1.60217653E-19 +Part-Species6-InteractionID = 20 +Part-Species6-PolyatomicMol = T +Part-Species6-NumOfAtoms = 3 +Part-Species6-LinearMolec = F +Part-Species6-Tref = 1000 +Part-Species6-dref = 4.5E-10 ! Guess +Part-Species6-omega = 0.407 +Part-Species6-CharaTempVib1 = 4572.92 +Part-Species6-CharaTempVib2 = 3627.94 +Part-Species6-CharaTempVib3 = 3627.94 +Part-Species6-Ediss_eV = 4.51 +Part-Species6-HeatOfFormation_K = 132803.52 +! =============================================================================== ! +! Reactions +! =============================================================================== ! +DSMC-NumOfReactions=11 +! ---------------------------------------------------- +! Electron impact +! ---------------------------------------------------- +! Dissociation: H2 + e --> H + H + e +DSMC-Reaction4-ReactionModel = XSec +DSMC-Reaction4-Reactants = (/1,3,0/) +DSMC-Reaction4-Products = (/2,3,2,0/) +! ---------------------------------------------------- +! Ionization: H2 + e --> H2Ion1 + electron + electron +DSMC-Reaction5-ReactionModel = XSec +DSMC-Reaction5-Reactants = (/1,3,0/) +DSMC-Reaction5-Products = (/4,3,3,0/) +! ---------------------------------------------------- +! Dissociative ionization: H2 + e --> H + HIon + electron + electron +DSMC-Reaction6-ReactionModel = XSec +DSMC-Reaction6-Reactants = (/1,3,0/) +DSMC-Reaction6-Products = (/2,3,3,5/) +! ---------------------------------------------------- +! H2Ion1 impact +! ---------------------------------------------------- +! H3Ion formation: H2 + H2Ion1 --> H + H3Ion +DSMC-Reaction7-ReactionModel = XSec +DSMC-Reaction7-Reactants = (/1,4,0/) +DSMC-Reaction7-Products = (/2,6,0,0/) +! Charge exchange: H2 + H2Ion1 --> H2Ion1 + H2 +DSMC-Reaction8-ReactionModel = XSec +DSMC-Reaction8-Reactants = (/1,4,0/) +DSMC-Reaction8-Products = (/4,1,0,0/) +! Dissociative charge exchange: H2 + H2Ion1 --> H + H2 + HIon1 +DSMC-Reaction9-ReactionModel = XSec +DSMC-Reaction9-Reactants = (/1,4,0/) +DSMC-Reaction9-Products = (/2,1,5,0/) +! ---------------------------------------------------- +! HIon1 impact +! ---------------------------------------------------- +! Charge exchange: H2 + HIon1 --> H2Ion1 + H +DSMC-Reaction10-ReactionModel = XSec +DSMC-Reaction10-Reactants = (/1,5,0/) +DSMC-Reaction10-Products = (/4,2,0,0/) +! ---------------------------------------------------- +! H3Ion1 impact +! ---------------------------------------------------- +! Ionization: H2 + H3Ion1 --> H2Ion1 + H3Ion1 + electron +DSMC-Reaction11-ReactionModel = XSec +DSMC-Reaction11-Reactants = (/1,6,0/) +DSMC-Reaction11-Products = (/4,6,3,0/) +! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H + H2Ion1 +DSMC-Reaction1-ReactionModel = XSec +DSMC-Reaction1-Reactants = (/1,6,0/) +DSMC-Reaction1-Products = (/1,2,4,0/) +! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H + H + HIon1 +DSMC-Reaction2-ReactionModel = XSec +DSMC-Reaction2-Reactants = (/1,6,0/) +DSMC-Reaction2-Products = (/1,2,2,5/) +! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H2 + HIon1 +DSMC-Reaction3-ReactionModel = XSec +DSMC-Reaction3-Reactants = (/1,6,0/) +DSMC-Reaction3-Products = (/1,1,5,0/) diff --git a/tools/species_database/Species_Database.h5 b/tools/species_database/Species_Database.h5 index 4ac06032f25dcdc7694aaa6e9e2d5683bce01c41..e7de9e8e36eb79ea3c9b1d38302dcd8117a40eef 100644 GIT binary patch delta 18435 zcmeHP3s_Xgy+4nIJ-eW+fU=0dp}tmLSrv5^l~qvJ7b0r1phnQ3kcd1)qC~?csSV~K ztkVZEYOt}9*rs9KCLzt^Zqk@*8Xu%zdxK5e(B9VAChbRVn||Dz+j?jIGiT2^iz|>O z>G$2Q`+c1G{pZZg|1mTFc^=w+AohRL*k%)J-{!p;2hol+i!U(1qmFwd6cB9Fi_7n* zDsQN&*~QUcaYgwy4au$BQ@_1@TSZoWWkq$>?uPn(=%g_fImB_i=xt4$7RaL6EG)aj zK>-W6o`saI_4(fAk-XVr?qDff=6Fj}%@F2KtHuK>If@G8Ko0T%*Z1GotA zTENAC*8yG+cmv>D0pAAL4Y&kwDd3HOHv!%Z_;$cs0G9zS2fP*VHo$iPt^m9p@D9M0 zfU5xC3HUC+I{{Y%-UYY@a4q0E!1aK418xAk2XG_cy8-V7ybo{_;Cle?2YdkVy?~nm zdjQ`D_+rv7iZu&w9L2!yCf`Pf_)Nwmc=R@Ri_Ach`>yejWQJw9ZD%N2PV_(5{Hf@S?4BM*KV^g zx!ncyRc|B>qd5nW7H1xfC6~COnw|T~8)~Ynwymz&i7sYML=R3#^9GjqBjs}5+igPu zpX9Gevm3mD2^bswu~V+{s4pTiI)W>sMRFavUSA68nIH+SnFLuLk??>yh<-l2==PPY{E>+sgE@@XaOk-ShqaW0ErN!_G!Ee~R>PrJ$6=h# z{I}AQTX^*I>{T;4r&2F{JLro(rN(hxXn#Bxr{T~SopKIN9r)e8d)u zj-(WsuZ7P!uro|f85JEX75XQm?;VqM+SqHgIg$vkn@L?Xl_sanQdd&tZf!|}q;`kT z+0l5ToLSBJF4CzvF5g8uISEOpCm{q}Atkwd7P8k|ej$6$(z#d!i{|p_Yuw4{uVQD# zwubuPG!2)#yk^&QE*BRBfMWrdPf1#fIIrR)=^QFDXt}OQxPO@16*g#XK`QBVLgg$R zZ*F1nwnc=hWK`FD(x;r=lHktq`gS2Xoz`}l&TcwK(7TW3?IXP(|3=W(V>B(XQpZ78 zr``9`lC1)6iG?CYsbdgR{n4xqL>k%3)h3z6SC@Co!wI!Ddd#9q0 zlJ$*MMp|(a2RGHx8nrqz7%%XkI<*|%ps&vJ=+5auwTK5aaz*qN=b1}t$IYm=d8Bqc z*dID(ka!P^w>k->G^D+=3Dw5lITjO&^)D{4!0TJ8bm6Y>vT@&{+3mFR=Qyd+m7Lw- zbJ~yIFemnG+S(523YehvY-Pu30TzLVsAsl|)pd1{ocjQhoZpXi?Tf0ze?jls15h2V!iD5GOOYS5MDdceIMC(-H6Ot}jn5Cm;>!>*# zN=cm`e>sq+^}sRut?+no~YM4n8S6#xBYzb^g8YXQ`jn;21CgQqOP zBDbgDBFB@+88?cY36YZt^X)0v3{Ez%$8ho3xvbk)U0s2fiA(V^vZfvtX4rTe+LE=J zUyK$Q*YNo$D|-+6L-u^FjSY{t|Fo`Pkc}-Pu`vp?MhJaiV&laN_~(3BV`GEhc?})T zP2qFU>Wrz3ASPaz@)erg^90xt+gTe$%tkEL6dwm>LtXO?;<2Q6h=B~mYPh&*cvZy6 z87fK4hb@H*n=%uANy9Of6--qLrmDJ;seX{rDn0kY-}TLLMWQmf8nP*ZnZEWc7I+cW z`;HStZ)l2vR)d&m?Lt^-)RP+_HjQCAA2o;z<=Z$C22U^w_;6!kQgEQ4Wm z-N#PUlL>FPZ7mNz^BTIjLSJcO+|5xifu^)jE_`Wm5 z>rq$#^@&87D&p!ef7O8-hZ3MLgSfFJK><>*J6jf{QbWX%tUpR!bMG76LgdVJC{qjK z*I;0M_Y@XrnUDx}k$&`vZPR<-8qnH>$OYrv1;a??vg_oU9wL|V{I4tb&oX{;BQw3& z4TD2%Mx+4Kh$;~q39ZVQme#jnq*9RifNC8wFVH%D>GT%<>aSiD23ZGmUU(X+3lGb9 zY)(;awBwQAYi)F*)h0&_B^PNnTeH+=vtB3Hh7h@od5($m-u#Vju0kpehWNU(YAcGj z&?en=)L{61(p3p^X++(;Gw zs!s8Pp|!EU)Y5o#w&RlLhRlC4^I`E;cGal9z)EZKdbiHid18+v@J7ZZ^ zL5%f&I!PMi&*GkVHXSgSZIlcbbJm0you8}%-~0iL&_x|kRE+t4&iD(^CB&+K5-(avB0FX04b!&80Wn6tNQAzABMC&vRGLE z*cE7dO4c#Z_7o~Mw4j$>dH2fu``=RvB1=r%^n#2Nb-Blf=DzW$Mn{p0ovK43!`cmo z)yScGBp%hYtGv;$$}6g`XsoK)vwK}bc|!#(dg65&XXs?k43YWf&b{|3y>rJx2OZ~- zV;%P9Ny>sWoT#!+)CD?G7lw#x4Dm3jm-5sVZ#V{1bPSg17`Q?h4Dvj~;y{+vOM)$A zt&T%6=5QD4Um%;@XQ}hD!r_VRl!U;ODBam;_MD_II-W#loW)T}%Up-&JJ%D^gr3v> z^hM(Y0oTOh{9d6a15GH%5$vb&RuSD=_Yp)knz}K%>Tg-ng!kK@Mux%@LfLoGsluGa zEo^IB*+Wy$d6`Hw;JQN6sVBf*-(QImLhtjwGouCMES7}6=g^AcGW3(;y@K@_v}#?B z;CSBWn+@jz=+*V+X6q?htin~*Q_q!qS)Z=*MM}54L_-@5xW3E!bgqk(u4M7#yoUU0 z--m#0onzel3y9zbe&zK&Mbr@GS2%orlH?2g2A@#5twQHZXr8;#ta3&_bQcF}bUiwr zKM^@fN(Jk)=<6jpg6Cyoa(tRG-u)UaTG6rcRZ6!6n8i%;>of+RnO*0RZL>w_44`?N zFPYV(=zn&2gt9KQzfwj&xIG?kh_JflE75&lONF|XE|55~+1rWHt7pq_C0G6kXE`Cr zZ=eZPCxmNnpqHx(Ox!z^pA5~+vQrXTE~D`~8_lY@bjodD%5CJ&p@!-lp{$4Lwz%)7 zdfi+

!pSmnq4$T+yfN{|`!Au6TWypw)E#3|ft)4h!>BG`vXh5X56#bkQf_qDhAlR><*Y`A<)soTC{3)oiu~g{(cl1VMj?jg9(etJD_n7en z$1iYqK=!>&Lf}05-rf^J_giSyz5FvOus0cC*xXyT* zqKKZ}9>RU&BQ)>OB}-+9%t(HsNwEAD9eYBxNeTMfLwP|9m7)W!%hBP7V+GG2mD+Lk zGn}{^Acc_zwTrz&zpgW^83EMjOU|) z80AkqHI?T_0}cpjt1!A24t*3Fu1R$*bG2g{+ z5`h@{dPvdXCZXlW=)z&un43Y_?vJS}m&ggDXpPnv zXGV{nP}xQiosjj3`^CMZcy#;;m2EVzb#@qp?vK&oH&>vx4k=DKR#Q4urvVxnK9v^b zNPyUbitR>#_p4_xh+Ou_^}M98+u z82%2~Uu+T`7HpyyYl1a1#y|Oo2XKmH9wp;*!Z%(oic*S?Ws?S1I(o!7fsSvDi7_Gm z0TmsVQJ{`?waQc~d=GRrrJy*p`c1VO;-MOP-?WN7HjogHePUY%@AKhWA^p~MzSQhU zqXpRobnGE_P};F*)LUvvyhC=XhI6;|m zAqnvx(1n=Barn#|100WGrmUQBleFXv8^^<$Hl`WLPPRF23gbgp{46vY$n*3We9R{i2O8$;9>oqIG4WQLd?Kv zF4rZ_XK7SZkow`ce_)N@yo{CkWm!P+qgo5VHNV6agDikm!#~Y#L*i3^MIEg)RGPCVBpvs4`d((YDQ$#LGyZel zNng+>$5k@AWhaf1m_V+j`gFC7Ze#jdS-OE0`gG3ClrGysLo&Z1zaE?phC3R~ae-SY z>T}~UIV(=N)~Mlwa*fM_6#3<$yGJ@<~VY8FXgKMQ~bKsbO zRB7A{!Ze4Vz8W*=^riPXBk4*Fgy;?{1ku61NvA_^NvIBvx2a5nO+a+0ELU~#FtZL@ z2Th&pbclpIsahSJVTFKt*s9aPT^6c?D{OYChaIX89BT~2)*-NsHOC6v$2INFI7o-0 zutGpRROxi+-5#ogJ8X91Vz_GRV%m18x^%LxIc!}teOjlBG)R}Su)+{sdTVsLc&bBn z**k_BZE%|+x^(WQx;XZzx)klEIfku^rH*E>lfpFhVj852C#*0;7f+*37h6N9E-hiR zgX?diy7b+n>N2ozgt~O!O*8cF)9ZqlxcKh2+D}SNVPzqz*beAa>1hg8r9EtRqRN1W zs?u`5s!E4vgsPO?OEY*#VVY`*3Q?uR+!0n7qD#*MI$ieO7phBV*z81?_CrLMY~f*5 z6&D*phiGB;a^)`X8kSPIqPvDIWMGXF&iN@(b3Oh@8t(K-x(rG#Yq)_(#+E{~9(rFqPq;rxd`Nqn@s!K_z zsXnjoJHf$7GYiqxYV@F5?Fw5hq*iMm(bcN;q0m~rHi=3y*l`d?-sx4VGr%S~L=*BG zazNG0kaRkX8l*#iSRsfG{YP{fmIPFsi{YbkNM+bUKV4qyslO zoFSne9@FVy{Z^;1@ITd_%b+7MXu9j2hM)bdF1Ku* z(hQumh+Sciqe;~y>uM{uRpErC#wixkq!f+Gh9_LoP$H(l5xhc8C5QY8iU32IFJnaJ z%R2Yqe_f15R5~NTZRhO{HCu?amPxO^%rNr|3WYZN8f2^J!^S zU$oK4o|VpMB|4*(j>u?ahg7w|kS*<8W8a_KCOrGO8;$?v7u?dwuC2~!cj}CG*N{dd zW0ca;$foKDjP~$L?kj08KmR!!ZJN!~(DwydO&OTUKnqq=A_QW!7=@x+?-Kg6adMTi z9gol8$e9>EV*6rF#{}5ihHqXHlud0mu~9xpMa>dD4P%D}F#cgpIC3CI!q4S7W zQTSIt1HAn{e9glh2jZg8WfPU2&Q`eK_P+A5t?px+1Z5*xu?5o+ZDFUIL)^5THjzoM za0{MThMY@IB6dgYpJ|v`Ce9t@|8-AZq`$u>CSr&=6%kNrIHY2R-+{8rw?ERh>94MZ zYL=V0YVs|iZSsHro0|CMGlM5T9eyWD$4Q4Zog!^QQI@n5T_=hI*Q30SAC~J;Qj_W) sq*?gc=&9>Ve);yRcmDG&M?NVXmgPu0RFoxcQ)jtJI?GMQmb>f!0I@&TQUCw| delta 5064 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 diff --git a/tools/species_database/create_species_database.py b/tools/species_database/create_species_database.py index 24cf9eecf..1da0f97f7 100644 --- a/tools/species_database/create_species_database.py +++ b/tools/species_database/create_species_database.py @@ -1,3 +1,5 @@ +from cmath import log +from matplotlib.rcsetup import validate_bool import numpy as np import h5py from argparse import ArgumentParser @@ -14,6 +16,8 @@ help="Output file name", metavar="FILE", default="Species_Database.h5") parser.add_argument("-r", "--reference", dest="reference", help="Reference for species data", default="Unknown") +parser.add_argument("-s", "--radiation", dest="rad_file_name", + help="Radiation file to read-in parameters", metavar="FILE", default="Rad.dat") args = parser.parse_args() @@ -49,9 +53,41 @@ def is_float(value): hdf_xsec_group = h5_species.create_group('Cross-Sections') hdf_xsec_group.attrs['* Created'] = date.today().strftime("%B %d, %Y") +hdf_rad_group = 'Radiation' +if hdf_rad_group in h5_species.keys(): + print('Group Radiation already exists.') + hdf_rad_group = h5_species['Radiation'] + hdf_rad_group.attrs['* Last Modified'] = date.today().strftime("%B %d, %Y") +else: + print('Group Radiation does not exist, creating new group.') + hdf_rad_group = h5_species.create_group('Radiation') + hdf_rad_group.attrs['* Created'] = date.today().strftime("%B %d, %Y") + +hdf_reac_group = 'Reaction' +if hdf_reac_group in h5_species.keys(): + print('Group Reaction already exists.') + hdf_reac_group = h5_species['Reaction'] + hdf_reac_group.attrs['* Last Modified'] = date.today().strftime("%B %d, %Y") +else: + print('Group Reaction does not exist, creating new group.') + hdf_reac_group = h5_species.create_group('Reaction') + hdf_reac_group.attrs['* Created'] = date.today().strftime("%B %d, %Y") + +hdf_surf_group = 'Surface-Chemistry' +if hdf_surf_group in h5_species.keys(): + print('Group Surface-Chemistry already exists.') + hdf_surf_group = h5_species['Surface-Chemistry'] + hdf_surf_group.attrs['* Last Modified'] = date.today().strftime("%B %d, %Y") +else: + print('Group Surface-Chemistry does not exist, creating new group.') + hdf_surf_group = h5_species.create_group('Surface-Chemistry') + hdf_surf_group.attrs['* Created'] = date.today().strftime("%B %d, %Y") + +logical_list = ['PolyatomicMol', 'LinearMolec'] + # Read-in of DSMC.ini parameters and electronic state with open(args.ini_filename) as file: - array_dict = {} + spec_dict = {} for line in file: if not line.startswith('!'): if line.startswith('Part-'): @@ -60,24 +96,24 @@ def is_float(value): if var_name[1].startswith('SpeciesName'): hdf_species = var_value species_count = var_name[0] - array_dict[species_count] = hdf_species + spec_dict[species_count] = hdf_species if hdf_species in hdf_species_group.keys(): print('Species already exists: ', hdf_species) hdf_species = hdf_species_group[hdf_species] elif hdf_species == 'electron': print('Species added to the database: ', hdf_species) hdf_species = hdf_species_group.create_dataset(hdf_species,data=[0]) - hdf_species.attrs['* Created'] = 1 #date.today().strftime("%B %d, %Y, %H:%M:%S") + hdf_species.attrs['* Created'] = date.today().strftime("%B %d, %Y") else: if hdf_species in h5_electronic.keys(): hdf_input_data = h5_electronic[hdf_species] print('Species added to the database: ', hdf_species) hdf_species = hdf_species_group.create_dataset(hdf_species,data=hdf_input_data) - hdf_species.attrs['* Created'] = 1 #date.today().strftime("%B %d, %Y, %H:%M:%S") + hdf_species.attrs['* Created'] = date.today().strftime("%B %d, %Y") else: print('Species added to the database, but electronic levels are unknown: ', hdf_species) hdf_species = hdf_species_group.create_dataset(hdf_species,data=[0]) - hdf_species.attrs['* Created'] = 1 #date.today().strftime("%B %d, %Y, %H:%M:%S") + hdf_species.attrs['* Created'] = date.today().strftime("%B %d, %Y") with open(args.ini_filename) as file: for line in file: @@ -88,19 +124,26 @@ def is_float(value): if not var_name[1].startswith('SpeciesName'): species_count = var_name[0] - hdf_species = array_dict[species_count] + hdf_species = spec_dict[species_count] hdf_species = hdf_species_group[hdf_species] if var_name[1] in hdf_species.attrs: print('Species parameter is already set: ', var_name[1]) #raus?? else: if is_float(var_value): var_value = float(var_value) - hdf_species.attrs[var_name[1]] = var_value - print('Species parameter set: ', var_name[1]) #raus?? + if var_name[1] not in logical_list: + hdf_species.attrs[var_name[1]] = var_value + print('Species parameter set: ', var_name[1]) #raus?? + else: + if 'F' in var_value or 'false' in var_value: + var_value = 0 + else: + var_value = 1 + hdf_species.attrs[var_name[1]] = var_value + print('Species parameter set: ', var_name[1]) #raus?? # Write attributes for source and time of retrieval hdf_species.attrs['* Reference'] = args.reference - hdf_species.attrs['* Created'] = 1 #date.today().strftime("%B %d, %Y, %H:%M:%S") - hdf_species.attrs['* Last Modified'] = 2#date.today().strftime("%B %d, %Y, %H:%M:%S") + hdf_species.attrs['* Created'] = date.today().strftime("%B %d, %Y") # Copy cross-section data for dataset in h5_crosssection.keys(): @@ -109,6 +152,126 @@ def is_float(value): else: print('Cross-section added: ', dataset) hdf_xsec_group.copy(source=h5_crosssection[dataset],dest=hdf_xsec_group) + +# Radiation data +species_list = ['N','O','NIon1','OIon1','H','Xe','XeIon1','XeIon2','Ar','ArIon1','ArIon2'] +for rad_spec in species_list: + if rad_spec in hdf_rad_group.keys(): + print('Radiative species already exists: ', rad_spec) + rad_spec_group = hdf_rad_group[rad_spec] + else: + print('Radiative species added to the database: ', rad_spec) + rad_spec_group = hdf_rad_group.create_group(rad_spec) + rad_spec_group.attrs['* Created'] = date.today().strftime("%B %d, %Y") + lines = rad_spec_group.create_dataset('Lines',data=[0]) + levels = rad_spec_group.create_dataset('Levels',data=[0]) + +reac_attr_list = ['Reactants', 'Products', 'NonReactiveSpecies'] + +# Read-in of gas-phase reaction data +with open(args.ini_filename) as file: + reac_dict = {} + for line in file: + if not line.startswith('!'): + if line.startswith('DSMC-Reaction'): + var_name = line.strip().replace(" ","").replace("DSMC-Reaction","").split('=')[0].split('-',1) + var_value = line.strip().replace(" ","").replace("DSMC-Reaction","").split('=')[1].split('!', 1)[0] + if var_name[1].startswith('ReactionName'): + hdf_reac = var_value + reac_count = var_name[0] + reac_dict[reac_count] = hdf_reac + if hdf_reac in hdf_reac_group.keys(): + print('Reaction already exists: ', hdf_reac) + hdf_reac = hdf_reac_group[hdf_reac] + else: + print('Reaction added to the database: ', hdf_reac) + hdf_reac = hdf_reac_group.create_dataset(hdf_reac,data=[0]) + hdf_reac.attrs['* Created'] = date.today().strftime("%B %d, %Y") + +with open(args.ini_filename) as file: + for line in file: + if not line.startswith('!'): + if line.startswith('DSMC-Reaction'): + var_name = line.strip().replace(" ","").replace("DSMC-Reaction","").split('=')[0].split('-',1) + var_value = line.strip().replace(" ","").replace("DSMC-Reaction","").split('=')[1].split('!', 1)[0] + + if not var_name[1].startswith('ReactionName'): + reac_count = var_name[0] + hdf_reac = reac_dict[reac_count] + hdf_reac = hdf_reac_group[hdf_reac] + if var_name[1] in hdf_reac.attrs: + print('Reaction parameter is already set: ', var_name[1]) + else: + if is_float(var_value): + var_value = float(var_value) + if var_name[1] not in reac_attr_list: + hdf_reac.attrs[var_name[1]] = var_value + else: + spec_name_list = '' + var_value = var_value.replace(',0', '').replace('(/', '').replace('/)', '').split(',') + for val in var_value: + spec_name_list = spec_name_list + ', ' + spec_dict[val] + spec_name_list = spec_name_list.replace(', ', '', 1) + hdf_reac.attrs[var_name[1]] = spec_name_list + print('Reaction parameter set: ', var_name[1]) + # Write attributes for source and time of retrieval + hdf_reac.attrs['* Reference'] = args.reference + hdf_reac.attrs['* Created'] = date.today().strftime("%B %d, %Y") + +surf_attr_list = ['Reactants', 'Products'] +surf_wo_readin = ['Boundaries', 'NumOfBoundaries', 'Inhibition', 'Promotion'] + +# Read-in of gas-surface reaction data +with open(args.ini_filename) as file: + surf_dict = {} + for line in file: + if not line.startswith('!'): + if line.startswith('Surface-Reaction'): + var_name = line.strip().replace(" ","").replace("Surface-Reaction","").split('=')[0].split('-') + var_value = line.strip().replace(" ","").replace("Surface-Reaction","").split('=')[1].split('!', 1)[0] + if var_name[1].startswith('SurfName'): + hdf_surf = var_value + surf_count = var_name[0] + surf_dict[surf_count] = hdf_surf + if hdf_surf in hdf_surf_group.keys(): + print('Surface reaction already exists: ', hdf_surf) + hdf_surf = hdf_surf_group[hdf_surf] + else: + print('Surface reaction added to the database: ', hdf_surf) + hdf_surf = hdf_surf_group.create_dataset(hdf_surf,data=[0]) + hdf_surf.attrs['* Created'] = date.today().strftime("%B %d, %Y") + +with open(args.ini_filename) as file: + for line in file: + if not line.startswith('!'): + if line.startswith('Surface-Reaction'): + var_name = line.strip().replace(" ","").replace("Surface-Reaction","").split('=')[0].split('-') + var_value = line.strip().replace(" ","").replace("Surface-Reaction","").split('=')[1].split('!', 1)[0] + + if not var_name[1].startswith('SurfName'): + surf_count = var_name[0] + hdf_surf = surf_dict[surf_count] + hdf_surf = hdf_surf_group[hdf_surf] + if var_name[1] in hdf_surf.attrs: + print('Catalytic parameter is already set: ', var_name[1]) + else: + if is_float(var_value): + var_value = float(var_value) + if var_name[1] not in surf_attr_list and var_name[1] not in surf_wo_readin: + hdf_surf.attrs[var_name[1]] = var_value + print('Catalytic parameter set: ', var_name[1]) + elif var_name[1] in surf_attr_list: + spec_name_list = '' + var_value = var_value.replace(',0', '').replace('(/', '').replace('/)', '').split(',') + for val in var_value: + spec_name_list = spec_name_list + ', ' + spec_dict[val] + spec_name_list = spec_name_list.replace(', ', '', 1) + hdf_surf.attrs[var_name[1]] = spec_name_list + print('Catalytic parameter set: ', var_name[1]) + # Write attributes for source and time of retrieval + hdf_surf.attrs['* Reference'] = args.reference + hdf_surf.attrs['* Created'] = date.today().strftime("%B %d, %Y") + print('*** Database successfully built. ***') From 25d3e4d417e7aaf44f830d1514c8d0e5447c11eb Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Thu, 20 Oct 2022 14:13:49 +0200 Subject: [PATCH 036/222] Fix previous state in the database --- tools/species_database/DSMC.ini | 473 +++++++++++----- tools/species_database/DSMC_Titan.ini | 516 ------------------ tools/species_database/DSMC_Titan_full.ini | 30 + tools/species_database/Species_Database.h5 | Bin 117616 -> 223336 bytes .../create_species_database.py | 12 +- 5 files changed, 377 insertions(+), 654 deletions(-) delete mode 100755 tools/species_database/DSMC_Titan.ini diff --git a/tools/species_database/DSMC.ini b/tools/species_database/DSMC.ini index 65a5bac7d..a75f973c6 100755 --- a/tools/species_database/DSMC.ini +++ b/tools/species_database/DSMC.ini @@ -1,136 +1,339 @@ ! =============================================================================== ! -! Species1, H2 -! =============================================================================== ! -Part-Species1-SpeciesName = H2 -Part-Species1-MassIC = 3.34800E-27 -Part-Species1-ChargeIC = 0.0 -Part-Species1-InteractionID = 2 -Part-Species1-Tref = 1000 -Part-Species1-dref = 2.68E-10 -Part-Species1-omega = 0.407 -Part-Species1-HeatOfFormation_K = 0.0 -Part-Species1-CharaTempVib = 6332.37 -Part-Species1-Ediss_eV = 4.47 -! =============================================================================== ! -! Species2, H -! =============================================================================== ! -Part-Species2-SpeciesName = H -Part-Species2-MassIC = 1.67400E-27 -Part-Species2-ChargeIC = 0.0 -Part-Species2-InteractionID = 1 -Part-Species2-Tref = 1000 -Part-Species2-dref = 2.581E-10 -Part-Species2-omega = 0.407 -Part-Species2-HeatOfFormation_K = 26159.76 -! =============================================================================== ! -! Species3, e -! =============================================================================== ! -Part-Species3-SpeciesName = electron -Part-Species3-MassIC = 9.11E-31 -Part-Species3-ChargeIC = -1.60217653E-19 -Part-Species3-InteractionID = 4 -Part-Species3-Tref = 1000 -Part-Species3-dref = 2.817920E-15 -Part-Species3-omega = 0.407 -! =============================================================================== ! -! Species4, H2Ion -! =============================================================================== ! -Part-Species4-SpeciesName = H2Ion1 -Part-Species4-MassIC = 3.3470890E-27 -Part-Species4-ChargeIC = 1.60217653E-19 -Part-Species4-InteractionID = 20 -Part-Species4-Tref = 1000 -Part-Species4-dref = 3.883E-10 -Part-Species4-omega = 0.407 -Part-Species4-CharaTempVib = 3341.01 -Part-Species4-Ediss_eV = 2.65 -! =============================================================================== ! -! Species5, HIon -! =============================================================================== ! -Part-Species5-SpeciesName = HIon1 -Part-Species5-MassIC = 1.6730890E-27 -Part-Species5-ChargeIC = 1.60217653E-19 -Part-Species5-InteractionID = 10 -Part-Species5-Tref = 1000 -Part-Species5-dref = 3.912E-10 -Part-Species5-omega = 0.407 -! =============================================================================== ! -! Species6, H3Ion -! =============================================================================== ! -Part-Species6-SpeciesName = H3Ion1 -Part-Species6-MassIC = 5.0210890E-27 -Part-Species6-ChargeIC = 1.60217653E-19 -Part-Species6-InteractionID = 20 -Part-Species6-PolyatomicMol = T -Part-Species6-NumOfAtoms = 3 -Part-Species6-LinearMolec = F -Part-Species6-Tref = 1000 -Part-Species6-dref = 4.5E-10 ! Guess -Part-Species6-omega = 0.407 -Part-Species6-CharaTempVib1 = 4572.92 -Part-Species6-CharaTempVib2 = 3627.94 -Part-Species6-CharaTempVib3 = 3627.94 -Part-Species6-Ediss_eV = 4.51 -Part-Species6-HeatOfFormation_K = 132803.52 -! =============================================================================== ! -! Reactions -! =============================================================================== ! -DSMC-NumOfReactions=11 -! ---------------------------------------------------- -! Electron impact -! ---------------------------------------------------- -! Dissociation: H2 + e --> H + H + e -DSMC-Reaction4-ReactionModel = XSec -DSMC-Reaction4-Reactants = (/1,3,0/) -DSMC-Reaction4-Products = (/2,3,2,0/) -! ---------------------------------------------------- -! Ionization: H2 + e --> H2Ion1 + electron + electron -DSMC-Reaction5-ReactionModel = XSec -DSMC-Reaction5-Reactants = (/1,3,0/) -DSMC-Reaction5-Products = (/4,3,3,0/) -! ---------------------------------------------------- -! Dissociative ionization: H2 + e --> H + HIon + electron + electron -DSMC-Reaction6-ReactionModel = XSec -DSMC-Reaction6-Reactants = (/1,3,0/) -DSMC-Reaction6-Products = (/2,3,3,5/) -! ---------------------------------------------------- -! H2Ion1 impact -! ---------------------------------------------------- -! H3Ion formation: H2 + H2Ion1 --> H + H3Ion -DSMC-Reaction7-ReactionModel = XSec -DSMC-Reaction7-Reactants = (/1,4,0/) -DSMC-Reaction7-Products = (/2,6,0,0/) -! Charge exchange: H2 + H2Ion1 --> H2Ion1 + H2 -DSMC-Reaction8-ReactionModel = XSec -DSMC-Reaction8-Reactants = (/1,4,0/) -DSMC-Reaction8-Products = (/4,1,0,0/) -! Dissociative charge exchange: H2 + H2Ion1 --> H + H2 + HIon1 -DSMC-Reaction9-ReactionModel = XSec -DSMC-Reaction9-Reactants = (/1,4,0/) -DSMC-Reaction9-Products = (/2,1,5,0/) -! ---------------------------------------------------- -! HIon1 impact -! ---------------------------------------------------- -! Charge exchange: H2 + HIon1 --> H2Ion1 + H -DSMC-Reaction10-ReactionModel = XSec -DSMC-Reaction10-Reactants = (/1,5,0/) -DSMC-Reaction10-Products = (/4,2,0,0/) -! ---------------------------------------------------- -! H3Ion1 impact -! ---------------------------------------------------- -! Ionization: H2 + H3Ion1 --> H2Ion1 + H3Ion1 + electron -DSMC-Reaction11-ReactionModel = XSec -DSMC-Reaction11-Reactants = (/1,6,0/) -DSMC-Reaction11-Products = (/4,6,3,0/) -! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H + H2Ion1 -DSMC-Reaction1-ReactionModel = XSec -DSMC-Reaction1-Reactants = (/1,6,0/) -DSMC-Reaction1-Products = (/1,2,4,0/) -! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H + H + HIon1 -DSMC-Reaction2-ReactionModel = XSec -DSMC-Reaction2-Reactants = (/1,6,0/) -DSMC-Reaction2-Products = (/1,2,2,5/) -! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H2 + HIon1 -DSMC-Reaction3-ReactionModel = XSec -DSMC-Reaction3-Reactants = (/1,6,0/) -DSMC-Reaction3-Products = (/1,1,5,0/) +! Species1, CH4 +! =============================================================================== ! +Part-Species1-SpeciesName=CH4 +Part-Species1-PolyatomicMol=true +Part-Species1-InteractionID=2 +Part-Species1-Tref=273 +Part-Species1-dref=4.63E-10 +Part-Species1-omega=0.24 +Part-Species1-NumOfAtoms=5 +Part-Species1-LinearMolec=.false. +Part-Species1-CharaTempVib1=4194.9 +Part-Species1-CharaTempVib2=2206.0 +Part-Species1-CharaTempVib3=2206.0 +Part-Species1-CharaTempVib4=4341.6 +Part-Species1-CharaTempVib5=4341.6 +Part-Species1-CharaTempVib6=4341.6 +Part-Species1-CharaTempVib7=1878.1 +Part-Species1-CharaTempVib8=1878.1 +Part-Species1-CharaTempVib9=1878.1 +Part-Species1-Ediss_eV=4.53 +Part-Species1-HeatOfFormation_K=-9002.71 +Part-Species1-CharaTempRot1 = 7.6 +Part-Species1-CharaTempRot2 = 7.6 +Part-Species1-CharaTempRot3 = 7.6 +Part-Species1-SymmetryFactor = 12 +! =============================================================================== ! +! Species2, CH3 +! =============================================================================== ! +Part-Species2-SpeciesName=CH3 +Part-Species2-PolyatomicMol=true +Part-Species2-InteractionID=2 +Part-Species2-Tref=273 +Part-Species2-dref=4.55E-10 +Part-Species2-omega=0.24 +Part-Species2-NumOfAtoms=4 +Part-Species2-LinearMolec=.false. +Part-Species2-CharaTempVib1=4320.6 +Part-Species2-CharaTempVib2=872.1 +Part-Species2-CharaTempVib3=4545.5 +Part-Species2-CharaTempVib4=4545.5 +Part-Species2-CharaTempVib5=2016.2 +Part-Species2-CharaTempVib6=2016.2 +Part-Species2-Ediss_eV=4.77 +Part-Species2-HeatOfFormation_K=17518.44 +Part-Species2-CharaTempRot1 = 13.5 +Part-Species2-CharaTempRot2 = 13.5 +Part-Species2-CharaTempRot3 = 6.8 +Part-Species2-SymmetryFactor = 6 +! =============================================================================== ! +! Species3, CH2 +! =============================================================================== ! +Part-Species3-SpeciesName=CH2 +Part-Species3-PolyatomicMol=true +Part-Species3-InteractionID=2 +Part-Species3-Tref=273 +Part-Species3-dref=4.47E-10 +Part-Species3-omega=0.24 +Part-Species3-NumOfAtoms=3 +Part-Species3-LinearMolec=.false. +Part-Species3-CharaTempVib1=4035.3 +Part-Species3-CharaTempVib2=1945.2 +Part-Species3-CharaTempVib3=4120.1 +Part-Species3-Ediss_eV=4.37 +Part-Species3-HeatOfFormation_K=46461.31 +Part-Species3-CharaTempRot1 = 72.1 +Part-Species3-CharaTempRot2 = 12.5 +Part-Species3-CharaTempRot3 = 10.6 +Part-Species3-SymmetryFactor = 2 +! =============================================================================== ! +! Species4, CH +! =============================================================================== ! +Part-Species4-SpeciesName=CH +Part-Species4-InteractionID = 2 +Part-Species4-Tref = 273 +Part-Species4-dref = 4.39E-10 +Part-Species4-omega=0.24 +Part-Species4-CharaTempVib=4314.3 +Part-Species4-Ediss_eV=3.49 +Part-Species4-HeatOfFormation_K=71440.92 +Part-Species4-CharaTempRot = 20.4 +Part-Species4-SymmetryFactor = 1 +! =============================================================================== ! +! Species5, N2 +! =============================================================================== ! +Part-Species5-SpeciesName=N2 +Part-Species5-InteractionID = 2 +Part-Species5-Tref = 273 +Part-Species5-dref = 4.17E-10 +Part-Species5-omega=0.24 +Part-Species5-CharaTempVib=3392.5 +Part-Species5-Ediss_eV=9.79 +Part-Species5-HeatOfFormation_K=0.0 +Part-Species5-CharaTempRot = 2.9 +Part-Species5-SymmetryFactor = 2 +! =============================================================================== ! +! Species6, C2 +! =============================================================================== ! +Part-Species6-SpeciesName=C2 +Part-Species6-InteractionID = 2 +Part-Species6-Tref = 273 +Part-Species6-dref = 4.88E-10 +Part-Species6-omega=0.24 +Part-Species6-CharaTempVib=2667.7 +Part-Species6-Ediss_eV=6.26 +Part-Species6-HeatOfFormation_K=100733.71 +Part-Species6-CharaTempRot = 2.6 +Part-Species6-SymmetryFactor = 2 +! =============================================================================== ! +! Species7, H2 +! =============================================================================== ! +Part-Species7-SpeciesName=H2 +Part-Species7-InteractionID = 2 +Part-Species7-Tref = 273 +Part-Species7-dref = 3.06E-10 +Part-Species7-omega=0.24 +Part-Species7-CharaTempVib=6329.0 +Part-Species7-Ediss_eV=4.50 +Part-Species7-HeatOfFormation_K=0.0 +Part-Species7-CharaTempRot = 87.5 +Part-Species7-SymmetryFactor = 2 +! =============================================================================== ! +! Species8, CN +! =============================================================================== ! +Part-Species8-SpeciesName=CN +Part-Species8-InteractionID = 2 +Part-Species8-Tref = 273 +Part-Species8-dref = 5.45E-10 +Part-Species8-omega=0.24 +Part-Species8-CharaTempVib=2975.4 +Part-Species8-Ediss_eV=7.72 +Part-Species8-HeatOfFormation_K=52323.23 +Part-Species8-CharaTempRot = 2.7 +Part-Species8-SymmetryFactor = 1 +! =============================================================================== ! +! Species9, NH +! =============================================================================== ! +Part-Species9-SpeciesName=NH +Part-Species9-InteractionID = 2 +Part-Species9-Tref = 273 +Part-Species9-dref = 4.64E-10 +Part-Species9-omega=0.24 +Part-Species9-CharaTempVib=4721.2 +Part-Species9-Ediss_eV=4.02 +Part-Species9-HeatOfFormation_K=45279.31 +Part-Species9-CharaTempRot = 24.0 +Part-Species9-SymmetryFactor = 1 +! =============================================================================== ! +! Species10, HCN +! =============================================================================== ! +Part-Species10-SpeciesName=HCN +Part-Species10-PolyatomicMol=true +Part-Species10-InteractionID = 2 +Part-Species10-Tref = 273 +Part-Species10-dref = 3.94E-10 +Part-Species10-omega=0.24 +Part-Species10-NumOfAtoms=3 +Part-Species10-LinearMolec=.true. +Part-Species10-CharaTempVib1=4761.5 +Part-Species10-CharaTempVib2=1023.9 +Part-Species10-CharaTempVib3=1023.9 +Part-Species10-CharaTempVib4=3015.7 +Part-Species10-Ediss_eV=9.93 +Part-Species10-HeatOfFormation_K=16249.85 +Part-Species10-CharaTempRot = 2.1 +Part-Species10-SymmetryFactor = 1 +! =============================================================================== ! +! Species11, N +! =============================================================================== ! +Part-Species11-SpeciesName=N +Part-Species11-InteractionID = 1 +Part-Species11-Tref = 273 +Part-Species11-dref = 3.00E-10 +Part-Species11-omega=0.24 +Part-Species11-HeatOfFormation_K=56837.22 +! =============================================================================== ! +! Species12, C +! =============================================================================== ! +Part-Species12-SpeciesName=C +Part-Species12-InteractionID = 1 +Part-Species12-Tref = 273 +Part-Species12-dref = 4.67E-10 +Part-Species12-omega=0.24 +Part-Species12-HeatOfFormation_K=86175.70 +! =============================================================================== ! +! Species13, H +! =============================================================================== ! +Part-Species13-SpeciesName=H +Part-Species13-InteractionID = 1 +Part-Species13-Tref = 273 +Part-Species13-dref = 2.03E-10 +Part-Species13-omega=0.24 +Part-Species13-HeatOfFormation_K=26213.32 +! =============================================================================== ! +! Species14, e +! =============================================================================== ! +Part-Species14-SpeciesName=electron +Part-Species14-InteractionID = 4 +Part-Species14-Tref = 273 +Part-Species14-dref = 1E-10 +Part-Species14-omega=0.24 +! =============================================================================== ! +! Species15, N2+ +! =============================================================================== ! +Part-Species15-SpeciesName=N2Ion1 +Part-Species15-InteractionID = 20 +Part-Species15-Tref = 273 +Part-Species15-dref = 4.17E-10 +Part-Species15-omega=0.24 +Part-Species15-CharaTempVib=3174.7 +Part-Species15-Ediss_eV=9.79 +Part-Species15-CharaTempRot = 2.8 +Part-Species15-SymmetryFactor = 2 +Part-Species15-PreviousState = 5 +! =============================================================================== ! +! Species16, CN+ +! =============================================================================== ! +Part-Species16-SpeciesName=CNIon1 +Part-Species16-InteractionID = 20 +Part-Species16-Tref = 273 +Part-Species16-dref = 5.45E-10 +Part-Species16-omega=0.24 +Part-Species16-CharaTempVib=2924.4 +Part-Species16-Ediss_eV=7.72 +Part-Species16-CharaTempRot = 2.5 +Part-Species16-SymmetryFactor = 1 +Part-Species16-PreviousState = 8 +! =============================================================================== ! +! Species17, N+ +! =============================================================================== ! +Part-Species17-SpeciesName=NIon1 +Part-Species17-InteractionID = 10 +Part-Species17-Tref = 273 +Part-Species17-dref = 3.00E-10 +Part-Species17-omega=0.24 +Part-Species17-PreviousState = 11 +! =============================================================================== ! +! Species18, C+ +! =============================================================================== ! +Part-Species18-SpeciesName=CIon1 +Part-Species18-InteractionID = 10 +Part-Species18-Tref = 273 +Part-Species18-dref = 4.67E-10 +Part-Species18-omega=0.24 +Part-Species18-PreviousState = 12 +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=8 ! Test +!--------------------------------------------------------------------! +!##################### Dissociation Reactions #######################! +!--------------------------------------------------------------------! +!--------- Reaction1: CH4 + M -> CH3 + H + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction1-ReactionName = Test1 +DSMC-Reaction1-Reactants=(/1,0,0/) +DSMC-Reaction1-Products=(/2,0,13,0/) +DSMC-Reaction1-Arrhenius-Prefactor=7.8047E+17 ! A_f +DSMC-Reaction1-Arrhenius-Powerfactor=-8.2 ! B_f +DSMC-Reaction1-Activation-Energy_K=59200.0 ! E_a +DSMC-Reaction1-NumberOfNonReactives=18 +DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction2: CH3 + M -> CH2 + H + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction2-ReactionName = Test2 +DSMC-Reaction2-Reactants=(/2,0,0/) +DSMC-Reaction2-Products=(/3,0,13,0/) +DSMC-Reaction2-Arrhenius-Prefactor=1.6938E-14 ! A_f +DSMC-Reaction2-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction2-Activation-Energy_K=45600 ! E_a +DSMC-Reaction2-NumberOfNonReactives=18 +DSMC-Reaction2-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction3: CH3 + M -> CH + H2 + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction3-ReactionName = Test3 +DSMC-Reaction3-Reactants=(/2,0,0/) +DSMC-Reaction3-Products=(/4,0,7,0/) +DSMC-Reaction3-Arrhenius-Prefactor=8.3029E-15 ! A_f +DSMC-Reaction3-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction3-Activation-Energy_K=42800 ! E_a +DSMC-Reaction3-NumberOfNonReactives=18 +DSMC-Reaction3-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction4: CH2 + M -> CH + H + M -------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction4-ReactionName = Test4 +DSMC-Reaction4-Reactants=(/3,0,0/) +DSMC-Reaction4-Products=(/4,0,13,0/) +DSMC-Reaction4-Arrhenius-Prefactor=6.6423E-15 ! A_f +DSMC-Reaction4-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction4-Activation-Energy_K=41800 ! E_a +DSMC-Reaction4-NumberOfNonReactives=18 +DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction5: CH2 + M -> C + H2 + M -------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction5-ReactionName = Test5 +DSMC-Reaction5-Reactants=(/3,0,0/) +DSMC-Reaction5-Products=(/7,0,12,0/) +DSMC-Reaction5-Arrhenius-Prefactor=2.1588E-16 ! A_f +DSMC-Reaction5-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction5-Activation-Energy_K=29700 ! E_a +DSMC-Reaction5-NumberOfNonReactives=18 +DSMC-Reaction5-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction6: CH + M -> C + H2 + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction6-ReactionName = Test6 +DSMC-Reaction6-Reactants=(/4,0,0/) +DSMC-Reaction6-Products=(/12,0,13,0/) +DSMC-Reaction6-Arrhenius-Prefactor=3.1551E-16 ! A_f +DSMC-Reaction6-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction6-Activation-Energy_K=33700 ! E_a +DSMC-Reaction6-NumberOfNonReactives=18 +DSMC-Reaction6-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction7a: N2 + M -> N + N + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction7-ReactionName = Test7 +DSMC-Reaction7-Reactants=(/5,0,0/) +DSMC-Reaction7-Products=(/11,0,11,0/) +DSMC-Reaction7-Arrhenius-Prefactor=1.1624E-08 ! A_f +DSMC-Reaction7-Arrhenius-Powerfactor=-1.6 ! B_f +DSMC-Reaction7-Activation-Energy_K=113200 ! E_a +DSMC-Reaction7-NumberOfNonReactives=13 +DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,14,15,16/) +!--------------------------------------------------------------------! +!--------- Reaction7b: N2 + N/C/H -> N + N + N/C/H ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction8-ReactionName = Test8 +DSMC-Reaction8-Reactants=(/5,0,0/) +DSMC-Reaction8-Products=(/11,0,11,0/) +DSMC-Reaction8-Arrhenius-Prefactor=4.9817E-08 ! A_f +DSMC-Reaction8-Arrhenius-Powerfactor=-1.6 ! B_f +DSMC-Reaction8-Activation-Energy_K=113200 ! E_a +DSMC-Reaction8-NumberOfNonReactives=5 +DSMC-Reaction8-NonReactiveSpecies=(/11,12,13,17,18/) diff --git a/tools/species_database/DSMC_Titan.ini b/tools/species_database/DSMC_Titan.ini deleted file mode 100755 index 72abfc6ab..000000000 --- a/tools/species_database/DSMC_Titan.ini +++ /dev/null @@ -1,516 +0,0 @@ -! =============================================================================== ! -! Species1, CH4 -! =============================================================================== ! -Part-Species1-SpeciesName=CH4 -Part-Species1-PolyatomicMol=true -Part-Species1-InteractionID=2 -Part-Species1-Tref=273 -Part-Species1-dref=4.63E-10 -Part-Species1-omega=0.24 -Part-Species1-NumOfAtoms=5 -Part-Species1-LinearMolec=.false. -Part-Species1-CharaTempVib1=4194.9 -Part-Species1-CharaTempVib2=2206.0 -Part-Species1-CharaTempVib3=2206.0 -Part-Species1-CharaTempVib4=4341.6 -Part-Species1-CharaTempVib5=4341.6 -Part-Species1-CharaTempVib6=4341.6 -Part-Species1-CharaTempVib7=1878.1 -Part-Species1-CharaTempVib8=1878.1 -Part-Species1-CharaTempVib9=1878.1 -Part-Species1-Ediss_eV=4.53 -Part-Species1-HeatOfFormation_K=-9002.71 -Part-Species1-CharaTempRot1 = 7.6 -Part-Species1-CharaTempRot2 = 7.6 -Part-Species1-CharaTempRot3 = 7.6 -Part-Species1-SymmetryFactor = 12 -! =============================================================================== ! -! Species2, CH3 -! =============================================================================== ! -Part-Species2-SpeciesName=CH3 -Part-Species2-PolyatomicMol=true -Part-Species2-InteractionID=2 -Part-Species2-Tref=273 -Part-Species2-dref=4.55E-10 -Part-Species2-omega=0.24 -Part-Species2-NumOfAtoms=4 -Part-Species2-LinearMolec=.false. -Part-Species2-CharaTempVib1=4320.6 -Part-Species2-CharaTempVib2=872.1 -Part-Species2-CharaTempVib3=4545.5 -Part-Species2-CharaTempVib4=4545.5 -Part-Species2-CharaTempVib5=2016.2 -Part-Species2-CharaTempVib6=2016.2 -Part-Species2-Ediss_eV=4.77 -Part-Species2-HeatOfFormation_K=17518.44 -Part-Species2-CharaTempRot1 = 13.5 -Part-Species2-CharaTempRot2 = 13.5 -Part-Species2-CharaTempRot3 = 6.8 -Part-Species2-SymmetryFactor = 6 -! =============================================================================== ! -! Species3, CH2 -! =============================================================================== ! -Part-Species3-SpeciesName=CH2 -Part-Species3-PolyatomicMol=true -Part-Species3-InteractionID=2 -Part-Species3-Tref=273 -Part-Species3-dref=4.47E-10 -Part-Species3-omega=0.24 -Part-Species3-NumOfAtoms=3 -Part-Species3-LinearMolec=.false. -Part-Species3-CharaTempVib1=4035.3 -Part-Species3-CharaTempVib2=1945.2 -Part-Species3-CharaTempVib3=4120.1 -Part-Species3-Ediss_eV=4.37 -Part-Species3-HeatOfFormation_K=46461.31 -Part-Species3-CharaTempRot1 = 72.1 -Part-Species3-CharaTempRot2 = 12.5 -Part-Species3-CharaTempRot3 = 10.6 -Part-Species3-SymmetryFactor = 2 -! =============================================================================== ! -! Species4, CH -! =============================================================================== ! -Part-Species4-SpeciesName=CH -Part-Species4-InteractionID = 2 -Part-Species4-Tref = 273 -Part-Species4-dref = 4.39E-10 -Part-Species4-omega=0.24 -Part-Species4-CharaTempVib=4314.3 -Part-Species4-Ediss_eV=3.49 -Part-Species4-HeatOfFormation_K=71440.92 -Part-Species4-CharaTempRot = 20.4 -Part-Species4-SymmetryFactor = 1 -! =============================================================================== ! -! Species5, N2 -! =============================================================================== ! -Part-Species5-SpeciesName=N2 -Part-Species5-InteractionID = 2 -Part-Species5-Tref = 273 -Part-Species5-dref = 4.17E-10 -Part-Species5-omega=0.24 -Part-Species5-CharaTempVib=3392.5 -Part-Species5-Ediss_eV=9.79 -Part-Species5-HeatOfFormation_K=0.0 -Part-Species5-CharaTempRot = 2.9 -Part-Species5-SymmetryFactor = 2 -! =============================================================================== ! -! Species6, C2 -! =============================================================================== ! -Part-Species6-SpeciesName=C2 -Part-Species6-InteractionID = 2 -Part-Species6-Tref = 273 -Part-Species6-dref = 4.88E-10 -Part-Species6-omega=0.24 -Part-Species6-CharaTempVib=2667.7 -Part-Species6-Ediss_eV=6.26 -Part-Species6-HeatOfFormation_K=100733.71 -Part-Species6-CharaTempRot = 2.6 -Part-Species6-SymmetryFactor = 2 -! =============================================================================== ! -! Species7, H2 -! =============================================================================== ! -Part-Species7-SpeciesName=H2 -Part-Species7-InteractionID = 2 -Part-Species7-Tref = 273 -Part-Species7-dref = 3.06E-10 -Part-Species7-omega=0.24 -Part-Species7-CharaTempVib=6329.0 -Part-Species7-Ediss_eV=4.50 -Part-Species7-HeatOfFormation_K=0.0 -Part-Species7-CharaTempRot = 87.5 -Part-Species7-SymmetryFactor = 2 -! =============================================================================== ! -! Species8, CN -! =============================================================================== ! -Part-Species8-SpeciesName=CN -Part-Species8-InteractionID = 2 -Part-Species8-Tref = 273 -Part-Species8-dref = 5.45E-10 -Part-Species8-omega=0.24 -Part-Species8-CharaTempVib=2975.4 -Part-Species8-Ediss_eV=7.72 -Part-Species8-HeatOfFormation_K=52323.23 -Part-Species8-CharaTempRot = 2.7 -Part-Species8-SymmetryFactor = 1 -! =============================================================================== ! -! Species9, NH -! =============================================================================== ! -Part-Species9-SpeciesName=NH -Part-Species9-InteractionID = 2 -Part-Species9-Tref = 273 -Part-Species9-dref = 4.64E-10 -Part-Species9-omega=0.24 -Part-Species9-CharaTempVib=4721.2 -Part-Species9-Ediss_eV=4.02 -Part-Species9-HeatOfFormation_K=45279.31 -Part-Species9-CharaTempRot = 24.0 -Part-Species9-SymmetryFactor = 1 -! =============================================================================== ! -! Species10, HCN -! =============================================================================== ! -Part-Species10-SpeciesName=HCN -Part-Species10-PolyatomicMol=true -Part-Species10-InteractionID = 2 -Part-Species10-Tref = 273 -Part-Species10-dref = 3.94E-10 -Part-Species10-omega=0.24 -Part-Species10-NumOfAtoms=3 -Part-Species10-LinearMolec=.true. -Part-Species10-CharaTempVib1=4761.5 -Part-Species10-CharaTempVib2=1023.9 -Part-Species10-CharaTempVib3=1023.9 -Part-Species10-CharaTempVib4=3015.7 -Part-Species10-Ediss_eV=9.93 -Part-Species10-HeatOfFormation_K=16249.85 -Part-Species10-CharaTempRot = 2.1 -Part-Species10-SymmetryFactor = 1 -! =============================================================================== ! -! Species11, N -! =============================================================================== ! -Part-Species11-SpeciesName=N -Part-Species11-InteractionID = 1 -Part-Species11-Tref = 273 -Part-Species11-dref = 3.00E-10 -Part-Species11-omega=0.24 -Part-Species11-HeatOfFormation_K=56837.22 -! =============================================================================== ! -! Species12, C -! =============================================================================== ! -Part-Species12-SpeciesName=C -Part-Species12-InteractionID = 1 -Part-Species12-Tref = 273 -Part-Species12-dref = 4.67E-10 -Part-Species12-omega=0.24 -Part-Species12-HeatOfFormation_K=86175.70 -! =============================================================================== ! -! Species13, H -! =============================================================================== ! -Part-Species13-SpeciesName=H -Part-Species13-InteractionID = 1 -Part-Species13-Tref = 273 -Part-Species13-dref = 2.03E-10 -Part-Species13-omega=0.24 -Part-Species13-HeatOfFormation_K=26213.32 -! =============================================================================== ! -! Species14, e -! =============================================================================== ! -Part-Species14-SpeciesName=electron -Part-Species14-InteractionID = 4 -Part-Species14-Tref = 273 -Part-Species14-dref = 1E-10 -Part-Species14-omega=0.24 -! =============================================================================== ! -! Species15, N2+ -! =============================================================================== ! -Part-Species15-SpeciesName=N2Ion1 -Part-Species15-InteractionID = 20 -Part-Species15-Tref = 273 -Part-Species15-dref = 4.17E-10 -Part-Species15-omega=0.24 -Part-Species15-CharaTempVib=3174.7 -Part-Species15-Ediss_eV=9.79 -Part-Species15-CharaTempRot = 2.8 -Part-Species15-SymmetryFactor = 2 -Part-Species15-PreviousState = 5 -! =============================================================================== ! -! Species16, CN+ -! =============================================================================== ! -Part-Species16-SpeciesName=CNIon1 -Part-Species16-InteractionID = 20 -Part-Species16-Tref = 273 -Part-Species16-dref = 5.45E-10 -Part-Species16-omega=0.24 -Part-Species16-CharaTempVib=2924.4 -Part-Species16-Ediss_eV=7.72 -Part-Species16-CharaTempRot = 2.5 -Part-Species16-SymmetryFactor = 1 -Part-Species16-PreviousState = 8 -! =============================================================================== ! -! Species17, N+ -! =============================================================================== ! -Part-Species17-SpeciesName=NIon1 -Part-Species17-InteractionID = 10 -Part-Species17-Tref = 273 -Part-Species17-dref = 3.00E-10 -Part-Species17-omega=0.24 -Part-Species17-PreviousState = 11 -! =============================================================================== ! -! Species18, C+ -! =============================================================================== ! -Part-Species18-SpeciesName=CIon1 -Part-Species18-InteractionID = 10 -Part-Species18-Tref = 273 -Part-Species18-dref = 4.67E-10 -Part-Species18-omega=0.24 -Part-Species18-PreviousState = 12 -! =============================================================================== ! -! Data for chemical Reaction -! =============================================================================== ! -DSMC-NumOfReactions=30 ! 18 Species, 28 Reactions -!--------------------------------------------------------------------! -!##################### Dissociation Reactions #######################! -!--------------------------------------------------------------------! -!--------- Reaction1: CH4 + M -> CH3 + H + M ------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction1-Reactants=(/1,0,0/) -DSMC-Reaction1-Products=(/2,0,13,0/) -DSMC-Reaction1-Arrhenius-Prefactor=7.8047E+17 ! A_f -DSMC-Reaction1-Arrhenius-Powerfactor=-8.2 ! B_f -DSMC-Reaction1-Activation-Energy_K=59200.0 ! E_a -DSMC-Reaction1-NumberOfNonReactives=18 -DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction2: CH3 + M -> CH2 + H + M ------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction2-Reactants=(/2,0,0/) -DSMC-Reaction2-Products=(/3,0,13,0/) -DSMC-Reaction2-Arrhenius-Prefactor=1.6938E-14 ! A_f -DSMC-Reaction2-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction2-Activation-Energy_K=45600 ! E_a -DSMC-Reaction2-NumberOfNonReactives=18 -DSMC-Reaction2-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction3: CH3 + M -> CH + H2 + M ------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction3-Reactants=(/2,0,0/) -DSMC-Reaction3-Products=(/4,0,7,0/) -DSMC-Reaction3-Arrhenius-Prefactor=8.3029E-15 ! A_f -DSMC-Reaction3-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction3-Activation-Energy_K=42800 ! E_a -DSMC-Reaction3-NumberOfNonReactives=18 -DSMC-Reaction3-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction4: CH2 + M -> CH + H + M -------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction4-Reactants=(/3,0,0/) -DSMC-Reaction4-Products=(/4,0,13,0/) -DSMC-Reaction4-Arrhenius-Prefactor=6.6423E-15 ! A_f -DSMC-Reaction4-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction4-Activation-Energy_K=41800 ! E_a -DSMC-Reaction4-NumberOfNonReactives=18 -DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction5: CH2 + M -> C + H2 + M -------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction5-Reactants=(/3,0,0/) -DSMC-Reaction5-Products=(/7,0,12,0/) -DSMC-Reaction5-Arrhenius-Prefactor=2.1588E-16 ! A_f -DSMC-Reaction5-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction5-Activation-Energy_K=29700 ! E_a -DSMC-Reaction5-NumberOfNonReactives=18 -DSMC-Reaction5-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction6: CH + M -> C + H2 + M --------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction6-Reactants=(/4,0,0/) -DSMC-Reaction6-Products=(/12,0,13,0/) -DSMC-Reaction6-Arrhenius-Prefactor=3.1551E-16 ! A_f -DSMC-Reaction6-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction6-Activation-Energy_K=33700 ! E_a -DSMC-Reaction6-NumberOfNonReactives=18 -DSMC-Reaction6-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction7a: N2 + M -> N + N + M --------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction7-Reactants=(/5,0,0/) -DSMC-Reaction7-Products=(/11,0,11,0/) -DSMC-Reaction7-Arrhenius-Prefactor=1.1624E-08 ! A_f -DSMC-Reaction7-Arrhenius-Powerfactor=-1.6 ! B_f -DSMC-Reaction7-Activation-Energy_K=113200 ! E_a -DSMC-Reaction7-NumberOfNonReactives=13 -DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,14,15,16/) -!--------------------------------------------------------------------! -!--------- Reaction7b: N2 + N/C/H -> N + N + N/C/H ------------------! -!--------------------------------------------------------------------! -DSMC-Reaction8-Reactants=(/5,0,0/) -DSMC-Reaction8-Products=(/11,0,11,0/) -DSMC-Reaction8-Arrhenius-Prefactor=4.9817E-08 ! A_f -DSMC-Reaction8-Arrhenius-Powerfactor=-1.6 ! B_f -DSMC-Reaction8-Activation-Energy_K=113200 ! E_a -DSMC-Reaction8-NumberOfNonReactives=5 -DSMC-Reaction8-NonReactiveSpecies=(/11,12,13,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction8: C2 + M -> C + C + M ---------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction9-Reactants=(/6,0,0/) -DSMC-Reaction9-Products=(/12,0,12,0/) -DSMC-Reaction9-Arrhenius-Prefactor=2.4909E-14 ! A_f -DSMC-Reaction9-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction9-Activation-Energy_K=71600 ! E_a -DSMC-Reaction9-NumberOfNonReactives=18 -DSMC-Reaction9-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction9: H2 + M -> H + H + M ---------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction10-Reactants=(/7,0,0/) -DSMC-Reaction10-Products=(/13,0,13,0/) -DSMC-Reaction10-Arrhenius-Prefactor=3.7031E-16 ! A_f -DSMC-Reaction10-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction10-Activation-Energy_K=48350 ! E_a -DSMC-Reaction10-NumberOfNonReactives=18 -DSMC-Reaction10-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction10: CN + M -> C + N + M --------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction11-Reactants=(/8,0,0/) -DSMC-Reaction11-Products=(/11,0,12,0/) -DSMC-Reaction11-Arrhenius-Prefactor=4.2013E-16 ! A_f -DSMC-Reaction11-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction11-Activation-Energy_K=71000 ! E_a -DSMC-Reaction11-NumberOfNonReactives=18 -DSMC-Reaction11-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction11: HN + M -> N + H + M --------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction12-Reactants=(/9,0,0/) -DSMC-Reaction12-Products=(/11,0,13,0/) -DSMC-Reaction12-Arrhenius-Prefactor=2.9890E-16 ! A_f -DSMC-Reaction12-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction12-Activation-Energy_K=37600 ! E_a -DSMC-Reaction12-NumberOfNonReactives=18 -DSMC-Reaction12-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction12: HCN + M -> CN + H + M ------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction13-Reactants=(/10,0,0/) -DSMC-Reaction13-Products=(/8,0,13,0/) -DSMC-Reaction13-Arrhenius-Prefactor=5.9283E-04 ! A_f -DSMC-Reaction13-Arrhenius-Powerfactor=-2.6 ! B_f -DSMC-Reaction13-Activation-Energy_K=62845 ! E_a -DSMC-Reaction13-NumberOfNonReactives=18 -DSMC-Reaction13-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!################## Exchange & Radical Reactions ####################! -!--------------------------------------------------------------------! -!--------- Reaction13: CH3 + H -> CH2 + H2 --------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction14-Reactants=(/2,13,0/) -DSMC-Reaction14-Products=(/3,7,0,0/) -DSMC-Reaction14-Arrhenius-Prefactor=2.1000E-14 ! A_f -DSMC-Reaction14-Arrhenius-Powerfactor=-0.56 ! B_f -DSMC-Reaction14-Activation-Energy_K=8000 ! E_a -!--------------------------------------------------------------------! -!--------- Reaction2: CH + N2 -> HCN + N ---------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction15-Reactants=(/4,5,0/) -DSMC-Reaction15-Products=(/10,11,0,0/) -DSMC-Reaction15-Arrhenius-Prefactor=7.3065E-18 ! A_f -DSMC-Reaction15-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction15-Activation-Energy_K=11060 ! E_a -!--------------------------------------------------------------------! -!--------- Reaction15: CH + C -> C2 + H -----------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction16-Reactants=(/4,12,0/) -DSMC-Reaction16-Products=(/6,13,0,0/) -DSMC-Reaction16-Arrhenius-Prefactor=3.3212E-16 ! A_f -DSMC-Reaction16-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction16-Activation-Energy_K=0.0 ! E_a -!--------------------------------------------------------------------! -!--------- Reaction16: C2 + N2 -> CN + CN ---------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction17-Reactants=(/5,6,0/) -DSMC-Reaction17-Products=(/8,8,0,0/) -DSMC-Reaction17-Arrhenius-Prefactor=2.4909E-17 ! A_f -DSMC-Reaction17-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction17-Activation-Energy_K=21000 ! E_a -!--------------------------------------------------------------------! -!--------- Reaction17: H2 + CN -> HCN + H ---------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction18-Reactants=(/7,8,0/) -DSMC-Reaction18-Products=(/10,13,0,0/) -DSMC-Reaction18-Arrhenius-Prefactor=1.8000E-25 ! A_f -DSMC-Reaction18-Arrhenius-Powerfactor=2.6 ! B_f -DSMC-Reaction18-Activation-Energy_K=960 ! E_a -!--------------------------------------------------------------------! -!--------- Reaction18: CN + C -> C2 + N -----------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction19-Reactants=(/8,12,0/) -DSMC-Reaction19-Products=(/6,11,0,0/) -DSMC-Reaction19-Arrhenius-Prefactor=8.3029E-17 ! A_f -DSMC-Reaction19-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction19-Activation-Energy_K=13000 ! E_a -!--------------------------------------------------------------------! -!--------- Reaction19: H2 + N -> NH + H -----------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction20-Reactants=(/7,11,0/) -DSMC-Reaction20-Products=(/9,13,0,0/) -DSMC-Reaction20-Arrhenius-Prefactor=2.6569E-16 ! A_f -DSMC-Reaction20-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction20-Activation-Energy_K=12650 ! E_a -!--------------------------------------------------------------------! -!--------- Reaction20: N2 + C -> CN + N -----------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction21-Reactants=(/5,12,0/) -DSMC-Reaction21-Products=(/8,11,0,0/) -DSMC-Reaction21-Arrhenius-Prefactor=8.7014E-17 ! A_f -DSMC-Reaction21-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction21-Activation-Energy_K=22600 ! E_a -!--------------------------------------------------------------------! -!--------- Reaction21: H2 + C -> CH + H -----------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction22-Reactants=(/7,12,0/) -DSMC-Reaction22-Products=(/4,13,0,0/) -DSMC-Reaction22-Arrhenius-Prefactor=6.6423E-16 ! A_f -DSMC-Reaction22-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction22-Activation-Energy_K=11700 ! E_a -!--------------------------------------------------------------------! -!--------- Reaction22: N2 + H -> NH + N -----------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction23-Reactants=(/5,13,0/) -DSMC-Reaction23-Products=(/9,11,0,0/) -DSMC-Reaction23-Arrhenius-Prefactor=4.9817E-18 ! A_f -DSMC-Reaction23-Arrhenius-Powerfactor=0.50 ! B_f -DSMC-Reaction23-Activation-Energy_K=71400 ! E_a -!--------------------------------------------------------------------! -!--------- Reaction23: CH4 + H -> CH3 + H2 --------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction24-Reactants=(/1,13,0/) -DSMC-Reaction24-Products=(/2,7,0,0/) -DSMC-Reaction24-Arrhenius-Prefactor=2.1919E-26 ! A_f -DSMC-Reaction24-Arrhenius-Powerfactor=3.0 ! B_f -DSMC-Reaction24-Activation-Energy_K=4045 ! E_a -!########## IONIZED SPECIES ########################################### -!--------------------------------------------------------------------! -!--------- Reaction7c: N2 + e -> N + N + e ------------------! -!--------------------------------------------------------------------! -DSMC-Reaction25-Reactants=(/5,14,0/) -DSMC-Reaction25-Products=(/11,14,11,0/) -DSMC-Reaction25-Arrhenius-Prefactor=4.98161783020654E-06 ! A_f -DSMC-Reaction25-Arrhenius-Powerfactor=-1.6 ! B_f -DSMC-Reaction25-Activation-Energy_K=113200 ! E_a -!--------------------------------------------------------------------! -!--------- Reaction24: N + N -> N2+ + e ------------------! -!--------------------------------------------------------------------! -DSMC-Reaction26-Reactants=(/11,11,0/) -DSMC-Reaction26-Products=(/15,14,0,0/) -DSMC-Reaction26-Arrhenius-Prefactor=7.30637281763626E-23 -DSMC-Reaction26-Arrhenius-Powerfactor=1.5 ! B_f -DSMC-Reaction26-Activation-Energy_K=67500 ! E_a -!--------------------------------------------------------------------! -!--------- Reaction25: C + N -> CN+ + e ------------------! -!--------------------------------------------------------------------! -DSMC-Reaction27-Reactants=(/11,12,0/) -DSMC-Reaction27-Products=(/16,14,0,0/) -DSMC-Reaction27-Arrhenius-Prefactor=1.66053927673551E-15 -DSMC-Reaction27-Arrhenius-Powerfactor=1.5 ! B_f -DSMC-Reaction27-Activation-Energy_K=164400 ! E_a -!--------------------------------------------------------------------! -!--------- Reaction26: N + e -> N+ + e + e ------------------! -!--------------------------------------------------------------------! -DSMC-Reaction28-ReactionModel=QK -DSMC-Reaction28-Reactants=(/11,14,0/) -DSMC-Reaction28-Products=(/17,14,14,0/) -!--------------------------------------------------------------------! -!--------- Reaction27: C + e -> C+ + e + e ------------------! -!--------------------------------------------------------------------! -DSMC-Reaction29-ReactionModel=QK -DSMC-Reaction29-Reactants=(/12,14,0/) -DSMC-Reaction29-Products=(/18,14,14,0/) -!--------------------------------------------------------------------! -!--------- Reaction28: CN+ + N -> CN + N+ ------------------! -!--------------------------------------------------------------------! -DSMC-Reaction30-Reactants=(/16,11,0/) -DSMC-Reaction30-Products=(/8,17,0,0/) -DSMC-Reaction30-Arrhenius-Prefactor=1.6273284912008E-17 -DSMC-Reaction30-Arrhenius-Powerfactor=0. -DSMC-Reaction30-Activation-Energy_K=40700 diff --git a/tools/species_database/DSMC_Titan_full.ini b/tools/species_database/DSMC_Titan_full.ini index 72abfc6ab..913234c80 100755 --- a/tools/species_database/DSMC_Titan_full.ini +++ b/tools/species_database/DSMC_Titan_full.ini @@ -252,6 +252,7 @@ DSMC-NumOfReactions=30 ! 18 Species, 28 Reactions !--------------------------------------------------------------------! !--------- Reaction1: CH4 + M -> CH3 + H + M ------------------------! !--------------------------------------------------------------------! +DSMC-Reaction1-ReactionName = DISS_CH4_TO_CH3 DSMC-Reaction1-Reactants=(/1,0,0/) DSMC-Reaction1-Products=(/2,0,13,0/) DSMC-Reaction1-Arrhenius-Prefactor=7.8047E+17 ! A_f @@ -262,6 +263,7 @@ DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 !--------------------------------------------------------------------! !--------- Reaction2: CH3 + M -> CH2 + H + M ------------------------! !--------------------------------------------------------------------! +DSMC-Reaction2-ReactionName = DISS_CH3_TO_CH2 DSMC-Reaction2-Reactants=(/2,0,0/) DSMC-Reaction2-Products=(/3,0,13,0/) DSMC-Reaction2-Arrhenius-Prefactor=1.6938E-14 ! A_f @@ -272,6 +274,7 @@ DSMC-Reaction2-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 !--------------------------------------------------------------------! !--------- Reaction3: CH3 + M -> CH + H2 + M ------------------------! !--------------------------------------------------------------------! +DSMC-Reaction3-ReactionName = DISS_CH3_TO_CH DSMC-Reaction3-Reactants=(/2,0,0/) DSMC-Reaction3-Products=(/4,0,7,0/) DSMC-Reaction3-Arrhenius-Prefactor=8.3029E-15 ! A_f @@ -282,6 +285,7 @@ DSMC-Reaction3-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 !--------------------------------------------------------------------! !--------- Reaction4: CH2 + M -> CH + H + M -------------------------! !--------------------------------------------------------------------! +DSMC-Reaction4-ReactionName = DISS_CH2_TO_CH DSMC-Reaction4-Reactants=(/3,0,0/) DSMC-Reaction4-Products=(/4,0,13,0/) DSMC-Reaction4-Arrhenius-Prefactor=6.6423E-15 ! A_f @@ -292,6 +296,7 @@ DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 !--------------------------------------------------------------------! !--------- Reaction5: CH2 + M -> C + H2 + M -------------------------! !--------------------------------------------------------------------! +DSMC-Reaction5-ReactionName = DISS_CH2_TO_C DSMC-Reaction5-Reactants=(/3,0,0/) DSMC-Reaction5-Products=(/7,0,12,0/) DSMC-Reaction5-Arrhenius-Prefactor=2.1588E-16 ! A_f @@ -302,6 +307,7 @@ DSMC-Reaction5-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 !--------------------------------------------------------------------! !--------- Reaction6: CH + M -> C + H2 + M --------------------------! !--------------------------------------------------------------------! +DSMC-Reaction6-ReactionName = DISS_CH_TO_C DSMC-Reaction6-Reactants=(/4,0,0/) DSMC-Reaction6-Products=(/12,0,13,0/) DSMC-Reaction6-Arrhenius-Prefactor=3.1551E-16 ! A_f @@ -312,6 +318,7 @@ DSMC-Reaction6-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 !--------------------------------------------------------------------! !--------- Reaction7a: N2 + M -> N + N + M --------------------------! !--------------------------------------------------------------------! +DSMC-Reaction7-ReactionName = DISS_N2 DSMC-Reaction7-Reactants=(/5,0,0/) DSMC-Reaction7-Products=(/11,0,11,0/) DSMC-Reaction7-Arrhenius-Prefactor=1.1624E-08 ! A_f @@ -322,6 +329,7 @@ DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,14,15,16/) !--------------------------------------------------------------------! !--------- Reaction7b: N2 + N/C/H -> N + N + N/C/H ------------------! !--------------------------------------------------------------------! +DSMC-Reaction8-ReactionName = DISS_N2_WITH_N_C_H DSMC-Reaction8-Reactants=(/5,0,0/) DSMC-Reaction8-Products=(/11,0,11,0/) DSMC-Reaction8-Arrhenius-Prefactor=4.9817E-08 ! A_f @@ -332,6 +340,7 @@ DSMC-Reaction8-NonReactiveSpecies=(/11,12,13,17,18/) !--------------------------------------------------------------------! !--------- Reaction8: C2 + M -> C + C + M ---------------------------! !--------------------------------------------------------------------! +DSMC-Reaction9-ReactionName = DISS_C2 DSMC-Reaction9-Reactants=(/6,0,0/) DSMC-Reaction9-Products=(/12,0,12,0/) DSMC-Reaction9-Arrhenius-Prefactor=2.4909E-14 ! A_f @@ -342,6 +351,7 @@ DSMC-Reaction9-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 !--------------------------------------------------------------------! !--------- Reaction9: H2 + M -> H + H + M ---------------------------! !--------------------------------------------------------------------! +DSMC-Reaction10-ReactionName = DISS_H2 DSMC-Reaction10-Reactants=(/7,0,0/) DSMC-Reaction10-Products=(/13,0,13,0/) DSMC-Reaction10-Arrhenius-Prefactor=3.7031E-16 ! A_f @@ -352,6 +362,7 @@ DSMC-Reaction10-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,1 !--------------------------------------------------------------------! !--------- Reaction10: CN + M -> C + N + M --------------------------! !--------------------------------------------------------------------! +DSMC-Reaction11-ReactionName = DISS_CN DSMC-Reaction11-Reactants=(/8,0,0/) DSMC-Reaction11-Products=(/11,0,12,0/) DSMC-Reaction11-Arrhenius-Prefactor=4.2013E-16 ! A_f @@ -362,6 +373,7 @@ DSMC-Reaction11-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,1 !--------------------------------------------------------------------! !--------- Reaction11: HN + M -> N + H + M --------------------------! !--------------------------------------------------------------------! +DSMC-Reaction12-ReactionName = DISS_HN DSMC-Reaction12-Reactants=(/9,0,0/) DSMC-Reaction12-Products=(/11,0,13,0/) DSMC-Reaction12-Arrhenius-Prefactor=2.9890E-16 ! A_f @@ -372,6 +384,7 @@ DSMC-Reaction12-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,1 !--------------------------------------------------------------------! !--------- Reaction12: HCN + M -> CN + H + M ------------------------! !--------------------------------------------------------------------! +DSMC-Reaction13-ReactionName = DISS_HDC_TO_CN DSMC-Reaction13-Reactants=(/10,0,0/) DSMC-Reaction13-Products=(/8,0,13,0/) DSMC-Reaction13-Arrhenius-Prefactor=5.9283E-04 ! A_f @@ -384,6 +397,7 @@ DSMC-Reaction13-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,1 !--------------------------------------------------------------------! !--------- Reaction13: CH3 + H -> CH2 + H2 --------------------------! !--------------------------------------------------------------------! +DSMC-Reaction14-ReactionName = EXC_CH3_H2 DSMC-Reaction14-Reactants=(/2,13,0/) DSMC-Reaction14-Products=(/3,7,0,0/) DSMC-Reaction14-Arrhenius-Prefactor=2.1000E-14 ! A_f @@ -392,6 +406,7 @@ DSMC-Reaction14-Activation-Energy_K=8000 ! E_a !--------------------------------------------------------------------! !--------- Reaction2: CH + N2 -> HCN + N ---------------------------! !--------------------------------------------------------------------! +DSMC-Reaction15-ReactionName = EXC_CH_N2 DSMC-Reaction15-Reactants=(/4,5,0/) DSMC-Reaction15-Products=(/10,11,0,0/) DSMC-Reaction15-Arrhenius-Prefactor=7.3065E-18 ! A_f @@ -400,6 +415,7 @@ DSMC-Reaction15-Activation-Energy_K=11060 ! E_a !--------------------------------------------------------------------! !--------- Reaction15: CH + C -> C2 + H -----------------------------! !--------------------------------------------------------------------! +DSMC-Reaction16-ReactionName = EXC_CH_C DSMC-Reaction16-Reactants=(/4,12,0/) DSMC-Reaction16-Products=(/6,13,0,0/) DSMC-Reaction16-Arrhenius-Prefactor=3.3212E-16 ! A_f @@ -408,6 +424,7 @@ DSMC-Reaction16-Activation-Energy_K=0.0 ! E_a !--------------------------------------------------------------------! !--------- Reaction16: C2 + N2 -> CN + CN ---------------------------! !--------------------------------------------------------------------! +DSMC-Reaction17-ReactionName = EXC_C2_N2 DSMC-Reaction17-Reactants=(/5,6,0/) DSMC-Reaction17-Products=(/8,8,0,0/) DSMC-Reaction17-Arrhenius-Prefactor=2.4909E-17 ! A_f @@ -416,6 +433,7 @@ DSMC-Reaction17-Activation-Energy_K=21000 ! E_a !--------------------------------------------------------------------! !--------- Reaction17: H2 + CN -> HCN + H ---------------------------! !--------------------------------------------------------------------! +DSMC-Reaction18-ReactionName = EXC_CN_H2 DSMC-Reaction18-Reactants=(/7,8,0/) DSMC-Reaction18-Products=(/10,13,0,0/) DSMC-Reaction18-Arrhenius-Prefactor=1.8000E-25 ! A_f @@ -424,6 +442,7 @@ DSMC-Reaction18-Activation-Energy_K=960 ! E_a !--------------------------------------------------------------------! !--------- Reaction18: CN + C -> C2 + N -----------------------------! !--------------------------------------------------------------------! +DSMC-Reaction19-ReactionName = EXC_CN_C DSMC-Reaction19-Reactants=(/8,12,0/) DSMC-Reaction19-Products=(/6,11,0,0/) DSMC-Reaction19-Arrhenius-Prefactor=8.3029E-17 ! A_f @@ -432,6 +451,7 @@ DSMC-Reaction19-Activation-Energy_K=13000 ! E_a !--------------------------------------------------------------------! !--------- Reaction19: H2 + N -> NH + H -----------------------------! !--------------------------------------------------------------------! +DSMC-Reaction20-ReactionName = EXC_H2_N DSMC-Reaction20-Reactants=(/7,11,0/) DSMC-Reaction20-Products=(/9,13,0,0/) DSMC-Reaction20-Arrhenius-Prefactor=2.6569E-16 ! A_f @@ -440,6 +460,7 @@ DSMC-Reaction20-Activation-Energy_K=12650 ! E_a !--------------------------------------------------------------------! !--------- Reaction20: N2 + C -> CN + N -----------------------------! !--------------------------------------------------------------------! +DSMC-Reaction21-ReactionName = EXC_N2_C DSMC-Reaction21-Reactants=(/5,12,0/) DSMC-Reaction21-Products=(/8,11,0,0/) DSMC-Reaction21-Arrhenius-Prefactor=8.7014E-17 ! A_f @@ -448,6 +469,7 @@ DSMC-Reaction21-Activation-Energy_K=22600 ! E_a !--------------------------------------------------------------------! !--------- Reaction21: H2 + C -> CH + H -----------------------------! !--------------------------------------------------------------------! +DSMC-Reaction22-ReactionName = EXC_H2_C DSMC-Reaction22-Reactants=(/7,12,0/) DSMC-Reaction22-Products=(/4,13,0,0/) DSMC-Reaction22-Arrhenius-Prefactor=6.6423E-16 ! A_f @@ -456,6 +478,7 @@ DSMC-Reaction22-Activation-Energy_K=11700 ! E_a !--------------------------------------------------------------------! !--------- Reaction22: N2 + H -> NH + N -----------------------------! !--------------------------------------------------------------------! +DSMC-Reaction23-ReactionName = EXC_N2_H DSMC-Reaction23-Reactants=(/5,13,0/) DSMC-Reaction23-Products=(/9,11,0,0/) DSMC-Reaction23-Arrhenius-Prefactor=4.9817E-18 ! A_f @@ -464,6 +487,7 @@ DSMC-Reaction23-Activation-Energy_K=71400 ! E_a !--------------------------------------------------------------------! !--------- Reaction23: CH4 + H -> CH3 + H2 --------------------------! !--------------------------------------------------------------------! +DSMC-Reaction24-ReactionName = EXC_CH4_H DSMC-Reaction24-Reactants=(/1,13,0/) DSMC-Reaction24-Products=(/2,7,0,0/) DSMC-Reaction24-Arrhenius-Prefactor=2.1919E-26 ! A_f @@ -473,6 +497,7 @@ DSMC-Reaction24-Activation-Energy_K=4045 ! E_a !--------------------------------------------------------------------! !--------- Reaction7c: N2 + e -> N + N + e ------------------! !--------------------------------------------------------------------! +DSMC-Reaction25-ReactionName = DISS_N2_WITH_EL DSMC-Reaction25-Reactants=(/5,14,0/) DSMC-Reaction25-Products=(/11,14,11,0/) DSMC-Reaction25-Arrhenius-Prefactor=4.98161783020654E-06 ! A_f @@ -481,6 +506,7 @@ DSMC-Reaction25-Activation-Energy_K=113200 ! E_a !--------------------------------------------------------------------! !--------- Reaction24: N + N -> N2+ + e ------------------! !--------------------------------------------------------------------! +DSMC-Reaction26-ReactionName = RECOMB_N_ION DSMC-Reaction26-Reactants=(/11,11,0/) DSMC-Reaction26-Products=(/15,14,0,0/) DSMC-Reaction26-Arrhenius-Prefactor=7.30637281763626E-23 @@ -489,6 +515,7 @@ DSMC-Reaction26-Activation-Energy_K=67500 ! E_a !--------------------------------------------------------------------! !--------- Reaction25: C + N -> CN+ + e ------------------! !--------------------------------------------------------------------! +DSMC-Reaction27-ReactionName = RECOMB_C_N_ION DSMC-Reaction27-Reactants=(/11,12,0/) DSMC-Reaction27-Products=(/16,14,0,0/) DSMC-Reaction27-Arrhenius-Prefactor=1.66053927673551E-15 @@ -497,18 +524,21 @@ DSMC-Reaction27-Activation-Energy_K=164400 ! E_a !--------------------------------------------------------------------! !--------- Reaction26: N + e -> N+ + e + e ------------------! !--------------------------------------------------------------------! +DSMC-Reaction28-ReactionName = ION_N_EL DSMC-Reaction28-ReactionModel=QK DSMC-Reaction28-Reactants=(/11,14,0/) DSMC-Reaction28-Products=(/17,14,14,0/) !--------------------------------------------------------------------! !--------- Reaction27: C + e -> C+ + e + e ------------------! !--------------------------------------------------------------------! +DSMC-Reaction29-ReactionName = ION_C_EL DSMC-Reaction29-ReactionModel=QK DSMC-Reaction29-Reactants=(/12,14,0/) DSMC-Reaction29-Products=(/18,14,14,0/) !--------------------------------------------------------------------! !--------- Reaction28: CN+ + N -> CN + N+ ------------------! !--------------------------------------------------------------------! +DSMC-Reaction30-ReactionName = EXC_CN+_N DSMC-Reaction30-Reactants=(/16,11,0/) DSMC-Reaction30-Products=(/8,17,0,0/) DSMC-Reaction30-Arrhenius-Prefactor=1.6273284912008E-17 diff --git a/tools/species_database/Species_Database.h5 b/tools/species_database/Species_Database.h5 index e7de9e8e36eb79ea3c9b1d38302dcd8117a40eef..87c8045725f04504ddf8cb56fd11bb300a72fe56 100644 GIT binary patch literal 223336 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

7zJ* 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 Date: Thu, 20 Oct 2022 16:08:37 +0200 Subject: [PATCH 037/222] StrScalar --- tools/species_database/Species_Database.h5 | Bin 223336 -> 176352 bytes .../create_species_database.py | 10 +++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tools/species_database/Species_Database.h5 b/tools/species_database/Species_Database.h5 index 87c8045725f04504ddf8cb56fd11bb300a72fe56..c60919c80c7268b99453737a118a29b0546ff6cc 100644 GIT binary patch delta 12307 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 diff --git a/tools/species_database/create_species_database.py b/tools/species_database/create_species_database.py index c9334ff9a..b2c3ef2e3 100644 --- a/tools/species_database/create_species_database.py +++ b/tools/species_database/create_species_database.py @@ -138,10 +138,10 @@ def is_float(value): elif var_name[1] in spec_attr_list: var_value = str(int(var_value)) spec_name_list = spec_dict[var_value] - hdf_species.attrs[var_name[1]] = spec_name_list + hdf_species.attrs[var_name[1]] = np.string_(spec_name_list) print('Species parameter set: ', var_name[1]) else: - if 'F' in var_value or 'false' in var_value: + if 'F' in var_value or 'false' in var_value or 'F': var_value = 0 else: var_value = 1 @@ -226,6 +226,7 @@ def is_float(value): surf_attr_list = ['Reactants', 'Products'] surf_wo_readin = ['Boundaries', 'NumOfBoundaries', 'Inhibition', 'Promotion'] +surf_string_list = ['Type'] # Read-in of gas-surface reaction data with open(args.ini_filename) as file: @@ -264,7 +265,10 @@ def is_float(value): if is_float(var_value): var_value = float(var_value) if var_name[1] not in surf_attr_list and var_name[1] not in surf_wo_readin: - hdf_surf.attrs[var_name[1]] = var_value + if var_name[1] not in surf_string_list: + hdf_surf.attrs[var_name[1]] = var_value + else: + hdf_surf.attrs[var_name[1]] = np.string_(var_value) print('Catalytic parameter set: ', var_name[1]) elif var_name[1] in surf_attr_list: spec_name_list = '' From 3f7645cd978afad9cfebcfad22dc8d3f643a70ed Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Thu, 20 Oct 2022 16:13:11 +0200 Subject: [PATCH 038/222] DSMC parameter read-in for polyatomic species --- src/particles/dsmc/dsmc_chemical_init.f90 | 40 +++- src/particles/dsmc/dsmc_init.f90 | 98 ++++++++-- src/particles/dsmc/dsmc_polyatomic_model.f90 | 189 +++++++++++++++++-- tools/species_database/DSMC_H2.ini | 145 ++++++++++++++ 4 files changed, 441 insertions(+), 31 deletions(-) create mode 100755 tools/species_database/DSMC_H2.ini diff --git a/src/particles/dsmc/dsmc_chemical_init.f90 b/src/particles/dsmc/dsmc_chemical_init.f90 index a2ff6b59e..8b51a1dec 100644 --- a/src/particles/dsmc/dsmc_chemical_init.f90 +++ b/src/particles/dsmc/dsmc_chemical_init.f90 @@ -650,8 +650,13 @@ SUBROUTINE DSMC_BackwardRate_init() USE MOD_Globals USE MOD_ReadInTools USE MOD_DSMC_Vars ,ONLY: ChemReac, DSMC, SpecDSMC, PolyatomMolDSMC -USE MOD_PARTICLE_Vars ,ONLY: nSpecies, Species +USE MOD_PARTICLE_Vars ,ONLY: nSpecies, Species, SpeciesDatabase USE MOD_DSMC_ChemReact ,ONLY: CalcPartitionFunction +USE MOD_io_hdf5 +USE MOD_HDF5_input ,ONLY: ReadAttribute +#if USE_MPI +USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance +#endif /*USE_MPI*/ ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -661,8 +666,10 @@ SUBROUTINE DSMC_BackwardRate_init() !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES CHARACTER(LEN=3) :: hilf -INTEGER :: iSpec, iReac, iReacForward, iPolyatMole, PartitionArraySize, iInter +INTEGER :: iSpec, iReac, iReacForward, iPolyatMole, PartitionArraySize, iInter,err REAL :: Temp, Qtra, Qrot, Qvib, Qelec +CHARACTER(LEN=64) :: dsetname +INTEGER(HID_T) :: file_id_specdb ! File identifier !=================================================================================================================================== IF(ChemReac%AnyXSecReaction) CALL abort(__STAMP__,& @@ -672,7 +679,34 @@ SUBROUTINE DSMC_BackwardRate_init() DO iSpec = 1, nSpecies IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN WRITE(UNIT=hilf,FMT='(I0)') iSpec - SpecDSMC(iSpec)%SymmetryFactor = GETINT('Part-Species'//TRIM(hilf)//'-SymmetryFactor') + + + IF(SpeciesDatabase.NE.'none') THEN + ! Initialize FORTRAN interface. + CALL H5OPEN_F(err) + CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) + + + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + CALL ReadAttribute(file_id_specdb,'SymmetryFactor',1,DatasetName = dsetname,IntScalar=SpecDSMC(iSpec)%SymmetryFactor) + LBWRITE (UNIT_stdOut,*) 'SymmetryFactor: ', SpecDSMC(iSpec)%SymmetryFactor + + ! Close the file. + CALL H5FCLOSE_F(file_id_specdb, err) + ! Close FORTRAN interface. + CALL H5CLOSE_F(err) + + END IF + + IF(ANY(Species(:)%DoOverwriteParameters)) THEN + IF(Species(iSpec)%DoOverwriteParameters) THEN + LBWRITE (UNIT_stdOut,'(66(". "))') + WRITE(UNIT=hilf,FMT='(I0)') iSpec + SpecDSMC(iSpec)%SymmetryFactor = GETINT('Part-Species'//TRIM(hilf)//'-SymmetryFactor') + END IF + END IF + IF(SpecDSMC(iSpec)%PolyatomicMol) THEN iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray IF(PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index 458d9bc06..e6719e395 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -308,6 +308,8 @@ SUBROUTINE InitDSMC() CHARACTER(LEN=64) :: dsetname INTEGER(HID_T) :: file_id_specdb ! File identifier INTEGER(HID_T) :: dset_id_specdb ! Dataset identifier +INTEGER :: IntToLog +CHARACTER(LEN=255) :: hilfname !=================================================================================================================================== LBWRITE(UNIT_StdOut,'(132("-"))') LBWRITE(UNIT_stdOut,'(A)') ' DSMC INIT ...' @@ -693,12 +695,14 @@ SUBROUTINE InitDSMC() DO iSpec = 1, nSpecies IF(.NOT.Species(iSpec)%DoOverwriteParameters) THEN + dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) WRITE(UNIT=hilf,FMT='(I0)') iSpec IF(Species(iSpec)%InterID.NE.4) THEN dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) - CALL AttributeExists(file_id_specdb,'PolyatomicMol',TRIM(dsetname), AttrExists=Attr_Exists) + CALL AttributeExists(file_id_specdb,'PolyatomicMol',TRIM(dsetname),AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'PolyatomicMol',1,DatasetName = dsetname,LogicalScalar=SpecDSMC(iSpec)%PolyatomicMol) + CALL ReadAttribute(file_id_specdb,'PolyatomicMol',1,DatasetName = dsetname,IntScalar=IntToLog) + IF(IntToLog.EQ.1) SpecDSMC(iSpec)%PolyatomicMol = .TRUE. LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) LBWRITE (UNIT_stdOut,*) 'PolyatomicMol: ', SpecDSMC(iSpec)%PolyatomicMol ELSE @@ -1033,6 +1037,7 @@ SUBROUTINE InitDSMC() ! from the electronic state database to ensure consistent energies across chemical reactions of QK and Arrhenius type. IF((Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20).OR.(Species(iSpec)%InterID.EQ.4)) THEN SpecDSMC(iSpec)%HeatOfFormation = 0.0 + LBWRITE (UNIT_stdOut,*) 'HeatOfFormation_K: ', SpecDSMC(iSpec)%HeatOfFormation ELSE CALL ReadAttribute(file_id_specdb,'HeatOfFormation_K',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%HeatOfFormation) LBWRITE (UNIT_stdOut,*) 'HeatOfFormation_K: ', SpecDSMC(iSpec)%HeatOfFormation @@ -1057,13 +1062,48 @@ SUBROUTINE InitDSMC() SpecDSMC(iSpec)%HeatOfFormation = SpecDSMC(iSpec)%HeatOfFormation * BoltzmannConst END IF END IF + END DO ! Heat of formation of ionized species is modified with the ionization energy directly from read-in electronic energy levels ! of the ground/previous state of the respective species (Input requires a species number (eg species number of N for NIon1)) - IF((Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20)) THEN - SpecDSMC(iSpec)%PreviousState = GETINT('Part-Species'//TRIM(hilf)//'-PreviousState') - ELSE - SpecDSMC(iSpec)%PreviousState = 0 + IF(SpeciesDatabase.NE.'none') THEN + ! Initialize FORTRAN interface. + CALL H5OPEN_F(err) + CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) + DO iSpec=1,nSpecies + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + WRITE(UNIT=hilf,FMT='(I0)') iSpec + CALL AttributeExists(file_id_specdb,'PreviousState',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'PreviousState',1,DatasetName = dsetname,StrScalar=hilfname) + DO jSpec=1,nSpecies + IF(TRIM(hilfname).EQ.TRIM(SpecDSMC(jSpec)%Name)) THEN + SpecDSMC(iSpec)%PreviousState=jSpec + END IF + END DO + ELSE + SpecDSMC(iSpec)%PreviousState = 0 + END IF + LBWRITE (UNIT_stdOut,*) 'PreviousState: ', SpecDSMC(iSpec)%PreviousState + END DO + ! Close the file. + CALL H5FCLOSE_F(file_id_specdb, err) + ! Close FORTRAN interface. + CALL H5CLOSE_F(err) + END IF !database + + DO iSpec=1,nSpecies + WRITE(UNIT=hilf,FMT='(I0)') iSpec + IF(Species(iSpec)%DoOverwriteParameters) THEN + IF((Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20)) THEN + SpecDSMC(iSpec)%PreviousState = GETINT('Part-Species'//TRIM(hilf)//'-PreviousState') + ELSE + SpecDSMC(iSpec)%PreviousState = 0 + END IF END IF + END DO + + DO iSpec=1,nSpecies ! Read-in of species for field ionization (only required if it cannot be determined automatically) IF(Species(iSpec)%InterID.NE.4) THEN SpecDSMC(iSpec)%NextIonizationSpecies = GETINT('Part-Species'//TRIM(hilf)//'-NextIonizationSpecies') @@ -1315,8 +1355,10 @@ SUBROUTINE CalcHeatOfFormation() USE MOD_Globals ,ONLY: mpiroot #endif USE MOD_Globals_Vars ,ONLY: BoltzmannConst,Joule2eV -USE MOD_PARTICLE_Vars ,ONLY: nSpecies, Species +USE MOD_PARTICLE_Vars ,ONLY: nSpecies, Species, SpeciesDatabase USE MOD_DSMC_Vars ,ONLY: SpecDSMC +USE MOD_io_hdf5 +USE MOD_HDF5_input ,ONLY:ReadAttribute #if USE_LOADBALANCE USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance #endif /*USE_LOADBALANCE*/ @@ -1325,9 +1367,11 @@ SUBROUTINE CalcHeatOfFormation() ! INPUT / OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -CHARACTER(32) :: hilf2 -LOGICAL :: AutoDetect -INTEGER :: iSpec,jSpec,counter,MaxElecQua +CHARACTER(32) :: hilf2 +LOGICAL :: AutoDetect +INTEGER :: iSpec,jSpec,counter,MaxElecQua,err +CHARACTER(LEN=64) :: dsetname +INTEGER(HID_T) :: file_id_specdb ! File identifier !=================================================================================================================================== AutoDetect=.TRUE. DO iSpec = 1, nSpecies @@ -1335,7 +1379,39 @@ SUBROUTINE CalcHeatOfFormation() IF((Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20)) THEN IF(SpecDSMC(iSpec)%PreviousState.EQ.0) THEN WRITE(UNIT=hilf2,FMT='(I0)') iSpec - SpecDSMC(iSpec)%HeatOfFormation = GETREAL('Part-Species'//TRIM(hilf2)//'-HeatOfFormation_K') * BoltzmannConst + IF(SpeciesDatabase.NE.'none') THEN + ! Initialize FORTRAN interface. + CALL H5OPEN_F(err) + CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + ! Read-in of heat of formation, ions are treated later using the heat of formation of their ground state and data from the + ! from the electronic state database to ensure consistent energies across chemical reactions of QK and Arrhenius type. + IF((Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20).OR.(Species(iSpec)%InterID.EQ.4)) THEN + SpecDSMC(iSpec)%HeatOfFormation = 0.0 + LBWRITE (UNIT_stdOut,*) 'HeatOfFormation_K: ', SpecDSMC(iSpec)%HeatOfFormation + ELSE + CALL ReadAttribute(file_id_specdb,'HeatOfFormation_K',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%HeatOfFormation) + LBWRITE (UNIT_stdOut,*) 'HeatOfFormation_K: ', SpecDSMC(iSpec)%HeatOfFormation + SpecDSMC(iSpec)%HeatOfFormation = SpecDSMC(iSpec)%HeatOfFormation * BoltzmannConst + ENDIF + ! Close the file. + CALL H5FCLOSE_F(file_id_specdb, err) + ! Close FORTRAN interface. + CALL H5CLOSE_F(err) + END IF !database + + IF(Species(iSpec)%DoOverwriteParameters) THEN + ! Read-in of heat of formation, ions are treated later using the heat of formation of their ground state and data from the + ! from the electronic state database to ensure consistent energies across chemical reactions of QK and Arrhenius type. + IF((Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20).OR.(Species(iSpec)%InterID.EQ.4)) THEN + SpecDSMC(iSpec)%HeatOfFormation = 0.0 + ELSE + SpecDSMC(iSpec)%HeatOfFormation = GETREAL('Part-Species'//TRIM(hilf2)//'-HeatOfFormation_K') + SpecDSMC(iSpec)%HeatOfFormation = SpecDSMC(iSpec)%HeatOfFormation * BoltzmannConst + END IF + END IF + ELSE IF(SpecDSMC(SpecDSMC(iSpec)%PreviousState)%MaxElecQuant.GT.0) THEN jSpec = SpecDSMC(iSpec)%PreviousState diff --git a/src/particles/dsmc/dsmc_polyatomic_model.f90 b/src/particles/dsmc/dsmc_polyatomic_model.f90 index 00cdb3f3f..e855d0124 100644 --- a/src/particles/dsmc/dsmc_polyatomic_model.f90 +++ b/src/particles/dsmc/dsmc_polyatomic_model.f90 @@ -49,6 +49,12 @@ SUBROUTINE InitPolyAtomicMolecs(iSpec) USE MOD_Globals_Vars, ONLY : BoltzmannConst USE MOD_DSMC_Vars, ONLY : DSMC, SpecDSMC, PolyatomMolDSMC USE MOD_ReadInTools + USE MOD_PARTICLE_Vars, ONLY : Species, SpeciesDatabase + USE MOD_io_hdf5 + USE MOD_HDF5_input, ONLY : ReadAttribute, DatasetExists, AttributeExists +#if USE_MPI + USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance +#endif /*USE_MPI*/ ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -60,18 +66,117 @@ SUBROUTINE InitPolyAtomicMolecs(iSpec) ! LOCAL VARIABLES CHARACTER(32) :: hilf, hilf2 INTEGER :: iPolyatMole, iVibDOF + LOGICAL :: Attr_Exists + CHARACTER(LEN=64) :: dsetname + INTEGER(HID_T) :: file_id_specdb ! File identifier + INTEGER :: IntToLog,err !=================================================================================================================================== WRITE(UNIT=hilf,FMT='(I0)') iSpec iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray - PolyatomMolDSMC(iPolyatMole)%LinearMolec = GETLOGICAL('Part-Species'//TRIM(hilf)//'-LinearMolec') + + IF(SpeciesDatabase.NE.'none') THEN + ! Initialize FORTRAN interface. + CALL H5OPEN_F(err) + CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) + + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + + CALL ReadAttribute(file_id_specdb,'LinearMolec',1,DatasetName = dsetname,IntScalar=IntToLog) + IF(IntToLog.EQ.1) THEN + PolyatomMolDSMC(iPolyatMole)%LinearMolec = .TRUE. + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + LBWRITE (UNIT_stdOut,*) 'LinearMolec: ', PolyatomMolDSMC(iPolyatMole)%LinearMolec + ELSE + PolyatomMolDSMC(iPolyatMole)%LinearMolec = .FALSE. + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + LBWRITE (UNIT_stdOut,*) 'LinearMolec: ', PolyatomMolDSMC(iPolyatMole)%LinearMolec + END IF + + ! Close the file. + CALL H5FCLOSE_F(file_id_specdb, err) + ! Close FORTRAN interface. + CALL H5CLOSE_F(err) + + END IF + + IF(ANY(Species(:)%DoOverwriteParameters)) THEN + IF(Species(iSpec)%DoOverwriteParameters) THEN + LBWRITE (UNIT_stdOut,'(66(". "))') + PolyatomMolDSMC(iPolyatMole)%LinearMolec = GETLOGICAL('Part-Species'//TRIM(hilf)//'-LinearMolec') + END IF + END IF + IF (PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN SpecDSMC(iSpec)%Xi_Rot = 2 ELSE SpecDSMC(iSpec)%Xi_Rot = 3 END IF - PolyatomMolDSMC(iPolyatMole)%NumOfAtoms = GETINT('Part-Species'//TRIM(hilf)//'-NumOfAtoms') + + + + + IF(SpeciesDatabase.NE.'none') THEN + ! Initialize FORTRAN interface. + CALL H5OPEN_F(err) + CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) + + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + + CALL ReadAttribute(file_id_specdb,'NumOfAtoms',1,DatasetName = dsetname,IntScalar=PolyatomMolDSMC(iPolyatMole)%NumOfAtoms) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + LBWRITE (UNIT_stdOut,*) 'NumOfAtoms: ', PolyatomMolDSMC(iPolyatMole)%NumOfAtoms + + ! Close the file. + CALL H5FCLOSE_F(file_id_specdb, err) + ! Close FORTRAN interface. + CALL H5CLOSE_F(err) + + END IF + + IF(ANY(Species(:)%DoOverwriteParameters)) THEN + IF(Species(iSpec)%DoOverwriteParameters) THEN + LBWRITE (UNIT_stdOut,'(66(". "))') + PolyatomMolDSMC(iPolyatMole)%NumOfAtoms = GETINT('Part-Species'//TRIM(hilf)//'-NumOfAtoms') + END IF + END IF + ! TSHO not implemented with polyatomic molecules, but Ediss_eV required for the calculation of polyatomic temp. (upper bound) - SpecDSMC(iSpec)%Ediss_eV = GETREAL('Part-Species'//TRIM(hilf)//'-Ediss_eV','0.') + IF(SpeciesDatabase.NE.'none') THEN + IF(.NOT.Species(iSpec)%DoOverwriteParameters) THEN + ! Initialize FORTRAN interface. + CALL H5OPEN_F(err) + CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) + + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + + CALL AttributeExists(file_id_specdb,'Ediss_eV',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'Ediss_eV',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%Ediss_eV) + ELSE + CALL abort(__STAMP__& + ,'ERROR in Polyatomic Species-Ini: Missing dissociation energy, Species: ',iSpec) + END IF + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + LBWRITE (UNIT_stdOut,*) 'Ediss_eV: ', SpecDSMC(iSpec)%Ediss_eV + + ! Close the file. + CALL H5FCLOSE_F(file_id_specdb, err) + ! Close FORTRAN interface. + CALL H5CLOSE_F(err) + END IF + + END IF + + IF(ANY(Species(:)%DoOverwriteParameters)) THEN + IF(Species(iSpec)%DoOverwriteParameters) THEN + LBWRITE (UNIT_stdOut,'(66(". "))') + SpecDSMC(iSpec)%Ediss_eV = GETREAL('Part-Species'//TRIM(hilf)//'-Ediss_eV','0.') + END IF + END IF + IF(SpecDSMC(iSpec)%Ediss_eV.EQ.0.) THEN CALL abort(& __STAMP__& @@ -87,23 +192,73 @@ SUBROUTINE InitPolyAtomicMolecs(iSpec) END IF ! Read-in of characteristic rotational temperature ALLOCATE(PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(3)) - IF(PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN - PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1) = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempRot','0') - PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(2:3) = 1 - ELSE - DO iVibDOF = 1,3 + + IF(SpeciesDatabase.NE.'none') THEN + ! Initialize FORTRAN interface. + CALL H5OPEN_F(err) + CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) + + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + + IF(PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN + CALL AttributeExists(file_id_specdb,'CharaTempRot',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'CharaTempRot',1,DatasetName = dsetname,RealScalar=PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1)) + ELSE + PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1) = 0 + END IF + LBWRITE (UNIT_stdOut,*) 'CharaTempRot: ', PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1) + PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(2:3) = 1 + ELSE + DO iVibDOF = 1,3 + WRITE(UNIT=hilf2,FMT='(I0)') iVibDOF + CALL AttributeExists(file_id_specdb,TRIM('CharaTempRot'//TRIM(hilf2)),TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,TRIM('CharaTempRot'//TRIM(hilf2)),1,DatasetName = dsetname,RealScalar=PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF)) + ELSE + PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF) = 0 + END IF + LBWRITE (UNIT_stdOut,*) 'CharaTempRot',hilf2,':', PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF) + END DO + END IF + ! Read-in of characteristic vibrational temperature and calculation of zero-point energy + DO iVibDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF WRITE(UNIT=hilf2,FMT='(I0)') iVibDOF - PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF) = & - GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempRot'//TRIM(hilf2),'0') + CALL ReadAttribute(file_id_specdb,TRIM('CharaTempVib'//TRIM(hilf2)),1,DatasetName = dsetname,RealScalar=PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF)) + SpecDSMC(iSpec)%EZeroPoint = SpecDSMC(iSpec)%EZeroPoint & + + DSMC%GammaQuant*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF)*BoltzmannConst + LBWRITE (UNIT_stdOut,*) 'CharaTempVib',hilf2,':', PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF) END DO + ! Close the file. + CALL H5FCLOSE_F(file_id_specdb, err) + ! Close FORTRAN interface. + CALL H5CLOSE_F(err) + END IF - ! Read-in of characteristic vibrational temperature and calculation of zero-point energy - DO iVibDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF - WRITE(UNIT=hilf2,FMT='(I0)') iVibDOF - PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF) = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempVib'//TRIM(hilf2)) - SpecDSMC(iSpec)%EZeroPoint = SpecDSMC(iSpec)%EZeroPoint & - + DSMC%GammaQuant*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF)*BoltzmannConst - END DO + + IF(ANY(Species(:)%DoOverwriteParameters)) THEN + IF(Species(iSpec)%DoOverwriteParameters) THEN + IF(PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN + PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1) = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempRot','0') + PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(2:3) = 1 + ELSE + DO iVibDOF = 1,3 + WRITE(UNIT=hilf2,FMT='(I0)') iVibDOF + PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF) = & + GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempRot'//TRIM(hilf2),'0') + END DO + END IF + ! Read-in of characteristic vibrational temperature and calculation of zero-point energy + DO iVibDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF + WRITE(UNIT=hilf2,FMT='(I0)') iVibDOF + PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF) = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempVib'//TRIM(hilf2)) + SpecDSMC(iSpec)%EZeroPoint = SpecDSMC(iSpec)%EZeroPoint & + + DSMC%GammaQuant*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF)*BoltzmannConst + END DO + END IF + END IF + ALLOCATE(PolyatomMolDSMC(iPolyatMole)%MaxVibQuantDOF(PolyatomMolDSMC(iPolyatMole)%VibDOF)) ! Maximum number of quantum number per DOF cut at 80 to reduce computational effort PolyatomMolDSMC(iPolyatMole)%MaxVibQuantDOF(1:PolyatomMolDSMC(iPolyatMole)%VibDOF) = 80 diff --git a/tools/species_database/DSMC_H2.ini b/tools/species_database/DSMC_H2.ini new file mode 100755 index 000000000..fca6d291f --- /dev/null +++ b/tools/species_database/DSMC_H2.ini @@ -0,0 +1,145 @@ + +! =============================================================================== ! +! Species1, H2 +! =============================================================================== ! +Part-Species1-SpeciesName = H2 +Part-Species1-MassIC = 3.0E-27 +Part-Species1-ChargeIC = 0.0 +Part-Species1-InteractionID = 2 +Part-Species1-Tref = 1000 +Part-Species1-dref = 2.68E-10 +Part-Species1-omega = 0.407 +Part-Species1-HeatOfFormation_K = 0.0 +Part-Species1-CharaTempVib = 6332.37 +Part-Species1-Ediss_eV = 4.47 +! =============================================================================== ! +! Species2, H +! =============================================================================== ! +Part-Species2-SpeciesName = H +Part-Species2-MassIC = 1.5E-27 +Part-Species2-ChargeIC = 0.0 +Part-Species2-InteractionID = 1 +Part-Species2-Tref = 1000 +Part-Species2-dref = 2.581E-10 +Part-Species2-omega = 0.407 +Part-Species2-HeatOfFormation_K = 26159.76 +! =============================================================================== ! +! Species3, e +! =============================================================================== ! +Part-Species3-SpeciesName = electron +Part-Species3-MassIC = 1.0E-29 +Part-Species3-ChargeIC = 0.0 +Part-Species3-InteractionID = 4 +Part-Species3-Tref = 1000 +Part-Species3-dref = 2.817920E-15 +Part-Species3-omega = 0.407 +Part-Species3-UseCollXSec = T +Part-Species3-UseVibXSec = T +! =============================================================================== ! +! Species4, H2Ion +! =============================================================================== ! +Part-Species4-SpeciesName = H2Ion1 +Part-Species4-MassIC = 3.0E-27 +Part-Species4-ChargeIC = 1.0 +Part-Species4-InteractionID = 20 +Part-Species4-Tref = 1000 +Part-Species4-dref = 3.883E-10 +Part-Species4-omega = 0.407 +Part-Species4-CharaTempVib = 3341.01 +Part-Species4-Ediss_eV = 2.65 +Part-Species4-PreviousState = 1 +Part-Species4-UseVibXSec = T +! =============================================================================== ! +! Species5, HIon +! =============================================================================== ! +Part-Species5-SpeciesName = HIon1 +Part-Species5-MassIC = 1.5E-27 +Part-Species5-ChargeIC = 1.0 +Part-Species5-InteractionID = 10 +Part-Species5-Tref = 1000 +Part-Species5-dref = 3.912E-10 +Part-Species5-omega = 0.407 +Part-Species5-PreviousState = 2 +Part-Species5-UseCollXSec = T +Part-Species5-UseVibXSec = T +! =============================================================================== ! +! Species6, H3Ion +! =============================================================================== ! +Part-Species6-SpeciesName = H3Ion1 +Part-Species6-MassIC = 4.5E-27 +Part-Species6-ChargeIC = 1.0 +Part-Species6-InteractionID = 20 +Part-Species6-PolyatomicMol = T +Part-Species6-NumOfAtoms = 3 +Part-Species6-LinearMolec = F +Part-Species6-Tref = 1000 +Part-Species6-dref = 4.5E-10 ! Guess +Part-Species6-omega = 0.407 +Part-Species6-CharaTempVib1 = 4572.92 +Part-Species6-CharaTempVib2 = 3627.94 +Part-Species6-CharaTempVib3 = 3627.94 +Part-Species6-Ediss_eV = 4.51 +Part-Species6-HeatOfFormation_K = 132803.52 +Part-Species6-UseCollXSec = T +;! =============================================================================== ! +;! Reactions +;! =============================================================================== ! +;DSMC-NumOfReactions=11 +;! ---------------------------------------------------- +;! Electron impact +;! ---------------------------------------------------- +;! Dissociation: H2 + e --> H + H + e +;DSMC-Reaction4-ReactionModel = XSec +;DSMC-Reaction4-Reactants = (/1,3,0/) +;DSMC-Reaction4-Products = (/2,3,2,0/) +;! ---------------------------------------------------- +;! Ionization: H2 + e --> H2Ion1 + electron + electron +;DSMC-Reaction5-ReactionModel = XSec +;DSMC-Reaction5-Reactants = (/1,3,0/) +;DSMC-Reaction5-Products = (/4,3,3,0/) +;! ---------------------------------------------------- +;! Dissociative ionization: H2 + e --> H + HIon + electron + electron +;DSMC-Reaction6-ReactionModel = XSec +;DSMC-Reaction6-Reactants = (/1,3,0/) +;DSMC-Reaction6-Products = (/2,3,3,5/) +;! ---------------------------------------------------- +;! H2Ion1 impact +;! ---------------------------------------------------- +;! H3Ion formation: H2 + H2Ion1 --> H + H3Ion +;DSMC-Reaction7-ReactionModel = XSec +;DSMC-Reaction7-Reactants = (/1,4,0/) +;DSMC-Reaction7-Products = (/2,6,0,0/) +;! Charge exchange: H2 + H2Ion1 --> H2Ion1 + H2 +;DSMC-Reaction8-ReactionModel = XSec +;DSMC-Reaction8-Reactants = (/1,4,0/) +;DSMC-Reaction8-Products = (/4,1,0,0/) +;! Dissociative charge exchange: H2 + H2Ion1 --> H + H2 + HIon1 +;DSMC-Reaction9-ReactionModel = XSec +;DSMC-Reaction9-Reactants = (/1,4,0/) +;DSMC-Reaction9-Products = (/2,1,5,0/) +;! ---------------------------------------------------- +;! HIon1 impact +;! ---------------------------------------------------- +;! Charge exchange: H2 + HIon1 --> H2Ion1 + H +;DSMC-Reaction10-ReactionModel = XSec +;DSMC-Reaction10-Reactants = (/1,5,0/) +;DSMC-Reaction10-Products = (/4,2,0,0/) +;! ---------------------------------------------------- +;! H3Ion1 impact +;! ---------------------------------------------------- +;! Ionization: H2 + H3Ion1 --> H2Ion1 + H3Ion1 + electron +;DSMC-Reaction11-ReactionModel = XSec +;DSMC-Reaction11-Reactants = (/1,6,0/) +;DSMC-Reaction11-Products = (/4,6,3,0/) +;! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H + H2Ion1 +;DSMC-Reaction1-ReactionModel = XSec +;DSMC-Reaction1-Reactants = (/1,6,0/) +;DSMC-Reaction1-Products = (/1,2,4,0/) +;! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H + H + HIon1 +;DSMC-Reaction2-ReactionModel = XSec +;DSMC-Reaction2-Reactants = (/1,6,0/) +;DSMC-Reaction2-Products = (/1,2,2,5/) +;! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H2 + HIon1 +;DSMC-Reaction3-ReactionModel = XSec +;DSMC-Reaction3-Reactants = (/1,6,0/) +;DSMC-Reaction3-Products = (/1,1,5,0/) From ce1b360e048ce0d5624cdbd19ff9e8707d69bb02 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Thu, 20 Oct 2022 17:43:52 +0200 Subject: [PATCH 039/222] current state --- src/particles/dsmc/dsmc_chemical_init.f90 | 67 +++++++++++++++++-- src/particles/dsmc/dsmc_vars.f90 | 3 +- tools/species_database/DSMC_H2.ini | 22 ++++++ .../create_species_database.py | 2 +- 4 files changed, 86 insertions(+), 8 deletions(-) diff --git a/src/particles/dsmc/dsmc_chemical_init.f90 b/src/particles/dsmc/dsmc_chemical_init.f90 index 8b51a1dec..8e5888458 100644 --- a/src/particles/dsmc/dsmc_chemical_init.f90 +++ b/src/particles/dsmc/dsmc_chemical_init.f90 @@ -44,6 +44,7 @@ SUBROUTINE DefineParametersChemistry() !=================================================================================================================================== CALL prms%SetSection("Chemistry") CALL prms%CreateIntOption( 'DSMC-NumOfReactions','Number of chemical reactions') +CALL prms%CreateLogicalOption( 'DSMC-OverwriteReacDatabase','Flag to set reac parameters manually', '.FALSE.') CALL prms%CreateIntOption( 'DSMC-Reaction[$]-NumberOfNonReactives', & 'Number of non-reactive collision partners (Length of the read-in vector)', & '0', numberedmulti=.TRUE.) @@ -135,12 +136,14 @@ SUBROUTINE DSMC_chemical_init() USE MOD_ReadInTools USE MOD_Globals_Vars ,ONLY: BoltzmannConst, Pi USE MOD_DSMC_Vars ,ONLY: ChemReac, DSMC, SpecDSMC, BGGas, CollInf -USE MOD_PARTICLE_Vars ,ONLY: nSpecies, Species +USE MOD_PARTICLE_Vars ,ONLY: nSpecies, Species, SpeciesDatabase USE MOD_Particle_Analyze_Vars ,ONLY: ChemEnergySum USE MOD_DSMC_ChemReact ,ONLY: CalcPartitionFunction USE MOD_part_emission_tools ,ONLY: CalcPhotonEnergy USE MOD_DSMC_QK_Chemistry ,ONLY: QK_Init USE MOD_MCC_Vars ,ONLY: NbrOfPhotonXsecReactions +USE MOD_io_hdf5 +USE MOD_HDF5_input ,ONLY: ReadAttribute, DatasetExists, AttributeExists #if USE_LOADBALANCE USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance #endif /*USE_LOADBALANCE*/ @@ -153,11 +156,14 @@ SUBROUTINE DSMC_chemical_init() !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES CHARACTER(LEN=3) :: hilf -INTEGER :: iReac, iReac2, iSpec, iPart, iReacDiss, iSpec2, iInit +INTEGER :: iReac, iReac2, iSpec, iPart, iReacDiss, iSpec2, iInit, err INTEGER, ALLOCATABLE :: DummyRecomb(:,:) LOGICAL :: DoScat REAL :: BGGasEVib, PhotonEnergy, omega, ChargeProducts, ChargeReactants INTEGER :: Reactant1, Reactant2, Reactant3, MaxSpecies, ReadInNumOfReact +LOGICAL :: Attr_Exists, DataSetFound +CHARACTER(LEN=64) :: dsetname +INTEGER(HID_T) :: file_id_specdb ! File identifier !=================================================================================================================================== NbrOfPhotonXsecReactions = 0 @@ -286,6 +292,11 @@ SUBROUTINE DSMC_chemical_init() END DO END IF +ChemReac%DoOverwriteReacParameters = GETLOGICAL('DSMC-OverwriteReacDatabase') +IF(SpeciesDatabase.EQ.'none') THEN + ChemReac%DoOverwriteReacParameters = .TRUE. +END IF + DoScat = .false. DO iReac = 1, ReadInNumOfReact WRITE(UNIT=hilf,FMT='(I0)') iReac @@ -295,10 +306,54 @@ SUBROUTINE DSMC_chemical_init() ChemReac%Products(iReac,:) = GETINTARRAY('DSMC-Reaction'//TRIM(hilf)//'-Products',4) SELECT CASE (TRIM(ChemReac%ReactModel(iReac))) CASE('TCE') - ! Total Collision Energy: Arrhenius-based chemistry model - ChemReac%Arrhenius_Prefactor(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-Arrhenius-Prefactor') - ChemReac%Arrhenius_Powerfactor(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-Arrhenius-Powerfactor') - ChemReac%EActiv(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-Activation-Energy_K')*BoltzmannConst + IF(SpeciesDatabase.NE.'none') THEN + ! Initialize FORTRAN interface. + CALL H5OPEN_F(err) + CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for reaction: ', ChemReac%ReactionName(iReac) + dsetname = TRIM('/Reaction/'//TRIM(ChemReac%ReactionName(iReac))) + CALL DatasetExists(file_id_specdb,TRIM(dsetname),DataSetFound) + IF(.NOT.DataSetFound)THEN + Species(iSpec)%DoOverwriteParameters = .TRUE. + SWRITE(*,*) 'WARNING: DataSet not found: ['//TRIM(dsetname)//'] ['//TRIM(SpeciesDatabase)//']' + ELSE + CALL AttributeExists(file_id_specdb,'Arrhenius-Prefactor',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'Arrhenius-Prefactor',1,DatasetName = dsetname,RealScalar=ChemReac%Arrhenius_Prefactor(iReac)) + ELSE + ChemReac%Arrhenius_Prefactor(iReac) = 0.0 + END IF + LBWRITE (UNIT_stdOut,*) 'Arrhenius-Prefactor: ', ChemReac%Arrhenius_Prefactor(iReac) + CALL AttributeExists(file_id_specdb,'Arrhenius-Powerfactor',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'Arrhenius-Powerfactor',1,DatasetName = dsetname,RealScalar=ChemReac%Arrhenius_Powerfactor(iReac)) + ELSE + ChemReac%Arrhenius_Powerfactor(iReac) = 0.0 + END IF + LBWRITE (UNIT_stdOut,*) 'Arrhenius-Powerfactor: ', ChemReac%Arrhenius_Powerfactor(iReac) + CALL AttributeExists(file_id_specdb,'Activation-Energy_K',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'Activation-Energy_K',1,DatasetName = dsetname,RealScalar=ChemReac%EActiv(iReac)) + ChemReac%EActiv(iReac) = ChemReac%EActiv(iReac)*BoltzmannConst + ELSE + ChemReac%EActiv(iReac) = 0.0 + END IF + LBWRITE (UNIT_stdOut,*) 'Activation-Energy_K: ', ChemReac%EActiv(iReac) + END IF + + ! Close the file. + CALL H5FCLOSE_F(file_id_specdb, err) + ! Close FORTRAN interface. + CALL H5CLOSE_F(err) + END IF !database + + IF(ChemReac%DoOverwriteReacParameters) THEN + ! Total Collision Energy: Arrhenius-based chemistry model + ChemReac%Arrhenius_Prefactor(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-Arrhenius-Prefactor') + ChemReac%Arrhenius_Powerfactor(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-Arrhenius-Powerfactor') + ChemReac%EActiv(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-Activation-Energy_K')*BoltzmannConst + END IF + CASE('QK') ! Quantum Kinetic: Threshold energy based chemistry model ChemReac%AnyQKReaction = .TRUE. diff --git a/src/particles/dsmc/dsmc_vars.f90 b/src/particles/dsmc/dsmc_vars.f90 index 207368bc6..a2d182704 100644 --- a/src/particles/dsmc/dsmc_vars.f90 +++ b/src/particles/dsmc/dsmc_vars.f90 @@ -373,7 +373,8 @@ MODULE MOD_DSMC_Vars TYPE tChemReactions LOGICAL :: AnyQKReaction ! Defines if any QK reaction present - INTEGER :: NumOfReact ! Number of possible reactions + INTEGER :: NumOfReact ! Number of possible reactions + LOGICAL :: DoOverwriteReacParameters ! Flag to overwrite reaction parameters manually INTEGER :: NumOfReactWOBackward ! Number of possible reactions w/o automatic backward reactions TYPE(tArbDiss), ALLOCATABLE :: ArbDiss(:) ! Construct to allow the definition of a list of non-reactive educts LOGICAL, ALLOCATABLE :: BackwardReac(:) ! Defines if backward reaction is calculated diff --git a/tools/species_database/DSMC_H2.ini b/tools/species_database/DSMC_H2.ini index fca6d291f..f3b3d40a7 100755 --- a/tools/species_database/DSMC_H2.ini +++ b/tools/species_database/DSMC_H2.ini @@ -81,6 +81,28 @@ Part-Species6-CharaTempVib3 = 3627.94 Part-Species6-Ediss_eV = 4.51 Part-Species6-HeatOfFormation_K = 132803.52 Part-Species6-UseCollXSec = T + +DSMC-NumOfReactions=2 +!--------------------------------------------------------------------! +!##################### Dissociation Reactions #######################! +!--------------------------------------------------------------------! +DSMC-Reaction1-ReactionName = TEST_REAC1 +DSMC-Reaction1-Reactants=(/5,6,0/) +DSMC-Reaction1-Products=(/4,0,0,0/) +DSMC-Reaction1-Arrhenius-Prefactor=7.8047E+17 ! A_f +DSMC-Reaction1-Arrhenius-Powerfactor=-8.2 ! B_f +DSMC-Reaction1-Activation-Energy_K=59200.0 ! E_a +DSMC-Reaction1-NumberOfNonReactives=3 +DSMC-Reaction1-NonReactiveSpecies=(/1,2,3/) + +DSMC-Reaction2-ReactionName = TEST_REAC2 +DSMC-Reaction2-Reactants=(/1,2,0/) +DSMC-Reaction2-Products=(/3,0,0,0/) +DSMC-Reaction2-Arrhenius-Prefactor=8.8047E+17 ! A_f +DSMC-Reaction2-Arrhenius-Powerfactor=-7.2 ! B_f +DSMC-Reaction2-Activation-Energy_K=200.0 ! E_a +DSMC-Reaction2-NumberOfNonReactives=2 +DSMC-Reaction2-NonReactiveSpecies=(/4,5/) ;! =============================================================================== ! ;! Reactions ;! =============================================================================== ! diff --git a/tools/species_database/create_species_database.py b/tools/species_database/create_species_database.py index b2c3ef2e3..d834ccec4 100644 --- a/tools/species_database/create_species_database.py +++ b/tools/species_database/create_species_database.py @@ -141,7 +141,7 @@ def is_float(value): hdf_species.attrs[var_name[1]] = np.string_(spec_name_list) print('Species parameter set: ', var_name[1]) else: - if 'F' in var_value or 'false' in var_value or 'F': + if 'F' in var_value or 'false' in var_value: var_value = 0 else: var_value = 1 From 48f3fef7c30ac71361a7f4f8209a30ba8ae2733c Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Fri, 21 Oct 2022 09:51:24 +0200 Subject: [PATCH 040/222] database --- tools/species_database/DSMC_5SpecAir.ini | 166 ++++++++++++++++++ tools/species_database/DSMC_Surface.ini | 113 ++++++++++++ .../{DSMC_Titan_full.ini => DSMC_Titan.ini} | 36 ++++ .../Electronic-State-Database.h5 | Bin 8624 -> 107464 bytes tools/species_database/Species_Database.h5 | Bin 176352 -> 318544 bytes 5 files changed, 315 insertions(+) create mode 100644 tools/species_database/DSMC_5SpecAir.ini create mode 100755 tools/species_database/DSMC_Surface.ini rename tools/species_database/{DSMC_Titan_full.ini => DSMC_Titan.ini} (93%) diff --git a/tools/species_database/DSMC_5SpecAir.ini b/tools/species_database/DSMC_5SpecAir.ini new file mode 100644 index 000000000..77e8dd373 --- /dev/null +++ b/tools/species_database/DSMC_5SpecAir.ini @@ -0,0 +1,166 @@ +! ======================================================================= +! Data for air taken from +! Species: G. A. Bird, Nonequilibrium radiation during re-entry at 10 km/s, AIAA-Paper 87-1543 +! Reactions: MONACO-Manual (Dietrich, Boyd) = Parks model (1985) +! ======================================================================= +! =============================================================================== ! +! Species1, N +! =============================================================================== ! +Part-Species1-SpeciesName=N +Part-Species1-MassIC=2.32600E-26 ! N Molecular Mass +Part-Species1-InteractionID = 1 +Part-Species1-Tref =273 ! K +Part-Species1-dref = 3.0E-10 ! m +Part-Species1-omega=0.24 +Part-Species1-HeatOfFormation_K=56850.30 +! =============================================================================== ! +! Species2, O +! =============================================================================== ! +Part-Species2-SpeciesName=O +Part-Species2-MassIC=2.65700E-26 ! O Molecular Mass +Part-Species2-InteractionID = 1 +Part-Species2-Tref =273 +Part-Species2-dref = 3.0E-10 +Part-Species2-omega=0.24 +Part-Species2-HeatOfFormation_K=29969.45 +! =============================================================================== ! +! Species3, N2 +! =============================================================================== ! +Part-Species3-SpeciesName=N2 +Part-Species3-MassIC=4.65200E-26 ! N2 Molecular Mass +Part-Species3-InteractionID = 2 +Part-Species3-Tref =273 +Part-Species3-dref = 4.07E-10 +Part-Species3-omega=0.24 +Part-Species3-CharaTempVib=3393.3 +Part-Species3-Ediss_eV=9.759 +Part-Species3-CharaTempRot = 2.87 +Part-Species3-SymmetryFactor = 2 +Part-Species3-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species4, O2 +! =============================================================================== ! +Part-Species4-SpeciesName=O2 +Part-Species4-MassIC=5.31400E-26 ! O2 Molecular Mass +Part-Species4-InteractionID = 2 +Part-Species4-Tref =273 +Part-Species4-dref = 3.96E-10 +Part-Species4-omega=0.24 +Part-Species4-CharaTempVib=2272.8 +Part-Species4-Ediss_eV=5.115 +Part-Species4-CharaTempRot = 2.1 +Part-Species4-SymmetryFactor = 2 +Part-Species4-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species5, NO +! =============================================================================== ! +Part-Species5-SpeciesName=NO +Part-Species5-MassIC=4.98300E-26 ! NO Molecular Mass +Part-Species5-InteractionID = 2 +Part-Species5-Tref =273 +Part-Species5-dref = 4.00E-10 +Part-Species5-omega=0.24 +Part-Species5-CharaTempVib=2738.8 +Part-Species5-Ediss_eV=6.496 +Part-Species5-CharaTempRot = 2.4 +Part-Species5-SymmetryFactor = 1 +Part-Species5-HeatOfFormation_K=10859.38 +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=8 + +! ============ ! +! Dissociation (N2 + M -> N + N + M) +! ============ ! +!Reaction1 (N2 + molecule -> N + N + molecule) +DSMC-Reaction1-ReactionName = DISS_N2_MOL +DSMC-Reaction1-ReactionModel=TCE +DSMC-Reaction1-Reactants=(/3,0,0/) +DSMC-Reaction1-Products=(/1,0,1,0/) +DSMC-Reaction1-Arrhenius-Prefactor=6.170E-9 +DSMC-Reaction1-Arrhenius-Powerfactor=-1.60 +DSMC-Reaction1-Activation-Energy_K=113200.0 +DSMC-Reaction1-NumberOfNonReactives=3 +DSMC-Reaction1-NonReactiveSpecies=(/3,4,5/) + +!Reaction2 (N2 + atom -> N + N + atom) +DSMC-Reaction2-ReactionName = DISS_N2_AT +DSMC-Reaction2-ReactionModel=TCE +DSMC-Reaction2-Reactants=(/3,0,0/) +DSMC-Reaction2-Products=(/1,0,1,0/) +DSMC-Reaction2-Arrhenius-Prefactor=1.85E-08 +DSMC-Reaction2-Arrhenius-Powerfactor=-1.60 +DSMC-Reaction2-Activation-Energy_K=113200.0 +DSMC-Reaction2-NumberOfNonReactives=2 +DSMC-Reaction2-NonReactiveSpecies=(/1,2/) +! ============ ! +! Dissociation (O2 + M -> O + O + M) +! ============ ! +!Reaction3 (O2 + molecule -> O + O + molecule) +DSMC-Reaction3-ReactionName = DISS_O2_MOL +DSMC-Reaction3-ReactionModel=TCE +DSMC-Reaction3-Reactants=(/4,0,0/) +DSMC-Reaction3-Products=(/2,0,2,0/) +DSMC-Reaction3-Arrhenius-Prefactor=4.58E-11 +DSMC-Reaction3-Arrhenius-Powerfactor=-1.0 +DSMC-Reaction3-Activation-Energy_K=59500.0 +DSMC-Reaction3-NumberOfNonReactives=3 +DSMC-Reaction3-NonReactiveSpecies=(/3,4,5/) + +!Reaction4 (O2 + atom --> O + O + atom) +DSMC-Reaction4-ReactionName = DISS_O2_AT +DSMC-Reaction4-ReactionModel=TCE +DSMC-Reaction4-Reactants=(/4,0,0/) +DSMC-Reaction4-Products=(/2,0,2,0/) +DSMC-Reaction4-Arrhenius-Prefactor=1.375E-10 +DSMC-Reaction4-Arrhenius-Powerfactor=-1.0 +DSMC-Reaction4-Activation-Energy_K=59500.0 +DSMC-Reaction4-NumberOfNonReactives=2 +DSMC-Reaction4-NonReactiveSpecies=(/1,2/) + +! ============ ! +! Dissociation (NO + M -> N + O + M) +! ============ ! +!Reaction5 (NO + molecule --> N + O + molecule) +DSMC-Reaction5-ReactionName = DISS_NO_MOL +DSMC-Reaction5-ReactionModel=TCE +DSMC-Reaction5-Reactants=(/5,0,0/) +DSMC-Reaction5-Products=(/1,0,2,0/) +DSMC-Reaction5-Arrhenius-Prefactor=3.83E-13 +DSMC-Reaction5-Arrhenius-Powerfactor=-0.5 +DSMC-Reaction5-Activation-Energy_K=75500.0 +DSMC-Reaction5-NumberOfNonReactives=3 +DSMC-Reaction5-NonReactiveSpecies=(/3,4,5/) + +!Reaction6 (NO + atom --> N + O + atom) +DSMC-Reaction6-ReactionName = DISS_NO_AT +DSMC-Reaction6-ReactionModel=TCE +DSMC-Reaction6-Reactants=(/5,0,0/) +DSMC-Reaction6-Products=(/1,0,2,0/) +DSMC-Reaction6-Arrhenius-Prefactor=7.66E-13 +DSMC-Reaction6-Arrhenius-Powerfactor=-0.5 +DSMC-Reaction6-Activation-Energy_K=75500.0 +DSMC-Reaction6-NumberOfNonReactives=2 +DSMC-Reaction6-NonReactiveSpecies=(/1,2/) +! ============ ! +! Exchange +! ============ ! + +!Reaction7 (N2 + O --> NO + N) +DSMC-Reaction7-ReactionName = EXC_N2_O +DSMC-Reaction7-ReactionModel=TCE +DSMC-Reaction7-Reactants=(/3,2,0/) +DSMC-Reaction7-Products=(/5,1,0,0/) +DSMC-Reaction7-Arrhenius-Prefactor=5.3E-17 +DSMC-Reaction7-Arrhenius-Powerfactor=0.1 +DSMC-Reaction7-Activation-Energy_K=37700.0 + +!Reaction8 (NO + O --> N + O2) +DSMC-Reaction8-ReactionName = DISS_NO_O +DSMC-Reaction8-ReactionModel=TCE +DSMC-Reaction8-Reactants=(/5,2,0/) +DSMC-Reaction8-Products=(/4,1,0,0/) +DSMC-Reaction8-Arrhenius-Prefactor=3.6E-22 +DSMC-Reaction8-Arrhenius-Powerfactor=1.29 +DSMC-Reaction8-Activation-Energy_K=19600 diff --git a/tools/species_database/DSMC_Surface.ini b/tools/species_database/DSMC_Surface.ini new file mode 100755 index 000000000..5405b555d --- /dev/null +++ b/tools/species_database/DSMC_Surface.ini @@ -0,0 +1,113 @@ +! =============================================================================== ! +! Species1, CO2 +! =============================================================================== ! +Part-Species1-SpeciesName=CO2 +Part-Species1-PolyatomicMol=true +Part-Species1-InteractionID=2 +Part-Species1-Tref=273 +Part-Species1-dref=5.10E-10 +Part-Species1-omega=0.24 +Part-Species1-NumOfAtoms=3 +Part-Species1-LinearMolec=true +Part-Species1-CharaTempVib1=959.2 +Part-Species1-CharaTempVib2=959.2 +Part-Species1-CharaTempVib3=1917 +Part-Species1-CharaTempVib4=3378.1 +Part-Species1-Ediss_eV=5.43 +Part-Species1-HeatOfFormation_K=-47328.35 +Part-Species1-CharaTempRot = 0.6 +Part-Species1-SymmetryFactor = 2 +! =============================================================================== ! +! Species2, CO +! =============================================================================== ! +Part-Species2-SpeciesName=CO +Part-Species2-InteractionID=2 +Part-Species2-Tref=273 +Part-Species2-dref=4.17E-10 +Part-Species2-omega=0.24 +Part-Species2-CharaTempVib=3120.7 +Part-Species2-Ediss_eV=11.06 +Part-Species2-HeatOfFormation_K=-13293.70 +Part-Species2-CharaTempRot = 2.8 +Part-Species2-SymmetryFactor = 1 +! =============================================================================== ! +! Species3, O +! =============================================================================== ! +Part-Species3-SpeciesName=O +Part-Species3-InteractionID=1 +Part-Species3-Tref=273 +Part-Species3-dref=3.49E-10 +Part-Species3-omega=0.24 +Part-Species3-HeatOfFormation_K=29969.45 +! =============================================================================== ! +! Species4, O2 +! =============================================================================== ! +Part-Species4-SpeciesName=O2 +Part-Species4-InteractionID = 2 +Part-Species4-Tref =273 +Part-Species4-dref = 3.96E-10 +Part-Species4-omega=0.24 +Part-Species4-CharaTempVib=2272.8 +Part-Species4-Ediss_eV=5.115 +Part-Species4-CharaTempRot = 2.1 +Part-Species4-SymmetryFactor = 2 +Part-Species4-HeatOfFormation_K=0.0 + +! =============================================================================== ! +! Surface Chemistry +! =============================================================================== ! +Surface-NumOfReactions = 5 +! Adsorption of CO +Surface-Reaction1-SurfName = Adsorption_CO +Surface-Reaction1-Type = A +Surface-Reaction1-Reactants = (/2,0/) +Surface-Reaction1-NumOfBoundaries = 5 +Surface-Reaction1-Boundaries = (/1,3,4,5,6/) +Surface-Reaction1-StickingCoefficient = 1.0 +Surface-Reaction1-EqConstant = 0.6 +Surface-Reaction1-ReactHeat = 135 +Surface-Reaction1-HeatScaling = 61 +! Adsorption of O2 +Surface-Reaction2-SurfName = Adsorption_O2 +Surface-Reaction2-Type = A +Surface-Reaction2-Reactants = (/4,0/) +Surface-Reaction2-NumOfBoundaries = 5 +Surface-Reaction2-Boundaries = (/1,3,4,5,6/) +Surface-Reaction2-StickingCoefficient = 0.42 +Surface-Reaction2-DissOrder = 2 +Surface-Reaction2-EqConstant = 1.49 +Surface-Reaction2-ReactHeat = 230 +! Desorption of CO +Surface-Reaction3-SurfName = Desorption_CO +Surface-Reaction3-Type = D +Surface-Reaction3-Products = (/2,0/) +Surface-Reaction3-NumOfBoundaries = 5 +Surface-Reaction3-Boundaries = (/1,3,4,5,6/) +Surface-Reaction3-Energy = 147 +Surface-Reaction3-LateralInteraction = -153 +Surface-Reaction3-Ca = 16 +Surface-Reaction3-Cb = -15 +Surface-Reaction3-ReactHeat = 135 +Surface-Reaction3-HeatScaling = 61 +! Desorption of O2 +Surface-Reaction4-SurfName = Desorption_O2 +Surface-Reaction4-Type = D +Surface-Reaction4-Products = (/4,0/) +Surface-Reaction4-NumOfBoundaries = 5 +Surface-Reaction4-Boundaries = (/1,3,4,5,6/) +Surface-Reaction4-Energy = 222 +Surface-Reaction4-LateralInteraction = -69.6 +Surface-Reaction4-DissOrder = 2 +Surface-Reaction4-Ca = -1.7 +Surface-Reaction4-Cb = 0 +Surface-Reaction4-ReactHeat = 230 +! Langmuir-Hinshlewood formation of CO2 +Surface-Reaction5-SurfName = LH_Oxidation_CO +Surface-Reaction5-Type = LH +Surface-Reaction5-Reactants = (/2,4/) +Surface-Reaction5-Products = (/1,0/) +Surface-Reaction5-NumOfBoundaries = 5 +Surface-Reaction5-Boundaries = (/1,3,4,5,6/) +Surface-Reaction5-Energy = 84 +Surface-Reaction5-Prefactor = 2.5E-3 +Surface-Reaction5-ReactHeat = 71 diff --git a/tools/species_database/DSMC_Titan_full.ini b/tools/species_database/DSMC_Titan.ini similarity index 93% rename from tools/species_database/DSMC_Titan_full.ini rename to tools/species_database/DSMC_Titan.ini index 913234c80..2daacd392 100755 --- a/tools/species_database/DSMC_Titan_full.ini +++ b/tools/species_database/DSMC_Titan.ini @@ -2,6 +2,8 @@ ! Species1, CH4 ! =============================================================================== ! Part-Species1-SpeciesName=CH4 +Part-Species1-MassIC = 2.66360E-26 ! CH4 Molecular Mass +Part-Species1-ChargeIC = 0 Part-Species1-PolyatomicMol=true Part-Species1-InteractionID=2 Part-Species1-Tref=273 @@ -28,6 +30,8 @@ Part-Species1-SymmetryFactor = 12 ! Species2, CH3 ! =============================================================================== ! Part-Species2-SpeciesName=CH3 +Part-Species2-MassIC = 2.49620E-26 ! CH3 Molecular Mass +Part-Species2-ChargeIC = 0 Part-Species2-PolyatomicMol=true Part-Species2-InteractionID=2 Part-Species2-Tref=273 @@ -51,6 +55,8 @@ Part-Species2-SymmetryFactor = 6 ! Species3, CH2 ! =============================================================================== ! Part-Species3-SpeciesName=CH2 +Part-Species3-MassIC = 2.32880E-26 ! CH2 Molecular Mass +Part-Species3-ChargeIC = 0 Part-Species3-PolyatomicMol=true Part-Species3-InteractionID=2 Part-Species3-Tref=273 @@ -71,6 +77,8 @@ Part-Species3-SymmetryFactor = 2 ! Species4, CH ! =============================================================================== ! Part-Species4-SpeciesName=CH +Part-Species4-MassIC = 2.16140E-26 ! H2 Molecular Mass +Part-Species4-ChargeIC = 0 Part-Species4-InteractionID = 2 Part-Species4-Tref = 273 Part-Species4-dref = 4.39E-10 @@ -84,6 +92,8 @@ Part-Species4-SymmetryFactor = 1 ! Species5, N2 ! =============================================================================== ! Part-Species5-SpeciesName=N2 +Part-Species5-MassIC = 4.65200E-26 ! N2 Molecular Mass +Part-Species5-ChargeIC = 0 Part-Species5-InteractionID = 2 Part-Species5-Tref = 273 Part-Species5-dref = 4.17E-10 @@ -97,6 +107,8 @@ Part-Species5-SymmetryFactor = 2 ! Species6, C2 ! =============================================================================== ! Part-Species6-SpeciesName=C2 +Part-Species6-MassIC = 3.98800E-26 ! C2 Molecular Mass +Part-Species6-ChargeIC = 0 Part-Species6-InteractionID = 2 Part-Species6-Tref = 273 Part-Species6-dref = 4.88E-10 @@ -110,6 +122,8 @@ Part-Species6-SymmetryFactor = 2 ! Species7, H2 ! =============================================================================== ! Part-Species7-SpeciesName=H2 +Part-Species7-MassIC = 3.34800E-27 ! H2 Molecular Mass +Part-Species7-ChargeIC = 0 Part-Species7-InteractionID = 2 Part-Species7-Tref = 273 Part-Species7-dref = 3.06E-10 @@ -123,6 +137,8 @@ Part-Species7-SymmetryFactor = 2 ! Species8, CN ! =============================================================================== ! Part-Species8-SpeciesName=CN +Part-Species8-MassIC = 4.32000E-26 ! CN Molecular Mass +Part-Species8-ChargeIC = 0 Part-Species8-InteractionID = 2 Part-Species8-Tref = 273 Part-Species8-dref = 5.45E-10 @@ -136,6 +152,8 @@ Part-Species8-SymmetryFactor = 1 ! Species9, NH ! =============================================================================== ! Part-Species9-SpeciesName=NH +Part-Species9-MassIC = 2.49340E-26 ! NH Molecular Mass +Part-Species9-ChargeIC = 0 Part-Species9-InteractionID = 2 Part-Species9-Tref = 273 Part-Species9-dref = 4.64E-10 @@ -149,6 +167,8 @@ Part-Species9-SymmetryFactor = 1 ! Species10, HCN ! =============================================================================== ! Part-Species10-SpeciesName=HCN +Part-Species10-MassIC = 4.48740E-26 ! HCN Molecular Mass +Part-Species10-ChargeIC = 0 Part-Species10-PolyatomicMol=true Part-Species10-InteractionID = 2 Part-Species10-Tref = 273 @@ -168,6 +188,8 @@ Part-Species10-SymmetryFactor = 1 ! Species11, N ! =============================================================================== ! Part-Species11-SpeciesName=N +Part-Species11-MassIC = 2.32600E-26 ! N Molecular Mass +Part-Species11-ChargeIC = 0 Part-Species11-InteractionID = 1 Part-Species11-Tref = 273 Part-Species11-dref = 3.00E-10 @@ -177,6 +199,8 @@ Part-Species11-HeatOfFormation_K=56837.22 ! Species12, C ! =============================================================================== ! Part-Species12-SpeciesName=C +Part-Species12-MassIC = 1.99400E-26 ! C Molecular Mass +Part-Species12-ChargeIC = 0 Part-Species12-InteractionID = 1 Part-Species12-Tref = 273 Part-Species12-dref = 4.67E-10 @@ -186,6 +210,8 @@ Part-Species12-HeatOfFormation_K=86175.70 ! Species13, H ! =============================================================================== ! Part-Species13-SpeciesName=H +Part-Species13-MassIC = 1.67400E-27 ! H Molecular Mass +Part-Species13-ChargeIC = 0 Part-Species13-InteractionID = 1 Part-Species13-Tref = 273 Part-Species13-dref = 2.03E-10 @@ -195,6 +221,8 @@ Part-Species13-HeatOfFormation_K=26213.32 ! Species14, e ! =============================================================================== ! Part-Species14-SpeciesName=electron +Part-Species14-MassIC = 9.11000000E-31 ! e Mass +Part-Species14-ChargeIC = -1.60217653E-19 Part-Species14-InteractionID = 4 Part-Species14-Tref = 273 Part-Species14-dref = 1E-10 @@ -203,6 +231,8 @@ Part-Species14-omega=0.24 ! Species15, N2+ ! =============================================================================== ! Part-Species15-SpeciesName=N2Ion1 +Part-Species15-MassIC = 4.6519089E-26 ! N2+ Molecular Mass +Part-Species15-ChargeIC = 1.60217653E-19 Part-Species15-InteractionID = 20 Part-Species15-Tref = 273 Part-Species15-dref = 4.17E-10 @@ -216,6 +246,8 @@ Part-Species15-PreviousState = 5 ! Species16, CN+ ! =============================================================================== ! Part-Species16-SpeciesName=CNIon1 +Part-Species16-MassIC = 4.3199089E-26 ! CN+ Molecular Mass +Part-Species16-ChargeIC = 1.60217653E-19 Part-Species16-InteractionID = 20 Part-Species16-Tref = 273 Part-Species16-dref = 5.45E-10 @@ -229,6 +261,8 @@ Part-Species16-PreviousState = 8 ! Species17, N+ ! =============================================================================== ! Part-Species17-SpeciesName=NIon1 +Part-Species17-MassIC = 2.3259089E-26 ! N+ Molecular Mass +Part-Species17-ChargeIC = 1.60217653E-19 Part-Species17-InteractionID = 10 Part-Species17-Tref = 273 Part-Species17-dref = 3.00E-10 @@ -238,6 +272,8 @@ Part-Species17-PreviousState = 11 ! Species18, C+ ! =============================================================================== ! Part-Species18-SpeciesName=CIon1 +Part-Species18-MassIC = 1.9939089E-26 ! C+ Molecular Mass +Part-Species18-ChargeIC = 1.60217653E-19 Part-Species18-InteractionID = 10 Part-Species18-Tref = 273 Part-Species18-dref = 4.67E-10 diff --git a/tools/species_database/Electronic-State-Database.h5 b/tools/species_database/Electronic-State-Database.h5 index dbf34fd367eecb7035d7028b06eb8d4a8905d717..2c33541c29d32f740f1dcd4d0db6abce71c4d510 100755 GIT binary patch literal 107464 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 Dg;CoU literal 8624 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 VYL~>9!=Kl_T~Z&A2Wt)g@&7%4B1!-N literal 176352 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 Ee-@;{cmMzZ From f41e166cdcab512d55e7ed4d8e56ba786238f1cb Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Fri, 21 Oct 2022 10:40:01 +0200 Subject: [PATCH 041/222] bug fixes --- src/particles/dsmc/dsmc_chemical_init.f90 | 4 +++- src/particles/mcc/mcc_xsec.f90 | 10 ++++++++-- tools/species_database/DSMC_H2.ini | 4 ++-- tools/species_database/Species_Database.h5 | Bin 318544 -> 327680 bytes 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/particles/dsmc/dsmc_chemical_init.f90 b/src/particles/dsmc/dsmc_chemical_init.f90 index 8e5888458..f999e2165 100644 --- a/src/particles/dsmc/dsmc_chemical_init.f90 +++ b/src/particles/dsmc/dsmc_chemical_init.f90 @@ -301,7 +301,9 @@ SUBROUTINE DSMC_chemical_init() DO iReac = 1, ReadInNumOfReact WRITE(UNIT=hilf,FMT='(I0)') iReac ChemReac%ReactModel(iReac) = TRIM(GETSTR('DSMC-Reaction'//TRIM(hilf)//'-ReactionModel')) - ChemReac%ReactionName(iReac)= TRIM(GETSTR('DSMC-Reaction'//TRIM(hilf)//'-ReactionName')) + IF (TRIM(ChemReac%ReactModel(iReac)).EQ.'TCE') THEN + ChemReac%ReactionName(iReac)= TRIM(GETSTR('DSMC-Reaction'//TRIM(hilf)//'-ReactionName')) + END IF ChemReac%Reactants(iReac,:) = GETINTARRAY('DSMC-Reaction'//TRIM(hilf)//'-Reactants',3) ChemReac%Products(iReac,:) = GETINTARRAY('DSMC-Reaction'//TRIM(hilf)//'-Products',4) SELECT CASE (TRIM(ChemReac%ReactModel(iReac))) diff --git a/src/particles/mcc/mcc_xsec.f90 b/src/particles/mcc/mcc_xsec.f90 index a5168bb24..66b3dee3a 100644 --- a/src/particles/mcc/mcc_xsec.f90 +++ b/src/particles/mcc/mcc_xsec.f90 @@ -1086,7 +1086,13 @@ SUBROUTINE ReadReacXSec(iCase,iPath) DatasetFound = .FALSE.; GroupFound = .FALSE. -EductPair = TRIM(SpecDSMC(EductReac(1))%Name)//'-'//TRIM(SpecDSMC(EductReac(2))%Name) + +IF (SpeciesDatabase.EQ.'none') THEN + EductPair = TRIM(SpecDSMC(EductReac(1))%Name)//'-'//TRIM(SpecDSMC(EductReac(2))%Name) +ELSE + EductPair = TRIM('/Cross-Sections/'//TRIM(SpecDSMC(EductReac(1))%Name)//'-'//TRIM(SpecDSMC(EductReac(2))%Name)) +END IF +CALL H5LEXISTS_F(file_id_dsmc, TRIM(EductPair), GroupFound, err) IF(SpeciesDatabase.EQ.'none') THEN XSecDatabaseName = TRIM(XSec_Database) @@ -1106,7 +1112,7 @@ SUBROUTINE ReadReacXSec(iCase,iPath) IF (SpeciesDatabase.EQ.'none') THEN EductPair = TRIM(SpecDSMC(EductReac(2))%Name)//'-'//TRIM(SpecDSMC(EductReac(1))%Name) ELSE - EductPair = TRIM('/Cross-Sections/'//SpecDSMC(EductReac(2))%Name)//'-'//TRIM(SpecDSMC(EductReac(1))%Name) + EductPair = TRIM('/Cross-Sections/'//TRIM(SpecDSMC(EductReac(2))%Name)//'-'//TRIM(SpecDSMC(EductReac(1))%Name)) END IF CALL H5LEXISTS_F(file_id_dsmc, TRIM(EductPair), GroupFound, err) IF(.NOT.GroupFound) CALL abort(__STAMP__,'No reaction cross sections found in database for reaction number:',IntInfoOpt=iReac) diff --git a/tools/species_database/DSMC_H2.ini b/tools/species_database/DSMC_H2.ini index f3b3d40a7..6a1881ed0 100755 --- a/tools/species_database/DSMC_H2.ini +++ b/tools/species_database/DSMC_H2.ini @@ -39,8 +39,8 @@ Part-Species3-UseVibXSec = T ! Species4, H2Ion ! =============================================================================== ! Part-Species4-SpeciesName = H2Ion1 -Part-Species4-MassIC = 3.0E-27 -Part-Species4-ChargeIC = 1.0 +Part-Species4-MassIC = 3.0E-27 +Part-Species4-ChargeIC = 1.0 Part-Species4-InteractionID = 20 Part-Species4-Tref = 1000 Part-Species4-dref = 3.883E-10 diff --git a/tools/species_database/Species_Database.h5 b/tools/species_database/Species_Database.h5 index 8a01edbda2cd67a5bb3e4ef50b056e6c28bd5601..5688843d11f574206a8796e789b00daeb8bbc81c 100644 GIT binary patch delta 1042 zcmZuvTSydP6yE=$&8|taUQ)BRQ8QLl*o%Y|XG;0B zgh3!14#U;B38YcZy#Q6B9Zyc)L?XA35&Jj>wR>)H<1EzmAcM%8FXQ1c5o3NtK9dsf__-x!$IaC86K2KKIPkhV<_F5prk6@$C=qz80c z_?X@{d6OJ$AEEEN+>-dt6$DxM1S0F8q8g%wB9{42V z5nvIqsmdg1K;$HBea90Zyuy{xHbpCT?Fku#w+2$KJbz4h-WgIte3H3$$d^9MOpD!G z7L0z{1Or(#FuaruCLS46%NC6r5+Q(i8c zGAKnZE+5_^X>+*NbFD4z^PL@<44E_Hq()$#k=>M+C@`2qPv{wiuFETvB1CFQ{P zhA^<;q%OrOn~RO|2eOEI<{)Pc>mq&?Gg8s8U+{I%eBhpA1~WRZevUd~yxbgp5Us35 zWCstyeLL~Q$}ZGLH7ZkOeEx@{2V4^+Fm{bp;{85w-6oaj49qOjQFiAN$WFi|(9+1I Od9b~Sd1cv(N!K6Ciys95 delta 291 zcmZo@5V^2Jc!CCVz#W#2+QxE>?33f=8ks5>H*TE9I9Wl8V{(H62cyU4PKAX6(|1i| z5twXc*u})+HTjrf$#ks?Oaha=jKKVBMkSLssmM*vFs=bgZ+>Q6!a3cjnZ=odg8>X2 zC)=|7GdfML^=4Tyd8&!^<{NfOj3_Ds!7744DoQtVIXW<-$mW1$bEnttXUyIl;Cki9 zbej+sj_Epfj0q6d6c~$2+jAy2 l7Do2z?ys2^PG9hVrDEa%jp+ujn3CFGyJ4++djNU%Tb%#^ From 732a79432450a5c5ac4b38e86dbda0c0a8439097 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Fri, 21 Oct 2022 11:35:00 +0200 Subject: [PATCH 042/222] documentation start --- .../userguide/features-and-models/DSMC.md | 21 +++++++++-- docs/documentation/userguide/tools.md | 35 +++++++++++++++---- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/docs/documentation/userguide/features-and-models/DSMC.md b/docs/documentation/userguide/features-and-models/DSMC.md index fff578345..c6cd16d5e 100644 --- a/docs/documentation/userguide/features-and-models/DSMC.md +++ b/docs/documentation/userguide/features-and-models/DSMC.md @@ -23,6 +23,8 @@ exchange (by default including the rotational and vibrational energy treatment). the parameters for the internal energy exchange (Section {ref}`sec:DSMC-relaxation`) and chemical reactions (Section {ref}`sec:DSMC-chemistry`). +Additionally, species parameter can be read from a database instead of using the `DSMC.ini` file. The procedure is described in Section {ref}`sec:DSMC-database` + A fixed ("manual") simulation time step $\Delta t$ is defined by ManualTimeStep = 1.00E-7 @@ -160,7 +162,7 @@ parameters can be obtained from e.g. {cite}`Swaminathan-Gopalan2016`. ### Cross-section based collision probabilities Cross-section data to model collisional and relaxation probabilities (e.g. in case of electron-neutral collisions), analogous to -Monte Carlo Collisions, can be utilized and is described in Section {ref}`sec:tools-xsec-collision` and {ref}`sec:xsec-chemistry`. +Monte Carlo Collisions, can be utilized and is described in Section {ref}`ssec:tools-xsec-collision` and {ref}`sec:xsec-chemistry`. (sec:DSMC-relaxation)= ## Inelastic Collisions \& Relaxation @@ -258,7 +260,7 @@ distribution function attached. The three models utilize tabulated energy levels species (e.g. for monatomic {cite}`NISTASD`, diatomic {cite}`Huber1979`, polyatomic {cite}`Herzberg1966` molecules). An example database `DSMCSpecies_electronic_state_full_Data.h5` can be found in e.g. `piclas/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec`, where the energy levels are stored in containers and -accessed via the species name, e.g. `Part-Species1-SpeciesName=N2`. Each level is described by its degeneracy in the first column +accessed via the species name, e.g. `Part-Species1-SpeciesName=N2`. The database is described in Section {ref}`ssec:tools-electronic-database`. Each level is described by its degeneracy in the first column and by the energy in [J] in the second column. To include electronic excitation in the simulation, the following parameters are required @@ -475,3 +477,18 @@ where $d_{\mathrm{ref}}$ is the reference diameter and $n$ the number density. H simulation domain should be used as the worst-case. For supersonic/hypersonic flows, the conditions behind a normal shock can be utilized as a first guess. For a thruster/nozzle expansion simulation, the chamber or throat conditions are the limiting factor. +(sec:DSMC-database)= +## Unified Species Database + +- [] allgemeines (default normales einlesen, falls datenbank-name gesetzt ist wird daraus eingelesen) +- [] angabe datenbank in parameter.ini +- [] was muss in parameter.ini noch zwingend angegeben werden +- [] Verweis erstellung +- [] Beispiele regression check +- [] unterkapitel bereiche der Datenbank + - [] wie aktivieren + - [] overwrite + - [] was ist drin? was nicht? tabelle + - [] was muss gesetzt werden? +- [] schema: was laesst sich kombinieren + diff --git a/docs/documentation/userguide/tools.md b/docs/documentation/userguide/tools.md index a18abdc44..7577bb85d 100644 --- a/docs/documentation/userguide/tools.md +++ b/docs/documentation/userguide/tools.md @@ -7,24 +7,35 @@ An overview of the tools is given in [TOOLS.md](https://github.com/piclas-framew (sec:tools-usd)= ## Unified Species Database (USD) -A tool to create a database containing cross-section, electronic and species data can be found in the *tools* folder: `piclas/tools/species_database/`. -The Python script (python3.7) `create_species_database.py` creates a new database combining cross-section data, electronic states and species parameters (formerly read-in through ini files). The script uses the `numpy`, `h5py` and `argparse` packages. To create the unified database with +A tool to create a database containing cross-section, electronic states, surface reactions, Arrhenius rates, and species data can be found in the *tools* folder: `piclas/tools/species_database/`. +The Python script (python3.7) `create_species_database.py` creates a new database or expands an existing one combining all necessary parameters (formerly read-in through ini files). The script uses the `numpy`, `h5py`, `argparse`,`datetime`, `cmath`, and `matplotlib.rcsetup` packages. To create the unified database with python3.7 create_species_database.py -an electronic and cross-section database need to be built before ({ref}`ssec:tools-xsec-collision`, {ref}`ssec:tools-electronic-database`). -If nothing additionally is specified, the following filenames are called: `DSMC.ini` for the parameter input, `Electronic-State-Database.h5` for the electronic state database, `XSec_Database.h5` for the cross-section data and `Species_Database.h5` for the final output. For custom file names, the following options can be added: +an electronic states and a cross-section database need to be built before ({ref}`ssec:tools-xsec-collision`, {ref}`ssec:tools-electronic-database`). +If nothing additionally is specified, the following filenames are called: `DSMC.ini` for the parameter and (gas and surface) reaction input, `Electronic-State-Database.h5` for the electronic state database, `XSec_Database.h5` for the cross-section data,`Rad.dat` for the radiation data, and `Species_Database.h5` for the final output. For custom file names, the following options can be added: - python3 create_species_database.py --parameter parameter-filename --electronic electronic_statefile --crosssection crosssection_statefile --output output_filename + python3 create_species_database.py --parameter parameter-filename --electronic electronic_statefile --crosssection crosssection_statefile --radiation radiation-filename --output output_filename --reference reference-name or - python3 create_species_database.py -p parameter-filename -e electronic_statefile -c crosssection_statefile -o output_filename + python3 create_species_database.py -p parameter-filename -e electronic_statefile -c crosssection_statefile -s radiation-filename -o output_filename -r reference-name The data is grouped in the output file, as shown in the following example: Cross-Sections (group) H2-H2Ion1 (dataset) + Radiation (group) + N (group) + Levels (dataset) + Lines (dataset) + Reaction (group) + DISS_CH3_TO_CH2 (dataset) + Arrhenius parameters (attributes) + EXC_CN+_N (dataset) + Arrhenius parameters (attributes) + RECOMB_C_N_ION (dataset) + Arrhenius parameters (attributes) Species (group) H2 (group) Electronic levels (dataset) @@ -35,6 +46,18 @@ The data is grouped in the output file, as shown in the following example: electron (group) Electronic levels (dataset) Species parameters (attributes) + Surface-Chemistry + Adsorption_CO (dataset) + Reaction parameters (attributes) + LH_Oxidation_CO (dataset) + Reaction parameters (attributes) + +For cross-sections, reactions, radiation and species data, the former `DSMC.ini` files are used to create the database. However, for every species and for every reaction, names must be defined to create the database and to run simulations. + + Part-Species1-SpeciesName=CO2 + DSMC-Reaction1-ReactionName = DISS_CH3_TO_CH2 + Surface-Reaction1-SurfName = Adsorption_CO + (ssec:tools-electronic-database)= From b374fb05e0b0e34e1a52019e17ea64baef405bfb Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Mon, 24 Oct 2022 13:45:46 +0200 Subject: [PATCH 043/222] Read-In from the database --- src/io_hdf5/hdf5_input.f90 | 87 ++++- .../boundary/particle_boundary_init.f90 | 19 +- .../boundary/particle_boundary_sampling.f90 | 79 ++-- .../boundary/particle_boundary_vars.f90 | 3 +- .../emission/particle_surface_chemflux.f90 | 219 ++++++----- .../particle_mpi_boundary_sampling.f90 | 3 + .../surfacemodel/surfacemodel_chemistry.f90 | 344 ++++++++++++++---- .../surfacemodel/surfacemodel_init.f90 | 8 +- .../surfacemodel/surfacemodel_main.f90 | 85 +++-- .../surfacemodel/surfacemodel_vars.f90 | 139 +++---- 10 files changed, 656 insertions(+), 330 deletions(-) diff --git a/src/io_hdf5/hdf5_input.f90 b/src/io_hdf5/hdf5_input.f90 index 2bed9b68c..e2bce8a57 100644 --- a/src/io_hdf5/hdf5_input.f90 +++ b/src/io_hdf5/hdf5_input.f90 @@ -62,6 +62,10 @@ MODULE MOD_HDF5_Input MODULE PROCEDURE ReadAttribute END INTERFACE +INTERFACE AttributeExists + MODULE PROCEDURE AttributeExists +END INTERFACE + INTERFACE GetVarnames MODULE PROCEDURE GetVarnames END INTERFACE @@ -74,6 +78,7 @@ MODULE MOD_HDF5_Input PUBLIC :: GetDataSize PUBLIC :: GetVarnames PUBLIC :: GetArrayAndName +PUBLIC :: AttributeExists !=================================================================================================================================== CONTAINS @@ -357,7 +362,7 @@ SUBROUTINE GetDataProps(DatasetName,nVar_HDF5,N_HDF5,nElems_HDF5,NodeType_HDF5,n SWRITE(UNIT_stdOut,'(132("-"))') SWRITE(UNIT_stdOut,'(A,A)')' GET SIZE OF DATA IN HDF5 FILE... ' -! Dimensional shift (optional) if arrays with rank > 5 are processed (e.g. DG_Solution from state files with an additional +! Dimensional shift (optional) if arrays with rank > 5 are processed (e.g. DG_Solution from state files with an additional ! dimension that corresponds to time) nDimsOffset_loc = MERGE(nDimsOffset_opt, 0, PRESENT(nDimsOffset_opt)) @@ -486,7 +491,11 @@ END SUBROUTINE GetArrayAndName !================================================================================================================================== !> Subroutine to read arrays of rank "Rank" with dimensions "Dimsf(1:Rank)". !================================================================================================================================== -SUBROUTINE ReadArray(ArrayName,Rank,nVal,Offset_in,offset_dim,RealArray,IntegerArray,StrArray,IntegerArray_i4) +SUBROUTINE ReadArray(ArrayName,Rank,nVal,Offset_in,offset_dim,RealArray,IntegerArray,StrArray,IntegerArray_i4& +#if USE_MPI + ,ReadNonOverlap_opt& +#endif /*USE_MPI*/ + ) ! MODULES USE MOD_Globals USE,INTRINSIC :: ISO_C_BINDING @@ -507,6 +516,17 @@ SUBROUTINE ReadArray(ArrayName,Rank,nVal,Offset_in,offset_dim,RealArray,IntegerA ! !< read of KIND=4 CHARACTER(LEN=255),& DIMENSION(PRODUCT(nVal)),OPTIONAL,INTENT(OUT),TARGET :: StrArray !< only if string shall be read +#if USE_MPI +LOGICAL,OPTIONAL,INTENT(IN) :: ReadNonOverlap_opt !< T: Set H5FD_MPIO_COLLECTIVE_F for collective I/O +! !< F: Read individually +! !< IMPORTANT: ReadNonOverlap_opt = T will break +! !< when the data that is read has overlapping +! !< elements, e.g., +! !< proc 0 reads elements from index 1:10 +! !< proc 1 reads elements from index 5:15 +! !< ... +! !< and will produce garbage without giving an error +#endif /*USE_MPI*/ !---------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER(HID_T) :: DSet_ID,Type_ID,MemSpace,FileSpace,PList_ID @@ -514,6 +534,7 @@ SUBROUTINE ReadArray(ArrayName,Rank,nVal,Offset_in,offset_dim,RealArray,IntegerA TYPE(C_PTR) :: buf #if USE_MPI INTEGER(HID_T) :: driver +LOGICAL :: ReadNonOverlap #endif /*USE_MPI*/ !================================================================================================================================== LOGWRITE(*,'(A,I1.1,A,A,A)')' READ ',Rank,'D ARRAY "',TRIM(ArrayName),'"' @@ -535,7 +556,12 @@ SUBROUTINE ReadArray(ArrayName,Rank,nVal,Offset_in,offset_dim,RealArray,IntegerA ! Set property list to collective dataset read !CALL H5PSET_DXPL_MPIO_F(PList_ID, H5FD_MPIO_COLLECTIVE_F, iError) ! old CALL H5PGET_DRIVER_F(Plist_File_ID, driver, iError) ! remove error "collective access for MPI-based drivers only" -IF(driver.EQ.H5FD_MPIO_F) CALL H5PSET_DXPL_MPIO_F(PList_ID, H5FD_MPIO_COLLECTIVE_F, iError) +IF(PRESENT(ReadNonOverlap_opt))THEN + ReadNonOverlap=ReadNonOverlap_opt +ELSE + ReadNonOverlap=.TRUE. +END IF ! PRESENT(ReadNonOverlap_opt) +IF((ReadNonOverlap).AND.(driver.EQ.H5FD_MPIO_F)) CALL H5PSET_DXPL_MPIO_F(PList_ID, H5FD_MPIO_COLLECTIVE_F, iError) #endif /*USE_MPI*/ CALL H5DGET_TYPE_F(DSet_ID, Type_ID, iError) @@ -561,7 +587,7 @@ END SUBROUTINE ReadArray !================================================================================================================================== !> Subroutine to read attributes from HDF5 file. !================================================================================================================================== -SUBROUTINE ReadAttribute(Loc_ID_in,AttribName,nVal,DatasetName,RealScalar,IntScalar,& +SUBROUTINE ReadAttribute(File_ID_in,AttribName,nVal,DatasetName,RealScalar,IntScalar,& StrScalar,LogicalScalar,RealArray,IntArray,StrArray) ! MODULES USE MOD_Globals @@ -569,7 +595,7 @@ SUBROUTINE ReadAttribute(Loc_ID_in,AttribName,nVal,DatasetName,RealScalar,IntSca IMPLICIT NONE !---------------------------------------------------------------------------------------------------------------------------------- ! INPUT/OUTPUT VARIABLES -INTEGER(HID_T) ,INTENT(IN) :: Loc_ID_in !< HDF5 file id of opened file +INTEGER(HID_T) ,INTENT(IN) :: File_ID_in !< HDF5 file id of opened file INTEGER ,INTENT(IN) :: nVal !< number of attributes in case an array is expected CHARACTER(LEN=*) ,INTENT(IN) :: AttribName !< name of attribute to be read CHARACTER(LEN=*) ,INTENT(IN) ,OPTIONAL :: DatasetName !< dataset name in case attribute is located in a dataset @@ -579,7 +605,7 @@ SUBROUTINE ReadAttribute(Loc_ID_in,AttribName,nVal,DatasetName,RealScalar,IntSca INTEGER ,INTENT(OUT),OPTIONAL,TARGET :: IntScalar !< Scalar integer attribute CHARACTER(LEN=255),INTENT(OUT),OPTIONAL,TARGET :: StrScalar !< Scalar string attribute CHARACTER(LEN=255),INTENT(OUT),OPTIONAL,TARGET :: StrArray(nVal) !< Array for character array attributes -LOGICAL ,INTENT(OUT),OPTIONAL :: LogicalScalar !< Scalar logical attribute +LOGICAL ,INTENT(OUT),OPTIONAL :: LogicalScalar !< Scalar logical attribute !---------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER(HID_T) :: Attr_ID,Type_ID,Loc_ID @@ -591,17 +617,18 @@ SUBROUTINE ReadAttribute(Loc_ID_in,AttribName,nVal,DatasetName,RealScalar,IntSca LOGWRITE(*,*)' READ ATTRIBUTE "',TRIM(AttribName),'" FROM HDF5 FILE...' Dimsf(1)=nVal -Loc_ID=Loc_ID_in IF(PRESENT(DatasetName))THEN ! Open dataset - IF(TRIM(DataSetName).NE.'') CALL H5DOPEN_F(File_ID, TRIM(DatasetName),Loc_ID, iError) + IF(TRIM(DataSetName).NE.'') CALL H5DOPEN_F(File_ID_in, TRIM(DatasetName),Loc_ID, iError) +ELSE + Loc_ID = File_ID_in END IF ! Create the attribute for group Loc_ID. CALL H5AOPEN_F(Loc_ID, TRIM(AttribName), Attr_ID, iError) IF(iError.NE.0) CALL abort(__STAMP__,& - 'Attribute '//TRIM(AttribName)//' does not exist or h5 file already opened by a differen program') + 'Attribute '//TRIM(AttribName)//' does not exist or h5 file already opened by a different program') IF(PRESENT(RealArray)) RealArray=0. IF(PRESENT(RealScalar)) RealScalar=0. @@ -639,13 +666,47 @@ SUBROUTINE ReadAttribute(Loc_ID_in,AttribName,nVal,DatasetName,RealScalar,IntSca ! Close the attribute. CALL H5ACLOSE_F(Attr_ID, iError) -IF(Loc_ID.NE.Loc_ID_in)THEN - ! Close the dataset and property list. - CALL H5DCLOSE_F(Loc_ID, iError) -END IF +! Close the dataset and property list. +CALL H5DCLOSE_F(Loc_ID, iError) LOGWRITE(*,*)'...DONE!' END SUBROUTINE ReadAttribute +!================================================================================================================================== +!> Subroutine to check if attributes exist in sub layer datasets. +!================================================================================================================================== +SUBROUTINE AttributeExists(File_ID_in,AttribName,DatasetName,AttrExists) +! MODULES +USE MOD_Globals +USE,INTRINSIC :: ISO_C_BINDING +IMPLICIT NONE +!---------------------------------------------------------------------------------------------------------------------------------- +! INPUT/OUTPUT VARIABLES +INTEGER(HID_T) ,INTENT(IN) :: File_ID_in !< HDF5 file id of opened file +CHARACTER(LEN=*) ,INTENT(IN) :: AttribName !< name of attribute to be read +CHARACTER(LEN=*) ,INTENT(IN) :: DatasetName !< dataset name +LOGICAL ,INTENT(OUT) :: AttrExists +!---------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER(HID_T) :: Attr_ID,Type_ID,Loc_ID +!================================================================================================================================== +CALL H5DOPEN_F(File_ID_in, TRIM(DatasetName),Loc_ID, iError) + +! Create the attribute for group Loc_ID. +CALL H5AOPEN_F(Loc_ID, TRIM(AttribName), Attr_ID, iError) + +IF(iError.NE.0) THEN + AttrExists = .FALSE. +ELSE + AttrExists = .TRUE. +END IF + +! Close the attribute. +CALL H5ACLOSE_F(Attr_ID, iError) +! Close the dataset and property list. +CALL H5DCLOSE_F(Loc_ID, iError) + +END SUBROUTINE AttributeExists + !=================================================================================================================================== !> Subroutine to determine filename of next HDF5 file for FlushHDF5 diff --git a/src/particles/boundary/particle_boundary_init.f90 b/src/particles/boundary/particle_boundary_init.f90 index 492c3c3a7..0c45fa160 100644 --- a/src/particles/boundary/particle_boundary_init.f90 +++ b/src/particles/boundary/particle_boundary_init.f90 @@ -150,6 +150,9 @@ SUBROUTINE DefineParametersParticleBoundary() CALL prms%CreateRealOption( 'Part-Boundary[$]-Species[$]-MaxCoverage' & , 'Initial coverage of the surface by an adsorbed species'& , numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Part-Boundary[$]-MaxTotalCoverage' & + , 'Maximal coverage valure for the surface (default = 1.)'& + , numberedmulti=.TRUE.) CALL prms%CreateIntOption( 'Part-Boundary[$]-NbrOfSpeciesSwaps' & , 'TODO-DEFINE-PARAMETER\n'//& 'Number of Species to be changed at wall.', '0', numberedmulti=.TRUE.) @@ -320,6 +323,8 @@ SUBROUTINE InitializeVariablesPartBoundary() PartBound%MaxCoverage = 0. ALLOCATE(PartBound%TotalCoverage(nPartBound)) PartBound%TotalCoverage = 0. +ALLOCATE(PartBound%MaxTotalCoverage(nPartBound)) +PartBound%MaxTotalCoverage = 0. ALLOCATE(PartBound%LatticeVec(nPartBound)) PartBound%LatticeVec = 0. ALLOCATE(PartBound%MolPerUnitCell(nPartBound)) @@ -421,17 +426,24 @@ SUBROUTINE InitializeVariablesPartBoundary() END IF PartBound%LatticeVec(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf)//'-LatticeVector', '0.') PartBound%MolPerUnitCell(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf)//'-NbrOfMol-UnitCell', '1.') - PartBound%TotalCoverage(iPartBound) = 0. DO iSpec=1, nSpecies WRITE(UNIT=hilf2,FMT='(I0)') iSpec PartBound%CoverageIni(iPartBound, iSpec) = GETREAL('Part-Boundary'//TRIM(hilf)//'-Species'//TRIM(hilf2)//'-Coverage', '0.') PartBound%MaxCoverage(iPartBound, iSpec) = GETREAL('Part-Boundary'//TRIM(hilf)//'-Species'//TRIM(hilf2)//'-MaxCoverage', '1.') + IF (PartBound%CoverageIni(iPartBound, iSpec).GT.PartBound%MaxCoverage(iPartBound, iSpec)) THEN + CALL abort(& + __STAMP__& + ,'ERROR: Surface coverage can not be larger than the maximum value', iPartBound) + END IF PartBound%TotalCoverage(iPartBound) = PartBound%TotalCoverage(iPartBound) + PartBound%CoverageIni(iPartBound, iSpec) END DO - IF (PartBound%TotalCoverage(iPartBound).GT.1.) THEN + PartBound%TotalCoverage(iPartBound) = SUM(PartBound%CoverageIni(iPartBound,:)) + PartBound%MaxTotalCoverage(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf)//'-MaxTotalCoverage', '1.') + ! Check if the maximum of the coverage is reached + IF (PartBound%TotalCoverage(iPartBound).GT.PartBound%MaxTotalCoverage(iPartBound)) THEN CALL abort(& __STAMP__& - ,'ERROR: Surface coverage can not be larger than 1.', iPartBound) + ,'ERROR: Maximum surface coverage reached.', iPartBound) END IF IF (PartBound%NbrOfSpeciesSwaps(iPartBound).GT.0) THEN !read Species to be changed at wall (in, out), out=0: delete @@ -1148,6 +1160,7 @@ SUBROUTINE FinalizeParticleBoundary() SDEALLOCATE(PartBound%CoverageIni) SDEALLOCATE(PartBound%MaxCoverage) SDEALLOCATE(PartBound%TotalCoverage) +SDEALLOCATE(PartBound%MaxTotalCoverage) SDEALLOCATE(PartBound%LatticeVec) SDEALLOCATE(PartBound%MolPerUnitCell) SDEALLOCATE(PartBound%Reactive) diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index c9d2c04d3..b0a81f0fc 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -806,7 +806,8 @@ SUBROUTINE WriteSurfSampleToHDF5(MeshFileName,OutputTime) DO q = 1,nSurfSample DO p = 1,nSurfSample tout = OutputTime - MacroSurfaceVal(4,p,q,OutputCounter) = MacroSurfaceVal(4,p,q,OutputCounter) + SUM(ChemWallProp(:,2,p, q, iSurfSide))/ (SurfSideArea(p,q,iSurfSide)*tout) + MacroSurfaceVal(4,p,q,OutputCounter) = MacroSurfaceVal(4,p,q,OutputCounter) + SUM(ChemWallProp(:,2,p, q, iSurfSide)) & + / (SurfSideArea(p,q,iSurfSide)*tout) END DO ! q=1,nSurfSample END DO ! p=1,nSurfSample END DO ! iSurfSide=1,nComputeNodeSurfSides @@ -874,19 +875,18 @@ END SUBROUTINE WriteSurfSampleToHDF5 SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) !=================================================================================================================================== -!> write the final values of the surface sampling to a HDF5 state file -!> additional performs all the final required computations +!> write the coverage and heat flux values of the surface chemistry sampling to a HDF5 state file !=================================================================================================================================== ! MODULES ! !----------------------------------------------------------------------------------------------------------------------------------! USE MOD_Globals USE MOD_Globals_Vars ,ONLY: ProjectName -USE MOD_DSMC_Vars ,ONLY: CollisMode, DSMC +USE MOD_DSMC_Vars ,ONLY: CollisMode USE MOD_HDF5_Output ,ONLY: WriteAttributeToHDF5,WriteArrayToHDF5,WriteHDF5Header USE MOD_IO_HDF5 USE MOD_MPI_Shared_Vars ,ONLY: mySurfRank -USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win, ChemWallProp, SurfChemReac, ChemCountReacWall -USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample,CalcSurfaceImpact +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win, ChemWallProp, SurfChemReac !, ChemCountReacWall +USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample USE MOD_Particle_Boundary_Vars ,ONLY: nOutputSides, nComputeNodeSurfSides USE MOD_Particle_boundary_Vars ,ONLY: nComputeNodeSurfOutputSides,offsetComputeNodeSurfOutputSide USE MOD_Particle_Boundary_Vars ,ONLY: nSurfBC,SurfBCName, PartBound @@ -911,13 +911,13 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) CHARACTER(LEN=255) :: NodeTypeTemp CHARACTER(LEN=255) :: SpecID, PBCID, ReacID CHARACTER(LEN=255),ALLOCATABLE :: Str2DVarNames(:) -INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, nVar2D_Heat, nVar2D_Count +INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, nVar2D_Heat !, nVar2D_Count INTEGER :: iSpec, iPBC, iSurfSide, nReac, iReac INTEGER :: p,q,OutputCounter REAL :: tstart,tend, tout REAL, ALLOCATABLE :: MacroSurfaceSpecChemVal(:,:,:,:,:) REAL, ALLOCATABLE :: MacroSurfaceHeatVal(:,:,:,:) -REAL, ALLOCATABLE :: MacroSurfaceReacCount(:,:,:,:,:) +!REAL, ALLOCATABLE :: MacroSurfaceReacCount(:,:,:,:,:) !=================================================================================================================================== nReac = SurfChemReac%NumOfReact @@ -927,7 +927,7 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) CALL MPI_BARRIER(MPI_COMM_LEADERS_SURF,iERROR) ! Return if no sampling sides -IF (nSurfTotalSides .EQ.0) RETURN +IF (nSurfTotalSides.EQ.0) RETURN #endif /*USE_MPI*/ IF (mySurfRank.EQ.0) THEN @@ -942,9 +942,9 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) nVar2D = 0 nVar2D_Spec = 1 nVar2D_Heat = 1 -nVar2D_Count = 1 +!nVar2D_Count = 1 -nVar2D_Total = nVar2D + nVar2D_Spec*nSpecies + nVar2D_Heat + nVar2D_Count*nReac +nVar2D_Total = nVar2D + nVar2D_Spec*nSpecies + nVar2D_Heat !+ nVar2D_Count*nReac ! Generate skeleton for the file with all relevant data on a single proc (MPIRoot) #if USE_MPI @@ -973,15 +973,12 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Spec'//TRIM(SpecID)//'_Coverage') END DO ! iSpec=1,nSpecies -! ! fill varnames for total values -! CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Total_Coverage') - CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Heat_Flux') - DO iReac = 1, nReac - WRITE(ReacID,'(I3.3)') iReac - CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Reaction'//TRIM(ReacID)//'_Count') - END DO ! iReac + ! DO iReac = 1, nReac + ! WRITE(ReacID,'(I3.3)') iReac + ! CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Reaction'//TRIM(ReacID)//'_Count') + ! END DO ! iReac CALL WriteAttributeToHDF5(File_ID,'VarNamesSurface',nVar2D_Total,StrArray=Str2DVarNames) CALL CloseDataFile() @@ -1002,8 +999,8 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) ALLOCATE(MacroSurfaceHeatVal(1:nVar2D_Heat , 1:nSurfSample , 1:nSurfSample , nComputeNodeSurfOutputSides)) MacroSurfaceHeatVal = 0. -ALLOCATE(MacroSurfaceReacCount(1:nVar2D_Count , 1:nSurfSample , 1:nSurfSample , nComputeNodeSurfOutputSides , nReac)) -MacroSurfaceReacCount = 0. +! ALLOCATE(MacroSurfaceReacCount(1:nVar2D_Count , 1:nSurfSample , 1:nSurfSample , nComputeNodeSurfOutputSides , nReac)) +! MacroSurfaceReacCount = 0. OutputCounter = 0 DO iSurfSide = 1,nComputeNodeSurfSides @@ -1021,18 +1018,17 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) OutputCounter = OutputCounter + 1 DO q = 1,nSurfSample DO p = 1,nSurfSample - ! --- Total output (force per area, heat flux, simulation particle impact per iteration) - ! --- Species-specific output + ! --- Total output (catalytic heat flux) + ! --- Species-specific output (surface coverage) tout = OutputTime MacroSurfaceHeatVal(1,p,q,OutputCounter) = SUM(ChemWallProp(:,2,p, q, iSurfSide))/ (SurfSideArea(p,q,iSurfSide)*tout) DO iSpec=1,nSpecies - ! Species-specific counter of simulation particle impacts per iteration MacroSurfaceSpecChemVal(1,p,q,OutputCounter,iSpec) = ChemWallProp(iSpec,1,p, q, iSurfSide) END DO ! iSpec=1,nSpecies - DO iReac=1,nReac - ! Species-specific counter of simulation particle impacts per iteration - MacroSurfaceReacCount(1,p,q,OutputCounter,iReac) = ChemCountReacWall(iReac,1,p, q, iSurfSide) - END DO ! iReac + ! DO iReac=1,nReac + ! ! Species-specific counter of simulation particle impacts per iteration + ! MacroSurfaceReacCount(1,p,q,OutputCounter,iReac) = ChemCountReacWall(iReac,1,p, q, iSurfSide) + ! END DO ! iReac END DO ! q=1,nSurfSample END DO ! p=1,nSurfSample END DO ! iSurfSide=1,nComputeNodeSurfSides @@ -1047,7 +1043,7 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) offsetSurfSide => INT(offsetComputeNodeSurfOutputSide,IK) , & nVar2D_Spec => INT(nVar2D_Spec,IK) , & nVar2D_Heat => INT(nVar2D_Heat,IK) , & - nVar2D_Count => INT(nVar2D_Count,IK) , & + ! nVar2D_Count => INT(nVar2D_Count,IK) , & nVar2D => INT(nVar2D,IK)) DO iSpec = 1,nSpecies @@ -1060,13 +1056,6 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) nVarCount = nVarCount + INT(nVar2D_Spec) END DO -! CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , & -! nValGlobal =(/nVar2D_Total , nSurfSample, nSurfSample , nGlobalSides/) , & -! nVal =(/nVar2D , nSurfSample, nSurfSample , nLocalSides/) , & -! offset =(/INT(nVarCount,IK), 0_IK , 0_IK , offsetSurfSide/) , & -! collective =.FALSE. , & -! RealArray = MacroSurfaceVal(1:nVar2D,1:nSurfSample,1:nSurfSample,1:nLocalSides)) - CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , & nValGlobal =(/nVar2D_Total , nSurfSample, nSurfSample , nGlobalSides/) , & nVal =(/nVar2D_Heat , nSurfSample, nSurfSample , nLocalSides/) , & @@ -1076,15 +1065,15 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) nVarCount = nVarCount + INT(nVar2D_Heat) - DO iReac = 1,nReac - CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , & - nValGlobal =(/nVar2D_Total , nSurfSample , nSurfSample , nGlobalSides /) , & - nVal =(/nVar2D_Count , nSurfSample , nSurfSample , nLocalSides/) , & - offset =(/INT(nVarCount,IK) , 0_IK , 0_IK , offsetSurfSide/) , & - collective =.FALSE. , & - RealArray = MacroSurfaceReacCount(1:nVar2D_Count,1:nSurfSample,1:nSurfSample,1:nLocalSides,iReac)) - nVarCount = nVarCount + INT(nVar2D_Count) - END DO + ! DO iReac = 1,nReac + ! CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , & + ! nValGlobal =(/nVar2D_Total , nSurfSample , nSurfSample , nGlobalSides /) , & + ! nVal =(/nVar2D_Count , nSurfSample , nSurfSample , nLocalSides/) , & + ! offset =(/INT(nVarCount,IK) , 0_IK , 0_IK , offsetSurfSide/) , & + ! collective =.FALSE. , & + ! RealArray = MacroSurfaceReacCount(1:nVar2D_Count,1:nSurfSample,1:nSurfSample,1:nLocalSides,iReac)) + ! nVarCount = nVarCount + INT(nVar2D_Count) + ! END DO END ASSOCIATE @@ -1212,4 +1201,4 @@ SUBROUTINE FinalizeParticleBoundarySampling() END SUBROUTINE FinalizeParticleBoundarySampling -END MODULE MOD_Particle_Boundary_Sampling +END MODULE MOD_Particle_Boundary_Sampling \ No newline at end of file diff --git a/src/particles/boundary/particle_boundary_vars.f90 b/src/particles/boundary/particle_boundary_vars.f90 index d5feb9bc6..b443ed204 100644 --- a/src/particles/boundary/particle_boundary_vars.f90 +++ b/src/particles/boundary/particle_boundary_vars.f90 @@ -245,7 +245,8 @@ MODULE MOD_Particle_Boundary_Vars REAL , ALLOCATABLE :: ProbOfSpeciesSwaps(:) ! Probability of SpeciesSwaps at wall INTEGER , ALLOCATABLE :: SpeciesSwaps(:,:,:) ! Species to be changed at wall (in, out), out=0: delete INTEGER , ALLOCATABLE :: SurfaceModel(:) ! Model used for surface interaction (e.g. SEE models) - REAL , ALLOCATABLE :: TotalCoverage(:) + REAL , ALLOCATABLE :: TotalCoverage(:) ! Total surface coverage + REAL , ALLOCATABLE :: MaxTotalCoverage(:) ! Maximum total surface coverage REAL , ALLOCATABLE :: LatticeVec(:) ! Lattice constant for a fcc crystal REAL , ALLOCATABLE :: MolPerUnitCell(:) ! Molecules per unit cell REAL , ALLOCATABLE :: CoverageIni(:,:) ! Initial boundary coverage diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index ae9bffdb9..168b04da8 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -29,7 +29,13 @@ MODULE MOD_Particle_SurfChemFlux CONTAINS !=================================================================================================================================== -!> Particle Inserting via Surface Flux and (if present) adaptiveBC (Surface Flux adapting part density, velocity or temperature) +!> Particle insertion by pure surface reactions +!> 1.) Determine the surface parameters +!> 2.) Calculate the number of newly created products and update the surface properties +!> a) Langmuir-Hinshlewood reaction with instantaneous desorption (Arrhenius model) +!> b) Langmuir-Hinshlewood reaction (Arrhenius model) +!> c) Thermal desorption (Polyani-Wigner equation) +!> 3.) Insert the product species into the gas phase !=================================================================================================================================== SUBROUTINE ParticleSurfChemFlux() ! Modules @@ -49,7 +55,7 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Timedisc_Vars ,ONLY: dt USE MOD_Particle_Surfaces_Vars USE MOD_Particle_Boundary_Vars -USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win,SurfChemReac, ChemWallProp, ChemDesorpWall, ChemCountReacWall +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win,SurfChemReac, ChemWallProp, ChemDesorpWall !, ChemCountReacWall USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC @@ -90,9 +96,9 @@ SUBROUTINE ParticleSurfChemFlux() REAL :: tLBStart #endif /*USE_LOADBALANCE*/ !=================================================================================================================================== +! 1.) Determine the surface parameters SurfNumOfReac = SurfChemReac%NumOfReact nSF = SurfChemReac%CatBoundNum - SubP = TrackInfo%p SubQ = TrackInfo%q @@ -116,71 +122,73 @@ SUBROUTINE ParticleSurfChemFlux() ,'Chemical Surface Flux is not allowed on non-sampling sides!') END IF - ! Boundary temperature - WallTemp = PartBound%WallTemp(BoundID) + WallTemp = PartBound%WallTemp(BoundID) ! Boundary temperature - ! Calculate the number of molecules on the surface IF(PartBound%LatticeVec(BoundID).GT.0.) THEN - ! Surface molecules in dependence of the occupancy of the unit cell + ! Number of surface molecules in dependence of the occupancy of the unit cell SurfMol = PartBound%MolPerUnitCell(BoundID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & /(PartBound%LatticeVec(BoundID)*PartBound%LatticeVec(BoundID)) ELSE - ! Alternative calculation by average number of molecules per area for a monolayer + ! Alternative calculation by the average number of surface molecules per area for a monolayer SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) END IF - ! Randomize the order in which the reactions are called + ! Randomize the order in which the reactions are called to remove biases CALL RemoveBias(SurfNumOfReac, SurfReacBias) - ! Loop over the reaction types + ! Loop over the different types of pure surface reactions DO iBias = 1, SurfNumOfReac iReac = SurfReacBias(iBias) IF (SurfChemReac%PSMap(BoundID)%PureSurfReac(iReac)) THEN + ! 2.) Calculate the number of newly created products and update the surface properties SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) - ! LH-reaction with immediate desorption + ! 2a) Langmuir-Hinshlewood reaction with instantaneous desorption (Arrhenius model) CASE('LHD') - ! Define the variables Coverage = 1. - ! prefactor for the rate equation including the dependency on all coverage values + ! Product of the reactant coverage values DO iVal=1,SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iVal).GT.0) THEN iSpec = SurfChemReac%Reactants(iReac,iVal) - MPF = Species(iSpec)%MacroParticleFactor - Coverage = Coverage * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) + IF(iSpec.NE.SurfChemReac%SurfSpecies) THEN + Coverage = Coverage * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) + END IF END IF END DO - ! Determine the reaction energy [K] + ! Determine the reaction energy in dependence of the surface coverage [J] BetaCoeff = SurfChemReac%HeatAccomodation(iReac) ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) * BoltzmannConst nu = SurfChemReac%Prefactor(iReac) E_act = SurfChemReac%ArrheniusEnergy(iReac) - ! Calculate the rate in dependence of the temperature and coverage + ! Calculate the rate in dependence of the temperature and coverage Rate = nu * Coverage * exp(-E_act/WallTemp) ! Energy in K DO iVal=1,SIZE(SurfChemReac%Products(iReac,:)) IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN iSpec = SurfChemReac%Products(iReac,iVal) - - ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = Rate * dt * SurfMol + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) + ! Number of products to be inserted into the gas phase + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = Rate * dt * SurfMol + & + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) ! Test for multiples of the same reactant - ReactantCount = COUNT(SurfChemReac%Reactants(iReac,:) == iReactant) + ReactantCount = COUNT(SurfChemReac%Reactants(iReac,:).EQ.iReactant) - Coverage = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) - AdCount = Coverage * SurfMol + IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN + Coverage = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) + ELSE + Coverage = 1. + END IF - ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = AdCount/ReactantCount + AdCount = Coverage * SurfMol - ! Test if enough reactants exist on the surface + ! Check if enough adsorbate reactants are available IF(ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) .GT. AdCount/ReactantCount) THEN ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = AdCount/ReactantCount END IF @@ -188,36 +196,41 @@ SUBROUTINE ParticleSurfChemFlux() END IF END DO - ! Update the surface coverage values - IF(INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/MPF).GE.1) THEN - ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) * ReacHeat * BetaCoeff + ! Update the surface coverage values and the heat flux + IF(INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8).GE.1) THEN + ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) & + + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) * ReacHeat * BetaCoeff DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8)/SurfMol + IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN + ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) & + - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8)/SurfMol + END IF END IF - END DO + END DO ! iValReac ! Count the number of surface reactions - ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/MPF) - END IF + !ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/MPF) + END IF !ChemDesorpWall.GE.1 END IF ! iVal in Products END DO ! iVal - ! LH-reaction + ! b) Langmuir-Hinshlewood reaction (Arrhenius model) CASE('LH') - ! Define the variables Coverage = 1. - ! prefactor for the rate equation including the dependency on all coverage values + ! Product of the reactant coverage values DO iVal=1,SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iVal).GT.0) THEN iSpec = SurfChemReac%Reactants(iReac,iVal) MPF = Species(iSpec)%MacroParticleFactor - Coverage = Coverage * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) + IF(iSpec.NE.SurfChemReac%SurfSpecies) THEN + Coverage = Coverage * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) + END IF END IF END DO - ! Determine the reaction energy [K] + ! Determine the reaction energy in dependence of the surface coverage [J] BetaCoeff = SurfChemReac%HeatAccomodation(iReac) ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) * BoltzmannConst @@ -229,55 +242,68 @@ SUBROUTINE ParticleSurfChemFlux() DO iVal=1,SIZE(SurfChemReac%Products(iReac,:)) IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN iSpec = SurfChemReac%Products(iReac,iVal) - - DesCount = Rate * dt * SurfMol + ! Reaction product number + DesCount = Rate * dt DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - ! Check for multiples of the same reactant - ReactantCount = COUNT(SurfChemReac%Reactants(iReac,:) == iReactant) + ! Test for multiples of the same reactant + ReactantCount = COUNT(SurfChemReac%Reactants(iReac,:).EQ.iReactant) - Coverage = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) - AdCount = Coverage * SurfMol + IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN + Coverage = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) + ELSE + Coverage = 1. + END IF - !Check if enough reactants exist on the surface - IF(DesCount .GT. AdCount/ReactantCount) THEN - DesCount = AdCount/ReactantCount + ! Check if enough adsorbate reactants are available + IF(DesCount .GT. Coverage/ReactantCount) THEN + DesCount = Coverage/ReactantCount END IF END IF END DO - ! Update the surface coverage values - IF(INT(DesCount/MPF).GE.1) THEN - ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) + INT(DesCount,8)/SurfMol - ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) + INT(DesCount,8) * ReacHeat * BetaCoeff - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) - INT(DesCount,8)/SurfMol - END IF - END DO - ! Count the number of surface reactions - ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + INT(DesCount/MPF) + ! Update the surface coverage values and the heat flux + ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) + DesCount + ! Test for the maximum of the product coverage + IF(ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID).GT.PartBound%MaxCoverage(BoundID, iSpec)) THEN + ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) = PartBound%MaxCoverage(BoundID, iSpec) END IF + ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) & + + DesCount*ReacHeat*BetaCoeff*SurfMol + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN + ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) - DesCount + END IF + END IF + END DO ! iValReac + ! Count the number of surface reactions + !ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + INT(DesCount/MPF) END IF ! iVal in Products END DO ! iVal - ! Desorption + ! c) Thermal desorption (Polyani-Wigner equation) CASE('D') DO iVal=1, SIZE(SurfChemReac%Products(iReac,:)) IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN iSpec = SurfChemReac%Products(iReac,iVal) MPF = Species(iSpec)%MacroParticleFactor + ! Number of adsorbed particles on the subside IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) + IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN + Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) + ELSE + Coverage = 1. + END IF AdCount = Coverage * SurfMol END IF END DO @@ -286,7 +312,7 @@ SUBROUTINE ParticleSurfChemFlux() AdCount = Coverage * SurfMol END IF - ! Calculate the desorption energy in dependence of the coverage [K] + ! Calculate the desorption energy in dependence of the coverage [J] DesHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) * BoltzmannConst ! Define the variables @@ -295,7 +321,7 @@ SUBROUTINE ParticleSurfChemFlux() E_act = SurfChemReac%ArrheniusEnergy(iReac) Rate = SurfChemReac%Rate(iReac) - ! Calculate the desorption parameters in dependence of coverage and temperature of the boundary + ! Calculate the desorption prefactor in dependence of coverage and temperature of the boundary IF(nu.EQ.0.) THEN nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) IF (DissOrder.EQ.2) THEN @@ -308,29 +334,34 @@ SUBROUTINE ParticleSurfChemFlux() Rate = nu * Coverage**DissOrder * exp(-E_act/WallTemp) ! Energy in K ! Determine the desorption probability - ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = Rate * dt * SurfMol + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/DissOrder + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = (Rate * dt * SurfMol)/DissOrder + & + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.(AdCount/DissOrder)) THEN ! Upper bound for the desorption number ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = AdCount/DissOrder END IF - ! Update the adsorbtion and desorption count - IF(INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/MPF).GE.1) THEN - ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) * DesHeat + ! Update the adsorbtion and desorption count together with the heat flux + IF(INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8).GE.1) THEN + ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) & + - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) * DesHeat IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) - DissOrder*INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8)/SurfMol + IF (iReactant.NE.SurfChemReac%SurfSpecies) THEN + ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) & + - DissOrder*INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8)/SurfMol + END IF END IF END DO ELSE - ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) = ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) - DissOrder*INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8)/SurfMol + ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) = ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) & + - DissOrder*INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8)/SurfMol END IF - ! Count the number of surface reactions - ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/MPF) + !ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/MPF) END IF !ChemDesorbWall .GE. 1 END IF ! Products .NE. 1 END DO !iSpec @@ -347,28 +378,28 @@ SUBROUTINE ParticleSurfChemFlux() NbrOfParticle = 0 iPartTotal = 0 + ! 3.) Insert the product species into the gas phase DO iSpec = 1, nSpecies - ! Loop over the side numbers - IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/Species(iSpec)%MacroParticleFactor).GE.1) THEN + IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8).GE.1) THEN + ! IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/Species(iSpec)%MacroParticleFactor).GE.1) THEN - ! Random distribution of the particles on the surface ! Define the necessary variables xyzNod(1:3) = BCdata_auxSF(BoundID)%TriaSideGeo(iSide)%xyzNod(1:3) DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - ! Number of additional particles to be inserted Node1 = jSample+1 - Node2 = jSample+2 ! + Node2 = jSample+2 Vector1 = BCdata_auxSF(BoundID)%TriaSideGeo(iSide)%Vectors(:,Node1-1) Vector2 = BCdata_auxSF(BoundID)%TriaSideGeo(iSide)%Vectors(:,Node2-1) midpoint(1:3) = BCdata_auxSF(BoundID)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) ndist(1:3) = BCdata_auxSF(BoundID)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) - !PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)) - PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/Species(iSpec)%MacroParticleFactor) + PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) + ! PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/Species(iSpec)%MacroParticleFactor) - ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) & + - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) NbrOfParticle = NbrOfParticle + PartInsSubSide ALLOCATE(particle_positions(1:PartInsSubSide*3)) @@ -395,7 +426,7 @@ SUBROUTINE ParticleSurfChemFlux() PDM%dtFracPush(ParticleIndexNbr) = .TRUE. PDM%IsNewPart(ParticleIndexNbr) = .TRUE. PEM%GlobalElemID(ParticleIndexNbr) = globElemId - PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId !needed when ParticlePush is not executed, e.g. "delay" + PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId iPartTotal = iPartTotal + 1 IF (RadialWeighting%DoRadialWeighting) THEN PartMPF(ParticleIndexNbr) = CalcRadWeightMPF(PartState(2,ParticleIndexNbr), iSpec,ParticleIndexNbr) @@ -415,10 +446,10 @@ SUBROUTINE ParticleSurfChemFlux() END IF ! iSide IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'Error 2 in ParticleSurfaceflux!') + ! Set the particle properties CALL SetParticleChargeAndMass(iSpec,NbrOfParticle) IF (usevMPF.AND.(.NOT.RadialWeighting%DoRadialWeighting)) CALL SetParticleMPF(iSpec,-1,NbrOfParticle) - ! define molecule stuff IF (useDSMC.AND.(CollisMode.GT.1)) CALL SetInnerEnergies(iSpec, BoundID, NbrOfParticle,iReac) @@ -432,10 +463,10 @@ SUBROUTINE ParticleSurfChemFlux() PartEkinIn(PartSpecies(PositionNbr))+CalcEkinPart(PositionNbr) END DO ! iPart END IF ! CalcPartBalance - ! instead of an UpdateNextfreePosition we update the particleVecLength only - enough ?!? + PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle - ! Sample Energies on Surfaces when particles are emitted from them + IF (NbrOfParticle.NE.PartsEmitted) THEN ! should be equal for including the following lines in tSurfaceFlux CALL abort(& @@ -479,7 +510,7 @@ SUBROUTINE RemoveBias(SurfNumOfReac, SurfReacBias) !=================================================================================================================================== SurfReacBias = [(i,i=1,SurfNumOfReac)] - +! Shuffle m = SurfNumOfReac DO k = 1, 2 DO i = 1, m @@ -494,7 +525,7 @@ SUBROUTINE RemoveBias(SurfNumOfReac, SurfReacBias) END SUBROUTINE RemoveBias !=================================================================================================================================== -!> Particle Inserting via Surface Flux and (if present) adaptiveBC (Surface Flux adapting part density, velocity or temperature) +!> (Instantaneous) Diffusion of particles along the surface !=================================================================================================================================== SUBROUTINE ParticleSurfDiffusion() ! Modules @@ -511,6 +542,9 @@ SUBROUTINE ParticleSurfDiffusion() USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win,SurfChemReac, ChemWallProp USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC +!#if defined(IMPA) || defined(ROS) +USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod, TrackInfo +!#endif /*IMPA*/ #if USE_LOADBALANCE USE MOD_LoadBalance_Timers ,ONLY: LBStartTime, LBElemSplitTime, LBPauseTime #endif /*USE_LOADBALANCE*/ @@ -538,10 +572,8 @@ SUBROUTINE ParticleSurfDiffusion() !=================================================================================================================================== CatBoundNum = SurfChemReac%CatBoundNum -! SubP = TrackInfo%p -! SubQ = TrackInfo%q -SubP = 1 -SubQ = 1 +SubP = TrackInfo%p +SubQ = TrackInfo%q #if USE_MPI firstSide = INT(REAL( myComputeNodeRank *nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors))+1 @@ -553,17 +585,19 @@ SUBROUTINE ParticleSurfDiffusion() SideNumber = lastSide - firstSide + 1 +! Average/diffusion over all catalytic boundaries IF(SurfChemReac%TotDiffusion) THEN - DO iSpec = 1, nSpecies ChemWallProp(iSpec,1,SubP,SubQ,:) = SUM(ChemWallProp(iSpec,1,SubP,SubQ,:))/SideNumber END DO +! Diffusion over a single reactive boundary ELSE IF(SurfChemReac%Diffusion) THEN DO iSF = 1, CatBoundNum BoundID = SurfChemReac%Surfaceflux(iSF)%BC SideNumber = BCdata_auxSF(BoundID)%SideNumber + ! Determine the sum of the coverage on all indivual subsides DO iSpec = 1, nSpecies Coverage_Sum = 0.0 DO iSide = 1, SideNumber @@ -578,6 +612,7 @@ SUBROUTINE ParticleSurfDiffusion() END DO + ! Redistribute the coverage equally over all subsides DO iSide = 1, SideNumber BCSideID=BCdata_auxSF(BoundID)%SideList(iSide) ElemID = SideToElem(S2E_ELEM_ID,BCSideID) @@ -603,7 +638,7 @@ END SUBROUTINE ParticleSurfDiffusion !=================================================================================================================================== -!> +!> !=================================================================================================================================== SUBROUTINE SetInnerEnergies(iSpec, BoundID, NbrOfParticle,iReac) ! MODULES @@ -745,7 +780,7 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSide DO i = NbrOfParticle-PartIns+1,NbrOfParticle PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition) IF (PositionNbr .NE. 0) THEN - !-- 0a.: In case of side-normal velocities: calc n-/t-vectors at particle position, xi was saved in PartState(4:5) + ! In case of side-normal velocities: calc n-/t-vectors at particle position, xi was saved in PartState(4:5) IF (SurfChemReac%Surfaceflux(iSF)%VeloIsNormal .AND. TriaSurfaceFlux) THEN vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3) vec_t1(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1(1:3) @@ -832,7 +867,7 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSide CALL abort(__STAMP__,'ERROR in SurfaceFlux: Wrong envelope in SetSurfacefluxVelocities!') END SELECT - !-- 2.: sample normal directions and build complete velo-vector + ! sample normal directions and build complete velo-vector Vec3D(1:3) = vec_nIn(1:3) * SQRT(2.*BoltzmannConst*T/Species(iSpec)%MassIC)*(a-zstar) ! IF (.NOT.DoZigguratSampling) THEN !polar method Velosq = 2 diff --git a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 index cdf5162ba..bc799f307 100644 --- a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 +++ b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 @@ -558,12 +558,15 @@ SUBROUTINE ExchangeChemSurfData() DO iSpec =1, nSpecies IF (PartBound%LatticeVec(locBCID).GT.0.) THEN + ! update the surface coverage (direct calculation of the number of surface atoms) ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall(iSpec,1,:,:,iSide) * PartBound%LatticeVec(locBCID)* & PartBound%LatticeVec(locBCID)/(PartBound%MolPerUnitCell(locBCID)*SurfSideArea_Shared(:,:,iSide)) ELSE + ! update the surface coverage (calculation with a surface monolayer) ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall(iSpec,1,:,:,iSide) / & (10.**(19)*SurfSideArea_Shared(:,:,iSide)) END IF + ! calculate the heat flux on the surface subside ChemWallProp(iSpec,2,:,:,iSide) = ChemWallProp(iSpec,2,:,:,iSide) + ChemSampWall(iSpec,2,:,:,iSide) END DO ChemSampWall(:,:,:,:,iSide) = 0.0 diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index f4dcc7aa8..6bb68db7a 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -14,7 +14,7 @@ MODULE MOD_SurfaceModel_Chemistry !=================================================================================================================================== -!> +!> Module for the initialization of the surface chemistry !=================================================================================================================================== ! MODULES ! IMPLICIT VARIABLE HANDLING @@ -32,7 +32,7 @@ MODULE MOD_SurfaceModel_Chemistry CONTAINS !================================================================================================================================== -!> +!> Define parameters for the catalysis !================================================================================================================================== SUBROUTINE DefineParametersSurfaceChemistry() ! MODULES @@ -42,9 +42,13 @@ SUBROUTINE DefineParametersSurfaceChemistry() !=================================================================================================================================== CALL prms%SetSection("Surface Chemistry") CALL prms%CreateIntOption( 'Surface-NumOfReactions','Number of chemical Surface reactions') +CALL prms%CreateIntOption( 'Surface-Species','Bulk species of the boundary') CALL prms%CreateStringOption( 'Surface-Reaction[$]-Type', & 'No default, options are A (adsorption), D (desorption), ER (Eley-Rideal), LH (Langmuir-Hinshelwood), LHD', & numberedmulti=.TRUE.) +CALL prms%CreateStringOption( 'Surface-Database', 'none') +CALL prms%CreateStringOption( 'Surface-Reaction[$]-SurfName', 'none' ,numberedmulti=.TRUE.) +CALL prms%CreateLogicalOption( 'OverwriteCatParameters', 'Flag to set catalytic parameters manually', '.FALSE.') CALL prms%CreateIntArrayOption( 'Surface-Reaction[$]-Reactants' & ,'Reactants of Reaction[$]\n'//& '(SpecNumOfReactant1,\n'//& @@ -78,10 +82,8 @@ SUBROUTINE DefineParametersSurfaceChemistry() 'Arrhenius prefactor for the reaction/desorption', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-Energy', & 'Arrhenius energy for the reaction/desorption', '0.' , numberedmulti=.TRUE.) -CALL prms%CreateRealOption( 'Surface-Reaction[$]-FormationEnergy', & - 'TODO', '0.' , numberedmulti=.TRUE.) CALL prms%CreateLogicalOption( 'Surface-Diffusion', 'Diffusion along the surface', '.FALSE.') -CALL prms%CreateLogicalOption( 'Surface-TotalDiffusion', 'Diffusion along the surface', '.FALSE.') +CALL prms%CreateLogicalOption( 'Surface-TotalDiffusion', 'Diffusion along all possible surface', '.FALSE.') CALL prms%CreateIntOption( 'Surface-Reaction[$]-NumOfBoundaries', & 'Num of boundaries for surface reaction.', & numberedmulti=.TRUE.) @@ -104,6 +106,8 @@ SUBROUTINE SurfaceModel_Chemistry_Init() USE MOD_Particle_Boundary_Vars USE MOD_SurfaceModel_Vars USE MOD_Particle_Surfaces_Vars +USE MOD_io_hdf5 +USE MOD_HDF5_input, ONLY:ReadAttribute, DatasetExists, AttributeExists #if USE_MPI USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED, myComputeNodeRank USE MOD_MPI_Shared @@ -116,8 +120,15 @@ SUBROUTINE SurfaceModel_Chemistry_Init() ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -CHARACTER(LEN=3) :: hilf -INTEGER :: iReac, iReac2, iSpec, iBound, iVal +CHARACTER(LEN=64) :: dsetname +CHARACTER(LEN=64) :: AttribName +INTEGER(HID_T) :: file_id_specdb ! File identifier +INTEGER(HID_T) :: dset_id_specdb ! Dataset identifier +LOGICAL :: DataSetFound +LOGICAL :: Attr_Exists +INTEGER(HID_T) :: Loc_ID, Attr_ID +CHARACTER(LEN=32) :: hilf, hilf2 +INTEGER :: iReac, iReac2, iSpec, iBound, iVal, err INTEGER :: ReadInNumOfReact INTEGER :: iSide, SideID, iBC REAL, ALLOCATABLE :: StoichCoeff(:,:) @@ -135,6 +146,8 @@ SUBROUTINE SurfaceModel_Chemistry_Init() ALLOCATE(StoichCoeff(nSpecies,2)) ALLOCATE(SurfChemReac%ReactType(SurfChemReac%NumOfReact)) SurfChemReac%ReactType = '0' +ALLOCATE(SurfChemReac%CatName(SurfChemReac%NumOfReact)) +SurfChemReac%CatName = '0' ALLOCATE(SurfChemReac%Reactants(SurfChemReac%NumOfReact,2)) SurfChemReac%Reactants = 0 ALLOCATE(SurfChemReac%Products(SurfChemReac%NumOfReact,2)) @@ -143,17 +156,10 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%Inhibition = 0 ALLOCATE(SurfChemReac%Promotion(SurfChemReac%NumOfReact)) SurfChemReac%Promotion = 0 -ALLOCATE(SurfChemReac%EForm(SurfChemReac%NumOfReact)) -SurfChemReac%EForm = 0.0 -ALLOCATE(SurfChemReac%EReact(SurfChemReac%NumOfReact)) -SurfChemReac%EReact = 0.0 -ALLOCATE(SurfChemReac%EScale(SurfChemReac%NumOfReact)) -SurfChemReac%EScale = 0.0 -ALLOCATE(SurfChemReac%HeatAccomodation(SurfChemReac%NumOfReact)) -SurfChemReac%HeatAccomodation = 0.0 ALLOCATE(SurfChemReac%BoundisChemSurf(nPartBound)) SurfChemReac%BoundisChemSurf = .FALSE. ALLOCATE(SurfChemReac%NumOfBounds(SurfChemReac%NumOfReact)) +SurfChemReac%NumOfBounds = 0 ALLOCATE(SurfChemReac%BoundMap(SurfChemReac%NumOfReact)) ALLOCATE(SurfChemReac%PSMap(nPartBound)) SurfChemReac%CatBoundNum = 0 @@ -193,22 +199,20 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%ArrheniusEnergy = 0.0 ALLOCATE(SurfChemReac%Prefactor(SurfChemReac%NumOfReact)) SurfChemReac%Prefactor = 0.0 +ALLOCATE(SurfChemReac%EReact(SurfChemReac%NumOfReact)) +SurfChemReac%EReact = 0.0 +ALLOCATE(SurfChemReac%EScale(SurfChemReac%NumOfReact)) +SurfChemReac%EScale = 0.0 +ALLOCATE(SurfChemReac%HeatAccomodation(SurfChemReac%NumOfReact)) +SurfChemReac%HeatAccomodation = 0.0 -! Diffusion -SurfChemReac%Diffusion = GETLOGICAL('Surface-Diffusion', '.FALSE.') -SurfChemReac%TotDiffusion = GETLOGICAL('Surface-TotalDiffusion', '.FALSE.') - +! Get the reaction names, reactive species and boundaries DO iReac = 1, ReadInNumOfReact WRITE(UNIT=hilf,FMT='(I0)') iReac - SurfChemReac%ReactType(iReac) = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-Type')) - + SurfChemReac%CatName(iReac) = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-SurfName')) SurfChemReac%Reactants(iReac,:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Reactants',2,'0,0') SurfChemReac%Products(iReac,:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Products',2,'0,0') - SurfChemReac%Inhibition(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-Inhibition','0') - SurfChemReac%Promotion(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-Promotion','0') - SurfChemReac%EReact(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-ReactHeat','0.') - SurfChemReac%EScale(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-HeatScaling','0.') - SurfChemReac%HeatAccomodation(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EnergyAccomodation','1.') + SurfChemReac%NumOfBounds(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-NumOfBoundaries','0') IF (SurfChemReac%NumOfBounds(iReac).EQ.0) THEN CALL abort(& @@ -230,62 +234,260 @@ SUBROUTINE SurfaceModel_Chemistry_Init() iBound = SurfChemReac%BoundMap(iReac)%Boundaries(iVal) SurfChemReac%PSMap(iBound)%PureSurfReac(iReac) = .TRUE. END DO - - SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) - CASE('A') - SurfChemReac%S_initial(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-StickingCoefficient','1.') - SurfChemReac%EqConstant(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EqConstant','1.') - SurfChemReac%DissOrder(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-DissOrder','1.') - - CASE('D') - SurfChemReac%W_interact(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-LateralInteraction','0.') - SurfChemReac%C_a(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Ca','0.') - SurfChemReac%C_b(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Cb','0.') - SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','0.') - SurfChemReac%E_initial(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') - SurfChemReac%DissOrder(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-DissOrder','1.') - - ! Convert the prefactor from absolute to coverage values for associative desorption - IF(SurfChemReac%DissOrder(iReac).EQ.2) THEN - SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) - END IF - - CASE('LH') - SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') - SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') - ! Convert the prefactor to coverage dependent values - SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) - - CASE('LHD') - SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') - SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') - ! Convert the prefactor to coverage dependent values - SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) - - CASE('ER') - SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') - SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') - - CASE DEFAULT - SWRITE(*,*) ' Reaction Type does not exists: ', TRIM(SurfChemReac%ReactType(iReac)) - CALL abort(__STAMP__,'Surface Reaction Type does not exist') - END SELECT - SurfChemReac%EForm(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-FormationEnergy','0') END DO -!Determine the number of boundaries with a surface reaction on them +! Determine the number of boundaries with a surface reaction on them DO iBound = 1, nPartBound IF (SurfChemReac%BoundisChemSurf(iBound)) THEN SurfChemReac%CatBoundNum = SurfChemReac%CatBoundNum + 1 END IF END DO +! Bulk species involved in the reactions +SurfChemReac%SurfSpecies = GETINT('Surface-Species','0') + +! Diffusion +SurfChemReac%Diffusion = GETLOGICAL('Surface-Diffusion', '.FALSE.') +SurfChemReac%TotDiffusion = GETLOGICAL('Surface-TotalDiffusion', '.FALSE.') + +!SpeciesDatabase +SpeciesDatabase = GETSTR('Surface-Database', 'none') +SurfChemReac%OverwriteCatParameters = GETLOGICAL('OverwriteCatParameters', '.FALSE.') + +IF (SpeciesDatabase.EQ.'none') THEN + SurfChemReac%OverwriteCatParameters = .TRUE. +END IF + +IF(SpeciesDatabase.NE.'none') THEN + CALL H5OPEN_F(err) + + CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) + + DO iReac = 1, ReadInNumOfReact + WRITE(UNIT=hilf,FMT='(I0)') iReac + dsetname = TRIM('/Surface-Chemistry/'//TRIM(SurfChemReac%CatName(iReac))) + + CALL DatasetExists(file_id_specdb,TRIM(dsetname),DataSetFound) + IF(.NOT.DataSetFound)THEN + SurfChemReac%OverwriteCatParameters = .TRUE. + SWRITE(*,*) 'WARNING: DataSet not found: ['//TRIM(dsetname)//'] ['//TRIM(SpeciesDatabase)//']' + ELSE + CALL ReadAttribute(file_id_specdb,'Type',1,DatasetName = dsetname,StrScalar=SurfChemReac%ReactType(iReac)) + CALL AttributeExists(file_id_specdb,'Inhibition',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'Inhibition',1,DatasetName = dsetname,IntScalar=SurfChemReac%Inhibition(iReac)) + ELSE + SurfChemReac%Inhibition(iReac)= 0 + END IF + CALL AttributeExists(file_id_specdb,'Promotion',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'Promotion',1,DatasetName = dsetname,IntScalar=SurfChemReac%Promotion(iReac)) + ELSE + SurfChemReac%Promotion(iReac)= 0 + END IF + CALL AttributeExists(file_id_specdb,'ReactHeat',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'ReactHeat',1,DatasetName = dsetname,RealScalar=SurfChemReac%EReact(iReac)) + ELSE + SurfChemReac%EReact(iReac)= 0. + END IF + CALL AttributeExists(file_id_specdb,'HeatScaling',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'HeatScaling',1,DatasetName = dsetname,RealScalar=SurfChemReac%EScale(iReac)) + ELSE + SurfChemReac%EScale(iReac)= 0. + END IF + CALL AttributeExists(file_id_specdb,'EnergyAccomodation',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'EnergyAccomodation',1,DatasetName = dsetname,RealScalar=SurfChemReac%HeatAccomodation(iReac)) + ELSE + SurfChemReac%HeatAccomodation(iReac)= 0. + END IF + + SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) + CASE('A') + CALL AttributeExists(file_id_specdb,'StickingCoefficient',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'StickingCoefficient',1,DatasetName = dsetname,RealScalar=SurfChemReac%S_initial(iReac)) + ELSE + SurfChemReac%S_initial(iReac)= 1. + END IF + CALL AttributeExists(file_id_specdb,'EqConstant',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'EqConstant',1,DatasetName = dsetname,RealScalar=SurfChemReac%EqConstant(iReac)) + ELSE + SurfChemReac%EqConstant(iReac)= 1. + END IF + CALL AttributeExists(file_id_specdb,'DissOrder',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'DissOrder',1,DatasetName = dsetname,RealScalar=SurfChemReac%DissOrder(iReac)) + ELSE + SurfChemReac%DissOrder(iReac)= 1. + END IF + + CASE('D') + CALL AttributeExists(file_id_specdb,'LateralInteraction',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'LateralInteraction',1,DatasetName = dsetname,RealScalar=SurfChemReac%W_interact(iReac)) + ELSE + SurfChemReac%W_interact(iReac)= 0. + END IF + CALL AttributeExists(file_id_specdb,'Ca',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'Ca',1,DatasetName = dsetname,RealScalar=SurfChemReac%C_a(iReac)) + ELSE + SurfChemReac%C_a(iReac)= 0. + END IF + CALL AttributeExists(file_id_specdb,'Cb',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'Cb',1,DatasetName = dsetname,RealScalar=SurfChemReac%C_b(iReac)) + ELSE + SurfChemReac%C_b(iReac)= 0. + END IF + CALL AttributeExists(file_id_specdb,'Prefactor',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'Prefactor',1,DatasetName = dsetname,RealScalar=SurfChemReac%Prefactor(iReac)) + ELSE + SurfChemReac%Prefactor(iReac)= 0. + END IF + CALL AttributeExists(file_id_specdb,'Energy',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'Energy',1,DatasetName = dsetname,RealScalar=SurfChemReac%E_initial(iReac)) + ELSE + SurfChemReac%E_initial(iReac)= 0. + END IF + CALL AttributeExists(file_id_specdb,'DissOrder',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'DissOrder',1,DatasetName = dsetname,RealScalar=SurfChemReac%DissOrder(iReac)) + ELSE + SurfChemReac%DissOrder(iReac)= 1. + END IF + + ! Convert the prefactor from absolute to coverage values for associative desorption + IF(SurfChemReac%DissOrder(iReac).EQ.2) THEN + SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) + END IF + + CASE('LH') + CALL AttributeExists(file_id_specdb,'Energy',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'Energy',1,DatasetName = dsetname,RealScalar=SurfChemReac%ArrheniusEnergy(iReac)) + ELSE + SurfChemReac%ArrheniusEnergy(iReac)= 0. + END IF + CALL AttributeExists(file_id_specdb,'Prefactor',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'Prefactor',1,DatasetName = dsetname,RealScalar=SurfChemReac%Prefactor(iReac)) + ELSE + SurfChemReac%Prefactor(iReac)= 1. + END IF + SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) + + CASE('LHD') + CALL AttributeExists(file_id_specdb,'Energy',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'Energy',1,DatasetName = dsetname,RealScalar=SurfChemReac%ArrheniusEnergy(iReac)) + ELSE + SurfChemReac%ArrheniusEnergy(iReac)= 0. + END IF + CALL AttributeExists(file_id_specdb,'Prefactor',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'Prefactor',1,DatasetName = dsetname,RealScalar=SurfChemReac%Prefactor(iReac)) + ELSE + SurfChemReac%Prefactor(iReac)= 1. + END IF + SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) + + CASE('ER') + CALL AttributeExists(file_id_specdb,'Energy',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'Energy',1,DatasetName = dsetname,RealScalar=SurfChemReac%ArrheniusEnergy(iReac)) + ELSE + SurfChemReac%ArrheniusEnergy(iReac)= 0. + END IF + CALL AttributeExists(file_id_specdb,'Prefactor',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'Prefactor',1,DatasetName = dsetname,RealScalar=SurfChemReac%Prefactor(iReac)) + ELSE + SurfChemReac%Prefactor(iReac)= 1. + END IF + + CASE DEFAULT + SWRITE(*,*) ' Reaction Type does not exists: ', TRIM(SurfChemReac%ReactType(iReac)) + CALL abort(__STAMP__,'Surface Reaction Type does not exist') + END SELECT + + END IF !DatasetFound + END DO !iReac + ! Close the file. + CALL H5FCLOSE_F(file_id_specdb, err) + ! Close FORTRAN interface. + CALL H5CLOSE_F(err) +END IF !SpeciesDatabase + + +IF (SurfChemReac%OverwriteCatParameters) THEN + ! Loop over the surface reactions + DO iReac = 1, ReadInNumOfReact + WRITE(UNIT=hilf,FMT='(I0)') iReac + SurfChemReac%ReactType(iReac) = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-Type')) + + SurfChemReac%Inhibition(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-Inhibition','0') + SurfChemReac%Promotion(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-Promotion','0') + SurfChemReac%EReact(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-ReactHeat','0.') + SurfChemReac%EScale(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-HeatScaling','0.') + SurfChemReac%HeatAccomodation(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EnergyAccomodation','1.') + + SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) + CASE('A') + SurfChemReac%S_initial(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-StickingCoefficient','1.') + SurfChemReac%EqConstant(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EqConstant','1.') + SurfChemReac%DissOrder(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-DissOrder','1.') + + CASE('D') + SurfChemReac%W_interact(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-LateralInteraction','0.') + SurfChemReac%C_a(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Ca','0.') + SurfChemReac%C_b(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Cb','0.') + SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','0.') + SurfChemReac%E_initial(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') + SurfChemReac%DissOrder(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-DissOrder','1.') + + ! Convert the prefactor from absolute to coverage values for associative desorption + IF(SurfChemReac%DissOrder(iReac).EQ.2) THEN + SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) + END IF + + CASE('LH') + SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') + SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') + ! Convert the prefactor to coverage dependent values + SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) + + CASE('LHD') + SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') + SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') + ! Convert the prefactor to coverage dependent values + SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) + + CASE('ER') + SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') + SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') + + CASE DEFAULT + SWRITE(*,*) ' Reaction Type does not exists: ', TRIM(SurfChemReac%ReactType(iReac)) + CALL abort(__STAMP__,'Surface Reaction Type does not exist') + END SELECT + END DO + +END IF + ALLOCATE( ChemSampWall(1:nSpecies,2,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) ChemSampWall = 0.0 -ALLOCATE(ChemDesorpWall(1:nSpecies,2,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) +ALLOCATE(ChemDesorpWall(1:nSpecies,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) ChemDesorpWall = 0.0 -ALLOCATE(ChemCountReacWall(1:ReadInNumOfReact,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) -ChemCountReacWall = 0.0 +! ALLOCATE(ChemCountReacWall(1:ReadInNumOfReact,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) +! ChemCountReacWall = 0.0 + #if USE_MPI CALL Allocate_Shared((/nSpecies,2,nSurfSample,nSurfSample,nComputeNodeSurfTotalSides/),ChemSampWall_Shared_Win,ChemSampWall_Shared) CALL MPI_WIN_LOCK_ALL(0,ChemSampWall_Shared_Win,IERROR) diff --git a/src/particles/surfacemodel/surfacemodel_init.f90 b/src/particles/surfacemodel/surfacemodel_init.f90 index 31884c566..115dcff10 100644 --- a/src/particles/surfacemodel/surfacemodel_init.f90 +++ b/src/particles/surfacemodel/surfacemodel_init.f90 @@ -178,12 +178,12 @@ SUBROUTINE FinalizeSurfaceModel() !=================================================================================================================================== SDEALLOCATE(SurfModResultSpec) SDEALLOCATE(SurfModEnergyDistribution) -!SDEALLOCATE(StoichCoeff) SDEALLOCATE(SurfChemReac%ReactType) +SDEALLOCATE(SurfChemReac%CatName) SDEALLOCATE(SurfChemReac%Reactants) SDEALLOCATE(SurfChemReac%Products) SDEALLOCATE(SurfChemReac%Inhibition) -SDEALLOCATE(SurfChemReac%EForm) +SDEALLOCATE(SurfChemReac%Promotion) SDEALLOCATE(SurfChemReac%EReact) SDEALLOCATE(SurfChemReac%EScale) SDEALLOCATE(SurfChemReac%HeatAccomodation) @@ -211,11 +211,11 @@ SUBROUTINE FinalizeSurfaceModel() ADEALLOCATE(ChemSampWall_Shared) ADEALLOCATE(ChemWallProp_Shared) SDEALLOCATE(ChemDesorpWall) - SDEALLOCATE(ChemCountReacWall) + ! SDEALLOCATE(ChemCountReacWall) SDEALLOCATE(ChemSampWall) #else SDEALLOCATE(ChemDesorpWall) - SDEALLOCATE(ChemCountReacWall) + ! SDEALLOCATE(ChemCountReacWall) SDEALLOCATE(ChemSampWall) SDEALLOCATE(ChemWallProp) #endif diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index 788772204..ee1816dfa 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -37,6 +37,7 @@ MODULE MOD_SurfaceModel !> 2.) Count and sample the properties BEFORE the surface interaction !> 3.) Perform the selected gas-surface interaction, currently implemented models: ! 0: Maxwell Scattering +! 20: Adsorption or Eley-Rideal reaction ! 5/6/7/8/9/10/11: Secondary Electron Emission !> 4.) PIC ONLY: Deposit charges on dielectric surface (when activated), if these were removed/changed in SpeciesSwap or SurfaceModel !> 5.) Count and sample the properties AFTER the surface interaction @@ -52,7 +53,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) USE MOD_Particle_Vars ,ONLY: PartSpecies,WriteMacroSurfaceValues,Species,usevMPF,PartMPF USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod, TrackInfo USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, dXiEQ_SurfSample,SurfSideArea_Shared -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac , ChemWallProp, ChemSampWall, ChemCountReacWall !, RecombModel +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac , ChemWallProp, ChemSampWall !, ChemCountReacWall USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared, BoundsOfElem_Shared USE MOD_Particle_Vars ,ONLY: PDM, LastPartPos,PartState USE MOD_Particle_Vars ,ONLY: UseCircularInflow @@ -96,8 +97,8 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) INTEGER :: i !=================================================================================================================================== CHARACTER(LEN=5) :: InteractionType -REAL :: RanNum ! Random number -REAL :: Coverage, MaxCoverage, TotalCoverage, Theta +REAL :: RanNum, RanNum2 +REAL :: Coverage, MaxCoverage, TotalCoverage, Theta, MaxTotalCov REAL :: CoAds_Coverage, CoAds_MaxCov REAL :: S_0, StickCoeff REAL :: EqConstant, DissOrder @@ -187,37 +188,45 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) !----------------------------------------------------------------------------------------------------------------------------------- CALL MaxwellScattering(PartID,SideID,n_Loc,SpecularReflectionOnly) !----------------------------------------------------------------------------------------------------------------------------------- -CASE(20) +CASE(20) ! Adsorption or Eley-Rideal reaction + !> Selection and execution of a catalytic gas-surface interaction + !> 0.) Determine the surface parameters: Coverage and number of surface molecules + !> 1.) Calculate the sticking coefficient by the Kisliuk model (adsorption) + !> 2.) Calculate the reaction probability by the Arrhenius equation (bias-free for multiple channels) + !> 3.) Choose the occuring pathway by comparison with a random number + !> 4.) Perform the chosen process + !> a.) Adsorption: delete the incoming particle and update the surface values + !> b.) ER: delete the incoming particle, update the surface values and create the gas phase products +!----------------------------------------------------------------------------------------------------------------------------------- + + ! 0.) Determine the surface parameters: Coverage and number of surface molecules SubP = TrackInfo%p SubQ = TrackInfo%q InteractionType = 'None' StickCoeff = 0.0 Prob = 0.0 iReac_ER = 0 - speciesID = PartSpecies(PartID) SurfNumOfReac = SurfChemReac%NumOfReact - - ! Determination of the particle weights and MPF + ! MacroParticleFactor partWeight = GetParticleWeight(PartID) IF(.NOT.(usevMPF.OR.RadialWeighting%DoRadialWeighting)) THEN partWeight = partWeight * Species(speciesID)%MacroParticleFactor END IF - ! Calculate the number of molecules on the surface IF(PartBound%LatticeVec(locBCID).GT.0.) THEN - ! Surface molecules in dependence of the occupancy of the unit cell + ! Number of surface molecules in dependence of the occupancy of the unit cell SurfMol = PartBound%MolPerUnitCell(locBCID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & /(PartBound%LatticeVec(locBCID)*PartBound%LatticeVec(locBCID)) ELSE - ! Alternative calculation by average number of molecules per area for a monolayer + ! Alternative calculation by the average number of surface molecules per area for a monolayer SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) - END IF + END IF ! LatticeVec.GT.0 DO iReac = 1, SurfNumOfReac - SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) + ! 1.) Calculate the sticking coefficient by the Kisliuk model (adsorption) CASE('A') IF(ANY(SurfChemReac%Reactants(iReac,:).EQ.speciesID)) THEN iReac_Ads = iReac @@ -234,18 +243,18 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) Coverage = ChemWallProp(speciesID,1,SubP,SubQ,SurfSideID) END IF - ! Definition of the variables MaxCoverage = PartBound%MaxCoverage(locBCID,speciesID) TotalCoverage = SUM(ChemWallProp(:,1,SubP, SubQ, SurfSideID)) + MaxTotalCov = PartBound%MaxTotalCoverage(locBCID) DissOrder = SurfChemReac%DissOrder(iReac) S_0 = SurfChemReac%S_initial(iReac) EqConstant = SurfChemReac%EqConstant(iReac) StickCoeff = SurfChemReac%StickCoeff(iReac) ! Determine the heat of adsorption in dependence of the coverage [J] - AdsHeat = (SurfChemReac%EReact(iReac) - Coverage * SurfChemReac%EScale(iReac)) * BoltzmannConst - + AdsHeat = (SurfChemReac%EReact(iReac) - Coverage * SurfChemReac%EScale(iReac)) * BoltzmannConst + ! Theta = free surface sites required for the adsorption ! Determination of possible coadsorption processes IF(SurfChemReac%Inhibition(iReac).NE.0) THEN @@ -265,10 +274,9 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) END IF ! Check whether the maximum coverage value is reached: - IF(Theta.GE.0.0 .AND. TotalCoverage.LT.1.0) THEN + IF(Theta.GE.0.0 .AND. TotalCoverage.LT.MaxTotalCov) THEN Theta = Theta**DissOrder - ! Kisluik model - ! For EqConstant=1 and MaxCoverage=1: Langmuir model + ! Kisliuk model (for EqConstant=1 and MaxCoverage=1: Langmuir model) StickCoeff = S_0 * (1.0 + EqConstant * (1.0/Theta - 1.0))**(-1.0) ELSE StickCoeff = 0.0 @@ -276,7 +284,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) END IF - ! Eley-Rideal reaction mechanism + ! 2.) Calculate the reaction probability by the Arrhenius equation (bias-free for multiple channels) CASE('ER') IF(ANY(SurfChemReac%Reactants(iReac,:).EQ.speciesID)) THEN @@ -287,13 +295,18 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) Rate = SurfChemReac%Rate(iReac) BetaCoeff = SurfChemReac%HeatAccomodation(iReac) - ! Check for the coverage values for the reactant adsorbed on the surface + ! Check for the coverage values of the reactant adsorbed on the surface IF(ANY(SurfChemReac%Reactants(iReac,:).NE.speciesID)) THEN DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) - AdCountIter = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) + IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN + Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) + AdCountIter = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) + ELSE ! Involvement of the bulk species + Coverage = 1. + AdCountIter = 0. + END IF END IF END DO ELSE @@ -301,6 +314,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) AdCountIter = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) END IF + ! Determine the reaction heat in dependence of the coverage [J] ReacHeat = (SurfChemReac%EReact(iReac) - Coverage * SurfChemReac%EScale(iReac)) * BoltzmannConst ! Bias free calculation for multiple reaction channels @@ -330,7 +344,6 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) Prob_new = 0.0 END IF - ! determine most likely reaction channel CALL RANDOM_NUMBER(RanNum) @@ -344,40 +357,41 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) END IF END IF END IF !iReac.EQ.0 - END IF !iReac.EQ.speciesID CASE DEFAULT - END SELECT !Surface reaction - END DO !iReac + ! 3.) Choose the occuring pathway by comparison with a random number CALL RANDOM_NUMBER(RanNum) + CALL RANDOM_NUMBER(RanNum2) ! Rescale the probability (ER-Reaction) and the sticking coefficient (adsorption) IF ((Prob+StickCoeff).GT.0.) THEN Prob_Scaled = Prob/(Prob + StickCoeff) IF(Prob_Scaled.GT.RanNum) THEN - IF(Prob.GT.RanNum) THEN + IF(Prob.GT.RanNum2) THEN InteractionType = 'ER' iReac = iReac_ER END IF ELSE - IF (StickCoeff.GT.RanNum) THEN + IF (StickCoeff.GT.RanNum2) THEN InteractionType = 'A' iReac = iReac_Ads END IF END IF END IF + ! 4.) Perform the chosen process SELECT CASE(TRIM(InteractionType)) + ! 4a.) Adsorption: delete the incoming particle and update the surface values CASE('A') CALL RemoveParticle(PartID) - ! Calculate the heat flux on the boundary from the adsorption energy - ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID)+ AdsHeat * partWeight + ! Heat flux on the surface created by the adsorption + ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) + AdsHeat * partWeight ! Update the number of adsorbed molecules IF(ANY(SurfChemReac%Products(iReac,:).NE.0)) THEN DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) @@ -391,8 +405,10 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) END IF ! Count the number of surface reactions - ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + 1. + ! ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + partWeight + + ! 4b.) ER: delete the incoming particle, update the surface values and create the gas phase products CASE('ER') CALL RemoveParticle(PartID) @@ -402,7 +418,6 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) ! Create the Eley-Rideal reaction product TempErgy = SQRT(2*BoltzmannConst*WallTemp/Species(speciesID)%MassIC) WallVelo = PartBound%WallVelo(1:3,locBCID) - CALL OrthoNormVec(n_loc,tang1,tang2) ! Get Elem Center @@ -434,7 +449,9 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) - partWeight + IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN + ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) - partWeight + END IF END IF END DO ELSE @@ -442,7 +459,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) END IF ! Count the number of surface reactions - ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + 1. + ! ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + partWeight CASE DEFAULT CALL MaxwellScattering(PartID,SideID,n_Loc) diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90 index 13e70ec60..6a021eaf9 100644 --- a/src/particles/surfacemodel/surfacemodel_vars.f90 +++ b/src/particles/surfacemodel/surfacemodel_vars.f90 @@ -50,105 +50,110 @@ MODULE MOD_SurfaceModel_Vars !=== Heterogenous Surface BC ======================================================================================================== TYPE tBoundMap - INTEGER, ALLOCATABLE :: Boundaries(:) + INTEGER, ALLOCATABLE :: Boundaries(:) ! Map of the reactions to the boundaries END TYPE TYPE tPureSurf - LOGICAL, ALLOCATABLE :: PureSurfReac(:) + LOGICAL, ALLOCATABLE :: PureSurfReac(:) ! List of boundaries on which LH/D reactions occur END TYPE - LOGICAL :: DoChemSurface +LOGICAL :: DoChemSurface ! Call the surface catalysis routines + + CHARACTER(LEN=256) :: SpeciesDatabase ! Name of the species database TYPE tSurfReactions - INTEGER :: NumOfReact ! Number of possible reactions - CHARACTER(LEN=5),ALLOCATABLE :: ReactType(:) ! Type of Reaction (reaction num) + INTEGER :: NumOfReact ! Number of catalytic reactions + CHARACTER(LEN=64),ALLOCATABLE :: CatName(:) + LOGICAL :: OverwriteCatParameters ! Flag to read the cat parameters manually + INTEGER :: SurfSpecies ! Bulk species of the surface, involved in the reactions + CHARACTER(LEN=255),ALLOCATABLE :: ReactType(:) ! Type of Reaction (reaction num) ! A (adsorption) ! D (desorption) ! LH (Langmuir-Hinshlewood) + ! LHD (LH with instant desorption) ! ER (Eley-Rideal) INTEGER, ALLOCATABLE :: Reactants(:,:) ! Reactants: indices of the species starting the reaction [NumOfReact,3] INTEGER, ALLOCATABLE :: Products(:,:) ! Products: indices of the species resulting from the reaction [NumOfReact,4] - INTEGER, ALLOCATABLE :: Inhibition(:) ! Inhibition reaction - INTEGER, ALLOCATABLE :: Promotion(:) ! Promoting reaction - INTEGER, ALLOCATABLE :: NumOfBounds(:) - REAL, ALLOCATABLE :: EReact(:) ! Energy exchange with the surface - REAL, ALLOCATABLE :: EScale(:) ! dependence of the energy values on the coverage - REAL, ALLOCATABLE :: HeatAccomodation(:) ! beta coefficient, determining the heat flux on the surface - !REAL, ALLOCATABLE :: ReactProb(:) - REAL, ALLOCATABLE :: EForm(:) + INTEGER, ALLOCATABLE :: Inhibition(:) ! Reaction number of inhibiting reactions + INTEGER, ALLOCATABLE :: Promotion(:) ! Reaction number of promoting reactions + INTEGER, ALLOCATABLE :: NumOfBounds(:) ! Number of catalytic boundaries + ! Surface energy accomodation + REAL, ALLOCATABLE :: EReact(:) ! Reaction energy [K] + REAL, ALLOCATABLE :: EScale(:) ! Scaling factor for E_reac [K] + REAL, ALLOCATABLE :: HeatAccomodation(:) ! Beta coefficient for the energy accomodation ! Parameters for the adsorption - REAL, ALLOCATABLE :: S_initial(:) ! Initial sticking coefficient + REAL, ALLOCATABLE :: S_initial(:) ! Initial sticking coefficient at zero coverage REAL, ALLOCATABLE :: MaxCoverage(:) ! Maximal surface coverage - REAL, ALLOCATABLE :: DissOrder(:) ! molecular or dissociative adsorption - REAL, ALLOCATABLE :: EqConstant(:) ! adsorption/dissociation - REAL, ALLOCATABLE :: StickCoeff(:) + REAL, ALLOCATABLE :: DissOrder(:) ! Molecular (1) or dissociative (2) adsorption + REAL, ALLOCATABLE :: EqConstant(:) ! Equilibrium constant for adsorption/desorption + REAL, ALLOCATABLE :: StickCoeff(:) ! Sticking coefficient ! Parameters for the desorption - REAL, ALLOCATABLE :: E_initial(:) - REAL, ALLOCATABLE :: W_interact(:) - REAL, ALLOCATABLE :: C_a(:) - REAL, ALLOCATABLE :: C_b(:) + REAL, ALLOCATABLE :: E_initial(:) ! Desorption energy at zero coverage [K] + REAL, ALLOCATABLE :: W_interact(:) ! Scaling factor for Edes [K] + REAL, ALLOCATABLE :: C_a(:) ! Pre-exponential factor + REAL, ALLOCATABLE :: C_b(:) ! Pre-exponential factor ! General Parameters - REAL, ALLOCATABLE :: Rate(:) - REAL, ALLOCATABLE :: Prob(:) - REAL, ALLOCATABLE :: Prefactor(:) - REAL, ALLOCATABLE :: ArrheniusEnergy(:) - LOGICAL, ALLOCATABLE :: BoundisChemSurf(:) + REAL, ALLOCATABLE :: Rate(:) ! Catalytic reaction rate [Cov/s*m^2] + REAL, ALLOCATABLE :: Prob(:) ! Catalytic reaction probability + REAL, ALLOCATABLE :: Prefactor(:) ! Pre-exponential factor [1/s] + REAL, ALLOCATABLE :: ArrheniusEnergy(:) ! Catalytic reaction energy [K] + LOGICAL, ALLOCATABLE :: BoundisChemSurf(:) ! Boundary with catalytic activity LOGICAL :: Diffusion ! Activates instantaneous diffussion over the whole boundary LOGICAL :: TotDiffusion ! Activates instantaneous diffussion over all boundaries - INTEGER :: CatBoundNum - TYPE(tBoundMap), ALLOCATABLE :: BoundMap(:) + INTEGER :: CatBoundNum ! Number of catalytic boundaries + TYPE(tBoundMap), ALLOCATABLE :: BoundMap(:) ! Map of the reactions to the boundaries TYPE(tPureSurf), ALLOCATABLE :: PSMap(:) ! Map for reactions occurring only on the surface TYPE(tCollCaseInfo), ALLOCATABLE :: CollCaseInfo(:) ! Information of collision cases (nCase) TYPE(tSurfaceflux), ALLOCATABLE :: SurfaceFlux(:) ! Surface flux data END TYPE TYPE(tSurfReactions) :: SurfChemReac -TYPE tSurfaceflux - INTEGER :: BC - CHARACTER(30) :: velocityDistribution - REAL :: VeloIC - REAL :: VeloVecIC(3) - REAL :: MWTemperatureIC - LOGICAL :: VeloIsNormal - LOGICAL :: AcceptReject - INTEGER :: ARM_DmaxSampleN - REAL :: VFR_total - REAL , ALLOCATABLE :: VFR_total_allProcs(:) - REAL :: VFR_total_allProcsTotal - REAL :: totalAreaSF - INTEGER(KIND=8) :: InsertedParticle - INTEGER(KIND=8) :: tmpInsertedParticle - INTEGER(KIND=8) :: tmpInsertedParticleSurplus - TYPE(tSurfFluxSubSideData), ALLOCATABLE :: SurfFluxSubSideData(:,:,:) - INTEGER :: dir(3) - REAL :: origin(2) - REAL :: rmax - REAL :: rmin - LOGICAL :: Adaptive - INTEGER :: AdaptiveType - REAL, ALLOCATABLE :: nVFRSub(:,:) +TYPE tSurfaceflux ! Surface flux properties on reactive boundaries + INTEGER :: BC ! Catalytic boundary + CHARACTER(30) :: velocityDistribution ! keyword for the velocity distribution + REAL :: VeloIC ! velocity for inital Data + REAL :: VeloVecIC(3) ! normalized velocity vector + REAL :: MWTemperatureIC ! Temperature for Maxwell Distribution + LOGICAL :: VeloIsNormal ! VeloIC is in Surf-Normal instead of VeloVecIC + LOGICAL :: AcceptReject ! perform ARM for skewness of RefMap-positioning + INTEGER :: ARM_DmaxSampleN ! number of sample intervals in xi/eta for Dmax-calc. + REAL :: VFR_total ! Total Volumetric flow rate through surface + REAL , ALLOCATABLE :: VFR_total_allProcs(:) ! -''-, all values for root in ReduceNoise-case + REAL :: VFR_total_allProcsTotal ! -''-, total + REAL :: totalAreaSF ! Total area of the respective surface flux + INTEGER(KIND=8) :: InsertedParticle ! Number of all already inserted Particles + INTEGER(KIND=8) :: tmpInsertedParticle ! tmp Number of all already inserted Particles + INTEGER(KIND=8) :: tmpInsertedParticleSurplus ! tmp Number of all already inserted Particles + TYPE(tSurfFluxSubSideData), ALLOCATABLE :: SurfFluxSubSideData(:,:,:) ! SF-specific Data of Sides (1:N,1:N,1:SideNumber) + INTEGER :: dir(3) ! axial (1) and orth. coordinates (2,3) of polar system + REAL :: origin(2) ! origin in orth. coordinates of polar system + REAL :: rmax ! max radius of to-be inserted particles + REAL :: rmin ! min radius of to-be inserted particles + LOGICAL :: Adaptive ! Is the surface flux an adaptive boundary? + INTEGER :: AdaptiveType ! Chose the adaptive type, description in DefineParams + REAL, ALLOCATABLE :: nVFRSub(:,:) ! normal volume flow rate through subsubside END TYPE -TYPE tSurfFluxSubSideData - REAL :: projFak - REAL :: Velo_t1 - REAL :: Velo_t2 - REAL :: Dmax - REAL,ALLOCATABLE :: nVFR(:) - REAL,ALLOCATABLE :: a_nIn(:) +TYPE tSurfFluxSubSideData ! Reactive surface flux sub sides + REAL :: projFak ! VeloVecIC projected to inwards normal + REAL :: Velo_t1 ! Velo comp. of first orth. vector + REAL :: Velo_t2 ! Velo comp. of second orth. vector + REAL :: Dmax ! maximum Jacobian determinant of subside for opt. ARM + REAL,ALLOCATABLE :: nVFR(:) ! normal volume flow rate through subside + REAL,ALLOCATABLE :: a_nIn(:) ! speed ratio projected to inwards normal END TYPE tSurfFluxSubSideData -REAL,ALLOCATABLE :: ChemSampWall(:,:,:,:,:) -REAL,ALLOCATABLE :: ChemDesorpWall(:,:,:,:,:) -REAL,ALLOCATABLE :: ChemCountReacWall(:,:,:,:,:) -REAL,ALLOCPOINT :: ChemWallProp(:,:,:,:,:) +REAL,ALLOCATABLE :: ChemSampWall(:,:,:,:,:) ! Sampling direct impact mechanism +REAL,ALLOCATABLE :: ChemDesorpWall(:,:,:,:,:) ! Desorption numbers +REAL,ALLOCPOINT :: ChemWallProp(:,:,:,:,:) ! Adsorption count / heat flux +! INTEGER,ALLOCATABLE :: ChemCountReacWall(:,:,:,:,:) ! Count the number of catalytic reactions on the subside #if USE_MPI -INTEGER :: ChemWallProp_Shared_Win -REAL,ALLOCPOINT :: ChemWallProp_Shared(:,:,:,:,:) -REAL,POINTER :: ChemSampWall_Shared(:,:,:,:,:) +INTEGER :: ChemWallProp_Shared_Win ! Adsorption count / heat flux +REAL,ALLOCPOINT :: ChemWallProp_Shared(:,:,:,:,:) +REAL,POINTER :: ChemSampWall_Shared(:,:,:,:,:) ! Sampling direct impact mechanism INTEGER :: ChemSampWall_Shared_Win #endif !=================================================================================================================================== -END MODULE MOD_SurfaceModel_Vars +END MODULE MOD_SurfaceModel_Vars \ No newline at end of file From adfb50793f4895862ef451887635da9c5caf9b32 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Wed, 26 Oct 2022 00:53:33 +0200 Subject: [PATCH 044/222] Removed SetInnerEnergies and duplicate routines in SurfaceChemFlux --- .../emission/particle_surface_chemflux.f90 | 133 ++++-------------- .../emission/particle_surface_flux.f90 | 45 ++---- 2 files changed, 33 insertions(+), 145 deletions(-) diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index 168b04da8..05971ef93 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -32,9 +32,9 @@ MODULE MOD_Particle_SurfChemFlux !> Particle insertion by pure surface reactions !> 1.) Determine the surface parameters !> 2.) Calculate the number of newly created products and update the surface properties -!> a) Langmuir-Hinshlewood reaction with instantaneous desorption (Arrhenius model) -!> b) Langmuir-Hinshlewood reaction (Arrhenius model) -!> c) Thermal desorption (Polyani-Wigner equation) +!> a) Langmuir-Hinshelwood reaction with instantaneous desorption (Arrhenius model) +!> b) Langmuir-Hinshelwood reaction (Arrhenius model) +!> c) Thermal desorption (Polanyi-Wigner equation) !> 3.) Insert the product species into the gas phase !=================================================================================================================================== SUBROUTINE ParticleSurfChemFlux() @@ -57,8 +57,12 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Particle_Boundary_Vars USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win,SurfChemReac, ChemWallProp, ChemDesorpWall !, ChemCountReacWall USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle -USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED -USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC +USE MOD_Particle_SurfFlux ,ONLY: CalcPartPosTriaSurface +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr +#if USE_MPI +USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED +USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC +#endif !#if defined(IMPA) || defined(ROS) USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod, TrackInfo !#endif /*IMPA*/ @@ -77,9 +81,7 @@ SUBROUTINE ParticleSurfChemFlux() INTEGER :: iSpec , PositionNbr, iSF, iSide, SideID, NbrOfParticle, ParticleIndexNbr INTEGER :: BCSideID, ElemID, iLocSide, iSample, jSample, PartInsSubSide, iPart, iPartTotal INTEGER :: PartsEmitted, Node1, Node2, globElemId -REAL :: Particle_pos(3), xyzNod(3), Vector1(3), Vector2(3) -REAL :: ndist(3), midpoint(3) -REAL,ALLOCATABLE :: particle_positions(:) +REAL :: xyzNod(3), Vector1(3), Vector2(3), ndist(3), midpoint(3) REAL :: ReacHeat, DesHeat REAL :: DesCount REAL :: nu, E_act, Coverage, Rate, DissOrder, AdCount @@ -116,11 +118,7 @@ SUBROUTINE ParticleSurfChemFlux() SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) - IF (SurfSideID.LT.1) THEN - CALL abort(& - __STAMP__& - ,'Chemical Surface Flux is not allowed on non-sampling sides!') - END IF + IF (SurfSideID.LT.1) CALL abort(__STAMP__,'Chemical Surface Flux is not allowed on non-sampling sides!') WallTemp = PartBound%WallTemp(BoundID) ! Boundary temperature @@ -144,7 +142,7 @@ SUBROUTINE ParticleSurfChemFlux() ! 2.) Calculate the number of newly created products and update the surface properties SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) - ! 2a) Langmuir-Hinshlewood reaction with instantaneous desorption (Arrhenius model) + ! 2a) Langmuir-Hinshelwood reaction with instantaneous desorption (Arrhenius model) CASE('LHD') Coverage = 1. ! Product of the reactant coverage values @@ -215,7 +213,7 @@ SUBROUTINE ParticleSurfChemFlux() END IF ! iVal in Products END DO ! iVal - ! b) Langmuir-Hinshlewood reaction (Arrhenius model) + ! b) Langmuir-Hinshelwood reaction (Arrhenius model) CASE('LH') Coverage = 1. ! Product of the reactant coverage values @@ -287,7 +285,7 @@ SUBROUTINE ParticleSurfChemFlux() END DO ! iVal - ! c) Thermal desorption (Polyani-Wigner equation) + ! c) Thermal desorption (Polanyi-Wigner equation) CASE('D') DO iVal=1, SIZE(SurfChemReac%Products(iReac,:)) IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN @@ -401,17 +399,6 @@ SUBROUTINE ParticleSurfChemFlux() ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) & - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) NbrOfParticle = NbrOfParticle + PartInsSubSide - ALLOCATE(particle_positions(1:PartInsSubSide*3)) - - iPart = 1 - !-- Set Positions - DO WHILE (iPart .LE. PartInsSubSide) - Particle_pos(1:3) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) - particle_positions(iPart*3-2) = Particle_pos(1) - particle_positions(iPart*3-1) = Particle_pos(2) - particle_positions(iPart*3 ) = Particle_pos(3) - iPart=iPart+1 - END DO !-- Fill Particle Informations (PartState, Partelem, etc.) ParticleIndexNbr = 1 @@ -420,7 +407,7 @@ SUBROUTINE ParticleSurfChemFlux() ParticleIndexNbr = PDM%nextFreePosition(iPartTotal + 1 + PDM%CurrentNextFreePosition) END IF IF (ParticleIndexNbr .ne. 0) THEN - PartState(1:3,ParticleIndexNbr) = particle_positions(3*(iPart-1)+1:3*(iPart-1)+3) + PartState(1:3,ParticleIndexNbr) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) LastPartPos(1:3,ParticleIndexNbr)=PartState(1:3,ParticleIndexNbr) PDM%ParticleInside(ParticleIndexNbr) = .TRUE. PDM%dtFracPush(ParticleIndexNbr) = .TRUE. @@ -432,26 +419,28 @@ SUBROUTINE ParticleSurfChemFlux() PartMPF(ParticleIndexNbr) = CalcRadWeightMPF(PartState(2,ParticleIndexNbr), iSpec,ParticleIndexNbr) END IF ELSE - CALL abort(& - __STAMP__& - ,'ERROR in ParticleSurfaceflux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?') + CALL abort(__STAMP__,'ERROR in ParticleSurfChemFlux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?') END IF END DO - DEALLOCATE(particle_positions) CALL SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) PartsEmitted = PartsEmitted + PartInsSubSide END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) END IF ! iSide - IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'Error 2 in ParticleSurfaceflux!') + IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'ERROR in ParticleSurfChemFlux: NbrOfParticle.NE.iPartTotal') ! Set the particle properties CALL SetParticleChargeAndMass(iSpec,NbrOfParticle) IF (usevMPF.AND.(.NOT.RadialWeighting%DoRadialWeighting)) CALL SetParticleMPF(iSpec,-1,NbrOfParticle) - IF (useDSMC.AND.(CollisMode.GT.1)) CALL SetInnerEnergies(iSpec, BoundID, NbrOfParticle,iReac) + IF (useDSMC.AND.(CollisMode.GT.1)) THEN + DO iPart = 1,NbrOfParticle + PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) + IF (PositionNbr .NE. 0) CALL DSMC_SetInternalEnr(iSpec, BoundID, PositionNbr, 3, iReac) + END DO + END IF IF(CalcPartBalance) THEN ! Compute number of input particles and energy @@ -469,9 +458,7 @@ SUBROUTINE ParticleSurfChemFlux() IF (NbrOfParticle.NE.PartsEmitted) THEN ! should be equal for including the following lines in tSurfaceFlux - CALL abort(& - __STAMP__& - ,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') + CALL abort(__STAMP__,'ERROR in ParticleSurfChemFlux: NbrOfParticle.NE.PartsEmitted') END IF END DO ! iSpec @@ -636,78 +623,6 @@ SUBROUTINE ParticleSurfDiffusion() END SUBROUTINE ParticleSurfDiffusion - -!=================================================================================================================================== -!> -!=================================================================================================================================== -SUBROUTINE SetInnerEnergies(iSpec, BoundID, NbrOfParticle,iReac) -! MODULES -USE MOD_Globals -USE MOD_DSMC_Vars ,ONLY: SpecDSMC -USE MOD_Particle_Vars ,ONLY: PDM -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr -! IMPLICIT VARIABLE HANDLING - IMPLICIT NONE -!----------------------------------------------------------------------------------------------------------------------------------- -! INPUT VARIABLES -INTEGER, INTENT(IN) :: iSpec, BoundID, NbrOfParticle,iReac -!----------------------------------------------------------------------------------------------------------------------------------- -! OUTPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! LOCAL VARIABLES -INTEGER :: iPart, PositionNbr -!=================================================================================================================================== -iPart = 1 - -DO WHILE (iPart .le. NbrOfParticle) - PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) - - IF (PositionNbr .ne. 0) THEN - CALL DSMC_SetInternalEnr(iSpec, BoundID, PositionNbr,3,iReac) - END IF - iPart = iPart + 1 -END DO -END SUBROUTINE SetInnerEnergies - - -!=================================================================================================================================== -!> Calculate random normalized vector in 3D (unit space) -!=================================================================================================================================== -FUNCTION CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) -! MODULES -USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod -! IMPLICIT VARIABLE HANDLING -IMPLICIT NONE -!----------------------------------------------------------------------------------------------------------------------------------- -! INPUT VARIABLES -REAL, INTENT(IN) :: xyzNod(3), Vector1(3), Vector2(3), ndist(3), midpoint(3) -REAL :: CalcPartPosTriaSurface(3) -!----------------------------------------------------------------------------------------------------------------------------------- -! OUTPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! LOCAL VARIABLES -REAL :: RandVal2(2), PartDistance -REAL, PARAMETER :: eps_nontria=1.0E-6 -!=================================================================================================================================== - CALL RANDOM_NUMBER(RandVal2) - IF (TrackingMethod.NE.TRIATRACKING) THEN !prevent inconsistency with non-triatracking by bilinear-routine (tol. might be increased) - RandVal2 = RandVal2 + eps_nontria*(1. - 2.*RandVal2) !shift randVal off from 0 and 1 - DO WHILE (ABS(RandVal2(1)+RandVal2(2)-1.0).LT.eps_nontria) !sum must not be 1, since this corresponds to third egde - CALL RANDOM_NUMBER(RandVal2) - RandVal2 = RandVal2 + eps_nontria*(1. - 2.*RandVal2) - END DO - END IF - CalcPartPosTriaSurface = xyzNod + Vector1 * RandVal2(1) - CalcPartPosTriaSurface = CalcPartPosTriaSurface + Vector2 * RandVal2(2) - PartDistance = ndist(1)*(CalcPartPosTriaSurface(1)-midpoint(1)) & !Distance from v1-v2 - + ndist(2)*(CalcPartPosTriaSurface(2)-midpoint(2)) & - + ndist(3)*(CalcPartPosTriaSurface(3)-midpoint(3)) - IF (PartDistance.GT.0.) THEN !flip into right triangle if outside - CalcPartPosTriaSurface(1:3) = 2.*midpoint(1:3)-CalcPartPosTriaSurface(1:3) - END IF - -END FUNCTION CalcPartPosTriaSurface - !=================================================================================================================================== !> Determine the particle velocity of each inserted particle !=================================================================================================================================== diff --git a/src/particles/emission/particle_surface_flux.f90 b/src/particles/emission/particle_surface_flux.f90 index 7679fc85e..a819104b7 100644 --- a/src/particles/emission/particle_surface_flux.f90 +++ b/src/particles/emission/particle_surface_flux.f90 @@ -24,7 +24,7 @@ MODULE MOD_Particle_SurfFlux !----------------------------------------------------------------------------------------------------------------------------------- ! Private Part --------------------------------------------------------------------------------------------------------------------- ! Public Part ---------------------------------------------------------------------------------------------------------------------- -PUBLIC :: ParticleSurfaceflux +PUBLIC :: ParticleSurfaceflux, CalcPartPosTriaSurface !=================================================================================================================================== CONTAINS @@ -49,6 +49,7 @@ SUBROUTINE ParticleSurfaceflux() USE MOD_Particle_VarTimeStep ,ONLY: CalcVarTimeStep USE MOD_Timedisc_Vars ,ONLY: RKdtFrac, dt USE MOD_DSMC_AmbipolarDiffusion ,ONLY: AD_SetSFElectronVelo +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr #if defined(IMPA) || defined(ROS) USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod #endif /*IMPA*/ @@ -295,7 +296,12 @@ SUBROUTINE ParticleSurfaceflux() CALL SetParticleChargeAndMass(iSpec,NbrOfParticle) IF (usevMPF.AND.(.NOT.RadialWeighting%DoRadialWeighting)) CALL SetParticleMPF(iSpec,-1,NbrOfParticle) ! define molecule stuff - IF (useDSMC.AND.(CollisMode.GT.1)) CALL SetInnerEnergies(iSpec, iSF, NbrOfParticle) + IF (useDSMC.AND.(CollisMode.GT.1)) THEN + DO iPart = 1,NbrOfParticle + PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) + IF (PositionNbr .NE. 0) CALL DSMC_SetInternalEnr(iSpec, iSF, PositionNbr,2) + END DO + END IF IF(CalcPartBalance) THEN ! Compute number of input particles and energy nPartIn(iSpec)=nPartIn(iSpec) + NBrofParticle @@ -314,9 +320,7 @@ SUBROUTINE ParticleSurfaceflux() ! Sample Energies on Surfaces when particles are emitted from them IF (NbrOfParticle.NE.PartsEmitted) THEN ! should be equal for including the following lines in tSurfaceFlux - CALL abort(& -__STAMP__& -,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') + CALL abort(__STAMP__,'ERROR in ParticleSurfaceflux: NbrOfParticle.NE.PartsEmitted') END IF END DO !iSF END DO !iSpec @@ -524,37 +528,6 @@ END SUBROUTINE AnalyzePartPos #endif /*CODE_ANALYZE*/ -!=================================================================================================================================== -!> -!=================================================================================================================================== -SUBROUTINE SetInnerEnergies(iSpec, iSF, NbrOfParticle) -! MODULES -USE MOD_Globals -USE MOD_DSMC_Vars ,ONLY: SpecDSMC -USE MOD_Particle_Vars ,ONLY: PDM -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr -! IMPLICIT VARIABLE HANDLING - IMPLICIT NONE -!----------------------------------------------------------------------------------------------------------------------------------- -! INPUT VARIABLES -INTEGER, INTENT(IN) :: iSpec, iSF, NbrOfParticle -!----------------------------------------------------------------------------------------------------------------------------------- -! OUTPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! LOCAL VARIABLES -INTEGER :: iPart, PositionNbr -!=================================================================================================================================== -iPart = 1 -DO WHILE (iPart .le. NbrOfParticle) - PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) - IF (PositionNbr .ne. 0) THEN - CALL DSMC_SetInternalEnr(iSpec, iSF, PositionNbr,2) - END IF - iPart = iPart + 1 -END DO -END SUBROUTINE SetInnerEnergies - - !=================================================================================================================================== !> Calculate random normalized vector in 3D (unit space) !=================================================================================================================================== From 280dc5583ba01061d477da81992c39a717050d9f Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Wed, 26 Oct 2022 09:24:40 +0200 Subject: [PATCH 045/222] Update product calculation --- src/particles/emission/particle_surface_chemflux.f90 | 8 +++----- src/particles/emission/particle_surface_flux_init.f90 | 1 + src/particles/surfacemodel/surfacemodel_init.f90 | 6 ++++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index 05971ef93..e71494cc4 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -341,7 +341,7 @@ SUBROUTINE ParticleSurfChemFlux() END IF ! Update the adsorbtion and desorption count together with the heat flux - IF(INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8).GE.1) THEN + IF(INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/Species(iSpec)%MacroParticleFactor).GE.1) THEN ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) & - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) * DesHeat IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN @@ -379,8 +379,7 @@ SUBROUTINE ParticleSurfChemFlux() ! 3.) Insert the product species into the gas phase DO iSpec = 1, nSpecies - IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8).GE.1) THEN - ! IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/Species(iSpec)%MacroParticleFactor).GE.1) THEN + IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/Species(iSpec)%MacroParticleFactor).GE.1) THEN ! Define the necessary variables xyzNod(1:3) = BCdata_auxSF(BoundID)%TriaSideGeo(iSide)%xyzNod(1:3) @@ -393,8 +392,7 @@ SUBROUTINE ParticleSurfChemFlux() midpoint(1:3) = BCdata_auxSF(BoundID)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) ndist(1:3) = BCdata_auxSF(BoundID)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) - PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) - ! PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/Species(iSpec)%MacroParticleFactor) + PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/Species(iSpec)%MacroParticleFactor) ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) & - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) diff --git a/src/particles/emission/particle_surface_flux_init.f90 b/src/particles/emission/particle_surface_flux_init.f90 index 8eccadffb..b61a6bfb1 100644 --- a/src/particles/emission/particle_surface_flux_init.f90 +++ b/src/particles/emission/particle_surface_flux_init.f90 @@ -1429,6 +1429,7 @@ SUBROUTINE ReadInAndPrepareSurfChemFlux(nDataBC) SurfChemReac%Surfaceflux(iSF)%InsertedParticle = 0 SurfChemReac%Surfaceflux(iSF)%VFR_total = 0 SurfChemReac%Surfaceflux(iSF)%VFR_total_allProcsTotal = 0 + SurfChemReac%Surfaceflux(iSF)%Adaptive = .FALSE. ! get surfaceflux data IF (SurfChemReac%Surfaceflux(iSF)%BC.LT.1 .OR. SurfChemReac%Surfaceflux(iSF)%BC.GT.nPartBound) THEN diff --git a/src/particles/surfacemodel/surfacemodel_init.f90 b/src/particles/surfacemodel/surfacemodel_init.f90 index c64661123..abaff0b09 100644 --- a/src/particles/surfacemodel/surfacemodel_init.f90 +++ b/src/particles/surfacemodel/surfacemodel_init.f90 @@ -220,8 +220,10 @@ SUBROUTINE FinalizeSurfaceModel() #if USE_MPI CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR) - CALL UNLOCK_AND_FREE(ChemWallProp_Shared_Win) - CALL UNLOCK_AND_FREE(ChemSampWall_Shared_Win) + IF(SurfChemReac%NumOfReact.GT.0) THEN + CALL UNLOCK_AND_FREE(ChemWallProp_Shared_Win) + CALL UNLOCK_AND_FREE(ChemSampWall_Shared_Win) + END IF ADEALLOCATE(ChemSampWall_Shared) ADEALLOCATE(ChemWallProp_Shared) SDEALLOCATE(ChemDesorpWall) From edc45338c494b28d0d5dd9166e2727fb64cea0a1 Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Fri, 28 Oct 2022 14:36:50 +0200 Subject: [PATCH 046/222] first version docu --- .../userguide/features-and-models/BGG.md | 2 +- .../userguide/features-and-models/DSMC.md | 162 ++++++++++++++++-- 2 files changed, 150 insertions(+), 14 deletions(-) diff --git a/docs/documentation/userguide/features-and-models/BGG.md b/docs/documentation/userguide/features-and-models/BGG.md index 2e0d612ee..0e1359d5b 100644 --- a/docs/documentation/userguide/features-and-models/BGG.md +++ b/docs/documentation/userguide/features-and-models/BGG.md @@ -95,7 +95,7 @@ collision cross-sections have to be supplied via read-in from a database Cross-section data can be retrieved from the [LXCat database](https://fr.lxcat.net/home/) {cite}`Pitchford2017` and converted with a Python script provided in the tools folder: `piclas/tools/crosssection_database`. Details on how to create an own database with -custom cross-section data is given in Section {ref}`sec:tools-xsec-collision`. Finally, the input which species should be treated with the MCC +custom cross-section data is given in Section {ref}`ssec:tools-xsec-collision`. Finally, the input which species should be treated with the MCC model is required Part-Species2-SpeciesName = electron diff --git a/docs/documentation/userguide/features-and-models/DSMC.md b/docs/documentation/userguide/features-and-models/DSMC.md index c6cd16d5e..4306e57e7 100644 --- a/docs/documentation/userguide/features-and-models/DSMC.md +++ b/docs/documentation/userguide/features-and-models/DSMC.md @@ -288,7 +288,7 @@ the following parameter needs to be defined Part-Species5-ElecRelaxProb = 0.1 An electronic state database can be created using a Fortran tool in `piclas/tools/electronic_data`. An alternative is to use the -Python-based script discussed in Section {ref}`sec:tools-xsec-collision` and to adapt it to electronic energy levels. +Python-based script discussed in Section {ref}`ssec:tools-xsec-collision` and to adapt it to electronic energy levels. (sec:DSMC-chemistry)= ## Chemistry & Ionization @@ -343,6 +343,8 @@ have to be given by This allows to define a single reaction for an arbitrary number of collision partners. In the following, three possibilities to model the reaction rates are presented. + +(ssec:TCE)= ### Total Collision Energy (TCE) The Total Collision Energy (TCE) model {cite}`Bird1994` utilizes Arrhenius type reaction rates to reproduce the probabilities for @@ -360,6 +362,7 @@ activation energy [K]. These parameters can be defined in PICLas as follows An example initialization file for a TCE-based chemistry model can be found in the regression tests (e.g. `regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec`). +(ssec:QK)= ### Quantum Kinetic Chemistry (QK) The Quantum Kinetic (QK) model {cite}`Bird2011` chooses a different approach and models chemical reactions on the microscopic level. @@ -379,7 +382,7 @@ read-in of the electronic state database. ### Cross-section Chemistry (XSec) The cross-section based chemistry model utilizes experimentally measured or ab-initio calculated cross-sections (analogous to -the collision probability procedure described in Section {ref}`sec:tools-xsec-collision`). It requires the same database, where the +the collision probability procedure described in Section {ref}`ssec:tools-xsec-collision`). It requires the same database, where the reaction paths are stored per particle pair, e.g. the `N2-electron` container contains the `REACTION` folder, which includes the reactions named by their products, e.g. `N2Ion1-electron-electron`. @@ -480,15 +483,148 @@ utilized as a first guess. For a thruster/nozzle expansion simulation, the chamb (sec:DSMC-database)= ## Unified Species Database -- [] allgemeines (default normales einlesen, falls datenbank-name gesetzt ist wird daraus eingelesen) -- [] angabe datenbank in parameter.ini -- [] was muss in parameter.ini noch zwingend angegeben werden -- [] Verweis erstellung -- [] Beispiele regression check -- [] unterkapitel bereiche der Datenbank - - [] wie aktivieren - - [] overwrite - - [] was ist drin? was nicht? tabelle - - [] was muss gesetzt werden? -- [] schema: was laesst sich kombinieren +A unified database containing cross-sections, electronic states, surface parameters, Arrhenius rates and species data can be used as an alternative input for the simulation. The use of the database allows to reduce the length of the input files and ensures a meaningful storage of the parameters, together with the Reference from which they are taken. The creation of a new database or the extension of an existing one is described in Chapter {ref}`sec:tools-usd`. + +To read in data from a given species database, the database name has to be set in the `parameter.ini` + + Particles-Species-Database = Species_Database.h5 + +If no database is given, the parameters are read from the `parameter.ini` and `DSMC.ini` as described in the above sections. Per default, all available parameters are directly taken from the database, but different options exist to set parameters manually or read out only certain data types from the unififed database. Parameters missing from the database can be added in the standard manner, in the `parameter.ini` and `DSMC.ini` files. + +An example database containing DSMC parameters e.g. for the 5-species air model, together with an example on how to use it, can be found in `regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma`. + +All data available in the database and how to select between different input forms is described in the following subsections for the different available data types. + +(ssec:Species)= +### Species-specific data + +A species to be included in the simulation can be selected by its name with the following command: + + Part-Species1-SpeciesName = CH4 + +The database follows the standard nomenclature for atoms and molecules. Cations are given by + + Part-Species4-SpeciesName = CH3Ion1 + +where the number after 'Ion' refers to the degree of ionization. The database contains general species data such as the mass, charge and number of atoms, together with VHS and VSS parameters. For molecules, rotational and vibrational frequencies can be given as well. A full list of available parameters and the corresponding commands in the `DSMC.ini` input are given below. + + Part-Species1-SpeciesName + Part-Species1-MassIC + Part-Species1-ChargeIC + Part-Species1-PolyatomicMol + Part-Species1-InteractionID + Part-Species1-NumOfAtoms + Part-Species1-LinearMolec + Part-Species1-SymmetryFactor + Part-Species1-Tref + Part-Species1-dref + Part-Species1-omega + Part-Species1-alphaVSS + Part-Species1-CharaTempVibX + Part-Species1-CharaTempRotX + Part-Species1-Ediss_eV + Part-Species1-HeatOfFormation_K + Part-Species1-PreviousState + +Per default, all available parameters are read from the database. Species for which the parameters should be taken from the input files can be specified by an overwrite command. + + Part-Species1-DoOverwriteParameters = true + +(ssec:Reaction)= +### Reaction data + +The database contains data for the TCE and QK model. Reactions to be included in the simualtion are specified by their name: + + ! Reaction1: CH4 + M -> CH3 + H + M + DSMC-Reaction1-ReactionName = DISS_CH4_TO_CH3 + +To ensure consistency and findability, a naming convention is used in the database. The available flags for the reaction are `DISS` (dissociation), `EXC` (exchange) and `RECOMB` (recombination or addition). The main reactants and products are specified as well. To further state atomic, electronic or molecular collision parameters, as well as ionization processes, the flags `_AT`, `_MOL`, `_EL` and `_ION` are used respectively. The name of reactants, products and non-reactive collision parameters are deposited in the database as well, but they are not read out to avoid restrictions in the simulation setup. These values are given manually in the `parameter.ini`, as described in Section {ref} `sec:DSMC-chemistry`. + +If the reaction parameters should be given manually, the following command can be set: + + DSMC-OverwriteReacDatabase = true + +(sssec:Arrh-rates)= +#### Arrhenius rates + +Arrhenius-type reaction rates needed for the Total-Collision-Energy model ({ref}`ssec:TCE`) can be taken directly from the database. Here, the Arrhenius prefactor and powerfactor, together with the activation energy is stored. + +(sssec:QK-model)= +#### QK model + +The dissociation energy used in the Quantum-Kinetic model ({ref}`ssec:QK`) is deposited in the species database. + +(ssec:Catalysis)= +### Heterogenous reactions + +All data necessary for the modelling of gas-surface reactions with PICLas can be found in the species database. To include parameters for a certain reaction, the reaction name needs to be specified by + + ! Reaction 1: CO(g) -> CO(ads) + Surface-Reaction1-SurfName = Adsorption_CO + +According to the naming convention used in the database, the surface mechanism (adsorption, desorption, ER and LH reaction) is stated together with the main reactant and product (only in the case of reactions). The database contains the sticking coefficients for the Kisluik and Langmuir adsorption model, together with the Polanyi-Wigner parameters and the Arrhenius-type reaction rates. All parameters that can be found in the database are givel below. + + Surface-Reaction1-SurfName + Surface-Reaction1-Type + Surface-Reaction1-StickingCoefficient + Surface-Reaction1-EqConstant + Surface-Reaction1-DissOrder + Surface-Reaction1-ReactHeat + Surface-Reaction1-HeatScaling + Surface-Reaction1-Energy + Surface-Reaction1-Prefactor + Surface-Reaction1-LateralInteraction + Surface-Reaction1-Ca + Surface-Reaction1-Cb + +The reactants and products are deposited in the database as well, but again not read out to ensure the correct input. Reactants and products need to be defined by + + Surface-Reaction1-Reactants = (/2,2/) + Surface-Reaction1-Products = (/3,0/) + +So far, the database does not contain any surface-specific or diffusion parameters. These need to be set in the `parameter.ini` by + + Surface-Reaction1-NumOfBoundaries = 1 + Surface-Reaction1-Boundaries = (/1,0/) + Part-Boundary1-WallTemp = 323 + Part-Boundary1-LatticeVector = 0.389E-9 + Part-Boundary1-NbrOfMol-UnitCell = 2 + Part-Boundary1-Species1-Coverage = 0.1 + Part-Boundary1-Species1-MaxCoverage = 0.333 + +If a parameter is not defined or set to a default value, the code will abort. + +To define parameters manually instead of using the database, the following option can be selected: + + OverwriteCatParameters = true + +(ssec:El-states)= +### Electronic states + +The modelling of electronic relaxation follows the principle as described in {ref} `sec:DSMC-electronic-relaxation`. As for the species data, the electronic levels can be given separately by specifiying + + Part-Species1-DoOverwriteParameters = true + +In this case, the electronic relaxation data is taken from an additional Electronic-Database: + + Particles-DSMCElectronicDatabase = DSMCSpecies_electronic_state_full_Data.h5 + + +(ssec:Xsec-data)= +### Cross-section data + +The use of the unififed species database for the cross-section data, follows the description given in Section {ref} `ssec:xsec-chemistry`. All reaction paths are again stored by their reaction names and can be called in the `parameter.ini`. + +(ssec:Rad-data)= +### Radiation data + +TO-DO + +(ssec:Overview)= +### Overview + +An overview of the functionalities of the unified species database is given in the scheme below: + +TO-DO + From fbce65345ffd0bc471a2fa09309f74a3b118e4ce Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 31 Oct 2022 19:12:53 +0100 Subject: [PATCH 047/222] Summarized SetSurfaceFluxVelocities from ambipolar diffusion, surface chemistry and the regular into a single routine --- src/particles/dsmc/dsmc_ambipolardiff.f90 | 302 +----------------- .../emission/particle_surface_chemflux.f90 | 190 +---------- .../emission/particle_surface_flux.f90 | 285 +++++++++-------- .../emission/particle_surface_flux_init.f90 | 80 +---- .../emission/particle_surface_flux_vars.f90 | 2 +- src/particles/particle_vars.f90 | 3 +- .../surfacemodel/surfacemodel_init.f90 | 3 +- .../surfacemodel/surfacemodel_vars.f90 | 43 +-- 8 files changed, 191 insertions(+), 717 deletions(-) diff --git a/src/particles/dsmc/dsmc_ambipolardiff.f90 b/src/particles/dsmc/dsmc_ambipolardiff.f90 index b142d50d4..2d5cb12f2 100644 --- a/src/particles/dsmc/dsmc_ambipolardiff.f90 +++ b/src/particles/dsmc/dsmc_ambipolardiff.f90 @@ -26,7 +26,7 @@ MODULE MOD_DSMC_AmbipolarDiffusion !----------------------------------------------------------------------------------------------------------------------------------- ! Private Part --------------------------------------------------------------------------------------------------------------------- ! Public Part ---------------------------------------------------------------------------------------------------------------------- -PUBLIC :: InitializeVariablesAmbipolarDiff, AD_SetInitElectronVelo, AD_InsertParticles, AD_DeleteParticles, AD_SetSFElectronVelo +PUBLIC :: InitializeVariablesAmbipolarDiff, AD_SetInitElectronVelo, AD_InsertParticles, AD_DeleteParticles !=================================================================================================================================== CONTAINS @@ -154,304 +154,6 @@ SUBROUTINE AD_SetInitElectronVelo(FractNbr,iInit,NbrOfParticle) END SUBROUTINE AD_SetInitElectronVelo -SUBROUTINE AD_SetSFElectronVelo(iSpec,iSFIon,iSample,jSample,iSide,BCSideID,SideID,ElemID,NbrOfParticle,PartIns,particle_xis) -!=================================================================================================================================== -!> Initialize the electron velocity vector during the surface flux particle insertion -!=================================================================================================================================== -! MODULES -USE MOD_Globals -USE MOD_Globals_Vars, ONLY : PI, BoltzmannConst -USE MOD_Particle_Vars -USE MOD_Particle_Surfaces_Vars, ONLY : SurfMeshSubSideData, TriaSurfaceFlux -USE MOD_Particle_Surfaces, ONLY : CalcNormAndTangBezier -USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCMapElemToSample, AdaptBCMacroVal -USE MOD_DSMC_Vars ,ONLY: AmbiPolarSFMapping, AmbipolElecVelo, DSMC -! IMPLICIT VARIABLE HANDLING -IMPLICIT NONE -!----------------------------------------------------------------------------------------------------------------------------------- -! INPUT VARIABLES -INTEGER,INTENT(IN) :: iSpec,iSFIon,iSample,jSample,iSide,BCSideID,SideID,ElemID,NbrOfParticle,PartIns -REAL,INTENT(IN) :: particle_xis(:) -!----------------------------------------------------------------------------------------------------------------------------------- -! OUTPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! LOCAL VARIABLES -INTEGER :: i,PositionNbr,envelope,currentBC,SampleElemID, iSF,iPart -REAL :: Vec3D(3), vec_nIn(1:3), vec_t1(1:3), vec_t2(1:3) -REAL :: a,zstar,RandVal1,RandVal2(2),RandVal3(3),u,RandN,RandN_save,Velo1,Velo2,Velosq,T,beta,z -LOGICAL :: RandN_in_Mem -REAL :: projFak ! VeloVecIC projected to inwards normal of tria -REAL :: Velo_t1 ! Velo comp. of first orth. vector in tria -REAL :: Velo_t2 ! Velo comp. of second orth. vector in tria -REAL :: VeloIC -REAL :: VeloVec(1:3) -REAL :: VeloVecIC(1:3),v_thermal, pressure -!=================================================================================================================================== - -IF(PartIns.LT.1) RETURN -IF(Species(iSpec)%ChargeIC.LE.0.0) RETURN -IF(NbrOfParticle.GT.PDM%maxParticleNumber)THEN - CALL abort(& -__STAMP__& -,'NbrOfParticle > PDM%maxParticleNumber!') -END IF - -iSF = AmbiPolarSFMapping(iSpec,iSFIon) -RandN_in_Mem=.FALSE. -envelope=-1 -currentBC = Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%BC - -IF (.NOT.Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloIsNormal) THEN - vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3) - vec_t1(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1(1:3) - vec_t2(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2(1:3) -END IF !.NOT.VeloIsNormal - -IF(.NOT.Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%Adaptive) THEN - VeloIC = Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloIC - T = Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%MWTemperatureIC - a = Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%a_nIn - projFak = Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%projFak - Velo_t1 = Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 - Velo_t2 = Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 -ELSE !Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%Adaptive - SampleElemID = AdaptBCMapElemToSample(ElemID) - SELECT CASE(Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%AdaptiveType) - CASE(1,3,4) ! Pressure and massflow inlet (pressure/massflow, temperature const) - T = Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%MWTemperatureIC - CASE(2) ! adaptive Outlet/freestream - pressure = Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%AdaptivePressure - T = pressure / (BoltzmannConst * AdaptBCMacroVal(4,SampleElemID,DSMC%AmbiDiffElecSpec)) - CASE DEFAULT - CALL abort(__STAMP__,'ERROR in SurfaceFlux: Wrong adaptive type for Surfaceflux velocities!') - END SELECT - VeloVec(1) = AdaptBCMacroVal(DSMC_VELOX,SampleElemID,DSMC%AmbiDiffElecSpec) - VeloVec(2) = AdaptBCMacroVal(DSMC_VELOY,SampleElemID,DSMC%AmbiDiffElecSpec) - VeloVec(3) = AdaptBCMacroVal(DSMC_VELOZ,SampleElemID,DSMC%AmbiDiffElecSpec) - vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3) - VeloVec(1:3) = DOT_PRODUCT(VeloVec,vec_nIn)*vec_nIn(1:3) - VeloIC = SQRT(DOT_PRODUCT(VeloVec,VeloVec)) - IF (ABS(VeloIC).GT.0.) THEN - VeloVecIC = VeloVec / VeloIC - ELSE - VeloVecIC = (/1.,0.,0./) - END IF - projFak = DOT_PRODUCT(vec_nIn,VeloVecIC) !VeloVecIC projected to inwards normal - v_thermal = SQRT(2.*BoltzmannConst*T/Species(DSMC%AmbiDiffElecSpec)%MassIC) !thermal speed - IF ( ALMOSTEQUAL(v_thermal,0.)) THEN - v_thermal = 1. - END IF - a = VeloIC * projFak / v_thermal !speed ratio proj. to inwards n (can be negative!) - Velo_t1 = VeloIC * DOT_PRODUCT(vec_t1,VeloVecIC) !v in t1-dir - Velo_t2 = VeloIC * DOT_PRODUCT(vec_t2,VeloVecIC) !v in t2-dir -END IF !Adaptive SurfaceFlux - -! Set velocities -SELECT CASE(TRIM(Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%velocityDistribution)) -CASE('constant') - IF (.NOT.Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloIsNormal) THEN - VeloVecIC(1:3) = Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloVecIC(1:3) - VeloVecIC(1:3) = VeloVecIC(1:3) / VECNORM(VeloVecIC(1:3)) - END IF - iPart = 0 - DO i = NbrOfParticle-PartIns+1,NbrOfParticle - iPart = iPart + 1 - PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition) - IF (PositionNbr .NE. 0) THEN - ! In case of side-normal velocities: calc n-vector at particle position, xi was saved in PartState(4:5) - IF (Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloIsNormal .AND. TriaSurfaceFlux) THEN - vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3) - vec_t1(1:3) = 0. !dummy - vec_t2(1:3) = 0. !dummy - ELSE IF (Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloIsNormal) THEN - ! CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),xi=PartState(4,PositionNbr),eta=PartState(5,PositionNbr),SideID=SideID ) - CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),xi=particle_xis(2*(iPart-1)+1),eta=particle_xis(2*(iPart-1)+2),SideID=SideID ) - vec_nIn(1:3) = -vec_nIn(1:3) - vec_t1(1:3) = 0. !dummy - vec_t2(1:3) = 0. !dummy - ELSE - vec_nIn(1:3) = VeloVecIC(1:3) - END IF !VeloIsNormal - ! Build complete velo-vector - Vec3D(1:3) = vec_nIn(1:3) * Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloIC - ! PartState(4:6,PositionNbr) = Vec3D(1:3) - IF (PositionNbr.GT.0) THEN - IF (ALLOCATED(AmbipolElecVelo(PositionNbr)%ElecVelo)) DEALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo) - ALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo(3)) - AmbipolElecVelo(PositionNbr)%ElecVelo(1:3) = Vec3D(1:3) - END IF - END IF !PositionNbr .NE. 0 - END DO !i = ...NbrOfParticle -CASE('maxwell','maxwell_lpn') - !-- determine envelope for most efficient ARM [Garcia and Wagner 2006, JCP217-2] - IF (ALMOSTZERO(VeloIC*projFak)) THEN - ! Rayleigh distri - envelope = 0 - ELSE IF (-0.4.LT.a .AND. a.LT.1.3) THEN - ! low speed flow - IF (a.LE.0.) THEN - envelope = 1 - ELSE - envelope = 3 - END IF !choose envelope based on flow direction - ELSE - ! high speed / general flow - IF (a.LT.0.) THEN - envelope = 2 - ELSE - envelope = 4 - END IF !choose envelope based on flow direction - END IF !low speed / high speed / rayleigh flow - - iPart = 0 - DO i = NbrOfParticle-PartIns+1,NbrOfParticle - iPart = iPart + 1 - PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition) - IF (PositionNbr .NE. 0) THEN - !-- 0a.: In case of side-normal velocities: calc n-/t-vectors at particle position, xi was saved in PartState(4:5) - IF (Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloIsNormal .AND. TriaSurfaceFlux) THEN - vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3) - vec_t1(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1(1:3) - vec_t2(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2(1:3) - ELSE IF (Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloIsNormal) THEN - ! CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),tang1=vec_t1(1:3),tang2=vec_t2(1:3) & - ! ,xi=PartState(4,PositionNbr),eta=PartState(5,PositionNbr),SideID=SideID ) - CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),tang1=vec_t1(1:3),tang2=vec_t2(1:3) & - ,xi=particle_xis(2*(iPart-1)+1),eta=particle_xis(2*(iPart-1)+2),SideID=SideID ) - vec_nIn(1:3) = -vec_nIn(1:3) - END IF !VeloIsNormal - !-- 1.: determine zstar (initial generation of potentially too many RVu is for needed indentities of RVu used multiple times! - SELECT CASE(envelope) - CASE(0) - CALL RANDOM_NUMBER(RandVal1) - zstar = -SQRT(-LOG(RandVal1)) - CASE(1) - DO - CALL RANDOM_NUMBER(RandVal2) - zstar = -SQRT(a*a-LOG(RandVal2(1))) - IF ( -(a-zstar)/zstar .GT. RandVal2(2)) THEN - EXIT - END IF - END DO - CASE(2) - z = 0.5*(a-SQRT(a*a+2.)) - beta = a-(1.0-a)*(a-z) - DO - CALL RANDOM_NUMBER(RandVal3) - IF (EXP(-(beta*beta))/(EXP(-(beta*beta))+2.0*(a-z)*(a-beta)*EXP(-(z*z))).GT.RandVal3(1)) THEN - zstar=-SQRT(beta*beta-LOG(RandVal3(2))) - IF ( -(a-zstar)/zstar .GT. RandVal3(3)) THEN - EXIT - END IF - ELSE - zstar=beta+(a-beta)*RandVal3(2) - IF ( (a-zstar)/(a-z)*EXP(z*z-(zstar*zstar)) .GT. RandVal3(3)) THEN - EXIT - END IF - END IF - END DO - CASE(3) - DO - CALL RANDOM_NUMBER(RandVal3) - u = RandVal3(1) - IF ( a*SQRT(PI)/(a*SQRT(PI)+1+a*a) .GT. u) THEN -! IF (.NOT.DoZigguratSampling) THEN !polar method - IF (RandN_in_Mem) THEN !reusing second RandN form previous polar method - RandN = RandN_save - RandN_in_Mem=.FALSE. - ELSE - Velosq = 2 - DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.)) - CALL RANDOM_NUMBER(RandVal2) - Velo1 = 2.*RandVal2(1) - 1. - Velo2 = 2.*RandVal2(2) - 1. - Velosq = Velo1**2 + Velo2**2 - END DO - RandN = Velo1*SQRT(-2*LOG(Velosq)/Velosq) - RandN_save = Velo2*SQRT(-2*LOG(Velosq)/Velosq) - RandN_in_Mem=.TRUE. - END IF -! ELSE !ziggurat method -! RandN=rnor() -! END IF - zstar = -1./SQRT(2.)*ABS(RandN) - EXIT - ELSE IF ( (a*SQRT(PI)+1.)/(a*SQRT(PI)+1+a*a) .GT. u) THEN - zstar = -SQRT(-LOG(RandVal3(2))) - EXIT - ELSE - zstar = (1.0-SQRT(RandVal3(2)))*a - IF (EXP(-(zstar*zstar)).GT.RandVal3(3)) THEN - EXIT - END IF - END IF - END DO - CASE(4) - DO - CALL RANDOM_NUMBER(RandVal3) - IF (1.0/(2.0*a*SQRT(PI)+1.0).GT.RandVal3(1)) THEN - zstar=-SQRT(-LOG(RandVal3(2))) - ELSE -! IF (.NOT.DoZigguratSampling) THEN !polar method - IF (RandN_in_Mem) THEN !reusing second RandN form previous polar method - RandN = RandN_save - RandN_in_Mem=.FALSE. - ELSE - Velosq = 2 - DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.)) - CALL RANDOM_NUMBER(RandVal2) - Velo1 = 2.*RandVal2(1) - 1. - Velo2 = 2.*RandVal2(2) - 1. - Velosq = Velo1**2 + Velo2**2 - END DO - RandN = Velo1*SQRT(-2*LOG(Velosq)/Velosq) - RandN_save = Velo2*SQRT(-2*LOG(Velosq)/Velosq) - RandN_in_Mem=.TRUE. - END IF -! ELSE !ziggurat method -! RandN=rnor() -! END IF - zstar = 1./SQRT(2.)*RandN - END IF - IF ( (a-zstar)/a .GT. RandVal3(3)) THEN - EXIT - END IF - END DO - CASE DEFAULT - CALL abort(__STAMP__,'ERROR in SurfaceFlux: Wrong envelope in SetSurfacefluxVelocities!') - END SELECT - !-- 2.: sample normal directions and build complete velo-vector - Vec3D(1:3) = vec_nIn(1:3) * SQRT(2.*BoltzmannConst*T/Species(DSMC%AmbiDiffElecSpec)%MassIC)*(a-zstar) -! IF (.NOT.DoZigguratSampling) THEN !polar method - Velosq = 2 - DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.)) - CALL RANDOM_NUMBER(RandVal2) - Velo1 = 2.*RandVal2(1) - 1. - Velo2 = 2.*RandVal2(2) - 1. - Velosq = Velo1**2 + Velo2**2 - END DO - Velo1 = Velo1*SQRT(-2*LOG(Velosq)/Velosq) - Velo2 = Velo2*SQRT(-2*LOG(Velosq)/Velosq) -! ELSE !ziggurat method -! Velo1=rnor() -! Velo2=rnor() -! END IF - Vec3D(1:3) = Vec3D(1:3) + vec_t1(1:3) * ( Velo_t1+Velo1*SQRT(BoltzmannConst*T/Species(DSMC%AmbiDiffElecSpec)%MassIC) ) - Vec3D(1:3) = Vec3D(1:3) + vec_t2(1:3) * ( Velo_t2+Velo2*SQRT(BoltzmannConst*T/Species(DSMC%AmbiDiffElecSpec)%MassIC) ) - IF (PositionNbr.GT.0) THEN - IF (ALLOCATED(AmbipolElecVelo(PositionNbr)%ElecVelo)) DEALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo) - ALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo(3)) - AmbipolElecVelo(PositionNbr)%ElecVelo(1:3) = Vec3D(1:3) - END IF - ELSE !PositionNbr .EQ. 0 - CALL abort(__STAMP__,'PositionNbr .EQ. 0!') - END IF !PositionNbr .NE. 0 - END DO !i = ...NbrOfParticle -CASE DEFAULT - CALL abort(__STAMP__,'ERROR in SurfaceFlux: Wrong velocity distribution!') -END SELECT - -END SUBROUTINE AD_SetSFElectronVelo SUBROUTINE AD_InsertParticles(iPartIndx_Node, nPart, iPartIndx_NodeTotalAmbi, TotalPartNum) @@ -640,4 +342,4 @@ SUBROUTINE AD_DeleteParticles(iPartIndx_Node, nPart_opt) END SUBROUTINE AD_DeleteParticles -END MODULE MOD_DSMC_AmbipolarDiffusion +END MODULE MOD_DSMC_AmbipolarDiffusion \ No newline at end of file diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index 05971ef93..489a41726 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -57,7 +57,7 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Particle_Boundary_Vars USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win,SurfChemReac, ChemWallProp, ChemDesorpWall !, ChemCountReacWall USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle -USE MOD_Particle_SurfFlux ,ONLY: CalcPartPosTriaSurface +USE MOD_Particle_SurfFlux ,ONLY: SetSurfacefluxVelocities, CalcPartPosTriaSurface USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr #if USE_MPI USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED @@ -423,8 +423,7 @@ SUBROUTINE ParticleSurfChemFlux() END IF END DO - CALL SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) - + CALL SetSurfacefluxVelocities(2,iSpec,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) PartsEmitted = PartsEmitted + PartInsSubSide END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) END IF ! iSide @@ -622,187 +621,4 @@ SUBROUTINE ParticleSurfDiffusion() END SUBROUTINE ParticleSurfDiffusion - -!=================================================================================================================================== -!> Determine the particle velocity of each inserted particle -!=================================================================================================================================== -SUBROUTINE SetSurfacefluxVelocities(iSpec,iReac,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartIns) -! MODULES -USE MOD_Globals -USE MOD_Globals_Vars, ONLY : PI, BoltzmannConst -USE MOD_Particle_Vars -USE MOD_Particle_Surfaces_Vars, ONLY : SurfMeshSubSideData, TriaSurfaceFlux -USE MOD_Particle_Surfaces, ONLY : CalcNormAndTangBezier -USE MOD_SurfaceModel_Vars -! IMPLICIT VARIABLE HANDLING -IMPLICIT NONE -!----------------------------------------------------------------------------------------------------------------------------------- -! INPUT VARIABLES -INTEGER,INTENT(IN) :: iSpec,iReac,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartIns -!----------------------------------------------------------------------------------------------------------------------------------- -! OUTPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! LOCAL VARIABLES -INTEGER :: i,PositionNbr,envelope,BoundID -REAL :: Vec3D(3), vec_nIn(1:3), vec_t1(1:3), vec_t2(1:3) -REAL :: a,zstar,RandVal1,RandVal2(2),RandVal3(3),u,RandN,RandN_save,Velo1,Velo2,Velosq,T,beta,z -LOGICAL :: RandN_in_Mem -REAL :: projFak ! VeloVecIC projected to inwards normal of tria -REAL :: Velo_t1 ! Velo comp. of first orth. vector in tria -REAL :: Velo_t2 ! Velo comp. of second orth. vector in tria -REAL :: VeloIC -!=================================================================================================================================== -IF(PartIns.LT.1) RETURN - -RandN_in_Mem=.FALSE. -envelope=-1 -BoundID = SurfChemReac%Surfaceflux(iSF)%BC - -IF (.NOT.SurfChemReac%Surfaceflux(iSF)%VeloIsNormal) THEN - vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3) - vec_t1(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1(1:3) - vec_t2(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2(1:3) -END IF !.NOT.VeloIsNormal - -VeloIC = SurfChemReac%Surfaceflux(iSF)%VeloIC -T = SurfChemReac%Surfaceflux(iSF)%MWTemperatureIC -a = SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%a_nIn(iSpec) -projFak = SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%projFak -Velo_t1 = SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 -Velo_t2 = SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 - -! Set velocities - !-- determine envelope for most efficient ARM [Garcia and Wagner 2006, JCP217-2] - IF (ALMOSTZERO(VeloIC*projFak)) THEN - ! Rayleigh distri - envelope = 0 - ELSE IF (-0.4.LT.a .AND. a.LT.1.3) THEN - ! low speed flow - IF (a.LE.0.) THEN - envelope = 1 - ELSE - envelope = 3 - END IF !choose envelope based on flow direction - ELSE - ! high speed / general flow - IF (a.LT.0.) THEN - envelope = 2 - ELSE - envelope = 4 - END IF !choose envelope based on flow direction - END IF !low speed / high speed / rayleigh flow - - DO i = NbrOfParticle-PartIns+1,NbrOfParticle - PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition) - IF (PositionNbr .NE. 0) THEN - ! In case of side-normal velocities: calc n-/t-vectors at particle position, xi was saved in PartState(4:5) - IF (SurfChemReac%Surfaceflux(iSF)%VeloIsNormal .AND. TriaSurfaceFlux) THEN - vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3) - vec_t1(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1(1:3) - vec_t2(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2(1:3) - END IF !VeloIsNormal - - SELECT CASE(envelope) - CASE(0) - CALL RANDOM_NUMBER(RandVal1) - zstar = -SQRT(-LOG(RandVal1)) - CASE(1) - DO - CALL RANDOM_NUMBER(RandVal2) - zstar = -SQRT(a*a-LOG(RandVal2(1))) - IF ( -(a-zstar)/zstar .GT. RandVal2(2)) THEN - EXIT - END IF - END DO - CASE(2) - z = 0.5*(a-SQRT(a*a+2.)) - beta = a-(1.0-a)*(a-z) - DO - CALL RANDOM_NUMBER(RandVal3) - IF (EXP(-(beta*beta))/(EXP(-(beta*beta))+2.0*(a-z)*(a-beta)*EXP(-(z*z))).GT.RandVal3(1)) THEN - zstar=-SQRT(beta*beta-LOG(RandVal3(2))) - IF ( -(a-zstar)/zstar .GT. RandVal3(3)) THEN - EXIT - END IF - ELSE - zstar=beta+(a-beta)*RandVal3(2) - IF ( (a-zstar)/(a-z)*EXP(z*z-(zstar*zstar)) .GT. RandVal3(3)) THEN - EXIT - END IF - END IF - END DO - CASE(3) - DO - CALL RANDOM_NUMBER(RandVal3) - u = RandVal3(1) - IF ( a*SQRT(PI)/(a*SQRT(PI)+1+a*a) .GT. u) THEN - - zstar = -1./SQRT(2.)*ABS(RandN) - EXIT - ELSE IF ( (a*SQRT(PI)+1.)/(a*SQRT(PI)+1+a*a) .GT. u) THEN - zstar = -SQRT(-LOG(RandVal3(2))) - EXIT - ELSE - zstar = (1.0-SQRT(RandVal3(2)))*a - IF (EXP(-(zstar*zstar)).GT.RandVal3(3)) THEN - EXIT - END IF - END IF - END DO - CASE(4) - DO - CALL RANDOM_NUMBER(RandVal3) - IF (1.0/(2.0*a*SQRT(PI)+1.0).GT.RandVal3(1)) THEN - zstar=-SQRT(-LOG(RandVal3(2))) - ELSE - - IF (RandN_in_Mem) THEN !reusing second RandN form previous polar method - RandN = RandN_save - RandN_in_Mem=.FALSE. - ELSE - Velosq = 2 - DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.)) - CALL RANDOM_NUMBER(RandVal2) - Velo1 = 2.*RandVal2(1) - 1. - Velo2 = 2.*RandVal2(2) - 1. - Velosq = Velo1**2 + Velo2**2 - END DO - RandN = Velo1*SQRT(-2*LOG(Velosq)/Velosq) - RandN_save = Velo2*SQRT(-2*LOG(Velosq)/Velosq) - RandN_in_Mem=.TRUE. - END IF - - zstar = 1./SQRT(2.)*RandN - END IF - IF ( (a-zstar)/a .GT. RandVal3(3)) THEN - EXIT - END IF - END DO - CASE DEFAULT - CALL abort(__STAMP__,'ERROR in SurfaceFlux: Wrong envelope in SetSurfacefluxVelocities!') - END SELECT - - ! sample normal directions and build complete velo-vector - Vec3D(1:3) = vec_nIn(1:3) * SQRT(2.*BoltzmannConst*T/Species(iSpec)%MassIC)*(a-zstar) -! IF (.NOT.DoZigguratSampling) THEN !polar method - Velosq = 2 - DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.)) - CALL RANDOM_NUMBER(RandVal2) - Velo1 = 2.*RandVal2(1) - 1. - Velo2 = 2.*RandVal2(2) - 1. - Velosq = Velo1**2 + Velo2**2 - END DO - Velo1 = Velo1*SQRT(-2*LOG(Velosq)/Velosq) - Velo2 = Velo2*SQRT(-2*LOG(Velosq)/Velosq) - - Vec3D(1:3) = Vec3D(1:3) + vec_t1(1:3) * ( Velo_t1+Velo1*SQRT(BoltzmannConst*T/Species(iSpec)%MassIC) ) - Vec3D(1:3) = Vec3D(1:3) + vec_t2(1:3) * ( Velo_t2+Velo2*SQRT(BoltzmannConst*T/Species(iSpec)%MassIC) ) - PartState(4:6,PositionNbr) = Vec3D(1:3) - ELSE !PositionNbr .EQ. 0 - CALL abort(__STAMP__,'PositionNbr .EQ. 0!') - END IF !PositionNbr .NE. 0 - END DO !i = ...NbrOfParticle - -END SUBROUTINE SetSurfacefluxVelocities - -END MODULE MOD_Particle_SurfChemFlux +END MODULE MOD_Particle_SurfChemFlux \ No newline at end of file diff --git a/src/particles/emission/particle_surface_flux.f90 b/src/particles/emission/particle_surface_flux.f90 index a819104b7..b55b1e415 100644 --- a/src/particles/emission/particle_surface_flux.f90 +++ b/src/particles/emission/particle_surface_flux.f90 @@ -24,7 +24,7 @@ MODULE MOD_Particle_SurfFlux !----------------------------------------------------------------------------------------------------------------------------------- ! Private Part --------------------------------------------------------------------------------------------------------------------- ! Public Part ---------------------------------------------------------------------------------------------------------------------- -PUBLIC :: ParticleSurfaceflux, CalcPartPosTriaSurface +PUBLIC :: ParticleSurfaceflux, CalcPartPosTriaSurface, SetSurfacefluxVelocities !=================================================================================================================================== CONTAINS @@ -48,7 +48,6 @@ SUBROUTINE ParticleSurfaceflux() USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, TriaSurfaceFlux, BCdata_auxSF USE MOD_Particle_VarTimeStep ,ONLY: CalcVarTimeStep USE MOD_Timedisc_Vars ,ONLY: RKdtFrac, dt -USE MOD_DSMC_AmbipolarDiffusion ,ONLY: AD_SetSFElectronVelo USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr #if defined(IMPA) || defined(ROS) USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod @@ -260,17 +259,16 @@ SUBROUTINE ParticleSurfaceflux() END IF END DO !----- 2a.: set velocities if special for each subside - CALL SetSurfacefluxVelocities(iSpec,iSF,iSample,jSample,iSide,BCSideID,SideID,ElemID,NbrOfParticle,PartInsSubSide) + CALL SetSurfacefluxVelocities(1,iSpec,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) PartsEmitted = PartsEmitted + PartInsSubSide IF (useDSMC) THEN - IF (DSMC%DoAmbipolarDiff) CALL AD_SetSFElectronVelo(iSpec,iSF,iSample,jSample,iSide,BCSideID,SideID,ElemID,NbrOfParticle,PartInsSubSide,particle_xis) + IF (DSMC%DoAmbipolarDiff) CALL SetSurfacefluxVelocities(3,iSpec,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide,particle_xis) DO iPart = 1, NbrOfParticle PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) IF (PositionNbr .EQ. 0) THEN - CALL abort(__STAMP__,& - 'ERROR in InitialParticleInserting: No free particle index - maximum nbr of particles reached?') + CALL abort(__STAMP__,'ERROR in InitialParticleInserting: No free particle index - maximum nbr of particles reached?') END IF END DO END IF @@ -329,7 +327,7 @@ END SUBROUTINE ParticleSurfaceflux !=================================================================================================================================== -!> +!> Calculate the number of particles to be inserted during the regular surface flux !=================================================================================================================================== SUBROUTINE CalcPartInsSubSidesStandardCase(iSpec, iSF, PartInsSubSides) ! MODULES @@ -1117,27 +1115,33 @@ END SUBROUTINE AdaptiveBoundary_ConstMassflow_Weight !=================================================================================================================================== -!> Determine the particle velocity of each inserted particle +!> SurfaceFlux: Determine the particle velocity of each inserted particle when inserted at a surface !=================================================================================================================================== -SUBROUTINE SetSurfacefluxVelocities(iSpec,iSF,iSample,jSample,iSide,BCSideID,SideID,ElemID,NbrOfParticle,PartIns) +SUBROUTINE SetSurfacefluxVelocities(Mode,iSpec,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartIns,particle_xis) ! MODULES USE MOD_Globals -USE MOD_Globals_Vars ,ONLY: PI, BoltzmannConst +USE MOD_Globals_Vars ,ONLY: PI, BoltzmannConst USE MOD_Particle_Vars -USE MOD_Particle_Surfaces_Vars ,ONLY: SurfMeshSubSideData, TriaSurfaceFlux -USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangBezier -USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCMapElemToSample, AdaptBCMacroVal -USE MOD_Part_Tools ,ONLY: InRotRefFrameCheck +USE MOD_Particle_Surfaces_Vars ,ONLY: SurfMeshSubSideData, TriaSurfaceFlux +USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangBezier +USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCMapElemToSample, AdaptBCMacroVal +USE MOD_Part_Tools ,ONLY: InRotRefFrameCheck +USE MOD_Particle_SurfaceFlux_Vars ,ONLY: tSurfaceFlux +USE MOD_Mesh_Vars ,ONLY: SideToElem +USE MOD_DSMC_Vars ,ONLY: AmbiPolarSFMapping, AmbipolElecVelo, DSMC +USE MOD_SurfaceModel_Vars ,ONLY: SurfChemReac ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES -INTEGER,INTENT(IN) :: iSpec,iSF,iSample,jSample,iSide,BCSideID,SideID,ElemID,NbrOfParticle,PartIns +INTEGER,INTENT(IN) :: Mode !> Select from where the subroutine is called (1: Regular, 2: SurfChem, 3: Ambipolar diffusion) +INTEGER,INTENT(IN) :: iSpec,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartIns +REAL,INTENT(IN),OPTIONAL :: particle_xis(:) !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -INTEGER :: i,PositionNbr,envelope,currentBC,SampleElemID +INTEGER :: i,PositionNbr,envelope,currentBC,SampleElemID,iPart REAL :: Vec3D(3), vec_nIn(1:3), vec_t1(1:3), vec_t2(1:3) REAL :: a,zstar,RandVal1,RandVal2(2),RandVal3(3),u,RandN,RandN_save,Velo1,Velo2,Velosq,T,beta,z LOGICAL :: RandN_in_Mem @@ -1147,76 +1151,103 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iSF,iSample,jSample,iSide,BCSideID,Sid REAL :: VeloIC REAL :: VeloVec(1:3) REAL :: VeloVecIC(1:3),v_thermal, pressure +TYPE(tSurfaceflux), POINTER :: SF !=================================================================================================================================== IF(PartIns.LT.1) RETURN +SELECT CASE(Mode) +CASE(1) + ! 1: Regular surface flux per species + SF => Species(iSpec)%Surfaceflux(iSF) + a = SF%SurfFluxSubSideData(iSample,jSample,iSide)%a_nIn +CASE(2) + ! 2: Surface flux at a boundary + SF => SurfChemReac%Surfaceflux(iSF) + a = SurfChemReac%SFAux(iSF)%a_nIn(iSample,jSample,iSide,iSpec) +CASE(3) + ! 3: Ambipolar diffusion: setting velocity of electrons + ! Only insert electron for positively charged species + IF(Species(iSpec)%ChargeIC.LE.0.0) RETURN + SF => Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(AmbiPolarSFMapping(iSpec,iSF)) + a = SF%SurfFluxSubSideData(iSample,jSample,iSide)%a_nIn +CASE DEFAULT + CALL abort(__STAMP__,'ERROR in SetSurfacefluxVelocities: Unsupported mode!') +END SELECT + RandN_in_Mem=.FALSE. envelope=-1 -currentBC = Species(iSpec)%Surfaceflux(iSF)%BC - -IF (.NOT.Species(iSpec)%Surfaceflux(iSF)%VeloIsNormal) THEN +currentBC = SF%BC +VeloIC = SF%VeloIC +T = SF%MWTemperatureIC +projFak = SF%SurfFluxSubSideData(iSample,jSample,iSide)%projFak +Velo_t1 = SF%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 +Velo_t2 = SF%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 + +IF (.NOT.SF%VeloIsNormal) THEN vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3) vec_t1(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1(1:3) vec_t2(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2(1:3) END IF !.NOT.VeloIsNormal -IF(.NOT.Species(iSpec)%Surfaceflux(iSF)%Adaptive) THEN - VeloIC = Species(iSpec)%Surfaceflux(iSF)%VeloIC - T = Species(iSpec)%Surfaceflux(iSF)%MWTemperatureIC - a = Species(iSpec)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%a_nIn - projFak = Species(iSpec)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%projFak - Velo_t1 = Species(iSpec)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 - Velo_t2 = Species(iSpec)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 -ELSE !Species(iSpec)%Surfaceflux(iSF)%Adaptive - SampleElemID = AdaptBCMapElemToSample(ElemID) - SELECT CASE(Species(iSpec)%Surfaceflux(iSF)%AdaptiveType) - CASE(1,3,4) ! Pressure and massflow inlet (pressure/massflow, temperature const) - T = Species(iSpec)%Surfaceflux(iSF)%MWTemperatureIC - CASE(2) ! adaptive Outlet/freestream - pressure = Species(iSpec)%Surfaceflux(iSF)%AdaptivePressure - T = pressure / (BoltzmannConst * AdaptBCMacroVal(4,SampleElemID,iSpec)) - CASE DEFAULT - CALL abort(__STAMP__,'ERROR in SurfaceFlux: Wrong adaptive type for Surfaceflux velocities!') - END SELECT - VeloVec(1) = AdaptBCMacroVal(DSMC_VELOX,SampleElemID,iSpec) - VeloVec(2) = AdaptBCMacroVal(DSMC_VELOY,SampleElemID,iSpec) - VeloVec(3) = AdaptBCMacroVal(DSMC_VELOZ,SampleElemID,iSpec) - vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3) - VeloVec(1:3) = DOT_PRODUCT(VeloVec,vec_nIn)*vec_nIn(1:3) - VeloIC = SQRT(DOT_PRODUCT(VeloVec,VeloVec)) - IF (ABS(VeloIC).GT.0.) THEN - VeloVecIC = VeloVec / VeloIC - ELSE - VeloVecIC = (/1.,0.,0./) - END IF - projFak = DOT_PRODUCT(vec_nIn,VeloVecIC) !VeloVecIC projected to inwards normal - v_thermal = SQRT(2.*BoltzmannConst*T/Species(iSpec)%MassIC) !thermal speed - IF ( ALMOSTEQUAL(v_thermal,0.)) THEN - v_thermal = 1. - END IF - a = VeloIC * projFak / v_thermal !speed ratio proj. to inwards n (can be negative!) - Velo_t1 = VeloIC * DOT_PRODUCT(vec_t1,VeloVecIC) !v in t1-dir - Velo_t2 = VeloIC * DOT_PRODUCT(vec_t2,VeloVecIC) !v in t2-dir -END IF !Adaptive SurfaceFlux +! Adaptive surface flux is only compatible with regular emission and ambipolar diffusion +IF(Mode.EQ.1.OR.Mode.EQ.3) THEN + IF(SF%Adaptive) THEN !SF%Adaptive + SampleElemID = AdaptBCMapElemToSample(SideToElem(S2E_ELEM_ID,BCSideID)) + SELECT CASE(SF%AdaptiveType) + CASE(1,3,4) ! Pressure and massflow inlet (pressure/massflow, temperature const) + T = SF%MWTemperatureIC + CASE(2) ! adaptive Outlet/freestream + pressure = SF%AdaptivePressure + T = pressure / (BoltzmannConst * AdaptBCMacroVal(4,SampleElemID,iSpec)) + CASE DEFAULT + CALL abort(__STAMP__,'ERROR in SurfaceFlux: Wrong adaptive type for Surfaceflux velocities!') + END SELECT + VeloVec(1) = AdaptBCMacroVal(DSMC_VELOX,SampleElemID,iSpec) + VeloVec(2) = AdaptBCMacroVal(DSMC_VELOY,SampleElemID,iSpec) + VeloVec(3) = AdaptBCMacroVal(DSMC_VELOZ,SampleElemID,iSpec) + vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3) + VeloVec(1:3) = DOT_PRODUCT(VeloVec,vec_nIn)*vec_nIn(1:3) + VeloIC = SQRT(DOT_PRODUCT(VeloVec,VeloVec)) + IF (ABS(VeloIC).GT.0.) THEN + VeloVecIC = VeloVec / VeloIC + ELSE + VeloVecIC = (/1.,0.,0./) + END IF + projFak = DOT_PRODUCT(vec_nIn,VeloVecIC) !VeloVecIC projected to inwards normal + v_thermal = SQRT(2.*BoltzmannConst*T/Species(iSpec)%MassIC) !thermal speed + IF ( ALMOSTEQUAL(v_thermal,0.)) THEN + v_thermal = 1. + END IF + a = VeloIC * projFak / v_thermal !speed ratio proj. to inwards n (can be negative!) + Velo_t1 = VeloIC * DOT_PRODUCT(vec_t1,VeloVecIC) !v in t1-dir + Velo_t2 = VeloIC * DOT_PRODUCT(vec_t2,VeloVecIC) !v in t2-dir + END IF !Adaptive SurfaceFlux +END IF ! Mode = 1 ! Set velocities -SELECT CASE(TRIM(Species(iSpec)%Surfaceflux(iSF)%velocityDistribution)) +SELECT CASE(TRIM(SF%velocityDistribution)) CASE('constant') - IF (.NOT.Species(iSpec)%Surfaceflux(iSF)%VeloIsNormal) THEN - VeloVecIC(1:3) = Species(iSpec)%Surfaceflux(iSF)%VeloVecIC(1:3) - VeloVecIC(1:3) = VeloVecIC(1:3) / VECNORM(VeloVecIC(1:3)) + IF (.NOT.SF%VeloIsNormal) THEN + ! Velocity vector has been normalized during initialization + VeloVecIC(1:3) = SF%VeloVecIC(1:3) END IF + iPart = 0 DO i = NbrOfParticle-PartIns+1,NbrOfParticle + iPart = iPart + 1 PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition) IF (PositionNbr .NE. 0) THEN ! In case of side-normal velocities: calc n-vector at particle position, xi was saved in PartState(4:5) - IF (Species(iSpec)%Surfaceflux(iSF)%VeloIsNormal .AND. TriaSurfaceFlux) THEN + IF (SF%VeloIsNormal .AND. TriaSurfaceFlux) THEN vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3) vec_t1(1:3) = 0. !dummy vec_t2(1:3) = 0. !dummy - ELSE IF (Species(iSpec)%Surfaceflux(iSF)%VeloIsNormal) THEN - CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),xi=PartState(4,PositionNbr),eta=PartState(5,PositionNbr),SideID=SideID ) + ELSE IF (SF%VeloIsNormal) THEN + IF(Mode.EQ.3) THEN ! Ambipolar diffusion + CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),xi=particle_xis(2*(iPart-1)+1),eta=particle_xis(2*(iPart-1)+2),SideID=SideID ) + ELSE + CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),xi=PartState(4,PositionNbr),eta=PartState(5,PositionNbr),SideID=SideID ) + END IF vec_nIn(1:3) = -vec_nIn(1:3) vec_t1(1:3) = 0. !dummy vec_t2(1:3) = 0. !dummy @@ -1224,8 +1255,14 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iSF,iSample,jSample,iSide,BCSideID,Sid vec_nIn(1:3) = VeloVecIC(1:3) END IF !VeloIsNormal ! Build complete velo-vector - Vec3D(1:3) = vec_nIn(1:3) * Species(iSpec)%Surfaceflux(iSF)%VeloIC - PartState(4:6,PositionNbr) = Vec3D(1:3) + Vec3D(1:3) = vec_nIn(1:3) * SF%VeloIC + IF(Mode.EQ.3) THEN ! Ambipolar diffusion + IF (ALLOCATED(AmbipolElecVelo(PositionNbr)%ElecVelo)) DEALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo) + ALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo(3)) + AmbipolElecVelo(PositionNbr)%ElecVelo(1:3) = Vec3D(1:3) + ELSE + PartState(4:6,PositionNbr) = Vec3D(1:3) + END IF END IF !PositionNbr .NE. 0 END DO !i = ...NbrOfParticle CASE('maxwell','maxwell_lpn') @@ -1251,15 +1288,20 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iSF,iSample,jSample,iSide,BCSideID,Sid DO i = NbrOfParticle-PartIns+1,NbrOfParticle PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition) - IF (PositionNbr .NE. 0) THEN + IF (PositionNbr.GT.0) THEN !-- 0a.: In case of side-normal velocities: calc n-/t-vectors at particle position, xi was saved in PartState(4:5) - IF (Species(iSpec)%Surfaceflux(iSF)%VeloIsNormal .AND. TriaSurfaceFlux) THEN + IF (SF%VeloIsNormal .AND. TriaSurfaceFlux) THEN vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3) vec_t1(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1(1:3) vec_t2(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2(1:3) - ELSE IF (Species(iSpec)%Surfaceflux(iSF)%VeloIsNormal) THEN - CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),tang1=vec_t1(1:3),tang2=vec_t2(1:3) & - ,xi=PartState(4,PositionNbr),eta=PartState(5,PositionNbr),SideID=SideID ) + ELSE IF (SF%VeloIsNormal) THEN + IF(Mode.EQ.3) THEN ! Ambipolar diffusion + CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),tang1=vec_t1(1:3),tang2=vec_t2(1:3) & + ,xi=particle_xis(2*(iPart-1)+1),eta=particle_xis(2*(iPart-1)+2),SideID=SideID ) + ELSE + CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),tang1=vec_t1(1:3),tang2=vec_t2(1:3) & + ,xi=PartState(4,PositionNbr),eta=PartState(5,PositionNbr),SideID=SideID ) + END IF vec_nIn(1:3) = -vec_nIn(1:3) END IF !VeloIsNormal !-- 1.: determine zstar (initial generation of potentially too many RVu is for needed indentities of RVu used multiple times! @@ -1297,25 +1339,21 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iSF,iSample,jSample,iSide,BCSideID,Sid CALL RANDOM_NUMBER(RandVal3) u = RandVal3(1) IF ( a*SQRT(PI)/(a*SQRT(PI)+1+a*a) .GT. u) THEN -! IF (.NOT.DoZigguratSampling) THEN !polar method - IF (RandN_in_Mem) THEN !reusing second RandN form previous polar method - RandN = RandN_save - RandN_in_Mem=.FALSE. - ELSE - Velosq = 2 - DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.)) - CALL RANDOM_NUMBER(RandVal2) - Velo1 = 2.*RandVal2(1) - 1. - Velo2 = 2.*RandVal2(2) - 1. - Velosq = Velo1**2 + Velo2**2 - END DO - RandN = Velo1*SQRT(-2*LOG(Velosq)/Velosq) - RandN_save = Velo2*SQRT(-2*LOG(Velosq)/Velosq) - RandN_in_Mem=.TRUE. - END IF -! ELSE !ziggurat method -! RandN=rnor() -! END IF + IF (RandN_in_Mem) THEN !reusing second RandN form previous polar method + RandN = RandN_save + RandN_in_Mem=.FALSE. + ELSE + Velosq = 2 + DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.)) + CALL RANDOM_NUMBER(RandVal2) + Velo1 = 2.*RandVal2(1) - 1. + Velo2 = 2.*RandVal2(2) - 1. + Velosq = Velo1**2 + Velo2**2 + END DO + RandN = Velo1*SQRT(-2*LOG(Velosq)/Velosq) + RandN_save = Velo2*SQRT(-2*LOG(Velosq)/Velosq) + RandN_in_Mem=.TRUE. + END IF zstar = -1./SQRT(2.)*ABS(RandN) EXIT ELSE IF ( (a*SQRT(PI)+1.)/(a*SQRT(PI)+1+a*a) .GT. u) THEN @@ -1334,25 +1372,21 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iSF,iSample,jSample,iSide,BCSideID,Sid IF (1.0/(2.0*a*SQRT(PI)+1.0).GT.RandVal3(1)) THEN zstar=-SQRT(-LOG(RandVal3(2))) ELSE -! IF (.NOT.DoZigguratSampling) THEN !polar method - IF (RandN_in_Mem) THEN !reusing second RandN form previous polar method - RandN = RandN_save - RandN_in_Mem=.FALSE. - ELSE - Velosq = 2 - DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.)) - CALL RANDOM_NUMBER(RandVal2) - Velo1 = 2.*RandVal2(1) - 1. - Velo2 = 2.*RandVal2(2) - 1. - Velosq = Velo1**2 + Velo2**2 - END DO - RandN = Velo1*SQRT(-2*LOG(Velosq)/Velosq) - RandN_save = Velo2*SQRT(-2*LOG(Velosq)/Velosq) - RandN_in_Mem=.TRUE. - END IF -! ELSE !ziggurat method -! RandN=rnor() -! END IF + IF (RandN_in_Mem) THEN !reusing second RandN form previous polar method + RandN = RandN_save + RandN_in_Mem=.FALSE. + ELSE + Velosq = 2 + DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.)) + CALL RANDOM_NUMBER(RandVal2) + Velo1 = 2.*RandVal2(1) - 1. + Velo2 = 2.*RandVal2(2) - 1. + Velosq = Velo1**2 + Velo2**2 + END DO + RandN = Velo1*SQRT(-2*LOG(Velosq)/Velosq) + RandN_save = Velo2*SQRT(-2*LOG(Velosq)/Velosq) + RandN_in_Mem=.TRUE. + END IF zstar = 1./SQRT(2.)*RandN END IF IF ( (a-zstar)/a .GT. RandVal3(3)) THEN @@ -1364,25 +1398,26 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iSF,iSample,jSample,iSide,BCSideID,Sid END SELECT !-- 2.: sample normal directions and build complete velo-vector Vec3D(1:3) = vec_nIn(1:3) * SQRT(2.*BoltzmannConst*T/Species(iSpec)%MassIC)*(a-zstar) -! IF (.NOT.DoZigguratSampling) THEN !polar method - Velosq = 2 - DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.)) - CALL RANDOM_NUMBER(RandVal2) - Velo1 = 2.*RandVal2(1) - 1. - Velo2 = 2.*RandVal2(2) - 1. - Velosq = Velo1**2 + Velo2**2 - END DO - Velo1 = Velo1*SQRT(-2*LOG(Velosq)/Velosq) - Velo2 = Velo2*SQRT(-2*LOG(Velosq)/Velosq) -! ELSE !ziggurat method -! Velo1=rnor() -! Velo2=rnor() -! END IF + Velosq = 2 + DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.)) + CALL RANDOM_NUMBER(RandVal2) + Velo1 = 2.*RandVal2(1) - 1. + Velo2 = 2.*RandVal2(2) - 1. + Velosq = Velo1**2 + Velo2**2 + END DO + Velo1 = Velo1*SQRT(-2*LOG(Velosq)/Velosq) + Velo2 = Velo2*SQRT(-2*LOG(Velosq)/Velosq) Vec3D(1:3) = Vec3D(1:3) + vec_t1(1:3) * ( Velo_t1+Velo1*SQRT(BoltzmannConst*T/Species(iSpec)%MassIC) ) Vec3D(1:3) = Vec3D(1:3) + vec_t2(1:3) * ( Velo_t2+Velo2*SQRT(BoltzmannConst*T/Species(iSpec)%MassIC) ) - PartState(4:6,PositionNbr) = Vec3D(1:3) + IF(Mode.EQ.3) THEN ! Ambipolar diffusion + IF (ALLOCATED(AmbipolElecVelo(PositionNbr)%ElecVelo)) DEALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo) + ALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo(3)) + AmbipolElecVelo(PositionNbr)%ElecVelo(1:3) = Vec3D(1:3) + ELSE + PartState(4:6,PositionNbr) = Vec3D(1:3) + END IF ELSE !PositionNbr .EQ. 0 - CALL abort(__STAMP__,'PositionNbr .EQ. 0!') + CALL abort(__STAMP__,'ERROR in SurfaceFlux: PositionNbr .EQ. 0!') END IF !PositionNbr .NE. 0 END DO !i = ...NbrOfParticle CASE DEFAULT diff --git a/src/particles/emission/particle_surface_flux_init.f90 b/src/particles/emission/particle_surface_flux_init.f90 index 8eccadffb..cbce86951 100644 --- a/src/particles/emission/particle_surface_flux_init.f90 +++ b/src/particles/emission/particle_surface_flux_init.f90 @@ -289,9 +289,8 @@ SUBROUTINE InitializeParticleSurfaceflux() END DO !iSF END DO !iSpec -CatBoundNum = SurfChemReac%CatBoundNum !initialize Surfaceflux-specific data -DO iSF=1,CatBoundNum +DO iSF=1,SurfChemReac%CatBoundNum currentBC = SurfChemReac%Surfaceflux(iSF)%BC IF (BCdata_auxSF(currentBC)%SideNumber.GT.0) THEN @@ -337,23 +336,6 @@ SUBROUTINE InitializeParticleSurfaceflux() CALL abort(__STAMP__& ,'ERROR in ParticleSurfaceflux: Someting is wrong with SideNumber of BC ',currentBC) END IF - !--- Finalize adaptive SF -#if USE_MPI - IF(SurfChemReac%Surfaceflux(iSF)%Adaptive) THEN - totalAreaSF_global = 0.0 - CALL MPI_ALLREDUCE(SurfChemReac%Surfaceflux(iSF)%totalAreaSF,totalAreaSF_global,1, & - MPI_DOUBLE_PRECISION,MPI_SUM,PartMPI%COMM,IERROR) - SurfChemReac%Surfaceflux(iSF)%totalAreaSF = totalAreaSF_global - END IF -#endif - -#ifdef CODE_ANALYZE - IF (BCdata_auxSF(currentBC)%SideNumber.GT.0 .AND. SurfChemReac%Surfaceflux(iSF)%CircularInflow) THEN - IPWRITE(*,'(I4,A,2(1X,I0),A,3(1X,I0))') ' For Surfaceflux/Spec',iSF,iSpec,' are nType0,1,2: ' & - , CountCircInflowType(1,iSF,iSpec),CountCircInflowType(2, iSF,iSpec) & - , CountCircInflowType(3, iSF,iSpec) - END IF -#endif /*CODE_ANALYZE*/ END DO !iSF @@ -364,12 +346,6 @@ SUBROUTINE InitializeParticleSurfaceflux() SDEALLOCATE(BCdata_auxSFTemp) ! Setting variables required after a restart -IF(DoRestart) THEN - DO iSF=1,SurfChemReac%CatBoundNum - VFR_total = SurfChemReac%Surfaceflux(iSF)%VFR_total !proc local total - END DO -END IF - IF(DoRestart) THEN DO iSpec=1,nSpecies DO iSF = 1, Species(iSpec)%NumberOfInits @@ -554,7 +530,7 @@ SUBROUTINE ReadInAndPrepareSurfaceFlux(MaxSurfacefluxBCs, nDataBC) END IF !.NOT.VeloIsNormal IF (.NOT.SF%VeloIsNormal) THEN !--- normalize VeloVecIC - IF (.NOT. ALL(SF%VeloVecIC(:).EQ.0.)) SF%VeloVecIC = SF%VeloVecIC / SQRT(DOT_PRODUCT(SF%VeloVecIC,SF%VeloVecIC)) + IF (.NOT. ALL(SF%VeloVecIC(:).EQ.0.)) SF%VeloVecIC = SF%VeloVecIC / VECNORM(SF%VeloVecIC) END IF SF%MWTemperatureIC = GETREAL('Part-Species'//TRIM(hilf2)//'-MWTemperatureIC') SF%PartDensity = GETREAL('Part-Species'//TRIM(hilf2)//'-PartDensity') @@ -779,7 +755,7 @@ SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp) ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -INTEGER :: iReac, CatBoundNum +INTEGER :: iReac INTEGER :: TmpMapToBC(1:nDataBC), TmpSideStart(1:nDataBC), TmpSideNumber(1:nDataBC), TmpSideEnd(1:nDataBC) ! PartBC, Start of Linked List for Sides in SurfacefluxBC, Number of Particles in Sides in SurfacefluxBC, End of Linked List for Sides in SurfacefluxBC INTEGER :: TmpSideNext(1:nBCSides) !Next: Sides of diff. BCs ar not overlapping! @@ -851,13 +827,10 @@ SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp) END DO END DO - CatBoundNum = SurfChemReac%CatBoundNum - DO iSF=1,CatBoundNum + DO iSF=1,SurfChemReac%CatBoundNum IF (TmpMapToBC(iBC).EQ.SurfChemReac%Surfaceflux(iSF)%BC) THEN !only surfacefluxes with iBC ALLOCATE(SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(SurfFluxSideSize(1),SurfFluxSideSize(2),1:TmpSideNumber(iBC))) - IF(RadialWeighting%DoRadialWeighting) THEN - ALLOCATE(SurfChemReac%Surfaceflux(iSF)%nVFRSub(1:TmpSideNumber(iBC),1:RadialWeighting%nSubSides)) - END IF + ALLOCATE(SurfChemReac%SFAux(iSF)%a_nIn(SurfFluxSideSize(1),SurfFluxSideSize(2),1:TmpSideNumber(iBC),nSpecies)) END IF END DO @@ -1309,9 +1282,9 @@ SUBROUTINE InitSurfChemFlux(iSF, iSide, tmp_SubSideAreas, BCdata_auxSFTemp) ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -INTEGER :: iSpec, iReac, SurfNumReac -INTEGER :: jSample, iSample, iSub, currentBC, BCSideID -REAL :: vec_nIn(3), nVFR, vec_t1(3), vec_t2(3), projFak, v_thermal, a, vSF +INTEGER :: iSpec, iReac +INTEGER :: jSample, iSample, currentBC, BCSideID +REAL :: vec_nIn(3), vec_t1(3), vec_t2(3), projFak, v_thermal, a !=================================================================================================================================== currentBC = SurfChemReac%Surfaceflux(iSF)%BC BCSideID=BCdata_auxSF(currentBC)%SideList(iSide) @@ -1325,40 +1298,20 @@ SUBROUTINE InitSurfChemFlux(iSF, iSide, tmp_SubSideAreas, BCdata_auxSFTemp) projFak = 1. END IF - ALLOCATE(SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%nVFR(nSpecies)) - ALLOCATE(SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%a_nIn(nSpecies)) - - DO iSpec=1,nSpecies + DO iSpec=1,nSpecies v_thermal = SQRT(2.*BoltzmannConst*SurfChemReac%Surfaceflux(iSF)%MWTemperatureIC/Species(iSpec)%MassIC) !thermal speed a = 0 !dummy for projected speed ratio in constant v-distri !-- compute total volume flow rate through surface SELECT CASE(TRIM(SurfChemReac%Surfaceflux(iSF)%velocityDistribution)) CASE('constant') - vSF = SurfChemReac%Surfaceflux(iSF)%VeloIC * projFak !Velo proj. to inwards normal - nVFR = MAX(tmp_SubSideAreas(iSample,jSample) * vSF,0.) !VFR proj. to inwards normal (only positive parts!) CASE('maxwell','maxwell_lpn') a = SurfChemReac%Surfaceflux(iSF)%VeloIC * projFak / v_thermal !speed ratio proj. to inwards n (can be negative!) - vSF = v_thermal / (2.0*SQRT(PI)) * ( EXP(-(a*a)) + a*SQRT(PI)*(1+ERF(a)) ) !mean flux velocity through normal sub-face - nVFR = tmp_SubSideAreas(iSample,jSample) * vSF !VFR projected to inwards normal of sub-side - - IF(RadialWeighting%DoRadialWeighting) THEN - nVFR = nVFR / BCdata_auxSFTemp(currentBC)%WeightingFactor(iSide) - DO iSub = 1, RadialWeighting%nSubSides - IF(ABS(BCdata_auxSFTemp(currentBC)%SubSideWeight(iSide,iSub)).GT.0.)THEN - SurfChemReac%Surfaceflux(iSF)%nVFRSub(iSide,iSub) = BCdata_auxSFTemp(currentBC)%SubSideArea(iSide,iSub) & - * vSF / BCdata_auxSFTemp(currentBC)%SubSideWeight(iSide,iSub) - END IF - END DO - END IF! DoRadialWeighting CASE DEFAULT CALL abort(__STAMP__,& 'ERROR in SurfaceFlux: Wrong velocity distribution!') END SELECT - - SurfChemReac%Surfaceflux(iSF)%VFR_total = SurfChemReac%Surfaceflux(iSF)%VFR_total + nVFR - !-- store SF-specific SubSide data in SurfFluxSubSideData (incl. projected velos) - SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%nVFR(iSpec) = nVFR - SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%a_nIn(iSpec) = a + !-- store species-specific data in separate arrays to be able to re-use the surface flux types + SurfChemReac%SFAux(iSF)%a_nIn(iSample,jSample,iSide,iSpec) = a END DO !iSpec SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%projFak = projFak @@ -1410,6 +1363,8 @@ SUBROUTINE ReadInAndPrepareSurfChemFlux(nDataBC) !=================================================================================================================================== CatBoundNum = SurfChemReac%CatBoundNum ALLOCATE(SurfChemReac%SurfaceFlux(1:CatBoundNum)) +! Type for variables different from the regular surface flux type +ALLOCATE(SurfChemReac%SFAux(1:CatBoundNum)) ! Initialize Surfaceflux to BC mapping SurfChemReac%Surfaceflux(:)%BC=-1 @@ -1426,15 +1381,9 @@ SUBROUTINE ReadInAndPrepareSurfChemFlux(nDataBC) SurfChemReac%Surfaceflux(iSF)%AcceptReject=.FALSE. END IF - SurfChemReac%Surfaceflux(iSF)%InsertedParticle = 0 - SurfChemReac%Surfaceflux(iSF)%VFR_total = 0 - SurfChemReac%Surfaceflux(iSF)%VFR_total_allProcsTotal = 0 - ! get surfaceflux data IF (SurfChemReac%Surfaceflux(iSF)%BC.LT.1 .OR. SurfChemReac%Surfaceflux(iSF)%BC.GT.nPartBound) THEN - CALL abort(& -__STAMP__& -, 'SurfacefluxBCs must be between 1 and nPartBound!') + CALL abort(__STAMP__, 'Chemistry Surfaceflux BCs must be between 1 and nPartBound!') ELSE IF (BCdata_auxSF(SurfChemReac%Surfaceflux(iSF)%BC)%SideNumber.EQ. -1) THEN !not set yet BCdata_auxSF(SurfChemReac%Surfaceflux(iSF)%BC)%SideNumber=0 nDataBC=nDataBC+1 @@ -1448,6 +1397,7 @@ SUBROUTINE ReadInAndPrepareSurfChemFlux(nDataBC) END SUBROUTINE ReadInAndPrepareSurfChemFlux + SUBROUTINE ReadInThermionicEmission(iSpec,iSF) !=================================================================================================================================== !> Thermionic emission model: Read-in of work function and Richardson constant and calculation of the current density diff --git a/src/particles/emission/particle_surface_flux_vars.f90 b/src/particles/emission/particle_surface_flux_vars.f90 index c34b4475b..38a6316c7 100644 --- a/src/particles/emission/particle_surface_flux_vars.f90 +++ b/src/particles/emission/particle_surface_flux_vars.f90 @@ -37,7 +37,7 @@ MODULE MOD_Particle_SurfaceFlux_Vars ! (1:2,0:NGeo,0:NGeo) END TYPE tSurfFluxSubSideData -TYPE typeSurfaceflux +TYPE tSurfaceFlux INTEGER :: BC ! PartBound to be emitted from CHARACTER(30) :: velocityDistribution ! specifying keyword for velocity distribution REAL :: VeloIC ! velocity for inital Data diff --git a/src/particles/particle_vars.f90 b/src/particles/particle_vars.f90 index 60854a999..6de2463a7 100644 --- a/src/particles/particle_vars.f90 +++ b/src/particles/particle_vars.f90 @@ -133,7 +133,7 @@ MODULE MOD_Particle_Vars REAL :: MassIC ! Particle Mass (without MPF) REAL :: MacroParticleFactor ! Number of Microparticle per Macroparticle INTEGER :: NumberOfInits ! Number of different initial particle placements - TYPE(typeSurfaceflux),ALLOCATABLE :: Surfaceflux(:) ! Particle Data for each SurfaceFlux emission + TYPE(tSurfaceFlux),POINTER :: Surfaceflux(:) ! Particle Data for each SurfaceFlux emission INTEGER :: nSurfacefluxBCs ! Number of SF emissions #if IMPA LOGICAL :: IsImplicit @@ -248,7 +248,6 @@ PPURE INTEGER FUNCTION ElemID_INTERFACE(iPart) LOGICAL :: DoSurfaceFlux ! Flag for emitting by SurfaceFluxBCs LOGICAL :: DoPoissonRounding ! Perform Poisson sampling instead of random rounding LOGICAL :: DoTimeDepInflow ! Insertion and SurfaceFlux w simple random rounding -LOGICAL :: DoZigguratSampling ! Sample normal randoms with Ziggurat method TYPE tVariableTimeStep LOGICAL :: UseVariableTimeStep diff --git a/src/particles/surfacemodel/surfacemodel_init.f90 b/src/particles/surfacemodel/surfacemodel_init.f90 index c64661123..f5fd7a816 100644 --- a/src/particles/surfacemodel/surfacemodel_init.f90 +++ b/src/particles/surfacemodel/surfacemodel_init.f90 @@ -234,7 +234,8 @@ SUBROUTINE FinalizeSurfaceModel() SDEALLOCATE(ChemWallProp) #endif -SDEALLOCATE(SurfChemReac%Surfaceflux) +SNULLIFY(SurfChemReac%Surfaceflux) +SDEALLOCATE(SurfChemReac%SFAux) SDEALLOCATE(SurfModEmissionEnergy) SDEALLOCATE(SurfModEmissionYield) diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90 index 41f0fc5d0..da76c5d4e 100644 --- a/src/particles/surfacemodel/surfacemodel_vars.f90 +++ b/src/particles/surfacemodel/surfacemodel_vars.f90 @@ -18,7 +18,8 @@ MODULE MOD_SurfaceModel_Vars ! MODULES ! IMPLICIT VARIABLE HANDLING -USE MOD_DSMC_Vars, ONLY:tCollCaseInfo +USE MOD_DSMC_Vars ,ONLY: tCollCaseInfo +USE MOD_Particle_SurfaceFlux_Vars ,ONLY: tSurfaceFlux IMPLICIT NONE PUBLIC @@ -71,7 +72,7 @@ MODULE MOD_SurfaceModel_Vars CHARACTER(LEN=255),ALLOCATABLE :: ReactType(:) ! Type of Reaction (reaction num) ! A (adsorption) ! D (desorption) - ! LH (Langmuir-Hinshlewood) + ! LH (Langmuir-Hinshelwood) ! LHD (LH with instant desorption) ! ER (Eley-Rideal) INTEGER, ALLOCATABLE :: Reactants(:,:) ! Reactants: indices of the species starting the reaction [NumOfReact,3] @@ -106,45 +107,15 @@ MODULE MOD_SurfaceModel_Vars TYPE(tBoundMap), ALLOCATABLE :: BoundMap(:) ! Map of the reactions to the boundaries TYPE(tPureSurf), ALLOCATABLE :: PSMap(:) ! Map for reactions occurring only on the surface TYPE(tCollCaseInfo), ALLOCATABLE :: CollCaseInfo(:) ! Information of collision cases (nCase) - TYPE(tSurfaceflux), ALLOCATABLE :: SurfaceFlux(:) ! Surface flux data + TYPE(tSurfaceFlux), POINTER :: SurfaceFlux(:) ! Surface flux data (using the regular surface flux type) + TYPE(tSFAux), ALLOCATABLE :: SFAux(:) ! Additional surface flux data, where variables differ from the regular surface flux type END TYPE TYPE(tSurfReactions) :: SurfChemReac -TYPE tSurfaceflux ! Surface flux properties on reactive boundaries - INTEGER :: BC ! Catalytic boundary - CHARACTER(30) :: velocityDistribution ! keyword for the velocity distribution - REAL :: VeloIC ! velocity for inital Data - REAL :: VeloVecIC(3) ! normalized velocity vector - REAL :: MWTemperatureIC ! Temperature for Maxwell Distribution - LOGICAL :: VeloIsNormal ! VeloIC is in Surf-Normal instead of VeloVecIC - LOGICAL :: AcceptReject ! perform ARM for skewness of RefMap-positioning - INTEGER :: ARM_DmaxSampleN ! number of sample intervals in xi/eta for Dmax-calc. - REAL :: VFR_total ! Total Volumetric flow rate through surface - REAL , ALLOCATABLE :: VFR_total_allProcs(:) ! -''-, all values for root in ReduceNoise-case - REAL :: VFR_total_allProcsTotal ! -''-, total - REAL :: totalAreaSF ! Total area of the respective surface flux - INTEGER(KIND=8) :: InsertedParticle ! Number of all already inserted Particles - INTEGER(KIND=8) :: tmpInsertedParticle ! tmp Number of all already inserted Particles - INTEGER(KIND=8) :: tmpInsertedParticleSurplus ! tmp Number of all already inserted Particles - TYPE(tSurfFluxSubSideData), ALLOCATABLE :: SurfFluxSubSideData(:,:,:) ! SF-specific Data of Sides (1:N,1:N,1:SideNumber) - INTEGER :: dir(3) ! axial (1) and orth. coordinates (2,3) of polar system - REAL :: origin(2) ! origin in orth. coordinates of polar system - REAL :: rmax ! max radius of to-be inserted particles - REAL :: rmin ! min radius of to-be inserted particles - LOGICAL :: Adaptive ! Is the surface flux an adaptive boundary? - INTEGER :: AdaptiveType ! Chose the adaptive type, description in DefineParams - REAL, ALLOCATABLE :: nVFRSub(:,:) ! normal volume flow rate through subsubside +TYPE tSFAux + REAL, ALLOCATABLE :: a_nIn(:,:,:,:) ! Speed ratio projected to inwards normal (additionally to regular surface flux variable due to missing species dependency) END TYPE -TYPE tSurfFluxSubSideData ! Reactive surface flux sub sides - REAL :: projFak ! VeloVecIC projected to inwards normal - REAL :: Velo_t1 ! Velo comp. of first orth. vector - REAL :: Velo_t2 ! Velo comp. of second orth. vector - REAL :: Dmax ! maximum Jacobian determinant of subside for opt. ARM - REAL,ALLOCATABLE :: nVFR(:) ! normal volume flow rate through subside - REAL,ALLOCATABLE :: a_nIn(:) ! speed ratio projected to inwards normal -END TYPE tSurfFluxSubSideData - REAL,ALLOCATABLE :: ChemSampWall(:,:,:,:,:) ! Sampling direct impact mechanism REAL,ALLOCATABLE :: ChemDesorpWall(:,:,:,:,:) ! Desorption numbers REAL,ALLOCPOINT :: ChemWallProp(:,:,:,:,:) ! Adsorption count / heat flux From f228c54b0b60cffcd9dd3c0a5aa9067a76dada1d Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 31 Oct 2022 19:37:30 +0100 Subject: [PATCH 048/222] Bugfix for read-in of SurfChemFlux boundaries --- .../emission/particle_surface_chemflux.f90 | 4 +- .../surfacemodel/surfacemodel_chemistry.f90 | 40 +++++++++---------- .../surfacemodel/surfacemodel_init.f90 | 2 +- .../surfacemodel/surfacemodel_main.f90 | 2 +- .../surfacemodel/surfacemodel_vars.f90 | 2 +- 5 files changed, 23 insertions(+), 27 deletions(-) diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index f973e8f84..e2a0c01ce 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -156,7 +156,7 @@ SUBROUTINE ParticleSurfChemFlux() END DO ! Determine the reaction energy in dependence of the surface coverage [J] - BetaCoeff = SurfChemReac%HeatAccomodation(iReac) + BetaCoeff = SurfChemReac%HeatAccommodation(iReac) ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) * BoltzmannConst nu = SurfChemReac%Prefactor(iReac) @@ -229,7 +229,7 @@ SUBROUTINE ParticleSurfChemFlux() END DO ! Determine the reaction energy in dependence of the surface coverage [J] - BetaCoeff = SurfChemReac%HeatAccomodation(iReac) + BetaCoeff = SurfChemReac%HeatAccommodation(iReac) ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) * BoltzmannConst nu = SurfChemReac%Prefactor(iReac) diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index 6bb68db7a..c012b2a7f 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -60,8 +60,8 @@ SUBROUTINE DefineParametersSurfaceChemistry() 'Heat flux to or from the surface due to the reaction', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-HeatScaling', & 'Linear dependence of the heat flux on the coverage', '0.' , numberedmulti=.TRUE.) -CALL prms%CreateRealOption( 'Surface-Reaction[$]-EnergyAccomodation', & - 'Energy accomodation coefficient', '0.' , numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Surface-Reaction[$]-EnergyAccommodation', & + 'Energy accommodation coefficient', '0.' , numberedmulti=.TRUE.) CALL prms%CreateIntOption( 'Surface-Reaction[$]-Inhibition','Inhibition/Coadsorption behaviour due to other reactions', & '0', numberedmulti=.TRUE.) CALL prms%CreateIntOption( 'Surface-Reaction[$]-Promotion','Promotion/Coadsorption behaviour due to other reactions', & @@ -71,7 +71,7 @@ SUBROUTINE DefineParametersSurfaceChemistry() CALL prms%CreateRealOption( 'Surface-Reaction[$]-DissOrder', & 'Associative = 1, dissociative = 2', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-EqConstant', & - 'Equilibrium constant between the adsorption and desorption (K), Langmuir: K=1', '0.' , numberedmulti=.TRUE.) + 'Equilibrium constant between the adsorption and desorption (K), Langmuir: K=1', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-LateralInteraction', & 'Interaction between neighbouring particles (W), Edes = E0 + W*Coverage', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-Ca', & @@ -81,15 +81,13 @@ SUBROUTINE DefineParametersSurfaceChemistry() CALL prms%CreateRealOption( 'Surface-Reaction[$]-Prefactor', & 'Arrhenius prefactor for the reaction/desorption', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-Energy', & - 'Arrhenius energy for the reaction/desorption', '0.' , numberedmulti=.TRUE.) + 'Arrhenius energy for the reaction/desorption', '0.' , numberedmulti=.TRUE.) CALL prms%CreateLogicalOption( 'Surface-Diffusion', 'Diffusion along the surface', '.FALSE.') CALL prms%CreateLogicalOption( 'Surface-TotalDiffusion', 'Diffusion along all possible surface', '.FALSE.') -CALL prms%CreateIntOption( 'Surface-Reaction[$]-NumOfBoundaries', & - 'Num of boundaries for surface reaction.', & - numberedmulti=.TRUE.) -CALL prms%CreateIntArrayOption( 'Surface-Reaction[$]-Boundaries' & - ,'Array of boundary indices of surface reaction.' & - ,numberedmulti=.TRUE.) +CALL prms%CreateIntOption( 'Surface-Reaction[$]-NumOfBoundaries', 'Num of boundaries for surface reaction.', & + numberedmulti=.TRUE.) +CALL prms%CreateIntArrayOption( 'Surface-Reaction[$]-Boundaries', 'Array of boundary indices of surface reaction.', & + numberedmulti=.TRUE., no=0) END SUBROUTINE DefineParametersSurfaceChemistry SUBROUTINE SurfaceModel_Chemistry_Init() @@ -203,8 +201,8 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%EReact = 0.0 ALLOCATE(SurfChemReac%EScale(SurfChemReac%NumOfReact)) SurfChemReac%EScale = 0.0 -ALLOCATE(SurfChemReac%HeatAccomodation(SurfChemReac%NumOfReact)) -SurfChemReac%HeatAccomodation = 0.0 +ALLOCATE(SurfChemReac%HeatAccommodation(SurfChemReac%NumOfReact)) +SurfChemReac%HeatAccommodation = 0.0 ! Get the reaction names, reactive species and boundaries DO iReac = 1, ReadInNumOfReact @@ -215,9 +213,7 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%NumOfBounds(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-NumOfBoundaries','0') IF (SurfChemReac%NumOfBounds(iReac).EQ.0) THEN - CALL abort(& - __STAMP__& - ,'ERROR: At least one boundary must be defined for each surface reaction!',iReac) + CALL abort(__STAMP__,'ERROR: At least one boundary must be defined for each surface reaction!',iReac) END IF SurfChemReac%BoundMap(iReac)%Boundaries = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Boundaries', & @@ -226,13 +222,13 @@ SUBROUTINE SurfaceModel_Chemistry_Init() PartBound%SurfaceModel(SurfChemReac%BoundMap(iReac)%Boundaries) = 20 DO iReac2 = 1, SurfChemReac%NumOfBounds(iReac) - SurfChemReac%BoundisChemSurf(SurfChemReac%BoundMap(iReac)%Boundaries(iReac2)) = .TRUE. + SurfChemReac%BoundisChemSurf(SurfChemReac%BoundMap(iReac)%Boundaries(iReac2)) = .TRUE. END DO ! Select pure surface reactions DO iVal = 1, SurfChemReac%NumOfBounds(iReac) - iBound = SurfChemReac%BoundMap(iReac)%Boundaries(iVal) - SurfChemReac%PSMap(iBound)%PureSurfReac(iReac) = .TRUE. + iBound = SurfChemReac%BoundMap(iReac)%Boundaries(iVal) + SurfChemReac%PSMap(iBound)%PureSurfReac(iReac) = .TRUE. END DO END DO @@ -297,11 +293,11 @@ SUBROUTINE SurfaceModel_Chemistry_Init() ELSE SurfChemReac%EScale(iReac)= 0. END IF - CALL AttributeExists(file_id_specdb,'EnergyAccomodation',TRIM(dsetname), AttrExists=Attr_Exists) + CALL AttributeExists(file_id_specdb,'EnergyAccommodation',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'EnergyAccomodation',1,DatasetName = dsetname,RealScalar=SurfChemReac%HeatAccomodation(iReac)) + CALL ReadAttribute(file_id_specdb,'EnergyAccommodation',1,DatasetName = dsetname,RealScalar=SurfChemReac%HeatAccommodation(iReac)) ELSE - SurfChemReac%HeatAccomodation(iReac)= 0. + SurfChemReac%HeatAccommodation(iReac)= 0. END IF SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) @@ -436,7 +432,7 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%Promotion(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-Promotion','0') SurfChemReac%EReact(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-ReactHeat','0.') SurfChemReac%EScale(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-HeatScaling','0.') - SurfChemReac%HeatAccomodation(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EnergyAccomodation','1.') + SurfChemReac%HeatAccommodation(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EnergyAccommodation','1.') SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) CASE('A') diff --git a/src/particles/surfacemodel/surfacemodel_init.f90 b/src/particles/surfacemodel/surfacemodel_init.f90 index c9a4afcfa..044345fda 100644 --- a/src/particles/surfacemodel/surfacemodel_init.f90 +++ b/src/particles/surfacemodel/surfacemodel_init.f90 @@ -200,7 +200,7 @@ SUBROUTINE FinalizeSurfaceModel() SDEALLOCATE(SurfChemReac%Promotion) SDEALLOCATE(SurfChemReac%EReact) SDEALLOCATE(SurfChemReac%EScale) -SDEALLOCATE(SurfChemReac%HeatAccomodation) +SDEALLOCATE(SurfChemReac%HeatAccommodation) SDEALLOCATE(SurfChemReac%BoundisChemSurf) SDEALLOCATE(SurfChemReac%NumOfBounds) SDEALLOCATE(SurfChemReac%BoundMap) diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index f6d1ded2c..ddce49c53 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -295,7 +295,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) nu = SurfChemReac%Prefactor(iReac) E_act = SurfChemReac%ArrheniusEnergy(iReac) Rate = SurfChemReac%Rate(iReac) - BetaCoeff = SurfChemReac%HeatAccomodation(iReac) + BetaCoeff = SurfChemReac%HeatAccommodation(iReac) ! Check for the coverage values of the reactant adsorbed on the surface IF(ANY(SurfChemReac%Reactants(iReac,:).NE.speciesID)) THEN diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90 index da76c5d4e..183dfa3be 100644 --- a/src/particles/surfacemodel/surfacemodel_vars.f90 +++ b/src/particles/surfacemodel/surfacemodel_vars.f90 @@ -83,7 +83,7 @@ MODULE MOD_SurfaceModel_Vars ! Surface energy accomodation REAL, ALLOCATABLE :: EReact(:) ! Reaction energy [K] REAL, ALLOCATABLE :: EScale(:) ! Scaling factor for E_reac [K] - REAL, ALLOCATABLE :: HeatAccomodation(:) ! Beta coefficient for the energy accomodation + REAL, ALLOCATABLE :: HeatAccommodation(:) ! Beta coefficient for the energy accomodation ! Parameters for the adsorption REAL, ALLOCATABLE :: S_initial(:) ! Initial sticking coefficient at zero coverage REAL, ALLOCATABLE :: MaxCoverage(:) ! Maximal surface coverage From 68e3b7b6656f082ad18e9c6ef23714f4ab031262 Mon Sep 17 00:00:00 2001 From: Simone Lauterbach Date: Wed, 2 Nov 2022 10:19:04 +0100 Subject: [PATCH 049/222] Update regressioncheck --- .../PartAnalyze_ref.csv | 10 +++--- ...ge_DSMCSurfChemState_000.0000000100_ref.h5 | Bin 8576 -> 8576 bytes .../parameter.ini | 31 ++++++++++-------- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/PartAnalyze_ref.csv b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/PartAnalyze_ref.csv index 89af6c196..86e820b34 100644 --- a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/PartAnalyze_ref.csv +++ b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/PartAnalyze_ref.csv @@ -1,7 +1,7 @@ 001-TIME,002-NumDens-Spec-001,003-NumDens-Spec-002,004-NumDens-Spec-003,005-TempTra-001,006-TempTra-002,007-TempTra-003,008-TempVib001,009-TempVib002,010-XiVibMean001,011-XiVibMean002,012-TempRot001,013-TempRot002,014-TempTotal001,015-TempTotal002,016-TempTotal003 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.2000000000000000E-008,0.6338437499999762E+024,0.6331381249999761E+025,0.6965224999999738E+025,0.6411018430774229E+003,0.8215923504537280E+003,0.8051674998516585E+003,0.7274124038992940E+003,0.7218929792236388E+003,0.1192092930091866E+000,0.2823856911626711E+000,0.6953227826980432E+003,0.7097399937898869E+003,0.6642950538606160E+003,0.7739134409787291E+003,0.7639380375194156E+003 -0.4000000000000000E-008,0.9390499999999646E+024,0.1116445624999958E+026,0.1210350624999954E+026,0.7920040716494817E+003,0.8629059589921339E+003,0.8574050391814702E+003,0.7224481216989512E+003,0.7236838187935817E+003,0.1164946797142770E+000,0.2839897173776707E+000,0.7558464562377324E+003,0.7822090077092306E+003,0.7762866451750542E+003,0.8248794734082016E+003,0.8211094009672231E+003 -0.6000000000000001E-008,0.1105924999999958E+025,0.1425326249999946E+026,0.1535918749999942E+026,0.7946388375065911E+003,0.8372215666359040E+003,0.8341554340873993E+003,0.7217534227049695E+003,0.7261782356300544E+003,0.1161165015475386E+000,0.2862242425162172E+000,0.7753045385010607E+003,0.8068128845430016E+003,0.7854264207491913E+003,0.8197042133717990E+003,0.8172360705871525E+003 -0.8000000000000000E-008,0.1177737499999956E+025,0.1643612499999938E+026,0.1761386249999934E+026,0.7954213044069562E+003,0.8219046188858503E+003,0.8201338322349333E+003,0.7265138557017924E+003,0.7285897182378201E+003,0.1187163700829218E+000,0.2883847600292976E+000,0.7843800638176004E+003,0.8104678894112716E+003,0.7895090949441425E+003,0.8124907701515494E+003,0.8109541179434046E+003 -0.1000000000000000E-007,0.1188306249999955E+025,0.1772683749999933E+026,0.1891514374999929E+026,0.7821143706389221E+003,0.8062653730135906E+003,0.8047481343689949E+003,0.7269346934650727E+003,0.7307497737871059E+003,0.1189471462161827E+000,0.2903201994961861E+000,0.7801574554084691E+003,0.8027645411393565E+003,0.7800676029559211E+003,0.8007977705830742E+003,0.7994954390713249E+003 +0.2000000000000000E-008,0.6409624999999758E+024,0.6631524999999750E+025,0.7272487499999725E+025,0.6815872170430431E+003,0.8824253619469796E+003,0.8647244419449872E+003,0.7225821814892017E+003,0.7257629927273007E+003,0.1165677072977680E+000,0.2858522406907835E+000,0.7080556000304019E+003,0.7219936106474395E+003,0.6928673286906699E+003,0.8132509364763449E+003,0.8026408971733794E+003 +0.4000000000000000E-008,0.9575249999999638E+024,0.1175958749999956E+026,0.1271711249999952E+026,0.8149782996257045E+003,0.8826386756932485E+003,0.8775442408052915E+003,0.7202142379403197E+003,0.7270335272970252E+003,0.1152801118442669E+000,0.2869904946671936E+000,0.7714351986371928E+003,0.8036052433284530E+003,0.7958179386163454E+003,0.8442947324905765E+003,0.8406447103605983E+003 +0.6000000000000001E-008,0.1111299999999958E+025,0.1499172499999943E+026,0.1610302499999939E+026,0.8083163249007499E+003,0.8509890487971761E+003,0.8480441239730454E+003,0.7271171674117081E+003,0.7299620269191739E+003,0.1190472570419864E+000,0.2896143507007087E+000,0.7915451609800861E+003,0.8292297647041139E+003,0.7998755228051884E+003,0.8361354648994852E+003,0.8336330981920255E+003 +0.8000000000000000E-008,0.1168799999999956E+025,0.1683772499999936E+026,0.1800652499999932E+026,0.7976507726711646E+003,0.8293348066204077E+003,0.8272782022017386E+003,0.7289417960659334E+003,0.7324402728806613E+003,0.1200498621959230E+000,0.2918349982670587E+000,0.7878141232266238E+003,0.8228387801239928E+003,0.7921973488152126E+003,0.8215361377102148E+003,0.8196317626872452E+003 +0.1000000000000000E-007,0.1186424999999955E+025,0.1792024999999932E+026,0.1910667499999928E+026,0.7921101853410606E+003,0.8114448112392162E+003,0.8102442316757275E+003,0.7273262887523593E+003,0.7340617774491647E+003,0.1191620223723783E+000,0.2932880233662640E+000,0.7861961400645225E+003,0.8080993190533446E+003,0.7882916168717842E+003,0.8058931576612528E+003,0.8048001936562050E+003 diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/coverage_DSMCSurfChemState_000.0000000100_ref.h5 b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/coverage_DSMCSurfChemState_000.0000000100_ref.h5 index 27fff07c82dbab687ee256a8b1d86fa4213eeb2f..390d175c28a4375a10845334d7df3e4591990bda 100644 GIT binary patch literal 8576 zcmeHLdsGzH8K31P3J9oCpjKBA6Hwk!SA4J+mK7=x>M9}S$g(U0?940>c2P*sO4I;? zqDHX9pkjQWsQ9QvfdX1IpcIKYKB5vMrBD-2g=(})3%xTt!`18Ykeue6{;>?_%)R@~ zx4-+l-}k%Uw?kgAOl~vAX$-+$mX?GWVaH8{+aQ0fn`W>GpM~eK{6xf$x%^meVwi{^ z9{bFJx7+dfVpHB=V;Gk&3ko8jr+_bvycgkRZzA`lz|BG?T_@w*oE)Wqvd z2!)M*|;-E!@CH!+BBGOV4(^OhwJmfP7*AR&e zD+}ujV?;<`s7fa`){C$vBz)Y)aB-7s7*e@BGnM4?GF<#*im*U7$AL+tR-sqvN#ly- z3-PlNbVreDy)s;-n$|2<8^1?02-G;at)8vJ`*u%L4 z!JczvGJDb$Ds3twln25NCdbSWC+_~bya@Hyng}-d5o2G(O(oSDQU{;>R6L>0AUr#S z7ns5@8eLdQJo!K1jplR{M(UDSO>(5+jn$1c9ACFjb$T4B)WR=$B+X&JgZPya@agXhA37TQz60j3S%$fDmeQd!v0Q+RHd=4Qpf*Jd?kLuYl$!_V5RW# z@>T{KXWukz-^W`ja_4wd`{fkqHOQo?&)kDiZUrfU%=_3fwRb`m-17V>KsEP4Ij<<1cVi zguf#bL3G0^1R;L;-zC4m3L_9B5g3WUNCZYAFcN|Pe+1NKm3@z0s{IX2+Wh|r3QHZ=7I(!m*m}=s6RVo-#=gDcbuUBj^k!hzIiRg`A5sIV}Iv^ z@OzZs-_8kSK%QITnfnC@$9bS<$#)-9;M2z0RM$P^A7FLXQ}&zz{$E5KEX+lG;t$7O z$A3R5ujV5B3QuX1(<}lzfpH+ zU>^4`dDc4QpWl}o)|5$sT#V<<_4!TTLY^IEAGB_|gw|cge?>UOJ9Op+ z9TX66`$NaRX~=(2q0N8jOoOfOjry&n2ePMkF038&qCutO#^z_;$SxkUM&$M*4SY{4 zK9eYry*mBPBL65FWEK^))-OhR*_8Irr+ExYY!^km5WPH}ly` z!XNHtfXFktY~V1$S?Y7c8t9s zeh8<1edR}vi)oOB@pR9zXt)n~hJIre>r#z$>sx=V(7ap&DnqBItgb`&vvMBC$!cEB zS6q>%i-Gz2Tj`oc-)(5!JvFh{1M|5>LT?DgnT3&kLD>KBY$b3t@k1m2B;Qq+OoFNR-)^~AbCvbOmG;=jFOs&(IAXz=d7_fJF|M>rYF z)@F~r!~h%2|FnKugheY2QZfCLUpg0`gZj_7J~py-1H#|eR~NsxfCf*nysT^+2;U9! zQi+|5%<`>uR`6UD&ZH_fy^Hv)_O*Mzl44%T@0la_t3HJ|ZkP`H_FPcUggX2H>lfSa z67j~df+Oj7kb zMNrQ>v3`-%cb<9%`^9d|{`gqTp$=$Yg6YKCx3SR0S|99Ts5$o5h25#KE4*Rti aR)?pm4xX}rb=ViHOHSiIOq>Jj(tiQ%WEkWC delta 2449 zcmYM0c_3F=8^=?&7I~RrB$a59L<|v`$3eU_WNT89H6x{jG%Z|-oRlbAB-xizOo-fj zF-lRwwG3q@B}+9F(L&PPa=h>F&-1(Y+~<70-{fG zQeCb^Pyb^eLJb|R3}`E(VQa^tWBfYo37onZgG(FdN9+) z7$g4~H~KFP(cpfHVfJKmP-}cu;_f1hc5aep{lBpA(t7o3?gj^a4|5&di!gfgp=x+l z3Iny5qZ&&KI2cwxRzAxPBcnC;V(Vrx6!fh1&JU^OUnm$ixM7G$-(DO&bIqmjFd!D&CHTn`1RWXC=OC~+nsHU#OUNT+ew*2ESR;+ zyVzuKkQEZsrFqt*Jp}1INLNEHM%HY>f2Ee)3vq z&w`?VUynx*2XYQ7spuw;dc6GCG8GnC0iGca$4qA3q7G>-g8mW zR_}x#Xo!OHwGsDFh6DSj5njR%F~|TFft&hr=K^v z_JdkTJTHxzoN1pA3ju_*O_PlGy+n+RsbjYW+)Np$C#XwIi~Tn0W3+vL>ztN$8m7@D zYc3gW<-PK>O-LtpF9Xks8DrOM@<`G6zpJO8-|%r)s8cdVVgc2AgHEuZM?6$de>vK4 z0V731l+q@De5fq$b+*RHH>k+X+t;GUs{cIW}h>4<#Tdp+8VAPfFd0sl6g%sim zyQ(y=CCwPMW$#M%en7)^QmBmDGI>uWjD%|xf6l+h!eY_|ZuFT+n-~fs^Q+r%#0v(Z zuO12z=-{9vLcq?A&x2SJMD+X{ZwKNzXtVN68wEb;W+zp)D_6jLQs_#@_vhcl@mdn? zH3`w^gc)5jAsDHVwp?ps6dE4EfowISRq29J=GX3^_~a5MZ4>_^8`ORZqw%;Cg<&gL zFeU*qe^=B@sl9woXd4~Y>7hY`n9`$cZA!_i}7r5$y)48-u#P+zsVdu&yDp)N+<@9rMGD9*qmV#eCeq2hE^j23L4 z)M$`mpptClJLYvfkDmpDAvu=fBP`Hl-AEk&nehik1vB#AGUlf>wAiSg)}ItDt(0UTbKmAdfe9Xpw6@1exN zToS$i4O(z9R}mwjBh=LN8zX%@(V(RgXu`J#aqnt^+9xf3&81cRhlwYwKR)S7jpV@h z)hq3Fd`|4xpuKC001H-RefaiB#*hUs0YN?O2??iJOAXC1(k8>njv_97-IyX4T8>e= z`p;uF@+=IJf;Q%=uctHlKF)KJoY=;I3MuH&@88>)@h9_Jz2&gCLj}wu-J$F(D4EoN zQ71vILp(J3OXr?}K;EPUznp)zh=vqmc1p5TL_=H(qvgbvo^T+|$N8KYS;Q}>3Qgv6&Ey#|R3F|sB5 zu%w&DZ$7rQ{RvYj^-bfal1(g>kpRgb@Q60Lg3*Y_^Y5L)82CUg6rcPvO!rw~q)ZB> z$@8|&jXELMFcLp9C8aANs;t>j7shKWN(wqbqIZRO+;uH;jB>t7$q$wLq$2s;{VgMW ze`hIpr~RnF&jLb1*~9p*z(#(Wk#&k}gi>NaiodWNn<)O Date: Wed, 16 Nov 2022 23:37:33 +0100 Subject: [PATCH 050/222] Minor changes --- src/particles/surfacemodel/surfacemodel_main.f90 | 11 +++++------ src/particles/surfacemodel/surfacemodel_vars.f90 | 4 ++-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index ddce49c53..fe50eab4b 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -255,7 +255,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) StickCoeff = SurfChemReac%StickCoeff(iReac) ! Determine the heat of adsorption in dependence of the coverage [J] - AdsHeat = (SurfChemReac%EReact(iReac) - Coverage * SurfChemReac%EScale(iReac)) * BoltzmannConst + AdsHeat = (SurfChemReac%EReact(iReac) - Coverage * SurfChemReac%EScale(iReac)) * BoltzmannConst ! Theta = free surface sites required for the adsorption ! Determination of possible coadsorption processes @@ -366,11 +366,10 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) END DO !iReac ! 3.) Choose the occuring pathway by comparison with a random number - CALL RANDOM_NUMBER(RanNum) - CALL RANDOM_NUMBER(RanNum2) - ! Rescale the probability (ER-Reaction) and the sticking coefficient (adsorption) IF ((Prob+StickCoeff).GT.0.) THEN + CALL RANDOM_NUMBER(RanNum) + CALL RANDOM_NUMBER(RanNum2) Prob_Scaled = Prob/(Prob + StickCoeff) IF(Prob_Scaled.GT.RanNum) THEN IF(Prob.GT.RanNum2) THEN @@ -425,8 +424,8 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) ! Get Elem Center BoundsOfElemCenter(1:3) = (/SUM(BoundsOfElem_Shared(1:2,1,GlobalElemID)), & SUM(BoundsOfElem_Shared(1:2,2,GlobalElemID)), & - SUM(BoundsOfElem_Shared(1:2,3,GlobalElemID)) /) / 2. - + SUM(BoundsOfElem_Shared(1:2,3,GlobalElemID)) /) / 2. + iNewPart = 1 ProductSpecNbr = 1 diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90 index 183dfa3be..679ec8e7d 100644 --- a/src/particles/surfacemodel/surfacemodel_vars.f90 +++ b/src/particles/surfacemodel/surfacemodel_vars.f90 @@ -80,10 +80,10 @@ MODULE MOD_SurfaceModel_Vars INTEGER, ALLOCATABLE :: Inhibition(:) ! Reaction number of inhibiting reactions INTEGER, ALLOCATABLE :: Promotion(:) ! Reaction number of promoting reactions INTEGER, ALLOCATABLE :: NumOfBounds(:) ! Number of catalytic boundaries - ! Surface energy accomodation + ! Surface energy accommodation REAL, ALLOCATABLE :: EReact(:) ! Reaction energy [K] REAL, ALLOCATABLE :: EScale(:) ! Scaling factor for E_reac [K] - REAL, ALLOCATABLE :: HeatAccommodation(:) ! Beta coefficient for the energy accomodation + REAL, ALLOCATABLE :: HeatAccommodation(:) ! Beta coefficient for the energy accommodation ! Parameters for the adsorption REAL, ALLOCATABLE :: S_initial(:) ! Initial sticking coefficient at zero coverage REAL, ALLOCATABLE :: MaxCoverage(:) ! Maximal surface coverage From 258163c8ba1621fb0afb96fb72548459c6215ad5 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Tue, 28 Feb 2023 14:56:54 +0100 Subject: [PATCH 051/222] big fixes --- src/particles/mcc/mcc_xsec.f90 | 14 ++++++------- tools/species_database/DSMC_H2.ini | 22 ++++++++++----------- tools/species_database/Species_Database.h5 | Bin 327680 -> 232944 bytes 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/particles/mcc/mcc_xsec.f90 b/src/particles/mcc/mcc_xsec.f90 index 66b3dee3a..4cda03375 100644 --- a/src/particles/mcc/mcc_xsec.f90 +++ b/src/particles/mcc/mcc_xsec.f90 @@ -318,13 +318,13 @@ SUBROUTINE ReadElecXSec(iCase,iSpec,jSpec) LOGICAL :: GroupFound INTEGER :: storage, nElec, max_corder !=================================================================================================================================== -spec_pair = TRIM(SpecDSMC(jSpec)%Name)//'-'//TRIM(SpecDSMC(iSpec)%Name) GroupFound = .FALSE. SpecXSec(iCase)%UseElecXSec = .FALSE. IF(SpeciesDatabase.EQ.'none') THEN XSecDatabaseName = TRIM(XSec_Database) + spec_pair = TRIM(SpecDSMC(jSpec)%Name)//'-'//TRIM(SpecDSMC(iSpec)%Name) ELSE XSecDatabaseName = TRIM(SpeciesDatabase) spec_pair = TRIM('/Cross-Sections/'//SpecDSMC(jSpec)%Name)//'-'//TRIM(SpecDSMC(iSpec)%Name) @@ -1146,9 +1146,9 @@ SUBROUTINE ReadReacXSec(iCase,iPath) CALL abort(__STAMP__,'Number of products is not supported yet! Reaction number:', IntInfoOpt=iReac) END SELECT -IF (SpeciesDatabase.NE.'none') THEN - groupname = TRIM('/Cross-Sections/'//TRIM(ProductPair)) -END IF +! IF (SpeciesDatabase.NE.'none') THEN +! groupname = TRIM('/Cross-Sections/'//TRIM(ProductPair)) +! END IF ReactionFound = .FALSE. @@ -1316,9 +1316,9 @@ SUBROUTINE ReadReacPhotonXSec(iPhotoReac) CALL abort(__STAMP__,'Number of products is not supported yet! Reaction number:', IntInfoOpt=iReac) END SELECT -IF (SpeciesDatabase.NE.'none') THEN - groupname = TRIM('/Cross-Sections/'//TRIM(ProductPair)) -END IF +! IF (SpeciesDatabase.NE.'none') THEN +! groupname = TRIM('/Cross-Sections/'//TRIM(ProductPair)) +! END IF ReactionFound = .FALSE. diff --git a/tools/species_database/DSMC_H2.ini b/tools/species_database/DSMC_H2.ini index 6a1881ed0..d4aa2f092 100755 --- a/tools/species_database/DSMC_H2.ini +++ b/tools/species_database/DSMC_H2.ini @@ -3,7 +3,7 @@ ! Species1, H2 ! =============================================================================== ! Part-Species1-SpeciesName = H2 -Part-Species1-MassIC = 3.0E-27 +Part-Species1-MassIC = 3.34800E-27 Part-Species1-ChargeIC = 0.0 Part-Species1-InteractionID = 2 Part-Species1-Tref = 1000 @@ -16,8 +16,8 @@ Part-Species1-Ediss_eV = 4.47 ! Species2, H ! =============================================================================== ! Part-Species2-SpeciesName = H -Part-Species2-MassIC = 1.5E-27 -Part-Species2-ChargeIC = 0.0 +Part-Species2-MassIC = 1.67400E-27 +Part-Species2-ChargeIC = 0.0 Part-Species2-InteractionID = 1 Part-Species2-Tref = 1000 Part-Species2-dref = 2.581E-10 @@ -27,8 +27,8 @@ Part-Species2-HeatOfFormation_K = 26159.76 ! Species3, e ! =============================================================================== ! Part-Species3-SpeciesName = electron -Part-Species3-MassIC = 1.0E-29 -Part-Species3-ChargeIC = 0.0 +Part-Species3-MassIC = 9.11E-31 +Part-Species3-ChargeIC = -1.60217653E-19 Part-Species3-InteractionID = 4 Part-Species3-Tref = 1000 Part-Species3-dref = 2.817920E-15 @@ -39,8 +39,8 @@ Part-Species3-UseVibXSec = T ! Species4, H2Ion ! =============================================================================== ! Part-Species4-SpeciesName = H2Ion1 -Part-Species4-MassIC = 3.0E-27 -Part-Species4-ChargeIC = 1.0 +Part-Species4-MassIC = 3.3470890E-27 +Part-Species4-ChargeIC = 1.60217653E-19 Part-Species4-InteractionID = 20 Part-Species4-Tref = 1000 Part-Species4-dref = 3.883E-10 @@ -53,8 +53,8 @@ Part-Species4-UseVibXSec = T ! Species5, HIon ! =============================================================================== ! Part-Species5-SpeciesName = HIon1 -Part-Species5-MassIC = 1.5E-27 -Part-Species5-ChargeIC = 1.0 +Part-Species5-MassIC = 1.6730890E-27 +Part-Species5-ChargeIC = 1.60217653E-19 Part-Species5-InteractionID = 10 Part-Species5-Tref = 1000 Part-Species5-dref = 3.912E-10 @@ -66,8 +66,8 @@ Part-Species5-UseVibXSec = T ! Species6, H3Ion ! =============================================================================== ! Part-Species6-SpeciesName = H3Ion1 -Part-Species6-MassIC = 4.5E-27 -Part-Species6-ChargeIC = 1.0 +Part-Species6-MassIC = 5.0210890E-27 +Part-Species6-ChargeIC = 1.60217653E-19 Part-Species6-InteractionID = 20 Part-Species6-PolyatomicMol = T Part-Species6-NumOfAtoms = 3 diff --git a/tools/species_database/Species_Database.h5 b/tools/species_database/Species_Database.h5 index 5688843d11f574206a8796e789b00daeb8bbc81c..2f6c9530ed89effde63fdd23ab9f955d90338328 100644 GIT binary patch literal 232944 zcmeEP31Cdu*MC76`yd!3@WVMCNoh2mJh#;{hVnUEb5?fHIrDCgS?Q2RATTxn} zw3L#nUG4kY6m5svit?TN?!E8LJe|x4`TAFR+MM~ld(V0Io_Fqc?(!xF>RXjAQMCkz zFNK0D!YPHH?9WSj8K)N(ZZXWlBj^u1O4BIKEJS|Tarhs{sp$Q3RK7f3Xh=W+2Qis^ zMkyP2#h&~^>_!27uQU)Cpb5qq4x_nd_LfcUj47jYf*~r#ki_W{4bznDn;n??*VL<&J7-_XS9$S6ZY-2g*uOj2^3r#dcXc3>fE8D z9`mwVJ(JokO@>%8^Hm8KPY8EZ7Ee`;1T=Lbl-a3Ab%L3^Fp5X;;&Co{SzG#jWB(c z!||w+@I7V+X>CZ10XQ5kJMN$Bp?UPZr3$eu$Jjh}6o^ zH*siW;z-`BX#?KN!^@j8vT9dIe=hOpYv!!Q!#0jDYw@VLSdCYdh_f1xnz_|@%#N+4 zuegoRB^@s7`7LRqyiznC%TJfML2>cJ!f&-BHpC3`Aw;rSJ8 ze7=JP{)#s8SF*rg*+zcWF3a;@#YTQwj5#?!t#+;2r=x}R(_(LxpH|ziJm1;I^z#;; z?_wi=4Ga9N+P7vut`_)f+4%h07WnJf$nR!>zpjn^^(^q$w~@br1%BG?wEF(tE$}z8 z@%gMjAh%yn8~ME~JfF2U*51F51%6)}pWoO5e-j(|o6>l!{S2kJnFYDcZItV0L2e5R za$DLc*WUua+D3k4fnQ@Izt#f3&PIN{1^xgV`CD1wZ*3!gpauRQ8~NK<;BRXqe>)5O z?QP`mV1d7*jr_qhp4{F$S&$oIqukCG_*r?fRu6Qsz~9xz=XbNfA7&$exCQ?1HuCqd zz~9qG{$3XNd)vt0#{z$Zjr@@`p4=|_T96xMqg*zglFKz%kSh$5A-QiwV5NEp z^lBLB6%-%mX@b3F*aUJA-!K@w^NG|W&+2vNM_~RoHgUxKlW)`ChJ9Gf-)5Bg+eo=6 zWYM30<}t}AORusK$pNDIFChPI4X|>tk!CZ3QFmeocHkApzf|--v$HdeNq8!~Zz*0_ zOY?X%I`n6V#mW8gZ?jxrpDjyoSX+_~)*rIuhc@ygg{g#ar2Hr>mY-lPk^6+kce{p5 zBgX}j+g!qJg0pD&lM@7|QLLCka3+nP@tELj8m_ueum{ClErKH$E};La23YyoMP3WX z)(fQHq&H~lLIXO7_6Z5l=xD6Q&6pkMCgjYn5V^tTaab)P$AzIq#xX6;pWDM^EDkSJhzL~B7QC?CE;^ME zL7yxb2tHx_-^cGgUW6{y#}n*RDbg~afnkxq40^9zge7lwcGVsSRZ3bb+e(<4)kNO(tB zpT`Z3Gps_Ro{k+@?6Xk)ywiWJVH#`B9+m9Q&X_3}4f!W^n~M-kCyyOf^l-j63qm_rl4 zyd5QBB`Q7lmPxn@1?qigOW`Wid4snJ=F!&P=NC%hJnH6l#ss?}_sCOArEpiYtk=&b z*bPm-IA)m?&Y=gZ)K9*?B&9cTMZa=eMa-e2oxXf(8h(rKX%enNH~a3aVj92E?{VGR zKa%8K8qj)>ggLZqO!=M?R-!F2$Ru2a+@D`ekit1MPLb_DvM4K0O7z{G#cd=E_Ei3^ zTEa>c-}4iba1}ZmGNFSM&Y|V@+eeisFUfl{z54_SbLdE^*`p<_M2nuM#+$CDdP zlEOKZ5tu$~epN|cQFZAt5{B~mvCnV`E0NC#&Lmug);ZT3D}{4ta^TUc)m$WbQTGqs zk}!un9tT~Muo6Wne=rGGAw|jf94XwW9;o_dU3VRm$Et}}>y4?u^(yxBNLKGE(TUb; zgEEV=_xNf(?!I)=vM;n_==4Xf;j}K|(a&8sRF00Wjaqe{TIJBe2B`f04OP9pz0v6( z$5&f0zZvTHOIcVhfKZ`lV;!TTTcO!5`y3A)Y=@>-DCy+w-5DLb?(4K*emEMiHWHQ( zM4&q#eB=}z9gV6FTIh7>;9z9bZGd=5X!*(A5N{-MFM0yvrJ{?6t^v(JXYM&y=eS)+ zJ){B9D`;AIOgYWhCF=lHYF1C;f%2MP&s72Hp=qU1cV|qq&Wet{dMH7|w9B7UvDh|sxY958X0Lp7W`miuO zH&A=pSQMv6JANll-!$!N_fkMJw6242y0>Ugf20JOt*tbzJkUVhLQhwqb9CPy@xu3Y ztGcU!KGofeY6G;AenwCz&_?>yHobrb>Q8@S02-;Eqm2ccqW^A4GSJ*Fw!SZ&Mmsaf zE>{NDk4hVtdpy>!+}J<&c&uL;X2?BWAWhZ0sNCb_n)rMSv;)tIkTRM)dA}06YQn|( zm2#Z-ekD(rn0Vk}qj;J2D~Fl%E7R$M1U6oNvwmd+EJIL=&oupE2R&PJeW-+BJ3FEv zswNT#LJET%d{3!h%Ndan-*SICm@aJr29wKDzMDcy@%4nhfV}2A`lN1)d&-xvEW?cm zwDGSU^xDn!LHOCYgLd;dW*@KOypB7S>S zLazE?day+EUS86uK6sn-k%34wk2lmu_jRq$WY5g4yj1;{^pW{m`Z%g1`ara{$*X-7 zDyg0F{K5!vT&koE1{;@_;t+Vi@p|Oq!gyCVATqJP0grgeWoi7)>J=7Gl2b;I6BL(h zNF-Y~g7gr{Mmb2zXCBtkqZzO8_p@;weu;7|Hg6etzoqp2qC!66V-5WyZAib`xA*p- zQs>l?f2F*@9|()gJ4UyPPmC3Iwe)FA6=tJ8z#qZhPigV}M1~q-6S~Iq#iFdqnRusD zR_`5Ipcf{Gyyt*^F-b{%3~afLRXJBv9KL9MwVa6@S$aa^g{1)2(j#R5N*5D3Wrcio z9vK^JfbBf3z-HoMQG!i!pff7zyObcO9v@ANURXKIXz5khV)3U_r<;JOJ--=zZ{T_JDuViO$zJG)? z1QFIu?5%{qshyr}->&Sr&x`Glx5u1B|5&3Hi>G^M3zmxi=OOins zKX`B$>|hk$m$mvvsA*_dx+!o-c2!cSzd#<;?4mgCb>!hS$dbIg*N4pR@!Dlc-kaM! z>GDQ^)cn6Bd(B(FhT1*Y3u`yu#O{6mHM>u9ZMmc5hNo|#er9@*wfi>qL+*CUs%~F( z4d{W%$y+}J{9|z0gB%aqZ!H7ns^EeX4Z~vMhbDDShE087UKOCA6#`0HcJSKJd1%R= z-@LqGpNb^!&C6RSGkI@b-a%UgsHq>3vKzZ$LlsD`4 zjcr@BZ~B7e_V_04QzXcg1QVI&C3fe=TiFKyu6UL=n)__|F8e8@?zRPl>wbX zeHuS_WMp!DY)n-9c)Z44?k{9^$EcJaVkaGj#&(R>fB?F1+_v$Y!lc}m64KEwCe9F< z2x*}GD@*BMZ%pdn{r~z862B^ca@5@yZ?T;v{S91?vhhA%T4ha-Az9TY-np;|^vK%T zSLNWQ(3+f4c(~tfU9NKQp1;?ZlecyshII)oOO%K7uzmb*=3kld{X;j$#+*iym-qTe z8Azy41BSD<+u-ouX2P~JSU(q4VUv%_oG#Ql2)lb zq7$KT8UnfGav8RkE;>}=*glI8cfPGV-zGB7FsuQucL#4z3^*Da@R4!-_%7~z=g8RD z2K=?uMR-salLY6;@WF}kQHG=>LlPeo$G3|g-Vl4wz&DvZG||8Zj_j8h-`@bS21h2v zMkY15mb#el92MivhsP%lYQQJB^PbH-@QDf@-on;fc5c8vnlFtz-_@ND9$*-pkVGDg z547Rgfi^pd2LqCiz=k-ffnGwa zfH*^9e>f?Jk4}t_^ZLl-$Oind z_`x^>4fwctcitPa1Nmv}>wPWt)5cAF8}RKTM?z>b56D>wnxFq#zDm-3Eu)mYDZU@5 zr*CAEp#eX9_;B~ZBcdXc-Qx_&4fsTGLdF<|8T#>HI^rP+p5#ys4|l#@m@YDzk4b_T z%f}}e;u=OqVe8_D8~P@JCGx{#k_U*=llZ9kIFQ$OC>%7x_Z`W{8e;nz5|jA&Xg+y> zflm^wAqK1hBF4rJjf+VhDOeesSd2+XHW1HMjhNJm{jXW?c5Umx34Lw}z9YQP6XN8@vsh8cvInh;HUcg!8zs6F2j zEX~8i!>b9HBqS|iumSRxWJty_y9Dbsp#gdv)yu=vv!O?0_>cE&+T62QbKk}|2AoyW zrF{qTRBXN@c{fAXy8LK3a|IWUB>YrRuUo8F-8y4P2FlQUFgpwg(*=cULW4SXAOU4* z_)AJ(Kfi8T&(1-u>$-V*x_d)vAp3M*3ur%JL{tn693fHWst5o@;P_DHUe$xHWBc|2 z9YV1lsBB(JHQ$hL>eI-hNh6QO?yoA%11rtThxhbu?hQ)weto5}R>6|KSiSlN`qFs^ z2MOwG;`^HVYT|2EVS@0y=*!2WxtHhb>#MvK`>OEf_NDP=_SN(?_0`m>x`^yo_2t{h z%QtuX0)6=iRl(~ON(U?YV&}CS%X@j$c?$OBVo+Hs4nwr$)tpNcr^FOgT;`H zv31Fo%2{Qa|LSxgl!tn$HLaJt-J3RkElpsCe^iA@%>*^RAfN9FRhgGbMaR48HQ^0- zO$U8INav0n@DILope7_Zv}1<`e3NE%b2lqb&*r|(UcVTM`>ZVKvkKMck-XcLp43}D z?jEnD&DXRlPp{^ld1&ma(tKIUe>ECjCa?D77T3}XYHi=w%)Qkb8w^Pw)VXs&?4)Hfz$vx}trXzP_T_f<{YvcBXnRmsdT5oqB_M8@s<=od@x4P_G^q zH^fKbgG7fJOtnib6*Q;Sv}+#_VwSa(-|&J*Y#KNBIS8@3scy`{l^$O<1eS4&0&H!&^U?D z5%blUmUUwXvxT@SOQ2EM{<-WhawDfZp{2NB;fEcZz~=zHna=S;6Y)}`D!`1#WcYtl zB@)k-rFFR2pT)`_j%lr2pgs@@E~XEH3jV$?8jzO@)?V-yCl)Mnsm*g}=heBYi$TyBNz#r=0S2`FL##zL-B+j-_?R&ceJt2Pvwo z;3|(LY#`mze$Q;WuJ#PeiojvI?z;A$L;H~Z7llCzxiVyWqqjxE+Ml!m;;n!D!OEi> zJ7DS`WBqq-#+M)8eE6P?HR8(`_FMUKOpTQb^?vqUIsqQm=@3HPQ~|I zCPXEb)~(!u=}h_O&PSuy{lrK5H0+w^P?_9?ipkDfQTf zVGu7>owc(qj*lKHFG2Sfp~690ps-)6@e=3`XP`!R@P49QsKuV~FwD4uO1moXa6{8- z>TDR6C^e`28UW=r&vFh`!~3Py?ivFWY1SHepuw86AxB{N7on-YE)8gcX7#8hKvOll zQ=Y=GH%)^w*8@%0H1C!Sbe^VqYj>a-n$2gQfjMSsR{LfF-Kg1aS2S}<^#q!uxi+UEP^0F?@5O=gTGwjx!HpBB zJ$3U#aQ7r=$HvbDH`p}o_-#LcyDURnxpFn2TeL5}p9Jp2Y;A=lc0dDl>z{o9?&mo= zSHHpFUeDGo?EDnm)K7H-zc~uUtCIf3rC*>+*+_r*sUy%p{oYMOVHzk>|H%)hV45gJ z|HZ|2_SlY`_f`??=zP*y7i>q@rfhP-cC_xh`S?Bi`H!0n_xJj3C_c&s+tDV&00=MK zLf1Ro1>4c$+wHKuv`|NCar_pGS`-)TXwbaNJhr1J%H8-qw~SM+nAIC>8tE~izP-o2{d><{Cbs1;|>bN5Z=q~hP z)NeqqAl2lvPgKVH z92-}`c8pNS{VgiI&++->%CH}@9csHjp$gvT=yl}lDtMpc%c1tT{Gj!rEvn*ujk`qpOjt)`zDi6s`g4%yw5SEURfw_sVFDe8)ydVp3x1;j?4$p*eX1K@ zAMf|9q(48<31}nz$i5YU2I>#b#``5B^~=9f08PsUzE+>tyq_`AXpzu$A*2TrA zTx0)sC45|5HYWPF=Tt7c4}9j2x)pZmt32cXwBr@t?{Zo7l$m>Zc)#jrewjd1)qi~Q zDL;PK8nxSiiTsDNudCZsAIv*^Q5kvH3gL&eY=gRWZ^pMQF$ty2;GvvuMrZFUfX|3P z9@rnR>DGOl^XCa&H1&4Ravsw1W6duL1C-01nqC@rD38xI!!FtZb<-X@wG+}Cp;g*p zz0T1Nv-1O*4ZAk~hJCX3I*;ZnVV|t0&TT*hy!Tk$=&lujF467k`W4vA37y@KLmau( zQu=N+s{-}Y2Pf?XdrHv{jTu^v+qF{fnp3eFhc4+)SNx(X=iw0GKcsh6E+Zh|TJp0h zT=w_?pYk)Sa9JAyPMrNi#f9AtxV3ScibIaAwk{7-;dFO@Rs{C>?$mUvxu6!z(YB^YRg7Vbkj=4fZvy$Up2o6+A?*?HA*x);sZR2`>#p54LfINd*ec(XcAclWM^ zoN>B~K2dH-W+yeu!T*6Jxl zlfWuFInH}Mm4=t$;){tEfN4Ft^~MLZp0X3`siQKz2}}iltZIPx9g2v0jOamFn7zsU zi>$t%N7v1=c-#=e$J6`F?=WJLxx6bAXp-ptrW7jXn#W6+MR58Y8sUGOSgY@|l1T{TQeOvPeczq_D zHz*Fjt+gX{X$DwjFUN1tjzkmD>?Bx%Oxuy6`{uvW-&N6aN|W^pVdd92f&{Vm!VM#s zr}tlB{Ey$TTK|nC3V2=n{g12dy~!S{|2EPb2UCh<;Gj~iO1>##QKH*Ebf2)F7}rlp8lKQFPpV<5ctQQYZjgTTJV>h zyZpD{FWWPs7WlvBVE-A=Z0%Ql#|r+k(sdUL{;~#-et`S2y03TQ^W&E2rt>b~7dxSw zXV*^fmnj^yhHGpbv}4P@K?59c(y9`SC%OgPz~n;(j(-f*vS2Y->=P{-+{V; zpHe~ne&BC}e3aT*NAUaIJmC%J|Jm!jr|KZwQ#W^ZSGXTb{F9K6Ws|1?KA~H>=`+D! z`Q7dB1b<~A-(TQt_oU5EI3E}6es{w8 z@UnyR{=o0|?F=pC+p$&L&3N#mx@j}Nbbxe5Xs;!Y0zc>+?eLyiK*68-^W$nbeK~8Z z3+dbWK^q}`LET0IU82iynk%GF@T-DfGEsF#NZ;5Ih2cGj}g-6ynV6Ymo9N^g5a0_x?YUnmk!??DEOt*8`T&5 z(%VW^6#UZbqBs}qmyYgvk;i`NLtlRbG*w;1dx_weK6^h+@JoN^(ns)1uQ=i>_@y(P zDhqz;-6_92W52ZGCcJ0xOJhGY_DlCN^cVcn?n&N)UmE<@f?pcj5w=&*gP_Mb&BK94 zXuD=Rf}PFLUYUW#nZ8g1y3hL65ON4;S=E{LsgB3u1Ry!~R_;2SEMc z{K3+KUs~`(gC5&246lmcbKmqrf?wKx*3v5YJuisW2!3h79}RkpwEI->OHVuQEBK`c zMO>+j{qOB=UUI_z_kC+iSI7DMzzLtHXhgNUq3i##-80XU`d#aGnQc25%d}4Xno|oOg^Q%jAg59Ma z*WFH>DU{1O&Cd$uvWPd7Kd_h8ABH+(dybm(5tOq_`jijk-mHe_A-X@C;E3lT%55#=gy$i)uj~W)YJ;#}9qXY? z^NNBVW+g=ndidTc6DY4KAM~_3)h-BdllZd--c9S9%A3x>B2k&whyca!ymKZ zxllg|_L8k_sYr);Lwntly^|o^Q}@ztEQH7EupMDN94Xt@nFBp&wz~r@rLVW!0jQt8 zR{BGDev1A`*`I{^3G^t`PoQtXpD&aTc;7;KfpRUBA9&xlZme~}<+@h-P$*}PtrpGj zbi(=GUvz3UobO^ITRY->UwfAAi1Y1fi`Ht)()XvWec8)R5_b|I}fM#oly)Fq7&>5@}1l~ z+X?4;bk|RT`ssIMcZBDs=zmyHQK--6&OYUc-~a8(vm9}K7TUIvBewG~rOG(s`t0YH zd#d63jITew8qW9WitaF9j?8rDL%`E`6eje)o^}s`boLo4fCG( zs)NiM@_NX>oU&xA{j>bY{RXJPq;jRsteHcxJ9>1i+}V#y&ZXD`rLUWr=zX4rd!hyR zl!*g>olV1i(7=Jy6yaskDQ-sPPoUTz6;E;~^L$7O#X+dkm*vsshG7J!c9NyfJhi!@ zf3Kg%jUwr?+|Nt@alX}gCs@cKT&y1|$9eCEX3_Lz(Gd)=H?^#+O%*IiS zUrsIg_vC)|{P6GLJpE8RT~4^&gr}GOGBG4Syt!o|`j$9Yd*@P|b5QThZzOw;!g z(r2xn&&nWtfo4()!26;Bc|Ff6wT-g%Wb$*X0@}ebRv{fburEx=*WrY8G(Gj{pZ4|s z^FCeqdbYPU9$yA8l&!ac%}(MKys%7(E!Xe+JzstAc>BJ=YI7W+-f^<=Ic=jq{hod> za7Xf|1Jw1DebyXH`O{B0S1~17Z9j2Cn?K4u@EiGSZBNCz(du?SZr?0?@W5};UVdZZ zfDhH%^`Rd=-mz2G$LjN+R9W<3+anr2OYN%tq||4N9@Fq8 z>VW7TPJ=4_MZ-T=6Tj?JKjJ4|t>)Zkm-!*;nIArvdE%W-YQ?CO%1Pz_rs3PvhaZiN z`1J1=RNlAhm60DUDqNUr0sD5~+N17V=waBw<6Mh958Zms`2Gj=t`<&pdsMe;LFE6a zUa%?l#}QxIwIB*Rs$Qo%eymqwAZfoE*vA9cDYbX_On3d+!j%84I`hJvaRK9t zQ2s0GUi+r)N!?^mzwL8<+7pL<7R6p(byw^&7i59S51+E9` z0aIMvebYh}^f{xcDi^t@0nS=DsT^RE~`hdg7I`(g){py{(id%bcV zUaHRI6+uMb#cBGAq8DFZTlcLuOP>Of_fw39mq0;>G=s<67o+Jbg=SsPs2_ORo~94J z%lOyJ+oe{s{Fg_6-fyEV(WNjAcR-4}v*#DHD@3shMeOL7UgXOc)bH*Hdu4F`pHj@D zvA4VY+@}6xid_+TKldnhqx`>9?2d@OZd2@u&er#Cf8jt5#XdCszfjx^5qrH!u|FdA zeS_j4MC{`#!Mj4}^DfcwaHM;gd^n`ec^cjq#fRPd$q;vnhR2{X2i)7#=1Cow|+Sgt_R#xb~Baj@(4U zmm*Rg*3$4*s8!b)CB~dwPH@_0IhVMaBKd7|&S*7W;{M1IQ zq9FEE2a)>W6B3`ROVc-#Vh z;%WFEIqBt|RII1+%=0>32!{7X=FI|W zcsM#SI;quxyB-9?`(pM*^5Z6Aa=)JJ`3=n92j@ZU?=vdj%l!Rvjb--WkA7}>c=C~f zU()z`Dv#j~G8}4dUtBnSo@8(4_8o(&{$0NGz>hO&{u0g0AJ`iy?@LHH*qhn=fbZ9k z@=nVW*xQZP70&U0q>=b&DOx+K?2t3|be#;60ubj@lJj|4m@ryC=OB%);OC3bM+n5U z-~LCyq2AKD&-DE3kqHJI(b{)JibEXM&nX4J<#K}JqT_9mv)x2aY52{)d&&IPX-lyb z%NHA`8b2p-Sih3P9Wl6gdf$yeF7O!n!QzD-CU^uL-Y`Ex=FjHw&Rit;$z?*>I0pS< z9xw9-!P&P6{kQ&-@mL}5rR-wqNnc5R@$|;LZ^(~eiVMhpTLWx7wvlEtj8a6)3(Gw| z%@+R#+QgSop@?|Gv6{kte5fS8563487!DGoRB+Yd1KTie>fQ_!p)SOfJrDnW8bm(cy;dacp99& zCii&%>!H@{m+6i5C*(Nq_N!Vq(AXie|(`dN{~ zqT^shusBY3qv7E+eH92c87Gr;d5Y;H*oTh$#!>!e)DJL)Vt+c0rQ=G_2l1m&zYnLU z<7T!#Hi-K9*m~LybX+@+$b4R}G8Mo5( z!?>7?lc~O8Tul5Fqsa4NTx>S3g>mt+pDyup0{YYNRmgZ~C2ehNL+&*wCL2P$tR#i24kM!2~j0rY!w|G~7Dlc?W{i=lq0MT8&pYwlNIelEJ+ z8T7mUlM1U&cbrV(gMNu0a6G}FU*ZQGL&KMv+dKFjh<=BVaL_M#UNpg=-!jhUg6lSC z`rm_wU96D&@y2lKSCs45i@x8sgrD;^e?L&(TJJ_Z(k6AH;mv6I3Zd8^&8)23<3Bx= zV!io#Z7v8Y+h5yJ=Wq`i-T{3ybHlNl1A0;%D#PLEuFKW5c5SGMI~o5rSm@Y~_uCns(hV-XS_K0Z7{Is5^ zU5_V)Cy(7g*(GJ@G!c1lYgh z3i}l%;C(DWGc+|Wlm=?l)JH!-IIj)AJq>7}w(y-u9A8^1sRqz#TG%%MG(&s2<|RkG z&jHTU0vd?-H2{5z_or3E`!!(y0!&|LYe-s*n!$hIa}Y~ud;Jg!;k>rWsP#a7wD*=g z0vf2jzpfnc_tf^dg3nV-&?;`W06I?V<=g@2H0_S^U4YKfF8;PR&~b9XepiJLA+0m*ZJ`ppgy|nJ6=Eo zb+AtkXryj*h6-qk4)4q3QYY(vE&dmzZ;np+=Ut#1bYK5^5NNip-PfCdUe)1!eK_Cu z*Uf}|S;h5TD~<(RNk7dk4sZ=UJQr{yy>VLyVc%BurU-DLUhm=qI8>jwv=-nvt8ULRo)Tj`QB{LhFd=2(x78M}M~xJVEL&z1}zjf4_tE zyKtXVl9RW77n!H6kF4n(kMr@x^e)GF*Lw!ldxjvN{mBo#<1xFWuh-K%{>}%}JKhr` z$;q4ENj@7`)jPHod@;Stao+Wg))UDQ`97|OO4LMOucvqXeG#U2sANp!youi3|3$rL zeDVLKcW4w$^!0jr$KNGkdWXi-L{8rHPUe@b>s>yMmgBtJJ4YQE`9H3PPKk-WUQh4% zJ0(o-&SrA*rg!4c@SuLsqT;#yXbT9>bboVD9nWcBrNAnf^^5l!xzXY03B4V5Z`AKHvkf(Pp0bW1`KxJ%vxCHg)F;)AaqXr?bdA zl1_V?PS!7!zA#AwSU+7!dmDKuCj&hi!WYBfAWR?nA--HbhAG6dRz5l<#wYXmTcd4S zdhiX~wDjV2AsyS}56kfZq43Ei{N1X?&EN~1fdL&t!W*{JbRai!`{JAzl$+)rum8cd zVpjCW)+IQ+f&M%j!k4T-Gfn7sMRV6*6RTen6*T7wiu2}M2Wj!g`S6FnJOqVlf;$VJ z>T3<(Q6l$!>o(A7+UebKoW{9+3{23W*X!#Ls}Qdb!IvdFWcQ2bU5{Nou@-$j=?B4b z)gr{QW`&@|t}Q+JfWQ#=s-ZrVnjTnQQ(SQehe}2n8W5ZBBWz9T6p&nHiH zH`W`QKVo{4mt(x<246XZaCs=lUGaDSNK==K?(p}cbN!aBpf~tZ+zTzMlH$1bBFk{77x!2;>%h*JST=PYw_@$7rv~;W8-ye z@z^-WT0FMyz*;urw94ru_V4&d)Fmy zP+a`*I1Z1Q@MTRt9uwh<^(V+aVvgg5yRXW1q4%xHtzm(`rj7ir7Wiw~$Y0w6e;ph7 z-7N6ewUNIbjmOGyAatAq8}O`G&egXdzk!YN8`5~JpD4(Od+rwGHnLGJ8>h1V5lgVA z1-V`}%4PMH+)jnXXCT9xJ>fNL_>%KCCbzBfH=*(5{A|2!?fGQY+pEuSZsYU)XgskT z3rBB)P0(`O!b195+9;n!?z*L;cWokd;KFA;Y!M-OdQZA_9T{EUtsrXlxIHHCI; zfnm`EP50y`FziXwO#Eyr&}o{G%iDmaYi8}d19X?3t$_=V&g{EUeiAaE9i} zjLtwm*JL#x2sBf3?(!I*>ogyHp9XZJMmSHD+oH+nzX))aCgto3pgS~;>V5%q7d}@S z=w8i&>~Dc)Ysk6LMorw5`+!Sn@3@tMVHL0aH4@HAhIK2`M^y(JsNJNk0ko&KlnQ@0 zFhTpvg4#gG!MYesr)f_X$8?VN=|_0IO@`LFNKK$?wB#J>E!t--oB@BUb>5D@!9DDzfhC? zpJT=S>P{zyevx{AydQkWGofXPt!lDPZZhTHplDd4(%uBaIx@B&_4vYKQm`kA2jBqy6o6U!yl>BM{mE- zD2M5vLxV3)y;<}3-Bi9kBH{aK{1WJR7jC6by94xj4q`a5dq>ozVyhDA2lvu&S45t- zi(((Tzn$&R_D3YWY+Ydxir5hLY58$%-C#Ic`e4kbX^m+9;C;vcuzYvY{ZEKIc;BO! zUgq{H(+P%kmD`W~-Mapo;S|q6PGhq_O`bA{U|2`V%BMhKU9cGjdoaVWj?xUnI!ZHa zvhFZ=`rNqkEb8d9qE=#Y6Y#ne%?=fAj4Xq$nMbo3S@Xw1hflcJ_(hJT^7y*v9Aup$l8>@12+(x=@+RjT;CV(i z-o-w1$&dDW{y4neg2};iCX$@I`QunWnT)@s?*k`X0pYn^tX}ZAo=c?nFvyzy)}%UN z_AAGEx8JlgM6?GJEx`P+Up$8)+1=~eFJAA$>{nqXCvW!4#s${evn$l0#_BPmtAfAp ziw5NF8Ba5wbIV)3JhvM9j(s5kIhuDsS8czqYEH*i}j$;n&2!N!Mjzw>}!h&C+!W$m8ZeM>ROefEAb z{>(kzepc+1+azC4)MVeJmhNkOu4dy+;$N|&$KH?{0e#rBltJ%Iy;!k)%^TYOmbM$<* zM$}(pN98va^F#Kda2*}dgER^{AB%Cyyjk#lehjW$*fUrP48^|CmT1&ao+X*gzDW$l0yIH zhu*QRNcws`z2o)!Oz(J2za-~P^!^0&UPSP9vVOjju7v0RB8o^Q#Hyct<5Ln5`$7t? z_fG?IzXY?V)W_z!XcrS_NP=7K48shA;RhS6BlBoBBQowS#syN2jQT_(lbcO(PD64h zn8t%IcncSchkVGdh{lA5(Rit{c)OaD@GC6{b))e(yg?c+@|WY>C=RSZ?yz#9dPo>p zJVbE>)f3a(#=_?E&QScsp4?~Scg5f4@;oRGeo5}z`nMb{_ww|V0?p!iHapm1ZL7(?F+o|%xTm84jQ&--p`b0jSGL|)e|MCLD>Wg`_zLAH&uQ>nPshoGp zt}L}vyXgExDm4^qV40zrFJTdH?ODitDPEwKimb^Jo>!1 z*-ljyB>!9Ol=7XbPvqmNoSNqEUr?pVA68$a)B46F=)L}#|Lv6Oow6%S?NnABVqdA$ zTCBBGfptlIW_Rzkk-dkRx71EWP&;BO$**>buSM(+(dWI*c8Yup;ooYf_;;#4k+)On z^=xaWn!4p4kJ-=rLi4|!a(k!j%2GQO=0WTxl^TY%b}Gk{#4l*4-j|YOo=;2dl)~M- z{(0N&6iY=1`lBPI9q4x{I#L=)?}r)4k1zuX5U3Z&X%fkOO(MB3P`J-hA58h*l#qJ7 z2**=FVRZcmdyafPhzE_AN&T8Ep4`vbl*S9D<4P7!KF&lm-V;|6gT<4#^EBH3EMfZ* zL-I@Q0=LhihqGujE(zBR?1AZMHvEg!lPx zwLgLHR6X&^_y?K4e|gbht?C(>oyg<8Z#e(kpWt`OuI%8;u!1E~b9(#d^Mu)?4|YCT zrk*6kScq7ryuJxBL`Ee?#wFvkrtoF$oTAbYhn-X8C~&Zom;~_3A5zZjxdBuk^Cr=R zyb_b#VACIpE4jy0QF%`;B%{sdprxt&iC8-Z&wkoWmofBzg@e+ z-^gHgMGj!d-L51%E-sw66`UB~Z)lWg##ZeZe@lZs&l!G8@*D(tn#9BbhParaNezP& z4bf0W;)%n#9RJVX8KLIL?fUYU%uiOY&`I(t$>qflHzbM@t;r+jPV>7Yc{F`d$uYws zlVjrJ8V1A}68n$r(^jxSYx0ChId_pHucDB?4nt%68WKB3cZiP@s)U$f!tryQP4eKJ zZv354a{gHbB2SXjIl&MWL!?=+U+~#y?7h@8doQH~x%K!EL$o2$5En%z2CUUr_}djs z9{vWplWxIVXZZpz!#8*ck8 zJx2&C_*0;P0u2;spg;rfjRsolI<^zqZQ9JS@fA7Ci{n}u`X&yIOdQF3HEqCqd3bqK z&9KqCwRofr<-l7*E=%%A8)!WqX~V3?V=vH+9n8;e6wm?<6lkD80|go=&_IC(3N%ol zfdUN_XrMp?1sW*Oz)`uGY<)!<9r%aQ*rm9pbRM(}%;hM!;P}BKBa`D}W1`x}4~97M?=UgH2BS=F zWAf>OQ!y})$KDtD&R{>7?Z;u(_`8%?mf?QvWlNU6 z^slI7@d0eb7NWBw!d{^U6C?@u*~Bq^9?nUH*Ye<#S(vS@*1`ceKu?x$1z zuzhu;RKs`RJk65#3TR621Tsh8D>2B8RC+&aB7KmBc&v0cg*}7s@@2t;r#J za6rrsGP6m(H&VwsyZ_{C^ZNb2>i=i$vbA{!ylx3!*5a{N##+4MM4VN5tbVX24}TjO zU)JKW@?|X^UI&9OYw_?meeq>29-CgV7EejUS(V4+FluSOsJxBxD%cp$!Nz#x3^9&l zcGD$pP+a`*IF6jzVqITk@ARwuY!#-pe3QKguku&5G5ytOJbC)b8e{9}r=OpFCI8iJ zd_Gz#>2GF%zqyUi$7>()CC@)z!-y|y&nIgWU*-2F>{j{JG@ktV$VPsR1%9oK z{5lK#cr1%AYxxf#(O%JCD|+7=e`^c;fj067S>SJDBR^Ta{_6W{XCr@m3(sfg%vj5R zM+^LH)NGBvlLh_|8`Iy}0)MED{9P>YceRnfn+5(b8~MX6@OQV7zlR0>o;LFLvcTWl zM*cn)_#Sl~~zk)IByU$LKL8~KM?c>XXO`G;HJA7LZ^NDKTa zHuBSG92<`jY-G(c4K}LreyB1vpCA^#VE+91?fVsC%`d%AqjMbchU-}~BfF0<|KVPb zMU2CfhDsRA`}MvgAII--`5BF`V0;|86oP!e!z{i6;r%P?evvSi-^2AU%4bx6p3t&H zqlCYi97c&aPAR0X_MlztK9Lu6MZ{R%^)}Z;%)!NXy(MCt-X*>dMU2C9N=o??(&r{& zoZramPicIkdPvI>r^~v$5HaSLF4*VQxN7CkN8dx_o&r5|HtZ{Z=7EUazWL?D^_L_Z z_Q!8?a$MQ-jB5S1$*cAsmat#htILl0F?|`;JG?GDeBs6Pr9iV<_CCBh;H4@YajPT_R&-VLW z#PN=wJlxdnPcif)aC*N^Nz`XGBVimY^vVkN43xxtffc1!kB@j>9yu{BtFICN+2QP-z%+ZXG=Hj~in6z^cQp4&5f{^D}hgMh_oWo{Z`TS);vM zwPVkdzkj3Jz0RDw_TBG`@@Dti{`~}ZmVcvq?w!a}i%LuO+44c}N*n4(@1t)0)g|_9 zV)9?re}_ene(e!1>A(Nf4XdULVgoeMs|=Z?-Nb;V+_3`T7F4(&SACl3>t9gEw~@SW(G+rtm#83(}x`AT_2f?spxXH z=p#+}|DzAG{-h{}Xrj{k(o~uz(&RU*{ZhB&9*@-u^Ty{MFN4Y6lzTiSji+D}6pT+s z+1uXeDhqh0p%R%VUxj}AYI@M`h0fFaN~AyDbFs20!|*!Cxj4<&vhjivIR}4rYmJCG zqzd|YkGF=67nJB$^*z70&@-$;b8b79NepC|L&Ylf9=~71#=}Zf<#?y-njnT%Xg|Mo z^PT$)E0LdDl_{4VG0dTz&mC(nej?$|!uGh#i4EVG7T4h{LBt!lNN`2)i$w0N%H!?ybwR-!@;zY44T zLc)8`&+Pl%ONLdbTI%KEt5T^WBzx)R18na_`yXV#yB~R-)LE z9}g)fVh-(J+3-+laeNNrPiNJ)WqsLrU4`2BS*EPflwo*3m-?@t+=gK#3Ypb&-{0*e zJbzEk$6xkgm_wf_fBPvel3^w4QomlA>mpX6B7Ge1?dZ$Gd9?3&n7vN)7r7$;CY>H8 zN3(Dhx)i_2bJze0SDw7^k#h{gN>ph{y#ZegWSB=)YCLVXY7oO5>itKfXBSPds@hdm zPy!2AqP^FT6+13s6>3pDZBU;fESyJcXS7S-FJiENhm=zh!&tZqm8spqIcYe<9GcVn zm7iO2nsZnIG1cVHKL^`{D0nJ21?l?8aX->))AScwWWC z7Q?$rxW(C0bEkD@ScUu!e|99S2g6FVbm8+En?%f^ZpO79$9uAH9$ix{9&}s8Dio6T z$N06qS-1+-U)}mlU>}BE(N3RQJ>x{IM4`sbYdb`+a1|tXE=A{pjUA>9&(u_ETs z_F3zXrHPnF%@;PQs_M()t5DpE!#Ao&G0dZ8Q~p@yEMgA17|N`56|oYHag6`-QxU7s zb(cH)PK($T?d?83;EITO)O)tE%~cb;Ib7rSn~0U@!xabrcqU>M+7erL&T|nf(H8I2 z2{#QaeH?l@qIT$rXoi(CtU`-|&u%n|;clq-mwgA8>(Ao5qPSzmh80AtL_sf$%w8d4 z6$*6vV%$m*^XUHk*@b-vFn$%9_H}qQ3A-ZAj`9<`i{U(4bv`4or-+rP_F4PU&0-|} z*;{T8ZaYxICoX?~de;z!c{KR&w9o$(F^8s2*wkh0hb$cYX{~?DZak4;C7Kkzu0x}b z80OH?7vm~!p2V;U?aDs%$?qaoqMb9JRSr*M;XLX);TAV$3d0=wspQqzCn8p&%BL2% zESSo|RmgYv$H$VUGpt1OD;%xUezt^%mRsG_X$8Y7)F$M&GAXMV=8)f=UJHy_3@g#~ z%rVodY-gB5Gk#9=t@Q)L(4L;%*2ZN&!zy&~Z067&2N>qik~3QzPl{NH!si^Xa{eF- z2m49*{^s>V46BeKCcIdVht*0$H3@gEWRtMmui1J@i@ag;(Cufv|q%K-z^8y&WhL-O;1Hho+qUE zbru(yDq$sR%SHXvMhsV>QAe6C?I>a%ZE{+B;ed#tJ&U^G7WFfer$iZCIgfcFR-v#v z1In!tF^_8BYuIvwh?VH4xEFl?lZ;=54!u0}xBn@IIaINEXh@)lp?xsJZm8XaYwPBS z;jT#a}KF#F0qRxBg8ofo#qpZ+QEqz4{?Zxj;-N)Tx@uB|c;<{o$ z4#PaUmw3mo+pi3(Q2BEcFYdd|Fo*h`SMEMtw1|fE1HrzEy8n4v!7zuu&CyNVP=aA4 z8aTSgzUCzvR-r}*vd|(EJZH&@5By58a3ym4?E1D2r5WbY*2g|WBSfr{VIDOu=9x9s zB>Y4|`%~vd%%MYza;o1Hu?o!&eeyt4hRIi=?#sHwFE_y+gRhqTRm40RJETa9sIn}+ zN`_t0#}A*@`AiJw(R4GcMC~shIscUyu0rk1uq(=Jdtv-KC6mt~yWwpnUJx;lR(~57 z7F$jVH{5N#{-TJLsE_LU!&@R&p)QrGfBQ(pJnG`Jf9+!tE0JdKjLKEYGkGd>c*yhq zr$y|FF81uzre*~e?k2-Z^q1#AO*1iE^$J#BePkCehV#fAyP`pjZf_f95b$?a8=bNOuh=Oui0f*q=-2bdhVAEM_aLQB^s-1J=r6WVNQlssKOqn z>}z7UQieHH2b*8V?=ScP(`q^~_{f-ilf_;FG@i9fhO z{nd%>8FodNPA~Fs@4&DM?OgtwqMwMNJvPHIzB9wnfB$g%+Hqoh4yC&!_-zm|x z;!h%m@@QZK>v8fj&3))NqD&-{_2P@hLuQ;H+y--7w*o& zc{HF%C>!h{S*@%5*WWqhB+DLWmt(uoSeS2Zj!`rj+Lm} zMUT#rVmOTV%&tmT#3xF3QgRdxo+b~Dcl@$vT*Rf z_`D3*FiMJVj*aR^qZYngKZk|O=Zh8SPRBdfr_F6b{bLU3uZ_cwA8*=G#O*7W>@)21 zgA^OpMPqi&Tr=>J7~VHzt(N!wS@P=AF*f;@Nr(2Q+BP+@{S$Y*c^R z?B%U?B8K#?zd1x5#MTcP)x}nBIFJ(0umU|FI5Bl{0>cjIi(jw$_DGU&RTOu|IGkZe zbY#&@|3M=eu7SQ8I_c{8(F`k4&%!Up#icUrfIPoE^kVae3z$gn zd;-Ic=*v!nG;3xvtU!0;?a{$i3_BpVjwe%YpJ!NsI^WNEk#T`xqk3b&xuf7d1F6@6)183w6>Zt3>(!aHs5-& zZwA8(bfQg3K$qqnsnlr@3wK0+|K{+}aWKOUXwSLzLl49;TmwDmRD09# zc!m{d_Kzjq2Ml4@0WJ8wNPGJvh8WLc|Ib@Bi@rhzTrQfsS1K!|RNQ zA^$J>9z17)f0#Ya`P>vKzJAL0E$yc)^u~3Y0K$t=-tW3_GAxhBZ#dev|O@Ll24% zeaWy7-*-UID&8+wv6X~>xD|cm?@kOG)iqw&?~4dw*byb|KUL|hh!v<% z`m#UOomsd7g@mlBP^>G%HBhb1$BipR?0_bZy`)-Wf-m%3)@w)@i|>ehKCAER9nP=< zHLBj@=C$q&JE8?OJM+hTNqDSREBlpw7_NaTH$B&LwTK;2wqeyNI$-<%jNWYz+?aQzOaxD78D7^_@H}poG7b1rBes2C1T>G*3M)lJ%4;)8| zSb-iC=E_c(#KING@cHB42TWzy0ktXd*9re=3_GIhpOz~9@eGEIYOlr(6&>d=tU&!f z_rJDu9>Wf(MBU%r(&kGzB$ z{*MlSiP#Y(e0#FRa}hhBYBN5*cj;%w?}#ccIdY@LNrn}u{|V#n9;X;~M8j2KMQ@*$ z@T`O>>%TtBumhU8?m}9Yh(Z5HqwaI(r0{Ydo=j_Ef`436y6pxLE07!~Pvg6^JkR)z z>TA~*&KW0S=x?~5^8WF67Op_|;+idw5XA+(nx4Y{`PFipGXnVqw4#gODK>bo(ZaY?zu=4B3 zrw^(yY*cqGKiIiJRfZkWW%~*1T8S9yr%Od0SDIk{qI0Kl)mVH7^!dQu*B?7dIP{)x z-=j_p*Fa?pSABZBI>QbqW>c4jna&J5qSSpi_n#860-;|#yU*gK@QxE6HBNDn@Z!PW zl@6-Ga1C_q>U>pO5j&vE5BiOoEMi9#^(ZcCoro1EynN>>J4Nh(`X3z9wnI%OPl38l zo6QXtF_gcfQ)a9Xu>$qInsmV5U5bCDsGV0o4~C&UXYN|PS;UU0aDyX#hWSY0e^wmc z@M04Qzlg{x9P7uhQLQ+Lo@A;Sc0k6oCa22T4cde zx#Y6kr);1c1)=4(D$179QjQ*!8x)HCI0OW|K@mYwQ4|nG@WT4z5CIhx0TmQbIplCb zk;)~U@UIA;C}I#yAean+ktPJ;4I)cD&C{i7ZL>_Ekr^h;Vb2(ZWX z&XfH&PfG>tKu=d1{pppV9KVM?d^BS?U?*C%>;2iwbgZJoPme3T+Y7sXOFz(Z1eAB6 zo4XI`Q+Xs{CyG0@|CJg#R?*9jCb79XcA}QItCJ4t7>}o>6BFv|@w52;ZF~8f$9Ulz z^3>;QkMZJv=1RnklK^{M|LyTk#|F88ooLR>3GdaL23SSiB9_d1O2-bAI_mik*3N=_ zC%RB}%KG=caOtcUqq{x=`6|l1_mwYR^up_^uRU6KHsm|e3$b&z&VLfHiaz*wdg59g zJ5akbrw-lvEac<)|34$YkMY8>%QJV+*0GBIx#Q>LA9d_RUzKx5Z(auUDq6YY@6?DF zIqr&jSA6DGz)o~$WP|(O)Uk@3QM=0is$(Zw+^o}^Mc;t(`2O#yYG-?R;c7Ep-ty^N zkncp1{d3FwsAClsU-j-1kB*(_wWz<78omSNRW!y~;rZ!0cA`7h4f^Tidpy75W5c>t zc^|M7t%+T|YNHpffBe#KkLK}wU#z02>RbA+_R9aX?yzc;H}mp;yp{9ok6Qq%=*UMe zsONR;M6(7rUDA9Ty&7C+ZmY?=4HR2JC=*eE)vW?sX-ziNTb(I1Vyh>sfgX(F`<7Oq5=0lJNcuArmh8`Hny*@@HjCmmL|j2Je$-%!dpyQ~Q9mU54;Ze@wJ! zcC>QvU;pTw((I;v(|aMx)q$GjwU2B*bBK;-4LN$U&h&2?_PFLJ_Udr)FL)o)fugey zZ@nSQ!}6Udwe`M3HJd*ZJchhTUd*9HW%Ik6M9k08^C*69y6ZM3t|@f&r#_k7nPRb6EmcA%$T*^#xcJzyt#?8@Fn z^*RGq(W2gmnpNt?@#L4Hny-Bgu*Ws4%hC(3bAYkGzjV#p_WT7H`}ZrCe__nu9IHQc zo_%;>Syn%O-d<9D?n8;?ba~3n{Cw6~cO=8uKl)Sleer_;$DkU6?io{cFklB-d3J2~ ziy44b^yrLZuWlLx*n!@E=j6vd#sYStTTQ|GsRPXqS2 zet-9tQ4^m5>_ojDPnb1gDPR?q-170(3Tpv-T<XF(ib2TFM* zCj)f`tfG4N-IiR+&2ePQv!yTOaa^}^{;5Wv19qTs!w0oY`T{V1KDzK$x2d}Tdt94_ zZHnu>7qE)1^mx0%Pdav>vzuG382KH~|M-iyC$IYnFkUZQSY+L3wSq2xleH5!l_(3? zfqqY1GP7Gbz)ti;?9opTMgsP@UR1`YGwT6%pmqHp&3k1iU?=LoYs2qR!vV*j*Dnv9 zUNQr)1HI|)v!+)TVEjBXV|KITv4HVP~+g=pE?OZQpNwNXH)6EBngQo}Z^0V)0J@*ecUWA>9D4A}+@XLSXg6}Y=Ihvr_J3V$#>M|Z3*Frx$Y}b zbgYh@=+u3wzkQ=)2RiA4J+2?V8GrG?`M_UAz8J6nXZ|>T>f=0r){5>6wm;4B9ebWi zn)wW1kE`dY?_PNOCBQ05pZ8i?>E(bOsPfXX6V~h4iJA{f*|hp)$d5r6cIT8o@(N(Q zemu9|&dpx}cA#4pyq%Y@3$PQtJ-fq_oJ0M zjzJ}#UiaQc9Xrvkheq95@hH&8pibFOzg$DdPV`Nyw{AJ4V|@L*xTxgsIc8#!UTVnmcdy*?_l#J;wa`%am?O;_0ggdQ zMLciz(J@{>NM3xnM<>YlxRQLZ1NmaSep)@_K(F&q9^aJuq)7DcQ@MRMf7u_-Bj?;& z?-y?l`$a^ebyH_gx!4MD6ne2l=@S)P9G}je`Rc`95Z@7rQnM>nN!1V^1V5h=KhXBGKy=O1%?# z8^=pGS4!D&MrHjIiK=c~d9wBbxIc_S2bY!{)zS-pGIY^9#WUdkFA^1P7ry}MSV41s zTk!ad=iz=(L9dUvaZ=PAxF3u}@u!mRN!77}oHs;usL==R*CJ8*lTZKJq%YtoG;)8< zM_cs=9En;?jx1MmCg3P^rT4_v4Roxa8EHdyCcg;zk?6~bJ5IEE32+pu`Ps6!AA1vU zw19E^POL{~kGt=lfy>eX*}tx%1ybzJf9z zdeNPJ9B?Fham?lQWqt!3h3XXPxwgRxz|rWhW$T;lItf@o8|LPWt(Ffs5YNhYX!~G|YXaD5e+55fl-XHd+-Ch^+qtMdVwheCJg=0S1G|UqV`O!$kZ9h{# zd8#qw*Fe6w4w_mz;fH*$d|w=ik~XjXvRF%?SI}!mi}f3s$Zgb#ao$mu5`e=zX8Z)Uub{Wy1` zIk-K>>nmo)E9u|dPu>d1$ISK23?DPsGp${@F9ejw%=OHlPiXT#nWrZ@Dq?x;nfK@a z_gtODRlYKApUHV&8<$GGfPBo@kr_T_?1=0i*`!GoFL|uY`%#!rX!HJo>K~|Ek1Q#W z^Zt#RvSA&QYF_p$j&HlZS9i7M|99%mSJ$oor-01=cpqZjuCC$yKV!AmIHA{d@AY*v z<5rvB1}_Q7$IQ4T*Q3f&-q)kh=E+IgL|GooW6wNEz9aV9>LbSOGdWLc_oF3x2jpW$ z-*lYbj^Mjv=^N<1+y;FB)4Mu=M&BWW{UqT#OOy+~pJjwb--jy7@T6# z*w0Z$4|H$@`JvS^diai*NDo0oGJ4pTRHUbKs$73%4D?slr2fho(3AUpl4SBjz9@eM zN-m|Z$jXWI4wLki4Crq%Nq@5eeUwT1$_Dhen53^_K<_k3U)6xVno0Uw4d|my(pNX2 zk1RDt67CD$I3Wcnl5a*{-P@@z(u zjGjDuktEWSXDO0o^u+f^l1NW{c_hi`iLZ_%k-jxOEv0Y6%8B%CP14_KK;OHZz;w;=a&vUMlwPp#?Yx3J<*^hm)R5X7k2;N zx}WbPUIm|iqO@&(KC-M{cH|i^I~UrA$BUWv(RJshUVN;K7yLaq-A^3ccv;F`KKA&>p_jNl3GFjEZs>KUq*wc_jGNG}GgWu5Pf6MFhCXig zT?gZa`c4bhxQW_yYvSb1N;^J(S&g?4?8@Z0(dOg5%f0L>v~g2v?@Rd0r%9SSFg~=&4Tv}{`H3X{Efy9%#Wp5oK;*7 z4zWvx=UiEw74c(4?xj&z)VJk^sWPlbKHjeGb@J7L5l4P}ugEnY@7j21_o~-;2yMLM zU>h89L*g014y?sllJP!d?r|@ojksj#aXcWIw!9f2N*?Ac~_3`=J55$GZ=&7&6 zpC01EWc08;BDNpm!esRHnbE&~hzpa^L!6jcKg5N}=;=MIfBg^_CZmrw=)dYF`;XoW z_}33{VY2#b7}O7OVKVw!2K2Q}$`5g3qW&Q+OjdtggZk^4tiQeieFKy94Grk;Fi9V4 zK;OtDJ-POiByk6f!s66ql>Oh(_FlKas^T$qf$r2##}g~{k!8_+{sn2a9c z#KiVPT$qf$ok9H&7bc@e2K4ROc^Q2N1A2%HlhJoHpoh3H89nu-`P)wylk!8Hn5ch< z3zOB~%|L$reOs1qbp7mZK;Ofp{IHLxC_mdCR67288r0v*Wc|Gj==+$Y?`uF0abYt3 z_cvJ&#EHrHC7I+0abq%m_nPDfabz-n!N!%z_&vbngZp*Z-`1|UGPpm-`{mY;#)EAT zt53Ao6q9-af4fKzab&XgrWw>f#AN;H2J{d|CaZs#0sU~3^^aiXz+P~F)sNPci+3U> zf7OppAV>UP!wDGUb9mcf{0Bad|EwPkn;ny~WPf3NUfXXNV+Pr-!-|q&AaABgd9zqK zZeR4yAlrcNNRxbXSUGNAq{WId%7E`^lYIZb#-p+3E797TRs1yvlxZ>_JZEI;e;x6p53*ra9c*D7n?SjS?EY$6y4%@q=Aln6f z#xGcQQBdO8G(Y_3E4=*O7S+3e9g$<26fo$z$buNaD_7_5JEqykC9KoYb*H zv&M|-Ga3hv;3=XaUZ^268$M_Wz8?|ly!rI-d$Zbk#jE9iVeh>8U61bNzF%IlEnm;I zzVA@1*7AZiJ_=O)%Dz{;>@l?Q!Q)q~jSp(2cEy*Gc$4792m5@A66*Mvm)^W>J+C;G zHD4C|@j-p01#5iRcfTp`e=;}f^CLCDko&)E(aRGn@8I{9>AMPk|5G1z!Rmke?kj`q zfAA}ZI{yE;^p4|?Rs8-j`m2K9|8$Mu-}^rTdw8|6!3IbKd*dqt@B2p*j2k!>RU)-> z;&*n6<9icQrbv+@T2YnpDH^ejeaB1H_`#3&cZ8lS_D>4L86?%F`t;BP9;fi!K;ve6 zr{awklQTzypGFopOZ-N4E>r2LuQCcm_}63j^|31`eZ<$LidYy1eNf-pwbsYJp!9LD zt^M|Kus-EkT(gL4t&f92>0_5GeEOiV5!YHD$AZ#FUWf4MqqYhA;PX}J&o#OIX&b1I z-e}&Y(-(GGTT0=d?>s^E-w|trwFLIU zvUDqz2cURF>_lXA;BsKM(bWT&>&f^Xj0s#WiIwx*7Py?7m5Z+xxEw2H+adhpOv$Bp zIp*%O7TiVKZ`XYm;RfT3u2~1RD?U$Be?-rmtifYa^xHZ`c3(%AW@&75Zd^_lXPme8=!(Z*dpVBtyGi7iH7+$r=P2Vx{ejVWoF9`f zW%SUo+Scj~I%THj44J@oSeNm`O;D6$ClTjY3F5;CrRF52C1ho4x5z`srfRpyruZq1 zF~6S7&sdT2<9zyLr=|?0+!SfQkZTt73t4OCa)y3A1b$>Knez+%Jv!h=*Pz{)YxonF z+q%7zwQJ7Ln!RtCdG_6VdwsAPw|}+bNFe@0jN74YlE;bCXFEj!KJfi*i2o4z0+z+&fHr{- z37{dL^uB=&1mFYj1wg#Nj4#Chi}W`#zB2kU2KARUNng%@9-c;I^+UcWe+85ES7ha` zmVG%4+8gY91l+!`5#R*x5r}$#yCcw(QG6%7M*#M#*%#(p_}+k~Ucb2Q+vsU&+-eP0 z?rParO;(?12Q)TFK7Z9_^rC&$G2nYUJ1?^@c>e(GOAGqLwDA6cC@+mgkjvY^K(2-+ z<+{UwKGr0CBLjLmD&_JwF`%bwX>xja|KMubmtF5Mz*BKtJXHX^#~|7Pytg2;uQp7N zaGfRrq~uiLdka)CqFy^OeaZCNnU%X*_SJ>eC(6srL^|J6UlWa0A*>)y#jf`sz`jVB zGU4BY{NN50#ZBpLl6TFlRm zQ`mVK{a^$7RFm{+2J}Nr(xa38I|Lm<2Dd;ez`9EQsh~h_ltGE6nR$W{H*(>=-lAOT*IHZ z+@aY!c}@a*C(q`bpEY}rF5dd|jlW&?ii<6Pe%PVchrQSE=@;wvUekx4b$h4J{BF!O z{E6GAb$chi0?yBxy>A(N@Q($~)dkz$BMueR;(D-d@7=MuoS!v&PfnY=V8CDTc>h*dx3zXZL-#5D`(w_J$!8^w;-!l=+k0Ki z&z?Anj<_#i9wK{B@OE3bcjANL{H)tM_1(BJ*YGDUw{?3b-%jHEtl9hWE1eGP*f{Ke z%-$Wg**kd#1bZhwBi=98?Vb3RI6v$5PJL2t%r*Qeg1v76FJeR}b+k$&=xY|r2_^#g zLq%K^zlT9wVn%Ub#_w(9rcs`2AY?$R$@{&HWnS-X-S2NTlnIoTYeq z2_g+x1KA-$sYF%5{CuK5U|k*bA>z>W5j%$RWMP&}9wU7u^_e3A z3Z1^8PMQ zsP+Z@YrQ{c%uKYc`m-9JDO)##cp_Oj;uj%FR*v|`Ns^T-L5oSt!Mdr8pK6ld4XhmS zEsVul$mwfSazA?dR3xXr-GH8~ zZIC3Bzc4P6>PhUsVB;c1da~v~l1%?}Ey3S@T2gW;yWrk_rZ7}9AYWPhisagi2oF~)%JSd)Cmv2vh?L_FNcsqyT*sNV_fysUpG z8qiNNN&lb${X-_{CmYbS)9m0tzF0*&Hr)K`8)HYX^B&iPb1z-0I&?I{4)pSXGgF?t zYmc7)L-#hf=6-Zk&+oIRW2fBXe>1G2BIh43w(9Q-Iv%`m-hs6l|LElpEx6ZxNXJgJ z=Znb^%`+iiMXxArPF|>fMK6EhaMSH2V*q3 z!xQLM;O9WkHTXQay^ft|>{rhY?Vw{7HHdxolhh%+{FPhYnv$VoCz}0Jd(#v)p`>zk7A#xyH&?3%9_8RO!dt?zg$+i zx%d1ISVbR=|9;ZaOMo3{WzXc)A4?Wt`iep8&c8FcSb4xsl>htj^BiOS{W0X_;(ES{ zzEG2!m(a1t_1pt*KE$yT&H1?Zi8B>|p93vl+i%@j9jj<;%;#-?MojuEhmmeu;Nvq=-E-+^{?U)ZXJj-BXYtD7&j)v*IT z`$Cfn4ckF^6-ABB+03!W<-Bim|3-Sg1C=WJM2jCr^708kytZ%Hc)&4eLW`-Bdp-;p zx3@;dCXO9w*wYWi^wRTH^iS;**&KUZwLU!aG{;Wlj9k3QJq`FdP*oqS3i&Z;|N2G4 z_WcLS*AlQpz)k_H0**m<7k#+TcRD|(fE@x>QSllLlsUqi-hRi*e-`ob_xWItOUzH0@WVah--Yrj8osW~frjq`jzMqqPMP`P$AF!v?8^98 zICh}+zwG*!V-*b>zxN`?9@i)J+LZrDr&m#lEsHiM=K(*5fN^_#@@t_fztnsJeZtH8 zVyBQFBVZLx7U@S_xS_qy57YZ#OfTRO2cNsm?N#0vJCHAS3b>YlV+1Vb*A?;|XhFNk z)bl?=`&CpvZs3z04*`xruYP}X+}d9NI}tkn!@V3k(6Yo&CUC5xympailt+VpCaO`n)bWHq` zV+X46`k+$EW#Fd@*ePHK`fK`I>8YiP>euJ)#~W{bs5D@YYwP11$`&gFSVg|rAz-I~ zV+8C#jhECtoZ!W;i4S)A<)8ok_4Uu(%XkIOedM#y)fm~n4U z&e!>=0(PM4LVoVV&Xb;xhWef8bh)+L=2r*o5U`3)`Q)o;MB}yYduu~^C;B7h{lBZ% z0jvtxAz&4Cy64R&=GBMt4s>vyYjN`ifK>rI1+1cVQP2PVSuB)yqJbsW6isRb*dbsQ zwJY0a{d_$ikEeu$X7!r#@;Tc}$Ij5PibnciCld27PgLJJ)g0)ZXvg-tDXtcP@%6(8 z^ zc@-U>rvB5@1@tO9a`BCK`s&yzUZ`a#ZQ=P;Md-x*!D)kzv3wO(-&Jqe=0hA0-Z^sgExBj({2E`a`|C={ z^E$s?+m>z^(lcMr|FzNACDZ%D^R35~*5}jy$8rGU`$t!?**T*Cdt5WhP3zENBVZL3 zTM_w5YQ;-BzcCHgjQhJLJpX!J3GWX1)0xfjvdvAtaXkcBMNhvz_|)^$0ef6Y9~Le7 zvyN4?`rR8VFL;9IAA9s<%-mNvPRy%SX;}|=o>oz}BK4ro1ih&QE3MBT=cQ{hw@F`~;LkU$1SNHRtGQ9ao8{mfXLFM=zhXX~V(atAM^0 zRO^pNc3q<L`dzszUgr4SzExh2n+Eow zppLsvOgR1~$D8i^@X+B;I6l~C85+2Y&7YU?6~~9Ge|j`g1^~XD_UGtGHF0fanFcoT`Py>Y;xau0CKAdrc7kjkFQx)_%kN6M=V`*5-b80kHqOGi$~d(Ha4f!L&t2 z@2AAF{pBHE0KP|)JCAbl-zS~U8+5bntjr!+gHy>`zii)fvfd8*hFBsZSp<&24X-{n z1f`Gc$7s6|3lQLTX1(3_lLoWz18IN$%TM_2BQGd@ta*~^!~Z)x*7ZSRF~Hv9U#0cr z2|5YCeQXO#A1ZqR%})D>e}=Z5#&Sdn8t{eiJ%!k?%^xlIQfZ9mk2mo9k9=Iv`8U|_ zQ;|9%OVU9`VtT+1@@}W+l34qAJ)vJWqUuqerF>QSuPFTXwks%mi(g55BOLZtMbkiF zdxQ51x3T_E&ro^(ReAX2LRN0ysler0vTXHY;Bp%nzx>|=ms`Qg9XlPkoRQq&J|BL& z+82~v&00nE6b`$(LsMp8yYhd(o0hll`+En2(#N*9s6G}l^WpPO=+`-z*W(I=K8^*Y z5BEFa(+7>A4s0J>|Dj)B;C{0^)<5SL`u-Wfj|57~Q z+OuB_xu!$E-0RaX)}IRpV1A0?)_%kN!|lnsy%UK!KkN3M;=|9Hy*rPM*nH=KKL2C( zPW)x|*gJ^>2YV+m^1Pozzdr_kN-{=gnv_ZQ18a|+u#`1|bGKhoao1>BdBvBc#Jef$8w;+mQJJ~vz4 z$3T3)gFea1-`|1vMc|oNd{2wY>i>RE39Sus{va2~1MdSu>meWZ8MwhDUyzsGhAZ$M zO=(6i^1aa{-!iNm=mp-RDQm#DoJqcs2K4a$4IGWWb5y~AzM{$c9R~E3Ow!+EK!3AI zdbo=Rz2f&Q$?dUH*?{jYCizm|1pjUs*q76QZ&j0gtFdxmU+~_dUHc1&dWbQQ_coLA z)-a&2X_CH{0ex+g^mPpAZ#PL_*MJ`O6OfG$x;CmPFfWMnSOWw84Nb~-2P-GeW3dK& z8=2(GUjO6oHEW|nQJNU=ZEBKlGgeNtv*reTTbShA(tsZJ4UqLyYXkZ=ChKo&K!2x6 z`gR8Nuy24&e#GcSy|y>t+ku^z@r`5UMEmM!z_*i0zMWY)xQ=V%0-x(*z&G9`Us#*d z`Qi&@0;cU|z&F_U{Ke}xyyq{|Bawk5k)91J>HEk%DY+kgFLqv5KlNGpUyu42@a=1o zZ$DPfTi>Kj5O5>5_imGXlLWrnJNoz>yyq|SCB74qWO}%d7W301^_9r!=^ChiKR&?t z%IY6zP`}$GJu9YU!$5}+T*I&`fOtP! zA3xN04y<-uXVd5J}u7Ax?NIVm>Y8qe-h=kVwc2+#`#&dOX54@{H)pKb84j( zLz_%$!}(eJ9@z41@{w%Vmq;~QJ;lKAL&d#&508}qwXaaeVu<8o4yN2d&dcgAjPs+467>gh zelq<*+@DAfaegv-yW;-D`sp=QZa>im_CtK=B+2A2j02>467?T!9H2-~uNiXvQ=hf} z{C5WxOWJ>S#RH1+Lp-3&ejq+jq$fUTl4SIS@qy;_6rS-D{2A7%U?9#U2=*!V~pKZuu8{zW_^vDiz z1Zg!5XZ4BljxZ^21}n$yi{6Q38t~0B$v2yo$}r`%9QSdVtfP46kMKe=0J8ovJIrti319l0ZviecVwEq@PP{Zh5wfFJMu z=g9t1u-{WpRvPACI6uA!otc(WW`665!LAn*Zm_-u*H$81`1PTf+D{AG9aWsRJ3oSI zP8`=(+D+zss3-DfT2Caaht{Sjbib!!$_jQOe-`TiC?Fj7F`WHq;BpIDxmhy;mz%}P zjh`O4oFGPlgRoB<9c;wTNK`C7Mo@)=+TmCf_YCY;2totlzi*2S>b@*eyIQ2~(HJW6RBRNHm#IsM1WCe*FiGP}aq(KVS9|n!-rcot{J?~PaRcK? zF3_`j;-S6-T0S0*9pf~Hcu|+Mhlq!ZYKdapL<(8{z&HjeZY<;{=;SmX%i~=hw+@z% zwS25UG2aK{eAXI}uc>|l`d4drr|wGcPH~AnI$#ZSP1NdO7aY2>{j`PA= zdlTyE0jSx1TM#lUG+ow?W$)` zc9qm2e0J4P({5n93co&*g3?EPCwuilxWT+bW7lN*D5tF_(4TOuOSps5N6UDs4;ZI> zoglPz2@-bz`k*mV*IFOxLFps6Tln-r*FCSbKC*+-$F}bF>Vv#50ro+!Au@fG5A%2# zACx{K6RAFu*!9ZJ@j_y0V0}2^heNms6Q2sJ+ktK}6{Ng>iw))nRl8oq_9(W#v3o1DA_X!aWb?24z>- z$@Y#jG7qQsq&&^64~JhLvx3sch7^1CLFOIMME2#4_NV?j{*P}0JukLm?N z9}9!hM|^tt^wGeCK42b(?^UHoPDU z=({i1S|4kI(noZbz54LJPWLh~?}UH6YzRsp=_Bpc2l3s(b(+3wajoqmFDQMi8D+0N z$b0CZ5Be^|wbsYBp!AVHCVcv!?-X2Xee4QKA80()2RzsD=f}{#b4jkQU>{TQ-|+kx z{|K#T13u@SB9t;=exBYJls=T%RL&LbKE)1w#803+>AN}C+CB~jrH>VJsO<6Vwu$Q_ zG=Cg<_5*#;h~2>Y;Pr*Jj~lt3L7ebF{5R)kZ6CM1wMSPx{@TlNoS(IQ+|slZoyYlE z-(OHUb`o)ZcIEkkt=nfdmXh3Adz_6gq^4E?sIOr6A%gLTLx;4M!ahVIU#Ceu&=?0rfpMwX7p5h9_LC&?E!=mA>ILlI zX#RqAm#Z~@-A={w>#w@(yi8siL+m|&QTwWIz?b@ZQ};Z6bhq-eJHu)}*|R z4CtxUa=Ga2>~G&B){rEbzDO)0N#gi`{fcDtBzBP`k-jB8Ev=vWM6cfb)tbpA%G<`I zyfh{ozYogF$Hmh>=sV>8dT3{oFYJ2+_ZwtG3POq)y(n*cc3##$9SrE>OwxBWpr^iD zxqWpupzmU`ex_bO`|4_vz8fodwdSw84BFe>q`WjXo7)!zvTDJhn1^Tw5XdXDgPyE@ zurIRh2|3k^ofrA`X6I#m`xwx(aAoQE?`J?C?0!R{{7EL|zsI2dVD}S(aT3hFGe+CZ z5RquCkbi$upSXP7(U^9BJ0d&Khz{W@u`p`wtqN1Egc8choUI(JfQDMBwWSXoei9iZ*`D`{b^jW9cIW)8+dF;ccVn*M zPh9TM?49@pz}|_kfb+9v@6p9upT6<8%eH;@2sG&@pB2CF(CfqA>-hAGb$chi1g=Nx z_D+2eZs?-09=Y7s?Vb28I6rIlzGdveKNdJw7i@cvIDmM23*I^$%tOTY!R54W@5Hyk z`B}Gj>JxEeuHjEy?$GR=+;@Uri7$oovu5veK1lkm`iJipXnW5ceek-lcjAlT{bJqT ziLZt8vu^LyN8`p^!=Jd^*6p46b~rz4_MV(Jcfo+a;@fe4*5WMacO3t=^*h4KOBZdn z_qv#$J@@Y&abLhZM0}21kJjy-_=Gq=>-J84Np8$F{E5qL-QI~0iu1E(@5`@rIUc8ci3j{#9syWPJCFrU##0Z@pW;2*6p48$lRD~_!F1gy1f(M8s}%t-e=$X^Y)pg zowoaDAnr7(4PDuH`^9rIxvf0MPCA2(;($bdDEK#J{zWRSzuy-8m@;~ZHxTQGI2Rc` z(7`d(c%7@YzEz419Z}xW?7XbK#Mej?^bhRYQih)P^PiVx=Vg2$4hZ^s&4Ss$!t;VB>(mzTy%nL%ZUD zz`n@(4B=eeK;9U3Ue-Ui8PL}-Nng`|zLrV)+6MH*7e|sze!Jpzu9kh(r_J)4XBx2c zvi1^R8cASZ3EC`UUmTE^eQBK8@|>T%5ceaK7vg}#`J)+ahO~bn4oIYjxF1>l5CDY}m#D|~Ci}4iD+l*0{V9&`)(oK+RhJ*% z-t4?gk768<_SGePa|dxiV*m6r$rs{)MEbi;(nB1ONDpy8vUWinkVp^xEu)7x9vsw!Ad5|RXg*Y9VzA`DfA3enB$ms2g+Y#l5 zxE)#j5XS>{NI$ZsC}RxTHI|*1@g2v?0bg>xB9}t$2Pt^#da$q64On(AXXt(_;76aW z-Ap6lJ#e{0_gjJ7eR;&NNJ_eNM;&d-{?FJ3h1?hhVWSD@`(8F2Wzu=ln;{bJqTiBE&~vvqr? z??kyV*YGDUcWCxb?)Tw3M|>!ppEY|Qx~Ap_#WLbtoS(Hgi_dqGR4kA4WAa&8Z(F+h z^mSqHJ$(Aby1f%03)iD{d#An`H|84t#N`gn-pO+y*gNs*aDLY8{nFC;xqFu1Y}>l? z$zB_(O+RtS-nb(4v6sDDw^;`+00N7U!!#$3anxZI)H5qWM0J0iX+&d-`1RZCPO zuk3Rd?E8dgx7cb#n}XWfp5Xy)VAe#8C4)m(urQ<={R-+iwOdt2a9@%GJjt zUolRH#sxK2AWlc*3voHJ_ClPFNDpy2GJ1&95$TC&W!Ek*ijVzoAa|~N5j6EI&RGA zXTs>Gw84%Be`c#45nl<{pLIKm#{77MwFbiW!{xSaN5nV7`B}50Uowk6TD9ie1>26+ zZL`&mh!2SC&$=B^-;q0Pw&Ts1%Wd6`Vtw>r&5pLaD_ox9SX8j>sKOpw?TGlccz;;8 zBkB`#dv|x({^oL9w(9C!b=0iJt^J1k zhs$lZMLI>Uh#cQJ`4BRxtZSa*4FQ{i7%4t&$=D;)Qrci z{f7I8%N?2>k>_Z*&nCW4&d-`1HOYQpPI}C9wmq*=J*vo0J_~lFJiFS9pLIJTK2|QD zbvvTISvPHZn18w4q1h4f+kzbti8()Oc2p^T^{V_|c3(&PQdzg7AwK%EZb#I|OnN2! ziT8VGc0~N4U`NC^&G}igqnkE9+(xa`zYXVS&3{BSnQ!ZLEpMX7*7=C|zIl7C+Y$Ad zyJ^$I{LAIGZb!t|&iPrhqsu*JeRBBt0h{lS?6srZ^2OTo_FA8hh%cY>vu;PZn(er? z-*Eqka`#S6P8pq?IU3f5Dn~?Udt;G#Cqfg3dfVyWic%V%gYU+YbDUr3dIf&O$I1DH zX6Gc13;5ABD$)}FWE9^>+DDStdaH(E-9=nyDXQhl*WF;fjL1ilu)M_=7-_a1Pa@U_ z>-(~G9iRibVZDgY;DAYiq1`0J$sDVNa6l$PQ12$=Z z`x!#_-+-TiK9jp`k}NPAQEn^#8}cmA`C0e3kY{(!&$>T|Jlk`A*87S21l*Ww_!E~q zG`$jk0oa#s+@m#r?dh98UtVHUj?MmB?|x$PSy+e6{pn}K^=I9Vh>wEvvu;P!x8V-I I5#bvC59ZuDO#lD@ literal 327680 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 Date: Mon, 31 Jul 2023 13:19:52 +0200 Subject: [PATCH 052/222] Fix merge conflicts --- src/particles/dsmc/dsmc_analyze.f90 | 6 +++--- src/particles/dsmc/dsmc_init.f90 | 9 ++++----- src/particles/particle_tools.f90 | 4 ++-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/particles/dsmc/dsmc_analyze.f90 b/src/particles/dsmc/dsmc_analyze.f90 index 60329f48d..471a986d1 100644 --- a/src/particles/dsmc/dsmc_analyze.f90 +++ b/src/particles/dsmc/dsmc_analyze.f90 @@ -830,7 +830,7 @@ SUBROUTINE WriteDSMCToHDF5(MeshFileName,OutputTime) !> Subroutine to write the sampled macroscopic solution to the HDF5 format !=================================================================================================================================== ! MODULES -USE MOD_DSMC_Vars ,ONLY: DSMC, RadialWeighting, CollisMode, CollInf, SpecDSMC +USE MOD_DSMC_Vars ,ONLY: DSMC, RadialWeighting, CollisMode, CollInf USE MOD_MCC_Vars ,ONLY: SpecXSec USE MOD_PreProc USE MOD_Globals @@ -838,7 +838,7 @@ SUBROUTINE WriteDSMCToHDF5(MeshFileName,OutputTime) USE MOD_Mesh_Vars ,ONLY: offsetElem,nGlobalElems, nElems USE MOD_io_HDF5 USE MOD_HDF5_Output ,ONLY: WriteAttributeToHDF5, WriteHDF5Header, WriteArrayToHDF5 -USE MOD_Particle_Vars ,ONLY: nSpecies, UseVarTimeStep, SampleElecExcitation, ExcitationLevelCounter, DoVirtualCellMerge +USE MOD_Particle_Vars ,ONLY: nSpecies, Species, UseVarTimeStep, SampleElecExcitation, ExcitationLevelCounter, DoVirtualCellMerge USE MOD_BGK_Vars ,ONLY: BGKInitDone USE MOD_FPFlow_Vars ,ONLY: FPInitDone ! IMPLICIT VARIABLE HANDLING @@ -994,7 +994,7 @@ SUBROUTINE WriteDSMCToHDF5(MeshFileName,OutputTime) iCase = CollInf%Coll_Case(iSpec,jSpec) IF(.NOT.SpecXSec(iCase)%UseElecXSec) CYCLE ! Output of the non-election species - IF(SpecDSMC(iSpec)%InterID.EQ.4) THEN + IF(Species(iSpec)%InterID.EQ.4) THEN WRITE(SpecID,'(I3.3)') jSpec ELSE WRITE(SpecID,'(I3.3)') iSpec diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index c38e250a1..a624fab2c 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -300,14 +300,13 @@ SUBROUTINE InitDSMC() !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES CHARACTER(32) :: hilf , hilf2 -INTEGER :: iCase, iSpec, jSpec, nCase, iPart, iInit, iDOF, VarNum, err -INTEGER :: iColl, jColl, pColl, nCollision ! for collision parameter read in +INTEGER :: iCase, iSpec, jSpec, iPart, iInit, iDOF, VarNum, err +INTEGER :: iColl, jColl, pColl ! for collision parameter read in REAL :: A1, A2, delta_ij ! species constant for cross section (p. 24 Laux) LOGICAL :: PostCollPointerSet LOGICAL :: Attr_Exists CHARACTER(LEN=64) :: dsetname INTEGER(HID_T) :: file_id_specdb ! File identifier -INTEGER(HID_T) :: dset_id_specdb ! Dataset identifier INTEGER :: IntToLog CHARACTER(LEN=255) :: hilfname !=================================================================================================================================== @@ -794,7 +793,7 @@ SUBROUTINE InitDSMC() IF(TRIM(Species(iSpec)%Init(iInit)%SpaceIC).EQ.'EmissionDistribution')THEN SpecDSMC(iSpec)%Init(iInit)%TVib = GETREAL('Part-Species'//TRIM(hilf2)//'-TempVib','300.0') SpecDSMC(iSpec)%Init(iInit)%TRot = GETREAL('Part-Species'//TRIM(hilf2)//'-TempRot','300.0') - ELSEIF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + ELSEIF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN SpecDSMC(iSpec)%Init(iInit)%TVib = GETREAL('Part-Species'//TRIM(hilf2)//'-TempVib') SpecDSMC(iSpec)%Init(iInit)%TRot = GETREAL('Part-Species'//TRIM(hilf2)//'-TempRot') END IF @@ -1507,7 +1506,7 @@ SUBROUTINE SetVarVibProb2Elems() USE MOD_part_tools ,ONLY: GetParticleWeight USE MOD_HDF5_INPUT ,ONLY: DatasetExists,ReadAttribute,ReadArray USE MOD_IO_HDF5 -USE MOD_DSMC_Vars ,ONLY: VarVibRelaxProb, CollInf, SpecDSMC, Coll_pData, DSMC +USE MOD_DSMC_Vars ,ONLY: VarVibRelaxProb, CollInf, Coll_pData, DSMC USE MOD_Mesh_Vars ,ONLY: nElems, offsetElem USE MOD_DSMC_Analyze ,ONLY: CalcInstantTransTemp USE MOD_Particle_Vars ,ONLY: PEM diff --git a/src/particles/particle_tools.f90 b/src/particles/particle_tools.f90 index 94b31e45a..27060472c 100644 --- a/src/particles/particle_tools.f90 +++ b/src/particles/particle_tools.f90 @@ -1301,14 +1301,14 @@ SUBROUTINE InitializeParticleMaxwell(iPart,iSpec,iElem,Mode,iInit) END IF ! 2) Set internal energies (rotational, vibrational, electronic) IF(CollisMode.GT.1) THEN - IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN PartStateIntEn(1,iPart) = CalcEVib_particle(iSpec,Tvib,iPart) PartStateIntEn(2,iPart) = CalcERot_particle(iSpec,Trot) ELSE PartStateIntEn(1:2,iPart) = 0.0 END IF IF(DSMC%ElectronicModel.GT.0) THEN - IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN + IF((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN PartStateIntEn(3,iPart) = CalcEElec_particle(iSpec,Telec,iPart) ELSE PartStateIntEn(3,iPart) = 0.0 From d87d3c8d69b753acea35cfcfcc761db88ae13e2c Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 31 Jul 2023 14:35:21 +0200 Subject: [PATCH 053/222] Removed duplicate read-in of species database --- src/particles/boundary/particle_boundary_init.f90 | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/particles/boundary/particle_boundary_init.f90 b/src/particles/boundary/particle_boundary_init.f90 index a0862f783..446841ee8 100644 --- a/src/particles/boundary/particle_boundary_init.f90 +++ b/src/particles/boundary/particle_boundary_init.f90 @@ -301,8 +301,6 @@ SUBROUTINE InitializeVariablesPartBoundary() PartBound%UseRotPeriodicBC = .FALSE. nRotPeriodicBCs = 0 PartBound%UseInterPlaneBC = .FALSE. -! TODO: REMOVE THIS CALL WHEN MERGED WITH UNIFIED SPECIES DATABASE BRANCH -SpeciesDatabase = GETSTR('Particles-Species-Database', 'none') ! Read-in flag for output of boundary-related data in a csv for regression testing PartBound%OutputBCDataForTesting = GETLOGICAL('PartBound-OutputBCDataForTesting') From fadfe9b8e766bd0d845f29c70af4dfe03c8c832b Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Mon, 31 Jul 2023 15:05:06 +0200 Subject: [PATCH 054/222] x_sec --- src/particles/mcc/mcc_xsec.f90 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/particles/mcc/mcc_xsec.f90 b/src/particles/mcc/mcc_xsec.f90 index de5502a83..2bb49ea9b 100644 --- a/src/particles/mcc/mcc_xsec.f90 +++ b/src/particles/mcc/mcc_xsec.f90 @@ -222,7 +222,11 @@ SUBROUTINE ReadVibXSec(iCase,iSpec,jSpec) CALL H5LEXISTS_F(file_id_dsmc, TRIM(spec_pair), GroupFound, err) IF(.NOT.GroupFound) THEN ! Try to swap the species names - spec_pair = TRIM(SpecDSMC(iSpec)%Name)//'-'//TRIM(SpecDSMC(jSpec)%Name) + IF (SpeciesDatabase.EQ.'none') THEN + spec_pair = TRIM(SpecDSMC(iSpec)%Name)//'-'//TRIM(SpecDSMC(jSpec)%Name) + ELSE + spec_pair = TRIM('/Cross-Sections/'//SpecDSMC(iSpec)%Name)//'-'//TRIM(SpecDSMC(jSpec)%Name) + END IF CALL H5LEXISTS_F(file_id_dsmc, TRIM(spec_pair), GroupFound, err) IF(.NOT.GroupFound) THEN LBWRITE(UNIT_StdOut,'(A)') TRIM(spec_pair)//': No vibrational excitation cross sections found, using constant read-in values.' From 4e8ad0fa66860fc5ff8214ab29ae63435f9726c8 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Mon, 31 Jul 2023 15:17:02 +0200 Subject: [PATCH 055/222] added regressionchecks with read-in from database --- .../analyze.ini | 6 + .../command_line.ini | 1 + .../CHEM_EQUI_TCE_Air_5Spec_Database/hopr.ini | 43 +++ .../parameter.ini | 185 ++++++++++ .../readme.md | 10 + .../Figure_Verification.png | Bin 0 -> 38114 bytes .../analyze.ini | 4 + .../command_line.ini | 1 + .../get_values.py | 19 + .../hopr.ini | 28 ++ .../parameter.ini | 223 +++++++++++ .../parameter_old.ini | 217 +++++++++++ .../readme.md | 9 + .../analyze.ini | 6 + .../command_line.ini | 1 + .../hopr.ini | 24 ++ .../parameter.ini | 347 ++++++++++++++++++ .../readme.md | 7 + 18 files changed, 1131 insertions(+) create mode 100644 regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/analyze.ini create mode 100644 regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/command_line.ini create mode 100644 regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/hopr.ini create mode 100644 regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini create mode 100644 regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/readme.md create mode 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/Figure_Verification.png create mode 100755 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/analyze.ini create mode 100755 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/command_line.ini create mode 100755 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/get_values.py create mode 100755 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/hopr.ini create mode 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter.ini create mode 100755 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter_old.ini create mode 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/readme.md create mode 100644 regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/analyze.ini create mode 100644 regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/command_line.ini create mode 100644 regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/hopr.ini create mode 100755 regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini create mode 100644 regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/readme.md diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/analyze.ini b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/analyze.ini new file mode 100644 index 000000000..7fefcf5a6 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/analyze.ini @@ -0,0 +1,6 @@ +compare_data_file_name = PartAnalyze.csv +compare_data_file_reference = PartAnalyze_ref.csv +compare_data_file_tolerance = 0.075 +compare_data_file_tolerance_type = relative +! Allowing differences in values of species 4 (almost completely dissociated O2) +compare_data_file_max_differences = 5 \ No newline at end of file diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/command_line.ini b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/command_line.ini new file mode 100644 index 000000000..0100a3584 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/command_line.ini @@ -0,0 +1 @@ +MPI=1 diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/hopr.ini b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/hopr.ini new file mode 100644 index 000000000..7158fe526 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/hopr.ini @@ -0,0 +1,43 @@ +!=============================================================================== ! +! MAKEFILE PARAMETER (put a "#" in front, NO blanks!) +!=============================================================================== ! +! This is only a dummy parameter needed for the regression check +#MPI= + +!=============================================================================== ! +! OUTPUT +!=============================================================================== ! + ProjectName =cube ! name of the project (used for filenames) + Debugvisu =F ! Write debug mesh to tecplot file + Logging =F ! Write log files + +!=============================================================================== ! +! MESH +!=============================================================================== ! + Mode =1 ! 1 Cartesian 2 gambit file 3 CGNS + nZones =1 ! number of zones + Corner =(/0.,0.,0.,,4.64E-6,0.,0.,,4.64E-6,4.64E-6,0.,,0.,4.64E-6,0. ,,0.,0.,4.64E-6,,4.64E-6,0.,4.64E-6,,4.64E-6,4.64E-6,4.64E-6,,0.,4.64E-6,4.64E-6/) ! [0,1]x[0,1]x[0,0.05] + nElems =(/1,1,1/) ! Anzahl der Elemente in jede Richtung (nfine 4:16 5:32 6:64 7:128) + BCIndex =(/1,1,1,1,1,1/) ! Indices of UserDefinedBoundaries + elemtype =108 ! Elementform (108: Hexaeder) + useCurveds =F ! T if curved boundaries defined + SpaceQuandt =1. ! characteristic length of the mesh + ConformConnect=T + jacobianTolerance = 1e-27 +!=============================================================================== ! +! BOUNDARY CONDITIONS +!=============================================================================== ! + nUserDefinedBoundaries=1 + BoundaryName=BC_adiabat ! Outflow: open (absorbing) [for MAXWELL] + BoundaryType=(/4,0,0,0/) ! Outflow: open (absorbing) [for MAXWELL] + +!=============================================================================== ! +! BASIS +!=============================================================================== ! + NVisu = 7 + +!=============================================================================== ! +! SEARCH +!=============================================================================== ! +! nElemsNodeSearch=50 +! RefineSideSearch=50 diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini new file mode 100644 index 000000000..c07957cba --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini @@ -0,0 +1,185 @@ +! =============================================================================== ! +! EQUATION (linearscalaradvection) +! =============================================================================== ! +IniExactFunc = 0 +! =============================================================================== ! +! DISCRETIZATION +! =============================================================================== ! +N = 1 ! Polynomial degree +NAnalyze = 1 ! Number of analyze points +! =============================================================================== ! +! MESH +! =============================================================================== ! +MeshFile = cube_mesh.h5 +useCurveds = F +! if boundaries have to be changed (else they are used from Mesh directly): +TrackingMethod = triatracking +! =============================================================================== ! +! OUTPUT / VISUALIZATION +! =============================================================================== ! +ProjectName = Reservoir_Air +IterDisplayStep = 100 +Part-AnalyzeStep = 1 +CalcTemp = T +CalcNumDens = T +CalcReacRates = FALSE +Logging = F +! =============================================================================== ! +! CALCULATION +! =============================================================================== ! +tend = 1E-7 ! End time +Analyze_dt = 1E-7 ! Timestep of analyze outputs +CFLscale = 0.2 ! Scaling of theoretical CFL number +! =============================================================================== ! +! PARTICLES +! =============================================================================== ! +Part-maxParticleNumber=500000 +Part-nSpecies=5 +Particles-Species-Database = Species_Database.h5 +Part-nBounds=1 +Part-Boundary1-SourceName=BC_adiabat +Part-Boundary1-Condition=reflective +Part-FIBGMdeltas=(/4.64E-6,4.64E-6,4.64E-6/) +! =============================================================================== ! +! Species1 - N +! =============================================================================== ! +Part-Species1-MacroParticleFactor=500 +Part-Species1-SpeciesName=N +! =============================================================================== ! +! Species2 - O +! =============================================================================== ! +Part-Species2-MacroParticleFactor=500 +Part-Species2-SpeciesName=O +! =============================================================================== ! +! Species3 - N2 +! =============================================================================== ! +Part-Species3-MacroParticleFactor=500 +Part-Species3-SpeciesName=N2 + +Part-Species3-nInits=1 +Part-Species3-Init1-SpaceIC=cell_local +Part-Species3-Init1-velocityDistribution=maxwell_lpn +Part-Species3-Init1-PartDensity=1.9355E+023 +Part-Species3-Init1-VeloIC=0.0 +Part-Species3-Init1-VeloVecIC=(/1.,0.,0./) +Part-Species3-Init1-MWTemperatureIC=30000.0 +Part-Species3-Init1-TempVib=30000.0 +Part-Species3-Init1-TempRot=30000.0 +! =============================================================================== ! +! Species4 - O2 +! =============================================================================== ! +Part-Species4-MacroParticleFactor=500 +Part-Species4-SpeciesName=O2 + +Part-Species4-nInits=1 +Part-Species4-Init1-SpaceIC=cell_local +Part-Species4-Init1-velocityDistribution=maxwell_lpn +Part-Species4-Init1-PartDensity=5.145E+022 +Part-Species4-Init1-VeloIC=0.0 +Part-Species4-Init1-VeloVecIC=(/1.,0.,0./) +Part-Species4-Init1-MWTemperatureIC=30000.0 +Part-Species4-Init1-TempVib=30000.0 +Part-Species4-Init1-TempRot=30000.0 +! =============================================================================== ! +! Species5 - NO +! =============================================================================== ! +Part-Species5-MacroParticleFactor=500 +Part-Species5-SpeciesName=NO +! =============================================================================== ! +! Reactions +! =============================================================================== ! +DSMC-NumOfReactions=8 + +! ============ ! +! Dissociation (N2 + M -> N + N + M) +! ============ ! +!Reaction1 (N2 + molecule -> N + N + molecule) +DSMC-Reaction1-ReactionName = DISS_N2_MOL +DSMC-Reaction1-ReactionModel=TCE +DSMC-Reaction1-Reactants=(/3,0,0/) +DSMC-Reaction1-Products=(/1,0,1,0/) +DSMC-Reaction1-NumberOfNonReactives=3 +DSMC-Reaction1-NonReactiveSpecies=(/3,4,5/) + +!Reaction2 (N2 + atom -> N + N + atom) +DSMC-Reaction2-ReactionName = DISS_N2_AT +DSMC-Reaction2-ReactionModel=TCE +DSMC-Reaction2-Reactants=(/3,0,0/) +DSMC-Reaction2-Products=(/1,0,1,0/) +DSMC-Reaction2-NumberOfNonReactives=2 +DSMC-Reaction2-NonReactiveSpecies=(/1,2/) +! ============ ! +! Dissociation (O2 + M -> O + O + M) +! ============ ! +!Reaction3 (O2 + molecule -> O + O + molecule) +DSMC-Reaction3-ReactionName = DISS_O2_MOL +DSMC-Reaction3-ReactionModel=TCE +DSMC-Reaction3-Reactants=(/4,0,0/) +DSMC-Reaction3-Products=(/2,0,2,0/) +DSMC-Reaction3-Arrhenius-Prefactor=4.58E-11 +DSMC-Reaction3-Arrhenius-Powerfactor=-1.0 +DSMC-Reaction3-Activation-Energy_K=59500.0 +DSMC-Reaction3-NumberOfNonReactives=3 +DSMC-Reaction3-NonReactiveSpecies=(/3,4,5/) + +!Reaction4 (O2 + atom --> O + O + atom) +DSMC-Reaction4-ReactionName = DISS_O2_AT +DSMC-Reaction4-ReactionModel=TCE +DSMC-Reaction4-Reactants=(/4,0,0/) +DSMC-Reaction4-Products=(/2,0,2,0/) +DSMC-Reaction4-NumberOfNonReactives=2 +DSMC-Reaction4-NonReactiveSpecies=(/1,2/) + +! ============ ! +! Dissociation (NO + M -> N + O + M) +! ============ ! +!Reaction5 (NO + molecule --> N + O + molecule) +DSMC-Reaction5-ReactionName = DISS_NO_MOL +DSMC-Reaction5-ReactionModel=TCE +DSMC-Reaction5-Reactants=(/5,0,0/) +DSMC-Reaction5-Products=(/1,0,2,0/) +DSMC-Reaction5-NumberOfNonReactives=3 +DSMC-Reaction5-NonReactiveSpecies=(/3,4,5/) + +!Reaction6 (NO + atom --> N + O + atom) +DSMC-Reaction6-ReactionName = DISS_NO_AT +DSMC-Reaction6-ReactionModel=TCE +DSMC-Reaction6-Reactants=(/5,0,0/) +DSMC-Reaction6-Products=(/1,0,2,0/) +DSMC-Reaction6-NumberOfNonReactives=2 +DSMC-Reaction6-NonReactiveSpecies=(/1,2/) +! ============ ! +! Exchange +! ============ ! + +!Reaction7 (N2 + O --> NO + N) +DSMC-Reaction7-ReactionName = EXC_N2_O +DSMC-Reaction7-ReactionModel=TCE +DSMC-Reaction7-Reactants=(/3,2,0/) +DSMC-Reaction7-Products=(/5,1,0,0/) + +!Reaction8 (NO + O --> N + O2) +DSMC-Reaction8-ReactionName = DISS_NO_O +DSMC-Reaction8-ReactionModel=TCE +DSMC-Reaction8-Reactants=(/5,2,0/) +DSMC-Reaction8-Products=(/4,1,0,0/) + +UseDSMC=true +Particles-DSMCReservoirSim=true +Particles-DSMCReservoirSimRate=false +Particles-DSMCReservoirStatistic=false +Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem) +Part-NumberOfRandomSeeds=2 +Particles-RandomSeed1=1 +Particles-RandomSeed2=2 +ManualTimeStep=2.0E-10 +Particles-HaloEpsVelo=5000 +Particles-DSMC-CalcQualityFactors=F +Particles-DSMC-BackwardReacRate = true +Particles-DSMC-PartitionMaxTemp = 120000. +Particles-DSMC-PartitionInterval= 20. +Particles-DSMC-ElectronicModel = 0 +Particles-DSMCElectronicDatabase = DSMCSpecies_electronic_state_full_Data.h5 +EpsMergeElectronicState = 1E-3 +Particles-DSMC-RotRelaxProb = 1 +Particles-DSMC-VibRelaxProb = 1 diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/readme.md b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/readme.md new file mode 100644 index 000000000..aaed44f57 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/readme.md @@ -0,0 +1,10 @@ +# Chemistry +* Reservoir simulation of high-temperature air dissociating, testing the treatment of multiple reaction paths (e.g. N2 + O2 can result in two different reactions) +* Reference database compared with analytical solution (Haas1993_Temp.csv) of Haas, B. L., & McDonald, J. D. (1993). Validation of chemistry models employed in a particle simulation method. Journal of Thermophysics and Heat Transfer, 7(1), 42–48. https://doi.org/10.2514/3.11567 +* Deviation towards t=1e-7s is due to the calculation of backward rates through equilibrium constant as opposed to the usage of Arrhenius rates (as was done by Haas1993), results in a different equilibrium states +* Initial composition at n=2.45E24 (79% N2, 21% O2) at T=30000K +* Relaxation probabilities set to 1 to emulate analytical solution +* Settings + * BackwardReacRate = true + * Particles-DSMC-RotRelaxProb=1 + * Particles-DSMC-VibRelaxProb=1 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/Figure_Verification.png b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/Figure_Verification.png new file mode 100644 index 0000000000000000000000000000000000000000..0a5904971dd204ea97fa2101585d5bfe4454702e GIT binary patch literal 38114 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 b|0xlelI8MR=aEX0qAI}C-Pf(oB{J(D;5-T< literal 0 HcmV?d00001 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/analyze.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/analyze.ini new file mode 100755 index 000000000..9ef938d9b --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/analyze.ini @@ -0,0 +1,4 @@ +compare_data_file_name = PartAnalyze.csv, PartAnalyze.csv, PartAnalyze.csv, PartAnalyze.csv, PartAnalyze.csv, PartAnalyze.csv +compare_data_file_reference = PartAnalyze_001_ref.csv, PartAnalyze_010_ref.csv, PartAnalyze_050_ref.csv, PartAnalyze_100_ref.csv, PartAnalyze_150_ref.csv, PartAnalyze_200_ref.csv +compare_data_file_tolerance = 0.15 +compare_data_file_tolerance_type = relative \ No newline at end of file diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/command_line.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/command_line.ini new file mode 100755 index 000000000..0100a3584 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/command_line.ini @@ -0,0 +1 @@ +MPI=1 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/get_values.py b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/get_values.py new file mode 100755 index 000000000..473266564 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/get_values.py @@ -0,0 +1,19 @@ +import pandas as pd +import os +import re + +def get_numbers_from_filename(filename): + return re.search(r'\d+', filename).group(0) + +directory = os.getcwd() + +varName_01 = '007-CollRate001+003 ' +varName_02 = '008-CollRate001+004 ' +varName_03 = '009-CollRate001+005 ' +varName_04 = '010-CollRate001+006 ' + +for filename in sorted(os.listdir(directory)): + if filename.startswith("PartAnalyze"): + temp = get_numbers_from_filename(filename) + df = pd.read_csv(filename) + print(temp, *df[varName_01].tail(1).values,*df[varName_02].tail(1).values,*df[varName_03].tail(1).values,*df[varName_04].tail(1).values,sep=",") \ No newline at end of file diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/hopr.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/hopr.ini new file mode 100755 index 000000000..e69b320c8 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/hopr.ini @@ -0,0 +1,28 @@ +!=============================================================================== ! +! OUTPUT +!=============================================================================== ! +ProjectName =cube ! name of the project (used for filenames) +Debugvisu =F ! Write debug mesh to tecplot file +Logging =F ! Write log files +!=============================================================================== ! +! MESH +!=============================================================================== ! +Mode =1 ! 1 Cartesian 2 gambit file 3 CGNS +nZones =1 ! number of zones +Corner =(/0.,0.,0.,,4.64E-6,0.,0.,,4.64E-6,4.64E-6,0.,,0.,4.64E-6,0. ,,0.,0.,4.64E-6,,4.64E-6,0.,4.64E-6,,4.64E-6,4.64E-6,4.64E-6,,0.,4.64E-6,4.64E-6/) +nElems =(/1,1,1/) ! Anzahl der Elemente in jede Richtung +BCIndex =(/1,1,1,1,1,1/) ! Indices of UserDefinedBoundaries +elemtype =108 ! Elementform (108: Hexaeder) +useCurveds =F ! T if curved boundaries defined +SpaceQuandt =1. ! characteristic length of the mesh +ConformConnect=T +jacobianTolerance = 1E-27 +!=============================================================================== ! +! BOUNDARY CONDITIONS +!=============================================================================== ! +BoundaryName = BC_adiabat +BoundaryType = (/4,0,0,0/) +!=============================================================================== ! +! BASIS +!=============================================================================== ! +NVisu = 7 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter.ini new file mode 100644 index 000000000..b596b535a --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter.ini @@ -0,0 +1,223 @@ +! =============================================================================== ! +! POSTI +! =============================================================================== ! +VisuParticles = T +NVisu = 1 +TimeStampLength = 21 +! =============================================================================== ! +! VARIABLES +! =============================================================================== ! +CFLscale = 0.2 +IniExactFunc = 0 +N = 1 +NAnalyze = 1 +! =============================================================================== ! +! MESH +! =============================================================================== ! +ProjectName = H2_Plasma_Chemistry_Test +MeshFile = cube_mesh.h5 +Logging = F +useCurveds = F +TrackingMethod = triatracking +! =============================================================================== ! +! PART ANALYZE +! =============================================================================== ! +Part-AnalyzeStep = 100 +CalcCollRates = T +CalcRelaxProb = F +CalcReacRates = F +! =============================================================================== ! +! CALCULATION +! =============================================================================== ! +IterDisplayStep = 50 +ManualTimeStep= 1.0E-11 +tend = 1.0E-09 +Analyze_dt = 2.0E-6 ! Timestep of analyze outputs +! =============================================================================== ! +! PIC +! =============================================================================== ! +PIC-DoDeposition = F +PIC-DoInterpolation = F +! =============================================================================== ! +! DSMC +! =============================================================================== ! +UseDSMC = T +Particles-DSMC-CollisMode = 3 +Part-NumberOfRandomSeeds = 2 +Particles-RandomSeed1 = 1 +Particles-RandomSeed2 = 2 +Particles-HaloEpsVelo = 3E5 +Particles-DSMC-CalcQualityFactors = T +Particles-CollXSec-NullCollision = T + +Particles-DSMC-ElectronicModel = 1 +EpsMergeElectronicState = 1E-3 +Part-Species$-ElecRelaxProb = 1. + +Particles-DSMCReservoirSim = T +Particles-DSMCReservoirSimRate = T +Particles-DSMCReservoirStatistic = T + +Particles-DSMC-VibRelaxProb = 0. +! =============================================================================== ! +! PARTICLES +! =============================================================================== ! +Part-maxParticleNumber = 500000 +Part-nBounds = 1 +Part-Boundary1-SourceName = BC_adiabat +Part-Boundary1-Condition = reflective +Part-FIBGMdeltas = (/0.01,0.01,0.01/) +! =============================================================================== ! +! SPECIES +! =============================================================================== ! +Part-nSpecies=6 +Particles-Species-Database = Species_Database.h5 +! =============================================================================== ! +! Weighting Factor +! =============================================================================== ! +Part-Species1-MacroParticleFactor = 5 +Part-Species2-MacroParticleFactor = 5 +Part-Species3-MacroParticleFactor = 5 +Part-Species4-MacroParticleFactor = 5 +Part-Species5-MacroParticleFactor = 5 +Part-Species6-MacroParticleFactor = 5 +! =============================================================================== ! +! Species1 | H2 +! =============================================================================== ! +Part-Species1-nInits = 1 +Part-Species1-SpeciesName = H2 +Part-Species1-Init1-velocityDistribution = maxwell_lpn +Part-Species1-Init1-SpaceIC = background +Part-Species1-Init1-VeloIC = 0. +Part-Species1-Init1-PartDensity = 1E22 +Part-Species1-Init1-VeloVecIC = (/0.,1.,0./) +Part-Species1-Init1-MWTemperatureIC = 300. +Part-Species1-Init1-TempVib = 300. +Part-Species1-Init1-TempRot = 300. +Part-Species1-Init1-TempElec = 300. +! =============================================================================== ! +! Species2 | H +! =============================================================================== ! +Part-Species2-SpeciesName = H +! =============================================================================== ! +! Species3 | e +! =============================================================================== ! +Part-Species3-SpeciesName = electron +Part-Species3-nInits = 1 +Part-Species3-Init1-velocityDistribution = constant +Part-Species3-Init1-SpaceIC = cell_local +Part-Species3-Init1-VeloIC = 593158,1875731,4194262,5931582,7264675,8388524 +Part-Species3-Init1-PartDensity = 1E21 +Part-Species3-Init1-VeloVecIC = (/0.,1.,0./) +Part-Species3-Init1-MWTemperatureIC = 300. +Part-Species3-UseCollXSec = T +Part-Species3-UseVibXSec = T +! =============================================================================== ! +! Species4 | H2Ion +! =============================================================================== ! +Part-Species4-SpeciesName = H2Ion1 +Part-Species4-nInits = 1 +Part-Species4-Init1-velocityDistribution = constant +Part-Species4-Init1-SpaceIC = cell_local +Part-Species4-Init1-VeloIC = 13836,43754,97838,138364,169460,195676 +Part-Species4-Init1-PartDensity = 1E21 +Part-Species4-Init1-VeloVecIC = (/0.,1.,0./) +Part-Species4-Init1-MWTemperatureIC = 300. +Part-Species4-Init1-TempVib = 300. +Part-Species4-Init1-TempRot = 300. +Part-Species4-Init1-TempElec = 300. +Part-Species4-UseVibXSec = T +! =============================================================================== ! +! Species5 | HIon +! =============================================================================== ! +Part-Species5-SpeciesName = HIon1 +Part-Species5-nInits = 1 +Part-Species5-Init1-velocityDistribution = constant +Part-Species5-Init1-SpaceIC = cell_local +Part-Species5-Init1-VeloIC = 16948,53594,119840,169480,207569,239680 +Part-Species5-Init1-PartDensity = 1E21 +Part-Species5-Init1-VeloVecIC = (/0.,1.,0./) +Part-Species5-Init1-MWTemperatureIC = 300. +Part-Species5-Init1-TempElec = 300. +Part-Species5-UseCollXSec = T +Part-Species5-UseVibXSec = T +! =============================================================================== ! +! Species6 | H3Ion +! =============================================================================== ! +Part-Species6-SpeciesName = H3Ion1 +Part-Species6-nInits = 1 +Part-Species6-Init1-velocityDistribution = constant +Part-Species6-Init1-SpaceIC = cell_local +Part-Species6-Init1-VeloIC = 12630,39941,89311,126304,154691,178621 +Part-Species6-Init1-PartDensity = 1E21 +Part-Species6-Init1-VeloVecIC = (/0.,1.,0./) +Part-Species6-Init1-MWTemperatureIC = 300. +Part-Species6-Init1-TempVib = 300. +Part-Species6-Init1-TempRot = 300. +Part-Species6-Init1-TempElec = 300. +Part-Species6-UseCollXSec = T +! =============================================================================== ! +! Reactions +! =============================================================================== ! +DSMC-NumOfReactions=11 + +nocrosscombination: Part-Species3-Init1-VeloIC,Part-Species4-Init1-VeloIC, Part-Species5-Init1-VeloIC, Part-Species6-Init1-VeloIC + +! ---------------------------------------------------- +! Electron impact +! ---------------------------------------------------- +! Dissociation: H2 + e --> H + H + e +DSMC-Reaction4-ReactionModel = XSec +DSMC-Reaction4-Reactants = (/1,3,0/) +DSMC-Reaction4-Products = (/2,3,2,0/) +! ---------------------------------------------------- +! Ionization: H2 + e --> H2Ion1 + electron + electron +DSMC-Reaction5-ReactionModel = XSec +DSMC-Reaction5-Reactants = (/1,3,0/) +DSMC-Reaction5-Products = (/4,3,3,0/) +! ---------------------------------------------------- +! Dissociative ionization: H2 + e --> H + HIon + electron + electron +DSMC-Reaction6-ReactionModel = XSec +DSMC-Reaction6-Reactants = (/1,3,0/) +DSMC-Reaction6-Products = (/2,3,3,5/) +! ---------------------------------------------------- +! H2Ion1 impact +! ---------------------------------------------------- +! H3Ion formation: H2 + H2Ion1 --> H + H3Ion +DSMC-Reaction7-ReactionModel = XSec +DSMC-Reaction7-Reactants = (/1,4,0/) +DSMC-Reaction7-Products = (/2,6,0,0/) +! Charge exchange: H2 + H2Ion1 --> H2Ion1 + H2 +DSMC-Reaction8-ReactionModel = XSec +DSMC-Reaction8-Reactants = (/1,4,0/) +DSMC-Reaction8-Products = (/4,1,0,0/) +! Dissociative charge exchange: H2 + H2Ion1 --> H + H2 + HIon1 +DSMC-Reaction9-ReactionModel = XSec +DSMC-Reaction9-Reactants = (/1,4,0/) +DSMC-Reaction9-Products = (/2,1,5,0/) +! ---------------------------------------------------- +! HIon1 impact +! ---------------------------------------------------- +! Charge exchange: H2 + HIon1 --> H2Ion1 + H +DSMC-Reaction10-ReactionModel = XSec +DSMC-Reaction10-Reactants = (/1,5,0/) +DSMC-Reaction10-Products = (/4,2,0,0/) +! ---------------------------------------------------- +! H3Ion1 impact +! ---------------------------------------------------- +! Ionization: H2 + H3Ion1 --> H2Ion1 + H3Ion1 + electron +DSMC-Reaction11-ReactionModel = XSec +DSMC-Reaction11-Reactants = (/1,6,0/) +DSMC-Reaction11-Products = (/4,6,3,0/) +! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H + H2Ion1 +DSMC-Reaction1-ReactionModel = XSec +DSMC-Reaction1-Reactants = (/1,6,0/) +DSMC-Reaction1-Products = (/1,2,4,0/) +! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H + H + HIon1 +DSMC-Reaction2-ReactionModel = XSec +DSMC-Reaction2-Reactants = (/1,6,0/) +DSMC-Reaction2-Products = (/1,2,2,5/) +! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H2 + HIon1 +DSMC-Reaction3-ReactionModel = XSec +DSMC-Reaction3-Reactants = (/1,6,0/) +DSMC-Reaction3-Products = (/1,1,5,0/) diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter_old.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter_old.ini new file mode 100755 index 000000000..32674ba1b --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter_old.ini @@ -0,0 +1,217 @@ +! =============================================================================== ! +! POSTI +! =============================================================================== ! +VisuParticles = T +NVisu = 1 +TimeStampLength = 21 +! =============================================================================== ! +! VARIABLES +! =============================================================================== ! +CFLscale = 0.2 +IniExactFunc = 0 +N = 1 +NAnalyze = 1 +! =============================================================================== ! +! MESH +! =============================================================================== ! +ProjectName = H2_Plasma_Chemistry_Test +MeshFile = cube_mesh.h5 +Logging = F +useCurveds = F +TrackingMethod = triatracking +! =============================================================================== ! +! PART ANALYZE +! =============================================================================== ! +Part-AnalyzeStep = 100 +CalcCollRates = T +CalcRelaxProb = F +CalcReacRates = F +! =============================================================================== ! +! CALCULATION +! =============================================================================== ! +IterDisplayStep = 50 +ManualTimeStep= 1.0E-11 +tend = 1.0E-09 +Analyze_dt = 2.0E-6 ! Timestep of analyze outputs +! =============================================================================== ! +! PIC +! =============================================================================== ! +PIC-DoDeposition = F +PIC-DoInterpolation = F +! =============================================================================== ! +! DSMC +! =============================================================================== ! +UseDSMC = T +Particles-DSMC-CollisMode = 3 +Part-NumberOfRandomSeeds = 2 +Particles-RandomSeed1 = 1 +Particles-RandomSeed2 = 2 +Particles-HaloEpsVelo = 3E5 +Particles-DSMC-CalcQualityFactors = T +Particles-CollXSec-NullCollision = T + +Particles-DSMC-ElectronicModel = 1 +EpsMergeElectronicState = 1E-3 +Part-Species$-ElecRelaxProb = 1. + +Particles-DSMCReservoirSim = T +Particles-DSMCReservoirSimRate = T +Particles-DSMCReservoirStatistic = T + +Particles-DSMC-VibRelaxProb = 0. +! =============================================================================== ! +! PARTICLES +! =============================================================================== ! +Part-maxParticleNumber = 500000 +Part-nBounds = 1 +Part-Boundary1-SourceName = BC_adiabat +Part-Boundary1-Condition = reflective +Part-FIBGMdeltas = (/0.01,0.01,0.01/) +! =============================================================================== ! +! SPECIES +! =============================================================================== ! +Part-nSpecies=6 +Particles-Species-Database = Species_Database.h5 +! =============================================================================== ! +! Weighting Factor +! =============================================================================== ! +Part-Species1-MacroParticleFactor = 5 +Part-Species2-MacroParticleFactor = 5 +Part-Species3-MacroParticleFactor = 5 +Part-Species4-MacroParticleFactor = 5 +Part-Species5-MacroParticleFactor = 5 +Part-Species6-MacroParticleFactor = 5 +! =============================================================================== ! +! Species1 | H2 +! =============================================================================== ! +Part-Species1-nInits = 1 +Part-Species1-SpeciesName = H2 +Part-Species1-Init1-velocityDistribution = maxwell_lpn +Part-Species1-Init1-SpaceIC = background +Part-Species1-Init1-VeloIC = 0. +Part-Species1-Init1-PartDensity = 1E22 +Part-Species1-Init1-VeloVecIC = (/0.,1.,0./) +Part-Species1-Init1-MWTemperatureIC = 300. +Part-Species1-Init1-TempVib = 300. +Part-Species1-Init1-TempRot = 300. +Part-Species1-Init1-TempElec = 300. +! =============================================================================== ! +! Species2 | H +! =============================================================================== ! +Part-Species2-SpeciesName = H +! =============================================================================== ! +! Species3 | e +! =============================================================================== ! +Part-Species3-SpeciesName = electron +Part-Species3-nInits = 1 +Part-Species3-Init1-velocityDistribution = constant +Part-Species3-Init1-SpaceIC = cell_local +Part-Species3-Init1-VeloIC = 593158,1875731,4194262,5931582,7264675,8388524 +Part-Species3-Init1-PartDensity = 1E21 +Part-Species3-Init1-VeloVecIC = (/0.,1.,0./) +Part-Species3-Init1-MWTemperatureIC = 300. +! =============================================================================== ! +! Species4 | H2Ion +! =============================================================================== ! +Part-Species4-SpeciesName = H2Ion1 +Part-Species4-nInits = 1 +Part-Species4-Init1-velocityDistribution = constant +Part-Species4-Init1-SpaceIC = cell_local +Part-Species4-Init1-VeloIC = 13836,43754,97838,138364,169460,195676 +Part-Species4-Init1-PartDensity = 1E21 +Part-Species4-Init1-VeloVecIC = (/0.,1.,0./) +Part-Species4-Init1-MWTemperatureIC = 300. +Part-Species4-Init1-TempVib = 300. +Part-Species4-Init1-TempRot = 300. +Part-Species4-Init1-TempElec = 300. +! =============================================================================== ! +! Species5 | HIon +! =============================================================================== ! +Part-Species5-SpeciesName = HIon1 +Part-Species5-nInits = 1 +Part-Species5-Init1-velocityDistribution = constant +Part-Species5-Init1-SpaceIC = cell_local +Part-Species5-Init1-VeloIC = 16948,53594,119840,169480,207569,239680 +Part-Species5-Init1-PartDensity = 1E21 +Part-Species5-Init1-VeloVecIC = (/0.,1.,0./) +Part-Species5-Init1-MWTemperatureIC = 300. +Part-Species5-Init1-TempElec = 300. +! =============================================================================== ! +! Species6 | H3Ion +! =============================================================================== ! +Part-Species6-SpeciesName = H3Ion1 +Part-Species6-nInits = 1 +Part-Species6-Init1-velocityDistribution = constant +Part-Species6-Init1-SpaceIC = cell_local +Part-Species6-Init1-VeloIC = 12630,39941,89311,126304,154691,178621 +Part-Species6-Init1-PartDensity = 1E21 +Part-Species6-Init1-VeloVecIC = (/0.,1.,0./) +Part-Species6-Init1-MWTemperatureIC = 300. +Part-Species6-Init1-TempVib = 300. +Part-Species6-Init1-TempRot = 300. +Part-Species6-Init1-TempElec = 300. +! =============================================================================== ! +! Reactions +! =============================================================================== ! +DSMC-NumOfReactions=11 + +nocrosscombination: Part-Species3-Init1-VeloIC,Part-Species4-Init1-VeloIC, Part-Species5-Init1-VeloIC, Part-Species6-Init1-VeloIC + +! ---------------------------------------------------- +! Electron impact +! ---------------------------------------------------- +! Dissociation: H2 + e --> H + H + e +DSMC-Reaction4-ReactionModel = XSec +DSMC-Reaction4-Reactants = (/1,3,0/) +DSMC-Reaction4-Products = (/2,3,2,0/) +! ---------------------------------------------------- +! Ionization: H2 + e --> H2Ion1 + electron + electron +DSMC-Reaction5-ReactionModel = XSec +DSMC-Reaction5-Reactants = (/1,3,0/) +DSMC-Reaction5-Products = (/4,3,3,0/) +! ---------------------------------------------------- +! Dissociative ionization: H2 + e --> H + HIon + electron + electron +DSMC-Reaction6-ReactionModel = XSec +DSMC-Reaction6-Reactants = (/1,3,0/) +DSMC-Reaction6-Products = (/2,3,3,5/) +! ---------------------------------------------------- +! H2Ion1 impact +! ---------------------------------------------------- +! H3Ion formation: H2 + H2Ion1 --> H + H3Ion +DSMC-Reaction7-ReactionModel = XSec +DSMC-Reaction7-Reactants = (/1,4,0/) +DSMC-Reaction7-Products = (/2,6,0,0/) +! Charge exchange: H2 + H2Ion1 --> H2Ion1 + H2 +DSMC-Reaction8-ReactionModel = XSec +DSMC-Reaction8-Reactants = (/1,4,0/) +DSMC-Reaction8-Products = (/4,1,0,0/) +! Dissociative charge exchange: H2 + H2Ion1 --> H + H2 + HIon1 +DSMC-Reaction9-ReactionModel = XSec +DSMC-Reaction9-Reactants = (/1,4,0/) +DSMC-Reaction9-Products = (/2,1,5,0/) +! ---------------------------------------------------- +! HIon1 impact +! ---------------------------------------------------- +! Charge exchange: H2 + HIon1 --> H2Ion1 + H +DSMC-Reaction10-ReactionModel = XSec +DSMC-Reaction10-Reactants = (/1,5,0/) +DSMC-Reaction10-Products = (/4,2,0,0/) +! ---------------------------------------------------- +! H3Ion1 impact +! ---------------------------------------------------- +! Ionization: H2 + H3Ion1 --> H2Ion1 + H3Ion1 + electron +DSMC-Reaction11-ReactionModel = XSec +DSMC-Reaction11-Reactants = (/1,6,0/) +DSMC-Reaction11-Products = (/4,6,3,0/) +! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H + H2Ion1 +DSMC-Reaction1-ReactionModel = XSec +DSMC-Reaction1-Reactants = (/1,6,0/) +DSMC-Reaction1-Products = (/1,2,4,0/) +! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H + H + HIon1 +DSMC-Reaction2-ReactionModel = XSec +DSMC-Reaction2-Reactants = (/1,6,0/) +DSMC-Reaction2-Products = (/1,2,2,5/) +! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H2 + HIon1 +DSMC-Reaction3-ReactionModel = XSec +DSMC-Reaction3-Reactants = (/1,6,0/) +DSMC-Reaction3-Products = (/1,1,5,0/) diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/readme.md b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/readme.md new file mode 100644 index 000000000..262bbd60b --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/readme.md @@ -0,0 +1,9 @@ +# XSec Plasma Chemistry +* Test the total collision rates using cross-section based collision and chemistry modelling +* Actual number of reaction is counted (reactions are not performed) +* The collision energy is varied through the velocity (constant distribution) +* Figure_Verification.png shows the comparison with the theoretical rates +* Separate reaction rates are compared in the following regression test: + * CHEM_RATES_XSec_Chem_H2-e + * CHEM_RATES_XSec_Chem_H2-H2Ion1 + * CHEM_RATES_XSec_Chem_H2-H3Ion1 diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/analyze.ini b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/analyze.ini new file mode 100644 index 000000000..688ea9b97 --- /dev/null +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/analyze.ini @@ -0,0 +1,6 @@ +! compare the last row in FieldAnalyze.csv or PartAnalyze.csv with a reference file +compare_data_file_name = PartAnalyze.csv +compare_data_file_reference = PartAnalyze_ref.csv +compare_data_file_tolerance = 0.30 +compare_data_file_tolerance_type = relative +compare_data_file_max_differences = 5 diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/command_line.ini b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/command_line.ini new file mode 100644 index 000000000..5f5e4a494 --- /dev/null +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/command_line.ini @@ -0,0 +1 @@ +MPI=1!6 diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/hopr.ini b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/hopr.ini new file mode 100644 index 000000000..c967392bc --- /dev/null +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/hopr.ini @@ -0,0 +1,24 @@ +!=============================================================================== ! +! OUTPUT +!=============================================================================== ! +ProjectName =cube ! name of the project (used for filenames) +Debugvisu =F ! Write debug mesh to tecplot file +Logging =F ! Write log files +!=============================================================================== ! +! MESH +!=============================================================================== ! +Mode =1 ! 1 Cartesian 2 gambit file 3 CGNS +nZones =1 ! number of zones +Corner =(/0.,0.,0.,,4.64E-6,0.,0.,,4.64E-6,4.64E-6,0.,,0.,4.64E-6,0. ,,0.,0.,4.64E-6,,4.64E-6,0.,4.64E-6,,4.64E-6,4.64E-6,4.64E-6,,0.,4.64E-6,4.64E-6/) ! [0,1]x[0,1]x[0,0.05] +nElems =(/3,2,1/) ! Anzahl der Elemente in jede Richtung (nfine 4:16 5:32 6:64 7:128) +BCIndex =(/1,1,1,1,1,1/) ! Indices of UserDefinedBoundaries +elemtype =108 ! Elementform (108: Hexaeder) +useCurveds =F ! T if curved boundaries defined +SpaceQuandt =1. ! characteristic length of the mesh +ConformConnect=T +jacobianTolerance = 1e-27 +!=============================================================================== ! +! BOUNDARY CONDITIONS +!=============================================================================== ! +BoundaryName=BC_adiabat ! Outflow: open (absorbing) [for MAXWELL] +BoundaryType=(/4,0,0,0/) ! Outflow: open (absorbing) [for MAXWELL] \ No newline at end of file diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini new file mode 100755 index 000000000..a24e877fa --- /dev/null +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini @@ -0,0 +1,347 @@ +! =============================================================================== ! +! EQUATION (linearscalaradvection) +! =============================================================================== ! +IniExactFunc = 0 +! =============================================================================== ! +! DISCRETIZATION +! =============================================================================== ! +N = 1 ! Polynomial degree +NAnalyze = 1 ! Number of analyze points +! =============================================================================== ! +! MESH +! =============================================================================== ! +MeshFile = cube_mesh.h5 +useCurveds = F +! if boundaries have to be changed (else they are used from Mesh directly): +TrackingMethod = triatracking +! =============================================================================== ! +! OUTPUT / VISUALIZATION +! =============================================================================== ! +ProjectName = Reservoir_Titan +IterDisplayStep = 100 +Part-AnalyzeStep = 100 +CalcNumDens = T +! =============================================================================== ! +! CALCULATION +! =============================================================================== ! +tend = 5.0E-6 ! End time: 1e-4 +Analyze_dt = 5.0E-6 ! Timestep of analyze outputs +CFLscale = 0.2 ! Scaling of theoretical CFL number +! =============================================================================== ! +! BOUNDARIES +! =============================================================================== ! +Part-nBounds=1 +Part-Boundary1-SourceName = BC_adiabat +Part-Boundary1-Condition = reflective +Part-FIBGMdeltas=(/4.64E-6,4.64E-6,4.64E-6/) +! =============================================================================== ! +! PARTICLES +! =============================================================================== ! +Part-maxParticleNumber=500000 +Part-nSpecies=18 +Particles-Species-Database = Species_Database.h5 +Part-Species1-MacroParticleFactor = 10 +Part-Species2-MacroParticleFactor = 10 +Part-Species3-MacroParticleFactor = 10 +Part-Species4-MacroParticleFactor = 10 +Part-Species5-MacroParticleFactor = 10 +Part-Species6-MacroParticleFactor = 10 +Part-Species7-MacroParticleFactor = 10 +Part-Species8-MacroParticleFactor = 10 +Part-Species9-MacroParticleFactor = 10 +Part-Species10-MacroParticleFactor = 10 +Part-Species11-MacroParticleFactor = 10 +Part-Species12-MacroParticleFactor = 10 +Part-Species13-MacroParticleFactor = 10 +Part-Species14-MacroParticleFactor = 10 +Part-Species15-MacroParticleFactor = 10 +Part-Species16-MacroParticleFactor = 10 +Part-Species17-MacroParticleFactor = 10 +Part-Species18-MacroParticleFactor = 10 +! =============================================================================== ! +! Species Definition +! =============================================================================== ! +Part-Species1-SpeciesName = CH4 +Part-Species2-SpeciesName = CH3 +Part-Species3-SpeciesName = CH2 +Part-Species4-SpeciesName = CH +Part-Species5-SpeciesName = N2 +Part-Species6-SpeciesName = C2 +Part-Species7-SpeciesName = H2 +Part-Species8-SpeciesName = CN +Part-Species9-SpeciesName = NH +Part-Species10-SpeciesName = HCN +Part-Species11-SpeciesName = N +Part-Species12-SpeciesName = C +Part-Species13-SpeciesName = H +Part-Species14-SpeciesName = electron +Part-Species15-SpeciesName = N2Ion1 +Part-Species16-SpeciesName = CNIon1 +Part-Species17-SpeciesName = NIon1 +Part-Species18-SpeciesName = CIon1 +! =============================================================================== ! +! Species1 - CH4 +! =============================================================================== ! +Part-Species1-nInits=1 +Part-Species1-Init1-SpaceIC=cell_local +Part-Species1-Init1-velocityDistribution=maxwell_lpn +Part-Species1-Init1-VeloIC=0.0 +Part-Species1-Init1-VeloVecIC=(/1.,0.,0./) +Part-Species1-Init1-MWTemperatureIC=25000 +Part-Species1-Init1-TempVib=25000 +Part-Species1-Init1-TempRot=25000 +Part-Species1-Init1-TempElec=25000 +Part-Species1-Init1-PartDensity=5E+021 +! =============================================================================== ! +! Species5 - N2 +! =============================================================================== ! +Part-Species5-nInits=1 +Part-Species5-Init1-SpaceIC=cell_local +Part-Species5-Init1-velocityDistribution=maxwell_lpn +Part-Species5-Init1-VeloIC=0.0 +Part-Species5-Init1-VeloVecIC=(/1.,0.,0./) +Part-Species5-Init1-MWTemperatureIC=25000 +Part-Species5-Init1-TempVib=25000 +Part-Species5-Init1-TempRot=25000 +Part-Species5-Init1-TempElec=25000 +Part-Species5-Init1-PartDensity=5E+021 +! =============================================================================== ! +! DSMC +! =============================================================================== ! +UseDSMC=true +Particles-DSMCReservoirSim=true +Particles-DSMCReservoirSimRate=false +Particles-DSMCReservoirStatistic=false +Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem) +Part-NumberOfRandomSeeds=2 +Particles-RandomSeed1=1 +Particles-RandomSeed2=2 +ManualTimeStep=1e-9 +Particles-HaloEpsVelo=5000 +Particles-DSMC-CalcQualityFactors=F +Particles-DSMC-BackwardReacRate = true +Particles-DSMC-PartitionMaxTemp = 120000. +Particles-DSMC-PartitionInterval= 20. +Particles-DSMC-ElectronicModel = 1!,4 +;Particles-DSMCElectronicDatabase = DSMCSpecies_electronic_state_full_additional_CO2-N2-He.h5 +EpsMergeElectronicState = 1E-2 +Particles-DSMC-RotRelaxProb = 1 +Particles-DSMC-VibRelaxProb = 1 +Part-Species$-ElecRelaxProb = 1 +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=30 ! 18 Species, 28 Reactions +!--------------------------------------------------------------------! +!##################### Dissociation Reactions #######################! +!--------------------------------------------------------------------! +!--------- Reaction1: CH4 + M -> CH3 + H + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction1-ReactionName = DISS_CH4_TO_CH3 +DSMC-Reaction1-Reactants=(/1,0,0/) +DSMC-Reaction1-Products=(/2,0,13,0/) +DSMC-Reaction1-NumberOfNonReactives=18 +DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction2: CH3 + M -> CH2 + H + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction2-ReactionName = DISS_CH3_TO_CH2 +DSMC-Reaction2-Reactants=(/2,0,0/) +DSMC-Reaction2-Products=(/3,0,13,0/) +DSMC-Reaction2-NumberOfNonReactives=18 +DSMC-Reaction2-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction3: CH3 + M -> CH + H2 + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction3-ReactionName = DISS_CH3_TO_CH +DSMC-Reaction3-Reactants=(/2,0,0/) +DSMC-Reaction3-Products=(/4,0,7,0/) +DSMC-Reaction3-NumberOfNonReactives=18 +DSMC-Reaction3-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction4: CH2 + M -> CH + H + M -------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction4-ReactionName = DISS_CH2_TO_CH +DSMC-Reaction4-Reactants=(/3,0,0/) +DSMC-Reaction4-Products=(/4,0,13,0/) +DSMC-Reaction4-NumberOfNonReactives=18 +DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction5: CH2 + M -> C + H2 + M -------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction5-ReactionName = DISS_CH2_TO_C +DSMC-Reaction5-Reactants=(/3,0,0/) +DSMC-Reaction5-Products=(/7,0,12,0/) +DSMC-Reaction5-NumberOfNonReactives=18 +DSMC-Reaction5-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction6: CH + M -> C + H2 + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction6-ReactionName = DISS_CH_TO_C +DSMC-Reaction6-Reactants=(/4,0,0/) +DSMC-Reaction6-Products=(/12,0,13,0/) +DSMC-Reaction6-NumberOfNonReactives=18 +DSMC-Reaction6-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction7a: N2 + M -> N + N + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction7-ReactionName = DISS_N2 +DSMC-Reaction7-Reactants=(/5,0,0/) +DSMC-Reaction7-Products=(/11,0,11,0/) +DSMC-Reaction7-NumberOfNonReactives=13 +DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,14,15,16/) +!--------------------------------------------------------------------! +!--------- Reaction7b: N2 + N/C/H -> N + N + N/C/H ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction8-ReactionName = DISS_N2_WITH_N_C_H +DSMC-Reaction8-Reactants=(/5,0,0/) +DSMC-Reaction8-Products=(/11,0,11,0/) +DSMC-Reaction8-NumberOfNonReactives=5 +DSMC-Reaction8-NonReactiveSpecies=(/11,12,13,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction8: C2 + M -> C + C + M ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction9-ReactionName = DISS_C2 +DSMC-Reaction9-Reactants=(/6,0,0/) +DSMC-Reaction9-Products=(/12,0,12,0/) +DSMC-Reaction9-NumberOfNonReactives=18 +DSMC-Reaction9-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction9: H2 + M -> H + H + M ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction10-ReactionName = DISS_H2 +DSMC-Reaction10-Reactants=(/7,0,0/) +DSMC-Reaction10-Products=(/13,0,13,0/) +DSMC-Reaction10-NumberOfNonReactives=18 +DSMC-Reaction10-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction10: CN + M -> C + N + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction11-ReactionName = DISS_CN +DSMC-Reaction11-Reactants=(/8,0,0/) +DSMC-Reaction11-Products=(/11,0,12,0/) +DSMC-Reaction11-NumberOfNonReactives=18 +DSMC-Reaction11-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction11: HN + M -> N + H + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction12-ReactionName = DISS_HN +DSMC-Reaction12-Reactants=(/9,0,0/) +DSMC-Reaction12-Products=(/11,0,13,0/) +DSMC-Reaction12-NumberOfNonReactives=18 +DSMC-Reaction12-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!--------- Reaction12: HCN + M -> CN + H + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction13-ReactionName = DISS_HDC_TO_CN +DSMC-Reaction13-Reactants=(/10,0,0/) +DSMC-Reaction13-Products=(/8,0,13,0/) +DSMC-Reaction13-NumberOfNonReactives=18 +DSMC-Reaction13-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) +!--------------------------------------------------------------------! +!################## Exchange & Radical Reactions ####################! +!--------------------------------------------------------------------! +!--------- Reaction13: CH3 + H -> CH2 + H2 --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction14-ReactionName = EXC_CH3_H2 +DSMC-Reaction14-Reactants=(/2,13,0/) +DSMC-Reaction14-Products=(/3,7,0,0/) +!--------------------------------------------------------------------! +!--------- Reaction2: CH + N2 -> HCN + N ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction15-ReactionName = EXC_CH_N2 +DSMC-Reaction15-Reactants=(/4,5,0/) +DSMC-Reaction15-Products=(/10,11,0,0/) +!--------------------------------------------------------------------! +!--------- Reaction15: CH + C -> C2 + H -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction16-ReactionName = EXC_CH_C +DSMC-Reaction16-Reactants=(/4,12,0/) +DSMC-Reaction16-Products=(/6,13,0,0/) +!--------------------------------------------------------------------! +!--------- Reaction16: C2 + N2 -> CN + CN ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction17-ReactionName = EXC_C2_N2 +DSMC-Reaction17-Reactants=(/5,6,0/) +DSMC-Reaction17-Products=(/8,8,0,0/) +!--------------------------------------------------------------------! +!--------- Reaction17: H2 + CN -> HCN + H ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction18-ReactionName = EXC_CN_H2 +DSMC-Reaction18-Reactants=(/7,8,0/) +DSMC-Reaction18-Products=(/10,13,0,0/) +!--------------------------------------------------------------------! +!--------- Reaction18: CN + C -> C2 + N -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction19-ReactionName = EXC_CN_C +DSMC-Reaction19-Reactants=(/8,12,0/) +DSMC-Reaction19-Products=(/6,11,0,0/) +!--------------------------------------------------------------------! +!--------- Reaction19: H2 + N -> NH + H -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction20-ReactionName = EXC_H2_N +DSMC-Reaction20-Reactants=(/7,11,0/) +DSMC-Reaction20-Products=(/9,13,0,0/) +!--------------------------------------------------------------------! +!--------- Reaction20: N2 + C -> CN + N -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction21-ReactionName = EXC_N2_C +DSMC-Reaction21-Reactants=(/5,12,0/) +DSMC-Reaction21-Products=(/8,11,0,0/) +!--------------------------------------------------------------------! +!--------- Reaction21: H2 + C -> CH + H -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction22-ReactionName = EXC_H2_C +DSMC-Reaction22-Reactants=(/7,12,0/) +DSMC-Reaction22-Products=(/4,13,0,0/) +!--------------------------------------------------------------------! +!--------- Reaction22: N2 + H -> NH + N -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction23-ReactionName = EXC_N2_H +DSMC-Reaction23-Reactants=(/5,13,0/) +DSMC-Reaction23-Products=(/9,11,0,0/) +!--------------------------------------------------------------------! +!--------- Reaction23: CH4 + H -> CH3 + H2 --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction24-ReactionName = EXC_CH4_H +DSMC-Reaction24-Reactants=(/1,13,0/) +DSMC-Reaction24-Products=(/2,7,0,0/) +!########## IONIZED SPECIES ########################################### +!--------------------------------------------------------------------! +!--------- Reaction7c: N2 + e -> N + N + e ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction25-ReactionName = DISS_N2_WITH_EL +DSMC-Reaction25-Reactants=(/5,14,0/) +DSMC-Reaction25-Products=(/11,14,11,0/) +!--------------------------------------------------------------------! +!--------- Reaction24: N + N -> N2+ + e ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction26-ReactionName = RECOMB_N_ION +DSMC-Reaction26-Reactants=(/11,11,0/) +DSMC-Reaction26-Products=(/15,14,0,0/) +!--------------------------------------------------------------------! +!--------- Reaction25: C + N -> CN+ + e ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction27-ReactionName = RECOMB_C_N_ION +DSMC-Reaction27-Reactants=(/11,12,0/) +DSMC-Reaction27-Products=(/16,14,0,0/) +!--------------------------------------------------------------------! +!--------- Reaction26: N + e -> N+ + e + e ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction28-ReactionName = ION_N_EL +DSMC-Reaction28-ReactionModel=QK +DSMC-Reaction28-Reactants=(/11,14,0/) +DSMC-Reaction28-Products=(/17,14,14,0/) +!--------------------------------------------------------------------! +!--------- Reaction27: C + e -> C+ + e + e ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction29-ReactionName = ION_C_EL +DSMC-Reaction29-ReactionModel=QK +DSMC-Reaction29-Reactants=(/12,14,0/) +DSMC-Reaction29-Products=(/18,14,14,0/) +!--------------------------------------------------------------------! +!--------- Reaction28: CN+ + N -> CN + N+ ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction30-ReactionName = EXC_CN+_N +DSMC-Reaction30-Reactants=(/16,11,0/) +DSMC-Reaction30-Products=(/8,17,0,0/) diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/readme.md b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/readme.md new file mode 100644 index 000000000..2a38a168f --- /dev/null +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/readme.md @@ -0,0 +1,7 @@ +# Titan Chemistry +* Reservoir with CH4 and N2, representative for the atmosphere of Titan +* Initial temperature at T = 25000K +* 18 species and 28 reactions based on the chemistry model by Goecken +* Testing two different models of electronic excitation + * Liechty: Each simulation particle has a single energy level + * BGK-LT: Each simulation particle has a single energy level, relaxation with BGK type equation From 5db2891294915e6c824e0fc45b5a61a3a97f9120 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Mon, 31 Jul 2023 15:59:07 +0200 Subject: [PATCH 056/222] species name in regressionchecks --- .../CHE_PIC_maxwell_RK4/2D_variable_B/parameter.ini | 2 +- .../CHE_PIC_maxwell_RK4/3D_variable_B/parameter.ini | 2 +- regressioncheck/CHE_PIC_maxwell_RK4/IMD_coupling/parameter.ini | 1 + .../CHE_PIC_maxwell_RK4/initialIonization/parameter.ini | 3 +++ .../CHE_PIC_maxwell_RK4/single_particle_PML/parameter.ini | 1 + 5 files changed, 7 insertions(+), 2 deletions(-) diff --git a/regressioncheck/CHE_PIC_maxwell_RK4/2D_variable_B/parameter.ini b/regressioncheck/CHE_PIC_maxwell_RK4/2D_variable_B/parameter.ini index 058c90898..b071e9c03 100644 --- a/regressioncheck/CHE_PIC_maxwell_RK4/2D_variable_B/parameter.ini +++ b/regressioncheck/CHE_PIC_maxwell_RK4/2D_variable_B/parameter.ini @@ -67,7 +67,7 @@ Part-FIBGMdeltas = (/0.5,0.001,.5/) ! =============================================================================== ! ! Species1 - electrons ! =============================================================================== ! - +Part-Species1-SpeciesName=electron Part-Species1-ChargeIC = -1.60217653E-19 Part-Species1-MassIC = 9.1093826E-31 Part-Species1-MacroParticleFactor = 1E6 diff --git a/regressioncheck/CHE_PIC_maxwell_RK4/3D_variable_B/parameter.ini b/regressioncheck/CHE_PIC_maxwell_RK4/3D_variable_B/parameter.ini index 15ed6e7a9..8b729eccb 100644 --- a/regressioncheck/CHE_PIC_maxwell_RK4/3D_variable_B/parameter.ini +++ b/regressioncheck/CHE_PIC_maxwell_RK4/3D_variable_B/parameter.ini @@ -68,7 +68,7 @@ Part-FIBGMdeltas = (/0.5,0.001,.5/) ! =============================================================================== ! ! Species1 - electrons ! =============================================================================== ! - +Part-Species1-SpeciesName=electron Part-Species1-ChargeIC = -1.60217653E-19 Part-Species1-MassIC = 9.1093826E-31 Part-Species1-MacroParticleFactor = 1E6 diff --git a/regressioncheck/CHE_PIC_maxwell_RK4/IMD_coupling/parameter.ini b/regressioncheck/CHE_PIC_maxwell_RK4/IMD_coupling/parameter.ini index 0901591de..b393dd39d 100644 --- a/regressioncheck/CHE_PIC_maxwell_RK4/IMD_coupling/parameter.ini +++ b/regressioncheck/CHE_PIC_maxwell_RK4/IMD_coupling/parameter.ini @@ -122,6 +122,7 @@ Part-nPeriodicVectors=2 ! =============================================================================== ! ! Species1, e- ! =============================================================================== ! +Part-Species1-SpeciesName=electron Part-Species1-ChargeIC=-1.60217653E-19 Part-Species1-MassIC=9.1093826E-31 Part-Species1-MacroParticleFactor=1 diff --git a/regressioncheck/CHE_PIC_maxwell_RK4/initialIonization/parameter.ini b/regressioncheck/CHE_PIC_maxwell_RK4/initialIonization/parameter.ini index 9acaca21d..b9110226b 100644 --- a/regressioncheck/CHE_PIC_maxwell_RK4/initialIonization/parameter.ini +++ b/regressioncheck/CHE_PIC_maxwell_RK4/initialIonization/parameter.ini @@ -53,6 +53,7 @@ PIC-DoDeposition = F ! =============================================================================== ! ! Species1 | N ! =============================================================================== ! +Part-Species1-SpeciesName=N Part-Species1-MacroParticleFactor = 1 Part-Species1-ChargeIC = 0 Part-Species1-MassIC = 2.326E-26 @@ -72,12 +73,14 @@ Part-Species1-Init1-VeloVecIC = (/0.,0.,1./) ! =============================================================================== ! ! Species2 | e ! =============================================================================== ! +Part-Species2-SpeciesName=electron Part-Species2-MacroParticleFactor = 1 Part-Species2-ChargeIC = -1.60217653E-19 Part-Species2-MassIC = 9.1093826E-31 ! =============================================================================== ! ! Species3 | NIon1 ! =============================================================================== ! +Part-Species3-SpeciesName=NIon1 Part-Species3-MacroParticleFactor = 1 Part-Species3-ChargeIC = 1.60217653E-19 Part-Species3-MassIC = 2.3259089e-26 diff --git a/regressioncheck/CHE_PIC_maxwell_RK4/single_particle_PML/parameter.ini b/regressioncheck/CHE_PIC_maxwell_RK4/single_particle_PML/parameter.ini index 47efd9d64..d40844f6b 100644 --- a/regressioncheck/CHE_PIC_maxwell_RK4/single_particle_PML/parameter.ini +++ b/regressioncheck/CHE_PIC_maxwell_RK4/single_particle_PML/parameter.ini @@ -49,6 +49,7 @@ Part-maxParticleNumber=5 Part-nSpecies=1 Part-Species$-MacroParticleFactor = 1 ! Use $ to globally set the MPF (here only 1 species is present, but this reggie tests this feature) +Part-Species1-SpeciesName=electron Part-Species1-ChargeIC=-1.6022E-19 Part-Species1-MassIC=9.10938356e-31 Part-Species1-nInits = 1 From 3909b2e3ee4227845cf1187b278b1bd7dc9d550f Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 31 Jul 2023 16:11:20 +0200 Subject: [PATCH 057/222] Added species name to reggies --- .../parameter.ini | 2 ++ .../gyrotron_variable_Bz/parameter.ini | 1 + .../run_basic/maxwell/parameter.ini | 1 + .../run_basic/maxwell_implicit/parameter.ini | 1 + .../run_basic/poisson/parameter.ini | 27 +------------------ 5 files changed, 6 insertions(+), 26 deletions(-) diff --git a/regressioncheck/CHE_PIC_maxwell_RK4/2D_variable_particle_init_n_T_v/parameter.ini b/regressioncheck/CHE_PIC_maxwell_RK4/2D_variable_particle_init_n_T_v/parameter.ini index 142c2c0ad..927a37c10 100644 --- a/regressioncheck/CHE_PIC_maxwell_RK4/2D_variable_particle_init_n_T_v/parameter.ini +++ b/regressioncheck/CHE_PIC_maxwell_RK4/2D_variable_particle_init_n_T_v/parameter.ini @@ -76,6 +76,7 @@ Part-EmissionDistributionFileName = reggie-linear-rot-symmetry-species-init.h5 ! =============================================================================== ! ! Species1 - electrons ! =============================================================================== ! +Part-Species1-SpeciesName = electron Part-Species1-ChargeIC = -1.60217653E-19 Part-Species1-MassIC = 9.1093826E-31 Part-Species1-MacroParticleFactor = 2E11 @@ -88,6 +89,7 @@ Part-Species1-Init1-EmissionDistributionName = electron ! =============================================================================== ! ! Species2 | HeIon ! =============================================================================== ! +Part-Species1-SpeciesName = HeIon1 Part-Species2-ChargeIC = 1.60217653E-19 Part-Species2-MassIC = 6.645565470903E-027 Part-Species2-MacroParticleFactor = 2E11 diff --git a/regressioncheck/CHE_PIC_maxwell_RK4/gyrotron_variable_Bz/parameter.ini b/regressioncheck/CHE_PIC_maxwell_RK4/gyrotron_variable_Bz/parameter.ini index a9b5e4e44..6c4cfdb72 100644 --- a/regressioncheck/CHE_PIC_maxwell_RK4/gyrotron_variable_Bz/parameter.ini +++ b/regressioncheck/CHE_PIC_maxwell_RK4/gyrotron_variable_Bz/parameter.ini @@ -65,6 +65,7 @@ PIC-shapefunction-alpha = 4 ! soft exciation PIC-variableExternalField = variable_Bz.csv +Part-Species1-SpeciesName = electron Part-Species1-ChargeIC = -1.60217653E-19 Part-Species1-MassIC = 9.1093826E-31 Part-Species1-MacroParticleFactor = 1E6 diff --git a/regressioncheck/run_basic/maxwell/parameter.ini b/regressioncheck/run_basic/maxwell/parameter.ini index 2251fc7e6..3b35db042 100644 --- a/regressioncheck/run_basic/maxwell/parameter.ini +++ b/regressioncheck/run_basic/maxwell/parameter.ini @@ -61,6 +61,7 @@ Part-TrackPosition = F Part-maxParticleNumber=10 !110000 Part-nSpecies=1 +Part-Species1-SpeciesName = custom Part-Species1-ChargeIC = -1. Part-Species1-MassIC = 9. Part-Species1-MacroParticleFactor = 1E0 diff --git a/regressioncheck/run_basic/maxwell_implicit/parameter.ini b/regressioncheck/run_basic/maxwell_implicit/parameter.ini index 5d4805b85..5539dfd7d 100644 --- a/regressioncheck/run_basic/maxwell_implicit/parameter.ini +++ b/regressioncheck/run_basic/maxwell_implicit/parameter.ini @@ -47,6 +47,7 @@ Part-maxParticleNumber=10 !110000 Part-nSpecies=1 PIC-DoInterpolation=F +Part-Species1-SpeciesName = custom Part-Species1-ChargeIC = -1. Part-Species1-MassIC = 9. Part-Species1-MacroParticleFactor = 1E0 diff --git a/regressioncheck/run_basic/poisson/parameter.ini b/regressioncheck/run_basic/poisson/parameter.ini index 5e8648cbe..8ad3e62db 100644 --- a/regressioncheck/run_basic/poisson/parameter.ini +++ b/regressioncheck/run_basic/poisson/parameter.ini @@ -118,29 +118,7 @@ Part-nPeriodicVectors=2 Part-LorentzType = 3 ! new Part-PartLorentzType = 3 ! old -! =============================================================================== ! -! DSMC -! =============================================================================== ! -! UseDSMC=false -! Particles-DSMCReservoirSim=false -! Particles-NumberForDSMCOutputs=0 -! Part-TimeFracForSampling=0.0 -! Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem) -! Part-NumberOfRandomSeeds =2 -! Particles-RandomSeed1= 1 -! Particles-RandomSeed2= 2 -! !ManualTimeStep=3.3E-13 -! -! Particles-HaloEpsVelo=300E6 -! epsCG=1e-6 ! 1.0E-6 -! maxIterCG=2000 !'500' -! ! MISC -! -! xyzPhysicalMinMax = (/-5.00E-01,5.00E-01,-5.00E-01,5.00E-01,-5.00E-01,5.00E-01,/) ! - - - -UseDSMC=T ! yolo +UseDSMC=T Particles-DSMC-ElectronicModel= 1 Particles-DSMCElectronicDatabase=DSMCSpecies_electronic_state_full_Data.h5 ! when supplied: doQK=true Particles-DSMCReservoirSim=false @@ -157,9 +135,6 @@ Particles-HaloEpsVelo=300E5 ! 300E6 epsCG=1e-12 !', 1.0E-6') maxIterCG=10000 !'500' -!xyzPhysicalMinMax = (/-5.00E-01,5.00E-01,-5.00E-01,5.00E-01,-5.00E-01,5.00E-01,/) ! - - EpsMergeElectronicState = 1.e-2 ! merge QK levels when difference falls below eps Particles-DSMC-BackwardReacRate = T ! automatic reaction backward rate calculation (when foward rate is defined) Particles-DSMC-PartitionMaxTemp = 1e6! maximale temperatur für allocation von kb=f(T), sonst abort From 6918bae87073dc21125d3ee4fae2b6d8d85913e9 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Mon, 31 Jul 2023 16:15:36 +0200 Subject: [PATCH 058/222] added all species names in regressionchecks --- regressioncheck/CHE_PIC_maxwell_implicitBC/maxwell/parameter.ini | 1 + .../SurfFlux_ThermionicEmission_Schottky/parameter.ini | 1 + 2 files changed, 2 insertions(+) diff --git a/regressioncheck/CHE_PIC_maxwell_implicitBC/maxwell/parameter.ini b/regressioncheck/CHE_PIC_maxwell_implicitBC/maxwell/parameter.ini index 96ce0493b..1628b0888 100644 --- a/regressioncheck/CHE_PIC_maxwell_implicitBC/maxwell/parameter.ini +++ b/regressioncheck/CHE_PIC_maxwell_implicitBC/maxwell/parameter.ini @@ -65,6 +65,7 @@ PIC-DoDeposition = T PIC-Interpolation-Type = particle_position PIC-Deposition-Type = cell_volweight +Part-Species1-SpeciesName=custom Part-Species1-ChargeIC=-1. Part-Species1-MassIC=9. Part-Species1-MacroParticleFactor=1E0 diff --git a/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/parameter.ini b/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/parameter.ini index d04cc4703..a83b0cfe2 100644 --- a/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/parameter.ini +++ b/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/parameter.ini @@ -85,6 +85,7 @@ BPO-Species = (/1/) ! electrons ! =============================================================================== ! ! Species1 - electron ! =============================================================================== ! +Part-Species1-SpeciesName=electron Part-Species1-MassIC = 9.11E-31 Part-Species1-ChargeIC = -1.60217653E-19 Part-Species1-MacroParticleFactor = 1E4 From 29dad19c1fd7510b5eccb546ce40298b9649d45f Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Mon, 31 Jul 2023 16:31:52 +0200 Subject: [PATCH 059/222] reference soutions for regressionchecks --- .../PartAnalyze.csv | 502 ++++++++++++++++++ .../externals.ini | 7 + .../PartAnalyze_001_ref.csv | 3 + .../PartAnalyze_010_ref.csv | 3 + .../PartAnalyze_050_ref.csv | 3 + .../PartAnalyze_100_ref.csv | 3 + .../PartAnalyze_150_ref.csv | 3 + .../PartAnalyze_200_ref.csv | 3 + .../externals.ini | 7 + .../PartAnalyze_ref.csv | 2 + .../externals.ini | 7 + 11 files changed, 543 insertions(+) create mode 100644 regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/PartAnalyze.csv create mode 100644 regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/externals.ini create mode 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_001_ref.csv create mode 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_010_ref.csv create mode 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_050_ref.csv create mode 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_100_ref.csv create mode 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_150_ref.csv create mode 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_200_ref.csv create mode 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/externals.ini create mode 100644 regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/PartAnalyze_ref.csv create mode 100644 regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/externals.ini diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/PartAnalyze.csv b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/PartAnalyze.csv new file mode 100644 index 000000000..93ea9b102 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/PartAnalyze.csv @@ -0,0 +1,502 @@ +001-TIME,002-NumDens-Spec-001,003-NumDens-Spec-002,004-NumDens-Spec-003,005-NumDens-Spec-004,006-NumDens-Spec-005,007-NumDens-Spec-006,008-TempTra-001,009-TempTra-002,010-TempTra-003,011-TempTra-004,012-TempTra-005,013-TempTra-006,014-TempVib001,015-TempVib002,016-TempVib003,017-TempVib004,018-TempVib005,019-XiVibMean001,020-XiVibMean002,021-XiVibMean003,022-XiVibMean004,023-XiVibMean005,024-TempRot001,025-TempRot002,026-TempRot003,027-TempRot004,028-TempRot005,029-TempTotal001,030-TempTotal002,031-TempTotal003,032-TempTotal004,033-TempTotal005,034-TempTotal006 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1935536944806061E+024,0.5144781426821520E+023,0.0000000000000000E+000,0.2450015087488213E+024,0.0000000000000000E+000,0.0000000000000000E+000,0.3005082716158227E+005,0.3023341938152726E+005,0.0000000000000000E+000,0.3008916966268165E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2991625552139451E+005,0.3020134051058106E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1888717178564868E+001,0.1925688857449134E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2985091379043164E+005,0.2986313628248379E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2995589010814851E+005,0.3011756951605653E+005,0.0000000000000000E+000,0.2998984113233414E+005 +0.2000000000000000E-009,0.2002055229816722E+021,0.1081109824101030E+022,0.1934535917191153E+024,0.5090725935616469E+023,0.0000000000000000E+000,0.2456421664223627E+024,0.2681418191558787E+005,0.2759298830149095E+005,0.3002557986886600E+005,0.3012337595758996E+005,0.0000000000000000E+000,0.3003252367916242E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2993176892522535E+005,0.3018810527747351E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1888773745521676E+001,0.1925656691441380E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2978524596784538E+005,0.2979924348405897E+005,0.0000000000000000E+000,0.2681418191558787E+005,0.2759298830149095E+005,0.2993008312681377E+005,0.3004777034754827E+005,0.0000000000000000E+000,0.2994164733463340E+005 +0.4000000000000000E-009,0.3904007698142607E+021,0.2152209372052976E+022,0.1933584940956990E+024,0.5037170958218872E+023,0.0000000000000000E+000,0.2462728138197549E+024,0.2518038949979440E+005,0.2627843295608793E+005,0.3002599590573264E+005,0.3007910318771826E+005,0.0000000000000000E+000,0.2999642640564917E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2988272777507559E+005,0.3012650948671688E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1888594728717898E+001,0.1925506626191616E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2975056510034915E+005,0.2978413059538960E+005,0.0000000000000000E+000,0.2518038949979440E+005,0.2627843295608793E+005,0.2990674995217194E+005,0.3000709920754353E+005,0.0000000000000000E+000,0.2988807428520296E+005 +0.6000000000000000E-009,0.6156319831686420E+021,0.3178262677334046E+022,0.1932433759199845E+024,0.4985618036051091E+023,0.5005138074541805E+019,0.2468984560790727E+024,0.2434252255207352E+005,0.2677355874208864E+005,0.3005089920117094E+005,0.3001513672847570E+005,0.0000000000000000E+000,0.2998664648149135E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2984500616207691E+005,0.3008734543269026E+005,0.3147634360879520E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1888456639631430E+001,0.1925410895760405E+001,0.1914250293771855E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2967368998830790E+005,0.2963896170699815E+005,0.4547406382864215E+005,0.2434252255207352E+005,0.2677355874208864E+005,0.2988493481142946E+005,0.2992657611794686E+005,0.2186813048892405E+005,0.2983930914980982E+005 +0.8000000000000000E-009,0.8008220919266886E+021,0.4284398191807785E+022,0.1931482782965682E+024,0.4930061003423677E+023,0.1001027614908361E+020,0.2475441188906886E+024,0.2449620649500907E+005,0.2731252534606971E+005,0.3002777041766807E+005,0.2995037694569073E+005,0.2051549055199303E+005,0.2994708275808576E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2979824534572280E+005,0.3009118162172482E+005,0.3284657174224074E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1888284984597696E+001,0.1925420283593841E+001,0.1917777005598174E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2964785241528079E+005,0.2950473453895603E+005,0.7874296216038869E+005,0.2449620649500907E+005,0.2731252534606971E+005,0.2985454228404909E+005,0.2986082618792983E+005,0.4076812475286923E+005,0.2979490427590089E+005 +0.1000000000000000E-008,0.1011037891057444E+022,0.5395538844356065E+022,0.1930381652589283E+024,0.4874003456988809E+023,0.2002055229816722E+020,0.2482047971165281E+024,0.2400236490382620E+005,0.2795592535132151E+005,0.2997972209740233E+005,0.2978808543049905E+005,0.3155042172329995E+005,0.2987387506959071E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2972508821793872E+005,0.2999253709073714E+005,0.2188184105449025E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1888015368908503E+001,0.1925178129767855E+001,0.1877447144310090E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2969640945680562E+005,0.2954892831286430E+005,0.5742840280166017E+005,0.2400236490382620E+005,0.2795592535132151E+005,0.2982766408025660E+005,0.2977585348948655E+005,0.3643649533250729E+005,0.2975360598404082E+005 +0.1200000000000000E-008,0.1191222861740949E+022,0.6446617840009844E+022,0.1929480727735866E+024,0.4821449507206120E+023,0.2002055229816722E+020,0.2488204290996967E+024,0.2429774024086125E+005,0.2842837748147072E+005,0.2997984142948160E+005,0.2967711928116584E+005,0.2618086625925349E+005,0.2985347721884583E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2964946871000300E+005,0.2980812664416994E+005,0.2188184105449025E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887735307545758E+001,0.1924721193982586E+001,0.1877447144310090E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2971200279515198E+005,0.2944495124505277E+005,0.5742840280166017E+005,0.2429774024086125E+005,0.2842837748147072E+005,0.2981152289456363E+005,0.2964647784187312E+005,0.3409425030261033E+005,0.2971765369241167E+005 +0.1400000000000000E-008,0.1421459213169872E+022,0.7347542693427369E+022,0.1928279494597976E+024,0.4775902750727789E+023,0.3003082844725083E+020,0.2493860097021200E+024,0.2437488150441725E+005,0.2843562150411255E+005,0.2999648059151633E+005,0.2958114423080794E+005,0.4096260792537043E+005,0.2984023248669312E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2962750732015469E+005,0.2978514392138506E+005,0.2051053273817972E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887653709650972E+001,0.1924663855596020E+001,0.1869439496743317E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2963410344131728E+005,0.2932597170983166E+005,0.4414541628376050E+005,0.2437488150441725E+005,0.2843562150411255E+005,0.2979013339045793E+005,0.2956414496363761E+005,0.3632346663245616E+005,0.2967686849754945E+005 +0.1600000000000000E-008,0.1766813740313257E+022,0.8493719312497442E+022,0.1926427593510395E+024,0.4717342635255650E+023,0.5505651881995985E+020,0.2501317752752267E+024,0.2551543870894971E+005,0.2845122279987489E+005,0.2992799362491511E+005,0.2953142324001687E+005,0.2902292782309156E+005,0.2977168860086478E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2958363415496535E+005,0.2981567188312189E+005,0.2898481906653794E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887490342644460E+001,0.1924739999179677E+001,0.1906997021767707E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2957969170048906E+005,0.2930136131849364E+005,0.4226094488569314E+005,0.2551543870894971E+005,0.2845122279987489E+005,0.2973248278485730E+005,0.2954398412895431E+005,0.3284562540885000E+005,0.2962432330479062E+005 +0.1800000000000000E-008,0.1946998710996762E+022,0.9574829136598471E+022,0.1925426565895487E+024,0.4662286116435691E+023,0.7507707111812707E+020,0.2507624226726189E+024,0.2543645897462250E+005,0.2822744602399814E+005,0.2988306932698028E+005,0.2941094217642744E+005,0.3842793961635099E+005,0.2970010630910177E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2966121521610929E+005,0.2972015839013863E+005,0.2654281409571432E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887778903260019E+001,0.1924501253000369E+001,0.1898589946728246E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2951986425373649E+005,0.2918630749500129E+005,0.4153647335486717E+005,0.2543645897462250E+005,0.2822744602399814E+005,0.2971680068324532E+005,0.2943200039023305E+005,0.3605819268570396E+005,0.2957564617061750E+005 +0.2000000000000000E-008,0.2187245338574769E+022,0.1056584647535775E+023,0.1924175281376851E+024,0.4612234735690272E+023,0.8508734726721067E+020,0.2513780546557876E+024,0.2542359961276462E+005,0.2865746948853170E+005,0.2992094333526376E+005,0.2932579728820911E+005,0.3240095151573489E+005,0.2972034913365250E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2962598210114591E+005,0.2951664908256350E+005,0.3083150489247487E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887648038271816E+001,0.1923987474175537E+001,0.1912483777448315E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2939573285950866E+005,0.2911992273097693E+005,0.3999861410710988E+005,0.2542359961276462E+005,0.2865746948853170E+005,0.2968759750552211E+005,0.2931936275133730E+005,0.3416497503734891E+005,0.2954115088309511E+005 +0.2200000000000000E-008,0.2332394342736481E+022,0.1166197171368240E+023,0.1923324407904179E+024,0.4556177189255405E+023,0.1101130376399197E+021,0.2519986917770308E+024,0.2581345531621344E+005,0.2872436544849754E+005,0.2983581314976840E+005,0.2944820061257382E+005,0.3450484581363104E+005,0.2967910761823041E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2959124767683905E+005,0.2940904846206797E+005,0.2761434927337212E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887518726557849E+001,0.1923712990333085E+001,0.1902458867173890E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2938483547865469E+005,0.2904982516224082E+005,0.3960602772632086E+005,0.2581345531621344E+005,0.2872436544849754E+005,0.2963783513963346E+005,0.2932224674903107E+005,0.3408376073760261E+005,0.2950504861118032E+005 +0.2400000000000000E-008,0.2617687212985364E+022,0.1274808667585797E+023,0.1921772815101071E+024,0.4500620156627991E+023,0.1351387280126287E+021,0.2526843956932430E+024,0.2587624366038824E+005,0.2843900472070336E+005,0.2981169294084660E+005,0.2943717752449479E+005,0.3402399820815693E+005,0.2963721760654923E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2953861760185237E+005,0.2939729106997144E+005,0.2670525652938386E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887322223695852E+001,0.1923682877644211E+001,0.1899196080094298E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2934103043939040E+005,0.2894654633851870E+005,0.3780889012592436E+005,0.2587624366038824E+005,0.2843900472070336E+005,0.2960018749480725E+005,0.2928436993924492E+005,0.3310650846028950E+005,0.2944865107914731E+005 +0.2600000000000000E-008,0.2852928702488829E+022,0.1396433522797163E+023,0.1920571581963181E+024,0.4439557472118580E+023,0.1401438660871705E+021,0.2534101407140516E+024,0.2572884533651708E+005,0.2825067994617411E+005,0.2975248837751277E+005,0.2935345994615184E+005,0.3285023285985803E+005,0.2955623778700382E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2950799976224916E+005,0.2932289007074007E+005,0.2805041918653925E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887207590968778E+001,0.1923491771503041E+001,0.1903950156496362E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2936876676600516E+005,0.2882560018455442E+005,0.4049464220586158E+005,0.2572884533651708E+005,0.2825067994617411E+005,0.2957406425170922E+005,0.2919248330838178E+005,0.3374105804806588E+005,0.2939330256624371E+005 +0.2800000000000000E-008,0.3078159915843210E+022,0.1509049129474354E+023,0.1919270246063800E+024,0.4381497870453896E+023,0.1751798326089632E+021,0.2540858343541147E+024,0.2580446377174559E+005,0.2824472890824046E+005,0.2973727208627400E+005,0.2929075724688515E+005,0.3511833164639210E+005,0.2952769563370605E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2946913953070796E+005,0.2918660454348150E+005,0.2575958415352950E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887061762667133E+001,0.1923139215666032E+001,0.1895562099820661E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2929300142627294E+005,0.2885385009841102E+005,0.4111137496613008E+005,0.2580446377174559E+005,0.2824472890824046E+005,0.2953478747658219E+005,0.2913560877856447E+005,0.3428388184716026E+005,0.2934741689288276E+005 +0.3000000000000000E-008,0.3378468200315718E+022,0.1607149835735373E+023,0.1917668601879947E+024,0.4331446489708477E+023,0.1952003849071304E+021,0.2547264920276560E+024,0.2603345777487410E+005,0.2809757013774979E+005,0.2971834472854769E+005,0.2922733937795712E+005,0.3310997983863980E+005,0.2948631886173892E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2938989290992872E+005,0.2907409414526297E+005,0.2395596899438577E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1886763207758986E+001,0.1922845706171756E+001,0.1887851534250676E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2930766129958950E+005,0.2872779510317457E+005,0.4374757353895628E+005,0.2603345777487410E+005,0.2809757013774979E+005,0.2950909146669826E+005,0.2904045734386976E+005,0.3368980853615181E+005,0.2929745215554577E+005 +0.3200000000000001E-008,0.3573668585222848E+022,0.1706752083418755E+023,0.1916567471503548E+024,0.4280394081348151E+023,0.2202260752798394E+021,0.2553221034585265E+024,0.2617858586088338E+005,0.2787591731154760E+005,0.2966444373824057E+005,0.2909259015325879E+005,0.3280359567989206E+005,0.2940293376386616E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2939306508918351E+005,0.2903938595537058E+005,0.2512228685376412E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1886775188987689E+001,0.1922754708918967E+001,0.1892961717599445E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2929553830615454E+005,0.2877418809380133E+005,0.4331320475156790E+005,0.2617858586088338E+005,0.2787591731154760E+005,0.2948295946850102E+005,0.2898582589942982E+005,0.3374351016946347E+005,0.2924961518553026E+005 +0.3400000000000001E-008,0.3753853555906353E+022,0.1802850734449958E+023,0.1915566443888639E+024,0.4231343728217642E+023,0.2402466275780066E+021,0.2558926891990243E+024,0.2608720316086643E+005,0.2798311079096106E+005,0.2962710795905543E+005,0.2898021417249727E+005,0.3284731801762974E+005,0.2935540908985251E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2936558760894125E+005,0.2880907789570350E+005,0.2490940236363590E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1886671323164920E+001,0.1922145412153781E+001,0.1892063994362888E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2927967856369750E+005,0.2891374361541189E+005,0.4124337709592155E+005,0.2608720316086643E+005,0.2798311079096106E+005,0.2945456280916518E+005,0.2891348776096422E+005,0.3310458111890428E+005,0.2921545281651137E+005 +0.3600000000000001E-008,0.4019125873857069E+022,0.1900450926903523E+023,0.1914064902466277E+024,0.4180791833664769E+023,0.2752825940997992E+021,0.2565133263202675E+024,0.2586275053354936E+005,0.2769550703190216E+005,0.2963801254937380E+005,0.2885293240942416E+005,0.3171833831616310E+005,0.2930922064029336E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2930615137069191E+005,0.2876562871582525E+005,0.2998146292554832E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1886445999179706E+001,0.1922029385025101E+001,0.1910040825026584E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2926188497180114E+005,0.2883909164719427E+005,0.3856744321430694E+005,0.2586275053354936E+005,0.2769550703190216E+005,0.2943786673422953E+005,0.2882469187791168E+005,0.3322060250751678E+005,0.2915688415459684E+005 +0.3800000000000001E-008,0.4244357087211450E+022,0.1987039815593096E+023,0.1912713515186150E+024,0.4135245077186438E+023,0.3203288367706755E+021,0.2570588863703925E+024,0.2581715974548322E+005,0.2745784262036351E+005,0.2961394001381010E+005,0.2876798089819826E+005,0.3276462246096969E+005,0.2925242505331455E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2934739336358229E+005,0.2874439111431374E+005,0.2813607449508984E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1886602443401832E+001,0.1921972546017888E+001,0.1904237743234228E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2918730576019429E+005,0.2878454658594164E+005,0.3538063817269567E+005,0.2581715974548322E+005,0.2745784262036351E+005,0.2941701619252413E+005,0.2876621730531710E+005,0.3224583610934724E+005,0.2910496858100529E+005 +0.4000000000000001E-008,0.4434552334044039E+022,0.2073128190475216E+023,0.1911512282048260E+024,0.4089698320708108E+023,0.3703802175160935E+021,0.2575844258682194E+024,0.2611945610478883E+005,0.2739933784157387E+005,0.2959467870737321E+005,0.2882638528419968E+005,0.3086055393287751E+005,0.2923799831163844E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2926180542709495E+005,0.2870347777160336E+005,0.2666135334103848E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1886277298523026E+001,0.1921862814188414E+001,0.1899032976366424E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2918689904288840E+005,0.2866872825718102E+005,0.3496998180356990E+005,0.2611945610478883E+005,0.2739933784157387E+005,0.2938506608530337E+005,0.2874670652619973E+005,0.3089598431043077E+005,0.2906984680897351E+005 +0.4200000000000001E-008,0.4709834928143838E+022,0.2168726327698964E+023,0.1909860586483662E+024,0.4039146426155236E+023,0.4254367363360533E+021,0.2582000578513881E+024,0.2614682697658369E+005,0.2727552637682632E+005,0.2956961889875406E+005,0.2872606895635015E+005,0.2972837302549662E+005,0.2918279462072468E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2920299306985030E+005,0.2869437846985203E+005,0.2680081009110798E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1886052790364162E+001,0.1921838367402142E+001,0.1899549254312290E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2918826528093112E+005,0.2856700637085328E+005,0.3380253071081749E+005,0.2614682697658369E+005,0.2727552637682632E+005,0.2935844089191330E+005,0.2867131050292938E+005,0.3010336351926756E+005,0.2901864169630254E+005 +0.4400000000000001E-008,0.4945076417647303E+022,0.2277337823916521E+023,0.1908509199203536E+024,0.3983088879720367E+023,0.4604727028578460E+021,0.2588607360772276E+024,0.2592420875419039E+005,0.2724320673735341E+005,0.2948644613349963E+005,0.2876145505804849E+005,0.3023706093184081E+005,0.2911082687944956E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2918447335102405E+005,0.2867087645773059E+005,0.2444501687808031E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1885981910303199E+001,0.1921775154516637E+001,0.1890052498135956E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2919036893053605E+005,0.2847191926731367E+005,0.3357263921832129E+005,0.2592420875419039E+005,0.2724320673735341E+005,0.2931774548539861E+005,0.2865264723515929E+005,0.2961644000604678E+005,0.2896860227741810E+005 +0.4600000000000001E-008,0.5210348735598018E+022,0.2375939043984995E+023,0.1907007657781173E+024,0.3932036471360042E+023,0.4955086693796387E+021,0.2594863783365453E+024,0.2602987497716289E+005,0.2724124572511755E+005,0.2943044901119171E+005,0.2873069418773197E+005,0.3053080611321456E+005,0.2905778324257012E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2915525606049460E+005,0.2858270172854463E+005,0.2441611917525257E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1885869908289393E+001,0.1921537078715469E+001,0.1889924847262423E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2915517613046748E+005,0.2845767154185950E+005,0.3317891557395321E+005,0.2602987497716289E+005,0.2724124572511755E+005,0.2927512747878024E+005,0.2861071819396069E+005,0.2962222147773840E+005,0.2892371976381870E+005 +0.4800000000000002E-008,0.5470615915474192E+022,0.2475040777860922E+023,0.1905556167739556E+024,0.3880984062999715E+023,0.5255394978268894E+021,0.2601120205958630E+024,0.2589934413251907E+005,0.2719128738580867E+005,0.2939542500153523E+005,0.2864674925586691E+005,0.2930421549297697E+005,0.2900027624689471E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2914954087842754E+005,0.2856669705675223E+005,0.2557682419115750E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1885847973896107E+001,0.1921493709920865E+001,0.1894829386675502E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2912998642596692E+005,0.2827700957448982E+005,0.3200810060753555E+005,0.2589934413251907E+005,0.2719128738580867E+005,0.2925098712978975E+005,0.2851768764037516E+005,0.2906418049683807E+005,0.2887472089477688E+005 +0.5000000000000002E-008,0.5650800886157697E+022,0.2557125042283408E+023,0.1904555140124647E+024,0.3838940903173564E+023,0.5455600501250566E+021,0.2606125344033172E+024,0.2588373472902210E+005,0.2706122333741226E+005,0.2941864615509830E+005,0.2872413120203470E+005,0.2977743969664990E+005,0.2900913551787525E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2905383659366562E+005,0.2855612702259361E+005,0.2534064575229877E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1885479412575895E+001,0.1921465041389637E+001,0.1893867148567354E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2910314017360947E+005,0.2808705091682309E+005,0.3157177767564604E+005,0.2588373472902210E+005,0.2706122333741226E+005,0.2922710497088373E+005,0.2849340335489874E+005,0.2907913463297061E+005,0.2883370823904896E+005 +0.5200000000000002E-008,0.5906062927959329E+022,0.2653724207122065E+023,0.1903103650083030E+024,0.3788889522428146E+023,0.5805960166468493E+021,0.2612231612484113E+024,0.2596023095262381E+005,0.2697819877014729E+005,0.2941336701705405E+005,0.2859682161890531E+005,0.3061482005064208E+005,0.2897214453208122E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2903436687402369E+005,0.2842217774395017E+005,0.2637266775822921E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1885404142440067E+001,0.1921099915987701E+001,0.1897947204027706E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2903095233026897E+005,0.2811441819422474E+005,0.3166614615276930E+005,0.2596023095262381E+005,0.2697819877014729E+005,0.2919850703460127E+005,0.2840894466312527E+005,0.2975242886349051E+005,0.2878644418056914E+005 +0.5400000000000002E-008,0.6206371212431837E+022,0.2738811554389275E+023,0.1901351851756941E+024,0.3743843279757270E+023,0.6306473973922673E+021,0.2617987521269836E+024,0.2577633099990482E+005,0.2701864593929570E+005,0.2941158841449257E+005,0.2854182912889166E+005,0.3159729363160317E+005,0.2895595615400037E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2895292643640258E+005,0.2833191086168669E+005,0.2838759962261101E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1885088217794775E+001,0.1920851941649283E+001,0.1905072371915381E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2898939798948485E+005,0.2804722016606185E+005,0.2908999954597985E+005,0.2577633099990482E+005,0.2701864593929570E+005,0.2916337094990782E+005,0.2834063426898889E+005,0.2998553825082751E+005,0.2874303022246869E+005 +0.5600000000000002E-008,0.6486658944606178E+022,0.2827903012116120E+023,0.1899650104811597E+024,0.3696294468049123E+023,0.6907090542867690E+021,0.2623843532817050E+024,0.2615905849021905E+005,0.2706339886030611E+005,0.2936506567101348E+005,0.2854650383683758E+005,0.3106479763313585E+005,0.2892690076397988E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2884430202779083E+005,0.2843456360830179E+005,0.2798090152937962E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1884664120765429E+001,0.1921133820339005E+001,0.1903715479159538E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2895248502078304E+005,0.2805352207745543E+005,0.2893148838782130E+005,0.2615905849021905E+005,0.2706339886030611E+005,0.2910265260008492E+005,0.2837297509012682E+005,0.2959638844534821E+005,0.2870860391037753E+005 +0.5800000000000002E-008,0.6666843915289683E+022,0.2930007828836772E+023,0.1898398820292961E+024,0.3641738463036617E+023,0.7607809873303542E+021,0.2629849698506500E+024,0.2606873530109347E+005,0.2703526446939290E+005,0.2937084244096077E+005,0.2840900306995561E+005,0.3157434552547877E+005,0.2890009865110392E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2884029425132219E+005,0.2829107929344309E+005,0.2687825047420070E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1884648413533981E+001,0.1920739259621719E+001,0.1899833670802803E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2887993556769173E+005,0.2798765382057704E+005,0.2934231566354460E+005,0.2606873530109347E+005,0.2703526446939290E+005,0.2908299759669130E+005,0.2825451100114069E+005,0.2963431916220277E+005,0.2866530742490419E+005 +0.6000000000000002E-008,0.6827008333675021E+022,0.3027107507482883E+023,0.1897347741297307E+024,0.3590686054676290E+023,0.8108323680757723E+021,0.2635505504530733E+024,0.2623432531537129E+005,0.2703424079573461E+005,0.2929901098035697E+005,0.2839511772365067E+005,0.3109879306538750E+005,0.2884188307756389E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2880786963024035E+005,0.2805884070090088E+005,0.2755128356689760E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1884521177899380E+001,0.1920092204771030E+001,0.1902239352123610E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2891663102237480E+005,0.2794177243889193E+005,0.3015437118525941E+005,0.2623432531537129E+005,0.2703424079573461E+005,0.2905348538054802E+005,0.2817078928790054E+005,0.2984745194409495E+005,0.2863071181698051E+005 +0.6200000000000003E-008,0.7017203580507609E+022,0.3116198965209727E+023,0.1896146508159417E+024,0.3543637756775598E+023,0.8608837488211903E+021,0.2640911053651238E+024,0.2628556808203731E+005,0.2696336636327939E+005,0.2929334410465432E+005,0.2846649868199963E+005,0.3137508608334825E+005,0.2883433134266567E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2881701522410936E+005,0.2799367417698899E+005,0.2814603438789507E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1884557094010183E+001,0.1919908737996113E+001,0.1904271071764858E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2881220547047471E+005,0.2770725052778024E+005,0.3016701768624964E+005,0.2628556808203731E+005,0.2696336636327939E+005,0.2902318202830371E+005,0.2811587610892650E+005,0.3013453129660049E+005,0.2858926646242261E+005 +0.6400000000000003E-008,0.7377573521874619E+022,0.3212297616240930E+023,0.1894094401548855E+024,0.3493085862222725E+023,0.9109351295666084E+021,0.2647517835909633E+024,0.2633309615229593E+005,0.2709621303020503E+005,0.2925495278614225E+005,0.2834502485907538E+005,0.3147064726889470E+005,0.2879917656413996E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2874125572024989E+005,0.2781093577679974E+005,0.2629580002580526E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1884258899682885E+001,0.1919389743050451E+001,0.1897654150737555E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2881109315174990E+005,0.2756626982947787E+005,0.3009174337372608E+005,0.2633309615229593E+005,0.2709621303020503E+005,0.2898540197987917E+005,0.2797177876924730E+005,0.2964714642850047E+005,0.2855081425365758E+005 +0.6600000000000003E-008,0.7602804735229001E+022,0.3307895753464678E+023,0.1892843117030220E+024,0.3444035509092216E+023,0.9359608199393174E+021,0.2653423898837592E+024,0.2671066775394549E+005,0.2704561095849890E+005,0.2920846838095445E+005,0.2821313463127460E+005,0.3205795218015178E+005,0.2874812730277637E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2868740132113469E+005,0.2772065925880539E+005,0.2583330176343200E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1884045987164498E+001,0.1919130859175373E+001,0.1895854764667430E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2881912464960636E+005,0.2753814894264736E+005,0.3000353292839380E+005,0.2671066775394549E+005,0.2704561095849890E+005,0.2895274641612802E+005,0.2788143168929302E+005,0.2975078763023097E+005,0.2851451389913929E+005 +0.6800000000000003E-008,0.7898107881626967E+022,0.3403493890688427E+023,0.1890991215942639E+024,0.3392482586924435E+023,0.1011037891057444E+022,0.2659680321430769E+024,0.2692849918083307E+005,0.2692552904674335E+005,0.2917331037904190E+005,0.2811320884944347E+005,0.3101069996988526E+005,0.2869077512996549E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2862002133763495E+005,0.2754970515398704E+005,0.2580456289077563E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1883778496231342E+001,0.1918636035178475E+001,0.1895740864260977E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2883713857964356E+005,0.2751726910325277E+005,0.3037495251190211E+005,0.2692849918083307E+005,0.2692552904674335E+005,0.2892422950025734E+005,0.2778467039520439E+005,0.2939506766277235E+005,0.2846563510003966E+005 +0.7000000000000003E-008,0.8163380199577682E+022,0.3486078668918367E+023,0.1889439623139531E+024,0.3348937885675921E+023,0.1056084133728321E+022,0.2665135921932020E+024,0.2713841526561001E+005,0.2688697650728385E+005,0.2916822366291877E+005,0.2798071846493586E+005,0.3164713650540735E+005,0.2866826027265160E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2848928340254190E+005,0.2748705529192189E+005,0.2604652599712435E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1883255946573414E+001,0.1918453176805209E+001,0.1896692125611997E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2885699160749259E+005,0.2750416969521438E+005,0.2873288081707344E+005,0.2713841526561001E+005,0.2688697650728385E+005,0.2889203425367247E+005,0.2770606643312710E+005,0.2926176900940822E+005,0.2842849240370749E+005 +0.7200000000000003E-008,0.8403626827155690E+022,0.3568162933340852E+023,0.1888188338620896E+024,0.3307395239657224E+023,0.1066094409877404E+022,0.2670441368291034E+024,0.2745505191541860E+005,0.2680562383129549E+005,0.2911000066187040E+005,0.2793440923305757E+005,0.3145515982448403E+005,0.2861378012300884E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2850546097298720E+005,0.2733214478288822E+005,0.2586585592270769E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1883320861604329E+001,0.1917997486268038E+001,0.1895983486001631E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2880132715195814E+005,0.2761006852853705E+005,0.2822405905640694E+005,0.2745505191541860E+005,0.2680562383129549E+005,0.2885490733368335E+005,0.2767366569938110E+005,0.2898133872749387E+005,0.2839124173844443E+005 +0.7400000000000003E-008,0.8748981354299074E+022,0.3662760042949692E+023,0.1886136232010333E+024,0.3256843345104352E+023,0.1131161204846448E+022,0.2676897996407193E+024,0.2722057560496487E+005,0.2664695211117357E+005,0.2908855424898905E+005,0.2775398007773211E+005,0.3083362537069490E+005,0.2853842506451639E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2852189826676283E+005,0.2729048643944446E+005,0.2612798482224780E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1883386744948571E+001,0.1917874072458455E+001,0.1897008482925683E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2874616387514140E+005,0.2756234355045592E+005,0.2810965992621511E+005,0.2722057560496487E+005,0.2664695211117357E+005,0.2883402647385689E+005,0.2757008030262077E+005,0.2874945062122944E+005,0.2832790426336258E+005 +0.7600000000000004E-008,0.9039279362622499E+022,0.3764864859670345E+023,0.1884334382303498E+024,0.3202287340091847E+023,0.1201233137890033E+022,0.2683454727284843E+024,0.2718100290864015E+005,0.2665079593838412E+005,0.2903830029244085E+005,0.2767784713311137E+005,0.3043314850577063E+005,0.2848466686519144E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2848652012740744E+005,0.2741064886486688E+005,0.2785626560946161E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1883244851279553E+001,0.1918229051376873E+001,0.1903291850983973E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2868138121847182E+005,0.2740324680989161E+005,0.2812124334523083E+005,0.2718100290864015E+005,0.2665079593838412E+005,0.2878362748322797E+005,0.2752437604691593E+005,0.2905288373582521E+005,0.2828134136298098E+005 +0.7800000000000004E-008,0.9304551680573215E+022,0.3843445527440652E+023,0.1882782789500391E+024,0.3160744694073149E+023,0.1246279380560909E+022,0.2688710122263112E+024,0.2725036948095559E+005,0.2662666518526699E+005,0.2900226094930412E+005,0.2761324158459336E+005,0.2962827626469100E+005,0.2844166329137456E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2855218225971179E+005,0.2739303160657111E+005,0.2855952909894404E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1883507933578873E+001,0.1918177199250793E+001,0.1905634561209329E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2854752726296016E+005,0.2730950844369521E+005,0.2850184777316992E+005,0.2725036948095559E+005,0.2662666518526699E+005,0.2874698498068091E+005,0.2746437751086053E+005,0.2900711705314232E+005,0.2824252590272254E+005 +0.8000000000000004E-008,0.9674931898089308E+022,0.3934539040397312E+023,0.1880530477366847E+024,0.3111193827135186E+023,0.1326361589753578E+022,0.2695116698998525E+024,0.2677943855568840E+005,0.2661066444349981E+005,0.2898171222447894E+005,0.2761918436932524E+005,0.2957185500632267E+005,0.2840212771803483E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2850150919133007E+005,0.2725378501406088E+005,0.2867359270859263E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1883305011124146E+001,0.1917765035483723E+001,0.1906003876924255E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2850055193665582E+005,0.2717500148666461E+005,0.2964818760295249E+005,0.2677943855568840E+005,0.2661066444349981E+005,0.2871052137192835E+005,0.2738946915571443E+005,0.2934604768612707E+005,0.2818527382794462E+005 +0.8200000000000004E-008,0.9990255596785440E+022,0.4016122791012344E+023,0.1878878781802248E+024,0.3069651181116489E+023,0.1341377003977204E+022,0.2700772505022758E+024,0.2659640159376022E+005,0.2667813875034132E+005,0.2894252843099259E+005,0.2739793947174543E+005,0.2887330355349759E+005,0.2834312427385966E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2852884093408128E+005,0.2709076330425487E+005,0.2829587807745036E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1883414549952269E+001,0.1917277191830715E+001,0.1904769705176087E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2843828145046997E+005,0.2719556866859880E+005,0.2975069697317205E+005,0.2659640159376022E+005,0.2667813875034132E+005,0.2868282606977512E+005,0.2725428707232006E+005,0.2896815454977142E+005,0.2814659782766957E+005 +0.8400000000000004E-008,0.1028555874318341E+023,0.4116726066310634E+023,0.1876976829333922E+024,0.3015095176103983E+023,0.1426464351244414E+022,0.2707279184519662E+024,0.2617607071596902E+005,0.2651424630299928E+005,0.2889069867807283E+005,0.2738497680902597E+005,0.2907880873885282E+005,0.2825949626692623E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2849530885604825E+005,0.2709510220103136E+005,0.2862024476332972E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1883280133083968E+001,0.1917290250960098E+001,0.1905831507088078E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2844510125282776E+005,0.2710863486410046E+005,0.2972555993921500E+005,0.2617607071596902E+005,0.2651424630299928E+005,0.2865304677149560E+005,0.2722473231883617E+005,0.2913956271579625E+005,0.2807720412283255E+005 +0.8600000000000004E-008,0.1053081050883596E+023,0.4192303651236215E+023,0.1875525339292305E+024,0.2975054071507649E+023,0.1471510593915290E+022,0.2712284322594204E+024,0.2613755779272667E+005,0.2650049382140359E+005,0.2882028548429800E+005,0.2733305526927325E+005,0.2763113534257712E+005,0.2818797803696006E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2842289779306065E+005,0.2705274001875163E+005,0.2840935298341476E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1882988806153847E+001,0.1917162573439799E+001,0.1905143872635960E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2854717301207361E+005,0.2698031247972751E+005,0.2933417630331512E+005,0.2613755779272667E+005,0.2650049382140359E+005,0.2863221289618124E+005,0.2715337241912190E+005,0.2833911457974671E+005,0.2804205914071568E+005 +0.8800000000000004E-008,0.1088117017405388E+023,0.4277390998503426E+023,0.1873423181300997E+024,0.2929006801221864E+023,0.1541582526958876E+022,0.2718290488283654E+024,0.2591823758514962E+005,0.2649761619173114E+005,0.2879943749444386E+005,0.2747684557066673E+005,0.2844728760970358E+005,0.2817739066037587E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2833024614396880E+005,0.2701687293959827E+005,0.2790803021979035E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1882613919778248E+001,0.1917054163334860E+001,0.1903468246676149E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2848860659516200E+005,0.2685324471947143E+005,0.2883339454776802E+005,0.2591823758514962E+005,0.2649761619173114E+005,0.2858077522694650E+005,0.2716905643102321E+005,0.2841045895586299E+005,0.2799331675238466E+005 +0.9000000000000004E-008,0.1112141680163189E+023,0.4344459848702286E+023,0.1871571280213417E+024,0.2888965696625529E+023,0.1671716116896963E+022,0.2722845163931487E+024,0.2581817635385992E+005,0.2648199191168690E+005,0.2873252168992769E+005,0.2737277564881896E+005,0.2948773012655797E+005,0.2811476671587726E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2831905071740799E+005,0.2705766097436285E+005,0.2821044553669450E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1882568458268569E+001,0.1917177425184238E+001,0.1904486050392781E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2849710402676634E+005,0.2669714428739137E+005,0.2844641595402107E+005,0.2581817635385992E+005,0.2648199191168690E+005,0.2855101637760535E+005,0.2709008903506412E+005,0.2883377862373850E+005,0.2795599913660107E+005 +0.9200000000000005E-008,0.1149179701914798E+023,0.4402519450366971E+023,0.1869469122222109E+024,0.2857433326755916E+023,0.1721767497642381E+022,0.2727600045102302E+024,0.2608945643542585E+005,0.2648387678655041E+005,0.2866648139795729E+005,0.2744763575904581E+005,0.2948179565302281E+005,0.2808308149475870E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2825837571712843E+005,0.2701900392528581E+005,0.2771576186909087E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1882321460395429E+001,0.1917060612275874E+001,0.1902809798442818E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2845352352257627E+005,0.2667677276956829E+005,0.2939035795549649E+005,0.2608945643542585E+005,0.2648387678655041E+005,0.2849297862875841E+005,0.2710595316912756E+005,0.2896848268526601E+005,0.2792512958087330E+005 +0.9400000000000005E-008,0.1170701795635328E+023,0.4494113477131086E+023,0.1868167786322728E+024,0.2809384001240315E+023,0.1766813740313257E+022,0.2733255851126534E+024,0.2593712112415431E+005,0.2650593912669119E+005,0.2864777501516417E+005,0.2725479763373919E+005,0.2856216042021655E+005,0.2803577391850197E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2820847579823768E+005,0.2702666910037527E+005,0.2786600407572475E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1882117546428473E+001,0.1917083800889075E+001,0.1903325085473552E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2844936816214547E+005,0.2651562612029361E+005,0.2914445350194948E+005,0.2593712112415431E+005,0.2650593912669119E+005,0.2846997705369487E+005,0.2697784789626782E+005,0.2853892152179722E+005,0.2788563326184446E+005 +0.9600000000000005E-008,0.1199231082660216E+023,0.4562683868752309E+023,0.1866566142138875E+024,0.2773347007103614E+023,0.1801849706835049E+022,0.2738110835058840E+024,0.2579978052197922E+005,0.2654320748585563E+005,0.2862184610522697E+005,0.2720082252188417E+005,0.2844496689227686E+005,0.2800677450460519E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2821798084941981E+005,0.2683364015007924E+005,0.2900973576327451E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1882156442873576E+001,0.1916495876272829E+001,0.1907075626315709E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2836521340289150E+005,0.2644910221515603E+005,0.2908425967332956E+005,0.2579978052197922E+005,0.2654320748585563E+005,0.2843681645521665E+005,0.2688170946892449E+005,0.2878601462910950E+005,0.2785056240759527E+005 +0.9800000000000005E-008,0.1232264993952192E+023,0.4631754774180985E+023,0.1864564086909058E+024,0.2735307957737096E+023,0.1871921639878635E+022,0.2743216075894872E+024,0.2591522644687576E+005,0.2659721511802107E+005,0.2860408735657893E+005,0.2711928675293419E+005,0.2790698648051714E+005,0.2799164533567196E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2812997761552374E+005,0.2668334314590197E+005,0.2905810337803536E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1881795333268039E+001,0.1916032299927716E+001,0.1907227832746419E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2833238168670314E+005,0.2646806437845140E+005,0.2819276892594443E+005,0.2591522644687576E+005,0.2659721511802107E+005,0.2839548062411971E+005,0.2681018947167819E+005,0.2830758236985902E+005,0.2782176830341839E+005 +0.1000000000000001E-007,0.1261294794784535E+023,0.4714840066218380E+023,0.1862712185821478E+024,0.2689761201258766E+023,0.1952003849071304E+022,0.2748821830538359E+024,0.2584213116381391E+005,0.2649496519177742E+005,0.2854607610031399E+005,0.2706698141947325E+005,0.2798577974126886E+005,0.2792148439613955E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2811442162670125E+005,0.2654602587883429E+005,0.2889729092997293E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1881731271125803E+001,0.1915604236763345E+001,0.1906719840355969E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2832555898602423E+005,0.2656675150473663E+005,0.2738560609367231E+005,0.2584213116381391E+005,0.2649496519177742E+005,0.2836395740074249E+005,0.2677801108486922E+005,0.2806362409943638E+005,0.2777035007709858E+005 +0.1020000000000001E-007,0.1286320485157244E+023,0.4796924330640865E+023,0.1861160593018370E+024,0.2645715986202798E+023,0.2012065505965805E+022,0.2754177328278118E+024,0.2593784889675981E+005,0.2645202809440183E+005,0.2852975502000586E+005,0.2703076443911008E+005,0.2804751554054250E+005,0.2789930709311378E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2803883071705740E+005,0.2642489767829211E+005,0.2818337650369626E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1881418984515197E+001,0.1915223001667317E+001,0.1904395822500999E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2831465966123912E+005,0.2642953624856640E+005,0.2771805821256656E+005,0.2593784889675981E+005,0.2645202809440183E+005,0.2833301870383226E+005,0.2668907967539647E+005,0.2798955513161335E+005,0.2773311439385168E+005 +0.1040000000000001E-007,0.1314349258374678E+023,0.4860990097995000E+023,0.1859609000215262E+024,0.2612181561103368E+023,0.2042096334413056E+022,0.2758782055306697E+024,0.2585778184536299E+005,0.2646507063421072E+005,0.2847216040936347E+005,0.2699370467398399E+005,0.2800103352068237E+005,0.2785047833496306E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2802593420418951E+005,0.2628631047491962E+005,0.2758014724101462E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1881365540824214E+001,0.1914782570920398E+001,0.1902339941399977E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2830169448273314E+005,0.2644558293941984E+005,0.2765139513640182E+005,0.2585778184536299E+005,0.2646507063421072E+005,0.2830061793685789E+005,0.2663928289323656E+005,0.2778372380225432E+005,0.2769967954212734E+005 +0.1060000000000001E-007,0.1348884711089016E+023,0.4926557406771498E+023,0.1857506842223954E+024,0.2575644053159213E+023,0.2117173405531183E+022,0.2763787193381239E+024,0.2590463072028453E+005,0.2649455818193220E+005,0.2843874007723035E+005,0.2692572569172366E+005,0.2801064735447361E+005,0.2782422220544832E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2794585973127691E+005,0.2623606870563406E+005,0.2778312333610717E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1881032628144051E+001,0.1914621770241798E+001,0.1903041506162094E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2827280600709793E+005,0.2638825658845916E+005,0.2747192952228041E+005,0.2590463072028453E+005,0.2649455818193220E+005,0.2825577449331134E+005,0.2657930464865166E+005,0.2779184187378250E+005,0.2766729331944199E+005 +0.1080000000000001E-007,0.1378415025728813E+023,0.5005138074541804E+023,0.1855654941136374E+024,0.2532599865718153E+023,0.2192250476649310E+022,0.2769192742501743E+024,0.2592155279155563E+005,0.2646065207679445E+005,0.2842385350131242E+005,0.2682629827397414E+005,0.2812243570382754E+005,0.2779596836664978E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2788305023240730E+005,0.2613645298804267E+005,0.2762174520273588E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880770185345555E+001,0.1914301145611576E+001,0.1902484545900103E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2827006440528124E+005,0.2605989022701132E+005,0.2740212363031219E+005,0.2592155279155563E+005,0.2646065207679445E+005,0.2823133074286049E+005,0.2641361915355573E+005,0.2777572285402362E+005,0.2762647069196768E+005 +0.1100000000000001E-007,0.1399937119449343E+023,0.5082717714697202E+023,0.1854303553856248E+024,0.2491057219699456E+023,0.2247306995469270E+022,0.2774147829195540E+024,0.2605341845843789E+005,0.2638724055134637E+005,0.2835003742609801E+005,0.2666406222468203E+005,0.2743213548958705E+005,0.2771569466164470E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2789842321993040E+005,0.2623176039245057E+005,0.2841821904511428E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880834526651391E+001,0.1914607953074269E+001,0.1905172983452374E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2825183891237848E+005,0.2609147015221247E+005,0.2665738800716252E+005,0.2605341845843789E+005,0.2638724055134637E+005,0.2819804879520234E+005,0.2637874269761023E+005,0.2747980479278291E+005,0.2758886778316666E+005 +0.1120000000000001E-007,0.1441980279275494E+023,0.5148785537281154E+023,0.1851800984818977E+024,0.2454019197947846E+023,0.2327389204661939E+022,0.2779553378316046E+024,0.2597129534752314E+005,0.2636562569159497E+005,0.2831416775710883E+005,0.2662266393778635E+005,0.2743843455825227E+005,0.2767500748045734E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2784108398050742E+005,0.2624827923561677E+005,0.2834661902745721E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880594187874686E+001,0.1914660906286559E+001,0.1904937380406604E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2822127498949918E+005,0.2591852196524590E+005,0.2645266867129584E+005,0.2597129534752314E+005,0.2636562569159497E+005,0.2815786379461545E+005,0.2631533090626999E+005,0.2740345998615768E+005,0.2754344751658153E+005 +0.1140000000000001E-007,0.1466004942033294E+023,0.5214853359865106E+023,0.1850099237873632E+024,0.2415980148581329E+023,0.2427491966152775E+022,0.2784058002583133E+024,0.2605725149558710E+005,0.2631156715354501E+005,0.2824703178529309E+005,0.2660043242835147E+005,0.2794379013936942E+005,0.2762365554911874E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2786078162951487E+005,0.2625547018844369E+005,0.2766187436805811E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880676860227094E+001,0.1914683937275379E+001,0.1902623639388933E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2816749366547463E+005,0.2590089426827450E+005,0.2650576883093422E+005,0.2605725149558710E+005,0.2631156715354501E+005,0.2811833979933650E+005,0.2630257789175157E+005,0.2744942416985439E+005,0.2750797739018946E+005 +0.1160000000000001E-007,0.1496536284288000E+023,0.5279419641026695E+023,0.1848047131263070E+024,0.2378441613022265E+023,0.2532599865718153E+022,0.2788812883753948E+024,0.2645324098018807E+005,0.2616087411981280E+005,0.2818742315192441E+005,0.2656696183117877E+005,0.2765469260459748E+005,0.2756768414481130E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2789395763470997E+005,0.2620495285372194E+005,0.2787436744106294E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880815843776446E+001,0.1914521878196389E+001,0.1903353608930883E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2808841437052008E+005,0.2594846042087381E+005,0.2623470009334881E+005,0.2645324098018807E+005,0.2616087411981280E+005,0.2807842849573608E+005,0.2628782800789293E+005,0.2730386802470252E+005,0.2746846537103354E+005 +0.1180000000000001E-007,0.1535576361269426E+023,0.5355497739759731E+023,0.1845794819129527E+024,0.2337399480811023E+023,0.2592661522612654E+022,0.2794568792539671E+024,0.2641824182896952E+005,0.2613653322332898E+005,0.2818706107131443E+005,0.2652802117742012E+005,0.2663767285313021E+005,0.2754376693493759E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2784557846880367E+005,0.2590742024006394E+005,0.2684656906110318E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880613061624647E+001,0.1913554766752966E+001,0.1899717508826490E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2804352546648720E+005,0.2582742570622392E+005,0.2669132608581315E+005,0.2641824182896952E+005,0.2613653322332898E+005,0.2805200510407270E+005,0.2615357634959133E+005,0.2671074109810324E+005,0.2742392236075332E+005 +0.1200000000000001E-007,0.1567609244946493E+023,0.5422566589958590E+023,0.1843992969422692E+024,0.2301863000481776E+023,0.2632702627208989E+022,0.2799523879233468E+024,0.2634560358940174E+005,0.2609968652593762E+005,0.2813470922948845E+005,0.2646215854193301E+005,0.2711211233743961E+005,0.2749321205586454E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2785505693996786E+005,0.2573253101331704E+005,0.2658867492205753E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880652845119531E+001,0.1912976021755946E+001,0.1898761807584164E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2801824565161246E+005,0.2567424207164718E+005,0.2650785740393869E+005,0.2634560358940174E+005,0.2609968652593762E+005,0.2802442085325954E+005,0.2603230128533685E+005,0.2679286768145385E+005,0.2738222068102035E+005 +0.1220000000000001E-007,0.1593635962934111E+023,0.5480626191623276E+023,0.1842391325238838E+024,0.2269830116804708E+023,0.2692764284103491E+022,0.2803728195216083E+024,0.2635030086711099E+005,0.2609230687795851E+005,0.2808792894037163E+005,0.2638367189488031E+005,0.2786184652807707E+005,0.2745892154247808E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2782127643723868E+005,0.2577018112747311E+005,0.2633594653360924E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880510938739524E+001,0.1913101267326436E+001,0.1897807416302893E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2798870845207728E+005,0.2562138788711809E+005,0.2606112203792549E+005,0.2635030086711099E+005,0.2609230687795851E+005,0.2798620917976027E+005,0.2599336400326921E+005,0.2691990760253032E+005,0.2735143428292286E+005 +0.1240000000000001E-007,0.1615158056654640E+023,0.5537184251865598E+023,0.1840989886577966E+024,0.2238297746935095E+023,0.2757831079072534E+022,0.2807632202914225E+024,0.2626823329532367E+005,0.2621640889700893E+005,0.2803050181730240E+005,0.2636176531115288E+005,0.2698648875834414E+005,0.2742805968612103E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2777840368807064E+005,0.2559640059746572E+005,0.2673086832410251E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880330350864902E+001,0.1912520147360987E+001,0.1899290986813890E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2798659529674281E+005,0.2560276918802127E+005,0.2582363192259546E+005,0.2626823329532367E+005,0.2621640889700893E+005,0.2794884283055922E+005,0.2593040777183237E+005,0.2657902496769220E+005,0.2733612414258100E+005 +0.1260000000000001E-007,0.1646690426524254E+023,0.5592741284493012E+023,0.1839137985490386E+024,0.2207766404680390E+023,0.2812887597892494E+022,0.2811986673039077E+024,0.2607650241801438E+005,0.2624478871555645E+005,0.2798769838028058E+005,0.2624930507364476E+005,0.2720381293240576E+005,0.2738480592706141E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2775036615369998E+005,0.2574485903703470E+005,0.2617503583403593E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880211956256476E+001,0.1913017071459748E+001,0.1897190331501260E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2794891775346043E+005,0.2552520915918430E+005,0.2576831955955193E+005,0.2607650241801438E+005,0.2624478871555645E+005,0.2791156756527193E+005,0.2590022366915220E+005,0.2650457563747742E+005,0.2730061176821233E+005 +0.1280000000000001E-007,0.1677722282586413E+023,0.5661812189921689E+023,0.1837185981641315E+024,0.2169226841506418E+023,0.2892969807085163E+022,0.2816991811113618E+024,0.2579774610303554E+005,0.2618813877878804E+005,0.2797390071970959E+005,0.2619952243179783E+005,0.2717189491986808E+005,0.2734050595401338E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2768824288438131E+005,0.2573293367738062E+005,0.2639294674016804E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1879948791135829E+001,0.1912977363153801E+001,0.1898024236866120E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2793125417955539E+005,0.2550884399250222E+005,0.2601481148461777E+005,0.2579774610303554E+005,0.2618813877878804E+005,0.2788344725829516E+005,0.2587058592814117E+005,0.2662208105076560E+005,0.2725053779407117E+005 +0.1300000000000001E-007,0.1704249514381484E+023,0.5724376415853462E+023,0.1835434183315225E+024,0.2133690361177171E+023,0.2978057154352374E+022,0.2821446383999961E+024,0.2591026054274151E+005,0.2612682763430959E+005,0.2798327147650937E+005,0.2605381213830838E+005,0.2713570591033328E+005,0.2732654484183296E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2762342939201636E+005,0.2570993674647689E+005,0.2697126935191159E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1879672994964942E+001,0.1912900686998534E+001,0.1900173181335388E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2788490376447323E+005,0.2532767934873184E+005,0.2575629637653061E+005,0.2591026054274151E+005,0.2612682763430959E+005,0.2785635834075645E+005,0.2574857629767235E+005,0.2669060447226257E+005,0.2721620286909026E+005 +0.1320000000000001E-007,0.1736782911866006E+023,0.5767921117101975E+023,0.1833181871181681E+024,0.2105661587959737E+023,0.3103185606215918E+022,0.2825250288936612E+024,0.2595740997821880E+005,0.2613717620942994E+005,0.2794148336829064E+005,0.2605985040011791E+005,0.2719101574489804E+005,0.2730267368512118E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2754868805291571E+005,0.2534442938228195E+005,0.2690978088440642E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1879353376858633E+001,0.1911663622172473E+001,0.1899949012313589E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2789414303750480E+005,0.2539836719581482E+005,0.2581934564940021E+005,0.2595740997821880E+005,0.2613717620942994E+005,0.2782041357897911E+005,0.2567056485469446E+005,0.2671598729460579E+005,0.2718988568873340E+005 +0.1340000000000001E-007,0.1761308088431261E+023,0.5824479177344298E+023,0.1831430072855592E+024,0.2072127162860307E+023,0.3208293505781297E+022,0.2829304450776991E+024,0.2578784108565590E+005,0.2613769640975378E+005,0.2792030682202037E+005,0.2588854799154175E+005,0.2791641246358706E+005,0.2727173687198233E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2749734089066837E+005,0.2542031170403040E+005,0.2677288756840907E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1879132814503281E+001,0.1911923328179167E+001,0.1899446306363354E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2786377725038085E+005,0.2538291282505945E+005,0.2573831562707034E+005,0.2578784108565590E+005,0.2613769640975378E+005,0.2778833258503726E+005,0.2561271995878783E+005,0.2697021221482322E+005,0.2715537839971182E+005 +0.1360000000000001E-007,0.1800348165412687E+023,0.5884540834238799E+023,0.1828827401056830E+024,0.2035589654916152E+023,0.3338427095719383E+022,0.2834259537470787E+024,0.2561527382839088E+005,0.2609645092287755E+005,0.2790592716453485E+005,0.2585226163648334E+005,0.2788983108986241E+005,0.2723705037417571E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2746218406575388E+005,0.2532553519564614E+005,0.2608908612585904E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1878981332446011E+001,0.1911598718857358E+001,0.1896857656105080E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2781033492202950E+005,0.2534230067586532E+005,0.2575662734586517E+005,0.2561527382839088E+005,0.2609645092287755E+005,0.2775692698057048E+005,0.2555901377977562E+005,0.2677596666888850E+005,0.2710672554107677E+005 +0.1380000000000001E-007,0.1836385159549388E+023,0.5945603518748209E+023,0.1826825345827013E+024,0.2003056257431630E+023,0.3378468200315718E+022,0.2839114521403093E+024,0.2570697311059335E+005,0.2605360692949114E+005,0.2789227374509838E+005,0.2566901407304145E+005,0.2759628665251680E+005,0.2720549799540404E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2748332751850123E+005,0.2523987735175020E+005,0.2628290251933226E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1879072479807153E+001,0.1911303276064444E+001,0.1897604814905252E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2768289396970259E+005,0.2524977582226455E+005,0.2649965566485807E+005,0.2570697311059335E+005,0.2605360692949114E+005,0.2771969246260772E+005,0.2542901781523263E+005,0.2691698620605697E+005,0.2706943500522814E+005 +0.1400000000000001E-007,0.1871421126071181E+023,0.5998657982338352E+023,0.1824623085074215E+024,0.1972024401369471E+023,0.3468560685657471E+022,0.2843519042908690E+024,0.2569400139810168E+005,0.2595409945523886E+005,0.2782827653613079E+005,0.2565613521030947E+005,0.2752057831542840E+005,0.2713804315680489E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2750484009958276E+005,0.2508459091874780E+005,0.2623585634315613E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1879165077699795E+001,0.1910762612490310E+001,0.1897424449038077E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2765536041030206E+005,0.2531487482437824E+005,0.2655457429744886E+005,0.2569400139810168E+005,0.2595409945523886E+005,0.2768965176156832E+005,0.2539934643965291E+005,0.2688705620168139E+005,0.2702355423302314E+005 +0.1420000000000001E-007,0.1903954523555703E+023,0.6048208849276317E+023,0.1822570978463653E+024,0.1942994600537128E+023,0.3553648032924681E+022,0.2847623256129814E+024,0.2568536955245599E+005,0.2601561825779550E+005,0.2773871392742591E+005,0.2561550376622651E+005,0.2724818362496838E+005,0.2708445533364238E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2748993484058617E+005,0.2508961543998063E+005,0.2643856974065587E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1879100935189980E+001,0.1910780209598415E+001,0.1898197118592065E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2765384004249042E+005,0.2511676325788073E+005,0.2639257173775929E+005,0.2568536955245599E+005,0.2601561825779550E+005,0.2764608135950595E+005,0.2532576252685675E+005,0.2677733153695857E+005,0.2699952189950244E+005 +0.1440000000000001E-007,0.1937488948655133E+023,0.6113776158052814E+023,0.1820618974614581E+024,0.1907458120207881E+023,0.3608704551744641E+022,0.2852578342823610E+024,0.2559209891699388E+005,0.2607987627028074E+005,0.2771221004498280E+005,0.2564668573108285E+005,0.2708985150845407E+005,0.2707237110161184E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2739959765599930E+005,0.2494388572197329E+005,0.2618466280559580E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1878710721775358E+001,0.1910266994364188E+001,0.1897227459928496E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2759286757660081E+005,0.2527375423394436E+005,0.2630548749131143E+005,0.2559209891699388E+005,0.2607987627028074E+005,0.2759213039385104E+005,0.2534446894886285E+005,0.2661341704013234E+005,0.2696949610435573E+005 +0.1460000000000001E-007,0.1967519777102383E+023,0.6157821373108782E+023,0.1818867176288492E+024,0.1882932943642627E+023,0.3658755932490059E+022,0.2856282144998772E+024,0.2552606690795397E+005,0.2602610707615543E+005,0.2764061416450977E+005,0.2557406750088559E+005,0.2774137702082997E+005,0.2701194511104405E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2742638163338294E+005,0.2480159778757764E+005,0.2626831346775057E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1878826678075117E+001,0.1909760172467002E+001,0.1897548951192071E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2757875759674057E+005,0.2520422230651907E+005,0.2629090609966943E+005,0.2552606690795397E+005,0.2602610707615543E+005,0.2756411580876427E+005,0.2525351769505134E+005,0.2691555438690408E+005,0.2693152148683496E+005 +0.1480000000000001E-007,0.2001054202201813E+023,0.6209374295276562E+023,0.1816614864154948E+024,0.1851400573773013E+023,0.3773874108204521E+022,0.2860536512362132E+024,0.2557680667585249E+005,0.2610533965914901E+005,0.2763162490613363E+005,0.2546444821588660E+005,0.2800913912452674E+005,0.2702128757908802E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2733302026696951E+005,0.2469919722090788E+005,0.2636539650354065E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1878421523917005E+001,0.1909391870882147E+001,0.1897919554700876E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2749561847415323E+005,0.2520624472648205E+005,0.2596008714993839E+005,0.2557680667585249E+005,0.2610533965914901E+005,0.2751053342571010E+005,0.2517823330077375E+005,0.2696276635151830E+005,0.2691205799265495E+005 +0.1500000000000001E-007,0.2033587599686335E+023,0.6255922079369801E+023,0.1814612808925131E+024,0.1824372828170488E+023,0.3848951179322647E+022,0.2864490571441020E+024,0.2563521855420466E+005,0.2607587601496321E+005,0.2761108308692031E+005,0.2541500055050332E+005,0.2781610400980481E+005,0.2699841599138892E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2726410283573904E+005,0.2463757802701561E+005,0.2637955133542069E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1878120705813499E+001,0.1909168794613474E+001,0.1897973365396862E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2746073748607059E+005,0.2521355412993341E+005,0.2614869532382483E+005,0.2563521855420466E+005,0.2607587601496321E+005,0.2747262055671981E+005,0.2514186730983283E+005,0.2693738851398440E+005,0.2688149925201779E+005 +0.1520000000000001E-007,0.2063117914326132E+023,0.6308476029152490E+023,0.1812810959218296E+024,0.1794842513530691E+023,0.3914017974291691E+022,0.2868594784662144E+024,0.2574570326053805E+005,0.2599510755760665E+005,0.2761306174563698E+005,0.2536214615143118E+005,0.2809823332384826E+005,0.2698872999877025E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2719661820415322E+005,0.2464298470502918E+005,0.2566853835005385E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1877824696386562E+001,0.1909188412026444E+001,0.1895198363209707E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2744304926690225E+005,0.2507047069155107E+005,0.2538126356511230E+005,0.2574570326053805E+005,0.2599510755760665E+005,0.2744992398422998E+005,0.2507899196559341E+005,0.2664233707168693E+005,0.2684805356654711E+005 +0.1540000000000001E-007,0.2099154908462833E+023,0.6356525354668092E+023,0.1810808903988479E+024,0.1768815795543074E+023,0.3954059078888025E+022,0.2872799100644759E+024,0.2591825885620738E+005,0.2594851170412932E+005,0.2758816692595248E+005,0.2519815178453357E+005,0.2785501611261224E+005,0.2695986373216224E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2713867400935053E+005,0.2462124008841894E+005,0.2572042151185154E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1877569385222640E+001,0.1909109463049797E+001,0.1895405951163611E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2740317935320073E+005,0.2504226837374925E+005,0.2540537307952207E+005,0.2591825885620738E+005,0.2594851170412932E+005,0.2741166135885518E+005,0.2499361682854209E+005,0.2655774522832524E+005,0.2681815832168654E+005 +0.1560000000000000E-007,0.2139696526866621E+023,0.6409079304450781E+023,0.1808506540474190E+024,0.1739785994710731E+023,0.4009115597707985E+022,0.2877453879054083E+024,0.2574149782693399E+005,0.2596188450206719E+005,0.2753033174130226E+005,0.2509075360624690E+005,0.2767816305265623E+005,0.2690252181610854E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2716908209175676E+005,0.2447451490182552E+005,0.2604931580223917E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1877703500826560E+001,0.1908573134071103E+001,0.1896702992357067E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2733723095157841E+005,0.2500212171144548E+005,0.2513073735717459E+005,0.2574149782693399E+005,0.2596188450206719E+005,0.2737555314246564E+005,0.2489485202153881E+005,0.2649146690900734E+005,0.2677686322102640E+005 +0.1580000000000000E-007,0.2174231979580960E+023,0.6463635309463286E+023,0.1806454433863628E+024,0.1709254652456026E+023,0.4074182392677029E+022,0.2881908451940426E+024,0.2567667637761974E+005,0.2588305424294633E+005,0.2748460428218952E+005,0.2506397802867492E+005,0.2739171923680707E+005,0.2684412592885009E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2720430941260168E+005,0.2432522543755010E+005,0.2563420556876751E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1877858505059286E+001,0.1908020897749200E+001,0.1895060541995452E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2728590131167904E+005,0.2504335347046161E+005,0.2517682109334754E+005,0.2567667637761974E+005,0.2588305424294633E+005,0.2735029502806318E+005,0.2485396064163548E+005,0.2626621917136564E+005,0.2673157003121489E+005 +0.1600000000000000E-007,0.2207265890872936E+023,0.6493666137910537E+023,0.1804152070349339E+024,0.1687732558735496E+023,0.4204315982615115E+022,0.2885061688927387E+024,0.2560506517239436E+005,0.2588862019395416E+005,0.2744879347798151E+005,0.2500657815684587E+005,0.2707954275402094E+005,0.2680832557808896E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2719387132440155E+005,0.2410874167080382E+005,0.2566820448093087E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1877812617240165E+001,0.1907208150468624E+001,0.1895197024709870E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2726931266485518E+005,0.2490146768814413E+005,0.2521411536958743E+005,0.2560506517239436E+005,0.2588862019395416E+005,0.2732700218919887E+005,0.2472823385919494E+005,0.2615054553437209E+005,0.2670234342216718E+005 +0.1620000000000000E-007,0.2236796205512732E+023,0.6537210839159050E+023,0.1802200066500267E+024,0.1661205326940425E+023,0.4299413606031410E+022,0.2888715439721802E+024,0.2564843751165859E+005,0.2590334440621581E+005,0.2744883677567614E+005,0.2477385194658156E+005,0.2681475817078182E+005,0.2679641351798256E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2709747511583804E+005,0.2407318469747007E+005,0.2545840729381515E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1877387206740607E+001,0.1907073283602239E+001,0.1894349122804132E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2723467500996299E+005,0.2508543756484375E+005,0.2545473360812274E+005,0.2564843751165859E+005,0.2590334440621581E+005,0.2729064219045937E+005,0.2467061682431290E+005,0.2604754271286152E+005,0.2668036417415403E+005 +0.1640000000000000E-007,0.2270831144419617E+023,0.6586261192289560E+023,0.1800298114031942E+024,0.1634678095145353E+023,0.4339454710627744E+022,0.2892869704323672E+024,0.2569412740968824E+005,0.2585205495664740E+005,0.2745808835535987E+005,0.2483085159690700E+005,0.2687027206948426E+005,0.2679669736817812E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2703039192182317E+005,0.2403229512409438E+005,0.2552975609748246E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1877089407376528E+001,0.1906917704964776E+001,0.1894639016041681E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2714873203160941E+005,0.2502993415547652E+005,0.2522237007261732E+005,0.2569412740968824E+005,0.2585205495664740E+005,0.2725138214459859E+005,0.2466802696118371E+005,0.2602387563852712E+005,0.2664616228632780E+005 +0.1660000000000000E-007,0.2302864028096684E+023,0.6628304352115712E+023,0.1798296058802125E+024,0.1609652404772644E+023,0.4419536919820413E+022,0.2896573506498833E+024,0.2566082788103518E+005,0.2585733594211485E+005,0.2741988240194153E+005,0.2489329060906708E+005,0.2654577590613354E+005,0.2676872868581184E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2697100741731609E+005,0.2410944639389769E+005,0.2564373691841382E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1876824575327140E+001,0.1907210819513627E+001,0.1895098839773392E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2709974065388400E+005,0.2516756164565435E+005,0.2504997232591915E+005,0.2566082788103518E+005,0.2585733594211485E+005,0.2720426790105263E+005,0.2475627233649084E+005,0.2586397854416254E+005,0.2661685055411321E+005 +0.1679999999999999E-007,0.2329391259891756E+023,0.6670848025749317E+023,0.1796694414618272E+024,0.1585627742014844E+023,0.4474593438640373E+022,0.2900027051770267E+024,0.2562397791856867E+005,0.2579415451015178E+005,0.2738189890562429E+005,0.2486588591270018E+005,0.2669590985243183E+005,0.2672732226815251E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2693122269343030E+005,0.2429220260749394E+005,0.2557139216969534E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1876646511724513E+001,0.1907897841046056E+001,0.1894807451545470E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2709619569134152E+005,0.2515264895116260E+005,0.2489163206134028E+005,0.2562397791856867E+005,0.2579415451015178E+005,0.2717581497100872E+005,0.2479046455087479E+005,0.2586350081024163E+005,0.2658267679156640E+005 +0.1699999999999999E-007,0.2363426198798640E+023,0.6709888102730743E+023,0.1794692359388455E+024,0.1563104620679406E+023,0.4534655095534875E+022,0.2903680802564683E+024,0.2558642144786613E+005,0.2583200914342538E+005,0.2731767442654095E+005,0.2493643207918506E+005,0.2668751175557579E+005,0.2669542199468938E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2690628986264054E+005,0.2401896019141901E+005,0.2588865582156061E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1876534657878502E+001,0.1906866854884615E+001,0.1896073449093552E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2706937948717275E+005,0.2506648325594451E+005,0.2498721158505898E+005,0.2558642144786613E+005,0.2583200914342538E+005,0.2713319673047374E+005,0.2472079242507803E+005,0.2597474529456649E+005,0.2655866145755468E+005 +0.1719999999999999E-007,0.2394958568668253E+023,0.6747426638289807E+023,0.1792740355539383E+024,0.1540581499343967E+023,0.4609732166653002E+022,0.2907134347836116E+024,0.2540226914865997E+005,0.2577109715022032E+005,0.2732052810194570E+005,0.2497035494753482E+005,0.2673430571059959E+005,0.2666903813855903E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2686864345597825E+005,0.2403847960427078E+005,0.2557189159384741E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1876365383567791E+001,0.1906941269395930E+001,0.1894809468659694E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2703966918490685E+005,0.2483322215843316E+005,0.2552586469495881E+005,0.2540226914865997E+005,0.2577109715022032E+005,0.2711553338998561E+005,0.2467336427565882E+005,0.2606431833426890E+005,0.2651626200346577E+005 +0.1739999999999999E-007,0.2425990424730413E+023,0.6790470825730866E+023,0.1790688248928821E+024,0.1514054267548896E+023,0.4709834928143838E+022,0.2910838150011277E+024,0.2548306393641126E+005,0.2576494432656416E+005,0.2727320449008559E+005,0.2492007489750519E+005,0.2700143272731719E+005,0.2664536379767581E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2680801082003981E+005,0.2409147103320289E+005,0.2612273850717225E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1876091775864691E+001,0.1907142692212415E+001,0.1896988166458359E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2697831376308804E+005,0.2500855881935827E+005,0.2515411023087706E+005,0.2548306393641126E+005,0.2576494432656416E+005,0.2706050699851257E+005,0.2471690869356689E+005,0.2622406188064750E+005,0.2649137095262471E+005 +0.1759999999999999E-007,0.2455020225562755E+023,0.6837519123631559E+023,0.1788836347841241E+024,0.1486526008138916E+023,0.4789917137336507E+022,0.2914642054947929E+024,0.2562406947176905E+005,0.2572076889915265E+005,0.2721675580525618E+005,0.2482988415978859E+005,0.2730579285025612E+005,0.2661138421311756E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2673910325518957E+005,0.2399568752071401E+005,0.2550471803213949E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1875779353932739E+001,0.1906777976057222E+001,0.1894537466607465E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2699930160393102E+005,0.2505467101257629E+005,0.2525454612691663E+005,0.2562406947176905E+005,0.2572076889915265E+005,0.2702319531910455E+005,0.2466467629043641E+005,0.2621584342200799E+005,0.2646624999798406E+005 +0.1779999999999999E-007,0.2484050026395098E+023,0.6881564338687527E+023,0.1786934395372915E+024,0.1459998776343844E+023,0.4880009622678259E+022,0.2918295805742344E+024,0.2572557749199186E+005,0.2565864767535971E+005,0.2716592296176643E+005,0.2469027123284332E+005,0.2702466689634953E+005,0.2656167703105008E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2674175292299860E+005,0.2411068291209828E+005,0.2577806084806877E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1875791396444937E+001,0.1907215502290931E+001,0.1895635608096678E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2696389564335490E+005,0.2496186635308425E+005,0.2494937716092682E+005,0.2572557749199186E+005,0.2565864767535971E+005,0.2699143989836318E+005,0.2460887669844615E+005,0.2608005632592047E+005,0.2643496935958183E+005 +0.1799999999999999E-007,0.2519085992916890E+023,0.6928612636588220E+023,0.1784832237381607E+024,0.1432971030741319E+023,0.4950081555721845E+022,0.2922400018963469E+024,0.2564540783768821E+005,0.2569144911234539E+005,0.2714211512128984E+005,0.2468203939056443E+005,0.2683388760488476E+005,0.2654331860229661E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2674531996077867E+005,0.2395598521973394E+005,0.2563421578460477E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1875807604639480E+001,0.1906625960036598E+001,0.1895060583058525E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2688513711951280E+005,0.2464357917864383E+005,0.2472975935028214E+005,0.2564540783768821E+005,0.2569144911234539E+005,0.2695911590789182E+005,0.2447046949192007E+005,0.2589383679454819E+005,0.2640525621240460E+005 +0.1819999999999998E-007,0.2558626583705770E+023,0.6972157337836733E+023,0.1782429771105827E+024,0.1406944312753701E+023,0.5035168902989055E+022,0.2926554283565338E+024,0.2560886384493014E+005,0.2567979382497994E+005,0.2710521557160425E+005,0.2458113955602292E+005,0.2636285534767608E+005,0.2650068568461231E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2668834227624131E+005,0.2405025551055655E+005,0.2546862559133672E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1875548198148388E+001,0.1906986105609269E+001,0.1894390737984507E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2683466485248686E+005,0.2490674101506742E+005,0.2507836325004001E+005,0.2560886384493014E+005,0.2567979382497994E+005,0.2691279929320987E+005,0.2452884676510335E+005,0.2574452590779902E+005,0.2637034136079415E+005 +0.1839999999999998E-007,0.2594663577842471E+023,0.6999185083439259E+023,0.1780277561733774E+024,0.1389926843300259E+023,0.5105240836032641E+022,0.2929707520552300E+024,0.2555211817021309E+005,0.2564204706694601E+005,0.2701980888554528E+005,0.2475882478208431E+005,0.2620284286632918E+005,0.2643916877664301E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2666915533398461E+005,0.2392498025207478E+005,0.2535221030961369E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1875460600387418E+001,0.1906506900093526E+001,0.1893914674534211E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2687686189360689E+005,0.2488140254664871E+005,0.2512400296745314E+005,0.2555211817021309E+005,0.2564204706694601E+005,0.2688257722078065E+005,0.2456414245708418E+005,0.2565617156889153E+005,0.2633701565838823E+005 +0.1859999999999998E-007,0.2623192864867359E+023,0.7038725674228139E+023,0.1778675917549921E+024,0.1368404749579729E+023,0.5140276802554433E+022,0.2933111014442988E+024,0.2543610175973286E+005,0.2570737274815087E+005,0.2698761013217740E+005,0.2470206069202274E+005,0.2615028803911353E+005,0.2642032478917705E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2665575375495677E+005,0.2387130913256697E+005,0.2582372370050502E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1875399342486742E+001,0.1906300082391419E+001,0.1895816831703789E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2680073139299363E+005,0.2484898649812559E+005,0.2497171943077341E+005,0.2543610175973286E+005,0.2570737274815087E+005,0.2684272826271979E+005,0.2451530220504065E+005,0.2571868675690356E+005,0.2631618979011296E+005 +0.1879999999999998E-007,0.2673744759420232E+023,0.7067254961253028E+023,0.1775873040228178E+024,0.1351387280126287E+023,0.5195333321374392E+022,0.2937065073521876E+024,0.2537375574684601E+005,0.2569878871937096E+005,0.2697723555869874E+005,0.2462868824817783E+005,0.2621495710636000E+005,0.2640209571278337E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2661826085335578E+005,0.2352622991201507E+005,0.2563009799453540E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1875227644020963E+001,0.1904948181518915E+001,0.1895044028790113E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2671911209348859E+005,0.2482573886906345E+005,0.2516138662817211E+005,0.2537375574684601E+005,0.2569878871937096E+005,0.2680423674571863E+005,0.2438161546557990E+005,0.2574861132082240E+005,0.2627787604505873E+005 +0.1899999999999998E-007,0.2710782781171841E+023,0.7102290927774821E+023,0.1773570676713888E+024,0.1329364672598303E+023,0.5285425806716145E+022,0.2940668772935546E+024,0.2545465693147497E+005,0.2566650055455143E+005,0.2693612471187699E+005,0.2450709219882802E+005,0.2651256151287234E+005,0.2637549990320485E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2658396336223146E+005,0.2328713064064243E+005,0.2538968549091977E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1875070164165357E+001,0.1903988369706310E+001,0.1894068391464493E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2668973984629214E+005,0.2463331575236961E+005,0.2553375137031940E+005,0.2545465693147497E+005,0.2566650055455143E+005,0.2676840322782982E+005,0.2420721546087242E+005,0.2592010666126737E+005,0.2625013922840499E+005 +0.1919999999999998E-007,0.2746319261501088E+023,0.7140830490948792E+023,0.1771468518722581E+024,0.1306841551262865E+023,0.5350492601685188E+022,0.2944372575110707E+024,0.2552849396404094E+005,0.2565665156677822E+005,0.2686355556424804E+005,0.2429753507846802E+005,0.2651846288583199E+005,0.2632616345018755E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2654138356768818E+005,0.2299958880339480E+005,0.2528676728751253E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874874101696617E+001,0.1902808114834025E+001,0.1893645166082466E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2670637546315935E+005,0.2465719028004113E+005,0.2585600012459835E+005,0.2552849396404094E+005,0.2565665156677822E+005,0.2672996880742399E+005,0.2404395243897381E+005,0.2598792790032034E+005,0.2622489562664555E+005 +0.1939999999999998E-007,0.2787861907519785E+023,0.7168358750358772E+023,0.1769216206589037E+024,0.1291325623231786E+023,0.5385528568206981E+022,0.2947826120382141E+024,0.2541872119294433E+005,0.2570232427762176E+005,0.2681855750351458E+005,0.2418221530524578E+005,0.2645050920526088E+005,0.2629251900596691E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2650187073474843E+005,0.2283865161739185E+005,0.2494740875547089E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874691610286096E+001,0.1902134776437095E+001,0.1892225367584522E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2670380841939055E+005,0.2450610625062596E+005,0.2570451255770323E+005,0.2541872119294433E+005,0.2570232427762176E+005,0.2669881566731193E+005,0.2390579976337925E+005,0.2582136580599979E+005,0.2619704996186014E+005 +0.1959999999999997E-007,0.2835410719227932E+023,0.7208900368762560E+023,0.1766363277886548E+024,0.1266299932859076E+023,0.5480626191623276E+022,0.2952230641887738E+024,0.2527386448127518E+005,0.2568037071722123E+005,0.2676846630563361E+005,0.2413424099976589E+005,0.2641731990330451E+005,0.2623971519636178E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2652009537422513E+005,0.2263442267827669E+005,0.2479282290826517E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874775847488614E+001,0.1901266764556117E+001,0.1891565976472106E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2664542014226269E+005,0.2438692888008271E+005,0.2579723568267991E+005,0.2527386448127518E+005,0.2568037071722123E+005,0.2666493825381724E+005,0.2379427747612183E+005,0.2579148076882166E+005,0.2615157247895147E+005 +0.1979999999999997E-007,0.2868945144327362E+023,0.7258451235700525E+023,0.1764511376798968E+024,0.1239772701064005E+023,0.5515662158145069E+022,0.2956384906489607E+024,0.2533245951778327E+005,0.2562859120607413E+005,0.2670043030301006E+005,0.2406934112714212E+005,0.2645227705807373E+005,0.2618955804118485E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2652424619067491E+005,0.2266910004160681E+005,0.2488504258998551E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874795017402112E+001,0.1901415233273956E+001,0.1891960309708669E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2660952251412762E+005,0.2430078591519137E+005,0.2538162490077369E+005,0.2533245951778327E+005,0.2562859120607413E+005,0.2662593722031888E+005,0.2375063111189921E+005,0.2571134857114717E+005,0.2611790843924900E+005 +0.1999999999999997E-007,0.2897474431352251E+023,0.7304999019793763E+023,0.1763059886757351E+024,0.1216248552113659E+023,0.5520667296219610E+022,0.2960138760045514E+024,0.2522278245468795E+005,0.2562262032206638E+005,0.2663859068494899E+005,0.2389626854816080E+005,0.2665350305799101E+005,0.2613688976620795E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2652824865796039E+005,0.2259765223273962E+005,0.2480651057285845E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874813496632715E+001,0.1901108845323698E+001,0.1891624686958555E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2659343844344724E+005,0.2439574737862116E+005,0.2534039020076394E+005,0.2522278245468795E+005,0.2562262032206638E+005,0.2659536402802323E+005,0.2368328055797656E+005,0.2576546249078788E+005,0.2608583081399154E+005 +0.2019999999999997E-007,0.2942020160215673E+023,0.7340535500123010E+023,0.1760357112197098E+024,0.1193725430778220E+023,0.5615764919635905E+022,0.2964142870505147E+024,0.2516532108251797E+005,0.2556207943341075E+005,0.2660309671941800E+005,0.2391173184367058E+005,0.2672369847883049E+005,0.2609648777738839E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2648252595173060E+005,0.2275435048708089E+005,0.2465069847815359E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874602071577569E+001,0.1901778336506664E+001,0.1890952583031059E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2657048283514786E+005,0.2413479706555848E+005,0.2534043031777802E+005,0.2516532108251797E+005,0.2556207943341075E+005,0.2656073063387787E+005,0.2365745645815430E+005,0.2575337094465565E+005,0.2604270351001592E+005 +0.2039999999999997E-007,0.2973552530085286E+023,0.7378074035682074E+023,0.1758355056967281E+024,0.1170701795635328E+023,0.5700852266903115E+022,0.2967596415776581E+024,0.2518473149783918E+005,0.2546699564072705E+005,0.2654865792395448E+005,0.2382419671096079E+005,0.2693077278960256E+005,0.2604292928790810E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2653239587934387E+005,0.2286124411913802E+005,0.2494756310650911E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874832638436541E+001,0.1902229862483415E+001,0.1892226021967783E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2649509802213348E+005,0.2400833633140145E+005,0.2541044875271344E+005,0.2518473149783918E+005,0.2546699564072705E+005,0.2652864166714026E+005,0.2361216698077252E+005,0.2594512185164818E+005,0.2600377013937999E+005 +0.2059999999999997E-007,0.3017597745141254E+023,0.7406102808899508E+023,0.1755952590691501E+024,0.1154685353796794E+023,0.5740893371499449E+022,0.2971200115190252E+024,0.2521472537919661E+005,0.2541066024205553E+005,0.2652625419933215E+005,0.2379141472123875E+005,0.2676369288414656E+005,0.2601328174937344E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2651000573666310E+005,0.2281208377794789E+005,0.2471823461120202E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874729225560416E+001,0.1902022722380630E+001,0.1891244924272911E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2643406141371397E+005,0.2382375541594460E+005,0.2564999410400476E+005,0.2521472537919661E+005,0.2541066024205553E+005,0.2649500249006139E+005,0.2353090727439601E+005,0.2587911249210003E+005,0.2596759659016838E+005 +0.2079999999999996E-007,0.3046127032166142E+023,0.7425622847390221E+023,0.1753900484080939E+024,0.1138668911958261E+023,0.5866021823362995E+022,0.2973602581466031E+024,0.2510980818633455E+005,0.2543737486543370E+005,0.2650017837984163E+005,0.2412155185947611E+005,0.2665466409659617E+005,0.2600431290019585E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2641761929438305E+005,0.2278153753359666E+005,0.2454662366836277E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874300709753366E+001,0.1901893571332611E+001,0.1890498989288904E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2643681310449416E+005,0.2375583838363993E+005,0.2584737615430038E+005,0.2510980818633455E+005,0.2543737486543370E+005,0.2645923296371120E+005,0.2364632117826426E+005,0.2584197633737122E+005,0.2594593264863282E+005 +0.2099999999999996E-007,0.3087169164377385E+023,0.7461659841526922E+023,0.1751548069185905E+024,0.1117647332045185E+023,0.5926083480257497E+022,0.2977456537783429E+024,0.2523407491487794E+005,0.2538057386604317E+005,0.2642568027565625E+005,0.2430219249985849E+005,0.2655699065757145E+005,0.2596312404698893E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2642227116815709E+005,0.2291940181128264E+005,0.2451267236951509E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874322356573894E+001,0.1902473785640517E+001,0.1890350200770531E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2637775429821086E+005,0.2342463751601394E+005,0.2583712688666594E+005,0.2523407491487794E+005,0.2538057386604317E+005,0.2641080728658343E+005,0.2366679233175405E+005,0.2578718870650603E+005,0.2591520220833169E+005 +0.2119999999999996E-007,0.3116198965209727E+023,0.7489688614744356E+023,0.1749896373621306E+024,0.1101630890206651E+023,0.5966124584853831E+022,0.2980309466485917E+024,0.2528595064785623E+005,0.2538954649771442E+005,0.2639845601414818E+005,0.2431958067872912E+005,0.2635907758195617E+005,0.2595095707857208E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2634537497169947E+005,0.2291935969503104E+005,0.2451801841243969E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873963572006343E+001,0.1902473609438119E+001,0.1890373656129845E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2635406331140847E+005,0.2336585549533337E+005,0.2610479887755065E+005,0.2528595064785623E+005,0.2538954649771442E+005,0.2637106899886648E+005,0.2365730595023064E+005,0.2578017615203260E+005,0.2589880791390380E+005 +0.2139999999999996E-007,0.3159243152650787E+023,0.7525725608881057E+023,0.1747594010107016E+024,0.1082110851715938E+023,0.5996155413301081E+022,0.2984263525564805E+024,0.2528148714547819E+005,0.2534255760804687E+005,0.2635375700034373E+005,0.2416114965978267E+005,0.2623802192236233E+005,0.2590340765980633E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2632003643122967E+005,0.2272903774826361E+005,0.2466730128262185E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873844897758636E+001,0.1901670802555714E+001,0.1891024596542391E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2632297012012366E+005,0.2349294232597146E+005,0.2614668257021340E+005,0.2528148714547819E+005,0.2534255760804687E+005,0.2633560691423039E+005,0.2357291237755137E+005,0.2578047747100078E+005,0.2586225584738770E+005 +0.2159999999999996E-007,0.3189774494905492E+023,0.7557257978750671E+023,0.1745842211780927E+024,0.1064092354647588E+023,0.6041201655971957E+022,0.2987366711171021E+024,0.2521379753261642E+005,0.2536559935179432E+005,0.2631585052530486E+005,0.2422876792721290E+005,0.2581004067327257E+005,0.2587321948475622E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2623161570666419E+005,0.2251752628629054E+005,0.2468855561967229E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873429019584934E+001,0.1900762970423455E+001,0.1891116647102135E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2636496724246950E+005,0.2355534327501688E+005,0.2585493257018659E+005,0.2521379753261642E+005,0.2536559935179432E+005,0.2630718316012194E+005,0.2356224538925335E+005,0.2551530248140554E+005,0.2583845249956320E+005 +0.2179999999999996E-007,0.3225811489042193E+023,0.7582283669123379E+023,0.1743539848266638E+024,0.1046574371386691E+023,0.6141304417462794E+022,0.2990419845396492E+024,0.2531508278403258E+005,0.2538219427366123E+005,0.2630371604418471E+005,0.2418581522877032E+005,0.2565683933625048E+005,0.2587601050266785E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2623328324629624E+005,0.2227444354639711E+005,0.2482603250808852E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873436888047185E+001,0.1899698711627834E+001,0.1891708312499735E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2624483387257954E+005,0.2326489897048395E+005,0.2558305944834113E+005,0.2531508278403258E+005,0.2538219427366123E+005,0.2626738549383992E+005,0.2339261206617486E+005,0.2540737956796399E+005,0.2582194503210138E+005 +0.2199999999999996E-007,0.3260346941756531E+023,0.7607809873303542E+023,0.1741788049940548E+024,0.1033561012392883E+023,0.6146309555537336E+022,0.2993422928241217E+024,0.2531536154729573E+005,0.2528478004056146E+005,0.2624150312166933E+005,0.2413693851219462E+005,0.2549144316681720E+005,0.2580941195188263E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2629376989970698E+005,0.2239014525511881E+005,0.2507256282632301E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873721641193856E+001,0.1900208105467370E+001,0.1892753372636476E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2619622350141124E+005,0.2338124118902387E+005,0.2544671667092708E+005,0.2531536154729573E+005,0.2528478004056146E+005,0.2624257592516551E+005,0.2343686319878702E+005,0.2536344059349369E+005,0.2578323593368140E+005 +0.2219999999999995E-007,0.3299387018737958E+023,0.7632835563676251E+023,0.1739585789187750E+024,0.1018545598169257E+023,0.6196360936282753E+022,0.2996626216608924E+024,0.2525078706464469E+005,0.2522407839524778E+005,0.2617750043953187E+005,0.2381367836175578E+005,0.2544406239002227E+005,0.2573710433831164E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2632793153801053E+005,0.2277779112193538E+005,0.2482312854143271E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873881898813126E+001,0.1901877707879024E+001,0.1891695881031960E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2620204068733168E+005,0.2316469943325017E+005,0.2523260296328233E+005,0.2525078706464469E+005,0.2522407839524778E+005,0.2622564944949879E+005,0.2334017117362186E+005,0.2521225633171274E+005,0.2574416792439457E+005 +0.2239999999999995E-007,0.3328917333377754E+023,0.7659362795471323E+023,0.1737783939480914E+024,0.1002028642523269E+023,0.6261427731251798E+022,0.2999429093930667E+024,0.2529730142966524E+005,0.2523059332388187E+005,0.2610781305685241E+005,0.2405293149125998E+005,0.2537314874910715E+005,0.2570986648269759E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2637713031063065E+005,0.2272154569057420E+005,0.2517717279079287E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874111984907664E+001,0.1901638929524979E+001,0.1893190753524516E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2610959932579977E+005,0.2279241898997649E+005,0.2511999051622958E+005,0.2529730142966524E+005,0.2523059332388187E+005,0.2618175762337372E+005,0.2332080972671041E+005,0.2524587295342424E+005,0.2572559270888266E+005 +0.2259999999999995E-007,0.3363953299899547E+023,0.7687391568688758E+023,0.1735932038393334E+024,0.9870132282996438E+022,0.6281448283549965E+022,0.3002582330917629E+024,0.2514565749921399E+005,0.2512767355764030E+005,0.2609270726522438E+005,0.2375937335059810E+005,0.2533433590911487E+005,0.2564696356254560E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2632672413177149E+005,0.2284861988727433E+005,0.2520380715422374E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873876241611665E+001,0.1902176753111933E+001,0.1893301544483345E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2618142721818983E+005,0.2292144127123267E+005,0.2475492910231062E+005,0.2514565749921399E+005,0.2512767355764030E+005,0.2618231588351186E+005,0.2326557576377959E+005,0.2513037792210812E+005,0.2567827144041133E+005 +0.2279999999999995E-007,0.3407498001148060E+023,0.7718923938558370E+023,0.1733479520736809E+024,0.9684942174238391E+022,0.6336504802369924E+022,0.3006336184473535E+024,0.2505727904571309E+005,0.2512083136285639E+005,0.2609182306391986E+005,0.2378256136347226E+005,0.2535512179721506E+005,0.2563533601016532E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2619998160363102E+005,0.2248510237892447E+005,0.2512189312782845E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873279565265205E+001,0.1900622319688331E+001,0.1892960071056023E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2619609764864804E+005,0.2278050452052085E+005,0.2466516939571039E+005,0.2505727904571309E+005,0.2512083136285639E+005,0.2615164317567321E+005,0.2313478019479987E+005,0.2509088156619561E+005,0.2564339103483216E+005 +0.2299999999999995E-007,0.3451543216204028E+023,0.7746952711775806E+023,0.1731027003080283E+024,0.9519772617778513E+022,0.6386556183115342E+022,0.3009939883887205E+024,0.2495319950207841E+005,0.2500006449656310E+005,0.2607775300860717E+005,0.2396505998505238E+005,0.2555355767193627E+005,0.2559348210798304E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2617800871467964E+005,0.2222228661668425E+005,0.2533069175761305E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873175547256276E+001,0.1899467379097684E+001,0.1893826207303190E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2616395308175241E+005,0.2285976407399273E+005,0.2449716452617501E+005,0.2495319950207841E+005,0.2500006449656310E+005,0.2613015916074192E+005,0.2316486300155468E+005,0.2518585829505076E+005,0.2559051068779349E+005 +0.2319999999999995E-007,0.3490583293185454E+023,0.7770977374533605E+023,0.1728624536804503E+024,0.9354603061318632E+022,0.6476648668457095E+022,0.3013093120874166E+024,0.2478570042775583E+005,0.2503440081966014E+005,0.2599240895325597E+005,0.2396907098276507E+005,0.2569379624386625E+005,0.2553630192581669E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2620613015420865E+005,0.2200130402855301E+005,0.2529543593789059E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873308641511867E+001,0.1898475299874762E+001,0.1893680944077951E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2614724011106805E+005,0.2285031122511290E+005,0.2434109229187021E+005,0.2478570042775583E+005,0.2503440081966014E+005,0.2609571118006925E+005,0.2310318740499910E+005,0.2519191992374625E+005,0.2555789635509194E+005 +0.2339999999999994E-007,0.3535629535856331E+023,0.7802009230595765E+023,0.1726372224670959E+024,0.9199443781007836E+022,0.6476648668457095E+022,0.3016897025810818E+024,0.2484572301612600E+005,0.2500447206418683E+005,0.2594105070656375E+005,0.2368891755419287E+005,0.2536536825579530E+005,0.2548944249586669E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2612667755134667E+005,0.2197142065795700E+005,0.2539712864472183E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1872931882992386E+001,0.1898339636990711E+001,0.1894098869045379E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2616732088713507E+005,0.2277549669612577E+005,0.2434312192606089E+005,0.2484572301612600E+005,0.2500447206418683E+005,0.2605747944624848E+005,0.2295145978632824E+005,0.2507753725998056E+005,0.2552740054555954E+005 +0.2359999999999994E-007,0.3576171154260119E+023,0.7831539545235562E+023,0.1724220015298906E+024,0.9039279362622499E+022,0.6501674358829804E+022,0.3020400622462998E+024,0.2477602923582695E+005,0.2504424835727738E+005,0.2592000799593395E+005,0.2359598796584517E+005,0.2542118172365074E+005,0.2547719662800468E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2605891543143654E+005,0.2166612075581228E+005,0.2510607451900711E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1872608785754734E+001,0.1896932599394600E+001,0.1892893876461501E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2613546953358698E+005,0.2274700237208325E+005,0.2420288870506745E+005,0.2477602923582695E+005,0.2504424835727738E+005,0.2602055822088888E+005,0.2281900499065874E+005,0.2498115601171820E+005,0.2550187150366314E+005 +0.2379999999999994E-007,0.3622718938353358E+023,0.7867076025564808E+023,0.1721867600403872E+024,0.8859094391938994E+022,0.6506679496904345E+022,0.3024504835684121E+024,0.2479389611302804E+005,0.2507018277569738E+005,0.2591824742170934E+005,0.2367556661572705E+005,0.2523198788011363E+005,0.2548252859419702E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2593899518300153E+005,0.2159092723477328E+005,0.2474824677155815E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1872032949730583E+001,0.1896580058310264E+001,0.1891374334565993E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2608631298482215E+005,0.2261239916534900E+005,0.2406132215362883E+005,0.2479389611302804E+005,0.2507018277569738E+005,0.2597281229672386E+005,0.2279396728271924E+005,0.2475947444343482E+005,0.2547760442896143E+005 +0.2399999999999994E-007,0.3664261584372055E+023,0.7880589898366071E+023,0.1719565236889582E+024,0.8769001906597241E+022,0.6551725739575221E+022,0.3027257661625120E+024,0.2485010074889083E+005,0.2508947719156720E+005,0.2591058335383197E+005,0.2392161917551474E+005,0.2531548621933988E+005,0.2549797556213687E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2580379781244805E+005,0.2160540834071130E+005,0.2416826983425219E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1871377483993278E+001,0.1896648139578655E+001,0.1888817722244190E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2606516191828973E+005,0.2242005694309104E+005,0.2407345669145183E+005,0.2485010074889083E+005,0.2508947719156720E+005,0.2592649298351078E+005,0.2284919076016555E+005,0.2464034254698510E+005,0.2546133606982400E+005 +0.2419999999999994E-007,0.3706805258005660E+023,0.7900109936856784E+023,0.1717362976136784E+024,0.8663894007031863E+022,0.6566741153798847E+022,0.3030360847231335E+024,0.2491799879358508E+005,0.2506920283258967E+005,0.2588696005882419E+005,0.2395533597545603E+005,0.2550482368496206E+005,0.2549173978629856E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2575587049515272E+005,0.2153353616036140E+005,0.2405751014538972E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1871143507891492E+001,0.1896309356550907E+001,0.1888315736976035E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2600522577264125E+005,0.2232305547502204E+005,0.2366052360612456E+005,0.2491799879358508E+005,0.2506920283258967E+005,0.2588568575006146E+005,0.2281602475206062E+005,0.2457258054513076E+005,0.2543824280373315E+005 +0.2439999999999994E-007,0.3740840196912544E+023,0.7943154124297843E+023,0.1715911486095167E+024,0.8473698760199274E+022,0.6516689773053430E+022,0.3034214803548732E+024,0.2490729983697920E+005,0.2505351571650614E+005,0.2584614352532701E+005,0.2396365747963984E+005,0.2534762924739693E+005,0.2545961659586391E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2572156760541184E+005,0.2177320338275467E+005,0.2369306163872729E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1870975521727342E+001,0.1897430523691799E+001,0.1886631516285402E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2596768323212192E+005,0.2207651321468213E+005,0.2375834545761727E+005,0.2490729983697920E+005,0.2505351571650614E+005,0.2584759905617561E+005,0.2281387815720219E+005,0.2443279491060949E+005,0.2540868144467619E+005 +0.2459999999999994E-007,0.3777377704856700E+023,0.7961673135173648E+023,0.1713709225342369E+024,0.8343565170261188E+022,0.6591766844171556E+022,0.3036967629489731E+024,0.2494033933235519E+005,0.2500519776961678E+005,0.2579269768997880E+005,0.2369988814178405E+005,0.2554645995430062E+005,0.2541739043396890E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2570390188007067E+005,0.2211477434692099E+005,0.2368596689562946E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1870888839247714E+001,0.1898987146183679E+001,0.1886598225440456E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2595244976562598E+005,0.2190485294472274E+005,0.2370914126852096E+005,0.2494033933235519E+005,0.2500519776961678E+005,0.2581502042946036E+005,0.2274319972130235E+005,0.2450318139509106E+005,0.2538105888853466E+005 +0.2479999999999993E-007,0.3816918295645580E+023,0.7982194201279270E+023,0.1711506964589570E+024,0.8218436718397642E+022,0.6636813086842433E+022,0.3039970712334456E+024,0.2502553807307738E+005,0.2490919110847294E+005,0.2576655325174627E+005,0.2371421346533378E+005,0.2559507494440966E+005,0.2538916359835098E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2565071256503223E+005,0.2192631742652468E+005,0.2374712821046047E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1870627144680995E+001,0.1898134192078017E+001,0.1886884573886353E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2591852671377797E+005,0.2223514391164986E+005,0.2371931940659647E+005,0.2502553807307738E+005,0.2490919110847294E+005,0.2577925255694801E+005,0.2279341292222362E+005,0.2454403754373575E+005,0.2534847378252690E+005 +0.2499999999999993E-007,0.3847449637900285E+023,0.8016729653993608E+023,0.1709805217644226E+024,0.8028241471565054E+022,0.6671849053364226E+022,0.3043224052082908E+024,0.2509893937810039E+005,0.2481464613548692E+005,0.2571507867492660E+005,0.2381285630376340E+005,0.2547582713571661E+005,0.2534455504504565E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2561991310742615E+005,0.2217439752771947E+005,0.2352444326037644E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1870475124212436E+001,0.1899254034408001E+001,0.1885834980810138E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2591069047239239E+005,0.2233616714245941E+005,0.2380106050381211E+005,0.2509893937810039E+005,0.2481464613548692E+005,0.2574611273943969E+005,0.2293374274554796E+005,0.2445496020287482E+005,0.2531641848554064E+005 +0.2519999999999993E-007,0.3882485604422078E+023,0.8047761510055766E+023,0.1707703059652918E+024,0.7838046224732466E+022,0.6741920986407810E+022,0.3046527443212106E+024,0.2508416487952551E+005,0.2475346546566854E+005,0.2570073422047817E+005,0.2383043828162532E+005,0.2506982630958007E+005,0.2530984608414090E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2559088649672652E+005,0.2232992568539255E+005,0.2346869664750904E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1870331526985644E+001,0.1899943627118925E+001,0.1885569172955544E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2589437965694752E+005,0.2202918038127130E+005,0.2371120745526037E+005,0.2508416487952551E+005,0.2475346546566854E+005,0.2572720153305605E+005,0.2289515453235405E+005,0.2423673926953178E+005,0.2528218320123922E+005 +0.2539999999999993E-007,0.3920024139981141E+023,0.8059273327627213E+023,0.1705450747519374E+024,0.7742948601316171E+022,0.6816998057525938E+022,0.3048979960868631E+024,0.2521585591030390E+005,0.2472150173119673E+005,0.2567316670372138E+005,0.2368748228451966E+005,0.2513269084931882E+005,0.2530030938258215E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2552968749367502E+005,0.2224071899192029E+005,0.2335559647664074E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1870027724837654E+001,0.1899549254312292E+001,0.1885026075616474E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2584439615315349E+005,0.2228694895821248E+005,0.2368764079416937E+005,0.2521585591030390E+005,0.2472150173119673E+005,0.2568395978944237E+005,0.2288318847028687E+005,0.2422638065192865E+005,0.2526565775140190E+005 +0.2559999999999993E-007,0.3957062161732750E+023,0.8093308266534098E+023,0.1703548795051049E+024,0.7567768768707208E+022,0.6827008333675021E+022,0.3052533608901556E+024,0.2530017186257863E+005,0.2471794943690712E+005,0.2563679845214043E+005,0.2354196437263086E+005,0.2526760358861597E+005,0.2528935093270277E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2545813042284159E+005,0.2223063010062970E+005,0.2308205231480791E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1869670694110116E+001,0.1899504456744377E+001,0.1883690989256221E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2579291754633839E+005,0.2204351616621965E+005,0.2396351082407341E+005,0.2530017186257863E+005,0.2471794943690712E+005,0.2563362330868308E+005,0.2274657656743771E+005,0.2429064387607061E+005,0.2524601013464286E+005 +0.2579999999999993E-007,0.3997603780136539E+023,0.8117833443099352E+023,0.1701496688440486E+024,0.7442640316843663E+022,0.6832013471749563E+022,0.3055786948650008E+024,0.2517724833391348E+005,0.2471802038333779E+005,0.2560861835170438E+005,0.2349754920402532E+005,0.2546153130929103E+005,0.2526088942083241E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2549017495313623E+005,0.2214074316441017E+005,0.2323886281590465E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1869830820921285E+001,0.1899103562650870E+001,0.1884460099898610E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2568074669535366E+005,0.2192907074996041E+005,0.2396229140902084E+005,0.2517724833391348E+005,0.2471802038333779E+005,0.2559737900216412E+005,0.2266937318957602E+005,0.2441758453825308E+005,0.2521112009314050E+005 +0.2599999999999993E-007,0.4041148481385053E+023,0.8140356564434790E+023,0.1699294427687688E+024,0.7327522141129202E+022,0.6837018609824105E+022,0.3059090339779206E+024,0.2515791178954618E+005,0.2465218989365874E+005,0.2557116452995642E+005,0.2384223802565492E+005,0.2512951651508831E+005,0.2522074574526713E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2548777389675793E+005,0.2201760811527139E+005,0.2314653689214003E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1869818836451502E+001,0.1898549163767580E+001,0.1884008503352966E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2563766441605825E+005,0.2179643112311902E+005,0.2403209869695579E+005,0.2515791178954618E+005,0.2465218989365874E+005,0.2556782738161521E+005,0.2274696955452479E+005,0.2426798560544655E+005,0.2517340164952541E+005 +0.2619999999999992E-007,0.4071679823639758E+023,0.8170887906689496E+023,0.1697742834884580E+024,0.7172362860818406E+022,0.6842023747898646E+022,0.3062143474004676E+024,0.2505251427527904E+005,0.2473476489274836E+005,0.2553735606983483E+005,0.2375515454579809E+005,0.2521228938437653E+005,0.2520972040609482E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2542442506325158E+005,0.2198598156096009E+005,0.2282567346157023E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1869501842675518E+001,0.1898405785025384E+001,0.1882411234965548E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2560292284928351E+005,0.2163714451906088E+005,0.2435971660167009E+005,0.2505251427527904E+005,0.2473476489274836E+005,0.2552571167875129E+005,0.2265422941624317E+005,0.2431177094970875E+005,0.2515735668990657E+005 +0.2639999999999992E-007,0.4107716817776459E+023,0.8189907431372754E+023,0.1695540574131782E+024,0.7037224132805777E+022,0.6922105957091315E+022,0.3064896299945674E+024,0.2516172706248687E+005,0.2465170514405943E+005,0.2548753486156630E+005,0.2401226359229601E+005,0.2519150021850522E+005,0.2517996184628815E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2535512184185987E+005,0.2205056579441941E+005,0.2302293726677953E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1869153281452729E+001,0.1898698147312367E+001,0.1883398383619162E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2562320988751169E+005,0.2133188665240016E+005,0.2409167607165968E+005,0.2516172706248687E+005,0.2465170514405943E+005,0.2549100687924042E+005,0.2269528672793700E+005,0.2427859123059863E+005,0.2513102570632187E+005 +0.2659999999999992E-007,0.4149259463795156E+023,0.8209427469863467E+023,0.1693188159236747E+024,0.6912095680942232E+022,0.6977162475911275E+022,0.3067949434171144E+024,0.2510731369016900E+005,0.2470982262269350E+005,0.2542781550018621E+005,0.2407692983742542E+005,0.2512477170848020E+005,0.2515501637255001E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2528371787966375E+005,0.2192086809696955E+005,0.2302081805784408E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1868792202649784E+001,0.1898109314200151E+001,0.1883387866704907E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2562601369802244E+005,0.2137015011831472E+005,0.2367816590364281E+005,0.2510731369016900E+005,0.2470982262269350E+005,0.2544632062922049E+005,0.2269887102786109E+005,0.2412878361073637E+005,0.2511153071909525E+005 +0.2679999999999992E-007,0.4182793888894586E+023,0.8227946480739272E+023,0.1691336258149166E+024,0.6801982643302312E+022,0.7012198442433068E+022,0.3070552105969906E+024,0.2510099942272428E+005,0.2470235453928422E+005,0.2541138248134278E+005,0.2393483510868081E+005,0.2527122173911087E+005,0.2514319811282727E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2521720222296238E+005,0.2202862904119177E+005,0.2276166719400861E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1868454046721186E+001,0.1898599032042743E+001,0.1882087334541869E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2560472098659927E+005,0.2115386821450115E+005,0.2359233278007166E+005,0.2510099942272428E+005,0.2470235453928422E+005,0.2541485635199642E+005,0.2260397724314555E+005,0.2409701711921333E+005,0.2508881480001167E+005 +0.2699999999999992E-007,0.4211823689726928E+023,0.8249969088267257E+023,0.1689534408442331E+024,0.6656833639140600E+022,0.7082270375476653E+022,0.3073104726387922E+024,0.2506551687910760E+005,0.2468912729401276E+005,0.2537905951344978E+005,0.2403201492725553E+005,0.2553796247657199E+005,0.2512535284643907E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2518648954817548E+005,0.2198215018113710E+005,0.2304170324667127E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1868297319342458E+001,0.1898388387976101E+001,0.1883491430130120E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2556236338857345E+005,0.2113224477948565E+005,0.2338723213203572E+005,0.2506551687910760E+005,0.2468912729401276E+005,0.2538005390842454E+005,0.2262719699276753E+005,0.2423002977303646E+005,0.2506532636666573E+005 +0.2719999999999992E-007,0.4249362225285991E+023,0.8274494264832511E+023,0.1687532353212515E+024,0.6521694911127971E+022,0.7107296065849362E+022,0.3076207911994138E+024,0.2505927863045441E+005,0.2456078131179778E+005,0.2535498938864345E+005,0.2398288191936689E+005,0.2496015304045299E+005,0.2506230043287743E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2521061458336483E+005,0.2183876756809955E+005,0.2298065466246804E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1868420461282899E+001,0.1897733024213430E+001,0.1883188190259367E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2554232583619611E+005,0.2132736992051419E+005,0.2378333718763319E+005,0.2505927863045441E+005,0.2456078131179778E+005,0.2537026510675367E+005,0.2262301766007063E+005,0.2407663808988046E+005,0.2502143780051102E+005 +0.2739999999999991E-007,0.4284898705615239E+023,0.8298018413782858E+023,0.1685930709028661E+024,0.6421592149637135E+022,0.7072260099327570E+022,0.3079160943458118E+024,0.2513095741082909E+005,0.2463093476276007E+005,0.2529336608935153E+005,0.2391781414779102E+005,0.2465227562691430E+005,0.2504883547126252E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2518530126414094E+005,0.2163548028348267E+005,0.2292302875329689E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1868291248005334E+001,0.1896789233527826E+001,0.1882900500263964E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2548318038949905E+005,0.2148083036529495E+005,0.2345320152970146E+005,0.2513095741082909E+005,0.2463093476276007E+005,0.2531924327287785E+005,0.2258341439241084E+005,0.2383079811207547E+005,0.2501630725987241E+005 +0.2759999999999991E-007,0.4317932616907215E+023,0.8314034855621391E+023,0.1684028756560336E+024,0.6316484250071757E+022,0.7122311480072987E+022,0.3081613461114644E+024,0.2515160796557925E+005,0.2459356241262838E+005,0.2525718835847329E+005,0.2359002742711424E+005,0.2458862496438795E+005,0.2501372727511827E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2519969103148727E+005,0.2188169455504070E+005,0.2262088312133267E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1868364732484856E+001,0.1897930116672590E+001,0.1881368589622569E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2544230624255100E+005,0.2133512811198223E+005,0.2355163720151195E+005,0.2515160796557925E+005,0.2459356241262838E+005,0.2529545216659047E+005,0.2246619826295135E+005,0.2374925367559044E+005,0.2499220225991221E+005 +0.2779999999999991E-007,0.4348463959161920E+023,0.8336557976956829E+023,0.1682477163757227E+024,0.6201366074357296E+022,0.7127316618147530E+022,0.3084266184294151E+024,0.2504161102060463E+005,0.2457572912879143E+005,0.2529779635659643E+005,0.2357899666330582E+005,0.2464196470601161E+005,0.2501679302928091E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2516461613291114E+005,0.2185072929181467E+005,0.2214952675396614E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1868185471104401E+001,0.1897788021005639E+001,0.1878897094414092E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2536941906999488E+005,0.2119603011995436E+005,0.2350375465500556E+005,0.2504161102060463E+005,0.2457572912879143E+005,0.2528242695043020E+005,0.2241256212270933E+005,0.2363025389938113E+005,0.2496157685368261E+005 +0.2799999999999991E-007,0.4397013798484975E+023,0.8347068766913367E+023,0.1679974594719957E+024,0.6141304417462794E+022,0.7142332032371154E+022,0.3087219215758131E+024,0.2513181730961762E+005,0.2452017897177978E+005,0.2526850963012352E+005,0.2382911558575134E+005,0.2451926254427820E+005,0.2500074379447252E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2515857762697164E+005,0.2176632067356710E+005,0.2205383844241440E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1868154560158440E+001,0.1897398664406134E+001,0.1878382742880193E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2527931451945848E+005,0.2125640589602127E+005,0.2309303647351680E+005,0.2513181730961762E+005,0.2452017897177978E+005,0.2524175423422844E+005,0.2251566915013599E+005,0.2343129426625662E+005,0.2493488600402725E+005 +0.2819999999999991E-007,0.4436053875466401E+023,0.8365087263981717E+023,0.1678122693632376E+024,0.6061222208270125E+022,0.7122311480072987E+022,0.3090072144460619E+024,0.2504928304770360E+005,0.2447717886247600E+005,0.2522857981719791E+005,0.2393224242000239E+005,0.2434980557998103E+005,0.2495374694681243E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2513447797531047E+005,0.2196425528343290E+005,0.2167659383400784E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1868031050257949E+001,0.1898307054127060E+001,0.1876311675683099E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2529759640880846E+005,0.2108595619451728E+005,0.2311161377634183E+005,0.2504928304770360E+005,0.2447717886247600E+005,0.2522308304832269E+005,0.2256546992919095E+005,0.2326024443569552E+005,0.2489883906736154E+005 +0.2839999999999991E-007,0.4472090869603102E+023,0.8380102678205343E+023,0.1676270792544796E+024,0.5981139999077456E+022,0.7132321756222071E+022,0.3092624764878636E+024,0.2491450843671648E+005,0.2450441402108319E+005,0.2519785006278145E+005,0.2395819397963258E+005,0.2426807115416708E+005,0.2492355882907994E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2509713336811010E+005,0.2219984793528097E+005,0.2149789927933136E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1867839202871964E+001,0.1899367527913389E+001,0.1875305836917750E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2529896163678051E+005,0.2073106423189970E+005,0.2311482306557532E+005,0.2491450843671648E+005,0.2450441402108319E+005,0.2519990319141343E+005,0.2253864286348785E+005,0.2317700468508746E+005,0.2487205496963541E+005 +0.2859999999999991E-007,0.4502121698050353E+023,0.8406129396192961E+023,0.1674669148360942E+024,0.5840996132990285E+022,0.7152342308520238E+022,0.3095427642200379E+024,0.2488704917378453E+005,0.2446375138299216E+005,0.2522606221815369E+005,0.2365119013877465E+005,0.2369463090537191E+005,0.2490463406918063E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2502623989804224E+005,0.2212135533293291E+005,0.2163331538002075E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1867473469732450E+001,0.1899016673701203E+001,0.1876069560569478E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2529278860957481E+005,0.2043416868404542E+005,0.2323235810792976E+005,0.2488704917378453E+005,0.2446375138299216E+005,0.2519115708168934E+005,0.2229748639294068E+005,0.2299776231430896E+005,0.2484410389780092E+005 +0.2879999999999990E-007,0.4548669482143591E+023,0.8422646351838949E+023,0.1672366784846653E+024,0.5760913923797617E+022,0.7147337170445697E+022,0.3098580879187340E+024,0.2483827012845072E+005,0.2440932340972423E+005,0.2519839902243996E+005,0.2365950657336021E+005,0.2357471618939819E+005,0.2486498007668450E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2495878205133538E+005,0.2223769633896619E+005,0.2153423548461147E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1867123577281317E+001,0.1899535837056812E+001,0.1875511688957197E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2533049925874169E+005,0.2023812238563337E+005,0.2274082830752772E+005,0.2483827012845072E+005,0.2440932340972423E+005,0.2517172205622536E+005,0.2227629064484488E+005,0.2277554349866083E+005,0.2480643097788915E+005 +0.2899999999999990E-007,0.4592714697199559E+023,0.8440664848907298E+023,0.1670164524093855E+024,0.5670821438455865E+022,0.7147337170445697E+022,0.3101684064793556E+024,0.2485201870044861E+005,0.2439747063294202E+005,0.2520198738759233E+005,0.2365596765796635E+005,0.2361926633335535E+005,0.2486649522617922E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2488495614752610E+005,0.2232858719588041E+005,0.2175317109689712E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1866738532414143E+001,0.1899937732684104E+001,0.1876737767438741E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2524614452371226E+005,0.2022265946211919E+005,0.2227625328083769E+005,0.2485201870044861E+005,0.2439747063294202E+005,0.2512866288904123E+005,0.2229529499960790E+005,0.2271939233463534E+005,0.2478139877008363E+005 +0.2919999999999990E-007,0.4627250149913898E+023,0.8451175638863837E+023,0.1668312623006274E+024,0.5605754643486821E+022,0.7172362860818406E+022,0.3103936376927100E+024,0.2483966198883735E+005,0.2440946652000328E+005,0.2515196388503725E+005,0.2338533887361333E+005,0.2342043641130776E+005,0.2483132858838941E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2484470818840253E+005,0.2230284514739043E+005,0.2168759503032520E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1866527675099076E+001,0.1899824234722988E+001,0.1876373069646114E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2526978350564875E+005,0.2034581612209131E+005,0.2209353274773025E+005,0.2483966198883735E+005,0.2440946652000328E+005,0.2510275968229257E+005,0.2220623734271984E+005,0.2256166040125294E+005,0.2476374341991573E+005 +0.2939999999999990E-007,0.4661285088820782E+023,0.8462186942627829E+023,0.1666460721918694E+024,0.5535682710443236E+022,0.7202393689265657E+022,0.3106188689060644E+024,0.2483572684572914E+005,0.2433325013094004E+005,0.2512873360368497E+005,0.2349017884404130E+005,0.2336523595356255E+005,0.2479795813328160E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2489337969353620E+005,0.2236557592748781E+005,0.2156262140340409E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1866782578772684E+001,0.1900100368416869E+001,0.1875672028958509E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2518288808103421E+005,0.2055709513578135E+005,0.2210521465677915E+005,0.2483572684572914E+005,0.2433325013094004E+005,0.2508052388962810E+005,0.2233033689895637E+005,0.2250696984380069E+005,0.2473152286817147E+005 +0.2959999999999990E-007,0.4704829790069296E+023,0.8480705953503633E+023,0.1664158358404404E+024,0.5430574810877857E+022,0.7227419379638366E+022,0.3109291874666860E+024,0.2486437208450106E+005,0.2430650527582974E+005,0.2507149473620580E+005,0.2319296941967736E+005,0.2342428074312008E+005,0.2476040186545011E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2490758558295088E+005,0.2256753315879700E+005,0.2137665070169781E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1866856794869787E+001,0.1900979115205930E+001,0.1874613987956024E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2512884417113553E+005,0.2022493359749321E+005,0.2205383272960617E+005,0.2486437208450106E+005,0.2430650527582974E+005,0.2504363685998233E+005,0.2216050535983188E+005,0.2246722163313023E+005,0.2470521266699686E+005 +0.2979999999999990E-007,0.4748374491317810E+023,0.8505231130068887E+023,0.1661805943509370E+024,0.5290430944790687E+022,0.7262455346160158E+022,0.3112695368557548E+024,0.2467294909652701E+005,0.2425037700707154E+005,0.2504381054659430E+005,0.2316617638516666E+005,0.2347248596036863E+005,0.2470186119787038E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2488936796653699E+005,0.2266062655101178E+005,0.2154258064909164E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1866761605255348E+001,0.1901378995840105E+001,0.1875558870130985E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2512030994766964E+005,0.2028399297014192E+005,0.2216719525612428E+005,0.2467294909652701E+005,0.2425037700707154E+005,0.2502410567196849E+005,0.2219164525593641E+005,0.2256634399413041E+005,0.2465363587798077E+005 +0.2999999999999990E-007,0.4782909944032148E+023,0.8525752196174509E+023,0.1660254350706262E+024,0.5205343597523477E+022,0.7227419379638366E+022,0.3115448194498546E+024,0.2476605659411749E+005,0.2424501478808192E+005,0.2500133842169610E+005,0.2324442569744549E+005,0.2343259855146471E+005,0.2469249402415155E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2480261132145550E+005,0.2251657155470396E+005,0.2156087791527668E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1866306416687999E+001,0.1900758834608270E+001,0.1875662192635139E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2508417029283282E+005,0.2064251125346733E+005,0.2224590807962215E+005,0.2476605659411749E+005,0.2424501478808192E+005,0.2497145016626133E+005,0.2228984892727316E+005,0.2257681238697560E+005,0.2464076395131794E+005 +0.3019999999999990E-007,0.4827956186703024E+023,0.8550777886547219E+023,0.1657851884430482E+024,0.5065199731436306E+022,0.7257450208085616E+022,0.3118951791150725E+024,0.2467273245240215E+005,0.2424798563615298E+005,0.2502427151953327E+005,0.2337359248108149E+005,0.2350031277419006E+005,0.2469476431836378E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2477043350451916E+005,0.2237188435173957E+005,0.2138441544496898E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1866136797147135E+001,0.1900128053182235E+001,0.1874658523765571E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2496499918732664E+005,0.2041039966844836E+005,0.2197758021766945E+005,0.2467273245240215E+005,0.2424798563615298E+005,0.2493801615611086E+005,0.2223886580897016E+005,0.2248032755566061E+005,0.2460675407425426E+005 +0.3039999999999990E-007,0.4856985987535367E+023,0.8573801521690112E+023,0.1656300291627374E+024,0.4940071279572760E+022,0.7277470760383783E+022,0.3121554462949487E+024,0.2462655168056228E+005,0.2421809209334540E+005,0.2500843917308860E+005,0.2290268919976039E+005,0.2346343050078981E+005,0.2466259442287336E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2471016246052726E+005,0.2225156482361878E+005,0.2115189069147709E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1865817929043612E+001,0.1899597368401579E+001,0.1873310991625131E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2500612784844549E+005,0.2023382678653353E+005,0.2208411805845703E+005,0.2462655168056228E+005,0.2421809209334540E+005,0.2492670780572659E+005,0.2194979316440846E+005,0.2243207053094883E+005,0.2458010271745568E+005 +0.3059999999999990E-007,0.4898528633554064E+023,0.8594322587795732E+023,0.1653947876732339E+024,0.4809937689634674E+022,0.7332527279203743E+022,0.3124657648555702E+024,0.2461651304045405E+005,0.2420154456741983E+005,0.2496827105093950E+005,0.2291434065365705E+005,0.2341179807790241E+005,0.2463409661094486E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2472685415080577E+005,0.2209005944358294E+005,0.2096922338375602E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1865906389493520E+001,0.1898876101228365E+001,0.1872231909989105E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2492086640663039E+005,0.2016637768603848E+005,0.2204876735912590E+005,0.2461651304045405E+005,0.2420154456741983E+005,0.2488885391441345E+005,0.2189082121047105E+005,0.2234967913051122E+005,0.2455137951281205E+005 +0.3079999999999991E-007,0.4935066141498219E+023,0.8605834405367179E+023,0.1651995872883268E+024,0.4739865756591088E+022,0.7357552969576452E+022,0.3127060114831483E+024,0.2457968258401053E+005,0.2421220111922579E+005,0.2494838151261266E+005,0.2287734298077802E+005,0.2346804859253645E+005,0.2462137125280393E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2471657129457979E+005,0.2228268483664999E+005,0.2103669679006111E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1865851907541242E+001,0.1899735167028666E+001,0.1872632632922252E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2484084162729482E+005,0.1988493765366773E+005,0.2190248116114640E+005,0.2457968258401053E+005,0.2421220111922579E+005,0.2485405915948579E+005,0.2184621591999194E+005,0.2234996706532081E+005,0.2452960531079524E+005 +0.3099999999999991E-007,0.4973105190864737E+023,0.8622851874820620E+023,0.1649843663511215E+024,0.4629752718951169E+022,0.7407604350321870E+022,0.3129812940772481E+024,0.2455267301991560E+005,0.2417179949660321E+005,0.2488139206206497E+005,0.2247257657744653E+005,0.2355285984689956E+005,0.2456658692034092E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2471731374304755E+005,0.2265371675704743E+005,0.2101646332589113E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1865855842759278E+001,0.1901349425937009E+001,0.1872512730848187E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2485331325345352E+005,0.1974111393443865E+005,0.2167581480697080E+005,0.2455267301991560E+005,0.2417179949660321E+005,0.2482862309695281E+005,0.2173090792779363E+005,0.2231553585945089E+005,0.2449851447104544E+005 +0.3119999999999991E-007,0.5010643726423801E+023,0.8637366775236792E+023,0.1647841608281398E+024,0.4544665371683958E+022,0.7432630040694579E+022,0.3132415612571242E+024,0.2449368557525890E+005,0.2420869472209019E+005,0.2485026325550060E+005,0.2244454192487448E+005,0.2332188448629176E+005,0.2454514877291005E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2470748869751085E+005,0.2254119967012167E+005,0.2107755498981872E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1865803748141584E+001,0.1900865411388729E+001,0.1872874069803374E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2478026388884690E+005,0.1952974612557720E+005,0.2181719906192748E+005,0.2449368557525890E+005,0.2420869472209019E+005,0.2479107309311736E+005,0.2162640421353848E+005,0.2227243744368443E+005,0.2447723979271850E+005 +0.3139999999999991E-007,0.5039673527256143E+023,0.8647377051385875E+023,0.1646239964097545E+024,0.4479598576714915E+022,0.7462660869141830E+022,0.3134367616420314E+024,0.2451973094280077E+005,0.2417809286983092E+005,0.2482505727985852E+005,0.2241430517523263E+005,0.2342522812020682E+005,0.2452969130552701E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2468324389247736E+005,0.2264932052341009E+005,0.2099617547405425E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1865675023506686E+001,0.1901330603382705E+001,0.1872392279715306E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2474850326121409E+005,0.1951696899615633E+005,0.2174538378768497E+005,0.2451973094280077E+005,0.2417809286983092E+005,0.2476422047492751E+005,0.2163940671119196E+005,0.2227456212722171E+005,0.2445926733235672E+005 +0.3159999999999991E-007,0.5077712576622661E+023,0.8666396576069134E+023,0.1644287960248473E+024,0.4379495815224079E+022,0.7472671145290913E+022,0.3137220545122803E+024,0.2444109945108333E+005,0.2415017222034802E+005,0.2482631387511164E+005,0.2236748271527086E+005,0.2332123577238856E+005,0.2450701023828608E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2460023635916359E+005,0.2254916765130190E+005,0.2112227893342659E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1865232430578365E+001,0.1900899843399250E+001,0.1873137303263306E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2476111993951569E+005,0.1911370228752169E+005,0.2166517693234314E+005,0.2444109945108333E+005,0.2415017222034802E+005,0.2474589780889023E+005,0.2147452728498112E+005,0.2224006054839176E+005,0.2442664394571371E+005 +0.3179999999999991E-007,0.5108243918877366E+023,0.8683914559330031E+023,0.1642436059160893E+024,0.4259372501435075E+022,0.7537737940259958E+022,0.3139623011398583E+024,0.2446384991827202E+005,0.2415607954989554E+005,0.2480328711736563E+005,0.2195627260199211E+005,0.2317463192177397E+005,0.2449132258116650E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2457456749893110E+005,0.2243506510002512E+005,0.2133553249350379E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1865094974527300E+001,0.1900404480543286E+001,0.1874377620230026E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2468914581993085E+005,0.1901143634340640E+005,0.2193590431866733E+005,0.2446384991827202E+005,0.2415607954989554E+005,0.2470789638960186E+005,0.2123460865856673E+005,0.2231279069872191E+005,0.2441093877123569E+005 +0.3199999999999992E-007,0.5135772178287345E+023,0.8690421238826935E+023,0.1640984569119276E+024,0.4219331396838741E+022,0.7552753354483582E+022,0.3141324758343927E+024,0.2445293902702702E+005,0.2417257438495344E+005,0.2482283824077500E+005,0.2215477983346815E+005,0.2311208152464886E+005,0.2450550016546045E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2448664564857129E+005,0.2225976673650415E+005,0.2108489487785425E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1864622024099435E+001,0.1899633722997401E+001,0.1872917345334401E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2465101229305857E+005,0.1912677195919442E+005,0.2189047134315181E+005,0.2445293902702702E+005,0.2417257438495344E+005,0.2468145769516188E+005,0.2130595519694484E+005,0.2220417399681544E+005,0.2439841476033376E+005 +0.3219999999999992E-007,0.5168305575771867E+023,0.8704936139243105E+023,0.1639282822173932E+024,0.4139249187646072E+022,0.7567768768707208E+022,0.3143677173238962E+024,0.2444263478345832E+005,0.2419208465961041E+005,0.2483817141497590E+005,0.2225312828603256E+005,0.2280131026476553E+005,0.2451117023945772E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2445476091481041E+005,0.2211904307699766E+005,0.2080259171746789E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1864449689362721E+001,0.1899006301055740E+001,0.1871231406723064E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2457148491933164E+005,0.1886875618247198E+005,0.2168361688372348E+005,0.2444263478345832E+005,0.2419208465961041E+005,0.2465633271912899E+005,0.2123510155037325E+005,0.2193167695927959E+005,0.2438201080952470E+005 +0.3239999999999992E-007,0.5205844111330931E+023,0.8709440763510194E+023,0.1637430921086351E+024,0.4119228635347905E+022,0.7562763630632666E+022,0.3145779331230269E+024,0.2440204532715867E+005,0.2415484920776803E+005,0.2481965922131347E+005,0.2224288460340445E+005,0.2288462249637039E+005,0.2448622797661193E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2440110990653771E+005,0.2201114165510759E+005,0.2114584865044546E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1864158717604096E+001,0.1898519881032854E+001,0.1873275590524403E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2455815320771457E+005,0.1932086435369153E+005,0.2158539536492941E+005,0.2440204532715867E+005,0.2415484920776803E+005,0.2462979554905574E+005,0.2133196324600804E+005,0.2203267690088633E+005,0.2435499111308032E+005 +0.3259999999999992E-007,0.5244884188312357E+023,0.8720452067274186E+023,0.1635228660333553E+024,0.4039146426155236E+022,0.7612815011378084E+022,0.3148281900267540E+024,0.2436986414666616E+005,0.2410216454897980E+005,0.2478812992424637E+005,0.2232123819673531E+005,0.2284535228449897E+005,0.2444981529918970E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2440994334875424E+005,0.2208468868267360E+005,0.2123363334243358E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1864206710866714E+001,0.1898851937915072E+001,0.1873787996761233E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2452620902047016E+005,0.1942181238755946E+005,0.2110604539032985E+005,0.2436986414666616E+005,0.2410216454897980E+005,0.2460910563035394E+005,0.2141557676527272E+005,0.2189992984796251E+005,0.2432234897898936E+005 +0.3279999999999992E-007,0.5289429917175779E+023,0.8734966967690357E+023,0.1632976348200009E+024,0.3964069355037109E+022,0.7617820149452626E+022,0.3151234931731520E+024,0.2436438598066364E+005,0.2403707681992404E+005,0.2476036581119627E+005,0.2213817509729694E+005,0.2299089556092035E+005,0.2441764879894913E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2442356214059411E+005,0.2216046622637632E+005,0.2131604847097818E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1864280637196175E+001,0.1899191800733963E+001,0.1874265305146914E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2445074341253368E+005,0.1910539247571449E+005,0.2095171481036379E+005,0.2436438598066364E+005,0.2403707681992404E+005,0.2457868015105479E+005,0.2126514093799912E+005,0.2194096964551902E+005,0.2428713566926074E+005 +0.3299999999999992E-007,0.5320962287045392E+023,0.8748480840491620E+023,0.1631524858158392E+024,0.3909012836217149E+022,0.7592794459079917E+022,0.3153487243865063E+024,0.2435771872628476E+005,0.2395106493911101E+005,0.2476126490574888E+005,0.2216198861955361E+005,0.2289071037634464E+005,0.2439114744441452E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2435261556871283E+005,0.2223283770492405E+005,0.2123553990850302E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1863894636270671E+001,0.1899514262553558E+001,0.1873799079589318E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2446449622782061E+005,0.1929069804702273E+005,0.2121001842921679E+005,0.2435771872628476E+005,0.2395106493911101E+005,0.2456382354991683E+005,0.2134917744422948E+005,0.2195049657046673E+005,0.2425628345350107E+005 +0.3319999999999993E-007,0.5354997225952277E+023,0.8764497282330153E+023,0.1629672957070812E+024,0.3813915212800855E+022,0.7622825287527168E+022,0.3155989812902334E+024,0.2435651253885644E+005,0.2389663428966134E+005,0.2474861284481645E+005,0.2230208609724511E+005,0.2272394755026262E+005,0.2436701112761652E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2435621337435494E+005,0.2221350029055633E+005,0.2084910627090968E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1863914263760488E+001,0.1899428303923807E+001,0.1871512265417264E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2439818264917677E+005,0.1965559416896952E+005,0.2143907113549852E+005,0.2435651253885644E+005,0.2389663428966134E+005,0.2453994774406970E+005,0.2151053555065911E+005,0.2183934732766829E+005,0.2422832992333733E+005 +0.3339999999999993E-007,0.5396539871970973E+023,0.8777010127516507E+023,0.1627670901840995E+024,0.3758858693980895E+022,0.7607809873303542E+022,0.3158692587462587E+024,0.2434777027000356E+005,0.2385414403354962E+005,0.2470990773547340E+005,0.2193365664038149E+005,0.2280593525093062E+005,0.2433135251864933E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2439536143412384E+005,0.2223804634506250E+005,0.2074511653154805E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1864127467175795E+001,0.1899537390882454E+001,0.1870882667173540E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2432036566080791E+005,0.1953330176841756E+005,0.2140771309409158E+005,0.2434777027000356E+005,0.2385414403354962E+005,0.2451098390197748E+005,0.2132165762084338E+005,0.2183779263255374E+005,0.2419824644647431E+005 +0.3359999999999993E-007,0.5426570700418224E+023,0.8791024514125225E+023,0.1626219411799377E+024,0.3693791899011851E+022,0.7597799597154459E+022,0.3160894848215385E+024,0.2424743026871754E+005,0.2390208318712686E+005,0.2467644706277227E+005,0.2213233928609280E+005,0.2271763896604850E+005,0.2431061567830924E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2436003829865832E+005,0.2216347854730806E+005,0.2055389816692270E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1863935124071049E+001,0.1899205263835431E+001,0.1869708707294583E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2430453272127870E+005,0.1978891104951899E+005,0.2137308072389579E+005,0.2424743026871754E+005,0.2390208318712686E+005,0.2448215704285261E+005,0.2146157845968378E+005,0.2173729441525142E+005,0.2417925435651599E+005 +0.3379999999999993E-007,0.5471116429281646E+023,0.8795529138392313E+023,0.1623566688619870E+024,0.3628725104042808E+022,0.7682886944421670E+022,0.3163347365871911E+024,0.2419101177052987E+005,0.2381460959406398E+005,0.2465950342405440E+005,0.2240387623970563E+005,0.2299877954063929E+005,0.2427734870729238E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2435968150956286E+005,0.2186973542571490E+005,0.2048909005756762E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1863933178490730E+001,0.1897875284582718E+001,0.1869305970334654E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2425534632673668E+005,0.1996632719435795E+005,0.2138705653872035E+005,0.2419101177052987E+005,0.2381460959406398E+005,0.2446032284155994E+005,0.2155015962450134E+005,0.2184657820146321E+005,0.2413734374959145E+005 +0.3399999999999993E-007,0.5497643661076718E+023,0.8804037873119034E+023,0.1622215301339744E+024,0.3583678861371932E+022,0.7687892082496211E+022,0.3165099164198001E+024,0.2417723228454821E+005,0.2376425146810307E+005,0.2462420708162662E+005,0.2243697532481379E+005,0.2305372881519199E+005,0.2424445309316876E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2436719403858497E+005,0.2172733209907444E+005,0.2029624250518957E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1863974132771070E+001,0.1897217816540012E+001,0.1868092701903096E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2425725308561316E+005,0.1990284915455411E+005,0.2146729428514209E+005,0.2417723228454821E+005,0.2376425146810307E+005,0.2444749113943649E+005,0.2150694813379246E+005,0.2184173161703151E+005,0.2411391136020435E+005 +0.3419999999999994E-007,0.5528675517138877E+023,0.8817051232112842E+023,0.1620663708536636E+024,0.3518612066402889E+022,0.7687892082496211E+022,0.3167301424950799E+024,0.2408663503855868E+005,0.2373079362830729E+005,0.2459312820822536E+005,0.2255765969793660E+005,0.2297833214748751E+005,0.2420285513061911E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2436230996279358E+005,0.2189524331415391E+005,0.2042303170848232E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1863947510211302E+001,0.1897992166071566E+001,0.1868892894991402E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2426709558618163E+005,0.1960332703702653E+005,0.2141881304064554E+005,0.2408663503855868E+005,0.2373079362830729E+005,0.2443544950564770E+005,0.2151881734259682E+005,0.2182900267483470E+005,0.2408273514776069E+005 +0.3439999999999994E-007,0.5570718676965028E+023,0.8822056370187385E+023,0.1618161139499365E+024,0.3453545271433845E+022,0.7767974291688880E+022,0.3169653839845834E+024,0.2407550793961056E+005,0.2374658645751348E+005,0.2455036729174462E+005,0.2265498054026191E+005,0.2281841106555758E+005,0.2418009760858748E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2439926835147906E+005,0.2169033841441582E+005,0.2046281508381977E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1864148707920017E+001,0.1897045631698528E+001,0.1869141979945571E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2416058963416654E+005,0.1945890674265321E+005,0.2133598448670878E+005,0.2407550793961056E+005,0.2374658645751348E+005,0.2439576309323770E+005,0.2146285884566015E+005,0.2174581764465216E+005,0.2406189424362650E+005 +0.3459999999999994E-007,0.5612761836791179E+023,0.8830064591106651E+023,0.1615958878746567E+024,0.3403493890688427E+022,0.7787994843987047E+022,0.3172156408883104E+024,0.2402435087654738E+005,0.2373403203278335E+005,0.2448470541304988E+005,0.2258119840306546E+005,0.2290004020605312E+005,0.2413496387220168E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2439378252662737E+005,0.2175899189322465E+005,0.2044707268294338E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1864118881243132E+001,0.1897364718549618E+001,0.1869043529467237E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2415381527776401E+005,0.1939906175323674E+005,0.2132820273933003E+005,0.2402435087654738E+005,0.2373403203278335E+005,0.2436360154607569E+005,0.2143231049498083E+005,0.2177493771145484E+005,0.2403332193480666E+005 +0.3479999999999994E-007,0.5649799858542788E+023,0.8834068701566285E+023,0.1613906772136005E+024,0.3363452786092093E+022,0.7828035948583382E+022,0.3174208515493666E+024,0.2400072712410706E+005,0.2379740894181268E+005,0.2444834202847862E+005,0.2267131562745025E+005,0.2288558679649126E+005,0.2413014153738732E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2432829600140058E+005,0.2163596841444860E+005,0.2050351771680305E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1863761814620067E+001,0.1896791520603504E+001,0.1869395843300946E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2412529015520123E+005,0.1944680586519523E+005,0.2098426384041183E+005,0.2400072712410706E+005,0.2379740894181268E+005,0.2432161255107063E+005,0.2145149372709565E+005,0.2168378155240496E+005,0.2402314307134702E+005 +0.3499999999999994E-007,0.5687338394101852E+023,0.8848583601982455E+023,0.1611954768286934E+024,0.3283370576899424E+022,0.7843051362807007E+022,0.3176811187292429E+024,0.2409537299485052E+005,0.2375388136844446E+005,0.2438047445801666E+005,0.2200001554120437E+005,0.2309436447952695E+005,0.2409854944435332E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2431854092343584E+005,0.2206753927430577E+005,0.2050003034870316E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1863708464293657E+001,0.1898774704556255E+001,0.1869374131064885E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2408311536759647E+005,0.1980517261370819E+005,0.2068469217242452E+005,0.2409537299485052E+005,0.2375388136844446E+005,0.2427701082211829E+005,0.2138230099316909E+005,0.2168679436597330E+005,0.2400491561206467E+005 +0.3519999999999994E-007,0.5716368194934195E+023,0.8857592850516632E+023,0.1610052815818608E+024,0.3193278091557671E+022,0.7933143848148760E+022,0.3178713139760755E+024,0.2413394518861724E+005,0.2374504514567122E+005,0.2434398193023981E+005,0.2216687629263277E+005,0.2309419313154394E+005,0.2408625274941020E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2422310716708479E+005,0.2204230875765307E+005,0.2067319958428722E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1863184327914293E+001,0.1898660862872931E+001,0.1870443631784552E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2409487611581390E+005,0.1993323644046764E+005,0.2068302497190443E+005,0.2413394518861724E+005,0.2374504514567122E+005,0.2423857552431534E+005,0.2148503509166933E+005,0.2173319393215045E+005,0.2399204701978082E+005 +0.3539999999999995E-007,0.5753906730493258E+023,0.8860095419553902E+023,0.1608050760588791E+024,0.3168252401184962E+022,0.7958169538521469E+022,0.3180715194990572E+024,0.2410547271037001E+005,0.2371109830245075E+005,0.2435260742990720E+005,0.2231625060881960E+005,0.2317150825837998E+005,0.2407936919074513E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2412440428067938E+005,0.2152852220098984E+005,0.2040012694135150E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1862637981663758E+001,0.1896285639442292E+001,0.1868749057151497E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2410990432961913E+005,0.2004615551726575E+005,0.2071427908271330E+005,0.2410547271037001E+005,0.2371109830245075E+005,0.2421993744843713E+005,0.2144129435466653E+005,0.2170203041160544E+005,0.2396681449673074E+005 +0.3559999999999995E-007,0.5779432934673421E+023,0.8863599016206082E+023,0.1606849527450901E+024,0.3158242125035879E+022,0.7943154124297843E+022,0.3182166685032189E+024,0.2408939682667120E+005,0.2365024042072214E+005,0.2436649609906843E+005,0.2239199382705192E+005,0.2296747983690685E+005,0.2406214574441906E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2416049656327784E+005,0.2166177893719113E+005,0.2051226107568510E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1862838266903946E+001,0.1896912308370705E+001,0.1869450247454626E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2404039406424126E+005,0.2013117745739713E+005,0.2048681125223082E+005,0.2408939682667120E+005,0.2365024042072214E+005,0.2421554574185466E+005,0.2153555458474445E+005,0.2157708524257780E+005,0.2394271638754895E+005 +0.3579999999999995E-007,0.5814969415002668E+023,0.8871106723317895E+023,0.1605047677744066E+024,0.3118201020439544E+022,0.7948159262372386E+022,0.3184318894404241E+024,0.2399359977977582E+005,0.2369872849425917E+005,0.2432515705133637E+005,0.2245826456741155E+005,0.2311078757307968E+005,0.2404150314970666E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2414785655963341E+005,0.2170675424675892E+005,0.2024453114691059E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1862768190765979E+001,0.1897122109310188E+001,0.1867763530947486E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2399667260071786E+005,0.2023600798185599E+005,0.2055774728724033E+005,0.2399359977977582E+005,0.2369872849425917E+005,0.2418130276543512E+005,0.2160715305702202E+005,0.2158779253289108E+005,0.2392264494510325E+005 +0.3599999999999995E-007,0.5857012574828820E+023,0.8877112889007345E+023,0.1602845416991267E+024,0.3078159915843210E+022,0.7968179814670553E+022,0.3186721360680021E+024,0.2395597323537960E+005,0.2372072465727479E+005,0.2430345366534773E+005,0.2218830718215388E+005,0.2320350929355954E+005,0.2402932615893614E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2403892172067984E+005,0.2164562876987446E+005,0.2010563688776120E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1862161277271728E+001,0.1896836762135872E+001,0.1866871210442243E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2399543640172420E+005,0.2032059990142870E+005,0.2069165952772120E+005,0.2395597323537960E+005,0.2372072465727479E+005,0.2414189586651241E+005,0.2149744163201667E+005,0.2162971709497409E+005,0.2390204150795395E+005 +0.3619999999999995E-007,0.5897554193232608E+023,0.8887623678963881E+023,0.1600743258999960E+024,0.3018098258948708E+022,0.7983195228894178E+022,0.3189273981098038E+024,0.2386367396053967E+005,0.2372049390121248E+005,0.2428940417942332E+005,0.2235765239531574E+005,0.2316188745745245E+005,0.2400563527677649E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2400852990747573E+005,0.2166973669721709E+005,0.2026805510814868E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1861990995635182E+001,0.1896949492015720E+001,0.1867913477120710E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2393362064118979E+005,0.2082214417625285E+005,0.2062098379866007E+005,0.2386367396053967E+005,0.2372049390121248E+005,0.2410949248287281E+005,0.2172317511267803E+005,0.2163489737548452E+005,0.2387110805045433E+005 +0.3639999999999996E-007,0.5925582966450042E+023,0.8895631899883149E+023,0.1599091563435361E+024,0.2953031463979664E+022,0.8033246609639596E+022,0.3191075830804873E+024,0.2382872189990982E+005,0.2372116964701708E+005,0.2422612122703834E+005,0.2211154911940622E+005,0.2328869935542180E+005,0.2396839686049966E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2400729290693483E+005,0.2097398857700096E+005,0.2018924169818253E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1861984055965680E+001,0.1893593905772566E+001,0.1867409762293971E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2395722803194899E+005,0.2106755767146008E+005,0.2054149246763215E+005,0.2382872189990982E+005,0.2372116964701708E+005,0.2408837080012159E+005,0.2149618641246086E+005,0.2164581336884919E+005,0.2385231548156889E+005 +0.3659999999999996E-007,0.5972631264350735E+023,0.8900637037957690E+023,0.1596639045778835E+024,0.2917995497457872E+022,0.8053267161937763E+022,0.3193678502603634E+024,0.2380619965248735E+005,0.2371454950449564E+005,0.2420352050976293E+005,0.2196350540341329E+005,0.2318535503855225E+005,0.2394680100395303E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2395313827696197E+005,0.2097461690900401E+005,0.2009968611634315E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1861679559076552E+001,0.1893597034764885E+001,0.1866832710993186E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2391155680891743E+005,0.2137925397510995E+005,0.2062184819824811E+005,0.2380619965248735E+005,0.2371454950449564E+005,0.2405048816871408E+005,0.2152236282400272E+005,0.2159984366553548E+005,0.2382628311274130E+005 +0.3679999999999996E-007,0.6005665175642711E+023,0.8915652452181316E+023,0.1594937298833491E+024,0.2837913288265203E+022,0.8063277438086846E+022,0.3196080968879414E+024,0.2374109670207769E+005,0.2370308277865187E+005,0.2418452068908263E+005,0.2192183168150748E+005,0.2307077790225538E+005,0.2391870882777830E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2389451568843415E+005,0.2073307244612102E+005,0.2025173419518276E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1861348422892535E+001,0.1892380469784242E+001,0.1867809480668122E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2393785537079794E+005,0.2119700661830111E+005,0.2039505720616368E+005,0.2374109670207769E+005,0.2370308277865187E+005,0.2403394810138101E+005,0.2138511800138623E+005,0.2152488790857451E+005,0.2379980235828211E+005 +0.3699999999999996E-007,0.6049710390698679E+023,0.8922659645485675E+023,0.1592534832557711E+024,0.2782856769445243E+022,0.8103318542683181E+022,0.3198633589297432E+024,0.2371975015078720E+005,0.2370132066324985E+005,0.2413510339266488E+005,0.2201084574032837E+005,0.2286507918820113E+005,0.2388488548549379E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2390119963504462E+005,0.2062236777927907E+005,0.2001412069645917E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1861386257915500E+001,0.1891813551077483E+001,0.1866276661167871E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2389132496994558E+005,0.2108495212663764E+005,0.2049275205160689E+005,0.2371975015078720E+005,0.2370132066324985E+005,0.2400059091211723E+005,0.2136101262800240E+005,0.2139917094345923E+005,0.2377512394505604E+005 +0.3719999999999996E-007,0.6091253036717376E+023,0.8927164269752762E+023,0.1590282520424167E+024,0.2742815664848909E+022,0.8138354509204974E+022,0.3200935952811720E+024,0.2370094253621878E+005,0.2369677191192812E+005,0.2408314741165348E+005,0.2205511278279490E+005,0.2292695480662640E+005,0.2385588428248784E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2386450577504346E+005,0.2042583475801067E+005,0.1986611233345331E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1861178294627021E+001,0.1890792257772061E+001,0.1865303786737635E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2389080556361244E+005,0.2116838660091278E+005,0.2027110961591593E+005,0.2370094253621878E+005,0.2369677191192812E+005,0.2396777149071840E+005,0.2135068309500253E+005,0.2132162286799776E+005,0.2375171190062943E+005 +0.3739999999999996E-007,0.6129292086083894E+023,0.8936173518286938E+023,0.1588580773478823E+024,0.2717789974476200E+022,0.8098313404608639E+022,0.3203288367706755E+024,0.2367461239848120E+005,0.2362366049552653E+005,0.2408552010580958E+005,0.2212353901457581E+005,0.2264568482488246E+005,0.2382500406701244E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2384646263537387E+005,0.2054517132255832E+005,0.1979680533441195E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1861075805826371E+001,0.1891414681529859E+001,0.1864843344361119E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2387948512666580E+005,0.2101924504764552E+005,0.2010211240099583E+005,0.2367461239848120E+005,0.2362366049552653E+005,0.2396061636520526E+005,0.2136985693340379E+005,0.2113074001364993E+005,0.2371836734986102E+005 +0.3759999999999997E-007,0.6168832676872774E+023,0.8939677114939117E+023,0.1586278409964534E+024,0.2667738593730782E+022,0.8163380199577682E+022,0.3205440577078808E+024,0.2361962523147983E+005,0.2353495515923595E+005,0.2403471067109982E+005,0.2261018882878701E+005,0.2268796542905521E+005,0.2376929723212219E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2383174928483988E+005,0.2072653051854702E+005,0.1986304233916483E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1860992118906272E+001,0.1892347133739509E+001,0.1865283457549303E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2391154061552001E+005,0.2074455947701243E+005,0.2037170432644942E+005,0.2361962523147983E+005,0.2353495515923595E+005,0.2394375448858038E+005,0.2155165333045699E+005,0.2124566452846460E+005,0.2367874453343441E+005 +0.3779999999999997E-007,0.6196360936282754E+023,0.8954192015355288E+023,0.1584826919922917E+024,0.2587656384538113E+022,0.8178395613801308E+022,0.3207542735070115E+024,0.2357375928090920E+005,0.2353533057159009E+005,0.2401435317397707E+005,0.2202378055068284E+005,0.2259576745797969E+005,0.2374328565647584E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2380164010747383E+005,0.2030431771934668E+005,0.2000524789291868E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1860820548786997E+001,0.1890151088567583E+001,0.1866218735248365E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2389933129369896E+005,0.2060433821865626E+005,0.2058151161209712E+005,0.2357375928090920E+005,0.2353533057159009E+005,0.2392313017794468E+005,0.2114006564687504E+005,0.2130495687068942E+005,0.2365817135435724E+005 +0.3799999999999997E-007,0.6237403068493997E+023,0.8956194070585104E+023,0.1582574607789373E+024,0.2557625556090862E+022,0.8218436718397642E+022,0.3209694944442168E+024,0.2359761592977059E+005,0.2347158657908553E+005,0.2400325329472523E+005,0.2229348175228275E+005,0.2251972242710409E+005,0.2372446169051890E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2375763775689050E+005,0.2019148285036441E+005,0.1985568591400087E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1860569049000579E+001,0.1889548954183827E+001,0.1865234719089176E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2386183398818192E+005,0.2076469787512522E+005,0.2077472422258742E+005,0.2359761592977059E+005,0.2347158657908553E+005,0.2389541628070329E+005,0.2127318309008054E+005,0.2128756502064661E+005,0.2363161186479303E+005 +0.3819999999999997E-007,0.6282449311164873E+023,0.8962200236274555E+023,0.1580122090132847E+024,0.2507574175345444E+022,0.8258477822993977E+022,0.3212247564860184E+024,0.2351179216332050E+005,0.2344452348940268E+005,0.2396962666880233E+005,0.2204661555092279E+005,0.2252571225523793E+005,0.2368144636690331E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2366796589108545E+005,0.2076791129755115E+005,0.2004505962198321E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1860053698349358E+001,0.1892557652907172E+001,0.1866478253711791E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2392076312353383E+005,0.2058028337484828E+005,0.2056522393683066E+005,0.2351179216332050E+005,0.2344452348940268E+005,0.2387358772147823E+005,0.2127002634525764E+005,0.2128037796364894E+005,0.2359612527526615E+005 +0.3839999999999997E-007,0.6323991957183570E+023,0.8966704860541642E+023,0.1577919829380049E+024,0.2472538208823651E+022,0.8283503513366687E+022,0.3214549928374474E+024,0.2351416218285732E+005,0.2339789969765325E+005,0.2394909967129760E+005,0.2186133322789296E+005,0.2250180576571336E+005,0.2365642842597156E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2366585495842540E+005,0.2114797436181134E+005,0.1990723948117961E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1860041520795974E+001,0.1894453356463884E+001,0.1865575536373118E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2384996357279879E+005,0.2029384276689893E+005,0.2067191298941741E+005,0.2351416218285732E+005,0.2339789969765325E+005,0.2384339781493308E+005,0.2121060636265231E+005,0.2126372384592620E+005,0.2356763369849122E+005 +0.3859999999999998E-007,0.6352020730401004E+023,0.8983722329995084E+023,0.1576618493480668E+024,0.2397461137705524E+022,0.8263482961068519E+022,0.3216802240508018E+024,0.2353733247099603E+005,0.2336684590253256E+005,0.2385215936841893E+005,0.2194437770245371E+005,0.2257720951771848E+005,0.2360748643896674E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2367660717602897E+005,0.2132943278161164E+005,0.1996060676861512E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1860103526143097E+001,0.1895335057702603E+001,0.1865926533912080E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2385185949083462E+005,0.2015258131512138E+005,0.2103234892439254E+005,0.2353733247099603E+005,0.2336684590253256E+005,0.2380447131152465E+005,0.2125563387754158E+005,0.2141609751840777E+005,0.2354915318869189E+005 +0.3879999999999998E-007,0.6385555155500434E+023,0.8991230037106898E+023,0.1574866695154579E+024,0.2352414895034648E+022,0.8278498375292144E+022,0.3218854347118580E+024,0.2353572570873116E+005,0.2335719567101405E+005,0.2380897787844143E+005,0.2179224737155619E+005,0.2258338196171028E+005,0.2358231423241045E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2365695991083320E+005,0.2162489070524131E+005,0.2030158040966751E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1859990183749410E+001,0.1896739592447383E+001,0.1868126587332783E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2380876477355847E+005,0.2035431220118373E+005,0.2088817893775499E+005,0.2353572570873116E+005,0.2335719567101405E+005,0.2376769820752563E+005,0.2132923114294559E+005,0.2146908971665849E+005,0.2353007555090763E+005 +0.3899999999999998E-007,0.6426096773904222E+023,0.9001740827063436E+023,0.1573114896828489E+024,0.2327389204661939E+022,0.8223441856472185E+022,0.3221406967536596E+024,0.2339762103971302E+005,0.2339984242162123E+005,0.2375516355703446E+005,0.2182285898012614E+005,0.2235445745957493E+005,0.2353483446927017E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2358708738616449E+005,0.2126343157525110E+005,0.2014324839478255E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1859585607300157E+001,0.1895016068950435E+001,0.1867114030216123E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2387737034823278E+005,0.2083798574453846E+005,0.2102781469821587E+005,0.2339762103971302E+005,0.2339984242162123E+005,0.2374523023893275E+005,0.2138342992549799E+005,0.2136687155937114E+005,0.2350159836205825E+005 +0.3919999999999998E-007,0.6449620922854569E+023,0.9011250589405065E+023,0.1571963715071344E+024,0.2282342961991063E+022,0.8218436718397642E+022,0.3223058663101195E+024,0.2331902546641738E+005,0.2341043150790649E+005,0.2374534593460546E+005,0.2225550170608870E+005,0.2238855843194484E+005,0.2352125122323140E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2358466850474189E+005,0.2140202718483140E+005,0.2004112114346253E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1859571559622153E+001,0.1895683681448890E+001,0.1866452625035482E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2383530434165036E+005,0.2097576372401050E+005,0.2102095821389581E+005,0.2331902546641738E+005,0.2341043150790649E+005,0.2372801622768070E+005,0.2164970337199827E+005,0.2135213084496280E+005,0.2348208153236168E+005 +0.3939999999999998E-007,0.6479651751301820E+023,0.9015254699864697E+023,0.1570161865364509E+024,0.2232291581245645E+022,0.8278498375292144E+022,0.3224760410046539E+024,0.2327573612654532E+005,0.2338554478187159E+005,0.2374173178302089E+005,0.2204847385234920E+005,0.2212988755718702E+005,0.2349542028633395E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2358809730379539E+005,0.2102586254693254E+005,0.2059344856525131E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1859591471575743E+001,0.1893851611949173E+001,0.1869953268635751E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2378422746885995E+005,0.2130740521718262E+005,0.2085102197005162E+005,0.2327573612654532E+005,0.2338554478187159E+005,0.2371247260680591E+005,0.2155255204666831E+005,0.2133937267638073E+005,0.2345744697687350E+005 +0.3959999999999998E-007,0.6513686690208704E+023,0.9023262920783965E+023,0.1568460118419165E+024,0.2192250476649310E+022,0.8278498375292144E+022,0.3226862568037846E+024,0.2322975228314928E+005,0.2340004971835949E+005,0.2370222855295633E+005,0.2214964843759335E+005,0.2228751383549058E+005,0.2347551492297389E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2348892741506155E+005,0.2131714728734278E+005,0.2107765771978800E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1859013277337970E+001,0.1895275827858618E+001,0.1872874675696259E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2379934389608077E+005,0.2109403781501537E+005,0.2065467306090384E+005,0.2322975228314928E+005,0.2340004971835949E+005,0.2367273466615526E+005,0.2161463857809132E+005,0.2148267005606451E+005,0.2343689607325358E+005 +0.3979999999999999E-007,0.6544218032463409E+023,0.9029769600280869E+023,0.1567058679758294E+024,0.2172229924351143E+022,0.8253472684919435E+022,0.3228714469125427E+024,0.2327041087425453E+005,0.2334381542794624E+005,0.2367016378976881E+005,0.2198822699096991E+005,0.2221647726686208E+005,0.2344939257049458E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2346516769074218E+005,0.2101601328496571E+005,0.2133717246911287E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858874042667052E+001,0.1893802777535791E+001,0.1874387064671572E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2379627151261524E+005,0.2161171601175868E+005,0.2038914883738905E+005,0.2327041087425453E+005,0.2334381542794624E+005,0.2365137842050350E+005,0.2161191756365861E+005,0.2144509003657318E+005,0.2341802457023838E+005 +0.3999999999999999E-007,0.6585760678482106E+023,0.9031271141703232E+023,0.1564806367624750E+024,0.2147204233978434E+022,0.8288508651441228E+022,0.3230866678497481E+024,0.2326022832494562E+005,0.2327988540843171E+005,0.2361077323349610E+005,0.2190955314302704E+005,0.2221820473291802E+005,0.2339979390431549E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2346475710839861E+005,0.2105196166966999E+005,0.2135520816869204E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858871634192316E+001,0.1893980799245687E+001,0.1874490836744552E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2380945762628452E+005,0.2219183820319346E+005,0.2019515502025429E+005,0.2326022832494562E+005,0.2327988540843171E+005,0.2362913537222904E+005,0.2175584055016369E+005,0.2139432137753730E+005,0.2338652966931522E+005 +0.4019999999999999E-007,0.6632308462575345E+023,0.9044785014504494E+023,0.1562554055491206E+024,0.2087142577083932E+022,0.8273493237217602E+022,0.3233869761342205E+024,0.2329612344111661E+005,0.2327557621072284E+005,0.2355290383328809E+005,0.2160920911558219E+005,0.2194453889748210E+005,0.2336898263751320E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2344779510809838E+005,0.2146253982551594E+005,0.2128871610290310E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858772063296738E+001,0.1895972515011164E+001,0.1874107409766288E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2376840411255245E+005,0.2159076122227617E+005,0.2001148895667126E+005,0.2329612344111661E+005,0.2327557621072284E+005,0.2358725799965531E+005,0.2156353365375454E+005,0.2120332524795476E+005,0.2336632411016595E+005 +0.4039999999999999E-007,0.6669846998134408E+023,0.9054294776846123E+023,0.1560902359926607E+024,0.2062116886711223E+022,0.8228446994546726E+022,0.3236222176237240E+024,0.2329660267006720E+005,0.2328511758104028E+005,0.2350043221928514E+005,0.2164405320210940E+005,0.2179601922217074E+005,0.2334301693423054E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2341628670763400E+005,0.2178146771599502E+005,0.2129964894316548E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858586728475851E+001,0.1897468752235732E+001,0.1874170614841375E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2373715568565450E+005,0.2140879023221071E+005,0.2012516975647081E+005,0.2329660267006720E+005,0.2328511758104028E+005,0.2354665970230387E+005,0.2161363824828627E+005,0.2117456512075974E+005,0.2334931853313133E+005 +0.4059999999999999E-007,0.6701879881811476E+023,0.9058298887305757E+023,0.1559350767123499E+024,0.2047101472487598E+022,0.8218436718397642E+022,0.3238024025944075E+024,0.2327939579175680E+005,0.2325025836588626E+005,0.2345741021751466E+005,0.2158898198197196E+005,0.2159863223410368E+005,0.2330362550844170E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2345379743678882E+005,0.2116004481237723E+005,0.2101331904609657E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858807314413946E+001,0.1894512467228216E+001,0.1872494077809644E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2373356993120249E+005,0.2183593415223043E+005,0.2006106777385894E+005,0.2327939579175680E+005,0.2325025836588626E+005,0.2353695815334754E+005,0.2154275355371792E+005,0.2099170200594027E+005,0.2332623701923209E+005 +0.4079999999999999E-007,0.6729408141221456E+023,0.9062803511572845E+023,0.1558049431224118E+024,0.2032086058263972E+022,0.8203421304174018E+022,0.3239625670127928E+024,0.2334118315878377E+005,0.2325242852047526E+005,0.2345264310470560E+005,0.2122535579581648E+005,0.2165616031940534E+005,0.2331401908372340E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2332942199536627E+005,0.2163328355740645E+005,0.2091885571207705E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858073256964273E+001,0.1896778939792423E+001,0.1871931130889298E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2372545716579764E+005,0.2190633767413801E+005,0.2009525681917479E+005,0.2334118315878377E+005,0.2325242852047526E+005,0.2349881850446611E+005,0.2153502391225575E+005,0.2100103290876663E+005,0.2332157965363939E+005 +0.4100000000000000E-007,0.6766946676780520E+023,0.9066307108225025E+023,0.1556097427375047E+024,0.2007060367891263E+022,0.8218436718397642E+022,0.3241677776738491E+024,0.2332538057818208E+005,0.2320498694411327E+005,0.2343696732087700E+005,0.2051437071985849E+005,0.2168053426267989E+005,0.2328616877185510E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2336299963734806E+005,0.2216163373448135E+005,0.2110184592871495E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858272181108853E+001,0.1899197019157150E+001,0.1873017175244055E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2363508614717622E+005,0.2201996474432086E+005,0.2006608597419309E+005,0.2332538057818208E+005,0.2320498694411327E+005,0.2347470066787194E+005,0.2140428081215129E+005,0.2105303841105631E+005,0.2329388312510160E+005 +0.4120000000000000E-007,0.6814495488488667E+023,0.9072813787721929E+023,0.1553895166622249E+024,0.1992044953667638E+022,0.8183400751875851E+022,0.3244380551298743E+024,0.2326492886248296E+005,0.2315913612509425E+005,0.2340542196676090E+005,0.2002576042237547E+005,0.2167528563727811E+005,0.2324264886452543E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2335593459740463E+005,0.2154878503741179E+005,0.2102218148690368E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858230371973365E+001,0.1896381420434719E+001,0.1872546639131789E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2362350587899777E+005,0.2243667786087568E+005,0.1998148421138135E+005,0.2326492886248296E+005,0.2315913612509425E+005,0.2345561113700422E+005,0.2114374824668204E+005,0.2100441775151827E+005,0.2325662987592962E+005 +0.4140000000000000E-007,0.6846528372165734E+023,0.9083825091485920E+023,0.1552443676580631E+024,0.1952003849071304E+022,0.8153369923428599E+022,0.3246532760670796E+024,0.2327915092797957E+005,0.2316044367274430E+005,0.2332707335945620E+005,0.2002698069588597E+005,0.2167500860439964E+005,0.2320901183458751E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2336825915193082E+005,0.2121582468502934E+005,0.2081865706853975E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858303289599184E+001,0.1894784771992754E+001,0.1871328549261840E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2360873342774163E+005,0.2236366660684039E+005,0.2000825662235337E+005,0.2327915092797957E+005,0.2316044367274430E+005,0.2342036987948347E+005,0.2103150448275554E+005,0.2095665857849647E+005,0.2324162391904682E+005 +0.4160000000000000E-007,0.6877560228227893E+023,0.9093835367635004E+023,0.1550942135158269E+024,0.1906957606400428E+022,0.8143359647279515E+022,0.3248584867281358E+024,0.2324604997261374E+005,0.2317912306102212E+005,0.2332042602722974E+005,0.1992839675824871E+005,0.2136223598763074E+005,0.2319612630755615E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2334642453296173E+005,0.2066403857935222E+005,0.2068080113421486E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858174054855273E+001,0.1892027646644578E+001,0.1870490178380131E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2356526109433619E+005,0.2219623075109668E+005,0.2004429687287451E+005,0.2324604997261374E+005,0.2317912306102212E+005,0.2339886963025382E+005,0.2078845173091523E+005,0.2079306328983136E+005,0.2322435785970428E+005 +0.4180000000000000E-007,0.6914598249979502E+023,0.9095837422864821E+023,0.1548839977166961E+024,0.1871921639878635E+022,0.8193411028024934E+022,0.3250536871130430E+024,0.2323551747608139E+005,0.2320215026651653E+005,0.2329907024677001E+005,0.1962634769925092E+005,0.2142324955615989E+005,0.2318999742970437E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2334065470774660E+005,0.2051930366308322E+005,0.2081715130097152E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858139865050789E+001,0.1891280366377763E+001,0.1871319450542413E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2346607344774483E+005,0.2166631841363627E+005,0.2002555873750839E+005,0.2323551747608139E+005,0.2320215026651653E+005,0.2335903929883802E+005,0.2046345941209781E+005,0.2085136738426252E+005,0.2320897764314138E+005 +0.4200000000000001E-007,0.6952136785538566E+023,0.9103345129976633E+023,0.1546837921937145E+024,0.1821870259133217E+022,0.8218436718397642E+022,0.3252789183263973E+024,0.2318186996546093E+005,0.2318282138412296E+005,0.2328148050561913E+005,0.1949630719038981E+005,0.2130167557794597E+005,0.2316135794206911E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2335491204486856E+005,0.1994659505429135E+005,0.2106843968108745E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858224318721498E+001,0.1888219154929895E+001,0.1872820285474045E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2340946300466099E+005,0.2158801658198387E+005,0.1982898076985829E+005,0.2318186996546093E+005,0.2318282138412296E+005,0.2333869900006337E+005,0.2022707095382740E+005,0.2080956340352157E+005,0.2318022709516095E+005 +0.4220000000000001E-007,0.6986171724445451E+023,0.9110352323280992E+023,0.1545386431895528E+024,0.1811859982984133E+022,0.8168385337652225E+022,0.3254841289874536E+024,0.2316309036684863E+005,0.2317199591047776E+005,0.2328482098873219E+005,0.1956875933386480E+005,0.2121569293534571E+005,0.2315449976165504E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2328505107591154E+005,0.1989990451542107E+005,0.2076935287507316E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1857809532612493E+001,0.1887961972596953E+001,0.1871029954871056E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2340245677438892E+005,0.2136076298905161E+005,0.1980725272753053E+005,0.2316309036684863E+005,0.2317199591047776E+005,0.2331919042234619E+005,0.2017985399979159E+005,0.2068418658732429E+005,0.2316088125544807E+005 +0.4240000000000001E-007,0.7010696901010706E+023,0.9113855919933171E+023,0.1544035044615401E+024,0.1781829154536882E+022,0.8193411028024934E+022,0.3256242728535407E+024,0.2317743915066540E+005,0.2320645503051732E+005,0.2325981208957946E+005,0.1976759227012756E+005,0.2108017111373152E+005,0.2315318909199239E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2322533821507863E+005,0.1919422995965983E+005,0.2041670141343492E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1857453071521546E+001,0.1883925713445363E+001,0.1868853173389035E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2338416691244015E+005,0.2149281585407617E+005,0.2013585542429851E+005,0.2317743915066540E+005,0.2320645503051732E+005,0.2328674279398479E+005,0.2011191254125674E+005,0.2062470078196882E+005,0.2315638252529232E+005 +0.4260000000000001E-007,0.7042229270880318E+023,0.9121363627044984E+023,0.1542483451812293E+024,0.1746793188015090E+022,0.8188405889950392E+022,0.3258194732384478E+024,0.2321865986859702E+005,0.2317988050819396E+005,0.2321639625018218E+005,0.1928587554172872E+005,0.2133958009168609E+005,0.2313842281464066E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2319677564626449E+005,0.1904873890698968E+005,0.2032107746655484E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1857281932523233E+001,0.1883057129685010E+001,0.1868250208444802E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2335963846439182E+005,0.2095322104521947E+005,0.2004107736234812E+005,0.2321865986859702E+005,0.2317988050819396E+005,0.2325286017826888E+005,0.1970547821562935E+005,0.2068441712239790E+005,0.2314146965322326E+005 +0.4280000000000001E-007,0.7077265237402111E+023,0.9128370820349343E+023,0.1540781704866949E+024,0.1716762359567839E+022,0.8178395613801308E+022,0.3260296890375786E+024,0.2320225790868522E+005,0.2313799069258754E+005,0.2322918660687880E+005,0.1912698471611904E+005,0.2137603793483652E+005,0.2312972080212360E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2310852697791472E+005,0.1918371993186244E+005,0.2031916690071952E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856750566733873E+001,0.1883863400846235E+001,0.1868238104738488E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2335485693073416E+005,0.2060469626322127E+005,0.1997053757779218E+005,0.2320225790868522E+005,0.2313799069258754E+005,0.2323316893246933E+005,0.1957183731012986E+005,0.2067928173931109E+005,0.2311646724783563E+005 +0.4300000000000001E-007,0.7106795552041908E+023,0.9129872361771705E+023,0.1539130009302350E+024,0.1691736669195130E+022,0.8213431580323101E+022,0.3261848483178894E+024,0.2316723219889956E+005,0.2311078947824723E+005,0.2325716064832161E+005,0.1967688853802871E+005,0.2117218125195116E+005,0.2312552901214862E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2313479655460628E+005,0.1912146221805550E+005,0.2028655292638622E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856909154865218E+001,0.1883492907123550E+001,0.1868031147216059E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2325626575462322E+005,0.2005736960034033E+005,0.1982004349642201E+005,0.2316723219889956E+005,0.2311078947824723E+005,0.2322376239437492E+005,0.1963545907578856E+005,0.2053755151387300E+005,0.2309357473463539E+005 +0.4320000000000002E-007,0.7146836656638242E+023,0.9130873389386613E+023,0.1536877697168807E+024,0.1661705840747879E+022,0.8263482961068519E+022,0.3263900589789456E+024,0.2314631370813983E+005,0.2303284189262575E+005,0.2325281306470287E+005,0.1947918180671471E+005,0.2127676992003470E+005,0.2309871435107993E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2310433531127585E+005,0.1953637318005052E+005,0.2019985510299237E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856725229344591E+001,0.1885918357502518E+001,0.1867477818642940E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2322940148157952E+005,0.1980251131264747E+005,0.1997232638458852E+005,0.2314631370813983E+005,0.2303284189262575E+005,0.2320577813968490E+005,0.1958875575655805E+005,0.2060403362203821E+005,0.2306009259272250E+005 +0.4340000000000002E-007,0.7179870567930218E+023,0.9137880582690972E+023,0.1535376155746444E+024,0.1641685288449712E+022,0.8233452132621268E+022,0.3265902645019272E+024,0.2308758151388462E+005,0.2297229687273677E+005,0.2328965132326222E+005,0.1955041869928160E+005,0.2134682368147093E+005,0.2308865744745684E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2304179370220347E+005,0.1928955976368867E+005,0.2015369988817859E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856346117057861E+001,0.1884487873686100E+001,0.1867181347920595E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2321229225986871E+005,0.1968472298827766E+005,0.1986938031493024E+005,0.2308758151388462E+005,0.2297229687273677E+005,0.2319997853709803E+005,0.1951803038994523E+005,0.2059212317727551E+005,0.2302731113731237E+005 +0.4360000000000002E-007,0.7206898313532744E+023,0.9145888803610238E+023,0.1534074819847063E+024,0.1606649321927919E+022,0.8223441856472185E+022,0.3267654443345362E+024,0.2305984047087480E+005,0.2301561535662172E+005,0.2322685426736667E+005,0.1976887407649798E+005,0.2121777192502191E+005,0.2306333170201621E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2305641945296525E+005,0.1952332802011197E+005,0.2025343581338342E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856434954370142E+001,0.1885843637278727E+001,0.1867820330979151E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2317501693764919E+005,0.1884382518857579E+005,0.1991872438339621E+005,0.2305984047087480E+005,0.2301561535662172E+005,0.2316558688728840E+005,0.1943294439732029E+005,0.2057720454462279E+005,0.2301679598482706E+005 +0.4380000000000002E-007,0.7234426572942724E+023,0.9151394455492235E+023,0.1532673381186191E+024,0.1576618493480668E+022,0.8228446994546726E+022,0.3269306138909961E+024,0.2308705632336338E+005,0.2294450540048726E+005,0.2322429962770799E+005,0.1966897060764796E+005,0.2123049448392398E+005,0.2304828320569907E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2301141416465776E+005,0.2032940879728250E+005,0.2026360305513215E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856161239117434E+001,0.1890284094261262E+001,0.1867885124974094E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2315663159214519E+005,0.1813674343001702E+005,0.1997985810739880E+005,0.2308705632336338E+005,0.2294450540048726E+005,0.2314692603664010E+005,0.1940540548822632E+005,0.2060332690730092E+005,0.2299495384342672E+005 +0.4400000000000002E-007,0.7262955859967612E+023,0.9153897024529506E+023,0.1531221891144574E+024,0.1561603079257043E+022,0.8233452132621268E+022,0.3270857731713069E+024,0.2299346240458875E+005,0.2294119112529702E+005,0.2320911124145750E+005,0.1973874742244664E+005,0.2131662951246098E+005,0.2302203921036351E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2305125203794297E+005,0.2039767749779326E+005,0.2001696444697906E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856403579860999E+001,0.1890644356462935E+001,0.1866295215928232E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2311662920424381E+005,0.1805389404296757E+005,0.1994934341421262E+005,0.2299346240458875E+005,0.2294119112529702E+005,0.2313939328227117E+005,0.1943051727431713E+005,0.2056511348697108E+005,0.2296901253563459E+005 +0.4420000000000003E-007,0.7284978467495596E+023,0.9158902162604047E+023,0.1530020658006684E+024,0.1526567112735250E+022,0.8253472684919435E+022,0.3272209118993196E+024,0.2297519465563602E+005,0.2294972272020470E+005,0.2318590586905990E+005,0.1975248395817826E+005,0.2117188309843226E+005,0.2300606992700275E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2302415464030299E+005,0.2070640585534049E+005,0.2007971013037636E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856238830519383E+001,0.1892244453869754E+001,0.1866703310314427E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2310753362634897E+005,0.1760892868904228E+005,0.1994526640093116E+005,0.2297519465563602E+005,0.2294972272020470E+005,0.2311925221121321E+005,0.1939236075947943E+005,0.2051771237240705E+005,0.2295672381492153E+005 +0.4440000000000003E-007,0.7312006213098122E+023,0.9167911411138223E+023,0.1528669270726558E+024,0.1481520870064374E+022,0.8253472684919435E+022,0.3274010968700031E+024,0.2293494815747910E+005,0.2287848611413381E+005,0.2318536072804873E+005,0.1926437215338652E+005,0.2131043337611116E+005,0.2297849561915636E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2304107631660389E+005,0.2089530556615102E+005,0.2003812344898710E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856341756806205E+001,0.1893200617725747E+001,0.1866433111687617E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2309122217187181E+005,0.1734427654886072E+005,0.1974074032881619E+005,0.2293494815747910E+005,0.2287848611413381E+005,0.2311883570547057E+005,0.1915520558385404E+005,0.2050738652759276E+005,0.2292669636216814E+005 +0.4460000000000003E-007,0.7350545776272094E+023,0.9165408842100951E+023,0.1526467009973760E+024,0.1466505455840749E+022,0.8308529203739395E+022,0.3275812818406865E+024,0.2295459281096664E+005,0.2282670706925304E+005,0.2313214786204210E+005,0.1969026022226819E+005,0.2137328104993936E+005,0.2294682803646506E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2299574443419715E+005,0.2061661396693482E+005,0.2012057103950259E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856065693257630E+001,0.1891783922526881E+001,0.1866967731369051E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2311767236245350E+005,0.1744492724963750E+005,0.1965412164045507E+005,0.2295459281096664E+005,0.2282670706925304E+005,0.2309099820936003E+005,0.1929294584687429E+005,0.2053199444263136E+005,0.2290453661890911E+005 +0.4480000000000003E-007,0.7383079173756616E+023,0.9173917576827673E+023,0.1525115622693633E+024,0.1451490041617123E+022,0.8253472684919435E+022,0.3277864925017427E+024,0.2294730781855588E+005,0.2280821875181925E+005,0.2311025948903790E+005,0.1982239157331315E+005,0.2134527825425791E+005,0.2293002219303129E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2299215271622425E+005,0.2059104346155065E+005,0.2001982522416877E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856043774957733E+001,0.1891652053860465E+001,0.1866313876591455E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2305867956638233E+005,0.1770169398099454E+005,0.1959848845429558E+005,0.2294730781855588E+005,0.2280821875181925E+005,0.2306323948794780E+005,0.1941793510340364E+005,0.2047621064534859E+005,0.2288447124912257E+005 +0.4500000000000003E-007,0.7407103836514416E+023,0.9177921687287307E+023,0.1524014492317234E+024,0.1441479765468040E+022,0.8233452132621268E+022,0.3279266363678299E+024,0.2293172267800108E+005,0.2278848254646962E+005,0.2307683838495908E+005,0.1951414727837304E+005,0.2139483612199476E+005,0.2290546415010872E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2302769319258274E+005,0.2095551201703625E+005,0.2005865238747638E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856260365989942E+001,0.1893501813162178E+001,0.1866566629809419E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2301493220945723E+005,0.1781177736818430E+005,0.1950233006211166E+005,0.2293172267800108E+005,0.2278848254646962E+005,0.2304547454923639E+005,0.1941615454658020E+005,0.2048039249559008E+005,0.2286749780336261E+005 +0.4520000000000003E-007,0.7440137747806392E+023,0.9188932991051298E+023,0.1522312745371890E+024,0.1381418108573538E+022,0.8243462408770352E+022,0.3281468624431098E+024,0.2295328333588099E+005,0.2266736876026767E+005,0.2302702191518642E+005,0.1957130919623754E+005,0.2144455600812206E+005,0.2285528990103350E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2301720357739578E+005,0.2069791956058611E+005,0.2002089481880684E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856196507880076E+001,0.1892201096458770E+001,0.1866320852150591E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2306723458479268E+005,0.1766075615643949E+005,0.1939986872430773E+005,0.2295328333588099E+005,0.2266736876026767E+005,0.2303609408440165E+005,0.1932620132877240E+005,0.2046202354613667E+005,0.2283378429245492E+005 +0.4540000000000004E-007,0.7471670117676005E+023,0.9190434532473661E+023,0.1520610998426546E+024,0.1361397556275371E+022,0.8268488099143061E+022,0.3283120319995697E+024,0.2295337782028212E+005,0.2264388245317281E+005,0.2297229747012065E+005,0.1948092853964949E+005,0.2163950589244048E+005,0.2282801493167410E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2299572483122537E+005,0.2076034843237429E+005,0.1988953897790717E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856065573649465E+001,0.1892519239333210E+001,0.1865458713883021E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2306894593261958E+005,0.1786046979304610E+005,0.1942822263760709E+005,0.2295337782028212E+005,0.2264388245317281E+005,0.2300683326049229E+005,0.1936201835563979E+005,0.2051983452600352E+005,0.2281531870756976E+005 +0.4560000000000004E-007,0.7511711222272340E+023,0.9194438642933295E+023,0.1518859200100456E+024,0.1366402694349913E+022,0.8218436718397642E+022,0.3285322580748495E+024,0.2284470568359772E+005,0.2256235451534758E+005,0.2300079305601041E+005,0.1951810246105476E+005,0.2170875123174899E+005,0.2279559519368762E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2294611153077819E+005,0.2061331461377555E+005,0.2005782675560879E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1855762218649412E+001,0.1891766925593162E+001,0.1866561265133355E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2308513091986696E+005,0.1812911343593119E+005,0.1924726122710339E+005,0.2284470568359772E+005,0.2256235451534758E+005,0.2301059500318796E+005,0.1941564804974841E+005,0.2054302483988528E+005,0.2277053931378882E+005 +0.4580000000000004E-007,0.7543243592141954E+023,0.9200945322430199E+023,0.1517457761439584E+024,0.1351387280126287E+022,0.8183400751875851E+022,0.3287224533216821E+024,0.2277597847429227E+005,0.2257747550169837E+005,0.2300557083070496E+005,0.1983991269939113E+005,0.2177304646095544E+005,0.2278936473303578E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2293194821529799E+005,0.2024032772601872E+005,0.2008105412606357E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1855675384022347E+001,0.1889810419079911E+001,0.1866712024351536E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2299927791593407E+005,0.1869883354015671E+005,0.1925543694677900E+005,0.2277597847429227E+005,0.2257747550169837E+005,0.2298380703701549E+005,0.1961850605154383E+005,0.2057979976064986E+005,0.2274870250962430E+005 +0.4600000000000004E-007,0.7582283669123379E+023,0.9201946350045107E+023,0.1515405654829022E+024,0.1336371865902662E+022,0.8203421304174018E+022,0.3289226588446638E+024,0.2274858694271178E+005,0.2258328520403021E+005,0.2298065341813116E+005,0.1980097097612612E+005,0.2180234167878627E+005,0.2277368386983809E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2297462380181415E+005,0.1969703126982612E+005,0.1990134982631316E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1855936709736712E+001,0.1886830623794856E+001,0.1865536687443199E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2288057451010753E+005,0.1840575603439311E+005,0.1944223255763302E+005,0.2274858694271178E+005,0.2258328520403021E+005,0.2294982635375417E+005,0.1936731046267859E+005,0.2059827145646192E+005,0.2272768953839231E+005 +0.4620000000000004E-007,0.7612815011378085E+023,0.9209454057156920E+023,0.1513904113406659E+024,0.1301335899380869E+022,0.8198416166099475E+022,0.3291128540914964E+024,0.2270578651253202E+005,0.2250795127066462E+005,0.2300419064952038E+005,0.1952947705978794E+005,0.2153997587019883E+005,0.2274609102460368E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2295298710683645E+005,0.1920022835274817E+005,0.2012538103738483E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1855804334846403E+001,0.1883961247193638E+001,0.1866998789094463E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2287189426743923E+005,0.1843734461266050E+005,0.1942353140062617E+005,0.2270578651253202E+005,0.2250795127066462E+005,0.2295173633445092E+005,0.1912207257299631E+005,0.2053896567780082E+005,0.2269541555460717E+005 +0.4640000000000004E-007,0.7642845839825335E+023,0.9211456112386736E+023,0.1512352520603552E+024,0.1286320485157244E+022,0.8208426442248559E+022,0.3292730185098816E+024,0.2274616043859742E+005,0.2240914936501123E+005,0.2303758929560517E+005,0.1991506201451469E+005,0.2119856757337706E+005,0.2273609489298986E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2290591124700495E+005,0.1879181431106984E+005,0.2005894725243648E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1855515479686945E+001,0.1881491128069894E+001,0.1866568545637520E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2285386156431194E+005,0.1828186011392024E+005,0.1943400200072216E+005,0.2274616043859742E+005,0.2240914936501123E+005,0.2294834930746543E+005,0.1913328604623640E+005,0.2037482125048622E+005,0.2267151775958935E+005 +0.4660000000000005E-007,0.7670874613042770E+023,0.9212457140001645E+023,0.1510800927800444E+024,0.1266299932859076E+022,0.8238457270695810E+022,0.3294181675140434E+024,0.2279434475345759E+005,0.2240043394620126E+005,0.2298924744757273E+005,0.2013459694558592E+005,0.2117829611465378E+005,0.2272293177255086E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2288633099893936E+005,0.1897271424255818E+005,0.2008559085967942E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1855394995407558E+001,0.1882598072172351E+001,0.1866741430670190E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2280376369436702E+005,0.1863721466330652E+005,0.1952967725716089E+005,0.2279434475345759E+005,0.2240043394620126E+005,0.2290728015458271E+005,0.1938166576363567E+005,0.2040106634128272E+005,0.2266300721720101E+005 +0.4680000000000005E-007,0.7699904413875112E+023,0.9219464333306004E+023,0.1509699797424044E+024,0.1266299932859076E+022,0.8168385337652225E+022,0.3295983524847270E+024,0.2280918683442437E+005,0.2240026545229969E+005,0.2294140021396355E+005,0.2028005998502906E+005,0.2119664545425895E+005,0.2270568327618737E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2285845359702742E+005,0.1968322121372388E+005,0.1962307336903172E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1855223108874889E+001,0.1886752779373439E+001,0.1863675205527824E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2280943472548675E+005,0.1803474142349858E+005,0.1945036104714956E+005,0.2280918683442437E+005,0.2240026545229969E+005,0.2288045172974054E+005,0.1946447613679197E+005,0.2026052946666198E+005,0.2265143324376647E+005 +0.4700000000000005E-007,0.7733939352781995E+023,0.9227472554225270E+023,0.1508048101859446E+024,0.1231263966337284E+022,0.8158375061503141E+022,0.3298085682838576E+024,0.2277379811252956E+005,0.2239369539445706E+005,0.2295404062049155E+005,0.2017988035022396E+005,0.2117288529031818E+005,0.2270058266627919E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2277453171925444E+005,0.1954623553913250E+005,0.1945705056058869E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854703189306706E+001,0.1885974782370256E+001,0.1862539887424738E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2277217551245384E+005,0.1867521155503986E+005,0.1968750531411554E+005,0.2277379811252956E+005,0.2239369539445706E+005,0.2285240734353280E+005,0.1956930946404664E+005,0.2027430099384581E+005,0.2262960346519842E+005 +0.4720000000000005E-007,0.7768474805496335E+023,0.9228974095647633E+023,0.1506296303533356E+024,0.1221253690188200E+022,0.8163380199577682E+022,0.3299887532545412E+024,0.2271715391104027E+005,0.2243351297977629E+005,0.2290898353026569E+005,0.2008688857786582E+005,0.2121117642157873E+005,0.2267840104030473E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2277338414382208E+005,0.2051805710133586E+005,0.1929117719609322E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854696053889870E+001,0.1891273885344828E+001,0.1861386559626267E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2273512392756579E+005,0.1834305663164660E+005,0.1964643532459378E+005,0.2271715391104027E+005,0.2243351297977629E+005,0.2282156683846261E+005,0.1969912193728872E+005,0.2023421019346599E+005,0.2261289440723684E+005 +0.4740000000000005E-007,0.7807514882477761E+023,0.9232978206107267E+023,0.1504344299684285E+024,0.1201233137890033E+022,0.8163380199577682E+022,0.3302039741917464E+024,0.2264802793555235E+005,0.2246732704241239E+005,0.2289189194264598E+005,0.2035550565057668E+005,0.2106766630630292E+005,0.2266119107889513E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2275661287314921E+005,0.2066165003086220E+005,0.1910783214211648E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854591693187480E+001,0.1892015397686450E+001,0.1860089034331637E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2267808435935419E+005,0.1829852883413801E+005,0.1956662661820146E+005,0.2264802793555235E+005,0.2246732704241239E+005,0.2279290681916900E+005,0.1984263335597204E+005,0.2009864893920365E+005,0.2259027337699180E+005 +0.4760000000000006E-007,0.7834542628080287E+023,0.9234980261337083E+023,0.1502842758261922E+024,0.1176207447517324E+022,0.8193411028024934E+022,0.3303491231959082E+024,0.2257872900034022E+005,0.2250388581466979E+005,0.2280461750616257E+005,0.1994092445347980E+005,0.2099817797423679E+005,0.2261197572860259E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2278849177825704E+005,0.2076814318128321E+005,0.1894537891575569E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854789934387536E+001,0.1892558830265583E+001,0.1858918905055226E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2272665757674598E+005,0.1781564534165218E+005,0.1955972316187830E+005,0.2257872900034022E+005,0.2250388581466979E+005,0.2277750803987465E+005,0.1955137418892495E+005,0.2002238329063524E+005,0.2257405401344264E+005 +0.4780000000000006E-007,0.7867076025564808E+023,0.9241486940833987E+023,0.1501191062697323E+024,0.1141171480995531E+022,0.8198416166099475E+022,0.3305443235808153E+024,0.2256389351499886E+005,0.2249046971040923E+005,0.2277863893962810E+005,0.1993537124485570E+005,0.2103863739824207E+005,0.2259398830151211E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2271521664174502E+005,0.2018466747846251E+005,0.1897815857888326E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854333459127757E+001,0.1889512373095258E+001,0.1859156585266809E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2273471597767585E+005,0.1830679421165842E+005,0.1952229150902341E+005,0.2256389351499886E+005,0.2249046971040923E+005,0.2274866490726609E+005,0.1953097313980132E+005,0.2003801225447535E+005,0.2255416095325760E+005 +0.4800000000000006E-007,0.7891601202130062E+023,0.9247993620330891E+023,0.1500039880940179E+024,0.1116145790622822E+022,0.8183400751875851E+022,0.3306994828611261E+024,0.2252147360351569E+005,0.2245863427452345E+005,0.2275732662190113E+005,0.2018867250083357E+005,0.2135528327758027E+005,0.2257415093809645E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2271768398533345E+005,0.2014336434828444E+005,0.1893003986786555E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854348876362884E+001,0.1889290161845644E+001,0.1858807408449031E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2270260227607936E+005,0.1837872266375888E+005,0.1961327258390070E+005,0.2252147360351569E+005,0.2245863427452345E+005,0.2273063408355517E+005,0.1965080868120036E+005,0.2019005420367684E+005,0.2253139351374363E+005 +0.4820000000000006E-007,0.7917127406310225E+023,0.9250496189368162E+023,0.1498738545040798E+024,0.1101130376399197E+022,0.8188405889950392E+022,0.3308396267272133E+024,0.2243004626415423E+005,0.2248085522463081E+005,0.2270442159890101E+005,0.1998825764801159E+005,0.2139691491163267E+005,0.2253485034649779E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2272987621455255E+005,0.1979293983513274E+005,0.1926639690382158E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854425011847898E+001,0.1887368303238047E+001,0.1861212598012251E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2270777874781676E+005,0.1895109695923062E+005,0.1961479355468875E+005,0.2243004626415423E+005,0.2248085522463081E+005,0.2271228775451137E+005,0.1963355641539438E+005,0.2029950107074700E+005,0.2251007184194002E+005 +0.4840000000000006E-007,0.7946657720950022E+023,0.9253999786020341E+023,0.1497237003618435E+024,0.1081109824101030E+022,0.8193411028024934E+022,0.3310047962836732E+024,0.2237220435050221E+005,0.2248113818222964E+005,0.2271461858809799E+005,0.2020773702429069E+005,0.2142702447121705E+005,0.2252707820641978E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2268581854280511E+005,0.1957038681811421E+005,0.1914984421199738E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854149513374541E+001,0.1886112722176248E+001,0.1860388491509224E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2268181373745604E+005,0.1882478324088428E+005,0.1954612431630148E+005,0.2237220435050221E+005,0.2248113818222964E+005,0.2269725548695515E+005,0.1963150162715796E+005,0.2026116625967780E+005,0.2248848360847841E+005 +0.4860000000000006E-007,0.7976188035589819E+023,0.9259505437902338E+023,0.1495835564957564E+024,0.1061089271802863E+022,0.8178395613801308E+022,0.3311799761162821E+024,0.2226758922135378E+005,0.2249730167779003E+005,0.2272406234467950E+005,0.1972903990751561E+005,0.2139323339777569E+005,0.2250826396348779E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2262217802757758E+005,0.1960775281596468E+005,0.1946634528188741E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853749715965925E+001,0.1886325481595747E+001,0.1862603946936270E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2269177383304773E+005,0.1880524118735417E+005,0.1937348849399867E+005,0.2226758922135378E+005,0.2249730167779003E+005,0.2268708331018657E+005,0.1942751707400254E+005,0.2028162630570129E+005,0.2246314480839756E+005 +0.4880000000000007E-007,0.8013226057341429E+023,0.9266512631206697E+023,0.1493933612489238E+024,0.1021048167206528E+022,0.8188405889950392E+022,0.3314002021915619E+024,0.2224925265147185E+005,0.2242267096685219E+005,0.2266201482667055E+005,0.2013956344411730E+005,0.2153522200505607E+005,0.2245967162930738E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2263377412345999E+005,0.1914033870301349E+005,0.1940725513229866E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853822727154289E+001,0.1883605489862481E+001,0.1862195676570495E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2271435895538758E+005,0.1849602214860620E+005,0.1927313368197106E+005,0.2224925265147185E+005,0.2242267096685219E+005,0.2266965071135489E+005,0.1938861573123857E+005,0.2029846517728435E+005,0.2243024174322021E+005 +0.4900000000000007E-007,0.8043757399596134E+023,0.9267013145014150E+023,0.1492331968305384E+024,0.1011037891057444E+022,0.8203421304174018E+022,0.3315553614718727E+024,0.2226353649909787E+005,0.2233898276454849E+005,0.2265971107842330E+005,0.2000635896268833E+005,0.2144863727907123E+005,0.2243589673607396E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2259783950486293E+005,0.1931902601627143E+005,0.1961514774447079E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853596238800924E+001,0.1884660536712770E+001,0.1863621433713369E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2270428622988165E+005,0.1830023751868864E+005,0.1946269679093551E+005,0.2226353649909787E+005,0.2233898276454849E+005,0.2265598535367474E+005,0.1932257329996899E+005,0.2037211937335619E+005,0.2240549920334689E+005 +0.4920000000000007E-007,0.8078292852310472E+023,0.9269515714051422E+023,0.1490630221360040E+024,0.1001027614908361E+022,0.8198416166099475E+022,0.3317405515806308E+024,0.2221378425462203E+005,0.2229457476755611E+005,0.2264853019297174E+005,0.1956771440453280E+005,0.2131745911668299E+005,0.2240157015217044E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2264964724482150E+005,0.1887553188293582E+005,0.1942367567572283E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853922549267188E+001,0.1882005986391032E+001,0.1862309373797103E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2264925124400675E+005,0.1838483583595037E+005,0.1958258639321134E+005,0.2221378425462203E+005,0.2229457476755611E+005,0.2264904275051200E+005,0.1903466505907453E+005,0.2029789620864788E+005,0.2237499518349528E+005 +0.4940000000000007E-007,0.8103318542683180E+023,0.9269515714051422E+023,0.1489178731318423E+024,0.9810070626101937E+021,0.8238457270695810E+022,0.3318656800324943E+024,0.2220768101256927E+005,0.2232840274446182E+005,0.2259482336673406E+005,0.1913812553092543E+005,0.2155492067369400E+005,0.2238984429657386E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2262124512816661E+005,0.1886694052597229E+005,0.1898060688498831E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853743839088970E+001,0.1881953356027052E+001,0.1859174305434021E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2265835966240353E+005,0.1758700951652035E+005,0.1963361729704556E+005,0.2220768101256927E+005,0.2232840274446182E+005,0.2262051031578639E+005,0.1861318887819120E+005,0.2029694057009070E+005,0.2236859010700576E+005 +0.4960000000000007E-007,0.8139355536819881E+023,0.9273519824511054E+023,0.1487527035753824E+024,0.9760019245356518E+021,0.8208426442248559E+022,0.3320658855554759E+024,0.2225133837460569E+005,0.2230558286255315E+005,0.2253372191829297E+005,0.1927550268130614E+005,0.2141231008366340E+005,0.2236349733811067E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2261414208560114E+005,0.1854965491785811E+005,0.1915233355721886E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853699077402223E+001,0.1879976254202872E+001,0.1860406195075383E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2262172993279432E+005,0.1710414170123182E+005,0.1957167707782070E+005,0.2225133837460569E+005,0.2230558286255315E+005,0.2258115481770612E+005,0.1844595061474041E+005,0.2026285331419858E+005,0.2235389350987427E+005 +0.4980000000000008E-007,0.8170887906689496E+023,0.9271017255473784E+023,0.1485775237427735E+024,0.9709967864611100E+021,0.8243462408770352E+022,0.3322110345596378E+024,0.2219843178813803E+005,0.2235319758853574E+005,0.2251834899710794E+005,0.1961098413860688E+005,0.2140615874103018E+005,0.2235747946820014E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2260534539545008E+005,0.1838158131974201E+005,0.1901818316249305E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853643604784637E+001,0.1878901876182583E+001,0.1859445714246695E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2254508298799881E+005,0.1763973795996807E+005,0.1970393727082479E+005,0.2219843178813803E+005,0.2235319758853574E+005,0.2254967952895206E+005,0.1870205714229730E+005,0.2026251620452694E+005,0.2234045677471908E+005 +0.5000000000000008E-007,0.8198916679906929E+023,0.9274020338318509E+023,0.1484373798766863E+024,0.9559813722374847E+021,0.8243462408770352E+022,0.3323661938399485E+024,0.2215813702607372E+005,0.2240386229569481E+005,0.2245050318910055E+005,0.1960381016167542E+005,0.2132908314215272E+005,0.2232936537694757E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2264350429942125E+005,0.1827189205454946E+005,0.1906315898814486E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853883933976162E+001,0.1878190279906524E+001,0.1859769197624362E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2249112842977386E+005,0.1745247994314809E+005,0.1978706211447678E+005,0.2215813702607372E+005,0.2240386229569481E+005,0.2251456207063971E+005,0.1861455923918094E+005,0.2026517883416869E+005,0.2232874188366183E+005 +0.5020000000000008E-007,0.8231450077391451E+023,0.9271517769281238E+023,0.1482622000440773E+024,0.9559813722374847E+021,0.8268488099143061E+022,0.3325163479821848E+024,0.2209277652397133E+005,0.2235129937682195E+005,0.2242572433822056E+005,0.1981872217566824E+005,0.2137452217496773E+005,0.2228891646398512E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2268040115976149E+005,0.1798593034450726E+005,0.1924357390839970E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854115565797344E+001,0.1876295222812986E+001,0.1861051990440903E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2247623267091873E+005,0.1843978371362056E+005,0.1967049918936502E+005,0.2209277652397133E+005,0.2235129937682195E+005,0.2250935539447581E+005,0.1891754861046777E+005,0.2029978152375243E+005,0.2229689002372970E+005 +0.5040000000000008E-007,0.8274494264832511E+023,0.9272518796896147E+023,0.1480269585545739E+024,0.9309556818647756E+021,0.8308529203739395E+022,0.3327365740574646E+024,0.2207045171865405E+005,0.2226127617306332E+005,0.2239230475420179E+005,0.1897307079058839E+005,0.2119360864475810E+005,0.2223625362622521E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2267663403099704E+005,0.1769374235865545E+005,0.1937693413202236E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854091950089707E+001,0.1874297045816041E+001,0.1861985237467459E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2249001484108875E+005,0.1892863964730384E+005,0.1977002433308024E+005,0.2207045171865405E+005,0.2226127617306332E+005,0.2249772977655583E+005,0.1861133143446281E+005,0.2028573875991232E+005,0.2225947295123066E+005 +0.5060000000000008E-007,0.8303524065664853E+023,0.9270516741666329E+023,0.1478667941361885E+024,0.9259505437902337E+021,0.8338560032186646E+022,0.3328717127854772E+024,0.2204209534469993E+005,0.2221609565479579E+005,0.2240906834571858E+005,0.1847634899182964E+005,0.2115050823425615E+005,0.2222131631591169E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2266032194912580E+005,0.1812794658939083E+005,0.1922787427926491E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853989603242137E+001,0.1877243669334779E+001,0.1860941294831026E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2247510575091406E+005,0.1881661735056674E+005,0.1959789323082857E+005,0.2204209534469993E+005,0.2221609565479579E+005,0.2249630168184770E+005,0.1848020235436689E+005,0.2017642339059517E+005,0.2223567625293681E+005 +0.5080000000000008E-007,0.8335056435534467E+023,0.9272018283088693E+023,0.1476966194416541E+024,0.9059299914920666E+021,0.8363585722559355E+022,0.3330368823419372E+024,0.2202148024961390E+005,0.2223071344332301E+005,0.2240931457434469E+005,0.1787174730879744E+005,0.2100581611322382E+005,0.2221493629145022E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2256924715993187E+005,0.1854217581523198E+005,0.1923335447049213E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853415525579260E+001,0.1879928850749177E+001,0.1860979954815826E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2246387674219982E+005,0.1934280270075383E+005,0.1960020428187635E+005,0.2202148024961390E+005,0.2223071344332301E+005,0.2246848884611764E+005,0.1848257756107049E+005,0.2011531077860175E+005,0.2222047739437114E+005 +0.5100000000000009E-007,0.8367589833018989E+023,0.9274520852125963E+023,0.1475314498851942E+024,0.8909145772684412E+021,0.8368590860633897E+022,0.3332120621745461E+024,0.2198540851529949E+005,0.2220101888903704E+005,0.2242641101378388E+005,0.1783151912367173E+005,0.2094572555603634E+005,0.2220345922054606E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2247725305338966E+005,0.1782627655130098E+005,0.1928990560770749E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1852831055077687E+001,0.1875211340902067E+001,0.1861377643481876E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2248154154097134E+005,0.1962592841801339E+005,0.1949079142029088E+005,0.2198540851529949E+005,0.2220101888903704E+005,0.2245624726140427E+005,0.1835208314418788E+005,0.2007243526124638E+005,0.2219612861486850E+005 +0.5120000000000009E-007,0.8398621689081147E+023,0.9275521879740872E+023,0.1473662803287343E+024,0.8758991630448157E+021,0.8388611412932064E+022,0.3333722265929315E+024,0.2198685726445093E+005,0.2217589785577712E+005,0.2240308578750061E+005,0.1763542910565066E+005,0.2100913276121561E+005,0.2218741202599488E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2242754434762773E+005,0.1817820684910247E+005,0.1930755094586441E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1852513295857193E+001,0.1877575856025617E+001,0.1861501267027582E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2245858977004040E+005,0.2012947543330115E+005,0.1967642081076401E+005,0.2198685726445093E+005,0.2217589785577712E+005,0.2242589753060326E+005,0.1850887625728492E+005,0.2015903882708486E+005,0.2217839995456144E+005 +0.5140000000000009E-007,0.8430654572758215E+023,0.9277523934970688E+023,0.1472111210484235E+024,0.8708940249702739E+021,0.8378601136782980E+022,0.3335424012874658E+024,0.2197620303131245E+005,0.2214964240462842E+005,0.2241398854668233E+005,0.1863448398327117E+005,0.2120094187469076E+005,0.2218946493874492E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2237538700786328E+005,0.1738698690431719E+005,0.1914222850817410E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1852178406342885E+001,0.1872128623619463E+001,0.1860334302757055E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2239987537526787E+005,0.2087463461004796E+005,0.1972610559343929E+005,0.2197620303131245E+005,0.2214964240462842E+005,0.2239943503193600E+005,0.1894658906477247E+005,0.2021271486437528E+005,0.2215903226007136E+005 +0.5160000000000009E-007,0.8458683345975650E+023,0.9283530100660138E+023,0.1470909977346345E+024,0.8608837488211903E+021,0.8338560032186646E+022,0.3337125759820003E+024,0.2200703918305213E+005,0.2208012894857973E+005,0.2241508380938700E+005,0.1959495103954310E+005,0.2131151532743877E+005,0.2218362469682961E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2234074548014430E+005,0.1728538263894323E+005,0.1933326331956676E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1851955140386146E+001,0.1871393813791358E+001,0.1861681014362443E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2234821408583267E+005,0.2093642627709234E+005,0.1953556502981970E+005,0.2200703918305213E+005,0.2208012894857973E+005,0.2237547311542934E+005,0.1935640241509631E+005,0.2025714180223781E+005,0.2213920414713382E+005 +0.5180000000000009E-007,0.8484209550155813E+023,0.9283029586852684E+023,0.1469358384543238E+024,0.8358580584484813E+021,0.8393616551006606E+022,0.3338377044338637E+024,0.2199713666029180E+005,0.2207728234938260E+005,0.2239545329884769E+005,0.1929660441988334E+005,0.2142461948308131E+005,0.2217358223613735E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2235278846654010E+005,0.1673448327643549E+005,0.1923628854524567E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1852032834273644E+001,0.1867257989901095E+001,0.1861000644404472E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2229180682160890E+005,0.2102561296201609E+005,0.1949476934267195E+005,0.2199713666029180E+005,0.2207728234938260E+005,0.2235366867351024E+005,0.1910349618164877E+005,0.2026849285120725E+005,0.2212563931820050E+005 +0.5200000000000010E-007,0.8503229074839071E+023,0.9280026504007959E+023,0.1468307305547584E+024,0.8408631965230232E+021,0.8413637103304773E+022,0.3339177866430565E+024,0.2200229734144560E+005,0.2206969848023995E+005,0.2239493050069118E+005,0.1854392420681936E+005,0.2131748974048757E+005,0.2216771445319238E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2229265149221329E+005,0.1737297187479218E+005,0.1938783301252104E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1851644053088422E+001,0.1872027765236610E+001,0.1862060953689541E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2229127556767203E+005,0.2101439396261029E+005,0.1959472320821759E+005,0.2200229734144560E+005,0.2206969848023995E+005,0.2233703283689422E+005,0.1894393484824374E+005,0.2029175249343990E+005,0.2211741769249876E+005 +0.5220000000000010E-007,0.8538765555168318E+023,0.9279525990200506E+023,0.1466505455840749E+024,0.8408631965230232E+021,0.8418642241379314E+022,0.3340929664756655E+024,0.2198657322616608E+005,0.2206096113235541E+005,0.2236552738514127E+005,0.1846089364925833E+005,0.2130289973418375E+005,0.2214747593262733E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2229171883679024E+005,0.1744071088688442E+005,0.1926617358245454E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1851638007460694E+001,0.1872513777699883E+001,0.1861211028276418E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2222446715227659E+005,0.2138158971592523E+005,0.1994483513554066E+005,0.2198657322616608E+005,0.2206096113235541E+005,0.2230440518652604E+005,0.1903289480955755E+005,0.2035453852715377E+005,0.2209818862514088E+005 +0.5240000000000010E-007,0.8565793300770844E+023,0.9287534211119772E+023,0.1465604530987331E+024,0.8458683345975649E+021,0.8328549756037562E+022,0.3342681463082744E+024,0.2197580169801391E+005,0.2207329159699833E+005,0.2231836654266578E+005,0.1805503600275352E+005,0.2121471337676009E+005,0.2212420247629624E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2236004489161700E+005,0.1742475821646368E+005,0.1924941419294745E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1852079608900693E+001,0.1872399653257567E+001,0.1861093124432420E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2213337446057703E+005,0.2141295111064922E+005,0.1987738385206161E+005,0.2197580169801391E+005,0.2207329159699833E+005,0.2227563607824269E+005,0.1886053314881405E+005,0.2029178991062988E+005,0.2208451019375984E+005 +0.5260000000000010E-007,0.8598827212062820E+023,0.9293540376809222E+023,0.1464102989564969E+024,0.8308529203739395E+021,0.8298518927590311E+022,0.3344633466931815E+024,0.2195049465845190E+005,0.2202934224520638E+005,0.2230168715936248E+005,0.1793710370133328E+005,0.2120260785099017E+005,0.2209761105079358E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2232332499473268E+005,0.1693844453851303E+005,0.1911578504344064E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1851842609822358E+001,0.1868819839557602E+001,0.1860145820167088E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2215174592724511E+005,0.2094266584678780E+005,0.1973600014617862E+005,0.2195049465845190E+005,0.2202934224520638E+005,0.2226376851272874E+005,0.1854052762731902E+005,0.2020918725743933E+005,0.2205786306767787E+005 +0.5280000000000010E-007,0.8626355471472799E+023,0.9298045001076310E+023,0.1462951807807824E+024,0.8308529203739395E+021,0.8253472684919435E+022,0.3346235111115669E+024,0.2197249551598793E+005,0.2203457015004837E+005,0.2227377632461883E+005,0.1773831390060667E+005,0.2110393324455123E+005,0.2208952560900368E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2227006306513092E+005,0.1803531413870666E+005,0.1929949761507189E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1851497492560421E+001,0.1876626686229488E+001,0.1861444872599455E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2212012658411035E+005,0.2094530998974651E+005,0.1963588817598221E+005,0.2197249551598793E+005,0.2203457015004837E+005,0.2222792144807700E+005,0.1875208868714188E+005,0.2018649563418633E+005,0.2204936675727207E+005 +0.5300000000000010E-007,0.8655885786112596E+023,0.9300547570113581E+023,0.1461400215004716E+024,0.8108323680757723E+021,0.8268488099143061E+022,0.3347836755299521E+024,0.2199008444257335E+005,0.2199446246500160E+005,0.2224251363301890E+005,0.1820392354115053E+005,0.2109543643332203E+005,0.2207022532491513E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2223831451090245E+005,0.1790583244346818E+005,0.1939967473067308E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1851291008492439E+001,0.1875753804765743E+001,0.1862143125894397E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2212149304655229E+005,0.2087649366126550E+005,0.1944001683865147E+005,0.2199008444257335E+005,0.2199446246500160E+005,0.2220605116636243E+005,0.1889999190914070E+005,0.2015278774931623E+005,0.2203271301102028E+005 +0.5320000000000011E-007,0.8689420211212026E+023,0.9294040890616676E+023,0.1459598365297881E+024,0.8308529203739395E+021,0.8293513789515770E+022,0.3349188142579649E+024,0.2195471909976100E+005,0.2193526541403841E+005,0.2221971814033463E+005,0.1853472671330928E+005,0.2080293695133665E+005,0.2202780353187540E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2222693416490406E+005,0.1798047513586535E+005,0.1957520826343968E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1851216854002689E+001,0.1876258498298287E+001,0.1863349815810400E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2215182426935634E+005,0.2134045594007930E+005,0.1954059612804487E+005,0.2195471909976100E+005,0.2193526541403841E+005,0.2220184842196727E+005,0.1919955617286159E+005,0.2010176772636785E+005,0.2200430218774454E+005 +0.5340000000000011E-007,0.8720952581081639E+023,0.9294541404424131E+023,0.1457896618352537E+024,0.8158375061503141E+021,0.8318539479888478E+022,0.3350789786763502E+024,0.2194420996097142E+005,0.2190302241595512E+005,0.2220360269762107E+005,0.1871861462601648E+005,0.2100803087790884E+005,0.2201454974089481E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2216018486075832E+005,0.1704864517722768E+005,0.1944762482218456E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1850780422305991E+001,0.1869648520558400E+001,0.1862474863942621E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2215791752802227E+005,0.2154014863194982E+005,0.1957554387127988E+005,0.2194420996097142E+005,0.2190302241595512E+005,0.2217853588609651E+005,0.1908556383673914E+005,0.2016705277831510E+005,0.2198365905174870E+005 +0.5360000000000011E-007,0.8752985464758708E+023,0.9301548597728489E+023,0.1456595282453156E+024,0.8108323680757723E+021,0.8258477822993977E+022,0.3352741790612573E+024,0.2184246967985948E+005,0.2188984647079687E+005,0.2224640682587715E+005,0.1880760176808935E+005,0.2092691966773482E+005,0.2200121214820323E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2216919540442447E+005,0.1765295501024444E+005,0.1957290251293898E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1850839485906056E+001,0.1874012971056033E+001,0.1863334101989381E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2206258955459033E+005,0.2220182784430171E+005,0.1952371114189951E+005,0.2184246967985948E+005,0.2188984647079687E+005,0.2217188450037069E+005,0.1948037168730658E+005,0.2015041610376937E+005,0.2195133619098054E+005 +0.5380000000000011E-007,0.8789022458895409E+023,0.9306553735803030E+023,0.1454843484127066E+024,0.7908118157776051E+021,0.8248467546844894E+022,0.3354793897223135E+024,0.2184506821646020E+005,0.2180659624910936E+005,0.2227917546881322E+005,0.1861649441550242E+005,0.2085342282196927E+005,0.2199065882132915E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2218716284581288E+005,0.1779860080252671E+005,0.1956510609580144E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1850957122091000E+001,0.1875021517923657E+001,0.1863280942197987E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2194871812805569E+005,0.2247829372114327E+005,0.1942548100713251E+005,0.2184506821646020E+005,0.2180659624910936E+005,0.2215784554562635E+005,0.1951685966838812E+005,0.2008755301752359E+005,0.2192133462951029E+005 +0.5400000000000011E-007,0.8809543525001029E+023,0.9307054249610485E+023,0.1453792405131413E+024,0.7858066777030632E+021,0.8253472684919435E+022,0.3355844976218788E+024,0.2177289269152227E+005,0.2178060006711435E+005,0.2228676446907676E+005,0.1863727867456661E+005,0.2104469953755610E+005,0.2197239389049062E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2219606781362853E+005,0.1787603529040471E+005,0.1953240739664326E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1851015355878521E+001,0.1875551181434324E+001,0.1863057535519030E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2193037534383135E+005,0.2247384578265222E+005,0.1943275777143105E+005,0.2177289269152227E+005,0.2178060006711435E+005,0.2215822014291397E+005,0.1954562523804088E+005,0.2016442558239581E+005,0.2189718419237408E+005 +0.5420000000000011E-007,0.8835069729181194E+023,0.9311558873877573E+023,0.1452641223374268E+024,0.7757964015539796E+021,0.8228446994546726E+022,0.3357346517641151E+024,0.2176157417835009E+005,0.2176720430627876E+005,0.2231948589391302E+005,0.1880779504992087E+005,0.2079017065036144E+005,0.2197389701826553E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2210495590230486E+005,0.1823945290263039E+005,0.1965291255592596E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1850417375849927E+001,0.1877978230308167E+001,0.1863877271493026E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2190663543924397E+005,0.2268839538934138E+005,0.1956633100820227E+005,0.2176157417835009E+005,0.2176720430627876E+005,0.2214100466184078E+005,0.1978102675765819E+005,0.2012474663158894E+005,0.2188261273771758E+005 +0.5440000000000012E-007,0.8864600043820990E+023,0.9320067608604294E+023,0.1451289836094142E+024,0.7457655731067288E+021,0.8203421304174018E+022,0.3359248470109478E+024,0.2171635830233516E+005,0.2173508233728681E+005,0.2229569646965999E+005,0.1871958418923181E+005,0.2056586001980718E+005,0.2193709499294053E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2210586243704864E+005,0.1833434466580413E+005,0.1952811286965611E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1850423349187819E+001,0.1878596455294585E+001,0.1863028139883839E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2191626004550539E+005,0.2281502970889452E+005,0.1965207106727016E+005,0.2171635830233516E+005,0.2173508233728681E+005,0.2213364135012415E+005,0.1980515178789900E+005,0.2001786138549684E+005,0.2185611027341770E+005 +0.5460000000000012E-007,0.8881617513274431E+023,0.9327074801908652E+023,0.1450789322286687E+024,0.7457655731067288E+021,0.8133349371130432E+022,0.3360449703247368E+024,0.2173818926918092E+005,0.2173256023986707E+005,0.2224557219999417E+005,0.1871033770075076E+005,0.2037908765590807E+005,0.2191606258860339E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2211035179692084E+005,0.1856343957139800E+005,0.1934069824078262E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1850452923448740E+001,0.1880063525046157E+001,0.1861732902744785E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2193216103595165E+005,0.2239656153457522E+005,0.1953591096683132E+005,0.2173818926918092E+005,0.2173256023986707E+005,0.2211754543620751E+005,0.1974176274892394E+005,0.1985158867431603E+005,0.2185031210769738E+005 +0.5480000000000012E-007,0.8909145772684412E+023,0.9325573260486289E+023,0.1449337832245070E+024,0.7457655731067288E+021,0.8148364785354058E+022,0.3361751039146749E+024,0.2173836115568085E+005,0.2173683570798180E+005,0.2219511649989908E+005,0.1868904547332551E+005,0.2035226374220322E+005,0.2189449562453691E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2211831616699019E+005,0.1874671039827845E+005,0.1911872853384298E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1850505361058865E+001,0.1881211875520650E+001,0.1860166825794460E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2192004169994411E+005,0.2205281184463471E+005,0.1948392653526897E+005,0.2173836115568085E+005,0.2173683570798180E+005,0.2209406278324570E+005,0.1968247698043539E+005,0.1976463143102501E+005,0.2183888926743405E+005 +0.5500000000000012E-007,0.8951689446318017E+023,0.9328075829523561E+023,0.1447285725634508E+024,0.7407604350321871E+021,0.8133349371130432E+022,0.3364003351280292E+024,0.2171839553596849E+005,0.2167261402016128E+005,0.2221410408902480E+005,0.1839789475698372E+005,0.2031396918595667E+005,0.2187770058240461E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2209906483489566E+005,0.1915812522805298E+005,0.1924953289876465E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1850378546815181E+001,0.1883711373048895E+001,0.1861093960242736E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2184123599101388E+005,0.2173841352357595E+005,0.1937111002651547E+005,0.2171839553596849E+005,0.2167261402016128E+005,0.2207416987117786E+005,0.1957648750702846E+005,0.1975039517189349E+005,0.2180646650034799E+005 +0.5520000000000012E-007,0.8987225926647264E+023,0.9323571205256473E+023,0.1445283670404691E+024,0.7407604350321871E+021,0.8178395613801308E+022,0.3365554944083399E+024,0.2166500660037601E+005,0.2161621258615269E+005,0.2223037267763700E+005,0.1871237226432312E+005,0.2010128133895242E+005,0.2184977890029472E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2207634186467923E+005,0.1905050108258098E+005,0.1921450500204928E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1850228586929332E+001,0.1883067727629747E+001,0.1860846891105004E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2185143216162395E+005,0.2158568690128975E+005,0.1926489670722110E+005,0.2166500660037601E+005,0.2161621258615269E+005,0.2207813348850711E+005,0.1963977106264562E+005,0.1961694984083920E+005,0.2177467403323129E+005 +0.5540000000000013E-007,0.9019258810324331E+023,0.9320568122411748E+023,0.1443531872078602E+024,0.7407604350321871E+021,0.8208426442248559E+022,0.3367006434125017E+024,0.2166719735636745E+005,0.2159978272032304E+005,0.2222441316479422E+005,0.1908286921218859E+005,0.2008626781421340E+005,0.2184320277867344E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2199542975682513E+005,0.1917349998967506E+005,0.1921924707209925E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1849692160833038E+001,0.1883802743961303E+001,0.1860880390674619E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2183777086644024E+005,0.2176463225728519E+005,0.1934328461569407E+005,0.2166719735636745E+005,0.2159978272032304E+005,0.2204968510646880E+005,0.1988682260878532E+005,0.1963451991629643E+005,0.2175904744606279E+005 +0.5560000000000013E-007,0.9047788097349219E+023,0.9321068636219202E+023,0.1442130433417730E+024,0.7407604350321871E+021,0.8203421304174018E+022,0.3368457924166634E+024,0.2163229019154232E+005,0.2155971052923534E+005,0.2224269187733988E+005,0.1899469126730660E+005,0.1992953156471939E+005,0.2182626740835647E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2193381462087047E+005,0.1984996187707229E+005,0.1948292118431482E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1849281086173514E+001,0.1887685564261299E+001,0.1862718040601614E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2185309709129838E+005,0.2137311097903211E+005,0.1910922034387723E+005,0.2163229019154232E+005,0.2155971052923534E+005,0.2204553389485511E+005,0.1991972208463980E+005,0.1956924696031692E+005,0.2173511859921853E+005 +0.5580000000000013E-007,0.9069810704877204E+023,0.9325072746678836E+023,0.1441079354422076E+024,0.7257450208085616E+021,0.8193411028024934E+022,0.3369759260066015E+024,0.2171353675888762E+005,0.2152535176392749E+005,0.2219627672357457E+005,0.1948349555303779E+005,0.1998867377332983E+005,0.2182116260536533E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2186975130962553E+005,0.1945342170563445E+005,0.1956713169148060E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1848851288768997E+001,0.1885441554199639E+001,0.1863294757675508E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2185184856173064E+005,0.2153628940011380E+005,0.1905908697429558E+005,0.2171353675888762E+005,0.2152535176392749E+005,0.2200755116923191E+005,0.2007153121940599E+005,0.1960334415502075E+005,0.2173235136492059E+005 +0.5600000000000013E-007,0.9100342047131908E+023,0.9323571205256473E+023,0.1439427658857477E+024,0.7207398827340198E+021,0.8218436718397642E+022,0.3371210750107632E+024,0.2168478594642402E+005,0.2150300728014207E+005,0.2218873241148473E+005,0.1933179942296627E+005,0.2001797049753907E+005,0.2180402107917933E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2188188275223479E+005,0.1913847965719624E+005,0.1941629915799688E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1848932865891156E+001,0.1883594411836079E+001,0.1862258321371750E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2178689228990742E+005,0.2254316031225268E+005,0.1927261316483653E+005,0.2168478594642402E+005,0.2150300728014207E+005,0.2198855164027915E+005,0.2021194798861294E+005,0.1963745696949741E+005,0.2171115402226162E+005 +0.5620000000000013E-007,0.9122865168467346E+023,0.9330077884753377E+023,0.1438376579861824E+024,0.6957141923613108E+021,0.8203421304174018E+022,0.3372662240149249E+024,0.2160769829600656E+005,0.2152079337034554E+005,0.2213290446967723E+005,0.2006441897780564E+005,0.2001173966700506E+005,0.2176564511248432E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2194319161192522E+005,0.1916553608798236E+005,0.1924858833805603E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1849343791075480E+001,0.1883755433089673E+001,0.1861087309291393E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2178737102464964E+005,0.2116811441253083E+005,0.1922932165148762E+005,0.2160769829600656E+005,0.2152079337034554E+005,0.2198078607448387E+005,0.2013910427815247E+005,0.1957665887735117E+005,0.2169034096612077E+005 +0.5640000000000013E-007,0.9155899079759322E+023,0.9333080967598102E+023,0.1436925089820207E+024,0.7007193304358527E+021,0.8163380199577682E+022,0.3374464089856084E+024,0.2155717755035677E+005,0.2156141571425405E+005,0.2207142370655425E+005,0.1980820265644801E+005,0.1997001805032282E+005,0.2173529989255142E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2192511950845239E+005,0.1902019034975930E+005,0.1914820220627512E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1849222894437329E+001,0.1882885167138588E+001,0.1860376811541367E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2180189889335267E+005,0.2016923768615348E+005,0.1923339576575557E+005,0.2155717755035677E+005,0.2156141571425405E+005,0.2195322070578128E+005,0.1969754170455354E+005,0.1953241355843725E+005,0.2167415015347219E+005 +0.5660000000000014E-007,0.9184428366784211E+023,0.9337585591865190E+023,0.1435673805301571E+024,0.6957141923613108E+021,0.8128344233055890E+022,0.3376115785420684E+024,0.2150633420420503E+005,0.2158899378110571E+005,0.2205078829562799E+005,0.2031539657909595E+005,0.2017951311850327E+005,0.2172632324030373E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2184431959621734E+005,0.1944382567691740E+005,0.1884499898153304E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1848679988749153E+001,0.1885386139209220E+001,0.1858186053500423E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2181669916835256E+005,0.2016810230984829E+005,0.1922966527119998E+005,0.2150633420420503E+005,0.2158899378110571E+005,0.2192669535963879E+005,0.2003395466754277E+005,0.1954093737588565E+005,0.2165759910338423E+005 +0.5680000000000014E-007,0.9206951488119649E+023,0.9341089188517370E+023,0.1434672777686663E+024,0.6907090542867690E+021,0.8103318542683181E+022,0.3377417121320064E+024,0.2150608959642795E+005,0.2158356884994829E+005,0.2204431436731345E+005,0.2062395473772711E+005,0.2013454978464852E+005,0.2172143677963073E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2188631198914659E+005,0.1929649704929151E+005,0.1896864584640953E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1848962628091854E+001,0.1884528570502135E+001,0.1859087692401845E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2172069207722092E+005,0.1952308245172009E+005,0.1895483186269377E+005,0.2150608959642795E+005,0.2158356884994829E+005,0.2190715708911307E+005,0.1994077411557732E+005,0.1947455625358065E+005,0.2164594240841907E+005 +0.5700000000000014E-007,0.9236982316566901E+023,0.9345093298977002E+023,0.1433271339025791E+024,0.6806987781376854E+021,0.8083297990385014E+022,0.3379118868265408E+024,0.2148742552089169E+005,0.2158738223929590E+005,0.2204630584741487E+005,0.2040893799828347E+005,0.2001265130009169E+005,0.2171466996640554E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2185686054554441E+005,0.1964784275342695E+005,0.1893934436031652E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1848764509101823E+001,0.1886552869076779E+001,0.1858875062030515E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2166927583178537E+005,0.1941990412271206E+005,0.1887328529157204E+005,0.2148742552089169E+005,0.2158738223929590E+005,0.2188506511847674E+005,0.1991320170846315E+005,0.1938953519393150E+005,0.2163037446538000E+005 +0.5720000000000014E-007,0.9258504410287430E+023,0.9345593812784456E+023,0.1432020054507156E+024,0.6606782258395181E+021,0.8118333956906806E+022,0.3380219998641807E+024,0.2154240959067791E+005,0.2157692853249300E+005,0.2195169841331923E+005,0.2016804801864162E+005,0.2005731574321316E+005,0.2168699332115937E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2187740227779557E+005,0.1972743857989184E+005,0.1904930498577936E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1848902747472905E+001,0.1887001646977788E+001,0.1859669713032610E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2165683809403093E+005,0.1948450508133798E+005,0.1890984650717438E+005,0.2154240959067791E+005,0.2157692853249300E+005,0.2184553732526156E+005,0.1984882105691048E+005,0.1944948683562499E+005,0.2162679621836120E+005 +0.5740000000000014E-007,0.9285532155889956E+023,0.9346594840399365E+023,0.1430818821369266E+024,0.6706885019886018E+021,0.8088303128459556E+022,0.3381621437302679E+024,0.2156406662981031E+005,0.2153551586495189E+005,0.2198160194701844E+005,0.1953981114533644E+005,0.2002047435816257E+005,0.2169190627257574E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2179474426544593E+005,0.1997570281353337E+005,0.1864489885801623E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1848344947084533E+001,0.1888378890820900E+001,0.1856702227839711E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2163450369557325E+005,0.2048951841895045E+005,0.1902661343428395E+005,0.2156406662981031E+005,0.2153551586495189E+005,0.2182980264916160E+005,0.1993504828534971E+005,0.1935809238611190E+005,0.2161261828924306E+005 +0.5760000000000015E-007,0.9315062470529752E+023,0.9350098437051545E+023,0.1429367331327648E+024,0.6556730877649764E+021,0.8083297990385014E+022,0.3383273132867278E+024,0.2152812670444235E+005,0.2150127463376198E+005,0.2200739580489241E+005,0.1998276670556896E+005,0.1988185158509056E+005,0.2168086010524517E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2173892071213543E+005,0.1941808396418438E+005,0.1859277612713113E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1847965899389441E+001,0.1885237221345292E+001,0.1856310607850318E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2161938157031963E+005,0.2101502275765682E+005,0.1905629007767310E+005,0.2152812670444235E+005,0.2150127463376198E+005,0.2182162366407183E+005,0.2012799789364861E+005,0.1929202307628085E+005,0.2158856428073420E+005 +0.5780000000000015E-007,0.9340088160902461E+023,0.9348096381821729E+023,0.1428015944047522E+024,0.6556730877649764E+021,0.8103318542683181E+022,0.3384424314624423E+024,0.2156596371995805E+005,0.2146491234056027E+005,0.2195058088491544E+005,0.1968474775222894E+005,0.1990958379692052E+005,0.2165703364606191E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2170886749685989E+005,0.2028651324844180E+005,0.1845854603455467E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1847761049834311E+001,0.1890056512865498E+001,0.1855292163086276E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2164314151198002E+005,0.2020625517319796E+005,0.1923191913072325E+005,0.2156596371995805E+005,0.2146491234056027E+005,0.2179556564390187E+005,0.2000120170775188E+005,0.1931917448613310E+005,0.2157810380315755E+005 +0.5800000000000015E-007,0.9365113851275169E+023,0.9356104602740995E+023,0.1427014916432614E+024,0.6406576735413510E+021,0.8053267161937763E+022,0.3386076010189022E+024,0.2155210985918290E+005,0.2147282337771091E+005,0.2195912600306391E+005,0.1967692030962519E+005,0.1995051620860289E+005,0.2166009405231701E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2159440216321483E+005,0.1943871014249782E+005,0.1831618565526698E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846975750409616E+001,0.1885356576199799E+001,0.1854196147020365E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2163554431732228E+005,0.1996669393925503E+005,0.1955139954026373E+005,0.2155210985918290E+005,0.2147282337771091E+005,0.2176622339796826E+005,0.1969586430369506E+005,0.1939193827043055E+005,0.2156554883199595E+005 +0.5820000000000015E-007,0.9393643138300059E+023,0.9358607171778265E+023,0.1425513375010251E+024,0.6206371212431837E+021,0.8068282576161389E+022,0.3387627602992129E+024,0.2155087074136389E+005,0.2142097516224140E+005,0.2195510008463092E+005,0.2023413699050365E+005,0.2007211803048507E+005,0.2164745399021682E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2156089078346939E+005,0.1902123896982812E+005,0.1841559106837375E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846744308318325E+001,0.1882891492455800E+001,0.1854963196436425E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2161647063832523E+005,0.1993934275893326E+005,0.1933874300413561E+005,0.2155087074136389E+005,0.2142097516224140E+005,0.2174985469900869E+005,0.1981667525503439E+005,0.1940989031733266E+005,0.2154454971356380E+005 +0.5840000000000015E-007,0.9409659580138593E+023,0.9362611282237899E+023,0.1424812655679815E+024,0.6106268450941001E+021,0.8048262023863222E+022,0.3388628630607037E+024,0.2154002405614871E+005,0.2142979217097192E+005,0.2192644563411335E+005,0.1964788404272087E+005,0.2017100122582548E+005,0.2163612076712170E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2157404658339029E+005,0.1843850236775263E+005,0.1856565672675649E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846835250542541E+001,0.1879267879505390E+001,0.1856106001141816E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2156477909963955E+005,0.2039241630295676E+005,0.1945807641442574E+005,0.2154002405614871E+005,0.2142979217097192E+005,0.2172574618571173E+005,0.1953396383651794E+005,0.1952842959979057E+005,0.2153626603930358E+005 +0.5860000000000015E-007,0.9430681160051667E+023,0.9362611282237899E+023,0.1423611422541925E+024,0.5956114308704747E+021,0.8078292852310472E+022,0.3389679709602692E+024,0.2155957663745551E+005,0.2146113707849602E+005,0.2188031907648421E+005,0.1910087606136915E+005,0.2032922005710957E+005,0.2163345127442564E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2155060348593693E+005,0.1853161056755783E+005,0.1849638834623851E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846673119997138E+001,0.1879861823120625E+001,0.1855580741762201E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2152781147940372E+005,0.1984096957778808E+005,0.1942185375060879E+005,0.2155957663745551E+005,0.2146113707849602E+005,0.2168841680666048E+005,0.1916047704963668E+005,0.1956842384814475E+005,0.2153482879459187E+005 +0.5880000000000016E-007,0.9450201198542380E+023,0.9364112823660262E+023,0.1422460240784781E+024,0.5705857404977657E+021,0.8113328818832265E+022,0.3390730788598345E+024,0.2149938638517666E+005,0.2151766141973395E+005,0.2184274086340425E+005,0.1963912285102443E+005,0.2051726617484594E+005,0.2162184494284026E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2154855432329339E+005,0.1749989278255260E+005,0.1850000963834018E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846658931853532E+001,0.1872935384708786E+001,0.1855608296795138E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2148647111760818E+005,0.1961084167365741E+005,0.1963440534372575E+005,0.2149938638517666E+005,0.2151766141973395E+005,0.2165932268732476E+005,0.1904793410581260E+005,0.1971369639815376E+005,0.2152467575413038E+005 +0.5900000000000016E-007,0.9474726375107636E+023,0.9366615392697533E+023,0.1421309059027636E+024,0.5655806024232239E+021,0.8098313404608639E+022,0.3392082175878472E+024,0.2147047260198514E+005,0.2157909638950113E+005,0.2180783652262013E+005,0.1915293095194727E+005,0.2050694137545957E+005,0.2161495753798929E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2152087694657439E+005,0.1734299862074387E+005,0.1841318618826061E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846467039809337E+001,0.1871811529750827E+001,0.1854944734693790E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2146612633559234E+005,0.1751547524528727E+005,0.1960391892823571E+005,0.2147047260198514E+005,0.2157909638950113E+005,0.2163062369651186E+005,0.1818335202940413E+005,0.1967690622931417E+005,0.2151927094311667E+005 +0.5920000000000016E-007,0.9504256689747433E+023,0.9363111796045353E+023,0.1419807517605274E+024,0.5805960166468493E+021,0.8103318542683181E+022,0.3393383511777853E+024,0.2146161331319484E+005,0.2155595817384503E+005,0.2181765730990946E+005,0.1931636526233729E+005,0.2047288609509831E+005,0.2160933465044651E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2147792264465975E+005,0.1739352724041709E+005,0.1833313167786974E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846168277979142E+001,0.1872175636426786E+001,0.1854327481650812E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2143196787319386E+005,0.1720785442829410E+005,0.1960188045665539E+005,0.2146161331319484E+005,0.2155595817384503E+005,0.2161336986347849E+005,0.1817889256386812E+005,0.1963986247432417E+005,0.2150202124786881E+005 +0.5940000000000016E-007,0.9537791114846863E+023,0.9369618475542258E+023,0.1418456130325147E+024,0.5805960166468493E+021,0.8038251747714138E+022,0.3395385567007670E+024,0.2142080587215790E+005,0.2156106028553182E+005,0.2178621918127515E+005,0.1881602922189214E+005,0.2054723232622334E+005,0.2158702926601592E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2144909650715527E+005,0.1786441353138394E+005,0.1801820864913708E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845967130012621E+001,0.1875471973244014E+001,0.1851847483617622E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2143426246476354E+005,0.1772443365582832E+005,0.1939993576301562E+005,0.2142080587215790E+005,0.2156106028553182E+005,0.2159249479098173E+005,0.1823891688627122E+005,0.1952882681216003E+005,0.2148100235620973E+005 +0.5960000000000016E-007,0.9563817832834480E+023,0.9371620530772074E+023,0.1417204845806512E+024,0.5755908785723075E+021,0.8028241471565054E+022,0.3396787005668541E+024,0.2138132582327775E+005,0.2151847998590880E+005,0.2180281624361040E+005,0.1889789794983583E+005,0.2054514692978393E+005,0.2157104896361625E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2143706993260722E+005,0.1771342659508361E+005,0.1827855194149295E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845883053431780E+001,0.1874433684529245E+001,0.1853903631093303E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2139446050997720E+005,0.1766368044835957E+005,0.1933165765181383E+005,0.2138132582327775E+005,0.2151847998590880E+005,0.2158489893871947E+005,0.1821585660303925E+005,0.1957795690323066E+005,0.2145611459227479E+005 +0.5980000000000016E-007,0.9597352257933909E+023,0.9373122072194437E+023,0.1415603201622658E+024,0.5755908785723075E+021,0.8013226057341429E+022,0.3398538803994630E+024,0.2134216531308577E+005,0.2146129983444615E+005,0.2178181093668176E+005,0.1931942951590165E+005,0.2062281529427335E+005,0.2153776236404063E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2147933941932796E+005,0.1785195937315904E+005,0.1836006225196372E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846178150658550E+001,0.1875386979888058E+001,0.1854535712530149E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2134469491842596E+005,0.1805415669977274E+005,0.1925592151554925E+005,0.2134216531308577E+005,0.2146129983444615E+005,0.2157254843846457E+005,0.1855109166862345E+005,0.1961178490889228E+005,0.2142545783632368E+005 +0.6000000000000017E-007,0.9626382058766251E+023,0.9374123099809346E+023,0.1414201762961787E+024,0.5755908785723075E+021,0.8003215781192345E+022,0.3400040345416993E+024,0.2133452327841599E+005,0.2144384564380952E+005,0.2181750185464612E+005,0.1961828881966787E+005,0.2034436634855609E+005,0.2153934037752001E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2141562886698518E+005,0.1834669605391547E+005,0.1841228365444552E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845732933351701E+001,0.1878676464997665E+001,0.1854937804925402E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2130650147821777E+005,0.1744976245246911E+005,0.1902212545566594E+005,0.2133452327841599E+005,0.2144384564380952E+005,0.2155985946947299E+005,0.1864048964991434E+005,0.1943576948092982E+005,0.2140913503844180E+005 +0.6020000000000017E-007,0.9651908262946416E+023,0.9375624641231708E+023,0.1413000529823897E+024,0.5755908785723075E+021,0.7988200366968720E+022,0.3401391732697119E+024,0.2131753852683921E+005,0.2141165409331679E+005,0.2183771399025445E+005,0.1979509116789301E+005,0.2019524969824984E+005,0.2153063767458084E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2140066715684996E+005,0.1826754055115570E+005,0.1811606479368818E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845628005387530E+001,0.1878161877609680E+001,0.1852627083360577E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2127484861364956E+005,0.1810857395337370E+005,0.1890998519055684E+005,0.2131753852683921E+005,0.2141165409331679E+005,0.2155543797013091E+005,0.1888757810341668E+005,0.1925802034040453E+005,0.2138982840441922E+005 +0.6040000000000017E-007,0.9673930870474400E+023,0.9373622586001891E+023,0.1411849348066752E+024,0.5805960166468493E+021,0.7998210643117803E+022,0.3402392760312028E+024,0.2135026723011102E+005,0.2134165570428615E+005,0.2180146884859291E+005,0.1926910643589472E+005,0.2004258146415507E+005,0.2150083244374429E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2143078702848239E+005,0.1929649704929151E+005,0.1827360403229847E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845839093793753E+001,0.1884528570502135E+001,0.1853865085165605E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2125727218070420E+005,0.1757992291505375E+005,0.1908747537378428E+005,0.2135026723011102E+005,0.2134165570428615E+005,0.2154253604190409E+005,0.1878588545509640E+005,0.1928539444433192E+005,0.2137476202239432E+005 +0.6060000000000017E-007,0.9690447826120388E+023,0.9381130293113703E+023,0.1411298782878553E+024,0.5705857404977657E+021,0.7943154124297843E+022,0.3403593993449918E+024,0.2133981663421928E+005,0.2135048890257781E+005,0.2175708119824982E+005,0.1960036229263405E+005,0.1995515482525641E+005,0.2148054607088361E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2148000333149014E+005,0.1787921422490408E+005,0.1851744072499021E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846182776640905E+001,0.1875572829948155E+001,0.1855740786032374E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2120170578401758E+005,0.1748559163878248E+005,0.1912328035719959E+005,0.2133981663421928E+005,0.2135048890257781E+005,0.2152011889870388E+005,0.1851569923338005E+005,0.1932330864468656E+005,0.2136572566210716E+005 +0.6080000000000017E-007,0.9713971975070734E+023,0.9386635944995700E+023,0.1410247703882899E+024,0.5555703262741403E+021,0.7918128433925134E+022,0.3405045483491535E+024,0.2138986382009030E+005,0.2132094037191469E+005,0.2172195233049271E+005,0.1964195916327320E+005,0.2004062849733782E+005,0.2147417579293374E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2145836590777523E+005,0.1677463788527033E+005,0.1845043642702097E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846031868939795E+001,0.1867568408811523E+001,0.1855230170652356E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2114986366731432E+005,0.1784401220135961E+005,0.1923322720182867E+005,0.2138986382009030E+005,0.2132094037191469E+005,0.2148374627271611E+005,0.1833861392843667E+005,0.1937471724660474E+005,0.2135790766805478E+005 +0.6100000000000018E-007,0.9743502289710531E+023,0.9387136458803155E+023,0.1408796213841282E+024,0.5555703262741403E+021,0.7913123295850593E+022,0.3406547024913897E+024,0.2134550905996457E+005,0.2128815943403103E+005,0.2167874488730899E+005,0.1931788230446601E+005,0.2018727559377344E+005,0.2143730557952748E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2144752588762131E+005,0.1775889134458070E+005,0.1831202637046451E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845956155172698E+001,0.1874748147429175E+001,0.1854163875657963E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2118718893071506E+005,0.1776494903516645E+005,0.1930394620712474E+005,0.2134550905996457E+005,0.2128815943403103E+005,0.2147279380949075E+005,0.1844096553264837E+005,0.1942224017353276E+005,0.2133293209473557E+005 +0.6120000000000018E-007,0.9762521814393790E+023,0.9391140569262787E+023,0.1408095494510846E+024,0.5605754643486821E+021,0.7863071915105174E+022,0.3407698206671043E+024,0.2133137055082401E+005,0.2129306373225329E+005,0.2166762621998770E+005,0.1956400190503457E+005,0.2012712699398238E+005,0.2142906337127541E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2139502921492530E+005,0.1846348416624606E+005,0.1841505041365001E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845588428929170E+001,0.1879427815564940E+001,0.1854959046356700E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2119327904614907E+005,0.1919636531331005E+005,0.1909397044944157E+005,0.2133137055082401E+005,0.2129306373225329E+005,0.2145554858180456E+005,0.1915646556503438E+005,0.1936240396728382E+005,0.2132311477630405E+005 +0.6140000000000018E-007,0.9785044935729228E+023,0.9389639027840425E+023,0.1406894261372956E+024,0.5605754643486821E+021,0.7878087329328800E+022,0.3408749285666696E+024,0.2138724031978291E+005,0.2126431973663111E+005,0.2162909389584000E+005,0.1957024271177438E+005,0.2006924325671355E+005,0.2141975248364890E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2140248584021542E+005,0.1856507593786500E+005,0.1825866499457455E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845640767609717E+001,0.1880073876483601E+001,0.1853748581452544E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2114537460856761E+005,0.1960493013481705E+005,0.1906219184684154E+005,0.2138724031978291E+005,0.2126431973663111E+005,0.2142667666605625E+005,0.1930565064783256E+005,0.1928566334552066E+005,0.2131766401726066E+005 +0.6160000000000018E-007,0.9811572167524299E+023,0.9390139541647880E+023,0.1405492822712084E+024,0.5505651881995985E+021,0.7893102743552426E+022,0.3410100672946822E+024,0.2133033734712046E+005,0.2125854497451456E+005,0.2162055654096385E+005,0.1940338308900285E+005,0.2019090696755854E+005,0.2140069931804301E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2141120133201775E+005,0.1820007777708025E+005,0.1838126641221422E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845701897459585E+001,0.1877719847756044E+001,0.1854699247847603E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2111855820719317E+005,0.1997687641731693E+005,0.1878613207581293E+005,0.2133033734712046E+005,0.2125854497451456E+005,0.2141745041762357E+005,0.1924163128242960E+005,0.1929139430662028E+005,0.2129590645691254E+005 +0.6180000000000018E-007,0.9834595802667192E+023,0.9396145707337329E+023,0.1404491795097176E+024,0.5355497739759731E+021,0.7863071915105174E+022,0.3411552162988440E+024,0.2133583342263303E+005,0.2123371287614374E+005,0.2154315607207518E+005,0.1901554623843765E+005,0.2008990094653198E+005,0.2136070015284662E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2141549845850954E+005,0.1791410397103927E+005,0.1832422825351466E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845732019399834E+001,0.1875809935006087E+001,0.1854258508052983E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2117214165122543E+005,0.1928536991044788E+005,0.1876812645804041E+005,0.2133583342263303E+005,0.2123371287614374E+005,0.2140034437804344E+005,0.1879354344626773E+005,0.1922655991795904E+005,0.2128165932303376E+005 +0.6200000000000018E-007,0.9858119951617539E+023,0.9395645193529875E+023,0.1403290561959286E+024,0.5355497739759731E+021,0.7868077053179716E+022,0.3412703344745584E+024,0.2130853157784890E+005,0.2121462167941704E+005,0.2151493143878119E+005,0.1879783423328367E+005,0.2028940981504754E+005,0.2134011160044370E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2140358647047898E+005,0.1742488408186911E+005,0.1828896399753920E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845648490023467E+001,0.1872400554490386E+001,0.1853984678281463E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2118107074460073E+005,0.1927147060547725E+005,0.1870202969364084E+005,0.2130853157784890E+005,0.2121462167941704E+005,0.2138737229485900E+005,0.1856160820606988E+005,0.1928509532335947E+005,0.2126413432888451E+005 +0.6220000000000019E-007,0.9878140503915704E+023,0.9400650331604416E+023,0.1402389637105868E+024,0.5205343597523476E+021,0.7848056500881549E+022,0.3413954629264219E+024,0.2126208467575075E+005,0.2124882320085070E+005,0.2147952813352369E+005,0.1822104259227421E+005,0.2042628389456983E+005,0.2132390448281718E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2136897111181961E+005,0.1776480585307039E+005,0.1821854691373977E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845405246041885E+001,0.1874788940218291E+001,0.1853434795617235E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2120515033742704E+005,0.1878036857066215E+005,0.1854087185706664E+005,0.2126208467575075E+005,0.2124882320085070E+005,0.2136955975722222E+005,0.1825934258464997E+005,0.1927901674323194E+005,0.2125241632686003E+005 +0.6240000000000019E-007,0.9906169277133139E+023,0.9400650331604416E+023,0.1400888095683506E+024,0.5105240836032640E+021,0.7868077053179716E+022,0.3415356067925091E+024,0.2124512081418612E+005,0.2124378645210133E+005,0.2146095020119048E+005,0.1829866660616982E+005,0.2066409623726359E+005,0.2131549140140491E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2127728264437591E+005,0.1733312504581411E+005,0.1801142190515810E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1844757228703467E+001,0.1871740138988258E+001,0.1851793109263547E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2123803736858429E+005,0.1911984704941577E+005,0.1856292914924818E+005,0.2124512081418612E+005,0.2124378645210133E+005,0.2134631535117215E+005,0.1827467239152370E+005,0.1933385492962380E+005,0.2123779013138034E+005 +0.6260000000000019E-007,0.9937201133195298E+023,0.9396646221144784E+023,0.1399036194595925E+024,0.5005138074541804E+021,0.7928138710074219E+022,0.3416707455205217E+024,0.2119937714524667E+005,0.2118992507760118E+005,0.2146155347654021E+005,0.1865902536253291E+005,0.2055097809403250E+005,0.2128536390867902E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2128372981606219E+005,0.1740765434252542E+005,0.1822784475509831E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1844802972113115E+001,0.1872277066093885E+001,0.1853507638937939E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2120068801213368E+005,0.2012573441454644E+005,0.1879320785021759E+005,0.2119937714524667E+005,0.2118992507760118E+005,0.2133740373115863E+005,0.1874495100790683E+005,0.1940973972534983E+005,0.2120817296331453E+005 +0.6280000000000019E-007,0.9965730420220187E+023,0.9396145707337329E+023,0.1397584704554308E+024,0.5005138074541804E+021,0.7933143848148760E+022,0.3418108893866090E+024,0.2118688372563379E+005,0.2115666484508662E+005,0.2144713628914251E+005,0.1880088353362195E+005,0.2047668701732067E+005,0.2126501105364387E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2130257921458288E+005,0.1918272483278834E+005,0.1822409162828352E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1844936556348102E+001,0.1883857497566323E+001,0.1853478244025888E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2113594761844593E+005,0.1990527178832693E+005,0.1898478110875166E+005,0.2118688372563379E+005,0.2115666484508662E+005,0.2131724816448160E+005,0.1922624258626942E+005,0.1943211547154364E+005,0.2118828206489411E+005 +0.6300000000000019E-007,0.9997763303897254E+023,0.9396145707337329E+023,0.1395933008989709E+024,0.4955086693796387E+021,0.7943154124297843E+022,0.3419710538049942E+024,0.2110880916125702E+005,0.2117119014882855E+005,0.2143563144160011E+005,0.1839709599416177E+005,0.2040080782377843E+005,0.2123898441376461E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2127211091393577E+005,0.1888277225751257E+005,0.1793476011957878E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1844720515212104E+001,0.1882050304270774E+001,0.1851176125389510E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2115872805259572E+005,0.2027433450984771E+005,0.1893646997163183E+005,0.2110880916125702E+005,0.2117119014882855E+005,0.2131065096239014E+005,0.1907546130452447E+005,0.1930701542941736E+005,0.2116354392536680E+005 +0.6320000000000020E-007,0.1002829464615196E+024,0.9397647248759691E+023,0.1394531570328838E+024,0.5005138074541804E+021,0.7918128433925134E+022,0.3421312182233796E+024,0.2109673691582008E+005,0.2115280303534217E+005,0.2136770365464021E+005,0.1858373791881988E+005,0.2038743707873422E+005,0.2120249150203319E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2128393735657751E+005,0.1818145793732196E+005,0.1800120429307950E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1844804444188941E+001,0.1877597281674775E+001,0.1851711172051329E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2115881950732780E+005,0.2017145965834983E+005,0.1904837934420291E+005,0.2109673691582008E+005,0.2115280303534217E+005,0.2128409268544006E+005,0.1893562297114412E+005,0.1935167693076961E+005,0.2114495517935921E+005 +0.6340000000000020E-007,0.1004981673987249E+024,0.9399148790182054E+023,0.1393530542713929E+024,0.5005138074541804E+021,0.7903113019701509E+022,0.3422463363990941E+024,0.2104634150277132E+005,0.2114950076591056E+005,0.2136978607286729E+005,0.1856427989641357E+005,0.2017072305253869E+005,0.2118252021011643E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2125898655282616E+005,0.1822697301382946E+005,0.1785566633078212E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1844627269017448E+001,0.1877896454558290E+001,0.1850534164926904E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2118874544987720E+005,0.2033341108951362E+005,0.1902431348490819E+005,0.2104634150277132E+005,0.2114950076591056E+005,0.2128702553094469E+005,0.1898662341473917E+005,0.1921066497031097E+005,0.2112727055206038E+005 +0.6360000000000020E-007,0.1007634397166756E+024,0.9403653414449143E+023,0.1392329309576039E+024,0.4905035313050968E+021,0.7878087329328800E+022,0.3424014956794049E+024,0.2105968440944409E+005,0.2113237446208623E+005,0.2130393586103693E+005,0.1826083889889578E+005,0.2007329453257356E+005,0.2115226477873545E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2125674694738301E+005,0.1813547812001418E+005,0.1762755151798826E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1844611345850253E+001,0.1877293562443116E+001,0.1848651294575557E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2121665340876856E+005,0.2090623927013946E+005,0.1885079172616990E+005,0.2105968440944409E+005,0.2113237446208623E+005,0.2126571453672175E+005,0.1899593355690455E+005,0.1905611154233471E+005,0.2111437196262742E+005 +0.6380000000000020E-007,0.1009536349635082E+024,0.9407657524908775E+023,0.1391328281961131E+024,0.4654778409323878E+021,0.7888097605477883E+022,0.3425166138551194E+024,0.2102332928697430E+005,0.2110257629512093E+005,0.2132382489876931E+005,0.1763564627622641E+005,0.2007819923623152E+005,0.2114078905494928E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2121130780109469E+005,0.1721651371442877E+005,0.1755459264518303E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1844287576408681E+001,0.1870890930017036E+001,0.1848039042804819E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2121805565155040E+005,0.2150771512720812E+005,0.1912182490604768E+005,0.2102332928697430E+005,0.2110257629512093E+005,0.2126259831015297E+005,0.1864861336659531E+005,0.1911785538769364E+005,0.2109517841861522E+005 +0.6400000000000020E-007,0.1011538404864899E+024,0.9405655469678959E+023,0.1390277202965477E+024,0.4704829790069296E+021,0.7898107881626967E+022,0.3426067063404611E+024,0.2100824744057860E+005,0.2109756045163978E+005,0.2130963528177271E+005,0.1808008273289312E+005,0.1990343809626071E+005,0.2112557784540621E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2115646806851003E+005,0.1665748482770693E+005,0.1760007925524604E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1843895024625508E+001,0.1866658659424557E+001,0.1848421334096521E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2123465651009536E+005,0.2175182394518146E+005,0.1949280958438941E+005,0.2100824744057860E+005,0.2109756045163978E+005,0.2124645754391003E+005,0.1876279873182331E+005,0.1916183146930455E+005,0.2108378199175835E+005 +0.6420000000000020E-007,0.1014491436328878E+024,0.9405154955871504E+023,0.1388725610162369E+024,0.4654778409323878E+021,0.7913123295850593E+022,0.3427518553446228E+024,0.2103573895296346E+005,0.2107339807542415E+005,0.2130873315875847E+005,0.1780580765463062E+005,0.1989006679843294E+005,0.2112584494766395E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2108969537006343E+005,0.1645776204238247E+005,0.1761254678019094E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1843414376410817E+001,0.1865078573611167E+001,0.1848525781770340E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2118926641035426E+005,0.2171486279554737E+005,0.1952173049970010E+005,0.2103573895296346E+005,0.2107339807542415E+005,0.2121481645722400E+005,0.1857839885476148E+005,0.1916776141077544E+005,0.2107216611242666E+005 +0.6440000000000021E-007,0.1016893902604658E+024,0.9404153928256595E+023,0.1387524377024479E+024,0.4704829790069296E+021,0.7913123295850593E+022,0.3428669735203372E+024,0.2109539686475780E+005,0.2105001805264599E+005,0.2121669287062224E+005,0.1743062366522551E+005,0.1995657276347869E+005,0.2110072474512694E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2109429349260724E+005,0.1653640216551310E+005,0.1778265336452130E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1843447569759583E+001,0.1865705173049805E+001,0.1849936626966739E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2118698225891440E+005,0.2134550266901989E+005,0.1947050745305409E+005,0.2109539686475780E+005,0.2105001805264599E+005,0.2117503871071939E+005,0.1832804121730866E+005,0.1922755233409330E+005,0.2106827418573845E+005 +0.6460000000000021E-007,0.1020397499256838E+024,0.9404153928256595E+023,0.1385622424556153E+024,0.4554675647833042E+021,0.7943154124297843E+022,0.3430421533529462E+024,0.2112506948761094E+005,0.2101836341495677E+005,0.2117383939609487E+005,0.1753152963890952E+005,0.2000974212191203E+005,0.2108491963047729E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2107767782768299E+005,0.1644538874829579E+005,0.1780161530891945E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1843327556619262E+001,0.1864979451524999E+001,0.1850092269961854E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2113105822719854E+005,0.2027096510741216E+005,0.1948933528237755E+005,0.2112506948761094E+005,0.2101836341495677E+005,0.2113543416054835E+005,0.1803455233823931E+005,0.1926142343876667E+005,0.2105274744533353E+005 +0.6480000000000021E-007,0.1023800993147526E+024,0.9404153928256595E+023,0.1383920677610809E+024,0.4554675647833042E+021,0.7943154124297843E+022,0.3432123280474806E+024,0.2107769251968227E+005,0.2102551174179460E+005,0.2116307561260436E+005,0.1877950779118544E+005,0.1988107030011737E+005,0.2106707949411530E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2111637590691496E+005,0.1584497808305003E+005,0.1774455205010912E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1843606784587301E+001,0.1859988216645074E+001,0.1849622906118107E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2102384368881052E+005,0.2053753098349635E+005,0.1972757695831391E+005,0.2107769251968227E+005,0.2102551174179460E+005,0.2110980549447660E+005,0.1849639589178122E+005,0.1925932223653308E+005,0.2103083443598681E+005 +0.6500000000000021E-007,0.1026603870469270E+024,0.9405154955871504E+023,0.1382669393092173E+024,0.4654778409323878E+021,0.7913123295850593E+022,0.3433574770516424E+024,0.2106075708152573E+005,0.2100280743707937E+005,0.2112761001513264E+005,0.1878988422596946E+005,0.2004132019372024E+005,0.2104523193796969E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2110842477707938E+005,0.1724098788617284E+005,0.1780695377585744E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1843549494012923E+001,0.1871070091062769E+001,0.1850136030856983E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2099368774503353E+005,0.2117210372182688E+005,0.1972720161939710E+005,0.2106075708152573E+005,0.2100280743707937E+005,0.2108330355159803E+005,0.1906150791069833E+005,0.1934613415025778E+005,0.2101173688414864E+005 +0.6520000000000021E-007,0.1029256593648777E+024,0.9400650331604416E+023,0.1381117800289065E+024,0.4654778409323878E+021,0.7958169538521469E+022,0.3434675900892823E+024,0.2103592710526578E+005,0.2092379142654961E+005,0.2113955755729918E+005,0.1855195877964165E+005,0.2005186693233527E+005,0.2102073950994818E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2108904617904007E+005,0.1702071666691062E+005,0.1775149821114244E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1843409688838002E+001,0.1869439496743317E+001,0.1849680197492919E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2101220171962862E+005,0.2140103870139166E+005,0.1969891921273825E+005,0.2103592710526578E+005,0.2092379142654961E+005,0.2108873130909314E+005,0.1896474287363188E+005,0.1932762262213634E+005,0.2098408038654243E+005 +0.6540000000000022E-007,0.1031458854401575E+024,0.9401651359219325E+023,0.1379966618531921E+024,0.4554675647833042E+021,0.7968179814670553E+022,0.3435827082649967E+024,0.2104071619655855E+005,0.2087685109151377E+005,0.2110751804856138E+005,0.1856585470295055E+005,0.2016516202988992E+005,0.2099912101401556E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2113773483222390E+005,0.1622024335100898E+005,0.1759637597697672E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1843760475472059E+001,0.1863150052608018E+001,0.1848390281857740E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2097626465931210E+005,0.2173142173114760E+005,0.1961464212716248E+005,0.2104071619655855E+005,0.2087685109151377E+005,0.2107730158090053E+005,0.1885157017290171E+005,0.1931106949995241E+005,0.2096755597847420E+005 +0.6560000000000022E-007,0.1034361834484809E+024,0.9405655469678959E+023,0.1378515128490304E+024,0.4354470124851370E+021,0.7968179814670553E+022,0.3437478778214566E+024,0.2100989929262271E+005,0.2088854483188390E+005,0.2110003606351804E+005,0.1732859490110115E+005,0.2022897969045835E+005,0.2099007600499603E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2108137520945204E+005,0.1618343701206629E+005,0.1779116419290801E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1843354278307723E+001,0.1862846263740894E+001,0.1850006525282166E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2095641304169130E+005,0.1946313066639813E+005,0.1953298522868106E+005,0.2100989929262271E+005,0.2088854483188390E+005,0.2105303504680136E+005,0.1763980957115668E+005,0.1936738000005315E+005,0.2095164951315368E+005 +0.6580000000000022E-007,0.1037515071471771E+024,0.9406155983486413E+023,0.1376913484306450E+024,0.4304418744105952E+021,0.7973184952745094E+022,0.3439080422398419E+024,0.2093573158349659E+005,0.2087487054584765E+005,0.2106795548790985E+005,0.1715403533307082E+005,0.2039876144836460E+005,0.2095484204364227E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2102293413356039E+005,0.1627958497336395E+005,0.1774980477897450E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1842930844768180E+001,0.1863637018937659E+001,0.1849666234222836E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2104528489432962E+005,0.1885639144947906E+005,0.1931540674993108E+005,0.2093573158349659E+005,0.2087487054584765E+005,0.2104920439533343E+005,0.1741265247240173E+005,0.1936712065558383E+005,0.2092374068773573E+005 +0.6600000000000022E-007,0.1039817434986060E+024,0.9411161121560954E+023,0.1375962508072287E+024,0.4254367363360533E+021,0.7933143848148760E+022,0.3440481861059291E+024,0.2091310227614208E+005,0.2089128000030674E+005,0.2105523823788271E+005,0.1775340423008563E+005,0.2038931201253141E+005,0.2094799300149366E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2096089361896461E+005,0.1699393802623274E+005,0.1789861410603729E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1842478821283229E+001,0.1869238448669515E+001,0.1850883433310147E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2103957084590276E+005,0.1937955034805802E+005,0.1906181698742500E+005,0.2091310227614208E+005,0.2089128000030674E+005,0.2102525455045347E+005,0.1802019782313565E+005,0.1932886752921127E+005,0.2091187946184702E+005 +0.6620000000000022E-007,0.1042420106784822E+024,0.9413163176790772E+023,0.1374861377695888E+024,0.4354470124851370E+021,0.7893102743552426E+022,0.3441883299720162E+024,0.2087075821742073E+005,0.2094551526871452E+005,0.2109024229368652E+005,0.1876004944204168E+005,0.2032475805272265E+005,0.2096368491236802E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2087574107031163E+005,0.1678524495358222E+005,0.1767480232569441E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841854155321246E+001,0.1867650165602800E+001,0.1849045187485837E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2098049625205244E+005,0.1910708515587288E+005,0.1905421274700178E+005,0.2087075821742073E+005,0.2094551526871452E+005,0.2100041692779726E+005,0.1832406734772380E+005,0.1923833238434634E+005,0.2090233809344547E+005 +0.6640000000000022E-007,0.1045423189629547E+024,0.9410160093946047E+023,0.1373259733512035E+024,0.4404521505596788E+021,0.7913123295850593E+022,0.3443234687000289E+024,0.2085467923575707E+005,0.2098106011010917E+005,0.2106885683570709E+005,0.1945964213575794E+005,0.2021330088713218E+005,0.2095811405848211E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2085086436714668E+005,0.1557203886592212E+005,0.1739035675246763E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841670728201357E+001,0.1857595251566470E+001,0.1846642539087808E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2095003082155015E+005,0.1973279875216458E+005,0.1883974407455833E+005,0.2085467923575707E+005,0.2098106011010917E+005,0.2097544070943906E+005,0.1848622800203764E+005,0.1905067521999048E+005,0.2089289282000297E+005 +0.6660000000000023E-007,0.1047375193478618E+024,0.9408658552523684E+023,0.1372208654516381E+024,0.4404521505596788E+021,0.7928138710074219E+022,0.3444135611853706E+024,0.2086704163375716E+005,0.2095007783655877E+005,0.2106084096011383E+005,0.1969054994054528E+005,0.2004084043469271E+005,0.2094641562235419E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2087391466426564E+005,0.1564965764529959E+005,0.1728884454049082E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841840702854263E+001,0.1858284043654063E+001,0.1845766478045025E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2091152070662643E+005,0.1935322949030090E+005,0.1877280152356884E+005,0.2086704163375716E+005,0.2095007783655877E+005,0.2096687078526987E+005,0.1849728256888533E+005,0.1892838361690509E+005,0.2088184221304180E+005 +0.6680000000000023E-007,0.1050178070800361E+024,0.9407657524908775E+023,0.1370757164474764E+024,0.4404521505596788E+021,0.7938148986223302E+022,0.3445486999133833E+024,0.2085135150921528E+005,0.2091101019826522E+005,0.2105035440869428E+005,0.2071904055510550E+005,0.1997848545416868E+005,0.2092653313881694E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2083868441654992E+005,0.1665858556656851E+005,0.1749536893665310E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841580764815771E+001,0.1866667265319440E+001,0.1847538401111546E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2090162113162021E+005,0.1912288732964050E+005,0.1879674852579121E+005,0.2085135150921528E+005,0.2091101019826522E+005,0.2094989897832001E+005,0.1915032833356845E+005,0.1896335759797864E+005,0.2086117465994489E+005 +0.6700000000000023E-007,0.1052080023268687E+024,0.9409659580138593E+023,0.1369856239621346E+024,0.4354470124851370E+021,0.7928138710074219E+022,0.3446538078129486E+024,0.2086187613066706E+005,0.2087635155271564E+005,0.2106467965438933E+005,0.2034577826750913E+005,0.1990082841534198E+005,0.2092367496133942E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2075130376598915E+005,0.1686373662526201E+005,0.1763189712872713E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840932347488324E+001,0.1868252039564693E+001,0.1848687606273642E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2092391214126101E+005,0.1856636905344397E+005,0.1863517703215073E+005,0.2086187613066706E+005,0.2087635155271564E+005,0.2093919400528032E+005,0.1888046369108809E+005,0.1891876465333409E+005,0.2084935767848096E+005 +0.6720000000000023E-007,0.1054132129879249E+024,0.9409159066331138E+023,0.1368705057864202E+024,0.4254367363360533E+021,0.7953164400446927E+022,0.3447539105744394E+024,0.2075678432071343E+005,0.2088282566042834E+005,0.2107775138638980E+005,0.2017483064823640E+005,0.1978303249899166E+005,0.2089542919319325E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2078717863373431E+005,0.1702071666691062E+005,0.1774458034414122E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841199201413234E+001,0.1869439496743317E+001,0.1849623139573516E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2090223123922453E+005,0.1732101839708093E+005,0.1883684484759579E+005,0.2075678432071343E+005,0.2088282566042834E+005,0.2094823569939018E+005,0.1848560261708001E+005,0.1895630912137979E+005,0.2082285393468040E+005 +0.6740000000000023E-007,0.1056484544774284E+024,0.9411661635368409E+023,0.1367804133010784E+024,0.4404521505596788E+021,0.7898107881626967E+022,0.3448840441643776E+024,0.2075416521418320E+005,0.2086190701760970E+005,0.2107403863883442E+005,0.2128409185785476E+005,0.1963283062139877E+005,0.2088542585008907E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2075637978381900E+005,0.1792594727677733E+005,0.1783137615155147E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840970159681891E+001,0.1875890214988654E+001,0.1850335902710949E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2087554036732825E+005,0.1695504094209348E+005,0.1883680748182099E+005,0.2075416521418320E+005,0.2086190701760970E+005,0.2093052141932646E+005,0.1910872082603156E+005,0.1891383782575149E+005,0.2080926351506678E+005 +0.6760000000000023E-007,0.1059537678999755E+024,0.9417167287250404E+023,0.1366352642969167E+024,0.4204315982615116E+021,0.7883092467403342E+022,0.3450642291350610E+024,0.2070333467172875E+005,0.2086899333104503E+005,0.2105787135778704E+005,0.2066578563894440E+005,0.1960949539308155E+005,0.2086389592154915E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2075442193219873E+005,0.1818579271926020E+005,0.1791164573374247E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840955577412057E+001,0.1877625837533651E+001,0.1850989089346485E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2082523660222447E+005,0.1670161405462623E+005,0.1890343540100516E+005,0.2070333467172875E+005,0.2086899333104503E+005,0.2090819834616784E+005,0.1883596205609464E+005,0.1894465399287804E+005,0.2078721184028558E+005 +0.6780000000000024E-007,0.1061940145275535E+024,0.9417167287250404E+023,0.1365251512592768E+024,0.4304418744105952E+021,0.7863071915105174E+022,0.3451843524488501E+024,0.2063714390986823E+005,0.2086385024674294E+005,0.2101560065228142E+005,0.1915089413731778E+005,0.1924766931903421E+005,0.2081517311597649E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2074131293845671E+005,0.1884669058996074E+005,0.1817925863150766E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840857871462603E+001,0.1881829119733247E+001,0.1853126193239941E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2090939498876072E+005,0.1762138615570864E+005,0.1897354822807158E+005,0.2063714390986823E+005,0.2086385024674294E+005,0.2091074011613821E+005,0.1862320375242463E+005,0.1887876585208623E+005,0.2076463793104400E+005 +0.6800000000000024E-007,0.1063691943601624E+024,0.9420670883902583E+023,0.1364350587739350E+024,0.4104213221124280E+021,0.7868077053179716E+022,0.3452894603484154E+024,0.2064150256045639E+005,0.2080669671545777E+005,0.2100208276883866E+005,0.1913700597304662E+005,0.1933837864984454E+005,0.2079756762747016E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2078114527293053E+005,0.1835297053797194E+005,0.1815106773763100E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841154385069807E+001,0.1878717069427628E+001,0.1852903957380075E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2086874320983234E+005,0.1769296460336257E+005,0.1891089113199462E+005,0.2064150256045639E+005,0.2080669671545777E+005,0.2090364044178053E+005,0.1850301224278234E+005,0.1889258980724871E+005,0.2074775814249879E+005 +0.6820000000000024E-007,0.1066194512638895E+024,0.9422672939132401E+023,0.1363099303220715E+024,0.4004110459633443E+021,0.7868077053179716E+022,0.3454245990764281E+024,0.2059672036154497E+005,0.2078347081486959E+005,0.2100855735469929E+005,0.1978631359001139E+005,0.1939262603476496E+005,0.2078181416689509E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2073580846217680E+005,0.1710607275160377E+005,0.1813535778667475E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840816808893139E+001,0.1870076227578351E+001,0.1852779820041682E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2088639043346602E+005,0.1861083176700471E+005,0.1877488136362523E+005,0.2059672036154497E+005,0.2078347081486959E+005,0.2089944544463343E+005,0.1871453242220627E+005,0.1887240932354156E+005,0.2072566502437037E+005 +0.6840000000000024E-007,0.1068446824772439E+024,0.9426176535784581E+023,0.1362098275605807E+024,0.3954059078888026E+021,0.7843051362807007E+022,0.3455547326663662E+024,0.2056710382355027E+005,0.2079026179250641E+005,0.2094564809569771E+005,0.1951449296418432E+005,0.1952644636855062E+005,0.2075236702403835E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2078073284444857E+005,0.1704952898863032E+005,0.1794740800790564E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841151320591191E+001,0.1869655124300719E+001,0.1851278270576167E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2086330009038083E+005,0.1825233886191143E+005,0.1897590237636611E+005,0.2056710382355027E+005,0.2079026179250641E+005,0.2087719032867725E+005,0.1847616707975601E+005,0.1893906292988336E+005,0.2071086257350306E+005 +0.6860000000000024E-007,0.1070498931383001E+024,0.9424674994362217E+023,0.1361147299371644E+024,0.4104213221124280E+021,0.7828035948583382E+022,0.3456498302897824E+024,0.2056640458141721E+005,0.2074055840110942E+005,0.2093206640958320E+005,0.1990532167432963E+005,0.1966197317908026E+005,0.2073661773727151E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2080400727580690E+005,0.1743707612960463E+005,0.1813899621412678E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841324072639108E+001,0.1872487792817952E+001,0.1852808588898948E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2083300174342547E+005,0.1829996775957555E+005,0.1860689462992512E+005,0.2056640458141721E+005,0.2074055840110942E+005,0.2086863896579429E+005,0.1876563722267178E+005,0.1894227674575791E+005,0.2069398797604427E+005 +0.6880000000000025E-007,0.1072200678328345E+024,0.9430681160051667E+023,0.1360496631421953E+024,0.4004110459633443E+021,0.7787994843987047E+022,0.3457649484654969E+024,0.2052733858463381E+005,0.2072545143867016E+005,0.2092325094009687E+005,0.2056553789333727E+005,0.1954520631253756E+005,0.2071507765083433E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2083045345217536E+005,0.1682154749015424E+005,0.1800688065370246E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841519911513125E+001,0.1867929215096957E+001,0.1851756703172875E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2081070473768206E+005,0.1840775307888980E+005,0.1880991247857842E+005,0.2052733858463381E+005,0.2072545143867016E+005,0.2086537186765434E+005,0.1891888745040846E+005,0.1891482892095142E+005,0.2067619822922124E+005 +0.6900000000000025E-007,0.1074703247365616E+024,0.9429680132436760E+023,0.1359245346903318E+024,0.4054161840378861E+021,0.7787994843987047E+022,0.3458850717792859E+024,0.2048969290322504E+005,0.2071263647971984E+005,0.2092795034955098E+005,0.2030287406524043E+005,0.1955793398902364E+005,0.2070149890060098E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2080582193022091E+005,0.1699261562097033E+005,0.1791870231309805E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841337525946587E+001,0.1869228504308844E+001,0.1851046239286978E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2080870335741915E+005,0.1762590074606057E+005,0.1869930703784408E+005,0.2048969290322504E+005,0.2071263647971984E+005,0.2086021891194784E+005,0.1862268886368850E+005,0.1886438334501342E+005,0.2065729662504757E+005 +0.6920000000000025E-007,0.1077155765022142E+024,0.9433183729088939E+023,0.1358194267907664E+024,0.4054161840378861E+021,0.7752958877465255E+022,0.3460252156453731E+024,0.2044467470891145E+005,0.2072540892574533E+005,0.2091254645915920E+005,0.2057093344390871E+005,0.1945723413276339E+005,0.2068287656479239E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2080939941185764E+005,0.1704881757501810E+005,0.1804516627016054E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841364041654679E+001,0.1869649808748374E+001,0.1852063070806071E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2078467004214067E+005,0.1772196289649804E+005,0.1851684746785384E+005,0.2044467470891145E+005,0.2072540892574533E+005,0.2084740095670861E+005,0.1878291444767982E+005,0.1880107962496651E+005,0.2064050954963673E+005 +0.6940000000000025E-007,0.1080108796486121E+024,0.9432683215281485E+023,0.1356642675104556E+024,0.4004110459633443E+021,0.7767974291688880E+022,0.3461703646495349E+024,0.2041351735616347E+005,0.2070267578559130E+005,0.2092617229487552E+005,0.2014541516482291E+005,0.1940854656394377E+005,0.2067035741558766E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2078794780566559E+005,0.1721987891902434E+005,0.1784836751363025E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841204913075103E+001,0.1870915594209380E+001,0.1850474645435742E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2074717794178063E+005,0.1679387633184745E+005,0.1864128681776358E+005,0.2041351735616347E+005,0.2070267578559130E+005,0.2083664299081100E+005,0.1837323373096826E+005,0.1876310351128588E+005,0.2061873741762484E+005 +0.6960000000000025E-007,0.1082761519665629E+024,0.9435185784318755E+023,0.1355391390585921E+024,0.3954059078888026E+021,0.7752958877465255E+022,0.3463155136536965E+024,0.2037362330088639E+005,0.2067670386035347E+005,0.2091658097199255E+005,0.1964770092220630E+005,0.1932120777098972E+005,0.2064430670122665E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2073620578808372E+005,0.1684783966762483E+005,0.1797076246152570E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840819773593962E+001,0.1868130583972916E+001,0.1851466514921654E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2080166635940321E+005,0.1703704177451157E+005,0.1832736276948081E+005,0.2037362330088639E+005,0.2067670386035347E+005,0.2083444645464237E+005,0.1812591495611770E+005,0.1866616636285481E+005,0.2059575942751921E+005 +0.6980000000000025E-007,0.1085314140083645E+024,0.9439690408585844E+023,0.1354190157448031E+024,0.3803904936651771E+021,0.7737943463241630E+022,0.3464656677959328E+024,0.2038816525582550E+005,0.2067448456315076E+005,0.2087554960559572E+005,0.2012631459443852E+005,0.1923388232938975E+005,0.2063060596902365E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2068680496187637E+005,0.1504364888970842E+005,0.1793033328067589E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840450314672607E+001,0.1852722399166425E+001,0.1851140340809922E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2079549833872946E+005,0.1776709938547815E+005,0.1842618670319294E+005,0.2038816525582550E+005,0.2067448456315076E+005,0.2080136184758072E+005,0.1806360167639173E+005,0.1864588627584284E+005,0.2058621210491384E+005 +0.7000000000000026E-007,0.1088317222928370E+024,0.9438689380970935E+023,0.1352588513264177E+024,0.3753853555906353E+021,0.7757964015539797E+022,0.3466108168000945E+024,0.2032089295597108E+005,0.2063783708555339E+005,0.2091793836927572E+005,0.1952022791279987E+005,0.1942015991055778E+005,0.2061916015133547E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2067353062478754E+005,0.1562447481277951E+005,0.1785201333599343E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840350746267983E+001,0.1858061301123215E+001,0.1850504381857020E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2074553793155553E+005,0.1710723100532162E+005,0.1844183811250286E+005,0.2032089295597108E+005,0.2063783708555339E+005,0.2080177519579570E+005,0.1776105117769848E+005,0.1871094122636826E+005,0.2055605029276663E+005 +0.7020000000000026E-007,0.1090119072635205E+024,0.9439690408585844E+023,0.1351837742552996E+024,0.3853956317397189E+021,0.7727933187092546E+022,0.3467059144235108E+024,0.2031069477069675E+005,0.2065900366317212E+005,0.2087454318111759E+005,0.1977669007204719E+005,0.1940001055875454E+005,0.2060448533867867E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2066296505665671E+005,0.1530590678286876E+005,0.1802118549017828E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840271407054940E+001,0.1855181921676349E+001,0.1851871321034869E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2072302609138222E+005,0.1708975144176244E+005,0.1866333582902294E+005,0.2031069477069675E+005,0.2065900366317212E+005,0.2077331980691634E+005,0.1778287083419921E+005,0.1881232350626691E+005,0.2054970181039576E+005 +0.7040000000000026E-007,0.1092721744433967E+024,0.9437688353356026E+023,0.1350536406653615E+024,0.3954059078888026E+021,0.7727933187092546E+022,0.3468260377372998E+024,0.2029256767738727E+005,0.2067950727255443E+005,0.2083022073457732E+005,0.1970345197082681E+005,0.1959544017310052E+005,0.2059101661151135E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2063544777447781E+005,0.1546461482561818E+005,0.1798386307013299E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840064403314319E+001,0.1856630852848318E+001,0.1851571901664576E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2072702205715365E+005,0.1722245544696252E+005,0.1835430419417005E+005,0.2029256767738727E+005,0.2067950727255443E+005,0.2074764956095198E+005,0.1783198635642934E+005,0.1879763451367898E+005,0.2053895329146031E+005 +0.7060000000000026E-007,0.1094873953806020E+024,0.9442192977623114E+023,0.1349435276277216E+024,0.3703802175160935E+021,0.7732938325167088E+022,0.3469561713272379E+024,0.2028061418492363E+005,0.2069545824878477E+005,0.2081876027612649E+005,0.1890163595846642E+005,0.1958292372376731E+005,0.2058579326568554E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2055409568895619E+005,0.1535945421570413E+005,0.1802279709420674E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1839449270092004E+001,0.1855674045461771E+001,0.1851884222952357E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2072429448395942E+005,0.1623748240273209E+005,0.1850620317770239E+005,0.2028061418492363E+005,0.2069545824878477E+005,0.2071995573217310E+005,0.1716563717017812E+005,0.1884697798692470E+005,0.2052910876794633E+005 +0.7080000000000026E-007,0.1096125238324655E+024,0.9445696574275294E+023,0.1348984813850507E+024,0.3703802175160935E+021,0.7697902358645295E+022,0.3470362535364306E+024,0.2029146605741929E+005,0.2068935136296154E+005,0.2079224951801341E+005,0.1844479416712129E+005,0.1953969256207154E+005,0.2057577905442517E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2057379849713820E+005,0.1440548148296718E+005,0.1772063999670945E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1839598683785205E+001,0.1846373738646059E+001,0.1849425347296696E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2069857178594637E+005,0.1796805698431166E+005,0.1858962330821486E+005,0.2029146605741929E+005,0.2068935136296154E+005,0.2070610152865776E+005,0.1721617949475244E+005,0.1877111123396979E+005,0.2052393216136111E+005 +0.7100000000000027E-007,0.1098677858742671E+024,0.9444195032852930E+023,0.1347683477951126E+024,0.3753853555906353E+021,0.7702907496719837E+022,0.3471563768502195E+024,0.2023673276207277E+005,0.2074271940750388E+005,0.2077334426531798E+005,0.1760633733134233E+005,0.1938804856388562E+005,0.2056102426597567E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2055560955415816E+005,0.1450109491787108E+005,0.1784370527765216E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1839460760156122E+001,0.1847359537450216E+001,0.1850436601610954E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2068457218856718E+005,0.1825245937397934E+005,0.1835843160605775E+005,0.2023673276207277E+005,0.2074271940750388E+005,0.2068882610941722E+005,0.1695729077857406E+005,0.1867029237637517E+005,0.2051158595672221E+005 +0.7120000000000027E-007,0.1101330581922179E+024,0.9442693491430569E+023,0.1346282039290255E+024,0.3753853555906353E+021,0.7717922910943462E+022,0.3472815053020831E+024,0.2019480837627792E+005,0.2072623491314946E+005,0.2078314828980927E+005,0.1768245583338856E+005,0.1933115467356582E+005,0.2054547321145103E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2063147367978909E+005,0.1444036222277131E+005,0.1750719437049258E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840034463154452E+001,0.1846734838683437E+001,0.1847638629448878E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2059827596056278E+005,0.1865329513403543E+005,0.1819006698776613E+005,0.2019480837627792E+005,0.2072623491314946E+005,0.2068829040983649E+005,0.1709157438186093E+005,0.1850573218969948E+005,0.2048971757500952E+005 +0.7140000000000027E-007,0.1103682996817213E+024,0.9440190922393296E+023,0.1344930652010128E+024,0.3703802175160935E+021,0.7752958877465255E+022,0.3473866132016485E+024,0.2019491894407909E+005,0.2069035129052695E+005,0.2079618163367688E+005,0.1819084557943824E+005,0.1921891057065969E+005,0.2053841577171827E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2055743593614009E+005,0.1517483253585013E+005,0.1757569333516318E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1839474619999971E+001,0.1853963021464228E+001,0.1848216622458015E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2059714393393950E+005,0.1854018462695476E+005,0.1842024100330479E+005,0.2019491894407909E+005,0.2069035129052695E+005,0.2067376842253934E+005,0.1747696682860310E+005,0.1854218540275743E+005,0.2047515842063740E+005 +0.7160000000000027E-007,0.1105084435478085E+024,0.9442192977623114E+023,0.1344330035441183E+024,0.3703802175160935E+021,0.7732938325167088E+022,0.3474666954108412E+024,0.2019796978627411E+005,0.2063619770063481E+005,0.2076262119919856E+005,0.1811127759203671E+005,0.1920408671131698E+005,0.2051117276704347E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2060123062187436E+005,0.1600556817800177E+005,0.1741710645551339E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1839806249576471E+001,0.1861358983122804E+001,0.1846871738713258E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2059788002809648E+005,0.1833524373804496E+005,0.1862001471697230E+005,0.2019796978627411E+005,0.2063619770063481E+005,0.2067103823439941E+005,0.1760532114081724E+005,0.1855145767264137E+005,0.2046067610181221E+005 +0.7180000000000027E-007,0.1107887312799828E+024,0.9446197088082748E+023,0.1343028699541802E+024,0.3603699413670099E+021,0.7712917772868921E+022,0.3476268598292265E+024,0.2021307476931343E+005,0.2058860675170726E+005,0.2074125377180261E+005,0.1821699183248061E+005,0.1929739520736101E+005,0.2049679150414642E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2056297931670957E+005,0.1698910298050230E+005,0.1714726550497396E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1839516672348866E+001,0.1869202082247179E+001,0.1844527799943525E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2058138760432739E+005,0.1780399088941772E+005,0.1880680893424427E+005,0.2021307476931343E+005,0.2058860675170726E+005,0.2064655831328192E+005,0.1776261965829780E+005,0.1857460662349237E+005,0.2044369887819588E+005 +0.7200000000000027E-007,0.1109939419410391E+024,0.9443694519045476E+023,0.1341877517784658E+024,0.3603699413670099E+021,0.7737943463241630E+022,0.3477169523145682E+024,0.2025953045551600E+005,0.2054136866758425E+005,0.2069017387297662E+005,0.1862548746738756E+005,0.1927493848034706E+005,0.2047866108539086E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2054511711791984E+005,0.1714716967776149E+005,0.1733744837496954E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1839381089971003E+001,0.1870380589685762E+001,0.1846187178799989E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2058111511331517E+005,0.1843444884977793E+005,0.1880746135086919E+005,0.2025953045551600E+005,0.2054136866758425E+005,0.2061927094109320E+005,0.1816742053889052E+005,0.1861589666148951E+005,0.2043615810469936E+005 +0.7220000000000028E-007,0.1112391937066916E+024,0.9442192977623114E+023,0.1340526130504531E+024,0.3553648032924681E+021,0.7762969153614338E+022,0.3478320704902826E+024,0.2024543376070111E+005,0.2050383039298302E+005,0.2068376833899793E+005,0.1908690064538086E+005,0.1940840078173882E+005,0.2046464483310867E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2050439890552750E+005,0.1711689244713243E+005,0.1744500214583799E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1839071162541594E+001,0.1870156496250964E+001,0.1847110029419466E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2059429056460777E+005,0.1938837132920776E+005,0.1847835443817903E+005,0.2024543376070111E+005,0.2050383039298302E+005,0.2060936807480648E+005,0.1863839816022646E+005,0.1860708373328098E+005,0.2041762923926101E+005 +0.7240000000000028E-007,0.1114343940915987E+024,0.9442693491430569E+023,0.1339525102889623E+024,0.3503596652179263E+021,0.7767974291688880E+022,0.3479321732517736E+024,0.2030421561611816E+005,0.2046324507712581E+005,0.2065707081717288E+005,0.1901357794233768E+005,0.1950359218201353E+005,0.2046404876508317E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2044824529735149E+005,0.1620773497750002E+005,0.1725069013459047E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1838641782575349E+001,0.1863046963100639E+001,0.1845434609872351E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2059502252599040E+005,0.1996334154927711E+005,0.1838100820171712E+005,0.2030421561611816E+005,0.2046324507712581E+005,0.2058277947036319E+005,0.1852867815677716E+005,0.1856826057248714E+005,0.2041407628493296E+005 +0.7260000000000028E-007,0.1116646304430277E+024,0.9442693491430569E+023,0.1338273818370988E+024,0.3403493890688427E+021,0.7787994843987047E+022,0.3480472914274879E+024,0.2030531992913612E+005,0.2045776022409274E+005,0.2062807115930544E+005,0.1933327975671830E+005,0.1949078256255510E+005,0.2045160170489606E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2044665492859180E+005,0.1631773400995229E+005,0.1723437899327910E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1838629588439963E+001,0.1863948250789926E+001,0.1845292299214750E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2056132161577712E+005,0.2080711071160644E+005,0.1821755848698458E+005,0.2030531992913612E+005,0.2045776022409274E+005,0.2055977438571509E+005,0.1894383053414038E+005,0.1851052167841193E+005,0.2040302556501396E+005 +0.7280000000000028E-007,0.1119299027609784E+024,0.9443194005238021E+023,0.1336972482471607E+024,0.3403493890688427E+021,0.7782989705912506E+022,0.3481824301555006E+024,0.2027202463414223E+005,0.2041870925813956E+005,0.2063185068571672E+005,0.1925361356638717E+005,0.1938058157965775E+005,0.2042905369168963E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2037930286195503E+005,0.1695376982923080E+005,0.1746524447492339E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1838111471335222E+001,0.1868935711733119E+001,0.1847282480067257E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2059529310456505E+005,0.2039179300499208E+005,0.1825577676549320E+005,0.2027202463414223E+005,0.2041870925813956E+005,0.2055327252616596E+005,0.1895925920067171E+005,0.1853531510756811E+005,0.2037969862435853E+005 +0.7300000000000028E-007,0.1121551339743327E+024,0.9444695546660385E+023,0.1335821300714462E+024,0.3303391129197591E+021,0.7787994843987047E+022,0.3483025534692896E+024,0.2028282145050495E+005,0.2041519722580713E+005,0.2061201909172413E+005,0.1865215300392301E+005,0.1931365017284240E+005,0.2042175478912073E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2033533090205742E+005,0.1657236033556368E+005,0.1747072972120505E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1837771412218351E+001,0.1865989751568041E+001,0.1847329143649596E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2057819531983748E+005,0.1987657625107939E+005,0.1828071839541811E+005,0.2028282145050495E+005,0.2041519722580713E+005,0.2052776105586588E+005,0.1844358506804675E+005,0.1851474827988177E+005,0.2037137873042991E+005 +0.7320000000000028E-007,0.1123603446353890E+024,0.9447198115697655E+023,0.1334920375861045E+024,0.3303391129197591E+021,0.7762969153614338E+022,0.3484176716450041E+024,0.2026831272103084E+005,0.2045357767535333E+005,0.2060172779193062E+005,0.1940772844525307E+005,0.1936708725251256E+005,0.2042539469116432E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2031353966981695E+005,0.1695174112486966E+005,0.1772102883873344E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1837602359208545E+001,0.1868920384760661E+001,0.1849428564016706E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2051178024019440E+005,0.1879315772110657E+005,0.1791687008161917E+005,0.2026831272103084E+005,0.2045357767535333E+005,0.2049796769602377E+005,0.1856055219482197E+005,0.1849917517273700E+005,0.2036549940319397E+005 +0.7340000000000029E-007,0.1125755655725943E+024,0.9449700684734926E+023,0.1333869296865391E+024,0.3203288367706755E+021,0.7757964015539797E+022,0.3485377949587931E+024,0.2028584400527255E+005,0.2042177845358191E+005,0.2057452290399454E+005,0.1842934039784755E+005,0.1959557612440458E+005,0.2041610713912288E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2019682607572180E+005,0.1723410453555585E+005,0.1816536994203451E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1836690887465612E+001,0.1871019752344791E+001,0.1853016789158827E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2056172990883705E+005,0.1881930536996877E+005,0.1767410963856859E+005,0.2028584400527255E+005,0.2042177845358191E+005,0.2046931143182649E+005,0.1821738059925737E+005,0.1864809135392593E+005,0.2035455776014318E+005 +0.7360000000000029E-007,0.1127257197148305E+024,0.9450701712349835E+023,0.1333118526154210E+024,0.3153236986961337E+021,0.7757964015539797E+022,0.3486178771679857E+024,0.2033622257279789E+005,0.2040841876464749E+005,0.2056704693647657E+005,0.1749781680865347E+005,0.1978116062924596E+005,0.2042914237187673E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2018035140166865E+005,0.1832125330952343E+005,0.1820608707124128E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1836561404930788E+001,0.1878511537002537E+001,0.1853337066222191E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2046569962876314E+005,0.1904255557430331E+005,0.1758411542691946E+005,0.2033622257279789E+005,0.2040841876464749E+005,0.2043351713164577E+005,0.1817184526280843E+005,0.1871405528464325E+005,0.2035494327001044E+005 +0.7380000000000029E-007,0.1130710742419739E+024,0.9449200170927473E+023,0.1331316676447374E+024,0.3153236986961337E+021,0.7772979429763422E+022,0.3487830467244456E+024,0.2033559945057744E+005,0.2039109946675746E+005,0.2051969875584013E+005,0.1664511644171724E+005,0.1968326384038156E+005,0.2040303239301774E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2013298691047113E+005,0.1879083049263489E+005,0.1822997526649976E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1836187998822101E+001,0.1881485050941416E+001,0.1853524320099439E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2046888069927316E+005,0.1893177982323615E+005,0.1781965655678984E+005,0.2033559945057744E+005,0.2039109946675746E+005,0.2040096127191741E+005,0.1789636607892402E+005,0.1874638523849709E+005,0.2033796183154192E+005 +0.7400000000000029E-007,0.1133013105934028E+024,0.9451202226157289E+023,0.1330215546070975E+024,0.3103185606215919E+021,0.7762969153614338E+022,0.3489081751763091E+024,0.2029893641336191E+005,0.2036058816498256E+005,0.2053025965999127E+005,0.1647957783261766E+005,0.1965832805871790E+005,0.2038617876254370E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2013335016288928E+005,0.1867256507542059E+005,0.1829603038756182E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1836190869072044E+001,0.1880749948633427E+001,0.1854039631717679E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2043500075344156E+005,0.1872761658638554E+005,0.1788015098862748E+005,0.2029893641336191E+005,0.2036058816498256E+005,0.2039578134814582E+005,0.1773242646338402E+005,0.1877095238838249E+005,0.2031627956381325E+005 +0.7420000000000029E-007,0.1135665829113535E+024,0.9451702739964743E+023,0.1329064364313831E+024,0.3253339748452173E+021,0.7727933187092546E+022,0.3490433139043219E+024,0.2026861874497472E+005,0.2037450897026059E+005,0.2045909358284541E+005,0.1836613591957478E+005,0.1961662822848306E+005,0.2035361186366354E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2012864766641098E+005,0.1786109329971216E+005,0.1834641133067468E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1836153704381861E+001,0.1875449325666712E+001,0.1854430236145912E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2047274969853749E+005,0.1961669506953342E+005,0.1772059400960967E+005,0.2026861874497472E+005,0.2037450897026059E+005,0.2037433286984339E+005,0.1859214826952578E+005,0.1871974886029173E+005,0.2030169068961252E+005 +0.7440000000000030E-007,0.1138468706435279E+024,0.9451702739964743E+023,0.1327813079795195E+024,0.3403493890688427E+021,0.7697902358645295E+022,0.3491834577704090E+024,0.2031597106805273E+005,0.2033380136387074E+005,0.2044856835734491E+005,0.1927199782029120E+005,0.1953877191922943E+005,0.2035306786905784E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2005917501434539E+005,0.1745585244630212E+005,0.1821664902042769E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835602679469251E+001,0.1872621910918514E+001,0.1853419917800357E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2043199974547061E+005,0.1988876205485783E+005,0.1791013968898361E+005,0.2031597106805273E+005,0.2033380136387074E+005,0.2033915464174492E+005,0.1895662689203330E+005,0.1870594488639490E+005,0.2029279452768647E+005 +0.7460000000000030E-007,0.1140170453380623E+024,0.9456707878039284E+023,0.1327112360464759E+024,0.3303391129197591E+021,0.7667871530198044E+022,0.3492935708080488E+024,0.2025557163800811E+005,0.2034661883387594E+005,0.2044817393189446E+005,0.2025152601961940E+005,0.1994502981636199E+005,0.2034657825040795E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2004865034707500E+005,0.1733109647297053E+005,0.1801063798083927E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835518879522795E+001,0.1871725461574016E+001,0.1851786826012148E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2040577681867241E+005,0.1933449027195693E+005,0.1796742961690503E+005,0.2025557163800811E+005,0.2034661883387594E+005,0.2032848626463547E+005,0.1918915618582099E+005,0.1884498366669695E+005,0.2027595040270438E+005 +0.7480000000000030E-007,0.1141722046183731E+024,0.9457208391846739E+023,0.1326311538372833E+024,0.3253339748452173E+021,0.7672876668272585E+022,0.3493736530172416E+024,0.2026511545411199E+005,0.2034797268410003E+005,0.2037988996927182E+005,0.2117127610126889E+005,0.1998937832257625E+005,0.2032590356719116E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2004335658211394E+005,0.1747593487841760E+005,0.1806059902480736E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835476697012161E+001,0.1872765046774048E+001,0.1852186208618539E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2042272781546378E+005,0.1922847965049186E+005,0.1809635911967445E+005,0.2026511545411199E+005,0.2034797268410003E+005,0.2030205728530648E+005,0.1959896878302507E+005,0.1891548794707176E+005,0.2027130760120500E+005 +0.7500000000000030E-007,0.1143523895890566E+024,0.9460211474691464E+023,0.1325560767661651E+024,0.3253339748452173E+021,0.7642845839825335E+022,0.3494787609168070E+024,0.2024258631299486E+005,0.2037535491925321E+005,0.2033420569969629E+005,0.2165436565497077E+005,0.1995739194104919E+005,0.2030835425976899E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2005084583391285E+005,0.1681060392320901E+005,0.1793236515741558E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835536367565257E+001,0.1867845218249137E+001,0.1851156767724806E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2042087875391898E+005,0.1933777081176672E+005,0.1804329831190897E+005,0.2024258631299486E+005,0.2037535491925321E+005,0.2028347504570489E+005,0.1966238906833111E+005,0.1885147223281517E+005,0.2026307228633703E+005 +0.7520000000000030E-007,0.1145876310785601E+024,0.9457708905654193E+023,0.1324309483143016E+024,0.3303391129197591E+021,0.7657861254048961E+022,0.3495838688163723E+024,0.2022050174533679E+005,0.2038355544256818E+005,0.2030136399912326E+005,0.2043939344109716E+005,0.1993736586252153E+005,0.2028925177736533E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2004294955964404E+005,0.1788284398825337E+005,0.1803606558768404E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835473452824404E+001,0.1875597539398661E+001,0.1851990360395019E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2040751763929099E+005,0.2053246727770376E+005,0.1797276782125043E+005,0.2022050174533679E+005,0.2038355544256818E+005,0.2026303372617825E+005,0.1976906476588289E+005,0.1885003423012149E+005,0.2025027919834051E+005 +0.7540000000000030E-007,0.1148378879822872E+024,0.9459710960884009E+023,0.1323208352766617E+024,0.3353442509943009E+021,0.7627830425601710E+022,0.3497190075443850E+024,0.2018464437553701E+005,0.2031698161763756E+005,0.2030291912204697E+005,0.2001330065409272E+005,0.1996116633925658E+005,0.2026015305988204E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2009817773458540E+005,0.1800584846094045E+005,0.1819737262161335E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835912486039173E+001,0.1876429126944789E+001,0.1853268636564119E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2036487204261151E+005,0.2032432254466639E+005,0.1780006830571008E+005,0.2018464437553701E+005,0.2031698161763756E+005,0.2026605770390634E+005,0.1955597055921686E+005,0.1885352266615292E+005,0.2022160835834851E+005 +0.7560000000000031E-007,0.1150931500240888E+024,0.9465216612766007E+023,0.1322157273770963E+024,0.3303391129197591E+021,0.7582784182930834E+022,0.3498741668246957E+024,0.2018556404786129E+005,0.2032887594636049E+005,0.2025138309627513E+005,0.1902880208251842E+005,0.1990032607221722E+005,0.2024193309457753E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2011841596060187E+005,0.1819318154591224E+005,0.1819268416846569E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1836072783095359E+001,0.1877674481566871E+001,0.1853231794377710E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2030317123453624E+005,0.2075554238412171E+005,0.1789643785937511E+005,0.2018556404786129E+005,0.2032887594636049E+005,0.2023082142778600E+005,0.1930279836576773E+005,0.1885374937521824E+005,0.2021173929780102E+005 +0.7580000000000031E-007,0.1153484120658904E+024,0.9469721237033093E+023,0.1321056143394564E+024,0.3253339748452173E+021,0.7547748216409041E+022,0.3500243209669320E+024,0.2017602161202363E+005,0.2035083551045350E+005,0.2020882892296080E+005,0.1971232623731683E+005,0.1980261521241021E+005,0.2022721572743689E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2015059995652248E+005,0.1912146221805547E+005,0.1807820331621304E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1836327053233829E+001,0.1883492907123550E+001,0.1852326423222094E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2022614349435809E+005,0.1978430477245759E+005,0.1796276048453002E+005,0.2017602161202363E+005,0.2035083551045350E+005,0.2019825331957100E+005,0.1957156468905272E+005,0.1879946930968296E+005,0.2020146213474360E+005 +0.7600000000000031E-007,0.1155536227269466E+024,0.9470221750840548E+023,0.1320105167160401E+024,0.3303391129197591E+021,0.7532732802185415E+022,0.3501294288664974E+024,0.2015493353030688E+005,0.2033115665753632E+005,0.2023596980151860E+005,0.1997465926882992E+005,0.1991920294426304E+005,0.2022790972623941E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2010128464679014E+005,0.1871038054932329E+005,0.1819186581636656E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835937114715025E+001,0.1880985987622603E+001,0.1853225361815483E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2020262934825718E+005,0.1943941305537523E+005,0.1774887384238860E+005,0.2015493353030688E+005,0.2033115665753632E+005,0.2019004275806846E+005,0.1947348356683691E+005,0.1881872794462371E+005,0.2018644507458566E+005 +0.7620000000000031E-007,0.1158138899068228E+024,0.9473224833685273E+023,0.1318903934022511E+024,0.3253339748452173E+021,0.7512712249887248E+022,0.3502745778706591E+024,0.2010127210197967E+005,0.2032862675709524E+005,0.2022585512713422E+005,0.1964337458835058E+005,0.1968060677445200E+005,0.2020022251648340E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2008276290904421E+005,0.1996159675704359E+005,0.1826794937182661E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835790182467120E+001,0.1888301537443563E+001,0.1853821008504103E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2022270984961513E+005,0.1876518000668088E+005,0.1764784777851356E+005,0.2010127210197967E+005,0.2032862675709524E+005,0.2018650666309196E+005,0.1947562790265938E+005,0.1870533590665594E+005,0.2016433299355485E+005 +0.7640000000000031E-007,0.1159890697394318E+024,0.9471723292262911E+023,0.1317902906407602E+024,0.3203288367706755E+021,0.7537737940259958E+022,0.3503546600798519E+024,0.2002834566193409E+005,0.2036593365613132E+005,0.2028207590265879E+005,0.1975413702804898E+005,0.1958767570454997E+005,0.2020532373108253E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2002691233793258E+005,0.1965202535448629E+005,0.1821344804449229E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835345525725203E+001,0.1886576540139474E+001,0.1853394818120208E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2019204275839000E+005,0.1906695801421511E+005,0.1768519385497884E+005,0.2002834566193409E+005,0.2036593365613132E+005,0.2018721901606166E+005,0.1952659297820767E+005,0.1866084304835800E+005,0.2014949365521853E+005 +0.7660000000000032E-007,0.1162193060908607E+024,0.9474726375107636E+023,0.1316851827411949E+024,0.3153236986961337E+021,0.7517717387961790E+022,0.3504847936697898E+024,0.1999266461359123E+005,0.2038881843370943E+005,0.2023712661897331E+005,0.1884942304455603E+005,0.1953727981308534E+005,0.2018081134671842E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1999391103837962E+005,0.1962155207268654E+005,0.1846491212729509E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835081651739643E+001,0.1886403852837697E+001,0.1855340790374575E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2022128326431673E+005,0.1924044477790445E+005,0.1750208578004294E+005,0.1999266461359123E+005,0.2038881843370943E+005,0.2016719224466248E+005,0.1917449701467000E+005,0.1865329814665678E+005,0.2013586690986049E+005 +0.7680000000000032E-007,0.1164745681326623E+024,0.9474225861300181E+023,0.1315650594274059E+024,0.3253339748452173E+021,0.7502701973738165E+022,0.3506099221216534E+024,0.1998191324376351E+005,0.2035371222872151E+005,0.2019730708170896E+005,0.1908747353366709E+005,0.1957181036609080E+005,0.2015360121829194E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1998546775403504E+005,0.1915646948276909E+005,0.1808190210992805E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835014004551235E+001,0.1883701524526148E+001,0.1852355849574748E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2025967867467200E+005,0.1960883646648115E+005,0.1757466982275385E+005,0.1998191324376351E+005,0.2035371222872151E+005,0.2015868463749824E+005,0.1925783153596563E+005,0.1858614623705614E+005,0.2011817414009356E+005 +0.7700000000000032E-007,0.1166897890698676E+024,0.9470722264648002E+023,0.1314449361136169E+024,0.3303391129197591E+021,0.7527727664110874E+022,0.3507000146069951E+024,0.1995404101954820E+005,0.2036540720712373E+005,0.2016952982684819E+005,0.1883204586251569E+005,0.1958957890768702E+005,0.2013701806130782E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1993102899816764E+005,0.1912411428883579E+005,0.1800240142194264E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834576509043214E+001,0.1883508737691672E+001,0.1851720776765329E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2030007179197769E+005,0.1938425288658006E+005,0.1764488691440463E+005,0.1995404101954820E+005,0.2036540720712373E+005,0.2014371051131457E+005,0.1907240692605976E+005,0.1859298349234444E+005,0.2010617541503527E+005 +0.7720000000000032E-007,0.1168449483501784E+024,0.9476227916529997E+023,0.1313898795947969E+024,0.3253339748452173E+021,0.7482681421439998E+022,0.3508051225065606E+024,0.1995259898282442E+005,0.2034374067128671E+005,0.2020263072862706E+005,0.1921133355357677E+005,0.1953911591425650E+005,0.2014239666158017E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1994570555448741E+005,0.1898143164206327E+005,0.1790653533952373E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834694684853865E+001,0.1882650892969460E+001,0.1850947673833588E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2020895409377742E+005,0.2021448006681262E+005,0.1743622324970608E+005,0.1995259898282442E+005,0.2034374067128671E+005,0.2013551251161072E+005,0.1943994721013644E+005,0.1848413682372084E+005,0.2009496761896905E+005 +0.7740000000000032E-007,0.1169850922162656E+024,0.9475226888915090E+023,0.1313248127998279E+024,0.3353442509943009E+021,0.7472671145290913E+022,0.3508701893015295E+024,0.1993791801012175E+005,0.2033233492075193E+005,0.2017203338799096E+005,0.2024041898337064E+005,0.1955726857055295E+005,0.2012423771243557E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1993832874936795E+005,0.1902479958172215E+005,0.1784239154471475E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834635307823612E+001,0.1882912965110043E+001,0.1850425878062142E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2023862191811102E+005,0.1990310917195141E+005,0.1750247022116457E+005,0.1993791801012175E+005,0.2033233492075193E+005,0.2012878518116397E+005,0.1980985634661146E+005,0.1849414495536216E+005,0.2008499720995534E+005 +0.7760000000000032E-007,0.1171452566346509E+024,0.9474225861300181E+023,0.1312347203144861E+024,0.3303391129197591E+021,0.7492691697589081E+022,0.3509452663726477E+024,0.1988838817276992E+005,0.2032598083867826E+005,0.2021047641188150E+005,0.2057808730225031E+005,0.1946647069528436E+005,0.2011860701957219E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1991251508898277E+005,0.1843454564676568E+005,0.1765337476574966E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834427193800984E+001,0.1879242509253807E+001,0.1848866816914779E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2023909599290217E+005,0.1990317764054744E+005,0.1748368841008937E+005,0.1988838817276992E+005,0.2032598083867826E+005,0.2013887579671526E+005,0.1979630734384438E+005,0.1839801109955719E+005,0.2006828470655655E+005 +0.7780000000000033E-007,0.1173704878480053E+024,0.9476728430337452E+023,0.1311296124149207E+024,0.3253339748452173E+021,0.7477676283365456E+022,0.3510703948245112E+024,0.1987651921019668E+005,0.2027715152788867E+005,0.2019477080421464E+005,0.2142442876450098E+005,0.1929279210278696E+005,0.2009253773885877E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1993160452746297E+005,0.1873637216194377E+005,0.1738679082596132E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834581146392333E+001,0.1881147682821569E+001,0.1846611933338859E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2024469833300149E+005,0.1965125732769760E+005,0.1755586725547619E+005,0.1987651921019668E+005,0.2027715152788867E+005,0.2013874032862020E+005,0.2017420500542118E+005,0.1827133879632559E+005,0.2004869441796270E+005 +0.7800000000000033E-007,0.1175556779567634E+024,0.9477228944144906E+023,0.1310395199295790E+024,0.3253339748452173E+021,0.7472671145290913E+022,0.3511654924479275E+024,0.1991402597036002E+005,0.2029077253695894E+005,0.2014218944443165E+005,0.1996287718208690E+005,0.1910703875642280E+005,0.2008371550687708E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1988820804876855E+005,0.1863134428235967E+005,0.1726153504722079E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834230747383895E+001,0.1880491585731612E+001,0.1845529084331841E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2026234245312062E+005,0.1947661785093365E+005,0.1739144037890002E+005,0.1991402597036002E+005,0.2029077253695894E+005,0.2010918580786331E+005,0.1945761458085392E+005,0.1810826606239260E+005,0.2004967839351976E+005 +0.7820000000000033E-007,0.1177658937558941E+024,0.9474225861300181E+023,0.1309394171680881E+024,0.3453545271433845E+021,0.7462660869141830E+022,0.3512555849332694E+024,0.1989546183562120E+005,0.2025430798121314E+005,0.2013499047675565E+005,0.1892001157984944E+005,0.1893426454760596E+005,0.2006016147862764E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1993053102622737E+005,0.1883480277688818E+005,0.1733448609115875E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834572496405788E+001,0.1881756064433914E+001,0.1846161603766504E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2021764847849422E+005,0.1904508027741166E+005,0.1768333447603952E+005,0.1989546183562120E+005,0.2025430798121314E+005,0.2010429657729046E+005,0.1893305987923235E+005,0.1813742246006931E+005,0.2003180293371010E+005 +0.7840000000000033E-007,0.1179160478981304E+024,0.9479230999374722E+023,0.1308793555111936E+024,0.3353442509943009E+021,0.7432630040694579E+022,0.3513556876947601E+024,0.1991273835397768E+005,0.2025780830710895E+005,0.2012364483239490E+005,0.1935719062624096E+005,0.1864086293524737E+005,0.2005696144336517E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1993620936110278E+005,0.1824361651294100E+005,0.1732349758155509E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834618240661831E+001,0.1878005488440037E+001,0.1846066659609309E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2016254345117767E+005,0.1856264457469034E+005,0.1766292446511374E+005,0.1991273835397768E+005,0.2025780830710895E+005,0.2008471430436174E+005,0.1882209503699652E+005,0.1799993706986975E+005,0.2002839094104884E+005 +0.7860000000000033E-007,0.1181412791114847E+024,0.9481733568411995E+023,0.1307792527497028E+024,0.3353442509943009E+021,0.7407604350321870E+022,0.3514808161466236E+024,0.1988310112725907E+005,0.2024832227972579E+005,0.2014046022405091E+005,0.1893980075829668E+005,0.1860291686906892E+005,0.2004950309133918E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1991665442056938E+005,0.1834551463494900E+005,0.1734239741570942E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834460601007590E+001,0.1878668816572693E+001,0.1846229887652628E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2012461551089709E+005,0.1936717248650251E+005,0.1749767529505666E+005,0.1988310112725907E+005,0.2024832227972579E+005,0.2007575104202619E+005,0.1890175221160507E+005,0.1794011531094885E+005,0.2001142092889088E+005 +0.7880000000000034E-007,0.1182914332537210E+024,0.9482734596026902E+023,0.1307091808166592E+024,0.3353442509943009E+021,0.7397594074172786E+022,0.3515608983558163E+024,0.1987736948367366E+005,0.2026208486196061E+005,0.2013016936239621E+005,0.1887260681342801E+005,0.1850998707471235E+005,0.2004539875603289E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1988166487478561E+005,0.1824361651294100E+005,0.1736410551418081E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834177786693672E+001,0.1878005488440037E+001,0.1846416942904011E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2012414169932191E+005,0.1895311011205354E+005,0.1731857371061269E+005,0.1987736948367366E+005,0.2026208486196061E+005,0.2006171098279002E+005,0.1872427302088396E+005,0.1785291317844773E+005,0.2000597842337067E+005 +0.7900000000000034E-007,0.1184515976721063E+024,0.9483735623641811E+023,0.1306391088836156E+024,0.3403493890688427E+021,0.7377573521874619E+022,0.3516459857030835E+024,0.1987305646451332E+005,0.2027764916791715E+005,0.2009381959401766E+005,0.1865498899089139E+005,0.1835717193381948E+005,0.2003120609516706E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1989733303181737E+005,0.1758973410515503E+005,0.1713212638932362E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834304548919547E+001,0.1873570106460090E+001,0.1844394169864529E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2010839355064443E+005,0.1913166692252837E+005,0.1745656140780534E+005,0.1987305646451332E+005,0.2027764916791715E+005,0.2004534819810301E+005,0.1850332488762976E+005,0.1776388525112170E+005,0.2000060459447550E+005 +0.7920000000000034E-007,0.1186668186093116E+024,0.9482234082219449E+023,0.1305239907079012E+024,0.3403493890688427E+021,0.7392588936098245E+022,0.3517460884645744E+024,0.1987447653792887E+005,0.2029392840657575E+005,0.2007094567395920E+005,0.1918245845091323E+005,0.1848107523098588E+005,0.2003050093880885E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1980442077347274E+005,0.1678639925095654E+005,0.1756079168797984E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833550004831912E+001,0.1867659056569192E+001,0.1848091255905591E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2011311155247000E+005,0.1884764406219143E+005,0.1718256922687968E+005,0.1987447653792887E+005,0.2029392840657575E+005,0.2001177365132569E+005,0.1843334577657370E+005,0.1785348721902862E+005,0.1999462895847741E+005 +0.7940000000000034E-007,0.1188419984419206E+024,0.9484736651256720E+023,0.1304489136367830E+024,0.3403493890688427E+021,0.7367563245725536E+022,0.3518461912260652E+024,0.1990664090263159E+005,0.2025408541234683E+005,0.2005939795195117E+005,0.1873715728919837E+005,0.1857653710629710E+005,0.2002795394247116E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1974637503516698E+005,0.1671944960085923E+005,0.1772601714206890E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833075118524132E+001,0.1867141396148824E+001,0.1849469817889715E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2010698447203436E+005,0.1957203978920027E+005,0.1707764547196124E+005,0.1990664090263159E+005,0.2025408541234683E+005,0.1998935313730819E+005,0.1843170551105408E+005,0.1790921621963719E+005,0.1998771545334478E+005 +0.7960000000000034E-007,0.1190371988268277E+024,0.9485237165064174E+023,0.1303488108752922E+024,0.3353442509943009E+021,0.7372568383800078E+022,0.3519462939875561E+024,0.1991974133496951E+005,0.2024440209839164E+005,0.2002719650261033E+005,0.1782290347386261E+005,0.1855766516663946E+005,0.2001650704917572E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1977219411502306E+005,0.1668097816047055E+005,0.1765152289905820E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833286684571323E+001,0.1866842096382645E+001,0.1848851381545330E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2004967389732233E+005,0.1862746254168351E+005,0.1719598875638171E+005,0.1991974133496951E+005,0.2024440209839164E+005,0.1996536129624797E+005,0.1774678753832962E+005,0.1791541510764967E+005,0.1998007903910892E+005 +0.7980000000000034E-007,0.1192374043498094E+024,0.9486238192679081E+023,0.1302487081138014E+024,0.3303391129197591E+021,0.7372568383800078E+022,0.3520514018871215E+024,0.1992361804618908E+005,0.2021556625824293E+005,0.2001553592008115E+005,0.1824437134853802E+005,0.1844319981820888E+005,0.2000371396821544E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1976994873900537E+005,0.1667583044597838E+005,0.1783409980385538E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833268306843572E+001,0.1866801945973268E+001,0.1850358159968682E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2001526578769061E+005,0.1896920298371110E+005,0.1711521844753698E+005,0.1992361804618908E+005,0.2021556625824293E+005,0.1994956932252154E+005,0.1802906123030200E+005,0.1789096359423353E+005,0.1996754144135922E+005 +0.8000000000000035E-007,0.1193875584920457E+024,0.9486238192679081E+023,0.1301736310426832E+024,0.3303391129197591E+021,0.7372568383800078E+022,0.3521264789582396E+024,0.1989411927984409E+005,0.2017518515270138E+005,0.2005568358834385E+005,0.1855389199287229E+005,0.1829626315556498E+005,0.1999485285128699E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1975073626426384E+005,0.1584801064891846E+005,0.1798127378826008E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833110892846418E+001,0.1860014352952176E+001,0.1851551084255864E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2001517080686000E+005,0.1887363736719311E+005,0.1689667920387283E+005,0.1989411927984409E+005,0.2017518515270138E+005,0.1996201793085347E+005,0.1791344327622970E+005,0.1780259584339692E+005,0.1994928979091812E+005 +0.8020000000000035E-007,0.1196127897054000E+024,0.9486738706486536E+023,0.1300635180050433E+024,0.3303391129197591E+021,0.7367563245725536E+022,0.3522415971339541E+024,0.1992856683237087E+005,0.2012872814805807E+005,0.1999756496028287E+005,0.1761933989928938E+005,0.1834578277592691E+005,0.1997268095964136E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1977264498355156E+005,0.1684827623240913E+005,0.1794227101435947E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833290374306713E+001,0.1868133922394491E+001,0.1851236800777424E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1999541255827951E+005,0.1862933433371312E+005,0.1683745501403503E+005,0.1992856683237087E+005,0.2012872814805807E+005,0.1993659163564499E+005,0.1770372070533816E+005,0.1779644380899515E+005,0.1993875589086557E+005 +0.8040000000000035E-007,0.1196978770526672E+024,0.9488240247908899E+023,0.1300184717623725E+024,0.3203288367706755E+021,0.7372568383800078E+022,0.3522916485146995E+024,0.1991836211295423E+005,0.2012447506803710E+005,0.2000795756756084E+005,0.1650382925556563E+005,0.1826586987946807E+005,0.1996925367165943E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1973834580117607E+005,0.1680732084889638E+005,0.1809677415491928E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833009216172883E+001,0.1867819998334912E+001,0.1852474048339654E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1999707654322596E+005,0.1887172723579518E+005,0.1682451153826996E+005,0.1991836211295423E+005,0.2012447506803710E+005,0.1993244721993531E+005,0.1727593213960954E+005,0.1779947451609089E+005,0.1993232703730111E+005 +0.8060000000000035E-007,0.1199080928517980E+024,0.9497249496443074E+023,0.1299383895531798E+024,0.3003082844725083E+021,0.7322517003054660E+022,0.3524418026569357E+024,0.1989837493107205E+005,0.2008262339942878E+005,0.2003851905873729E+005,0.1540688183623195E+005,0.1823275946155717E+005,0.1996125994822433E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1971375127412662E+005,0.1641370222081003E+005,0.1824157285408023E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1832807025271223E+001,0.1864724946770083E+001,0.1853615058625559E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1995824381445013E+005,0.1732771102590938E+005,0.1662816610344433E+005,0.1989837493107205E+005,0.2008262339942878E+005,0.1992790753948975E+005,0.1623999627442734E+005,0.1776689581852851E+005,0.1991151049789139E+005 +0.8080000000000035E-007,0.1201082983747797E+024,0.9500252579287799E+023,0.1298533022059126E+024,0.3003082844725083E+021,0.7292486174607409E+022,0.3525569208326502E+024,0.1989838225057506E+005,0.1999324133377396E+005,0.2004124582849338E+005,0.1566764952825061E+005,0.1816657865761905E+005,0.1993713764354536E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1974935017661435E+005,0.1603428223869882E+005,0.1808721166984186E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833099524697331E+001,0.1861601258830173E+001,0.1852398070158530E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1995942905697565E+005,0.1768667371911395E+005,0.1647258631406142E+005,0.1989838225057506E+005,0.1999324133377396E+005,0.1993899247754617E+005,0.1635561901510334E+005,0.1765070028833653E+005,0.1988939111744749E+005 +0.8100000000000035E-007,0.1202434371027923E+024,0.9497750010250528E+023,0.1297682148586454E+024,0.2953031463979665E+021,0.7327522141129202E+022,0.3526119773514701E+024,0.1982022086175373E+005,0.1996342066403274E+005,0.2002536237091765E+005,0.1562641381563755E+005,0.1818627033074225E+005,0.1989682164476320E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1974484800321466E+005,0.1524576161537946E+005,0.1811004720130909E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833062588952836E+001,0.1854625147282429E+001,0.1852579379118063E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2007428007148913E+005,0.1775127179185799E+005,0.1655823658214370E+005,0.1982022086175373E+005,0.1996342066403274E+005,0.1996442849441105E+005,0.1614340033690324E+005,0.1769050418094041E+005,0.1986452736435523E+005 +0.8120000000000036E-007,0.1203935912450286E+024,0.9498751037865435E+023,0.1296981429256018E+024,0.2953031463979665E+021,0.7317511864980117E+022,0.3526920595606627E+024,0.1982409481782644E+005,0.1994089012674181E+005,0.2003378200941572E+005,0.1610806619526623E+005,0.1818906296876047E+005,0.1989562581598418E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1974742924268292E+005,0.1512997968539074E+005,0.1802042450576176E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833083767389633E+001,0.1853541198409206E+001,0.1851865228088813E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2002388411113181E+005,0.1794858422096797E+005,0.1647025131113131E+005,0.1982409481782644E+005,0.1994089012674181E+005,0.1995406625829140E+005,0.1638064242347576E+005,0.1764177855843211E+005,0.1985518472284252E+005 +0.8140000000000036E-007,0.1205687710776375E+024,0.9496248468828165E+023,0.1295930350260364E+024,0.2902980083234246E+021,0.7352547831501910E+022,0.3527671366317809E+024,0.1979715504665846E+005,0.1991206183663657E+005,0.2006236306137753E+005,0.1699373546283307E+005,0.1828252445885240E+005,0.1989163869152746E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1974204413118064E+005,0.1494032963653421E+005,0.1808086033630318E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833039577785369E+001,0.1851730366197140E+001,0.1852347562761525E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1997596641183438E+005,0.1759749329876584E+005,0.1642999593448308E+005,0.1979715504665846E+005,0.1991206183663657E+005,0.1995114600094637E+005,0.1661502262503377E+005,0.1768731105829404E+005,0.1983806445224742E+005 +0.8160000000000036E-007,0.1207289354960229E+024,0.9497249496443074E+023,0.1295029425406946E+024,0.2752825940997992E+021,0.7372568383800078E+022,0.3528522239790482E+024,0.1983015777626763E+005,0.1984479979899486E+005,0.2008825888291237E+005,0.1660883038263772E+005,0.1820294552632350E+005,0.1989231391919023E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1974966687227245E+005,0.1652407359349512E+005,0.1780429183726950E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833102122247708E+001,0.1865607324540618E+001,0.1850114213399460E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1991722300996879E+005,0.1590996592369554E+005,0.1644196463878387E+005,0.1983015777626763E+005,0.1984479979899486E+005,0.1994736453332659E+005,0.1638221506210343E+005,0.1758112864871726E+005,0.1982743405728599E+005 +0.8180000000000036E-007,0.1208991101905573E+024,0.9497249496443074E+023,0.1294228603315020E+024,0.2802877321743410E+021,0.7362558107650994E+022,0.3529373113263153E+024,0.1981566894911975E+005,0.1983346381768252E+005,0.2006085221353812E+005,0.1765470321568879E+005,0.1811874039899099E+005,0.1987325117281680E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1977247151651696E+005,0.1685813011413603E+005,0.1776143494136801E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833288954738240E+001,0.1868209230352611E+001,0.1849762079042856E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1990325349033581E+005,0.1696558646180971E+005,0.1642834693006864E+005,0.1981566894911975E+005,0.1983346381768252E+005,0.1993735639789168E+005,0.1723736026171147E+005,0.1752868822238232E+005,0.1981532459324934E+005 +0.8200000000000036E-007,0.1210342489185699E+024,0.9501754120710162E+023,0.1293728089507566E+024,0.2752825940997992E+021,0.7327522141129202E+022,0.3530274038116571E+024,0.1978174414087607E+005,0.1976628074690330E+005,0.2005804691197700E+005,0.1763231651814659E+005,0.1811057635800931E+005,0.1984247470391565E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1982687681910211E+005,0.1668962630975819E+005,0.1775203579752689E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833732999765805E+001,0.1866909494550165E+001,0.1849684629643285E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1990160929558185E+005,0.1672657690503983E+005,0.1667078554579636E+005,0.1978174414087607E+005,0.1976628074690330E+005,0.1995023183335465E+005,0.1711222861987042E+005,0.1759336005101002E+005,0.1979182304213913E+005 +0.8220000000000037E-007,0.1212394595796261E+024,0.9497249496443074E+023,0.1292526856369676E+024,0.2802877321743410E+021,0.7362558107650994E+022,0.3531074860208497E+024,0.1977288105132145E+005,0.1976366534952107E+005,0.2005383489638484E+005,0.1718303568390374E+005,0.1816580616226051E+005,0.1983767921502145E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1980600841735153E+005,0.1584185074741435E+005,0.1803566323718878E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833562955805734E+001,0.1859961253342684E+001,0.1851987144144526E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1986623462038346E+005,0.1684664264985757E+005,0.1637495961848208E+005,0.1977288105132145E+005,0.1976366534952107E+005,0.1993243321928151E+005,0.1672132198515856E+005,0.1760790725917255E+005,0.1978124181458928E+005 +0.8240000000000037E-007,0.1214696959310550E+024,0.9498250524057983E+023,0.1291425725993276E+024,0.2802877321743410E+021,0.7352547831501910E+022,0.3532276093346387E+024,0.1971118869474152E+005,0.1978675594197857E+005,0.2002761833847415E+005,0.1747048592763722E+005,0.1817651534270992E+005,0.1981347487797469E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1983682125519600E+005,0.1669553881201486E+005,0.1826765319701297E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833813908876798E+001,0.1866955533594240E+001,0.1853818699163329E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1982354168791570E+005,0.1705464418559140E+005,0.1642906303727953E+005,0.1971118869474152E+005,0.1978675594197857E+005,0.1991669350845780E+005,0.1713868309613510E+005,0.1769124549558686E+005,0.1976255561950375E+005 +0.8260000000000037E-007,0.1217549888013039E+024,0.9498751037865435E+023,0.1290024287332405E+024,0.2802877321743410E+021,0.7347542693427369E+022,0.3533727583388005E+024,0.1966858798193117E+005,0.1982281667985524E+005,0.2001120813511340E+005,0.1872590229008311E+005,0.1794363042537744E+005,0.1979850804036517E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1987985665129026E+005,0.1681748273924757E+005,0.1794087920361831E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834163144902871E+001,0.1867898028747926E+001,0.1851225561021505E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1974033122989863E+005,0.1625811883950489E+005,0.1651676499893482E+005,0.1966858798193117E+005,0.1982281667985524E+005,0.1989668440419106E+005,0.1748821646792832E+005,0.1752635851402855E+005,0.1974704207321562E+005 +0.8280000000000037E-007,0.1219852251527328E+024,0.9496748982635619E+023,0.1288773002813769E+024,0.2802877321743410E+021,0.7367563245725536E+022,0.3534778662383659E+024,0.1962086976135102E+005,0.1977260555856469E+005,0.2000371348875991E+005,0.1869803760161376E+005,0.1789009192501855E+005,0.1976441357253657E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1989733654938033E+005,0.1624838707614516E+005,0.1790125813770364E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834304577356425E+001,0.1863381436893112E+001,0.1850904882331746E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1976170087471554E+005,0.1590394255631905E+005,0.1680042316910957E+005,0.1962086976135102E+005,0.1977260555856469E+005,0.1990433937874906E+005,0.1721876335465904E+005,0.1757499925458765E+005,0.1972044149931151E+005 +0.8300000000000037E-007,0.1221704152614909E+024,0.9501253606902708E+023,0.1288072283483333E+024,0.2802877321743410E+021,0.7322517003054660E+022,0.3535929844140804E+024,0.1962497299032497E+005,0.1973461611470508E+005,0.2002670230960223E+005,0.1728988087685822E+005,0.1794369846174116E+005,0.1976410881780332E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1990319070259470E+005,0.1669553881201486E+005,0.1792271648322109E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834351890316547E+001,0.1866955533594240E+001,0.1851078729770118E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1967648426641794E+005,0.1648402673782799E+005,0.1675867207427307E+005,0.1962497299032497E+005,0.1973461611470508E+005,0.1989106401484712E+005,0.1689358903084954E+005,0.1759209075672154E+005,0.1970710281701994E+005 +0.8320000000000037E-007,0.1223756259225471E+024,0.9497750010250528E+023,0.1286921101726189E+024,0.2852928702488828E+021,0.7347542693427369E+022,0.3536780717613476E+024,0.1959931799905682E+005,0.1970723904885589E+005,0.2002356472367133E+005,0.1845588009907685E+005,0.1797734581244596E+005,0.1974805086482860E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1989045502258836E+005,0.1674117896325505E+005,0.1805116621439242E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834248926676623E+001,0.1867309852529907E+001,0.1852110968659903E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1967524255242728E+005,0.1576097780110998E+005,0.1663580977415862E+005,0.1959931799905682E+005,0.1970723904885589E+005,0.1988590502193622E+005,0.1720478132743298E+005,0.1760573062523355E+005,0.1968923153963969E+005 +0.8340000000000038E-007,0.1226158725501251E+024,0.9497750010250528E+023,0.1285819971349790E+024,0.2953031463979665E+021,0.7327522141129202E+022,0.3537981950751365E+024,0.1957587398187114E+005,0.1969096005848319E+005,0.2001205875288692E+005,0.1908277951879151E+005,0.1827187762493231E+005,0.1973787430607935E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1989221202174749E+005,0.1690497756800154E+005,0.1812129318744439E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834263139021153E+001,0.1868566087683038E+001,0.1852668506218377E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1961890794560980E+005,0.1694671197724275E+005,0.1659200948936074E+005,0.1957587398187114E+005,0.1969096005848319E+005,0.1986483994738457E+005,0.1786833361442846E+005,0.1774088458000365E+005,0.1967235904528898E+005 +0.8360000000000038E-007,0.1227610215542868E+024,0.9500252579287799E+023,0.1285269406161590E+024,0.3003082844725083E+021,0.7292486174607409E+022,0.3538832824224037E+024,0.1958649128083921E+005,0.1973678882010427E+005,0.1997502600135155E+005,0.1915679280165421E+005,0.1821321121053431E+005,0.1973928786532723E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1985951196070234E+005,0.1561688543796447E+005,0.1798550981523056E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833998228904825E+001,0.1857994035703318E+001,0.1851585138194543E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1958899561066045E+005,0.1709713877632769E+005,0.1671651395877944E+005,0.1958649128083921E+005,0.1973678882010427E+005,0.1983105269401516E+005,0.1759708966344145E+005,0.1771478596234420E+005,0.1967540352591225E+005 +0.8380000000000038E-007,0.1229211859726722E+024,0.9503255662132524E+023,0.1284668789592645E+024,0.3053134225470500E+021,0.7252445070011074E+022,0.3539783800458200E+024,0.1956905422507602E+005,0.1969920535833264E+005,0.1998399818733850E+005,0.1980371734583819E+005,0.1823298551196893E+005,0.1972741709333117E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1980907218264179E+005,0.1567722683046677E+005,0.1799618493532794E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833587942333773E+001,0.1858527093774569E+001,0.1851670887578700E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1961473042487563E+005,0.1672028477786858E+005,0.1676304418131645E+005,0.1956905422507602E+005,0.1969920535833264E+005,0.1982898770867383E+005,0.1778636589824827E+005,0.1773991463179027E+005,0.1965931800110420E+005 +0.8400000000000038E-007,0.1230863555291321E+024,0.9503756175939978E+023,0.1283867967500718E+024,0.3053134225470500E+021,0.7247439931936533E+022,0.3540634673930873E+024,0.1954690230187602E+005,0.1974086576462372E+005,0.1993229577442773E+005,0.1972794727313525E+005,0.1833099876169049E+005,0.1971398063962179E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1979509913356200E+005,0.1605045483639176E+005,0.1792811945025243E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833473924270937E+001,0.1861737343404690E+001,0.1851122438746788E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1962599324639761E+005,0.1638037439507251E+005,0.1668708458805324E+005,0.1954690230187602E+005,0.1974086576462372E+005,0.1980583717823468E+005,0.1775444259378243E+005,0.1774224745606908E+005,0.1965437242465249E+005 +0.8420000000000038E-007,0.1233266021567101E+024,0.9503756175939978E+023,0.1282616682982083E+024,0.3003082844725083E+021,0.7257450208085616E+022,0.3541835907068763E+024,0.1953563000964001E+005,0.1971767572171931E+005,0.1992535018394063E+005,0.1795939618587518E+005,0.1827484857060147E+005,0.1969843802009105E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1978576698056563E+005,0.1785525773698036E+005,0.1778027957839665E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833397688266795E+001,0.1875409500846724E+001,0.1849917119760662E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1960490633783380E+005,0.1610266332617687E+005,0.1672783093664792E+005,0.1953563000964001E+005,0.1971767572171931E+005,0.1979411251045616E+005,0.1739088198241195E+005,0.1768959376482805E+005,0.1963843820462991E+005 +0.8440000000000039E-007,0.1234717511608718E+024,0.9501253606902708E+023,0.1281815860890156E+024,0.3053134225470500E+021,0.7272465622309242E+022,0.3542436523637708E+024,0.1956098260057638E+005,0.1968855482992802E+005,0.1989857916770189E+005,0.1791081700349746E+005,0.1834560854526687E+005,0.1969098363355479E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1977826531924966E+005,0.1750578405631937E+005,0.1793889669710575E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833336355290154E+001,0.1872977201177885E+001,0.1851209548091034E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1958674625797973E+005,0.1683293394232210E+005,0.1663251063958733E+005,0.1956098260057638E+005,0.1968855482992802E+005,0.1977503167523826E+005,0.1748678190010127E+005,0.1773562798071661E+005,0.1963339039314007E+005 +0.8460000000000039E-007,0.1237019875123007E+024,0.9501253606902708E+023,0.1280714730513757E+024,0.3103185606215919E+021,0.7262455346160158E+022,0.3543587705394852E+024,0.1957921622862737E+005,0.1972035061782155E+005,0.1985295131411392E+005,0.1822137196290095E+005,0.1841771773693849E+005,0.1969099699984712E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1979601843774402E+005,0.1731440979954753E+005,0.1771029324776007E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833481430457400E+001,0.1871604600296850E+001,0.1849339702688865E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1948198500108772E+005,0.1784755402156375E+005,0.1671758625681109E+005,0.1957921622862737E+005,0.1972035061782155E+005,0.1972910258396488E+005,0.1786554380017514E+005,0.1773027466079811E+005,0.1963183539365746E+005 +0.8480000000000039E-007,0.1239472392779532E+024,0.9504757203554887E+023,0.1279663651518103E+024,0.3103185606215919E+021,0.7227419379638366E+022,0.3544989144055724E+024,0.1955408696757842E+005,0.1974664941557205E+005,0.1981390794339756E+005,0.1793961971420941E+005,0.1806428350052733E+005,0.1966771920669678E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1979832158599095E+005,0.1713085331490743E+005,0.1766630742753609E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833500232864358E+001,0.1870259922149702E+001,0.1848974523315328E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1948153616751192E+005,0.1843407890302690E+005,0.1654449954320926E+005,0.1955408696757842E+005,0.1974664941557205E+005,0.1971244879097500E+005,0.1786339479531333E+005,0.1751304542515799E+005,0.1961978946414390E+005 +0.8500000000000039E-007,0.1241624602151585E+024,0.9505257717362340E+023,0.1278462418380213E+024,0.2953031463979665E+021,0.7252445070011074E+022,0.3546090274432123E+024,0.1954311361086988E+005,0.1973233685954030E+005,0.1973360502839829E+005,0.1812923448560244E+005,0.1799157301402145E+005,0.1962960261989194E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1980303206888650E+005,0.1489840575369592E+005,0.1761173098304108E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833538675025229E+001,0.1851324009237973E+001,0.1848518951763627E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1954663414772773E+005,0.1814174642750932E+005,0.1667876534471144E+005,0.1954311361086988E+005,0.1973233685954030E+005,0.1969751178165706E+005,0.1725987158446545E+005,0.1750566349767169E+005,0.1960592825466633E+005 +0.8520000000000039E-007,0.1243826862904384E+024,0.9506258744977249E+023,0.1277511442146050E+024,0.3053134225470500E+021,0.7222414241563824E+022,0.3547241456189267E+024,0.1954784769418318E+005,0.1972662210586467E+005,0.1969427011432384E+005,0.1792446759265213E+005,0.1803946078035715E+005,0.1961638138520210E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1976167167018163E+005,0.1507999629721570E+005,0.1765863043922170E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833200526542832E+001,0.1853068246458486E+001,0.1848910605972685E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1953910173678921E+005,0.1853655912792248E+005,0.1680479011437340E+005,0.1954784769418318E+005,0.1972662210586467E+005,0.1966693648249854E+005,0.1733395598245673E+005,0.1757610788070015E+005,0.1959659496657223E+005 +0.8540000000000039E-007,0.1246279380560909E+024,0.9500753093095253E+023,0.1276009900723688E+024,0.3053134225470500E+021,0.7277470760383783E+022,0.3548192432423431E+024,0.1955569240329323E+005,0.1974747003139624E+005,0.1969825019783395E+005,0.1905496722759039E+005,0.1815561734708317E+005,0.1962916347836941E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1972072749568234E+005,0.1496800591409562E+005,0.1772550939536023E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1832864426271650E+001,0.1851997410731662E+001,0.1849465619795595E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1942542311004974E+005,0.1882716350933945E+005,0.1694269298788603E+005,0.1955569240329323E+005,0.1974747003139624E+005,0.1962442225328938E+005,0.1788382708759465E+005,0.1768531517072118E+005,0.1959195948165347E+005 +0.8560000000000040E-007,0.1248581744075198E+024,0.9502755148325069E+023,0.1274958821728034E+024,0.3053134225470500E+021,0.7257450208085616E+022,0.3549443716942066E+024,0.1950824604729782E+005,0.1977283112409077E+005,0.1968070894868324E+005,0.1856309700068582E+005,0.1823358896070564E+005,0.1961415519174448E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1971523175597693E+005,0.1478134808617981E+005,0.1752099055788894E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1832819210106369E+001,0.1850177525983348E+001,0.1847755394914552E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1941132942314932E+005,0.1856413339791323E+005,0.1690352856162480E+005,0.1950824604729782E+005,0.1977283112409077E+005,0.1961112054424106E+005,0.1754197980634391E+005,0.1765283977910854E+005,0.1957640630731042E+005 +0.8580000000000040E-007,0.1250233439639797E+024,0.9505257717362340E+023,0.1274258102397598E+024,0.3053134225470500E+021,0.7232424517712907E+022,0.3550394693176229E+024,0.1948823010695735E+005,0.1976132127544106E+005,0.1964768067452903E+005,0.1865056397038454E+005,0.1829355639777996E+005,0.1959351417316429E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1973521256212611E+005,0.1433333071869145E+005,0.1743087461900151E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1832983485066651E+001,0.1845621381277897E+001,0.1846989441883052E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1942256681528029E+005,0.1905733179530989E+005,0.1672528262500761E+005,0.1948823010695735E+005,0.1976132127544106E+005,0.1960527120365168E+005,0.1760545178129903E+005,0.1760275473629053E+005,0.1956332226559464E+005 +0.8600000000000040E-007,0.1252335597631105E+024,0.9499251551672890E+023,0.1273056869259708E+024,0.3203288367706755E+021,0.7262455346160158E+022,0.3551145463887410E+024,0.1947585899874097E+005,0.1979467766803952E+005,0.1960150283258820E+005,0.1817915987467267E+005,0.1821580460812106E+005,0.1957924564812492E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1973065553531873E+005,0.1542003142600405E+005,0.1737741341454444E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1832946047240792E+001,0.1856226761751637E+001,0.1846531390299671E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1940863015685913E+005,0.1770320627909729E+005,0.1689922860739067E+005,0.1947585899874097E+005,0.1979467766803952E+005,0.1957969446260144E+005,0.1729332638816061E+005,0.1760509132581946E+005,0.1955813875303867E+005 +0.8620000000000040E-007,0.1253686984911231E+024,0.9501754120710162E+023,0.1272506304071508E+024,0.3203288367706755E+021,0.7237429655787449E+022,0.3551946285979337E+024,0.1945951798187922E+005,0.1978430254515483E+005,0.1961041818457167E+005,0.1753220859719778E+005,0.1821006608985041E+005,0.1957326458822569E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1970518279710622E+005,0.1534887715339101E+005,0.1732292242970699E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1832736469116229E+001,0.1855577102831113E+001,0.1846061686892318E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1940639746440213E+005,0.1771461934495575E+005,0.1683891901766520E+005,0.1945951798187922E+005,0.1978430254515483E+005,0.1957611818192636E+005,0.1699446855223778E+005,0.1757027984975317E+005,0.1954745519311660E+005 +0.8640000000000040E-007,0.1255138474952848E+024,0.9503255662132524E+023,0.1271805584741072E+024,0.3153236986961337E+021,0.7232424517712907E+022,0.3552747108071263E+024,0.1943094453935307E+005,0.1982892351670979E+005,0.1962080579018102E+005,0.1651912808049719E+005,0.1819946162752457E+005,0.1957771222668381E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1964473901979442E+005,0.1525004977202491E+005,0.1732261507171099E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1832237056419166E+001,0.1854664985108293E+001,0.1846059029367981E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1938211678353791E+005,0.1749499256951396E+005,0.1692736790639383E+005,0.1943094453935307E+005,0.1982892351670979E+005,0.1955735268404188E+005,0.1646048391263140E+005,0.1759138946131427E+005,0.1954256666457306E+005 +0.8660000000000040E-007,0.1256840221898192E+024,0.9508260800207066E+023,0.1271104865410637E+024,0.3053134225470500E+021,0.7202393689265657E+022,0.3553848238447663E+024,0.1943637005620845E+005,0.1980945411673738E+005,0.1960836788221654E+005,0.1684837280737473E+005,0.1825175862076708E+005,0.1957147527562413E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1956855547709760E+005,0.1459468097199118E+005,0.1731122576633888E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1831603334420718E+001,0.1848312266682738E+001,0.1845960488775183E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1941841130067488E+005,0.1805053984583155E+005,0.1672155265627255E+005,0.1943637005620845E+005,0.1980945411673738E+005,0.1954208275486307E+005,0.1659120109569377E+005,0.1755111209724082E+005,0.1953334650941327E+005 +0.8680000000000041E-007,0.1259092534031736E+024,0.9506759258784703E+023,0.1269903632272747E+024,0.3053134225470500E+021,0.7217409103489281E+022,0.3554899317443316E+024,0.1941088396222152E+005,0.1978071646329952E+005,0.1958348682619822E+005,0.1714560589342354E+005,0.1824279669722417E+005,0.1954578455485748E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1952239911106890E+005,0.1522931192383962E+005,0.1755768890548218E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1831217056929010E+001,0.1854472123722122E+001,0.1848065126370323E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1946836023188553E+005,0.1755908298837988E+005,0.1667875607343008E+005,0.1941088396222152E+005,0.1978071646329952E+005,0.1953340525922590E+005,0.1674779851915460E+005,0.1760112565814627E+005,0.1951452478146217E+005 +0.8700000000000041E-007,0.1260544024073353E+024,0.9509261827821974E+023,0.1269303015703802E+024,0.3053134225470500E+021,0.7192383413116573E+022,0.3555750190915988E+024,0.1938148703774621E+005,0.1977323183146925E+005,0.1959526889275607E+005,0.1706298343991147E+005,0.1816606898693984E+005,0.1953599117220917E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1957326724221213E+005,0.1500533639589329E+005,0.1746528991767964E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1831642667313204E+001,0.1852356088272387E+001,0.1847282866770786E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1940507504118829E+005,0.1736189255157880E+005,0.1661763844032958E+005,0.1938148703774621E+005,0.1977323183146925E+005,0.1953368972570801E+005,0.1659399485193248E+005,0.1752473455593985E+005,0.1950063386867671E+005 +0.8720000000000041E-007,0.1262646182064661E+024,0.9510262855436882E+023,0.1268251936708148E+024,0.3003082844725083E+021,0.7192383413116573E+022,0.3556851321292388E+024,0.1937059115788653E+005,0.1970703017564202E+005,0.1958275753874872E+005,0.1693969533807151E+005,0.1819523923406536E+005,0.1951037961951716E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1961098318778731E+005,0.1516149842644522E+005,0.1753213323340908E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1831956852268355E+001,0.1853837873371067E+001,0.1847849571633559E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1937719650778423E+005,0.1706788068037445E+005,0.1672040967351868E+005,0.1937059115788653E+005,0.1970703017564202E+005,0.1953014978689448E+005,0.1649613099461220E+005,0.1758556181392341E+005,0.1947891856838598E+005 +0.8740000000000041E-007,0.1263597158298824E+024,0.9518771590163603E+023,0.1267951628423675E+024,0.2752825940997992E+021,0.7157347446594780E+022,0.3557752246145805E+024,0.1933925237257062E+005,0.1976471081367221E+005,0.1958799349409353E+005,0.1588094870137407E+005,0.1830782823082654E+005,0.1951830732656460E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1954327239882590E+005,0.1544784595403965E+005,0.1745997446033347E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1831391962222670E+001,0.1856479131245097E+001,0.1847237620627409E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1936500266335550E+005,0.1791746271441795E+005,0.1658734057277063E+005,0.1933925237257062E+005,0.1976471081367221E+005,0.1951072029431080E+005,0.1635772136434036E+005,0.1757656067810232E+005,0.1947642538635430E+005 +0.8760000000000041E-007,0.1265198802482677E+024,0.9514767479703971E+023,0.1267050703570258E+024,0.2852928702488828E+021,0.7177367998892947E+022,0.3558352862714751E+024,0.1930461660145132E+005,0.1976156002142302E+005,0.1961348147795356E+005,0.1598189223931181E+005,0.1843304851791467E+005,0.1951653581885198E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1948292569911676E+005,0.1538320611853604E+005,0.1757948628043143E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1830885301012549E+001,0.1855891267057519E+001,0.1848248499243891E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1936729541494869E+005,0.1829392948788957E+005,0.1658864503084176E+005,0.1930461660145132E+005,0.1976156002142302E+005,0.1950640827291294E+005,0.1649429507900955E+005,0.1766403406127412E+005,0.1946330885237713E+005 +0.8780000000000042E-007,0.1266850498047276E+024,0.9514266965896516E+023,0.1266199830097586E+024,0.2852928702488828E+021,0.7182373136967490E+022,0.3559153684806677E+024,0.1928957305537472E+005,0.1974824375827990E+005,0.1962087961439928E+005,0.1650054412594156E+005,0.1841186967795154E+005,0.1951010161290739E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1944599311882224E+005,0.1502367404624648E+005,0.1731186771516206E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1830573717548004E+001,0.1852531643942372E+001,0.1845966046286929E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1936126419269646E+005,0.1740243116941948E+005,0.1690704521300819E+005,0.1928957305537472E+005,0.1974824375827990E+005,0.1949799484652003E+005,0.1636451053746554E+005,0.1767563827248339E+005,0.1945141809667621E+005 +0.8800000000000042E-007,0.1268201885327402E+024,0.9518771590163603E+023,0.1265649264909386E+024,0.2752825940997992E+021,0.7157347446594780E+022,0.3560054609660095E+024,0.1929664655634453E+005,0.1972564250865243E+005,0.1963214620382767E+005,0.1663030186739353E+005,0.1827950740837770E+005,0.1950811414530265E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1941743147505393E+005,0.1387439139901817E+005,0.1750411525990862E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1830331968186951E+001,0.1840657837758164E+001,0.1847612544641792E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1932080493477459E+005,0.1816125901811213E+005,0.1702497759418189E+005,0.1929664655634453E+005,0.1972564250865243E+005,0.1948344453384267E+005,0.1633635734480114E+005,0.1770387847738566E+005,0.1944344853613366E+005 +0.8820000000000042E-007,0.1269553272607529E+024,0.9522275186815782E+023,0.1265198802482677E+024,0.2802877321743410E+021,0.7112301203923904E+022,0.3560905483132767E+024,0.1929260759629421E+005,0.1965869118341934E+005,0.1967517575494759E+005,0.1699506415964702E+005,0.1831174873824163E+005,0.1950503060971400E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1944113540656849E+005,0.1470334904901303E+005,0.1746768626892584E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1830532649845864E+001,0.1849403729775010E+001,0.1847303256192201E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1926174465669210E+005,0.1836159059051655E+005,0.1682056420818321E+005,0.1929260759629421E+005,0.1965869118341934E+005,0.1949140081967537E+005,0.1677529997712326E+005,0.1764847909204822E+005,0.1942631424489183E+005 +0.8840000000000042E-007,0.1271605379218091E+024,0.9523776728238146E+023,0.1264347929010005E+024,0.2902980083234246E+021,0.7077265237402111E+022,0.3562006613509165E+024,0.1930022196636302E+005,0.1965070075293032E+005,0.1963564375508332E+005,0.1845037981574262E+005,0.1835806920834251E+005,0.1949357710724417E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1942674507888821E+005,0.1352661875703670E+005,0.1731093037352099E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1830410875405885E+001,0.1836678893569734E+001,0.1845957931350948E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1924726114352536E+005,0.1874849268087506E+005,0.1690261602390165E+005,0.1930022196636302E+005,0.1965070075293032E+005,0.1946594157273657E+005,0.1721481757642407E+005,0.1765051583819052E+005,0.1941827549408728E+005 +0.8860000000000042E-007,0.1273557383067162E+024,0.9529282380120141E+023,0.1263747312441060E+024,0.3003082844725083E+021,0.7002188166283984E+022,0.3563257898027802E+024,0.1932579974776967E+005,0.1961518932521496E+005,0.1962925429125035E+005,0.1804858669030583E+005,0.1829189347931276E+005,0.1948942128221604E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1938603789560070E+005,0.1280772758014859E+005,0.1733742807216433E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1830065452551030E+001,0.1827790281570652E+001,0.1846187003543569E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1922166561214242E+005,0.2012714079354843E+005,0.1674661452684411E+005,0.1932579974776967E+005,0.1961518932521496E+005,0.1944473493486299E+005,0.1725446693581127E+005,0.1758307855321814E+005,0.1940938127074985E+005 +0.8880000000000042E-007,0.1275359232773997E+024,0.9527280324890325E+023,0.1262796336206897E+024,0.3053134225470500E+021,0.7012198442433068E+022,0.3564058720119728E+024,0.1933727461051469E+005,0.1956135400144408E+005,0.1960360517747488E+005,0.1705421252121587E+005,0.1832500938751484E+005,0.1946966733388674E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1939214939314532E+005,0.1265269148672201E+005,0.1737917929469626E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1830117401632595E+001,0.1825745153762472E+001,0.1846546563988599E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1922052318009555E+005,0.1952810349784438E+005,0.1685593626892409E+005,0.1933727461051469E+005,0.1956135400144408E+005,0.1943477163662529E+005,0.1660176759760904E+005,0.1764077164788812E+005,0.1939599743093773E+005 +0.8900000000000043E-007,0.1277461390765305E+024,0.9530283407735050E+023,0.1261845359972734E+024,0.3003082844725083E+021,0.6992177890134901E+022,0.3565259953257618E+024,0.1933310357411935E+005,0.1956848280947598E+005,0.1957149986848314E+005,0.1637142656676183E+005,0.1835732802565768E+005,0.1945876628099251E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1932405259847961E+005,0.1257983969812724E+005,0.1739182052880388E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1829536764610467E+001,0.1824767290430364E+001,0.1846655098901603E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1924688195215251E+005,0.1958814236066162E+005,0.1673106751376311E+005,0.1933310357411935E+005,0.1956848280947598E+005,0.1941014928960562E+005,0.1630031321032686E+005,0.1762186227002326E+005,0.1938717595773767E+005 +0.8920000000000043E-007,0.1279213189091394E+024,0.9534788032002136E+023,0.1261294794784535E+024,0.3103185606215919E+021,0.6927111095165858E+022,0.3566361083634017E+024,0.1932529958409802E+005,0.1947915334080989E+005,0.1957124244380479E+005,0.1756026648040734E+005,0.1823189232961051E+005,0.1943064056758431E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1935622367807844E+005,0.1411953863993619E+005,0.1736053395204368E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1829811569284719E+001,0.1843348176606513E+001,0.1846386198579103E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1926699889243560E+005,0.1877925875453270E+005,0.1652578690499997E+005,0.1932529958409802E+005,0.1947915334080989E+005,0.1942454279950074E+005,0.1698971610916827E+005,0.1749850178079531E+005,0.1936401669132418E+005 +0.8940000000000043E-007,0.1280664679133011E+024,0.9537290601039409E+023,0.1260744229596335E+024,0.3153236986961337E+021,0.6892075128644065E+022,0.3567211957106689E+024,0.1932546232166088E+005,0.1949531983906032E+005,0.1951551519008978E+005,0.1758038489955221E+005,0.1828287925054257E+005,0.1941635903884429E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1939976741855823E+005,0.1470786755644946E+005,0.1705550641529368E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1830182112120693E+001,0.1849448773906019E+001,0.1843714324031115E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1923502120155135E+005,0.1895293435816509E+005,0.1659349367886685E+005,0.1932546232166088E+005,0.1949531983906032E+005,0.1940236630688793E+005,0.1720554090177233E+005,0.1745851754379859E+005,0.1936011079676802E+005 +0.8960000000000043E-007,0.1282816888505064E+024,0.9541795225306495E+023,0.1259893356123663E+024,0.3153236986961337E+021,0.6847028885973188E+022,0.3568513293006070E+024,0.1931125845884442E+005,0.1948880240569695E+005,0.1947464230426495E+005,0.1837734529237848E+005,0.1830630012054200E+005,0.1939630799000894E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1935853849898450E+005,0.1492474951152041E+005,0.1716719181718733E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1829831308300478E+001,0.1851579611666575E+001,0.1844703336493646E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1925739989504316E+005,0.1824621719216182E+005,0.1666822681705999E+005,0.1931125845884442E+005,0.1948880240569695E+005,0.1937992031668492E+005,0.1740603465559273E+005,0.1752066146968635E+005,0.1934693300766954E+005 +0.8980000000000043E-007,0.1283867967500718E+024,0.9544297794343767E+023,0.1259442893696954E+024,0.3103185606215919E+021,0.6832013471749563E+022,0.3569163960955761E+024,0.1929281209505591E+005,0.1944693775142577E+005,0.1950050806629525E+005,0.1901673988832232E+005,0.1831511236548239E+005,0.1938836109600847E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1933081944916184E+005,0.1415627572050717E+005,0.1717793761641630E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1829594640514083E+001,0.1843743541790013E+001,0.1844797835000717E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1926476495130052E+005,0.1719321936433618E+005,0.1688912738566427E+005,0.1929281209505591E+005,0.1944693775142577E+005,0.1938601406546329E+005,0.1717440164310727E+005,0.1759196062396272E+005,0.1933251563756909E+005 +0.9000000000000044E-007,0.1285619765826808E+024,0.9546800363381038E+023,0.1258592020224282E+024,0.3003082844725083E+021,0.6827008333675021E+022,0.3570164988570669E+024,0.1926130805284912E+005,0.1942989101954063E+005,0.1949121944634826E+005,0.1905265438483926E+005,0.1822346022337681E+005,0.1936741711983527E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1934956982586923E+005,0.1425056569432419E+005,0.1697628313066369E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1829754804855662E+001,0.1844749223567344E+001,0.1843005108878993E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1926066574555020E+005,0.1761051079344944E+005,0.1692551351394414E+005,0.1926130805284912E+005,0.1942989101954063E+005,0.1938575570777282E+005,0.1733704199604985E+005,0.1750821201085366E+005,0.1931511757580854E+005 +0.9020000000000044E-007,0.1287621821056625E+024,0.9544798308151220E+023,0.1257590992609374E+024,0.3103185606215919E+021,0.6827008333675021E+022,0.3571065913424087E+024,0.1925962455960850E+005,0.1938594076653805E+005,0.1944624869573697E+005,0.1886026266882210E+005,0.1836647487169309E+005,0.1934168644640231E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1931590136715185E+005,0.1408280114675566E+005,0.1698835677279271E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1829466996123512E+001,0.1842950802681647E+001,0.1843113608515588E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1931499097830605E+005,0.1929011275706867E+005,0.1708885652952912E+005,0.1925962455960850E+005,0.1938594076653805E+005,0.1937289281440310E+005,0.1769922460213508E+005,0.1762189204024450E+005,0.1930060981893378E+005 +0.9040000000000044E-007,0.1289223465240478E+024,0.9543797280536313E+023,0.1256740119136702E+024,0.3103185606215919E+021,0.6837018609824105E+022,0.3571816684135268E+024,0.1925197440577370E+005,0.1939200661909767E+005,0.1943346945635284E+005,0.1948761519963824E+005,0.1838028262869674E+005,0.1933676865812275E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1926191050407262E+005,0.1514803192399885E+005,0.1705379479736362E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1829003429898755E+001,0.1853711264951051E+001,0.1843699069126413E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1931122810943489E+005,0.1958944506237903E+005,0.1720127123770076E+005,0.1925197440577370E+005,0.1939200661909767E+005,0.1935172039710620E+005,0.1834361096971678E+005,0.1767837170109636E+005,0.1929357574697859E+005 +0.9060000000000044E-007,0.1290674955282095E+024,0.9546299849573583E+023,0.1256089451187011E+024,0.3053134225470500E+021,0.6822003195600479E+022,0.3572667557607940E+024,0.1922777082433474E+005,0.1938638722781554E+005,0.1946012028374013E+005,0.1886220274961292E+005,0.1839148898569580E+005,0.1933556265535469E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1920910632367244E+005,0.1418397882180035E+005,0.1690320712349949E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1828547610531761E+001,0.1844040366726717E+001,0.1842345198298478E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1930559273961392E+005,0.1984503766801818E+005,0.1735653951899456E+005,0.1922777082433474E+005,0.1938638722781554E+005,0.1934764452623648E+005,0.1788892328693662E+005,0.1768824649551405E+005,0.1928175793173950E+005 +0.9080000000000044E-007,0.1292576907750421E+024,0.9546299849573583E+023,0.1255038372191357E+024,0.2953031463979665E+021,0.6842023747898646E+022,0.3573618533842102E+024,0.1923382972488751E+005,0.1935752873363557E+005,0.1947716315219615E+005,0.1860250322346683E+005,0.1850650111875488E+005,0.1933788426928517E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1913905328620927E+005,0.1401057028350302E+005,0.1669289201841337E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827939134258337E+001,0.1842163608590189E+001,0.1840414640776748E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1929712770025428E+005,0.1901061343136950E+005,0.1743229726458836E+005,0.1923382972488751E+005,0.1935752873363557E+005,0.1933391126603149E+005,0.1748547770690551E+005,0.1770447364858612E+005,0.1927129626241146E+005 +0.9100000000000044E-007,0.1294128500553529E+024,0.9549803446225763E+023,0.1254387704241667E+024,0.2902980083234246E+021,0.6816998057525938E+022,0.3574569510076266E+024,0.1924816692625498E+005,0.1933536900780124E+005,0.1949216920230746E+005,0.1907825339950180E+005,0.1834367901777759E+005,0.1933970173880129E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1910552463289554E+005,0.1458695661022279E+005,0.1654383777659799E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827646377087342E+001,0.1848234080982559E+001,0.1839017562553586E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1925117027038303E+005,0.1871085623939312E+005,0.1757393314150113E+005,0.1924816692625498E+005,0.1933536900780124E+005,0.1931807591382902E+005,0.1775882389298675E+005,0.1763459597177942E+005,0.1926401460088264E+005 +0.9120000000000045E-007,0.1296230658544837E+024,0.9550804473840672E+023,0.1253386676626759E+024,0.2902980083234246E+021,0.6806987781376853E+022,0.3575670640452665E+024,0.1927498236547377E+005,0.1929741450326121E+005,0.1944105759453433E+005,0.1858783650370415E+005,0.1847794980815766E+005,0.1932345783021988E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1913037394718271E+005,0.1423354893684851E+005,0.1635230142041312E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827863445516826E+001,0.1844568683269147E+001,0.1837186010665261E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1922703522938507E+005,0.1809505049230265E+005,0.1738530816802929E+005,0.1927498236547377E+005,0.1929741450326121E+005,0.1929519468729263E+005,0.1727038979174184E+005,0.1758716012475374E+005,0.1925430070813324E+005 +0.9140000000000045E-007,0.1297832302728690E+024,0.9552806529070488E+023,0.1252585854534832E+024,0.2802877321743410E+021,0.6806987781376853E+022,0.3576571565306083E+024,0.1926473773362483E+005,0.1931662469403210E+005,0.1943563895795155E+005,0.1809332408184596E+005,0.1841369853642214E+005,0.1932133428115818E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1910623506337491E+005,0.1405262360926408E+005,0.1643506040509923E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827652590568671E+001,0.1842622874864130E+001,0.1837982471412406E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1918949080655500E+005,0.1790006508148603E+005,0.1736603363996805E+005,0.1926473773362483E+005,0.1931662469403210E+005,0.1927535953987290E+005,0.1694873299956612E+005,0.1757543490829618E+005,0.1924835031362907E+005 +0.9160000000000045E-007,0.1299333844151052E+024,0.9556810639530122E+023,0.1252085340727378E+024,0.2852928702488828E+021,0.6756936400631436E+022,0.3577522541540246E+024,0.1925477727487491E+005,0.1929051348361561E+005,0.1944103133340139E+005,0.1901431577132491E+005,0.1841356814277303E+005,0.1931343026903741E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1914614516550229E+005,0.1510357281654840E+005,0.1648009483476323E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1828000930104398E+001,0.1853291711555855E+001,0.1838412613883328E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1912225231821296E+005,0.1788247222989547E+005,0.1717909825726040E+005,0.1925477727487491E+005,0.1929051348361561E+005,0.1926871000075720E+005,0.1762645210123865E+005,0.1753274070091198E+005,0.1923537696891102E+005 +0.9180000000000045E-007,0.1300685231431179E+024,0.9559313208567392E+023,0.1251434672777687E+024,0.2752825940997992E+021,0.6751931262556894E+022,0.3578323363632172E+024,0.1929633090507804E+005,0.1926836390222885E+005,0.1942566982985285E+005,0.2003717982419020E+005,0.1811551894885133E+005,0.1931238213681163E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1911852833528670E+005,0.1503384307009160E+005,0.1671111440171570E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827760037662369E+001,0.1852628817477817E+001,0.1840583777908841E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1909306819629584E+005,0.1699695744755183E+005,0.1695444466362009E+005,0.1929633090507804E+005,0.1926836390222885E+005,0.1924602317999638E+005,0.1779719703564113E+005,0.1739817186900286E+005,0.1923429609411588E+005 +0.9200000000000045E-007,0.1301586156284596E+024,0.9563317319027026E+023,0.1251084313112469E+024,0.2652723179507156E+021,0.6731910710258727E+022,0.3578974031581863E+024,0.1925120738506128E+005,0.1931999258844848E+005,0.1941128597755201E+005,0.1877161632150740E+005,0.1799292351926508E+005,0.1930152194961745E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1912493135742568E+005,0.1478698317364200E+005,0.1653245676087376E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827815949109697E+001,0.1850233121689371E+001,0.1838909883811919E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1909446525602644E+005,0.1716083364475801E+005,0.1695019129091089E+005,0.1925120738506128E+005,0.1931999258844848E+005,0.1924182549510152E+005,0.1722509003645039E+005,0.1729527852982217E+005,0.1922801577358689E+005 +0.9220000000000046E-007,0.1302987594945468E+024,0.9561315263797208E+023,0.1250233439639797E+024,0.2602671798761738E+021,0.6761941538705977E+022,0.3579574648150807E+024,0.1925666058261936E+005,0.1932610354956063E+005,0.1936404840892130E+005,0.1823119894344277E+005,0.1803996686036901E+005,0.1928898716175577E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1911193277186220E+005,0.1303559418729695E+005,0.1654200431638170E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827702406994309E+001,0.1830710565020166E+001,0.1839000225431415E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1910506670803504E+005,0.1822213823131753E+005,0.1699829820288061E+005,0.1925666058261936E+005,0.1932610354956063E+005,0.1922069773249701E+005,0.1683606298324014E+005,0.1733254024659783E+005,0.1922454133033519E+005 +0.9240000000000046E-007,0.1305340009840503E+024,0.9561815777604663E+023,0.1249182360644144E+024,0.2702774560252574E+021,0.6736915848333269E+022,0.3580775881288697E+024,0.1926019008570305E+005,0.1928210936253154E+005,0.1933462613655760E+005,0.1829709175082256E+005,0.1803937649344268E+005,0.1926831536059742E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1914247984937166E+005,0.1238147460314348E+005,0.1672711455333895E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827968997519736E+001,0.1822048275147846E+001,0.1840731993560134E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1907332644466774E+005,0.1800745570754465E+005,0.1678600552690565E+005,0.1926019008570305E+005,0.1928210936253154E+005,0.1920664710793846E+005,0.1663222342259700E+005,0.1731982418898344E+005,0.1920887446031783E+005 +0.9260000000000046E-007,0.1307091808166592E+024,0.9562316291412117E+023,0.1248231384409981E+024,0.2602671798761738E+021,0.6751931262556894E+022,0.3581676806142116E+024,0.1921339543939678E+005,0.1929652694073061E+005,0.1932836447912253E+005,0.1839662987417243E+005,0.1795603693799561E+005,0.1925136066839233E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1916293803812083E+005,0.1242205808405922E+005,0.1666634868448728E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1828147079910180E+001,0.1822611395163130E+001,0.1840167627333643E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1904543282141227E+005,0.1730167491928243E+005,0.1697611286047751E+005,0.1921339543939678E+005,0.1929652694073061E+005,0.1920120155039295E+005,0.1647958788275358E+005,0.1732255966600896E+005,0.1919370886147435E+005 +0.9280000000000046E-007,0.1308843606492682E+024,0.9562816805219571E+023,0.1247380510937308E+024,0.2602671798761738E+021,0.6746926124482352E+022,0.3582577730995532E+024,0.1921160404610346E+005,0.1927455124146663E+005,0.1929511641037681E+005,0.1878281586319605E+005,0.1798054536682722E+005,0.1923398802123344E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1917273345797058E+005,0.1229056488528884E+005,0.1656575063839772E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1828232215757512E+001,0.1820773794402580E+001,0.1839224481262383E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1903843566644192E+005,0.1739525258078858E+005,0.1701209064132231E+005,0.1921160404610346E+005,0.1927455124146663E+005,0.1918716666279539E+005,0.1664287581357132E+005,0.1731686857658089E+005,0.1918234873534871E+005 +0.9300000000000046E-007,0.1310745558961008E+024,0.9567821943294113E+023,0.1246729842987618E+024,0.2652723179507156E+021,0.6686864467587850E+022,0.3583778964133422E+024,0.1919561557809651E+005,0.1924005756230386E+005,0.1928386107456902E+005,0.1830788028064803E+005,0.1810303045341609E+005,0.1921713615495754E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1919132846617025E+005,0.1216485320558538E+005,0.1668029233718542E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1828393600667224E+001,0.1818981072923212E+001,0.1840297482770596E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1900030165242424E+005,0.1911514387520391E+005,0.1690183009219928E+005,0.1919561557809651E+005,0.1924005756230386E+005,0.1917603119298941E+005,0.1690598127423475E+005,0.1736904744916506E+005,0.1916489129501947E+005 +0.9320000000000046E-007,0.1312297151764116E+024,0.9567321429486658E+023,0.1246029123657182E+024,0.2752825940997992E+021,0.6671849053364226E+022,0.3584529734844604E+024,0.1920176791790429E+005,0.1924561181444211E+005,0.1929069913479442E+005,0.1893606373331990E+005,0.1798007173442969E+005,0.1922144039767971E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1915010958557433E+005,0.1213435646750456E+005,0.1669843851979259E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1828035455181026E+001,0.1818540758817832E+001,0.1840466160433465E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1897286886958756E+005,0.1830004913707226E+005,0.1674708566758275E+005,0.1920176791790429E+005,0.1924561181444211E+005,0.1915996413541204E+005,0.1693545809533396E+005,0.1727474338660035E+005,0.1916133059403854E+005 +0.9340000000000047E-007,0.1313848744567224E+024,0.9565819888064296E+023,0.1245278352946001E+024,0.2852928702488828E+021,0.6666843915289683E+022,0.3585230454175040E+024,0.1918939165542147E+005,0.1924671717358326E+005,0.1929143934194177E+005,0.1959968686190466E+005,0.1803029485038854E+005,0.1921890431929882E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1914414398796168E+005,0.1242590279642995E+005,0.1678212678652962E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827983497122372E+001,0.1822664558271447E+001,0.1841239498888596E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1891106003747291E+005,0.1794503994032335E+005,0.1696877931313411E+005,0.1918939165542147E+005,0.1924671717358326E+005,0.1914058776392460E+005,0.1719817706055706E+005,0.1738403660790843E+005,0.1915257983271163E+005 +0.9360000000000047E-007,0.1315500440131822E+024,0.9565319374256842E+023,0.1244477530854074E+024,0.2902980083234246E+021,0.6661838777215141E+022,0.3586031276266966E+024,0.1913492756362911E+005,0.1922715630180932E+005,0.1930922421231118E+005,0.1991088187549958E+005,0.1798623313562082E+005,0.1919930413703208E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1903378779445796E+005,0.1262306150210935E+005,0.1657309140120492E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827016648087642E+001,0.1825348759595454E+001,0.1839293679799200E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1903881214479999E+005,0.1770209617576415E+005,0.1713223553874309E+005,0.1913492756362911E+005,0.1922715630180932E+005,0.1915629488611387E+005,0.1731462109786812E+005,0.1735646373892874E+005,0.1913243126086602E+005 +0.9380000000000047E-007,0.1317001981554185E+024,0.9568322457101567E+023,0.1243926965665875E+024,0.2953031463979665E+021,0.6621797672618807E+022,0.3586932201120384E+024,0.1909336431585846E+005,0.1923232149944959E+005,0.1931458163810505E+005,0.1966584154324024E+005,0.1793201707345054E+005,0.1918618050707057E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1906491318397908E+005,0.1227273468769715E+005,0.1653059785093212E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827290440477881E+001,0.1820521687266209E+001,0.1838892282506831E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1901058442734804E+005,0.1773501419294549E+005,0.1694743690938701E+005,0.1909336431585846E+005,0.1923232149944959E+005,0.1915870556833691E+005,0.1712630470697152E+005,0.1726725747011512E+005,0.1911776081000087E+005 +0.9400000000000047E-007,0.1319154190926238E+024,0.9572827081368655E+023,0.1243026040812457E+024,0.2902980083234246E+021,0.6586761706097014E+022,0.3588233537019765E+024,0.1907144762766458E+005,0.1924932780695566E+005,0.1932128694228805E+005,0.1926654577688008E+005,0.1771795597045428E+005,0.1918076422751060E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1900290850139421E+005,0.1148328275832615E+005,0.1656156645714674E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826744162124708E+001,0.1808602129919141E+001,0.1839185011952020E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1900859896603022E+005,0.1768617411275163E+005,0.1679347431644333E+005,0.1907144762766458E+005,0.1924932780695566E+005,0.1914448642331427E+005,0.1673481179207472E+005,0.1713663267507221E+005,0.1910679813809134E+005 +0.9420000000000047E-007,0.1321256348917545E+024,0.9576831191828289E+023,0.1242075064578294E+024,0.2802877321743410E+021,0.6566741153798847E+022,0.3589484821538401E+024,0.1903025325872083E+005,0.1925470109825509E+005,0.1932268463598679E+005,0.1902789113201735E+005,0.1785695173502445E+005,0.1916986029399462E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1904145935146944E+005,0.1189603613337655E+005,0.1639887512721368E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827084210925185E+001,0.1815024749245738E+001,0.1837635189379007E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1893784948516607E+005,0.1732393394754873E+005,0.1665729056980920E+005,0.1903025325872083E+005,0.1925470109825509E+005,0.1913468452656349E+005,0.1662842696260079E+005,0.1711418978983574E+005,0.1908934430898398E+005 +0.9440000000000047E-007,0.1323058198624381E+024,0.9579834274673014E+023,0.1241424396628604E+024,0.2902980083234246E+021,0.6516689773053430E+022,0.3590535900534054E+024,0.1903344679964839E+005,0.1921618796744893E+005,0.1932682772972084E+005,0.1914676631912106E+005,0.1779003488958049E+005,0.1916116392450042E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1906953053775663E+005,0.1223010556826029E+005,0.1620492658806090E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827330982983024E+001,0.1819916058206805E+001,0.1835748153108987E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1887660867161002E+005,0.1772046386386048E+005,0.1661289388089074E+005,0.1903344679964839E+005,0.1921618796744893E+005,0.1912607501239271E+005,0.1688275797233193E+005,0.1701994483704138E+005,0.1907594654183305E+005 +0.9460000000000048E-007,0.1324409585904507E+024,0.9581335816095376E+023,0.1240873831440404E+024,0.2953031463979665E+021,0.6491664082680720E+022,0.3591286671245236E+024,0.1904938209690578E+005,0.1917358493421674E+005,0.1927028970085645E+005,0.1855711602162556E+005,0.1789669353896799E+005,0.1913760647356011E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1911707852656449E+005,0.1381753144668096E+005,0.1643172997583501E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827747372836845E+001,0.1840020590580126E+001,0.1837950570220620E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1885125349419845E+005,0.1835519386615740E+005,0.1670239320605170E+005,0.1904938209690578E+005,0.1917358493421674E+005,0.1910653089819987E+005,0.1722308823635884E+005,0.1715361544416957E+005,0.1906649503187562E+005 +0.9480000000000048E-007,0.1326361589753578E+024,0.9584839412747555E+023,0.1240022957967732E+024,0.2902980083234246E+021,0.6466638392308011E+022,0.3592437853002380E+024,0.1905849143370292E+005,0.1914934416371886E+005,0.1926951899642641E+005,0.1867621945352328E+005,0.1774731502438195E+005,0.1913166211918654E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1904738908382772E+005,0.1466548685519796E+005,0.1636919333525387E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827136397523664E+001,0.1849025227744322E+001,0.1837349210937023E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1885341955821377E+005,0.1742638666572290E+005,0.1687818012795191E+005,0.1905849143370292E+005,0.1914934416371886E+005,0.1908817495221453E+005,0.1722847893543113E+005,0.1712275125570331E+005,0.1905665405182978E+005 +0.9500000000000048E-007,0.1327562822891468E+024,0.9585840440362464E+023,0.1239422341398787E+024,0.2852928702488828E+021,0.6466638392308011E+022,0.3593088520952070E+024,0.1909703612952190E+005,0.1912747403759611E+005,0.1927354487548265E+005,0.1702931449142771E+005,0.1764349329847979E+005,0.1913824072389123E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1895911751005844E+005,0.1518346999224956E+005,0.1654341970838076E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826356266570103E+001,0.1854043974598773E+001,0.1839013609646601E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1887022502433916E+005,0.1595000064356424E+005,0.1647055149276666E+005,0.1909703612952190E+005,0.1912747403759611E+005,0.1907125597675155E+005,0.1621506459922430E+005,0.1700466814552664E+005,0.1905631819727468E+005 +0.9520000000000048E-007,0.1329865186405757E+024,0.9584839412747555E+023,0.1238321211022388E+024,0.2953031463979665E+021,0.6456628116158928E+022,0.3594189651328470E+024,0.1909488813380742E+005,0.1911366205403395E+005,0.1928896976056753E+005,0.1741328816606086E+005,0.1782515816679132E+005,0.1914257129833134E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1886123626851538E+005,0.1567026805349719E+005,0.1634148893796228E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825482940336682E+001,0.1858465823794201E+001,0.1837081374604761E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1886574605766300E+005,0.1599149594209751E+005,0.1650890712334175E+005,0.1909488813380742E+005,0.1911366205403395E+005,0.1905055914365071E+005,0.1652636565108549E+005,0.1704147242434030E+005,0.1904562379646134E+005 +0.9540000000000048E-007,0.1331416779208865E+024,0.9584338898940101E+023,0.1237420286168970E+024,0.2852928702488828E+021,0.6481653806531637E+022,0.3594940422039651E+024,0.1909160584243674E+005,0.1906472759856902E+005,0.1926340650192275E+005,0.1764597262181158E+005,0.1775173104337976E+005,0.1911827061451186E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887779513892874E+005,0.1518346999224956E+005,0.1660136750894943E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825631299858907E+001,0.1854043974598773E+001,0.1839559672487411E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1887397011168397E+005,0.1546325518576973E+005,0.1649124306482264E+005,0.1909160584243674E+005,0.1906472759856902E+005,0.1904615817877185E+005,0.1634294289688490E+005,0.1707374319828418E+005,0.1903023306147351E+005 +0.9560000000000049E-007,0.1332718115108246E+024,0.9582336843710284E+023,0.1236719566838534E+024,0.2902980083234246E+021,0.6491664082680720E+022,0.3595490987227851E+024,0.1913342348768775E+005,0.1905150073831488E+005,0.1923255536551535E+005,0.1772469023004896E+005,0.1756048192859240E+005,0.1911615118412698E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1888207696338337E+005,0.1564698115830194E+005,0.1636611676730897E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825669621950768E+001,0.1858260403273650E+001,0.1837319511203622E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1882789225117735E+005,0.1587389482571437E+005,0.1677807858437805E+005,0.1913342348768775E+005,0.1905150073831488E+005,0.1902024154418158E+005,0.1662200312551596E+005,0.1701067039841647E+005,0.1903230570806989E+005 +0.9580000000000049E-007,0.1334369810672845E+024,0.9584839412747555E+023,0.1235918744746608E+024,0.2802877321743410E+021,0.6486658944606178E+022,0.3596441963462013E+024,0.1912937428877133E+005,0.1906226074760559E+005,0.1919312576627711E+005,0.1691923902640735E+005,0.1760018313071923E+005,0.1910409270231525E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1890071597618763E+005,0.1523197822446737E+005,0.1637350843982823E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825836244201664E+001,0.1854496948891541E+001,0.1837390848666321E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1879830458240297E+005,0.1637971413824959E+005,0.1650344767735041E+005,0.1912937428877133E+005,0.1906226074760559E+005,0.1899922501722569E+005,0.1630532529694278E+005,0.1694973738957239E+005,0.1902524852938778E+005 +0.9600000000000049E-007,0.1335921403475953E+024,0.9588343009399734E+023,0.1235268076796917E+024,0.2752825940997992E+021,0.6461633254233469E+022,0.3597392939696177E+024,0.1909149670604774E+005,0.1904405325454146E+005,0.1918638423968391E+005,0.1602509404719195E+005,0.1753745451712382E+005,0.1908117349483780E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1892637254967164E+005,0.1540644752079281E+005,0.1632558191127893E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826065079701687E+001,0.1856103188294558E+001,0.1836927192406870E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1878293877548180E+005,0.1717823624394224E+005,0.1688273425227176E+005,0.1909149670604774E+005,0.1904405325454146E+005,0.1899862025254275E+005,0.1619399649390554E+005,0.1702032713319611E+005,0.1900753995530021E+005 +0.9620000000000049E-007,0.1336622122806389E+024,0.9597352257933909E+023,0.1235218025416172E+024,0.2602671798761738E+021,0.6401571597338968E+022,0.3598193761788103E+024,0.1908285437246760E+005,0.1899514612844406E+005,0.1914886842465835E+005,0.1498828728239077E+005,0.1752881635328463E+005,0.1905151236522939E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1899007890609058E+005,0.1399943374915346E+005,0.1638503184560556E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826630698482997E+001,0.1842041537079870E+001,0.1837501937119161E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1880095526976581E+005,0.1676100890019148E+005,0.1696032708293555E+005,0.1908285437246760E+005,0.1899514612844406E+005,0.1900445221664268E+005,0.1524024920690517E+005,0.1705515143604003E+005,0.1899369120781251E+005 +0.9640000000000049E-007,0.1337372893517570E+024,0.9599854826971181E+023,0.1234917717131699E+024,0.2552620418016320E+021,0.6386556183115342E+022,0.3598694275595558E+024,0.1908426228573472E+005,0.1893773974507722E+005,0.1913626466526969E+005,0.1447478495426896E+005,0.1746889021274259E+005,0.1903108362469734E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1901085545915476E+005,0.1398483245627776E+005,0.1640975011803639E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826814369826408E+001,0.1841881200974782E+001,0.1837739716501490E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1883738762444770E+005,0.1644008572779311E+005,0.1687784413546519E+005,0.1908426228573472E+005,0.1893773974507722E+005,0.1901514617915150E+005,0.1491737773872074E+005,0.1701135364340148E+005,0.1898171504558099E+005 +0.9660000000000049E-007,0.1339074640462914E+024,0.9598853799356273E+023,0.1233966740897536E+024,0.2502569037270902E+021,0.6406576735413509E+022,0.3599495097687484E+024,0.1907906783736673E+005,0.1885645640275221E+005,0.1914771704932694E+005,0.1500431466454382E+005,0.1751880990715554E+005,0.1901263432840236E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1897956036049080E+005,0.1378741630480517E+005,0.1637538834495614E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826537562708134E+001,0.1839681013415110E+001,0.1837408981770351E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1887858206432528E+005,0.1651254182192374E+005,0.1682642470482997E+005,0.1907906783736673E+005,0.1885645640275221E+005,0.1902387469574473E+005,0.1511802603581497E+005,0.1700901102540375E+005,0.1896118449268716E+005 +0.9680000000000050E-007,0.1340576181885277E+024,0.9603858937430814E+023,0.1233416175709337E+024,0.2452517656525484E+021,0.6366535630817175E+022,0.3600496125302392E+024,0.1911796114885515E+005,0.1882570710829838E+005,0.1909986048704946E+005,0.1531518335041290E+005,0.1740569449028654E+005,0.1900093817786838E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1895970503475588E+005,0.1395384173457348E+005,0.1650475469399715E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826361482280102E+001,0.1841539813252459E+001,0.1838647184847530E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1887082982269158E+005,0.1662853393285356E+005,0.1679889882200466E+005,0.1911796114885515E+005,0.1882570710829838E+005,0.1899526071597524E+005,0.1533268472921708E+005,0.1698600596430326E+005,0.1895769642970236E+005 +0.9700000000000050E-007,0.1342177826069130E+024,0.9601856882200997E+023,0.1232415148094428E+024,0.2352414895034648E+021,0.6406576735413509E+022,0.3601196844632828E+024,0.1914323239478800E+005,0.1881211619667188E+005,0.1909630060265968E+005,0.1551826421017113E+005,0.1767199315426036E+005,0.1901034435594453E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1891908670240533E+005,0.1488937244933413E+005,0.1638825640095971E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826000157046602E+001,0.1851236160197184E+001,0.1837532995470858E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1881743337481936E+005,0.1643256699664358E+005,0.1665489413300139E+005,0.1914323239478800E+005,0.1881211619667188E+005,0.1896718735257191E+005,0.1561523625855754E+005,0.1702949436308575E+005,0.1895479194005376E+005 +0.9720000000000050E-007,0.1343629316110747E+024,0.9604359451238268E+023,0.1231814531525483E+024,0.2352414895034648E+021,0.6381551045040801E+022,0.3602047718105500E+024,0.1913248028795276E+005,0.1879484390738089E+005,0.1912024813926148E+005,0.1574078349368418E+005,0.1768118912116190E+005,0.1901034436586036E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1892061908479826E+005,0.1595516541833901E+005,0.1640653232391231E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826013815804954E+001,0.1860931652034010E+001,0.1837708802048389E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1874453583717726E+005,0.1668934062003034E+005,0.1673910637026062E+005,0.1913248028795276E+005,0.1879484390738089E+005,0.1895676326422790E+005,0.1607544130378287E+005,0.1706305611198305E+005,0.1894370386494911E+005 +0.9740000000000050E-007,0.1344430138202674E+024,0.9606361506468086E+023,0.1231514223241011E+024,0.2352414895034648E+021,0.6361530492742633E+022,0.3602548231912954E+024,0.1911112526404560E+005,0.1881411567008202E+005,0.1911262484155493E+005,0.1503771889839165E+005,0.1773135849684403E+005,0.1900541452738493E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1893203345805488E+005,0.1619735566483624E+005,0.1659447137482830E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826115489464213E+001,0.1862961302629128E+001,0.1839494881867311E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1870916888442635E+005,0.1671138980526014E+005,0.1670792112017610E+005,0.1911112526404560E+005,0.1881411567008202E+005,0.1894610368634084E+005,0.1584024422118770E+005,0.1712631779325119E+005,0.1893833002722325E+005 +0.9760000000000050E-007,0.1345881628244291E+024,0.9608864075505356E+023,0.1231013709433557E+024,0.2452517656525484E+021,0.6316484250071757E+022,0.3603399105385626E+024,0.1910557594933813E+005,0.1877504043081769E+005,0.1907410816375406E+005,0.1538304986748955E+005,0.1754588046302378E+005,0.1897681090568540E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1889951608826306E+005,0.1702071666691062E+005,0.1651432757159570E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825825527464558E+001,0.1869439496743317E+001,0.1838738061286164E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1881027907281596E+005,0.1752470516181615E+005,0.1662277954345947E+005,0.1910557594933813E+005,0.1877504043081769E+005,0.1895010369765762E+005,0.1645225348875708E+005,0.1699856349178080E+005,0.1892558145762155E+005 +0.9780000000000051E-007,0.1347983786235599E+024,0.9610866130735172E+023,0.1230062733199394E+024,0.2452517656525484E+021,0.6296463697773589E+022,0.3604550287142771E+024,0.1908841253131627E+005,0.1879666385043116E+005,0.1905347949982605E+005,0.1544223100692975E+005,0.1754433891352517E+005,0.1896924928016535E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1885889713036746E+005,0.1873923004314464E+005,0.1634668224930944E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825461962449574E+001,0.1881165435056429E+001,0.1837131648806847E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1880332631319014E+005,0.1664093072036018E+005,0.1652824515231782E+005,0.1908841253131627E+005,0.1879666385043116E+005,0.1892813866692882E+005,0.1669196117754759E+005,0.1692530147179499E+005,0.1891651327849049E+005 +0.9800000000000051E-007,0.1348884711089016E+024,0.9609865103120263E+023,0.1229512168011194E+024,0.2402466275780066E+021,0.6316484250071757E+022,0.3604950698188734E+024,0.1912706908635685E+005,0.1876323270835544E+005,0.1901043262024889E+005,0.1647670539929054E+005,0.1727797301587939E+005,0.1895613385629102E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1889515842158192E+005,0.1934390168026830E+005,0.1652955383258155E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825786596105158E+001,0.1884805899173402E+001,0.1838882395412118E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1878056826030547E+005,0.1620415058675208E+005,0.1649128344121155E+005,0.1912706908635685E+005,0.1876323270835544E+005,0.1891224689509420E+005,0.1718246223696426E+005,0.1684666950174533E+005,0.1891555959672763E+005 +0.9820000000000051E-007,0.1349685533180943E+024,0.9612868185964990E+023,0.1229211859726722E+024,0.2352414895034648E+021,0.6296463697773589E+022,0.3605501263376934E+024,0.1910665725629194E+005,0.1871319583076011E+005,0.1906540740265469E+005,0.1656964491988847E+005,0.1740106022992749E+005,0.1895624973875600E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887846418285396E+005,0.1997425774963336E+005,0.1664781368198018E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825637288874518E+001,0.1888370971448521E+001,0.1839994686233060E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1875663639228739E+005,0.1589269157066217E+005,0.1637796006093436E+005,0.1910665725629194E+005,0.1871319583076011E+005,0.1892493223628921E+005,0.1730643237795297E+005,0.1689928060273849E+005,0.1890007588996866E+005 +0.9840000000000051E-007,0.1350786663557342E+024,0.9611867158350081E+023,0.1228611243157777E+024,0.2352414895034648E+021,0.6306473973922673E+022,0.3606001777184388E+024,0.1908087334324962E+005,0.1873073686932107E+005,0.1907812432613964E+005,0.1580460068987743E+005,0.1757971262124135E+005,0.1895821631450741E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887097109866597E+005,0.2065196878074697E+005,0.1668880428206451E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825570190274883E+001,0.1891965721820316E+001,0.1840376649829474E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1870400231654669E+005,0.1642257505290944E+005,0.1635008896077838E+005,0.1908087334324962E+005,0.1873073686932107E+005,0.1891309536230509E+005,0.1731462024236673E+005,0.1698049792367238E+005,0.1889249433722600E+005 +0.9860000000000051E-007,0.1351637537030014E+024,0.9611366644542627E+023,0.1228010626588832E+024,0.2202260752798394E+021,0.6341509940444466E+022,0.3606402188230351E+024,0.1908201737747730E+005,0.1871489581781058E+005,0.1908578621233106E+005,0.1668155852437187E+005,0.1760790338957324E+005,0.1895807298078379E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1888330154092143E+005,0.2022730474880832E+005,0.1649543929599053E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825680578757507E+001,0.1889740828600290E+001,0.1838558654390201E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1866441161118508E+005,0.1739913693814235E+005,0.1638493144407154E+005,0.1908201737747730E+005,0.1871489581781058E+005,0.1890815974411428E+005,0.1786240094473424E+005,0.1695114593453921E+005,0.1888676229675888E+005 +0.9880000000000051E-007,0.1353489438117595E+024,0.9604859965045722E+023,0.1226759342070196E+024,0.2202260752798394E+021,0.6406576735413509E+022,0.3607002804799297E+024,0.1906239964290251E+005,0.1868457320758414E+005,0.1907396991343061E+005,0.1588119533613363E+005,0.1733920050132368E+005,0.1893317684916019E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887691534728323E+005,0.1846902557178933E+005,0.1665204134565908E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825623423687715E+001,0.1879463234837652E+001,0.1840034165420047E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1869174804297332E+005,0.1776268251441441E+005,0.1665958449069120E+005,0.1906239964290251E+005,0.1868457320758414E+005,0.1890926830262734E+005,0.1713517487610588E+005,0.1695563102179786E+005,0.1887111387473643E+005 +0.9900000000000052E-007,0.1355091082301448E+024,0.9606862020275538E+023,0.1226008571359015E+024,0.2152209372052976E+021,0.6396566459264426E+022,0.3607903729652715E+024,0.1903870413176763E+005,0.1867754723074592E+005,0.1904670354276415E+005,0.1651859717019625E+005,0.1739395225102655E+005,0.1891459257457345E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1888360626805464E+005,0.1913774468547703E+005,0.1652571748805650E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825683305064653E+001,0.1883590031569099E+001,0.1838846053927675E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1869788645636251E+005,0.1606395823382886E+005,0.1677179637621451E+005,0.1903870413176763E+005,0.1867754723074592E+005,0.1890087226113944E+005,0.1710319361766071E+005,0.1697855149554927E+005,0.1885802132767182E+005 +0.9920000000000052E-007,0.1356292315439338E+024,0.9608864075505356E+023,0.1225458006170815E+024,0.2102157991307558E+021,0.6386556183115342E+022,0.3608604448983150E+024,0.1904352387792975E+005,0.1867770972417073E+005,0.1904069268221781E+005,0.1571498127555774E+005,0.1762424780633538E+005,0.1891809717848829E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1889164950453515E+005,0.1945902610397962E+005,0.1647644233639484E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825755234828785E+001,0.1885473893618047E+001,0.1838377812417751E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1862599134994373E+005,0.1549715768581609E+005,0.1667923129623969E+005,0.1904352387792975E+005,0.1867770972417073E+005,0.1887931581057184E+005,0.1667695596362984E+005,0.1703929429267634E+005,0.1885350247306082E+005 +0.9940000000000052E-007,0.1357944011003937E+024,0.9612367672157536E+023,0.1224757286840379E+024,0.2052106610562140E+021,0.6361530492742633E+022,0.3609605476598058E+024,0.1904943667199358E+005,0.1869771957910789E+005,0.1896494159249996E+005,0.1570605910726983E+005,0.1771559170770737E+005,0.1890169662382474E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1891781104145119E+005,0.1951848717814251E+005,0.1650592118303070E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825988784918385E+001,0.1885815884949881E+001,0.1838658263938485E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1860600948901105E+005,0.1550410623243884E+005,0.1648635951804459E+005,0.1904943667199358E+005,0.1869771957910789E+005,0.1884716758349542E+005,0.1669150974667041E+005,0.1703086161805550E+005,0.1885022794099836E+005 +0.9960000000000052E-007,0.1358444524811391E+024,0.9615370755002261E+023,0.1224657184078889E+024,0.2052106610562140E+021,0.6331499664295382E+022,0.3610005887644022E+024,0.1905680371247572E+005,0.1867635382906612E+005,0.1896006010612072E+005,0.1583583026871469E+005,0.1761191699150980E+005,0.1889547788151751E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1895065299172928E+005,0.1913000058918297E+005,0.1673212498891488E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826281088634379E+001,0.1883543858452651E+001,0.1840778350576532E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1856078309591698E+005,0.1587060028556891E+005,0.1654769986378305E+005,0.1905680371247572E+005,0.1867635382906612E+005,0.1884056106338757E+005,0.1674731633440148E+005,0.1706403542968070E+005,0.1884584804172859E+005 +0.9980000000000052E-007,0.1360546682802699E+024,0.9613368699772443E+023,0.1223606105083235E+024,0.2152209372052976E+021,0.6331499664295382E+022,0.3610956863878185E+024,0.1904312113814497E+005,0.1865337263002275E+005,0.1896596826498784E+005,0.1557520179715666E+005,0.1785086525822153E+005,0.1889024318256466E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1892394443280668E+005,0.1834393483021309E+005,0.1660843876939294E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826043448640230E+001,0.1878658587519310E+001,0.1839626054204888E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1853158723643417E+005,0.1587860367323993E+005,0.1651569449511720E+005,0.1904312113814497E+005,0.1865337263002275E+005,0.1882745473109921E+005,0.1641959722213167E+005,0.1712627276936094E+005,0.1883110476884077E+005 +0.1000000000000000E-006,0.1361047196610153E+024,0.9616371782617168E+023,0.1223506002321744E+024,0.2152209372052976E+021,0.6301468835848132E+022,0.3611357274924148E+024,0.1902251521382607E+005,0.1864768437127644E+005,0.1897980576422724E+005,0.1481168640783540E+005,0.1777665131206958E+005,0.1888398645182978E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887191403594963E+005,0.1823808711560371E+005,0.1665088306876403E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825578636868022E+001,0.1877969286184467E+001,0.1840023351020406E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1857825101245568E+005,0.1625022500075497E+005,0.1653814885628155E+005,0.1902251521382607E+005,0.1864768437127644E+005,0.1883328714785974E+005,0.1616553840829329E+005,0.1711167627709153E+005,0.1882355049615058E+005 diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/externals.ini b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/externals.ini new file mode 100644 index 000000000..563c06535 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/externals.ini @@ -0,0 +1,7 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre + +nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_001_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_001_ref.csv new file mode 100644 index 000000000..68b179263 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_001_ref.csv @@ -0,0 +1,3 @@ +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate001+006,011-CollRate002+002,012-CollRate002+003,013-CollRate002+004,014-CollRate002+005,015-CollRate002+006,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate003+006,020-CollRate004+004,021-CollRate004+005,022-CollRate004+006,023-CollRate005+005,024-CollRate005+006,025-CollRate006+006,026-TotalCollRate +0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 +1.00000000000000E-009,7.28671535893542E-004,3.91095315500101E-001,5.88191818557925E-005,0.00000000000000E+000,0.00000000000000E+000,1.02477999999986E+014,4.84799999999932E+012,4.71399999999933E+012,3.20199999999955E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.15241999999984E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_010_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_010_ref.csv new file mode 100644 index 000000000..280686aff --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_010_ref.csv @@ -0,0 +1,3 @@ +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate001+006,011-CollRate002+002,012-CollRate002+003,013-CollRate002+004,014-CollRate002+005,015-CollRate002+006,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate003+006,020-CollRate004+004,021-CollRate004+005,022-CollRate004+006,023-CollRate005+005,024-CollRate005+006,025-CollRate006+006,026-TotalCollRate +0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 +1.00000000000000E-009,1.00394992012240E-003,4.24685438364297E-001,5.88191818591117E-005,0.00000000000000E+000,0.00000000000000E+000,1.11731999999984E+014,7.43599999999895E+012,4.96999999999930E+012,3.13599999999956E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.27273999999982E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_050_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_050_ref.csv new file mode 100644 index 000000000..b56163106 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_050_ref.csv @@ -0,0 +1,3 @@ +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate001+006,011-CollRate002+002,012-CollRate002+003,013-CollRate002+004,014-CollRate002+005,015-CollRate002+006,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate003+006,020-CollRate004+004,021-CollRate004+005,022-CollRate004+006,023-CollRate005+005,024-CollRate005+006,025-CollRate006+006,026-TotalCollRate +0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 +1.00000000000000E-009,1.60901711016375E-003,4.57083630796254E-001,5.88191819002675E-005,0.00000000000000E+000,0.00000000000000E+000,1.20868999999983E+014,1.34099999999981E+013,1.26259999999982E+013,1.83999999999974E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.48744999999979E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_100_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_100_ref.csv new file mode 100644 index 000000000..93153b607 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_100_ref.csv @@ -0,0 +1,3 @@ +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate001+006,011-CollRate002+002,012-CollRate002+003,013-CollRate002+004,014-CollRate002+005,015-CollRate002+006,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate003+006,020-CollRate004+004,021-CollRate004+005,022-CollRate004+006,023-CollRate005+005,024-CollRate005+006,025-CollRate006+006,026-TotalCollRate +0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 +1.00000000000000E-009,1.93874473680545E-003,5.12120879655489E-001,5.88191820195864E-005,0.00000000000000E+000,0.00000000000000E+000,1.35061999999981E+014,1.66679999999976E+013,1.54259999999978E+013,1.73199999999976E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.68887999999976E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_150_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_150_ref.csv new file mode 100644 index 000000000..a06c5bc22 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_150_ref.csv @@ -0,0 +1,3 @@ +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate001+006,011-CollRate002+002,012-CollRate002+003,013-CollRate002+004,014-CollRate002+005,015-CollRate002+006,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate003+006,020-CollRate004+004,021-CollRate004+005,022-CollRate004+006,023-CollRate005+005,024-CollRate005+006,025-CollRate006+006,026-TotalCollRate +0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 +1.00000000000000E-009,2.14174542721335E-003,5.18064450636107E-001,5.88191818249936E-005,0.00000000000000E+000,0.00000000000000E+000,1.36544999999981E+014,1.87039999999974E+013,1.66429999999976E+013,2.01799999999972E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.73909999999975E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_200_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_200_ref.csv new file mode 100644 index 000000000..749e53cf1 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_200_ref.csv @@ -0,0 +1,3 @@ +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate001+006,011-CollRate002+002,012-CollRate002+003,013-CollRate002+004,014-CollRate002+005,015-CollRate002+006,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate003+006,020-CollRate004+004,021-CollRate004+005,022-CollRate004+006,023-CollRate005+005,024-CollRate005+006,025-CollRate006+006,026-TotalCollRate +0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 +1.00000000000000E-009,2.25654789673067E-003,5.10124845460034E-001,5.88191820336924E-005,0.00000000000000E+000,0.00000000000000E+000,1.34603999999981E+014,1.99589999999972E+013,1.74839999999975E+013,2.58199999999963E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.74628999999975E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/externals.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/externals.ini new file mode 100644 index 000000000..563c06535 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/externals.ini @@ -0,0 +1,7 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre + +nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/PartAnalyze_ref.csv b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/PartAnalyze_ref.csv new file mode 100644 index 000000000..bcfef0e6a --- /dev/null +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/PartAnalyze_ref.csv @@ -0,0 +1,2 @@ +001-TIME,002-NumDens-Spec-001,003-NumDens-Spec-002,004-NumDens-Spec-003,005-NumDens-Spec-004,006-NumDens-Spec-005,007-NumDens-Spec-006,008-NumDens-Spec-007,009-NumDens-Spec-008,010-NumDens-Spec-009,011-NumDens-Spec-010,012-NumDens-Spec-011,013-NumDens-Spec-012,014-NumDens-Spec-013,015-NumDens-Spec-014,016-NumDens-Spec-015,017-NumDens-Spec-016,018-NumDens-Spec-017,019-NumDens-Spec-018,020-NumDens-Spec-019 +5.00000000000000E-006,0.00000000000000E+000,0.00000000000000E+000,5.00513807454180E+016,1.14968021572225E+020,2.59201085466296E+021,6.66183877721513E+019,1.34513085753311E+021,2.92800577360695E+020,7.38758379802369E+019,7.03722413280576E+019,3.41525596516359E+021,3.73723649749887E+021,1.70503532105918E+022,1.60419680427139E+021,2.50256903727090E+017,1.05107899565378E+019,9.52627929727540E+020,6.40807827683586E+020,3.19670661113873E+022 diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/externals.ini b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/externals.ini new file mode 100644 index 000000000..563c06535 --- /dev/null +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/externals.ini @@ -0,0 +1,7 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre + +nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime From 3906ab16a53f76069c9033bcb64da8fe635fe9b2 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Mon, 31 Jul 2023 16:44:21 +0200 Subject: [PATCH 060/222] add database on top level --- SpeciesDatabase.h5 | Bin 0 -> 232944 bytes .../parameter.ini | 2 +- .../parameter.ini | 2 +- .../parameter.ini | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 SpeciesDatabase.h5 diff --git a/SpeciesDatabase.h5 b/SpeciesDatabase.h5 new file mode 100644 index 0000000000000000000000000000000000000000..2f6c9530ed89effde63fdd23ab9f955d90338328 GIT binary patch literal 232944 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 I5#bvC59ZuDO#lD@ literal 0 HcmV?d00001 diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini index c07957cba..dce8aa23f 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini +++ b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini @@ -35,7 +35,7 @@ CFLscale = 0.2 ! Scaling of theoretical CFL number ! =============================================================================== ! Part-maxParticleNumber=500000 Part-nSpecies=5 -Particles-Species-Database = Species_Database.h5 +Particles-Species-Database = ../../../SpeciesDatabase.h5 Part-nBounds=1 Part-Boundary1-SourceName=BC_adiabat Part-Boundary1-Condition=reflective diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter.ini index b596b535a..26296761b 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter.ini +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter.ini @@ -71,7 +71,7 @@ Part-FIBGMdeltas = (/0.01,0.01,0.01/) ! SPECIES ! =============================================================================== ! Part-nSpecies=6 -Particles-Species-Database = Species_Database.h5 +Particles-Species-Database = ../../../SpeciesDatabase.h5 ! =============================================================================== ! ! Weighting Factor ! =============================================================================== ! diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini index a24e877fa..da551c5c3 100755 --- a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini @@ -39,7 +39,7 @@ Part-FIBGMdeltas=(/4.64E-6,4.64E-6,4.64E-6/) ! =============================================================================== ! Part-maxParticleNumber=500000 Part-nSpecies=18 -Particles-Species-Database = Species_Database.h5 +Particles-Species-Database = ../../../SpeciesDatabase.h5 Part-Species1-MacroParticleFactor = 10 Part-Species2-MacroParticleFactor = 10 Part-Species3-MacroParticleFactor = 10 From 46d4ac8cc41f063f28fafcd51c91cadd7f714498 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Mon, 31 Jul 2023 16:59:06 +0200 Subject: [PATCH 061/222] missing species names --- .../SurfFlux_RefMapping_Tracing_TriaTracking/parameter.ini | 1 + .../CHE_DSMC/Symmetry_Initial_Particle_Emission/DSMC.ini | 3 ++- .../CHE_DSMC/Symmetry_Initial_Particle_Emission2/DSMC.ini | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/regressioncheck/CHE_DSMC/SurfFlux_RefMapping_Tracing_TriaTracking/parameter.ini b/regressioncheck/CHE_DSMC/SurfFlux_RefMapping_Tracing_TriaTracking/parameter.ini index f4806cef9..49d93e5be 100644 --- a/regressioncheck/CHE_DSMC/SurfFlux_RefMapping_Tracing_TriaTracking/parameter.ini +++ b/regressioncheck/CHE_DSMC/SurfFlux_RefMapping_Tracing_TriaTracking/parameter.ini @@ -44,6 +44,7 @@ Part-FIBGMdeltas=(/.5,.5,.5/) BezierSampleN=1 !enough for VeloIsNormal +Part-Species1-SpeciesName=Ar Part-Species1-ChargeIC=0. Part-Species1-MassIC=1.0E-26 Part-Species1-MacroParticleFactor=10 diff --git a/regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission/DSMC.ini b/regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission/DSMC.ini index fa26a45d0..0afd6329c 100644 --- a/regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission/DSMC.ini +++ b/regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission/DSMC.ini @@ -1,10 +1,11 @@ ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! +Part-Species1-SpeciesName = O2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 Part-Species1-omega=0.27 Part-Species1-CharaTempRot=2.1 Part-Species1-CharaTempVib=2272.18 -Part-Species1-Ediss_eV=5.17 \ No newline at end of file +Part-Species1-Ediss_eV=5.17 diff --git a/regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission2/DSMC.ini b/regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission2/DSMC.ini index fa26a45d0..0afd6329c 100644 --- a/regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission2/DSMC.ini +++ b/regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission2/DSMC.ini @@ -1,10 +1,11 @@ ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! +Part-Species1-SpeciesName = O2 Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 Part-Species1-omega=0.27 Part-Species1-CharaTempRot=2.1 Part-Species1-CharaTempVib=2272.18 -Part-Species1-Ediss_eV=5.17 \ No newline at end of file +Part-Species1-Ediss_eV=5.17 From 3dff8fa9e86b1721c3d0d8da28f963780aa81776 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Mon, 31 Jul 2023 17:03:46 +0200 Subject: [PATCH 062/222] bugfix --- src/particles/dsmc/dsmc_chemical_init.f90 | 1 + 1 file changed, 1 insertion(+) diff --git a/src/particles/dsmc/dsmc_chemical_init.f90 b/src/particles/dsmc/dsmc_chemical_init.f90 index 7dbcc2dde..c8517c9b0 100644 --- a/src/particles/dsmc/dsmc_chemical_init.f90 +++ b/src/particles/dsmc/dsmc_chemical_init.f90 @@ -601,6 +601,7 @@ SUBROUTINE InitReactionPaths() ! MODULES USE MOD_Globals USE MOD_DSMC_Vars ,ONLY: ChemReac,CollInf +USE MOD_PARTICLE_Vars,ONLY: Species #if USE_HDG USE MOD_DSMC_Vars ,ONLY: SpecDSMC USE MOD_HDG_Vars ,ONLY: UseBRElectronFluid ! Used for skipping reactions involving electrons as products From 4f501dfae2a429d4e3a08f8f620148a2ea537e35 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 31 Jul 2023 18:11:07 +0200 Subject: [PATCH 063/222] Moved SpeciesName to particle_vars and Species container --- .../parameter.ini | 2 + .../parameter.ini | 2 + .../parameter.ini | 2 +- .../IMD_coupling/parameter.ini | 4 + src/particles/dsmc/dsmc_chemical_init.f90 | 7 +- src/particles/dsmc/dsmc_electronic_model.f90 | 2 +- src/particles/dsmc/dsmc_init.f90 | 34 +++---- src/particles/dsmc/dsmc_polyatomic_model.f90 | 24 ++--- src/particles/dsmc/dsmc_vars.f90 | 1 - src/particles/mcc/mcc_init.f90 | 15 ++-- src/particles/mcc/mcc_xsec.f90 | 89 +++++++++---------- src/particles/particle_init.f90 | 10 +-- src/particles/particle_vars.f90 | 1 + src/particles/pic/models/pic_models.f90 | 4 +- src/particles/restart/particle_readin.f90 | 2 +- 15 files changed, 102 insertions(+), 97 deletions(-) diff --git a/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Regions/parameter.ini b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Regions/parameter.ini index aaafde821..092064778 100644 --- a/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Regions/parameter.ini +++ b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Regions/parameter.ini @@ -53,6 +53,8 @@ TrackingMethod = triatracking ! =============================================================================== ! Part-maxParticleNumber=10 Part-nSpecies=1 + +Part-Species1-SpeciesName = custom Part-Species1-ChargeIC=0. Part-Species1-MassIC=1. Part-Species1-MacroParticleFactor=1E0 diff --git a/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_RotBC/parameter.ini b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_RotBC/parameter.ini index a2e581d29..2c173c925 100644 --- a/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_RotBC/parameter.ini +++ b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_RotBC/parameter.ini @@ -57,6 +57,8 @@ TrackingMethod = triatracking ! =============================================================================== ! Part-maxParticleNumber=10 Part-nSpecies=1 + +Part-Species1-SpeciesName = custom Part-Species1-ChargeIC=0. Part-Species1-MassIC=1. Part-Species1-MacroParticleFactor=1 diff --git a/regressioncheck/CHE_PIC_maxwell_RK4/2D_variable_particle_init_n_T_v/parameter.ini b/regressioncheck/CHE_PIC_maxwell_RK4/2D_variable_particle_init_n_T_v/parameter.ini index 927a37c10..ab1071ac3 100644 --- a/regressioncheck/CHE_PIC_maxwell_RK4/2D_variable_particle_init_n_T_v/parameter.ini +++ b/regressioncheck/CHE_PIC_maxwell_RK4/2D_variable_particle_init_n_T_v/parameter.ini @@ -89,7 +89,7 @@ Part-Species1-Init1-EmissionDistributionName = electron ! =============================================================================== ! ! Species2 | HeIon ! =============================================================================== ! -Part-Species1-SpeciesName = HeIon1 +Part-Species2-SpeciesName = HeIon1 Part-Species2-ChargeIC = 1.60217653E-19 Part-Species2-MassIC = 6.645565470903E-027 Part-Species2-MacroParticleFactor = 2E11 diff --git a/regressioncheck/CHE_PIC_maxwell_RK4/IMD_coupling/parameter.ini b/regressioncheck/CHE_PIC_maxwell_RK4/IMD_coupling/parameter.ini index b393dd39d..3b6b18fcd 100644 --- a/regressioncheck/CHE_PIC_maxwell_RK4/IMD_coupling/parameter.ini +++ b/regressioncheck/CHE_PIC_maxwell_RK4/IMD_coupling/parameter.ini @@ -129,6 +129,7 @@ Part-Species1-MacroParticleFactor=1 ! =============================================================================== ! ! Species2, Al ! =============================================================================== ! +Part-Species2-SpeciesName = Al Part-Species2-ChargeIC = 0 Part-Species2-MassIC = 4.47908080018E-26 Part-Species2-MacroParticleFactor = 1 @@ -141,6 +142,7 @@ Part-Species2-Init1-velocityDistribution = IMD ! =============================================================================== ! ! Species3, Al+ ! =============================================================================== ! +Part-Species3-SpeciesName = AlIon1 Part-Species3-ChargeIC = 1.60217653E-19 Part-Species3-MassIC = 4.47908080018E-26 Part-Species3-MacroParticleFactor = 1 @@ -148,6 +150,7 @@ Part-Species3-IsIMDSpecies = T ! =============================================================================== ! ! Species4, Al+2 ! =============================================================================== ! +Part-Species4-SpeciesName = AlIon2 Part-Species4-ChargeIC = 3.20435306E-19 Part-Species4-MassIC = 4.47908080018E-26 Part-Species4-MacroParticleFactor = 1 @@ -155,6 +158,7 @@ Part-Species4-IsIMDSpecies = T ! =============================================================================== ! ! Species5, Al+3 ! =============================================================================== ! +Part-Species5-SpeciesName = AlIon3 Part-Species5-ChargeIC = 4.80652959E-19 Part-Species5-MassIC = 4.47908080018E-26 Part-Species5-MacroParticleFactor = 1 diff --git a/src/particles/dsmc/dsmc_chemical_init.f90 b/src/particles/dsmc/dsmc_chemical_init.f90 index c8517c9b0..50918098d 100644 --- a/src/particles/dsmc/dsmc_chemical_init.f90 +++ b/src/particles/dsmc/dsmc_chemical_init.f90 @@ -601,9 +601,8 @@ SUBROUTINE InitReactionPaths() ! MODULES USE MOD_Globals USE MOD_DSMC_Vars ,ONLY: ChemReac,CollInf -USE MOD_PARTICLE_Vars,ONLY: Species #if USE_HDG -USE MOD_DSMC_Vars ,ONLY: SpecDSMC +USE MOD_Particle_Vars ,ONLY: Species USE MOD_HDG_Vars ,ONLY: UseBRElectronFluid ! Used for skipping reactions involving electrons as products #endif /*USE_HDG*/ ! IMPLICIT VARIABLE HANDLING @@ -745,8 +744,8 @@ SUBROUTINE DSMC_BackwardRate_init() CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) - dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) CALL ReadAttribute(file_id_specdb,'SymmetryFactor',1,DatasetName = dsetname,IntScalar=SpecDSMC(iSpec)%SymmetryFactor) LBWRITE (UNIT_stdOut,*) 'SymmetryFactor: ', SpecDSMC(iSpec)%SymmetryFactor diff --git a/src/particles/dsmc/dsmc_electronic_model.f90 b/src/particles/dsmc/dsmc_electronic_model.f90 index 899d055bd..2d40845e9 100644 --- a/src/particles/dsmc/dsmc_electronic_model.f90 +++ b/src/particles/dsmc/dsmc_electronic_model.f90 @@ -1223,7 +1223,7 @@ SUBROUTINE ReadSpeciesLevel ( Dsetname, iSpec ) datasetname = dsetname ElLevelDatabase = TRIM(DSMC%ElectronicModelDatabase) ELSE - datasetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + datasetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) ElLevelDatabase = TRIM(SpeciesDatabase) END IF LBWRITE(UNIT_StdOut,'(A)') 'Read electronic level entries '//TRIM(datasetname)//' from '//TRIM(ElLevelDatabase) diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index a624fab2c..a4d777e01 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -416,7 +416,7 @@ SUBROUTINE InitDSMC() ! Flags for collision parameters CollInf%averagedCollisionParameters = GETLOGICAL('Particles-DSMC-averagedCollisionParameters') CollInf%crossSectionConstantMode = GETINT('Particles-DSMC-crossSectionConstantMode','0') - + ALLOCATE(SpecDSMC(nSpecies)) IF(SpeciesDatabase.NE.'none') THEN ! Initialize FORTRAN interface. CALL H5OPEN_F(err) @@ -427,8 +427,8 @@ SUBROUTINE InitDSMC() WRITE(UNIT=hilf,FMT='(I0)') iSpec ! averagedCollisionParameters set true: species-specific collision parameters get read in IF(CollInf%averagedCollisionParameters) THEN - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) - dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) CALL ReadAttribute(file_id_specdb,'Tref',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%Tref) LBWRITE (UNIT_stdOut,*) 'Tref: ', SpecDSMC(iSpec)%Tref @@ -688,15 +688,15 @@ SUBROUTINE InitDSMC() DO iSpec = 1, nSpecies IF(.NOT.Species(iSpec)%DoOverwriteParameters) THEN - dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) WRITE(UNIT=hilf,FMT='(I0)') iSpec IF(Species(iSpec)%InterID.NE.4) THEN - dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) CALL AttributeExists(file_id_specdb,'PolyatomicMol',TRIM(dsetname),AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'PolyatomicMol',1,DatasetName = dsetname,IntScalar=IntToLog) IF(IntToLog.EQ.1) SpecDSMC(iSpec)%PolyatomicMol = .TRUE. - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) LBWRITE (UNIT_stdOut,*) 'PolyatomicMol: ', SpecDSMC(iSpec)%PolyatomicMol ELSE SpecDSMC(iSpec)%PolyatomicMol = .FALSE. @@ -710,7 +710,7 @@ SUBROUTINE InitDSMC() DSMC%NumPolyatomMolecs = DSMC%NumPolyatomMolecs + 1 SpecDSMC(iSpec)%SpecToPolyArray = DSMC%NumPolyatomMolecs ELSEIF ((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) SpecDSMC(iSpec)%Xi_Rot = 2 CALL ReadAttribute(file_id_specdb,'CharaTempVib',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%CharaTVib) LBWRITE (UNIT_stdOut,*) 'CharaTempVib: ', SpecDSMC(iSpec)%CharaTVib @@ -1028,8 +1028,8 @@ SUBROUTINE InitDSMC() CALL H5OPEN_F(err) CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) DO iSpec = 1, nSpecies - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) - dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) WRITE(UNIT=hilf,FMT='(I0)') iSpec ! Read-in of heat of formation, ions are treated later using the heat of formation of their ground state and data from the ! from the electronic state database to ensure consistent energies across chemical reactions of QK and Arrhenius type. @@ -1068,14 +1068,14 @@ SUBROUTINE InitDSMC() CALL H5OPEN_F(err) CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) DO iSpec=1,nSpecies - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) - dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) WRITE(UNIT=hilf,FMT='(I0)') iSpec CALL AttributeExists(file_id_specdb,'PreviousState',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'PreviousState',1,DatasetName = dsetname,StrScalar=hilfname) DO jSpec=1,nSpecies - IF(TRIM(hilfname).EQ.TRIM(SpecDSMC(jSpec)%Name)) THEN + IF(TRIM(hilfname).EQ.TRIM(Species(jSpec)%Name)) THEN SpecDSMC(iSpec)%PreviousState=jSpec END IF END DO @@ -1327,6 +1327,7 @@ SUBROUTINE SetElectronicModel(iSpec) ! MODULES ! USE MOD_Globals ,ONLY: abort USE MOD_DSMC_Vars ,ONLY: SpecDSMC +USE MOD_Particle_Vars ,ONLY: Species USE MOD_DSMC_ElectronicModel ,ONLY: ReadSpeciesLevel IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------! @@ -1335,9 +1336,9 @@ SUBROUTINE SetElectronicModel(iSpec) !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES !=================================================================================================================================== -IF(SpecDSMC(iSpec)%Name.EQ.'none') CALL Abort(__STAMP__,& +IF(Species(iSpec)%Name.EQ.'none') CALL Abort(__STAMP__,& "Read-in from electronic database requires the definition of species name! Species:",IntInfoOpt=iSpec) -IF(.NOT.SpecDSMC(iSpec)%FullyIonized) CALL ReadSpeciesLevel(SpecDSMC(iSpec)%Name,iSpec) +IF(.NOT.SpecDSMC(iSpec)%FullyIonized) CALL ReadSpeciesLevel(Species(iSpec)%Name,iSpec) END SUBROUTINE SetElectronicModel @@ -1381,8 +1382,8 @@ SUBROUTINE CalcHeatOfFormation() ! Initialize FORTRAN interface. CALL H5OPEN_F(err) CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) - dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) ! Read-in of heat of formation, ions are treated later using the heat of formation of their ground state and data from the ! from the electronic state database to ensure consistent energies across chemical reactions of QK and Arrhenius type. IF((Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20).OR.(Species(iSpec)%InterID.EQ.4)) THEN @@ -1714,6 +1715,7 @@ SUBROUTINE FinalizeDSMC() SDEALLOCATE(ChemReac%ReacCollMean) SDEALLOCATE(ChemReac%NumReac) SDEALLOCATE(ChemReac%ReactType) +SDEALLOCATE(ChemReac%ReactionName) SDEALLOCATE(ChemReac%Reactants) SDEALLOCATE(ChemReac%Products) SDEALLOCATE(ChemReac%ReactCase) diff --git a/src/particles/dsmc/dsmc_polyatomic_model.f90 b/src/particles/dsmc/dsmc_polyatomic_model.f90 index 865ddb3c3..4ba52e2f9 100644 --- a/src/particles/dsmc/dsmc_polyatomic_model.f90 +++ b/src/particles/dsmc/dsmc_polyatomic_model.f90 @@ -79,17 +79,17 @@ SUBROUTINE InitPolyAtomicMolecs(iSpec) CALL H5OPEN_F(err) CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) - dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) CALL ReadAttribute(file_id_specdb,'LinearMolec',1,DatasetName = dsetname,IntScalar=IntToLog) IF(IntToLog.EQ.1) THEN PolyatomMolDSMC(iPolyatMole)%LinearMolec = .TRUE. - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) LBWRITE (UNIT_stdOut,*) 'LinearMolec: ', PolyatomMolDSMC(iPolyatMole)%LinearMolec ELSE PolyatomMolDSMC(iPolyatMole)%LinearMolec = .FALSE. - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) LBWRITE (UNIT_stdOut,*) 'LinearMolec: ', PolyatomMolDSMC(iPolyatMole)%LinearMolec END IF @@ -121,11 +121,11 @@ SUBROUTINE InitPolyAtomicMolecs(iSpec) CALL H5OPEN_F(err) CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) - dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) CALL ReadAttribute(file_id_specdb,'NumOfAtoms',1,DatasetName = dsetname,IntScalar=PolyatomMolDSMC(iPolyatMole)%NumOfAtoms) - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) LBWRITE (UNIT_stdOut,*) 'NumOfAtoms: ', PolyatomMolDSMC(iPolyatMole)%NumOfAtoms ! Close the file. @@ -149,8 +149,8 @@ SUBROUTINE InitPolyAtomicMolecs(iSpec) CALL H5OPEN_F(err) CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) - dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) CALL AttributeExists(file_id_specdb,'Ediss_eV',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN @@ -159,7 +159,7 @@ SUBROUTINE InitPolyAtomicMolecs(iSpec) CALL abort(__STAMP__& ,'ERROR in Polyatomic Species-Ini: Missing dissociation energy, Species: ',iSpec) END IF - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) LBWRITE (UNIT_stdOut,*) 'Ediss_eV: ', SpecDSMC(iSpec)%Ediss_eV ! Close the file. @@ -198,8 +198,8 @@ SUBROUTINE InitPolyAtomicMolecs(iSpec) CALL H5OPEN_F(err) CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) - dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) IF(PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN CALL AttributeExists(file_id_specdb,'CharaTempRot',TRIM(dsetname), AttrExists=Attr_Exists) diff --git a/src/particles/dsmc/dsmc_vars.f90 b/src/particles/dsmc/dsmc_vars.f90 index 923788dc1..5603509f4 100644 --- a/src/particles/dsmc/dsmc_vars.f90 +++ b/src/particles/dsmc/dsmc_vars.f90 @@ -108,7 +108,6 @@ MODULE MOD_DSMC_Vars TYPE(tSpecInit),ALLOCATABLE :: Surfaceflux(:) LOGICAL :: PolyatomicMol ! Species is a polyatomic molecule INTEGER :: SpecToPolyArray ! - CHARACTER(LEN=64) :: Name ! Species Name, required for DSMCSpeciesElectronicDatabase REAL :: Tref ! collision model: reference temperature , ini_2 REAL :: dref ! collision model: reference diameter , ini_2 REAL :: omega ! collision model: temperature exponent , ini_2 diff --git a/src/particles/mcc/mcc_init.f90 b/src/particles/mcc/mcc_init.f90 index 7888f4952..a096c62a9 100644 --- a/src/particles/mcc/mcc_init.f90 +++ b/src/particles/mcc/mcc_init.f90 @@ -390,7 +390,7 @@ SUBROUTINE InitMCC() ,RealInfoOpt=TotalProb(partSpec)) ELSEIF(TotalProb(partSpec).GT.0.1) THEN SWRITE(*,*) 'Total null collision probability is above 0.1. A value of 1E-2 is recommended in literature!' - SWRITE(*,*) 'Particle Species: ', TRIM(SpecDSMC(partSpec)%Name), ' Probability: ', TotalProb(partSpec) + SWRITE(*,*) 'Particle Species: ', TRIM(Species(partSpec)%Name), ' Probability: ', TotalProb(partSpec) END IF ! TotalProb(partSpec).GT.1.0 END IF ! XSec_NullCollision END IF ! SpecXSec(iCase)%UseCollXSec @@ -643,11 +643,12 @@ SUBROUTINE InitPhotoionizationXSec() ! MODULES USE MOD_Globals USE MOD_ReadInTools -USE MOD_MCC_Vars ,ONLY: NbrOfPhotonXsecReactions,SpecPhotonXSec,PhotoReacToReac,NbrOfPhotonXsecLines -USE MOD_MCC_Vars ,ONLY: SpecPhotonXSecInterpolated,PhotoIonFirstLine,PhotoIonLastLine,PhotonDistribution,ReacToPhotoReac -USE MOD_MCC_Vars ,ONLY: PhotonSpectrum,PhotonEnergies,MaxPhotonXSec -USE MOD_MCC_XSec ,ONLY: ReadReacPhotonXSec,ReadReacPhotonSpectrum -USE MOD_DSMC_Vars ,ONLY: SpecDSMC,ChemReac +USE MOD_Particle_Vars ,ONLY: Species +USE MOD_MCC_Vars ,ONLY: NbrOfPhotonXsecReactions,SpecPhotonXSec,PhotoReacToReac,NbrOfPhotonXsecLines +USE MOD_MCC_Vars ,ONLY: SpecPhotonXSecInterpolated,PhotoIonFirstLine,PhotoIonLastLine,PhotonDistribution,ReacToPhotoReac +USE MOD_MCC_Vars ,ONLY: PhotonSpectrum,PhotonEnergies,MaxPhotonXSec +USE MOD_MCC_XSec ,ONLY: ReadReacPhotonXSec,ReadReacPhotonSpectrum +USE MOD_DSMC_Vars ,ONLY: ChemReac ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------! @@ -675,7 +676,7 @@ SUBROUTINE InitPhotoionizationXSec() PhotoReacToReac(iPhotoReac) = iReac ReacToPhotoReac(iReac) = iPhotoReac !> 2. Check the educts (photon+X), also switch the ordering of the names.e.g, N2-photon or photon-N2 of the container - EductPair = TRIM(SpecDSMC(ChemReac%Reactants(iReac,1))%Name)//'-photon' + EductPair = TRIM(Species(ChemReac%Reactants(iReac,1))%Name)//'-photon' IF(iPhotoReac.GT.1)THEN IF(TRIM(EductPair).NE.TRIM(EductPairOld)) CALL abort(__STAMP__,'Currently only one photo reaction is implemented') END IF ! iPhotoReac.GT.1 diff --git a/src/particles/mcc/mcc_xsec.f90 b/src/particles/mcc/mcc_xsec.f90 index 2bb49ea9b..a461dabe8 100644 --- a/src/particles/mcc/mcc_xsec.f90 +++ b/src/particles/mcc/mcc_xsec.f90 @@ -37,8 +37,7 @@ SUBROUTINE ReadCollXSec(iCase,iSpec,jSpec) ! use module USE MOD_io_hdf5 USE MOD_Globals -USE MOD_Particle_Vars ,ONLY: SpeciesDatabase -USE MOD_DSMC_Vars ,ONLY: SpecDSMC +USE MOD_Particle_Vars ,ONLY: SpeciesDatabase, Species USE MOD_MCC_Vars ,ONLY: XSec_Database, SpecXSec USE MOD_HDF5_Input ,ONLY: DatasetExists #if USE_LOADBALANCE @@ -62,7 +61,7 @@ SUBROUTINE ReadCollXSec(iCase,iSpec,jSpec) INTEGER(HID_T) :: filespace ! filespace identifier LOGICAL :: DatasetFound !=================================================================================================================================== -spec_pair = TRIM(SpecDSMC(jSpec)%Name)//'-'//TRIM(SpecDSMC(iSpec)%Name) +spec_pair = TRIM(Species(jSpec)%Name)//'-'//TRIM(Species(iSpec)%Name) DatasetFound = .FALSE. @@ -78,7 +77,7 @@ SUBROUTINE ReadCollXSec(iCase,iSpec,jSpec) XSecDatabaseName = TRIM(XSec_Database) ELSE XSecDatabaseName = TRIM(SpeciesDatabase) - spec_pair = TRIM('/Cross-Sections/'//SpecDSMC(jSpec)%Name)//'-'//TRIM(SpecDSMC(iSpec)%Name) + spec_pair = TRIM('/Cross-Sections/'//Species(jSpec)%Name)//'-'//TRIM(Species(iSpec)%Name) END IF ! Open the file. @@ -89,9 +88,9 @@ SUBROUTINE ReadCollXSec(iCase,iSpec,jSpec) IF(.NOT.DatasetFound) THEN ! Try to swap the species names IF (SpeciesDatabase.EQ.'none') THEN - spec_pair = TRIM(SpecDSMC(iSpec)%Name)//'-'//TRIM(SpecDSMC(jSpec)%Name) + spec_pair = TRIM(Species(iSpec)%Name)//'-'//TRIM(Species(jSpec)%Name) ELSE - spec_pair = TRIM('Cross-Sections/'//SpecDSMC(iSpec)%Name)//'-'//TRIM(SpecDSMC(jSpec)%Name) + spec_pair = TRIM('Cross-Sections/'//Species(iSpec)%Name)//'-'//TRIM(Species(jSpec)%Name) END IF CALL H5LEXISTS_F(file_id_dsmc, TRIM(spec_pair), DatasetFound, err) IF(.NOT.DatasetFound) THEN @@ -166,8 +165,7 @@ SUBROUTINE ReadVibXSec(iCase,iSpec,jSpec) ! use module USE MOD_io_hdf5 USE MOD_Globals -USE MOD_Particle_Vars ,ONLY: SpeciesDatabase -USE MOD_DSMC_Vars ,ONLY: SpecDSMC +USE MOD_Particle_Vars ,ONLY: SpeciesDatabase, Species USE MOD_MCC_Vars ,ONLY: XSec_Database, SpecXSec USE MOD_HDF5_Input ,ONLY: DatasetExists #if USE_LOADBALANCE @@ -195,7 +193,7 @@ SUBROUTINE ReadVibXSec(iCase,iSpec,jSpec) LOGICAL :: GroupFound INTEGER :: storage, nVib, max_corder !=================================================================================================================================== -spec_pair = TRIM(SpecDSMC(jSpec)%Name)//'-'//TRIM(SpecDSMC(iSpec)%Name) +spec_pair = TRIM(Species(jSpec)%Name)//'-'//TRIM(Species(iSpec)%Name) GroupFound = .FALSE. SpecXSec(iCase)%UseVibXSec = .FALSE. @@ -204,7 +202,7 @@ SUBROUTINE ReadVibXSec(iCase,iSpec,jSpec) XSecDatabaseName = TRIM(XSec_Database) ELSE XSecDatabaseName = TRIM(SpeciesDatabase) - spec_pair = TRIM('/Cross-Sections/'//SpecDSMC(jSpec)%Name)//'-'//TRIM(SpecDSMC(iSpec)%Name) + spec_pair = TRIM('/Cross-Sections/'//Species(jSpec)%Name)//'-'//TRIM(Species(iSpec)%Name) END IF ! Initialize FORTRAN interface. @@ -223,9 +221,9 @@ SUBROUTINE ReadVibXSec(iCase,iSpec,jSpec) IF(.NOT.GroupFound) THEN ! Try to swap the species names IF (SpeciesDatabase.EQ.'none') THEN - spec_pair = TRIM(SpecDSMC(iSpec)%Name)//'-'//TRIM(SpecDSMC(jSpec)%Name) + spec_pair = TRIM(Species(iSpec)%Name)//'-'//TRIM(Species(jSpec)%Name) ELSE - spec_pair = TRIM('/Cross-Sections/'//SpecDSMC(iSpec)%Name)//'-'//TRIM(SpecDSMC(jSpec)%Name) + spec_pair = TRIM('/Cross-Sections/'//Species(iSpec)%Name)//'-'//TRIM(Species(jSpec)%Name) END IF CALL H5LEXISTS_F(file_id_dsmc, TRIM(spec_pair), GroupFound, err) IF(.NOT.GroupFound) THEN @@ -293,8 +291,7 @@ SUBROUTINE ReadElecXSec(iCase,iSpec,jSpec) ! use module USE MOD_io_hdf5 USE MOD_Globals -USE MOD_Particle_Vars ,ONLY: SpeciesDatabase -USE MOD_DSMC_Vars ,ONLY: SpecDSMC +USE MOD_Particle_Vars ,ONLY: SpeciesDatabase, Species USE MOD_MCC_Vars ,ONLY: XSec_Database, SpecXSec USE MOD_HDF5_Input ,ONLY: DatasetExists #if USE_LOADBALANCE @@ -329,10 +326,10 @@ SUBROUTINE ReadElecXSec(iCase,iSpec,jSpec) IF(SpeciesDatabase.EQ.'none') THEN XSecDatabaseName = TRIM(XSec_Database) - spec_pair = TRIM(SpecDSMC(jSpec)%Name)//'-'//TRIM(SpecDSMC(iSpec)%Name) + spec_pair = TRIM(Species(jSpec)%Name)//'-'//TRIM(Species(iSpec)%Name) ELSE XSecDatabaseName = TRIM(SpeciesDatabase) - spec_pair = TRIM('/Cross-Sections/'//SpecDSMC(jSpec)%Name)//'-'//TRIM(SpecDSMC(iSpec)%Name) + spec_pair = TRIM('/Cross-Sections/'//Species(jSpec)%Name)//'-'//TRIM(Species(iSpec)%Name) END IF ! Initialize FORTRAN interface. @@ -351,9 +348,9 @@ SUBROUTINE ReadElecXSec(iCase,iSpec,jSpec) IF(.NOT.GroupFound) THEN ! Try to swap the species names IF (SpeciesDatabase.EQ.'none') THEN - spec_pair = TRIM(SpecDSMC(iSpec)%Name)//'-'//TRIM(SpecDSMC(jSpec)%Name) + spec_pair = TRIM(Species(iSpec)%Name)//'-'//TRIM(Species(jSpec)%Name) ELSE - spec_pair = TRIM('/Cross-Sections/'//SpecDSMC(iSpec)%Name)//'-'//TRIM(SpecDSMC(jSpec)%Name) + spec_pair = TRIM('/Cross-Sections/'//Species(iSpec)%Name)//'-'//TRIM(Species(jSpec)%Name) END IF CALL H5LEXISTS_F(file_id_dsmc, TRIM(spec_pair), GroupFound, err) IF(.NOT.GroupFound) THEN @@ -808,9 +805,9 @@ SUBROUTINE ReadReacXSec(iCase,iPath) ! use module USE MOD_io_hdf5 USE MOD_Globals -USE MOD_Particle_Vars ,ONLY: SpeciesDatabase +USE MOD_Particle_Vars ,ONLY: SpeciesDatabase, Species USE MOD_Globals_Vars ,ONLY: ElementaryCharge,Joule2eV -USE MOD_DSMC_Vars ,ONLY: SpecDSMC, ChemReac +USE MOD_DSMC_Vars ,ONLY: ChemReac USE MOD_MCC_Vars ,ONLY: XSec_Database, SpecXSec USE MOD_HDF5_Input ,ONLY: DatasetExists #if USE_LOADBALANCE @@ -850,9 +847,9 @@ SUBROUTINE ReadReacXSec(iCase,iPath) IF (SpeciesDatabase.EQ.'none') THEN - EductPair = TRIM(SpecDSMC(EductReac(1))%Name)//'-'//TRIM(SpecDSMC(EductReac(2))%Name) + EductPair = TRIM(Species(EductReac(1))%Name)//'-'//TRIM(Species(EductReac(2))%Name) ELSE - EductPair = TRIM('/Cross-Sections/'//TRIM(SpecDSMC(EductReac(1))%Name)//'-'//TRIM(SpecDSMC(EductReac(2))%Name)) + EductPair = TRIM('/Cross-Sections/'//TRIM(Species(EductReac(1))%Name)//'-'//TRIM(Species(EductReac(2))%Name)) END IF CALL H5LEXISTS_F(file_id_dsmc, TRIM(EductPair), GroupFound, err) @@ -872,9 +869,9 @@ SUBROUTINE ReadReacXSec(iCase,iPath) IF(.NOT.GroupFound) THEN ! Try to swap the species names IF (SpeciesDatabase.EQ.'none') THEN - EductPair = TRIM(SpecDSMC(EductReac(2))%Name)//'-'//TRIM(SpecDSMC(EductReac(1))%Name) + EductPair = TRIM(Species(EductReac(2))%Name)//'-'//TRIM(Species(EductReac(1))%Name) ELSE - EductPair = TRIM('/Cross-Sections/'//TRIM(SpecDSMC(EductReac(2))%Name)//'-'//TRIM(SpecDSMC(EductReac(1))%Name)) + EductPair = TRIM('/Cross-Sections/'//TRIM(Species(EductReac(2))%Name)//'-'//TRIM(Species(EductReac(1))%Name)) END IF CALL H5LEXISTS_F(file_id_dsmc, TRIM(EductPair), GroupFound, err) IF(.NOT.GroupFound) CALL abort(__STAMP__,'No reaction cross sections found in database for reaction number:',IntInfoOpt=iReac) @@ -896,13 +893,13 @@ SUBROUTINE ReadReacXSec(iCase,iPath) SELECT CASE(COUNT(ProductReac.GT.0)) CASE(2) - ProductPair = TRIM(SpecDSMC(ProductReac(1))%Name)//'-'//TRIM(SpecDSMC(ProductReac(2))%Name) + ProductPair = TRIM(Species(ProductReac(1))%Name)//'-'//TRIM(Species(ProductReac(2))%Name) CASE(3) - ProductPair = TRIM(SpecDSMC(ProductReac(1))%Name)//'-'//TRIM(SpecDSMC(ProductReac(2))%Name)//& - &'-'//TRIM(SpecDSMC(ProductReac(3))%Name) + ProductPair = TRIM(Species(ProductReac(1))%Name)//'-'//TRIM(Species(ProductReac(2))%Name)//& + &'-'//TRIM(Species(ProductReac(3))%Name) CASE(4) - ProductPair = TRIM(SpecDSMC(ProductReac(1))%Name)//'-'//TRIM(SpecDSMC(ProductReac(2))%Name)//& - &'-'//TRIM(SpecDSMC(ProductReac(3))%Name)//'-'//TRIM(SpecDSMC(ProductReac(4))%Name) + ProductPair = TRIM(Species(ProductReac(1))%Name)//'-'//TRIM(Species(ProductReac(2))%Name)//& + &'-'//TRIM(Species(ProductReac(3))%Name)//'-'//TRIM(Species(ProductReac(4))%Name) CASE DEFAULT CALL abort(__STAMP__,'Number of products is not supported yet! Reaction number:', IntInfoOpt=iReac) END SELECT @@ -986,8 +983,8 @@ SUBROUTINE ReadReacPhotonXSec(iPhotoReac) USE MOD_io_hdf5 USE MOD_Globals USE MOD_Globals_Vars ,ONLY: ElementaryCharge -USE MOD_Particle_Vars ,ONLY: SpeciesDatabase -USE MOD_DSMC_Vars ,ONLY: SpecDSMC, ChemReac +USE MOD_Particle_Vars ,ONLY: SpeciesDatabase, Species +USE MOD_DSMC_Vars ,ONLY: ChemReac USE MOD_HDF5_Input ,ONLY: DatasetExists USE MOD_MCC_Vars ,ONLY: XSec_Database,SpecPhotonXSec,PhotoReacToReac #if USE_LOADBALANCE @@ -1020,7 +1017,7 @@ SUBROUTINE ReadReacPhotonXSec(iPhotoReac) ! Sanity check IF(ChemReac%Reactants(iReac,1).EQ.0) CALL abort(__STAMP__,'phIonXSec reaction: The first educt species ID cannot be zero.') -EductPair = TRIM(SpecDSMC(ChemReac%Reactants(iReac,1))%Name)//'-photon' +EductPair = TRIM(Species(ChemReac%Reactants(iReac,1))%Name)//'-photon' ProductReac(1:4) = ChemReac%Products(iReac,1:4) GroupFound = .FALSE. @@ -1029,7 +1026,7 @@ SUBROUTINE ReadReacPhotonXSec(iPhotoReac) XSecDatabaseName = TRIM(XSec_Database) ELSE XSecDatabaseName = TRIM(SpeciesDatabase) - EductPair = TRIM('Cross-Sections/'//SpecDSMC(ChemReac%Reactants(iReac,1))%Name)//'-photon' + EductPair = TRIM('Cross-Sections/'//Species(ChemReac%Reactants(iReac,1))%Name)//'-photon' END IF ! Initialize FORTRAN interface. @@ -1042,9 +1039,9 @@ SUBROUTINE ReadReacPhotonXSec(iPhotoReac) IF(.NOT.GroupFound) THEN ! Try to swap the species names IF (SpeciesDatabase.EQ.'none') THEN - EductPair = 'photon-'//TRIM(SpecDSMC(ChemReac%Reactants(iReac,1))%Name) + EductPair = 'photon-'//TRIM(Species(ChemReac%Reactants(iReac,1))%Name) ELSE - EductPair = '/Cross-Sections/photon-'//TRIM(SpecDSMC(ChemReac%Reactants(iReac,1))%Name) + EductPair = '/Cross-Sections/photon-'//TRIM(Species(ChemReac%Reactants(iReac,1))%Name) END IF CALL H5LEXISTS_F(file_id_dsmc, TRIM(EductPair), GroupFound, err) IF(.NOT.GroupFound) CALL abort(__STAMP__,'No reaction cross sections found in database for reaction number:',IntInfoOpt=iReac) @@ -1066,13 +1063,13 @@ SUBROUTINE ReadReacPhotonXSec(iPhotoReac) SELECT CASE(COUNT(ProductReac.GT.0)) CASE(2) - ProductPair = TRIM(SpecDSMC(ProductReac(1))%Name)//'-'//TRIM(SpecDSMC(ProductReac(2))%Name) + ProductPair = TRIM(Species(ProductReac(1))%Name)//'-'//TRIM(Species(ProductReac(2))%Name) CASE(3) - ProductPair = TRIM(SpecDSMC(ProductReac(1))%Name)//'-'//TRIM(SpecDSMC(ProductReac(2))%Name)//& - &'-'//TRIM(SpecDSMC(ProductReac(3))%Name) + ProductPair = TRIM(Species(ProductReac(1))%Name)//'-'//TRIM(Species(ProductReac(2))%Name)//& + &'-'//TRIM(Species(ProductReac(3))%Name) CASE(4) - ProductPair = TRIM(SpecDSMC(ProductReac(1))%Name)//'-'//TRIM(SpecDSMC(ProductReac(2))%Name)//& - &'-'//TRIM(SpecDSMC(ProductReac(3))%Name)//'-'//TRIM(SpecDSMC(ProductReac(4))%Name) + ProductPair = TRIM(Species(ProductReac(1))%Name)//'-'//TRIM(Species(ProductReac(2))%Name)//& + &'-'//TRIM(Species(ProductReac(3))%Name)//'-'//TRIM(Species(ProductReac(4))%Name) CASE DEFAULT CALL abort(__STAMP__,'Number of products is not supported yet! Reaction number:', IntInfoOpt=iReac) END SELECT @@ -1127,9 +1124,9 @@ SUBROUTINE ReadReacPhotonSpectrum(iPhotoReac) ! use module USE MOD_io_hdf5 USE MOD_Globals -USE MOD_Particle_Vars ,ONLY: SpeciesDatabase +USE MOD_Particle_Vars ,ONLY: SpeciesDatabase, Species USE MOD_Globals_Vars ,ONLY: ElementaryCharge -USE MOD_DSMC_Vars ,ONLY: SpecDSMC, ChemReac +USE MOD_DSMC_Vars ,ONLY: ChemReac USE MOD_MCC_Vars ,ONLY: XSec_Database, PhotoReacToReac, PhotonSpectrum USE MOD_HDF5_Input ,ONLY: DatasetExists #if USE_LOADBALANCE @@ -1162,7 +1159,7 @@ SUBROUTINE ReadReacPhotonSpectrum(iPhotoReac) ! Sanity check IF(ChemReac%Reactants(iReac,1).EQ.0) CALL abort(__STAMP__,'phIonXSec reaction: The first educt species ID cannot be zero.') -EductPair = TRIM(SpecDSMC(ChemReac%Reactants(iReac,1))%Name)//'-photon' +EductPair = TRIM(Species(ChemReac%Reactants(iReac,1))%Name)//'-photon' ProductPair = EductPair GroupFound = .FALSE. @@ -1171,7 +1168,7 @@ SUBROUTINE ReadReacPhotonSpectrum(iPhotoReac) XSecDatabaseName = TRIM(XSec_Database) ELSE XSecDatabaseName = TRIM(SpeciesDatabase) - EductPair = TRIM('/Cross-Sections/'//SpecDSMC(ChemReac%Reactants(iReac,1))%Name)//'-photon' + EductPair = TRIM('/Cross-Sections/'//Species(ChemReac%Reactants(iReac,1))%Name)//'-photon' ProductPair = EductPair END IF @@ -1185,9 +1182,9 @@ SUBROUTINE ReadReacPhotonSpectrum(iPhotoReac) IF(.NOT.GroupFound) THEN ! Try to swap the species names IF (SpeciesDatabase.NE.'none') THEN - EductPair = 'photon-'//TRIM(SpecDSMC(ChemReac%Reactants(iReac,1))%Name) + EductPair = 'photon-'//TRIM(Species(ChemReac%Reactants(iReac,1))%Name) ELSE - EductPair = '/Cross-Sections/photon-'//TRIM(SpecDSMC(ChemReac%Reactants(iReac,1))%Name) + EductPair = '/Cross-Sections/photon-'//TRIM(Species(ChemReac%Reactants(iReac,1))%Name) END IF CALL H5LEXISTS_F(file_id_dsmc, TRIM(EductPair), GroupFound, err) IF(.NOT.GroupFound) CALL abort(__STAMP__,'No reaction cross sections found in database for reaction number:',IntInfoOpt=iReac) diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 6205ce8ce..66a26e371 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -1570,12 +1570,10 @@ SUBROUTINE InitializeSpeciesParameter() ! Read-in of the species database SpeciesDatabase = GETSTR('Particles-Species-Database') -ALLOCATE(SpecDSMC(nSpecies)) - DO iSpec = 1, nSpecies WRITE(UNIT=hilf,FMT='(I0)') iSpec - SpecDSMC(iSpec)%Name = TRIM(GETSTR('Part-Species'//TRIM(hilf)//'-SpeciesName','none')) - IF(SpecDSMC(iSpec)%Name .EQ. 'none') THEN + Species(iSpec)%Name = TRIM(GETSTR('Part-Species'//TRIM(hilf)//'-SpeciesName','none')) + IF(Species(iSpec)%Name .EQ. 'none') THEN CALL abort(__STAMP__,'ERROR: Species-name is not defined for Species:', iSpec) END IF END DO ! iSpec @@ -1600,8 +1598,8 @@ SUBROUTINE InitializeSpeciesParameter() CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) DO iSpec = 1, nSpecies - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(SpecDSMC(iSpec)%Name) - dsetname = TRIM('/Species/'//TRIM(SpecDSMC(iSpec)%Name)) + LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) + dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) CALL DatasetExists(file_id_specdb,TRIM(dsetname),DataSetFound) IF(.NOT.DataSetFound)THEN diff --git a/src/particles/particle_vars.f90 b/src/particles/particle_vars.f90 index 3879a0256..e15d0e201 100644 --- a/src/particles/particle_vars.f90 +++ b/src/particles/particle_vars.f90 @@ -135,6 +135,7 @@ MODULE MOD_Particle_Vars TYPE tSpecies ! Particle Data for each Species !General Species Values TYPE(tInit), ALLOCATABLE :: Init(:) ! =>NULL() ! Particle Data for each Initialisation + CHARACTER(LEN=64) :: Name ! Species Name, required for SpeciesDatabase REAL :: ChargeIC ! Particle Charge (without MPF) REAL :: MassIC ! Particle Mass (without MPF) INTEGER :: InterID ! Identification number (e.g. for DSMC_prob_calc), ini_2 diff --git a/src/particles/pic/models/pic_models.f90 b/src/particles/pic/models/pic_models.f90 index 69954f8f2..79173d746 100644 --- a/src/particles/pic/models/pic_models.f90 +++ b/src/particles/pic/models/pic_models.f90 @@ -133,7 +133,7 @@ SUBROUTINE ADK_Bruhwiler2003() CALL WriteFieldIonizationRate(E_GV*1e9,QuantumTunnelProb/dt) END DO ! jj = 1, KK END DO ! ii = 1, NN - WRITE (*,*) "\n\n Ionization output for \n ",TRIM(SpecDSMC(oldSpec)%Name)," ==> ",TRIM(SpecDSMC(newSpec)%Name)," + e-\n\n " + WRITE (*,*) "\n\n Ionization output for \n ",TRIM(Species(oldSpec)%Name)," ==> ",TRIM(Species(newSpec)%Name)," + e-\n\n " RETURN #endif /* CODE_ANALYZE */ CALL RANDOM_NUMBER(iRan) @@ -233,7 +233,7 @@ SUBROUTINE ADK_Yu2018() CALL WriteFieldIonizationRate(E,QuantumTunnelProb/dt) END DO ! jj = 1, KK END DO ! ii = 1, NN - WRITE (*,*) "\n\n Ionization output for \n ",TRIM(SpecDSMC(oldSpec)%Name)," ==> ",TRIM(SpecDSMC(newSpec)%Name)," + e-\n\n " + WRITE (*,*) "\n\n Ionization output for \n ",TRIM(Species(oldSpec)%Name)," ==> ",TRIM(Species(newSpec)%Name)," + e-\n\n " RETURN #endif /* CODE_ANALYZE */ END ASSOCIATE diff --git a/src/particles/restart/particle_readin.f90 b/src/particles/restart/particle_readin.f90 index c257e06df..28684768d 100644 --- a/src/particles/restart/particle_readin.f90 +++ b/src/particles/restart/particle_readin.f90 @@ -50,7 +50,7 @@ SUBROUTINE ParticleReadin() ! Particles USE MOD_Dielectric_Vars ,ONLY: DoDielectricSurfaceCharge USE MOD_HDF5_Input_Particles ,ONLY: ReadEmissionVariablesFromHDF5,ReadNodeSourceExtFromHDF5 -USE MOD_Particle_Vars ,ONLY: PartInt,PartData,nSpecies, usevMPF, Species +USE MOD_Particle_Vars ,ONLY: PartInt,PartData,nSpecies,Species USE MOD_PICDepo_Vars ,ONLY: DoDeposition,RelaxDeposition,PartSourceOld ! Restart USE MOD_Restart_Vars ,ONLY: RestartFile,InterpolateSolution,RestartNullifySolution From cd52481155a67eea97cfb424713388db1cd93d4d Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Wed, 2 Aug 2023 10:11:14 +0200 Subject: [PATCH 064/222] updated regressionchecks --- .../parameter.ini | 159 ++++++------- .../parameter.ini | 219 +----------------- 2 files changed, 71 insertions(+), 307 deletions(-) diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini index dce8aa23f..525fa4a68 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini +++ b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini @@ -88,98 +88,75 @@ Part-Species5-SpeciesName=NO ! =============================================================================== ! ! Reactions ! =============================================================================== ! -DSMC-NumOfReactions=8 +DSMC-ChemistryModel=Titan-wo-Argon_18Spec_30Reac_Gokcen2007 -! ============ ! -! Dissociation (N2 + M -> N + N + M) -! ============ ! -!Reaction1 (N2 + molecule -> N + N + molecule) -DSMC-Reaction1-ReactionName = DISS_N2_MOL -DSMC-Reaction1-ReactionModel=TCE -DSMC-Reaction1-Reactants=(/3,0,0/) -DSMC-Reaction1-Products=(/1,0,1,0/) -DSMC-Reaction1-NumberOfNonReactives=3 -DSMC-Reaction1-NonReactiveSpecies=(/3,4,5/) +;DSMC-NumOfReactions=8 -!Reaction2 (N2 + atom -> N + N + atom) -DSMC-Reaction2-ReactionName = DISS_N2_AT -DSMC-Reaction2-ReactionModel=TCE -DSMC-Reaction2-Reactants=(/3,0,0/) -DSMC-Reaction2-Products=(/1,0,1,0/) -DSMC-Reaction2-NumberOfNonReactives=2 -DSMC-Reaction2-NonReactiveSpecies=(/1,2/) -! ============ ! -! Dissociation (O2 + M -> O + O + M) -! ============ ! -!Reaction3 (O2 + molecule -> O + O + molecule) -DSMC-Reaction3-ReactionName = DISS_O2_MOL -DSMC-Reaction3-ReactionModel=TCE -DSMC-Reaction3-Reactants=(/4,0,0/) -DSMC-Reaction3-Products=(/2,0,2,0/) -DSMC-Reaction3-Arrhenius-Prefactor=4.58E-11 -DSMC-Reaction3-Arrhenius-Powerfactor=-1.0 -DSMC-Reaction3-Activation-Energy_K=59500.0 -DSMC-Reaction3-NumberOfNonReactives=3 -DSMC-Reaction3-NonReactiveSpecies=(/3,4,5/) +;!Reaction1 (N2 + molecule -> N + N + molecule) +;DSMC-Reaction1-ReactionName = DISS_N2_MOL +;DSMC-Reaction1-ReactionModel=TCE +;DSMC-Reaction1-Reactants=(/3,0,0/) +;DSMC-Reaction1-Products=(/1,0,1,0/) +;DSMC-Reaction1-NumberOfNonReactives=3 +;DSMC-Reaction1-NonReactiveSpecies=(/3,4,5/) +;!Reaction2 (N2 + atom -> N + N + atom) +;DSMC-Reaction2-ReactionName = DISS_N2_AT +;DSMC-Reaction2-ReactionModel=TCE +;DSMC-Reaction2-Reactants=(/3,0,0/) +;DSMC-Reaction2-Products=(/1,0,1,0/) +;DSMC-Reaction2-NumberOfNonReactives=2 +;DSMC-Reaction2-NonReactiveSpecies=(/1,2/) +;!Reaction3 (O2 + molecule -> O + O + molecule) +;DSMC-Reaction3-ReactionName = DISS_O2_MOL +;DSMC-Reaction3-ReactionModel=TCE +;DSMC-Reaction3-Reactants=(/4,0,0/) +;DSMC-Reaction3-Products=(/2,0,2,0/) +;DSMC-Reaction3-NumberOfNonReactives=3 +;DSMC-Reaction3-NonReactiveSpecies=(/3,4,5/) +;!Reaction4 (O2 + atom --> O + O + atom) +;DSMC-Reaction4-ReactionModel=TCE +;DSMC-Reaction4-Reactants=(/4,0,0/) +;DSMC-Reaction4-Products=(/2,0,2,0/) +;DSMC-Reaction4-NumberOfNonReactives=2 +;DSMC-Reaction4-NonReactiveSpecies=(/1,2/) +;!Reaction5 (NO + molecule --> N + O + molecule) +;DSMC-Reaction5-ReactionModel=TCE +;DSMC-Reaction5-Reactants=(/5,0,0/) +;DSMC-Reaction5-Products=(/1,0,2,0/) +;DSMC-Reaction5-NumberOfNonReactives=3 +;DSMC-Reaction5-NonReactiveSpecies=(/3,4,5/) +;!Reaction6 (NO + atom --> N + O + atom) +;DSMC-Reaction6-ReactionModel=TCE +;DSMC-Reaction6-Reactants=(/5,0,0/) +;DSMC-Reaction6-Products=(/1,0,2,0/) +;DSMC-Reaction6-NumberOfNonReactives=2 +;DSMC-Reaction6-NonReactiveSpecies=(/1,2/) +;!Reaction7 (N2 + O --> NO + N) +;DSMC-Reaction7-ReactionModel=TCE +;DSMC-Reaction7-Reactants=(/3,2,0/) +;DSMC-Reaction7-Products=(/5,1,0,0/) -!Reaction4 (O2 + atom --> O + O + atom) -DSMC-Reaction4-ReactionName = DISS_O2_AT -DSMC-Reaction4-ReactionModel=TCE -DSMC-Reaction4-Reactants=(/4,0,0/) -DSMC-Reaction4-Products=(/2,0,2,0/) -DSMC-Reaction4-NumberOfNonReactives=2 -DSMC-Reaction4-NonReactiveSpecies=(/1,2/) +;!Reaction8 (NO + O --> N + O2) +;DSMC-Reaction8-ReactionModel=TCE +;DSMC-Reaction8-Reactants=(/5,2,0/) +;DSMC-Reaction8-Products=(/4,1,0,0/) -! ============ ! -! Dissociation (NO + M -> N + O + M) -! ============ ! -!Reaction5 (NO + molecule --> N + O + molecule) -DSMC-Reaction5-ReactionName = DISS_NO_MOL -DSMC-Reaction5-ReactionModel=TCE -DSMC-Reaction5-Reactants=(/5,0,0/) -DSMC-Reaction5-Products=(/1,0,2,0/) -DSMC-Reaction5-NumberOfNonReactives=3 -DSMC-Reaction5-NonReactiveSpecies=(/3,4,5/) - -!Reaction6 (NO + atom --> N + O + atom) -DSMC-Reaction6-ReactionName = DISS_NO_AT -DSMC-Reaction6-ReactionModel=TCE -DSMC-Reaction6-Reactants=(/5,0,0/) -DSMC-Reaction6-Products=(/1,0,2,0/) -DSMC-Reaction6-NumberOfNonReactives=2 -DSMC-Reaction6-NonReactiveSpecies=(/1,2/) -! ============ ! -! Exchange -! ============ ! - -!Reaction7 (N2 + O --> NO + N) -DSMC-Reaction7-ReactionName = EXC_N2_O -DSMC-Reaction7-ReactionModel=TCE -DSMC-Reaction7-Reactants=(/3,2,0/) -DSMC-Reaction7-Products=(/5,1,0,0/) - -!Reaction8 (NO + O --> N + O2) -DSMC-Reaction8-ReactionName = DISS_NO_O -DSMC-Reaction8-ReactionModel=TCE -DSMC-Reaction8-Reactants=(/5,2,0/) -DSMC-Reaction8-Products=(/4,1,0,0/) - -UseDSMC=true -Particles-DSMCReservoirSim=true -Particles-DSMCReservoirSimRate=false -Particles-DSMCReservoirStatistic=false -Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem) -Part-NumberOfRandomSeeds=2 -Particles-RandomSeed1=1 -Particles-RandomSeed2=2 -ManualTimeStep=2.0E-10 -Particles-HaloEpsVelo=5000 -Particles-DSMC-CalcQualityFactors=F -Particles-DSMC-BackwardReacRate = true -Particles-DSMC-PartitionMaxTemp = 120000. -Particles-DSMC-PartitionInterval= 20. -Particles-DSMC-ElectronicModel = 0 -Particles-DSMCElectronicDatabase = DSMCSpecies_electronic_state_full_Data.h5 -EpsMergeElectronicState = 1E-3 -Particles-DSMC-RotRelaxProb = 1 -Particles-DSMC-VibRelaxProb = 1 +;UseDSMC=true +;Particles-DSMCReservoirSim=true +;Particles-DSMCReservoirSimRate=false +;Particles-DSMCReservoirStatistic=false +;Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem) +;Part-NumberOfRandomSeeds=2 +;Particles-RandomSeed1=1 +;Particles-RandomSeed2=2 +;ManualTimeStep=2.0E-10 +;Particles-HaloEpsVelo=5000 +;Particles-DSMC-CalcQualityFactors=F +;Particles-DSMC-BackwardReacRate = true +;Particles-DSMC-PartitionMaxTemp = 120000. +;Particles-DSMC-PartitionInterval= 20. +;Particles-DSMC-ElectronicModel = 0 +;Particles-DSMCElectronicDatabase = DSMCSpecies_electronic_state_full_Data.h5 +;EpsMergeElectronicState = 1E-3 +;Particles-DSMC-RotRelaxProb = 1 +;Particles-DSMC-VibRelaxProb = 1 diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini index da551c5c3..49bd45d4d 100755 --- a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini @@ -123,225 +123,12 @@ Particles-DSMC-BackwardReacRate = true Particles-DSMC-PartitionMaxTemp = 120000. Particles-DSMC-PartitionInterval= 20. Particles-DSMC-ElectronicModel = 1!,4 -;Particles-DSMCElectronicDatabase = DSMCSpecies_electronic_state_full_additional_CO2-N2-He.h5 EpsMergeElectronicState = 1E-2 Particles-DSMC-RotRelaxProb = 1 Particles-DSMC-VibRelaxProb = 1 Part-Species$-ElecRelaxProb = 1 ! =============================================================================== ! -! Data for chemical Reaction +! Data for chemical Reactions ! =============================================================================== ! -DSMC-NumOfReactions=30 ! 18 Species, 28 Reactions -!--------------------------------------------------------------------! -!##################### Dissociation Reactions #######################! -!--------------------------------------------------------------------! -!--------- Reaction1: CH4 + M -> CH3 + H + M ------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction1-ReactionName = DISS_CH4_TO_CH3 -DSMC-Reaction1-Reactants=(/1,0,0/) -DSMC-Reaction1-Products=(/2,0,13,0/) -DSMC-Reaction1-NumberOfNonReactives=18 -DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction2: CH3 + M -> CH2 + H + M ------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction2-ReactionName = DISS_CH3_TO_CH2 -DSMC-Reaction2-Reactants=(/2,0,0/) -DSMC-Reaction2-Products=(/3,0,13,0/) -DSMC-Reaction2-NumberOfNonReactives=18 -DSMC-Reaction2-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction3: CH3 + M -> CH + H2 + M ------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction3-ReactionName = DISS_CH3_TO_CH -DSMC-Reaction3-Reactants=(/2,0,0/) -DSMC-Reaction3-Products=(/4,0,7,0/) -DSMC-Reaction3-NumberOfNonReactives=18 -DSMC-Reaction3-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction4: CH2 + M -> CH + H + M -------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction4-ReactionName = DISS_CH2_TO_CH -DSMC-Reaction4-Reactants=(/3,0,0/) -DSMC-Reaction4-Products=(/4,0,13,0/) -DSMC-Reaction4-NumberOfNonReactives=18 -DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction5: CH2 + M -> C + H2 + M -------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction5-ReactionName = DISS_CH2_TO_C -DSMC-Reaction5-Reactants=(/3,0,0/) -DSMC-Reaction5-Products=(/7,0,12,0/) -DSMC-Reaction5-NumberOfNonReactives=18 -DSMC-Reaction5-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction6: CH + M -> C + H2 + M --------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction6-ReactionName = DISS_CH_TO_C -DSMC-Reaction6-Reactants=(/4,0,0/) -DSMC-Reaction6-Products=(/12,0,13,0/) -DSMC-Reaction6-NumberOfNonReactives=18 -DSMC-Reaction6-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction7a: N2 + M -> N + N + M --------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction7-ReactionName = DISS_N2 -DSMC-Reaction7-Reactants=(/5,0,0/) -DSMC-Reaction7-Products=(/11,0,11,0/) -DSMC-Reaction7-NumberOfNonReactives=13 -DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,14,15,16/) -!--------------------------------------------------------------------! -!--------- Reaction7b: N2 + N/C/H -> N + N + N/C/H ------------------! -!--------------------------------------------------------------------! -DSMC-Reaction8-ReactionName = DISS_N2_WITH_N_C_H -DSMC-Reaction8-Reactants=(/5,0,0/) -DSMC-Reaction8-Products=(/11,0,11,0/) -DSMC-Reaction8-NumberOfNonReactives=5 -DSMC-Reaction8-NonReactiveSpecies=(/11,12,13,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction8: C2 + M -> C + C + M ---------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction9-ReactionName = DISS_C2 -DSMC-Reaction9-Reactants=(/6,0,0/) -DSMC-Reaction9-Products=(/12,0,12,0/) -DSMC-Reaction9-NumberOfNonReactives=18 -DSMC-Reaction9-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction9: H2 + M -> H + H + M ---------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction10-ReactionName = DISS_H2 -DSMC-Reaction10-Reactants=(/7,0,0/) -DSMC-Reaction10-Products=(/13,0,13,0/) -DSMC-Reaction10-NumberOfNonReactives=18 -DSMC-Reaction10-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction10: CN + M -> C + N + M --------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction11-ReactionName = DISS_CN -DSMC-Reaction11-Reactants=(/8,0,0/) -DSMC-Reaction11-Products=(/11,0,12,0/) -DSMC-Reaction11-NumberOfNonReactives=18 -DSMC-Reaction11-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction11: HN + M -> N + H + M --------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction12-ReactionName = DISS_HN -DSMC-Reaction12-Reactants=(/9,0,0/) -DSMC-Reaction12-Products=(/11,0,13,0/) -DSMC-Reaction12-NumberOfNonReactives=18 -DSMC-Reaction12-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction12: HCN + M -> CN + H + M ------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction13-ReactionName = DISS_HDC_TO_CN -DSMC-Reaction13-Reactants=(/10,0,0/) -DSMC-Reaction13-Products=(/8,0,13,0/) -DSMC-Reaction13-NumberOfNonReactives=18 -DSMC-Reaction13-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!################## Exchange & Radical Reactions ####################! -!--------------------------------------------------------------------! -!--------- Reaction13: CH3 + H -> CH2 + H2 --------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction14-ReactionName = EXC_CH3_H2 -DSMC-Reaction14-Reactants=(/2,13,0/) -DSMC-Reaction14-Products=(/3,7,0,0/) -!--------------------------------------------------------------------! -!--------- Reaction2: CH + N2 -> HCN + N ---------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction15-ReactionName = EXC_CH_N2 -DSMC-Reaction15-Reactants=(/4,5,0/) -DSMC-Reaction15-Products=(/10,11,0,0/) -!--------------------------------------------------------------------! -!--------- Reaction15: CH + C -> C2 + H -----------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction16-ReactionName = EXC_CH_C -DSMC-Reaction16-Reactants=(/4,12,0/) -DSMC-Reaction16-Products=(/6,13,0,0/) -!--------------------------------------------------------------------! -!--------- Reaction16: C2 + N2 -> CN + CN ---------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction17-ReactionName = EXC_C2_N2 -DSMC-Reaction17-Reactants=(/5,6,0/) -DSMC-Reaction17-Products=(/8,8,0,0/) -!--------------------------------------------------------------------! -!--------- Reaction17: H2 + CN -> HCN + H ---------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction18-ReactionName = EXC_CN_H2 -DSMC-Reaction18-Reactants=(/7,8,0/) -DSMC-Reaction18-Products=(/10,13,0,0/) -!--------------------------------------------------------------------! -!--------- Reaction18: CN + C -> C2 + N -----------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction19-ReactionName = EXC_CN_C -DSMC-Reaction19-Reactants=(/8,12,0/) -DSMC-Reaction19-Products=(/6,11,0,0/) -!--------------------------------------------------------------------! -!--------- Reaction19: H2 + N -> NH + H -----------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction20-ReactionName = EXC_H2_N -DSMC-Reaction20-Reactants=(/7,11,0/) -DSMC-Reaction20-Products=(/9,13,0,0/) -!--------------------------------------------------------------------! -!--------- Reaction20: N2 + C -> CN + N -----------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction21-ReactionName = EXC_N2_C -DSMC-Reaction21-Reactants=(/5,12,0/) -DSMC-Reaction21-Products=(/8,11,0,0/) -!--------------------------------------------------------------------! -!--------- Reaction21: H2 + C -> CH + H -----------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction22-ReactionName = EXC_H2_C -DSMC-Reaction22-Reactants=(/7,12,0/) -DSMC-Reaction22-Products=(/4,13,0,0/) -!--------------------------------------------------------------------! -!--------- Reaction22: N2 + H -> NH + N -----------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction23-ReactionName = EXC_N2_H -DSMC-Reaction23-Reactants=(/5,13,0/) -DSMC-Reaction23-Products=(/9,11,0,0/) -!--------------------------------------------------------------------! -!--------- Reaction23: CH4 + H -> CH3 + H2 --------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction24-ReactionName = EXC_CH4_H -DSMC-Reaction24-Reactants=(/1,13,0/) -DSMC-Reaction24-Products=(/2,7,0,0/) -!########## IONIZED SPECIES ########################################### -!--------------------------------------------------------------------! -!--------- Reaction7c: N2 + e -> N + N + e ------------------! -!--------------------------------------------------------------------! -DSMC-Reaction25-ReactionName = DISS_N2_WITH_EL -DSMC-Reaction25-Reactants=(/5,14,0/) -DSMC-Reaction25-Products=(/11,14,11,0/) -!--------------------------------------------------------------------! -!--------- Reaction24: N + N -> N2+ + e ------------------! -!--------------------------------------------------------------------! -DSMC-Reaction26-ReactionName = RECOMB_N_ION -DSMC-Reaction26-Reactants=(/11,11,0/) -DSMC-Reaction26-Products=(/15,14,0,0/) -!--------------------------------------------------------------------! -!--------- Reaction25: C + N -> CN+ + e ------------------! -!--------------------------------------------------------------------! -DSMC-Reaction27-ReactionName = RECOMB_C_N_ION -DSMC-Reaction27-Reactants=(/11,12,0/) -DSMC-Reaction27-Products=(/16,14,0,0/) -!--------------------------------------------------------------------! -!--------- Reaction26: N + e -> N+ + e + e ------------------! -!--------------------------------------------------------------------! -DSMC-Reaction28-ReactionName = ION_N_EL -DSMC-Reaction28-ReactionModel=QK -DSMC-Reaction28-Reactants=(/11,14,0/) -DSMC-Reaction28-Products=(/17,14,14,0/) -!--------------------------------------------------------------------! -!--------- Reaction27: C + e -> C+ + e + e ------------------! -!--------------------------------------------------------------------! -DSMC-Reaction29-ReactionName = ION_C_EL -DSMC-Reaction29-ReactionModel=QK -DSMC-Reaction29-Reactants=(/12,14,0/) -DSMC-Reaction29-Products=(/18,14,14,0/) -!--------------------------------------------------------------------! -!--------- Reaction28: CN+ + N -> CN + N+ ------------------! -!--------------------------------------------------------------------! -DSMC-Reaction30-ReactionName = EXC_CN+_N -DSMC-Reaction30-Reactants=(/16,11,0/) -DSMC-Reaction30-Products=(/8,17,0,0/) +DSMC-ChemistryModel=Titan-wo-Argon_18Spec_30Reac_Gokcen2007 + From 553da4f16b17fcf424b4025cc53d5aeaf0a59cd2 Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Wed, 2 Aug 2023 11:13:09 +0200 Subject: [PATCH 065/222] New database structure for the chemical reactions + ini for the reference database --- ...ec_43Reac_Boyd2007Voronov1997Plane2015.ini | 491 ++++++++++++++ .../Air_11Spec_27Reac_Park1993.ini | 346 ++++++++++ .../Air_11Spec_43Reac_Boyd2007.ini | 453 +++++++++++++ .../Air_11Spec_51Reac_Park1993.ini | 350 ++++++++++ ...ecAir.ini => Air_5Spec_8Reac_Laux1995.ini} | 29 +- .../Air_5Spec_8Reac_Park1993.ini | 148 +++++ tools/species_database/CH4-Ar_8Spec_7Reac.ini | 251 +++++++ tools/species_database/CH4_7Spec_7Reac.ini | 242 +++++++ .../CO2_6Spec_10Reac_Johnston2014.ini | 198 ++++++ tools/species_database/DSMC.ini | 339 ---------- tools/species_database/DSMC2.ini | 113 ---- tools/species_database/DSMC_H2.ini | 167 ----- tools/species_database/DSMC_Surface.ini | 113 ---- .../Electronic-State-Database.h5 | Bin 107464 -> 0 bytes .../Mars_11Spec_27Reac_Johnston2014.ini | 415 ++++++++++++ .../Mars_16Spec_31Reac_Park1994.ini | 507 +++++++++++++++ .../Mars_17Spec_42Reac_Johnston2014.ini | 600 +++++++++++++++++ tools/species_database/REF_DSMC.ini | 611 ++++++++++++++++++ tools/species_database/Species_Database.h5 | Bin 232944 -> 0 bytes ...tan-wo-Argon_18Spec_30Reac_Gokcen2007.ini} | 46 +- .../Titan_14Spec_24Reac_Gokcen2007.ini | 453 +++++++++++++ tools/species_database/XSec_Database.h5 | Bin 52056 -> 0 bytes ...ad.dat => XSec_H2-Plasma_6Spec_11Reac.ini} | 24 +- .../XSec_H_Ionization_3Spec_1Reac.ini | 40 ++ .../XSec_Xe-Plasma_3Spec_1Reac.ini | 48 ++ .../create_species_database.py | 360 +++++++---- 26 files changed, 5437 insertions(+), 907 deletions(-) create mode 100644 tools/species_database/Air-Fe_11Spec_43Reac_Boyd2007Voronov1997Plane2015.ini create mode 100755 tools/species_database/Air_11Spec_27Reac_Park1993.ini create mode 100755 tools/species_database/Air_11Spec_43Reac_Boyd2007.ini create mode 100755 tools/species_database/Air_11Spec_51Reac_Park1993.ini rename tools/species_database/{DSMC_5SpecAir.ini => Air_5Spec_8Reac_Laux1995.ini} (89%) create mode 100755 tools/species_database/Air_5Spec_8Reac_Park1993.ini create mode 100755 tools/species_database/CH4-Ar_8Spec_7Reac.ini create mode 100755 tools/species_database/CH4_7Spec_7Reac.ini create mode 100755 tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini delete mode 100755 tools/species_database/DSMC.ini delete mode 100755 tools/species_database/DSMC2.ini delete mode 100755 tools/species_database/DSMC_H2.ini delete mode 100755 tools/species_database/DSMC_Surface.ini delete mode 100755 tools/species_database/Electronic-State-Database.h5 create mode 100755 tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini create mode 100755 tools/species_database/Mars_16Spec_31Reac_Park1994.ini create mode 100755 tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini create mode 100644 tools/species_database/REF_DSMC.ini delete mode 100644 tools/species_database/Species_Database.h5 rename tools/species_database/{DSMC_Titan.ini => Titan-wo-Argon_18Spec_30Reac_Gokcen2007.ini} (95%) create mode 100755 tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini delete mode 100755 tools/species_database/XSec_Database.h5 rename tools/species_database/{Rad.dat => XSec_H2-Plasma_6Spec_11Reac.ini} (90%) create mode 100644 tools/species_database/XSec_H_Ionization_3Spec_1Reac.ini create mode 100644 tools/species_database/XSec_Xe-Plasma_3Spec_1Reac.ini diff --git a/tools/species_database/Air-Fe_11Spec_43Reac_Boyd2007Voronov1997Plane2015.ini b/tools/species_database/Air-Fe_11Spec_43Reac_Boyd2007Voronov1997Plane2015.ini new file mode 100644 index 000000000..72eb995b9 --- /dev/null +++ b/tools/species_database/Air-Fe_11Spec_43Reac_Boyd2007Voronov1997Plane2015.ini @@ -0,0 +1,491 @@ +! ======================================================================= +! Data for air taken from +! Species: G. A. Bird, Nonequilibrium radiation during re-entry at 10 km/s, AIAA-Paper 87-1543 +! Reactions: Iain D. Boyd, Phys. Fluids 19, 096102 (2007) +! ======================================================================= +! =============================================================================== ! +! Species1, N +! =============================================================================== ! +Part-Species1-SpeciesName=N +Part-Species1-InteractionID = 1 +Part-Species1-Tref =273 ! K +Part-Species1-dref = 3.0E-10 ! m +Part-Species1-omega=0.24 +Part-Species1-HeatOfFormation_K=56850.30 +! =============================================================================== ! +! Species2, O +! =============================================================================== ! +Part-Species2-SpeciesName=O +Part-Species2-InteractionID = 1 +Part-Species2-Tref =273 +Part-Species2-dref = 3.0E-10 +Part-Species2-omega=0.24 +Part-Species2-HeatOfFormation_K=29969.45 +! =============================================================================== ! +! Species3, N2 +! =============================================================================== ! +Part-Species3-SpeciesName=N2 +Part-Species3-InteractionID = 2 +Part-Species3-Tref =273 +Part-Species3-dref = 4.07E-10 +Part-Species3-omega=0.24 +Part-Species3-CharaTempVib=3393.3 +Part-Species3-Ediss_eV=9.759 +Part-Species3-CharaTempRot = 2.87 +Part-Species3-SymmetryFactor = 2 +Part-Species3-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species4, O2 +! =============================================================================== ! +Part-Species4-SpeciesName=O2 +Part-Species4-InteractionID = 2 +Part-Species4-Tref =273 +Part-Species4-dref = 3.96E-10 +Part-Species4-omega=0.24 +Part-Species4-CharaTempVib=2272.8 +Part-Species4-Ediss_eV=5.115 +Part-Species4-CharaTempRot = 2.1 +Part-Species4-SymmetryFactor = 2 +Part-Species4-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species5, NO +! =============================================================================== ! +Part-Species5-SpeciesName=NO +Part-Species5-InteractionID = 2 +Part-Species5-Tref =273 +Part-Species5-dref = 4.00E-10 +Part-Species5-omega=0.24 +Part-Species5-CharaTempVib=2738.8 +Part-Species5-Ediss_eV=6.496 +Part-Species5-CharaTempRot = 2.4 +Part-Species5-SymmetryFactor = 1 +Part-Species5-HeatOfFormation_K=10859.38 +! =============================================================================== ! +! Species6, N+ +! =============================================================================== ! +Part-Species6-SpeciesName=NIon1 +Part-Species6-InteractionID = 10 +Part-Species6-Tref =273 +Part-Species6-dref = 3.0E-10 +Part-Species6-omega=0.24 +Part-Species6-PreviousState=1 +! =============================================================================== ! +! Species7, O+ +! =============================================================================== ! +Part-Species7-SpeciesName=OIon1 +Part-Species7-InteractionID = 10 +Part-Species7-Tref =273 +Part-Species7-dref = 3.0E-10 +Part-Species7-omega=0.24 +Part-Species7-PreviousState=2 +! =============================================================================== ! +! Species8, N2+ +! =============================================================================== ! +Part-Species8-SpeciesName=N2Ion1 +Part-Species8-InteractionID = 20 +Part-Species8-Tref =273 +Part-Species8-dref = 4.07E-10 +Part-Species8-omega=0.24 +Part-Species8-CharaTempVib=3174.7 +Part-Species8-Ediss_eV=9.759 +Part-Species8-CharaTempRot = 2.8 +Part-Species8-SymmetryFactor = 2 +Part-Species8-PreviousState=3 +! =============================================================================== ! +! Species9, O2+ +! =============================================================================== ! +Part-Species9-SpeciesName=O2Ion1 +Part-Species9-InteractionID = 20 +Part-Species9-Tref =273 +Part-Species9-dref = 3.96E-10 +Part-Species9-omega=0.24 +Part-Species9-CharaTempVib=2741.7 +Part-Species9-Ediss_eV=5.115 +Part-Species9-CharaTempRot = 2.4 +Part-Species9-SymmetryFactor = 2 +Part-Species9-PreviousState=4 +! =============================================================================== ! +! Species10, NO+ +! =============================================================================== ! +Part-Species10-SpeciesName=NOIon1 +Part-Species10-InteractionID = 20 +Part-Species10-Tref =273 +Part-Species10-dref = 4.00E-10 +Part-Species10-omega=0.24 +Part-Species10-CharaTempVib=3419.2 +Part-Species10-Ediss_eV=6.496 +Part-Species10-CharaTempRot = 2.9 +Part-Species10-SymmetryFactor = 1 +Part-Species10-PreviousState=5 +! =============================================================================== ! +! Species11, e +! =============================================================================== ! +Part-Species11-InteractionID = 4 +Part-Species11-Tref =273 +Part-Species11-dref = 2.817920E-15 +Part-Species11-omega=0.24 +! =============================================================================== ! +! Species12, Fe +! =============================================================================== ! +Part-Species12-SpeciesName=Fe +Part-Species12-InteractionID = 1 +Part-Species12-Tref =1000 +Part-Species12-dref = 5.605E-10 +Part-Species12-omega=0.369 +Part-Species12-alpha=1.225 +Part-Species12-HeatOfFormation_K=56850.30 +! =============================================================================== ! +! Species13, Fe +! =============================================================================== ! +Part-Species13-SpeciesName=FeIon1 +Part-Species13-InteractionID = 10 +Part-Species13-Tref =1000 +Part-Species13-dref = 5.605E-10 +Part-Species13-omega=0.369 +Part-Species13-alpha=1.225 +Part-Species13-PreviousState=12 +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=46 + +DSMC-Reaction1-ReactionName=N2+M_N+N+M +DSMC-Reaction2-ReactionName=N2+A_N+N+A +DSMC-Reaction4-ReactionName=O2+M_O+O+M +DSMC-Reaction5-ReactionName=O2+A_O+O+A +DSMC-Reaction7-ReactionName=NO+M_N+O+M +DSMC-Reaction8-ReactionName=NO+A_N+O+A + +!Reaction1 (N2 + molecule -> N + N + molecule) +DSMC-Reaction1-ReactionType=D +DSMC-Reaction1-Reactants=(/3,0,0/) +DSMC-Reaction1-Products=(/1,0,1,0/) +DSMC-Reaction1-Arrhenius-Prefactor=1.162E-08 +DSMC-Reaction1-Arrhenius-Powerfactor=-1.60 +DSMC-Reaction1-Activation-Energy_K=113200.0 +DSMC-Reaction1-NumberOfNonReactives=6 +DSMC-Reaction1-NonReactiveSpecies=(/3,4,5,8,9,10/) +!Reaction2 (N2 + atom -> N + N + atom) +DSMC-Reaction2-ReactionType=D +DSMC-Reaction2-Reactants=(/3,0,0/) +DSMC-Reaction2-Products=(/1,0,1,0/) +DSMC-Reaction2-Arrhenius-Prefactor=4.980E-08 +DSMC-Reaction2-Arrhenius-Powerfactor=-1.60 +DSMC-Reaction2-Activation-Energy_K=113200.0 +DSMC-Reaction2-NumberOfNonReactives=4 +DSMC-Reaction2-NonReactiveSpecies=(/1,2,6,7/) +!Reaction3 (N2 + e -> N + N + e) +DSMC-Reaction3-ReactionType=D +DSMC-Reaction3-Reactants=(/3,11,0/) +DSMC-Reaction3-Products=(/1,11,1,0/) +DSMC-Reaction3-Arrhenius-Prefactor=4.980E-06 +DSMC-Reaction3-Arrhenius-Powerfactor=-1.60 +DSMC-Reaction3-Activation-Energy_K=113200.0 +!Reaction4 (O2 + molecule -> O + O + molecule) +DSMC-Reaction4-ReactionType=D +DSMC-Reaction4-Reactants=(/4,0,0/) +DSMC-Reaction4-Products=(/2,0,2,0/) +DSMC-Reaction4-Arrhenius-Prefactor=3.321E-09 +DSMC-Reaction4-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction4-Activation-Energy_K=59400.0 +DSMC-Reaction4-NumberOfNonReactives=6 +DSMC-Reaction4-NonReactiveSpecies=(/3,4,5,8,9,10/) +!Reaction5 (O2 + atom --> O + O + atom) +DSMC-Reaction5-ReactionType=D +DSMC-Reaction5-Reactants=(/4,0,0/) +DSMC-Reaction5-Products=(/2,0,2,0/) +DSMC-Reaction5-Arrhenius-Prefactor=1.660E-08 +DSMC-Reaction5-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction5-Activation-Energy_K=59400.0 +DSMC-Reaction5-NumberOfNonReactives=4 +DSMC-Reaction5-NonReactiveSpecies=(/1,2,6,7/) +!Reaction6 (O2 + e --> O + O + e) +DSMC-Reaction6-ReactionType=D +DSMC-Reaction6-Reactants=(/4,11,0/) +DSMC-Reaction6-Products=(/2,11,2,0/) +DSMC-Reaction6-Arrhenius-Prefactor=1.660E-08 +DSMC-Reaction6-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction6-Activation-Energy_K=59400.0 +!Reaction7 (NO + molecule --> N + O + molecule) +DSMC-Reaction7-ReactionType=D +DSMC-Reaction7-Reactants=(/5,0,0/) +DSMC-Reaction7-Products=(/1,0,2,0/) +DSMC-Reaction7-Arrhenius-Prefactor=8.302E-15 +DSMC-Reaction7-Arrhenius-Powerfactor=0. +DSMC-Reaction7-Activation-Energy_K=75500.0 +DSMC-Reaction7-NumberOfNonReactives=6 +DSMC-Reaction7-NonReactiveSpecies=(/3,4,5,8,9,10/) +!Reaction8 (NO + atom --> N + O + atom) +DSMC-Reaction8-ReactionType=D +DSMC-Reaction8-Reactants=(/5,0,0/) +DSMC-Reaction8-Products=(/1,0,2,0/) +DSMC-Reaction8-Arrhenius-Prefactor=1.826E-13 +DSMC-Reaction8-Arrhenius-Powerfactor=0. +DSMC-Reaction8-Activation-Energy_K=75500.0 +DSMC-Reaction8-NumberOfNonReactives=4 +DSMC-Reaction8-NonReactiveSpecies=(/1,2,6,7/) +!Reaction9 (NO + e --> N + O + e ) +DSMC-Reaction9-ReactionType=D +DSMC-Reaction9-Reactants=(/5,11,0/) +DSMC-Reaction9-Products=(/1,11,2,0/) +DSMC-Reaction9-Arrhenius-Prefactor=1.826E-013 +DSMC-Reaction9-Arrhenius-Powerfactor=0. +DSMC-Reaction9-Activation-Energy_K=75500.0 +!Reaction10 (NO + O --> N + O2) +DSMC-Reaction10-ReactionType=E +DSMC-Reaction10-Reactants=(/5,2,0/) +DSMC-Reaction10-Products=(/4,1,0,0/) +DSMC-Reaction10-Arrhenius-Prefactor=1.389E-17 +DSMC-Reaction10-Arrhenius-Powerfactor=0. +DSMC-Reaction10-Activation-Energy_K=19700 +!Reaction11 (O2 + N --> O + NO) +DSMC-Reaction11-ReactionType=E +DSMC-Reaction11-Reactants=(/4,1,0/) +DSMC-Reaction11-Products=(/5,2,0,0/) +DSMC-Reaction11-Arrhenius-Prefactor=4.601E-15 +DSMC-Reaction11-Arrhenius-Powerfactor=-0.546 +DSMC-Reaction11-Activation-Energy_K=0. +!Reaction12 (N2 + O --> NO + N) +DSMC-Reaction12-ReactionType=E +DSMC-Reaction12-Reactants=(/3,2,0/) +DSMC-Reaction12-Products=(/5,1,0,0/) +DSMC-Reaction12-Arrhenius-Prefactor=1.069E-12 +DSMC-Reaction12-Arrhenius-Powerfactor=-1.0 +DSMC-Reaction12-Activation-Energy_K=37500.0 +!Reaction13 (NO + N --> N2 + O) +DSMC-Reaction13-ReactionType=E +DSMC-Reaction13-Reactants=(/5,1,0/) +DSMC-Reaction13-Products=(/3,2,0,0/) +DSMC-Reaction13-Arrhenius-Prefactor=4.059E-12 +DSMC-Reaction13-Arrhenius-Powerfactor=-1.359 +DSMC-Reaction13-Activation-Energy_K=0. +!Reaction14 (N + N --> N2+ + e ) +DSMC-Reaction14-ReactionType=E +DSMC-Reaction14-Reactants=(/1,1,0/) +DSMC-Reaction14-Products=(/8,11,0,0/) +DSMC-Reaction14-Arrhenius-Prefactor=3.387E-17 +DSMC-Reaction14-Arrhenius-Powerfactor=0. +DSMC-Reaction14-Activation-Energy_K=67700 +!Reaction15 (N2+ + e --> N + N ) +DSMC-Reaction15-ReactionType=E +DSMC-Reaction15-Reactants=(/8,11,0/) +DSMC-Reaction15-Products=(/1,1,0,0/) +DSMC-Reaction15-Arrhenius-Prefactor=7.274E-12 +DSMC-Reaction15-Arrhenius-Powerfactor=-0.65 +DSMC-Reaction15-Activation-Energy_K=0. +!Reaction16 (O + O --> O2+ + e ) +DSMC-Reaction16-ReactionType=E +DSMC-Reaction16-Reactants=(/2,2,0/) +DSMC-Reaction16-Products=(/9,11,0,0/) +DSMC-Reaction16-Arrhenius-Prefactor=1.859E-17 +DSMC-Reaction16-Arrhenius-Powerfactor=0. +DSMC-Reaction16-Activation-Energy_K=81200 +!Reaction17 (O2+ + e --> O + O ) +DSMC-Reaction17-ReactionType=E +DSMC-Reaction17-Reactants=(/9,11,0/) +DSMC-Reaction17-Products=(/2,2,0,0/) +DSMC-Reaction17-Arrhenius-Prefactor=1.453E-4 +DSMC-Reaction17-Arrhenius-Powerfactor=-2.412 +DSMC-Reaction17-Activation-Energy_K=0. +!Reaction18 (N + O --> NO+ + e ) +DSMC-Reaction18-ReactionType=E +DSMC-Reaction18-Reactants=(/1,2,0/) +DSMC-Reaction18-Products=(/10,11,0,0/) +DSMC-Reaction18-Arrhenius-Prefactor=8.766E-18 +DSMC-Reaction18-Arrhenius-Powerfactor=0. +DSMC-Reaction18-Activation-Energy_K=32000 +!Reaction19 (NO+ + e --> N + O ) +DSMC-Reaction19-ReactionType=E +DSMC-Reaction19-Reactants=(/10,11,0/) +DSMC-Reaction19-Products=(/1,2,0,0/) +DSMC-Reaction19-Arrhenius-Prefactor=1.321E-9 +DSMC-Reaction19-Arrhenius-Powerfactor=-1.187 +DSMC-Reaction19-Activation-Energy_K=0. +!Reaction20 (O+ + N2 --> N2+ + O ) +DSMC-Reaction20-ReactionType=E +DSMC-Reaction20-Reactants=(/7,3,0/) +DSMC-Reaction20-Products=(/8,2,0,0/) +DSMC-Reaction20-Arrhenius-Prefactor=1.511E-18 +DSMC-Reaction20-Arrhenius-Powerfactor=0.36 +DSMC-Reaction20-Activation-Energy_K=22800 +!Reaction21 (N2+ + O --> O+ + N2 ) +DSMC-Reaction21-ReactionType=E +DSMC-Reaction21-Reactants=(/8,2,0/) +DSMC-Reaction21-Products=(/7,3,0,0/) +DSMC-Reaction21-Arrhenius-Prefactor=1.978E-18 +DSMC-Reaction21-Arrhenius-Powerfactor=0.109 +DSMC-Reaction21-Activation-Energy_K=0. +!Reaction22 (O+ + NO --> N+ + O2 ) +DSMC-Reaction22-ReactionType=E +DSMC-Reaction22-Reactants=(/7,5,0/) +DSMC-Reaction22-Products=(/6,4,0,0/) +DSMC-Reaction22-Arrhenius-Prefactor=2.324E-25 +DSMC-Reaction22-Arrhenius-Powerfactor=1.9 +DSMC-Reaction22-Activation-Energy_K=15300 +!Reaction23 (N+ + O2 --> O+ + NO ) +DSMC-Reaction23-ReactionType=E +DSMC-Reaction23-Reactants=(/6,4,0/) +DSMC-Reaction23-Products=(/7,5,0,0/) +DSMC-Reaction23-Arrhenius-Prefactor=2.443E-26 +DSMC-Reaction23-Arrhenius-Powerfactor=2.102 +DSMC-Reaction23-Activation-Energy_K=0. +!Reaction24 (NO+ + O2 --> O2+ + NO ) +DSMC-Reaction24-ReactionType=E +DSMC-Reaction24-Reactants=(/10,4,0/) +DSMC-Reaction24-Products=(/9,5,0,0/) +DSMC-Reaction24-Arrhenius-Prefactor=3.985E-17 +DSMC-Reaction24-Arrhenius-Powerfactor=0.410 +DSMC-Reaction24-Activation-Energy_K=32600 +!Reaction25 (O2+ + NO --> NO+ + O2 ) +DSMC-Reaction25-ReactionType=E +DSMC-Reaction25-Reactants=(/9,5,0/) +DSMC-Reaction25-Products=(/10,4,0,0/) +DSMC-Reaction25-Arrhenius-Prefactor=6.195E-16 +DSMC-Reaction25-Arrhenius-Powerfactor=-0.050 +DSMC-Reaction25-Activation-Energy_K=0. +!Reaction26 (NO+ + N --> N2+ + O ) +DSMC-Reaction26-ReactionType=E +DSMC-Reaction26-Reactants=(/10,1,0/) +DSMC-Reaction26-Products=(/8,2,0,0/) +DSMC-Reaction26-Arrhenius-Prefactor=1.195E-16 +DSMC-Reaction26-Arrhenius-Powerfactor=0. +DSMC-Reaction26-Activation-Energy_K=35500 +!Reaction27 (N2+ + O --> NO+ + N ) +DSMC-Reaction27-ReactionType=E +DSMC-Reaction27-Reactants=(/8,2,0/) +DSMC-Reaction27-Products=(/10,1,0,0/) +DSMC-Reaction27-Arrhenius-Prefactor=1.744E-18 +DSMC-Reaction27-Arrhenius-Powerfactor=0.302 +DSMC-Reaction27-Activation-Energy_K=0. +!Reaction28 (NO+ + O --> N+ + O2 ) +DSMC-Reaction28-ReactionType=E +DSMC-Reaction28-Reactants=(/10,2,0/) +DSMC-Reaction28-Products=(/6,4,0,0/) +DSMC-Reaction28-Arrhenius-Prefactor=1.660E-18 +DSMC-Reaction28-Arrhenius-Powerfactor=0.5 +DSMC-Reaction28-Activation-Energy_K=77200 +!Reaction29 (N+ + O2 --> NO+ + O ) +DSMC-Reaction29-ReactionType=E +DSMC-Reaction29-Reactants=(/6,4,0/) +DSMC-Reaction29-Products=(/10,2,0,0/) +DSMC-Reaction29-Arrhenius-Prefactor=2.192E-17 +DSMC-Reaction29-Arrhenius-Powerfactor=0.114 +DSMC-Reaction29-Activation-Energy_K=0. +!Reaction30 (O2+ + N --> N+ + O2 ) +DSMC-Reaction30-ReactionType=E +DSMC-Reaction30-Reactants=(/9,1,0/) +DSMC-Reaction30-Products=(/4,6,0,0/) +DSMC-Reaction30-Arrhenius-Prefactor=1.444E-16 +DSMC-Reaction30-Arrhenius-Powerfactor=0.14 +DSMC-Reaction30-Activation-Energy_K=28600 +!Reaction31 (N+ + O2 --> O2+ + N ) +DSMC-Reaction31-ReactionType=E +DSMC-Reaction31-Reactants=(/4,6,0/) +DSMC-Reaction31-Products=(/9,1,0,0/) +DSMC-Reaction31-Arrhenius-Prefactor=4.993E-18 +DSMC-Reaction31-Arrhenius-Powerfactor=-0.004 +DSMC-Reaction31-Activation-Energy_K=0. +!Reaction32 (O2+ + N2 --> N2+ + O2 ) +DSMC-Reaction32-ReactionType=E +DSMC-Reaction32-Reactants=(/9,3,0/) +DSMC-Reaction32-Products=(/8,4,0,0/) +DSMC-Reaction32-Arrhenius-Prefactor=1.644E-17 +DSMC-Reaction32-Arrhenius-Powerfactor=0 +DSMC-Reaction32-Activation-Energy_K=40700 +!Reaction33 (N2+ + O2 --> O2+ + N2 ) +DSMC-Reaction33-ReactionType=E +DSMC-Reaction33-Reactants=(/8,4,0/) +DSMC-Reaction33-Products=(/9,3,0,0/) +DSMC-Reaction33-Arrhenius-Prefactor=4.589E-18 +DSMC-Reaction33-Arrhenius-Powerfactor=-0.037 +DSMC-Reaction33-Activation-Energy_K=0. +!Reaction34 (NO+ + N --> O+ + N2 ) +DSMC-Reaction34-ReactionType=E +DSMC-Reaction34-Reactants=(/10,1,0/) +DSMC-Reaction34-Products=(/7,3,0,0/) +DSMC-Reaction34-Arrhenius-Prefactor=5.645E-17 +DSMC-Reaction34-Arrhenius-Powerfactor=-1.08 +DSMC-Reaction34-Activation-Energy_K=12800 +!Reaction35 (O+ + N2 --> NO+ + N ) +DSMC-Reaction35-ReactionType=E +DSMC-Reaction35-Reactants=(/7,3,0/) +DSMC-Reaction35-Products=(/10,1,0,0/) +DSMC-Reaction35-Arrhenius-Prefactor=3.970E-18 +DSMC-Reaction35-Arrhenius-Powerfactor=-0.71 +DSMC-Reaction35-Activation-Energy_K=0. +!Reaction36 (NO+ + O --> O2+ + N ) +DSMC-Reaction36-ReactionType=E +DSMC-Reaction36-Reactants=(/10,2,0/) +DSMC-Reaction36-Products=(/9,1,0,0/) +DSMC-Reaction36-Arrhenius-Prefactor=1.195E-17 +DSMC-Reaction36-Arrhenius-Powerfactor=0.29 +DSMC-Reaction36-Activation-Energy_K=48600 +!Reaction37 (O2+ + N --> NO+ + O ) +DSMC-Reaction37-ReactionType=E +DSMC-Reaction37-Reactants=(/9,1,0/) +DSMC-Reaction37-Products=(/10,2,0,0/) +DSMC-Reaction37-Arrhenius-Prefactor=8.918E-13 +DSMC-Reaction37-Arrhenius-Powerfactor=-0.969 +DSMC-Reaction37-Activation-Energy_K=0. +!Reaction38 (N+ + N2 --> N2+ + N ) +DSMC-Reaction38-ReactionType=E +DSMC-Reaction38-Reactants=(/6,3,0/) +DSMC-Reaction38-Products=(/8,1,0,0/) +DSMC-Reaction38-Arrhenius-Prefactor=1.660E-18 +DSMC-Reaction38-Arrhenius-Powerfactor=0.5 +DSMC-Reaction38-Activation-Energy_K=12100 +!Reaction39 (N2+ + N --> N+ + N2 ) +DSMC-Reaction39-ReactionType=E +DSMC-Reaction39-Reactants=(/8,1,0/) +DSMC-Reaction39-Products=(/6,3,0,0/) +DSMC-Reaction39-Arrhenius-Prefactor=2.343E-14 +DSMC-Reaction39-Arrhenius-Powerfactor=-0.61 +DSMC-Reaction39-Activation-Energy_K=0. +!Reaction40 (O2+ + O --> O2 + O+ ) +DSMC-Reaction40-ReactionType=E +DSMC-Reaction40-Reactants=(/9,2,0/) +DSMC-Reaction40-Products=(/4,7,0,0/) +DSMC-Reaction40-Arrhenius-Prefactor=6.641E-18 +DSMC-Reaction40-Arrhenius-Powerfactor=-0.09 +DSMC-Reaction40-Activation-Energy_K=18600 +!Reaction41 (O2 + O+ --> O2+ + O ) +DSMC-Reaction41-ReactionType=E +DSMC-Reaction41-Reactants=(/4,7,0/) +DSMC-Reaction41-Products=(/9,2,0,0/) +DSMC-Reaction41-Arrhenius-Prefactor=4.993E-18 +DSMC-Reaction41-Arrhenius-Powerfactor=-0.004 +DSMC-Reaction41-Activation-Energy_K=0. +!Reaction42 (N + e --> N+ + e + e ) +DSMC-Reaction42-ReactionType=iQK +DSMC-Reaction42-Reactants=(/1,11,0/) +DSMC-Reaction42-Products=(/6,11,11,0/) +DSMC-Reaction42-Arrhenius-Prefactor=8.434E-14 +DSMC-Reaction42-Arrhenius-Powerfactor=0. +DSMC-Reaction42-Activation-Energy_K=121600 +!Reaction43 (O + e --> O+ + e + e ) +DSMC-Reaction43-ReactionType=iQK +DSMC-Reaction43-Reactants=(/2,11,0/) +DSMC-Reaction43-Products=(/7,11,11,0/) +DSMC-Reaction43-Arrhenius-Prefactor=1.054E-14 +DSMC-Reaction43-Arrhenius-Powerfactor=0. +DSMC-Reaction43-Activation-Energy_K=106200 + +! Fe reactions +!Reaction44 (Fe + NO+ --> Fe+ + NO ) +DSMC-Reaction44-Reactants=(/12,10,0/) +DSMC-Reaction44-Products=(/13,5,0,0/) +DSMC-Reaction44-Arrhenius-Prefactor=9.2E-16 +DSMC-Reaction44-Arrhenius-Powerfactor=0. +DSMC-Reaction44-Activation-Energy_K=0. +!Reaction45 (Fe + O2+ --> Fe+ + O2 ) +DSMC-Reaction45-Reactants=(/12,9,0/) +DSMC-Reaction45-Products=(/13,4,0,0/) +DSMC-Reaction45-Arrhenius-Prefactor=1.1E-15 +DSMC-Reaction45-Arrhenius-Powerfactor=0. +DSMC-Reaction45-Activation-Energy_K=0. +!Reaction46 (Fe + e --> Fe+ + e + e ) +DSMC-Reaction46-Reactants=(/12,11,0/) +DSMC-Reaction46-Products=(/13,11,11,0/) +DSMC-Reaction46-Arrhenius-Prefactor=5.42019182E-13 +DSMC-Reaction46-Arrhenius-Powerfactor=-8.17E-2 +DSMC-Reaction46-Activation-Energy_K=1.272E5 diff --git a/tools/species_database/Air_11Spec_27Reac_Park1993.ini b/tools/species_database/Air_11Spec_27Reac_Park1993.ini new file mode 100755 index 000000000..12342df6d --- /dev/null +++ b/tools/species_database/Air_11Spec_27Reac_Park1993.ini @@ -0,0 +1,346 @@ +! ======================================================================= +! Data for air taken from +! ======================================================================= +! =============================================================================== ! +! Species1, N +! =============================================================================== ! +Part-Species1-SpeciesName=N +Part-Species1-InteractionID = 1 +Part-Species1-VHSReferenceTemp =273 ! K +Part-Species1-VHSReferenceDiam = 3.0E-10 ! m +Part-Species1-omegaVHS=0.24 +Part-Species1-HeatOfFormation_K=56850.30 +! =============================================================================== ! +! Species2, O +! =============================================================================== ! +Part-Species2-SpeciesName=O +Part-Species2-InteractionID = 1 +Part-Species2-VHSReferenceTemp =273 +Part-Species2-VHSReferenceDiam = 3.0E-10 +Part-Species2-omegaVHS=0.24 +Part-Species2-HeatOfFormation_K=29969.45 +! =============================================================================== ! +! Species3, N2 +! =============================================================================== ! +Part-Species3-SpeciesName=N2 +Part-Species3-InteractionID = 2 +Part-Species3-VHSReferenceTemp =273 +Part-Species3-VHSReferenceDiam = 4.07E-10 +Part-Species3-omegaVHS=0.24 +Part-Species3-CharaTempVib=3393.3 +Part-Species3-Ediss_eV=9.759 +Part-Species3-CharaTempRot = 2.87 +Part-Species3-SymmetryFactor = 2 +Part-Species3-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species4, O2 +! =============================================================================== ! +Part-Species4-SpeciesName=O2 +Part-Species4-InteractionID = 2 +Part-Species4-VHSReferenceTemp =273 +Part-Species4-VHSReferenceDiam = 3.96E-10 +Part-Species4-omegaVHS=0.24 +Part-Species4-CharaTempVib=2272.8 +Part-Species4-Ediss_eV=5.115 +Part-Species4-CharaTempRot = 2.1 +Part-Species4-SymmetryFactor = 2 +Part-Species4-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species5, NO +! =============================================================================== ! +Part-Species5-SpeciesName=NO +Part-Species5-InteractionID = 2 +Part-Species5-VHSReferenceTemp =273 +Part-Species5-VHSReferenceDiam = 4.00E-10 +Part-Species5-omegaVHS=0.24 +Part-Species5-CharaTempVib=2738.8 +Part-Species5-Ediss_eV=6.496 +Part-Species5-CharaTempRot = 2.4 +Part-Species5-SymmetryFactor = 1 +Part-Species5-HeatOfFormation_K=10859.38 +! =============================================================================== ! +! Species6, N+ +! =============================================================================== ! +Part-Species6-SpeciesName=NIon1 +Part-Species6-InteractionID = 10 +Part-Species6-VHSReferenceTemp =273 +Part-Species6-VHSReferenceDiam = 3.0E-10 +Part-Species6-omegaVHS=0.24 +Part-Species6-PreviousState=1 +! =============================================================================== ! +! Species7, O+ +! =============================================================================== ! +Part-Species7-SpeciesName=OIon1 +Part-Species7-InteractionID = 10 +Part-Species7-VHSReferenceTemp =273 +Part-Species7-VHSReferenceDiam = 3.0E-10 +Part-Species7-omegaVHS=0.24 +Part-Species7-PreviousState=2 +! =============================================================================== ! +! Species8, N2+ +! =============================================================================== ! +Part-Species8-SpeciesName=N2Ion1 +Part-Species8-InteractionID = 20 +Part-Species8-VHSReferenceTemp =273 +Part-Species8-VHSReferenceDiam = 4.07E-10 +Part-Species8-omegaVHS=0.24 +Part-Species8-CharaTempVib=3174.7 +Part-Species8-Ediss_eV=9.759 +Part-Species8-CharaTempRot = 2.8 +Part-Species8-SymmetryFactor = 2 +Part-Species8-PreviousState=3 +! =============================================================================== ! +! Species9, O2+ +! =============================================================================== ! +Part-Species9-SpeciesName=O2Ion1 +Part-Species9-InteractionID = 20 +Part-Species9-VHSReferenceTemp =273 +Part-Species9-VHSReferenceDiam = 3.96E-10 +Part-Species9-omegaVHS=0.24 +Part-Species9-CharaTempVib=2741.7 +Part-Species9-Ediss_eV=5.115 +Part-Species9-CharaTempRot = 2.4 +Part-Species9-SymmetryFactor = 2 +Part-Species9-PreviousState=4 +! =============================================================================== ! +! Species10, NO+ +! =============================================================================== ! +Part-Species10-SpeciesName=NOIon1 +Part-Species10-InteractionID = 20 +Part-Species10-VHSReferenceTemp =273 +Part-Species10-VHSReferenceDiam = 4.00E-10 +Part-Species10-omegaVHS=0.24 +Part-Species10-CharaTempVib=3419.2 +Part-Species10-Ediss_eV=6.496 +Part-Species10-CharaTempRot = 2.9 +Part-Species10-SymmetryFactor = 1 +Part-Species10-PreviousState=5 +! =============================================================================== ! +! Species11, e +! =============================================================================== ! +Part-Species11-SpeciesName = electron +Part-Species11-InteractionID = 4 +Part-Species11-VHSReferenceTemp =273 +Part-Species11-VHSReferenceDiam = 2.817920E-15 +Part-Species11-omegaVHS=0.24 +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=27 + +!Reaction1 (N2 + molecule -> N + N + molecule) +DSMC-Reaction1-ReactionName=N2+M_N+N+M +DSMC-Reaction1-ReactionType=D +DSMC-Reaction1-Reactants=(/3,0,0/) +DSMC-Reaction1-Products=(/1,0,1/) +DSMC-Reaction1-Arrhenius-Prefactor=1.16237749371486E-08 +DSMC-Reaction1-Arrhenius-Powerfactor=-1.60 +DSMC-Reaction1-Activation-Energy_K=113200.0 +DSMC-Reaction1-NumberOfNonReactives=6 +DSMC-Reaction1-NonReactiveSpecies=(/3,4,5,8,9,10/) + +!Reaction2 (N2 + atom -> N + N + atom) +DSMC-Reaction2-ReactionName=N2+A_N+N+A +DSMC-Reaction2-ReactionType=D +DSMC-Reaction2-Reactants=(/3,0,0/) +DSMC-Reaction2-Products=(/1,0,1/) +DSMC-Reaction2-Arrhenius-Prefactor=4.98161783020654E-08 +DSMC-Reaction2-Arrhenius-Powerfactor=-1.60 +DSMC-Reaction2-Activation-Energy_K=113200.0 +DSMC-Reaction2-NumberOfNonReactives=4 +DSMC-Reaction2-NonReactiveSpecies=(/1,2,6,7/) + +!Reaction4 (N2 + e -> N + N + e) +DSMC-Reaction3-ReactionType=D +DSMC-Reaction3-Reactants=(/3,11,0/) +DSMC-Reaction3-Products=(/1,11,1/) +DSMC-Reaction3-Arrhenius-Prefactor=1.99264713208262E-005 +DSMC-Reaction3-Arrhenius-Powerfactor=-1.60 +DSMC-Reaction3-Activation-Energy_K=113200.0 + +!Reaction4 (O2 + molecule -> O + O + molecule) +DSMC-Reaction4-ReactionName=O2+M_O+O+M +DSMC-Reaction4-ReactionType=D +DSMC-Reaction4-Reactants=(/4,0,0/) +DSMC-Reaction4-Products=(/2,0,2/) +DSMC-Reaction4-Arrhenius-Prefactor=3.32107855347103E-09 +DSMC-Reaction4-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction4-Activation-Energy_K=59500.0 +DSMC-Reaction4-NumberOfNonReactives=6 +DSMC-Reaction4-NonReactiveSpecies=(/3,4,5,8,9,10/) + +!Reaction5 (O2 + atom --> O + O + atom) +DSMC-Reaction5-ReactionName=O2+A_O+O+A +DSMC-Reaction5-ReactionType=D +DSMC-Reaction5-Reactants=(/4,0,0/) +DSMC-Reaction5-Products=(/2,0,2/) +DSMC-Reaction5-Arrhenius-Prefactor=1.66053927673551E-08 +DSMC-Reaction5-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction5-Activation-Energy_K=59500.0 +DSMC-Reaction5-NumberOfNonReactives=4 +DSMC-Reaction5-NonReactiveSpecies=(/1,2,6,7/) + +!Reaction6 (O2 + e --> O + O + e) +DSMC-Reaction6-ReactionType=D +DSMC-Reaction6-Reactants=(/4,11,0/) +DSMC-Reaction6-Products=(/2,11,2/) +DSMC-Reaction6-Arrhenius-Prefactor=1.66053927673551E-08 +DSMC-Reaction6-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction6-Activation-Energy_K=59500.0 + +!Reaction7 (NO + molecule --> N + O + molecule) +DSMC-Reaction7-ReactionName=NO+M_N+O+M +DSMC-Reaction7-ReactionType=D +DSMC-Reaction7-Reactants=(/5,0,0/) +DSMC-Reaction7-Products=(/1,0,2/) +DSMC-Reaction7-Arrhenius-Prefactor=8.30269638367756E-15 +DSMC-Reaction7-Arrhenius-Powerfactor=0. +DSMC-Reaction7-Activation-Energy_K=75500.0 +DSMC-Reaction7-NumberOfNonReactives=6 +DSMC-Reaction7-NonReactiveSpecies=(/3,4,5,8,9,10/) + +!Reaction8 (NO + atom --> N + O + atom) +DSMC-Reaction8-ReactionName=NO+A_N+O+A +DSMC-Reaction8-ReactionType=D +DSMC-Reaction8-Reactants=(/5,0,0/) +DSMC-Reaction8-Products=(/1,0,2/) +DSMC-Reaction8-Arrhenius-Prefactor=1.82659320440906E-13 +DSMC-Reaction8-Arrhenius-Powerfactor=0. +DSMC-Reaction8-Activation-Energy_K=75500.0 +DSMC-Reaction8-NumberOfNonReactives=4 +DSMC-Reaction8-NonReactiveSpecies=(/1,2,6,7/) + +!Reaction9 (NO + e --> N + O + e ) +DSMC-Reaction9-ReactionType=D +DSMC-Reaction9-Reactants=(/5,11,0/) +DSMC-Reaction9-Products=(/1,11,2/) +DSMC-Reaction9-Arrhenius-Prefactor=1.82659320440906E-013 +DSMC-Reaction9-Arrhenius-Powerfactor=0. +DSMC-Reaction9-Activation-Energy_K=75500.0 + +!Reaction10 (N2 + O --> NO + N) +DSMC-Reaction10-ReactionType=E +DSMC-Reaction10-Reactants=(/3,2,0/) +DSMC-Reaction10-Products=(/5,1,0/) +DSMC-Reaction10-Arrhenius-Prefactor=1.06274513711073E-12 +DSMC-Reaction10-Arrhenius-Powerfactor=-1 +DSMC-Reaction10-Activation-Energy_K=38400.0 + +!Reaction11 (NO + O --> N + O2) +DSMC-Reaction11-ReactionType=E +DSMC-Reaction11-Reactants=(/5,2,0/) +DSMC-Reaction11-Products=(/4,1,0/) +DSMC-Reaction11-Arrhenius-Prefactor=1.39485299245783E-17 +DSMC-Reaction11-Arrhenius-Powerfactor=0 +DSMC-Reaction11-Activation-Energy_K=19450 + +!Reaction12 (N + O --> NO+ + e ) +DSMC-Reaction12-ReactionType=E +DSMC-Reaction12-Reactants=(/1,2,0/) +DSMC-Reaction12-Products=(/10,11,0/) +DSMC-Reaction12-Arrhenius-Prefactor=1.46127456352725E-21 +DSMC-Reaction12-Arrhenius-Powerfactor=1. +DSMC-Reaction12-Activation-Energy_K=31900 +!Reaction13 (O + O --> O2+ + e ) +DSMC-Reaction13-ReactionType=E +DSMC-Reaction13-Reactants=(/2,2,0/) +DSMC-Reaction13-Products=(/9,11,0/) +DSMC-Reaction13-Arrhenius-Prefactor=1.17898288648221E-27 +DSMC-Reaction13-Arrhenius-Powerfactor=2.7 +DSMC-Reaction13-Activation-Energy_K=80600 +!Reaction14 (N + N --> N2+ + e ) +DSMC-Reaction14-ReactionType=E +DSMC-Reaction14-Reactants=(/1,1,0/) +DSMC-Reaction14-Products=(/8,11,0/) +DSMC-Reaction14-Arrhenius-Prefactor=7.30637281763626E-23 +DSMC-Reaction14-Arrhenius-Powerfactor=1.5 +DSMC-Reaction14-Activation-Energy_K=67500 + +!Reaction15 (NO+ + O --> N+ + O2 ) +DSMC-Reaction15-ReactionType=E +DSMC-Reaction15-Reactants=(/10,2,0/) +DSMC-Reaction15-Products=(/6,4,0/) +DSMC-Reaction15-Arrhenius-Prefactor=1.66053927673551E-18 +DSMC-Reaction15-Arrhenius-Powerfactor=0.5 +DSMC-Reaction15-Activation-Energy_K=77200 +!Reaction16 (N+ + N2 --> N2+ + N ) +DSMC-Reaction16-ReactionType=E +DSMC-Reaction16-Reactants=(/6,3,0/) +DSMC-Reaction16-Products=(/8,1,0/) +DSMC-Reaction16-Arrhenius-Prefactor=1.66053927673551E-18 +DSMC-Reaction16-Arrhenius-Powerfactor=0.5 +DSMC-Reaction16-Activation-Energy_K=12200 +!Reaction17 (O2+ + N --> N+ + O2 ) +DSMC-Reaction17-ReactionType=E +DSMC-Reaction17-Reactants=(/9,1,0/) +DSMC-Reaction17-Products=(/4,6,0/) +DSMC-Reaction17-Arrhenius-Prefactor=1.4446691707599E-16 +DSMC-Reaction17-Arrhenius-Powerfactor=0.14 +DSMC-Reaction17-Activation-Energy_K=28600 +!Reaction18 (NO+ + N --> N2+ + O ) +DSMC-Reaction18-ReactionType=E +DSMC-Reaction18-Reactants=(/10,1,0/) +DSMC-Reaction18-Products=(/8,2,0/) +DSMC-Reaction18-Arrhenius-Prefactor=1.19558827924957E-16 +DSMC-Reaction18-Arrhenius-Powerfactor=0. +DSMC-Reaction18-Activation-Energy_K=35500 +!Reaction19 (O+ + N2 --> N2+ + O ) +DSMC-Reaction19-ReactionType=E +DSMC-Reaction19-Reactants=(/7,3,0/) +DSMC-Reaction19-Products=(/8,2,0/) +DSMC-Reaction19-Arrhenius-Prefactor=1.51109074182932E-18 +DSMC-Reaction19-Arrhenius-Powerfactor=0.36 +DSMC-Reaction19-Activation-Energy_K=22800 +!Reaction20 (O+ + NO --> N+ + O2 ) +DSMC-Reaction20-ReactionType=E +DSMC-Reaction20-Reactants=(/7,5,0/) +DSMC-Reaction20-Products=(/6,4,0/) +DSMC-Reaction20-Arrhenius-Prefactor=2.32475498742972E-25 +DSMC-Reaction20-Arrhenius-Powerfactor=1.9 +DSMC-Reaction20-Activation-Energy_K=26600 +!Reaction21 (O2+ + N2 --> N2+ + O2 ) +DSMC-Reaction21-ReactionType=E +DSMC-Reaction21-Reactants=(/9,3,0/) +DSMC-Reaction21-Products=(/8,4,0/) +DSMC-Reaction21-Arrhenius-Prefactor=1.64393388396816E-17 +DSMC-Reaction21-Arrhenius-Powerfactor=0 +DSMC-Reaction21-Activation-Energy_K=40700 +!Reaction22 (O2+ + O --> O2 + O+ ) +DSMC-Reaction22-ReactionType=E +DSMC-Reaction22-Reactants=(/9,2,0/) +DSMC-Reaction22-Products=(/4,7,0/) +DSMC-Reaction22-Arrhenius-Prefactor=6.64215710694205E-18 +DSMC-Reaction22-Arrhenius-Powerfactor=-0.09 +DSMC-Reaction22-Activation-Energy_K=18000 +!Reaction23 (NO+ + N --> O+ + N2 ) +DSMC-Reaction23-ReactionType=E +DSMC-Reaction23-Reactants=(/10,1,0/) +DSMC-Reaction23-Products=(/7,3,0/) +DSMC-Reaction23-Arrhenius-Prefactor=5.64583354090074E-17 +DSMC-Reaction23-Arrhenius-Powerfactor=-1.08 +DSMC-Reaction23-Activation-Energy_K=12800 +!Reaction24 (NO+ + O2 --> O2+ + NO ) +DSMC-Reaction24-ReactionType=E +DSMC-Reaction24-Reactants=(/10,4,0/) +DSMC-Reaction24-Products=(/9,5,0/) +DSMC-Reaction24-Arrhenius-Prefactor=3.98529426416523E-17 +DSMC-Reaction24-Arrhenius-Powerfactor=0.41 +DSMC-Reaction24-Activation-Energy_K=32600 +!Reaction25 (NO+ + O --> O2+ + N ) +DSMC-Reaction25-ReactionType=E +DSMC-Reaction25-Reactants=(/10,2,0/) +DSMC-Reaction25-Products=(/9,1,0/) +DSMC-Reaction25-Arrhenius-Prefactor=1.19558827924957E-17 +DSMC-Reaction25-Arrhenius-Powerfactor=0.29 +DSMC-Reaction25-Activation-Energy_K=48600 + +!Reaction26 (O + e --> O+ + e + e ) +DSMC-Reaction26-ReactionType=iQK +DSMC-Reaction26-Reactants=(/2,11,0/) +DSMC-Reaction26-Products=(/7,11,11/) +DSMC-Reaction26-QKProcedure=true +!Reaction27 (N + e --> O+ + e + e ) +DSMC-Reaction27-ReactionType=iQK +DSMC-Reaction27-Reactants=(/1,11,0/) +DSMC-Reaction27-Products=(/6,11,11/) +DSMC-Reaction27-QKProcedure=true diff --git a/tools/species_database/Air_11Spec_43Reac_Boyd2007.ini b/tools/species_database/Air_11Spec_43Reac_Boyd2007.ini new file mode 100755 index 000000000..bad799747 --- /dev/null +++ b/tools/species_database/Air_11Spec_43Reac_Boyd2007.ini @@ -0,0 +1,453 @@ +! ======================================================================= +! Data for air taken from +! Species: G. A. Bird, Nonequilibrium radiation during re-entry at 10 km/s, AIAA-Paper 87-1543 +! Reactions: Iain D. Boyd, Phys. Fluids 19, 096102 (2007) +! ======================================================================= +! =============================================================================== ! +! Species1, N +! =============================================================================== ! +Part-Species1-SpeciesName=N +Part-Species1-InteractionID = 1 +Part-Species1-Tref =273 ! K +Part-Species1-dref = 3.0E-10 ! m +Part-Species1-omega=0.24 +Part-Species1-HeatOfFormation_K=56850.30 +! =============================================================================== ! +! Species2, O +! =============================================================================== ! +Part-Species2-SpeciesName=O +Part-Species2-InteractionID = 1 +Part-Species2-Tref =273 +Part-Species2-dref = 3.0E-10 +Part-Species2-omega=0.24 +Part-Species2-HeatOfFormation_K=29969.45 +! =============================================================================== ! +! Species3, N2 +! =============================================================================== ! +Part-Species3-SpeciesName=N2 +Part-Species3-InteractionID = 2 +Part-Species3-Tref =273 +Part-Species3-dref = 4.07E-10 +Part-Species3-omega=0.24 +Part-Species3-CharaTempVib=3393.3 +Part-Species3-Ediss_eV=9.759 +Part-Species3-CharaTempRot = 2.87 +Part-Species3-SymmetryFactor = 2 +Part-Species3-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species4, O2 +! =============================================================================== ! +Part-Species4-SpeciesName=O2 +Part-Species4-InteractionID = 2 +Part-Species4-Tref =273 +Part-Species4-dref = 3.96E-10 +Part-Species4-omega=0.24 +Part-Species4-CharaTempVib=2272.8 +Part-Species4-Ediss_eV=5.115 +Part-Species4-CharaTempRot = 2.1 +Part-Species4-SymmetryFactor = 2 +Part-Species4-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species5, NO +! =============================================================================== ! +Part-Species5-SpeciesName=NO +Part-Species5-InteractionID = 2 +Part-Species5-Tref =273 +Part-Species5-dref = 4.00E-10 +Part-Species5-omega=0.24 +Part-Species5-CharaTempVib=2738.8 +Part-Species5-Ediss_eV=6.496 +Part-Species5-CharaTempRot = 2.4 +Part-Species5-SymmetryFactor = 1 +Part-Species5-HeatOfFormation_K=10859.38 +! =============================================================================== ! +! Species6, N+ +! =============================================================================== ! +Part-Species6-SpeciesName=NIon1 +Part-Species6-InteractionID = 10 +Part-Species6-Tref =273 +Part-Species6-dref = 3.0E-10 +Part-Species6-omega=0.24 +Part-Species6-PreviousState=1 +! =============================================================================== ! +! Species7, O+ +! =============================================================================== ! +Part-Species7-SpeciesName=OIon1 +Part-Species7-InteractionID = 10 +Part-Species7-Tref =273 +Part-Species7-dref = 3.0E-10 +Part-Species7-omega=0.24 +Part-Species7-PreviousState=2 +! =============================================================================== ! +! Species8, N2+ +! =============================================================================== ! +Part-Species8-SpeciesName=N2Ion1 +Part-Species8-InteractionID = 20 +Part-Species8-Tref =273 +Part-Species8-dref = 4.07E-10 +Part-Species8-omega=0.24 +Part-Species8-CharaTempVib=3174.7 +Part-Species8-Ediss_eV=9.759 +Part-Species8-CharaTempRot = 2.8 +Part-Species8-SymmetryFactor = 2 +Part-Species8-PreviousState=3 +! =============================================================================== ! +! Species9, O2+ +! =============================================================================== ! +Part-Species9-SpeciesName=O2Ion1 +Part-Species9-InteractionID = 20 +Part-Species9-Tref =273 +Part-Species9-dref = 3.96E-10 +Part-Species9-omega=0.24 +Part-Species9-CharaTempVib=2741.7 +Part-Species9-Ediss_eV=5.115 +Part-Species9-CharaTempRot = 2.4 +Part-Species9-SymmetryFactor = 2 +Part-Species9-PreviousState=4 +! =============================================================================== ! +! Species10, NO+ +! =============================================================================== ! +Part-Species10-SpeciesName=NOIon1 +Part-Species10-InteractionID = 20 +Part-Species10-Tref =273 +Part-Species10-dref = 4.00E-10 +Part-Species10-omega=0.24 +Part-Species10-CharaTempVib=3419.2 +Part-Species10-Ediss_eV=6.496 +Part-Species10-CharaTempRot = 2.9 +Part-Species10-SymmetryFactor = 1 +Part-Species10-PreviousState=5 +! =============================================================================== ! +! Species11, e +! =============================================================================== ! +Part-Species11-SpeciesName = electron +Part-Species11-InteractionID = 4 +Part-Species11-Tref =273 +Part-Species11-dref = 2.817920E-15 +Part-Species11-omega=0.24 +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=43 + +DSMC-Reaction1-ReactionName=N2+M_N+N+M +DSMC-Reaction2-ReactionName=N2+A_N+N+A +DSMC-Reaction4-ReactionName=O2+M_O+O+M +DSMC-Reaction5-ReactionName=O2+A_O+O+A +DSMC-Reaction7-ReactionName=NO+M_N+O+M +DSMC-Reaction8-ReactionName=NO+A_N+O+A + +!Reaction1 (N2 + molecule -> N + N + molecule) +DSMC-Reaction1-ReactionType=D +DSMC-Reaction1-Reactants=(/3,0,0/) +DSMC-Reaction1-Products=(/1,0,1,0/) +DSMC-Reaction1-Arrhenius-Prefactor=1.162E-08 +DSMC-Reaction1-Arrhenius-Powerfactor=-1.60 +DSMC-Reaction1-Activation-Energy_K=113200.0 +DSMC-Reaction1-NumberOfNonReactives=6 +DSMC-Reaction1-NonReactiveSpecies=(/3,4,5,8,9,10/) +!Reaction2 (N2 + atom -> N + N + atom) +DSMC-Reaction2-ReactionType=D +DSMC-Reaction2-Reactants=(/3,0,0/) +DSMC-Reaction2-Products=(/1,0,1,0/) +DSMC-Reaction2-Arrhenius-Prefactor=4.980E-08 +DSMC-Reaction2-Arrhenius-Powerfactor=-1.60 +DSMC-Reaction2-Activation-Energy_K=113200.0 +DSMC-Reaction2-NumberOfNonReactives=4 +DSMC-Reaction2-NonReactiveSpecies=(/1,2,6,7/) +!Reaction3 (N2 + e -> N + N + e) +DSMC-Reaction3-ReactionType=D +DSMC-Reaction3-Reactants=(/3,11,0/) +DSMC-Reaction3-Products=(/1,11,1,0/) +DSMC-Reaction3-Arrhenius-Prefactor=4.980E-06 +DSMC-Reaction3-Arrhenius-Powerfactor=-1.60 +DSMC-Reaction3-Activation-Energy_K=113200.0 +!Reaction4 (O2 + molecule -> O + O + molecule) +DSMC-Reaction4-ReactionType=D +DSMC-Reaction4-Reactants=(/4,0,0/) +DSMC-Reaction4-Products=(/2,0,2,0/) +DSMC-Reaction4-Arrhenius-Prefactor=3.321E-09 +DSMC-Reaction4-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction4-Activation-Energy_K=59400.0 +DSMC-Reaction4-NumberOfNonReactives=6 +DSMC-Reaction4-NonReactiveSpecies=(/3,4,5,8,9,10/) +!Reaction5 (O2 + atom --> O + O + atom) +DSMC-Reaction5-ReactionType=D +DSMC-Reaction5-Reactants=(/4,0,0/) +DSMC-Reaction5-Products=(/2,0,2,0/) +DSMC-Reaction5-Arrhenius-Prefactor=1.660E-08 +DSMC-Reaction5-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction5-Activation-Energy_K=59400.0 +DSMC-Reaction5-NumberOfNonReactives=4 +DSMC-Reaction5-NonReactiveSpecies=(/1,2,6,7/) +!Reaction6 (O2 + e --> O + O + e) +DSMC-Reaction6-ReactionType=D +DSMC-Reaction6-Reactants=(/4,11,0/) +DSMC-Reaction6-Products=(/2,11,2,0/) +DSMC-Reaction6-Arrhenius-Prefactor=1.660E-08 +DSMC-Reaction6-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction6-Activation-Energy_K=59400.0 +!Reaction7 (NO + molecule --> N + O + molecule) +DSMC-Reaction7-ReactionType=D +DSMC-Reaction7-Reactants=(/5,0,0/) +DSMC-Reaction7-Products=(/1,0,2,0/) +DSMC-Reaction7-Arrhenius-Prefactor=8.302E-15 +DSMC-Reaction7-Arrhenius-Powerfactor=0. +DSMC-Reaction7-Activation-Energy_K=75500.0 +DSMC-Reaction7-NumberOfNonReactives=6 +DSMC-Reaction7-NonReactiveSpecies=(/3,4,5,8,9,10/) +!Reaction8 (NO + atom --> N + O + atom) +DSMC-Reaction8-ReactionType=D +DSMC-Reaction8-Reactants=(/5,0,0/) +DSMC-Reaction8-Products=(/1,0,2,0/) +DSMC-Reaction8-Arrhenius-Prefactor=1.826E-13 +DSMC-Reaction8-Arrhenius-Powerfactor=0. +DSMC-Reaction8-Activation-Energy_K=75500.0 +DSMC-Reaction8-NumberOfNonReactives=4 +DSMC-Reaction8-NonReactiveSpecies=(/1,2,6,7/) +!Reaction9 (NO + e --> N + O + e ) +DSMC-Reaction9-ReactionType=D +DSMC-Reaction9-Reactants=(/5,11,0/) +DSMC-Reaction9-Products=(/1,11,2,0/) +DSMC-Reaction9-Arrhenius-Prefactor=1.826E-013 +DSMC-Reaction9-Arrhenius-Powerfactor=0. +DSMC-Reaction9-Activation-Energy_K=75500.0 +!Reaction10 (NO + O --> N + O2) +DSMC-Reaction10-ReactionType=E +DSMC-Reaction10-Reactants=(/5,2,0/) +DSMC-Reaction10-Products=(/4,1,0,0/) +DSMC-Reaction10-Arrhenius-Prefactor=1.389E-17 +DSMC-Reaction10-Arrhenius-Powerfactor=0. +DSMC-Reaction10-Activation-Energy_K=19700 +!Reaction11 (O2 + N --> O + NO) +DSMC-Reaction11-ReactionType=E +DSMC-Reaction11-Reactants=(/4,1,0/) +DSMC-Reaction11-Products=(/5,2,0,0/) +DSMC-Reaction11-Arrhenius-Prefactor=4.601E-15 +DSMC-Reaction11-Arrhenius-Powerfactor=-0.546 +DSMC-Reaction11-Activation-Energy_K=0. +!Reaction12 (N2 + O --> NO + N) +DSMC-Reaction12-ReactionType=E +DSMC-Reaction12-Reactants=(/3,2,0/) +DSMC-Reaction12-Products=(/5,1,0,0/) +DSMC-Reaction12-Arrhenius-Prefactor=1.069E-12 +DSMC-Reaction12-Arrhenius-Powerfactor=-1.0 +DSMC-Reaction12-Activation-Energy_K=37500.0 +!Reaction13 (NO + N --> N2 + O) +DSMC-Reaction13-ReactionType=E +DSMC-Reaction13-Reactants=(/5,1,0/) +DSMC-Reaction13-Products=(/3,2,0,0/) +DSMC-Reaction13-Arrhenius-Prefactor=4.059E-12 +DSMC-Reaction13-Arrhenius-Powerfactor=-1.359 +DSMC-Reaction13-Activation-Energy_K=0. +!Reaction14 (N + N --> N2+ + e ) +DSMC-Reaction14-ReactionType=E +DSMC-Reaction14-Reactants=(/1,1,0/) +DSMC-Reaction14-Products=(/8,11,0,0/) +DSMC-Reaction14-Arrhenius-Prefactor=3.387E-17 +DSMC-Reaction14-Arrhenius-Powerfactor=0. +DSMC-Reaction14-Activation-Energy_K=67700 +!Reaction15 (N2+ + e --> N + N ) +DSMC-Reaction15-ReactionType=E +DSMC-Reaction15-Reactants=(/8,11,0/) +DSMC-Reaction15-Products=(/1,1,0,0/) +DSMC-Reaction15-Arrhenius-Prefactor=7.274E-12 +DSMC-Reaction15-Arrhenius-Powerfactor=-0.65 +DSMC-Reaction15-Activation-Energy_K=0. +!Reaction16 (O + O --> O2+ + e ) +DSMC-Reaction16-ReactionType=E +DSMC-Reaction16-Reactants=(/2,2,0/) +DSMC-Reaction16-Products=(/9,11,0,0/) +DSMC-Reaction16-Arrhenius-Prefactor=1.859E-17 +DSMC-Reaction16-Arrhenius-Powerfactor=0. +DSMC-Reaction16-Activation-Energy_K=81200 +!Reaction17 (O2+ + e --> O + O ) +DSMC-Reaction17-ReactionType=E +DSMC-Reaction17-Reactants=(/9,11,0/) +DSMC-Reaction17-Products=(/2,2,0,0/) +DSMC-Reaction17-Arrhenius-Prefactor=1.453E-4 +DSMC-Reaction17-Arrhenius-Powerfactor=-2.412 +DSMC-Reaction17-Activation-Energy_K=0. +!Reaction18 (N + O --> NO+ + e ) +DSMC-Reaction18-ReactionType=E +DSMC-Reaction18-Reactants=(/1,2,0/) +DSMC-Reaction18-Products=(/10,11,0,0/) +DSMC-Reaction18-Arrhenius-Prefactor=8.766E-18 +DSMC-Reaction18-Arrhenius-Powerfactor=0. +DSMC-Reaction18-Activation-Energy_K=32000 +!Reaction19 (NO+ + e --> N + O ) +DSMC-Reaction19-ReactionType=E +DSMC-Reaction19-Reactants=(/10,11,0/) +DSMC-Reaction19-Products=(/1,2,0,0/) +DSMC-Reaction19-Arrhenius-Prefactor=1.321E-9 +DSMC-Reaction19-Arrhenius-Powerfactor=-1.187 +DSMC-Reaction19-Activation-Energy_K=0. +!Reaction20 (O+ + N2 --> N2+ + O ) +DSMC-Reaction20-ReactionType=E +DSMC-Reaction20-Reactants=(/7,3,0/) +DSMC-Reaction20-Products=(/8,2,0,0/) +DSMC-Reaction20-Arrhenius-Prefactor=1.511E-18 +DSMC-Reaction20-Arrhenius-Powerfactor=0.36 +DSMC-Reaction20-Activation-Energy_K=22800 +!Reaction21 (N2+ + O --> O+ + N2 ) +DSMC-Reaction21-ReactionType=E +DSMC-Reaction21-Reactants=(/8,2,0/) +DSMC-Reaction21-Products=(/7,3,0,0/) +DSMC-Reaction21-Arrhenius-Prefactor=1.978E-18 +DSMC-Reaction21-Arrhenius-Powerfactor=0.109 +DSMC-Reaction21-Activation-Energy_K=0. +!Reaction22 (O+ + NO --> N+ + O2 ) +DSMC-Reaction22-ReactionType=E +DSMC-Reaction22-Reactants=(/7,5,0/) +DSMC-Reaction22-Products=(/6,4,0,0/) +DSMC-Reaction22-Arrhenius-Prefactor=2.324E-25 +DSMC-Reaction22-Arrhenius-Powerfactor=1.9 +DSMC-Reaction22-Activation-Energy_K=15300 +!Reaction23 (N+ + O2 --> O+ + NO ) +DSMC-Reaction23-ReactionType=E +DSMC-Reaction23-Reactants=(/6,4,0/) +DSMC-Reaction23-Products=(/7,5,0,0/) +DSMC-Reaction23-Arrhenius-Prefactor=2.443E-26 +DSMC-Reaction23-Arrhenius-Powerfactor=2.102 +DSMC-Reaction23-Activation-Energy_K=0. +!Reaction24 (NO+ + O2 --> O2+ + NO ) +DSMC-Reaction24-ReactionType=E +DSMC-Reaction24-Reactants=(/10,4,0/) +DSMC-Reaction24-Products=(/9,5,0,0/) +DSMC-Reaction24-Arrhenius-Prefactor=3.985E-17 +DSMC-Reaction24-Arrhenius-Powerfactor=0.410 +DSMC-Reaction24-Activation-Energy_K=32600 +!Reaction25 (O2+ + NO --> NO+ + O2 ) +DSMC-Reaction25-ReactionType=E +DSMC-Reaction25-Reactants=(/9,5,0/) +DSMC-Reaction25-Products=(/10,4,0,0/) +DSMC-Reaction25-Arrhenius-Prefactor=6.195E-16 +DSMC-Reaction25-Arrhenius-Powerfactor=-0.050 +DSMC-Reaction25-Activation-Energy_K=0. +!Reaction26 (NO+ + N --> N2+ + O ) +DSMC-Reaction26-ReactionType=E +DSMC-Reaction26-Reactants=(/10,1,0/) +DSMC-Reaction26-Products=(/8,2,0,0/) +DSMC-Reaction26-Arrhenius-Prefactor=1.195E-16 +DSMC-Reaction26-Arrhenius-Powerfactor=0. +DSMC-Reaction26-Activation-Energy_K=35500 +!Reaction27 (N2+ + O --> NO+ + N ) +DSMC-Reaction27-ReactionType=E +DSMC-Reaction27-Reactants=(/8,2,0/) +DSMC-Reaction27-Products=(/10,1,0,0/) +DSMC-Reaction27-Arrhenius-Prefactor=1.744E-18 +DSMC-Reaction27-Arrhenius-Powerfactor=0.302 +DSMC-Reaction27-Activation-Energy_K=0. +!Reaction28 (NO+ + O --> N+ + O2 ) +DSMC-Reaction28-ReactionType=E +DSMC-Reaction28-Reactants=(/10,2,0/) +DSMC-Reaction28-Products=(/6,4,0,0/) +DSMC-Reaction28-Arrhenius-Prefactor=1.660E-18 +DSMC-Reaction28-Arrhenius-Powerfactor=0.5 +DSMC-Reaction28-Activation-Energy_K=77200 +!Reaction29 (N+ + O2 --> NO+ + O ) +DSMC-Reaction29-ReactionType=E +DSMC-Reaction29-Reactants=(/6,4,0/) +DSMC-Reaction29-Products=(/10,2,0,0/) +DSMC-Reaction29-Arrhenius-Prefactor=2.192E-17 +DSMC-Reaction29-Arrhenius-Powerfactor=0.114 +DSMC-Reaction29-Activation-Energy_K=0. +!Reaction30 (O2+ + N --> N+ + O2 ) +DSMC-Reaction30-ReactionType=E +DSMC-Reaction30-Reactants=(/9,1,0/) +DSMC-Reaction30-Products=(/4,6,0,0/) +DSMC-Reaction30-Arrhenius-Prefactor=1.444E-16 +DSMC-Reaction30-Arrhenius-Powerfactor=0.14 +DSMC-Reaction30-Activation-Energy_K=28600 +!Reaction31 (N+ + O2 --> O2+ + N ) +DSMC-Reaction31-ReactionType=E +DSMC-Reaction31-Reactants=(/4,6,0/) +DSMC-Reaction31-Products=(/9,1,0,0/) +DSMC-Reaction31-Arrhenius-Prefactor=4.993E-18 +DSMC-Reaction31-Arrhenius-Powerfactor=-0.004 +DSMC-Reaction31-Activation-Energy_K=0. +!Reaction32 (O2+ + N2 --> N2+ + O2 ) +DSMC-Reaction32-ReactionType=E +DSMC-Reaction32-Reactants=(/9,3,0/) +DSMC-Reaction32-Products=(/8,4,0,0/) +DSMC-Reaction32-Arrhenius-Prefactor=1.644E-17 +DSMC-Reaction32-Arrhenius-Powerfactor=0 +DSMC-Reaction32-Activation-Energy_K=40700 +!Reaction33 (N2+ + O2 --> O2+ + N2 ) +DSMC-Reaction33-ReactionType=E +DSMC-Reaction33-Reactants=(/8,4,0/) +DSMC-Reaction33-Products=(/9,3,0,0/) +DSMC-Reaction33-Arrhenius-Prefactor=4.589E-18 +DSMC-Reaction33-Arrhenius-Powerfactor=-0.037 +DSMC-Reaction33-Activation-Energy_K=0. +!Reaction34 (NO+ + N --> O+ + N2 ) +DSMC-Reaction34-ReactionType=E +DSMC-Reaction34-Reactants=(/10,1,0/) +DSMC-Reaction34-Products=(/7,3,0,0/) +DSMC-Reaction34-Arrhenius-Prefactor=5.645E-17 +DSMC-Reaction34-Arrhenius-Powerfactor=-1.08 +DSMC-Reaction34-Activation-Energy_K=12800 +!Reaction35 (O+ + N2 --> NO+ + N ) +DSMC-Reaction35-ReactionType=E +DSMC-Reaction35-Reactants=(/7,3,0/) +DSMC-Reaction35-Products=(/10,1,0,0/) +DSMC-Reaction35-Arrhenius-Prefactor=3.970E-18 +DSMC-Reaction35-Arrhenius-Powerfactor=-0.71 +DSMC-Reaction35-Activation-Energy_K=0. +!Reaction36 (NO+ + O --> O2+ + N ) +DSMC-Reaction36-ReactionType=E +DSMC-Reaction36-Reactants=(/10,2,0/) +DSMC-Reaction36-Products=(/9,1,0,0/) +DSMC-Reaction36-Arrhenius-Prefactor=1.195E-17 +DSMC-Reaction36-Arrhenius-Powerfactor=0.29 +DSMC-Reaction36-Activation-Energy_K=48600 +!Reaction37 (O2+ + N --> NO+ + O ) +DSMC-Reaction37-ReactionType=E +DSMC-Reaction37-Reactants=(/9,1,0/) +DSMC-Reaction37-Products=(/10,2,0,0/) +DSMC-Reaction37-Arrhenius-Prefactor=8.918E-13 +DSMC-Reaction37-Arrhenius-Powerfactor=-0.969 +DSMC-Reaction37-Activation-Energy_K=0. +!Reaction38 (N+ + N2 --> N2+ + N ) +DSMC-Reaction38-ReactionType=E +DSMC-Reaction38-Reactants=(/6,3,0/) +DSMC-Reaction38-Products=(/8,1,0,0/) +DSMC-Reaction38-Arrhenius-Prefactor=1.660E-18 +DSMC-Reaction38-Arrhenius-Powerfactor=0.5 +DSMC-Reaction38-Activation-Energy_K=12100 +!Reaction39 (N2+ + N --> N+ + N2 ) +DSMC-Reaction39-ReactionType=E +DSMC-Reaction39-Reactants=(/8,1,0/) +DSMC-Reaction39-Products=(/6,3,0,0/) +DSMC-Reaction39-Arrhenius-Prefactor=2.343E-14 +DSMC-Reaction39-Arrhenius-Powerfactor=-0.61 +DSMC-Reaction39-Activation-Energy_K=0. +!Reaction40 (O2+ + O --> O2 + O+ ) +DSMC-Reaction40-ReactionType=E +DSMC-Reaction40-Reactants=(/9,2,0/) +DSMC-Reaction40-Products=(/4,7,0,0/) +DSMC-Reaction40-Arrhenius-Prefactor=6.641E-18 +DSMC-Reaction40-Arrhenius-Powerfactor=-0.09 +DSMC-Reaction40-Activation-Energy_K=18600 +!Reaction41 (O2 + O+ --> O2+ + O ) +DSMC-Reaction41-ReactionType=E +DSMC-Reaction41-Reactants=(/4,7,0/) +DSMC-Reaction41-Products=(/9,2,0,0/) +DSMC-Reaction41-Arrhenius-Prefactor=4.993E-18 +DSMC-Reaction41-Arrhenius-Powerfactor=-0.004 +DSMC-Reaction41-Activation-Energy_K=0. +!Reaction42 (N + e --> N+ + e + e ) +DSMC-Reaction42-ReactionType=iQK +DSMC-Reaction42-Reactants=(/1,11,0/) +DSMC-Reaction42-Products=(/6,11,11,0/) +DSMC-Reaction42-Arrhenius-Prefactor=8.434E-14 +DSMC-Reaction42-Arrhenius-Powerfactor=0. +DSMC-Reaction42-Activation-Energy_K=121600 +!Reaction43 (O + e --> O+ + e + e ) +DSMC-Reaction43-ReactionType=iQK +DSMC-Reaction43-Reactants=(/2,11,0/) +DSMC-Reaction43-Products=(/7,11,11,0/) +DSMC-Reaction43-Arrhenius-Prefactor=1.054E-14 +DSMC-Reaction43-Arrhenius-Powerfactor=0. +DSMC-Reaction43-Activation-Energy_K=106200 + diff --git a/tools/species_database/Air_11Spec_51Reac_Park1993.ini b/tools/species_database/Air_11Spec_51Reac_Park1993.ini new file mode 100755 index 000000000..ba5b9137a --- /dev/null +++ b/tools/species_database/Air_11Spec_51Reac_Park1993.ini @@ -0,0 +1,350 @@ +! ======================================================================= +! Data for air taken from +! Species: G. A. Bird, Nonequilibrium radiation during re-entry at 10 km/s, AIAA-Paper 87-1543 +! Reactions: MONACO-Manual (Dietrich, Boyd) = Parks model (1985) +! ======================================================================= +! =============================================================================== ! +! Species1, N +! =============================================================================== ! +Part-Species1-SpeciesName=N +Part-Species1-InteractionID = 1 +Part-Species1-VHSReferenceTemp = 288 ! K +Part-Species1-VHSReferenceDiam = 3.0E-10 ! m +Part-Species1-omegaVHS=0.2 +Part-Species1-HeatOfFormation_K=56850.30 +! =============================================================================== ! +! Species2, O +! =============================================================================== ! +Part-Species2-SpeciesName=O +Part-Species2-InteractionID = 1 +Part-Species2-VHSReferenceTemp = 288 +Part-Species2-VHSReferenceDiam = 3.0E-10 +Part-Species2-omegaVHS=0.2 +Part-Species2-HeatOfFormation_K=29969.45 +! =============================================================================== ! +! Species3, N2 +! =============================================================================== ! +Part-Species3-SpeciesName=N2 +Part-Species3-InteractionID = 2 +Part-Species3-VHSReferenceTemp = 288 +Part-Species3-VHSReferenceDiam = 4.07E-10 +Part-Species3-omegaVHS=0.2 +Part-Species3-CharaTempVib=3393.3 +Part-Species3-Ediss_eV=9.759 +Part-Species3-CharaTempRot = 2.87 +Part-Species3-SymmetryFactor = 2 +Part-Species3-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species4, O2 +! =============================================================================== ! +Part-Species4-SpeciesName=O2 +Part-Species4-InteractionID = 2 +Part-Species4-VHSReferenceTemp = 288 +Part-Species4-VHSReferenceDiam = 3.96E-10 +Part-Species4-omegaVHS=0.2 +Part-Species4-CharaTempVib=2272.8 +Part-Species4-Ediss_eV=5.115 +Part-Species4-CharaTempRot = 2.1 +Part-Species4-SymmetryFactor = 2 +Part-Species4-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species5, NO +! =============================================================================== ! +Part-Species5-SpeciesName=NO +Part-Species5-InteractionID = 2 +Part-Species5-VHSReferenceTemp = 288 +Part-Species5-VHSReferenceDiam = 4.00E-10 +Part-Species5-omegaVHS=0.2 +Part-Species5-CharaTempVib=2738.8 +Part-Species5-Ediss_eV=6.496 +Part-Species5-CharaTempRot = 2.4 +Part-Species5-SymmetryFactor = 1 +Part-Species5-HeatOfFormation_K=10859.38 +! =============================================================================== ! +! Species6, N+ +! =============================================================================== ! +Part-Species6-SpeciesName=NIon1 +Part-Species6-InteractionID = 10 +Part-Species6-VHSReferenceTemp = 288 +Part-Species6-VHSReferenceDiam = 3.0E-10 +Part-Species6-omegaVHS=0.2 +Part-Species6-HeatOfFormation_K=56850.30 +! =============================================================================== ! +! Species7, O+ +! =============================================================================== ! +Part-Species7-SpeciesName=OIon1 +Part-Species7-InteractionID = 10 +Part-Species7-VHSReferenceTemp = 288 +Part-Species7-VHSReferenceDiam = 3.0E-10 +Part-Species7-omegaVHS=0.2 +Part-Species7-HeatOfFormation_K=29969.45 +! =============================================================================== ! +! Species8, N2+ +! =============================================================================== ! +Part-Species8-SpeciesName=N2Ion1 +Part-Species8-InteractionID = 20 +Part-Species8-VHSReferenceTemp = 288 +Part-Species8-VHSReferenceDiam = 4.07E-10 +Part-Species8-omegaVHS=0.2 +Part-Species8-CharaTempVib=3174.7 +Part-Species8-Ediss_eV=9.759 +Part-Species8-CharaTempRot = 2.8 +Part-Species8-SymmetryFactor = 2 +Part-Species8-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species9, O2+ +! =============================================================================== ! +Part-Species9-SpeciesName=O2Ion1 +Part-Species9-InteractionID = 20 +Part-Species9-VHSReferenceTemp = 288 +Part-Species9-VHSReferenceDiam = 3.96E-10 +Part-Species9-omegaVHS=0.2 +Part-Species9-CharaTempVib=2741.7 +Part-Species9-Ediss_eV=5.115 +Part-Species9-CharaTempRot = 2.4 +Part-Species9-SymmetryFactor = 2 +Part-Species9-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species10, NO+ +! =============================================================================== ! +Part-Species10-SpeciesName=NOIon1 +Part-Species10-InteractionID = 20 +Part-Species10-VHSReferenceTemp = 288 +Part-Species10-VHSReferenceDiam = 4.00E-10 +Part-Species10-omegaVHS=0.2 +Part-Species10-CharaTempVib=3419.2 +Part-Species10-Ediss_eV=6.496 +Part-Species10-CharaTempRot = 2.9 +Part-Species10-SymmetryFactor = 1 +Part-Species10-HeatOfFormation_K=10859.38 +! =============================================================================== ! +! Species11, e +! =============================================================================== ! +Part-Species11-SpeciesName = electron +Part-Species11-InteractionID = 4 +Part-Species11-VHSReferenceTemp = 288 +Part-Species11-VHSReferenceDiam = 2.817920E-15 +Part-Species11-omegaVHS=0.24 +Part-Species11-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=27 + +DSMC-Reaction1-ReactionName=N2+M_N+N+M +DSMC-Reaction2-ReactionName=N2+A_N+N+A +DSMC-Reaction4-ReactionName=O2+M_O+O+M +DSMC-Reaction5-ReactionName=O2+A_O+O+A +DSMC-Reaction7-ReactionName=NO+M_N+O+M +DSMC-Reaction8-ReactionName=NO+A_N+O+A + +!Reaction1 (N2 + M -> N + N + M) +DSMC-Reaction1-ReactionType=D +DSMC-Reaction1-Reactants=(/3,0,0/) +DSMC-Reaction1-Products=(/1,0,1,0/) +DSMC-Reaction1-Arrhenius-Prefactor=1.16237749371486E-08 +DSMC-Reaction1-Arrhenius-Powerfactor=-1.60 +DSMC-Reaction1-Activation-Energy_K=113200.0 +DSMC-Reaction1-NumberOfNonReactives=6 +DSMC-Reaction1-NonReactiveSpecies=(/3,4,5,8,9,10/) + +!Reaction4 (N2 + A -> N + N + A) +DSMC-Reaction2-ReactionType=D +DSMC-Reaction2-Reactants=(/3,0,0/) +DSMC-Reaction2-Products=(/1,0,1,0/) +DSMC-Reaction2-Arrhenius-Prefactor=4.98161783020654E-08 +DSMC-Reaction2-Arrhenius-Powerfactor=-1.60 +DSMC-Reaction2-Activation-Energy_K=113200.0 +DSMC-Reaction2-NumberOfNonReactives=4 +DSMC-Reaction2-NonReactiveSpecies=(/1,2,6,7/) + +!Reaction23 (N2 + e -> N + N + e) +DSMC-Reaction3-ReactionType=D +DSMC-Reaction3-Reactants=(/3,11,0/) +DSMC-Reaction3-Products=(/1,11,1,0/) +DSMC-Reaction3-Arrhenius-Prefactor=1.99264713208262E-005 +DSMC-Reaction3-Arrhenius-Powerfactor=-1.60 +DSMC-Reaction3-Activation-Energy_K=113200.0 + +!Reaction4 (O2 + M -> O + O + M) +DSMC-Reaction4-ReactionType=D +DSMC-Reaction4-Reactants=(/4,0,0/) +DSMC-Reaction4-Products=(/2,0,2,0/) +DSMC-Reaction4-Arrhenius-Prefactor=3.32107855347103E-09 +DSMC-Reaction4-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction4-Activation-Energy_K=59500.0 +DSMC-Reaction4-NumberOfNonReactives=6 +DSMC-Reaction4-NonReactiveSpecies=(/3,4,5,8,9,10/) + +!Reaction5 (O2 + A --> O + O + A) +DSMC-Reaction5-ReactionType=D +DSMC-Reaction5-Reactants=(/4,0,0/) +DSMC-Reaction5-Products=(/2,0,2,0/) +DSMC-Reaction5-Arrhenius-Prefactor=1.66053927673551E-08 +DSMC-Reaction5-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction5-Activation-Energy_K=59500.0 +DSMC-Reaction5-NumberOfNonReactives=4 +DSMC-Reaction5-NonReactiveSpecies=(/1,2,6,7/) + +!Reaction6 (O2 + e --> O + O + e) +DSMC-Reaction6-ReactionType=D +DSMC-Reaction6-Reactants=(/4,11,0/) +DSMC-Reaction6-Products=(/2,11,2,0/) +DSMC-Reaction6-Arrhenius-Prefactor=1.66053927673551E-08 +DSMC-Reaction6-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction6-Activation-Energy_K=59500.0 + +!Reaction7 (NO + M --> N + O + M) +DSMC-Reaction7-ReactionType=D +DSMC-Reaction7-Reactants=(/5,0,0/) +DSMC-Reaction7-Products=(/1,0,2,0/) +DSMC-Reaction7-Arrhenius-Prefactor=8.30269638367756E-15 +DSMC-Reaction7-Arrhenius-Powerfactor=0. +DSMC-Reaction7-Activation-Energy_K=75500.0 +DSMC-Reaction7-NumberOfNonReactives=6 +DSMC-Reaction7-NonReactiveSpecies=(/3,4,5,8,9,10/) + +!Reaction8 (NO + A --> N + O + A) +DSMC-Reaction8-ReactionType=D +DSMC-Reaction8-Reactants=(/5,1,0/) +DSMC-Reaction8-Products=(/1,1,2,0/) +DSMC-Reaction8-Arrhenius-Prefactor=1.82659320440906E-13 +DSMC-Reaction8-Arrhenius-Powerfactor=0. +DSMC-Reaction8-Activation-Energy_K=75500.0 +DSMC-Reaction8-NumberOfNonReactives=4 +DSMC-Reaction8-NonReactiveSpecies=(/1,2,6,7/) + +!Reaction9 (NO + e --> N + O + e ) +DSMC-Reaction9-ReactionType=D +DSMC-Reaction9-Reactants=(/5,11,0/) +DSMC-Reaction9-Products=(/1,11,2,0/) +DSMC-Reaction9-Arrhenius-Prefactor=1.82659320440906E-013 +DSMC-Reaction9-Arrhenius-Powerfactor=0. +DSMC-Reaction9-Activation-Energy_K=75500.0 + +!Reaction10 (N2 + O --> NO + N) +DSMC-Reaction10-ReactionType=E +DSMC-Reaction10-Reactants=(/3,2,0/) +DSMC-Reaction10-Products=(/5,1,0,0/) +DSMC-Reaction10-Arrhenius-Prefactor=1.06274513711073E-12 +DSMC-Reaction10-Arrhenius-Powerfactor=-1 +DSMC-Reaction10-Activation-Energy_K=38400.0 + +!Reaction11 (NO + O --> N + O2) +DSMC-Reaction11-ReactionType=E +DSMC-Reaction11-Reactants=(/5,2,0/) +DSMC-Reaction11-Products=(/4,1,0,0/) +DSMC-Reaction11-Arrhenius-Prefactor=1.39485299245783E-17 +DSMC-Reaction11-Arrhenius-Powerfactor=0 +DSMC-Reaction11-Activation-Energy_K=19450 + +!Reaction12 (N + O --> NO+ + e ) +DSMC-Reaction12-ReactionType=E +DSMC-Reaction12-Reactants=(/1,2,0/) +DSMC-Reaction12-Products=(/10,11,0,0/) +DSMC-Reaction12-Arrhenius-Prefactor=1.46127456352725E-21 +DSMC-Reaction12-Arrhenius-Powerfactor=1. +DSMC-Reaction12-Activation-Energy_K=31900 +!Reaction13 (O + O --> O2+ + e ) +DSMC-Reaction13-ReactionType=E +DSMC-Reaction13-Reactants=(/2,2,0/) +DSMC-Reaction13-Products=(/9,11,0,0/) +DSMC-Reaction13-Arrhenius-Prefactor=1.17898288648221E-27 +DSMC-Reaction13-Arrhenius-Powerfactor=2.7 +DSMC-Reaction13-Activation-Energy_K=80600 +!Reaction14 (N + N --> N2+ + e ) +DSMC-Reaction14-ReactionType=E +DSMC-Reaction14-Reactants=(/1,1,0/) +DSMC-Reaction14-Products=(/8,11,0,0/) +DSMC-Reaction14-Arrhenius-Prefactor=7.30637281763626E-23 +DSMC-Reaction14-Arrhenius-Powerfactor=1.5 +DSMC-Reaction14-Activation-Energy_K=67500 + +!Reaction15 (NO+ + O --> N+ + O2 ) +DSMC-Reaction15-ReactionType=E +DSMC-Reaction15-Reactants=(/10,2,0/) +DSMC-Reaction15-Products=(/6,4,0,0/) +DSMC-Reaction15-Arrhenius-Prefactor=1.66053927673551E-18 +DSMC-Reaction15-Arrhenius-Powerfactor=0.5 +DSMC-Reaction15-Activation-Energy_K=77200 +!Reaction16 (N+ + N2 --> N2+ + N ) +DSMC-Reaction16-ReactionType=E +DSMC-Reaction16-Reactants=(/6,3,0/) +DSMC-Reaction16-Products=(/8,1,0,0/) +DSMC-Reaction16-Arrhenius-Prefactor=1.66053927673551E-18 +DSMC-Reaction16-Arrhenius-Powerfactor=0.5 +DSMC-Reaction16-Activation-Energy_K=12200 +!Reaction17 (O2+ + N --> N+ + O2 ) +DSMC-Reaction17-ReactionType=E +DSMC-Reaction17-Reactants=(/9,1,0/) +DSMC-Reaction17-Products=(/4,6,0,0/) +DSMC-Reaction17-Arrhenius-Prefactor=1.4446691707599E-16 +DSMC-Reaction17-Arrhenius-Powerfactor=0.14 +DSMC-Reaction17-Activation-Energy_K=28600 +!Reaction18 (O+ + NO --> N+ + O2 ) +DSMC-Reaction18-ReactionType=E +DSMC-Reaction18-Reactants=(/7,5,0/) +DSMC-Reaction18-Products=(/6,4,0,0/) +DSMC-Reaction18-Arrhenius-Prefactor=2.32475498742972E-25 +DSMC-Reaction18-Arrhenius-Powerfactor=1.9 +DSMC-Reaction18-Activation-Energy_K=26600 +!Reaction19 (O2+ + N2 --> N2+ + O2 ) +DSMC-Reaction19-ReactionType=E +DSMC-Reaction19-Reactants=(/9,3,0/) +DSMC-Reaction19-Products=(/8,4,0,0/) +DSMC-Reaction19-Arrhenius-Prefactor=1.64393388396816E-17 +DSMC-Reaction19-Arrhenius-Powerfactor=0 +DSMC-Reaction19-Activation-Energy_K=40700 +!Reaction20 (O2+ + O --> O2 + O+ ) +DSMC-Reaction20-ReactionType=E +DSMC-Reaction20-Reactants=(/9,2,0/) +DSMC-Reaction20-Products=(/4,7,0,0/) +DSMC-Reaction20-Arrhenius-Prefactor=6.64215710694205E-18 +DSMC-Reaction20-Arrhenius-Powerfactor=-0.09 +DSMC-Reaction20-Activation-Energy_K=18000 +!Reaction21 (NO+ + N --> O+ + N2 ) +DSMC-Reaction21-ReactionType=E +DSMC-Reaction21-Reactants=(/10,1,0/) +DSMC-Reaction21-Products=(/7,3,0,0/) +DSMC-Reaction21-Arrhenius-Prefactor=5.64583354090074E-17 +DSMC-Reaction21-Arrhenius-Powerfactor=-1.08 +DSMC-Reaction21-Activation-Energy_K=12800 +!Reaction22 (NO+ + O2 --> O2+ + NO ) +DSMC-Reaction22-ReactionType=E +DSMC-Reaction22-Reactants=(/10,4,0/) +DSMC-Reaction22-Products=(/9,5,0,0/) +DSMC-Reaction22-Arrhenius-Prefactor=3.98529426416523E-17 +DSMC-Reaction22-Arrhenius-Powerfactor=0.41 +DSMC-Reaction22-Activation-Energy_K=32600 +!Reaction23 (NO+ + O --> O2+ + N ) +DSMC-Reaction23-ReactionType=E +DSMC-Reaction23-Reactants=(/10,2,0/) +DSMC-Reaction23-Products=(/9,1,0,0/) +DSMC-Reaction23-Arrhenius-Prefactor=1.19558827924957E-17 +DSMC-Reaction23-Arrhenius-Powerfactor=0.29 +DSMC-Reaction23-Activation-Energy_K=48600 +!Reaction24 (O+ + N2 --> N2+ + O ) +DSMC-Reaction24-ReactionType=E +DSMC-Reaction24-Reactants=(/7,3,0/) +DSMC-Reaction24-Products=(/8,2,0,0/) +DSMC-Reaction24-Arrhenius-Prefactor=1.51109074182932E-18 +DSMC-Reaction24-Arrhenius-Powerfactor=0.36 +DSMC-Reaction24-Activation-Energy_K=22800 +!Reaction25 (NO+ + N --> N2+ + O ) +DSMC-Reaction25-ReactionType=E +DSMC-Reaction25-Reactants=(/10,1,0/) +DSMC-Reaction25-Products=(/8,2,0,0/) +DSMC-Reaction25-Arrhenius-Prefactor=1.19558827924957E-16 +DSMC-Reaction25-Arrhenius-Powerfactor=0. +DSMC-Reaction25-Activation-Energy_K=35500 +!Reaction26 (O + e --> O+ + e + e ) +DSMC-Reaction26-ReactionType=iQK +DSMC-Reaction26-Reactants=(/2,11,0/) +DSMC-Reaction26-Products=(/7,11,11,0/) +DSMC-Reaction26-QKProcedure=true +!Reaction27 (N + e --> O+ + e + e ) +DSMC-Reaction27-ReactionType=iQK +DSMC-Reaction27-Reactants=(/1,11,0/) +DSMC-Reaction27-Products=(/6,11,11,0/) +DSMC-Reaction27-QKProcedure=true + diff --git a/tools/species_database/DSMC_5SpecAir.ini b/tools/species_database/Air_5Spec_8Reac_Laux1995.ini similarity index 89% rename from tools/species_database/DSMC_5SpecAir.ini rename to tools/species_database/Air_5Spec_8Reac_Laux1995.ini index 77e8dd373..88c439536 100644 --- a/tools/species_database/DSMC_5SpecAir.ini +++ b/tools/species_database/Air_5Spec_8Reac_Laux1995.ini @@ -1,7 +1,7 @@ ! ======================================================================= ! Data for air taken from ! Species: G. A. Bird, Nonequilibrium radiation during re-entry at 10 km/s, AIAA-Paper 87-1543 -! Reactions: MONACO-Manual (Dietrich, Boyd) = Parks model (1985) +! Reactions: M. Laux, Direkte Simulation verdünnter, reagierender Strömungen, PhD Thesis, 1995 ! ======================================================================= ! =============================================================================== ! ! Species1, N @@ -70,11 +70,8 @@ Part-Species5-HeatOfFormation_K=10859.38 ! =============================================================================== ! DSMC-NumOfReactions=8 -! ============ ! -! Dissociation (N2 + M -> N + N + M) -! ============ ! !Reaction1 (N2 + molecule -> N + N + molecule) -DSMC-Reaction1-ReactionName = DISS_N2_MOL +DSMC-Reaction1-ReactionName=N2+M_N+N+M DSMC-Reaction1-ReactionModel=TCE DSMC-Reaction1-Reactants=(/3,0,0/) DSMC-Reaction1-Products=(/1,0,1,0/) @@ -85,7 +82,7 @@ DSMC-Reaction1-NumberOfNonReactives=3 DSMC-Reaction1-NonReactiveSpecies=(/3,4,5/) !Reaction2 (N2 + atom -> N + N + atom) -DSMC-Reaction2-ReactionName = DISS_N2_AT +DSMC-Reaction2-ReactionName=N2+A_N+N+A DSMC-Reaction2-ReactionModel=TCE DSMC-Reaction2-Reactants=(/3,0,0/) DSMC-Reaction2-Products=(/1,0,1,0/) @@ -94,11 +91,9 @@ DSMC-Reaction2-Arrhenius-Powerfactor=-1.60 DSMC-Reaction2-Activation-Energy_K=113200.0 DSMC-Reaction2-NumberOfNonReactives=2 DSMC-Reaction2-NonReactiveSpecies=(/1,2/) -! ============ ! -! Dissociation (O2 + M -> O + O + M) -! ============ ! + !Reaction3 (O2 + molecule -> O + O + molecule) -DSMC-Reaction3-ReactionName = DISS_O2_MOL +DSMC-Reaction3-ReactionName=O2+M_O+O+M DSMC-Reaction3-ReactionModel=TCE DSMC-Reaction3-Reactants=(/4,0,0/) DSMC-Reaction3-Products=(/2,0,2,0/) @@ -109,7 +104,7 @@ DSMC-Reaction3-NumberOfNonReactives=3 DSMC-Reaction3-NonReactiveSpecies=(/3,4,5/) !Reaction4 (O2 + atom --> O + O + atom) -DSMC-Reaction4-ReactionName = DISS_O2_AT +DSMC-Reaction4-ReactionName=O2+A_O+O+A DSMC-Reaction4-ReactionModel=TCE DSMC-Reaction4-Reactants=(/4,0,0/) DSMC-Reaction4-Products=(/2,0,2,0/) @@ -119,11 +114,8 @@ DSMC-Reaction4-Activation-Energy_K=59500.0 DSMC-Reaction4-NumberOfNonReactives=2 DSMC-Reaction4-NonReactiveSpecies=(/1,2/) -! ============ ! -! Dissociation (NO + M -> N + O + M) -! ============ ! !Reaction5 (NO + molecule --> N + O + molecule) -DSMC-Reaction5-ReactionName = DISS_NO_MOL +DSMC-Reaction5-ReactionName=NO+M_N+O+M DSMC-Reaction5-ReactionModel=TCE DSMC-Reaction5-Reactants=(/5,0,0/) DSMC-Reaction5-Products=(/1,0,2,0/) @@ -134,7 +126,7 @@ DSMC-Reaction5-NumberOfNonReactives=3 DSMC-Reaction5-NonReactiveSpecies=(/3,4,5/) !Reaction6 (NO + atom --> N + O + atom) -DSMC-Reaction6-ReactionName = DISS_NO_AT +DSMC-Reaction6-ReactionName=NO+A_N+O+A DSMC-Reaction6-ReactionModel=TCE DSMC-Reaction6-Reactants=(/5,0,0/) DSMC-Reaction6-Products=(/1,0,2,0/) @@ -143,12 +135,8 @@ DSMC-Reaction6-Arrhenius-Powerfactor=-0.5 DSMC-Reaction6-Activation-Energy_K=75500.0 DSMC-Reaction6-NumberOfNonReactives=2 DSMC-Reaction6-NonReactiveSpecies=(/1,2/) -! ============ ! -! Exchange -! ============ ! !Reaction7 (N2 + O --> NO + N) -DSMC-Reaction7-ReactionName = EXC_N2_O DSMC-Reaction7-ReactionModel=TCE DSMC-Reaction7-Reactants=(/3,2,0/) DSMC-Reaction7-Products=(/5,1,0,0/) @@ -157,7 +145,6 @@ DSMC-Reaction7-Arrhenius-Powerfactor=0.1 DSMC-Reaction7-Activation-Energy_K=37700.0 !Reaction8 (NO + O --> N + O2) -DSMC-Reaction8-ReactionName = DISS_NO_O DSMC-Reaction8-ReactionModel=TCE DSMC-Reaction8-Reactants=(/5,2,0/) DSMC-Reaction8-Products=(/4,1,0,0/) diff --git a/tools/species_database/Air_5Spec_8Reac_Park1993.ini b/tools/species_database/Air_5Spec_8Reac_Park1993.ini new file mode 100755 index 000000000..780a40832 --- /dev/null +++ b/tools/species_database/Air_5Spec_8Reac_Park1993.ini @@ -0,0 +1,148 @@ +! ======================================================================= +! Data for air taken from +! Species: G. A. Bird, Nonequilibrium radiation during re-entry at 10 km/s, AIAA-Paper 87-1543 +! Reactions: C. Park. Review of chemical-kinetic problems of future NASA missions. I - Earth entries. Journal of Thermophysics and Heat Transfer, 7(3):385–398, 1993. doi:10.2514/3.431. +! ======================================================================= +! =============================================================================== ! +! Species1, N +! =============================================================================== ! +Part-Species1-SpeciesName=N +Part-Species1-InteractionID = 1 +Part-Species1-Tref =273 ! K +Part-Species1-dref = 3.0E-10 ! m +Part-Species1-omega=0.24 +Part-Species1-HeatOfFormation_K=56850.30 +! =============================================================================== ! +! Species2, O +! =============================================================================== ! +Part-Species2-SpeciesName=O +Part-Species2-InteractionID = 1 +Part-Species2-Tref =273 +Part-Species2-dref = 3.0E-10 +Part-Species2-omega=0.24 +Part-Species2-HeatOfFormation_K=29969.45 +! =============================================================================== ! +! Species3, N2 +! =============================================================================== ! +Part-Species3-SpeciesName=N2 +Part-Species3-InteractionID = 2 +Part-Species3-Tref =273 +Part-Species3-dref = 4.07E-10 +Part-Species3-omega=0.24 +Part-Species3-CharaTempVib=3393.3 +Part-Species3-Ediss_eV=9.759 +Part-Species3-CharaTempRot = 2.87 +Part-Species3-SymmetryFactor = 2 +Part-Species3-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species4, O2 +! =============================================================================== ! +Part-Species4-SpeciesName=O2 +Part-Species4-InteractionID = 2 +Part-Species4-Tref =273 +Part-Species4-dref = 3.96E-10 +Part-Species4-omega=0.24 +Part-Species4-CharaTempVib=2272.8 +Part-Species4-Ediss_eV=5.115 +Part-Species4-CharaTempRot = 2.1 +Part-Species4-SymmetryFactor = 2 +Part-Species4-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species5, NO +! =============================================================================== ! +Part-Species5-SpeciesName=NO +Part-Species5-InteractionID = 2 +Part-Species5-Tref =273 +Part-Species5-dref = 4.00E-10 +Part-Species5-omega=0.24 +Part-Species5-CharaTempVib=2738.8 +Part-Species5-Ediss_eV=6.496 +Part-Species5-CharaTempRot = 2.4 +Part-Species5-SymmetryFactor = 1 +Part-Species5-HeatOfFormation_K=10859.38 +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=8 + +!Reaction1 (N2 + molecule -> N + N + molecule) +DSMC-Reaction1-ReactionName=N2+M_N+N+M +DSMC-Reaction1-ReactionType=D +DSMC-Reaction1-Reactants=(/3,0,0/) +DSMC-Reaction1-Products=(/1,0,1/) +DSMC-Reaction1-Arrhenius-Prefactor=1.16237749371486E-08 +DSMC-Reaction1-Arrhenius-Powerfactor=-1.60 +DSMC-Reaction1-Activation-Energy_K=113200.0 +DSMC-Reaction1-NumberOfNonReactives=3 +DSMC-Reaction1-NonReactiveSpecies=(/3,4,5/) + +!Reaction2 (N2 + atom -> N + N + atom) +DSMC-Reaction2-ReactionName=N2+A_N+N+A +DSMC-Reaction2-ReactionType=D +DSMC-Reaction2-Reactants=(/3,0,0/) +DSMC-Reaction2-Products=(/1,0,1/) +DSMC-Reaction2-Arrhenius-Prefactor=4.98161783020654E-08 +DSMC-Reaction2-Arrhenius-Powerfactor=-1.60 +DSMC-Reaction2-Activation-Energy_K=113200.0 +DSMC-Reaction2-NumberOfNonReactives=2 +DSMC-Reaction2-NonReactiveSpecies=(/1,2/) + +!Reaction3 (O2 + molecule -> O + O + molecule) +DSMC-Reaction3-ReactionName=O2+M_O+O+M +DSMC-Reaction3-ReactionType=D +DSMC-Reaction3-Reactants=(/4,0,0/) +DSMC-Reaction3-Products=(/2,0,2/) +DSMC-Reaction3-Arrhenius-Prefactor=3.32107855347103E-09 +DSMC-Reaction3-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction3-Activation-Energy_K=59500.0 +DSMC-Reaction3-NumberOfNonReactives=3 +DSMC-Reaction3-NonReactiveSpecies=(/3,4,5/) + +!Reaction4 (O2 + atom --> O + O + atom) +DSMC-Reaction4-ReactionName=O2+A_O+O+A +DSMC-Reaction4-ReactionType=D +DSMC-Reaction4-Reactants=(/4,0,0/) +DSMC-Reaction4-Products=(/2,0,2/) +DSMC-Reaction4-Arrhenius-Prefactor=1.66053927673551E-08 +DSMC-Reaction4-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction4-Activation-Energy_K=59500.0 +DSMC-Reaction4-NumberOfNonReactives=2 +DSMC-Reaction4-NonReactiveSpecies=(/1,2/) + +!Reaction5 (NO + molecule --> N + O + molecule) +DSMC-Reaction5-ReactionName=NO+M_N+O+M +DSMC-Reaction5-ReactionType=D +DSMC-Reaction5-Reactants=(/5,0,0/) +DSMC-Reaction5-Products=(/1,0,2/) +DSMC-Reaction5-Arrhenius-Prefactor=8.30269638367756E-15 +DSMC-Reaction5-Arrhenius-Powerfactor=0. +DSMC-Reaction5-Activation-Energy_K=75500.0 +DSMC-Reaction5-NumberOfNonReactives=3 +DSMC-Reaction5-NonReactiveSpecies=(/3,4,5/) + +!Reaction6 (NO + atom --> N + O + atom) +DSMC-Reaction6-ReactionName=NO+A_N+O+A +DSMC-Reaction6-ReactionType=D +DSMC-Reaction6-Reactants=(/5,0,0/) +DSMC-Reaction6-Products=(/1,0,2/) +DSMC-Reaction6-Arrhenius-Prefactor=1.82659320440906E-13 +DSMC-Reaction6-Arrhenius-Powerfactor=0. +DSMC-Reaction6-Activation-Energy_K=75500.0 +DSMC-Reaction6-NumberOfNonReactives=2 +DSMC-Reaction6-NonReactiveSpecies=(/1,2/) + +!Reaction7 (N2 + O --> NO + N) +DSMC-Reaction7-ReactionType=E +DSMC-Reaction7-Reactants=(/3,2,0/) +DSMC-Reaction7-Products=(/5,1,0/) +DSMC-Reaction7-Arrhenius-Prefactor=1.06274513711073E-12 +DSMC-Reaction7-Arrhenius-Powerfactor=-1 +DSMC-Reaction7-Activation-Energy_K=38400.0 + +!Reaction8 (NO + O --> N + O2) +DSMC-Reaction8-ReactionType=E +DSMC-Reaction8-Reactants=(/5,2,0/) +DSMC-Reaction8-Products=(/4,1,0/) +DSMC-Reaction8-Arrhenius-Prefactor=1.39485299245783E-17 +DSMC-Reaction8-Arrhenius-Powerfactor=0 +DSMC-Reaction8-Activation-Energy_K=19450 diff --git a/tools/species_database/CH4-Ar_8Spec_7Reac.ini b/tools/species_database/CH4-Ar_8Spec_7Reac.ini new file mode 100755 index 000000000..d2d0e4a3c --- /dev/null +++ b/tools/species_database/CH4-Ar_8Spec_7Reac.ini @@ -0,0 +1,251 @@ +! =============================================================================== ! +! Species1, CH4 +! =============================================================================== ! +Part-Species1-SpeciesName=CH4 +Part-Species1-PolyatomicMol=true +Part-Species1-InteractionID=2 +Part-Species1-VHSReferenceTemp=273 +Part-Species1-VHSReferenceDiam=4.63E-10 +Part-Species1-omegaVHS=0.24 +Part-Species1-NumOfAtoms=5 +Part-Species1-LinearMolec=.false. +Part-Species1-CharaTempVib1=4194.9 +Part-Species1-CharaTempVib2=2206.0 +Part-Species1-CharaTempVib3=2206.0 +Part-Species1-CharaTempVib4=4341.6 +Part-Species1-CharaTempVib5=4341.6 +Part-Species1-CharaTempVib6=4341.6 +Part-Species1-CharaTempVib7=1878.1 +Part-Species1-CharaTempVib8=1878.1 +Part-Species1-CharaTempVib9=1878.1 +Part-Species1-Ediss_eV=4.53 +Part-Species1-HeatOfFormation_K=-9002.71 +Part-Species1-CharaTempRot1 = 7.6 +Part-Species1-CharaTempRot2 = 7.6 +Part-Species1-CharaTempRot3 = 7.6 +Part-Species1-SymmetryFactor = 12 +! =============================================================================== ! +! Species2, CH3 +! =============================================================================== ! +Part-Species2-SpeciesName=CH3 +Part-Species2-PolyatomicMol=true +Part-Species2-InteractionID=2 +Part-Species2-VHSReferenceTemp=273 +Part-Species2-VHSReferenceDiam=4.55E-10 +Part-Species2-omegaVHS=0.24 +Part-Species2-NumOfAtoms=4 +Part-Species2-LinearMolec=.false. +Part-Species2-CharaTempVib1=4320.6 +Part-Species2-CharaTempVib2=872.1 +Part-Species2-CharaTempVib3=4545.5 +Part-Species2-CharaTempVib4=4545.5 +Part-Species2-CharaTempVib5=2016.2 +Part-Species2-CharaTempVib6=2016.2 +Part-Species2-Ediss_eV=4.77 +Part-Species2-HeatOfFormation_K=17518.44 +Part-Species2-CharaTempRot1 = 13.5 +Part-Species2-CharaTempRot2 = 13.5 +Part-Species2-CharaTempRot3 = 6.8 +Part-Species2-SymmetryFactor = 6 +! =============================================================================== ! +! Species3, CH2 +! =============================================================================== ! +Part-Species3-SpeciesName=CH2 +Part-Species3-PolyatomicMol=true +Part-Species3-InteractionID=2 +Part-Species3-VHSReferenceTemp=273 +Part-Species3-VHSReferenceDiam=4.47E-10 +Part-Species3-omegaVHS=0.24 +Part-Species3-NumOfAtoms=3 +Part-Species3-LinearMolec=.false. +Part-Species3-CharaTempVib1=4035.3 +Part-Species3-CharaTempVib2=1945.2 +Part-Species3-CharaTempVib3=4120.1 +Part-Species3-Ediss_eV=4.37 +Part-Species3-HeatOfFormation_K=46461.31 +Part-Species3-CharaTempRot1 = 72.1 +Part-Species3-CharaTempRot2 = 12.5 +Part-Species3-CharaTempRot3 = 10.6 +Part-Species3-SymmetryFactor = 2 +! =============================================================================== ! +! Species4, CH +! =============================================================================== ! +Part-Species4-SpeciesName=CH +Part-Species4-InteractionID = 2 +Part-Species4-VHSReferenceTemp = 273 +Part-Species4-VHSReferenceDiam = 4.39E-10 +Part-Species4-omegaVHS=0.24 +Part-Species4-CharaTempVib=4314.3 +Part-Species4-Ediss_eV=3.49 +Part-Species4-HeatOfFormation_K=71440.92 +Part-Species4-CharaTempRot = 20.4 +Part-Species4-SymmetryFactor = 1 +! =============================================================================== ! +! Species5, H2 +! =============================================================================== ! +Part-Species5-SpeciesName=H2 +Part-Species5-InteractionID = 2 +Part-Species5-VHSReferenceTemp = 273 +Part-Species5-VHSReferenceDiam = 3.06E-10 +Part-Species5-omegaVHS=0.24 +Part-Species5-CharaTempVib=6329.0 +Part-Species5-Ediss_eV=4.50 +Part-Species5-HeatOfFormation_K=0.0 +Part-Species5-CharaTempRot = 87.5 +Part-Species5-SymmetryFactor = 2 +! =============================================================================== ! +! Species6, C +! =============================================================================== ! +Part-Species6-SpeciesName=C +Part-Species6-InteractionID = 1 +Part-Species6-VHSReferenceTemp = 273 +Part-Species6-VHSReferenceDiam = 3.26E-10 +Part-Species6-omegaVHS=0.24 +Part-Species6-HeatOfFormation_K=86175.70 +! =============================================================================== ! +! Species7, H +! =============================================================================== ! +Part-Species7-SpeciesName=H +Part-Species7-InteractionID = 1 +Part-Species7-VHSReferenceTemp = 273 +Part-Species7-VHSReferenceDiam = 2.03E-10 +Part-Species7-omegaVHS=0.24 +Part-Species7-HeatOfFormation_K=26213.32 +! =============================================================================== ! +! Species8, Ar +! =============================================================================== ! +Part-Species8-SpeciesName=Ar +Part-Species8-InteractionID = 1 +Part-Species8-VHSReferenceTemp = 273 +Part-Species8-VHSReferenceDiam = 4.05E-10 +Part-Species8-omegaVHS=0.24 +Part-Species8-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=7 + +DSMC-Reaction1-ReactionName=CH4+M_CH3+H+M +DSMC-Reaction2-ReactionName=CH3+M_CH2+H+M +DSMC-Reaction3-ReactionName=CH3+M_CH+H2+M +DSMC-Reaction4-ReactionName=CH2+M_CH+H+M +DSMC-Reaction5-ReactionName=CH2+M_H2+C+M +DSMC-Reaction6-ReactionName=CH+M_C+H+M +DSMC-Reaction7-ReactionName=H2+M_H+H+M +!--------------------------------------------------------------------! +!##################### Dissociation Reactions #######################! +!--------------------------------------------------------------------! +!--------- Reaction1: CH4 + M -> CH3 + H + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction1-ReactionType=D +DSMC-Reaction1-Reactants=(/1,8,0/) +DSMC-Reaction1-Products=(/2,8,7/) +DSMC-Reaction1-Arrhenius-Prefactor=7.8045E+17 ! A_f +DSMC-Reaction1-Arrhenius-Powerfactor=-8.2 ! B_f +DSMC-Reaction1-Activation-Energy_K=59200.0 ! E_a +DSMC-Reaction1-NumberOfNonReactives=8 +DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7,8/) +!--------------------------------------------------------------------! +!--------- Reaction2: CH3 + M -> CH2 + H + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction2-ReactionType=D +DSMC-Reaction2-Reactants=(/2,8,0/) +DSMC-Reaction2-Products=(/3,8,7/) +DSMC-Reaction2-Arrhenius-Prefactor=1.6938E-14 ! A_f +DSMC-Reaction2-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction2-Activation-Energy_K=45600 ! E_a +DSMC-Reaction2-NumberOfNonReactives=8 +DSMC-Reaction2-NonReactiveSpecies=(/1,2,3,4,5,6,7,8/) +!--------------------------------------------------------------------! +!--------- Reaction3: CH3 + M -> CH + H2 + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction3-ReactionType=D +DSMC-Reaction3-Reactants=(/2,8,0/) +DSMC-Reaction3-Products=(/4,8,5/) +DSMC-Reaction3-Arrhenius-Prefactor=8.3029E-15 ! A_f +DSMC-Reaction3-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction3-Activation-Energy_K=42800 ! E_a +DSMC-Reaction3-NumberOfNonReactives=8 +DSMC-Reaction3-NonReactiveSpecies=(/1,2,3,4,5,6,7,8/) +!--------------------------------------------------------------------! +!--------- Reaction4: CH2 + M -> CH + H + M -------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction4-ReactionType=D +DSMC-Reaction4-Reactants=(/3,8,0/) +DSMC-Reaction4-Products=(/4,8,7/) +DSMC-Reaction4-Arrhenius-Prefactor=6.6423E-15 ! A_f +DSMC-Reaction4-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction4-Activation-Energy_K=41800 ! E_a +DSMC-Reaction4-NumberOfNonReactives=8 +DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7,8/) +!--------------------------------------------------------------------! +!--------- Reaction5: CH2 + M -> H2 + C + M -------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction5-ReactionType=D +DSMC-Reaction5-Reactants=(/3,8,0/) +DSMC-Reaction5-Products=(/5,8,6/) +DSMC-Reaction5-Arrhenius-Prefactor=2.1588E-16 ! A_f +DSMC-Reaction5-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction5-Activation-Energy_K=29700 ! E_a +DSMC-Reaction5-NumberOfNonReactives=8 +DSMC-Reaction5-NonReactiveSpecies=(/1,2,3,4,5,6,7,8/) +!--------------------------------------------------------------------! +!--------- Reaction6: CH + M -> C + H + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction6-ReactionType=D +DSMC-Reaction6-Reactants=(/4,8,0/) +DSMC-Reaction6-Products=(/6,8,7/) +DSMC-Reaction6-Arrhenius-Prefactor=3.1551E-16 ! A_f +DSMC-Reaction6-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction6-Activation-Energy_K=33700 ! E_a +DSMC-Reaction6-NumberOfNonReactives=8 +DSMC-Reaction6-NonReactiveSpecies=(/1,2,3,4,5,6,7,8/) +!--------------------------------------------------------------------! +!--------- Reaction7: H2 + M -> H + H + M ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction7-ReactionType=D +DSMC-Reaction7-Reactants=(/5,8,0/) +DSMC-Reaction7-Products=(/7,8,7/) +DSMC-Reaction7-Arrhenius-Prefactor=3.7031E-16 ! A_f +DSMC-Reaction7-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction7-Activation-Energy_K=48350 ! E_a +DSMC-Reaction7-NumberOfNonReactives=8 +DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8/) +; !--------------------------------------------------------------------! +; !################## Exchange & Radical Reactions ####################! +; !--------------------------------------------------------------------! +; !--------- Reaction9: CH3 + H -> CH2 + H2 --------------------------! +; !--------------------------------------------------------------------! +; DSMC-Reaction9-ReactionType=E +; DSMC-Reaction9-Reactants=(/2,13,0/) +; DSMC-Reaction9-Products=(/3,7,0/) +; DSMC-Reaction9-Arrhenius-Prefactor=2.1000E-14 ! A_f +; DSMC-Reaction9-Arrhenius-Powerfactor=-0.56 ! B_f +; DSMC-Reaction9-Activation-Energy_K=8000 ! E_a +; !--------------------------------------------------------------------! +; !--------- Reaction10: CH + C -> C2 + H -----------------------------! +; !--------------------------------------------------------------------! +; DSMC-Reaction10-ReactionType=E +; DSMC-Reaction10-Reactants=(/4,12,0/) +; DSMC-Reaction10-Products=(/6,13,0/) +; DSMC-Reaction10-Arrhenius-Prefactor=3.3212E-16 ! A_f +; DSMC-Reaction10-Arrhenius-Powerfactor=0.0 ! B_f +; DSMC-Reaction10-Activation-Energy_K=0.0 ! E_a +; !--------------------------------------------------------------------! +; !--------- Reaction11: H2 + C -> CH + H -----------------------------! +; !--------------------------------------------------------------------! +; DSMC-Reaction11-ReactionType=E +; DSMC-Reaction11-Reactants=(/7,12,0/) +; DSMC-Reaction11-Products=(/4,13,0/) +; DSMC-Reaction11-Arrhenius-Prefactor=6.6423E-16 ! A_f +; DSMC-Reaction11-Arrhenius-Powerfactor=0.0 ! B_f +; DSMC-Reaction11-Activation-Energy_K=11700 ! E_a +; !--------------------------------------------------------------------! +; !--------- Reaction12: CH4 + H -> CH3 + H2 --------------------------! +; !--------------------------------------------------------------------! +; DSMC-Reaction12-ReactionType=E +; DSMC-Reaction12-Reactants=(/1,13,0/) +; DSMC-Reaction12-Products=(/2,7,0/) +; DSMC-Reaction12-Arrhenius-Prefactor=2.1919E-26 ! A_f +; DSMC-Reaction12-Arrhenius-Powerfactor=3.0 ! B_f +; DSMC-Reaction12-Activation-Energy_K=4045 ! E_a diff --git a/tools/species_database/CH4_7Spec_7Reac.ini b/tools/species_database/CH4_7Spec_7Reac.ini new file mode 100755 index 000000000..78676aa75 --- /dev/null +++ b/tools/species_database/CH4_7Spec_7Reac.ini @@ -0,0 +1,242 @@ +! =============================================================================== ! +! Species1, CH4 +! =============================================================================== ! +Part-Species1-SpeciesName=CH4 +Part-Species1-PolyatomicMol=true +Part-Species1-InteractionID=2 +Part-Species1-VHSReferenceTemp=273 +Part-Species1-VHSReferenceDiam=4.63E-10 +Part-Species1-omegaVHS=0.24 +Part-Species1-NumOfAtoms=5 +Part-Species1-LinearMolec=.false. +Part-Species1-CharaTempVib1=4194.9 +Part-Species1-CharaTempVib2=2206.0 +Part-Species1-CharaTempVib3=2206.0 +Part-Species1-CharaTempVib4=4341.6 +Part-Species1-CharaTempVib5=4341.6 +Part-Species1-CharaTempVib6=4341.6 +Part-Species1-CharaTempVib7=1878.1 +Part-Species1-CharaTempVib8=1878.1 +Part-Species1-CharaTempVib9=1878.1 +Part-Species1-Ediss_eV=4.53 +Part-Species1-HeatOfFormation_K=-9002.71 +Part-Species1-CharaTempRot1 = 7.6 +Part-Species1-CharaTempRot2 = 7.6 +Part-Species1-CharaTempRot3 = 7.6 +Part-Species1-SymmetryFactor = 12 +! =============================================================================== ! +! Species2, CH3 +! =============================================================================== ! +Part-Species2-SpeciesName=CH3 +Part-Species2-PolyatomicMol=true +Part-Species2-InteractionID=2 +Part-Species2-VHSReferenceTemp=273 +Part-Species2-VHSReferenceDiam=4.55E-10 +Part-Species2-omegaVHS=0.24 +Part-Species2-NumOfAtoms=4 +Part-Species2-LinearMolec=.false. +Part-Species2-CharaTempVib1=4320.6 +Part-Species2-CharaTempVib2=872.1 +Part-Species2-CharaTempVib3=4545.5 +Part-Species2-CharaTempVib4=4545.5 +Part-Species2-CharaTempVib5=2016.2 +Part-Species2-CharaTempVib6=2016.2 +Part-Species2-Ediss_eV=4.77 +Part-Species2-HeatOfFormation_K=17518.44 +Part-Species2-CharaTempRot1 = 13.5 +Part-Species2-CharaTempRot2 = 13.5 +Part-Species2-CharaTempRot3 = 6.8 +Part-Species2-SymmetryFactor = 6 +! =============================================================================== ! +! Species3, CH2 +! =============================================================================== ! +Part-Species3-SpeciesName=CH2 +Part-Species3-PolyatomicMol=true +Part-Species3-InteractionID=2 +Part-Species3-VHSReferenceTemp=273 +Part-Species3-VHSReferenceDiam=4.47E-10 +Part-Species3-omegaVHS=0.24 +Part-Species3-NumOfAtoms=3 +Part-Species3-LinearMolec=.false. +Part-Species3-CharaTempVib1=4035.3 +Part-Species3-CharaTempVib2=1945.2 +Part-Species3-CharaTempVib3=4120.1 +Part-Species3-Ediss_eV=4.37 +Part-Species3-HeatOfFormation_K=46461.31 +Part-Species3-CharaTempRot1 = 72.1 +Part-Species3-CharaTempRot2 = 12.5 +Part-Species3-CharaTempRot3 = 10.6 +Part-Species3-SymmetryFactor = 2 +! =============================================================================== ! +! Species4, CH +! =============================================================================== ! +Part-Species4-SpeciesName=CH +Part-Species4-InteractionID = 2 +Part-Species4-VHSReferenceTemp = 273 +Part-Species4-VHSReferenceDiam = 4.39E-10 +Part-Species4-omegaVHS=0.24 +Part-Species4-CharaTempVib=4314.3 +Part-Species4-Ediss_eV=3.49 +Part-Species4-HeatOfFormation_K=71440.92 +Part-Species4-CharaTempRot = 20.4 +Part-Species4-SymmetryFactor = 1 +! =============================================================================== ! +! Species5, H2 +! =============================================================================== ! +Part-Species5-SpeciesName=H2 +Part-Species5-InteractionID = 2 +Part-Species5-VHSReferenceTemp = 273 +Part-Species5-VHSReferenceDiam = 3.06E-10 +Part-Species5-omegaVHS=0.24 +Part-Species5-CharaTempVib=6329.0 +Part-Species5-Ediss_eV=4.50 +Part-Species5-HeatOfFormation_K=0.0 +Part-Species5-CharaTempRot = 87.5 +Part-Species5-SymmetryFactor = 2 +! =============================================================================== ! +! Species6, C +! =============================================================================== ! +Part-Species6-SpeciesName=C +Part-Species6-InteractionID = 1 +Part-Species6-VHSReferenceTemp = 273 +Part-Species6-VHSReferenceDiam = 3.26E-10 +Part-Species6-omegaVHS=0.24 +Part-Species6-HeatOfFormation_K=86175.70 +! =============================================================================== ! +! Species7, H +! =============================================================================== ! +Part-Species7-SpeciesName=H +Part-Species7-InteractionID = 1 +Part-Species7-VHSReferenceTemp = 273 +Part-Species7-VHSReferenceDiam = 2.03E-10 +Part-Species7-omegaVHS=0.24 +Part-Species7-HeatOfFormation_K=26213.32 +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=7 + +DSMC-Reaction1-ReactionName=CH4+M_CH3+H+M +DSMC-Reaction2-ReactionName=CH3+M_CH2+H+M +DSMC-Reaction3-ReactionName=CH3+M_CH+H2+M +DSMC-Reaction4-ReactionName=CH2+M_CH+H+M +DSMC-Reaction5-ReactionName=CH2+M_H2+C+M +DSMC-Reaction6-ReactionName=CH+M_C+H+M +DSMC-Reaction7-ReactionName=H2+M_H+H+M +!--------------------------------------------------------------------! +!##################### Dissociation Reactions #######################! +!--------------------------------------------------------------------! +!--------- Reaction1: CH4 + M -> CH3 + H + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction1-ReactionType=D +DSMC-Reaction1-Reactants=(/1,0,0/) +DSMC-Reaction1-Products=(/2,0,7,0/) +DSMC-Reaction1-Arrhenius-Prefactor=7.8045E+17 ! A_f +DSMC-Reaction1-Arrhenius-Powerfactor=-8.2 ! B_f +DSMC-Reaction1-Activation-Energy_K=59200.0 ! E_a +DSMC-Reaction1-NumberOfNonReactives=7 +DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7/) +!--------------------------------------------------------------------! +!--------- Reaction2: CH3 + M -> CH2 + H + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction2-ReactionType=D +DSMC-Reaction2-Reactants=(/2,0,0/) +DSMC-Reaction2-Products=(/3,0,7,0/) +DSMC-Reaction2-Arrhenius-Prefactor=1.6938E-14 ! A_f +DSMC-Reaction2-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction2-Activation-Energy_K=45600 ! E_a +DSMC-Reaction2-NumberOfNonReactives=7 +DSMC-Reaction2-NonReactiveSpecies=(/1,2,3,4,5,6,7/) +!--------------------------------------------------------------------! +!--------- Reaction3: CH3 + M -> CH + H2 + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction3-ReactionType=D +DSMC-Reaction3-Reactants=(/2,0,0/) +DSMC-Reaction3-Products=(/4,0,5,0/) +DSMC-Reaction3-Arrhenius-Prefactor=8.3029E-15 ! A_f +DSMC-Reaction3-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction3-Activation-Energy_K=42800 ! E_a +DSMC-Reaction3-NumberOfNonReactives=7 +DSMC-Reaction3-NonReactiveSpecies=(/1,2,3,4,5,6,7/) +!--------------------------------------------------------------------! +!--------- Reaction4: CH2 + M -> CH + H + M -------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction4-ReactionType=D +DSMC-Reaction4-Reactants=(/3,0,0/) +DSMC-Reaction4-Products=(/4,0,7,0/) +DSMC-Reaction4-Arrhenius-Prefactor=6.6423E-15 ! A_f +DSMC-Reaction4-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction4-Activation-Energy_K=41800 ! E_a +DSMC-Reaction4-NumberOfNonReactives=7 +DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7/) +!--------------------------------------------------------------------! +!--------- Reaction5: CH2 + M -> H2 + C + M -------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction5-ReactionType=D +DSMC-Reaction5-Reactants=(/3,0,0/) +DSMC-Reaction5-Products=(/5,0,6,0/) +DSMC-Reaction5-Arrhenius-Prefactor=2.1588E-16 ! A_f +DSMC-Reaction5-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction5-Activation-Energy_K=29700 ! E_a +DSMC-Reaction5-NumberOfNonReactives=7 +DSMC-Reaction5-NonReactiveSpecies=(/1,2,3,4,5,6,7/) +!--------------------------------------------------------------------! +!--------- Reaction6: CH + M -> C + H + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction6-ReactionType=D +DSMC-Reaction6-Reactants=(/4,0,0/) +DSMC-Reaction6-Products=(/6,0,7,0/) +DSMC-Reaction6-Arrhenius-Prefactor=3.1551E-16 ! A_f +DSMC-Reaction6-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction6-Activation-Energy_K=33700 ! E_a +DSMC-Reaction6-NumberOfNonReactives=7 +DSMC-Reaction6-NonReactiveSpecies=(/1,2,3,4,5,6,7/) +!--------------------------------------------------------------------! +!--------- Reaction7: H2 + M -> H + H + M ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction7-ReactionType=D +DSMC-Reaction7-Reactants=(/5,0,0/) +DSMC-Reaction7-Products=(/7,0,7,0/) +DSMC-Reaction7-Arrhenius-Prefactor=3.7031E-16 ! A_f +DSMC-Reaction7-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction7-Activation-Energy_K=48350 ! E_a +DSMC-Reaction7-NumberOfNonReactives=7 +DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7/) +;!--------------------------------------------------------------------! +;!################## Exchange & Radical Reactions ####################! +;!--------------------------------------------------------------------! +;!--------- Reaction8: CH3 + H -> CH2 + H2 --------------------------! +;!--------------------------------------------------------------------! +;DSMC-Reaction8-ReactionType=E +;DSMC-Reaction8-Reactants=(/2,13,0/) +;DSMC-Reaction8-Products=(/3,7,0/) +;DSMC-Reaction8-Arrhenius-Prefactor=2.1000E-14 ! A_f +;DSMC-Reaction8-Arrhenius-Powerfactor=-0.56 ! B_f +;DSMC-Reaction8-Activation-Energy_K=8000 ! E_a +;!--------------------------------------------------------------------! +;!--------- Reaction9: CH + C -> C2 + H -----------------------------! +;!--------------------------------------------------------------------! +;DSMC-Reaction9-ReactionType=E +;DSMC-Reaction9-Reactants=(/4,12,0/) +;DSMC-Reaction9-Products=(/6,13,0/) +;DSMC-Reaction9-Arrhenius-Prefactor=3.3212E-16 ! A_f +;DSMC-Reaction9-Arrhenius-Powerfactor=0.0 ! B_f +;DSMC-Reaction9-Activation-Energy_K=0.0 ! E_a +;!--------------------------------------------------------------------! +;!--------- Reaction10: H2 + C -> CH + H -----------------------------! +;!--------------------------------------------------------------------! +;DSMC-Reaction10-ReactionType=E +;DSMC-Reaction10-Reactants=(/7,12,0/) +;DSMC-Reaction10-Products=(/4,13,0/) +;DSMC-Reaction10-Arrhenius-Prefactor=6.6423E-16 ! A_f +;DSMC-Reaction10-Arrhenius-Powerfactor=0.0 ! B_f +;DSMC-Reaction10-Activation-Energy_K=11700 ! E_a +;!--------------------------------------------------------------------! +;!--------- Reaction11: CH4 + H -> CH3 + H2 --------------------------! +;!--------------------------------------------------------------------! +;DSMC-Reaction11-ReactionType=E +;DSMC-Reaction11-Reactants=(/1,13,0/) +;DSMC-Reaction11-Products=(/2,7,0/) +;DSMC-Reaction11-Arrhenius-Prefactor=2.1919E-26 ! A_f +;DSMC-Reaction11-Arrhenius-Powerfactor=3.0 ! B_f +;DSMC-Reaction11-Activation-Energy_K=4045 ! E_a diff --git a/tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini b/tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini new file mode 100755 index 000000000..b2c9928bb --- /dev/null +++ b/tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini @@ -0,0 +1,198 @@ +! =============================================================================== ! +! Species1, CO2 +! =============================================================================== ! +Part-Species1-SpeciesName=CO2 +Part-Species1-PolyatomicMol=true +Part-Species1-InteractionID=2 +Part-Species1-Tref=273 +Part-Species1-dref=5.10E-10 +Part-Species1-omega=0.24 +Part-Species1-NumOfAtoms=3 +Part-Species1-LinearMolec=true +Part-Species1-CharaTempVib1=959.2 +Part-Species1-CharaTempVib2=959.2 +Part-Species1-CharaTempVib3=1917 +Part-Species1-CharaTempVib4=3378.1 +Part-Species1-Ediss_eV=5.43 +Part-Species1-HeatOfFormation_K=-47324.14 +Part-Species1-CharaTempRot = 0.6 +Part-Species1-SymmetryFactor = 2 +! =============================================================================== ! +! Species2, CO +! =============================================================================== ! +Part-Species2-SpeciesName=CO +Part-Species2-InteractionID=2 +Part-Species2-Tref=273 +Part-Species2-dref=4.17E-10 +Part-Species2-omega=0.24 +Part-Species2-CharaTempVib=3120.7 +Part-Species2-Ediss_eV=11.06 +Part-Species2-HeatOfFormation_K=-13292.85 +Part-Species2-CharaTempRot = 2.8 +Part-Species2-SymmetryFactor = 1 +! =============================================================================== ! +! Species3, C2 +! =============================================================================== ! +Part-Species3-SpeciesName=C2 +Part-Species3-InteractionID=2 +Part-Species3-Tref=273 +Part-Species3-dref=4.88E-10 +Part-Species3-omega=0.24 +Part-Species3-CharaTempVib=2667.7 +Part-Species3-Ediss_eV=6.22 +Part-Species3-HeatOfFormation_K=99667.24 +Part-Species3-CharaTempRot = 2.6 +Part-Species3-SymmetryFactor = 2 +! =============================================================================== ! +! Species4, O2 +! =============================================================================== ! +Part-Species4-SpeciesName=O2 +Part-Species4-InteractionID=2 +Part-Species4-Tref=273 +Part-Species4-dref=3.98E-10 +Part-Species4-omega=0.24 +Part-Species4-CharaTempVib=2272.2 +Part-Species4-Ediss_eV=5.09 +Part-Species4-HeatOfFormation_K= 0.0 +Part-Species4-CharaTempRot = 2.1 +Part-Species4-SymmetryFactor = 2 +! =============================================================================== ! +! Species5, C +! =============================================================================== ! +Part-Species5-SpeciesName=C +Part-Species5-InteractionID=1 +Part-Species5-Tref=273 +Part-Species5-dref=4.67E-10 +Part-Species5-omega=0.24 +Part-Species5-HeatOfFormation_K=86221.52 +! =============================================================================== ! +! Species6, O +! =============================================================================== ! +Part-Species6-SpeciesName=O +Part-Species6-InteractionID=1 +Part-Species6-Tref=273 +Part-Species6-dref=3.49E-10 +Part-Species6-omega=0.24 +Part-Species6-HeatOfFormation_K=29975.34 +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=10 + +DSMC-Reaction1-ReactionName=CO2+M_CO+O+M +DSMC-Reaction2-ReactionName=CO2+A_CO+O+A +DSMC-Reaction3-ReactionName=CO+M_C+O+M +DSMC-Reaction4-ReactionName=CO+A_C+O+A +DSMC-Reaction5-ReactionName=C2+M_C+C+M +DSMC-Reaction6-ReactionName=O2+M_O+O+M +DSMC-Reaction7-ReactionName=O2+A_O+O+A + +! ============ ! +! Dissociation CO2 +! ============ ! +!Reaction1 (CO2 + molecules -> CO + O + molecules) +DSMC-Reaction1-ReactionType=D +DSMC-Reaction1-Reactants=(/1,0,0/) +DSMC-Reaction1-Products=(/2,0,6/) +DSMC-Reaction1-Arrhenius-Prefactor=1.15E-08 +DSMC-Reaction1-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction1-Activation-Energy_K=63280 +DSMC-Reaction1-NumberOfNonReactives=4 +DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4/) + +!Reaction2 (CO2 + atoms -> CO + O + atoms) +DSMC-Reaction2-ReactionType=D +DSMC-Reaction2-Reactants=(/1,0,0/) +DSMC-Reaction2-Products=(/2,0,6/) +DSMC-Reaction2-Arrhenius-Prefactor=2.29E-08 +DSMC-Reaction2-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction2-Activation-Energy_K=63280 +DSMC-Reaction2-NumberOfNonReactives=2 +DSMC-Reaction2-NonReactiveSpecies=(/5,6/) + +! ============ ! +! Dissociation CO +! ============ ! +!Reaction3 (CO + molecules -> C + O + molecules) +DSMC-Reaction3-ReactionType=D +DSMC-Reaction3-Reactants=(/2,0,0/) +DSMC-Reaction3-Products=(/5,0,6/) +DSMC-Reaction3-Arrhenius-Prefactor=1.99E-09 +DSMC-Reaction3-Arrhenius-Powerfactor=-1 +DSMC-Reaction3-Activation-Energy_K=129000 +DSMC-Reaction3-NumberOfNonReactives=4 +DSMC-Reaction3-NonReactiveSpecies=(/1,2,3,4/) + +!Reaction4 (CO + atoms -> C + O + atoms) +DSMC-Reaction4-ReactionType=D +DSMC-Reaction4-Reactants=(/2,0,0/) +DSMC-Reaction4-Products=(/5,0,6/) +DSMC-Reaction4-Arrhenius-Prefactor=2.99E-09 +DSMC-Reaction4-Arrhenius-Powerfactor=-1 +DSMC-Reaction4-Activation-Energy_K=129000 +DSMC-Reaction4-NumberOfNonReactives=2 +DSMC-Reaction4-NonReactiveSpecies=(/5,6/) + +! ============ ! +! Dissociation C2 +! ============ ! +!Reaction5 (C2 + M -> C + C + M) +DSMC-Reaction5-ReactionType=D +DSMC-Reaction5-Reactants=(/3,0,0/) +DSMC-Reaction5-Products=(/5,0,5/) +DSMC-Reaction5-Arrhenius-Prefactor=7.47E-12 +DSMC-Reaction5-Arrhenius-Powerfactor=-1 +DSMC-Reaction5-Activation-Energy_K=71500 +DSMC-Reaction5-NumberOfNonReactives=6 +DSMC-Reaction5-NonReactiveSpecies=(/1,2,3,4,5,6/) + +! ============ ! +! Dissociation O2 +! ============ ! +!Reaction6 (O2 + molecules/Ar -> O + O + molecules/Ar) +DSMC-Reaction6-ReactionType=D +DSMC-Reaction6-Reactants=(/4,0,0/) +DSMC-Reaction6-Products=(/6,0,6/) +DSMC-Reaction6-Arrhenius-Prefactor=3.32E-09 +DSMC-Reaction6-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction6-Activation-Energy_K=59360 +DSMC-Reaction6-NumberOfNonReactives=4 +DSMC-Reaction6-NonReactiveSpecies=(/1,2,3,4/) + +!Reaction7 (O2 + atoms -> O + O + atoms) +DSMC-Reaction7-ReactionType=D +DSMC-Reaction7-Reactants=(/4,0,0/) +DSMC-Reaction7-Products=(/6,0,6/) +DSMC-Reaction7-Arrhenius-Prefactor=1.66E-08 +DSMC-Reaction7-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction7-Activation-Energy_K=59360 +DSMC-Reaction7-NumberOfNonReactives=2 +DSMC-Reaction7-NonReactiveSpecies=(/5,6/) + +! ============ ! +! Exchange Reactions +! ============ ! + +!Reaction8 (CO2 + O -> CO + O2) +DSMC-Reaction8-ReactionType=E +DSMC-Reaction8-Reactants=(/1,6,0/) +DSMC-Reaction8-Products=(/2,4,0/) +DSMC-Reaction8-Arrhenius-Prefactor=4.50E-16 +DSMC-Reaction8-Arrhenius-Powerfactor=0 +DSMC-Reaction8-Activation-Energy_K=33800 + +!Reaction9 (CO + C -> C2 + O) +DSMC-Reaction9-ReactionType=E +DSMC-Reaction9-Reactants=(/2,5,0/) +DSMC-Reaction9-Products=(/3,6,0/) +DSMC-Reaction9-Arrhenius-Prefactor=3.99E-13 +DSMC-Reaction9-Arrhenius-Powerfactor=-1 +DSMC-Reaction9-Activation-Energy_K=58000 + +!Reaction10 (CO + O -> C + O2) +DSMC-Reaction10-ReactionType=E +DSMC-Reaction10-Reactants=(/2,6,0/) +DSMC-Reaction10-Products=(/5,4,0/) +DSMC-Reaction10-Arrhenius-Prefactor=6.48E-17 +DSMC-Reaction10-Arrhenius-Powerfactor=-0.18 +DSMC-Reaction10-Activation-Energy_K=69200 diff --git a/tools/species_database/DSMC.ini b/tools/species_database/DSMC.ini deleted file mode 100755 index a75f973c6..000000000 --- a/tools/species_database/DSMC.ini +++ /dev/null @@ -1,339 +0,0 @@ -! =============================================================================== ! -! Species1, CH4 -! =============================================================================== ! -Part-Species1-SpeciesName=CH4 -Part-Species1-PolyatomicMol=true -Part-Species1-InteractionID=2 -Part-Species1-Tref=273 -Part-Species1-dref=4.63E-10 -Part-Species1-omega=0.24 -Part-Species1-NumOfAtoms=5 -Part-Species1-LinearMolec=.false. -Part-Species1-CharaTempVib1=4194.9 -Part-Species1-CharaTempVib2=2206.0 -Part-Species1-CharaTempVib3=2206.0 -Part-Species1-CharaTempVib4=4341.6 -Part-Species1-CharaTempVib5=4341.6 -Part-Species1-CharaTempVib6=4341.6 -Part-Species1-CharaTempVib7=1878.1 -Part-Species1-CharaTempVib8=1878.1 -Part-Species1-CharaTempVib9=1878.1 -Part-Species1-Ediss_eV=4.53 -Part-Species1-HeatOfFormation_K=-9002.71 -Part-Species1-CharaTempRot1 = 7.6 -Part-Species1-CharaTempRot2 = 7.6 -Part-Species1-CharaTempRot3 = 7.6 -Part-Species1-SymmetryFactor = 12 -! =============================================================================== ! -! Species2, CH3 -! =============================================================================== ! -Part-Species2-SpeciesName=CH3 -Part-Species2-PolyatomicMol=true -Part-Species2-InteractionID=2 -Part-Species2-Tref=273 -Part-Species2-dref=4.55E-10 -Part-Species2-omega=0.24 -Part-Species2-NumOfAtoms=4 -Part-Species2-LinearMolec=.false. -Part-Species2-CharaTempVib1=4320.6 -Part-Species2-CharaTempVib2=872.1 -Part-Species2-CharaTempVib3=4545.5 -Part-Species2-CharaTempVib4=4545.5 -Part-Species2-CharaTempVib5=2016.2 -Part-Species2-CharaTempVib6=2016.2 -Part-Species2-Ediss_eV=4.77 -Part-Species2-HeatOfFormation_K=17518.44 -Part-Species2-CharaTempRot1 = 13.5 -Part-Species2-CharaTempRot2 = 13.5 -Part-Species2-CharaTempRot3 = 6.8 -Part-Species2-SymmetryFactor = 6 -! =============================================================================== ! -! Species3, CH2 -! =============================================================================== ! -Part-Species3-SpeciesName=CH2 -Part-Species3-PolyatomicMol=true -Part-Species3-InteractionID=2 -Part-Species3-Tref=273 -Part-Species3-dref=4.47E-10 -Part-Species3-omega=0.24 -Part-Species3-NumOfAtoms=3 -Part-Species3-LinearMolec=.false. -Part-Species3-CharaTempVib1=4035.3 -Part-Species3-CharaTempVib2=1945.2 -Part-Species3-CharaTempVib3=4120.1 -Part-Species3-Ediss_eV=4.37 -Part-Species3-HeatOfFormation_K=46461.31 -Part-Species3-CharaTempRot1 = 72.1 -Part-Species3-CharaTempRot2 = 12.5 -Part-Species3-CharaTempRot3 = 10.6 -Part-Species3-SymmetryFactor = 2 -! =============================================================================== ! -! Species4, CH -! =============================================================================== ! -Part-Species4-SpeciesName=CH -Part-Species4-InteractionID = 2 -Part-Species4-Tref = 273 -Part-Species4-dref = 4.39E-10 -Part-Species4-omega=0.24 -Part-Species4-CharaTempVib=4314.3 -Part-Species4-Ediss_eV=3.49 -Part-Species4-HeatOfFormation_K=71440.92 -Part-Species4-CharaTempRot = 20.4 -Part-Species4-SymmetryFactor = 1 -! =============================================================================== ! -! Species5, N2 -! =============================================================================== ! -Part-Species5-SpeciesName=N2 -Part-Species5-InteractionID = 2 -Part-Species5-Tref = 273 -Part-Species5-dref = 4.17E-10 -Part-Species5-omega=0.24 -Part-Species5-CharaTempVib=3392.5 -Part-Species5-Ediss_eV=9.79 -Part-Species5-HeatOfFormation_K=0.0 -Part-Species5-CharaTempRot = 2.9 -Part-Species5-SymmetryFactor = 2 -! =============================================================================== ! -! Species6, C2 -! =============================================================================== ! -Part-Species6-SpeciesName=C2 -Part-Species6-InteractionID = 2 -Part-Species6-Tref = 273 -Part-Species6-dref = 4.88E-10 -Part-Species6-omega=0.24 -Part-Species6-CharaTempVib=2667.7 -Part-Species6-Ediss_eV=6.26 -Part-Species6-HeatOfFormation_K=100733.71 -Part-Species6-CharaTempRot = 2.6 -Part-Species6-SymmetryFactor = 2 -! =============================================================================== ! -! Species7, H2 -! =============================================================================== ! -Part-Species7-SpeciesName=H2 -Part-Species7-InteractionID = 2 -Part-Species7-Tref = 273 -Part-Species7-dref = 3.06E-10 -Part-Species7-omega=0.24 -Part-Species7-CharaTempVib=6329.0 -Part-Species7-Ediss_eV=4.50 -Part-Species7-HeatOfFormation_K=0.0 -Part-Species7-CharaTempRot = 87.5 -Part-Species7-SymmetryFactor = 2 -! =============================================================================== ! -! Species8, CN -! =============================================================================== ! -Part-Species8-SpeciesName=CN -Part-Species8-InteractionID = 2 -Part-Species8-Tref = 273 -Part-Species8-dref = 5.45E-10 -Part-Species8-omega=0.24 -Part-Species8-CharaTempVib=2975.4 -Part-Species8-Ediss_eV=7.72 -Part-Species8-HeatOfFormation_K=52323.23 -Part-Species8-CharaTempRot = 2.7 -Part-Species8-SymmetryFactor = 1 -! =============================================================================== ! -! Species9, NH -! =============================================================================== ! -Part-Species9-SpeciesName=NH -Part-Species9-InteractionID = 2 -Part-Species9-Tref = 273 -Part-Species9-dref = 4.64E-10 -Part-Species9-omega=0.24 -Part-Species9-CharaTempVib=4721.2 -Part-Species9-Ediss_eV=4.02 -Part-Species9-HeatOfFormation_K=45279.31 -Part-Species9-CharaTempRot = 24.0 -Part-Species9-SymmetryFactor = 1 -! =============================================================================== ! -! Species10, HCN -! =============================================================================== ! -Part-Species10-SpeciesName=HCN -Part-Species10-PolyatomicMol=true -Part-Species10-InteractionID = 2 -Part-Species10-Tref = 273 -Part-Species10-dref = 3.94E-10 -Part-Species10-omega=0.24 -Part-Species10-NumOfAtoms=3 -Part-Species10-LinearMolec=.true. -Part-Species10-CharaTempVib1=4761.5 -Part-Species10-CharaTempVib2=1023.9 -Part-Species10-CharaTempVib3=1023.9 -Part-Species10-CharaTempVib4=3015.7 -Part-Species10-Ediss_eV=9.93 -Part-Species10-HeatOfFormation_K=16249.85 -Part-Species10-CharaTempRot = 2.1 -Part-Species10-SymmetryFactor = 1 -! =============================================================================== ! -! Species11, N -! =============================================================================== ! -Part-Species11-SpeciesName=N -Part-Species11-InteractionID = 1 -Part-Species11-Tref = 273 -Part-Species11-dref = 3.00E-10 -Part-Species11-omega=0.24 -Part-Species11-HeatOfFormation_K=56837.22 -! =============================================================================== ! -! Species12, C -! =============================================================================== ! -Part-Species12-SpeciesName=C -Part-Species12-InteractionID = 1 -Part-Species12-Tref = 273 -Part-Species12-dref = 4.67E-10 -Part-Species12-omega=0.24 -Part-Species12-HeatOfFormation_K=86175.70 -! =============================================================================== ! -! Species13, H -! =============================================================================== ! -Part-Species13-SpeciesName=H -Part-Species13-InteractionID = 1 -Part-Species13-Tref = 273 -Part-Species13-dref = 2.03E-10 -Part-Species13-omega=0.24 -Part-Species13-HeatOfFormation_K=26213.32 -! =============================================================================== ! -! Species14, e -! =============================================================================== ! -Part-Species14-SpeciesName=electron -Part-Species14-InteractionID = 4 -Part-Species14-Tref = 273 -Part-Species14-dref = 1E-10 -Part-Species14-omega=0.24 -! =============================================================================== ! -! Species15, N2+ -! =============================================================================== ! -Part-Species15-SpeciesName=N2Ion1 -Part-Species15-InteractionID = 20 -Part-Species15-Tref = 273 -Part-Species15-dref = 4.17E-10 -Part-Species15-omega=0.24 -Part-Species15-CharaTempVib=3174.7 -Part-Species15-Ediss_eV=9.79 -Part-Species15-CharaTempRot = 2.8 -Part-Species15-SymmetryFactor = 2 -Part-Species15-PreviousState = 5 -! =============================================================================== ! -! Species16, CN+ -! =============================================================================== ! -Part-Species16-SpeciesName=CNIon1 -Part-Species16-InteractionID = 20 -Part-Species16-Tref = 273 -Part-Species16-dref = 5.45E-10 -Part-Species16-omega=0.24 -Part-Species16-CharaTempVib=2924.4 -Part-Species16-Ediss_eV=7.72 -Part-Species16-CharaTempRot = 2.5 -Part-Species16-SymmetryFactor = 1 -Part-Species16-PreviousState = 8 -! =============================================================================== ! -! Species17, N+ -! =============================================================================== ! -Part-Species17-SpeciesName=NIon1 -Part-Species17-InteractionID = 10 -Part-Species17-Tref = 273 -Part-Species17-dref = 3.00E-10 -Part-Species17-omega=0.24 -Part-Species17-PreviousState = 11 -! =============================================================================== ! -! Species18, C+ -! =============================================================================== ! -Part-Species18-SpeciesName=CIon1 -Part-Species18-InteractionID = 10 -Part-Species18-Tref = 273 -Part-Species18-dref = 4.67E-10 -Part-Species18-omega=0.24 -Part-Species18-PreviousState = 12 -! =============================================================================== ! -! Data for chemical Reaction -! =============================================================================== ! -DSMC-NumOfReactions=8 ! Test -!--------------------------------------------------------------------! -!##################### Dissociation Reactions #######################! -!--------------------------------------------------------------------! -!--------- Reaction1: CH4 + M -> CH3 + H + M ------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction1-ReactionName = Test1 -DSMC-Reaction1-Reactants=(/1,0,0/) -DSMC-Reaction1-Products=(/2,0,13,0/) -DSMC-Reaction1-Arrhenius-Prefactor=7.8047E+17 ! A_f -DSMC-Reaction1-Arrhenius-Powerfactor=-8.2 ! B_f -DSMC-Reaction1-Activation-Energy_K=59200.0 ! E_a -DSMC-Reaction1-NumberOfNonReactives=18 -DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction2: CH3 + M -> CH2 + H + M ------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction2-ReactionName = Test2 -DSMC-Reaction2-Reactants=(/2,0,0/) -DSMC-Reaction2-Products=(/3,0,13,0/) -DSMC-Reaction2-Arrhenius-Prefactor=1.6938E-14 ! A_f -DSMC-Reaction2-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction2-Activation-Energy_K=45600 ! E_a -DSMC-Reaction2-NumberOfNonReactives=18 -DSMC-Reaction2-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction3: CH3 + M -> CH + H2 + M ------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction3-ReactionName = Test3 -DSMC-Reaction3-Reactants=(/2,0,0/) -DSMC-Reaction3-Products=(/4,0,7,0/) -DSMC-Reaction3-Arrhenius-Prefactor=8.3029E-15 ! A_f -DSMC-Reaction3-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction3-Activation-Energy_K=42800 ! E_a -DSMC-Reaction3-NumberOfNonReactives=18 -DSMC-Reaction3-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction4: CH2 + M -> CH + H + M -------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction4-ReactionName = Test4 -DSMC-Reaction4-Reactants=(/3,0,0/) -DSMC-Reaction4-Products=(/4,0,13,0/) -DSMC-Reaction4-Arrhenius-Prefactor=6.6423E-15 ! A_f -DSMC-Reaction4-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction4-Activation-Energy_K=41800 ! E_a -DSMC-Reaction4-NumberOfNonReactives=18 -DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction5: CH2 + M -> C + H2 + M -------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction5-ReactionName = Test5 -DSMC-Reaction5-Reactants=(/3,0,0/) -DSMC-Reaction5-Products=(/7,0,12,0/) -DSMC-Reaction5-Arrhenius-Prefactor=2.1588E-16 ! A_f -DSMC-Reaction5-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction5-Activation-Energy_K=29700 ! E_a -DSMC-Reaction5-NumberOfNonReactives=18 -DSMC-Reaction5-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction6: CH + M -> C + H2 + M --------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction6-ReactionName = Test6 -DSMC-Reaction6-Reactants=(/4,0,0/) -DSMC-Reaction6-Products=(/12,0,13,0/) -DSMC-Reaction6-Arrhenius-Prefactor=3.1551E-16 ! A_f -DSMC-Reaction6-Arrhenius-Powerfactor=0.0 ! B_f -DSMC-Reaction6-Activation-Energy_K=33700 ! E_a -DSMC-Reaction6-NumberOfNonReactives=18 -DSMC-Reaction6-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) -!--------------------------------------------------------------------! -!--------- Reaction7a: N2 + M -> N + N + M --------------------------! -!--------------------------------------------------------------------! -DSMC-Reaction7-ReactionName = Test7 -DSMC-Reaction7-Reactants=(/5,0,0/) -DSMC-Reaction7-Products=(/11,0,11,0/) -DSMC-Reaction7-Arrhenius-Prefactor=1.1624E-08 ! A_f -DSMC-Reaction7-Arrhenius-Powerfactor=-1.6 ! B_f -DSMC-Reaction7-Activation-Energy_K=113200 ! E_a -DSMC-Reaction7-NumberOfNonReactives=13 -DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,14,15,16/) -!--------------------------------------------------------------------! -!--------- Reaction7b: N2 + N/C/H -> N + N + N/C/H ------------------! -!--------------------------------------------------------------------! -DSMC-Reaction8-ReactionName = Test8 -DSMC-Reaction8-Reactants=(/5,0,0/) -DSMC-Reaction8-Products=(/11,0,11,0/) -DSMC-Reaction8-Arrhenius-Prefactor=4.9817E-08 ! A_f -DSMC-Reaction8-Arrhenius-Powerfactor=-1.6 ! B_f -DSMC-Reaction8-Activation-Energy_K=113200 ! E_a -DSMC-Reaction8-NumberOfNonReactives=5 -DSMC-Reaction8-NonReactiveSpecies=(/11,12,13,17,18/) diff --git a/tools/species_database/DSMC2.ini b/tools/species_database/DSMC2.ini deleted file mode 100755 index 5405b555d..000000000 --- a/tools/species_database/DSMC2.ini +++ /dev/null @@ -1,113 +0,0 @@ -! =============================================================================== ! -! Species1, CO2 -! =============================================================================== ! -Part-Species1-SpeciesName=CO2 -Part-Species1-PolyatomicMol=true -Part-Species1-InteractionID=2 -Part-Species1-Tref=273 -Part-Species1-dref=5.10E-10 -Part-Species1-omega=0.24 -Part-Species1-NumOfAtoms=3 -Part-Species1-LinearMolec=true -Part-Species1-CharaTempVib1=959.2 -Part-Species1-CharaTempVib2=959.2 -Part-Species1-CharaTempVib3=1917 -Part-Species1-CharaTempVib4=3378.1 -Part-Species1-Ediss_eV=5.43 -Part-Species1-HeatOfFormation_K=-47328.35 -Part-Species1-CharaTempRot = 0.6 -Part-Species1-SymmetryFactor = 2 -! =============================================================================== ! -! Species2, CO -! =============================================================================== ! -Part-Species2-SpeciesName=CO -Part-Species2-InteractionID=2 -Part-Species2-Tref=273 -Part-Species2-dref=4.17E-10 -Part-Species2-omega=0.24 -Part-Species2-CharaTempVib=3120.7 -Part-Species2-Ediss_eV=11.06 -Part-Species2-HeatOfFormation_K=-13293.70 -Part-Species2-CharaTempRot = 2.8 -Part-Species2-SymmetryFactor = 1 -! =============================================================================== ! -! Species3, O -! =============================================================================== ! -Part-Species3-SpeciesName=O -Part-Species3-InteractionID=1 -Part-Species3-Tref=273 -Part-Species3-dref=3.49E-10 -Part-Species3-omega=0.24 -Part-Species3-HeatOfFormation_K=29969.45 -! =============================================================================== ! -! Species4, O2 -! =============================================================================== ! -Part-Species4-SpeciesName=O2 -Part-Species4-InteractionID = 2 -Part-Species4-Tref =273 -Part-Species4-dref = 3.96E-10 -Part-Species4-omega=0.24 -Part-Species4-CharaTempVib=2272.8 -Part-Species4-Ediss_eV=5.115 -Part-Species4-CharaTempRot = 2.1 -Part-Species4-SymmetryFactor = 2 -Part-Species4-HeatOfFormation_K=0.0 - -! =============================================================================== ! -! Surface Chemistry -! =============================================================================== ! -Surface-NumOfReactions = 5 -! Adsorption of CO -Surface-Reaction1-SurfName = Adsorption_CO -Surface-Reaction1-Type = A -Surface-Reaction1-Reactants = (/2,0/) -Surface-Reaction1-NumOfBoundaries = 5 -Surface-Reaction1-Boundaries = (/1,3,4,5,6/) -Surface-Reaction1-StickingCoefficient = 1.0 -Surface-Reaction1-EqConstant = 0.6 -Surface-Reaction1-ReactHeat = 135 -Surface-Reaction1-HeatScaling = 61 -! Adsorption of O2 -Surface-Reaction2-SurfName = Adsorption_O2 -Surface-Reaction2-Type = A -Surface-Reaction2-Reactants = (/4,0/) -Surface-Reaction2-NumOfBoundaries = 5 -Surface-Reaction2-Boundaries = (/1,3,4,5,6/) -Surface-Reaction2-StickingCoefficient = 0.42 -Surface-Reaction2-DissOrder = 2 -Surface-Reaction2-EqConstant = 1.49 -Surface-Reaction2-ReactHeat = 230 -! Desorption of CO -Surface-Reaction3-SurfName = Desorption_CO -Surface-Reaction3-Type = D -Surface-Reaction3-Products = (/2,0/) -Surface-Reaction3-NumOfBoundaries = 5 -Surface-Reaction3-Boundaries = (/1,3,4,5,6/) -Surface-Reaction3-Energy = 147 -Surface-Reaction3-LateralInteraction = -153 -Surface-Reaction3-Ca = 16 -Surface-Reaction3-Cb = -15 -Surface-Reaction3-ReactHeat = 135 -Surface-Reaction3-HeatScaling = 61 -! Desorption of O2 -Surface-Reaction4-SurfName = Desorption_O2 -Surface-Reaction4-Type = D -Surface-Reaction4-Products = (/4,0/) -Surface-Reaction4-NumOfBoundaries = 5 -Surface-Reaction4-Boundaries = (/1,3,4,5,6/) -Surface-Reaction4-Energy = 222 -Surface-Reaction4-LateralInteraction = -69.6 -Surface-Reaction4-DissOrder = 2 -Surface-Reaction4-Ca = -1.7 -Surface-Reaction4-Cb = 0 -Surface-Reaction4-ReactHeat = 230 -! Langmuir-Hinshlewood formation of CO2 -Surface-Reaction5-SurfName = LH_Oxidation_CO -Surface-Reaction5-Type = LH -Surface-Reaction5-Reactants = (/2,4/) -Surface-Reaction5-Products = (/1,0/) -Surface-Reaction5-NumOfBoundaries = 5 -Surface-Reaction5-Boundaries = (/1,3,4,5,6/) -Surface-Reaction5-Energy = 84 -Surface-Reaction5-Prefactor = 2.5E-3 -Surface-Reaction5-ReactHeat = 71 diff --git a/tools/species_database/DSMC_H2.ini b/tools/species_database/DSMC_H2.ini deleted file mode 100755 index d4aa2f092..000000000 --- a/tools/species_database/DSMC_H2.ini +++ /dev/null @@ -1,167 +0,0 @@ - -! =============================================================================== ! -! Species1, H2 -! =============================================================================== ! -Part-Species1-SpeciesName = H2 -Part-Species1-MassIC = 3.34800E-27 -Part-Species1-ChargeIC = 0.0 -Part-Species1-InteractionID = 2 -Part-Species1-Tref = 1000 -Part-Species1-dref = 2.68E-10 -Part-Species1-omega = 0.407 -Part-Species1-HeatOfFormation_K = 0.0 -Part-Species1-CharaTempVib = 6332.37 -Part-Species1-Ediss_eV = 4.47 -! =============================================================================== ! -! Species2, H -! =============================================================================== ! -Part-Species2-SpeciesName = H -Part-Species2-MassIC = 1.67400E-27 -Part-Species2-ChargeIC = 0.0 -Part-Species2-InteractionID = 1 -Part-Species2-Tref = 1000 -Part-Species2-dref = 2.581E-10 -Part-Species2-omega = 0.407 -Part-Species2-HeatOfFormation_K = 26159.76 -! =============================================================================== ! -! Species3, e -! =============================================================================== ! -Part-Species3-SpeciesName = electron -Part-Species3-MassIC = 9.11E-31 -Part-Species3-ChargeIC = -1.60217653E-19 -Part-Species3-InteractionID = 4 -Part-Species3-Tref = 1000 -Part-Species3-dref = 2.817920E-15 -Part-Species3-omega = 0.407 -Part-Species3-UseCollXSec = T -Part-Species3-UseVibXSec = T -! =============================================================================== ! -! Species4, H2Ion -! =============================================================================== ! -Part-Species4-SpeciesName = H2Ion1 -Part-Species4-MassIC = 3.3470890E-27 -Part-Species4-ChargeIC = 1.60217653E-19 -Part-Species4-InteractionID = 20 -Part-Species4-Tref = 1000 -Part-Species4-dref = 3.883E-10 -Part-Species4-omega = 0.407 -Part-Species4-CharaTempVib = 3341.01 -Part-Species4-Ediss_eV = 2.65 -Part-Species4-PreviousState = 1 -Part-Species4-UseVibXSec = T -! =============================================================================== ! -! Species5, HIon -! =============================================================================== ! -Part-Species5-SpeciesName = HIon1 -Part-Species5-MassIC = 1.6730890E-27 -Part-Species5-ChargeIC = 1.60217653E-19 -Part-Species5-InteractionID = 10 -Part-Species5-Tref = 1000 -Part-Species5-dref = 3.912E-10 -Part-Species5-omega = 0.407 -Part-Species5-PreviousState = 2 -Part-Species5-UseCollXSec = T -Part-Species5-UseVibXSec = T -! =============================================================================== ! -! Species6, H3Ion -! =============================================================================== ! -Part-Species6-SpeciesName = H3Ion1 -Part-Species6-MassIC = 5.0210890E-27 -Part-Species6-ChargeIC = 1.60217653E-19 -Part-Species6-InteractionID = 20 -Part-Species6-PolyatomicMol = T -Part-Species6-NumOfAtoms = 3 -Part-Species6-LinearMolec = F -Part-Species6-Tref = 1000 -Part-Species6-dref = 4.5E-10 ! Guess -Part-Species6-omega = 0.407 -Part-Species6-CharaTempVib1 = 4572.92 -Part-Species6-CharaTempVib2 = 3627.94 -Part-Species6-CharaTempVib3 = 3627.94 -Part-Species6-Ediss_eV = 4.51 -Part-Species6-HeatOfFormation_K = 132803.52 -Part-Species6-UseCollXSec = T - -DSMC-NumOfReactions=2 -!--------------------------------------------------------------------! -!##################### Dissociation Reactions #######################! -!--------------------------------------------------------------------! -DSMC-Reaction1-ReactionName = TEST_REAC1 -DSMC-Reaction1-Reactants=(/5,6,0/) -DSMC-Reaction1-Products=(/4,0,0,0/) -DSMC-Reaction1-Arrhenius-Prefactor=7.8047E+17 ! A_f -DSMC-Reaction1-Arrhenius-Powerfactor=-8.2 ! B_f -DSMC-Reaction1-Activation-Energy_K=59200.0 ! E_a -DSMC-Reaction1-NumberOfNonReactives=3 -DSMC-Reaction1-NonReactiveSpecies=(/1,2,3/) - -DSMC-Reaction2-ReactionName = TEST_REAC2 -DSMC-Reaction2-Reactants=(/1,2,0/) -DSMC-Reaction2-Products=(/3,0,0,0/) -DSMC-Reaction2-Arrhenius-Prefactor=8.8047E+17 ! A_f -DSMC-Reaction2-Arrhenius-Powerfactor=-7.2 ! B_f -DSMC-Reaction2-Activation-Energy_K=200.0 ! E_a -DSMC-Reaction2-NumberOfNonReactives=2 -DSMC-Reaction2-NonReactiveSpecies=(/4,5/) -;! =============================================================================== ! -;! Reactions -;! =============================================================================== ! -;DSMC-NumOfReactions=11 -;! ---------------------------------------------------- -;! Electron impact -;! ---------------------------------------------------- -;! Dissociation: H2 + e --> H + H + e -;DSMC-Reaction4-ReactionModel = XSec -;DSMC-Reaction4-Reactants = (/1,3,0/) -;DSMC-Reaction4-Products = (/2,3,2,0/) -;! ---------------------------------------------------- -;! Ionization: H2 + e --> H2Ion1 + electron + electron -;DSMC-Reaction5-ReactionModel = XSec -;DSMC-Reaction5-Reactants = (/1,3,0/) -;DSMC-Reaction5-Products = (/4,3,3,0/) -;! ---------------------------------------------------- -;! Dissociative ionization: H2 + e --> H + HIon + electron + electron -;DSMC-Reaction6-ReactionModel = XSec -;DSMC-Reaction6-Reactants = (/1,3,0/) -;DSMC-Reaction6-Products = (/2,3,3,5/) -;! ---------------------------------------------------- -;! H2Ion1 impact -;! ---------------------------------------------------- -;! H3Ion formation: H2 + H2Ion1 --> H + H3Ion -;DSMC-Reaction7-ReactionModel = XSec -;DSMC-Reaction7-Reactants = (/1,4,0/) -;DSMC-Reaction7-Products = (/2,6,0,0/) -;! Charge exchange: H2 + H2Ion1 --> H2Ion1 + H2 -;DSMC-Reaction8-ReactionModel = XSec -;DSMC-Reaction8-Reactants = (/1,4,0/) -;DSMC-Reaction8-Products = (/4,1,0,0/) -;! Dissociative charge exchange: H2 + H2Ion1 --> H + H2 + HIon1 -;DSMC-Reaction9-ReactionModel = XSec -;DSMC-Reaction9-Reactants = (/1,4,0/) -;DSMC-Reaction9-Products = (/2,1,5,0/) -;! ---------------------------------------------------- -;! HIon1 impact -;! ---------------------------------------------------- -;! Charge exchange: H2 + HIon1 --> H2Ion1 + H -;DSMC-Reaction10-ReactionModel = XSec -;DSMC-Reaction10-Reactants = (/1,5,0/) -;DSMC-Reaction10-Products = (/4,2,0,0/) -;! ---------------------------------------------------- -;! H3Ion1 impact -;! ---------------------------------------------------- -;! Ionization: H2 + H3Ion1 --> H2Ion1 + H3Ion1 + electron -;DSMC-Reaction11-ReactionModel = XSec -;DSMC-Reaction11-Reactants = (/1,6,0/) -;DSMC-Reaction11-Products = (/4,6,3,0/) -;! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H + H2Ion1 -;DSMC-Reaction1-ReactionModel = XSec -;DSMC-Reaction1-Reactants = (/1,6,0/) -;DSMC-Reaction1-Products = (/1,2,4,0/) -;! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H + H + HIon1 -;DSMC-Reaction2-ReactionModel = XSec -;DSMC-Reaction2-Reactants = (/1,6,0/) -;DSMC-Reaction2-Products = (/1,2,2,5/) -;! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H2 + HIon1 -;DSMC-Reaction3-ReactionModel = XSec -;DSMC-Reaction3-Reactants = (/1,6,0/) -;DSMC-Reaction3-Products = (/1,1,5,0/) diff --git a/tools/species_database/DSMC_Surface.ini b/tools/species_database/DSMC_Surface.ini deleted file mode 100755 index 5405b555d..000000000 --- a/tools/species_database/DSMC_Surface.ini +++ /dev/null @@ -1,113 +0,0 @@ -! =============================================================================== ! -! Species1, CO2 -! =============================================================================== ! -Part-Species1-SpeciesName=CO2 -Part-Species1-PolyatomicMol=true -Part-Species1-InteractionID=2 -Part-Species1-Tref=273 -Part-Species1-dref=5.10E-10 -Part-Species1-omega=0.24 -Part-Species1-NumOfAtoms=3 -Part-Species1-LinearMolec=true -Part-Species1-CharaTempVib1=959.2 -Part-Species1-CharaTempVib2=959.2 -Part-Species1-CharaTempVib3=1917 -Part-Species1-CharaTempVib4=3378.1 -Part-Species1-Ediss_eV=5.43 -Part-Species1-HeatOfFormation_K=-47328.35 -Part-Species1-CharaTempRot = 0.6 -Part-Species1-SymmetryFactor = 2 -! =============================================================================== ! -! Species2, CO -! =============================================================================== ! -Part-Species2-SpeciesName=CO -Part-Species2-InteractionID=2 -Part-Species2-Tref=273 -Part-Species2-dref=4.17E-10 -Part-Species2-omega=0.24 -Part-Species2-CharaTempVib=3120.7 -Part-Species2-Ediss_eV=11.06 -Part-Species2-HeatOfFormation_K=-13293.70 -Part-Species2-CharaTempRot = 2.8 -Part-Species2-SymmetryFactor = 1 -! =============================================================================== ! -! Species3, O -! =============================================================================== ! -Part-Species3-SpeciesName=O -Part-Species3-InteractionID=1 -Part-Species3-Tref=273 -Part-Species3-dref=3.49E-10 -Part-Species3-omega=0.24 -Part-Species3-HeatOfFormation_K=29969.45 -! =============================================================================== ! -! Species4, O2 -! =============================================================================== ! -Part-Species4-SpeciesName=O2 -Part-Species4-InteractionID = 2 -Part-Species4-Tref =273 -Part-Species4-dref = 3.96E-10 -Part-Species4-omega=0.24 -Part-Species4-CharaTempVib=2272.8 -Part-Species4-Ediss_eV=5.115 -Part-Species4-CharaTempRot = 2.1 -Part-Species4-SymmetryFactor = 2 -Part-Species4-HeatOfFormation_K=0.0 - -! =============================================================================== ! -! Surface Chemistry -! =============================================================================== ! -Surface-NumOfReactions = 5 -! Adsorption of CO -Surface-Reaction1-SurfName = Adsorption_CO -Surface-Reaction1-Type = A -Surface-Reaction1-Reactants = (/2,0/) -Surface-Reaction1-NumOfBoundaries = 5 -Surface-Reaction1-Boundaries = (/1,3,4,5,6/) -Surface-Reaction1-StickingCoefficient = 1.0 -Surface-Reaction1-EqConstant = 0.6 -Surface-Reaction1-ReactHeat = 135 -Surface-Reaction1-HeatScaling = 61 -! Adsorption of O2 -Surface-Reaction2-SurfName = Adsorption_O2 -Surface-Reaction2-Type = A -Surface-Reaction2-Reactants = (/4,0/) -Surface-Reaction2-NumOfBoundaries = 5 -Surface-Reaction2-Boundaries = (/1,3,4,5,6/) -Surface-Reaction2-StickingCoefficient = 0.42 -Surface-Reaction2-DissOrder = 2 -Surface-Reaction2-EqConstant = 1.49 -Surface-Reaction2-ReactHeat = 230 -! Desorption of CO -Surface-Reaction3-SurfName = Desorption_CO -Surface-Reaction3-Type = D -Surface-Reaction3-Products = (/2,0/) -Surface-Reaction3-NumOfBoundaries = 5 -Surface-Reaction3-Boundaries = (/1,3,4,5,6/) -Surface-Reaction3-Energy = 147 -Surface-Reaction3-LateralInteraction = -153 -Surface-Reaction3-Ca = 16 -Surface-Reaction3-Cb = -15 -Surface-Reaction3-ReactHeat = 135 -Surface-Reaction3-HeatScaling = 61 -! Desorption of O2 -Surface-Reaction4-SurfName = Desorption_O2 -Surface-Reaction4-Type = D -Surface-Reaction4-Products = (/4,0/) -Surface-Reaction4-NumOfBoundaries = 5 -Surface-Reaction4-Boundaries = (/1,3,4,5,6/) -Surface-Reaction4-Energy = 222 -Surface-Reaction4-LateralInteraction = -69.6 -Surface-Reaction4-DissOrder = 2 -Surface-Reaction4-Ca = -1.7 -Surface-Reaction4-Cb = 0 -Surface-Reaction4-ReactHeat = 230 -! Langmuir-Hinshlewood formation of CO2 -Surface-Reaction5-SurfName = LH_Oxidation_CO -Surface-Reaction5-Type = LH -Surface-Reaction5-Reactants = (/2,4/) -Surface-Reaction5-Products = (/1,0/) -Surface-Reaction5-NumOfBoundaries = 5 -Surface-Reaction5-Boundaries = (/1,3,4,5,6/) -Surface-Reaction5-Energy = 84 -Surface-Reaction5-Prefactor = 2.5E-3 -Surface-Reaction5-ReactHeat = 71 diff --git a/tools/species_database/Electronic-State-Database.h5 b/tools/species_database/Electronic-State-Database.h5 deleted file mode 100755 index 2c33541c29d32f740f1dcd4d0db6abce71c4d510..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107464 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 Dg;CoU diff --git a/tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini b/tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini new file mode 100755 index 000000000..bc6e966e0 --- /dev/null +++ b/tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini @@ -0,0 +1,415 @@ +! =============================================================================== ! +! Species1, CO2 +! =============================================================================== ! +Part-Species1-SpeciesName=CO2 +Part-Species1-PolyatomicMol=true +Part-Species1-InteractionID=2 +Part-Species1-VHSReferenceTemp=273 +Part-Species1-VHSReferenceDiam=5.10E-10 +Part-Species1-omegaVHS=0.24 +Part-Species1-NumOfAtoms=3 +Part-Species1-LinearMolec=true +Part-Species1-CharaTempVib1=959.2 +Part-Species1-CharaTempVib2=959.2 +Part-Species1-CharaTempVib3=1917 +Part-Species1-CharaTempVib4=3378.1 +Part-Species1-Ediss_eV=5.43 +Part-Species1-HeatOfFormation_K=-47324.14 +Part-Species1-CharaTempRot = 0.6 +Part-Species1-SymmetryFactor = 2 +! =============================================================================== ! +! Species2, CO +! =============================================================================== ! +Part-Species2-SpeciesName=CO +Part-Species2-InteractionID=2 +Part-Species2-VHSReferenceTemp=273 +Part-Species2-VHSReferenceDiam=4.17E-10 +Part-Species2-omegaVHS=0.24 +Part-Species2-CharaTempVib=3120.7 +Part-Species2-Ediss_eV=11.06 +Part-Species2-HeatOfFormation_K=-13292.85 +Part-Species2-CharaTempRot = 2.8 +Part-Species2-SymmetryFactor = 1 +! =============================================================================== ! +! Species3, C2 +! =============================================================================== ! +Part-Species3-SpeciesName=C2 +Part-Species3-InteractionID=2 +Part-Species3-VHSReferenceTemp=273 +Part-Species3-VHSReferenceDiam=4.88E-10 +Part-Species3-omegaVHS=0.24 +Part-Species3-CharaTempVib=2667.7 +Part-Species3-Ediss_eV=6.22 +Part-Species3-HeatOfFormation_K=99667.24 +Part-Species3-CharaTempRot = 2.6 +Part-Species3-SymmetryFactor = 2 +! =============================================================================== ! +! Species4, CN +! =============================================================================== ! +Part-Species4-SpeciesName=CN +Part-Species4-InteractionID = 2 +Part-Species4-VHSReferenceTemp = 273 +Part-Species4-VHSReferenceDiam = 5.45E-10 +Part-Species4-omegaVHS=0.24 +Part-Species4-CharaTempVib=2975.4 +Part-Species4-Ediss_eV=7.72 +Part-Species4-HeatOfFormation_K=52921.01 +Part-Species4-CharaTempRot = 2.7 +Part-Species4-SymmetryFactor = 1 +! =============================================================================== ! +! Species5, N2 +! =============================================================================== ! +Part-Species5-SpeciesName=N2 +Part-Species5-InteractionID = 2 +Part-Species5-VHSReferenceTemp =273 +Part-Species5-VHSReferenceDiam = 4.17E-10 +Part-Species5-omegaVHS=0.24 +Part-Species5-CharaTempVib=3393.3 +Part-Species5-Ediss_eV=9.759 +Part-Species5-CharaTempRot = 2.87 +Part-Species5-SymmetryFactor = 2 +Part-Species5-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species6, O2 +! =============================================================================== ! +Part-Species6-SpeciesName=O2 +Part-Species6-InteractionID=2 +Part-Species6-VHSReferenceTemp=273 +Part-Species6-VHSReferenceDiam=3.98E-10 +Part-Species6-omegaVHS=0.24 +Part-Species6-CharaTempVib=2272.2 +Part-Species6-Ediss_eV=5.09 +Part-Species6-HeatOfFormation_K= 0.0 +Part-Species6-CharaTempRot = 2.1 +Part-Species6-SymmetryFactor = 2 +! =============================================================================== ! +! Species7, NO +! =============================================================================== ! +Part-Species7-SpeciesName=NO +Part-Species7-InteractionID = 2 +Part-Species7-VHSReferenceTemp =273 +Part-Species7-VHSReferenceDiam = 4.08E-10 +Part-Species7-omegaVHS=0.24 +Part-Species7-CharaTempVib=2738.8 +Part-Species7-Ediss_eV=6.496 +Part-Species7-CharaTempRot = 2.4 +Part-Species7-SymmetryFactor = 1 +Part-Species7-HeatOfFormation_K=10959.33 +! =============================================================================== ! +! Species8, C +! =============================================================================== ! +Part-Species8-SpeciesName=C +Part-Species8-InteractionID=1 +Part-Species8-VHSReferenceTemp=273 +Part-Species8-VHSReferenceDiam=4.67E-10 +Part-Species8-omegaVHS=0.24 +Part-Species8-HeatOfFormation_K=86221.52 +! =============================================================================== ! +! Species9, N +! =============================================================================== ! +Part-Species9-SpeciesName=N +Part-Species9-InteractionID = 1 +Part-Species9-VHSReferenceTemp =273 ! K +Part-Species9-VHSReferenceDiam = 3.0E-10 ! m +Part-Species9-omegaVHS=0.24 +Part-Species9-HeatOfFormation_K=56821.44 +! =============================================================================== ! +! Species10, O +! =============================================================================== ! +Part-Species10-SpeciesName=O +Part-Species10-InteractionID=1 +Part-Species10-VHSReferenceTemp=273 +Part-Species10-VHSReferenceDiam=3.49E-10 +Part-Species10-omegaVHS=0.24 +Part-Species10-HeatOfFormation_K=29975.34 +! =============================================================================== ! +! Species11, Ar +! =============================================================================== ! +Part-Species11-SpeciesName=Ar +Part-Species11-InteractionID = 1 +Part-Species11-VHSReferenceTemp = 273 +Part-Species11-VHSReferenceDiam = 4.05E-10 +Part-Species11-omegaVHS=0.24 +Part-Species11-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=27 + +DSMC-Reaction1-ReactionName=CO2+M_CO+O+M +DSMC-Reaction2-ReactionName=CO2+A_CO+O+A +DSMC-Reaction4-ReactionName=CO+M_C+O+M +DSMC-Reaction5-ReactionName=CO+A_C+O+A +DSMC-Reaction7-ReactionName=C2+M_C+C+M +DSMC-Reaction8-ReactionName=CN+M_C+N+M +DSMC-Reaction9-ReactionName=N2+M_N+N+M +DSMC-Reaction10-ReactionName=N2+A_N+N+A +DSMC-Reaction11-ReactionName=NO+M_N+O+M +DSMC-Reaction12-ReactionName=NO+A_N+O+A +DSMC-Reaction13-ReactionName=O2+M_O+O+M +DSMC-Reaction14-ReactionName=O2+A_O+O+A + +! ============ ! +! Dissociation CO2 +! ============ ! +!Reaction1 (CO2 + molecules -> CO + O + molecules) +DSMC-Reaction1-ReactionType=D +DSMC-Reaction1-Reactants=(/1,0,0/) +DSMC-Reaction1-Products=(/2,0,10/) +DSMC-Reaction1-Arrhenius-Prefactor=1.15E-08 +DSMC-Reaction1-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction1-Activation-Energy_K=63280 +DSMC-Reaction1-NumberOfNonReactives=7 +DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7/) + +!Reaction2 (CO2 + atoms -> CO + O + atoms) +DSMC-Reaction2-ReactionType=D +DSMC-Reaction2-Reactants=(/1,0,0/) +DSMC-Reaction2-Products=(/2,0,10/) +DSMC-Reaction2-Arrhenius-Prefactor=2.29E-08 +DSMC-Reaction2-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction2-Activation-Energy_K=63280 +DSMC-Reaction2-NumberOfNonReactives=3 +DSMC-Reaction2-NonReactiveSpecies=(/8,9,10/) + +!Reaction3 (CO2 + Ar -> CO + O + Ar) +DSMC-Reaction3-ReactionType=D +DSMC-Reaction3-Reactants=(/1,11,0/) +DSMC-Reaction3-Products=(/2,11,10/) +DSMC-Reaction3-Arrhenius-Prefactor=1.15E-09 +DSMC-Reaction3-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction3-Activation-Energy_K=63280 + +! ============ ! +! Dissociation CO +! ============ ! +!Reaction4 (CO + molecules -> C + O + molecules) +DSMC-Reaction4-ReactionType=D +DSMC-Reaction4-Reactants=(/2,0,0/) +DSMC-Reaction4-Products=(/8,0,10/) +DSMC-Reaction4-Arrhenius-Prefactor=1.99E-09 +DSMC-Reaction4-Arrhenius-Powerfactor=-1 +DSMC-Reaction4-Activation-Energy_K=129000 +DSMC-Reaction4-NumberOfNonReactives=7 +DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7/) + +!Reaction5 (CO + atoms -> C + O + atoms) +DSMC-Reaction5-ReactionType=D +DSMC-Reaction5-Reactants=(/2,0,0/) +DSMC-Reaction5-Products=(/8,0,10/) +DSMC-Reaction5-Arrhenius-Prefactor=2.99E-09 +DSMC-Reaction5-Arrhenius-Powerfactor=-1 +DSMC-Reaction5-Activation-Energy_K=129000 +DSMC-Reaction5-NumberOfNonReactives=3 +DSMC-Reaction5-NonReactiveSpecies=(/8,9,10/) + +!Reaction6 (CO + Ar -> C + O + Ar) +DSMC-Reaction6-ReactionType=D +DSMC-Reaction6-Reactants=(/2,11,0/) +DSMC-Reaction6-Products=(/8,11,10/) +DSMC-Reaction6-Arrhenius-Prefactor=1.99E-10 +DSMC-Reaction6-Arrhenius-Powerfactor=-1 +DSMC-Reaction6-Activation-Energy_K=129000 + +! ============ ! +! Dissociation C2 +! ============ ! +!Reaction7 (C2 + M -> C + C + M) +DSMC-Reaction7-ReactionType=D +DSMC-Reaction7-Reactants=(/3,0,0/) +DSMC-Reaction7-Products=(/8,0,8/) +DSMC-Reaction7-Arrhenius-Prefactor=7.47E-12 +DSMC-Reaction7-Arrhenius-Powerfactor=-1 +DSMC-Reaction7-Activation-Energy_K=71500 +DSMC-Reaction7-NumberOfNonReactives=11 +DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11/) + +! ============ ! +! Dissociation CN +! ============ ! +!Reaction8 (CN + M -> C + N + M) +DSMC-Reaction8-ReactionType=D +DSMC-Reaction8-Reactants=(/4,0,0/) +DSMC-Reaction8-Products=(/8,0,9/) +DSMC-Reaction8-Arrhenius-Prefactor=9.96E-15 +DSMC-Reaction8-Arrhenius-Powerfactor=-0.4 +DSMC-Reaction8-Activation-Energy_K=71000 +DSMC-Reaction8-NumberOfNonReactives=11 +DSMC-Reaction8-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11/) + +! ============ ! +! Dissociation N2 +! ============ ! +!Reaction9 (N2 + molecules/Ar -> N + N + molecules/Ar) +DSMC-Reaction9-ReactionType=D +DSMC-Reaction9-Reactants=(/5,0,0/) +DSMC-Reaction9-Products=(/9,0,9/) +DSMC-Reaction9-Arrhenius-Prefactor=1.16E-08 +DSMC-Reaction9-Arrhenius-Powerfactor=-1.6 +DSMC-Reaction9-Activation-Energy_K=113200 +DSMC-Reaction9-NumberOfNonReactives=8 +DSMC-Reaction9-NonReactiveSpecies=(/1,2,3,4,5,6,7,11/) + +!Reaction10 (N2 + atoms -> N + N + atoms) +DSMC-Reaction10-ReactionType=D +DSMC-Reaction10-Reactants=(/5,0,0/) +DSMC-Reaction10-Products=(/9,0,9/) +DSMC-Reaction10-Arrhenius-Prefactor=4.98E-08 +DSMC-Reaction10-Arrhenius-Powerfactor=-1.6 +DSMC-Reaction10-Activation-Energy_K=113200 +DSMC-Reaction10-NumberOfNonReactives=3 +DSMC-Reaction10-NonReactiveSpecies=(/8,9,10/) + +! ============ ! +! Dissociation NO +! ============ ! +!Reaction11 (NO + C2/N2/O2/CN/CO/Ar -> N + O + C2/N2/O2/CN/CO/Ar) +DSMC-Reaction11-ReactionType=D +DSMC-Reaction11-Reactants=(/7,0,0/) +DSMC-Reaction11-Products=(/9,0,10/) +DSMC-Reaction11-Arrhenius-Prefactor=3.32E-15 +DSMC-Reaction11-Arrhenius-Powerfactor=0 +DSMC-Reaction11-Activation-Energy_K=75500 +DSMC-Reaction11-NumberOfNonReactives=6 +DSMC-Reaction11-NonReactiveSpecies=(/2,3,4,5,6,11/) + +!Reaction12 (NO + NO/CO2/atoms -> N + O + NO/CO2/atoms) +DSMC-Reaction12-ReactionType=D +DSMC-Reaction12-Reactants=(/7,0,0/) +DSMC-Reaction12-Products=(/9,0,10/) +DSMC-Reaction12-Arrhenius-Prefactor=7.31E-14 +DSMC-Reaction12-Arrhenius-Powerfactor=0 +DSMC-Reaction12-Activation-Energy_K=75500 +DSMC-Reaction12-NumberOfNonReactives=5 +DSMC-Reaction12-NonReactiveSpecies=(/1,7,8,9,10/) + +! ============ ! +! Dissociation O2 +! ============ ! +!Reaction13 (O2 + molecules/Ar -> O + O + molecules/Ar) +DSMC-Reaction13-ReactionType=D +DSMC-Reaction13-Reactants=(/6,0,0/) +DSMC-Reaction13-Products=(/10,0,10/) +DSMC-Reaction13-Arrhenius-Prefactor=3.32E-09 +DSMC-Reaction13-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction13-Activation-Energy_K=59360 +DSMC-Reaction13-NumberOfNonReactives=8 +DSMC-Reaction13-NonReactiveSpecies=(/1,2,3,4,5,6,7,11/) + +!Reaction14 (O2 + atoms -> O + O + atoms) +DSMC-Reaction14-ReactionType=D +DSMC-Reaction14-Reactants=(/6,0,0/) +DSMC-Reaction14-Products=(/10,0,10/) +DSMC-Reaction14-Arrhenius-Prefactor=1.66E-08 +DSMC-Reaction14-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction14-Activation-Energy_K=59360 +DSMC-Reaction14-NumberOfNonReactives=3 +DSMC-Reaction14-NonReactiveSpecies=(/8,9,10/) + +! ============ ! +! Exchange Reactions +! ============ ! + +!Reaction15 (CO2 + O -> CO + O2) +DSMC-Reaction15-ReactionType=E +DSMC-Reaction15-Reactants=(/1,10,0/) +DSMC-Reaction15-Products=(/2,6,0/) +DSMC-Reaction15-Arrhenius-Prefactor=4.50E-16 +DSMC-Reaction15-Arrhenius-Powerfactor=0 +DSMC-Reaction15-Activation-Energy_K=33800 + +!Reaction16 (CO + C -> C2 + O) +DSMC-Reaction16-ReactionType=E +DSMC-Reaction16-Reactants=(/2,8,0/) +DSMC-Reaction16-Products=(/3,10,0/) +DSMC-Reaction16-Arrhenius-Prefactor=3.99E-13 +DSMC-Reaction16-Arrhenius-Powerfactor=-1 +DSMC-Reaction16-Activation-Energy_K=58000 + +!Reaction17 (CO + N -> CN + O) +DSMC-Reaction17-ReactionType=E +DSMC-Reaction17-Reactants=(/2,9,0/) +DSMC-Reaction17-Products=(/4,10,0/) +DSMC-Reaction17-Arrhenius-Prefactor=1.66E-15 +DSMC-Reaction17-Arrhenius-Powerfactor=0 +DSMC-Reaction17-Activation-Energy_K=38600 + +!Reaction18 (CO + NO -> CO2 + N) +DSMC-Reaction18-ReactionType=E +DSMC-Reaction18-Reactants=(/2,7,0/) +DSMC-Reaction18-Products=(/1,9,0/) +DSMC-Reaction18-Arrhenius-Prefactor=4.98E-24 +DSMC-Reaction18-Arrhenius-Powerfactor=0.88 +DSMC-Reaction18-Activation-Energy_K=13300 + +!Reaction19 (CO + O -> C + O2) +DSMC-Reaction19-ReactionType=E +DSMC-Reaction19-Reactants=(/2,10,0/) +DSMC-Reaction19-Products=(/6,8,0/) +DSMC-Reaction19-Arrhenius-Prefactor=6.48E-17 +DSMC-Reaction19-Arrhenius-Powerfactor=-0.18 +DSMC-Reaction19-Activation-Energy_K=69200 + +!Reaction20 (C2 + N2 -> CN + CN) +DSMC-Reaction20-ReactionType=E +DSMC-Reaction20-Reactants=(/3,5,0/) +DSMC-Reaction20-Products=(/4,4,0/) +DSMC-Reaction20-Arrhenius-Prefactor=2.49E-17 +DSMC-Reaction20-Arrhenius-Powerfactor=0 +DSMC-Reaction20-Activation-Energy_K=21000 + +!Reaction21 (CN + C -> C2 + N) +DSMC-Reaction21-ReactionType=E +DSMC-Reaction21-Reactants=(/4,8,0/) +DSMC-Reaction21-Products=(/3,9,0/) +DSMC-Reaction21-Arrhenius-Prefactor=4.98E-16 +DSMC-Reaction21-Arrhenius-Powerfactor=0 +DSMC-Reaction21-Activation-Energy_K=18100 + +!Reaction22 (CN + O -> NO + C) +DSMC-Reaction22-ReactionType=E +DSMC-Reaction22-Reactants=(/4,10,0/) +DSMC-Reaction22-Products=(/7,8,0/) +DSMC-Reaction22-Arrhenius-Prefactor=2.66E-18 +DSMC-Reaction22-Arrhenius-Powerfactor=0.1 +DSMC-Reaction22-Activation-Energy_K=14600 + +!Reaction23 (CO + N -> NO + C) +DSMC-Reaction23-ReactionType=E +DSMC-Reaction23-Reactants=(/2,9,0/) +DSMC-Reaction23-Products=(/7,8,0/) +DSMC-Reaction23-Arrhenius-Prefactor=1.83E-16 +DSMC-Reaction23-Arrhenius-Powerfactor=0.07 +DSMC-Reaction23-Activation-Energy_K=53500 + +!Reaction24 (N2 + C -> CN + N) +DSMC-Reaction24-ReactionType=E +DSMC-Reaction24-Reactants=(/5,8,0/) +DSMC-Reaction24-Products=(/4,9,0/) +DSMC-Reaction24-Arrhenius-Prefactor=1.83E-16 +DSMC-Reaction24-Arrhenius-Powerfactor=-0.11 +DSMC-Reaction24-Activation-Energy_K=23200 + +!Reaction25 (N2 + CO -> CN + NO) +DSMC-Reaction25-ReactionType=E +DSMC-Reaction25-Reactants=(/2,5,0/) +DSMC-Reaction25-Products=(/4,7,0/) +DSMC-Reaction25-Arrhenius-Prefactor=1.99E-14 +DSMC-Reaction25-Arrhenius-Powerfactor=-1.23 +DSMC-Reaction25-Activation-Energy_K=77000 + +!Reaction26 (N2 + O -> NO + N) +DSMC-Reaction26-ReactionType=E +DSMC-Reaction26-Reactants=(/5,10,0/) +DSMC-Reaction26-Products=(/7,9,0/) +DSMC-Reaction26-Arrhenius-Prefactor=9.96E-17 +DSMC-Reaction26-Arrhenius-Powerfactor=0.1 +DSMC-Reaction26-Activation-Energy_K=38000 + +!Reaction27 (O2 + N -> NO + O) +DSMC-Reaction27-ReactionType=E +DSMC-Reaction27-Reactants=(/6,9,0/) +DSMC-Reaction27-Products=(/7,10,0/) +DSMC-Reaction27-Arrhenius-Prefactor=4.13E-21 +DSMC-Reaction27-Arrhenius-Powerfactor=1.18 +DSMC-Reaction27-Activation-Energy_K=4010 diff --git a/tools/species_database/Mars_16Spec_31Reac_Park1994.ini b/tools/species_database/Mars_16Spec_31Reac_Park1994.ini new file mode 100755 index 000000000..155d8d890 --- /dev/null +++ b/tools/species_database/Mars_16Spec_31Reac_Park1994.ini @@ -0,0 +1,507 @@ +! =============================================================================== ! +! Species1, CO2 +! =============================================================================== ! +Part-Species1-SpeciesName=CO2 +Part-Species1-PolyatomicMol=true +Part-Species1-InteractionID=2 +Part-Species1-VHSReferenceTemp=273 +Part-Species1-VHSReferenceDiam=5.10E-10 +Part-Species1-omegaVHS=0.24 +Part-Species1-NumOfAtoms=3 +Part-Species1-LinearMolec=true +Part-Species1-CharaTempVib1=959.2 +Part-Species1-CharaTempVib2=959.2 +Part-Species1-CharaTempVib3=1917 +Part-Species1-CharaTempVib4=3378.1 +Part-Species1-Ediss_eV=5.43 +Part-Species1-HeatOfFormation_K=-47328.35 +Part-Species1-CharaTempRot = 0.6 +Part-Species1-SymmetryFactor = 2 +! =============================================================================== ! +! Species2, CO +! =============================================================================== ! +Part-Species2-SpeciesName=CO +Part-Species2-InteractionID=2 +Part-Species2-VHSReferenceTemp=273 +Part-Species2-VHSReferenceDiam=4.17E-10 +Part-Species2-omegaVHS=0.24 +Part-Species2-CharaTempVib=3120.7 +Part-Species2-Ediss_eV=11.06 +Part-Species2-HeatOfFormation_K=-13293.70 +Part-Species2-CharaTempRot = 2.8 +Part-Species2-SymmetryFactor = 1 +! =============================================================================== ! +! Species3, C2 +! =============================================================================== ! +Part-Species3-SpeciesName=C2 +Part-Species3-InteractionID=2 +Part-Species3-VHSReferenceTemp=273 +Part-Species3-VHSReferenceDiam=4.88E-10 +Part-Species3-omegaVHS=0.24 +Part-Species3-CharaTempVib=2667.7 +Part-Species3-Ediss_eV=6.22 +Part-Species3-HeatOfFormation_K=100756.90 +Part-Species3-CharaTempRot = 2.6 +Part-Species3-SymmetryFactor = 2 +! =============================================================================== ! +! Species4, C +! =============================================================================== ! +Part-Species4-SpeciesName=C +Part-Species4-InteractionID=1 +Part-Species4-VHSReferenceTemp=273 +Part-Species4-VHSReferenceDiam=4.67E-10 +Part-Species4-omegaVHS=0.24 +Part-Species4-HeatOfFormation_K=86195.54 +! =============================================================================== ! +! Species5, N2 +! =============================================================================== ! +Part-Species5-SpeciesName=N2 +Part-Species5-InteractionID = 2 +Part-Species5-VHSReferenceTemp =273 +Part-Species5-VHSReferenceDiam = 4.17E-10 +Part-Species5-omegaVHS=0.24 +Part-Species5-CharaTempVib=3393.3 +Part-Species5-Ediss_eV=9.759 +Part-Species5-CharaTempRot = 2.87 +Part-Species5-SymmetryFactor = 2 +Part-Species5-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species6, O +! =============================================================================== ! +Part-Species6-SpeciesName=O +Part-Species6-InteractionID=1 +Part-Species6-VHSReferenceTemp=273 +Part-Species6-VHSReferenceDiam=3.49E-10 +Part-Species6-omegaVHS=0.24 +Part-Species6-HeatOfFormation_K=29969.45 +! =============================================================================== ! +! Species7, O2 +! =============================================================================== ! +Part-Species7-SpeciesName=O2 +Part-Species7-InteractionID=2 +Part-Species7-VHSReferenceTemp=273 +Part-Species7-VHSReferenceDiam=3.98E-10 +Part-Species7-omegaVHS=0.24 +Part-Species7-CharaTempVib=2272.2 +Part-Species7-Ediss_eV=5.09 +Part-Species7-HeatOfFormation_K= 0.0 +Part-Species7-CharaTempRot = 2.1 +Part-Species7-SymmetryFactor = 2 +! =============================================================================== ! +! Species8, CN +! =============================================================================== ! +Part-Species8-SpeciesName=CN +Part-Species8-InteractionID = 2 +Part-Species8-VHSReferenceTemp = 273 +Part-Species8-VHSReferenceDiam = 5.45E-10 +Part-Species8-omegaVHS=0.24 +Part-Species8-CharaTempVib=2975.4 +Part-Species8-Ediss_eV=7.72 +Part-Species8-HeatOfFormation_K=52323.23 +Part-Species8-CharaTempRot = 2.7 +Part-Species8-SymmetryFactor = 1 +! =============================================================================== ! +! Species9, NO +! =============================================================================== ! +Part-Species9-SpeciesName=NO +Part-Species9-InteractionID = 2 +Part-Species9-VHSReferenceTemp =273 +Part-Species9-VHSReferenceDiam = 4.08E-10 +Part-Species9-omegaVHS=0.24 +Part-Species9-CharaTempVib=2738.8 +Part-Species9-Ediss_eV=6.496 +Part-Species9-CharaTempRot = 2.4 +Part-Species9-SymmetryFactor = 1 +Part-Species9-HeatOfFormation_K=10859.38 +! =============================================================================== ! +! Species10, N +! =============================================================================== ! +Part-Species10-SpeciesName=N +Part-Species10-InteractionID = 1 +Part-Species10-VHSReferenceTemp =273 ! K +Part-Species10-VHSReferenceDiam = 3.0E-10 ! m +Part-Species10-omegaVHS=0.24 +Part-Species10-HeatOfFormation_K=56850.30 +! =============================================================================== ! +! Species11, CO+ +! =============================================================================== ! +Part-Species11-SpeciesName=COIon1 +Part-Species11-InteractionID=20 +Part-Species11-VHSReferenceTemp=273 +Part-Species11-VHSReferenceDiam=4.17E-10 +Part-Species11-omegaVHS=0.24 +Part-Species11-CharaTempVib=3120.7 +Part-Species11-Ediss_eV=11.06 +Part-Species11-HeatOfFormation_K=-13293.70 +Part-Species11-CharaTempRot = 2.8 +Part-Species11-SymmetryFactor = 1 +! =============================================================================== ! +! Species12, NO+ +! =============================================================================== ! +Part-Species12-SpeciesName=NOIon1 +Part-Species12-InteractionID = 20 +Part-Species12-VHSReferenceTemp =273 +Part-Species12-VHSReferenceDiam = 4.08E-10 +Part-Species12-omegaVHS=0.24 +Part-Species12-CharaTempVib=3419.2 +Part-Species12-Ediss_eV=6.496 +Part-Species12-CharaTempRot = 2.9 +Part-Species12-SymmetryFactor = 1 +Part-Species12-HeatOfFormation_K=10859.38 +! =============================================================================== ! +! Species13, C+ +! =============================================================================== ! +Part-Species13-SpeciesName=CIon1 +Part-Species13-InteractionID=10 +Part-Species13-VHSReferenceTemp=273 +Part-Species13-VHSReferenceDiam=4.67E-10 +Part-Species13-omegaVHS=0.24 +Part-Species13-HeatOfFormation_K=86195.54 +! =============================================================================== ! +! Species14, O+ +! =============================================================================== ! +Part-Species14-SpeciesName=OIon1 +Part-Species14-InteractionID = 10 +Part-Species14-VHSReferenceTemp =273 +Part-Species14-VHSReferenceDiam = 3.0E-10 +Part-Species14-omegaVHS=0.24 +Part-Species14-HeatOfFormation_K=29969.45 +! =============================================================================== ! +! Species15, e +! =============================================================================== ! +Part-Species15-InteractionID = 4 +Part-Species15-VHSReferenceTemp =273 +Part-Species15-VHSReferenceDiam = 2.817920E-15 +Part-Species15-omegaVHS=0.24 +Part-Species15-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species16, Ar +! =============================================================================== ! +Part-Species16-SpeciesName=Ar +Part-Species16-InteractionID = 1 +Part-Species16-VHSReferenceTemp = 273 +Part-Species16-VHSReferenceDiam = 4.05E-10 +Part-Species16-omegaVHS=0.24 +Part-Species16-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=31 + +DSMC-Reaction1-ReactionName=CO2+M_CO+O+M +DSMC-Reaction2-ReactionName=CO2+A_CO+O+A +DSMC-Reaction4-ReactionName=CO+M_C+O+M +DSMC-Reaction5-ReactionName=CO+A_C+O+A +DSMC-Reaction7-ReactionName=C2+M_C+C+M +DSMC-Reaction8-ReactionName=N2+M_N+N+M +DSMC-Reaction9-ReactionName=N2+A_N+N+A +DSMC-Reaction11-ReactionName=O2+M_O+O+M +DSMC-Reaction12-ReactionName=O2+A_O+O+A +DSMC-Reaction13-ReactionName=CN+M_C+N+M +DSMC-Reaction14-ReactionName=NO+M_N+O+M +DSMC-Reaction15-ReactionName=NO+A_N+O+A + +! ============ ! +! Dissociation CO2 +! ============ ! +!Reaction1 (CO2 + molecules -> CO + O + molecules) +DSMC-Reaction1-ReactionType=D +DSMC-Reaction1-Reactants=(/1,0,0/) +DSMC-Reaction1-Products=(/2,0,6/) +DSMC-Reaction1-Arrhenius-Prefactor=1.1457721009475E-08 +DSMC-Reaction1-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction1-Activation-Energy_K=63275 +DSMC-Reaction1-NumberOfNonReactives=9 +DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,5,7,8,9,11,12/) + +!Reaction2 (CO2 + atoms -> CO + O + atoms) +DSMC-Reaction2-ReactionType=D +DSMC-Reaction2-Reactants=(/1,0,0/) +DSMC-Reaction2-Products=(/2,0,6/) +DSMC-Reaction2-Arrhenius-Prefactor=2.32475498742972E-08 +DSMC-Reaction2-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction2-Activation-Energy_K=63275 +DSMC-Reaction2-NumberOfNonReactives=5 +DSMC-Reaction2-NonReactiveSpecies=(/4,6,10,13,14/) + +!Reaction3 (CO2 + Ar -> CO + O + Ar) +DSMC-Reaction3-ReactionType=D +DSMC-Reaction3-Reactants=(/1,16,0/) +DSMC-Reaction3-Products=(/2,16,6/) +DSMC-Reaction3-Arrhenius-Prefactor=1.1457721009475E-09 +DSMC-Reaction3-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction3-Activation-Energy_K=63275 + +! ============ ! +! Dissociation CO +! ============ ! +!Reaction4 (CO + molecules -> C + O + molecules) +DSMC-Reaction4-ReactionType=D +DSMC-Reaction4-Reactants=(/2,0,0/) +DSMC-Reaction4-Products=(/4,0,6/) +DSMC-Reaction4-Arrhenius-Prefactor=3.81924033649168E-10 +DSMC-Reaction4-Arrhenius-Powerfactor=-1 +DSMC-Reaction4-Activation-Energy_K=129000 +DSMC-Reaction4-NumberOfNonReactives=9 +DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,5,7,8,9,11,12/) + +!Reaction5 (CO + atoms -> C + O + atoms) +DSMC-Reaction5-ReactionType=D +DSMC-Reaction5-Reactants=(/2,0,0/) +DSMC-Reaction5-Products=(/4,0,6/) +DSMC-Reaction5-Arrhenius-Prefactor=5.64583354090074E-10 +DSMC-Reaction5-Arrhenius-Powerfactor=-1 +DSMC-Reaction5-Activation-Energy_K=129000 +DSMC-Reaction5-NumberOfNonReactives=5 +DSMC-Reaction5-NonReactiveSpecies=(/4,6,10,13,14/) + +!Reaction6 (CO + Ar -> C + O + Ar) +DSMC-Reaction6-ReactionType=D +DSMC-Reaction6-Reactants=(/2,16,0/) +DSMC-Reaction6-Products=(/4,16,6/) +DSMC-Reaction6-Arrhenius-Prefactor=3.81924033649168E-11 +DSMC-Reaction6-Arrhenius-Powerfactor=-1 +DSMC-Reaction6-Activation-Energy_K=129000 + +! ============ ! +! Dissociation C2 +! ============ ! +!Reaction7 (C2 + M -> C + C + M) +DSMC-Reaction7-ReactionType=D +DSMC-Reaction7-Reactants=(/3,0,0/) +DSMC-Reaction7-Products=(/4,0,4/) +DSMC-Reaction7-Arrhenius-Prefactor=6.1439953239214E-16 +DSMC-Reaction7-Arrhenius-Powerfactor=0 +DSMC-Reaction7-Activation-Energy_K=69900 +DSMC-Reaction7-NumberOfNonReactives=15 +DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,16/) + +! ============ ! +! Dissociation N2 +! ============ ! +!Reaction8 (N2 + molecules/Ar -> N + N + molecules/Ar) +DSMC-Reaction8-ReactionType=D +DSMC-Reaction8-Reactants=(/5,0,0/) +DSMC-Reaction8-Products=(/10,0,10/) +DSMC-Reaction8-Arrhenius-Prefactor=1.16237749371486E-08 +DSMC-Reaction8-Arrhenius-Powerfactor=-1.6 +DSMC-Reaction8-Activation-Energy_K=113200 +DSMC-Reaction8-NumberOfNonReactives=10 +DSMC-Reaction8-NonReactiveSpecies=(/1,2,3,5,7,8,9,11,12,16/) + +!Reaction9 (N2 + atoms -> N + N + atoms) +DSMC-Reaction9-ReactionType=D +DSMC-Reaction9-Reactants=(/5,0,0/) +DSMC-Reaction9-Products=(/10,0,10/) +DSMC-Reaction9-Arrhenius-Prefactor=4.98161783020654E-08 +DSMC-Reaction9-Arrhenius-Powerfactor=-1.6 +DSMC-Reaction9-Activation-Energy_K=113200 +DSMC-Reaction9-NumberOfNonReactives=5 +DSMC-Reaction9-NonReactiveSpecies=(/4,6,10,13,14/) + +!Reaction10 (N2 + e -> N + N + e) +DSMC-Reaction10-ReactionType=D +DSMC-Reaction10-Reactants=(/5,15,0/) +DSMC-Reaction10-Products=(/10,15,10/) +DSMC-Reaction10-Arrhenius-Prefactor=1.99264713208262E-05 +DSMC-Reaction10-Arrhenius-Powerfactor=-1.6 +DSMC-Reaction10-Activation-Energy_K=113200 + +! ============ ! +! Dissociation O2 +! ============ ! +!Reaction11 (O2 + molecules/Ar -> O + O + molecules/Ar) +DSMC-Reaction11-ReactionType=D +DSMC-Reaction11-Reactants=(/7,0,0/) +DSMC-Reaction11-Products=(/6,0,6/) +DSMC-Reaction11-Arrhenius-Prefactor=3.32107855347103E-09 +DSMC-Reaction11-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction11-Activation-Energy_K=59750 +DSMC-Reaction11-NumberOfNonReactives=10 +DSMC-Reaction11-NonReactiveSpecies=(/1,2,3,5,7,8,9,11,12,16/) + +!Reaction12 (O2 + atoms -> O + O + atoms) +DSMC-Reaction12-ReactionType=D +DSMC-Reaction12-Reactants=(/7,0,0/) +DSMC-Reaction12-Products=(/6,0,6/) +DSMC-Reaction12-Arrhenius-Prefactor=1.66053927673551E-08 +DSMC-Reaction12-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction12-Activation-Energy_K=59750 +DSMC-Reaction12-NumberOfNonReactives=5 +DSMC-Reaction12-NonReactiveSpecies=(/4,6,10,13,14/) + +! ============ ! +! Dissociation CN +! ============ ! +!Reaction13 (CN + M -> C + N + M) +DSMC-Reaction13-ReactionType=D +DSMC-Reaction13-Reactants=(/8,0,0/) +DSMC-Reaction13-Products=(/4,0,10/) +DSMC-Reaction13-Arrhenius-Prefactor=4.15134819183878E-16 +DSMC-Reaction13-Arrhenius-Powerfactor=0 +DSMC-Reaction13-Activation-Energy_K=71000 +DSMC-Reaction13-NumberOfNonReactives=15 +DSMC-Reaction13-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,16/) + +! ============ ! +! Dissociation NO +! ============ ! +!Reaction14 (NO + C2/N2/O2/CN/CO/Ar -> N + O + C2/N2/O2/CN/CO/Ar) +DSMC-Reaction14-ReactionType=D +DSMC-Reaction14-Reactants=(/9,0,0/) +DSMC-Reaction14-Products=(/10,0,6/) +DSMC-Reaction14-Arrhenius-Prefactor=8.30269638367756E-15 +DSMC-Reaction14-Arrhenius-Powerfactor=0 +DSMC-Reaction14-Activation-Energy_K=75500 +DSMC-Reaction14-NumberOfNonReactives=8 +DSMC-Reaction14-NonReactiveSpecies=(/2,3,5,7,8,11,12,16/) + +!Reaction15 (NO + NO/CO2/atoms -> N + N + NO/CO2/atoms) +DSMC-Reaction15-ReactionType=D +DSMC-Reaction15-Reactants=(/9,0,0/) +DSMC-Reaction15-Products=(/10,0,6/) +DSMC-Reaction15-Arrhenius-Prefactor=1.82659320440906E-13 +DSMC-Reaction15-Arrhenius-Powerfactor=0 +DSMC-Reaction15-Activation-Energy_K=75500 +DSMC-Reaction15-NumberOfNonReactives=7 +DSMC-Reaction15-NonReactiveSpecies=(/1,4,6,9,10,13,14/) + +! ============ ! +! Exchange Reactions +! ============ ! + +!Reaction16 (NO + O -> N + O2) +DSMC-Reaction16-ReactionType=E +DSMC-Reaction16-Reactants=(/9,6,0/) +DSMC-Reaction16-Products=(/10,7,0/) +DSMC-Reaction16-Arrhenius-Prefactor=1.39485299245783E-17 +DSMC-Reaction16-Arrhenius-Powerfactor=0 +DSMC-Reaction16-Activation-Energy_K=19450 + +!Reaction17 (N2 + O -> NO + N) +DSMC-Reaction17-ReactionType=E +DSMC-Reaction17-Reactants=(/5,6,0/) +DSMC-Reaction17-Products=(/9,10,0/) +DSMC-Reaction17-Arrhenius-Prefactor=1.06274513711073E-12 +DSMC-Reaction17-Arrhenius-Powerfactor=-1 +DSMC-Reaction17-Activation-Energy_K=38370 + +!Reaction18 (CO + O -> C + O2) +DSMC-Reaction18-ReactionType=E +DSMC-Reaction18-Reactants=(/2,6,0/) +DSMC-Reaction18-Products=(/4,7,0/) +DSMC-Reaction18-Arrhenius-Prefactor=6.4761031792685E-17 +DSMC-Reaction18-Arrhenius-Powerfactor=-0.18 +DSMC-Reaction18-Activation-Energy_K=69200 + +!Reaction19 (CO + C -> C2 + O) +DSMC-Reaction19-ReactionType=E +DSMC-Reaction19-Reactants=(/2,4,0/) +DSMC-Reaction19-Products=(/3,6,0/) +DSMC-Reaction19-Arrhenius-Prefactor=3.32107855347103E-13 +DSMC-Reaction19-Arrhenius-Powerfactor=-1 +DSMC-Reaction19-Activation-Energy_K=58000 + +!Reaction20 (CO + N -> CN + O) +DSMC-Reaction20-ReactionType=E +DSMC-Reaction20-Reactants=(/2,10,0/) +DSMC-Reaction20-Products=(/8,6,0/) +DSMC-Reaction20-Arrhenius-Prefactor=1.66053927673551E-16 +DSMC-Reaction20-Arrhenius-Powerfactor=0 +DSMC-Reaction20-Activation-Energy_K=38600 + +!Reaction21 (N2 + C -> CN + N) +DSMC-Reaction21-ReactionType=E +DSMC-Reaction21-Reactants=(/5,4,0/) +DSMC-Reaction21-Products=(/8,10,0/) +DSMC-Reaction21-Arrhenius-Prefactor=1.82659320440906E-16 +DSMC-Reaction21-Arrhenius-Powerfactor=-0.11 +DSMC-Reaction21-Activation-Energy_K=23200 + +!Reaction22 (CN + O -> NO + C) +DSMC-Reaction22-ReactionType=E +DSMC-Reaction22-Reactants=(/8,6,0/) +DSMC-Reaction22-Products=(/9,4,0/) +DSMC-Reaction22-Arrhenius-Prefactor=2.65686284277682E-17 +DSMC-Reaction22-Arrhenius-Powerfactor=0.1 +DSMC-Reaction22-Activation-Energy_K=14600 + +!Reaction23 (CN + C -> C2 + N) +DSMC-Reaction23-ReactionType=E +DSMC-Reaction23-Reactants=(/8,4,0/) +DSMC-Reaction23-Products=(/3,10,0/) +DSMC-Reaction23-Arrhenius-Prefactor=8.30269638367756E-17 +DSMC-Reaction23-Arrhenius-Powerfactor=0 +DSMC-Reaction23-Activation-Energy_K=13000 + +!Reaction24 (CO2 + O -> O2 + CO) +DSMC-Reaction24-ReactionType=E +DSMC-Reaction24-Reactants=(/1,6,0/) +DSMC-Reaction24-Products=(/7,2,0/) +DSMC-Reaction24-Arrhenius-Prefactor=3.48713248114458E-17 +DSMC-Reaction24-Arrhenius-Powerfactor=0 +DSMC-Reaction24-Activation-Energy_K=27800 + +! ============ ! +! Associative Ionization +! ============ ! + +!Reaction25 (N + O -> NO+ + e) +DSMC-Reaction25-ReactionType=E +DSMC-Reaction25-Reactants=(/10,6,0/) +DSMC-Reaction25-Products=(/12,15,0/) +DSMC-Reaction25-Arrhenius-Prefactor=1.46127456352725E-21 +DSMC-Reaction25-Arrhenius-Powerfactor=1 +DSMC-Reaction25-Activation-Energy_K=31900 + +!Reaction26 (C + O -> CO+ + e) +DSMC-Reaction26-ReactionType=E +DSMC-Reaction26-Reactants=(/4,6,0/) +DSMC-Reaction26-Products=(/11,15,0/) +DSMC-Reaction26-Arrhenius-Prefactor=1.46127456352725E-21 +DSMC-Reaction26-Arrhenius-Powerfactor=1 +DSMC-Reaction26-Activation-Energy_K=33100 + +! ============ ! +! Charge Exchange +! ============ ! + +!Reaction27 (NO+ + C -> NO + C+) +DSMC-Reaction27-ReactionType=E +DSMC-Reaction27-Reactants=(/12,4,0/) +DSMC-Reaction27-Products=(/9,13,0/) +DSMC-Reaction27-Arrhenius-Prefactor=1.66053927673551E-17 +DSMC-Reaction27-Arrhenius-Powerfactor=0 +DSMC-Reaction27-Activation-Energy_K=23200 + +!Reaction28 (NO+ + N -> O+ + N2) +DSMC-Reaction28-ReactionType=E +DSMC-Reaction28-Reactants=(/12,10,0/) +DSMC-Reaction28-Products=(/5,14,0/) +DSMC-Reaction28-Arrhenius-Prefactor=5.64583354090074E-17 +DSMC-Reaction28-Arrhenius-Powerfactor=-1.08 +DSMC-Reaction28-Activation-Energy_K=12800 + +!Reaction29 (CO + C+ -> CO+ + C) +DSMC-Reaction29-ReactionType=E +DSMC-Reaction29-Reactants=(/2,13,0/) +DSMC-Reaction29-Products=(/11,4,0/) +DSMC-Reaction29-Arrhenius-Prefactor=1.66053927673551E-17 +DSMC-Reaction29-Arrhenius-Powerfactor=0 +DSMC-Reaction29-Activation-Energy_K=31400 + +! ============ ! +! Electron Impact Ionization +! ============ ! + +!Reaction30 (C + e -> C+ + e + e) +DSMC-Reaction30-ReactionType=iQK +DSMC-Reaction30-Reactants=(/4,15,0/) +DSMC-Reaction30-Products=(/13,15,15/) +DSMC-Reaction30-QKProcedure=true + +!Reaction31 (O + e -> O+ + e + e) +DSMC-Reaction31-ReactionType=iQK +DSMC-Reaction31-Reactants=(/6,15,0/) +DSMC-Reaction31-Products=(/14,15,15/) +DSMC-Reaction31-QKProcedure=true diff --git a/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini b/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini new file mode 100755 index 000000000..97f3b4337 --- /dev/null +++ b/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini @@ -0,0 +1,600 @@ +! =============================================================================== ! +! Species1, CO2 +! =============================================================================== ! +Part-Species1-SpeciesName=CO2 +Part-Species1-PolyatomicMol=true +Part-Species1-InteractionID=2 +Part-Species1-VHSReferenceTemp=273 +Part-Species1-VHSReferenceDiam=5.10E-10 +Part-Species1-omegaVHS=0.24 +Part-Species1-NumOfAtoms=3 +Part-Species1-LinearMolec=true +Part-Species1-CharaTempVib1=959.2 +Part-Species1-CharaTempVib2=959.2 +Part-Species1-CharaTempVib3=1917 +Part-Species1-CharaTempVib4=3378.1 +Part-Species1-Ediss_eV=5.43 +Part-Species1-HeatOfFormation_K=-47324.14 +Part-Species1-CharaTempRot = 0.6 +Part-Species1-SymmetryFactor = 2 +! =============================================================================== ! +! Species2, CO +! =============================================================================== ! +Part-Species2-SpeciesName=CO +Part-Species2-InteractionID=2 +Part-Species2-VHSReferenceTemp=273 +Part-Species2-VHSReferenceDiam=4.17E-10 +Part-Species2-omegaVHS=0.24 +Part-Species2-CharaTempVib=3120.7 +Part-Species2-Ediss_eV=11.06 +Part-Species2-HeatOfFormation_K=-13292.85 +Part-Species2-CharaTempRot = 2.8 +Part-Species2-SymmetryFactor = 1 +! =============================================================================== ! +! Species3, C2 +! =============================================================================== ! +Part-Species3-SpeciesName=C2 +Part-Species3-InteractionID=2 +Part-Species3-VHSReferenceTemp=273 +Part-Species3-VHSReferenceDiam=4.88E-10 +Part-Species3-omegaVHS=0.24 +Part-Species3-CharaTempVib=2667.7 +Part-Species3-Ediss_eV=6.22 +Part-Species3-HeatOfFormation_K=99667.24 +Part-Species3-CharaTempRot = 2.6 +Part-Species3-SymmetryFactor = 2 +! =============================================================================== ! +! Species4, CN +! =============================================================================== ! +Part-Species4-SpeciesName=CN +Part-Species4-InteractionID = 2 +Part-Species4-VHSReferenceTemp = 273 +Part-Species4-VHSReferenceDiam = 5.45E-10 +Part-Species4-omegaVHS=0.24 +Part-Species4-CharaTempVib=2975.4 +Part-Species4-Ediss_eV=7.72 +Part-Species4-HeatOfFormation_K=52921.01 +Part-Species4-CharaTempRot = 2.7 +Part-Species4-SymmetryFactor = 1 +! =============================================================================== ! +! Species5, N2 +! =============================================================================== ! +Part-Species5-SpeciesName=N2 +Part-Species5-InteractionID = 2 +Part-Species5-VHSReferenceTemp =273 +Part-Species5-VHSReferenceDiam = 4.17E-10 +Part-Species5-omegaVHS=0.24 +Part-Species5-CharaTempVib=3393.3 +Part-Species5-Ediss_eV=9.759 +Part-Species5-CharaTempRot = 2.87 +Part-Species5-SymmetryFactor = 2 +Part-Species5-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species6, O2 +! =============================================================================== ! +Part-Species6-SpeciesName=O2 +Part-Species6-InteractionID=2 +Part-Species6-VHSReferenceTemp=273 +Part-Species6-VHSReferenceDiam=3.98E-10 +Part-Species6-omegaVHS=0.24 +Part-Species6-CharaTempVib=2272.2 +Part-Species6-Ediss_eV=5.09 +Part-Species6-HeatOfFormation_K= 0.0 +Part-Species6-CharaTempRot = 2.1 +Part-Species6-SymmetryFactor = 2 +! =============================================================================== ! +! Species7, NO +! =============================================================================== ! +Part-Species7-SpeciesName=NO +Part-Species7-InteractionID = 2 +Part-Species7-VHSReferenceTemp =273 +Part-Species7-VHSReferenceDiam = 4.08E-10 +Part-Species7-omegaVHS=0.24 +Part-Species7-CharaTempVib=2738.8 +Part-Species7-Ediss_eV=6.496 +Part-Species7-CharaTempRot = 2.4 +Part-Species7-SymmetryFactor = 1 +Part-Species7-HeatOfFormation_K=10959.33 +! =============================================================================== ! +! Species8, C +! =============================================================================== ! +Part-Species8-SpeciesName=C +Part-Species8-InteractionID=1 +Part-Species8-VHSReferenceTemp=273 +Part-Species8-VHSReferenceDiam=4.67E-10 +Part-Species8-omegaVHS=0.24 +Part-Species8-HeatOfFormation_K=86221.52 +! =============================================================================== ! +! Species9, N +! =============================================================================== ! +Part-Species9-SpeciesName=N +Part-Species9-InteractionID = 1 +Part-Species9-VHSReferenceTemp =273 ! K +Part-Species9-VHSReferenceDiam = 3.0E-10 ! m +Part-Species9-omegaVHS=0.24 +Part-Species9-HeatOfFormation_K=56821.44 +! =============================================================================== ! +! Species10, O +! =============================================================================== ! +Part-Species10-SpeciesName=O +Part-Species10-InteractionID=1 +Part-Species10-VHSReferenceTemp=273 +Part-Species10-VHSReferenceDiam=3.49E-10 +Part-Species10-omegaVHS=0.24 +Part-Species10-HeatOfFormation_K=29975.34 +! =============================================================================== ! +! Species11, C+ +! =============================================================================== ! +Part-Species11-SpeciesName=CIon1 +Part-Species11-InteractionID=10 +Part-Species11-VHSReferenceTemp=273 +Part-Species11-VHSReferenceDiam=4.67E-10 +Part-Species11-omegaVHS=0.24 +Part-Species11-HeatOfFormation_K=86221.52 +! =============================================================================== ! +! Species12, O+ +! =============================================================================== ! +Part-Species12-SpeciesName=OIon1 +Part-Species12-InteractionID = 10 +Part-Species12-VHSReferenceTemp =273 +Part-Species12-VHSReferenceDiam = 3.0E-10 +Part-Species12-omegaVHS=0.24 +Part-Species12-HeatOfFormation_K=29975.34 +! =============================================================================== ! +! Species13, CO+ +! =============================================================================== ! +Part-Species13-SpeciesName=COIon1 +Part-Species13-InteractionID=20 +Part-Species13-VHSReferenceTemp=273 +Part-Species13-VHSReferenceDiam=4.17E-10 +Part-Species13-omegaVHS=0.24 +Part-Species13-CharaTempVib=3120.7 +Part-Species13-Ediss_eV=11.06 +Part-Species13-HeatOfFormation_K=-13292.85 +Part-Species13-CharaTempRot = 2.8 +Part-Species13-SymmetryFactor = 1 +! =============================================================================== ! +! Species14, O2+ +! =============================================================================== ! +Part-Species14-SpeciesName=O2Ion1 +Part-Species14-InteractionID = 20 +Part-Species14-VHSReferenceTemp = 288 +Part-Species14-VHSReferenceDiam = 3.96E-10 +Part-Species14-omegaVHS=0.2 +Part-Species14-CharaTempVib=2741.7 +Part-Species14-Ediss_eV=5.115 +Part-Species14-CharaTempRot = 2.4 +Part-Species14-SymmetryFactor = 2 +Part-Species14-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species15, NO+ +! =============================================================================== ! +Part-Species15-SpeciesName=NOIon1 +Part-Species15-InteractionID = 20 +Part-Species15-VHSReferenceTemp =273 +Part-Species15-VHSReferenceDiam = 4.08E-10 +Part-Species15-omegaVHS=0.24 +Part-Species15-CharaTempVib=3419.2 +Part-Species15-Ediss_eV=6.496 +Part-Species15-CharaTempRot = 2.9 +Part-Species15-SymmetryFactor = 1 +Part-Species15-HeatOfFormation_K=10959.33 +! =============================================================================== ! +! Species16, e +! =============================================================================== ! +Part-Species16-InteractionID = 4 +Part-Species16-VHSReferenceTemp =273 +Part-Species16-VHSReferenceDiam = 2.817920E-15 +Part-Species16-omegaVHS=0.24 +Part-Species16-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species17, Ar +! =============================================================================== ! +Part-Species17-SpeciesName=Ar +Part-Species17-InteractionID = 1 +Part-Species17-VHSReferenceTemp = 273 +Part-Species17-VHSReferenceDiam = 4.05E-10 +Part-Species17-omegaVHS=0.24 +Part-Species17-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=42 + +DSMC-Reaction1-ReactionName=CO2+M_CO+O+M +DSMC-Reaction2-ReactionName=CO2+A_CO+O+A +DSMC-Reaction4-ReactionName=CO+M_C+O+M +DSMC-Reaction5-ReactionName=CO+A_C+O+A +DSMC-Reaction7-ReactionName=C2+M_C+C+M +DSMC-Reaction8-ReactionName=CN+M_C+N+M +DSMC-Reaction9-ReactionName=N2+M_N+N+M +DSMC-Reaction10-ReactionName=N2+A_N+N+A +DSMC-Reaction12-ReactionName=NO+M_N+O+M +DSMC-Reaction13-ReactionName=NO+A_N+O+A +DSMC-Reaction14-ReactionName=O2+M_O+O+M +DSMC-Reaction15-ReactionName=O2+A_O+O+A + +! ============ ! +! Dissociation CO2 +! ============ ! +!Reaction1 (CO2 + molecules -> CO + O + molecules) +DSMC-Reaction1-ReactionType=D +DSMC-Reaction1-Reactants=(/1,0,0/) +DSMC-Reaction1-Products=(/2,0,10/) +DSMC-Reaction1-Arrhenius-Prefactor=1.15E-08 +DSMC-Reaction1-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction1-Activation-Energy_K=63280 +DSMC-Reaction1-NumberOfNonReactives=10 +DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7,13,14,15/) + +!Reaction2 (CO2 + atoms -> CO + O + atoms) +DSMC-Reaction2-ReactionType=D +DSMC-Reaction2-Reactants=(/1,0,0/) +DSMC-Reaction2-Products=(/2,0,10/) +DSMC-Reaction2-Arrhenius-Prefactor=2.29E-08 +DSMC-Reaction2-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction2-Activation-Energy_K=63280 +DSMC-Reaction2-NumberOfNonReactives=5 +DSMC-Reaction2-NonReactiveSpecies=(/8,9,10,11,12/) + +!Reaction3 (CO2 + Ar -> CO + O + Ar) +DSMC-Reaction3-ReactionType=D +DSMC-Reaction3-Reactants=(/1,17,0/) +DSMC-Reaction3-Products=(/2,17,10/) +DSMC-Reaction3-Arrhenius-Prefactor=1.15E-09 +DSMC-Reaction3-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction3-Activation-Energy_K=63280 + +! ============ ! +! Dissociation CO +! ============ ! +!Reaction4 (CO + molecules -> C + O + molecules) +DSMC-Reaction4-ReactionType=D +DSMC-Reaction4-Reactants=(/2,0,0/) +DSMC-Reaction4-Products=(/8,0,10/) +DSMC-Reaction4-Arrhenius-Prefactor=1.99E-09 +DSMC-Reaction4-Arrhenius-Powerfactor=-1 +DSMC-Reaction4-Activation-Energy_K=129000 +DSMC-Reaction4-NumberOfNonReactives=10 +DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7,13,14,15/) + +!Reaction5 (CO + atoms -> C + O + atoms) +DSMC-Reaction5-ReactionType=D +DSMC-Reaction5-Reactants=(/2,0,0/) +DSMC-Reaction5-Products=(/8,0,10/) +DSMC-Reaction5-Arrhenius-Prefactor=2.99E-09 +DSMC-Reaction5-Arrhenius-Powerfactor=-1 +DSMC-Reaction5-Activation-Energy_K=129000 +DSMC-Reaction5-NumberOfNonReactives=5 +DSMC-Reaction5-NonReactiveSpecies=(/8,9,10,11,12/) + +!Reaction6 (CO + Ar -> C + O + Ar) +DSMC-Reaction6-ReactionType=D +DSMC-Reaction6-Reactants=(/2,17,0/) +DSMC-Reaction6-Products=(/8,17,10/) +DSMC-Reaction6-Arrhenius-Prefactor=1.99E-10 +DSMC-Reaction6-Arrhenius-Powerfactor=-1 +DSMC-Reaction6-Activation-Energy_K=129000 + +! ============ ! +! Dissociation C2 +! ============ ! +!Reaction7 (C2 + M -> C + C + M) +DSMC-Reaction7-ReactionType=D +DSMC-Reaction7-Reactants=(/3,0,0/) +DSMC-Reaction7-Products=(/8,0,8/) +DSMC-Reaction7-Arrhenius-Prefactor=7.47E-12 +DSMC-Reaction7-Arrhenius-Powerfactor=-1 +DSMC-Reaction7-Activation-Energy_K=71500 +DSMC-Reaction7-NumberOfNonReactives=16 +DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17/) + +! ============ ! +! Dissociation CN +! ============ ! +!Reaction8 (CN + M -> C + N + M) +DSMC-Reaction8-ReactionType=D +DSMC-Reaction8-Reactants=(/4,0,0/) +DSMC-Reaction8-Products=(/8,0,9/) +DSMC-Reaction8-Arrhenius-Prefactor=9.96E-15 +DSMC-Reaction8-Arrhenius-Powerfactor=-0.4 +DSMC-Reaction8-Activation-Energy_K=71000 +DSMC-Reaction8-NumberOfNonReactives=16 +DSMC-Reaction8-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17/) + +! ============ ! +! Dissociation N2 +! ============ ! +!Reaction9 (N2 + molecules/Ar -> N + N + molecules/Ar) +DSMC-Reaction9-ReactionType=D +DSMC-Reaction9-Reactants=(/5,0,0/) +DSMC-Reaction9-Products=(/9,0,9/) +DSMC-Reaction9-Arrhenius-Prefactor=1.16E-08 +DSMC-Reaction9-Arrhenius-Powerfactor=-1.6 +DSMC-Reaction9-Activation-Energy_K=113200 +DSMC-Reaction9-NumberOfNonReactives=11 +DSMC-Reaction9-NonReactiveSpecies=(/1,2,3,4,5,6,7,13,14,15,17/) + +!Reaction10 (N2 + atoms -> N + N + atoms) +DSMC-Reaction10-ReactionType=D +DSMC-Reaction10-Reactants=(/5,0,0/) +DSMC-Reaction10-Products=(/9,0,9/) +DSMC-Reaction10-Arrhenius-Prefactor=4.98E-08 +DSMC-Reaction10-Arrhenius-Powerfactor=-1.6 +DSMC-Reaction10-Activation-Energy_K=113200 +DSMC-Reaction10-NumberOfNonReactives=5 +DSMC-Reaction10-NonReactiveSpecies=(/8,9,10,11,12/) + +!Reaction11 (N2 + e -> N + N + e) +DSMC-Reaction11-ReactionType=D +DSMC-Reaction11-Reactants=(/5,17,0/) +DSMC-Reaction11-Products=(/9,17,9/) +DSMC-Reaction11-Arrhenius-Prefactor=9.96E-27 +DSMC-Reaction11-Arrhenius-Powerfactor=2.6 +DSMC-Reaction11-Activation-Energy_K=113200 + +! ============ ! +! Dissociation NO +! ============ ! +!Reaction12 (NO + C2/N2/O2/CN/CO/Ar -> N + O + C2/N2/O2/CN/CO/Ar) +DSMC-Reaction12-ReactionType=D +DSMC-Reaction12-Reactants=(/7,0,0/) +DSMC-Reaction12-Products=(/9,0,10/) +DSMC-Reaction12-Arrhenius-Prefactor=3.32E-15 +DSMC-Reaction12-Arrhenius-Powerfactor=0 +DSMC-Reaction12-Activation-Energy_K=75500 +DSMC-Reaction12-NumberOfNonReactives=9 +DSMC-Reaction12-NonReactiveSpecies=(/2,3,4,5,6,13,14,15,17/) + +!Reaction13 (NO + NO/CO2/atoms -> N + O + NO/CO2/atoms) +DSMC-Reaction13-ReactionType=D +DSMC-Reaction13-Reactants=(/7,0,0/) +DSMC-Reaction13-Products=(/9,0,10/) +DSMC-Reaction13-Arrhenius-Prefactor=7.31E-14 +DSMC-Reaction13-Arrhenius-Powerfactor=0 +DSMC-Reaction13-Activation-Energy_K=75500 +DSMC-Reaction13-NumberOfNonReactives=7 +DSMC-Reaction13-NonReactiveSpecies=(/1,7,8,9,10,11,12/) + +! ============ ! +! Dissociation O2 +! ============ ! +!Reaction14 (O2 + molecules/Ar -> O + O + molecules/Ar) +DSMC-Reaction14-ReactionType=D +DSMC-Reaction14-Reactants=(/6,0,0/) +DSMC-Reaction14-Products=(/10,0,10/) +DSMC-Reaction14-Arrhenius-Prefactor=3.32E-09 +DSMC-Reaction14-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction14-Activation-Energy_K=59360 +DSMC-Reaction14-NumberOfNonReactives=11 +DSMC-Reaction14-NonReactiveSpecies=(/1,2,3,4,5,6,7,13,14,15,17/) + +!Reaction15 (O2 + atoms -> O + O + atoms) +DSMC-Reaction15-ReactionType=D +DSMC-Reaction15-Reactants=(/6,0,0/) +DSMC-Reaction15-Products=(/10,0,10/) +DSMC-Reaction15-Arrhenius-Prefactor=1.66E-08 +DSMC-Reaction15-Arrhenius-Powerfactor=-1.5 +DSMC-Reaction15-Activation-Energy_K=59360 +DSMC-Reaction15-NumberOfNonReactives=5 +DSMC-Reaction15-NonReactiveSpecies=(/8,9,10,11,12/) + +! ============ ! +! Exchange Reactions +! ============ ! + +!Reaction16 (CO2 + O -> CO + O2) +DSMC-Reaction16-ReactionType=E +DSMC-Reaction16-Reactants=(/1,10,0/) +DSMC-Reaction16-Products=(/2,6,0/) +DSMC-Reaction16-Arrhenius-Prefactor=4.50E-16 +DSMC-Reaction16-Arrhenius-Powerfactor=0 +DSMC-Reaction16-Activation-Energy_K=33800 + +!Reaction17 (CO + C -> C2 + O) +DSMC-Reaction17-ReactionType=E +DSMC-Reaction17-Reactants=(/2,8,0/) +DSMC-Reaction17-Products=(/3,10,0/) +DSMC-Reaction17-Arrhenius-Prefactor=3.99E-13 +DSMC-Reaction17-Arrhenius-Powerfactor=-1 +DSMC-Reaction17-Activation-Energy_K=58000 + +!Reaction18 (CO + N -> CN + O) +DSMC-Reaction18-ReactionType=E +DSMC-Reaction18-Reactants=(/2,9,0/) +DSMC-Reaction18-Products=(/4,10,0/) +DSMC-Reaction18-Arrhenius-Prefactor=1.66E-15 +DSMC-Reaction18-Arrhenius-Powerfactor=0 +DSMC-Reaction18-Activation-Energy_K=38600 + +!Reaction19 (CO + NO -> CO2 + N) +DSMC-Reaction19-ReactionType=E +DSMC-Reaction19-Reactants=(/2,7,0/) +DSMC-Reaction19-Products=(/1,9,0/) +DSMC-Reaction19-Arrhenius-Prefactor=4.98E-24 +DSMC-Reaction19-Arrhenius-Powerfactor=0.88 +DSMC-Reaction19-Activation-Energy_K=13300 + +!Reaction20 (CO + O -> C + O2) +DSMC-Reaction20-ReactionType=E +DSMC-Reaction20-Reactants=(/2,10,0/) +DSMC-Reaction20-Products=(/6,8,0/) +DSMC-Reaction20-Arrhenius-Prefactor=6.48E-17 +DSMC-Reaction20-Arrhenius-Powerfactor=-0.18 +DSMC-Reaction20-Activation-Energy_K=69200 + +!Reaction21 (C2 + N2 -> CN + CN) +DSMC-Reaction21-ReactionType=E +DSMC-Reaction21-Reactants=(/3,5,0/) +DSMC-Reaction21-Products=(/4,4,0/) +DSMC-Reaction21-Arrhenius-Prefactor=2.49E-17 +DSMC-Reaction21-Arrhenius-Powerfactor=0 +DSMC-Reaction21-Activation-Energy_K=21000 + +!Reaction22 (CN + C -> C2 + N) +DSMC-Reaction22-ReactionType=E +DSMC-Reaction22-Reactants=(/4,8,0/) +DSMC-Reaction22-Products=(/3,9,0/) +DSMC-Reaction22-Arrhenius-Prefactor=4.98E-16 +DSMC-Reaction22-Arrhenius-Powerfactor=0 +DSMC-Reaction22-Activation-Energy_K=18100 + +!Reaction23 (CN + O -> NO + C) +DSMC-Reaction23-ReactionType=E +DSMC-Reaction23-Reactants=(/4,10,0/) +DSMC-Reaction23-Products=(/7,8,0/) +DSMC-Reaction23-Arrhenius-Prefactor=2.66E-18 +DSMC-Reaction23-Arrhenius-Powerfactor=0.1 +DSMC-Reaction23-Activation-Energy_K=14600 + +!Reaction24 (CO + N -> NO + C) +DSMC-Reaction24-ReactionType=E +DSMC-Reaction24-Reactants=(/2,9,0/) +DSMC-Reaction24-Products=(/7,8,0/) +DSMC-Reaction24-Arrhenius-Prefactor=1.83E-16 +DSMC-Reaction24-Arrhenius-Powerfactor=0.07 +DSMC-Reaction24-Activation-Energy_K=53500 + +!Reaction25 (N2 + C -> CN + N) +DSMC-Reaction25-ReactionType=E +DSMC-Reaction25-Reactants=(/5,8,0/) +DSMC-Reaction25-Products=(/4,9,0/) +DSMC-Reaction25-Arrhenius-Prefactor=1.83E-16 +DSMC-Reaction25-Arrhenius-Powerfactor=-0.11 +DSMC-Reaction25-Activation-Energy_K=23200 + +!Reaction26 (N2 + CO -> CN + NO) +DSMC-Reaction26-ReactionType=E +DSMC-Reaction26-Reactants=(/2,5,0/) +DSMC-Reaction26-Products=(/4,7,0/) +DSMC-Reaction26-Arrhenius-Prefactor=1.99E-14 +DSMC-Reaction26-Arrhenius-Powerfactor=-1.23 +DSMC-Reaction26-Activation-Energy_K=77000 + +!Reaction27 (N2 + O -> NO + N) +DSMC-Reaction27-ReactionType=E +DSMC-Reaction27-Reactants=(/5,10,0/) +DSMC-Reaction27-Products=(/7,9,0/) +DSMC-Reaction27-Arrhenius-Prefactor=9.96E-17 +DSMC-Reaction27-Arrhenius-Powerfactor=0.1 +DSMC-Reaction27-Activation-Energy_K=38000 + +!Reaction28 (O2 + N -> NO + O) +DSMC-Reaction28-ReactionType=E +DSMC-Reaction28-Reactants=(/6,9,0/) +DSMC-Reaction28-Products=(/7,10,0/) +DSMC-Reaction28-Arrhenius-Prefactor=4.13E-21 +DSMC-Reaction28-Arrhenius-Powerfactor=1.18 +DSMC-Reaction28-Activation-Energy_K=4010 + +! ============ ! +! Associative Ionization/Charge Exchange +! ============ ! + +!Reaction29 (C + O -> CO+ + e) +DSMC-Reaction29-ReactionType=E +DSMC-Reaction29-Reactants=(/8,10,0/) +DSMC-Reaction29-Products=(/13,16,0/) +DSMC-Reaction29-Arrhenius-Prefactor=1.46E-21 +DSMC-Reaction29-Arrhenius-Powerfactor=1 +DSMC-Reaction29-Activation-Energy_K=33100 + +!Reaction30 (CO + C+ -> CO+ + C) +DSMC-Reaction30-ReactionType=E +DSMC-Reaction30-Reactants=(/2,11,0/) +DSMC-Reaction30-Products=(/13,8,0/) +DSMC-Reaction30-Arrhenius-Prefactor=1.66E-17 +DSMC-Reaction30-Arrhenius-Powerfactor=0 +DSMC-Reaction30-Activation-Energy_K=31400 + +!Reaction31 (N + O -> NO+ + e) +DSMC-Reaction31-ReactionType=E +DSMC-Reaction31-Reactants=(/9,10,0/) +DSMC-Reaction31-Products=(/15,16,0/) +DSMC-Reaction31-Arrhenius-Prefactor=8.80E-18 +DSMC-Reaction31-Arrhenius-Powerfactor=0 +DSMC-Reaction31-Activation-Energy_K=31900 + +!Reaction32 (NO+ + C -> NO + C+) +DSMC-Reaction32-ReactionType=E +DSMC-Reaction32-Reactants=(/15,8,0/) +DSMC-Reaction32-Products=(/7,11,0/) +DSMC-Reaction32-Arrhenius-Prefactor=1.66E-17 +DSMC-Reaction32-Arrhenius-Powerfactor=0 +DSMC-Reaction32-Activation-Energy_K=23200 + +!Reaction33 (NO+ + N -> O+ + N2) +DSMC-Reaction33-ReactionType=E +DSMC-Reaction33-Reactants=(/15,9,0/) +DSMC-Reaction33-Products=(/12,5,0/) +DSMC-Reaction33-Arrhenius-Prefactor=5.65E-17 +DSMC-Reaction33-Arrhenius-Powerfactor=-1.08 +DSMC-Reaction33-Activation-Energy_K=12800 + +!Reaction34 (NO+ + O -> O2+ + N) +DSMC-Reaction34-ReactionType=E +DSMC-Reaction34-Reactants=(/15,10,0/) +DSMC-Reaction34-Products=(/14,9,0/) +DSMC-Reaction34-Arrhenius-Prefactor=1.20E-17 +DSMC-Reaction34-Arrhenius-Powerfactor=0.29 +DSMC-Reaction34-Activation-Energy_K=48600 + +!Reaction35 (NO+ + O2 -> NO + O2+) +DSMC-Reaction35-ReactionType=E +DSMC-Reaction35-Reactants=(/6,15,0/) +DSMC-Reaction35-Products=(/7,14,0/) +DSMC-Reaction35-Arrhenius-Prefactor=3.99E-17 +DSMC-Reaction35-Arrhenius-Powerfactor=0.41 +DSMC-Reaction35-Activation-Energy_K=32600 + +!Reaction36 (O + O -> O2+ + e) +DSMC-Reaction36-ReactionType=E +DSMC-Reaction36-Reactants=(/10,10,0/) +DSMC-Reaction36-Products=(/14,16,0/) +DSMC-Reaction36-Arrhenius-Prefactor=1.18E-27 +DSMC-Reaction36-Arrhenius-Powerfactor=2.7 +DSMC-Reaction36-Activation-Energy_K=80600 + +!Reaction37 (O2 + C+ -> O2+ + C) +DSMC-Reaction37-ReactionType=E +DSMC-Reaction37-Reactants=(/6,11,0/) +DSMC-Reaction37-Products=(/14,8,0/) +DSMC-Reaction37-Arrhenius-Prefactor=1.66E-17 +DSMC-Reaction37-Arrhenius-Powerfactor=0 +DSMC-Reaction37-Activation-Energy_K=9400 + +!Reaction38 (O2+ + O -> O+ + O2) +DSMC-Reaction38-ReactionType=E +DSMC-Reaction38-Reactants=(/14,10,0/) +DSMC-Reaction38-Products=(/12,6,0/) +DSMC-Reaction38-Arrhenius-Prefactor=6.64E-18 +DSMC-Reaction38-Arrhenius-Powerfactor=-0.09 +DSMC-Reaction38-Activation-Energy_K=18000 + +! ============ ! +! Electron Impact Ionization +! ============ ! + +!Reaction39 (O2 + e -> O2+ + e + e) +DSMC-Reaction39-ReactionType=iQK +DSMC-Reaction39-Reactants=(/6,16,0/) +DSMC-Reaction39-Products=(/14,16,16/) +DSMC-Reaction39-QKProcedure=true + +!Reaction40 (C + e -> C+ + e + e) +DSMC-Reaction40-ReactionType=iQK +DSMC-Reaction40-Reactants=(/8,16,0/) +DSMC-Reaction40-Products=(/11,16,16/) +DSMC-Reaction40-QKProcedure=true + +!Reaction41 (O + e -> O+ + e + e) +DSMC-Reaction41-ReactionType=iQK +DSMC-Reaction41-Reactants=(/10,16,0/) +DSMC-Reaction41-Products=(/12,16,16/) +DSMC-Reaction41-QKProcedure=true + +!Reaction42 (CO + e -> CO+ + e + e) +DSMC-Reaction42-ReactionType=iQK +DSMC-Reaction42-Reactants=(/2,16,0/) +DSMC-Reaction42-Products=(/13,16,16/) +DSMC-Reaction42-QKProcedure=true diff --git a/tools/species_database/REF_DSMC.ini b/tools/species_database/REF_DSMC.ini new file mode 100644 index 000000000..b4394480f --- /dev/null +++ b/tools/species_database/REF_DSMC.ini @@ -0,0 +1,611 @@ +! =============================================================================== ! +! Species1, CH4 +! =============================================================================== ! +Part-Species1-SpeciesName=CH4 +Part-Species1-MassIC = 2.66360E-26 +Part-Species1-ChargeIC = 0 +Part-Species1-PolyatomicMol=true +Part-Species1-InteractionID=2 +Part-Species1-Tref=273 +Part-Species1-dref=4.63E-10 +Part-Species1-omega=0.24 +Part-Species1-NumOfAtoms=5 +Part-Species1-LinearMolec=.false. +Part-Species1-CharaTempVib1=4194.9 +Part-Species1-CharaTempVib2=2206.0 +Part-Species1-CharaTempVib3=2206.0 +Part-Species1-CharaTempVib4=4341.6 +Part-Species1-CharaTempVib5=4341.6 +Part-Species1-CharaTempVib6=4341.6 +Part-Species1-CharaTempVib7=1878.1 +Part-Species1-CharaTempVib8=1878.1 +Part-Species1-CharaTempVib9=1878.1 +Part-Species1-Ediss_eV=4.53 +Part-Species1-HeatOfFormation_K=-8008.20 +Part-Species1-CharaTempRot1 = 7.6 +Part-Species1-CharaTempRot2 = 7.6 +Part-Species1-CharaTempRot3 = 7.6 +Part-Species1-SymmetryFactor = 12 +! =============================================================================== ! +! Species2, CH3 +! =============================================================================== ! +Part-Species2-SpeciesName=CH3 +Part-Species2-MassIC = 2.49620E-26 +Part-Species2-ChargeIC = 0 +Part-Species2-PolyatomicMol=true +Part-Species2-InteractionID=2 +Part-Species2-Tref=273 +Part-Species2-dref=4.55E-10 +Part-Species2-omega=0.24 +Part-Species2-NumOfAtoms=4 +Part-Species2-LinearMolec=.false. +Part-Species2-CharaTempVib1=4320.6 +Part-Species2-CharaTempVib2=872.1 +Part-Species2-CharaTempVib3=4545.5 +Part-Species2-CharaTempVib4=4545.5 +Part-Species2-CharaTempVib5=2016.2 +Part-Species2-CharaTempVib6=2016.2 +Part-Species2-Ediss_eV=4.77 +Part-Species2-HeatOfFormation_K=18034.36 +Part-Species2-CharaTempRot1 = 13.5 +Part-Species2-CharaTempRot2 = 13.5 +Part-Species2-CharaTempRot3 = 6.8 +Part-Species2-SymmetryFactor = 6 +! =============================================================================== ! +! Species3, CH2 +! =============================================================================== ! +Part-Species3-SpeciesName=CH2 +Part-Species3-MassIC = 2.32880E-26 +Part-Species3-ChargeIC = 0 +Part-Species3-PolyatomicMol=true +Part-Species3-InteractionID=2 +Part-Species3-Tref=273 +Part-Species3-dref=4.47E-10 +Part-Species3-omega=0.24 +Part-Species3-NumOfAtoms=3 +Part-Species3-LinearMolec=.false. +Part-Species3-CharaTempVib1=4035.3 +Part-Species3-CharaTempVib2=1945.2 +Part-Species3-CharaTempVib3=4120.1 +Part-Species3-Ediss_eV=4.37 +Part-Species3-HeatOfFormation_K=47056.20 +Part-Species3-CharaTempRot1 = 72.1 +Part-Species3-CharaTempRot2 = 12.5 +Part-Species3-CharaTempRot3 = 10.6 +Part-Species3-SymmetryFactor = 2 +! =============================================================================== ! +! Species4, CH +! =============================================================================== ! +Part-Species4-SpeciesName=CH +Part-Species4-MassIC = 2.16140E-26 +Part-Species4-ChargeIC = 0 +Part-Species4-InteractionID = 2 +Part-Species4-Tref = 273 +Part-Species4-dref = 4.39E-10 +Part-Species4-omega=0.24 +Part-Species4-CharaTempVib=4314.3 +Part-Species4-Ediss_eV=3.49 +Part-Species4-HeatOfFormation_K=71337.10 +Part-Species4-CharaTempRot = 20.4 +Part-Species4-SymmetryFactor = 1 +! =============================================================================== ! +! Species5, N2 +! =============================================================================== ! +Part-Species5-SpeciesName=N2 +Part-Species5-MassIC = 4.65200E-26 +Part-Species5-ChargeIC = 0 +Part-Species5-InteractionID = 2 +Part-Species5-Tref = 273 +Part-Species5-dref = 4.07E-10 +Part-Species5-omega=0.24 +Part-Species5-CharaTempVib=3393.3 +Part-Species5-Ediss_eV=9.759 +Part-Species5-HeatOfFormation_K=0.0 +Part-Species5-CharaTempRot = 2.87 +Part-Species5-SymmetryFactor = 20 +! =============================================================================== ! +! Species6, C2 +! =============================================================================== ! +Part-Species6-SpeciesName=C2 +Part-Species6-MassIC = 3.98800E-26 +Part-Species6-ChargeIC = 0 +Part-Species6-InteractionID = 2 +Part-Species6-Tref = 273 +Part-Species6-dref = 4.88E-10 +Part-Species6-omega=0.24 +Part-Species6-CharaTempVib=2667.7 +Part-Species6-Ediss_eV=6.26 +Part-Species6-HeatOfFormation_K=98672.62 +Part-Species6-CharaTempRot = 2.6 +Part-Species6-SymmetryFactor = 2 +! =============================================================================== ! +! Species7, H2 +! =============================================================================== ! +Part-Species7-SpeciesName=H2 +Part-Species7-MassIC = 3.34800E-27 +Part-Species7-ChargeIC = 0 +Part-Species7-InteractionID = 2 +Part-Species7-Tref = 1000 +Part-Species7-dref = 2.68E-10 +Part-Species7-omega=0.407 +Part-Species7-CharaTempVib=6332.37 +Part-Species7-Ediss_eV=4.47 +Part-Species7-HeatOfFormation_K=0.0 +Part-Species7-CharaTempRot = 87.5 +Part-Species7-SymmetryFactor = 2 +! =============================================================================== ! +! Species8, CN +! =============================================================================== ! +Part-Species8-SpeciesName=CN +Part-Species8-MassIC = 4.32000E-26 +Part-Species8-ChargeIC = 0 +Part-Species8-InteractionID = 2 +Part-Species8-Tref = 273 +Part-Species8-dref = 5.45E-10 +Part-Species8-omega=0.24 +Part-Species8-CharaTempVib=2975.4 +Part-Species8-Ediss_eV=7.72 +Part-Species8-HeatOfFormation_K=52552.48 +Part-Species8-CharaTempRot = 2.7 +Part-Species8-SymmetryFactor = 1 +! =============================================================================== ! +! Species9, NH +! =============================================================================== ! +Part-Species9-SpeciesName=NH +Part-Species9-MassIC = 2.49340E-26 +Part-Species9-ChargeIC = 0 +Part-Species9-InteractionID = 2 +Part-Species9-Tref = 273 +Part-Species9-dref = 4.64E-10 +Part-Species9-omega=0.24 +Part-Species9-CharaTempVib=4721.2 +Part-Species9-Ediss_eV=4.02 +Part-Species9-HeatOfFormation_K=43167.81 +Part-Species9-CharaTempRot = 24.0 +Part-Species9-SymmetryFactor = 1 +! =============================================================================== ! +! Species10, HCN +! =============================================================================== ! +Part-Species10-SpeciesName=HCN +Part-Species10-MassIC = 4.48740E-26 +Part-Species10-ChargeIC = 0 +Part-Species10-PolyatomicMol=true +Part-Species10-InteractionID = 2 +Part-Species10-Tref = 273 +Part-Species10-dref = 3.94E-10 +Part-Species10-omega=0.24 +Part-Species10-NumOfAtoms=3 +Part-Species10-LinearMolec=.true. +Part-Species10-CharaTempVib1=4761.5 +Part-Species10-CharaTempVib2=1023.9 +Part-Species10-CharaTempVib3=1023.9 +Part-Species10-CharaTempVib4=3015.7 +Part-Species10-Ediss_eV=9.93 +Part-Species10-HeatOfFormation_K=15604.38 +Part-Species10-CharaTempRot = 2.1 +Part-Species10-SymmetryFactor = 1 +! =============================================================================== ! +! Species11, N +! =============================================================================== ! +Part-Species11-SpeciesName=N +Part-Species11-MassIC = 2.32600E-26 +Part-Species11-ChargeIC = 0 +Part-Species11-InteractionID = 1 +Part-Species11-Tref = 273 +Part-Species11-dref = 3.00E-10 +Part-Species11-omega=0.24 +Part-Species11-HeatOfFormation_K=56625.71 +! =============================================================================== ! +! Species12, C +! =============================================================================== ! +Part-Species12-SpeciesName=C +Part-Species12-MassIC = 1.99400E-26 +Part-Species12-ChargeIC = 0 +Part-Species12-InteractionID = 1 +Part-Species12-Tref = 273 +Part-Species12-dref = 4.67E-10 +Part-Species12-omega=0.24 +Part-Species12-HeatOfFormation_K=85604.47 +! =============================================================================== ! +! Species13, H +! =============================================================================== ! +Part-Species13-SpeciesName=H +Part-Species13-MassIC = 1.67400E-27 +Part-Species13-ChargeIC = 0 +Part-Species13-InteractionID = 1 +Part-Species13-Tref = 1000 +Part-Species13-dref =2.581E-10 +Part-Species13-omega=0.407 +Part-Species13-HeatOfFormation_K=25995.75 +! =============================================================================== ! +! Species14, e +! =============================================================================== ! +Part-Species14-SpeciesName=electron +Part-Species14-MassIC = 9.11000000E-31 +Part-Species14-ChargeIC = -1.60217653E-19 +Part-Species14-InteractionID = 4 +Part-Species14-Tref = 1000 +Part-Species14-dref = 2.817920E-15 +Part-Species14-omega=0.407 +! =============================================================================== ! +! Species15, N2+ +! =============================================================================== ! +Part-Species15-SpeciesName=N2Ion1 +Part-Species15-MassIC = 4.6519089E-26 +Part-Species15-ChargeIC = 1.60217653E-19 +Part-Species15-InteractionID = 20 +Part-Species15-Tref = 273 +Part-Species15-dref = 4.07E-10 +Part-Species15-omega=0.24 +Part-Species15-CharaTempVib=3174.7 +Part-Species15-Ediss_eV=9.759 +Part-Species15-CharaTempRot = 2.8 +Part-Species15-SymmetryFactor = 2 +Part-Species15-PreviousState = 5 +Part-Species15-HeatOfFormation_K=180896.01 +! =============================================================================== ! +! Species16, CN+ +! =============================================================================== ! +Part-Species16-SpeciesName=CNIon1 +Part-Species16-MassIC = 4.3199089E-26 +Part-Species16-ChargeIC = 1.60217653E-19 +Part-Species16-InteractionID = 20 +Part-Species16-Tref = 273 +Part-Species16-dref = 5.45E-10 +Part-Species16-omega=0.24 +Part-Species16-CharaTempVib=2924.4 +Part-Species16-Ediss_eV=7.72 +Part-Species16-CharaTempRot = 2.5 +Part-Species16-SymmetryFactor = 1 +Part-Species16-PreviousState = 8 +Part-Species16-HeatOfFormation_K=52552.48 +! =============================================================================== ! +! Species17, N+ +! =============================================================================== ! +Part-Species17-SpeciesName=NIon1 +Part-Species17-MassIC = 2.3259089E-26 +Part-Species17-ChargeIC = 1.60217653E-19 +Part-Species17-InteractionID = 10 +Part-Species17-Tref = 273 +Part-Species17-dref = 3.00E-10 +Part-Species17-omega=0.24 +Part-Species17-PreviousState = 11 +Part-Species17-HeatOfFormation_K=225370.26 +! =============================================================================== ! +! Species18, C+ +! =============================================================================== ! +Part-Species18-SpeciesName=CIon1 +Part-Species18-MassIC = 1.9939089E-26 +Part-Species18-ChargeIC = 1.60217653E-19 +Part-Species18-InteractionID = 10 +Part-Species18-Tref = 273 +Part-Species18-dref = 4.67E-10 +Part-Species18-omega=0.24 +Part-Species18-HeatOfFormation_K=216339.24 +Part-Species18-PreviousState = 12 +! =============================================================================== ! +! Species19, CO2 +! =============================================================================== ! +Part-Species19-SpeciesName=CO2 +Part-Species19-MassIC=7.3081487655E-26 +Part-Species19-ChargeIC=0.0 +Part-Species19-PolyatomicMol=true +Part-Species19-InteractionID=2 +Part-Species19-Tref=273 +Part-Species19-dref=5.10E-10 +Part-Species19-omega=0.24 +Part-Species19-NumOfAtoms=3 +Part-Species19-LinearMolec=true +Part-Species19-CharaTempVib1=959.2 +Part-Species19-CharaTempVib2=959.2 +Part-Species19-CharaTempVib3=1917 +Part-Species19-CharaTempVib4=3378.1 +Part-Species19-Ediss_eV=5.43 +Part-Species19-HeatOfFormation_K=-47303.61 +Part-Species19-CharaTempRot = 0.6 +Part-Species19-SymmetryFactor = 2 +! =============================================================================== ! +! Species20, CO +! =============================================================================== ! +Part-Species20-SpeciesName=CO +Part-Species20-MassIC=4.6512439655E-26 +Part-Species20-ChargeIC=0.0 +Part-Species20-InteractionID=2 +Part-Species20-Tref=273 +Part-Species20-dref=4.17E-10 +Part-Species20-omega=0.24 +Part-Species20-CharaTempVib=3120.7 +Part-Species20-Ediss_eV=11.06 +Part-Species20-HeatOfFormation_K=-13694.23 +Part-Species20-CharaTempRot = 2.8 +Part-Species20-SymmetryFactor = 1 +! =============================================================================== ! +! Species21, O +! =============================================================================== ! +Part-Species21-SpeciesName=O +Part-Species21-MassIC=2.65700E-26 +Part-Species21-ChargeIC=0.0 +Part-Species21-InteractionID=1 +Part-Species21-Tref=273 +Part-Species21-dref=3.0E-10 +Part-Species21-omega=0.24 +Part-Species21-HeatOfFormation_K=29703.17 +! =============================================================================== ! +! Species22, O2 +! =============================================================================== ! +Part-Species22-SpeciesName=O2 +Part-Species22-MassIC=5.31400E-26 +Part-Species22-ChargeIC = 0.0 +Part-Species22-InteractionID = 2 +Part-Species22-Tref =273 +Part-Species22-dref = 3.96E-10 +Part-Species22-omega=0.24 +Part-Species22-CharaTempVib=2272.8 +Part-Species22-Ediss_eV=5.115 +Part-Species22-CharaTempRot = 2.1 +Part-Species22-SymmetryFactor = 2 +Part-Species22-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species23, H2Ion +! =============================================================================== ! +Part-Species23-SpeciesName = H2Ion1 +Part-Species23-MassIC = 3.3470890E-27 +Part-Species23-ChargeIC = 1.60217653E-19 +Part-Species23-InteractionID = 20 +Part-Species23-Tref = 1000 +Part-Species23-dref = 3.883E-10 +Part-Species23-omega = 0.407 +Part-Species23-CharaTempVib = 3341.01 +Part-Species23-Ediss_eV = 2.65 +Part-Species23-PreviousState = 7 +Part-Species23-HeatOfFormation_K=179097.42 +! =============================================================================== ! +! Species24, HIon +! =============================================================================== ! +Part-Species24-SpeciesName = HIon1 +Part-Species24-MassIC = 1.6730890E-27 +Part-Species24-ChargeIC = 1.60217653E-19 +Part-Species24-InteractionID = 10 +Part-Species24-Tref = 1000 +Part-Species24-dref = 3.912E-10 +Part-Species24-omega = 0.407 +Part-Species24-PreviousState = 13 +Part-Species24-HeatOfFormation_K=183876.99 +! =============================================================================== ! +! Species25, H3Ion +! =============================================================================== ! +Part-Species25-SpeciesName = H3Ion1 +Part-Species25-MassIC = 5.0210890E-27 +Part-Species25-ChargeIC = 1.60217653E-19 +Part-Species25-InteractionID = 20 +Part-Species25-PolyatomicMol = T +Part-Species25-NumOfAtoms = 3 +Part-Species25-LinearMolec = F +Part-Species25-Tref = 1000 +Part-Species25-dref = 4.5E-10 +Part-Species25-omega = 0.407 +Part-Species25-CharaTempVib1 = 4572.92 +Part-Species25-CharaTempVib2 = 3627.94 +Part-Species25-CharaTempVib3 = 3627.94 +Part-Species25-Ediss_eV = 4.51 +Part-Species25-HeatOfFormation_K = 133604.80 +! =============================================================================== ! +! Species26, NO +! =============================================================================== ! +Part-Species26-SpeciesName=NO +Part-Species26-MassIC=4.98300E-26 +Part-Species26-ChargeIC=0.0 +Part-Species26-InteractionID = 2 +Part-Species26-Tref =273 +Part-Species26-dref = 4.00E-10 +Part-Species26-omega=0.24 +Part-Species26-CharaTempVib=2738.8 +Part-Species26-Ediss_eV=6.496 +Part-Species26-CharaTempRot = 2.4 +Part-Species26-SymmetryFactor = 1 +Part-Species26-HeatOfFormation_K=10906.63 +! =============================================================================== ! +! Species27, O+ +! =============================================================================== ! +Part-Species27-SpeciesName=OIon1 +Part-Species27-MassIC=2.6569089E-26 +Part-Species27-ChargeIC=1.60217653E-19 +Part-Species27-InteractionID = 10 +Part-Species27-Tref =273 +Part-Species27-dref = 3.0E-10 +Part-Species27-omega=0.24 +Part-Species27-PreviousState=21 +Part-Species27-HeatOfFormation_K=187812.08 +! =============================================================================== ! +! Species28, O2+ +! =============================================================================== ! +Part-Species28-SpeciesName=O2Ion1 +Part-Species28-MassIC=5.3139089E-26 +Part-Species28-ChargeIC=1.60217653E-19 +Part-Species28-InteractionID = 20 +Part-Species28-Tref =273 +Part-Species28-dref = 3.96E-10 +Part-Species28-omega=0.24 +Part-Species28-CharaTempVib=2741.7 +Part-Species28-Ediss_eV=5.115 +Part-Species28-CharaTempRot = 2.4 +Part-Species28-SymmetryFactor = 2 +Part-Species28-PreviousState=22 +Part-Species28-HeatOfFormation_K=140136.53 +! =============================================================================== ! +! Species29, NO+ +! =============================================================================== ! +Part-Species29-SpeciesName=NOIon1 +Part-Species29-MassIC=4.9829089E-26 +Part-Species29-ChargeIC=1.60217653E-19 +Part-Species29-InteractionID = 20 +Part-Species29-Tref =273 +Part-Species29-dref = 4.00E-10 +Part-Species29-omega=0.24 +Part-Species29-CharaTempVib=3419.2 +Part-Species29-Ediss_eV=6.496 +Part-Species29-CharaTempRot = 2.9 +Part-Species29-SymmetryFactor = 1 +Part-Species29-PreviousState=26 +Part-Species29-HeatOfFormation_K=10906.63 +! =============================================================================== ! +! Species30, Fe +! =============================================================================== ! +Part-Species30-SpeciesName=Fe +Part-Species30-MassIC=9.27342803475E-26 +Part-Species30-ChargeIC=0.0 +Part-Species30-InteractionID = 1 +Part-Species30-Tref =1000 +Part-Species30-dref = 5.605E-10 +Part-Species30-omega=0.369 +Part-Species30-alpha=1.225 +! =============================================================================== ! +! Species31, Fe+ +! =============================================================================== ! +Part-Species31-SpeciesName=FeIon1 +Part-Species31-MassIC=9.27333693475E-26 +Part-Species31-ChargeIC=1.60217653E-19 +Part-Species31-InteractionID = 10 +Part-Species31-Tref =1000 +Part-Species31-dref = 5.605E-10 +Part-Species31-omega=0.369 +Part-Species31-alpha=1.225 +Part-Species31-PreviousState=30 +! =============================================================================== ! +! Species32, Xe +! =============================================================================== ! +Part-Species32-SpeciesName = Xe +Part-Species31-MassIC=2.180206261915E-25 +Part-Species31-ChargeIC=0.0 +Part-Species32-InteractionID = 1 +Part-Species32-Tref = 273 +Part-Species32-dref = 5.74E-10 +Part-Species32-omega=0.35 +Part-Species32-HeatOfFormation_K = 0.0 +! =============================================================================== ! +! Species33, Xe+ +! =============================================================================== ! +Part-Species33-SpeciesName = XeIon1 +Part-Species31-MassIC=2.180197151915E-25 +Part-Species31-ChargeIC=1.60217653E-19 +Part-Species33-InteractionID = 10 +Part-Species33-Tref = 273 +Part-Species33-dref = 5.74E-10 +Part-Species33-omega=0.35 +Part-Species33-PreviousState =32 +Part-Species33-HeatOfFormation_K = 140830.72 +! =============================================================================== ! +! Species34, Ar +! =============================================================================== ! +Part-Species34-SpeciesName=Ar +Part-Species34-MassIC=6.6336270594E-26 +Part-Species34-ChargeIC=0.0 +Part-Species34-InteractionID = 1 +Part-Species34-VHSReferenceTemp = 273 +Part-Species34-VHSReferenceDiam = 4.05E-10 +Part-Species34-omegaVHS=0.24 +Part-Species34-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species35, CO+ +! =============================================================================== ! +Part-Species35-SpeciesName=COIon1 +Part-Species35-MassIC=4.6511528655E-26 +Part-Species35-ChargeIC=1.60217653E-19 +Part-Species35-InteractionID=20 +Part-Species35-VHSReferenceTemp=273 +Part-Species35-VHSReferenceDiam=4.17E-10 +Part-Species35-omegaVHS=0.24 +Part-Species35-CharaTempVib=3120.7 +Part-Species35-Ediss_eV=11.06 +Part-Species35-HeatOfFormation_K=-13694.23 +Part-Species35-CharaTempRot = 2.8 +Part-Species35-SymmetryFactor = 1 +! =============================================================================== ! +! Species36, He +! =============================================================================== ! +Part-Species36-SpeciesName = He +Part-Species36-MassIC = 6.646582791431E-27 +Part-Species36-ChargeIC = 0.0 +Part-Species36-InteractionID = 1 +Part-Species36-Tref = 300 +Part-Species36-dref = 3.0E-10 +Part-Species36-omega = 0.2 +Part-Species36-HeatOfFormation_K = 0.0 +! =============================================================================== ! +! Species37, He+ +! =============================================================================== ! +Part-Species37-SpeciesName = HeIon1 +Part-Species37-MassIC = 6.645671791431E-27 +Part-Species37-ChargeIC = 1.60217653E-19 +Part-Species37-InteractionID = 10 +Part-Species37-Tref = 300 +Part-Species37-dref = 3.0E-10 +Part-Species37-omega = 0.2 +Part-Species37-PreviousState = 36 +! =============================================================================== ! +! Species38, He+2 +! =============================================================================== ! +Part-Species38-SpeciesName = HeIon2 +Part-Species38-MassIC = 6.644760791431E-27 +Part-Species38-ChargeIC = 3.20435306E-19 +Part-Species38-InteractionID = 10 +Part-Species38-Tref = 300 +Part-Species38-dref = 3.0E-10 +Part-Species38-omega = 0.2 +Part-Species38-PreviousState = 37 +! =============================================================================== ! +! Species39, C2+ +! =============================================================================== ! +Part-Species39-SpeciesName = CIon2 +Part-Species39-MassIC = 1.9937267E-26 +Part-Species39-ChargeIC = 3.20435306E-19 +Part-Species39-InteractionID = 10 +Part-Species39-Tref = 300 +Part-Species39-dref = 4.67E-10 +Part-Species39-omega = 0.2 +Part-Species39-PreviousState = 18 +! =============================================================================== ! +! Species40, C3+ +! =============================================================================== ! +Part-Species40-SpeciesName = CIon3 +Part-Species40-MassIC = 1.9936356E-26 +Part-Species40-ChargeIC = 4.80652959E-19 +Part-Species40-InteractionID = 10 +Part-Species40-Tref = 300 +Part-Species40-dref = 4.67E-10 +Part-Species40-omega = 0.2 +Part-Species40-PreviousState = 39 +! =============================================================================== ! +! Species41, C4+ +! =============================================================================== ! +Part-Species41-SpeciesName = CIon4 +Part-Species41-MassIC = 1.9935445E-26 +Part-Species41-ChargeIC = 6.40870612E-19 +Part-Species41-InteractionID = 10 +Part-Species41-Tref = 300 +Part-Species41-dref = 4.67E-10 +Part-Species41-omega = 0.2 +Part-Species41-PreviousState = 40 +! =============================================================================== ! +! Species42, C5+ +! =============================================================================== ! +Part-Species42-SpeciesName = CIon5 +Part-Species42-MassIC = 1.9934534E-26 +Part-Species42-ChargeIC = 8.01088265E-19 +Part-Species42-InteractionID = 10 +Part-Species42-Tref = 300 +Part-Species42-dref = 4.67E-10 +Part-Species42-omega = 0.2 +Part-Species42-PreviousState = 41 +! =============================================================================== ! +! Species43, C6+ +! =============================================================================== ! +Part-Species43-SpeciesName = CIon6 +Part-Species43-MassIC = 1.9933623 +Part-Species43-ChargeIC = 9.61305918E-19 +Part-Species43-InteractionID = 10 +Part-Species43-Tref = 300 +Part-Species43-dref = 4.67E-10 +Part-Species43-omega = 0.2 +Part-Species43-PreviousState = 42 +Part-Species43-FullyIonized = T diff --git a/tools/species_database/Species_Database.h5 b/tools/species_database/Species_Database.h5 deleted file mode 100644 index 2f6c9530ed89effde63fdd23ab9f955d90338328..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232944 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 I5#bvC59ZuDO#lD@ diff --git a/tools/species_database/DSMC_Titan.ini b/tools/species_database/Titan-wo-Argon_18Spec_30Reac_Gokcen2007.ini similarity index 95% rename from tools/species_database/DSMC_Titan.ini rename to tools/species_database/Titan-wo-Argon_18Spec_30Reac_Gokcen2007.ini index 2daacd392..0c1beaa74 100755 --- a/tools/species_database/DSMC_Titan.ini +++ b/tools/species_database/Titan-wo-Argon_18Spec_30Reac_Gokcen2007.ini @@ -283,12 +283,25 @@ Part-Species18-PreviousState = 12 ! Data for chemical Reaction ! =============================================================================== ! DSMC-NumOfReactions=30 ! 18 Species, 28 Reactions + +DSMC-Reaction1-ReactionName=CH4+M_CH3+H+M +DSMC-Reaction2-ReactionName=CH3+M_CH2+H+M +DSMC-Reaction3-ReactionName=CH3+M_CH+H2+M +DSMC-Reaction4-ReactionName=CH2+M_CH+H+M +DSMC-Reaction5-ReactionName=CH2+M_H2+C+M +DSMC-Reaction6-ReactionName=CH+M_C+H+M +DSMC-Reaction7-ReactionName=N2+M_N+N+M +DSMC-Reaction8-ReactionName=N2+A_N+N+A +DSMC-Reaction9-ReactionName=C2+M_C+C+M +DSMC-Reaction10-ReactionName=H2+M_H+H+M +DSMC-Reaction11-ReactionName=CN+M_C+N+M +DSMC-Reaction12-ReactionName=NH+M_N+H+M +DSMC-Reaction13-ReactionName=HCN+M_CN+H+M !--------------------------------------------------------------------! !##################### Dissociation Reactions #######################! !--------------------------------------------------------------------! !--------- Reaction1: CH4 + M -> CH3 + H + M ------------------------! !--------------------------------------------------------------------! -DSMC-Reaction1-ReactionName = DISS_CH4_TO_CH3 DSMC-Reaction1-Reactants=(/1,0,0/) DSMC-Reaction1-Products=(/2,0,13,0/) DSMC-Reaction1-Arrhenius-Prefactor=7.8047E+17 ! A_f @@ -299,7 +312,6 @@ DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 !--------------------------------------------------------------------! !--------- Reaction2: CH3 + M -> CH2 + H + M ------------------------! !--------------------------------------------------------------------! -DSMC-Reaction2-ReactionName = DISS_CH3_TO_CH2 DSMC-Reaction2-Reactants=(/2,0,0/) DSMC-Reaction2-Products=(/3,0,13,0/) DSMC-Reaction2-Arrhenius-Prefactor=1.6938E-14 ! A_f @@ -310,7 +322,6 @@ DSMC-Reaction2-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 !--------------------------------------------------------------------! !--------- Reaction3: CH3 + M -> CH + H2 + M ------------------------! !--------------------------------------------------------------------! -DSMC-Reaction3-ReactionName = DISS_CH3_TO_CH DSMC-Reaction3-Reactants=(/2,0,0/) DSMC-Reaction3-Products=(/4,0,7,0/) DSMC-Reaction3-Arrhenius-Prefactor=8.3029E-15 ! A_f @@ -321,7 +332,6 @@ DSMC-Reaction3-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 !--------------------------------------------------------------------! !--------- Reaction4: CH2 + M -> CH + H + M -------------------------! !--------------------------------------------------------------------! -DSMC-Reaction4-ReactionName = DISS_CH2_TO_CH DSMC-Reaction4-Reactants=(/3,0,0/) DSMC-Reaction4-Products=(/4,0,13,0/) DSMC-Reaction4-Arrhenius-Prefactor=6.6423E-15 ! A_f @@ -332,7 +342,6 @@ DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 !--------------------------------------------------------------------! !--------- Reaction5: CH2 + M -> C + H2 + M -------------------------! !--------------------------------------------------------------------! -DSMC-Reaction5-ReactionName = DISS_CH2_TO_C DSMC-Reaction5-Reactants=(/3,0,0/) DSMC-Reaction5-Products=(/7,0,12,0/) DSMC-Reaction5-Arrhenius-Prefactor=2.1588E-16 ! A_f @@ -341,9 +350,8 @@ DSMC-Reaction5-Activation-Energy_K=29700 ! E_a DSMC-Reaction5-NumberOfNonReactives=18 DSMC-Reaction5-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/) !--------------------------------------------------------------------! -!--------- Reaction6: CH + M -> C + H2 + M --------------------------! +!--------- Reaction6: CH + M -> C + H + M --------------------------! !--------------------------------------------------------------------! -DSMC-Reaction6-ReactionName = DISS_CH_TO_C DSMC-Reaction6-Reactants=(/4,0,0/) DSMC-Reaction6-Products=(/12,0,13,0/) DSMC-Reaction6-Arrhenius-Prefactor=3.1551E-16 ! A_f @@ -354,7 +362,6 @@ DSMC-Reaction6-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 !--------------------------------------------------------------------! !--------- Reaction7a: N2 + M -> N + N + M --------------------------! !--------------------------------------------------------------------! -DSMC-Reaction7-ReactionName = DISS_N2 DSMC-Reaction7-Reactants=(/5,0,0/) DSMC-Reaction7-Products=(/11,0,11,0/) DSMC-Reaction7-Arrhenius-Prefactor=1.1624E-08 ! A_f @@ -365,7 +372,6 @@ DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,14,15,16/) !--------------------------------------------------------------------! !--------- Reaction7b: N2 + N/C/H -> N + N + N/C/H ------------------! !--------------------------------------------------------------------! -DSMC-Reaction8-ReactionName = DISS_N2_WITH_N_C_H DSMC-Reaction8-Reactants=(/5,0,0/) DSMC-Reaction8-Products=(/11,0,11,0/) DSMC-Reaction8-Arrhenius-Prefactor=4.9817E-08 ! A_f @@ -376,7 +382,6 @@ DSMC-Reaction8-NonReactiveSpecies=(/11,12,13,17,18/) !--------------------------------------------------------------------! !--------- Reaction8: C2 + M -> C + C + M ---------------------------! !--------------------------------------------------------------------! -DSMC-Reaction9-ReactionName = DISS_C2 DSMC-Reaction9-Reactants=(/6,0,0/) DSMC-Reaction9-Products=(/12,0,12,0/) DSMC-Reaction9-Arrhenius-Prefactor=2.4909E-14 ! A_f @@ -387,7 +392,6 @@ DSMC-Reaction9-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 !--------------------------------------------------------------------! !--------- Reaction9: H2 + M -> H + H + M ---------------------------! !--------------------------------------------------------------------! -DSMC-Reaction10-ReactionName = DISS_H2 DSMC-Reaction10-Reactants=(/7,0,0/) DSMC-Reaction10-Products=(/13,0,13,0/) DSMC-Reaction10-Arrhenius-Prefactor=3.7031E-16 ! A_f @@ -398,7 +402,6 @@ DSMC-Reaction10-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,1 !--------------------------------------------------------------------! !--------- Reaction10: CN + M -> C + N + M --------------------------! !--------------------------------------------------------------------! -DSMC-Reaction11-ReactionName = DISS_CN DSMC-Reaction11-Reactants=(/8,0,0/) DSMC-Reaction11-Products=(/11,0,12,0/) DSMC-Reaction11-Arrhenius-Prefactor=4.2013E-16 ! A_f @@ -409,7 +412,6 @@ DSMC-Reaction11-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,1 !--------------------------------------------------------------------! !--------- Reaction11: HN + M -> N + H + M --------------------------! !--------------------------------------------------------------------! -DSMC-Reaction12-ReactionName = DISS_HN DSMC-Reaction12-Reactants=(/9,0,0/) DSMC-Reaction12-Products=(/11,0,13,0/) DSMC-Reaction12-Arrhenius-Prefactor=2.9890E-16 ! A_f @@ -420,7 +422,6 @@ DSMC-Reaction12-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,1 !--------------------------------------------------------------------! !--------- Reaction12: HCN + M -> CN + H + M ------------------------! !--------------------------------------------------------------------! -DSMC-Reaction13-ReactionName = DISS_HDC_TO_CN DSMC-Reaction13-Reactants=(/10,0,0/) DSMC-Reaction13-Products=(/8,0,13,0/) DSMC-Reaction13-Arrhenius-Prefactor=5.9283E-04 ! A_f @@ -433,7 +434,6 @@ DSMC-Reaction13-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,1 !--------------------------------------------------------------------! !--------- Reaction13: CH3 + H -> CH2 + H2 --------------------------! !--------------------------------------------------------------------! -DSMC-Reaction14-ReactionName = EXC_CH3_H2 DSMC-Reaction14-Reactants=(/2,13,0/) DSMC-Reaction14-Products=(/3,7,0,0/) DSMC-Reaction14-Arrhenius-Prefactor=2.1000E-14 ! A_f @@ -442,7 +442,6 @@ DSMC-Reaction14-Activation-Energy_K=8000 ! E_a !--------------------------------------------------------------------! !--------- Reaction2: CH + N2 -> HCN + N ---------------------------! !--------------------------------------------------------------------! -DSMC-Reaction15-ReactionName = EXC_CH_N2 DSMC-Reaction15-Reactants=(/4,5,0/) DSMC-Reaction15-Products=(/10,11,0,0/) DSMC-Reaction15-Arrhenius-Prefactor=7.3065E-18 ! A_f @@ -451,7 +450,6 @@ DSMC-Reaction15-Activation-Energy_K=11060 ! E_a !--------------------------------------------------------------------! !--------- Reaction15: CH + C -> C2 + H -----------------------------! !--------------------------------------------------------------------! -DSMC-Reaction16-ReactionName = EXC_CH_C DSMC-Reaction16-Reactants=(/4,12,0/) DSMC-Reaction16-Products=(/6,13,0,0/) DSMC-Reaction16-Arrhenius-Prefactor=3.3212E-16 ! A_f @@ -460,7 +458,6 @@ DSMC-Reaction16-Activation-Energy_K=0.0 ! E_a !--------------------------------------------------------------------! !--------- Reaction16: C2 + N2 -> CN + CN ---------------------------! !--------------------------------------------------------------------! -DSMC-Reaction17-ReactionName = EXC_C2_N2 DSMC-Reaction17-Reactants=(/5,6,0/) DSMC-Reaction17-Products=(/8,8,0,0/) DSMC-Reaction17-Arrhenius-Prefactor=2.4909E-17 ! A_f @@ -469,7 +466,6 @@ DSMC-Reaction17-Activation-Energy_K=21000 ! E_a !--------------------------------------------------------------------! !--------- Reaction17: H2 + CN -> HCN + H ---------------------------! !--------------------------------------------------------------------! -DSMC-Reaction18-ReactionName = EXC_CN_H2 DSMC-Reaction18-Reactants=(/7,8,0/) DSMC-Reaction18-Products=(/10,13,0,0/) DSMC-Reaction18-Arrhenius-Prefactor=1.8000E-25 ! A_f @@ -478,7 +474,6 @@ DSMC-Reaction18-Activation-Energy_K=960 ! E_a !--------------------------------------------------------------------! !--------- Reaction18: CN + C -> C2 + N -----------------------------! !--------------------------------------------------------------------! -DSMC-Reaction19-ReactionName = EXC_CN_C DSMC-Reaction19-Reactants=(/8,12,0/) DSMC-Reaction19-Products=(/6,11,0,0/) DSMC-Reaction19-Arrhenius-Prefactor=8.3029E-17 ! A_f @@ -487,7 +482,6 @@ DSMC-Reaction19-Activation-Energy_K=13000 ! E_a !--------------------------------------------------------------------! !--------- Reaction19: H2 + N -> NH + H -----------------------------! !--------------------------------------------------------------------! -DSMC-Reaction20-ReactionName = EXC_H2_N DSMC-Reaction20-Reactants=(/7,11,0/) DSMC-Reaction20-Products=(/9,13,0,0/) DSMC-Reaction20-Arrhenius-Prefactor=2.6569E-16 ! A_f @@ -496,7 +490,6 @@ DSMC-Reaction20-Activation-Energy_K=12650 ! E_a !--------------------------------------------------------------------! !--------- Reaction20: N2 + C -> CN + N -----------------------------! !--------------------------------------------------------------------! -DSMC-Reaction21-ReactionName = EXC_N2_C DSMC-Reaction21-Reactants=(/5,12,0/) DSMC-Reaction21-Products=(/8,11,0,0/) DSMC-Reaction21-Arrhenius-Prefactor=8.7014E-17 ! A_f @@ -505,7 +498,6 @@ DSMC-Reaction21-Activation-Energy_K=22600 ! E_a !--------------------------------------------------------------------! !--------- Reaction21: H2 + C -> CH + H -----------------------------! !--------------------------------------------------------------------! -DSMC-Reaction22-ReactionName = EXC_H2_C DSMC-Reaction22-Reactants=(/7,12,0/) DSMC-Reaction22-Products=(/4,13,0,0/) DSMC-Reaction22-Arrhenius-Prefactor=6.6423E-16 ! A_f @@ -514,7 +506,6 @@ DSMC-Reaction22-Activation-Energy_K=11700 ! E_a !--------------------------------------------------------------------! !--------- Reaction22: N2 + H -> NH + N -----------------------------! !--------------------------------------------------------------------! -DSMC-Reaction23-ReactionName = EXC_N2_H DSMC-Reaction23-Reactants=(/5,13,0/) DSMC-Reaction23-Products=(/9,11,0,0/) DSMC-Reaction23-Arrhenius-Prefactor=4.9817E-18 ! A_f @@ -523,7 +514,6 @@ DSMC-Reaction23-Activation-Energy_K=71400 ! E_a !--------------------------------------------------------------------! !--------- Reaction23: CH4 + H -> CH3 + H2 --------------------------! !--------------------------------------------------------------------! -DSMC-Reaction24-ReactionName = EXC_CH4_H DSMC-Reaction24-Reactants=(/1,13,0/) DSMC-Reaction24-Products=(/2,7,0,0/) DSMC-Reaction24-Arrhenius-Prefactor=2.1919E-26 ! A_f @@ -533,7 +523,6 @@ DSMC-Reaction24-Activation-Energy_K=4045 ! E_a !--------------------------------------------------------------------! !--------- Reaction7c: N2 + e -> N + N + e ------------------! !--------------------------------------------------------------------! -DSMC-Reaction25-ReactionName = DISS_N2_WITH_EL DSMC-Reaction25-Reactants=(/5,14,0/) DSMC-Reaction25-Products=(/11,14,11,0/) DSMC-Reaction25-Arrhenius-Prefactor=4.98161783020654E-06 ! A_f @@ -542,7 +531,6 @@ DSMC-Reaction25-Activation-Energy_K=113200 ! E_a !--------------------------------------------------------------------! !--------- Reaction24: N + N -> N2+ + e ------------------! !--------------------------------------------------------------------! -DSMC-Reaction26-ReactionName = RECOMB_N_ION DSMC-Reaction26-Reactants=(/11,11,0/) DSMC-Reaction26-Products=(/15,14,0,0/) DSMC-Reaction26-Arrhenius-Prefactor=7.30637281763626E-23 @@ -551,7 +539,6 @@ DSMC-Reaction26-Activation-Energy_K=67500 ! E_a !--------------------------------------------------------------------! !--------- Reaction25: C + N -> CN+ + e ------------------! !--------------------------------------------------------------------! -DSMC-Reaction27-ReactionName = RECOMB_C_N_ION DSMC-Reaction27-Reactants=(/11,12,0/) DSMC-Reaction27-Products=(/16,14,0,0/) DSMC-Reaction27-Arrhenius-Prefactor=1.66053927673551E-15 @@ -560,21 +547,18 @@ DSMC-Reaction27-Activation-Energy_K=164400 ! E_a !--------------------------------------------------------------------! !--------- Reaction26: N + e -> N+ + e + e ------------------! !--------------------------------------------------------------------! -DSMC-Reaction28-ReactionName = ION_N_EL DSMC-Reaction28-ReactionModel=QK DSMC-Reaction28-Reactants=(/11,14,0/) DSMC-Reaction28-Products=(/17,14,14,0/) !--------------------------------------------------------------------! !--------- Reaction27: C + e -> C+ + e + e ------------------! !--------------------------------------------------------------------! -DSMC-Reaction29-ReactionName = ION_C_EL DSMC-Reaction29-ReactionModel=QK DSMC-Reaction29-Reactants=(/12,14,0/) DSMC-Reaction29-Products=(/18,14,14,0/) !--------------------------------------------------------------------! !--------- Reaction28: CN+ + N -> CN + N+ ------------------! !--------------------------------------------------------------------! -DSMC-Reaction30-ReactionName = EXC_CN+_N DSMC-Reaction30-Reactants=(/16,11,0/) DSMC-Reaction30-Products=(/8,17,0,0/) DSMC-Reaction30-Arrhenius-Prefactor=1.6273284912008E-17 diff --git a/tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini b/tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini new file mode 100755 index 000000000..409c42cd2 --- /dev/null +++ b/tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini @@ -0,0 +1,453 @@ +! =============================================================================== ! +! Species1, CH4 +! =============================================================================== ! +Part-Species1-PolyatomicMol=true +Part-Species1-InteractionID=2 +Part-Species1-VHSReferenceTemp=273 +Part-Species1-VHSReferenceDiam=4.63E-10 +Part-Species1-omegaVHS=0.24 +Part-Species1-NumOfAtoms=5 +Part-Species1-LinearMolec=.false. +Part-Species1-CharaTempVib1=4194.9 +Part-Species1-CharaTempVib2=2206.0 +Part-Species1-CharaTempVib3=2206.0 +Part-Species1-CharaTempVib4=4341.6 +Part-Species1-CharaTempVib5=4341.6 +Part-Species1-CharaTempVib6=4341.6 +Part-Species1-CharaTempVib7=1878.1 +Part-Species1-CharaTempVib8=1878.1 +Part-Species1-CharaTempVib9=1878.1 +Part-Species1-Ediss_eV=4.53 +Part-Species1-HeatOfFormation_K=-9002.71 +Part-Species1-CharaTempRot1 = 7.6 +Part-Species1-CharaTempRot2 = 7.6 +Part-Species1-CharaTempRot3 = 7.6 +Part-Species1-SymmetryFactor = 12 +! =============================================================================== ! +! Species2, CH3 +! =============================================================================== ! +Part-Species2-PolyatomicMol=true +Part-Species2-InteractionID=2 +Part-Species2-VHSReferenceTemp=273 +Part-Species2-VHSReferenceDiam=4.55E-10 +Part-Species2-omegaVHS=0.24 +Part-Species2-NumOfAtoms=4 +Part-Species2-LinearMolec=.false. +Part-Species2-CharaTempVib1=4320.6 +Part-Species2-CharaTempVib2=872.1 +Part-Species2-CharaTempVib3=4545.5 +Part-Species2-CharaTempVib4=4545.5 +Part-Species2-CharaTempVib5=2016.2 +Part-Species2-CharaTempVib6=2016.2 +Part-Species2-Ediss_eV=4.77 +Part-Species2-HeatOfFormation_K=17518.44 +Part-Species2-CharaTempRot1 = 13.5 +Part-Species2-CharaTempRot2 = 13.5 +Part-Species2-CharaTempRot3 = 6.8 +Part-Species2-SymmetryFactor = 6 +! =============================================================================== ! +! Species3, CH2 +! =============================================================================== ! +Part-Species3-PolyatomicMol=true +Part-Species3-InteractionID=2 +Part-Species3-VHSReferenceTemp=273 +Part-Species3-VHSReferenceDiam=4.47E-10 +Part-Species3-omegaVHS=0.24 +Part-Species3-NumOfAtoms=3 +Part-Species3-LinearMolec=.false. +Part-Species3-CharaTempVib1=4035.3 +Part-Species3-CharaTempVib2=1945.2 +Part-Species3-CharaTempVib3=4120.1 +Part-Species3-Ediss_eV=4.37 +Part-Species3-HeatOfFormation_K=46461.31 +Part-Species3-CharaTempRot1 = 72.1 +Part-Species3-CharaTempRot2 = 12.5 +Part-Species3-CharaTempRot3 = 10.6 +Part-Species3-SymmetryFactor = 2 +! =============================================================================== ! +! Species4, CH +! =============================================================================== ! +Part-Species4-InteractionID = 2 +Part-Species4-VHSReferenceTemp = 273 +Part-Species4-VHSReferenceDiam = 4.39E-10 +Part-Species4-omegaVHS=0.24 +Part-Species4-CharaTempVib=4314.3 +Part-Species4-Ediss_eV=3.49 +Part-Species4-HeatOfFormation_K=71440.92 +Part-Species4-CharaTempRot = 20.4 +Part-Species4-SymmetryFactor = 1 +! =============================================================================== ! +! Species5, N2 +! =============================================================================== ! +Part-Species5-InteractionID = 2 +Part-Species5-VHSReferenceTemp = 273 +Part-Species5-VHSReferenceDiam = 4.17E-10 +Part-Species5-omegaVHS=0.24 +Part-Species5-CharaTempVib=3392.5 +Part-Species5-Ediss_eV=9.79 +Part-Species5-HeatOfFormation_K=0.0 +Part-Species5-CharaTempRot = 2.9 +Part-Species5-SymmetryFactor = 2 +! =============================================================================== ! +! Species6, C2 +! =============================================================================== ! +Part-Species6-InteractionID = 2 +Part-Species6-VHSReferenceTemp = 273 +Part-Species6-VHSReferenceDiam = 4.88E-10 +Part-Species6-omegaVHS=0.24 +Part-Species6-CharaTempVib=2667.7 +Part-Species6-Ediss_eV=6.26 +Part-Species6-HeatOfFormation_K=100733.71 +Part-Species6-CharaTempRot = 2.6 +Part-Species6-SymmetryFactor = 2 +! =============================================================================== ! +! Species7, H2 +! =============================================================================== ! +Part-Species7-InteractionID = 2 +Part-Species7-VHSReferenceTemp = 273 +Part-Species7-VHSReferenceDiam = 3.06E-10 +Part-Species7-omegaVHS=0.24 +Part-Species7-CharaTempVib=6329.0 +Part-Species7-Ediss_eV=4.50 +Part-Species7-HeatOfFormation_K=0.0 +Part-Species7-CharaTempRot = 87.5 +Part-Species7-SymmetryFactor = 2 +! =============================================================================== ! +! Species8, CN +! =============================================================================== ! +Part-Species8-InteractionID = 2 +Part-Species8-VHSReferenceTemp = 273 +Part-Species8-VHSReferenceDiam = 5.45E-10 +Part-Species8-omegaVHS=0.24 +Part-Species8-CharaTempVib=2975.4 +Part-Species8-Ediss_eV=7.72 +Part-Species8-HeatOfFormation_K=52323.23 +Part-Species8-CharaTempRot = 2.7 +Part-Species8-SymmetryFactor = 1 +! =============================================================================== ! +! Species9, HN +! =============================================================================== ! +Part-Species9-InteractionID = 2 +Part-Species9-VHSReferenceTemp = 273 +Part-Species9-VHSReferenceDiam = 4.64E-10 +Part-Species9-omegaVHS=0.24 +Part-Species9-CharaTempVib=4721.2 +Part-Species9-Ediss_eV=4.02 +Part-Species9-HeatOfFormation_K=45279.31 +Part-Species9-CharaTempRot = 24.0 +Part-Species9-SymmetryFactor = 1 +! =============================================================================== ! +! Species10, HCN +! =============================================================================== ! +Part-Species10-PolyatomicMol=true +Part-Species10-InteractionID = 2 +Part-Species10-VHSReferenceTemp = 273 +Part-Species10-VHSReferenceDiam = 3.94E-10 +Part-Species10-omegaVHS=0.24 +Part-Species10-NumOfAtoms=3 +Part-Species10-LinearMolec=.true. +Part-Species10-CharaTempVib1=4761.5 +Part-Species10-CharaTempVib2=1023.9 +Part-Species10-CharaTempVib3=1023.9 +Part-Species10-CharaTempVib4=3015.7 +Part-Species10-Ediss_eV=9.93 +Part-Species10-HeatOfFormation_K=16249.85 +Part-Species10-CharaTempRot = 2.1 +Part-Species10-SymmetryFactor = 1 +! =============================================================================== ! +! Species11, N +! =============================================================================== ! +Part-Species11-InteractionID = 1 +Part-Species11-VHSReferenceTemp = 273 +Part-Species11-VHSReferenceDiam = 3.00E-10 +Part-Species11-omegaVHS=0.24 +Part-Species11-HeatOfFormation_K=56837.22 +! =============================================================================== ! +! Species12, C +! =============================================================================== ! +Part-Species12-InteractionID = 1 +Part-Species12-VHSReferenceTemp = 273 +Part-Species12-VHSReferenceDiam = 4.67E-10 +Part-Species12-omegaVHS=0.24 +Part-Species12-HeatOfFormation_K=86175.70 +! =============================================================================== ! +! Species13, H +! =============================================================================== ! +Part-Species13-InteractionID = 1 +Part-Species13-VHSReferenceTemp = 273 +Part-Species13-VHSReferenceDiam = 2.03E-10 +Part-Species13-omegaVHS=0.24 +Part-Species13-HeatOfFormation_K=26213.32 +! =============================================================================== ! +! Species14, Ar +! =============================================================================== ! +Part-Species14-InteractionID = 1 +Part-Species14-VHSReferenceTemp = 273 +Part-Species14-VHSReferenceDiam = 4.05E-10 +Part-Species14-omegaVHS=0.24 +Part-Species14-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=24 ! 14 Species, with Argon + +DSMC-Reaction1-ReactionName=CH4+M_CH3+H+M +DSMC-Reaction2-ReactionName=CH3+M_CH2+H+M +DSMC-Reaction3-ReactionName=CH3+M_CH+H2+M +DSMC-Reaction4-ReactionName=CH2+M_CH+H+M +DSMC-Reaction5-ReactionName=CH2+M_H2+C+M +DSMC-Reaction6-ReactionName=CH+M_C+H+M +DSMC-Reaction7-ReactionName=N2+M_N+N+M +DSMC-Reaction8-ReactionName=N2+A_N+N+A +DSMC-Reaction9-ReactionName=C2+M_C+C+M +DSMC-Reaction10-ReactionName=H2+M_H+H+M +DSMC-Reaction11-ReactionName=CN+M_C+N+M +DSMC-Reaction12-ReactionName=NH+M_N+H+M +DSMC-Reaction13-ReactionName=HCN+M_CN+H+M +!--------------------------------------------------------------------! +!##################### Dissociation Reactions #######################! +!--------------------------------------------------------------------! +!--------- Reaction1: CH4 + M -> CH3 + H + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction1-ReactionType=D +DSMC-Reaction1-Reactants=(/1,0,0/) +DSMC-Reaction1-Products=(/2,0,13/) +DSMC-Reaction1-Arrhenius-Prefactor=7.8047E+17 ! A_f +DSMC-Reaction1-Arrhenius-Powerfactor=-8.2 ! B_f +DSMC-Reaction1-Activation-Energy_K=59200.0 ! E_a +DSMC-Reaction1-NumberOfNonReactives=14 +DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) +!--------------------------------------------------------------------! +!--------- Reaction2: CH3 + M -> CH2 + H + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction2-ReactionType=D +DSMC-Reaction2-Reactants=(/2,0,0/) +DSMC-Reaction2-Products=(/3,0,13/) +DSMC-Reaction2-Arrhenius-Prefactor=1.6938E-14 ! A_f +DSMC-Reaction2-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction2-Activation-Energy_K=45600 ! E_a +DSMC-Reaction2-NumberOfNonReactives=14 +DSMC-Reaction2-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) +!--------------------------------------------------------------------! +!--------- Reaction3: CH3 + M -> CH + H2 + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction3-ReactionType=D +DSMC-Reaction3-Reactants=(/2,0,0/) +DSMC-Reaction3-Products=(/4,0,7/) +DSMC-Reaction3-Arrhenius-Prefactor=8.3029E-15 ! A_f +DSMC-Reaction3-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction3-Activation-Energy_K=42800 ! E_a +DSMC-Reaction3-NumberOfNonReactives=14 +DSMC-Reaction3-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) +!--------------------------------------------------------------------! +!--------- Reaction4: CH2 + M -> CH + H + M -------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction4-ReactionType=D +DSMC-Reaction4-Reactants=(/3,0,0/) +DSMC-Reaction4-Products=(/4,0,13/) +DSMC-Reaction4-Arrhenius-Prefactor=6.6423E-15 ! A_f +DSMC-Reaction4-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction4-Activation-Energy_K=41800 ! E_a +DSMC-Reaction4-NumberOfNonReactives=14 +DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) +!--------------------------------------------------------------------! +!--------- Reaction5: CH2 + M -> C + H2 + M -------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction5-ReactionType=D +DSMC-Reaction5-Reactants=(/3,0,0/) +DSMC-Reaction5-Products=(/7,0,12/) +DSMC-Reaction5-Arrhenius-Prefactor=2.1588E-16 ! A_f +DSMC-Reaction5-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction5-Activation-Energy_K=29700 ! E_a +DSMC-Reaction5-NumberOfNonReactives=14 +DSMC-Reaction5-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) +!--------------------------------------------------------------------! +!--------- Reaction6: CH + M -> C + H + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction6-ReactionType=D +DSMC-Reaction6-Reactants=(/4,0,0/) +DSMC-Reaction6-Products=(/12,0,13/) +DSMC-Reaction6-Arrhenius-Prefactor=3.1551E-16 ! A_f +DSMC-Reaction6-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction6-Activation-Energy_K=33700 ! E_a +DSMC-Reaction6-NumberOfNonReactives=14 +DSMC-Reaction6-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) +!--------------------------------------------------------------------! +!--------- Reaction7a: N2 + M -> N + N + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction7-ReactionType=D +DSMC-Reaction7-Reactants=(/5,0,0/) +DSMC-Reaction7-Products=(/11,0,11/) +DSMC-Reaction7-Arrhenius-Prefactor=1.1624E-08 ! A_f +DSMC-Reaction7-Arrhenius-Powerfactor=-1.6 ! B_f +DSMC-Reaction7-Activation-Energy_K=113200 ! E_a +DSMC-Reaction7-NumberOfNonReactives=11 +DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,14/) +!--------------------------------------------------------------------! +!--------- Reaction7b: N2 + N/C/H -> N + N + N/C/H ------------------! +!--------------------------------------------------------------------! +DSMC-Reaction8-ReactionType=D +DSMC-Reaction8-Reactants=(/5,0,0/) +DSMC-Reaction8-Products=(/11,0,11/) +DSMC-Reaction8-Arrhenius-Prefactor=4.9817E-08 ! A_f +DSMC-Reaction8-Arrhenius-Powerfactor=-1.6 ! B_f +DSMC-Reaction8-Activation-Energy_K=113200 ! E_a +DSMC-Reaction8-NumberOfNonReactives=3 +DSMC-Reaction8-NonReactiveSpecies=(/11,12,13/) +!--------------------------------------------------------------------! +!--------- Reaction8: C2 + M -> C + C + M ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction9-ReactionType=D +DSMC-Reaction9-Reactants=(/6,0,0/) +DSMC-Reaction9-Products=(/12,0,12/) +DSMC-Reaction9-Arrhenius-Prefactor=2.4909E-14 ! A_f +DSMC-Reaction9-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction9-Activation-Energy_K=71600 ! E_a +DSMC-Reaction9-NumberOfNonReactives=14 +DSMC-Reaction9-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) +!--------------------------------------------------------------------! +!--------- Reaction9: H2 + M -> H + H + M ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction10-ReactionType=D +DSMC-Reaction10-Reactants=(/7,0,0/) +DSMC-Reaction10-Products=(/13,0,13/) +DSMC-Reaction10-Arrhenius-Prefactor=3.7031E-16 ! A_f +DSMC-Reaction10-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction10-Activation-Energy_K=48350 ! E_a +DSMC-Reaction10-NumberOfNonReactives=14 +DSMC-Reaction10-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) +!--------------------------------------------------------------------! +!--------- Reaction10: CN + M -> C + N + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction11-ReactionType=D +DSMC-Reaction11-Reactants=(/8,0,0/) +DSMC-Reaction11-Products=(/11,0,12/) +DSMC-Reaction11-Arrhenius-Prefactor=4.2013E-16 ! A_f +DSMC-Reaction11-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction11-Activation-Energy_K=71000 ! E_a +DSMC-Reaction11-NumberOfNonReactives=14 +DSMC-Reaction11-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) +!--------------------------------------------------------------------! +!--------- Reaction11: HN + M -> N + H + M --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction12-ReactionType=D +DSMC-Reaction12-Reactants=(/9,0,0/) +DSMC-Reaction12-Products=(/11,0,13/) +DSMC-Reaction12-Arrhenius-Prefactor=2.9890E-16 ! A_f +DSMC-Reaction12-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction12-Activation-Energy_K=37600 ! E_a +DSMC-Reaction12-NumberOfNonReactives=14 +DSMC-Reaction12-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) +!--------------------------------------------------------------------! +!--------- Reaction12: HCN + M -> CN + H + M ------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction13-ReactionType=D +DSMC-Reaction13-Reactants=(/10,0,0/) +DSMC-Reaction13-Products=(/8,0,13/) +DSMC-Reaction13-Arrhenius-Prefactor=5.9283E-04 ! A_f +DSMC-Reaction13-Arrhenius-Powerfactor=-2.6 ! B_f +DSMC-Reaction13-Activation-Energy_K=62845 ! E_a +DSMC-Reaction13-NumberOfNonReactives=14 +DSMC-Reaction13-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) +!--------------------------------------------------------------------! +!################## Exchange & Radical Reactions ####################! +!--------------------------------------------------------------------! +!--------- Reaction13: CH3 + H -> CH2 + H2 --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction14-ReactionType=E +DSMC-Reaction14-Reactants=(/2,13,0/) +DSMC-Reaction14-Products=(/3,7,0/) +DSMC-Reaction14-Arrhenius-Prefactor=2.1000E-14 ! A_f +DSMC-Reaction14-Arrhenius-Powerfactor=-0.56 ! B_f +DSMC-Reaction14-Activation-Energy_K=8000 ! E_a + +!--------------------------------------------------------------------! +!--------- Reaction2: CH + N2 -> HCN + N ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction15-ReactionType=E +DSMC-Reaction15-Reactants=(/4,5,0/) +DSMC-Reaction15-Products=(/10,11,0/) +DSMC-Reaction15-Arrhenius-Prefactor=7.3065E-18 ! A_f +DSMC-Reaction15-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction15-Activation-Energy_K=11060 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction15: CH + C -> C2 + H -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction16-ReactionType=E +DSMC-Reaction16-Reactants=(/4,12,0/) +DSMC-Reaction16-Products=(/6,13,0/) +DSMC-Reaction16-Arrhenius-Prefactor=3.3212E-16 ! A_f +DSMC-Reaction16-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction16-Activation-Energy_K=0.0 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction16: C2 + N2 -> CN + CN ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction17-ReactionType=E +DSMC-Reaction17-Reactants=(/5,6,0/) +DSMC-Reaction17-Products=(/8,8,0/) +DSMC-Reaction17-Arrhenius-Prefactor=2.4909E-17 ! A_f +DSMC-Reaction17-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction17-Activation-Energy_K=21000 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction17: H2 + CN -> HCN + H ---------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction18-ReactionType=E +DSMC-Reaction18-Reactants=(/7,8,0/) +DSMC-Reaction18-Products=(/10,13,0/) +DSMC-Reaction18-Arrhenius-Prefactor=1.8000E-25 ! A_f +DSMC-Reaction18-Arrhenius-Powerfactor=2.6 ! B_f +DSMC-Reaction18-Activation-Energy_K=960 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction18: CN + C -> C2 + N -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction19-ReactionType=E +DSMC-Reaction19-Reactants=(/8,12,0/) +DSMC-Reaction19-Products=(/6,11,0/) +DSMC-Reaction19-Arrhenius-Prefactor=8.3029E-17 ! A_f +DSMC-Reaction19-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction19-Activation-Energy_K=13000 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction19: H2 + N -> NH + H -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction20-ReactionType=E +DSMC-Reaction20-Reactants=(/7,11,0/) +DSMC-Reaction20-Products=(/9,13,0/) +DSMC-Reaction20-Arrhenius-Prefactor=2.6569E-16 ! A_f +DSMC-Reaction20-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction20-Activation-Energy_K=12650 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction20: N2 + C -> CN + N -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction21-ReactionType=E +DSMC-Reaction21-Reactants=(/5,12,0/) +DSMC-Reaction21-Products=(/8,11,0/) +DSMC-Reaction21-Arrhenius-Prefactor=8.7014E-17 ! A_f +DSMC-Reaction21-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction21-Activation-Energy_K=22600 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction21: H2 + C -> CH + H -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction22-ReactionType=E +DSMC-Reaction22-Reactants=(/7,12,0/) +DSMC-Reaction22-Products=(/4,13,0/) +DSMC-Reaction22-Arrhenius-Prefactor=6.6423E-16 ! A_f +DSMC-Reaction22-Arrhenius-Powerfactor=0.0 ! B_f +DSMC-Reaction22-Activation-Energy_K=11700 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction22: N2 + H -> NH + N -----------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction23-ReactionType=E +DSMC-Reaction23-Reactants=(/5,13,0/) +DSMC-Reaction23-Products=(/9,11,0/) +DSMC-Reaction23-Arrhenius-Prefactor=4.9817E-18 ! A_f +DSMC-Reaction23-Arrhenius-Powerfactor=0.50 ! B_f +DSMC-Reaction23-Activation-Energy_K=71400 ! E_a +!--------------------------------------------------------------------! +!--------- Reaction23: CH4 + H -> CH3 + H2 --------------------------! +!--------------------------------------------------------------------! +DSMC-Reaction24-ReactionType=E +DSMC-Reaction24-Reactants=(/1,13,0/) +DSMC-Reaction24-Products=(/2,7,0/) +DSMC-Reaction24-Arrhenius-Prefactor=2.1919E-26 ! A_f +DSMC-Reaction24-Arrhenius-Powerfactor=3.0 ! B_f +DSMC-Reaction24-Activation-Energy_K=4045 ! E_a diff --git a/tools/species_database/XSec_Database.h5 b/tools/species_database/XSec_Database.h5 deleted file mode 100755 index 903c23a896d281cd3b3c38d38f0d9a021e4f6567..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52056 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 diff --git a/tools/species_database/Rad.dat b/tools/species_database/XSec_H2-Plasma_6Spec_11Reac.ini similarity index 90% rename from tools/species_database/Rad.dat rename to tools/species_database/XSec_H2-Plasma_6Spec_11Reac.ini index 65a5bac7d..f776f15c5 100755 --- a/tools/species_database/Rad.dat +++ b/tools/species_database/XSec_H2-Plasma_6Spec_11Reac.ini @@ -1,9 +1,8 @@ + ! =============================================================================== ! ! Species1, H2 ! =============================================================================== ! Part-Species1-SpeciesName = H2 -Part-Species1-MassIC = 3.34800E-27 -Part-Species1-ChargeIC = 0.0 Part-Species1-InteractionID = 2 Part-Species1-Tref = 1000 Part-Species1-dref = 2.68E-10 @@ -15,8 +14,6 @@ Part-Species1-Ediss_eV = 4.47 ! Species2, H ! =============================================================================== ! Part-Species2-SpeciesName = H -Part-Species2-MassIC = 1.67400E-27 -Part-Species2-ChargeIC = 0.0 Part-Species2-InteractionID = 1 Part-Species2-Tref = 1000 Part-Species2-dref = 2.581E-10 @@ -26,40 +23,39 @@ Part-Species2-HeatOfFormation_K = 26159.76 ! Species3, e ! =============================================================================== ! Part-Species3-SpeciesName = electron -Part-Species3-MassIC = 9.11E-31 -Part-Species3-ChargeIC = -1.60217653E-19 Part-Species3-InteractionID = 4 Part-Species3-Tref = 1000 Part-Species3-dref = 2.817920E-15 Part-Species3-omega = 0.407 +Part-Species3-UseCollXSec = T +Part-Species3-UseVibXSec = T ! =============================================================================== ! ! Species4, H2Ion ! =============================================================================== ! Part-Species4-SpeciesName = H2Ion1 -Part-Species4-MassIC = 3.3470890E-27 -Part-Species4-ChargeIC = 1.60217653E-19 Part-Species4-InteractionID = 20 Part-Species4-Tref = 1000 Part-Species4-dref = 3.883E-10 Part-Species4-omega = 0.407 Part-Species4-CharaTempVib = 3341.01 Part-Species4-Ediss_eV = 2.65 +Part-Species4-PreviousState = 1 +Part-Species4-UseVibXSec = T ! =============================================================================== ! ! Species5, HIon ! =============================================================================== ! Part-Species5-SpeciesName = HIon1 -Part-Species5-MassIC = 1.6730890E-27 -Part-Species5-ChargeIC = 1.60217653E-19 Part-Species5-InteractionID = 10 Part-Species5-Tref = 1000 Part-Species5-dref = 3.912E-10 Part-Species5-omega = 0.407 +Part-Species5-PreviousState = 2 +Part-Species5-UseCollXSec = T +Part-Species5-UseVibXSec = T ! =============================================================================== ! ! Species6, H3Ion ! =============================================================================== ! Part-Species6-SpeciesName = H3Ion1 -Part-Species6-MassIC = 5.0210890E-27 -Part-Species6-ChargeIC = 1.60217653E-19 Part-Species6-InteractionID = 20 Part-Species6-PolyatomicMol = T Part-Species6-NumOfAtoms = 3 @@ -72,6 +68,8 @@ Part-Species6-CharaTempVib2 = 3627.94 Part-Species6-CharaTempVib3 = 3627.94 Part-Species6-Ediss_eV = 4.51 Part-Species6-HeatOfFormation_K = 132803.52 +Part-Species6-PreviousState = 0 +Part-Species6-UseCollXSec = T ! =============================================================================== ! ! Reactions ! =============================================================================== ! @@ -133,4 +131,4 @@ DSMC-Reaction2-Products = (/1,2,2,5/) ! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H2 + HIon1 DSMC-Reaction3-ReactionModel = XSec DSMC-Reaction3-Reactants = (/1,6,0/) -DSMC-Reaction3-Products = (/1,1,5,0/) +DSMC-Reaction3-Products = (/1,1,5,0/) \ No newline at end of file diff --git a/tools/species_database/XSec_H_Ionization_3Spec_1Reac.ini b/tools/species_database/XSec_H_Ionization_3Spec_1Reac.ini new file mode 100644 index 000000000..a78886902 --- /dev/null +++ b/tools/species_database/XSec_H_Ionization_3Spec_1Reac.ini @@ -0,0 +1,40 @@ +! =============================================================================== ! +! Species1, H +! =============================================================================== ! +Part-Species1-SpeciesName = H +Part-Species1-InteractionID = 1 +Part-Species1-Tref = 273 +Part-Species1-dref = 2.03E-10 +Part-Species1-omega = 0.24 +Part-Species1-HeatOfFormation_K = 26213.32 +! =============================================================================== ! +! Species2, e +! =============================================================================== ! +Part-Species2-SpeciesName = electron +Part-Species2-InteractionID = 4 +Part-Species2-Tref = 273 +Part-Species2-dref = 2.817920E-15 +Part-Species2-omega = 0.24 +! =============================================================================== ! +! Species3, H+ +! =============================================================================== ! +Part-Species3-SpeciesName = HIon1 +Part-Species3-InteractionID = 10 +Part-Species3-Tref = 273 +Part-Species3-dref = 2.03E-10 +Part-Species3-omega = 0.24 +Part-Species3-PreviousState = 1 +Part-Species3-FullyIonized = T +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=1 +! =============== ! +! Ionization +! =============== ! +! Reaction 1 | H + M --> HIon + M + e +DSMC-Reaction1-ReactionModel = QK +DSMC-Reaction1-Reactants = (/1,0,0/) +DSMC-Reaction1-Products = (/3,0,2,0/) +DSMC-Reaction1-NumberOfNonReactives = 3 +DSMC-Reaction1-NonReactiveSpecies = (/1,2,3/) diff --git a/tools/species_database/XSec_Xe-Plasma_3Spec_1Reac.ini b/tools/species_database/XSec_Xe-Plasma_3Spec_1Reac.ini new file mode 100644 index 000000000..3d33a1a4e --- /dev/null +++ b/tools/species_database/XSec_Xe-Plasma_3Spec_1Reac.ini @@ -0,0 +1,48 @@ +! =============================================================================== ! +! Species1, Xe (BGG) +! =============================================================================== ! +Part-Species1-SpeciesName = Xe +Part-Species1-InteractionID = 1 +Part-Species1-Tref = 273 ! K +Part-Species1-dref = 5.74E-10 ! m +Part-Species1-omega=0.35 +Part-Species1-HeatOfFormation_K = 0.0 +! =============================================================================== ! +! Species2, e +! =============================================================================== ! +Part-Species2-SpeciesName = electron +Part-Species2-InteractionID = 4 +Part-Species2-Tref = 1000 +Part-Species2-dref = 2.817920E-15 +Part-Species2-omega = 0.407 +!Part-Species2-UseCollXSec = T +! =============================================================================== ! +! Species3, Xe+ +! =============================================================================== ! +Part-Species3-SpeciesName = XeIon1 +Part-Species3-InteractionID = 10 +Part-Species3-Tref = 273 ! K +Part-Species3-dref = 5.74E-10 ! m +Part-Species3-omega=0.35 +Part-Species3-PreviousState = 1 + + + + + + + + + +! =============================================================================== ! +! Reactions +! =============================================================================== ! +DSMC-NumOfReactions=1 + +! ---------------------------------------------------- +! Electron impact +! ---------------------------------------------------- +! Dissociation: Xe + e --> Xe+ + e + e +DSMC-Reaction1-ReactionModel = XSec +DSMC-Reaction1-Reactants = (/1,2,0/) +DSMC-Reaction1-Products = (/3,2,2,0/) diff --git a/tools/species_database/create_species_database.py b/tools/species_database/create_species_database.py index d834ccec4..409307216 100644 --- a/tools/species_database/create_species_database.py +++ b/tools/species_database/create_species_database.py @@ -4,6 +4,7 @@ import h5py from argparse import ArgumentParser from datetime import date +import re parser = ArgumentParser(prog='create_species_database') parser.add_argument("-p", "--parameter", dest="ini_filename", @@ -13,11 +14,11 @@ parser.add_argument("-c", "--crosssection", dest="database_crosssection", help="Crosssection database to read-in parameters", metavar="FILE", default="XSec_Database.h5") parser.add_argument("-o", "--output", dest="database_output", - help="Output file name", metavar="FILE", default="Species_Database.h5") + help="Output file name", metavar="FILE", default="SpeciesDatabase.h5") parser.add_argument("-r", "--reference", dest="reference", help="Reference for species data", default="Unknown") -parser.add_argument("-s", "--radiation", dest="rad_file_name", - help="Radiation file to read-in parameters", metavar="FILE", default="Rad.dat") +# parser.add_argument("-s", "--radiation", dest="rad_file_name", +# help="Radiation file to read-in parameters", metavar="FILE", default="Rad.dat") args = parser.parse_args() @@ -25,6 +26,12 @@ h5_electronic = h5py.File(args.database_electronic, 'r') h5_crosssection = h5py.File(args.database_crosssection, 'r') +model_name = args.ini_filename[:-4] +model_name = 'DSMC3' +items = re.split('_+', model_name) +indices_to_modify = [1,2] +model_name_split = [item[:-4] if i in indices_to_modify else item for i, item in enumerate(items)] + def is_float(value): try: float(value) @@ -53,35 +60,35 @@ def is_float(value): hdf_xsec_group = h5_species.create_group('Cross-Sections') hdf_xsec_group.attrs['* Created'] = date.today().strftime("%B %d, %Y") -hdf_rad_group = 'Radiation' -if hdf_rad_group in h5_species.keys(): - print('Group Radiation already exists.') - hdf_rad_group = h5_species['Radiation'] - hdf_rad_group.attrs['* Last Modified'] = date.today().strftime("%B %d, %Y") -else: - print('Group Radiation does not exist, creating new group.') - hdf_rad_group = h5_species.create_group('Radiation') - hdf_rad_group.attrs['* Created'] = date.today().strftime("%B %d, %Y") +# hdf_rad_group = 'Radiation' +# if hdf_rad_group in h5_species.keys(): +# print('Group Radiation already exists.') +# hdf_rad_group = h5_species['Radiation'] +# hdf_rad_group.attrs['* Last Modified'] = date.today().strftime("%B %d, %Y") +# else: +# print('Group Radiation does not exist, creating new group.') +# hdf_rad_group = h5_species.create_group('Radiation') +# hdf_rad_group.attrs['* Created'] = date.today().strftime("%B %d, %Y") -hdf_reac_group = 'Reaction' +hdf_reac_group = 'Reactions' if hdf_reac_group in h5_species.keys(): print('Group Reaction already exists.') - hdf_reac_group = h5_species['Reaction'] + hdf_reac_group = h5_species['Reactions'] hdf_reac_group.attrs['* Last Modified'] = date.today().strftime("%B %d, %Y") else: - print('Group Reaction does not exist, creating new group.') - hdf_reac_group = h5_species.create_group('Reaction') + print('Group Reactions does not exist, creating new group.') + hdf_reac_group = h5_species.create_group('Reactions') hdf_reac_group.attrs['* Created'] = date.today().strftime("%B %d, %Y") -hdf_surf_group = 'Surface-Chemistry' -if hdf_surf_group in h5_species.keys(): - print('Group Surface-Chemistry already exists.') - hdf_surf_group = h5_species['Surface-Chemistry'] - hdf_surf_group.attrs['* Last Modified'] = date.today().strftime("%B %d, %Y") -else: - print('Group Surface-Chemistry does not exist, creating new group.') - hdf_surf_group = h5_species.create_group('Surface-Chemistry') - hdf_surf_group.attrs['* Created'] = date.today().strftime("%B %d, %Y") +# hdf_surf_group = 'Surface-Chemistry' +# if hdf_surf_group in h5_species.keys(): +# print('Group Surface-Chemistry already exists.') +# hdf_surf_group = h5_species['Surface-Chemistry'] +# hdf_surf_group.attrs['* Last Modified'] = date.today().strftime("%B %d, %Y") +# else: +# print('Group Surface-Chemistry does not exist, creating new group.') +# hdf_surf_group = h5_species.create_group('Surface-Chemistry') +# hdf_surf_group.attrs['* Created'] = date.today().strftime("%B %d, %Y") logical_list = ['PolyatomicMol', 'LinearMolec'] spec_attr_list = ['PreviousState'] @@ -159,22 +166,29 @@ def is_float(value): print('Cross-section added: ', dataset) hdf_xsec_group.copy(source=h5_crosssection[dataset],dest=hdf_xsec_group) -# Radiation data -species_list = ['N','O','NIon1','OIon1','H','Xe','XeIon1','XeIon2','Ar','ArIon1','ArIon2'] -for rad_spec in species_list: - if rad_spec in hdf_rad_group.keys(): - print('Radiative species already exists: ', rad_spec) - rad_spec_group = hdf_rad_group[rad_spec] - else: - print('Radiative species added to the database: ', rad_spec) - rad_spec_group = hdf_rad_group.create_group(rad_spec) - rad_spec_group.attrs['* Created'] = date.today().strftime("%B %d, %Y") - lines = rad_spec_group.create_dataset('Lines',data=[0]) - levels = rad_spec_group.create_dataset('Levels',data=[0]) - +# # Radiation data +# species_list = ['N','O','NIon1','OIon1','H','Xe','XeIon1','XeIon2','Ar','ArIon1','ArIon2'] +# for rad_spec in species_list: +# if rad_spec in hdf_rad_group.keys(): +# print('Radiative species already exists: ', rad_spec) +# rad_spec_group = hdf_rad_group[rad_spec] +# else: +# print('Radiative species added to the database: ', rad_spec) +# rad_spec_group = hdf_rad_group.create_group(rad_spec) +# rad_spec_group.attrs['* Created'] = date.today().strftime("%B %d, %Y") +# lines = rad_spec_group.create_dataset('Lines',data=[0]) +# levels = rad_spec_group.create_dataset('Levels',data=[0]) + +educt_attr_list = ['Reactants'] +product_attr_list = ['Reactants', 'Products'] +educt_dict = {} +product_dict = {} reac_attr_list = ['Reactants', 'Products', 'NonReactiveSpecies'] - -# Read-in of gas-phase reaction data + +ReacName_dict = {} +reac_dict = {} + +# Read-in of the gas-phase reaction names or create them separately if not defined with open(args.ini_filename) as file: reac_dict = {} for line in file: @@ -186,13 +200,139 @@ def is_float(value): hdf_reac = var_value reac_count = var_name[0] reac_dict[reac_count] = hdf_reac - if hdf_reac in hdf_reac_group.keys(): - print('Reaction already exists: ', hdf_reac) - hdf_reac = hdf_reac_group[hdf_reac] - else: - print('Reaction added to the database: ', hdf_reac) - hdf_reac = hdf_reac_group.create_dataset(hdf_reac,data=[0]) - hdf_reac.attrs['* Created'] = date.today().strftime("%B %d, %Y") + if var_name[1] in educt_attr_list: + var_value = var_value.replace(',0', '').replace('(/', '').replace('/)', '').split(',') + educt_dict[var_name[0]] = var_value + elif var_name[1] in product_attr_list: + var_value = var_value.replace(',0', '').replace('(/', '').replace('/)', '').split(',') + product_dict[var_name[0]] = var_value + if var_name[0] not in ReacName_dict: + ReacName_dict[var_name[0]] = [] + ReacName_dict[var_name[0]].append(var_name[1]) + else: + ReacName_dict[var_name[0]].append(var_name[1]) + +# If not defined, set the reaction name +for key in ReacName_dict: + if 'ReactionName' not in ReacName_dict[key]: + ReactionName = '' + for val in educt_dict[key]: + ReactionName = ReactionName + '+' + spec_dict[val] + ReactionName = ReactionName + '_' + for val in product_dict[key]: + ReactionName = ReactionName + '+' + spec_dict[val] + ReactionName = ReactionName[1:] + ReactionName = ReactionName.replace('_+','_') + reac_dict[key] = ReactionName + + hdf_reac = reac_dict[key] + ReactionName = hdf_reac + + # Check first for permutations of the reaction name + ReactionNameSplit = re.split('_', ReactionName) + checkeduct_list = re.split('\+', ReactionNameSplit[0]) + checkeduct_list.sort(key=str.lower) + checkproduct_list = re.split('\+',ReactionNameSplit[1]) + checkproduct_list.sort(key=str.lower) + + ReactionName = '' + for val in checkeduct_list: + ReactionName = ReactionName + '+' + val + ReactionName = ReactionName + '_' + for val in checkproduct_list: + ReactionName = ReactionName + '+' + val + ReactionName = ReactionName[1:] + ReactionName = ReactionName.replace('_+','_') + reac_dict[key] = ReactionName + + hdf_reac = reac_dict[key] + ReactionName = hdf_reac + + # Check if the reaction exists + if hdf_reac in hdf_reac_group.keys(): + print('Reaction already exists: ', hdf_reac) + hdf_reac = hdf_reac_group[hdf_reac] + elif (hdf_reac + '#1') in hdf_reac_group.keys(): + print('Reaction already exists: ', hdf_reac) + ReactionName = hdf_reac + '#1' + reac_dict[key] = ReactionName + hdf_reac = hdf_reac_group[(hdf_reac + '#1')] + else: + print('Reaction added to the database: ', hdf_reac) + hdf_reac = hdf_reac_group.create_dataset(hdf_reac,data=[0]) + hdf_reac.attrs['* Created'] = date.today().strftime("%B %d, %Y") + + #Read-In of the Chemistry-model for the reaction + if 'Chemistry-Model' in hdf_reac.attrs: + model_name_list = [] + model_attr = list(hdf_reac.attrs['Chemistry-Model']) + for val in model_attr: + model_name_list.append(val.decode('UTF-8')) + if model_name in model_name_list: + print('This Model is already defined for the reaction. No further action is taken.') + print('To define the reaction data as a separate instance, please rename the model.') + else: + # Check if the model exists in another reaction + AddNewReaction = False + Count = 0 + ReacNameTest = ReactionName + if ReacNameTest in hdf_reac_group.keys(): + hdf_reac_test = hdf_reac_group[ReacNameTest] + model_test_list = [] + model_attr_test = list(hdf_reac_test.attrs['Chemistry-Model']) + for val in model_attr_test: + model_test_list.append(val.decode('UTF-8')) + if model_name in model_test_list: + print('This Model is already defined for the reaction. No further action is taken.') + print('To define the reaction data as a separate instance, please rename the model.') + AddNewReaction = False + exit + else: + AddNewReaction = True + while ReacNameTest in hdf_reac_group.keys(): + ReacNameTest = re.sub('#\d+', '', ReactionName) + Count = Count + 1 + ReacNameTest = ReacNameTest + '#' + str(Count) + if ReacNameTest in hdf_reac_group.keys(): + hdf_reac_test = hdf_reac_group[ReacNameTest] + model_test_list = [] + model_attr_test = list(hdf_reac_test.attrs['Chemistry-Model']) + for val in model_attr_test: + model_test_list.append(val.decode('UTF-8')) + if model_name in model_test_list: + print('This Model is already defined for the reaction. No further action is taken.') + print('To define the reaction data as a separate instance, please rename the model.') + reac_dict[key] = ReacNameTest + AddNewReaction = False + exit + else: + AddNewReaction = True + if AddNewReaction: + print('A different Model is already defined for this reaction.') + Count = 1 + while ReactionName in hdf_reac_group.keys(): + if '#' not in ReactionName: + ReacNameCopy = ReactionName + '#1' + hdf_reac_group.move(ReactionName, ReacNameCopy) + reac_dict[key] = ReacNameCopy + ReactionName = re.sub('#\d+', '', ReactionName) + Count = Count + 1 + ReactionName = ReactionName + '#' + str(Count) + reac_dict[key] = ReactionName + hdf_reac = ReactionName + hdf_reac = hdf_reac_group.create_dataset(hdf_reac,data=[0]) + hdf_reac.attrs['* Created'] = date.today().strftime("%B %d, %Y") + print('The reaction with the new model was stored as ', ReactionName, '.') + model_name_list = [] + model_name_list.append(model_name) + hdf_reac.attrs['Chemistry-Model'] = np.array(model_name_list,dtype='S255') + exit + else: + model_name_list = [] + model_name_list.append(model_name) + hdf_reac.attrs['Chemistry-Model'] = np.array(model_name_list,dtype='S255') + #str_modellist = np.array([s.ljust(str_len) for s in model_name_list], dtype='S255') + #hdf_reac.attrs['Chemistry-Model'] = str_modellist with open(args.ini_filename) as file: for line in file: @@ -205,86 +345,86 @@ def is_float(value): reac_count = var_name[0] hdf_reac = reac_dict[reac_count] hdf_reac = hdf_reac_group[hdf_reac] + # Read-In of the attributes if var_name[1] in hdf_reac.attrs: print('Reaction parameter is already set: ', var_name[1]) else: if is_float(var_value): var_value = float(var_value) - if var_name[1] not in reac_attr_list: - hdf_reac.attrs[var_name[1]] = var_value - else: - spec_name_list = '' + if var_name[1] in reac_attr_list: + spec_name_list = [] var_value = var_value.replace(',0', '').replace('(/', '').replace('/)', '').split(',') for val in var_value: - spec_name_list = spec_name_list + ', ' + spec_dict[val] - spec_name_list = spec_name_list.replace(', ', '', 1) - hdf_reac.attrs[var_name[1]] = spec_name_list - print('Reaction parameter set: ', var_name[1]) + spec_name_list.append(spec_dict[val]) + hdf_reac.attrs[var_name[1]] = np.array(spec_name_list,dtype='S255') + else: + hdf_reac.attrs[var_name[1]] = var_value + print('Reaction parameter set: ', var_name[1]) # Write attributes for source and time of retrieval hdf_reac.attrs['* Reference'] = args.reference hdf_reac.attrs['* Created'] = date.today().strftime("%B %d, %Y") -surf_attr_list = ['Reactants', 'Products'] -surf_wo_readin = ['Boundaries', 'NumOfBoundaries', 'Inhibition', 'Promotion'] -surf_string_list = ['Type'] +# surf_attr_list = ['Reactants', 'Products'] +# surf_wo_readin = ['Boundaries', 'NumOfBoundaries', 'Inhibition', 'Promotion'] +# surf_string_list = ['Type'] -# Read-in of gas-surface reaction data -with open(args.ini_filename) as file: - surf_dict = {} - for line in file: - if not line.startswith('!'): - if line.startswith('Surface-Reaction'): - var_name = line.strip().replace(" ","").replace("Surface-Reaction","").split('=')[0].split('-') - var_value = line.strip().replace(" ","").replace("Surface-Reaction","").split('=')[1].split('!', 1)[0] - if var_name[1].startswith('SurfName'): - hdf_surf = var_value - surf_count = var_name[0] - surf_dict[surf_count] = hdf_surf - if hdf_surf in hdf_surf_group.keys(): - print('Surface reaction already exists: ', hdf_surf) - hdf_surf = hdf_surf_group[hdf_surf] - else: - print('Surface reaction added to the database: ', hdf_surf) - hdf_surf = hdf_surf_group.create_dataset(hdf_surf,data=[0]) - hdf_surf.attrs['* Created'] = date.today().strftime("%B %d, %Y") +# # Read-in of gas-surface reaction data +# with open(args.ini_filename) as file: +# surf_dict = {} +# for line in file: +# if not line.startswith('!'): +# if line.startswith('Surface-Reaction'): +# var_name = line.strip().replace(" ","").replace("Surface-Reaction","").split('=')[0].split('-') +# var_value = line.strip().replace(" ","").replace("Surface-Reaction","").split('=')[1].split('!', 1)[0] +# if var_name[1].startswith('SurfName'): +# hdf_surf = var_value +# surf_count = var_name[0] +# surf_dict[surf_count] = hdf_surf +# if hdf_surf in hdf_surf_group.keys(): +# print('Surface reaction already exists: ', hdf_surf) +# hdf_surf = hdf_surf_group[hdf_surf] +# else: +# print('Surface reaction added to the database: ', hdf_surf) +# hdf_surf = hdf_surf_group.create_dataset(hdf_surf,data=[0]) +# hdf_surf.attrs['* Created'] = date.today().strftime("%B %d, %Y") -with open(args.ini_filename) as file: - for line in file: - if not line.startswith('!'): - if line.startswith('Surface-Reaction'): - var_name = line.strip().replace(" ","").replace("Surface-Reaction","").split('=')[0].split('-') - var_value = line.strip().replace(" ","").replace("Surface-Reaction","").split('=')[1].split('!', 1)[0] +# with open(args.ini_filename) as file: +# for line in file: +# if not line.startswith('!'): +# if line.startswith('Surface-Reaction'): +# var_name = line.strip().replace(" ","").replace("Surface-Reaction","").split('=')[0].split('-') +# var_value = line.strip().replace(" ","").replace("Surface-Reaction","").split('=')[1].split('!', 1)[0] - if not var_name[1].startswith('SurfName'): - surf_count = var_name[0] - hdf_surf = surf_dict[surf_count] - hdf_surf = hdf_surf_group[hdf_surf] - if var_name[1] in hdf_surf.attrs: - print('Catalytic parameter is already set: ', var_name[1]) - else: - if is_float(var_value): - var_value = float(var_value) - if var_name[1] not in surf_attr_list and var_name[1] not in surf_wo_readin: - if var_name[1] not in surf_string_list: - hdf_surf.attrs[var_name[1]] = var_value - else: - hdf_surf.attrs[var_name[1]] = np.string_(var_value) - print('Catalytic parameter set: ', var_name[1]) - elif var_name[1] in surf_attr_list: - spec_name_list = '' - var_value = var_value.replace(',0', '').replace('(/', '').replace('/)', '').split(',') - for val in var_value: - spec_name_list = spec_name_list + ', ' + spec_dict[val] - spec_name_list = spec_name_list.replace(', ', '', 1) - hdf_surf.attrs[var_name[1]] = spec_name_list - print('Catalytic parameter set: ', var_name[1]) - # Write attributes for source and time of retrieval - hdf_surf.attrs['* Reference'] = args.reference - hdf_surf.attrs['* Created'] = date.today().strftime("%B %d, %Y") +# if not var_name[1].startswith('SurfName'): +# surf_count = var_name[0] +# hdf_surf = surf_dict[surf_count] +# hdf_surf = hdf_surf_group[hdf_surf] +# if var_name[1] in hdf_surf.attrs: +# print('Catalytic parameter is already set: ', var_name[1]) +# else: +# if is_float(var_value): +# var_value = float(var_value) +# if var_name[1] not in surf_attr_list and var_name[1] not in surf_wo_readin: +# if var_name[1] not in surf_string_list: +# hdf_surf.attrs[var_name[1]] = var_value +# else: +# hdf_surf.attrs[var_name[1]] = np.string_(var_value) +# print('Catalytic parameter set: ', var_name[1]) +# elif var_name[1] in surf_attr_list: +# spec_name_list = '' +# var_value = var_value.replace(',0', '').replace('(/', '').replace('/)', '').split(',') +# for val in var_value: +# spec_name_list = spec_name_list + ', ' + spec_dict[val] +# spec_name_list = spec_name_list.replace(', ', '', 1) +# hdf_surf.attrs[var_name[1]] = spec_name_list +# print('Catalytic parameter set: ', var_name[1]) +# # Write attributes for source and time of retrieval +# hdf_surf.attrs['* Reference'] = args.reference +# hdf_surf.attrs['* Created'] = date.today().strftime("%B %d, %Y") print('*** Database successfully built. ***') h5_species.close() h5_electronic.close() -h5_crosssection.close() +h5_crosssection.close() \ No newline at end of file From ef800d21958a7ffc4f6a024ab07f101ec743a7b5 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Wed, 2 Aug 2023 12:31:38 +0200 Subject: [PATCH 066/222] sort --- ...ec_43Reac_Boyd2007Voronov1997Plane2015.ini | 86 ++++++------- .../Air_11Spec_27Reac_Park1993.ini | 45 +++---- .../Air_11Spec_43Reac_Boyd2007.ini | 86 ++++++------- .../Air_11Spec_51Reac_Park1993.ini | 54 ++++---- .../Air_5Spec_8Reac_Park1993.ini | 8 -- tools/species_database/CH4-Ar_8Spec_7Reac.ini | 22 ++-- tools/species_database/CH4_7Spec_7Reac.ini | 22 ++-- .../CO2_6Spec_10Reac_Johnston2014.ini | 20 +-- .../Mars_11Spec_27Reac_Johnston2014.ini | 54 ++++---- .../Mars_16Spec_31Reac_Park1994.ini | 62 ++++----- .../Mars_17Spec_42Reac_Johnston2014.ini | 84 ++++++------ .../Titan_14Spec_24Reac_Gokcen2007.ini | 48 +++---- .../create_species_database.py | 47 +++---- tools/species_database/functions_database.py | 121 ++++++++++++++++++ 14 files changed, 432 insertions(+), 327 deletions(-) create mode 100644 tools/species_database/functions_database.py diff --git a/tools/species_database/Air-Fe_11Spec_43Reac_Boyd2007Voronov1997Plane2015.ini b/tools/species_database/Air-Fe_11Spec_43Reac_Boyd2007Voronov1997Plane2015.ini index 72eb995b9..14f6f2cc9 100644 --- a/tools/species_database/Air-Fe_11Spec_43Reac_Boyd2007Voronov1997Plane2015.ini +++ b/tools/species_database/Air-Fe_11Spec_43Reac_Boyd2007Voronov1997Plane2015.ini @@ -157,7 +157,7 @@ DSMC-Reaction7-ReactionName=NO+M_N+O+M DSMC-Reaction8-ReactionName=NO+A_N+O+A !Reaction1 (N2 + molecule -> N + N + molecule) -DSMC-Reaction1-ReactionType=D + DSMC-Reaction1-Reactants=(/3,0,0/) DSMC-Reaction1-Products=(/1,0,1,0/) DSMC-Reaction1-Arrhenius-Prefactor=1.162E-08 @@ -166,7 +166,7 @@ DSMC-Reaction1-Activation-Energy_K=113200.0 DSMC-Reaction1-NumberOfNonReactives=6 DSMC-Reaction1-NonReactiveSpecies=(/3,4,5,8,9,10/) !Reaction2 (N2 + atom -> N + N + atom) -DSMC-Reaction2-ReactionType=D + DSMC-Reaction2-Reactants=(/3,0,0/) DSMC-Reaction2-Products=(/1,0,1,0/) DSMC-Reaction2-Arrhenius-Prefactor=4.980E-08 @@ -175,14 +175,14 @@ DSMC-Reaction2-Activation-Energy_K=113200.0 DSMC-Reaction2-NumberOfNonReactives=4 DSMC-Reaction2-NonReactiveSpecies=(/1,2,6,7/) !Reaction3 (N2 + e -> N + N + e) -DSMC-Reaction3-ReactionType=D + DSMC-Reaction3-Reactants=(/3,11,0/) DSMC-Reaction3-Products=(/1,11,1,0/) DSMC-Reaction3-Arrhenius-Prefactor=4.980E-06 DSMC-Reaction3-Arrhenius-Powerfactor=-1.60 DSMC-Reaction3-Activation-Energy_K=113200.0 !Reaction4 (O2 + molecule -> O + O + molecule) -DSMC-Reaction4-ReactionType=D + DSMC-Reaction4-Reactants=(/4,0,0/) DSMC-Reaction4-Products=(/2,0,2,0/) DSMC-Reaction4-Arrhenius-Prefactor=3.321E-09 @@ -191,7 +191,7 @@ DSMC-Reaction4-Activation-Energy_K=59400.0 DSMC-Reaction4-NumberOfNonReactives=6 DSMC-Reaction4-NonReactiveSpecies=(/3,4,5,8,9,10/) !Reaction5 (O2 + atom --> O + O + atom) -DSMC-Reaction5-ReactionType=D + DSMC-Reaction5-Reactants=(/4,0,0/) DSMC-Reaction5-Products=(/2,0,2,0/) DSMC-Reaction5-Arrhenius-Prefactor=1.660E-08 @@ -200,14 +200,14 @@ DSMC-Reaction5-Activation-Energy_K=59400.0 DSMC-Reaction5-NumberOfNonReactives=4 DSMC-Reaction5-NonReactiveSpecies=(/1,2,6,7/) !Reaction6 (O2 + e --> O + O + e) -DSMC-Reaction6-ReactionType=D + DSMC-Reaction6-Reactants=(/4,11,0/) DSMC-Reaction6-Products=(/2,11,2,0/) DSMC-Reaction6-Arrhenius-Prefactor=1.660E-08 DSMC-Reaction6-Arrhenius-Powerfactor=-1.5 DSMC-Reaction6-Activation-Energy_K=59400.0 !Reaction7 (NO + molecule --> N + O + molecule) -DSMC-Reaction7-ReactionType=D + DSMC-Reaction7-Reactants=(/5,0,0/) DSMC-Reaction7-Products=(/1,0,2,0/) DSMC-Reaction7-Arrhenius-Prefactor=8.302E-15 @@ -216,7 +216,7 @@ DSMC-Reaction7-Activation-Energy_K=75500.0 DSMC-Reaction7-NumberOfNonReactives=6 DSMC-Reaction7-NonReactiveSpecies=(/3,4,5,8,9,10/) !Reaction8 (NO + atom --> N + O + atom) -DSMC-Reaction8-ReactionType=D + DSMC-Reaction8-Reactants=(/5,0,0/) DSMC-Reaction8-Products=(/1,0,2,0/) DSMC-Reaction8-Arrhenius-Prefactor=1.826E-13 @@ -225,245 +225,245 @@ DSMC-Reaction8-Activation-Energy_K=75500.0 DSMC-Reaction8-NumberOfNonReactives=4 DSMC-Reaction8-NonReactiveSpecies=(/1,2,6,7/) !Reaction9 (NO + e --> N + O + e ) -DSMC-Reaction9-ReactionType=D + DSMC-Reaction9-Reactants=(/5,11,0/) DSMC-Reaction9-Products=(/1,11,2,0/) DSMC-Reaction9-Arrhenius-Prefactor=1.826E-013 DSMC-Reaction9-Arrhenius-Powerfactor=0. DSMC-Reaction9-Activation-Energy_K=75500.0 !Reaction10 (NO + O --> N + O2) -DSMC-Reaction10-ReactionType=E + DSMC-Reaction10-Reactants=(/5,2,0/) DSMC-Reaction10-Products=(/4,1,0,0/) DSMC-Reaction10-Arrhenius-Prefactor=1.389E-17 DSMC-Reaction10-Arrhenius-Powerfactor=0. DSMC-Reaction10-Activation-Energy_K=19700 !Reaction11 (O2 + N --> O + NO) -DSMC-Reaction11-ReactionType=E + DSMC-Reaction11-Reactants=(/4,1,0/) DSMC-Reaction11-Products=(/5,2,0,0/) DSMC-Reaction11-Arrhenius-Prefactor=4.601E-15 DSMC-Reaction11-Arrhenius-Powerfactor=-0.546 DSMC-Reaction11-Activation-Energy_K=0. !Reaction12 (N2 + O --> NO + N) -DSMC-Reaction12-ReactionType=E + DSMC-Reaction12-Reactants=(/3,2,0/) DSMC-Reaction12-Products=(/5,1,0,0/) DSMC-Reaction12-Arrhenius-Prefactor=1.069E-12 DSMC-Reaction12-Arrhenius-Powerfactor=-1.0 DSMC-Reaction12-Activation-Energy_K=37500.0 !Reaction13 (NO + N --> N2 + O) -DSMC-Reaction13-ReactionType=E + DSMC-Reaction13-Reactants=(/5,1,0/) DSMC-Reaction13-Products=(/3,2,0,0/) DSMC-Reaction13-Arrhenius-Prefactor=4.059E-12 DSMC-Reaction13-Arrhenius-Powerfactor=-1.359 DSMC-Reaction13-Activation-Energy_K=0. !Reaction14 (N + N --> N2+ + e ) -DSMC-Reaction14-ReactionType=E + DSMC-Reaction14-Reactants=(/1,1,0/) DSMC-Reaction14-Products=(/8,11,0,0/) DSMC-Reaction14-Arrhenius-Prefactor=3.387E-17 DSMC-Reaction14-Arrhenius-Powerfactor=0. DSMC-Reaction14-Activation-Energy_K=67700 !Reaction15 (N2+ + e --> N + N ) -DSMC-Reaction15-ReactionType=E + DSMC-Reaction15-Reactants=(/8,11,0/) DSMC-Reaction15-Products=(/1,1,0,0/) DSMC-Reaction15-Arrhenius-Prefactor=7.274E-12 DSMC-Reaction15-Arrhenius-Powerfactor=-0.65 DSMC-Reaction15-Activation-Energy_K=0. !Reaction16 (O + O --> O2+ + e ) -DSMC-Reaction16-ReactionType=E + DSMC-Reaction16-Reactants=(/2,2,0/) DSMC-Reaction16-Products=(/9,11,0,0/) DSMC-Reaction16-Arrhenius-Prefactor=1.859E-17 DSMC-Reaction16-Arrhenius-Powerfactor=0. DSMC-Reaction16-Activation-Energy_K=81200 !Reaction17 (O2+ + e --> O + O ) -DSMC-Reaction17-ReactionType=E + DSMC-Reaction17-Reactants=(/9,11,0/) DSMC-Reaction17-Products=(/2,2,0,0/) DSMC-Reaction17-Arrhenius-Prefactor=1.453E-4 DSMC-Reaction17-Arrhenius-Powerfactor=-2.412 DSMC-Reaction17-Activation-Energy_K=0. !Reaction18 (N + O --> NO+ + e ) -DSMC-Reaction18-ReactionType=E + DSMC-Reaction18-Reactants=(/1,2,0/) DSMC-Reaction18-Products=(/10,11,0,0/) DSMC-Reaction18-Arrhenius-Prefactor=8.766E-18 DSMC-Reaction18-Arrhenius-Powerfactor=0. DSMC-Reaction18-Activation-Energy_K=32000 !Reaction19 (NO+ + e --> N + O ) -DSMC-Reaction19-ReactionType=E + DSMC-Reaction19-Reactants=(/10,11,0/) DSMC-Reaction19-Products=(/1,2,0,0/) DSMC-Reaction19-Arrhenius-Prefactor=1.321E-9 DSMC-Reaction19-Arrhenius-Powerfactor=-1.187 DSMC-Reaction19-Activation-Energy_K=0. !Reaction20 (O+ + N2 --> N2+ + O ) -DSMC-Reaction20-ReactionType=E + DSMC-Reaction20-Reactants=(/7,3,0/) DSMC-Reaction20-Products=(/8,2,0,0/) DSMC-Reaction20-Arrhenius-Prefactor=1.511E-18 DSMC-Reaction20-Arrhenius-Powerfactor=0.36 DSMC-Reaction20-Activation-Energy_K=22800 !Reaction21 (N2+ + O --> O+ + N2 ) -DSMC-Reaction21-ReactionType=E + DSMC-Reaction21-Reactants=(/8,2,0/) DSMC-Reaction21-Products=(/7,3,0,0/) DSMC-Reaction21-Arrhenius-Prefactor=1.978E-18 DSMC-Reaction21-Arrhenius-Powerfactor=0.109 DSMC-Reaction21-Activation-Energy_K=0. !Reaction22 (O+ + NO --> N+ + O2 ) -DSMC-Reaction22-ReactionType=E + DSMC-Reaction22-Reactants=(/7,5,0/) DSMC-Reaction22-Products=(/6,4,0,0/) DSMC-Reaction22-Arrhenius-Prefactor=2.324E-25 DSMC-Reaction22-Arrhenius-Powerfactor=1.9 DSMC-Reaction22-Activation-Energy_K=15300 !Reaction23 (N+ + O2 --> O+ + NO ) -DSMC-Reaction23-ReactionType=E + DSMC-Reaction23-Reactants=(/6,4,0/) DSMC-Reaction23-Products=(/7,5,0,0/) DSMC-Reaction23-Arrhenius-Prefactor=2.443E-26 DSMC-Reaction23-Arrhenius-Powerfactor=2.102 DSMC-Reaction23-Activation-Energy_K=0. !Reaction24 (NO+ + O2 --> O2+ + NO ) -DSMC-Reaction24-ReactionType=E + DSMC-Reaction24-Reactants=(/10,4,0/) DSMC-Reaction24-Products=(/9,5,0,0/) DSMC-Reaction24-Arrhenius-Prefactor=3.985E-17 DSMC-Reaction24-Arrhenius-Powerfactor=0.410 DSMC-Reaction24-Activation-Energy_K=32600 !Reaction25 (O2+ + NO --> NO+ + O2 ) -DSMC-Reaction25-ReactionType=E + DSMC-Reaction25-Reactants=(/9,5,0/) DSMC-Reaction25-Products=(/10,4,0,0/) DSMC-Reaction25-Arrhenius-Prefactor=6.195E-16 DSMC-Reaction25-Arrhenius-Powerfactor=-0.050 DSMC-Reaction25-Activation-Energy_K=0. !Reaction26 (NO+ + N --> N2+ + O ) -DSMC-Reaction26-ReactionType=E + DSMC-Reaction26-Reactants=(/10,1,0/) DSMC-Reaction26-Products=(/8,2,0,0/) DSMC-Reaction26-Arrhenius-Prefactor=1.195E-16 DSMC-Reaction26-Arrhenius-Powerfactor=0. DSMC-Reaction26-Activation-Energy_K=35500 !Reaction27 (N2+ + O --> NO+ + N ) -DSMC-Reaction27-ReactionType=E + DSMC-Reaction27-Reactants=(/8,2,0/) DSMC-Reaction27-Products=(/10,1,0,0/) DSMC-Reaction27-Arrhenius-Prefactor=1.744E-18 DSMC-Reaction27-Arrhenius-Powerfactor=0.302 DSMC-Reaction27-Activation-Energy_K=0. !Reaction28 (NO+ + O --> N+ + O2 ) -DSMC-Reaction28-ReactionType=E + DSMC-Reaction28-Reactants=(/10,2,0/) DSMC-Reaction28-Products=(/6,4,0,0/) DSMC-Reaction28-Arrhenius-Prefactor=1.660E-18 DSMC-Reaction28-Arrhenius-Powerfactor=0.5 DSMC-Reaction28-Activation-Energy_K=77200 !Reaction29 (N+ + O2 --> NO+ + O ) -DSMC-Reaction29-ReactionType=E + DSMC-Reaction29-Reactants=(/6,4,0/) DSMC-Reaction29-Products=(/10,2,0,0/) DSMC-Reaction29-Arrhenius-Prefactor=2.192E-17 DSMC-Reaction29-Arrhenius-Powerfactor=0.114 DSMC-Reaction29-Activation-Energy_K=0. !Reaction30 (O2+ + N --> N+ + O2 ) -DSMC-Reaction30-ReactionType=E + DSMC-Reaction30-Reactants=(/9,1,0/) DSMC-Reaction30-Products=(/4,6,0,0/) DSMC-Reaction30-Arrhenius-Prefactor=1.444E-16 DSMC-Reaction30-Arrhenius-Powerfactor=0.14 DSMC-Reaction30-Activation-Energy_K=28600 !Reaction31 (N+ + O2 --> O2+ + N ) -DSMC-Reaction31-ReactionType=E + DSMC-Reaction31-Reactants=(/4,6,0/) DSMC-Reaction31-Products=(/9,1,0,0/) DSMC-Reaction31-Arrhenius-Prefactor=4.993E-18 DSMC-Reaction31-Arrhenius-Powerfactor=-0.004 DSMC-Reaction31-Activation-Energy_K=0. !Reaction32 (O2+ + N2 --> N2+ + O2 ) -DSMC-Reaction32-ReactionType=E + DSMC-Reaction32-Reactants=(/9,3,0/) DSMC-Reaction32-Products=(/8,4,0,0/) DSMC-Reaction32-Arrhenius-Prefactor=1.644E-17 DSMC-Reaction32-Arrhenius-Powerfactor=0 DSMC-Reaction32-Activation-Energy_K=40700 !Reaction33 (N2+ + O2 --> O2+ + N2 ) -DSMC-Reaction33-ReactionType=E + DSMC-Reaction33-Reactants=(/8,4,0/) DSMC-Reaction33-Products=(/9,3,0,0/) DSMC-Reaction33-Arrhenius-Prefactor=4.589E-18 DSMC-Reaction33-Arrhenius-Powerfactor=-0.037 DSMC-Reaction33-Activation-Energy_K=0. !Reaction34 (NO+ + N --> O+ + N2 ) -DSMC-Reaction34-ReactionType=E + DSMC-Reaction34-Reactants=(/10,1,0/) DSMC-Reaction34-Products=(/7,3,0,0/) DSMC-Reaction34-Arrhenius-Prefactor=5.645E-17 DSMC-Reaction34-Arrhenius-Powerfactor=-1.08 DSMC-Reaction34-Activation-Energy_K=12800 !Reaction35 (O+ + N2 --> NO+ + N ) -DSMC-Reaction35-ReactionType=E + DSMC-Reaction35-Reactants=(/7,3,0/) DSMC-Reaction35-Products=(/10,1,0,0/) DSMC-Reaction35-Arrhenius-Prefactor=3.970E-18 DSMC-Reaction35-Arrhenius-Powerfactor=-0.71 DSMC-Reaction35-Activation-Energy_K=0. !Reaction36 (NO+ + O --> O2+ + N ) -DSMC-Reaction36-ReactionType=E + DSMC-Reaction36-Reactants=(/10,2,0/) DSMC-Reaction36-Products=(/9,1,0,0/) DSMC-Reaction36-Arrhenius-Prefactor=1.195E-17 DSMC-Reaction36-Arrhenius-Powerfactor=0.29 DSMC-Reaction36-Activation-Energy_K=48600 !Reaction37 (O2+ + N --> NO+ + O ) -DSMC-Reaction37-ReactionType=E + DSMC-Reaction37-Reactants=(/9,1,0/) DSMC-Reaction37-Products=(/10,2,0,0/) DSMC-Reaction37-Arrhenius-Prefactor=8.918E-13 DSMC-Reaction37-Arrhenius-Powerfactor=-0.969 DSMC-Reaction37-Activation-Energy_K=0. !Reaction38 (N+ + N2 --> N2+ + N ) -DSMC-Reaction38-ReactionType=E + DSMC-Reaction38-Reactants=(/6,3,0/) DSMC-Reaction38-Products=(/8,1,0,0/) DSMC-Reaction38-Arrhenius-Prefactor=1.660E-18 DSMC-Reaction38-Arrhenius-Powerfactor=0.5 DSMC-Reaction38-Activation-Energy_K=12100 !Reaction39 (N2+ + N --> N+ + N2 ) -DSMC-Reaction39-ReactionType=E + DSMC-Reaction39-Reactants=(/8,1,0/) DSMC-Reaction39-Products=(/6,3,0,0/) DSMC-Reaction39-Arrhenius-Prefactor=2.343E-14 DSMC-Reaction39-Arrhenius-Powerfactor=-0.61 DSMC-Reaction39-Activation-Energy_K=0. !Reaction40 (O2+ + O --> O2 + O+ ) -DSMC-Reaction40-ReactionType=E + DSMC-Reaction40-Reactants=(/9,2,0/) DSMC-Reaction40-Products=(/4,7,0,0/) DSMC-Reaction40-Arrhenius-Prefactor=6.641E-18 DSMC-Reaction40-Arrhenius-Powerfactor=-0.09 DSMC-Reaction40-Activation-Energy_K=18600 !Reaction41 (O2 + O+ --> O2+ + O ) -DSMC-Reaction41-ReactionType=E + DSMC-Reaction41-Reactants=(/4,7,0/) DSMC-Reaction41-Products=(/9,2,0,0/) DSMC-Reaction41-Arrhenius-Prefactor=4.993E-18 DSMC-Reaction41-Arrhenius-Powerfactor=-0.004 DSMC-Reaction41-Activation-Energy_K=0. !Reaction42 (N + e --> N+ + e + e ) -DSMC-Reaction42-ReactionType=iQK +QK DSMC-Reaction42-Reactants=(/1,11,0/) DSMC-Reaction42-Products=(/6,11,11,0/) DSMC-Reaction42-Arrhenius-Prefactor=8.434E-14 DSMC-Reaction42-Arrhenius-Powerfactor=0. DSMC-Reaction42-Activation-Energy_K=121600 !Reaction43 (O + e --> O+ + e + e ) -DSMC-Reaction43-ReactionType=iQK +QK DSMC-Reaction43-Reactants=(/2,11,0/) DSMC-Reaction43-Products=(/7,11,11,0/) DSMC-Reaction43-Arrhenius-Prefactor=1.054E-14 diff --git a/tools/species_database/Air_11Spec_27Reac_Park1993.ini b/tools/species_database/Air_11Spec_27Reac_Park1993.ini index 12342df6d..2371b6c99 100755 --- a/tools/species_database/Air_11Spec_27Reac_Park1993.ini +++ b/tools/species_database/Air_11Spec_27Reac_Park1993.ini @@ -130,7 +130,6 @@ DSMC-NumOfReactions=27 !Reaction1 (N2 + molecule -> N + N + molecule) DSMC-Reaction1-ReactionName=N2+M_N+N+M -DSMC-Reaction1-ReactionType=D DSMC-Reaction1-Reactants=(/3,0,0/) DSMC-Reaction1-Products=(/1,0,1/) DSMC-Reaction1-Arrhenius-Prefactor=1.16237749371486E-08 @@ -141,7 +140,6 @@ DSMC-Reaction1-NonReactiveSpecies=(/3,4,5,8,9,10/) !Reaction2 (N2 + atom -> N + N + atom) DSMC-Reaction2-ReactionName=N2+A_N+N+A -DSMC-Reaction2-ReactionType=D DSMC-Reaction2-Reactants=(/3,0,0/) DSMC-Reaction2-Products=(/1,0,1/) DSMC-Reaction2-Arrhenius-Prefactor=4.98161783020654E-08 @@ -151,7 +149,6 @@ DSMC-Reaction2-NumberOfNonReactives=4 DSMC-Reaction2-NonReactiveSpecies=(/1,2,6,7/) !Reaction4 (N2 + e -> N + N + e) -DSMC-Reaction3-ReactionType=D DSMC-Reaction3-Reactants=(/3,11,0/) DSMC-Reaction3-Products=(/1,11,1/) DSMC-Reaction3-Arrhenius-Prefactor=1.99264713208262E-005 @@ -160,7 +157,6 @@ DSMC-Reaction3-Activation-Energy_K=113200.0 !Reaction4 (O2 + molecule -> O + O + molecule) DSMC-Reaction4-ReactionName=O2+M_O+O+M -DSMC-Reaction4-ReactionType=D DSMC-Reaction4-Reactants=(/4,0,0/) DSMC-Reaction4-Products=(/2,0,2/) DSMC-Reaction4-Arrhenius-Prefactor=3.32107855347103E-09 @@ -171,7 +167,6 @@ DSMC-Reaction4-NonReactiveSpecies=(/3,4,5,8,9,10/) !Reaction5 (O2 + atom --> O + O + atom) DSMC-Reaction5-ReactionName=O2+A_O+O+A -DSMC-Reaction5-ReactionType=D DSMC-Reaction5-Reactants=(/4,0,0/) DSMC-Reaction5-Products=(/2,0,2/) DSMC-Reaction5-Arrhenius-Prefactor=1.66053927673551E-08 @@ -181,7 +176,6 @@ DSMC-Reaction5-NumberOfNonReactives=4 DSMC-Reaction5-NonReactiveSpecies=(/1,2,6,7/) !Reaction6 (O2 + e --> O + O + e) -DSMC-Reaction6-ReactionType=D DSMC-Reaction6-Reactants=(/4,11,0/) DSMC-Reaction6-Products=(/2,11,2/) DSMC-Reaction6-Arrhenius-Prefactor=1.66053927673551E-08 @@ -190,7 +184,6 @@ DSMC-Reaction6-Activation-Energy_K=59500.0 !Reaction7 (NO + molecule --> N + O + molecule) DSMC-Reaction7-ReactionName=NO+M_N+O+M -DSMC-Reaction7-ReactionType=D DSMC-Reaction7-Reactants=(/5,0,0/) DSMC-Reaction7-Products=(/1,0,2/) DSMC-Reaction7-Arrhenius-Prefactor=8.30269638367756E-15 @@ -201,7 +194,6 @@ DSMC-Reaction7-NonReactiveSpecies=(/3,4,5,8,9,10/) !Reaction8 (NO + atom --> N + O + atom) DSMC-Reaction8-ReactionName=NO+A_N+O+A -DSMC-Reaction8-ReactionType=D DSMC-Reaction8-Reactants=(/5,0,0/) DSMC-Reaction8-Products=(/1,0,2/) DSMC-Reaction8-Arrhenius-Prefactor=1.82659320440906E-13 @@ -211,7 +203,6 @@ DSMC-Reaction8-NumberOfNonReactives=4 DSMC-Reaction8-NonReactiveSpecies=(/1,2,6,7/) !Reaction9 (NO + e --> N + O + e ) -DSMC-Reaction9-ReactionType=D DSMC-Reaction9-Reactants=(/5,11,0/) DSMC-Reaction9-Products=(/1,11,2/) DSMC-Reaction9-Arrhenius-Prefactor=1.82659320440906E-013 @@ -219,7 +210,7 @@ DSMC-Reaction9-Arrhenius-Powerfactor=0. DSMC-Reaction9-Activation-Energy_K=75500.0 !Reaction10 (N2 + O --> NO + N) -DSMC-Reaction10-ReactionType=E + DSMC-Reaction10-Reactants=(/3,2,0/) DSMC-Reaction10-Products=(/5,1,0/) DSMC-Reaction10-Arrhenius-Prefactor=1.06274513711073E-12 @@ -227,7 +218,7 @@ DSMC-Reaction10-Arrhenius-Powerfactor=-1 DSMC-Reaction10-Activation-Energy_K=38400.0 !Reaction11 (NO + O --> N + O2) -DSMC-Reaction11-ReactionType=E + DSMC-Reaction11-Reactants=(/5,2,0/) DSMC-Reaction11-Products=(/4,1,0/) DSMC-Reaction11-Arrhenius-Prefactor=1.39485299245783E-17 @@ -235,21 +226,21 @@ DSMC-Reaction11-Arrhenius-Powerfactor=0 DSMC-Reaction11-Activation-Energy_K=19450 !Reaction12 (N + O --> NO+ + e ) -DSMC-Reaction12-ReactionType=E + DSMC-Reaction12-Reactants=(/1,2,0/) DSMC-Reaction12-Products=(/10,11,0/) DSMC-Reaction12-Arrhenius-Prefactor=1.46127456352725E-21 DSMC-Reaction12-Arrhenius-Powerfactor=1. DSMC-Reaction12-Activation-Energy_K=31900 !Reaction13 (O + O --> O2+ + e ) -DSMC-Reaction13-ReactionType=E + DSMC-Reaction13-Reactants=(/2,2,0/) DSMC-Reaction13-Products=(/9,11,0/) DSMC-Reaction13-Arrhenius-Prefactor=1.17898288648221E-27 DSMC-Reaction13-Arrhenius-Powerfactor=2.7 DSMC-Reaction13-Activation-Energy_K=80600 !Reaction14 (N + N --> N2+ + e ) -DSMC-Reaction14-ReactionType=E + DSMC-Reaction14-Reactants=(/1,1,0/) DSMC-Reaction14-Products=(/8,11,0/) DSMC-Reaction14-Arrhenius-Prefactor=7.30637281763626E-23 @@ -257,77 +248,77 @@ DSMC-Reaction14-Arrhenius-Powerfactor=1.5 DSMC-Reaction14-Activation-Energy_K=67500 !Reaction15 (NO+ + O --> N+ + O2 ) -DSMC-Reaction15-ReactionType=E + DSMC-Reaction15-Reactants=(/10,2,0/) DSMC-Reaction15-Products=(/6,4,0/) DSMC-Reaction15-Arrhenius-Prefactor=1.66053927673551E-18 DSMC-Reaction15-Arrhenius-Powerfactor=0.5 DSMC-Reaction15-Activation-Energy_K=77200 !Reaction16 (N+ + N2 --> N2+ + N ) -DSMC-Reaction16-ReactionType=E + DSMC-Reaction16-Reactants=(/6,3,0/) DSMC-Reaction16-Products=(/8,1,0/) DSMC-Reaction16-Arrhenius-Prefactor=1.66053927673551E-18 DSMC-Reaction16-Arrhenius-Powerfactor=0.5 DSMC-Reaction16-Activation-Energy_K=12200 !Reaction17 (O2+ + N --> N+ + O2 ) -DSMC-Reaction17-ReactionType=E + DSMC-Reaction17-Reactants=(/9,1,0/) DSMC-Reaction17-Products=(/4,6,0/) DSMC-Reaction17-Arrhenius-Prefactor=1.4446691707599E-16 DSMC-Reaction17-Arrhenius-Powerfactor=0.14 DSMC-Reaction17-Activation-Energy_K=28600 !Reaction18 (NO+ + N --> N2+ + O ) -DSMC-Reaction18-ReactionType=E + DSMC-Reaction18-Reactants=(/10,1,0/) DSMC-Reaction18-Products=(/8,2,0/) DSMC-Reaction18-Arrhenius-Prefactor=1.19558827924957E-16 DSMC-Reaction18-Arrhenius-Powerfactor=0. DSMC-Reaction18-Activation-Energy_K=35500 !Reaction19 (O+ + N2 --> N2+ + O ) -DSMC-Reaction19-ReactionType=E + DSMC-Reaction19-Reactants=(/7,3,0/) DSMC-Reaction19-Products=(/8,2,0/) DSMC-Reaction19-Arrhenius-Prefactor=1.51109074182932E-18 DSMC-Reaction19-Arrhenius-Powerfactor=0.36 DSMC-Reaction19-Activation-Energy_K=22800 !Reaction20 (O+ + NO --> N+ + O2 ) -DSMC-Reaction20-ReactionType=E + DSMC-Reaction20-Reactants=(/7,5,0/) DSMC-Reaction20-Products=(/6,4,0/) DSMC-Reaction20-Arrhenius-Prefactor=2.32475498742972E-25 DSMC-Reaction20-Arrhenius-Powerfactor=1.9 DSMC-Reaction20-Activation-Energy_K=26600 !Reaction21 (O2+ + N2 --> N2+ + O2 ) -DSMC-Reaction21-ReactionType=E + DSMC-Reaction21-Reactants=(/9,3,0/) DSMC-Reaction21-Products=(/8,4,0/) DSMC-Reaction21-Arrhenius-Prefactor=1.64393388396816E-17 DSMC-Reaction21-Arrhenius-Powerfactor=0 DSMC-Reaction21-Activation-Energy_K=40700 !Reaction22 (O2+ + O --> O2 + O+ ) -DSMC-Reaction22-ReactionType=E + DSMC-Reaction22-Reactants=(/9,2,0/) DSMC-Reaction22-Products=(/4,7,0/) DSMC-Reaction22-Arrhenius-Prefactor=6.64215710694205E-18 DSMC-Reaction22-Arrhenius-Powerfactor=-0.09 DSMC-Reaction22-Activation-Energy_K=18000 !Reaction23 (NO+ + N --> O+ + N2 ) -DSMC-Reaction23-ReactionType=E + DSMC-Reaction23-Reactants=(/10,1,0/) DSMC-Reaction23-Products=(/7,3,0/) DSMC-Reaction23-Arrhenius-Prefactor=5.64583354090074E-17 DSMC-Reaction23-Arrhenius-Powerfactor=-1.08 DSMC-Reaction23-Activation-Energy_K=12800 !Reaction24 (NO+ + O2 --> O2+ + NO ) -DSMC-Reaction24-ReactionType=E + DSMC-Reaction24-Reactants=(/10,4,0/) DSMC-Reaction24-Products=(/9,5,0/) DSMC-Reaction24-Arrhenius-Prefactor=3.98529426416523E-17 DSMC-Reaction24-Arrhenius-Powerfactor=0.41 DSMC-Reaction24-Activation-Energy_K=32600 !Reaction25 (NO+ + O --> O2+ + N ) -DSMC-Reaction25-ReactionType=E + DSMC-Reaction25-Reactants=(/10,2,0/) DSMC-Reaction25-Products=(/9,1,0/) DSMC-Reaction25-Arrhenius-Prefactor=1.19558827924957E-17 @@ -335,12 +326,12 @@ DSMC-Reaction25-Arrhenius-Powerfactor=0.29 DSMC-Reaction25-Activation-Energy_K=48600 !Reaction26 (O + e --> O+ + e + e ) -DSMC-Reaction26-ReactionType=iQK +QK DSMC-Reaction26-Reactants=(/2,11,0/) DSMC-Reaction26-Products=(/7,11,11/) DSMC-Reaction26-QKProcedure=true !Reaction27 (N + e --> O+ + e + e ) -DSMC-Reaction27-ReactionType=iQK +QK DSMC-Reaction27-Reactants=(/1,11,0/) DSMC-Reaction27-Products=(/6,11,11/) DSMC-Reaction27-QKProcedure=true diff --git a/tools/species_database/Air_11Spec_43Reac_Boyd2007.ini b/tools/species_database/Air_11Spec_43Reac_Boyd2007.ini index bad799747..ec73f1e14 100755 --- a/tools/species_database/Air_11Spec_43Reac_Boyd2007.ini +++ b/tools/species_database/Air_11Spec_43Reac_Boyd2007.ini @@ -138,7 +138,7 @@ DSMC-Reaction7-ReactionName=NO+M_N+O+M DSMC-Reaction8-ReactionName=NO+A_N+O+A !Reaction1 (N2 + molecule -> N + N + molecule) -DSMC-Reaction1-ReactionType=D + DSMC-Reaction1-Reactants=(/3,0,0/) DSMC-Reaction1-Products=(/1,0,1,0/) DSMC-Reaction1-Arrhenius-Prefactor=1.162E-08 @@ -147,7 +147,7 @@ DSMC-Reaction1-Activation-Energy_K=113200.0 DSMC-Reaction1-NumberOfNonReactives=6 DSMC-Reaction1-NonReactiveSpecies=(/3,4,5,8,9,10/) !Reaction2 (N2 + atom -> N + N + atom) -DSMC-Reaction2-ReactionType=D + DSMC-Reaction2-Reactants=(/3,0,0/) DSMC-Reaction2-Products=(/1,0,1,0/) DSMC-Reaction2-Arrhenius-Prefactor=4.980E-08 @@ -156,14 +156,14 @@ DSMC-Reaction2-Activation-Energy_K=113200.0 DSMC-Reaction2-NumberOfNonReactives=4 DSMC-Reaction2-NonReactiveSpecies=(/1,2,6,7/) !Reaction3 (N2 + e -> N + N + e) -DSMC-Reaction3-ReactionType=D + DSMC-Reaction3-Reactants=(/3,11,0/) DSMC-Reaction3-Products=(/1,11,1,0/) DSMC-Reaction3-Arrhenius-Prefactor=4.980E-06 DSMC-Reaction3-Arrhenius-Powerfactor=-1.60 DSMC-Reaction3-Activation-Energy_K=113200.0 !Reaction4 (O2 + molecule -> O + O + molecule) -DSMC-Reaction4-ReactionType=D + DSMC-Reaction4-Reactants=(/4,0,0/) DSMC-Reaction4-Products=(/2,0,2,0/) DSMC-Reaction4-Arrhenius-Prefactor=3.321E-09 @@ -172,7 +172,7 @@ DSMC-Reaction4-Activation-Energy_K=59400.0 DSMC-Reaction4-NumberOfNonReactives=6 DSMC-Reaction4-NonReactiveSpecies=(/3,4,5,8,9,10/) !Reaction5 (O2 + atom --> O + O + atom) -DSMC-Reaction5-ReactionType=D + DSMC-Reaction5-Reactants=(/4,0,0/) DSMC-Reaction5-Products=(/2,0,2,0/) DSMC-Reaction5-Arrhenius-Prefactor=1.660E-08 @@ -181,14 +181,14 @@ DSMC-Reaction5-Activation-Energy_K=59400.0 DSMC-Reaction5-NumberOfNonReactives=4 DSMC-Reaction5-NonReactiveSpecies=(/1,2,6,7/) !Reaction6 (O2 + e --> O + O + e) -DSMC-Reaction6-ReactionType=D + DSMC-Reaction6-Reactants=(/4,11,0/) DSMC-Reaction6-Products=(/2,11,2,0/) DSMC-Reaction6-Arrhenius-Prefactor=1.660E-08 DSMC-Reaction6-Arrhenius-Powerfactor=-1.5 DSMC-Reaction6-Activation-Energy_K=59400.0 !Reaction7 (NO + molecule --> N + O + molecule) -DSMC-Reaction7-ReactionType=D + DSMC-Reaction7-Reactants=(/5,0,0/) DSMC-Reaction7-Products=(/1,0,2,0/) DSMC-Reaction7-Arrhenius-Prefactor=8.302E-15 @@ -197,7 +197,7 @@ DSMC-Reaction7-Activation-Energy_K=75500.0 DSMC-Reaction7-NumberOfNonReactives=6 DSMC-Reaction7-NonReactiveSpecies=(/3,4,5,8,9,10/) !Reaction8 (NO + atom --> N + O + atom) -DSMC-Reaction8-ReactionType=D + DSMC-Reaction8-Reactants=(/5,0,0/) DSMC-Reaction8-Products=(/1,0,2,0/) DSMC-Reaction8-Arrhenius-Prefactor=1.826E-13 @@ -206,245 +206,245 @@ DSMC-Reaction8-Activation-Energy_K=75500.0 DSMC-Reaction8-NumberOfNonReactives=4 DSMC-Reaction8-NonReactiveSpecies=(/1,2,6,7/) !Reaction9 (NO + e --> N + O + e ) -DSMC-Reaction9-ReactionType=D + DSMC-Reaction9-Reactants=(/5,11,0/) DSMC-Reaction9-Products=(/1,11,2,0/) DSMC-Reaction9-Arrhenius-Prefactor=1.826E-013 DSMC-Reaction9-Arrhenius-Powerfactor=0. DSMC-Reaction9-Activation-Energy_K=75500.0 !Reaction10 (NO + O --> N + O2) -DSMC-Reaction10-ReactionType=E + DSMC-Reaction10-Reactants=(/5,2,0/) DSMC-Reaction10-Products=(/4,1,0,0/) DSMC-Reaction10-Arrhenius-Prefactor=1.389E-17 DSMC-Reaction10-Arrhenius-Powerfactor=0. DSMC-Reaction10-Activation-Energy_K=19700 !Reaction11 (O2 + N --> O + NO) -DSMC-Reaction11-ReactionType=E + DSMC-Reaction11-Reactants=(/4,1,0/) DSMC-Reaction11-Products=(/5,2,0,0/) DSMC-Reaction11-Arrhenius-Prefactor=4.601E-15 DSMC-Reaction11-Arrhenius-Powerfactor=-0.546 DSMC-Reaction11-Activation-Energy_K=0. !Reaction12 (N2 + O --> NO + N) -DSMC-Reaction12-ReactionType=E + DSMC-Reaction12-Reactants=(/3,2,0/) DSMC-Reaction12-Products=(/5,1,0,0/) DSMC-Reaction12-Arrhenius-Prefactor=1.069E-12 DSMC-Reaction12-Arrhenius-Powerfactor=-1.0 DSMC-Reaction12-Activation-Energy_K=37500.0 !Reaction13 (NO + N --> N2 + O) -DSMC-Reaction13-ReactionType=E + DSMC-Reaction13-Reactants=(/5,1,0/) DSMC-Reaction13-Products=(/3,2,0,0/) DSMC-Reaction13-Arrhenius-Prefactor=4.059E-12 DSMC-Reaction13-Arrhenius-Powerfactor=-1.359 DSMC-Reaction13-Activation-Energy_K=0. !Reaction14 (N + N --> N2+ + e ) -DSMC-Reaction14-ReactionType=E + DSMC-Reaction14-Reactants=(/1,1,0/) DSMC-Reaction14-Products=(/8,11,0,0/) DSMC-Reaction14-Arrhenius-Prefactor=3.387E-17 DSMC-Reaction14-Arrhenius-Powerfactor=0. DSMC-Reaction14-Activation-Energy_K=67700 !Reaction15 (N2+ + e --> N + N ) -DSMC-Reaction15-ReactionType=E + DSMC-Reaction15-Reactants=(/8,11,0/) DSMC-Reaction15-Products=(/1,1,0,0/) DSMC-Reaction15-Arrhenius-Prefactor=7.274E-12 DSMC-Reaction15-Arrhenius-Powerfactor=-0.65 DSMC-Reaction15-Activation-Energy_K=0. !Reaction16 (O + O --> O2+ + e ) -DSMC-Reaction16-ReactionType=E + DSMC-Reaction16-Reactants=(/2,2,0/) DSMC-Reaction16-Products=(/9,11,0,0/) DSMC-Reaction16-Arrhenius-Prefactor=1.859E-17 DSMC-Reaction16-Arrhenius-Powerfactor=0. DSMC-Reaction16-Activation-Energy_K=81200 !Reaction17 (O2+ + e --> O + O ) -DSMC-Reaction17-ReactionType=E + DSMC-Reaction17-Reactants=(/9,11,0/) DSMC-Reaction17-Products=(/2,2,0,0/) DSMC-Reaction17-Arrhenius-Prefactor=1.453E-4 DSMC-Reaction17-Arrhenius-Powerfactor=-2.412 DSMC-Reaction17-Activation-Energy_K=0. !Reaction18 (N + O --> NO+ + e ) -DSMC-Reaction18-ReactionType=E + DSMC-Reaction18-Reactants=(/1,2,0/) DSMC-Reaction18-Products=(/10,11,0,0/) DSMC-Reaction18-Arrhenius-Prefactor=8.766E-18 DSMC-Reaction18-Arrhenius-Powerfactor=0. DSMC-Reaction18-Activation-Energy_K=32000 !Reaction19 (NO+ + e --> N + O ) -DSMC-Reaction19-ReactionType=E + DSMC-Reaction19-Reactants=(/10,11,0/) DSMC-Reaction19-Products=(/1,2,0,0/) DSMC-Reaction19-Arrhenius-Prefactor=1.321E-9 DSMC-Reaction19-Arrhenius-Powerfactor=-1.187 DSMC-Reaction19-Activation-Energy_K=0. !Reaction20 (O+ + N2 --> N2+ + O ) -DSMC-Reaction20-ReactionType=E + DSMC-Reaction20-Reactants=(/7,3,0/) DSMC-Reaction20-Products=(/8,2,0,0/) DSMC-Reaction20-Arrhenius-Prefactor=1.511E-18 DSMC-Reaction20-Arrhenius-Powerfactor=0.36 DSMC-Reaction20-Activation-Energy_K=22800 !Reaction21 (N2+ + O --> O+ + N2 ) -DSMC-Reaction21-ReactionType=E + DSMC-Reaction21-Reactants=(/8,2,0/) DSMC-Reaction21-Products=(/7,3,0,0/) DSMC-Reaction21-Arrhenius-Prefactor=1.978E-18 DSMC-Reaction21-Arrhenius-Powerfactor=0.109 DSMC-Reaction21-Activation-Energy_K=0. !Reaction22 (O+ + NO --> N+ + O2 ) -DSMC-Reaction22-ReactionType=E + DSMC-Reaction22-Reactants=(/7,5,0/) DSMC-Reaction22-Products=(/6,4,0,0/) DSMC-Reaction22-Arrhenius-Prefactor=2.324E-25 DSMC-Reaction22-Arrhenius-Powerfactor=1.9 DSMC-Reaction22-Activation-Energy_K=15300 !Reaction23 (N+ + O2 --> O+ + NO ) -DSMC-Reaction23-ReactionType=E + DSMC-Reaction23-Reactants=(/6,4,0/) DSMC-Reaction23-Products=(/7,5,0,0/) DSMC-Reaction23-Arrhenius-Prefactor=2.443E-26 DSMC-Reaction23-Arrhenius-Powerfactor=2.102 DSMC-Reaction23-Activation-Energy_K=0. !Reaction24 (NO+ + O2 --> O2+ + NO ) -DSMC-Reaction24-ReactionType=E + DSMC-Reaction24-Reactants=(/10,4,0/) DSMC-Reaction24-Products=(/9,5,0,0/) DSMC-Reaction24-Arrhenius-Prefactor=3.985E-17 DSMC-Reaction24-Arrhenius-Powerfactor=0.410 DSMC-Reaction24-Activation-Energy_K=32600 !Reaction25 (O2+ + NO --> NO+ + O2 ) -DSMC-Reaction25-ReactionType=E + DSMC-Reaction25-Reactants=(/9,5,0/) DSMC-Reaction25-Products=(/10,4,0,0/) DSMC-Reaction25-Arrhenius-Prefactor=6.195E-16 DSMC-Reaction25-Arrhenius-Powerfactor=-0.050 DSMC-Reaction25-Activation-Energy_K=0. !Reaction26 (NO+ + N --> N2+ + O ) -DSMC-Reaction26-ReactionType=E + DSMC-Reaction26-Reactants=(/10,1,0/) DSMC-Reaction26-Products=(/8,2,0,0/) DSMC-Reaction26-Arrhenius-Prefactor=1.195E-16 DSMC-Reaction26-Arrhenius-Powerfactor=0. DSMC-Reaction26-Activation-Energy_K=35500 !Reaction27 (N2+ + O --> NO+ + N ) -DSMC-Reaction27-ReactionType=E + DSMC-Reaction27-Reactants=(/8,2,0/) DSMC-Reaction27-Products=(/10,1,0,0/) DSMC-Reaction27-Arrhenius-Prefactor=1.744E-18 DSMC-Reaction27-Arrhenius-Powerfactor=0.302 DSMC-Reaction27-Activation-Energy_K=0. !Reaction28 (NO+ + O --> N+ + O2 ) -DSMC-Reaction28-ReactionType=E + DSMC-Reaction28-Reactants=(/10,2,0/) DSMC-Reaction28-Products=(/6,4,0,0/) DSMC-Reaction28-Arrhenius-Prefactor=1.660E-18 DSMC-Reaction28-Arrhenius-Powerfactor=0.5 DSMC-Reaction28-Activation-Energy_K=77200 !Reaction29 (N+ + O2 --> NO+ + O ) -DSMC-Reaction29-ReactionType=E + DSMC-Reaction29-Reactants=(/6,4,0/) DSMC-Reaction29-Products=(/10,2,0,0/) DSMC-Reaction29-Arrhenius-Prefactor=2.192E-17 DSMC-Reaction29-Arrhenius-Powerfactor=0.114 DSMC-Reaction29-Activation-Energy_K=0. !Reaction30 (O2+ + N --> N+ + O2 ) -DSMC-Reaction30-ReactionType=E + DSMC-Reaction30-Reactants=(/9,1,0/) DSMC-Reaction30-Products=(/4,6,0,0/) DSMC-Reaction30-Arrhenius-Prefactor=1.444E-16 DSMC-Reaction30-Arrhenius-Powerfactor=0.14 DSMC-Reaction30-Activation-Energy_K=28600 !Reaction31 (N+ + O2 --> O2+ + N ) -DSMC-Reaction31-ReactionType=E + DSMC-Reaction31-Reactants=(/4,6,0/) DSMC-Reaction31-Products=(/9,1,0,0/) DSMC-Reaction31-Arrhenius-Prefactor=4.993E-18 DSMC-Reaction31-Arrhenius-Powerfactor=-0.004 DSMC-Reaction31-Activation-Energy_K=0. !Reaction32 (O2+ + N2 --> N2+ + O2 ) -DSMC-Reaction32-ReactionType=E + DSMC-Reaction32-Reactants=(/9,3,0/) DSMC-Reaction32-Products=(/8,4,0,0/) DSMC-Reaction32-Arrhenius-Prefactor=1.644E-17 DSMC-Reaction32-Arrhenius-Powerfactor=0 DSMC-Reaction32-Activation-Energy_K=40700 !Reaction33 (N2+ + O2 --> O2+ + N2 ) -DSMC-Reaction33-ReactionType=E + DSMC-Reaction33-Reactants=(/8,4,0/) DSMC-Reaction33-Products=(/9,3,0,0/) DSMC-Reaction33-Arrhenius-Prefactor=4.589E-18 DSMC-Reaction33-Arrhenius-Powerfactor=-0.037 DSMC-Reaction33-Activation-Energy_K=0. !Reaction34 (NO+ + N --> O+ + N2 ) -DSMC-Reaction34-ReactionType=E + DSMC-Reaction34-Reactants=(/10,1,0/) DSMC-Reaction34-Products=(/7,3,0,0/) DSMC-Reaction34-Arrhenius-Prefactor=5.645E-17 DSMC-Reaction34-Arrhenius-Powerfactor=-1.08 DSMC-Reaction34-Activation-Energy_K=12800 !Reaction35 (O+ + N2 --> NO+ + N ) -DSMC-Reaction35-ReactionType=E + DSMC-Reaction35-Reactants=(/7,3,0/) DSMC-Reaction35-Products=(/10,1,0,0/) DSMC-Reaction35-Arrhenius-Prefactor=3.970E-18 DSMC-Reaction35-Arrhenius-Powerfactor=-0.71 DSMC-Reaction35-Activation-Energy_K=0. !Reaction36 (NO+ + O --> O2+ + N ) -DSMC-Reaction36-ReactionType=E + DSMC-Reaction36-Reactants=(/10,2,0/) DSMC-Reaction36-Products=(/9,1,0,0/) DSMC-Reaction36-Arrhenius-Prefactor=1.195E-17 DSMC-Reaction36-Arrhenius-Powerfactor=0.29 DSMC-Reaction36-Activation-Energy_K=48600 !Reaction37 (O2+ + N --> NO+ + O ) -DSMC-Reaction37-ReactionType=E + DSMC-Reaction37-Reactants=(/9,1,0/) DSMC-Reaction37-Products=(/10,2,0,0/) DSMC-Reaction37-Arrhenius-Prefactor=8.918E-13 DSMC-Reaction37-Arrhenius-Powerfactor=-0.969 DSMC-Reaction37-Activation-Energy_K=0. !Reaction38 (N+ + N2 --> N2+ + N ) -DSMC-Reaction38-ReactionType=E + DSMC-Reaction38-Reactants=(/6,3,0/) DSMC-Reaction38-Products=(/8,1,0,0/) DSMC-Reaction38-Arrhenius-Prefactor=1.660E-18 DSMC-Reaction38-Arrhenius-Powerfactor=0.5 DSMC-Reaction38-Activation-Energy_K=12100 !Reaction39 (N2+ + N --> N+ + N2 ) -DSMC-Reaction39-ReactionType=E + DSMC-Reaction39-Reactants=(/8,1,0/) DSMC-Reaction39-Products=(/6,3,0,0/) DSMC-Reaction39-Arrhenius-Prefactor=2.343E-14 DSMC-Reaction39-Arrhenius-Powerfactor=-0.61 DSMC-Reaction39-Activation-Energy_K=0. !Reaction40 (O2+ + O --> O2 + O+ ) -DSMC-Reaction40-ReactionType=E + DSMC-Reaction40-Reactants=(/9,2,0/) DSMC-Reaction40-Products=(/4,7,0,0/) DSMC-Reaction40-Arrhenius-Prefactor=6.641E-18 DSMC-Reaction40-Arrhenius-Powerfactor=-0.09 DSMC-Reaction40-Activation-Energy_K=18600 !Reaction41 (O2 + O+ --> O2+ + O ) -DSMC-Reaction41-ReactionType=E + DSMC-Reaction41-Reactants=(/4,7,0/) DSMC-Reaction41-Products=(/9,2,0,0/) DSMC-Reaction41-Arrhenius-Prefactor=4.993E-18 DSMC-Reaction41-Arrhenius-Powerfactor=-0.004 DSMC-Reaction41-Activation-Energy_K=0. !Reaction42 (N + e --> N+ + e + e ) -DSMC-Reaction42-ReactionType=iQK +QK DSMC-Reaction42-Reactants=(/1,11,0/) DSMC-Reaction42-Products=(/6,11,11,0/) DSMC-Reaction42-Arrhenius-Prefactor=8.434E-14 DSMC-Reaction42-Arrhenius-Powerfactor=0. DSMC-Reaction42-Activation-Energy_K=121600 !Reaction43 (O + e --> O+ + e + e ) -DSMC-Reaction43-ReactionType=iQK +QK DSMC-Reaction43-Reactants=(/2,11,0/) DSMC-Reaction43-Products=(/7,11,11,0/) DSMC-Reaction43-Arrhenius-Prefactor=1.054E-14 diff --git a/tools/species_database/Air_11Spec_51Reac_Park1993.ini b/tools/species_database/Air_11Spec_51Reac_Park1993.ini index ba5b9137a..6db91aba7 100755 --- a/tools/species_database/Air_11Spec_51Reac_Park1993.ini +++ b/tools/species_database/Air_11Spec_51Reac_Park1993.ini @@ -139,7 +139,7 @@ DSMC-Reaction7-ReactionName=NO+M_N+O+M DSMC-Reaction8-ReactionName=NO+A_N+O+A !Reaction1 (N2 + M -> N + N + M) -DSMC-Reaction1-ReactionType=D + DSMC-Reaction1-Reactants=(/3,0,0/) DSMC-Reaction1-Products=(/1,0,1,0/) DSMC-Reaction1-Arrhenius-Prefactor=1.16237749371486E-08 @@ -149,7 +149,7 @@ DSMC-Reaction1-NumberOfNonReactives=6 DSMC-Reaction1-NonReactiveSpecies=(/3,4,5,8,9,10/) !Reaction4 (N2 + A -> N + N + A) -DSMC-Reaction2-ReactionType=D + DSMC-Reaction2-Reactants=(/3,0,0/) DSMC-Reaction2-Products=(/1,0,1,0/) DSMC-Reaction2-Arrhenius-Prefactor=4.98161783020654E-08 @@ -159,7 +159,7 @@ DSMC-Reaction2-NumberOfNonReactives=4 DSMC-Reaction2-NonReactiveSpecies=(/1,2,6,7/) !Reaction23 (N2 + e -> N + N + e) -DSMC-Reaction3-ReactionType=D + DSMC-Reaction3-Reactants=(/3,11,0/) DSMC-Reaction3-Products=(/1,11,1,0/) DSMC-Reaction3-Arrhenius-Prefactor=1.99264713208262E-005 @@ -167,7 +167,7 @@ DSMC-Reaction3-Arrhenius-Powerfactor=-1.60 DSMC-Reaction3-Activation-Energy_K=113200.0 !Reaction4 (O2 + M -> O + O + M) -DSMC-Reaction4-ReactionType=D + DSMC-Reaction4-Reactants=(/4,0,0/) DSMC-Reaction4-Products=(/2,0,2,0/) DSMC-Reaction4-Arrhenius-Prefactor=3.32107855347103E-09 @@ -177,7 +177,7 @@ DSMC-Reaction4-NumberOfNonReactives=6 DSMC-Reaction4-NonReactiveSpecies=(/3,4,5,8,9,10/) !Reaction5 (O2 + A --> O + O + A) -DSMC-Reaction5-ReactionType=D + DSMC-Reaction5-Reactants=(/4,0,0/) DSMC-Reaction5-Products=(/2,0,2,0/) DSMC-Reaction5-Arrhenius-Prefactor=1.66053927673551E-08 @@ -187,7 +187,7 @@ DSMC-Reaction5-NumberOfNonReactives=4 DSMC-Reaction5-NonReactiveSpecies=(/1,2,6,7/) !Reaction6 (O2 + e --> O + O + e) -DSMC-Reaction6-ReactionType=D + DSMC-Reaction6-Reactants=(/4,11,0/) DSMC-Reaction6-Products=(/2,11,2,0/) DSMC-Reaction6-Arrhenius-Prefactor=1.66053927673551E-08 @@ -195,7 +195,7 @@ DSMC-Reaction6-Arrhenius-Powerfactor=-1.5 DSMC-Reaction6-Activation-Energy_K=59500.0 !Reaction7 (NO + M --> N + O + M) -DSMC-Reaction7-ReactionType=D + DSMC-Reaction7-Reactants=(/5,0,0/) DSMC-Reaction7-Products=(/1,0,2,0/) DSMC-Reaction7-Arrhenius-Prefactor=8.30269638367756E-15 @@ -205,7 +205,7 @@ DSMC-Reaction7-NumberOfNonReactives=6 DSMC-Reaction7-NonReactiveSpecies=(/3,4,5,8,9,10/) !Reaction8 (NO + A --> N + O + A) -DSMC-Reaction8-ReactionType=D + DSMC-Reaction8-Reactants=(/5,1,0/) DSMC-Reaction8-Products=(/1,1,2,0/) DSMC-Reaction8-Arrhenius-Prefactor=1.82659320440906E-13 @@ -215,7 +215,7 @@ DSMC-Reaction8-NumberOfNonReactives=4 DSMC-Reaction8-NonReactiveSpecies=(/1,2,6,7/) !Reaction9 (NO + e --> N + O + e ) -DSMC-Reaction9-ReactionType=D + DSMC-Reaction9-Reactants=(/5,11,0/) DSMC-Reaction9-Products=(/1,11,2,0/) DSMC-Reaction9-Arrhenius-Prefactor=1.82659320440906E-013 @@ -223,7 +223,7 @@ DSMC-Reaction9-Arrhenius-Powerfactor=0. DSMC-Reaction9-Activation-Energy_K=75500.0 !Reaction10 (N2 + O --> NO + N) -DSMC-Reaction10-ReactionType=E + DSMC-Reaction10-Reactants=(/3,2,0/) DSMC-Reaction10-Products=(/5,1,0,0/) DSMC-Reaction10-Arrhenius-Prefactor=1.06274513711073E-12 @@ -231,7 +231,7 @@ DSMC-Reaction10-Arrhenius-Powerfactor=-1 DSMC-Reaction10-Activation-Energy_K=38400.0 !Reaction11 (NO + O --> N + O2) -DSMC-Reaction11-ReactionType=E + DSMC-Reaction11-Reactants=(/5,2,0/) DSMC-Reaction11-Products=(/4,1,0,0/) DSMC-Reaction11-Arrhenius-Prefactor=1.39485299245783E-17 @@ -239,21 +239,21 @@ DSMC-Reaction11-Arrhenius-Powerfactor=0 DSMC-Reaction11-Activation-Energy_K=19450 !Reaction12 (N + O --> NO+ + e ) -DSMC-Reaction12-ReactionType=E + DSMC-Reaction12-Reactants=(/1,2,0/) DSMC-Reaction12-Products=(/10,11,0,0/) DSMC-Reaction12-Arrhenius-Prefactor=1.46127456352725E-21 DSMC-Reaction12-Arrhenius-Powerfactor=1. DSMC-Reaction12-Activation-Energy_K=31900 !Reaction13 (O + O --> O2+ + e ) -DSMC-Reaction13-ReactionType=E + DSMC-Reaction13-Reactants=(/2,2,0/) DSMC-Reaction13-Products=(/9,11,0,0/) DSMC-Reaction13-Arrhenius-Prefactor=1.17898288648221E-27 DSMC-Reaction13-Arrhenius-Powerfactor=2.7 DSMC-Reaction13-Activation-Energy_K=80600 !Reaction14 (N + N --> N2+ + e ) -DSMC-Reaction14-ReactionType=E + DSMC-Reaction14-Reactants=(/1,1,0/) DSMC-Reaction14-Products=(/8,11,0,0/) DSMC-Reaction14-Arrhenius-Prefactor=7.30637281763626E-23 @@ -261,89 +261,89 @@ DSMC-Reaction14-Arrhenius-Powerfactor=1.5 DSMC-Reaction14-Activation-Energy_K=67500 !Reaction15 (NO+ + O --> N+ + O2 ) -DSMC-Reaction15-ReactionType=E + DSMC-Reaction15-Reactants=(/10,2,0/) DSMC-Reaction15-Products=(/6,4,0,0/) DSMC-Reaction15-Arrhenius-Prefactor=1.66053927673551E-18 DSMC-Reaction15-Arrhenius-Powerfactor=0.5 DSMC-Reaction15-Activation-Energy_K=77200 !Reaction16 (N+ + N2 --> N2+ + N ) -DSMC-Reaction16-ReactionType=E + DSMC-Reaction16-Reactants=(/6,3,0/) DSMC-Reaction16-Products=(/8,1,0,0/) DSMC-Reaction16-Arrhenius-Prefactor=1.66053927673551E-18 DSMC-Reaction16-Arrhenius-Powerfactor=0.5 DSMC-Reaction16-Activation-Energy_K=12200 !Reaction17 (O2+ + N --> N+ + O2 ) -DSMC-Reaction17-ReactionType=E + DSMC-Reaction17-Reactants=(/9,1,0/) DSMC-Reaction17-Products=(/4,6,0,0/) DSMC-Reaction17-Arrhenius-Prefactor=1.4446691707599E-16 DSMC-Reaction17-Arrhenius-Powerfactor=0.14 DSMC-Reaction17-Activation-Energy_K=28600 !Reaction18 (O+ + NO --> N+ + O2 ) -DSMC-Reaction18-ReactionType=E + DSMC-Reaction18-Reactants=(/7,5,0/) DSMC-Reaction18-Products=(/6,4,0,0/) DSMC-Reaction18-Arrhenius-Prefactor=2.32475498742972E-25 DSMC-Reaction18-Arrhenius-Powerfactor=1.9 DSMC-Reaction18-Activation-Energy_K=26600 !Reaction19 (O2+ + N2 --> N2+ + O2 ) -DSMC-Reaction19-ReactionType=E + DSMC-Reaction19-Reactants=(/9,3,0/) DSMC-Reaction19-Products=(/8,4,0,0/) DSMC-Reaction19-Arrhenius-Prefactor=1.64393388396816E-17 DSMC-Reaction19-Arrhenius-Powerfactor=0 DSMC-Reaction19-Activation-Energy_K=40700 !Reaction20 (O2+ + O --> O2 + O+ ) -DSMC-Reaction20-ReactionType=E + DSMC-Reaction20-Reactants=(/9,2,0/) DSMC-Reaction20-Products=(/4,7,0,0/) DSMC-Reaction20-Arrhenius-Prefactor=6.64215710694205E-18 DSMC-Reaction20-Arrhenius-Powerfactor=-0.09 DSMC-Reaction20-Activation-Energy_K=18000 !Reaction21 (NO+ + N --> O+ + N2 ) -DSMC-Reaction21-ReactionType=E + DSMC-Reaction21-Reactants=(/10,1,0/) DSMC-Reaction21-Products=(/7,3,0,0/) DSMC-Reaction21-Arrhenius-Prefactor=5.64583354090074E-17 DSMC-Reaction21-Arrhenius-Powerfactor=-1.08 DSMC-Reaction21-Activation-Energy_K=12800 !Reaction22 (NO+ + O2 --> O2+ + NO ) -DSMC-Reaction22-ReactionType=E + DSMC-Reaction22-Reactants=(/10,4,0/) DSMC-Reaction22-Products=(/9,5,0,0/) DSMC-Reaction22-Arrhenius-Prefactor=3.98529426416523E-17 DSMC-Reaction22-Arrhenius-Powerfactor=0.41 DSMC-Reaction22-Activation-Energy_K=32600 !Reaction23 (NO+ + O --> O2+ + N ) -DSMC-Reaction23-ReactionType=E + DSMC-Reaction23-Reactants=(/10,2,0/) DSMC-Reaction23-Products=(/9,1,0,0/) DSMC-Reaction23-Arrhenius-Prefactor=1.19558827924957E-17 DSMC-Reaction23-Arrhenius-Powerfactor=0.29 DSMC-Reaction23-Activation-Energy_K=48600 !Reaction24 (O+ + N2 --> N2+ + O ) -DSMC-Reaction24-ReactionType=E + DSMC-Reaction24-Reactants=(/7,3,0/) DSMC-Reaction24-Products=(/8,2,0,0/) DSMC-Reaction24-Arrhenius-Prefactor=1.51109074182932E-18 DSMC-Reaction24-Arrhenius-Powerfactor=0.36 DSMC-Reaction24-Activation-Energy_K=22800 !Reaction25 (NO+ + N --> N2+ + O ) -DSMC-Reaction25-ReactionType=E + DSMC-Reaction25-Reactants=(/10,1,0/) DSMC-Reaction25-Products=(/8,2,0,0/) DSMC-Reaction25-Arrhenius-Prefactor=1.19558827924957E-16 DSMC-Reaction25-Arrhenius-Powerfactor=0. DSMC-Reaction25-Activation-Energy_K=35500 !Reaction26 (O + e --> O+ + e + e ) -DSMC-Reaction26-ReactionType=iQK +QK DSMC-Reaction26-Reactants=(/2,11,0/) DSMC-Reaction26-Products=(/7,11,11,0/) DSMC-Reaction26-QKProcedure=true !Reaction27 (N + e --> O+ + e + e ) -DSMC-Reaction27-ReactionType=iQK +QK DSMC-Reaction27-Reactants=(/1,11,0/) DSMC-Reaction27-Products=(/6,11,11,0/) DSMC-Reaction27-QKProcedure=true diff --git a/tools/species_database/Air_5Spec_8Reac_Park1993.ini b/tools/species_database/Air_5Spec_8Reac_Park1993.ini index 780a40832..5aaddbe2d 100755 --- a/tools/species_database/Air_5Spec_8Reac_Park1993.ini +++ b/tools/species_database/Air_5Spec_8Reac_Park1993.ini @@ -67,7 +67,6 @@ DSMC-NumOfReactions=8 !Reaction1 (N2 + molecule -> N + N + molecule) DSMC-Reaction1-ReactionName=N2+M_N+N+M -DSMC-Reaction1-ReactionType=D DSMC-Reaction1-Reactants=(/3,0,0/) DSMC-Reaction1-Products=(/1,0,1/) DSMC-Reaction1-Arrhenius-Prefactor=1.16237749371486E-08 @@ -78,7 +77,6 @@ DSMC-Reaction1-NonReactiveSpecies=(/3,4,5/) !Reaction2 (N2 + atom -> N + N + atom) DSMC-Reaction2-ReactionName=N2+A_N+N+A -DSMC-Reaction2-ReactionType=D DSMC-Reaction2-Reactants=(/3,0,0/) DSMC-Reaction2-Products=(/1,0,1/) DSMC-Reaction2-Arrhenius-Prefactor=4.98161783020654E-08 @@ -89,7 +87,6 @@ DSMC-Reaction2-NonReactiveSpecies=(/1,2/) !Reaction3 (O2 + molecule -> O + O + molecule) DSMC-Reaction3-ReactionName=O2+M_O+O+M -DSMC-Reaction3-ReactionType=D DSMC-Reaction3-Reactants=(/4,0,0/) DSMC-Reaction3-Products=(/2,0,2/) DSMC-Reaction3-Arrhenius-Prefactor=3.32107855347103E-09 @@ -100,7 +97,6 @@ DSMC-Reaction3-NonReactiveSpecies=(/3,4,5/) !Reaction4 (O2 + atom --> O + O + atom) DSMC-Reaction4-ReactionName=O2+A_O+O+A -DSMC-Reaction4-ReactionType=D DSMC-Reaction4-Reactants=(/4,0,0/) DSMC-Reaction4-Products=(/2,0,2/) DSMC-Reaction4-Arrhenius-Prefactor=1.66053927673551E-08 @@ -111,7 +107,6 @@ DSMC-Reaction4-NonReactiveSpecies=(/1,2/) !Reaction5 (NO + molecule --> N + O + molecule) DSMC-Reaction5-ReactionName=NO+M_N+O+M -DSMC-Reaction5-ReactionType=D DSMC-Reaction5-Reactants=(/5,0,0/) DSMC-Reaction5-Products=(/1,0,2/) DSMC-Reaction5-Arrhenius-Prefactor=8.30269638367756E-15 @@ -122,7 +117,6 @@ DSMC-Reaction5-NonReactiveSpecies=(/3,4,5/) !Reaction6 (NO + atom --> N + O + atom) DSMC-Reaction6-ReactionName=NO+A_N+O+A -DSMC-Reaction6-ReactionType=D DSMC-Reaction6-Reactants=(/5,0,0/) DSMC-Reaction6-Products=(/1,0,2/) DSMC-Reaction6-Arrhenius-Prefactor=1.82659320440906E-13 @@ -132,7 +126,6 @@ DSMC-Reaction6-NumberOfNonReactives=2 DSMC-Reaction6-NonReactiveSpecies=(/1,2/) !Reaction7 (N2 + O --> NO + N) -DSMC-Reaction7-ReactionType=E DSMC-Reaction7-Reactants=(/3,2,0/) DSMC-Reaction7-Products=(/5,1,0/) DSMC-Reaction7-Arrhenius-Prefactor=1.06274513711073E-12 @@ -140,7 +133,6 @@ DSMC-Reaction7-Arrhenius-Powerfactor=-1 DSMC-Reaction7-Activation-Energy_K=38400.0 !Reaction8 (NO + O --> N + O2) -DSMC-Reaction8-ReactionType=E DSMC-Reaction8-Reactants=(/5,2,0/) DSMC-Reaction8-Products=(/4,1,0/) DSMC-Reaction8-Arrhenius-Prefactor=1.39485299245783E-17 diff --git a/tools/species_database/CH4-Ar_8Spec_7Reac.ini b/tools/species_database/CH4-Ar_8Spec_7Reac.ini index d2d0e4a3c..22bd3295f 100755 --- a/tools/species_database/CH4-Ar_8Spec_7Reac.ini +++ b/tools/species_database/CH4-Ar_8Spec_7Reac.ini @@ -137,7 +137,7 @@ DSMC-Reaction7-ReactionName=H2+M_H+H+M !--------------------------------------------------------------------! !--------- Reaction1: CH4 + M -> CH3 + H + M ------------------------! !--------------------------------------------------------------------! -DSMC-Reaction1-ReactionType=D + DSMC-Reaction1-Reactants=(/1,8,0/) DSMC-Reaction1-Products=(/2,8,7/) DSMC-Reaction1-Arrhenius-Prefactor=7.8045E+17 ! A_f @@ -148,7 +148,7 @@ DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7,8/) !--------------------------------------------------------------------! !--------- Reaction2: CH3 + M -> CH2 + H + M ------------------------! !--------------------------------------------------------------------! -DSMC-Reaction2-ReactionType=D + DSMC-Reaction2-Reactants=(/2,8,0/) DSMC-Reaction2-Products=(/3,8,7/) DSMC-Reaction2-Arrhenius-Prefactor=1.6938E-14 ! A_f @@ -159,7 +159,7 @@ DSMC-Reaction2-NonReactiveSpecies=(/1,2,3,4,5,6,7,8/) !--------------------------------------------------------------------! !--------- Reaction3: CH3 + M -> CH + H2 + M ------------------------! !--------------------------------------------------------------------! -DSMC-Reaction3-ReactionType=D + DSMC-Reaction3-Reactants=(/2,8,0/) DSMC-Reaction3-Products=(/4,8,5/) DSMC-Reaction3-Arrhenius-Prefactor=8.3029E-15 ! A_f @@ -170,7 +170,7 @@ DSMC-Reaction3-NonReactiveSpecies=(/1,2,3,4,5,6,7,8/) !--------------------------------------------------------------------! !--------- Reaction4: CH2 + M -> CH + H + M -------------------------! !--------------------------------------------------------------------! -DSMC-Reaction4-ReactionType=D + DSMC-Reaction4-Reactants=(/3,8,0/) DSMC-Reaction4-Products=(/4,8,7/) DSMC-Reaction4-Arrhenius-Prefactor=6.6423E-15 ! A_f @@ -181,7 +181,7 @@ DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7,8/) !--------------------------------------------------------------------! !--------- Reaction5: CH2 + M -> H2 + C + M -------------------------! !--------------------------------------------------------------------! -DSMC-Reaction5-ReactionType=D + DSMC-Reaction5-Reactants=(/3,8,0/) DSMC-Reaction5-Products=(/5,8,6/) DSMC-Reaction5-Arrhenius-Prefactor=2.1588E-16 ! A_f @@ -192,7 +192,7 @@ DSMC-Reaction5-NonReactiveSpecies=(/1,2,3,4,5,6,7,8/) !--------------------------------------------------------------------! !--------- Reaction6: CH + M -> C + H + M --------------------------! !--------------------------------------------------------------------! -DSMC-Reaction6-ReactionType=D + DSMC-Reaction6-Reactants=(/4,8,0/) DSMC-Reaction6-Products=(/6,8,7/) DSMC-Reaction6-Arrhenius-Prefactor=3.1551E-16 ! A_f @@ -203,7 +203,7 @@ DSMC-Reaction6-NonReactiveSpecies=(/1,2,3,4,5,6,7,8/) !--------------------------------------------------------------------! !--------- Reaction7: H2 + M -> H + H + M ---------------------------! !--------------------------------------------------------------------! -DSMC-Reaction7-ReactionType=D + DSMC-Reaction7-Reactants=(/5,8,0/) DSMC-Reaction7-Products=(/7,8,7/) DSMC-Reaction7-Arrhenius-Prefactor=3.7031E-16 ! A_f @@ -216,7 +216,7 @@ DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8/) ; !--------------------------------------------------------------------! ; !--------- Reaction9: CH3 + H -> CH2 + H2 --------------------------! ; !--------------------------------------------------------------------! -; DSMC-Reaction9-ReactionType=E +; ; DSMC-Reaction9-Reactants=(/2,13,0/) ; DSMC-Reaction9-Products=(/3,7,0/) ; DSMC-Reaction9-Arrhenius-Prefactor=2.1000E-14 ! A_f @@ -225,7 +225,7 @@ DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8/) ; !--------------------------------------------------------------------! ; !--------- Reaction10: CH + C -> C2 + H -----------------------------! ; !--------------------------------------------------------------------! -; DSMC-Reaction10-ReactionType=E +; ; DSMC-Reaction10-Reactants=(/4,12,0/) ; DSMC-Reaction10-Products=(/6,13,0/) ; DSMC-Reaction10-Arrhenius-Prefactor=3.3212E-16 ! A_f @@ -234,7 +234,7 @@ DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8/) ; !--------------------------------------------------------------------! ; !--------- Reaction11: H2 + C -> CH + H -----------------------------! ; !--------------------------------------------------------------------! -; DSMC-Reaction11-ReactionType=E +; ; DSMC-Reaction11-Reactants=(/7,12,0/) ; DSMC-Reaction11-Products=(/4,13,0/) ; DSMC-Reaction11-Arrhenius-Prefactor=6.6423E-16 ! A_f @@ -243,7 +243,7 @@ DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8/) ; !--------------------------------------------------------------------! ; !--------- Reaction12: CH4 + H -> CH3 + H2 --------------------------! ; !--------------------------------------------------------------------! -; DSMC-Reaction12-ReactionType=E +; ; DSMC-Reaction12-Reactants=(/1,13,0/) ; DSMC-Reaction12-Products=(/2,7,0/) ; DSMC-Reaction12-Arrhenius-Prefactor=2.1919E-26 ! A_f diff --git a/tools/species_database/CH4_7Spec_7Reac.ini b/tools/species_database/CH4_7Spec_7Reac.ini index 78676aa75..4b3784229 100755 --- a/tools/species_database/CH4_7Spec_7Reac.ini +++ b/tools/species_database/CH4_7Spec_7Reac.ini @@ -128,7 +128,7 @@ DSMC-Reaction7-ReactionName=H2+M_H+H+M !--------------------------------------------------------------------! !--------- Reaction1: CH4 + M -> CH3 + H + M ------------------------! !--------------------------------------------------------------------! -DSMC-Reaction1-ReactionType=D + DSMC-Reaction1-Reactants=(/1,0,0/) DSMC-Reaction1-Products=(/2,0,7,0/) DSMC-Reaction1-Arrhenius-Prefactor=7.8045E+17 ! A_f @@ -139,7 +139,7 @@ DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7/) !--------------------------------------------------------------------! !--------- Reaction2: CH3 + M -> CH2 + H + M ------------------------! !--------------------------------------------------------------------! -DSMC-Reaction2-ReactionType=D + DSMC-Reaction2-Reactants=(/2,0,0/) DSMC-Reaction2-Products=(/3,0,7,0/) DSMC-Reaction2-Arrhenius-Prefactor=1.6938E-14 ! A_f @@ -150,7 +150,7 @@ DSMC-Reaction2-NonReactiveSpecies=(/1,2,3,4,5,6,7/) !--------------------------------------------------------------------! !--------- Reaction3: CH3 + M -> CH + H2 + M ------------------------! !--------------------------------------------------------------------! -DSMC-Reaction3-ReactionType=D + DSMC-Reaction3-Reactants=(/2,0,0/) DSMC-Reaction3-Products=(/4,0,5,0/) DSMC-Reaction3-Arrhenius-Prefactor=8.3029E-15 ! A_f @@ -161,7 +161,7 @@ DSMC-Reaction3-NonReactiveSpecies=(/1,2,3,4,5,6,7/) !--------------------------------------------------------------------! !--------- Reaction4: CH2 + M -> CH + H + M -------------------------! !--------------------------------------------------------------------! -DSMC-Reaction4-ReactionType=D + DSMC-Reaction4-Reactants=(/3,0,0/) DSMC-Reaction4-Products=(/4,0,7,0/) DSMC-Reaction4-Arrhenius-Prefactor=6.6423E-15 ! A_f @@ -172,7 +172,7 @@ DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7/) !--------------------------------------------------------------------! !--------- Reaction5: CH2 + M -> H2 + C + M -------------------------! !--------------------------------------------------------------------! -DSMC-Reaction5-ReactionType=D + DSMC-Reaction5-Reactants=(/3,0,0/) DSMC-Reaction5-Products=(/5,0,6,0/) DSMC-Reaction5-Arrhenius-Prefactor=2.1588E-16 ! A_f @@ -183,7 +183,7 @@ DSMC-Reaction5-NonReactiveSpecies=(/1,2,3,4,5,6,7/) !--------------------------------------------------------------------! !--------- Reaction6: CH + M -> C + H + M --------------------------! !--------------------------------------------------------------------! -DSMC-Reaction6-ReactionType=D + DSMC-Reaction6-Reactants=(/4,0,0/) DSMC-Reaction6-Products=(/6,0,7,0/) DSMC-Reaction6-Arrhenius-Prefactor=3.1551E-16 ! A_f @@ -194,7 +194,7 @@ DSMC-Reaction6-NonReactiveSpecies=(/1,2,3,4,5,6,7/) !--------------------------------------------------------------------! !--------- Reaction7: H2 + M -> H + H + M ---------------------------! !--------------------------------------------------------------------! -DSMC-Reaction7-ReactionType=D + DSMC-Reaction7-Reactants=(/5,0,0/) DSMC-Reaction7-Products=(/7,0,7,0/) DSMC-Reaction7-Arrhenius-Prefactor=3.7031E-16 ! A_f @@ -207,7 +207,7 @@ DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7/) ;!--------------------------------------------------------------------! ;!--------- Reaction8: CH3 + H -> CH2 + H2 --------------------------! ;!--------------------------------------------------------------------! -;DSMC-Reaction8-ReactionType=E +; ;DSMC-Reaction8-Reactants=(/2,13,0/) ;DSMC-Reaction8-Products=(/3,7,0/) ;DSMC-Reaction8-Arrhenius-Prefactor=2.1000E-14 ! A_f @@ -216,7 +216,7 @@ DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7/) ;!--------------------------------------------------------------------! ;!--------- Reaction9: CH + C -> C2 + H -----------------------------! ;!--------------------------------------------------------------------! -;DSMC-Reaction9-ReactionType=E +; ;DSMC-Reaction9-Reactants=(/4,12,0/) ;DSMC-Reaction9-Products=(/6,13,0/) ;DSMC-Reaction9-Arrhenius-Prefactor=3.3212E-16 ! A_f @@ -225,7 +225,7 @@ DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7/) ;!--------------------------------------------------------------------! ;!--------- Reaction10: H2 + C -> CH + H -----------------------------! ;!--------------------------------------------------------------------! -;DSMC-Reaction10-ReactionType=E +; ;DSMC-Reaction10-Reactants=(/7,12,0/) ;DSMC-Reaction10-Products=(/4,13,0/) ;DSMC-Reaction10-Arrhenius-Prefactor=6.6423E-16 ! A_f @@ -234,7 +234,7 @@ DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7/) ;!--------------------------------------------------------------------! ;!--------- Reaction11: CH4 + H -> CH3 + H2 --------------------------! ;!--------------------------------------------------------------------! -;DSMC-Reaction11-ReactionType=E +; ;DSMC-Reaction11-Reactants=(/1,13,0/) ;DSMC-Reaction11-Products=(/2,7,0/) ;DSMC-Reaction11-Arrhenius-Prefactor=2.1919E-26 ! A_f diff --git a/tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini b/tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini index b2c9928bb..bea3e1477 100755 --- a/tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini +++ b/tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini @@ -91,7 +91,7 @@ DSMC-Reaction7-ReactionName=O2+A_O+O+A ! Dissociation CO2 ! ============ ! !Reaction1 (CO2 + molecules -> CO + O + molecules) -DSMC-Reaction1-ReactionType=D + DSMC-Reaction1-Reactants=(/1,0,0/) DSMC-Reaction1-Products=(/2,0,6/) DSMC-Reaction1-Arrhenius-Prefactor=1.15E-08 @@ -101,7 +101,7 @@ DSMC-Reaction1-NumberOfNonReactives=4 DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4/) !Reaction2 (CO2 + atoms -> CO + O + atoms) -DSMC-Reaction2-ReactionType=D + DSMC-Reaction2-Reactants=(/1,0,0/) DSMC-Reaction2-Products=(/2,0,6/) DSMC-Reaction2-Arrhenius-Prefactor=2.29E-08 @@ -114,7 +114,7 @@ DSMC-Reaction2-NonReactiveSpecies=(/5,6/) ! Dissociation CO ! ============ ! !Reaction3 (CO + molecules -> C + O + molecules) -DSMC-Reaction3-ReactionType=D + DSMC-Reaction3-Reactants=(/2,0,0/) DSMC-Reaction3-Products=(/5,0,6/) DSMC-Reaction3-Arrhenius-Prefactor=1.99E-09 @@ -124,7 +124,7 @@ DSMC-Reaction3-NumberOfNonReactives=4 DSMC-Reaction3-NonReactiveSpecies=(/1,2,3,4/) !Reaction4 (CO + atoms -> C + O + atoms) -DSMC-Reaction4-ReactionType=D + DSMC-Reaction4-Reactants=(/2,0,0/) DSMC-Reaction4-Products=(/5,0,6/) DSMC-Reaction4-Arrhenius-Prefactor=2.99E-09 @@ -137,7 +137,7 @@ DSMC-Reaction4-NonReactiveSpecies=(/5,6/) ! Dissociation C2 ! ============ ! !Reaction5 (C2 + M -> C + C + M) -DSMC-Reaction5-ReactionType=D + DSMC-Reaction5-Reactants=(/3,0,0/) DSMC-Reaction5-Products=(/5,0,5/) DSMC-Reaction5-Arrhenius-Prefactor=7.47E-12 @@ -150,7 +150,7 @@ DSMC-Reaction5-NonReactiveSpecies=(/1,2,3,4,5,6/) ! Dissociation O2 ! ============ ! !Reaction6 (O2 + molecules/Ar -> O + O + molecules/Ar) -DSMC-Reaction6-ReactionType=D + DSMC-Reaction6-Reactants=(/4,0,0/) DSMC-Reaction6-Products=(/6,0,6/) DSMC-Reaction6-Arrhenius-Prefactor=3.32E-09 @@ -160,7 +160,7 @@ DSMC-Reaction6-NumberOfNonReactives=4 DSMC-Reaction6-NonReactiveSpecies=(/1,2,3,4/) !Reaction7 (O2 + atoms -> O + O + atoms) -DSMC-Reaction7-ReactionType=D + DSMC-Reaction7-Reactants=(/4,0,0/) DSMC-Reaction7-Products=(/6,0,6/) DSMC-Reaction7-Arrhenius-Prefactor=1.66E-08 @@ -174,7 +174,7 @@ DSMC-Reaction7-NonReactiveSpecies=(/5,6/) ! ============ ! !Reaction8 (CO2 + O -> CO + O2) -DSMC-Reaction8-ReactionType=E + DSMC-Reaction8-Reactants=(/1,6,0/) DSMC-Reaction8-Products=(/2,4,0/) DSMC-Reaction8-Arrhenius-Prefactor=4.50E-16 @@ -182,7 +182,7 @@ DSMC-Reaction8-Arrhenius-Powerfactor=0 DSMC-Reaction8-Activation-Energy_K=33800 !Reaction9 (CO + C -> C2 + O) -DSMC-Reaction9-ReactionType=E + DSMC-Reaction9-Reactants=(/2,5,0/) DSMC-Reaction9-Products=(/3,6,0/) DSMC-Reaction9-Arrhenius-Prefactor=3.99E-13 @@ -190,7 +190,7 @@ DSMC-Reaction9-Arrhenius-Powerfactor=-1 DSMC-Reaction9-Activation-Energy_K=58000 !Reaction10 (CO + O -> C + O2) -DSMC-Reaction10-ReactionType=E + DSMC-Reaction10-Reactants=(/2,6,0/) DSMC-Reaction10-Products=(/5,4,0/) DSMC-Reaction10-Arrhenius-Prefactor=6.48E-17 diff --git a/tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini b/tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini index bc6e966e0..ffece067a 100755 --- a/tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini +++ b/tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini @@ -153,7 +153,7 @@ DSMC-Reaction14-ReactionName=O2+A_O+O+A ! Dissociation CO2 ! ============ ! !Reaction1 (CO2 + molecules -> CO + O + molecules) -DSMC-Reaction1-ReactionType=D + DSMC-Reaction1-Reactants=(/1,0,0/) DSMC-Reaction1-Products=(/2,0,10/) DSMC-Reaction1-Arrhenius-Prefactor=1.15E-08 @@ -163,7 +163,7 @@ DSMC-Reaction1-NumberOfNonReactives=7 DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7/) !Reaction2 (CO2 + atoms -> CO + O + atoms) -DSMC-Reaction2-ReactionType=D + DSMC-Reaction2-Reactants=(/1,0,0/) DSMC-Reaction2-Products=(/2,0,10/) DSMC-Reaction2-Arrhenius-Prefactor=2.29E-08 @@ -173,7 +173,7 @@ DSMC-Reaction2-NumberOfNonReactives=3 DSMC-Reaction2-NonReactiveSpecies=(/8,9,10/) !Reaction3 (CO2 + Ar -> CO + O + Ar) -DSMC-Reaction3-ReactionType=D + DSMC-Reaction3-Reactants=(/1,11,0/) DSMC-Reaction3-Products=(/2,11,10/) DSMC-Reaction3-Arrhenius-Prefactor=1.15E-09 @@ -184,7 +184,7 @@ DSMC-Reaction3-Activation-Energy_K=63280 ! Dissociation CO ! ============ ! !Reaction4 (CO + molecules -> C + O + molecules) -DSMC-Reaction4-ReactionType=D + DSMC-Reaction4-Reactants=(/2,0,0/) DSMC-Reaction4-Products=(/8,0,10/) DSMC-Reaction4-Arrhenius-Prefactor=1.99E-09 @@ -194,7 +194,7 @@ DSMC-Reaction4-NumberOfNonReactives=7 DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7/) !Reaction5 (CO + atoms -> C + O + atoms) -DSMC-Reaction5-ReactionType=D + DSMC-Reaction5-Reactants=(/2,0,0/) DSMC-Reaction5-Products=(/8,0,10/) DSMC-Reaction5-Arrhenius-Prefactor=2.99E-09 @@ -204,7 +204,7 @@ DSMC-Reaction5-NumberOfNonReactives=3 DSMC-Reaction5-NonReactiveSpecies=(/8,9,10/) !Reaction6 (CO + Ar -> C + O + Ar) -DSMC-Reaction6-ReactionType=D + DSMC-Reaction6-Reactants=(/2,11,0/) DSMC-Reaction6-Products=(/8,11,10/) DSMC-Reaction6-Arrhenius-Prefactor=1.99E-10 @@ -215,7 +215,7 @@ DSMC-Reaction6-Activation-Energy_K=129000 ! Dissociation C2 ! ============ ! !Reaction7 (C2 + M -> C + C + M) -DSMC-Reaction7-ReactionType=D + DSMC-Reaction7-Reactants=(/3,0,0/) DSMC-Reaction7-Products=(/8,0,8/) DSMC-Reaction7-Arrhenius-Prefactor=7.47E-12 @@ -228,7 +228,7 @@ DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11/) ! Dissociation CN ! ============ ! !Reaction8 (CN + M -> C + N + M) -DSMC-Reaction8-ReactionType=D + DSMC-Reaction8-Reactants=(/4,0,0/) DSMC-Reaction8-Products=(/8,0,9/) DSMC-Reaction8-Arrhenius-Prefactor=9.96E-15 @@ -241,7 +241,7 @@ DSMC-Reaction8-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11/) ! Dissociation N2 ! ============ ! !Reaction9 (N2 + molecules/Ar -> N + N + molecules/Ar) -DSMC-Reaction9-ReactionType=D + DSMC-Reaction9-Reactants=(/5,0,0/) DSMC-Reaction9-Products=(/9,0,9/) DSMC-Reaction9-Arrhenius-Prefactor=1.16E-08 @@ -251,7 +251,7 @@ DSMC-Reaction9-NumberOfNonReactives=8 DSMC-Reaction9-NonReactiveSpecies=(/1,2,3,4,5,6,7,11/) !Reaction10 (N2 + atoms -> N + N + atoms) -DSMC-Reaction10-ReactionType=D + DSMC-Reaction10-Reactants=(/5,0,0/) DSMC-Reaction10-Products=(/9,0,9/) DSMC-Reaction10-Arrhenius-Prefactor=4.98E-08 @@ -264,7 +264,7 @@ DSMC-Reaction10-NonReactiveSpecies=(/8,9,10/) ! Dissociation NO ! ============ ! !Reaction11 (NO + C2/N2/O2/CN/CO/Ar -> N + O + C2/N2/O2/CN/CO/Ar) -DSMC-Reaction11-ReactionType=D + DSMC-Reaction11-Reactants=(/7,0,0/) DSMC-Reaction11-Products=(/9,0,10/) DSMC-Reaction11-Arrhenius-Prefactor=3.32E-15 @@ -274,7 +274,7 @@ DSMC-Reaction11-NumberOfNonReactives=6 DSMC-Reaction11-NonReactiveSpecies=(/2,3,4,5,6,11/) !Reaction12 (NO + NO/CO2/atoms -> N + O + NO/CO2/atoms) -DSMC-Reaction12-ReactionType=D + DSMC-Reaction12-Reactants=(/7,0,0/) DSMC-Reaction12-Products=(/9,0,10/) DSMC-Reaction12-Arrhenius-Prefactor=7.31E-14 @@ -287,7 +287,7 @@ DSMC-Reaction12-NonReactiveSpecies=(/1,7,8,9,10/) ! Dissociation O2 ! ============ ! !Reaction13 (O2 + molecules/Ar -> O + O + molecules/Ar) -DSMC-Reaction13-ReactionType=D + DSMC-Reaction13-Reactants=(/6,0,0/) DSMC-Reaction13-Products=(/10,0,10/) DSMC-Reaction13-Arrhenius-Prefactor=3.32E-09 @@ -297,7 +297,7 @@ DSMC-Reaction13-NumberOfNonReactives=8 DSMC-Reaction13-NonReactiveSpecies=(/1,2,3,4,5,6,7,11/) !Reaction14 (O2 + atoms -> O + O + atoms) -DSMC-Reaction14-ReactionType=D + DSMC-Reaction14-Reactants=(/6,0,0/) DSMC-Reaction14-Products=(/10,0,10/) DSMC-Reaction14-Arrhenius-Prefactor=1.66E-08 @@ -311,7 +311,7 @@ DSMC-Reaction14-NonReactiveSpecies=(/8,9,10/) ! ============ ! !Reaction15 (CO2 + O -> CO + O2) -DSMC-Reaction15-ReactionType=E + DSMC-Reaction15-Reactants=(/1,10,0/) DSMC-Reaction15-Products=(/2,6,0/) DSMC-Reaction15-Arrhenius-Prefactor=4.50E-16 @@ -319,7 +319,7 @@ DSMC-Reaction15-Arrhenius-Powerfactor=0 DSMC-Reaction15-Activation-Energy_K=33800 !Reaction16 (CO + C -> C2 + O) -DSMC-Reaction16-ReactionType=E + DSMC-Reaction16-Reactants=(/2,8,0/) DSMC-Reaction16-Products=(/3,10,0/) DSMC-Reaction16-Arrhenius-Prefactor=3.99E-13 @@ -327,7 +327,7 @@ DSMC-Reaction16-Arrhenius-Powerfactor=-1 DSMC-Reaction16-Activation-Energy_K=58000 !Reaction17 (CO + N -> CN + O) -DSMC-Reaction17-ReactionType=E + DSMC-Reaction17-Reactants=(/2,9,0/) DSMC-Reaction17-Products=(/4,10,0/) DSMC-Reaction17-Arrhenius-Prefactor=1.66E-15 @@ -335,7 +335,7 @@ DSMC-Reaction17-Arrhenius-Powerfactor=0 DSMC-Reaction17-Activation-Energy_K=38600 !Reaction18 (CO + NO -> CO2 + N) -DSMC-Reaction18-ReactionType=E + DSMC-Reaction18-Reactants=(/2,7,0/) DSMC-Reaction18-Products=(/1,9,0/) DSMC-Reaction18-Arrhenius-Prefactor=4.98E-24 @@ -343,7 +343,7 @@ DSMC-Reaction18-Arrhenius-Powerfactor=0.88 DSMC-Reaction18-Activation-Energy_K=13300 !Reaction19 (CO + O -> C + O2) -DSMC-Reaction19-ReactionType=E + DSMC-Reaction19-Reactants=(/2,10,0/) DSMC-Reaction19-Products=(/6,8,0/) DSMC-Reaction19-Arrhenius-Prefactor=6.48E-17 @@ -351,7 +351,7 @@ DSMC-Reaction19-Arrhenius-Powerfactor=-0.18 DSMC-Reaction19-Activation-Energy_K=69200 !Reaction20 (C2 + N2 -> CN + CN) -DSMC-Reaction20-ReactionType=E + DSMC-Reaction20-Reactants=(/3,5,0/) DSMC-Reaction20-Products=(/4,4,0/) DSMC-Reaction20-Arrhenius-Prefactor=2.49E-17 @@ -359,7 +359,7 @@ DSMC-Reaction20-Arrhenius-Powerfactor=0 DSMC-Reaction20-Activation-Energy_K=21000 !Reaction21 (CN + C -> C2 + N) -DSMC-Reaction21-ReactionType=E + DSMC-Reaction21-Reactants=(/4,8,0/) DSMC-Reaction21-Products=(/3,9,0/) DSMC-Reaction21-Arrhenius-Prefactor=4.98E-16 @@ -367,7 +367,7 @@ DSMC-Reaction21-Arrhenius-Powerfactor=0 DSMC-Reaction21-Activation-Energy_K=18100 !Reaction22 (CN + O -> NO + C) -DSMC-Reaction22-ReactionType=E + DSMC-Reaction22-Reactants=(/4,10,0/) DSMC-Reaction22-Products=(/7,8,0/) DSMC-Reaction22-Arrhenius-Prefactor=2.66E-18 @@ -375,7 +375,7 @@ DSMC-Reaction22-Arrhenius-Powerfactor=0.1 DSMC-Reaction22-Activation-Energy_K=14600 !Reaction23 (CO + N -> NO + C) -DSMC-Reaction23-ReactionType=E + DSMC-Reaction23-Reactants=(/2,9,0/) DSMC-Reaction23-Products=(/7,8,0/) DSMC-Reaction23-Arrhenius-Prefactor=1.83E-16 @@ -383,7 +383,7 @@ DSMC-Reaction23-Arrhenius-Powerfactor=0.07 DSMC-Reaction23-Activation-Energy_K=53500 !Reaction24 (N2 + C -> CN + N) -DSMC-Reaction24-ReactionType=E + DSMC-Reaction24-Reactants=(/5,8,0/) DSMC-Reaction24-Products=(/4,9,0/) DSMC-Reaction24-Arrhenius-Prefactor=1.83E-16 @@ -391,7 +391,7 @@ DSMC-Reaction24-Arrhenius-Powerfactor=-0.11 DSMC-Reaction24-Activation-Energy_K=23200 !Reaction25 (N2 + CO -> CN + NO) -DSMC-Reaction25-ReactionType=E + DSMC-Reaction25-Reactants=(/2,5,0/) DSMC-Reaction25-Products=(/4,7,0/) DSMC-Reaction25-Arrhenius-Prefactor=1.99E-14 @@ -399,7 +399,7 @@ DSMC-Reaction25-Arrhenius-Powerfactor=-1.23 DSMC-Reaction25-Activation-Energy_K=77000 !Reaction26 (N2 + O -> NO + N) -DSMC-Reaction26-ReactionType=E + DSMC-Reaction26-Reactants=(/5,10,0/) DSMC-Reaction26-Products=(/7,9,0/) DSMC-Reaction26-Arrhenius-Prefactor=9.96E-17 @@ -407,7 +407,7 @@ DSMC-Reaction26-Arrhenius-Powerfactor=0.1 DSMC-Reaction26-Activation-Energy_K=38000 !Reaction27 (O2 + N -> NO + O) -DSMC-Reaction27-ReactionType=E + DSMC-Reaction27-Reactants=(/6,9,0/) DSMC-Reaction27-Products=(/7,10,0/) DSMC-Reaction27-Arrhenius-Prefactor=4.13E-21 diff --git a/tools/species_database/Mars_16Spec_31Reac_Park1994.ini b/tools/species_database/Mars_16Spec_31Reac_Park1994.ini index 155d8d890..d760edf32 100755 --- a/tools/species_database/Mars_16Spec_31Reac_Park1994.ini +++ b/tools/species_database/Mars_16Spec_31Reac_Park1994.ini @@ -205,7 +205,7 @@ DSMC-Reaction15-ReactionName=NO+A_N+O+A ! Dissociation CO2 ! ============ ! !Reaction1 (CO2 + molecules -> CO + O + molecules) -DSMC-Reaction1-ReactionType=D + DSMC-Reaction1-Reactants=(/1,0,0/) DSMC-Reaction1-Products=(/2,0,6/) DSMC-Reaction1-Arrhenius-Prefactor=1.1457721009475E-08 @@ -215,7 +215,7 @@ DSMC-Reaction1-NumberOfNonReactives=9 DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,5,7,8,9,11,12/) !Reaction2 (CO2 + atoms -> CO + O + atoms) -DSMC-Reaction2-ReactionType=D + DSMC-Reaction2-Reactants=(/1,0,0/) DSMC-Reaction2-Products=(/2,0,6/) DSMC-Reaction2-Arrhenius-Prefactor=2.32475498742972E-08 @@ -225,7 +225,7 @@ DSMC-Reaction2-NumberOfNonReactives=5 DSMC-Reaction2-NonReactiveSpecies=(/4,6,10,13,14/) !Reaction3 (CO2 + Ar -> CO + O + Ar) -DSMC-Reaction3-ReactionType=D + DSMC-Reaction3-Reactants=(/1,16,0/) DSMC-Reaction3-Products=(/2,16,6/) DSMC-Reaction3-Arrhenius-Prefactor=1.1457721009475E-09 @@ -236,7 +236,7 @@ DSMC-Reaction3-Activation-Energy_K=63275 ! Dissociation CO ! ============ ! !Reaction4 (CO + molecules -> C + O + molecules) -DSMC-Reaction4-ReactionType=D + DSMC-Reaction4-Reactants=(/2,0,0/) DSMC-Reaction4-Products=(/4,0,6/) DSMC-Reaction4-Arrhenius-Prefactor=3.81924033649168E-10 @@ -246,7 +246,7 @@ DSMC-Reaction4-NumberOfNonReactives=9 DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,5,7,8,9,11,12/) !Reaction5 (CO + atoms -> C + O + atoms) -DSMC-Reaction5-ReactionType=D + DSMC-Reaction5-Reactants=(/2,0,0/) DSMC-Reaction5-Products=(/4,0,6/) DSMC-Reaction5-Arrhenius-Prefactor=5.64583354090074E-10 @@ -256,7 +256,7 @@ DSMC-Reaction5-NumberOfNonReactives=5 DSMC-Reaction5-NonReactiveSpecies=(/4,6,10,13,14/) !Reaction6 (CO + Ar -> C + O + Ar) -DSMC-Reaction6-ReactionType=D + DSMC-Reaction6-Reactants=(/2,16,0/) DSMC-Reaction6-Products=(/4,16,6/) DSMC-Reaction6-Arrhenius-Prefactor=3.81924033649168E-11 @@ -267,7 +267,7 @@ DSMC-Reaction6-Activation-Energy_K=129000 ! Dissociation C2 ! ============ ! !Reaction7 (C2 + M -> C + C + M) -DSMC-Reaction7-ReactionType=D + DSMC-Reaction7-Reactants=(/3,0,0/) DSMC-Reaction7-Products=(/4,0,4/) DSMC-Reaction7-Arrhenius-Prefactor=6.1439953239214E-16 @@ -280,7 +280,7 @@ DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,16/) ! Dissociation N2 ! ============ ! !Reaction8 (N2 + molecules/Ar -> N + N + molecules/Ar) -DSMC-Reaction8-ReactionType=D + DSMC-Reaction8-Reactants=(/5,0,0/) DSMC-Reaction8-Products=(/10,0,10/) DSMC-Reaction8-Arrhenius-Prefactor=1.16237749371486E-08 @@ -290,7 +290,7 @@ DSMC-Reaction8-NumberOfNonReactives=10 DSMC-Reaction8-NonReactiveSpecies=(/1,2,3,5,7,8,9,11,12,16/) !Reaction9 (N2 + atoms -> N + N + atoms) -DSMC-Reaction9-ReactionType=D + DSMC-Reaction9-Reactants=(/5,0,0/) DSMC-Reaction9-Products=(/10,0,10/) DSMC-Reaction9-Arrhenius-Prefactor=4.98161783020654E-08 @@ -300,7 +300,7 @@ DSMC-Reaction9-NumberOfNonReactives=5 DSMC-Reaction9-NonReactiveSpecies=(/4,6,10,13,14/) !Reaction10 (N2 + e -> N + N + e) -DSMC-Reaction10-ReactionType=D + DSMC-Reaction10-Reactants=(/5,15,0/) DSMC-Reaction10-Products=(/10,15,10/) DSMC-Reaction10-Arrhenius-Prefactor=1.99264713208262E-05 @@ -311,7 +311,7 @@ DSMC-Reaction10-Activation-Energy_K=113200 ! Dissociation O2 ! ============ ! !Reaction11 (O2 + molecules/Ar -> O + O + molecules/Ar) -DSMC-Reaction11-ReactionType=D + DSMC-Reaction11-Reactants=(/7,0,0/) DSMC-Reaction11-Products=(/6,0,6/) DSMC-Reaction11-Arrhenius-Prefactor=3.32107855347103E-09 @@ -321,7 +321,7 @@ DSMC-Reaction11-NumberOfNonReactives=10 DSMC-Reaction11-NonReactiveSpecies=(/1,2,3,5,7,8,9,11,12,16/) !Reaction12 (O2 + atoms -> O + O + atoms) -DSMC-Reaction12-ReactionType=D + DSMC-Reaction12-Reactants=(/7,0,0/) DSMC-Reaction12-Products=(/6,0,6/) DSMC-Reaction12-Arrhenius-Prefactor=1.66053927673551E-08 @@ -334,7 +334,7 @@ DSMC-Reaction12-NonReactiveSpecies=(/4,6,10,13,14/) ! Dissociation CN ! ============ ! !Reaction13 (CN + M -> C + N + M) -DSMC-Reaction13-ReactionType=D + DSMC-Reaction13-Reactants=(/8,0,0/) DSMC-Reaction13-Products=(/4,0,10/) DSMC-Reaction13-Arrhenius-Prefactor=4.15134819183878E-16 @@ -347,7 +347,7 @@ DSMC-Reaction13-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,16/) ! Dissociation NO ! ============ ! !Reaction14 (NO + C2/N2/O2/CN/CO/Ar -> N + O + C2/N2/O2/CN/CO/Ar) -DSMC-Reaction14-ReactionType=D + DSMC-Reaction14-Reactants=(/9,0,0/) DSMC-Reaction14-Products=(/10,0,6/) DSMC-Reaction14-Arrhenius-Prefactor=8.30269638367756E-15 @@ -357,7 +357,7 @@ DSMC-Reaction14-NumberOfNonReactives=8 DSMC-Reaction14-NonReactiveSpecies=(/2,3,5,7,8,11,12,16/) !Reaction15 (NO + NO/CO2/atoms -> N + N + NO/CO2/atoms) -DSMC-Reaction15-ReactionType=D + DSMC-Reaction15-Reactants=(/9,0,0/) DSMC-Reaction15-Products=(/10,0,6/) DSMC-Reaction15-Arrhenius-Prefactor=1.82659320440906E-13 @@ -371,7 +371,7 @@ DSMC-Reaction15-NonReactiveSpecies=(/1,4,6,9,10,13,14/) ! ============ ! !Reaction16 (NO + O -> N + O2) -DSMC-Reaction16-ReactionType=E + DSMC-Reaction16-Reactants=(/9,6,0/) DSMC-Reaction16-Products=(/10,7,0/) DSMC-Reaction16-Arrhenius-Prefactor=1.39485299245783E-17 @@ -379,7 +379,7 @@ DSMC-Reaction16-Arrhenius-Powerfactor=0 DSMC-Reaction16-Activation-Energy_K=19450 !Reaction17 (N2 + O -> NO + N) -DSMC-Reaction17-ReactionType=E + DSMC-Reaction17-Reactants=(/5,6,0/) DSMC-Reaction17-Products=(/9,10,0/) DSMC-Reaction17-Arrhenius-Prefactor=1.06274513711073E-12 @@ -387,7 +387,7 @@ DSMC-Reaction17-Arrhenius-Powerfactor=-1 DSMC-Reaction17-Activation-Energy_K=38370 !Reaction18 (CO + O -> C + O2) -DSMC-Reaction18-ReactionType=E + DSMC-Reaction18-Reactants=(/2,6,0/) DSMC-Reaction18-Products=(/4,7,0/) DSMC-Reaction18-Arrhenius-Prefactor=6.4761031792685E-17 @@ -395,7 +395,7 @@ DSMC-Reaction18-Arrhenius-Powerfactor=-0.18 DSMC-Reaction18-Activation-Energy_K=69200 !Reaction19 (CO + C -> C2 + O) -DSMC-Reaction19-ReactionType=E + DSMC-Reaction19-Reactants=(/2,4,0/) DSMC-Reaction19-Products=(/3,6,0/) DSMC-Reaction19-Arrhenius-Prefactor=3.32107855347103E-13 @@ -403,7 +403,7 @@ DSMC-Reaction19-Arrhenius-Powerfactor=-1 DSMC-Reaction19-Activation-Energy_K=58000 !Reaction20 (CO + N -> CN + O) -DSMC-Reaction20-ReactionType=E + DSMC-Reaction20-Reactants=(/2,10,0/) DSMC-Reaction20-Products=(/8,6,0/) DSMC-Reaction20-Arrhenius-Prefactor=1.66053927673551E-16 @@ -411,7 +411,7 @@ DSMC-Reaction20-Arrhenius-Powerfactor=0 DSMC-Reaction20-Activation-Energy_K=38600 !Reaction21 (N2 + C -> CN + N) -DSMC-Reaction21-ReactionType=E + DSMC-Reaction21-Reactants=(/5,4,0/) DSMC-Reaction21-Products=(/8,10,0/) DSMC-Reaction21-Arrhenius-Prefactor=1.82659320440906E-16 @@ -419,7 +419,7 @@ DSMC-Reaction21-Arrhenius-Powerfactor=-0.11 DSMC-Reaction21-Activation-Energy_K=23200 !Reaction22 (CN + O -> NO + C) -DSMC-Reaction22-ReactionType=E + DSMC-Reaction22-Reactants=(/8,6,0/) DSMC-Reaction22-Products=(/9,4,0/) DSMC-Reaction22-Arrhenius-Prefactor=2.65686284277682E-17 @@ -427,7 +427,7 @@ DSMC-Reaction22-Arrhenius-Powerfactor=0.1 DSMC-Reaction22-Activation-Energy_K=14600 !Reaction23 (CN + C -> C2 + N) -DSMC-Reaction23-ReactionType=E + DSMC-Reaction23-Reactants=(/8,4,0/) DSMC-Reaction23-Products=(/3,10,0/) DSMC-Reaction23-Arrhenius-Prefactor=8.30269638367756E-17 @@ -435,7 +435,7 @@ DSMC-Reaction23-Arrhenius-Powerfactor=0 DSMC-Reaction23-Activation-Energy_K=13000 !Reaction24 (CO2 + O -> O2 + CO) -DSMC-Reaction24-ReactionType=E + DSMC-Reaction24-Reactants=(/1,6,0/) DSMC-Reaction24-Products=(/7,2,0/) DSMC-Reaction24-Arrhenius-Prefactor=3.48713248114458E-17 @@ -447,7 +447,7 @@ DSMC-Reaction24-Activation-Energy_K=27800 ! ============ ! !Reaction25 (N + O -> NO+ + e) -DSMC-Reaction25-ReactionType=E + DSMC-Reaction25-Reactants=(/10,6,0/) DSMC-Reaction25-Products=(/12,15,0/) DSMC-Reaction25-Arrhenius-Prefactor=1.46127456352725E-21 @@ -455,7 +455,7 @@ DSMC-Reaction25-Arrhenius-Powerfactor=1 DSMC-Reaction25-Activation-Energy_K=31900 !Reaction26 (C + O -> CO+ + e) -DSMC-Reaction26-ReactionType=E + DSMC-Reaction26-Reactants=(/4,6,0/) DSMC-Reaction26-Products=(/11,15,0/) DSMC-Reaction26-Arrhenius-Prefactor=1.46127456352725E-21 @@ -467,7 +467,7 @@ DSMC-Reaction26-Activation-Energy_K=33100 ! ============ ! !Reaction27 (NO+ + C -> NO + C+) -DSMC-Reaction27-ReactionType=E + DSMC-Reaction27-Reactants=(/12,4,0/) DSMC-Reaction27-Products=(/9,13,0/) DSMC-Reaction27-Arrhenius-Prefactor=1.66053927673551E-17 @@ -475,7 +475,7 @@ DSMC-Reaction27-Arrhenius-Powerfactor=0 DSMC-Reaction27-Activation-Energy_K=23200 !Reaction28 (NO+ + N -> O+ + N2) -DSMC-Reaction28-ReactionType=E + DSMC-Reaction28-Reactants=(/12,10,0/) DSMC-Reaction28-Products=(/5,14,0/) DSMC-Reaction28-Arrhenius-Prefactor=5.64583354090074E-17 @@ -483,7 +483,7 @@ DSMC-Reaction28-Arrhenius-Powerfactor=-1.08 DSMC-Reaction28-Activation-Energy_K=12800 !Reaction29 (CO + C+ -> CO+ + C) -DSMC-Reaction29-ReactionType=E + DSMC-Reaction29-Reactants=(/2,13,0/) DSMC-Reaction29-Products=(/11,4,0/) DSMC-Reaction29-Arrhenius-Prefactor=1.66053927673551E-17 @@ -495,13 +495,13 @@ DSMC-Reaction29-Activation-Energy_K=31400 ! ============ ! !Reaction30 (C + e -> C+ + e + e) -DSMC-Reaction30-ReactionType=iQK +QK DSMC-Reaction30-Reactants=(/4,15,0/) DSMC-Reaction30-Products=(/13,15,15/) DSMC-Reaction30-QKProcedure=true !Reaction31 (O + e -> O+ + e + e) -DSMC-Reaction31-ReactionType=iQK +QK DSMC-Reaction31-Reactants=(/6,15,0/) DSMC-Reaction31-Products=(/14,15,15/) DSMC-Reaction31-QKProcedure=true diff --git a/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini b/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini index 97f3b4337..2e737967d 100755 --- a/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini +++ b/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini @@ -218,7 +218,7 @@ DSMC-Reaction15-ReactionName=O2+A_O+O+A ! Dissociation CO2 ! ============ ! !Reaction1 (CO2 + molecules -> CO + O + molecules) -DSMC-Reaction1-ReactionType=D + DSMC-Reaction1-Reactants=(/1,0,0/) DSMC-Reaction1-Products=(/2,0,10/) DSMC-Reaction1-Arrhenius-Prefactor=1.15E-08 @@ -228,7 +228,7 @@ DSMC-Reaction1-NumberOfNonReactives=10 DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7,13,14,15/) !Reaction2 (CO2 + atoms -> CO + O + atoms) -DSMC-Reaction2-ReactionType=D + DSMC-Reaction2-Reactants=(/1,0,0/) DSMC-Reaction2-Products=(/2,0,10/) DSMC-Reaction2-Arrhenius-Prefactor=2.29E-08 @@ -238,7 +238,7 @@ DSMC-Reaction2-NumberOfNonReactives=5 DSMC-Reaction2-NonReactiveSpecies=(/8,9,10,11,12/) !Reaction3 (CO2 + Ar -> CO + O + Ar) -DSMC-Reaction3-ReactionType=D + DSMC-Reaction3-Reactants=(/1,17,0/) DSMC-Reaction3-Products=(/2,17,10/) DSMC-Reaction3-Arrhenius-Prefactor=1.15E-09 @@ -249,7 +249,7 @@ DSMC-Reaction3-Activation-Energy_K=63280 ! Dissociation CO ! ============ ! !Reaction4 (CO + molecules -> C + O + molecules) -DSMC-Reaction4-ReactionType=D + DSMC-Reaction4-Reactants=(/2,0,0/) DSMC-Reaction4-Products=(/8,0,10/) DSMC-Reaction4-Arrhenius-Prefactor=1.99E-09 @@ -259,7 +259,7 @@ DSMC-Reaction4-NumberOfNonReactives=10 DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7,13,14,15/) !Reaction5 (CO + atoms -> C + O + atoms) -DSMC-Reaction5-ReactionType=D + DSMC-Reaction5-Reactants=(/2,0,0/) DSMC-Reaction5-Products=(/8,0,10/) DSMC-Reaction5-Arrhenius-Prefactor=2.99E-09 @@ -269,7 +269,7 @@ DSMC-Reaction5-NumberOfNonReactives=5 DSMC-Reaction5-NonReactiveSpecies=(/8,9,10,11,12/) !Reaction6 (CO + Ar -> C + O + Ar) -DSMC-Reaction6-ReactionType=D + DSMC-Reaction6-Reactants=(/2,17,0/) DSMC-Reaction6-Products=(/8,17,10/) DSMC-Reaction6-Arrhenius-Prefactor=1.99E-10 @@ -280,7 +280,7 @@ DSMC-Reaction6-Activation-Energy_K=129000 ! Dissociation C2 ! ============ ! !Reaction7 (C2 + M -> C + C + M) -DSMC-Reaction7-ReactionType=D + DSMC-Reaction7-Reactants=(/3,0,0/) DSMC-Reaction7-Products=(/8,0,8/) DSMC-Reaction7-Arrhenius-Prefactor=7.47E-12 @@ -293,7 +293,7 @@ DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17/) ! Dissociation CN ! ============ ! !Reaction8 (CN + M -> C + N + M) -DSMC-Reaction8-ReactionType=D + DSMC-Reaction8-Reactants=(/4,0,0/) DSMC-Reaction8-Products=(/8,0,9/) DSMC-Reaction8-Arrhenius-Prefactor=9.96E-15 @@ -306,7 +306,7 @@ DSMC-Reaction8-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17/) ! Dissociation N2 ! ============ ! !Reaction9 (N2 + molecules/Ar -> N + N + molecules/Ar) -DSMC-Reaction9-ReactionType=D + DSMC-Reaction9-Reactants=(/5,0,0/) DSMC-Reaction9-Products=(/9,0,9/) DSMC-Reaction9-Arrhenius-Prefactor=1.16E-08 @@ -316,7 +316,7 @@ DSMC-Reaction9-NumberOfNonReactives=11 DSMC-Reaction9-NonReactiveSpecies=(/1,2,3,4,5,6,7,13,14,15,17/) !Reaction10 (N2 + atoms -> N + N + atoms) -DSMC-Reaction10-ReactionType=D + DSMC-Reaction10-Reactants=(/5,0,0/) DSMC-Reaction10-Products=(/9,0,9/) DSMC-Reaction10-Arrhenius-Prefactor=4.98E-08 @@ -326,7 +326,7 @@ DSMC-Reaction10-NumberOfNonReactives=5 DSMC-Reaction10-NonReactiveSpecies=(/8,9,10,11,12/) !Reaction11 (N2 + e -> N + N + e) -DSMC-Reaction11-ReactionType=D + DSMC-Reaction11-Reactants=(/5,17,0/) DSMC-Reaction11-Products=(/9,17,9/) DSMC-Reaction11-Arrhenius-Prefactor=9.96E-27 @@ -337,7 +337,7 @@ DSMC-Reaction11-Activation-Energy_K=113200 ! Dissociation NO ! ============ ! !Reaction12 (NO + C2/N2/O2/CN/CO/Ar -> N + O + C2/N2/O2/CN/CO/Ar) -DSMC-Reaction12-ReactionType=D + DSMC-Reaction12-Reactants=(/7,0,0/) DSMC-Reaction12-Products=(/9,0,10/) DSMC-Reaction12-Arrhenius-Prefactor=3.32E-15 @@ -347,7 +347,7 @@ DSMC-Reaction12-NumberOfNonReactives=9 DSMC-Reaction12-NonReactiveSpecies=(/2,3,4,5,6,13,14,15,17/) !Reaction13 (NO + NO/CO2/atoms -> N + O + NO/CO2/atoms) -DSMC-Reaction13-ReactionType=D + DSMC-Reaction13-Reactants=(/7,0,0/) DSMC-Reaction13-Products=(/9,0,10/) DSMC-Reaction13-Arrhenius-Prefactor=7.31E-14 @@ -360,7 +360,7 @@ DSMC-Reaction13-NonReactiveSpecies=(/1,7,8,9,10,11,12/) ! Dissociation O2 ! ============ ! !Reaction14 (O2 + molecules/Ar -> O + O + molecules/Ar) -DSMC-Reaction14-ReactionType=D + DSMC-Reaction14-Reactants=(/6,0,0/) DSMC-Reaction14-Products=(/10,0,10/) DSMC-Reaction14-Arrhenius-Prefactor=3.32E-09 @@ -370,7 +370,7 @@ DSMC-Reaction14-NumberOfNonReactives=11 DSMC-Reaction14-NonReactiveSpecies=(/1,2,3,4,5,6,7,13,14,15,17/) !Reaction15 (O2 + atoms -> O + O + atoms) -DSMC-Reaction15-ReactionType=D + DSMC-Reaction15-Reactants=(/6,0,0/) DSMC-Reaction15-Products=(/10,0,10/) DSMC-Reaction15-Arrhenius-Prefactor=1.66E-08 @@ -384,7 +384,7 @@ DSMC-Reaction15-NonReactiveSpecies=(/8,9,10,11,12/) ! ============ ! !Reaction16 (CO2 + O -> CO + O2) -DSMC-Reaction16-ReactionType=E + DSMC-Reaction16-Reactants=(/1,10,0/) DSMC-Reaction16-Products=(/2,6,0/) DSMC-Reaction16-Arrhenius-Prefactor=4.50E-16 @@ -392,7 +392,7 @@ DSMC-Reaction16-Arrhenius-Powerfactor=0 DSMC-Reaction16-Activation-Energy_K=33800 !Reaction17 (CO + C -> C2 + O) -DSMC-Reaction17-ReactionType=E + DSMC-Reaction17-Reactants=(/2,8,0/) DSMC-Reaction17-Products=(/3,10,0/) DSMC-Reaction17-Arrhenius-Prefactor=3.99E-13 @@ -400,7 +400,7 @@ DSMC-Reaction17-Arrhenius-Powerfactor=-1 DSMC-Reaction17-Activation-Energy_K=58000 !Reaction18 (CO + N -> CN + O) -DSMC-Reaction18-ReactionType=E + DSMC-Reaction18-Reactants=(/2,9,0/) DSMC-Reaction18-Products=(/4,10,0/) DSMC-Reaction18-Arrhenius-Prefactor=1.66E-15 @@ -408,7 +408,7 @@ DSMC-Reaction18-Arrhenius-Powerfactor=0 DSMC-Reaction18-Activation-Energy_K=38600 !Reaction19 (CO + NO -> CO2 + N) -DSMC-Reaction19-ReactionType=E + DSMC-Reaction19-Reactants=(/2,7,0/) DSMC-Reaction19-Products=(/1,9,0/) DSMC-Reaction19-Arrhenius-Prefactor=4.98E-24 @@ -416,7 +416,7 @@ DSMC-Reaction19-Arrhenius-Powerfactor=0.88 DSMC-Reaction19-Activation-Energy_K=13300 !Reaction20 (CO + O -> C + O2) -DSMC-Reaction20-ReactionType=E + DSMC-Reaction20-Reactants=(/2,10,0/) DSMC-Reaction20-Products=(/6,8,0/) DSMC-Reaction20-Arrhenius-Prefactor=6.48E-17 @@ -424,7 +424,7 @@ DSMC-Reaction20-Arrhenius-Powerfactor=-0.18 DSMC-Reaction20-Activation-Energy_K=69200 !Reaction21 (C2 + N2 -> CN + CN) -DSMC-Reaction21-ReactionType=E + DSMC-Reaction21-Reactants=(/3,5,0/) DSMC-Reaction21-Products=(/4,4,0/) DSMC-Reaction21-Arrhenius-Prefactor=2.49E-17 @@ -432,7 +432,7 @@ DSMC-Reaction21-Arrhenius-Powerfactor=0 DSMC-Reaction21-Activation-Energy_K=21000 !Reaction22 (CN + C -> C2 + N) -DSMC-Reaction22-ReactionType=E + DSMC-Reaction22-Reactants=(/4,8,0/) DSMC-Reaction22-Products=(/3,9,0/) DSMC-Reaction22-Arrhenius-Prefactor=4.98E-16 @@ -440,7 +440,7 @@ DSMC-Reaction22-Arrhenius-Powerfactor=0 DSMC-Reaction22-Activation-Energy_K=18100 !Reaction23 (CN + O -> NO + C) -DSMC-Reaction23-ReactionType=E + DSMC-Reaction23-Reactants=(/4,10,0/) DSMC-Reaction23-Products=(/7,8,0/) DSMC-Reaction23-Arrhenius-Prefactor=2.66E-18 @@ -448,7 +448,7 @@ DSMC-Reaction23-Arrhenius-Powerfactor=0.1 DSMC-Reaction23-Activation-Energy_K=14600 !Reaction24 (CO + N -> NO + C) -DSMC-Reaction24-ReactionType=E + DSMC-Reaction24-Reactants=(/2,9,0/) DSMC-Reaction24-Products=(/7,8,0/) DSMC-Reaction24-Arrhenius-Prefactor=1.83E-16 @@ -456,7 +456,7 @@ DSMC-Reaction24-Arrhenius-Powerfactor=0.07 DSMC-Reaction24-Activation-Energy_K=53500 !Reaction25 (N2 + C -> CN + N) -DSMC-Reaction25-ReactionType=E + DSMC-Reaction25-Reactants=(/5,8,0/) DSMC-Reaction25-Products=(/4,9,0/) DSMC-Reaction25-Arrhenius-Prefactor=1.83E-16 @@ -464,7 +464,7 @@ DSMC-Reaction25-Arrhenius-Powerfactor=-0.11 DSMC-Reaction25-Activation-Energy_K=23200 !Reaction26 (N2 + CO -> CN + NO) -DSMC-Reaction26-ReactionType=E + DSMC-Reaction26-Reactants=(/2,5,0/) DSMC-Reaction26-Products=(/4,7,0/) DSMC-Reaction26-Arrhenius-Prefactor=1.99E-14 @@ -472,7 +472,7 @@ DSMC-Reaction26-Arrhenius-Powerfactor=-1.23 DSMC-Reaction26-Activation-Energy_K=77000 !Reaction27 (N2 + O -> NO + N) -DSMC-Reaction27-ReactionType=E + DSMC-Reaction27-Reactants=(/5,10,0/) DSMC-Reaction27-Products=(/7,9,0/) DSMC-Reaction27-Arrhenius-Prefactor=9.96E-17 @@ -480,7 +480,7 @@ DSMC-Reaction27-Arrhenius-Powerfactor=0.1 DSMC-Reaction27-Activation-Energy_K=38000 !Reaction28 (O2 + N -> NO + O) -DSMC-Reaction28-ReactionType=E + DSMC-Reaction28-Reactants=(/6,9,0/) DSMC-Reaction28-Products=(/7,10,0/) DSMC-Reaction28-Arrhenius-Prefactor=4.13E-21 @@ -492,7 +492,7 @@ DSMC-Reaction28-Activation-Energy_K=4010 ! ============ ! !Reaction29 (C + O -> CO+ + e) -DSMC-Reaction29-ReactionType=E + DSMC-Reaction29-Reactants=(/8,10,0/) DSMC-Reaction29-Products=(/13,16,0/) DSMC-Reaction29-Arrhenius-Prefactor=1.46E-21 @@ -500,7 +500,7 @@ DSMC-Reaction29-Arrhenius-Powerfactor=1 DSMC-Reaction29-Activation-Energy_K=33100 !Reaction30 (CO + C+ -> CO+ + C) -DSMC-Reaction30-ReactionType=E + DSMC-Reaction30-Reactants=(/2,11,0/) DSMC-Reaction30-Products=(/13,8,0/) DSMC-Reaction30-Arrhenius-Prefactor=1.66E-17 @@ -508,7 +508,7 @@ DSMC-Reaction30-Arrhenius-Powerfactor=0 DSMC-Reaction30-Activation-Energy_K=31400 !Reaction31 (N + O -> NO+ + e) -DSMC-Reaction31-ReactionType=E + DSMC-Reaction31-Reactants=(/9,10,0/) DSMC-Reaction31-Products=(/15,16,0/) DSMC-Reaction31-Arrhenius-Prefactor=8.80E-18 @@ -516,7 +516,7 @@ DSMC-Reaction31-Arrhenius-Powerfactor=0 DSMC-Reaction31-Activation-Energy_K=31900 !Reaction32 (NO+ + C -> NO + C+) -DSMC-Reaction32-ReactionType=E + DSMC-Reaction32-Reactants=(/15,8,0/) DSMC-Reaction32-Products=(/7,11,0/) DSMC-Reaction32-Arrhenius-Prefactor=1.66E-17 @@ -524,7 +524,7 @@ DSMC-Reaction32-Arrhenius-Powerfactor=0 DSMC-Reaction32-Activation-Energy_K=23200 !Reaction33 (NO+ + N -> O+ + N2) -DSMC-Reaction33-ReactionType=E + DSMC-Reaction33-Reactants=(/15,9,0/) DSMC-Reaction33-Products=(/12,5,0/) DSMC-Reaction33-Arrhenius-Prefactor=5.65E-17 @@ -532,7 +532,7 @@ DSMC-Reaction33-Arrhenius-Powerfactor=-1.08 DSMC-Reaction33-Activation-Energy_K=12800 !Reaction34 (NO+ + O -> O2+ + N) -DSMC-Reaction34-ReactionType=E + DSMC-Reaction34-Reactants=(/15,10,0/) DSMC-Reaction34-Products=(/14,9,0/) DSMC-Reaction34-Arrhenius-Prefactor=1.20E-17 @@ -540,7 +540,7 @@ DSMC-Reaction34-Arrhenius-Powerfactor=0.29 DSMC-Reaction34-Activation-Energy_K=48600 !Reaction35 (NO+ + O2 -> NO + O2+) -DSMC-Reaction35-ReactionType=E + DSMC-Reaction35-Reactants=(/6,15,0/) DSMC-Reaction35-Products=(/7,14,0/) DSMC-Reaction35-Arrhenius-Prefactor=3.99E-17 @@ -548,7 +548,7 @@ DSMC-Reaction35-Arrhenius-Powerfactor=0.41 DSMC-Reaction35-Activation-Energy_K=32600 !Reaction36 (O + O -> O2+ + e) -DSMC-Reaction36-ReactionType=E + DSMC-Reaction36-Reactants=(/10,10,0/) DSMC-Reaction36-Products=(/14,16,0/) DSMC-Reaction36-Arrhenius-Prefactor=1.18E-27 @@ -556,7 +556,7 @@ DSMC-Reaction36-Arrhenius-Powerfactor=2.7 DSMC-Reaction36-Activation-Energy_K=80600 !Reaction37 (O2 + C+ -> O2+ + C) -DSMC-Reaction37-ReactionType=E + DSMC-Reaction37-Reactants=(/6,11,0/) DSMC-Reaction37-Products=(/14,8,0/) DSMC-Reaction37-Arrhenius-Prefactor=1.66E-17 @@ -564,7 +564,7 @@ DSMC-Reaction37-Arrhenius-Powerfactor=0 DSMC-Reaction37-Activation-Energy_K=9400 !Reaction38 (O2+ + O -> O+ + O2) -DSMC-Reaction38-ReactionType=E + DSMC-Reaction38-Reactants=(/14,10,0/) DSMC-Reaction38-Products=(/12,6,0/) DSMC-Reaction38-Arrhenius-Prefactor=6.64E-18 @@ -576,25 +576,25 @@ DSMC-Reaction38-Activation-Energy_K=18000 ! ============ ! !Reaction39 (O2 + e -> O2+ + e + e) -DSMC-Reaction39-ReactionType=iQK +QK DSMC-Reaction39-Reactants=(/6,16,0/) DSMC-Reaction39-Products=(/14,16,16/) DSMC-Reaction39-QKProcedure=true !Reaction40 (C + e -> C+ + e + e) -DSMC-Reaction40-ReactionType=iQK +QK DSMC-Reaction40-Reactants=(/8,16,0/) DSMC-Reaction40-Products=(/11,16,16/) DSMC-Reaction40-QKProcedure=true !Reaction41 (O + e -> O+ + e + e) -DSMC-Reaction41-ReactionType=iQK +QK DSMC-Reaction41-Reactants=(/10,16,0/) DSMC-Reaction41-Products=(/12,16,16/) DSMC-Reaction41-QKProcedure=true !Reaction42 (CO + e -> CO+ + e + e) -DSMC-Reaction42-ReactionType=iQK +QK DSMC-Reaction42-Reactants=(/2,16,0/) DSMC-Reaction42-Products=(/13,16,16/) DSMC-Reaction42-QKProcedure=true diff --git a/tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini b/tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini index 409c42cd2..6b22ac87d 100755 --- a/tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini +++ b/tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini @@ -209,7 +209,7 @@ DSMC-Reaction13-ReactionName=HCN+M_CN+H+M !--------------------------------------------------------------------! !--------- Reaction1: CH4 + M -> CH3 + H + M ------------------------! !--------------------------------------------------------------------! -DSMC-Reaction1-ReactionType=D + DSMC-Reaction1-Reactants=(/1,0,0/) DSMC-Reaction1-Products=(/2,0,13/) DSMC-Reaction1-Arrhenius-Prefactor=7.8047E+17 ! A_f @@ -220,7 +220,7 @@ DSMC-Reaction1-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) !--------------------------------------------------------------------! !--------- Reaction2: CH3 + M -> CH2 + H + M ------------------------! !--------------------------------------------------------------------! -DSMC-Reaction2-ReactionType=D + DSMC-Reaction2-Reactants=(/2,0,0/) DSMC-Reaction2-Products=(/3,0,13/) DSMC-Reaction2-Arrhenius-Prefactor=1.6938E-14 ! A_f @@ -231,7 +231,7 @@ DSMC-Reaction2-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) !--------------------------------------------------------------------! !--------- Reaction3: CH3 + M -> CH + H2 + M ------------------------! !--------------------------------------------------------------------! -DSMC-Reaction3-ReactionType=D + DSMC-Reaction3-Reactants=(/2,0,0/) DSMC-Reaction3-Products=(/4,0,7/) DSMC-Reaction3-Arrhenius-Prefactor=8.3029E-15 ! A_f @@ -242,7 +242,7 @@ DSMC-Reaction3-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) !--------------------------------------------------------------------! !--------- Reaction4: CH2 + M -> CH + H + M -------------------------! !--------------------------------------------------------------------! -DSMC-Reaction4-ReactionType=D + DSMC-Reaction4-Reactants=(/3,0,0/) DSMC-Reaction4-Products=(/4,0,13/) DSMC-Reaction4-Arrhenius-Prefactor=6.6423E-15 ! A_f @@ -253,7 +253,7 @@ DSMC-Reaction4-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) !--------------------------------------------------------------------! !--------- Reaction5: CH2 + M -> C + H2 + M -------------------------! !--------------------------------------------------------------------! -DSMC-Reaction5-ReactionType=D + DSMC-Reaction5-Reactants=(/3,0,0/) DSMC-Reaction5-Products=(/7,0,12/) DSMC-Reaction5-Arrhenius-Prefactor=2.1588E-16 ! A_f @@ -264,7 +264,7 @@ DSMC-Reaction5-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) !--------------------------------------------------------------------! !--------- Reaction6: CH + M -> C + H + M --------------------------! !--------------------------------------------------------------------! -DSMC-Reaction6-ReactionType=D + DSMC-Reaction6-Reactants=(/4,0,0/) DSMC-Reaction6-Products=(/12,0,13/) DSMC-Reaction6-Arrhenius-Prefactor=3.1551E-16 ! A_f @@ -275,7 +275,7 @@ DSMC-Reaction6-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) !--------------------------------------------------------------------! !--------- Reaction7a: N2 + M -> N + N + M --------------------------! !--------------------------------------------------------------------! -DSMC-Reaction7-ReactionType=D + DSMC-Reaction7-Reactants=(/5,0,0/) DSMC-Reaction7-Products=(/11,0,11/) DSMC-Reaction7-Arrhenius-Prefactor=1.1624E-08 ! A_f @@ -286,7 +286,7 @@ DSMC-Reaction7-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,14/) !--------------------------------------------------------------------! !--------- Reaction7b: N2 + N/C/H -> N + N + N/C/H ------------------! !--------------------------------------------------------------------! -DSMC-Reaction8-ReactionType=D + DSMC-Reaction8-Reactants=(/5,0,0/) DSMC-Reaction8-Products=(/11,0,11/) DSMC-Reaction8-Arrhenius-Prefactor=4.9817E-08 ! A_f @@ -297,7 +297,7 @@ DSMC-Reaction8-NonReactiveSpecies=(/11,12,13/) !--------------------------------------------------------------------! !--------- Reaction8: C2 + M -> C + C + M ---------------------------! !--------------------------------------------------------------------! -DSMC-Reaction9-ReactionType=D + DSMC-Reaction9-Reactants=(/6,0,0/) DSMC-Reaction9-Products=(/12,0,12/) DSMC-Reaction9-Arrhenius-Prefactor=2.4909E-14 ! A_f @@ -308,7 +308,7 @@ DSMC-Reaction9-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) !--------------------------------------------------------------------! !--------- Reaction9: H2 + M -> H + H + M ---------------------------! !--------------------------------------------------------------------! -DSMC-Reaction10-ReactionType=D + DSMC-Reaction10-Reactants=(/7,0,0/) DSMC-Reaction10-Products=(/13,0,13/) DSMC-Reaction10-Arrhenius-Prefactor=3.7031E-16 ! A_f @@ -319,7 +319,7 @@ DSMC-Reaction10-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) !--------------------------------------------------------------------! !--------- Reaction10: CN + M -> C + N + M --------------------------! !--------------------------------------------------------------------! -DSMC-Reaction11-ReactionType=D + DSMC-Reaction11-Reactants=(/8,0,0/) DSMC-Reaction11-Products=(/11,0,12/) DSMC-Reaction11-Arrhenius-Prefactor=4.2013E-16 ! A_f @@ -330,7 +330,7 @@ DSMC-Reaction11-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) !--------------------------------------------------------------------! !--------- Reaction11: HN + M -> N + H + M --------------------------! !--------------------------------------------------------------------! -DSMC-Reaction12-ReactionType=D + DSMC-Reaction12-Reactants=(/9,0,0/) DSMC-Reaction12-Products=(/11,0,13/) DSMC-Reaction12-Arrhenius-Prefactor=2.9890E-16 ! A_f @@ -341,7 +341,7 @@ DSMC-Reaction12-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) !--------------------------------------------------------------------! !--------- Reaction12: HCN + M -> CN + H + M ------------------------! !--------------------------------------------------------------------! -DSMC-Reaction13-ReactionType=D + DSMC-Reaction13-Reactants=(/10,0,0/) DSMC-Reaction13-Products=(/8,0,13/) DSMC-Reaction13-Arrhenius-Prefactor=5.9283E-04 ! A_f @@ -354,7 +354,7 @@ DSMC-Reaction13-NonReactiveSpecies=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14/) !--------------------------------------------------------------------! !--------- Reaction13: CH3 + H -> CH2 + H2 --------------------------! !--------------------------------------------------------------------! -DSMC-Reaction14-ReactionType=E + DSMC-Reaction14-Reactants=(/2,13,0/) DSMC-Reaction14-Products=(/3,7,0/) DSMC-Reaction14-Arrhenius-Prefactor=2.1000E-14 ! A_f @@ -364,7 +364,7 @@ DSMC-Reaction14-Activation-Energy_K=8000 ! E_a !--------------------------------------------------------------------! !--------- Reaction2: CH + N2 -> HCN + N ---------------------------! !--------------------------------------------------------------------! -DSMC-Reaction15-ReactionType=E + DSMC-Reaction15-Reactants=(/4,5,0/) DSMC-Reaction15-Products=(/10,11,0/) DSMC-Reaction15-Arrhenius-Prefactor=7.3065E-18 ! A_f @@ -373,7 +373,7 @@ DSMC-Reaction15-Activation-Energy_K=11060 ! E_a !--------------------------------------------------------------------! !--------- Reaction15: CH + C -> C2 + H -----------------------------! !--------------------------------------------------------------------! -DSMC-Reaction16-ReactionType=E + DSMC-Reaction16-Reactants=(/4,12,0/) DSMC-Reaction16-Products=(/6,13,0/) DSMC-Reaction16-Arrhenius-Prefactor=3.3212E-16 ! A_f @@ -382,7 +382,7 @@ DSMC-Reaction16-Activation-Energy_K=0.0 ! E_a !--------------------------------------------------------------------! !--------- Reaction16: C2 + N2 -> CN + CN ---------------------------! !--------------------------------------------------------------------! -DSMC-Reaction17-ReactionType=E + DSMC-Reaction17-Reactants=(/5,6,0/) DSMC-Reaction17-Products=(/8,8,0/) DSMC-Reaction17-Arrhenius-Prefactor=2.4909E-17 ! A_f @@ -391,7 +391,7 @@ DSMC-Reaction17-Activation-Energy_K=21000 ! E_a !--------------------------------------------------------------------! !--------- Reaction17: H2 + CN -> HCN + H ---------------------------! !--------------------------------------------------------------------! -DSMC-Reaction18-ReactionType=E + DSMC-Reaction18-Reactants=(/7,8,0/) DSMC-Reaction18-Products=(/10,13,0/) DSMC-Reaction18-Arrhenius-Prefactor=1.8000E-25 ! A_f @@ -400,7 +400,7 @@ DSMC-Reaction18-Activation-Energy_K=960 ! E_a !--------------------------------------------------------------------! !--------- Reaction18: CN + C -> C2 + N -----------------------------! !--------------------------------------------------------------------! -DSMC-Reaction19-ReactionType=E + DSMC-Reaction19-Reactants=(/8,12,0/) DSMC-Reaction19-Products=(/6,11,0/) DSMC-Reaction19-Arrhenius-Prefactor=8.3029E-17 ! A_f @@ -409,7 +409,7 @@ DSMC-Reaction19-Activation-Energy_K=13000 ! E_a !--------------------------------------------------------------------! !--------- Reaction19: H2 + N -> NH + H -----------------------------! !--------------------------------------------------------------------! -DSMC-Reaction20-ReactionType=E + DSMC-Reaction20-Reactants=(/7,11,0/) DSMC-Reaction20-Products=(/9,13,0/) DSMC-Reaction20-Arrhenius-Prefactor=2.6569E-16 ! A_f @@ -418,7 +418,7 @@ DSMC-Reaction20-Activation-Energy_K=12650 ! E_a !--------------------------------------------------------------------! !--------- Reaction20: N2 + C -> CN + N -----------------------------! !--------------------------------------------------------------------! -DSMC-Reaction21-ReactionType=E + DSMC-Reaction21-Reactants=(/5,12,0/) DSMC-Reaction21-Products=(/8,11,0/) DSMC-Reaction21-Arrhenius-Prefactor=8.7014E-17 ! A_f @@ -427,7 +427,7 @@ DSMC-Reaction21-Activation-Energy_K=22600 ! E_a !--------------------------------------------------------------------! !--------- Reaction21: H2 + C -> CH + H -----------------------------! !--------------------------------------------------------------------! -DSMC-Reaction22-ReactionType=E + DSMC-Reaction22-Reactants=(/7,12,0/) DSMC-Reaction22-Products=(/4,13,0/) DSMC-Reaction22-Arrhenius-Prefactor=6.6423E-16 ! A_f @@ -436,7 +436,7 @@ DSMC-Reaction22-Activation-Energy_K=11700 ! E_a !--------------------------------------------------------------------! !--------- Reaction22: N2 + H -> NH + N -----------------------------! !--------------------------------------------------------------------! -DSMC-Reaction23-ReactionType=E + DSMC-Reaction23-Reactants=(/5,13,0/) DSMC-Reaction23-Products=(/9,11,0/) DSMC-Reaction23-Arrhenius-Prefactor=4.9817E-18 ! A_f @@ -445,7 +445,7 @@ DSMC-Reaction23-Activation-Energy_K=71400 ! E_a !--------------------------------------------------------------------! !--------- Reaction23: CH4 + H -> CH3 + H2 --------------------------! !--------------------------------------------------------------------! -DSMC-Reaction24-ReactionType=E + DSMC-Reaction24-Reactants=(/1,13,0/) DSMC-Reaction24-Products=(/2,7,0/) DSMC-Reaction24-Arrhenius-Prefactor=2.1919E-26 ! A_f diff --git a/tools/species_database/create_species_database.py b/tools/species_database/create_species_database.py index 409307216..4bc17f05e 100644 --- a/tools/species_database/create_species_database.py +++ b/tools/species_database/create_species_database.py @@ -5,6 +5,7 @@ from argparse import ArgumentParser from datetime import date import re +from functions_database import custom_sort_reactants, custom_sort_products parser = ArgumentParser(prog='create_species_database') parser.add_argument("-p", "--parameter", dest="ini_filename", @@ -27,7 +28,6 @@ h5_crosssection = h5py.File(args.database_crosssection, 'r') model_name = args.ini_filename[:-4] -model_name = 'DSMC3' items = re.split('_+', model_name) indices_to_modify = [1,2] model_name_split = [item[:-4] if i in indices_to_modify else item for i, item in enumerate(items)] @@ -231,15 +231,15 @@ def is_float(value): # Check first for permutations of the reaction name ReactionNameSplit = re.split('_', ReactionName) checkeduct_list = re.split('\+', ReactionNameSplit[0]) - checkeduct_list.sort(key=str.lower) + checkeduct_list_sorted = custom_sort_reactants(checkeduct_list) checkproduct_list = re.split('\+',ReactionNameSplit[1]) - checkproduct_list.sort(key=str.lower) + checkproduct_list_sorted = custom_sort_products(checkproduct_list) ReactionName = '' - for val in checkeduct_list: + for val in checkeduct_list_sorted: ReactionName = ReactionName + '+' + val ReactionName = ReactionName + '_' - for val in checkproduct_list: + for val in checkproduct_list_sorted: ReactionName = ReactionName + '+' + val ReactionName = ReactionName[1:] ReactionName = ReactionName.replace('_+','_') @@ -263,9 +263,9 @@ def is_float(value): hdf_reac.attrs['* Created'] = date.today().strftime("%B %d, %Y") #Read-In of the Chemistry-model for the reaction - if 'Chemistry-Model' in hdf_reac.attrs: + if 'ChemistryModel' in hdf_reac.attrs: model_name_list = [] - model_attr = list(hdf_reac.attrs['Chemistry-Model']) + model_attr = list(hdf_reac.attrs['ChemistryModel']) for val in model_attr: model_name_list.append(val.decode('UTF-8')) if model_name in model_name_list: @@ -279,7 +279,7 @@ def is_float(value): if ReacNameTest in hdf_reac_group.keys(): hdf_reac_test = hdf_reac_group[ReacNameTest] model_test_list = [] - model_attr_test = list(hdf_reac_test.attrs['Chemistry-Model']) + model_attr_test = list(hdf_reac_test.attrs['ChemistryModel']) for val in model_attr_test: model_test_list.append(val.decode('UTF-8')) if model_name in model_test_list: @@ -296,7 +296,7 @@ def is_float(value): if ReacNameTest in hdf_reac_group.keys(): hdf_reac_test = hdf_reac_group[ReacNameTest] model_test_list = [] - model_attr_test = list(hdf_reac_test.attrs['Chemistry-Model']) + model_attr_test = list(hdf_reac_test.attrs['ChemistryModel']) for val in model_attr_test: model_test_list.append(val.decode('UTF-8')) if model_name in model_test_list: @@ -325,14 +325,14 @@ def is_float(value): print('The reaction with the new model was stored as ', ReactionName, '.') model_name_list = [] model_name_list.append(model_name) - hdf_reac.attrs['Chemistry-Model'] = np.array(model_name_list,dtype='S255') + hdf_reac.attrs['ChemistryModel'] = np.array(model_name_list,dtype='S255') exit else: model_name_list = [] model_name_list.append(model_name) - hdf_reac.attrs['Chemistry-Model'] = np.array(model_name_list,dtype='S255') - #str_modellist = np.array([s.ljust(str_len) for s in model_name_list], dtype='S255') - #hdf_reac.attrs['Chemistry-Model'] = str_modellist + hdf_reac.attrs['ChemistryModel'] = np.array(model_name_list,dtype='S255') + +exclude_list = ['Reactants', 'Products', 'NumberOfNonReactives'] with open(args.ini_filename) as file: for line in file: @@ -351,15 +351,16 @@ def is_float(value): else: if is_float(var_value): var_value = float(var_value) - if var_name[1] in reac_attr_list: - spec_name_list = [] - var_value = var_value.replace(',0', '').replace('(/', '').replace('/)', '').split(',') - for val in var_value: - spec_name_list.append(spec_dict[val]) - hdf_reac.attrs[var_name[1]] = np.array(spec_name_list,dtype='S255') - else: - hdf_reac.attrs[var_name[1]] = var_value - print('Reaction parameter set: ', var_name[1]) + if var_name[1] not in exclude_list: + if var_name[1] in reac_attr_list: + spec_name_list = [] + var_value = var_value.replace(',0', '').replace('(/', '').replace('/)', '').split(',') + for val in var_value: + spec_name_list.append(spec_dict[val]) + hdf_reac.attrs[var_name[1]] = np.array(spec_name_list,dtype='S255') + else: + hdf_reac.attrs[var_name[1]] = var_value + print('Reaction parameter set: ', var_name[1]) # Write attributes for source and time of retrieval hdf_reac.attrs['* Reference'] = args.reference hdf_reac.attrs['* Created'] = date.today().strftime("%B %d, %Y") @@ -427,4 +428,4 @@ def is_float(value): h5_species.close() h5_electronic.close() -h5_crosssection.close() \ No newline at end of file +h5_crosssection.close() diff --git a/tools/species_database/functions_database.py b/tools/species_database/functions_database.py new file mode 100644 index 000000000..55ff1ab1f --- /dev/null +++ b/tools/species_database/functions_database.py @@ -0,0 +1,121 @@ +def custom_sort_reactants(species_list): + species_order = [ + 'CH4', + 'CH3', + 'CH2', + 'CH', + 'CO2', + 'CO2Ion1' + 'CO', + 'COIon1', + 'HCN', + 'CN', + 'CNIon1', + 'N2', + 'N2Ion1', + 'NO', + 'NOIon1', + 'NH', + 'O2', + 'O2Ion1', + 'H3', + 'H3Ion1', + 'H2', + 'H2Ion1', + 'C', + 'CIon1', + 'CIon2', + 'CIon3', + 'CIon4', + 'CIon5', + 'CIon6', + 'N', + 'NIon1', + 'O', + 'OIon1', + 'H', + 'HIon1', + 'Xe', + 'XeIon1', + 'Ar', + 'ArIon1', + 'He', + 'HeIon1', + 'HeIon2', + 'Fe', + 'FeIon1', + 'electron', + 'M', + 'A' + ] + + custom_order = {key:index + 1 for index, key in enumerate(species_order)} + sorted_list = sorted(species_list, key=lambda x: custom_order[x]) + + return sorted_list + + +def custom_sort_products(species_list): + species_order = [ + 'CH4', + 'CH3', + 'CH2', + 'CH', + 'CO2', + 'CO2Ion1' + 'CO', + 'COIon1', + 'HCN', + 'CN', + 'CNIon1', + 'N2', + 'N2Ion1', + 'NO', + 'NOIon1', + 'NH', + 'O2', + 'O2Ion1', + 'H3', + 'H3Ion1', + 'H2', + 'H2Ion1', + 'C', + 'CIon1', + 'CIon2', + 'CIon3', + 'CIon4', + 'CIon5', + 'CIon6', + 'N', + 'NIon1', + 'O', + 'OIon1', + 'H', + 'HIon1', + 'Xe', + 'XeIon1', + 'Ar', + 'ArIon1', + 'He', + 'HeIon1', + 'HeIon2', + 'Fe', + 'FeIon1', + 'electron', + 'M', + 'A' + ] + custom_order = {key:index + 1 for index, key in enumerate(species_order)} + sorted_list = sorted(species_list, key=lambda x: custom_order[x]) + + if 'M' in sorted_list: + sorted_list.remove('M') + sorted_list.insert(1,'M') + + if 'A' in sorted_list: + sorted_list.remove('A') + sorted_list.insert(1,'A') + + return sorted_list + + From a79b644c55fe1a1593575b8a5f6daec45d3b6304 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Wed, 2 Aug 2023 12:33:40 +0200 Subject: [PATCH 067/222] current database --- SpeciesDatabase.h5 | Bin 232944 -> 301216 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/SpeciesDatabase.h5 b/SpeciesDatabase.h5 index 2f6c9530ed89effde63fdd23ab9f955d90338328..33aa765d195de70517e1accbfaa6d4d8c90decbf 100644 GIT binary patch literal 301216 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 IGB|qp6^M9~H2?qr literal 232944 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 I5#bvC59ZuDO#lD@ From fb69d13bd1c0a7f756511593cbdcabc22bca5d4c Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Wed, 2 Aug 2023 14:33:58 +0200 Subject: [PATCH 068/222] removed use qk and default vaule in database: tce --- ...Fe_11Spec_43Reac_Boyd2007Voronov1997Plane2015.ini | 2 -- .../species_database/Air_11Spec_27Reac_Park1993.ini | 6 ++---- .../species_database/Air_11Spec_43Reac_Boyd2007.ini | 2 -- .../species_database/Air_11Spec_51Reac_Park1993.ini | 6 ++---- .../species_database/Mars_16Spec_31Reac_Park1994.ini | 6 ++---- .../Mars_17Spec_42Reac_Johnston2014.ini | 12 ++++-------- tools/species_database/create_species_database.py | 4 +++- 7 files changed, 13 insertions(+), 25 deletions(-) diff --git a/tools/species_database/Air-Fe_11Spec_43Reac_Boyd2007Voronov1997Plane2015.ini b/tools/species_database/Air-Fe_11Spec_43Reac_Boyd2007Voronov1997Plane2015.ini index 14f6f2cc9..2a91dbec1 100644 --- a/tools/species_database/Air-Fe_11Spec_43Reac_Boyd2007Voronov1997Plane2015.ini +++ b/tools/species_database/Air-Fe_11Spec_43Reac_Boyd2007Voronov1997Plane2015.ini @@ -456,14 +456,12 @@ DSMC-Reaction41-Arrhenius-Prefactor=4.993E-18 DSMC-Reaction41-Arrhenius-Powerfactor=-0.004 DSMC-Reaction41-Activation-Energy_K=0. !Reaction42 (N + e --> N+ + e + e ) -QK DSMC-Reaction42-Reactants=(/1,11,0/) DSMC-Reaction42-Products=(/6,11,11,0/) DSMC-Reaction42-Arrhenius-Prefactor=8.434E-14 DSMC-Reaction42-Arrhenius-Powerfactor=0. DSMC-Reaction42-Activation-Energy_K=121600 !Reaction43 (O + e --> O+ + e + e ) -QK DSMC-Reaction43-Reactants=(/2,11,0/) DSMC-Reaction43-Products=(/7,11,11,0/) DSMC-Reaction43-Arrhenius-Prefactor=1.054E-14 diff --git a/tools/species_database/Air_11Spec_27Reac_Park1993.ini b/tools/species_database/Air_11Spec_27Reac_Park1993.ini index 2371b6c99..234476bed 100755 --- a/tools/species_database/Air_11Spec_27Reac_Park1993.ini +++ b/tools/species_database/Air_11Spec_27Reac_Park1993.ini @@ -326,12 +326,10 @@ DSMC-Reaction25-Arrhenius-Powerfactor=0.29 DSMC-Reaction25-Activation-Energy_K=48600 !Reaction26 (O + e --> O+ + e + e ) -QK DSMC-Reaction26-Reactants=(/2,11,0/) DSMC-Reaction26-Products=(/7,11,11/) -DSMC-Reaction26-QKProcedure=true +DSMC-Reaction26-ReactionModel=QK !Reaction27 (N + e --> O+ + e + e ) -QK DSMC-Reaction27-Reactants=(/1,11,0/) DSMC-Reaction27-Products=(/6,11,11/) -DSMC-Reaction27-QKProcedure=true +DSMC-Reaction27-ReactionModel=QK diff --git a/tools/species_database/Air_11Spec_43Reac_Boyd2007.ini b/tools/species_database/Air_11Spec_43Reac_Boyd2007.ini index ec73f1e14..78ee103b0 100755 --- a/tools/species_database/Air_11Spec_43Reac_Boyd2007.ini +++ b/tools/species_database/Air_11Spec_43Reac_Boyd2007.ini @@ -437,14 +437,12 @@ DSMC-Reaction41-Arrhenius-Prefactor=4.993E-18 DSMC-Reaction41-Arrhenius-Powerfactor=-0.004 DSMC-Reaction41-Activation-Energy_K=0. !Reaction42 (N + e --> N+ + e + e ) -QK DSMC-Reaction42-Reactants=(/1,11,0/) DSMC-Reaction42-Products=(/6,11,11,0/) DSMC-Reaction42-Arrhenius-Prefactor=8.434E-14 DSMC-Reaction42-Arrhenius-Powerfactor=0. DSMC-Reaction42-Activation-Energy_K=121600 !Reaction43 (O + e --> O+ + e + e ) -QK DSMC-Reaction43-Reactants=(/2,11,0/) DSMC-Reaction43-Products=(/7,11,11,0/) DSMC-Reaction43-Arrhenius-Prefactor=1.054E-14 diff --git a/tools/species_database/Air_11Spec_51Reac_Park1993.ini b/tools/species_database/Air_11Spec_51Reac_Park1993.ini index 6db91aba7..c48d3bbcf 100755 --- a/tools/species_database/Air_11Spec_51Reac_Park1993.ini +++ b/tools/species_database/Air_11Spec_51Reac_Park1993.ini @@ -338,13 +338,11 @@ DSMC-Reaction25-Arrhenius-Prefactor=1.19558827924957E-16 DSMC-Reaction25-Arrhenius-Powerfactor=0. DSMC-Reaction25-Activation-Energy_K=35500 !Reaction26 (O + e --> O+ + e + e ) -QK DSMC-Reaction26-Reactants=(/2,11,0/) DSMC-Reaction26-Products=(/7,11,11,0/) -DSMC-Reaction26-QKProcedure=true +DSMC-Reaction26-ReactionModel=QK !Reaction27 (N + e --> O+ + e + e ) -QK DSMC-Reaction27-Reactants=(/1,11,0/) DSMC-Reaction27-Products=(/6,11,11,0/) -DSMC-Reaction27-QKProcedure=true +DSMC-Reaction27-ReactionModel=QK diff --git a/tools/species_database/Mars_16Spec_31Reac_Park1994.ini b/tools/species_database/Mars_16Spec_31Reac_Park1994.ini index d760edf32..fbfd31e2d 100755 --- a/tools/species_database/Mars_16Spec_31Reac_Park1994.ini +++ b/tools/species_database/Mars_16Spec_31Reac_Park1994.ini @@ -495,13 +495,11 @@ DSMC-Reaction29-Activation-Energy_K=31400 ! ============ ! !Reaction30 (C + e -> C+ + e + e) -QK DSMC-Reaction30-Reactants=(/4,15,0/) DSMC-Reaction30-Products=(/13,15,15/) -DSMC-Reaction30-QKProcedure=true +DSMC-Reaction30-ReactionModel=QK !Reaction31 (O + e -> O+ + e + e) -QK DSMC-Reaction31-Reactants=(/6,15,0/) DSMC-Reaction31-Products=(/14,15,15/) -DSMC-Reaction31-QKProcedure=true +DSMC-Reaction31-ReactionModel=QK diff --git a/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini b/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini index 2e737967d..3b31d7187 100755 --- a/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini +++ b/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini @@ -576,25 +576,21 @@ DSMC-Reaction38-Activation-Energy_K=18000 ! ============ ! !Reaction39 (O2 + e -> O2+ + e + e) -QK DSMC-Reaction39-Reactants=(/6,16,0/) DSMC-Reaction39-Products=(/14,16,16/) -DSMC-Reaction39-QKProcedure=true +DSMC-Reaction39-ReactionModel=QK !Reaction40 (C + e -> C+ + e + e) -QK DSMC-Reaction40-Reactants=(/8,16,0/) DSMC-Reaction40-Products=(/11,16,16/) -DSMC-Reaction40-QKProcedure=true +DSMC-Reaction40-ReactionModel=QK !Reaction41 (O + e -> O+ + e + e) -QK DSMC-Reaction41-Reactants=(/10,16,0/) DSMC-Reaction41-Products=(/12,16,16/) -DSMC-Reaction41-QKProcedure=true +DSMC-Reaction41-QReactionModel=QK !Reaction42 (CO + e -> CO+ + e + e) -QK DSMC-Reaction42-Reactants=(/2,16,0/) DSMC-Reaction42-Products=(/13,16,16/) -DSMC-Reaction42-QKProcedure=true +DSMC-Reaction42-ReactionModel=QK diff --git a/tools/species_database/create_species_database.py b/tools/species_database/create_species_database.py index 4bc17f05e..8e4b32241 100644 --- a/tools/species_database/create_species_database.py +++ b/tools/species_database/create_species_database.py @@ -360,7 +360,9 @@ def is_float(value): hdf_reac.attrs[var_name[1]] = np.array(spec_name_list,dtype='S255') else: hdf_reac.attrs[var_name[1]] = var_value - print('Reaction parameter set: ', var_name[1]) + print('Reaction parameter set: ', var_name[1]) + if 'ReactionModel' not in hdf_reac.attrs: + hdf_reac.attrs['ReactionModel'] = 'TCE' # Write attributes for source and time of retrieval hdf_reac.attrs['* Reference'] = args.reference hdf_reac.attrs['* Created'] = date.today().strftime("%B %d, %Y") From ae1b4ba42318d771f595d24815b52369a45ebd27 Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Wed, 2 Aug 2023 15:22:03 +0200 Subject: [PATCH 069/222] Additional gas species in the definition --- .../create_species_database.py | 36 ++++++++-- tools/species_database/functions_database.py | 67 +++++++++++++++++++ 2 files changed, 97 insertions(+), 6 deletions(-) diff --git a/tools/species_database/create_species_database.py b/tools/species_database/create_species_database.py index 8e4b32241..6a492ab50 100644 --- a/tools/species_database/create_species_database.py +++ b/tools/species_database/create_species_database.py @@ -27,7 +27,9 @@ h5_electronic = h5py.File(args.database_electronic, 'r') h5_crosssection = h5py.File(args.database_crosssection, 'r') +# Name of the DSMC.ini is the name of the ChemicalModel model_name = args.ini_filename[:-4] +# Split the name in its components (General structure: Topic-SpecNum-ReacNum-Source) items = re.split('_+', model_name) indices_to_modify = [1,2] model_name_split = [item[:-4] if i in indices_to_modify else item for i, item in enumerate(items)] @@ -90,6 +92,7 @@ def is_float(value): # hdf_surf_group = h5_species.create_group('Surface-Chemistry') # hdf_surf_group.attrs['* Created'] = date.today().strftime("%B %d, %Y") +# Variables that must be treated separately logical_list = ['PolyatomicMol', 'LinearMolec'] spec_attr_list = ['PreviousState'] @@ -105,6 +108,7 @@ def is_float(value): hdf_species = var_value species_count = var_name[0] spec_dict[species_count] = hdf_species + # Check if the species data already exists in the database if hdf_species in hdf_species_group.keys(): print('Species already exists: ', hdf_species) hdf_species = hdf_species_group[hdf_species] @@ -113,6 +117,7 @@ def is_float(value): hdf_species = hdf_species_group.create_dataset(hdf_species,data=[0]) hdf_species.attrs['* Created'] = date.today().strftime("%B %d, %Y") else: + # Add the electronic state data if hdf_species in h5_electronic.keys(): hdf_input_data = h5_electronic[hdf_species] print('Species added to the database: ', hdf_species) @@ -134,31 +139,35 @@ def is_float(value): species_count = var_name[0] hdf_species = spec_dict[species_count] hdf_species = hdf_species_group[hdf_species] + # Check if the species parameter is already defiend if var_name[1] in hdf_species.attrs: print('Species parameter is already set: ', var_name[1]) else: + # Float conversion if is_float(var_value): var_value = float(var_value) if var_name[1] not in logical_list and var_name[1] not in spec_attr_list: hdf_species.attrs[var_name[1]] = var_value print('Species parameter set: ', var_name[1]) + # Previous-state read in as a string elif var_name[1] in spec_attr_list: var_value = str(int(var_value)) spec_name_list = spec_dict[var_value] hdf_species.attrs[var_name[1]] = np.string_(spec_name_list) print('Species parameter set: ', var_name[1]) + # Logicals else: if 'F' in var_value or 'false' in var_value: var_value = 0 else: var_value = 1 hdf_species.attrs[var_name[1]] = var_value - print('Species parameter set: ', var_name[1]) #raus?? + print('Species parameter set: ', var_name[1]) # Write attributes for source and time of retrieval hdf_species.attrs['* Reference'] = args.reference hdf_species.attrs['* Created'] = date.today().strftime("%B %d, %Y") -# Copy cross-section data +# Copy cross-section data if not defined already for dataset in h5_crosssection.keys(): if dataset in hdf_xsec_group.keys(): print('Cross-section is already set: ', dataset) @@ -179,6 +188,7 @@ def is_float(value): # lines = rad_spec_group.create_dataset('Lines',data=[0]) # levels = rad_spec_group.create_dataset('Levels',data=[0]) +# Lists for the renaming of the chemical reaction equations educt_attr_list = ['Reactants'] product_attr_list = ['Reactants', 'Products'] educt_dict = {} @@ -212,7 +222,8 @@ def is_float(value): else: ReacName_dict[var_name[0]].append(var_name[1]) -# If not defined, set the reaction name +# If not defined, set the reaction name: Educts1+Educt2_Product1_Product2 +# Non-reactives (M or A) are added at the end of the reactants and at the second position for the products for key in ReacName_dict: if 'ReactionName' not in ReacName_dict[key]: ReactionName = '' @@ -228,13 +239,14 @@ def is_float(value): hdf_reac = reac_dict[key] ReactionName = hdf_reac - # Check first for permutations of the reaction name + # Bring the reaction equation in the correct order ReactionNameSplit = re.split('_', ReactionName) checkeduct_list = re.split('\+', ReactionNameSplit[0]) checkeduct_list_sorted = custom_sort_reactants(checkeduct_list) checkproduct_list = re.split('\+',ReactionNameSplit[1]) checkproduct_list_sorted = custom_sort_products(checkproduct_list) +# Sorting of the species in the reaction equation and create the new name for the reaction ReactionName = '' for val in checkeduct_list_sorted: ReactionName = ReactionName + '+' + val @@ -268,20 +280,22 @@ def is_float(value): model_attr = list(hdf_reac.attrs['ChemistryModel']) for val in model_attr: model_name_list.append(val.decode('UTF-8')) + # Check if the reaction is already defined for the model if model_name in model_name_list: print('This Model is already defined for the reaction. No further action is taken.') print('To define the reaction data as a separate instance, please rename the model.') else: - # Check if the model exists in another reaction AddNewReaction = False Count = 0 ReacNameTest = ReactionName + # Check if the model is already defined for the reaction name if ReacNameTest in hdf_reac_group.keys(): hdf_reac_test = hdf_reac_group[ReacNameTest] model_test_list = [] model_attr_test = list(hdf_reac_test.attrs['ChemistryModel']) for val in model_attr_test: model_test_list.append(val.decode('UTF-8')) + # If the model is defined, the reaction is not added again if model_name in model_test_list: print('This Model is already defined for the reaction. No further action is taken.') print('To define the reaction data as a separate instance, please rename the model.') @@ -289,6 +303,7 @@ def is_float(value): exit else: AddNewReaction = True + # Loop over iterations of the reaction name and check if the model is already defined while ReacNameTest in hdf_reac_group.keys(): ReacNameTest = re.sub('#\d+', '', ReactionName) Count = Count + 1 @@ -307,14 +322,17 @@ def is_float(value): exit else: AddNewReaction = True + # Add the reaction with the new model to the database, counter of the reaction name (#) is increased by 1 if AddNewReaction: print('A different Model is already defined for this reaction.') Count = 1 while ReactionName in hdf_reac_group.keys(): + # if no iterations of the reaction name are defined so far, move the already defined name from ReactionName to ReactionName#1 if '#' not in ReactionName: ReacNameCopy = ReactionName + '#1' hdf_reac_group.move(ReactionName, ReacNameCopy) reac_dict[key] = ReacNameCopy + # Create the new name and add the reaction to the database ReactionName = re.sub('#\d+', '', ReactionName) Count = Count + 1 ReactionName = ReactionName + '#' + str(Count) @@ -328,10 +346,12 @@ def is_float(value): hdf_reac.attrs['ChemistryModel'] = np.array(model_name_list,dtype='S255') exit else: + # Add the attribute ChemistryModel to the database model_name_list = [] model_name_list.append(model_name) hdf_reac.attrs['ChemistryModel'] = np.array(model_name_list,dtype='S255') +# List of variables not added to the file exclude_list = ['Reactants', 'Products', 'NumberOfNonReactives'] with open(args.ini_filename) as file: @@ -345,13 +365,15 @@ def is_float(value): reac_count = var_name[0] hdf_reac = reac_dict[reac_count] hdf_reac = hdf_reac_group[hdf_reac] - # Read-In of the attributes + # Read-In of the attributes, check if the parameter is already defined if var_name[1] in hdf_reac.attrs: print('Reaction parameter is already set: ', var_name[1]) else: if is_float(var_value): var_value = float(var_value) + # Exclude certain parameters if var_name[1] not in exclude_list: + # Treatment of the NonInteractiveSpecies (added in the form of the species name) if var_name[1] in reac_attr_list: spec_name_list = [] var_value = var_value.replace(',0', '').replace('(/', '').replace('/)', '').split(',') @@ -359,7 +381,9 @@ def is_float(value): spec_name_list.append(spec_dict[val]) hdf_reac.attrs[var_name[1]] = np.array(spec_name_list,dtype='S255') else: + # All other parameters hdf_reac.attrs[var_name[1]] = var_value + # If not defined, the standard reaction model is set to TCE print('Reaction parameter set: ', var_name[1]) if 'ReactionModel' not in hdf_reac.attrs: hdf_reac.attrs['ReactionModel'] = 'TCE' diff --git a/tools/species_database/functions_database.py b/tools/species_database/functions_database.py index 55ff1ab1f..c14b5078a 100644 --- a/tools/species_database/functions_database.py +++ b/tools/species_database/functions_database.py @@ -1,5 +1,12 @@ +import sys + def custom_sort_reactants(species_list): species_order = [ + 'SF6', + 'SO2', + 'CH3CH3', + 'CH2CH2', + 'CHCH', 'CH4', 'CH3', 'CH2', @@ -13,15 +20,33 @@ def custom_sort_reactants(species_list): 'CNIon1', 'N2', 'N2Ion1', + 'N2O' 'NO', 'NOIon1', + 'NH3', + 'NH2', 'NH', + 'H2O', + 'HO', + 'D2O', + 'DO', + 'O3', 'O2', 'O2Ion1', 'H3', 'H3Ion1', 'H2', 'H2Ion1', + 'D2', + 'D2Ion1' + 'HD', + 'HDIon1' + 'F2', + 'HF', + 'Cl2', + 'HCl', + 'Br2', + 'HBr', 'C', 'CIon1', 'CIon2', @@ -35,10 +60,14 @@ def custom_sort_reactants(species_list): 'OIon1', 'H', 'HIon1', + 'D', + 'DIon1' 'Xe', 'XeIon1', 'Ar', 'ArIon1', + 'Kr', + 'Ne', 'He', 'HeIon1', 'HeIon2', @@ -49,6 +78,11 @@ def custom_sort_reactants(species_list): 'A' ] + for val in species_list: + if val not in species_order: + print( 'The reactant ', val, 'is not defined as a species, please add it to the sorting function!') + sys.exit() + custom_order = {key:index + 1 for index, key in enumerate(species_order)} sorted_list = sorted(species_list, key=lambda x: custom_order[x]) @@ -57,6 +91,11 @@ def custom_sort_reactants(species_list): def custom_sort_products(species_list): species_order = [ + 'SF6', + 'SO2', + 'CH3CH3', + 'CH2CH2', + 'CHCH', 'CH4', 'CH3', 'CH2', @@ -70,15 +109,33 @@ def custom_sort_products(species_list): 'CNIon1', 'N2', 'N2Ion1', + 'N2O' 'NO', 'NOIon1', + 'NH3', + 'NH2', 'NH', + 'H2O', + 'HO', + 'D2O', + 'DO', + 'O3', 'O2', 'O2Ion1', 'H3', 'H3Ion1', 'H2', 'H2Ion1', + 'D2', + 'D2Ion1' + 'HD', + 'HDIon1' + 'F2', + 'HF', + 'Cl2', + 'HCl', + 'Br2', + 'HBr', 'C', 'CIon1', 'CIon2', @@ -92,10 +149,14 @@ def custom_sort_products(species_list): 'OIon1', 'H', 'HIon1', + 'D', + 'DIon1' 'Xe', 'XeIon1', 'Ar', 'ArIon1', + 'Kr', + 'Ne', 'He', 'HeIon1', 'HeIon2', @@ -105,6 +166,12 @@ def custom_sort_products(species_list): 'M', 'A' ] + + for val in species_list: + if val not in species_order: + print( 'The product ', val, 'is not defined as a species, please add it to the sorting function!') + sys.exit() + custom_order = {key:index + 1 for index, key in enumerate(species_order)} sorted_list = sorted(species_list, key=lambda x: custom_order[x]) From 3ab038cf37b10c71dc08ca6130a4b39fe9139a85 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Wed, 2 Aug 2023 15:23:46 +0200 Subject: [PATCH 070/222] updated ini files --- ...> Air-Fe_11Spec_43Reac_Farbar2008Voronov1997Plane2015.ini} | 4 +++- tools/species_database/Air_11Spec_27Reac_Park1993.ini | 4 +++- ...c_43Reac_Boyd2007.ini => Air_11Spec_43Reac_Farbar2008.ini} | 2 +- tools/species_database/Air_11Spec_51Reac_Park1993.ini | 2 +- tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini | 4 ++++ tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini | 4 ++++ tools/species_database/Mars_16Spec_31Reac_Park1994.ini | 4 ++++ tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini | 4 ++++ tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini | 4 ++++ ...Reac_Gokcen2007.ini => Titan_18Spec_30Reac_Gokcen2007.ini} | 4 ++++ 10 files changed, 32 insertions(+), 4 deletions(-) rename tools/species_database/{Air-Fe_11Spec_43Reac_Boyd2007Voronov1997Plane2015.ini => Air-Fe_11Spec_43Reac_Farbar2008Voronov1997Plane2015.ini} (97%) rename tools/species_database/{Air_11Spec_43Reac_Boyd2007.ini => Air_11Spec_43Reac_Farbar2008.ini} (99%) rename tools/species_database/{Titan-wo-Argon_18Spec_30Reac_Gokcen2007.ini => Titan_18Spec_30Reac_Gokcen2007.ini} (98%) diff --git a/tools/species_database/Air-Fe_11Spec_43Reac_Boyd2007Voronov1997Plane2015.ini b/tools/species_database/Air-Fe_11Spec_43Reac_Farbar2008Voronov1997Plane2015.ini similarity index 97% rename from tools/species_database/Air-Fe_11Spec_43Reac_Boyd2007Voronov1997Plane2015.ini rename to tools/species_database/Air-Fe_11Spec_43Reac_Farbar2008Voronov1997Plane2015.ini index 2a91dbec1..7d92505d2 100644 --- a/tools/species_database/Air-Fe_11Spec_43Reac_Boyd2007Voronov1997Plane2015.ini +++ b/tools/species_database/Air-Fe_11Spec_43Reac_Farbar2008Voronov1997Plane2015.ini @@ -1,7 +1,9 @@ ! ======================================================================= ! Data for air taken from ! Species: G. A. Bird, Nonequilibrium radiation during re-entry at 10 km/s, AIAA-Paper 87-1543 -! Reactions: Iain D. Boyd, Phys. Fluids 19, 096102 (2007) +! Reactions: +! Air: E. Farbar and I. Boyd. Simulation of Fire II Reentry Flow Using the Direct Simulation Monte Carlo Method. 2008. doi:10.2514/6.2008-4103. +! Iron: G. Voronov. A practical fit formula for ionization rate coefficients of atoms and ions by electron impact: Z= 1–28. Atomic Data and Nuclear Data Tables, 65(1):1–35, 1997. and J. M. Plane, W. Feng, and E. C. Dawkins. The mesosphere and metals: Chemistry and changes. Chemical reviews, 115(10):4497–4541, 2015. ! ======================================================================= ! =============================================================================== ! ! Species1, N diff --git a/tools/species_database/Air_11Spec_27Reac_Park1993.ini b/tools/species_database/Air_11Spec_27Reac_Park1993.ini index 234476bed..e95464061 100755 --- a/tools/species_database/Air_11Spec_27Reac_Park1993.ini +++ b/tools/species_database/Air_11Spec_27Reac_Park1993.ini @@ -1,5 +1,7 @@ ! ======================================================================= -! Data for air taken from +! ! Data for air taken from +! Species: G. A. Bird, Nonequilibrium radiation during re-entry at 10 km/s, AIAA-Paper 87-1543 +! Reactions: C. Park. Review of chemical-kinetic problems of future NASA missions. I - Earth entries. Journal of Thermophysics and Heat Transfer, 7(3):385–398, 1993. doi:10.2514/3.431. ! ======================================================================= ! =============================================================================== ! ! Species1, N diff --git a/tools/species_database/Air_11Spec_43Reac_Boyd2007.ini b/tools/species_database/Air_11Spec_43Reac_Farbar2008.ini similarity index 99% rename from tools/species_database/Air_11Spec_43Reac_Boyd2007.ini rename to tools/species_database/Air_11Spec_43Reac_Farbar2008.ini index 78ee103b0..6fd18ff8a 100755 --- a/tools/species_database/Air_11Spec_43Reac_Boyd2007.ini +++ b/tools/species_database/Air_11Spec_43Reac_Farbar2008.ini @@ -1,7 +1,7 @@ ! ======================================================================= ! Data for air taken from ! Species: G. A. Bird, Nonequilibrium radiation during re-entry at 10 km/s, AIAA-Paper 87-1543 -! Reactions: Iain D. Boyd, Phys. Fluids 19, 096102 (2007) +! Reactions: E. Farbar and I. Boyd. Simulation of Fire II Reentry Flow Using the Direct Simulation Monte Carlo Method. 2008. doi:10.2514/6.2008-4103. ! ======================================================================= ! =============================================================================== ! ! Species1, N diff --git a/tools/species_database/Air_11Spec_51Reac_Park1993.ini b/tools/species_database/Air_11Spec_51Reac_Park1993.ini index c48d3bbcf..c5dc2ada2 100755 --- a/tools/species_database/Air_11Spec_51Reac_Park1993.ini +++ b/tools/species_database/Air_11Spec_51Reac_Park1993.ini @@ -1,7 +1,7 @@ ! ======================================================================= ! Data for air taken from ! Species: G. A. Bird, Nonequilibrium radiation during re-entry at 10 km/s, AIAA-Paper 87-1543 -! Reactions: MONACO-Manual (Dietrich, Boyd) = Parks model (1985) +! Reactions: C. Park. Review of chemical-kinetic problems of future NASA missions. I - Earth entries. Journal of Thermophysics and Heat Transfer, 7(3):385–398, 1993. doi:10.2514/3.431. ! ======================================================================= ! =============================================================================== ! ! Species1, N diff --git a/tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini b/tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini index bea3e1477..506e01eb9 100755 --- a/tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini +++ b/tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini @@ -1,3 +1,7 @@ +! ======================================================================= +! Data taken from +! Reactions: C. Johnston and A. Brandis. Modeling of nonequilibrium CO Fourth-Positive and CN Violet emission in CO2–N2 gases. Journal of Quantitative Spectroscopy and Radiative Transfer, 149:303–317, 2014. doi:10.1016/j.jqsrt.2014.08.025. +! ======================================================================= ! =============================================================================== ! ! Species1, CO2 ! =============================================================================== ! diff --git a/tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini b/tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini index ffece067a..9340790e1 100755 --- a/tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini +++ b/tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini @@ -1,3 +1,7 @@ +! ======================================================================= +! Data taken from +! Reactions: C. Johnston and A. Brandis. Modeling of nonequilibrium CO Fourth-Positive and CN Violet emission in CO2–N2 gases. Journal of Quantitative Spectroscopy and Radiative Transfer, 149:303–317, 2014. doi:10.1016/j.jqsrt.2014.08.025. +! ======================================================================= ! =============================================================================== ! ! Species1, CO2 ! =============================================================================== ! diff --git a/tools/species_database/Mars_16Spec_31Reac_Park1994.ini b/tools/species_database/Mars_16Spec_31Reac_Park1994.ini index fbfd31e2d..30ea691dd 100755 --- a/tools/species_database/Mars_16Spec_31Reac_Park1994.ini +++ b/tools/species_database/Mars_16Spec_31Reac_Park1994.ini @@ -1,3 +1,7 @@ +! ======================================================================= +! Data taken from +! Reactions: C. Park, J. T. Howe, R. L. Jaffe, and G. V. Candler. Review of chemical-kinetic problems of future NASA missions. II - Mars entries. Journal of Thermophysics and Heat Transfer, 8(1):9–23, 1994. doi:10.2514/3.496. +! ======================================================================= ! =============================================================================== ! ! Species1, CO2 ! =============================================================================== ! diff --git a/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini b/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini index 3b31d7187..eaad7feef 100755 --- a/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini +++ b/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini @@ -1,3 +1,7 @@ +! ======================================================================= +! Data taken from +! Reactions: C. Johnston and A. Brandis. Modeling of nonequilibrium CO Fourth-Positive and CN Violet emission in CO2–N2 gases. Journal of Quantitative Spectroscopy and Radiative Transfer, 149:303–317, 2014. doi:10.1016/j.jqsrt.2014.08.025. +! ======================================================================= ! =============================================================================== ! ! Species1, CO2 ! =============================================================================== ! diff --git a/tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini b/tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini index 6b22ac87d..5eabfe193 100755 --- a/tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini +++ b/tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini @@ -1,3 +1,7 @@ +! ======================================================================= +! Data taken from +! Reactions: T. Gokcen. N2-CH4-Ar Chemical Kinetic Model for Simulations of Atmospheric Entry to Titan. Journal of Thermophysics and Heat Transfer, 21(1):9–18, 2007. doi:10.2514/1.22095. +! ======================================================================= ! =============================================================================== ! ! Species1, CH4 ! =============================================================================== ! diff --git a/tools/species_database/Titan-wo-Argon_18Spec_30Reac_Gokcen2007.ini b/tools/species_database/Titan_18Spec_30Reac_Gokcen2007.ini similarity index 98% rename from tools/species_database/Titan-wo-Argon_18Spec_30Reac_Gokcen2007.ini rename to tools/species_database/Titan_18Spec_30Reac_Gokcen2007.ini index 0c1beaa74..3910cf6ac 100755 --- a/tools/species_database/Titan-wo-Argon_18Spec_30Reac_Gokcen2007.ini +++ b/tools/species_database/Titan_18Spec_30Reac_Gokcen2007.ini @@ -1,3 +1,7 @@ +! ======================================================================= +! Data taken from +! Reactions: T. Gokcen. N2-CH4-Ar Chemical Kinetic Model for Simulations of Atmospheric Entry to Titan. Journal of Thermophysics and Heat Transfer, 21(1):9–18, 2007. doi:10.2514/1.22095. +! ======================================================================= ! =============================================================================== ! ! Species1, CH4 ! =============================================================================== ! From 925aabbc3dcf33d3d44bf7c5578153ae08c5ab83 Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Wed, 2 Aug 2023 16:03:43 +0200 Subject: [PATCH 071/222] Correct names for the VHS parameters --- .../Mars_11Spec_27Reac_Johnston2014.ini | 66 ++++++------ .../Mars_16Spec_31Reac_Park1994.ini | 96 ++++++++--------- .../Mars_17Spec_42Reac_Johnston2014.ini | 102 +++++++++--------- 3 files changed, 132 insertions(+), 132 deletions(-) diff --git a/tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini b/tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini index ffece067a..8b182204e 100755 --- a/tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini +++ b/tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini @@ -4,9 +4,9 @@ Part-Species1-SpeciesName=CO2 Part-Species1-PolyatomicMol=true Part-Species1-InteractionID=2 -Part-Species1-VHSReferenceTemp=273 -Part-Species1-VHSReferenceDiam=5.10E-10 -Part-Species1-omegaVHS=0.24 +Part-Species1-Tref=273 +Part-Species1-dref=5.10E-10 +Part-Species1-omega=0.24 Part-Species1-NumOfAtoms=3 Part-Species1-LinearMolec=true Part-Species1-CharaTempVib1=959.2 @@ -22,9 +22,9 @@ Part-Species1-SymmetryFactor = 2 ! =============================================================================== ! Part-Species2-SpeciesName=CO Part-Species2-InteractionID=2 -Part-Species2-VHSReferenceTemp=273 -Part-Species2-VHSReferenceDiam=4.17E-10 -Part-Species2-omegaVHS=0.24 +Part-Species2-Tref=273 +Part-Species2-dref=4.17E-10 +Part-Species2-omega=0.24 Part-Species2-CharaTempVib=3120.7 Part-Species2-Ediss_eV=11.06 Part-Species2-HeatOfFormation_K=-13292.85 @@ -35,9 +35,9 @@ Part-Species2-SymmetryFactor = 1 ! =============================================================================== ! Part-Species3-SpeciesName=C2 Part-Species3-InteractionID=2 -Part-Species3-VHSReferenceTemp=273 -Part-Species3-VHSReferenceDiam=4.88E-10 -Part-Species3-omegaVHS=0.24 +Part-Species3-Tref=273 +Part-Species3-dref=4.88E-10 +Part-Species3-omega=0.24 Part-Species3-CharaTempVib=2667.7 Part-Species3-Ediss_eV=6.22 Part-Species3-HeatOfFormation_K=99667.24 @@ -48,9 +48,9 @@ Part-Species3-SymmetryFactor = 2 ! =============================================================================== ! Part-Species4-SpeciesName=CN Part-Species4-InteractionID = 2 -Part-Species4-VHSReferenceTemp = 273 -Part-Species4-VHSReferenceDiam = 5.45E-10 -Part-Species4-omegaVHS=0.24 +Part-Species4-Tref = 273 +Part-Species4-dref = 5.45E-10 +Part-Species4-omega=0.24 Part-Species4-CharaTempVib=2975.4 Part-Species4-Ediss_eV=7.72 Part-Species4-HeatOfFormation_K=52921.01 @@ -61,9 +61,9 @@ Part-Species4-SymmetryFactor = 1 ! =============================================================================== ! Part-Species5-SpeciesName=N2 Part-Species5-InteractionID = 2 -Part-Species5-VHSReferenceTemp =273 -Part-Species5-VHSReferenceDiam = 4.17E-10 -Part-Species5-omegaVHS=0.24 +Part-Species5-Tref =273 +Part-Species5-dref = 4.17E-10 +Part-Species5-omega=0.24 Part-Species5-CharaTempVib=3393.3 Part-Species5-Ediss_eV=9.759 Part-Species5-CharaTempRot = 2.87 @@ -74,9 +74,9 @@ Part-Species5-HeatOfFormation_K=0.0 ! =============================================================================== ! Part-Species6-SpeciesName=O2 Part-Species6-InteractionID=2 -Part-Species6-VHSReferenceTemp=273 -Part-Species6-VHSReferenceDiam=3.98E-10 -Part-Species6-omegaVHS=0.24 +Part-Species6-Tref=273 +Part-Species6-dref=3.98E-10 +Part-Species6-omega=0.24 Part-Species6-CharaTempVib=2272.2 Part-Species6-Ediss_eV=5.09 Part-Species6-HeatOfFormation_K= 0.0 @@ -87,9 +87,9 @@ Part-Species6-SymmetryFactor = 2 ! =============================================================================== ! Part-Species7-SpeciesName=NO Part-Species7-InteractionID = 2 -Part-Species7-VHSReferenceTemp =273 -Part-Species7-VHSReferenceDiam = 4.08E-10 -Part-Species7-omegaVHS=0.24 +Part-Species7-Tref =273 +Part-Species7-dref = 4.08E-10 +Part-Species7-omega=0.24 Part-Species7-CharaTempVib=2738.8 Part-Species7-Ediss_eV=6.496 Part-Species7-CharaTempRot = 2.4 @@ -100,36 +100,36 @@ Part-Species7-HeatOfFormation_K=10959.33 ! =============================================================================== ! Part-Species8-SpeciesName=C Part-Species8-InteractionID=1 -Part-Species8-VHSReferenceTemp=273 -Part-Species8-VHSReferenceDiam=4.67E-10 -Part-Species8-omegaVHS=0.24 +Part-Species8-Tref=273 +Part-Species8-dref=4.67E-10 +Part-Species8-omega=0.24 Part-Species8-HeatOfFormation_K=86221.52 ! =============================================================================== ! ! Species9, N ! =============================================================================== ! Part-Species9-SpeciesName=N Part-Species9-InteractionID = 1 -Part-Species9-VHSReferenceTemp =273 ! K -Part-Species9-VHSReferenceDiam = 3.0E-10 ! m -Part-Species9-omegaVHS=0.24 +Part-Species9-Tref =273 ! K +Part-Species9-dref = 3.0E-10 ! m +Part-Species9-omega=0.24 Part-Species9-HeatOfFormation_K=56821.44 ! =============================================================================== ! ! Species10, O ! =============================================================================== ! Part-Species10-SpeciesName=O Part-Species10-InteractionID=1 -Part-Species10-VHSReferenceTemp=273 -Part-Species10-VHSReferenceDiam=3.49E-10 -Part-Species10-omegaVHS=0.24 +Part-Species10-Tref=273 +Part-Species10-dref=3.49E-10 +Part-Species10-omega=0.24 Part-Species10-HeatOfFormation_K=29975.34 ! =============================================================================== ! ! Species11, Ar ! =============================================================================== ! Part-Species11-SpeciesName=Ar Part-Species11-InteractionID = 1 -Part-Species11-VHSReferenceTemp = 273 -Part-Species11-VHSReferenceDiam = 4.05E-10 -Part-Species11-omegaVHS=0.24 +Part-Species11-Tref = 273 +Part-Species11-dref = 4.05E-10 +Part-Species11-omega=0.24 Part-Species11-HeatOfFormation_K=0.0 ! =============================================================================== ! ! Data for chemical Reaction diff --git a/tools/species_database/Mars_16Spec_31Reac_Park1994.ini b/tools/species_database/Mars_16Spec_31Reac_Park1994.ini index fbfd31e2d..efd80085b 100755 --- a/tools/species_database/Mars_16Spec_31Reac_Park1994.ini +++ b/tools/species_database/Mars_16Spec_31Reac_Park1994.ini @@ -4,9 +4,9 @@ Part-Species1-SpeciesName=CO2 Part-Species1-PolyatomicMol=true Part-Species1-InteractionID=2 -Part-Species1-VHSReferenceTemp=273 -Part-Species1-VHSReferenceDiam=5.10E-10 -Part-Species1-omegaVHS=0.24 +Part-Species1-Tref=273 +Part-Species1-dref=5.10E-10 +Part-Species1-omega=0.24 Part-Species1-NumOfAtoms=3 Part-Species1-LinearMolec=true Part-Species1-CharaTempVib1=959.2 @@ -22,9 +22,9 @@ Part-Species1-SymmetryFactor = 2 ! =============================================================================== ! Part-Species2-SpeciesName=CO Part-Species2-InteractionID=2 -Part-Species2-VHSReferenceTemp=273 -Part-Species2-VHSReferenceDiam=4.17E-10 -Part-Species2-omegaVHS=0.24 +Part-Species2-Tref=273 +Part-Species2-dref=4.17E-10 +Part-Species2-omega=0.24 Part-Species2-CharaTempVib=3120.7 Part-Species2-Ediss_eV=11.06 Part-Species2-HeatOfFormation_K=-13293.70 @@ -35,9 +35,9 @@ Part-Species2-SymmetryFactor = 1 ! =============================================================================== ! Part-Species3-SpeciesName=C2 Part-Species3-InteractionID=2 -Part-Species3-VHSReferenceTemp=273 -Part-Species3-VHSReferenceDiam=4.88E-10 -Part-Species3-omegaVHS=0.24 +Part-Species3-Tref=273 +Part-Species3-dref=4.88E-10 +Part-Species3-omega=0.24 Part-Species3-CharaTempVib=2667.7 Part-Species3-Ediss_eV=6.22 Part-Species3-HeatOfFormation_K=100756.90 @@ -48,18 +48,18 @@ Part-Species3-SymmetryFactor = 2 ! =============================================================================== ! Part-Species4-SpeciesName=C Part-Species4-InteractionID=1 -Part-Species4-VHSReferenceTemp=273 -Part-Species4-VHSReferenceDiam=4.67E-10 -Part-Species4-omegaVHS=0.24 +Part-Species4-Tref=273 +Part-Species4-dref=4.67E-10 +Part-Species4-omega=0.24 Part-Species4-HeatOfFormation_K=86195.54 ! =============================================================================== ! ! Species5, N2 ! =============================================================================== ! Part-Species5-SpeciesName=N2 Part-Species5-InteractionID = 2 -Part-Species5-VHSReferenceTemp =273 -Part-Species5-VHSReferenceDiam = 4.17E-10 -Part-Species5-omegaVHS=0.24 +Part-Species5-Tref =273 +Part-Species5-dref = 4.17E-10 +Part-Species5-omega=0.24 Part-Species5-CharaTempVib=3393.3 Part-Species5-Ediss_eV=9.759 Part-Species5-CharaTempRot = 2.87 @@ -70,18 +70,18 @@ Part-Species5-HeatOfFormation_K=0.0 ! =============================================================================== ! Part-Species6-SpeciesName=O Part-Species6-InteractionID=1 -Part-Species6-VHSReferenceTemp=273 -Part-Species6-VHSReferenceDiam=3.49E-10 -Part-Species6-omegaVHS=0.24 +Part-Species6-Tref=273 +Part-Species6-dref=3.49E-10 +Part-Species6-omega=0.24 Part-Species6-HeatOfFormation_K=29969.45 ! =============================================================================== ! ! Species7, O2 ! =============================================================================== ! Part-Species7-SpeciesName=O2 Part-Species7-InteractionID=2 -Part-Species7-VHSReferenceTemp=273 -Part-Species7-VHSReferenceDiam=3.98E-10 -Part-Species7-omegaVHS=0.24 +Part-Species7-Tref=273 +Part-Species7-dref=3.98E-10 +Part-Species7-omega=0.24 Part-Species7-CharaTempVib=2272.2 Part-Species7-Ediss_eV=5.09 Part-Species7-HeatOfFormation_K= 0.0 @@ -92,9 +92,9 @@ Part-Species7-SymmetryFactor = 2 ! =============================================================================== ! Part-Species8-SpeciesName=CN Part-Species8-InteractionID = 2 -Part-Species8-VHSReferenceTemp = 273 -Part-Species8-VHSReferenceDiam = 5.45E-10 -Part-Species8-omegaVHS=0.24 +Part-Species8-Tref = 273 +Part-Species8-dref = 5.45E-10 +Part-Species8-omega=0.24 Part-Species8-CharaTempVib=2975.4 Part-Species8-Ediss_eV=7.72 Part-Species8-HeatOfFormation_K=52323.23 @@ -105,9 +105,9 @@ Part-Species8-SymmetryFactor = 1 ! =============================================================================== ! Part-Species9-SpeciesName=NO Part-Species9-InteractionID = 2 -Part-Species9-VHSReferenceTemp =273 -Part-Species9-VHSReferenceDiam = 4.08E-10 -Part-Species9-omegaVHS=0.24 +Part-Species9-Tref =273 +Part-Species9-dref = 4.08E-10 +Part-Species9-omega=0.24 Part-Species9-CharaTempVib=2738.8 Part-Species9-Ediss_eV=6.496 Part-Species9-CharaTempRot = 2.4 @@ -118,18 +118,18 @@ Part-Species9-HeatOfFormation_K=10859.38 ! =============================================================================== ! Part-Species10-SpeciesName=N Part-Species10-InteractionID = 1 -Part-Species10-VHSReferenceTemp =273 ! K -Part-Species10-VHSReferenceDiam = 3.0E-10 ! m -Part-Species10-omegaVHS=0.24 +Part-Species10-Tref =273 ! K +Part-Species10-dref = 3.0E-10 ! m +Part-Species10-omega=0.24 Part-Species10-HeatOfFormation_K=56850.30 ! =============================================================================== ! ! Species11, CO+ ! =============================================================================== ! Part-Species11-SpeciesName=COIon1 Part-Species11-InteractionID=20 -Part-Species11-VHSReferenceTemp=273 -Part-Species11-VHSReferenceDiam=4.17E-10 -Part-Species11-omegaVHS=0.24 +Part-Species11-Tref=273 +Part-Species11-dref=4.17E-10 +Part-Species11-omega=0.24 Part-Species11-CharaTempVib=3120.7 Part-Species11-Ediss_eV=11.06 Part-Species11-HeatOfFormation_K=-13293.70 @@ -140,9 +140,9 @@ Part-Species11-SymmetryFactor = 1 ! =============================================================================== ! Part-Species12-SpeciesName=NOIon1 Part-Species12-InteractionID = 20 -Part-Species12-VHSReferenceTemp =273 -Part-Species12-VHSReferenceDiam = 4.08E-10 -Part-Species12-omegaVHS=0.24 +Part-Species12-Tref =273 +Part-Species12-dref = 4.08E-10 +Part-Species12-omega=0.24 Part-Species12-CharaTempVib=3419.2 Part-Species12-Ediss_eV=6.496 Part-Species12-CharaTempRot = 2.9 @@ -153,35 +153,35 @@ Part-Species12-HeatOfFormation_K=10859.38 ! =============================================================================== ! Part-Species13-SpeciesName=CIon1 Part-Species13-InteractionID=10 -Part-Species13-VHSReferenceTemp=273 -Part-Species13-VHSReferenceDiam=4.67E-10 -Part-Species13-omegaVHS=0.24 +Part-Species13-Tref=273 +Part-Species13-dref=4.67E-10 +Part-Species13-omega=0.24 Part-Species13-HeatOfFormation_K=86195.54 ! =============================================================================== ! ! Species14, O+ ! =============================================================================== ! Part-Species14-SpeciesName=OIon1 Part-Species14-InteractionID = 10 -Part-Species14-VHSReferenceTemp =273 -Part-Species14-VHSReferenceDiam = 3.0E-10 -Part-Species14-omegaVHS=0.24 +Part-Species14-Tref =273 +Part-Species14-dref = 3.0E-10 +Part-Species14-omega=0.24 Part-Species14-HeatOfFormation_K=29969.45 ! =============================================================================== ! ! Species15, e ! =============================================================================== ! Part-Species15-InteractionID = 4 -Part-Species15-VHSReferenceTemp =273 -Part-Species15-VHSReferenceDiam = 2.817920E-15 -Part-Species15-omegaVHS=0.24 +Part-Species15-Tref =273 +Part-Species15-dref = 2.817920E-15 +Part-Species15-omega=0.24 Part-Species15-HeatOfFormation_K=0.0 ! =============================================================================== ! ! Species16, Ar ! =============================================================================== ! Part-Species16-SpeciesName=Ar Part-Species16-InteractionID = 1 -Part-Species16-VHSReferenceTemp = 273 -Part-Species16-VHSReferenceDiam = 4.05E-10 -Part-Species16-omegaVHS=0.24 +Part-Species16-Tref = 273 +Part-Species16-dref = 4.05E-10 +Part-Species16-omega=0.24 Part-Species16-HeatOfFormation_K=0.0 ! =============================================================================== ! ! Data for chemical Reaction diff --git a/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini b/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini index 3b31d7187..bd9c00b67 100755 --- a/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini +++ b/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini @@ -4,9 +4,9 @@ Part-Species1-SpeciesName=CO2 Part-Species1-PolyatomicMol=true Part-Species1-InteractionID=2 -Part-Species1-VHSReferenceTemp=273 -Part-Species1-VHSReferenceDiam=5.10E-10 -Part-Species1-omegaVHS=0.24 +Part-Species1-Tref=273 +Part-Species1-dref=5.10E-10 +Part-Species1-omega=0.24 Part-Species1-NumOfAtoms=3 Part-Species1-LinearMolec=true Part-Species1-CharaTempVib1=959.2 @@ -22,9 +22,9 @@ Part-Species1-SymmetryFactor = 2 ! =============================================================================== ! Part-Species2-SpeciesName=CO Part-Species2-InteractionID=2 -Part-Species2-VHSReferenceTemp=273 -Part-Species2-VHSReferenceDiam=4.17E-10 -Part-Species2-omegaVHS=0.24 +Part-Species2-Tref=273 +Part-Species2-dref=4.17E-10 +Part-Species2-omega=0.24 Part-Species2-CharaTempVib=3120.7 Part-Species2-Ediss_eV=11.06 Part-Species2-HeatOfFormation_K=-13292.85 @@ -35,9 +35,9 @@ Part-Species2-SymmetryFactor = 1 ! =============================================================================== ! Part-Species3-SpeciesName=C2 Part-Species3-InteractionID=2 -Part-Species3-VHSReferenceTemp=273 -Part-Species3-VHSReferenceDiam=4.88E-10 -Part-Species3-omegaVHS=0.24 +Part-Species3-Tref=273 +Part-Species3-dref=4.88E-10 +Part-Species3-omega=0.24 Part-Species3-CharaTempVib=2667.7 Part-Species3-Ediss_eV=6.22 Part-Species3-HeatOfFormation_K=99667.24 @@ -48,9 +48,9 @@ Part-Species3-SymmetryFactor = 2 ! =============================================================================== ! Part-Species4-SpeciesName=CN Part-Species4-InteractionID = 2 -Part-Species4-VHSReferenceTemp = 273 -Part-Species4-VHSReferenceDiam = 5.45E-10 -Part-Species4-omegaVHS=0.24 +Part-Species4-Tref = 273 +Part-Species4-dref = 5.45E-10 +Part-Species4-omega=0.24 Part-Species4-CharaTempVib=2975.4 Part-Species4-Ediss_eV=7.72 Part-Species4-HeatOfFormation_K=52921.01 @@ -61,9 +61,9 @@ Part-Species4-SymmetryFactor = 1 ! =============================================================================== ! Part-Species5-SpeciesName=N2 Part-Species5-InteractionID = 2 -Part-Species5-VHSReferenceTemp =273 -Part-Species5-VHSReferenceDiam = 4.17E-10 -Part-Species5-omegaVHS=0.24 +Part-Species5-Tref =273 +Part-Species5-dref = 4.17E-10 +Part-Species5-omega=0.24 Part-Species5-CharaTempVib=3393.3 Part-Species5-Ediss_eV=9.759 Part-Species5-CharaTempRot = 2.87 @@ -74,9 +74,9 @@ Part-Species5-HeatOfFormation_K=0.0 ! =============================================================================== ! Part-Species6-SpeciesName=O2 Part-Species6-InteractionID=2 -Part-Species6-VHSReferenceTemp=273 -Part-Species6-VHSReferenceDiam=3.98E-10 -Part-Species6-omegaVHS=0.24 +Part-Species6-Tref=273 +Part-Species6-dref=3.98E-10 +Part-Species6-omega=0.24 Part-Species6-CharaTempVib=2272.2 Part-Species6-Ediss_eV=5.09 Part-Species6-HeatOfFormation_K= 0.0 @@ -87,9 +87,9 @@ Part-Species6-SymmetryFactor = 2 ! =============================================================================== ! Part-Species7-SpeciesName=NO Part-Species7-InteractionID = 2 -Part-Species7-VHSReferenceTemp =273 -Part-Species7-VHSReferenceDiam = 4.08E-10 -Part-Species7-omegaVHS=0.24 +Part-Species7-Tref =273 +Part-Species7-dref = 4.08E-10 +Part-Species7-omega=0.24 Part-Species7-CharaTempVib=2738.8 Part-Species7-Ediss_eV=6.496 Part-Species7-CharaTempRot = 2.4 @@ -100,54 +100,54 @@ Part-Species7-HeatOfFormation_K=10959.33 ! =============================================================================== ! Part-Species8-SpeciesName=C Part-Species8-InteractionID=1 -Part-Species8-VHSReferenceTemp=273 -Part-Species8-VHSReferenceDiam=4.67E-10 -Part-Species8-omegaVHS=0.24 +Part-Species8-Tref=273 +Part-Species8-dref=4.67E-10 +Part-Species8-omega=0.24 Part-Species8-HeatOfFormation_K=86221.52 ! =============================================================================== ! ! Species9, N ! =============================================================================== ! Part-Species9-SpeciesName=N Part-Species9-InteractionID = 1 -Part-Species9-VHSReferenceTemp =273 ! K -Part-Species9-VHSReferenceDiam = 3.0E-10 ! m -Part-Species9-omegaVHS=0.24 +Part-Species9-Tref =273 ! K +Part-Species9-dref = 3.0E-10 ! m +Part-Species9-omega=0.24 Part-Species9-HeatOfFormation_K=56821.44 ! =============================================================================== ! ! Species10, O ! =============================================================================== ! Part-Species10-SpeciesName=O Part-Species10-InteractionID=1 -Part-Species10-VHSReferenceTemp=273 -Part-Species10-VHSReferenceDiam=3.49E-10 -Part-Species10-omegaVHS=0.24 +Part-Species10-Tref=273 +Part-Species10-dref=3.49E-10 +Part-Species10-omega=0.24 Part-Species10-HeatOfFormation_K=29975.34 ! =============================================================================== ! ! Species11, C+ ! =============================================================================== ! Part-Species11-SpeciesName=CIon1 Part-Species11-InteractionID=10 -Part-Species11-VHSReferenceTemp=273 -Part-Species11-VHSReferenceDiam=4.67E-10 -Part-Species11-omegaVHS=0.24 +Part-Species11-Tref=273 +Part-Species11-dref=4.67E-10 +Part-Species11-omega=0.24 Part-Species11-HeatOfFormation_K=86221.52 ! =============================================================================== ! ! Species12, O+ ! =============================================================================== ! Part-Species12-SpeciesName=OIon1 Part-Species12-InteractionID = 10 -Part-Species12-VHSReferenceTemp =273 -Part-Species12-VHSReferenceDiam = 3.0E-10 -Part-Species12-omegaVHS=0.24 +Part-Species12-Tref =273 +Part-Species12-dref = 3.0E-10 +Part-Species12-omega=0.24 Part-Species12-HeatOfFormation_K=29975.34 ! =============================================================================== ! ! Species13, CO+ ! =============================================================================== ! Part-Species13-SpeciesName=COIon1 Part-Species13-InteractionID=20 -Part-Species13-VHSReferenceTemp=273 -Part-Species13-VHSReferenceDiam=4.17E-10 -Part-Species13-omegaVHS=0.24 +Part-Species13-Tref=273 +Part-Species13-dref=4.17E-10 +Part-Species13-omega=0.24 Part-Species13-CharaTempVib=3120.7 Part-Species13-Ediss_eV=11.06 Part-Species13-HeatOfFormation_K=-13292.85 @@ -158,9 +158,9 @@ Part-Species13-SymmetryFactor = 1 ! =============================================================================== ! Part-Species14-SpeciesName=O2Ion1 Part-Species14-InteractionID = 20 -Part-Species14-VHSReferenceTemp = 288 -Part-Species14-VHSReferenceDiam = 3.96E-10 -Part-Species14-omegaVHS=0.2 +Part-Species14-Tref = 288 +Part-Species14-dref = 3.96E-10 +Part-Species14-omega=0.2 Part-Species14-CharaTempVib=2741.7 Part-Species14-Ediss_eV=5.115 Part-Species14-CharaTempRot = 2.4 @@ -171,9 +171,9 @@ Part-Species14-HeatOfFormation_K=0.0 ! =============================================================================== ! Part-Species15-SpeciesName=NOIon1 Part-Species15-InteractionID = 20 -Part-Species15-VHSReferenceTemp =273 -Part-Species15-VHSReferenceDiam = 4.08E-10 -Part-Species15-omegaVHS=0.24 +Part-Species15-Tref =273 +Part-Species15-dref = 4.08E-10 +Part-Species15-omega=0.24 Part-Species15-CharaTempVib=3419.2 Part-Species15-Ediss_eV=6.496 Part-Species15-CharaTempRot = 2.9 @@ -183,18 +183,18 @@ Part-Species15-HeatOfFormation_K=10959.33 ! Species16, e ! =============================================================================== ! Part-Species16-InteractionID = 4 -Part-Species16-VHSReferenceTemp =273 -Part-Species16-VHSReferenceDiam = 2.817920E-15 -Part-Species16-omegaVHS=0.24 +Part-Species16-Tref =273 +Part-Species16-dref = 2.817920E-15 +Part-Species16-omega=0.24 Part-Species16-HeatOfFormation_K=0.0 ! =============================================================================== ! ! Species17, Ar ! =============================================================================== ! Part-Species17-SpeciesName=Ar Part-Species17-InteractionID = 1 -Part-Species17-VHSReferenceTemp = 273 -Part-Species17-VHSReferenceDiam = 4.05E-10 -Part-Species17-omegaVHS=0.24 +Part-Species17-Tref = 273 +Part-Species17-dref = 4.05E-10 +Part-Species17-omega=0.24 Part-Species17-HeatOfFormation_K=0.0 ! =============================================================================== ! ! Data for chemical Reaction From f0572a37ec17d16b05aede0084cc80db5045a0c9 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Wed, 2 Aug 2023 16:59:28 +0200 Subject: [PATCH 072/222] updated inis for database --- ..._43Reac_Farbar2008Voronov1997Plane2015.ini | 491 ------------------ .../Air_11Spec_27Reac_Park1993.ini | 66 +-- .../Air_11Spec_51Reac_Park1993.ini | 66 +-- tools/species_database/CH4-Ar_8Spec_7Reac.ini | 48 +- tools/species_database/CH4_7Spec_7Reac.ini | 42 +- ...n-Air_7Spec_3Reac_Voronov1997Plane2015.ini | 172 ++++++ .../Mars_16Spec_31Reac_Park1994.ini | 1 + .../Mars_17Spec_42Reac_Johnston2014.ini | 1 + tools/species_database/REF_DSMC.ini | 12 +- .../Titan_14Spec_24Reac_Gokcen2007.ini | 98 ++-- tools/species_database/functions_database.py | 24 +- 11 files changed, 361 insertions(+), 660 deletions(-) delete mode 100644 tools/species_database/Air-Fe_11Spec_43Reac_Farbar2008Voronov1997Plane2015.ini create mode 100644 tools/species_database/Fe-in-Air_7Spec_3Reac_Voronov1997Plane2015.ini diff --git a/tools/species_database/Air-Fe_11Spec_43Reac_Farbar2008Voronov1997Plane2015.ini b/tools/species_database/Air-Fe_11Spec_43Reac_Farbar2008Voronov1997Plane2015.ini deleted file mode 100644 index 7d92505d2..000000000 --- a/tools/species_database/Air-Fe_11Spec_43Reac_Farbar2008Voronov1997Plane2015.ini +++ /dev/null @@ -1,491 +0,0 @@ -! ======================================================================= -! Data for air taken from -! Species: G. A. Bird, Nonequilibrium radiation during re-entry at 10 km/s, AIAA-Paper 87-1543 -! Reactions: -! Air: E. Farbar and I. Boyd. Simulation of Fire II Reentry Flow Using the Direct Simulation Monte Carlo Method. 2008. doi:10.2514/6.2008-4103. -! Iron: G. Voronov. A practical fit formula for ionization rate coefficients of atoms and ions by electron impact: Z= 1–28. Atomic Data and Nuclear Data Tables, 65(1):1–35, 1997. and J. M. Plane, W. Feng, and E. C. Dawkins. The mesosphere and metals: Chemistry and changes. Chemical reviews, 115(10):4497–4541, 2015. -! ======================================================================= -! =============================================================================== ! -! Species1, N -! =============================================================================== ! -Part-Species1-SpeciesName=N -Part-Species1-InteractionID = 1 -Part-Species1-Tref =273 ! K -Part-Species1-dref = 3.0E-10 ! m -Part-Species1-omega=0.24 -Part-Species1-HeatOfFormation_K=56850.30 -! =============================================================================== ! -! Species2, O -! =============================================================================== ! -Part-Species2-SpeciesName=O -Part-Species2-InteractionID = 1 -Part-Species2-Tref =273 -Part-Species2-dref = 3.0E-10 -Part-Species2-omega=0.24 -Part-Species2-HeatOfFormation_K=29969.45 -! =============================================================================== ! -! Species3, N2 -! =============================================================================== ! -Part-Species3-SpeciesName=N2 -Part-Species3-InteractionID = 2 -Part-Species3-Tref =273 -Part-Species3-dref = 4.07E-10 -Part-Species3-omega=0.24 -Part-Species3-CharaTempVib=3393.3 -Part-Species3-Ediss_eV=9.759 -Part-Species3-CharaTempRot = 2.87 -Part-Species3-SymmetryFactor = 2 -Part-Species3-HeatOfFormation_K=0.0 -! =============================================================================== ! -! Species4, O2 -! =============================================================================== ! -Part-Species4-SpeciesName=O2 -Part-Species4-InteractionID = 2 -Part-Species4-Tref =273 -Part-Species4-dref = 3.96E-10 -Part-Species4-omega=0.24 -Part-Species4-CharaTempVib=2272.8 -Part-Species4-Ediss_eV=5.115 -Part-Species4-CharaTempRot = 2.1 -Part-Species4-SymmetryFactor = 2 -Part-Species4-HeatOfFormation_K=0.0 -! =============================================================================== ! -! Species5, NO -! =============================================================================== ! -Part-Species5-SpeciesName=NO -Part-Species5-InteractionID = 2 -Part-Species5-Tref =273 -Part-Species5-dref = 4.00E-10 -Part-Species5-omega=0.24 -Part-Species5-CharaTempVib=2738.8 -Part-Species5-Ediss_eV=6.496 -Part-Species5-CharaTempRot = 2.4 -Part-Species5-SymmetryFactor = 1 -Part-Species5-HeatOfFormation_K=10859.38 -! =============================================================================== ! -! Species6, N+ -! =============================================================================== ! -Part-Species6-SpeciesName=NIon1 -Part-Species6-InteractionID = 10 -Part-Species6-Tref =273 -Part-Species6-dref = 3.0E-10 -Part-Species6-omega=0.24 -Part-Species6-PreviousState=1 -! =============================================================================== ! -! Species7, O+ -! =============================================================================== ! -Part-Species7-SpeciesName=OIon1 -Part-Species7-InteractionID = 10 -Part-Species7-Tref =273 -Part-Species7-dref = 3.0E-10 -Part-Species7-omega=0.24 -Part-Species7-PreviousState=2 -! =============================================================================== ! -! Species8, N2+ -! =============================================================================== ! -Part-Species8-SpeciesName=N2Ion1 -Part-Species8-InteractionID = 20 -Part-Species8-Tref =273 -Part-Species8-dref = 4.07E-10 -Part-Species8-omega=0.24 -Part-Species8-CharaTempVib=3174.7 -Part-Species8-Ediss_eV=9.759 -Part-Species8-CharaTempRot = 2.8 -Part-Species8-SymmetryFactor = 2 -Part-Species8-PreviousState=3 -! =============================================================================== ! -! Species9, O2+ -! =============================================================================== ! -Part-Species9-SpeciesName=O2Ion1 -Part-Species9-InteractionID = 20 -Part-Species9-Tref =273 -Part-Species9-dref = 3.96E-10 -Part-Species9-omega=0.24 -Part-Species9-CharaTempVib=2741.7 -Part-Species9-Ediss_eV=5.115 -Part-Species9-CharaTempRot = 2.4 -Part-Species9-SymmetryFactor = 2 -Part-Species9-PreviousState=4 -! =============================================================================== ! -! Species10, NO+ -! =============================================================================== ! -Part-Species10-SpeciesName=NOIon1 -Part-Species10-InteractionID = 20 -Part-Species10-Tref =273 -Part-Species10-dref = 4.00E-10 -Part-Species10-omega=0.24 -Part-Species10-CharaTempVib=3419.2 -Part-Species10-Ediss_eV=6.496 -Part-Species10-CharaTempRot = 2.9 -Part-Species10-SymmetryFactor = 1 -Part-Species10-PreviousState=5 -! =============================================================================== ! -! Species11, e -! =============================================================================== ! -Part-Species11-InteractionID = 4 -Part-Species11-Tref =273 -Part-Species11-dref = 2.817920E-15 -Part-Species11-omega=0.24 -! =============================================================================== ! -! Species12, Fe -! =============================================================================== ! -Part-Species12-SpeciesName=Fe -Part-Species12-InteractionID = 1 -Part-Species12-Tref =1000 -Part-Species12-dref = 5.605E-10 -Part-Species12-omega=0.369 -Part-Species12-alpha=1.225 -Part-Species12-HeatOfFormation_K=56850.30 -! =============================================================================== ! -! Species13, Fe -! =============================================================================== ! -Part-Species13-SpeciesName=FeIon1 -Part-Species13-InteractionID = 10 -Part-Species13-Tref =1000 -Part-Species13-dref = 5.605E-10 -Part-Species13-omega=0.369 -Part-Species13-alpha=1.225 -Part-Species13-PreviousState=12 -! =============================================================================== ! -! Data for chemical Reaction -! =============================================================================== ! -DSMC-NumOfReactions=46 - -DSMC-Reaction1-ReactionName=N2+M_N+N+M -DSMC-Reaction2-ReactionName=N2+A_N+N+A -DSMC-Reaction4-ReactionName=O2+M_O+O+M -DSMC-Reaction5-ReactionName=O2+A_O+O+A -DSMC-Reaction7-ReactionName=NO+M_N+O+M -DSMC-Reaction8-ReactionName=NO+A_N+O+A - -!Reaction1 (N2 + molecule -> N + N + molecule) - -DSMC-Reaction1-Reactants=(/3,0,0/) -DSMC-Reaction1-Products=(/1,0,1,0/) -DSMC-Reaction1-Arrhenius-Prefactor=1.162E-08 -DSMC-Reaction1-Arrhenius-Powerfactor=-1.60 -DSMC-Reaction1-Activation-Energy_K=113200.0 -DSMC-Reaction1-NumberOfNonReactives=6 -DSMC-Reaction1-NonReactiveSpecies=(/3,4,5,8,9,10/) -!Reaction2 (N2 + atom -> N + N + atom) - -DSMC-Reaction2-Reactants=(/3,0,0/) -DSMC-Reaction2-Products=(/1,0,1,0/) -DSMC-Reaction2-Arrhenius-Prefactor=4.980E-08 -DSMC-Reaction2-Arrhenius-Powerfactor=-1.60 -DSMC-Reaction2-Activation-Energy_K=113200.0 -DSMC-Reaction2-NumberOfNonReactives=4 -DSMC-Reaction2-NonReactiveSpecies=(/1,2,6,7/) -!Reaction3 (N2 + e -> N + N + e) - -DSMC-Reaction3-Reactants=(/3,11,0/) -DSMC-Reaction3-Products=(/1,11,1,0/) -DSMC-Reaction3-Arrhenius-Prefactor=4.980E-06 -DSMC-Reaction3-Arrhenius-Powerfactor=-1.60 -DSMC-Reaction3-Activation-Energy_K=113200.0 -!Reaction4 (O2 + molecule -> O + O + molecule) - -DSMC-Reaction4-Reactants=(/4,0,0/) -DSMC-Reaction4-Products=(/2,0,2,0/) -DSMC-Reaction4-Arrhenius-Prefactor=3.321E-09 -DSMC-Reaction4-Arrhenius-Powerfactor=-1.5 -DSMC-Reaction4-Activation-Energy_K=59400.0 -DSMC-Reaction4-NumberOfNonReactives=6 -DSMC-Reaction4-NonReactiveSpecies=(/3,4,5,8,9,10/) -!Reaction5 (O2 + atom --> O + O + atom) - -DSMC-Reaction5-Reactants=(/4,0,0/) -DSMC-Reaction5-Products=(/2,0,2,0/) -DSMC-Reaction5-Arrhenius-Prefactor=1.660E-08 -DSMC-Reaction5-Arrhenius-Powerfactor=-1.5 -DSMC-Reaction5-Activation-Energy_K=59400.0 -DSMC-Reaction5-NumberOfNonReactives=4 -DSMC-Reaction5-NonReactiveSpecies=(/1,2,6,7/) -!Reaction6 (O2 + e --> O + O + e) - -DSMC-Reaction6-Reactants=(/4,11,0/) -DSMC-Reaction6-Products=(/2,11,2,0/) -DSMC-Reaction6-Arrhenius-Prefactor=1.660E-08 -DSMC-Reaction6-Arrhenius-Powerfactor=-1.5 -DSMC-Reaction6-Activation-Energy_K=59400.0 -!Reaction7 (NO + molecule --> N + O + molecule) - -DSMC-Reaction7-Reactants=(/5,0,0/) -DSMC-Reaction7-Products=(/1,0,2,0/) -DSMC-Reaction7-Arrhenius-Prefactor=8.302E-15 -DSMC-Reaction7-Arrhenius-Powerfactor=0. -DSMC-Reaction7-Activation-Energy_K=75500.0 -DSMC-Reaction7-NumberOfNonReactives=6 -DSMC-Reaction7-NonReactiveSpecies=(/3,4,5,8,9,10/) -!Reaction8 (NO + atom --> N + O + atom) - -DSMC-Reaction8-Reactants=(/5,0,0/) -DSMC-Reaction8-Products=(/1,0,2,0/) -DSMC-Reaction8-Arrhenius-Prefactor=1.826E-13 -DSMC-Reaction8-Arrhenius-Powerfactor=0. -DSMC-Reaction8-Activation-Energy_K=75500.0 -DSMC-Reaction8-NumberOfNonReactives=4 -DSMC-Reaction8-NonReactiveSpecies=(/1,2,6,7/) -!Reaction9 (NO + e --> N + O + e ) - -DSMC-Reaction9-Reactants=(/5,11,0/) -DSMC-Reaction9-Products=(/1,11,2,0/) -DSMC-Reaction9-Arrhenius-Prefactor=1.826E-013 -DSMC-Reaction9-Arrhenius-Powerfactor=0. -DSMC-Reaction9-Activation-Energy_K=75500.0 -!Reaction10 (NO + O --> N + O2) - -DSMC-Reaction10-Reactants=(/5,2,0/) -DSMC-Reaction10-Products=(/4,1,0,0/) -DSMC-Reaction10-Arrhenius-Prefactor=1.389E-17 -DSMC-Reaction10-Arrhenius-Powerfactor=0. -DSMC-Reaction10-Activation-Energy_K=19700 -!Reaction11 (O2 + N --> O + NO) - -DSMC-Reaction11-Reactants=(/4,1,0/) -DSMC-Reaction11-Products=(/5,2,0,0/) -DSMC-Reaction11-Arrhenius-Prefactor=4.601E-15 -DSMC-Reaction11-Arrhenius-Powerfactor=-0.546 -DSMC-Reaction11-Activation-Energy_K=0. -!Reaction12 (N2 + O --> NO + N) - -DSMC-Reaction12-Reactants=(/3,2,0/) -DSMC-Reaction12-Products=(/5,1,0,0/) -DSMC-Reaction12-Arrhenius-Prefactor=1.069E-12 -DSMC-Reaction12-Arrhenius-Powerfactor=-1.0 -DSMC-Reaction12-Activation-Energy_K=37500.0 -!Reaction13 (NO + N --> N2 + O) - -DSMC-Reaction13-Reactants=(/5,1,0/) -DSMC-Reaction13-Products=(/3,2,0,0/) -DSMC-Reaction13-Arrhenius-Prefactor=4.059E-12 -DSMC-Reaction13-Arrhenius-Powerfactor=-1.359 -DSMC-Reaction13-Activation-Energy_K=0. -!Reaction14 (N + N --> N2+ + e ) - -DSMC-Reaction14-Reactants=(/1,1,0/) -DSMC-Reaction14-Products=(/8,11,0,0/) -DSMC-Reaction14-Arrhenius-Prefactor=3.387E-17 -DSMC-Reaction14-Arrhenius-Powerfactor=0. -DSMC-Reaction14-Activation-Energy_K=67700 -!Reaction15 (N2+ + e --> N + N ) - -DSMC-Reaction15-Reactants=(/8,11,0/) -DSMC-Reaction15-Products=(/1,1,0,0/) -DSMC-Reaction15-Arrhenius-Prefactor=7.274E-12 -DSMC-Reaction15-Arrhenius-Powerfactor=-0.65 -DSMC-Reaction15-Activation-Energy_K=0. -!Reaction16 (O + O --> O2+ + e ) - -DSMC-Reaction16-Reactants=(/2,2,0/) -DSMC-Reaction16-Products=(/9,11,0,0/) -DSMC-Reaction16-Arrhenius-Prefactor=1.859E-17 -DSMC-Reaction16-Arrhenius-Powerfactor=0. -DSMC-Reaction16-Activation-Energy_K=81200 -!Reaction17 (O2+ + e --> O + O ) - -DSMC-Reaction17-Reactants=(/9,11,0/) -DSMC-Reaction17-Products=(/2,2,0,0/) -DSMC-Reaction17-Arrhenius-Prefactor=1.453E-4 -DSMC-Reaction17-Arrhenius-Powerfactor=-2.412 -DSMC-Reaction17-Activation-Energy_K=0. -!Reaction18 (N + O --> NO+ + e ) - -DSMC-Reaction18-Reactants=(/1,2,0/) -DSMC-Reaction18-Products=(/10,11,0,0/) -DSMC-Reaction18-Arrhenius-Prefactor=8.766E-18 -DSMC-Reaction18-Arrhenius-Powerfactor=0. -DSMC-Reaction18-Activation-Energy_K=32000 -!Reaction19 (NO+ + e --> N + O ) - -DSMC-Reaction19-Reactants=(/10,11,0/) -DSMC-Reaction19-Products=(/1,2,0,0/) -DSMC-Reaction19-Arrhenius-Prefactor=1.321E-9 -DSMC-Reaction19-Arrhenius-Powerfactor=-1.187 -DSMC-Reaction19-Activation-Energy_K=0. -!Reaction20 (O+ + N2 --> N2+ + O ) - -DSMC-Reaction20-Reactants=(/7,3,0/) -DSMC-Reaction20-Products=(/8,2,0,0/) -DSMC-Reaction20-Arrhenius-Prefactor=1.511E-18 -DSMC-Reaction20-Arrhenius-Powerfactor=0.36 -DSMC-Reaction20-Activation-Energy_K=22800 -!Reaction21 (N2+ + O --> O+ + N2 ) - -DSMC-Reaction21-Reactants=(/8,2,0/) -DSMC-Reaction21-Products=(/7,3,0,0/) -DSMC-Reaction21-Arrhenius-Prefactor=1.978E-18 -DSMC-Reaction21-Arrhenius-Powerfactor=0.109 -DSMC-Reaction21-Activation-Energy_K=0. -!Reaction22 (O+ + NO --> N+ + O2 ) - -DSMC-Reaction22-Reactants=(/7,5,0/) -DSMC-Reaction22-Products=(/6,4,0,0/) -DSMC-Reaction22-Arrhenius-Prefactor=2.324E-25 -DSMC-Reaction22-Arrhenius-Powerfactor=1.9 -DSMC-Reaction22-Activation-Energy_K=15300 -!Reaction23 (N+ + O2 --> O+ + NO ) - -DSMC-Reaction23-Reactants=(/6,4,0/) -DSMC-Reaction23-Products=(/7,5,0,0/) -DSMC-Reaction23-Arrhenius-Prefactor=2.443E-26 -DSMC-Reaction23-Arrhenius-Powerfactor=2.102 -DSMC-Reaction23-Activation-Energy_K=0. -!Reaction24 (NO+ + O2 --> O2+ + NO ) - -DSMC-Reaction24-Reactants=(/10,4,0/) -DSMC-Reaction24-Products=(/9,5,0,0/) -DSMC-Reaction24-Arrhenius-Prefactor=3.985E-17 -DSMC-Reaction24-Arrhenius-Powerfactor=0.410 -DSMC-Reaction24-Activation-Energy_K=32600 -!Reaction25 (O2+ + NO --> NO+ + O2 ) - -DSMC-Reaction25-Reactants=(/9,5,0/) -DSMC-Reaction25-Products=(/10,4,0,0/) -DSMC-Reaction25-Arrhenius-Prefactor=6.195E-16 -DSMC-Reaction25-Arrhenius-Powerfactor=-0.050 -DSMC-Reaction25-Activation-Energy_K=0. -!Reaction26 (NO+ + N --> N2+ + O ) - -DSMC-Reaction26-Reactants=(/10,1,0/) -DSMC-Reaction26-Products=(/8,2,0,0/) -DSMC-Reaction26-Arrhenius-Prefactor=1.195E-16 -DSMC-Reaction26-Arrhenius-Powerfactor=0. -DSMC-Reaction26-Activation-Energy_K=35500 -!Reaction27 (N2+ + O --> NO+ + N ) - -DSMC-Reaction27-Reactants=(/8,2,0/) -DSMC-Reaction27-Products=(/10,1,0,0/) -DSMC-Reaction27-Arrhenius-Prefactor=1.744E-18 -DSMC-Reaction27-Arrhenius-Powerfactor=0.302 -DSMC-Reaction27-Activation-Energy_K=0. -!Reaction28 (NO+ + O --> N+ + O2 ) - -DSMC-Reaction28-Reactants=(/10,2,0/) -DSMC-Reaction28-Products=(/6,4,0,0/) -DSMC-Reaction28-Arrhenius-Prefactor=1.660E-18 -DSMC-Reaction28-Arrhenius-Powerfactor=0.5 -DSMC-Reaction28-Activation-Energy_K=77200 -!Reaction29 (N+ + O2 --> NO+ + O ) - -DSMC-Reaction29-Reactants=(/6,4,0/) -DSMC-Reaction29-Products=(/10,2,0,0/) -DSMC-Reaction29-Arrhenius-Prefactor=2.192E-17 -DSMC-Reaction29-Arrhenius-Powerfactor=0.114 -DSMC-Reaction29-Activation-Energy_K=0. -!Reaction30 (O2+ + N --> N+ + O2 ) - -DSMC-Reaction30-Reactants=(/9,1,0/) -DSMC-Reaction30-Products=(/4,6,0,0/) -DSMC-Reaction30-Arrhenius-Prefactor=1.444E-16 -DSMC-Reaction30-Arrhenius-Powerfactor=0.14 -DSMC-Reaction30-Activation-Energy_K=28600 -!Reaction31 (N+ + O2 --> O2+ + N ) - -DSMC-Reaction31-Reactants=(/4,6,0/) -DSMC-Reaction31-Products=(/9,1,0,0/) -DSMC-Reaction31-Arrhenius-Prefactor=4.993E-18 -DSMC-Reaction31-Arrhenius-Powerfactor=-0.004 -DSMC-Reaction31-Activation-Energy_K=0. -!Reaction32 (O2+ + N2 --> N2+ + O2 ) - -DSMC-Reaction32-Reactants=(/9,3,0/) -DSMC-Reaction32-Products=(/8,4,0,0/) -DSMC-Reaction32-Arrhenius-Prefactor=1.644E-17 -DSMC-Reaction32-Arrhenius-Powerfactor=0 -DSMC-Reaction32-Activation-Energy_K=40700 -!Reaction33 (N2+ + O2 --> O2+ + N2 ) - -DSMC-Reaction33-Reactants=(/8,4,0/) -DSMC-Reaction33-Products=(/9,3,0,0/) -DSMC-Reaction33-Arrhenius-Prefactor=4.589E-18 -DSMC-Reaction33-Arrhenius-Powerfactor=-0.037 -DSMC-Reaction33-Activation-Energy_K=0. -!Reaction34 (NO+ + N --> O+ + N2 ) - -DSMC-Reaction34-Reactants=(/10,1,0/) -DSMC-Reaction34-Products=(/7,3,0,0/) -DSMC-Reaction34-Arrhenius-Prefactor=5.645E-17 -DSMC-Reaction34-Arrhenius-Powerfactor=-1.08 -DSMC-Reaction34-Activation-Energy_K=12800 -!Reaction35 (O+ + N2 --> NO+ + N ) - -DSMC-Reaction35-Reactants=(/7,3,0/) -DSMC-Reaction35-Products=(/10,1,0,0/) -DSMC-Reaction35-Arrhenius-Prefactor=3.970E-18 -DSMC-Reaction35-Arrhenius-Powerfactor=-0.71 -DSMC-Reaction35-Activation-Energy_K=0. -!Reaction36 (NO+ + O --> O2+ + N ) - -DSMC-Reaction36-Reactants=(/10,2,0/) -DSMC-Reaction36-Products=(/9,1,0,0/) -DSMC-Reaction36-Arrhenius-Prefactor=1.195E-17 -DSMC-Reaction36-Arrhenius-Powerfactor=0.29 -DSMC-Reaction36-Activation-Energy_K=48600 -!Reaction37 (O2+ + N --> NO+ + O ) - -DSMC-Reaction37-Reactants=(/9,1,0/) -DSMC-Reaction37-Products=(/10,2,0,0/) -DSMC-Reaction37-Arrhenius-Prefactor=8.918E-13 -DSMC-Reaction37-Arrhenius-Powerfactor=-0.969 -DSMC-Reaction37-Activation-Energy_K=0. -!Reaction38 (N+ + N2 --> N2+ + N ) - -DSMC-Reaction38-Reactants=(/6,3,0/) -DSMC-Reaction38-Products=(/8,1,0,0/) -DSMC-Reaction38-Arrhenius-Prefactor=1.660E-18 -DSMC-Reaction38-Arrhenius-Powerfactor=0.5 -DSMC-Reaction38-Activation-Energy_K=12100 -!Reaction39 (N2+ + N --> N+ + N2 ) - -DSMC-Reaction39-Reactants=(/8,1,0/) -DSMC-Reaction39-Products=(/6,3,0,0/) -DSMC-Reaction39-Arrhenius-Prefactor=2.343E-14 -DSMC-Reaction39-Arrhenius-Powerfactor=-0.61 -DSMC-Reaction39-Activation-Energy_K=0. -!Reaction40 (O2+ + O --> O2 + O+ ) - -DSMC-Reaction40-Reactants=(/9,2,0/) -DSMC-Reaction40-Products=(/4,7,0,0/) -DSMC-Reaction40-Arrhenius-Prefactor=6.641E-18 -DSMC-Reaction40-Arrhenius-Powerfactor=-0.09 -DSMC-Reaction40-Activation-Energy_K=18600 -!Reaction41 (O2 + O+ --> O2+ + O ) - -DSMC-Reaction41-Reactants=(/4,7,0/) -DSMC-Reaction41-Products=(/9,2,0,0/) -DSMC-Reaction41-Arrhenius-Prefactor=4.993E-18 -DSMC-Reaction41-Arrhenius-Powerfactor=-0.004 -DSMC-Reaction41-Activation-Energy_K=0. -!Reaction42 (N + e --> N+ + e + e ) -DSMC-Reaction42-Reactants=(/1,11,0/) -DSMC-Reaction42-Products=(/6,11,11,0/) -DSMC-Reaction42-Arrhenius-Prefactor=8.434E-14 -DSMC-Reaction42-Arrhenius-Powerfactor=0. -DSMC-Reaction42-Activation-Energy_K=121600 -!Reaction43 (O + e --> O+ + e + e ) -DSMC-Reaction43-Reactants=(/2,11,0/) -DSMC-Reaction43-Products=(/7,11,11,0/) -DSMC-Reaction43-Arrhenius-Prefactor=1.054E-14 -DSMC-Reaction43-Arrhenius-Powerfactor=0. -DSMC-Reaction43-Activation-Energy_K=106200 - -! Fe reactions -!Reaction44 (Fe + NO+ --> Fe+ + NO ) -DSMC-Reaction44-Reactants=(/12,10,0/) -DSMC-Reaction44-Products=(/13,5,0,0/) -DSMC-Reaction44-Arrhenius-Prefactor=9.2E-16 -DSMC-Reaction44-Arrhenius-Powerfactor=0. -DSMC-Reaction44-Activation-Energy_K=0. -!Reaction45 (Fe + O2+ --> Fe+ + O2 ) -DSMC-Reaction45-Reactants=(/12,9,0/) -DSMC-Reaction45-Products=(/13,4,0,0/) -DSMC-Reaction45-Arrhenius-Prefactor=1.1E-15 -DSMC-Reaction45-Arrhenius-Powerfactor=0. -DSMC-Reaction45-Activation-Energy_K=0. -!Reaction46 (Fe + e --> Fe+ + e + e ) -DSMC-Reaction46-Reactants=(/12,11,0/) -DSMC-Reaction46-Products=(/13,11,11,0/) -DSMC-Reaction46-Arrhenius-Prefactor=5.42019182E-13 -DSMC-Reaction46-Arrhenius-Powerfactor=-8.17E-2 -DSMC-Reaction46-Activation-Energy_K=1.272E5 diff --git a/tools/species_database/Air_11Spec_27Reac_Park1993.ini b/tools/species_database/Air_11Spec_27Reac_Park1993.ini index e95464061..ba024bdd4 100755 --- a/tools/species_database/Air_11Spec_27Reac_Park1993.ini +++ b/tools/species_database/Air_11Spec_27Reac_Park1993.ini @@ -8,27 +8,27 @@ ! =============================================================================== ! Part-Species1-SpeciesName=N Part-Species1-InteractionID = 1 -Part-Species1-VHSReferenceTemp =273 ! K -Part-Species1-VHSReferenceDiam = 3.0E-10 ! m -Part-Species1-omegaVHS=0.24 +Part-Species1-Tref =273 ! K +Part-Species1-dref = 3.0E-10 ! m +Part-Species1-omega=0.24 Part-Species1-HeatOfFormation_K=56850.30 ! =============================================================================== ! ! Species2, O ! =============================================================================== ! Part-Species2-SpeciesName=O Part-Species2-InteractionID = 1 -Part-Species2-VHSReferenceTemp =273 -Part-Species2-VHSReferenceDiam = 3.0E-10 -Part-Species2-omegaVHS=0.24 +Part-Species2-Tref =273 +Part-Species2-dref = 3.0E-10 +Part-Species2-omega=0.24 Part-Species2-HeatOfFormation_K=29969.45 ! =============================================================================== ! ! Species3, N2 ! =============================================================================== ! Part-Species3-SpeciesName=N2 Part-Species3-InteractionID = 2 -Part-Species3-VHSReferenceTemp =273 -Part-Species3-VHSReferenceDiam = 4.07E-10 -Part-Species3-omegaVHS=0.24 +Part-Species3-Tref =273 +Part-Species3-dref = 4.07E-10 +Part-Species3-omega=0.24 Part-Species3-CharaTempVib=3393.3 Part-Species3-Ediss_eV=9.759 Part-Species3-CharaTempRot = 2.87 @@ -39,9 +39,9 @@ Part-Species3-HeatOfFormation_K=0.0 ! =============================================================================== ! Part-Species4-SpeciesName=O2 Part-Species4-InteractionID = 2 -Part-Species4-VHSReferenceTemp =273 -Part-Species4-VHSReferenceDiam = 3.96E-10 -Part-Species4-omegaVHS=0.24 +Part-Species4-Tref =273 +Part-Species4-dref = 3.96E-10 +Part-Species4-omega=0.24 Part-Species4-CharaTempVib=2272.8 Part-Species4-Ediss_eV=5.115 Part-Species4-CharaTempRot = 2.1 @@ -52,9 +52,9 @@ Part-Species4-HeatOfFormation_K=0.0 ! =============================================================================== ! Part-Species5-SpeciesName=NO Part-Species5-InteractionID = 2 -Part-Species5-VHSReferenceTemp =273 -Part-Species5-VHSReferenceDiam = 4.00E-10 -Part-Species5-omegaVHS=0.24 +Part-Species5-Tref =273 +Part-Species5-dref = 4.00E-10 +Part-Species5-omega=0.24 Part-Species5-CharaTempVib=2738.8 Part-Species5-Ediss_eV=6.496 Part-Species5-CharaTempRot = 2.4 @@ -65,27 +65,27 @@ Part-Species5-HeatOfFormation_K=10859.38 ! =============================================================================== ! Part-Species6-SpeciesName=NIon1 Part-Species6-InteractionID = 10 -Part-Species6-VHSReferenceTemp =273 -Part-Species6-VHSReferenceDiam = 3.0E-10 -Part-Species6-omegaVHS=0.24 +Part-Species6-Tref =273 +Part-Species6-dref = 3.0E-10 +Part-Species6-omega=0.24 Part-Species6-PreviousState=1 ! =============================================================================== ! ! Species7, O+ ! =============================================================================== ! Part-Species7-SpeciesName=OIon1 Part-Species7-InteractionID = 10 -Part-Species7-VHSReferenceTemp =273 -Part-Species7-VHSReferenceDiam = 3.0E-10 -Part-Species7-omegaVHS=0.24 +Part-Species7-Tref =273 +Part-Species7-dref = 3.0E-10 +Part-Species7-omega=0.24 Part-Species7-PreviousState=2 ! =============================================================================== ! ! Species8, N2+ ! =============================================================================== ! Part-Species8-SpeciesName=N2Ion1 Part-Species8-InteractionID = 20 -Part-Species8-VHSReferenceTemp =273 -Part-Species8-VHSReferenceDiam = 4.07E-10 -Part-Species8-omegaVHS=0.24 +Part-Species8-Tref =273 +Part-Species8-dref = 4.07E-10 +Part-Species8-omega=0.24 Part-Species8-CharaTempVib=3174.7 Part-Species8-Ediss_eV=9.759 Part-Species8-CharaTempRot = 2.8 @@ -96,9 +96,9 @@ Part-Species8-PreviousState=3 ! =============================================================================== ! Part-Species9-SpeciesName=O2Ion1 Part-Species9-InteractionID = 20 -Part-Species9-VHSReferenceTemp =273 -Part-Species9-VHSReferenceDiam = 3.96E-10 -Part-Species9-omegaVHS=0.24 +Part-Species9-Tref =273 +Part-Species9-dref = 3.96E-10 +Part-Species9-omega=0.24 Part-Species9-CharaTempVib=2741.7 Part-Species9-Ediss_eV=5.115 Part-Species9-CharaTempRot = 2.4 @@ -109,9 +109,9 @@ Part-Species9-PreviousState=4 ! =============================================================================== ! Part-Species10-SpeciesName=NOIon1 Part-Species10-InteractionID = 20 -Part-Species10-VHSReferenceTemp =273 -Part-Species10-VHSReferenceDiam = 4.00E-10 -Part-Species10-omegaVHS=0.24 +Part-Species10-Tref =273 +Part-Species10-dref = 4.00E-10 +Part-Species10-omega=0.24 Part-Species10-CharaTempVib=3419.2 Part-Species10-Ediss_eV=6.496 Part-Species10-CharaTempRot = 2.9 @@ -122,9 +122,9 @@ Part-Species10-PreviousState=5 ! =============================================================================== ! Part-Species11-SpeciesName = electron Part-Species11-InteractionID = 4 -Part-Species11-VHSReferenceTemp =273 -Part-Species11-VHSReferenceDiam = 2.817920E-15 -Part-Species11-omegaVHS=0.24 +Part-Species11-Tref =273 +Part-Species11-dref = 2.817920E-15 +Part-Species11-omega=0.24 ! =============================================================================== ! ! Data for chemical Reaction ! =============================================================================== ! diff --git a/tools/species_database/Air_11Spec_51Reac_Park1993.ini b/tools/species_database/Air_11Spec_51Reac_Park1993.ini index c5dc2ada2..98ef208ce 100755 --- a/tools/species_database/Air_11Spec_51Reac_Park1993.ini +++ b/tools/species_database/Air_11Spec_51Reac_Park1993.ini @@ -8,27 +8,27 @@ ! =============================================================================== ! Part-Species1-SpeciesName=N Part-Species1-InteractionID = 1 -Part-Species1-VHSReferenceTemp = 288 ! K -Part-Species1-VHSReferenceDiam = 3.0E-10 ! m -Part-Species1-omegaVHS=0.2 +Part-Species1-Tref = 288 ! K +Part-Species1-dref = 3.0E-10 ! m +Part-Species1-omega=0.2 Part-Species1-HeatOfFormation_K=56850.30 ! =============================================================================== ! ! Species2, O ! =============================================================================== ! Part-Species2-SpeciesName=O Part-Species2-InteractionID = 1 -Part-Species2-VHSReferenceTemp = 288 -Part-Species2-VHSReferenceDiam = 3.0E-10 -Part-Species2-omegaVHS=0.2 +Part-Species2-Tref = 288 +Part-Species2-dref = 3.0E-10 +Part-Species2-omega=0.2 Part-Species2-HeatOfFormation_K=29969.45 ! =============================================================================== ! ! Species3, N2 ! =============================================================================== ! Part-Species3-SpeciesName=N2 Part-Species3-InteractionID = 2 -Part-Species3-VHSReferenceTemp = 288 -Part-Species3-VHSReferenceDiam = 4.07E-10 -Part-Species3-omegaVHS=0.2 +Part-Species3-Tref = 288 +Part-Species3-dref = 4.07E-10 +Part-Species3-omega=0.2 Part-Species3-CharaTempVib=3393.3 Part-Species3-Ediss_eV=9.759 Part-Species3-CharaTempRot = 2.87 @@ -39,9 +39,9 @@ Part-Species3-HeatOfFormation_K=0.0 ! =============================================================================== ! Part-Species4-SpeciesName=O2 Part-Species4-InteractionID = 2 -Part-Species4-VHSReferenceTemp = 288 -Part-Species4-VHSReferenceDiam = 3.96E-10 -Part-Species4-omegaVHS=0.2 +Part-Species4-Tref = 288 +Part-Species4-dref = 3.96E-10 +Part-Species4-omega=0.2 Part-Species4-CharaTempVib=2272.8 Part-Species4-Ediss_eV=5.115 Part-Species4-CharaTempRot = 2.1 @@ -52,9 +52,9 @@ Part-Species4-HeatOfFormation_K=0.0 ! =============================================================================== ! Part-Species5-SpeciesName=NO Part-Species5-InteractionID = 2 -Part-Species5-VHSReferenceTemp = 288 -Part-Species5-VHSReferenceDiam = 4.00E-10 -Part-Species5-omegaVHS=0.2 +Part-Species5-Tref = 288 +Part-Species5-dref = 4.00E-10 +Part-Species5-omega=0.2 Part-Species5-CharaTempVib=2738.8 Part-Species5-Ediss_eV=6.496 Part-Species5-CharaTempRot = 2.4 @@ -65,27 +65,27 @@ Part-Species5-HeatOfFormation_K=10859.38 ! =============================================================================== ! Part-Species6-SpeciesName=NIon1 Part-Species6-InteractionID = 10 -Part-Species6-VHSReferenceTemp = 288 -Part-Species6-VHSReferenceDiam = 3.0E-10 -Part-Species6-omegaVHS=0.2 +Part-Species6-Tref = 288 +Part-Species6-dref = 3.0E-10 +Part-Species6-omega=0.2 Part-Species6-HeatOfFormation_K=56850.30 ! =============================================================================== ! ! Species7, O+ ! =============================================================================== ! Part-Species7-SpeciesName=OIon1 Part-Species7-InteractionID = 10 -Part-Species7-VHSReferenceTemp = 288 -Part-Species7-VHSReferenceDiam = 3.0E-10 -Part-Species7-omegaVHS=0.2 +Part-Species7-Tref = 288 +Part-Species7-dref = 3.0E-10 +Part-Species7-omega=0.2 Part-Species7-HeatOfFormation_K=29969.45 ! =============================================================================== ! ! Species8, N2+ ! =============================================================================== ! Part-Species8-SpeciesName=N2Ion1 Part-Species8-InteractionID = 20 -Part-Species8-VHSReferenceTemp = 288 -Part-Species8-VHSReferenceDiam = 4.07E-10 -Part-Species8-omegaVHS=0.2 +Part-Species8-Tref = 288 +Part-Species8-dref = 4.07E-10 +Part-Species8-omega=0.2 Part-Species8-CharaTempVib=3174.7 Part-Species8-Ediss_eV=9.759 Part-Species8-CharaTempRot = 2.8 @@ -96,9 +96,9 @@ Part-Species8-HeatOfFormation_K=0.0 ! =============================================================================== ! Part-Species9-SpeciesName=O2Ion1 Part-Species9-InteractionID = 20 -Part-Species9-VHSReferenceTemp = 288 -Part-Species9-VHSReferenceDiam = 3.96E-10 -Part-Species9-omegaVHS=0.2 +Part-Species9-Tref = 288 +Part-Species9-dref = 3.96E-10 +Part-Species9-omega=0.2 Part-Species9-CharaTempVib=2741.7 Part-Species9-Ediss_eV=5.115 Part-Species9-CharaTempRot = 2.4 @@ -109,9 +109,9 @@ Part-Species9-HeatOfFormation_K=0.0 ! =============================================================================== ! Part-Species10-SpeciesName=NOIon1 Part-Species10-InteractionID = 20 -Part-Species10-VHSReferenceTemp = 288 -Part-Species10-VHSReferenceDiam = 4.00E-10 -Part-Species10-omegaVHS=0.2 +Part-Species10-Tref = 288 +Part-Species10-dref = 4.00E-10 +Part-Species10-omega=0.2 Part-Species10-CharaTempVib=3419.2 Part-Species10-Ediss_eV=6.496 Part-Species10-CharaTempRot = 2.9 @@ -122,9 +122,9 @@ Part-Species10-HeatOfFormation_K=10859.38 ! =============================================================================== ! Part-Species11-SpeciesName = electron Part-Species11-InteractionID = 4 -Part-Species11-VHSReferenceTemp = 288 -Part-Species11-VHSReferenceDiam = 2.817920E-15 -Part-Species11-omegaVHS=0.24 +Part-Species11-Tref = 288 +Part-Species11-dref = 2.817920E-15 +Part-Species11-omega=0.24 Part-Species11-HeatOfFormation_K=0.0 ! =============================================================================== ! ! Data for chemical Reaction diff --git a/tools/species_database/CH4-Ar_8Spec_7Reac.ini b/tools/species_database/CH4-Ar_8Spec_7Reac.ini index 22bd3295f..9ed7559f4 100755 --- a/tools/species_database/CH4-Ar_8Spec_7Reac.ini +++ b/tools/species_database/CH4-Ar_8Spec_7Reac.ini @@ -4,9 +4,9 @@ Part-Species1-SpeciesName=CH4 Part-Species1-PolyatomicMol=true Part-Species1-InteractionID=2 -Part-Species1-VHSReferenceTemp=273 -Part-Species1-VHSReferenceDiam=4.63E-10 -Part-Species1-omegaVHS=0.24 +Part-Species1-Tref=273 +Part-Species1-dref=4.63E-10 +Part-Species1-omega=0.24 Part-Species1-NumOfAtoms=5 Part-Species1-LinearMolec=.false. Part-Species1-CharaTempVib1=4194.9 @@ -30,9 +30,9 @@ Part-Species1-SymmetryFactor = 12 Part-Species2-SpeciesName=CH3 Part-Species2-PolyatomicMol=true Part-Species2-InteractionID=2 -Part-Species2-VHSReferenceTemp=273 -Part-Species2-VHSReferenceDiam=4.55E-10 -Part-Species2-omegaVHS=0.24 +Part-Species2-Tref=273 +Part-Species2-dref=4.55E-10 +Part-Species2-omega=0.24 Part-Species2-NumOfAtoms=4 Part-Species2-LinearMolec=.false. Part-Species2-CharaTempVib1=4320.6 @@ -53,9 +53,9 @@ Part-Species2-SymmetryFactor = 6 Part-Species3-SpeciesName=CH2 Part-Species3-PolyatomicMol=true Part-Species3-InteractionID=2 -Part-Species3-VHSReferenceTemp=273 -Part-Species3-VHSReferenceDiam=4.47E-10 -Part-Species3-omegaVHS=0.24 +Part-Species3-Tref=273 +Part-Species3-dref=4.47E-10 +Part-Species3-omega=0.24 Part-Species3-NumOfAtoms=3 Part-Species3-LinearMolec=.false. Part-Species3-CharaTempVib1=4035.3 @@ -72,9 +72,9 @@ Part-Species3-SymmetryFactor = 2 ! =============================================================================== ! Part-Species4-SpeciesName=CH Part-Species4-InteractionID = 2 -Part-Species4-VHSReferenceTemp = 273 -Part-Species4-VHSReferenceDiam = 4.39E-10 -Part-Species4-omegaVHS=0.24 +Part-Species4-Tref = 273 +Part-Species4-dref = 4.39E-10 +Part-Species4-omega=0.24 Part-Species4-CharaTempVib=4314.3 Part-Species4-Ediss_eV=3.49 Part-Species4-HeatOfFormation_K=71440.92 @@ -85,9 +85,9 @@ Part-Species4-SymmetryFactor = 1 ! =============================================================================== ! Part-Species5-SpeciesName=H2 Part-Species5-InteractionID = 2 -Part-Species5-VHSReferenceTemp = 273 -Part-Species5-VHSReferenceDiam = 3.06E-10 -Part-Species5-omegaVHS=0.24 +Part-Species5-Tref = 273 +Part-Species5-dref = 3.06E-10 +Part-Species5-omega=0.24 Part-Species5-CharaTempVib=6329.0 Part-Species5-Ediss_eV=4.50 Part-Species5-HeatOfFormation_K=0.0 @@ -98,27 +98,27 @@ Part-Species5-SymmetryFactor = 2 ! =============================================================================== ! Part-Species6-SpeciesName=C Part-Species6-InteractionID = 1 -Part-Species6-VHSReferenceTemp = 273 -Part-Species6-VHSReferenceDiam = 3.26E-10 -Part-Species6-omegaVHS=0.24 +Part-Species6-Tref = 273 +Part-Species6-dref = 3.26E-10 +Part-Species6-omega=0.24 Part-Species6-HeatOfFormation_K=86175.70 ! =============================================================================== ! ! Species7, H ! =============================================================================== ! Part-Species7-SpeciesName=H Part-Species7-InteractionID = 1 -Part-Species7-VHSReferenceTemp = 273 -Part-Species7-VHSReferenceDiam = 2.03E-10 -Part-Species7-omegaVHS=0.24 +Part-Species7-Tref = 273 +Part-Species7-dref = 2.03E-10 +Part-Species7-omega=0.24 Part-Species7-HeatOfFormation_K=26213.32 ! =============================================================================== ! ! Species8, Ar ! =============================================================================== ! Part-Species8-SpeciesName=Ar Part-Species8-InteractionID = 1 -Part-Species8-VHSReferenceTemp = 273 -Part-Species8-VHSReferenceDiam = 4.05E-10 -Part-Species8-omegaVHS=0.24 +Part-Species8-Tref = 273 +Part-Species8-dref = 4.05E-10 +Part-Species8-omega=0.24 Part-Species8-HeatOfFormation_K=0.0 ! =============================================================================== ! ! Data for chemical Reaction diff --git a/tools/species_database/CH4_7Spec_7Reac.ini b/tools/species_database/CH4_7Spec_7Reac.ini index 4b3784229..6e5a87a71 100755 --- a/tools/species_database/CH4_7Spec_7Reac.ini +++ b/tools/species_database/CH4_7Spec_7Reac.ini @@ -4,9 +4,9 @@ Part-Species1-SpeciesName=CH4 Part-Species1-PolyatomicMol=true Part-Species1-InteractionID=2 -Part-Species1-VHSReferenceTemp=273 -Part-Species1-VHSReferenceDiam=4.63E-10 -Part-Species1-omegaVHS=0.24 +Part-Species1-Tref=273 +Part-Species1-dref=4.63E-10 +Part-Species1-omega=0.24 Part-Species1-NumOfAtoms=5 Part-Species1-LinearMolec=.false. Part-Species1-CharaTempVib1=4194.9 @@ -30,9 +30,9 @@ Part-Species1-SymmetryFactor = 12 Part-Species2-SpeciesName=CH3 Part-Species2-PolyatomicMol=true Part-Species2-InteractionID=2 -Part-Species2-VHSReferenceTemp=273 -Part-Species2-VHSReferenceDiam=4.55E-10 -Part-Species2-omegaVHS=0.24 +Part-Species2-Tref=273 +Part-Species2-dref=4.55E-10 +Part-Species2-omega=0.24 Part-Species2-NumOfAtoms=4 Part-Species2-LinearMolec=.false. Part-Species2-CharaTempVib1=4320.6 @@ -53,9 +53,9 @@ Part-Species2-SymmetryFactor = 6 Part-Species3-SpeciesName=CH2 Part-Species3-PolyatomicMol=true Part-Species3-InteractionID=2 -Part-Species3-VHSReferenceTemp=273 -Part-Species3-VHSReferenceDiam=4.47E-10 -Part-Species3-omegaVHS=0.24 +Part-Species3-Tref=273 +Part-Species3-dref=4.47E-10 +Part-Species3-omega=0.24 Part-Species3-NumOfAtoms=3 Part-Species3-LinearMolec=.false. Part-Species3-CharaTempVib1=4035.3 @@ -72,9 +72,9 @@ Part-Species3-SymmetryFactor = 2 ! =============================================================================== ! Part-Species4-SpeciesName=CH Part-Species4-InteractionID = 2 -Part-Species4-VHSReferenceTemp = 273 -Part-Species4-VHSReferenceDiam = 4.39E-10 -Part-Species4-omegaVHS=0.24 +Part-Species4-Tref = 273 +Part-Species4-dref = 4.39E-10 +Part-Species4-omega=0.24 Part-Species4-CharaTempVib=4314.3 Part-Species4-Ediss_eV=3.49 Part-Species4-HeatOfFormation_K=71440.92 @@ -85,9 +85,9 @@ Part-Species4-SymmetryFactor = 1 ! =============================================================================== ! Part-Species5-SpeciesName=H2 Part-Species5-InteractionID = 2 -Part-Species5-VHSReferenceTemp = 273 -Part-Species5-VHSReferenceDiam = 3.06E-10 -Part-Species5-omegaVHS=0.24 +Part-Species5-Tref = 273 +Part-Species5-dref = 3.06E-10 +Part-Species5-omega=0.24 Part-Species5-CharaTempVib=6329.0 Part-Species5-Ediss_eV=4.50 Part-Species5-HeatOfFormation_K=0.0 @@ -98,18 +98,18 @@ Part-Species5-SymmetryFactor = 2 ! =============================================================================== ! Part-Species6-SpeciesName=C Part-Species6-InteractionID = 1 -Part-Species6-VHSReferenceTemp = 273 -Part-Species6-VHSReferenceDiam = 3.26E-10 -Part-Species6-omegaVHS=0.24 +Part-Species6-Tref = 273 +Part-Species6-dref = 3.26E-10 +Part-Species6-omega=0.24 Part-Species6-HeatOfFormation_K=86175.70 ! =============================================================================== ! ! Species7, H ! =============================================================================== ! Part-Species7-SpeciesName=H Part-Species7-InteractionID = 1 -Part-Species7-VHSReferenceTemp = 273 -Part-Species7-VHSReferenceDiam = 2.03E-10 -Part-Species7-omegaVHS=0.24 +Part-Species7-Tref = 273 +Part-Species7-dref = 2.03E-10 +Part-Species7-omega=0.24 Part-Species7-HeatOfFormation_K=26213.32 ! =============================================================================== ! ! Data for chemical Reaction diff --git a/tools/species_database/Fe-in-Air_7Spec_3Reac_Voronov1997Plane2015.ini b/tools/species_database/Fe-in-Air_7Spec_3Reac_Voronov1997Plane2015.ini new file mode 100644 index 000000000..42673cdcd --- /dev/null +++ b/tools/species_database/Fe-in-Air_7Spec_3Reac_Voronov1997Plane2015.ini @@ -0,0 +1,172 @@ +! ======================================================================= +! Data for air taken from +! Species: G. A. Bird, Nonequilibrium radiation during re-entry at 10 km/s, AIAA-Paper 87-1543 +! Reactions: +! Iron: G. Voronov. A practical fit formula for ionization rate coefficients of atoms and ions by electron impact: Z= 1–28. Atomic Data and Nuclear Data Tables, 65(1):1–35, 1997. and J. M. Plane, W. Feng, and E. C. Dawkins. The mesosphere and metals: Chemistry and changes. Chemical reviews, 115(10):4497–4541, 2015. +! ======================================================================= +! =============================================================================== ! +! Species1, N +! =============================================================================== ! +Part-Species1-SpeciesName=N +Part-Species1-InteractionID = 1 +Part-Species1-Tref =273 ! K +Part-Species1-dref = 3.0E-10 ! m +Part-Species1-omega=0.24 +Part-Species1-HeatOfFormation_K=56850.30 +! =============================================================================== ! +! Species2, O +! =============================================================================== ! +Part-Species2-SpeciesName=O +Part-Species2-InteractionID = 1 +Part-Species2-Tref =273 +Part-Species2-dref = 3.0E-10 +Part-Species2-omega=0.24 +Part-Species2-HeatOfFormation_K=29969.45 +! =============================================================================== ! +! Species3, N2 +! =============================================================================== ! +Part-Species3-SpeciesName=N2 +Part-Species3-InteractionID = 2 +Part-Species3-Tref =273 +Part-Species3-dref = 4.07E-10 +Part-Species3-omega=0.24 +Part-Species3-CharaTempVib=3393.3 +Part-Species3-Ediss_eV=9.759 +Part-Species3-CharaTempRot = 2.87 +Part-Species3-SymmetryFactor = 2 +Part-Species3-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species4, O2 +! =============================================================================== ! +Part-Species4-SpeciesName=O2 +Part-Species4-InteractionID = 2 +Part-Species4-Tref =273 +Part-Species4-dref = 3.96E-10 +Part-Species4-omega=0.24 +Part-Species4-CharaTempVib=2272.8 +Part-Species4-Ediss_eV=5.115 +Part-Species4-CharaTempRot = 2.1 +Part-Species4-SymmetryFactor = 2 +Part-Species4-HeatOfFormation_K=0.0 +! =============================================================================== ! +! Species5, NO +! =============================================================================== ! +Part-Species5-SpeciesName=NO +Part-Species5-InteractionID = 2 +Part-Species5-Tref =273 +Part-Species5-dref = 4.00E-10 +Part-Species5-omega=0.24 +Part-Species5-CharaTempVib=2738.8 +Part-Species5-Ediss_eV=6.496 +Part-Species5-CharaTempRot = 2.4 +Part-Species5-SymmetryFactor = 1 +Part-Species5-HeatOfFormation_K=10859.38 +! =============================================================================== ! +! Species6, N+ +! =============================================================================== ! +Part-Species6-SpeciesName=NIon1 +Part-Species6-InteractionID = 10 +Part-Species6-Tref =273 +Part-Species6-dref = 3.0E-10 +Part-Species6-omega=0.24 +Part-Species6-PreviousState=1 +! =============================================================================== ! +! Species7, O+ +! =============================================================================== ! +Part-Species7-SpeciesName=OIon1 +Part-Species7-InteractionID = 10 +Part-Species7-Tref =273 +Part-Species7-dref = 3.0E-10 +Part-Species7-omega=0.24 +Part-Species7-PreviousState=2 +! =============================================================================== ! +! Species8, N2+ +! =============================================================================== ! +Part-Species8-SpeciesName=N2Ion1 +Part-Species8-InteractionID = 20 +Part-Species8-Tref =273 +Part-Species8-dref = 4.07E-10 +Part-Species8-omega=0.24 +Part-Species8-CharaTempVib=3174.7 +Part-Species8-Ediss_eV=9.759 +Part-Species8-CharaTempRot = 2.8 +Part-Species8-SymmetryFactor = 2 +Part-Species8-PreviousState=3 +! =============================================================================== ! +! Species9, O2+ +! =============================================================================== ! +Part-Species9-SpeciesName=O2Ion1 +Part-Species9-InteractionID = 20 +Part-Species9-Tref =273 +Part-Species9-dref = 3.96E-10 +Part-Species9-omega=0.24 +Part-Species9-CharaTempVib=2741.7 +Part-Species9-Ediss_eV=5.115 +Part-Species9-CharaTempRot = 2.4 +Part-Species9-SymmetryFactor = 2 +Part-Species9-PreviousState=4 +! =============================================================================== ! +! Species10, NO+ +! =============================================================================== ! +Part-Species10-SpeciesName=NOIon1 +Part-Species10-InteractionID = 20 +Part-Species10-Tref =273 +Part-Species10-dref = 4.00E-10 +Part-Species10-omega=0.24 +Part-Species10-CharaTempVib=3419.2 +Part-Species10-Ediss_eV=6.496 +Part-Species10-CharaTempRot = 2.9 +Part-Species10-SymmetryFactor = 1 +Part-Species10-PreviousState=5 +! =============================================================================== ! +! Species11, e +! =============================================================================== ! +Part-Species11-SpeciesName=electron +Part-Species11-InteractionID = 4 +Part-Species11-Tref =273 +Part-Species11-dref = 2.817920E-15 +Part-Species11-omega=0.24 +! =============================================================================== ! +! Species12, Fe +! =============================================================================== ! +Part-Species12-SpeciesName=Fe +Part-Species12-InteractionID = 1 +Part-Species12-Tref =1000 +Part-Species12-dref = 5.605E-10 +Part-Species12-omega=0.369 +Part-Species12-alpha=1.225 +Part-Species12-HeatOfFormation_K=56850.30 +! =============================================================================== ! +! Species13, Fe +! =============================================================================== ! +Part-Species13-SpeciesName=FeIon1 +Part-Species13-InteractionID = 10 +Part-Species13-Tref =1000 +Part-Species13-dref = 5.605E-10 +Part-Species13-omega=0.369 +Part-Species13-alpha=1.225 +Part-Species13-PreviousState=12 +! =============================================================================== ! +! Data for chemical Reaction +! =============================================================================== ! +DSMC-NumOfReactions=3 + +! Fe reactions +!Reaction1 (Fe + NO+ --> Fe+ + NO ) +DSMC-Reaction1-Reactants=(/12,10,0/) +DSMC-Reaction1-Products=(/13,5,0,0/) +DSMC-Reaction1-Arrhenius-Prefactor=9.2E-16 +DSMC-Reaction1-Arrhenius-Powerfactor=0. +DSMC-Reaction1-Activation-Energy_K=0. +!Reaction45 (Fe + O2+ --> Fe+ + O2 ) +DSMC-Reaction2-Reactants=(/12,9,0/) +DSMC-Reaction2-Products=(/13,4,0,0/) +DSMC-Reaction2-Arrhenius-Prefactor=1.1E-15 +DSMC-Reaction2-Arrhenius-Powerfactor=0. +DSMC-Reaction2-Activation-Energy_K=0. +!Reaction46 (Fe + e --> Fe+ + e + e ) +DSMC-Reaction3-Reactants=(/12,11,0/) +DSMC-Reaction3-Products=(/13,11,11,0/) +DSMC-Reaction3-Arrhenius-Prefactor=5.42019182E-13 +DSMC-Reaction3-Arrhenius-Powerfactor=-8.17E-2 +DSMC-Reaction3-Activation-Energy_K=1.272E5 diff --git a/tools/species_database/Mars_16Spec_31Reac_Park1994.ini b/tools/species_database/Mars_16Spec_31Reac_Park1994.ini index 6da9b25be..d58c82565 100755 --- a/tools/species_database/Mars_16Spec_31Reac_Park1994.ini +++ b/tools/species_database/Mars_16Spec_31Reac_Park1994.ini @@ -173,6 +173,7 @@ Part-Species14-HeatOfFormation_K=29969.45 ! =============================================================================== ! ! Species15, e ! =============================================================================== ! +Part-Species15-SpeciesName=electron Part-Species15-InteractionID = 4 Part-Species15-Tref =273 Part-Species15-dref = 2.817920E-15 diff --git a/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini b/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini index 3970c97b4..fd4575e55 100755 --- a/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini +++ b/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini @@ -186,6 +186,7 @@ Part-Species15-HeatOfFormation_K=10959.33 ! =============================================================================== ! ! Species16, e ! =============================================================================== ! +Part-Species16-SpeciesName=electron Part-Species16-InteractionID = 4 Part-Species16-Tref =273 Part-Species16-dref = 2.817920E-15 diff --git a/tools/species_database/REF_DSMC.ini b/tools/species_database/REF_DSMC.ini index b4394480f..5a662cacf 100644 --- a/tools/species_database/REF_DSMC.ini +++ b/tools/species_database/REF_DSMC.ini @@ -501,9 +501,9 @@ Part-Species34-SpeciesName=Ar Part-Species34-MassIC=6.6336270594E-26 Part-Species34-ChargeIC=0.0 Part-Species34-InteractionID = 1 -Part-Species34-VHSReferenceTemp = 273 -Part-Species34-VHSReferenceDiam = 4.05E-10 -Part-Species34-omegaVHS=0.24 +Part-Species34-Tref = 273 +Part-Species34-dref = 4.05E-10 +Part-Species34-omega=0.24 Part-Species34-HeatOfFormation_K=0.0 ! =============================================================================== ! ! Species35, CO+ @@ -512,9 +512,9 @@ Part-Species35-SpeciesName=COIon1 Part-Species35-MassIC=4.6511528655E-26 Part-Species35-ChargeIC=1.60217653E-19 Part-Species35-InteractionID=20 -Part-Species35-VHSReferenceTemp=273 -Part-Species35-VHSReferenceDiam=4.17E-10 -Part-Species35-omegaVHS=0.24 +Part-Species35-Tref=273 +Part-Species35-dref=4.17E-10 +Part-Species35-omega=0.24 Part-Species35-CharaTempVib=3120.7 Part-Species35-Ediss_eV=11.06 Part-Species35-HeatOfFormation_K=-13694.23 diff --git a/tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini b/tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini index 5eabfe193..66987a6e0 100755 --- a/tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini +++ b/tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini @@ -5,11 +5,12 @@ ! =============================================================================== ! ! Species1, CH4 ! =============================================================================== ! +Part-Species1-SpeciesName=CH4 Part-Species1-PolyatomicMol=true Part-Species1-InteractionID=2 -Part-Species1-VHSReferenceTemp=273 -Part-Species1-VHSReferenceDiam=4.63E-10 -Part-Species1-omegaVHS=0.24 +Part-Species1-Tref=273 +Part-Species1-dref=4.63E-10 +Part-Species1-omega=0.24 Part-Species1-NumOfAtoms=5 Part-Species1-LinearMolec=.false. Part-Species1-CharaTempVib1=4194.9 @@ -30,11 +31,12 @@ Part-Species1-SymmetryFactor = 12 ! =============================================================================== ! ! Species2, CH3 ! =============================================================================== ! +Part-Species2-SpeciesName=CH3 Part-Species2-PolyatomicMol=true Part-Species2-InteractionID=2 -Part-Species2-VHSReferenceTemp=273 -Part-Species2-VHSReferenceDiam=4.55E-10 -Part-Species2-omegaVHS=0.24 +Part-Species2-Tref=273 +Part-Species2-dref=4.55E-10 +Part-Species2-omega=0.24 Part-Species2-NumOfAtoms=4 Part-Species2-LinearMolec=.false. Part-Species2-CharaTempVib1=4320.6 @@ -52,11 +54,12 @@ Part-Species2-SymmetryFactor = 6 ! =============================================================================== ! ! Species3, CH2 ! =============================================================================== ! +Part-Species3-SpeciesName=CH2 Part-Species3-PolyatomicMol=true Part-Species3-InteractionID=2 -Part-Species3-VHSReferenceTemp=273 -Part-Species3-VHSReferenceDiam=4.47E-10 -Part-Species3-omegaVHS=0.24 +Part-Species3-Tref=273 +Part-Species3-dref=4.47E-10 +Part-Species3-omega=0.24 Part-Species3-NumOfAtoms=3 Part-Species3-LinearMolec=.false. Part-Species3-CharaTempVib1=4035.3 @@ -71,10 +74,11 @@ Part-Species3-SymmetryFactor = 2 ! =============================================================================== ! ! Species4, CH ! =============================================================================== ! +Part-Species4-SpeciesName=CH Part-Species4-InteractionID = 2 -Part-Species4-VHSReferenceTemp = 273 -Part-Species4-VHSReferenceDiam = 4.39E-10 -Part-Species4-omegaVHS=0.24 +Part-Species4-Tref = 273 +Part-Species4-dref = 4.39E-10 +Part-Species4-omega=0.24 Part-Species4-CharaTempVib=4314.3 Part-Species4-Ediss_eV=3.49 Part-Species4-HeatOfFormation_K=71440.92 @@ -83,10 +87,11 @@ Part-Species4-SymmetryFactor = 1 ! =============================================================================== ! ! Species5, N2 ! =============================================================================== ! +Part-Species5-SpeciesName=N2 Part-Species5-InteractionID = 2 -Part-Species5-VHSReferenceTemp = 273 -Part-Species5-VHSReferenceDiam = 4.17E-10 -Part-Species5-omegaVHS=0.24 +Part-Species5-Tref = 273 +Part-Species5-dref = 4.17E-10 +Part-Species5-omega=0.24 Part-Species5-CharaTempVib=3392.5 Part-Species5-Ediss_eV=9.79 Part-Species5-HeatOfFormation_K=0.0 @@ -95,10 +100,11 @@ Part-Species5-SymmetryFactor = 2 ! =============================================================================== ! ! Species6, C2 ! =============================================================================== ! +Part-Species6-SpeciesName=C2 Part-Species6-InteractionID = 2 -Part-Species6-VHSReferenceTemp = 273 -Part-Species6-VHSReferenceDiam = 4.88E-10 -Part-Species6-omegaVHS=0.24 +Part-Species6-Tref = 273 +Part-Species6-dref = 4.88E-10 +Part-Species6-omega=0.24 Part-Species6-CharaTempVib=2667.7 Part-Species6-Ediss_eV=6.26 Part-Species6-HeatOfFormation_K=100733.71 @@ -107,10 +113,11 @@ Part-Species6-SymmetryFactor = 2 ! =============================================================================== ! ! Species7, H2 ! =============================================================================== ! +Part-Species7-SpeciesName=H2 Part-Species7-InteractionID = 2 -Part-Species7-VHSReferenceTemp = 273 -Part-Species7-VHSReferenceDiam = 3.06E-10 -Part-Species7-omegaVHS=0.24 +Part-Species7-Tref = 273 +Part-Species7-dref = 3.06E-10 +Part-Species7-omega=0.24 Part-Species7-CharaTempVib=6329.0 Part-Species7-Ediss_eV=4.50 Part-Species7-HeatOfFormation_K=0.0 @@ -119,10 +126,11 @@ Part-Species7-SymmetryFactor = 2 ! =============================================================================== ! ! Species8, CN ! =============================================================================== ! +Part-Species8-SpeciesName=CN Part-Species8-InteractionID = 2 -Part-Species8-VHSReferenceTemp = 273 -Part-Species8-VHSReferenceDiam = 5.45E-10 -Part-Species8-omegaVHS=0.24 +Part-Species8-Tref = 273 +Part-Species8-dref = 5.45E-10 +Part-Species8-omega=0.24 Part-Species8-CharaTempVib=2975.4 Part-Species8-Ediss_eV=7.72 Part-Species8-HeatOfFormation_K=52323.23 @@ -131,10 +139,11 @@ Part-Species8-SymmetryFactor = 1 ! =============================================================================== ! ! Species9, HN ! =============================================================================== ! +Part-Species9-SpeciesName=NH Part-Species9-InteractionID = 2 -Part-Species9-VHSReferenceTemp = 273 -Part-Species9-VHSReferenceDiam = 4.64E-10 -Part-Species9-omegaVHS=0.24 +Part-Species9-Tref = 273 +Part-Species9-dref = 4.64E-10 +Part-Species9-omega=0.24 Part-Species9-CharaTempVib=4721.2 Part-Species9-Ediss_eV=4.02 Part-Species9-HeatOfFormation_K=45279.31 @@ -143,11 +152,12 @@ Part-Species9-SymmetryFactor = 1 ! =============================================================================== ! ! Species10, HCN ! =============================================================================== ! +Part-Species10-SpeciesName=HCN Part-Species10-PolyatomicMol=true Part-Species10-InteractionID = 2 -Part-Species10-VHSReferenceTemp = 273 -Part-Species10-VHSReferenceDiam = 3.94E-10 -Part-Species10-omegaVHS=0.24 +Part-Species10-Tref = 273 +Part-Species10-dref = 3.94E-10 +Part-Species10-omega=0.24 Part-Species10-NumOfAtoms=3 Part-Species10-LinearMolec=.true. Part-Species10-CharaTempVib1=4761.5 @@ -161,34 +171,38 @@ Part-Species10-SymmetryFactor = 1 ! =============================================================================== ! ! Species11, N ! =============================================================================== ! +Part-Species11-SpeciesName=N Part-Species11-InteractionID = 1 -Part-Species11-VHSReferenceTemp = 273 -Part-Species11-VHSReferenceDiam = 3.00E-10 -Part-Species11-omegaVHS=0.24 +Part-Species11-Tref = 273 +Part-Species11-dref = 3.00E-10 +Part-Species11-omega=0.24 Part-Species11-HeatOfFormation_K=56837.22 ! =============================================================================== ! ! Species12, C ! =============================================================================== ! +Part-Species12-SpeciesName=C Part-Species12-InteractionID = 1 -Part-Species12-VHSReferenceTemp = 273 -Part-Species12-VHSReferenceDiam = 4.67E-10 -Part-Species12-omegaVHS=0.24 +Part-Species12-Tref = 273 +Part-Species12-dref = 4.67E-10 +Part-Species12-omega=0.24 Part-Species12-HeatOfFormation_K=86175.70 ! =============================================================================== ! ! Species13, H ! =============================================================================== ! +Part-Species13-SpeciesName=H Part-Species13-InteractionID = 1 -Part-Species13-VHSReferenceTemp = 273 -Part-Species13-VHSReferenceDiam = 2.03E-10 -Part-Species13-omegaVHS=0.24 +Part-Species13-Tref = 273 +Part-Species13-dref = 2.03E-10 +Part-Species13-omega=0.24 Part-Species13-HeatOfFormation_K=26213.32 ! =============================================================================== ! ! Species14, Ar ! =============================================================================== ! +Part-Species14-SpeciesName=Ar Part-Species14-InteractionID = 1 -Part-Species14-VHSReferenceTemp = 273 -Part-Species14-VHSReferenceDiam = 4.05E-10 -Part-Species14-omegaVHS=0.24 +Part-Species14-Tref = 273 +Part-Species14-dref = 4.05E-10 +Part-Species14-omega=0.24 Part-Species14-HeatOfFormation_K=0.0 ! =============================================================================== ! ! Data for chemical Reaction diff --git a/tools/species_database/functions_database.py b/tools/species_database/functions_database.py index c14b5078a..ecbf7937f 100644 --- a/tools/species_database/functions_database.py +++ b/tools/species_database/functions_database.py @@ -12,15 +12,17 @@ def custom_sort_reactants(species_list): 'CH2', 'CH', 'CO2', - 'CO2Ion1' + 'CO2Ion1', 'CO', 'COIon1', 'HCN', 'CN', 'CNIon1', + 'C2', + 'C2Ion1', 'N2', 'N2Ion1', - 'N2O' + 'N2O', 'NO', 'NOIon1', 'NH3', @@ -38,9 +40,9 @@ def custom_sort_reactants(species_list): 'H2', 'H2Ion1', 'D2', - 'D2Ion1' + 'D2Ion1', 'HD', - 'HDIon1' + 'HDIon1', 'F2', 'HF', 'Cl2', @@ -61,7 +63,7 @@ def custom_sort_reactants(species_list): 'H', 'HIon1', 'D', - 'DIon1' + 'DIon1', 'Xe', 'XeIon1', 'Ar', @@ -101,15 +103,17 @@ def custom_sort_products(species_list): 'CH2', 'CH', 'CO2', - 'CO2Ion1' + 'CO2Ion1', 'CO', 'COIon1', 'HCN', 'CN', 'CNIon1', + 'C2', + 'C2Ion1', 'N2', 'N2Ion1', - 'N2O' + 'N2O', 'NO', 'NOIon1', 'NH3', @@ -127,9 +131,9 @@ def custom_sort_products(species_list): 'H2', 'H2Ion1', 'D2', - 'D2Ion1' + 'D2Ion1', 'HD', - 'HDIon1' + 'HDIon1', 'F2', 'HF', 'Cl2', @@ -150,7 +154,7 @@ def custom_sort_products(species_list): 'H', 'HIon1', 'D', - 'DIon1' + 'DIon1', 'Xe', 'XeIon1', 'Ar', From 8948d0fd9dfe9a42e8ed62122c045f3735de899f Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Wed, 2 Aug 2023 17:27:08 +0200 Subject: [PATCH 073/222] Fix bug electronic states --- tools/species_database/create_species_database.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tools/species_database/create_species_database.py b/tools/species_database/create_species_database.py index 6a492ab50..34f765219 100644 --- a/tools/species_database/create_species_database.py +++ b/tools/species_database/create_species_database.py @@ -110,8 +110,12 @@ def is_float(value): spec_dict[species_count] = hdf_species # Check if the species data already exists in the database if hdf_species in hdf_species_group.keys(): - print('Species already exists: ', hdf_species) - hdf_species = hdf_species_group[hdf_species] + if hdf_species in h5_electronic.keys(): + del hdf_species_group[hdf_species] + hdf_input_data = h5_electronic[hdf_species] + print('Electronic states added to the database: ', hdf_species) + hdf_species = hdf_species_group.create_dataset(hdf_species,data=hdf_input_data) + hdf_species.attrs['* Created'] = date.today().strftime("%B %d, %Y") elif hdf_species == 'electron': print('Species added to the database: ', hdf_species) hdf_species = hdf_species_group.create_dataset(hdf_species,data=[0]) @@ -120,7 +124,7 @@ def is_float(value): # Add the electronic state data if hdf_species in h5_electronic.keys(): hdf_input_data = h5_electronic[hdf_species] - print('Species added to the database: ', hdf_species) + print('Electronic states added to the database: ', hdf_species) hdf_species = hdf_species_group.create_dataset(hdf_species,data=hdf_input_data) hdf_species.attrs['* Created'] = date.today().strftime("%B %d, %Y") else: @@ -352,7 +356,7 @@ def is_float(value): hdf_reac.attrs['ChemistryModel'] = np.array(model_name_list,dtype='S255') # List of variables not added to the file -exclude_list = ['Reactants', 'Products', 'NumberOfNonReactives'] +exclude_list = ['NumberOfNonReactives'] with open(args.ini_filename) as file: for line in file: From 23033c921d30bb68aacd5526e688a60f6cdbb3df Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Wed, 2 Aug 2023 17:45:27 +0200 Subject: [PATCH 074/222] Store TCE model as S255 --- tools/species_database/create_species_database.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/species_database/create_species_database.py b/tools/species_database/create_species_database.py index 34f765219..201e7e614 100644 --- a/tools/species_database/create_species_database.py +++ b/tools/species_database/create_species_database.py @@ -357,6 +357,7 @@ def is_float(value): # List of variables not added to the file exclude_list = ['NumberOfNonReactives'] +str_list = ['ReactionModel'] with open(args.ini_filename) as file: for line in file: @@ -384,13 +385,15 @@ def is_float(value): for val in var_value: spec_name_list.append(spec_dict[val]) hdf_reac.attrs[var_name[1]] = np.array(spec_name_list,dtype='S255') + elif var_name[1] in str_list: + hdf_reac.attrs[var_name[1]] = np.array([var_value],dtype='S255') else: # All other parameters hdf_reac.attrs[var_name[1]] = var_value # If not defined, the standard reaction model is set to TCE print('Reaction parameter set: ', var_name[1]) if 'ReactionModel' not in hdf_reac.attrs: - hdf_reac.attrs['ReactionModel'] = 'TCE' + hdf_reac.attrs['ReactionModel'] = np.array(['TCE'],dtype='S255') # Write attributes for source and time of retrieval hdf_reac.attrs['* Reference'] = args.reference hdf_reac.attrs['* Created'] = date.today().strftime("%B %d, %Y") From 73ad87f1f6b9821a80bafc7fcbf51aeb1e59c1d1 Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Thu, 3 Aug 2023 10:23:17 +0200 Subject: [PATCH 075/222] Aborts for the create database function, if species are not defined --- .../create_species_database.py | 85 ++++++++++++------- 1 file changed, 52 insertions(+), 33 deletions(-) diff --git a/tools/species_database/create_species_database.py b/tools/species_database/create_species_database.py index 201e7e614..4c07e497c 100644 --- a/tools/species_database/create_species_database.py +++ b/tools/species_database/create_species_database.py @@ -5,15 +5,16 @@ from argparse import ArgumentParser from datetime import date import re +import sys from functions_database import custom_sort_reactants, custom_sort_products parser = ArgumentParser(prog='create_species_database') parser.add_argument("-p", "--parameter", dest="ini_filename", help="DSMC.ini file to read-in parameters", metavar="FILE", default="DSMC.ini") parser.add_argument("-e", "--electronic", dest="database_electronic", - help="Electronic excitation database to read-in parameters", metavar="FILE", default="Electronic-State-Database.h5") + help="Electronic excitation database to read-in parameters", metavar="FILE", default="") parser.add_argument("-c", "--crosssection", dest="database_crosssection", - help="Crosssection database to read-in parameters", metavar="FILE", default="XSec_Database.h5") + help="Crosssection database to read-in parameters", metavar="FILE", default="") parser.add_argument("-o", "--output", dest="database_output", help="Output file name", metavar="FILE", default="SpeciesDatabase.h5") parser.add_argument("-r", "--reference", dest="reference", @@ -24,8 +25,13 @@ args = parser.parse_args() h5_species = h5py.File(args.database_output, 'a') -h5_electronic = h5py.File(args.database_electronic, 'r') -h5_crosssection = h5py.File(args.database_crosssection, 'r') +if args.database_electronic != "": + h5_electronic = h5py.File(args.database_electronic, 'r') +else: + print('No electronic state data is given as input.') +if args.database_crosssection != "": + h5_crosssection = h5py.File(args.database_crosssection, 'r')# + print('No crosssection-data is given as input.') # Name of the DSMC.ini is the name of the ChemicalModel model_name = args.ini_filename[:-4] @@ -110,23 +116,29 @@ def is_float(value): spec_dict[species_count] = hdf_species # Check if the species data already exists in the database if hdf_species in hdf_species_group.keys(): - if hdf_species in h5_electronic.keys(): - del hdf_species_group[hdf_species] - hdf_input_data = h5_electronic[hdf_species] - print('Electronic states added to the database: ', hdf_species) - hdf_species = hdf_species_group.create_dataset(hdf_species,data=hdf_input_data) - hdf_species.attrs['* Created'] = date.today().strftime("%B %d, %Y") + if args.database_electronic != "": + if hdf_species in h5_electronic.keys(): + dset = np.array(hdf_species_group.get(hdf_species)) + if len(dset) == 1: + del hdf_species_group[hdf_species] + hdf_input_data = h5_electronic[hdf_species] + print('Electronic states added to the database: ', hdf_species) + hdf_species = hdf_species_group.create_dataset(hdf_species,data=hdf_input_data) + hdf_species.attrs['* Created'] = date.today().strftime("%B %d, %Y") + else: + hdf_species = hdf_species_group[hdf_species] elif hdf_species == 'electron': print('Species added to the database: ', hdf_species) hdf_species = hdf_species_group.create_dataset(hdf_species,data=[0]) hdf_species.attrs['* Created'] = date.today().strftime("%B %d, %Y") else: # Add the electronic state data - if hdf_species in h5_electronic.keys(): - hdf_input_data = h5_electronic[hdf_species] - print('Electronic states added to the database: ', hdf_species) - hdf_species = hdf_species_group.create_dataset(hdf_species,data=hdf_input_data) - hdf_species.attrs['* Created'] = date.today().strftime("%B %d, %Y") + if args.database_electronic != "": + if hdf_species in h5_electronic.keys(): + hdf_input_data = h5_electronic[hdf_species] + print('Electronic states added to the database: ', hdf_species) + hdf_species = hdf_species_group.create_dataset(hdf_species,data=hdf_input_data) + hdf_species.attrs['* Created'] = date.today().strftime("%B %d, %Y") else: print('Species added to the database, but electronic levels are unknown: ', hdf_species) hdf_species = hdf_species_group.create_dataset(hdf_species,data=[0]) @@ -141,24 +153,23 @@ def is_float(value): if not var_name[1].startswith('SpeciesName'): species_count = var_name[0] + if species_count not in spec_dict: + print('Error: the species', species_count, 'has no species name in the input file.') + sys.exit() hdf_species = spec_dict[species_count] hdf_species = hdf_species_group[hdf_species] # Check if the species parameter is already defiend - if var_name[1] in hdf_species.attrs: - print('Species parameter is already set: ', var_name[1]) - else: + if var_name[1] not in hdf_species.attrs: # Float conversion if is_float(var_value): var_value = float(var_value) if var_name[1] not in logical_list and var_name[1] not in spec_attr_list: hdf_species.attrs[var_name[1]] = var_value - print('Species parameter set: ', var_name[1]) # Previous-state read in as a string elif var_name[1] in spec_attr_list: var_value = str(int(var_value)) spec_name_list = spec_dict[var_value] hdf_species.attrs[var_name[1]] = np.string_(spec_name_list) - print('Species parameter set: ', var_name[1]) # Logicals else: if 'F' in var_value or 'false' in var_value: @@ -166,18 +177,18 @@ def is_float(value): else: var_value = 1 hdf_species.attrs[var_name[1]] = var_value - print('Species parameter set: ', var_name[1]) # Write attributes for source and time of retrieval hdf_species.attrs['* Reference'] = args.reference hdf_species.attrs['* Created'] = date.today().strftime("%B %d, %Y") # Copy cross-section data if not defined already -for dataset in h5_crosssection.keys(): - if dataset in hdf_xsec_group.keys(): - print('Cross-section is already set: ', dataset) - else: - print('Cross-section added: ', dataset) - hdf_xsec_group.copy(source=h5_crosssection[dataset],dest=hdf_xsec_group) +if args.database_crosssection != "": + for dataset in h5_crosssection.keys(): + if dataset in hdf_xsec_group.keys(): + print('Cross-section is already set: ', dataset) + else: + print('Cross-section added: ', dataset) + hdf_xsec_group.copy(source=h5_crosssection[dataset],dest=hdf_xsec_group) # # Radiation data # species_list = ['N','O','NIon1','OIon1','H','Xe','XeIon1','XeIon2','Ar','ArIon1','ArIon2'] @@ -232,9 +243,15 @@ def is_float(value): if 'ReactionName' not in ReacName_dict[key]: ReactionName = '' for val in educt_dict[key]: + if val not in spec_dict: + print('Error: the reactant ', val, 'is not defined as a species.') + sys.exit() ReactionName = ReactionName + '+' + spec_dict[val] ReactionName = ReactionName + '_' for val in product_dict[key]: + if val not in spec_dict: + print('Error: the product ', val, 'is not defined as a species.') + sys.exit() ReactionName = ReactionName + '+' + spec_dict[val] ReactionName = ReactionName[1:] ReactionName = ReactionName.replace('_+','_') @@ -371,9 +388,7 @@ def is_float(value): hdf_reac = reac_dict[reac_count] hdf_reac = hdf_reac_group[hdf_reac] # Read-In of the attributes, check if the parameter is already defined - if var_name[1] in hdf_reac.attrs: - print('Reaction parameter is already set: ', var_name[1]) - else: + if var_name[1] not in hdf_reac.attrs: if is_float(var_value): var_value = float(var_value) # Exclude certain parameters @@ -383,6 +398,9 @@ def is_float(value): spec_name_list = [] var_value = var_value.replace(',0', '').replace('(/', '').replace('/)', '').split(',') for val in var_value: + if val not in spec_dict: + print('Error: the species ', val, 'is not defined in the input file.') + sys.exit() spec_name_list.append(spec_dict[val]) hdf_reac.attrs[var_name[1]] = np.array(spec_name_list,dtype='S255') elif var_name[1] in str_list: @@ -391,7 +409,6 @@ def is_float(value): # All other parameters hdf_reac.attrs[var_name[1]] = var_value # If not defined, the standard reaction model is set to TCE - print('Reaction parameter set: ', var_name[1]) if 'ReactionModel' not in hdf_reac.attrs: hdf_reac.attrs['ReactionModel'] = np.array(['TCE'],dtype='S255') # Write attributes for source and time of retrieval @@ -460,5 +477,7 @@ def is_float(value): print('*** Database successfully built. ***') h5_species.close() -h5_electronic.close() -h5_crosssection.close() +if args.database_electronic != "": + h5_electronic.close() +if args.database_crosssection != "": + h5_crosssection.close() From 883925715b9e470b172e59661589b04c111c7870 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Thu, 3 Aug 2023 15:05:55 +0200 Subject: [PATCH 076/222] weiter --- .../userguide/features-and-models/DSMC.md | 147 +-------------- .../features-and-models/SpeciesDatabase.md | 171 ++++++++++++++++++ .../userguide/features-and-models/index.md | 1 + tools/species_database/REF_DSMC.ini | 2 +- .../chemistry_models_implemented.ods | Bin 0 -> 17116 bytes 5 files changed, 174 insertions(+), 147 deletions(-) create mode 100644 docs/documentation/userguide/features-and-models/SpeciesDatabase.md create mode 100644 tools/species_database/chemistry_models_implemented.ods diff --git a/docs/documentation/userguide/features-and-models/DSMC.md b/docs/documentation/userguide/features-and-models/DSMC.md index 4306e57e7..6260ba82e 100644 --- a/docs/documentation/userguide/features-and-models/DSMC.md +++ b/docs/documentation/userguide/features-and-models/DSMC.md @@ -23,7 +23,7 @@ exchange (by default including the rotational and vibrational energy treatment). the parameters for the internal energy exchange (Section {ref}`sec:DSMC-relaxation`) and chemical reactions (Section {ref}`sec:DSMC-chemistry`). -Additionally, species parameter can be read from a database instead of using the `DSMC.ini` file. The procedure is described in Section {ref}`sec:DSMC-database` +Additionally, species parameter can be read from a database instead of using the `DSMC.ini` file. The procedure is described in Section {ref}`sec:SpeciesDatabase` A fixed ("manual") simulation time step $\Delta t$ is defined by @@ -480,151 +480,6 @@ where $d_{\mathrm{ref}}$ is the reference diameter and $n$ the number density. H simulation domain should be used as the worst-case. For supersonic/hypersonic flows, the conditions behind a normal shock can be utilized as a first guess. For a thruster/nozzle expansion simulation, the chamber or throat conditions are the limiting factor. -(sec:DSMC-database)= -## Unified Species Database -A unified database containing cross-sections, electronic states, surface parameters, Arrhenius rates and species data can be used as an alternative input for the simulation. The use of the database allows to reduce the length of the input files and ensures a meaningful storage of the parameters, together with the Reference from which they are taken. The creation of a new database or the extension of an existing one is described in Chapter {ref}`sec:tools-usd`. - -To read in data from a given species database, the database name has to be set in the `parameter.ini` - - Particles-Species-Database = Species_Database.h5 - -If no database is given, the parameters are read from the `parameter.ini` and `DSMC.ini` as described in the above sections. Per default, all available parameters are directly taken from the database, but different options exist to set parameters manually or read out only certain data types from the unififed database. Parameters missing from the database can be added in the standard manner, in the `parameter.ini` and `DSMC.ini` files. - -An example database containing DSMC parameters e.g. for the 5-species air model, together with an example on how to use it, can be found in `regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma`. - -All data available in the database and how to select between different input forms is described in the following subsections for the different available data types. - -(ssec:Species)= -### Species-specific data - -A species to be included in the simulation can be selected by its name with the following command: - - Part-Species1-SpeciesName = CH4 - -The database follows the standard nomenclature for atoms and molecules. Cations are given by - - Part-Species4-SpeciesName = CH3Ion1 - -where the number after 'Ion' refers to the degree of ionization. The database contains general species data such as the mass, charge and number of atoms, together with VHS and VSS parameters. For molecules, rotational and vibrational frequencies can be given as well. A full list of available parameters and the corresponding commands in the `DSMC.ini` input are given below. - - Part-Species1-SpeciesName - Part-Species1-MassIC - Part-Species1-ChargeIC - Part-Species1-PolyatomicMol - Part-Species1-InteractionID - Part-Species1-NumOfAtoms - Part-Species1-LinearMolec - Part-Species1-SymmetryFactor - Part-Species1-Tref - Part-Species1-dref - Part-Species1-omega - Part-Species1-alphaVSS - Part-Species1-CharaTempVibX - Part-Species1-CharaTempRotX - Part-Species1-Ediss_eV - Part-Species1-HeatOfFormation_K - Part-Species1-PreviousState - -Per default, all available parameters are read from the database. Species for which the parameters should be taken from the input files can be specified by an overwrite command. - - Part-Species1-DoOverwriteParameters = true - -(ssec:Reaction)= -### Reaction data - -The database contains data for the TCE and QK model. Reactions to be included in the simualtion are specified by their name: - - ! Reaction1: CH4 + M -> CH3 + H + M - DSMC-Reaction1-ReactionName = DISS_CH4_TO_CH3 - -To ensure consistency and findability, a naming convention is used in the database. The available flags for the reaction are `DISS` (dissociation), `EXC` (exchange) and `RECOMB` (recombination or addition). The main reactants and products are specified as well. To further state atomic, electronic or molecular collision parameters, as well as ionization processes, the flags `_AT`, `_MOL`, `_EL` and `_ION` are used respectively. The name of reactants, products and non-reactive collision parameters are deposited in the database as well, but they are not read out to avoid restrictions in the simulation setup. These values are given manually in the `parameter.ini`, as described in Section {ref} `sec:DSMC-chemistry`. - -If the reaction parameters should be given manually, the following command can be set: - - DSMC-OverwriteReacDatabase = true - -(sssec:Arrh-rates)= -#### Arrhenius rates - -Arrhenius-type reaction rates needed for the Total-Collision-Energy model ({ref}`ssec:TCE`) can be taken directly from the database. Here, the Arrhenius prefactor and powerfactor, together with the activation energy is stored. - -(sssec:QK-model)= -#### QK model - -The dissociation energy used in the Quantum-Kinetic model ({ref}`ssec:QK`) is deposited in the species database. - -(ssec:Catalysis)= -### Heterogenous reactions - -All data necessary for the modelling of gas-surface reactions with PICLas can be found in the species database. To include parameters for a certain reaction, the reaction name needs to be specified by - - ! Reaction 1: CO(g) -> CO(ads) - Surface-Reaction1-SurfName = Adsorption_CO - -According to the naming convention used in the database, the surface mechanism (adsorption, desorption, ER and LH reaction) is stated together with the main reactant and product (only in the case of reactions). The database contains the sticking coefficients for the Kisluik and Langmuir adsorption model, together with the Polanyi-Wigner parameters and the Arrhenius-type reaction rates. All parameters that can be found in the database are givel below. - - Surface-Reaction1-SurfName - Surface-Reaction1-Type - Surface-Reaction1-StickingCoefficient - Surface-Reaction1-EqConstant - Surface-Reaction1-DissOrder - Surface-Reaction1-ReactHeat - Surface-Reaction1-HeatScaling - Surface-Reaction1-Energy - Surface-Reaction1-Prefactor - Surface-Reaction1-LateralInteraction - Surface-Reaction1-Ca - Surface-Reaction1-Cb - -The reactants and products are deposited in the database as well, but again not read out to ensure the correct input. Reactants and products need to be defined by - - Surface-Reaction1-Reactants = (/2,2/) - Surface-Reaction1-Products = (/3,0/) - -So far, the database does not contain any surface-specific or diffusion parameters. These need to be set in the `parameter.ini` by - - Surface-Reaction1-NumOfBoundaries = 1 - Surface-Reaction1-Boundaries = (/1,0/) - Part-Boundary1-WallTemp = 323 - Part-Boundary1-LatticeVector = 0.389E-9 - Part-Boundary1-NbrOfMol-UnitCell = 2 - Part-Boundary1-Species1-Coverage = 0.1 - Part-Boundary1-Species1-MaxCoverage = 0.333 - -If a parameter is not defined or set to a default value, the code will abort. - -To define parameters manually instead of using the database, the following option can be selected: - - OverwriteCatParameters = true - -(ssec:El-states)= -### Electronic states - -The modelling of electronic relaxation follows the principle as described in {ref} `sec:DSMC-electronic-relaxation`. As for the species data, the electronic levels can be given separately by specifiying - - Part-Species1-DoOverwriteParameters = true - -In this case, the electronic relaxation data is taken from an additional Electronic-Database: - - Particles-DSMCElectronicDatabase = DSMCSpecies_electronic_state_full_Data.h5 - - -(ssec:Xsec-data)= -### Cross-section data - -The use of the unififed species database for the cross-section data, follows the description given in Section {ref} `ssec:xsec-chemistry`. All reaction paths are again stored by their reaction names and can be called in the `parameter.ini`. - -(ssec:Rad-data)= -### Radiation data - -TO-DO - -(ssec:Overview)= -### Overview - -An overview of the functionalities of the unified species database is given in the scheme below: - -TO-DO diff --git a/docs/documentation/userguide/features-and-models/SpeciesDatabase.md b/docs/documentation/userguide/features-and-models/SpeciesDatabase.md new file mode 100644 index 000000000..078f95891 --- /dev/null +++ b/docs/documentation/userguide/features-and-models/SpeciesDatabase.md @@ -0,0 +1,171 @@ +(sec:SpeciesDatabase)= +# Unified Species Database + +A unified database of species data, electronic states, cross-sections, and chemistry models can be used as a more convenient alternative input for the simulations. The use of the database allows to reduce the length of the input files and ensures a meaningful storage of the parameters, together with the reference from which they are taken. + +An predefined database (`SpeciesDatabase.h5`) is provided at the top level of the PICLas directory. This database contains over 40 of the most common species in PICLas simulations and the most common complex chemical reaction models with 300 single reactions. In addition, several cross-section models are included. + +To read in data from a given species database, the database name must be specified in the `parameter.ini` file of the simulation + + Particles-Species-Database = SpeciesDatabase.h5 + +When reading the database, all available parameters are taken directly from the database by default. Missing parameters can be added as usual in the `parameter.ini` or the `DSMC.ini` files. If no database is specified or the specified database is not available, the parameters are read from the `parameter.ini` and the `DSMC.ini` files as described in the sections above. + +All data available in the database and how to choose between different input forms is described in the following sections for the different data types available. An example where the given database is used can be found in `regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database`. + +For instructions on extending the existing database or creating a new one, please refer to Chapter {ref}`sec:tools-usd` for instructions. + +(ssec:Species)= +## Species-specific data + +To include a species in a simulation, it has to be selected by its name with the following command: + + Part-Species1-SpeciesName = CH4 + +The database follows the standard nomenclature for atoms and molecules. Cations are given by + + Part-Species4-SpeciesName = CH3Ion1 + +where the number after 'Ion' refers to the degree of ionization. The database contains general species data such as the mass, charge and number of atoms, as well as with VHS and VSS parameters. For molecules, rotational and vibrational frequencies can be given as well. A complete list of available parameters and the corresponding variable names in the `DSMC.ini` input are given below. + + Part-Species1-SpeciesName + Part-Species1-MassIC + Part-Species1-ChargeIC + Part-Species1-PolyatomicMol + Part-Species1-InteractionID + Part-Species1-NumOfAtoms + Part-Species1-LinearMolec + Part-Species1-SymmetryFactor + Part-Species1-Tref + Part-Species1-dref + Part-Species1-omega + Part-Species1-alphaVSS + Part-Species1-CharaTempVibX + Part-Species1-CharaTempRotX + Part-Species1-Ediss_eV + Part-Species1-HeatOfFormation_K + Part-Species1-PreviousState + +Per default, all available parameters are read from the database. Species for which the parameters should be taken from the input files can be specified by an overwrite command. + + Part-Species1-DoOverwriteParameters = true + +If this flag is set, all parameters for this species need to be set manually. + +(ssec:Reaction)= +## Reaction data + +The database contains different chemistry models including various reactions. + +| Name | Description | Species | React. | Reference | +| :----------------------------------------: | :------------: | :---------: | :------: | :----: | +| Air_5Spec_8Reac_Laux1995 | 2.3.0 (Nov 2021) | 5 | 8 | 1.12.1 | +| Air_5Spec_8Reac_Park1993 | 2.2.0 (Nov 2021) | 8 | 8 | 1.10.5 | +| Air_11Spec_27Reac_Park1993 | 2.1.0 (Nov 2021) | 11 | 27 | 1.10.6 | +| Air_11Spec_43Reac_Farbar2008 | 2.0.0 (Nov 2021) | 11 | 43 | 1.10.5 | +| Air_11Spec_51Reac_Park1993 | 2.0.0 (Nov 2021) | 11 | 51 | 1.10.5 | +| Fe-in-Air_3Spec_7Reac_Voronov1997Plane2015 | 2.0.0 (Nov 2021) | 3 | 7 | 1.10.5 | +| CH4_7Spec_7Reac | 2.0.0 (Nov 2021) | 7 | 7 | 1.10.5 | +| CH4-Ar_8Spec_7Reac | 2.3.0 (Nov 2021) | 8 | 7 | 1.12.1 | +| CO2_6Spec_10Reac_Johnston2014 | 2.2.0 (Nov 2021) | 6 | 10 | 1.10.5 | +| Mars_11Spec_27Reac_Johnston2014 | 2.3.0 (Nov 2021) | 11 | 27 | 1.12.1 | +| Mars_16Spec_31Reac_Park1994 | 2.2.0 (Nov 2021) | 16 | 31 | 1.10.5 | +| Mars_17Spec_42Reac_Johnston2014 | 2.3.0 (Nov 2021) | 17 | 42 | 1.12.1 | +| Titan_14Spec_24Reac_Gokcen2007 | 2.2.0 (Nov 2021) | 14 | 24 | 1.10.5 | +| Titan_18Spec_30Reac_Gokcen2007 | 2.3.0 (Nov 2021) | 18 | 30 | 1.12.1 | + +The database contains data for the TCE and QK model. Reactions to be included in the simualtion are specified by their name: + + ! Reaction1: CH4 + M -> CH3 + H + M + DSMC-Reaction1-ReactionName = DISS_CH4_TO_CH3 + +To ensure consistency and findability, a naming convention is used in the database. The available flags for the reaction are `DISS` (dissociation), `EXC` (exchange) and `RECOMB` (recombination or addition). The main reactants and products are specified as well. To further state atomic, electronic or molecular collision parameters, as well as ionization processes, the flags `_AT`, `_MOL`, `_EL` and `_ION` are used respectively. The name of reactants, products and non-reactive collision parameters are deposited in the database as well, but they are not read out to avoid restrictions in the simulation setup. These values are given manually in the `parameter.ini`, as described in Section {ref} `sec:DSMC-chemistry`. + +If the reaction parameters should be given manually, the following command can be set: + + DSMC-OverwriteReacDatabase = true + +(sssec:Arrh-rates)= +### Arrhenius rates + +Arrhenius-type reaction rates needed for the Total-Collision-Energy model ({ref}`ssec:TCE`) can be taken directly from the database. Here, the Arrhenius prefactor and powerfactor, together with the activation energy is stored. + +(sssec:QK-model)= +### QK model + +The dissociation energy used in the Quantum-Kinetic model ({ref}`ssec:QK`) is deposited in the species database. + +(ssec:Catalysis)= +## Heterogenous reactions + +All data necessary for the modelling of gas-surface reactions with PICLas can be found in the species database. To include parameters for a certain reaction, the reaction name needs to be specified by + + ! Reaction 1: CO(g) -> CO(ads) + Surface-Reaction1-SurfName = Adsorption_CO + +According to the naming convention used in the database, the surface mechanism (adsorption, desorption, ER and LH reaction) is stated together with the main reactant and product (only in the case of reactions). The database contains the sticking coefficients for the Kisluik and Langmuir adsorption model, together with the Polanyi-Wigner parameters and the Arrhenius-type reaction rates. All parameters that can be found in the database are givel below. + + Surface-Reaction1-SurfName + Surface-Reaction1-Type + Surface-Reaction1-StickingCoefficient + Surface-Reaction1-EqConstant + Surface-Reaction1-DissOrder + Surface-Reaction1-ReactHeat + Surface-Reaction1-HeatScaling + Surface-Reaction1-Energy + Surface-Reaction1-Prefactor + Surface-Reaction1-LateralInteraction + Surface-Reaction1-Ca + Surface-Reaction1-Cb + +The reactants and products are deposited in the database as well, but again not read out to ensure the correct input. Reactants and products need to be defined by + + Surface-Reaction1-Reactants = (/2,2/) + Surface-Reaction1-Products = (/3,0/) + +So far, the database does not contain any surface-specific or diffusion parameters. These need to be set in the `parameter.ini` by + + Surface-Reaction1-NumOfBoundaries = 1 + Surface-Reaction1-Boundaries = (/1,0/) + Part-Boundary1-WallTemp = 323 + Part-Boundary1-LatticeVector = 0.389E-9 + Part-Boundary1-NbrOfMol-UnitCell = 2 + Part-Boundary1-Species1-Coverage = 0.1 + Part-Boundary1-Species1-MaxCoverage = 0.333 + +If a parameter is not defined or set to a default value, the code will abort. + +To define parameters manually instead of using the database, the following option can be selected: + + OverwriteCatParameters = true + +(ssec:El-states)= +## Electronic states + +The modelling of electronic relaxation follows the principle as described in {ref} `sec:DSMC-electronic-relaxation`. As for the species data, the electronic levels can be given separately by specifiying + + Part-Species1-DoOverwriteParameters = true + +In this case, the electronic relaxation data is taken from an additional Electronic-Database: + + Particles-DSMCElectronicDatabase = DSMCSpecies_electronic_state_full_Data.h5 + + +(ssec:Xsec-data)= +## Cross-section data + +The use of the unififed species database for the cross-section data, follows the description given in Section {ref} `ssec:xsec-chemistry`. All reaction paths are again stored by their reaction names and can be called in the `parameter.ini`. + +(ssec:Rad-data)= +## Radiation data + +TO-DO + +(ssec:Overview)= +## Overview + +An overview of the functionalities of the unified species database is given in the scheme below: + +TO-DO + + diff --git a/docs/documentation/userguide/features-and-models/index.md b/docs/documentation/userguide/features-and-models/index.md index ad4d9505e..04f3d838a 100644 --- a/docs/documentation/userguide/features-and-models/index.md +++ b/docs/documentation/userguide/features-and-models/index.md @@ -14,6 +14,7 @@ PIC.md magnetic-background-field.md DSMC.md BGG.md +SpeciesDatabase.md Fokker-Planck.md Bhatnagar-Gross-Krook.md features-particle-solver.md diff --git a/tools/species_database/REF_DSMC.ini b/tools/species_database/REF_DSMC.ini index 5a662cacf..51970d65a 100644 --- a/tools/species_database/REF_DSMC.ini +++ b/tools/species_database/REF_DSMC.ini @@ -102,7 +102,7 @@ Part-Species5-CharaTempVib=3393.3 Part-Species5-Ediss_eV=9.759 Part-Species5-HeatOfFormation_K=0.0 Part-Species5-CharaTempRot = 2.87 -Part-Species5-SymmetryFactor = 20 +Part-Species5-SymmetryFactor = 2 ! =============================================================================== ! ! Species6, C2 ! =============================================================================== ! diff --git a/tools/species_database/chemistry_models_implemented.ods b/tools/species_database/chemistry_models_implemented.ods new file mode 100644 index 0000000000000000000000000000000000000000..4d19f8817c99e402ecccafb0355c4301ade6d20c GIT binary patch literal 17116 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
  • zY@)#9di(Y8nrbBq9YG6YgF+ESjsm4V0ebMQq*-F^EE%3`LoE;l z2FkARR)w(*)L>DE<>SC*{llqBtK`C3hHWt_+ikPAEw^UlppD*XokU`5&-v-l_DB1? z;{c!9Fbp-q0LV2zH{$IeM2yb|^IT{0rd z0<;pcqV)eGQ~j-Ls7#Qt?I%DKedGupY+`KCP@#}Ti}MV)11!M8BjF*!DmcCxQp;+q z#2Hd@`Gh?3fY+{Od8uU)ke$^U;J;<5_*E{WwTFDe?>d!hTCZa56tp6U%LG^92t8r7 zQIDqRlw_4q<{^=&yaSSdWqtG``CJSLg%Fnz(z$T1puc+$i5yexEGWj z!?SZ+ev3jxkrfRX7(hzu6f|6^e{hjmL*uQvuaH3=AhoCkrIQL& z2)+p6O?5?%CWNemQHa zw;i+n@m~ta)U7S~ufG+LG`}Ou80G5^y(f7w3-=l>h^*Bt=BA652Wru;kk zpC#r0n*U!&0N{_P{4e_*p!0t*{a+IEzbE@6`Tonse<%O9TmLLM|9hT)Egs14YW&|k z|0+TMd!~Q&i09uh{j((f?|J@&|NUhy|AyyJ$^KjZ{r{Gw{NJ$rC0YM_mVYhN?!RIA zX9@e?^ZaX>FoFN?TK-GY{@*PBP-XwKUi(k<^ivi!^R!2Vf6{J(Mk96$a?to4`S|91PIq+9KUn@zP5(T4{27=3vJ39N8Kvc=z Date: Thu, 3 Aug 2023 15:22:50 +0200 Subject: [PATCH 077/222] Read-in of chemistry models and reactions from the SpeciesDatabase with the database format --- .../PartAnalyze.csv | 502 -------------- .../PartAnalyze_ref.csv | 502 ++++++++++++++ .../externals.ini | 4 +- .../CHEM_EQUI_TCE_Air_5Spec_Database/hopr.ini | 49 +- .../parameter.ini | 120 +--- .../Species_Database.h5 | Bin 53408 -> 0 bytes .../parameter.ini | 1 - src/io_hdf5/hdf5_input.f90 | 43 +- .../boundary/particle_boundary_tools.f90 | 3 +- src/particles/dsmc/dsmc_chemical_init.f90 | 635 ++++++++++++++---- .../dsmc/dsmc_chemical_reactions.f90 | 2 +- src/particles/dsmc/dsmc_electronic_model.f90 | 53 +- src/particles/dsmc/dsmc_init.f90 | 63 +- src/particles/dsmc/dsmc_relaxation.f90 | 2 +- src/particles/dsmc/dsmc_vars.f90 | 8 +- src/particles/mcc/mcc_xsec.f90 | 7 +- src/particles/particle_init.f90 | 41 +- 17 files changed, 1155 insertions(+), 880 deletions(-) delete mode 100644 regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/PartAnalyze.csv create mode 100644 regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/PartAnalyze_ref.csv delete mode 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/Species_Database.h5 diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/PartAnalyze.csv b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/PartAnalyze.csv deleted file mode 100644 index 93ea9b102..000000000 --- a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/PartAnalyze.csv +++ /dev/null @@ -1,502 +0,0 @@ -001-TIME,002-NumDens-Spec-001,003-NumDens-Spec-002,004-NumDens-Spec-003,005-NumDens-Spec-004,006-NumDens-Spec-005,007-NumDens-Spec-006,008-TempTra-001,009-TempTra-002,010-TempTra-003,011-TempTra-004,012-TempTra-005,013-TempTra-006,014-TempVib001,015-TempVib002,016-TempVib003,017-TempVib004,018-TempVib005,019-XiVibMean001,020-XiVibMean002,021-XiVibMean003,022-XiVibMean004,023-XiVibMean005,024-TempRot001,025-TempRot002,026-TempRot003,027-TempRot004,028-TempRot005,029-TempTotal001,030-TempTotal002,031-TempTotal003,032-TempTotal004,033-TempTotal005,034-TempTotal006 -0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1935536944806061E+024,0.5144781426821520E+023,0.0000000000000000E+000,0.2450015087488213E+024,0.0000000000000000E+000,0.0000000000000000E+000,0.3005082716158227E+005,0.3023341938152726E+005,0.0000000000000000E+000,0.3008916966268165E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2991625552139451E+005,0.3020134051058106E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1888717178564868E+001,0.1925688857449134E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2985091379043164E+005,0.2986313628248379E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2995589010814851E+005,0.3011756951605653E+005,0.0000000000000000E+000,0.2998984113233414E+005 -0.2000000000000000E-009,0.2002055229816722E+021,0.1081109824101030E+022,0.1934535917191153E+024,0.5090725935616469E+023,0.0000000000000000E+000,0.2456421664223627E+024,0.2681418191558787E+005,0.2759298830149095E+005,0.3002557986886600E+005,0.3012337595758996E+005,0.0000000000000000E+000,0.3003252367916242E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2993176892522535E+005,0.3018810527747351E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1888773745521676E+001,0.1925656691441380E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2978524596784538E+005,0.2979924348405897E+005,0.0000000000000000E+000,0.2681418191558787E+005,0.2759298830149095E+005,0.2993008312681377E+005,0.3004777034754827E+005,0.0000000000000000E+000,0.2994164733463340E+005 -0.4000000000000000E-009,0.3904007698142607E+021,0.2152209372052976E+022,0.1933584940956990E+024,0.5037170958218872E+023,0.0000000000000000E+000,0.2462728138197549E+024,0.2518038949979440E+005,0.2627843295608793E+005,0.3002599590573264E+005,0.3007910318771826E+005,0.0000000000000000E+000,0.2999642640564917E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2988272777507559E+005,0.3012650948671688E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1888594728717898E+001,0.1925506626191616E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2975056510034915E+005,0.2978413059538960E+005,0.0000000000000000E+000,0.2518038949979440E+005,0.2627843295608793E+005,0.2990674995217194E+005,0.3000709920754353E+005,0.0000000000000000E+000,0.2988807428520296E+005 -0.6000000000000000E-009,0.6156319831686420E+021,0.3178262677334046E+022,0.1932433759199845E+024,0.4985618036051091E+023,0.5005138074541805E+019,0.2468984560790727E+024,0.2434252255207352E+005,0.2677355874208864E+005,0.3005089920117094E+005,0.3001513672847570E+005,0.0000000000000000E+000,0.2998664648149135E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2984500616207691E+005,0.3008734543269026E+005,0.3147634360879520E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1888456639631430E+001,0.1925410895760405E+001,0.1914250293771855E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2967368998830790E+005,0.2963896170699815E+005,0.4547406382864215E+005,0.2434252255207352E+005,0.2677355874208864E+005,0.2988493481142946E+005,0.2992657611794686E+005,0.2186813048892405E+005,0.2983930914980982E+005 -0.8000000000000000E-009,0.8008220919266886E+021,0.4284398191807785E+022,0.1931482782965682E+024,0.4930061003423677E+023,0.1001027614908361E+020,0.2475441188906886E+024,0.2449620649500907E+005,0.2731252534606971E+005,0.3002777041766807E+005,0.2995037694569073E+005,0.2051549055199303E+005,0.2994708275808576E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2979824534572280E+005,0.3009118162172482E+005,0.3284657174224074E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1888284984597696E+001,0.1925420283593841E+001,0.1917777005598174E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2964785241528079E+005,0.2950473453895603E+005,0.7874296216038869E+005,0.2449620649500907E+005,0.2731252534606971E+005,0.2985454228404909E+005,0.2986082618792983E+005,0.4076812475286923E+005,0.2979490427590089E+005 -0.1000000000000000E-008,0.1011037891057444E+022,0.5395538844356065E+022,0.1930381652589283E+024,0.4874003456988809E+023,0.2002055229816722E+020,0.2482047971165281E+024,0.2400236490382620E+005,0.2795592535132151E+005,0.2997972209740233E+005,0.2978808543049905E+005,0.3155042172329995E+005,0.2987387506959071E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2972508821793872E+005,0.2999253709073714E+005,0.2188184105449025E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1888015368908503E+001,0.1925178129767855E+001,0.1877447144310090E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2969640945680562E+005,0.2954892831286430E+005,0.5742840280166017E+005,0.2400236490382620E+005,0.2795592535132151E+005,0.2982766408025660E+005,0.2977585348948655E+005,0.3643649533250729E+005,0.2975360598404082E+005 -0.1200000000000000E-008,0.1191222861740949E+022,0.6446617840009844E+022,0.1929480727735866E+024,0.4821449507206120E+023,0.2002055229816722E+020,0.2488204290996967E+024,0.2429774024086125E+005,0.2842837748147072E+005,0.2997984142948160E+005,0.2967711928116584E+005,0.2618086625925349E+005,0.2985347721884583E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2964946871000300E+005,0.2980812664416994E+005,0.2188184105449025E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887735307545758E+001,0.1924721193982586E+001,0.1877447144310090E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2971200279515198E+005,0.2944495124505277E+005,0.5742840280166017E+005,0.2429774024086125E+005,0.2842837748147072E+005,0.2981152289456363E+005,0.2964647784187312E+005,0.3409425030261033E+005,0.2971765369241167E+005 -0.1400000000000000E-008,0.1421459213169872E+022,0.7347542693427369E+022,0.1928279494597976E+024,0.4775902750727789E+023,0.3003082844725083E+020,0.2493860097021200E+024,0.2437488150441725E+005,0.2843562150411255E+005,0.2999648059151633E+005,0.2958114423080794E+005,0.4096260792537043E+005,0.2984023248669312E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2962750732015469E+005,0.2978514392138506E+005,0.2051053273817972E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887653709650972E+001,0.1924663855596020E+001,0.1869439496743317E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2963410344131728E+005,0.2932597170983166E+005,0.4414541628376050E+005,0.2437488150441725E+005,0.2843562150411255E+005,0.2979013339045793E+005,0.2956414496363761E+005,0.3632346663245616E+005,0.2967686849754945E+005 -0.1600000000000000E-008,0.1766813740313257E+022,0.8493719312497442E+022,0.1926427593510395E+024,0.4717342635255650E+023,0.5505651881995985E+020,0.2501317752752267E+024,0.2551543870894971E+005,0.2845122279987489E+005,0.2992799362491511E+005,0.2953142324001687E+005,0.2902292782309156E+005,0.2977168860086478E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2958363415496535E+005,0.2981567188312189E+005,0.2898481906653794E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887490342644460E+001,0.1924739999179677E+001,0.1906997021767707E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2957969170048906E+005,0.2930136131849364E+005,0.4226094488569314E+005,0.2551543870894971E+005,0.2845122279987489E+005,0.2973248278485730E+005,0.2954398412895431E+005,0.3284562540885000E+005,0.2962432330479062E+005 -0.1800000000000000E-008,0.1946998710996762E+022,0.9574829136598471E+022,0.1925426565895487E+024,0.4662286116435691E+023,0.7507707111812707E+020,0.2507624226726189E+024,0.2543645897462250E+005,0.2822744602399814E+005,0.2988306932698028E+005,0.2941094217642744E+005,0.3842793961635099E+005,0.2970010630910177E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2966121521610929E+005,0.2972015839013863E+005,0.2654281409571432E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887778903260019E+001,0.1924501253000369E+001,0.1898589946728246E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2951986425373649E+005,0.2918630749500129E+005,0.4153647335486717E+005,0.2543645897462250E+005,0.2822744602399814E+005,0.2971680068324532E+005,0.2943200039023305E+005,0.3605819268570396E+005,0.2957564617061750E+005 -0.2000000000000000E-008,0.2187245338574769E+022,0.1056584647535775E+023,0.1924175281376851E+024,0.4612234735690272E+023,0.8508734726721067E+020,0.2513780546557876E+024,0.2542359961276462E+005,0.2865746948853170E+005,0.2992094333526376E+005,0.2932579728820911E+005,0.3240095151573489E+005,0.2972034913365250E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2962598210114591E+005,0.2951664908256350E+005,0.3083150489247487E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887648038271816E+001,0.1923987474175537E+001,0.1912483777448315E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2939573285950866E+005,0.2911992273097693E+005,0.3999861410710988E+005,0.2542359961276462E+005,0.2865746948853170E+005,0.2968759750552211E+005,0.2931936275133730E+005,0.3416497503734891E+005,0.2954115088309511E+005 -0.2200000000000000E-008,0.2332394342736481E+022,0.1166197171368240E+023,0.1923324407904179E+024,0.4556177189255405E+023,0.1101130376399197E+021,0.2519986917770308E+024,0.2581345531621344E+005,0.2872436544849754E+005,0.2983581314976840E+005,0.2944820061257382E+005,0.3450484581363104E+005,0.2967910761823041E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2959124767683905E+005,0.2940904846206797E+005,0.2761434927337212E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887518726557849E+001,0.1923712990333085E+001,0.1902458867173890E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2938483547865469E+005,0.2904982516224082E+005,0.3960602772632086E+005,0.2581345531621344E+005,0.2872436544849754E+005,0.2963783513963346E+005,0.2932224674903107E+005,0.3408376073760261E+005,0.2950504861118032E+005 -0.2400000000000000E-008,0.2617687212985364E+022,0.1274808667585797E+023,0.1921772815101071E+024,0.4500620156627991E+023,0.1351387280126287E+021,0.2526843956932430E+024,0.2587624366038824E+005,0.2843900472070336E+005,0.2981169294084660E+005,0.2943717752449479E+005,0.3402399820815693E+005,0.2963721760654923E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2953861760185237E+005,0.2939729106997144E+005,0.2670525652938386E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887322223695852E+001,0.1923682877644211E+001,0.1899196080094298E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2934103043939040E+005,0.2894654633851870E+005,0.3780889012592436E+005,0.2587624366038824E+005,0.2843900472070336E+005,0.2960018749480725E+005,0.2928436993924492E+005,0.3310650846028950E+005,0.2944865107914731E+005 -0.2600000000000000E-008,0.2852928702488829E+022,0.1396433522797163E+023,0.1920571581963181E+024,0.4439557472118580E+023,0.1401438660871705E+021,0.2534101407140516E+024,0.2572884533651708E+005,0.2825067994617411E+005,0.2975248837751277E+005,0.2935345994615184E+005,0.3285023285985803E+005,0.2955623778700382E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2950799976224916E+005,0.2932289007074007E+005,0.2805041918653925E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887207590968778E+001,0.1923491771503041E+001,0.1903950156496362E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2936876676600516E+005,0.2882560018455442E+005,0.4049464220586158E+005,0.2572884533651708E+005,0.2825067994617411E+005,0.2957406425170922E+005,0.2919248330838178E+005,0.3374105804806588E+005,0.2939330256624371E+005 -0.2800000000000000E-008,0.3078159915843210E+022,0.1509049129474354E+023,0.1919270246063800E+024,0.4381497870453896E+023,0.1751798326089632E+021,0.2540858343541147E+024,0.2580446377174559E+005,0.2824472890824046E+005,0.2973727208627400E+005,0.2929075724688515E+005,0.3511833164639210E+005,0.2952769563370605E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2946913953070796E+005,0.2918660454348150E+005,0.2575958415352950E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887061762667133E+001,0.1923139215666032E+001,0.1895562099820661E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2929300142627294E+005,0.2885385009841102E+005,0.4111137496613008E+005,0.2580446377174559E+005,0.2824472890824046E+005,0.2953478747658219E+005,0.2913560877856447E+005,0.3428388184716026E+005,0.2934741689288276E+005 -0.3000000000000000E-008,0.3378468200315718E+022,0.1607149835735373E+023,0.1917668601879947E+024,0.4331446489708477E+023,0.1952003849071304E+021,0.2547264920276560E+024,0.2603345777487410E+005,0.2809757013774979E+005,0.2971834472854769E+005,0.2922733937795712E+005,0.3310997983863980E+005,0.2948631886173892E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2938989290992872E+005,0.2907409414526297E+005,0.2395596899438577E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1886763207758986E+001,0.1922845706171756E+001,0.1887851534250676E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2930766129958950E+005,0.2872779510317457E+005,0.4374757353895628E+005,0.2603345777487410E+005,0.2809757013774979E+005,0.2950909146669826E+005,0.2904045734386976E+005,0.3368980853615181E+005,0.2929745215554577E+005 -0.3200000000000001E-008,0.3573668585222848E+022,0.1706752083418755E+023,0.1916567471503548E+024,0.4280394081348151E+023,0.2202260752798394E+021,0.2553221034585265E+024,0.2617858586088338E+005,0.2787591731154760E+005,0.2966444373824057E+005,0.2909259015325879E+005,0.3280359567989206E+005,0.2940293376386616E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2939306508918351E+005,0.2903938595537058E+005,0.2512228685376412E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1886775188987689E+001,0.1922754708918967E+001,0.1892961717599445E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2929553830615454E+005,0.2877418809380133E+005,0.4331320475156790E+005,0.2617858586088338E+005,0.2787591731154760E+005,0.2948295946850102E+005,0.2898582589942982E+005,0.3374351016946347E+005,0.2924961518553026E+005 -0.3400000000000001E-008,0.3753853555906353E+022,0.1802850734449958E+023,0.1915566443888639E+024,0.4231343728217642E+023,0.2402466275780066E+021,0.2558926891990243E+024,0.2608720316086643E+005,0.2798311079096106E+005,0.2962710795905543E+005,0.2898021417249727E+005,0.3284731801762974E+005,0.2935540908985251E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2936558760894125E+005,0.2880907789570350E+005,0.2490940236363590E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1886671323164920E+001,0.1922145412153781E+001,0.1892063994362888E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2927967856369750E+005,0.2891374361541189E+005,0.4124337709592155E+005,0.2608720316086643E+005,0.2798311079096106E+005,0.2945456280916518E+005,0.2891348776096422E+005,0.3310458111890428E+005,0.2921545281651137E+005 -0.3600000000000001E-008,0.4019125873857069E+022,0.1900450926903523E+023,0.1914064902466277E+024,0.4180791833664769E+023,0.2752825940997992E+021,0.2565133263202675E+024,0.2586275053354936E+005,0.2769550703190216E+005,0.2963801254937380E+005,0.2885293240942416E+005,0.3171833831616310E+005,0.2930922064029336E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2930615137069191E+005,0.2876562871582525E+005,0.2998146292554832E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1886445999179706E+001,0.1922029385025101E+001,0.1910040825026584E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2926188497180114E+005,0.2883909164719427E+005,0.3856744321430694E+005,0.2586275053354936E+005,0.2769550703190216E+005,0.2943786673422953E+005,0.2882469187791168E+005,0.3322060250751678E+005,0.2915688415459684E+005 -0.3800000000000001E-008,0.4244357087211450E+022,0.1987039815593096E+023,0.1912713515186150E+024,0.4135245077186438E+023,0.3203288367706755E+021,0.2570588863703925E+024,0.2581715974548322E+005,0.2745784262036351E+005,0.2961394001381010E+005,0.2876798089819826E+005,0.3276462246096969E+005,0.2925242505331455E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2934739336358229E+005,0.2874439111431374E+005,0.2813607449508984E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1886602443401832E+001,0.1921972546017888E+001,0.1904237743234228E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2918730576019429E+005,0.2878454658594164E+005,0.3538063817269567E+005,0.2581715974548322E+005,0.2745784262036351E+005,0.2941701619252413E+005,0.2876621730531710E+005,0.3224583610934724E+005,0.2910496858100529E+005 -0.4000000000000001E-008,0.4434552334044039E+022,0.2073128190475216E+023,0.1911512282048260E+024,0.4089698320708108E+023,0.3703802175160935E+021,0.2575844258682194E+024,0.2611945610478883E+005,0.2739933784157387E+005,0.2959467870737321E+005,0.2882638528419968E+005,0.3086055393287751E+005,0.2923799831163844E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2926180542709495E+005,0.2870347777160336E+005,0.2666135334103848E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1886277298523026E+001,0.1921862814188414E+001,0.1899032976366424E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2918689904288840E+005,0.2866872825718102E+005,0.3496998180356990E+005,0.2611945610478883E+005,0.2739933784157387E+005,0.2938506608530337E+005,0.2874670652619973E+005,0.3089598431043077E+005,0.2906984680897351E+005 -0.4200000000000001E-008,0.4709834928143838E+022,0.2168726327698964E+023,0.1909860586483662E+024,0.4039146426155236E+023,0.4254367363360533E+021,0.2582000578513881E+024,0.2614682697658369E+005,0.2727552637682632E+005,0.2956961889875406E+005,0.2872606895635015E+005,0.2972837302549662E+005,0.2918279462072468E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2920299306985030E+005,0.2869437846985203E+005,0.2680081009110798E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1886052790364162E+001,0.1921838367402142E+001,0.1899549254312290E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2918826528093112E+005,0.2856700637085328E+005,0.3380253071081749E+005,0.2614682697658369E+005,0.2727552637682632E+005,0.2935844089191330E+005,0.2867131050292938E+005,0.3010336351926756E+005,0.2901864169630254E+005 -0.4400000000000001E-008,0.4945076417647303E+022,0.2277337823916521E+023,0.1908509199203536E+024,0.3983088879720367E+023,0.4604727028578460E+021,0.2588607360772276E+024,0.2592420875419039E+005,0.2724320673735341E+005,0.2948644613349963E+005,0.2876145505804849E+005,0.3023706093184081E+005,0.2911082687944956E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2918447335102405E+005,0.2867087645773059E+005,0.2444501687808031E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1885981910303199E+001,0.1921775154516637E+001,0.1890052498135956E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2919036893053605E+005,0.2847191926731367E+005,0.3357263921832129E+005,0.2592420875419039E+005,0.2724320673735341E+005,0.2931774548539861E+005,0.2865264723515929E+005,0.2961644000604678E+005,0.2896860227741810E+005 -0.4600000000000001E-008,0.5210348735598018E+022,0.2375939043984995E+023,0.1907007657781173E+024,0.3932036471360042E+023,0.4955086693796387E+021,0.2594863783365453E+024,0.2602987497716289E+005,0.2724124572511755E+005,0.2943044901119171E+005,0.2873069418773197E+005,0.3053080611321456E+005,0.2905778324257012E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2915525606049460E+005,0.2858270172854463E+005,0.2441611917525257E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1885869908289393E+001,0.1921537078715469E+001,0.1889924847262423E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2915517613046748E+005,0.2845767154185950E+005,0.3317891557395321E+005,0.2602987497716289E+005,0.2724124572511755E+005,0.2927512747878024E+005,0.2861071819396069E+005,0.2962222147773840E+005,0.2892371976381870E+005 -0.4800000000000002E-008,0.5470615915474192E+022,0.2475040777860922E+023,0.1905556167739556E+024,0.3880984062999715E+023,0.5255394978268894E+021,0.2601120205958630E+024,0.2589934413251907E+005,0.2719128738580867E+005,0.2939542500153523E+005,0.2864674925586691E+005,0.2930421549297697E+005,0.2900027624689471E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2914954087842754E+005,0.2856669705675223E+005,0.2557682419115750E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1885847973896107E+001,0.1921493709920865E+001,0.1894829386675502E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2912998642596692E+005,0.2827700957448982E+005,0.3200810060753555E+005,0.2589934413251907E+005,0.2719128738580867E+005,0.2925098712978975E+005,0.2851768764037516E+005,0.2906418049683807E+005,0.2887472089477688E+005 -0.5000000000000002E-008,0.5650800886157697E+022,0.2557125042283408E+023,0.1904555140124647E+024,0.3838940903173564E+023,0.5455600501250566E+021,0.2606125344033172E+024,0.2588373472902210E+005,0.2706122333741226E+005,0.2941864615509830E+005,0.2872413120203470E+005,0.2977743969664990E+005,0.2900913551787525E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2905383659366562E+005,0.2855612702259361E+005,0.2534064575229877E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1885479412575895E+001,0.1921465041389637E+001,0.1893867148567354E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2910314017360947E+005,0.2808705091682309E+005,0.3157177767564604E+005,0.2588373472902210E+005,0.2706122333741226E+005,0.2922710497088373E+005,0.2849340335489874E+005,0.2907913463297061E+005,0.2883370823904896E+005 -0.5200000000000002E-008,0.5906062927959329E+022,0.2653724207122065E+023,0.1903103650083030E+024,0.3788889522428146E+023,0.5805960166468493E+021,0.2612231612484113E+024,0.2596023095262381E+005,0.2697819877014729E+005,0.2941336701705405E+005,0.2859682161890531E+005,0.3061482005064208E+005,0.2897214453208122E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2903436687402369E+005,0.2842217774395017E+005,0.2637266775822921E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1885404142440067E+001,0.1921099915987701E+001,0.1897947204027706E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2903095233026897E+005,0.2811441819422474E+005,0.3166614615276930E+005,0.2596023095262381E+005,0.2697819877014729E+005,0.2919850703460127E+005,0.2840894466312527E+005,0.2975242886349051E+005,0.2878644418056914E+005 -0.5400000000000002E-008,0.6206371212431837E+022,0.2738811554389275E+023,0.1901351851756941E+024,0.3743843279757270E+023,0.6306473973922673E+021,0.2617987521269836E+024,0.2577633099990482E+005,0.2701864593929570E+005,0.2941158841449257E+005,0.2854182912889166E+005,0.3159729363160317E+005,0.2895595615400037E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2895292643640258E+005,0.2833191086168669E+005,0.2838759962261101E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1885088217794775E+001,0.1920851941649283E+001,0.1905072371915381E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2898939798948485E+005,0.2804722016606185E+005,0.2908999954597985E+005,0.2577633099990482E+005,0.2701864593929570E+005,0.2916337094990782E+005,0.2834063426898889E+005,0.2998553825082751E+005,0.2874303022246869E+005 -0.5600000000000002E-008,0.6486658944606178E+022,0.2827903012116120E+023,0.1899650104811597E+024,0.3696294468049123E+023,0.6907090542867690E+021,0.2623843532817050E+024,0.2615905849021905E+005,0.2706339886030611E+005,0.2936506567101348E+005,0.2854650383683758E+005,0.3106479763313585E+005,0.2892690076397988E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2884430202779083E+005,0.2843456360830179E+005,0.2798090152937962E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1884664120765429E+001,0.1921133820339005E+001,0.1903715479159538E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2895248502078304E+005,0.2805352207745543E+005,0.2893148838782130E+005,0.2615905849021905E+005,0.2706339886030611E+005,0.2910265260008492E+005,0.2837297509012682E+005,0.2959638844534821E+005,0.2870860391037753E+005 -0.5800000000000002E-008,0.6666843915289683E+022,0.2930007828836772E+023,0.1898398820292961E+024,0.3641738463036617E+023,0.7607809873303542E+021,0.2629849698506500E+024,0.2606873530109347E+005,0.2703526446939290E+005,0.2937084244096077E+005,0.2840900306995561E+005,0.3157434552547877E+005,0.2890009865110392E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2884029425132219E+005,0.2829107929344309E+005,0.2687825047420070E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1884648413533981E+001,0.1920739259621719E+001,0.1899833670802803E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2887993556769173E+005,0.2798765382057704E+005,0.2934231566354460E+005,0.2606873530109347E+005,0.2703526446939290E+005,0.2908299759669130E+005,0.2825451100114069E+005,0.2963431916220277E+005,0.2866530742490419E+005 -0.6000000000000002E-008,0.6827008333675021E+022,0.3027107507482883E+023,0.1897347741297307E+024,0.3590686054676290E+023,0.8108323680757723E+021,0.2635505504530733E+024,0.2623432531537129E+005,0.2703424079573461E+005,0.2929901098035697E+005,0.2839511772365067E+005,0.3109879306538750E+005,0.2884188307756389E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2880786963024035E+005,0.2805884070090088E+005,0.2755128356689760E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1884521177899380E+001,0.1920092204771030E+001,0.1902239352123610E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2891663102237480E+005,0.2794177243889193E+005,0.3015437118525941E+005,0.2623432531537129E+005,0.2703424079573461E+005,0.2905348538054802E+005,0.2817078928790054E+005,0.2984745194409495E+005,0.2863071181698051E+005 -0.6200000000000003E-008,0.7017203580507609E+022,0.3116198965209727E+023,0.1896146508159417E+024,0.3543637756775598E+023,0.8608837488211903E+021,0.2640911053651238E+024,0.2628556808203731E+005,0.2696336636327939E+005,0.2929334410465432E+005,0.2846649868199963E+005,0.3137508608334825E+005,0.2883433134266567E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2881701522410936E+005,0.2799367417698899E+005,0.2814603438789507E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1884557094010183E+001,0.1919908737996113E+001,0.1904271071764858E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2881220547047471E+005,0.2770725052778024E+005,0.3016701768624964E+005,0.2628556808203731E+005,0.2696336636327939E+005,0.2902318202830371E+005,0.2811587610892650E+005,0.3013453129660049E+005,0.2858926646242261E+005 -0.6400000000000003E-008,0.7377573521874619E+022,0.3212297616240930E+023,0.1894094401548855E+024,0.3493085862222725E+023,0.9109351295666084E+021,0.2647517835909633E+024,0.2633309615229593E+005,0.2709621303020503E+005,0.2925495278614225E+005,0.2834502485907538E+005,0.3147064726889470E+005,0.2879917656413996E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2874125572024989E+005,0.2781093577679974E+005,0.2629580002580526E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1884258899682885E+001,0.1919389743050451E+001,0.1897654150737555E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2881109315174990E+005,0.2756626982947787E+005,0.3009174337372608E+005,0.2633309615229593E+005,0.2709621303020503E+005,0.2898540197987917E+005,0.2797177876924730E+005,0.2964714642850047E+005,0.2855081425365758E+005 -0.6600000000000003E-008,0.7602804735229001E+022,0.3307895753464678E+023,0.1892843117030220E+024,0.3444035509092216E+023,0.9359608199393174E+021,0.2653423898837592E+024,0.2671066775394549E+005,0.2704561095849890E+005,0.2920846838095445E+005,0.2821313463127460E+005,0.3205795218015178E+005,0.2874812730277637E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2868740132113469E+005,0.2772065925880539E+005,0.2583330176343200E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1884045987164498E+001,0.1919130859175373E+001,0.1895854764667430E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2881912464960636E+005,0.2753814894264736E+005,0.3000353292839380E+005,0.2671066775394549E+005,0.2704561095849890E+005,0.2895274641612802E+005,0.2788143168929302E+005,0.2975078763023097E+005,0.2851451389913929E+005 -0.6800000000000003E-008,0.7898107881626967E+022,0.3403493890688427E+023,0.1890991215942639E+024,0.3392482586924435E+023,0.1011037891057444E+022,0.2659680321430769E+024,0.2692849918083307E+005,0.2692552904674335E+005,0.2917331037904190E+005,0.2811320884944347E+005,0.3101069996988526E+005,0.2869077512996549E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2862002133763495E+005,0.2754970515398704E+005,0.2580456289077563E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1883778496231342E+001,0.1918636035178475E+001,0.1895740864260977E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2883713857964356E+005,0.2751726910325277E+005,0.3037495251190211E+005,0.2692849918083307E+005,0.2692552904674335E+005,0.2892422950025734E+005,0.2778467039520439E+005,0.2939506766277235E+005,0.2846563510003966E+005 -0.7000000000000003E-008,0.8163380199577682E+022,0.3486078668918367E+023,0.1889439623139531E+024,0.3348937885675921E+023,0.1056084133728321E+022,0.2665135921932020E+024,0.2713841526561001E+005,0.2688697650728385E+005,0.2916822366291877E+005,0.2798071846493586E+005,0.3164713650540735E+005,0.2866826027265160E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2848928340254190E+005,0.2748705529192189E+005,0.2604652599712435E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1883255946573414E+001,0.1918453176805209E+001,0.1896692125611997E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2885699160749259E+005,0.2750416969521438E+005,0.2873288081707344E+005,0.2713841526561001E+005,0.2688697650728385E+005,0.2889203425367247E+005,0.2770606643312710E+005,0.2926176900940822E+005,0.2842849240370749E+005 -0.7200000000000003E-008,0.8403626827155690E+022,0.3568162933340852E+023,0.1888188338620896E+024,0.3307395239657224E+023,0.1066094409877404E+022,0.2670441368291034E+024,0.2745505191541860E+005,0.2680562383129549E+005,0.2911000066187040E+005,0.2793440923305757E+005,0.3145515982448403E+005,0.2861378012300884E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2850546097298720E+005,0.2733214478288822E+005,0.2586585592270769E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1883320861604329E+001,0.1917997486268038E+001,0.1895983486001631E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2880132715195814E+005,0.2761006852853705E+005,0.2822405905640694E+005,0.2745505191541860E+005,0.2680562383129549E+005,0.2885490733368335E+005,0.2767366569938110E+005,0.2898133872749387E+005,0.2839124173844443E+005 -0.7400000000000003E-008,0.8748981354299074E+022,0.3662760042949692E+023,0.1886136232010333E+024,0.3256843345104352E+023,0.1131161204846448E+022,0.2676897996407193E+024,0.2722057560496487E+005,0.2664695211117357E+005,0.2908855424898905E+005,0.2775398007773211E+005,0.3083362537069490E+005,0.2853842506451639E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2852189826676283E+005,0.2729048643944446E+005,0.2612798482224780E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1883386744948571E+001,0.1917874072458455E+001,0.1897008482925683E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2874616387514140E+005,0.2756234355045592E+005,0.2810965992621511E+005,0.2722057560496487E+005,0.2664695211117357E+005,0.2883402647385689E+005,0.2757008030262077E+005,0.2874945062122944E+005,0.2832790426336258E+005 -0.7600000000000004E-008,0.9039279362622499E+022,0.3764864859670345E+023,0.1884334382303498E+024,0.3202287340091847E+023,0.1201233137890033E+022,0.2683454727284843E+024,0.2718100290864015E+005,0.2665079593838412E+005,0.2903830029244085E+005,0.2767784713311137E+005,0.3043314850577063E+005,0.2848466686519144E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2848652012740744E+005,0.2741064886486688E+005,0.2785626560946161E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1883244851279553E+001,0.1918229051376873E+001,0.1903291850983973E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2868138121847182E+005,0.2740324680989161E+005,0.2812124334523083E+005,0.2718100290864015E+005,0.2665079593838412E+005,0.2878362748322797E+005,0.2752437604691593E+005,0.2905288373582521E+005,0.2828134136298098E+005 -0.7800000000000004E-008,0.9304551680573215E+022,0.3843445527440652E+023,0.1882782789500391E+024,0.3160744694073149E+023,0.1246279380560909E+022,0.2688710122263112E+024,0.2725036948095559E+005,0.2662666518526699E+005,0.2900226094930412E+005,0.2761324158459336E+005,0.2962827626469100E+005,0.2844166329137456E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2855218225971179E+005,0.2739303160657111E+005,0.2855952909894404E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1883507933578873E+001,0.1918177199250793E+001,0.1905634561209329E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2854752726296016E+005,0.2730950844369521E+005,0.2850184777316992E+005,0.2725036948095559E+005,0.2662666518526699E+005,0.2874698498068091E+005,0.2746437751086053E+005,0.2900711705314232E+005,0.2824252590272254E+005 -0.8000000000000004E-008,0.9674931898089308E+022,0.3934539040397312E+023,0.1880530477366847E+024,0.3111193827135186E+023,0.1326361589753578E+022,0.2695116698998525E+024,0.2677943855568840E+005,0.2661066444349981E+005,0.2898171222447894E+005,0.2761918436932524E+005,0.2957185500632267E+005,0.2840212771803483E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2850150919133007E+005,0.2725378501406088E+005,0.2867359270859263E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1883305011124146E+001,0.1917765035483723E+001,0.1906003876924255E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2850055193665582E+005,0.2717500148666461E+005,0.2964818760295249E+005,0.2677943855568840E+005,0.2661066444349981E+005,0.2871052137192835E+005,0.2738946915571443E+005,0.2934604768612707E+005,0.2818527382794462E+005 -0.8200000000000004E-008,0.9990255596785440E+022,0.4016122791012344E+023,0.1878878781802248E+024,0.3069651181116489E+023,0.1341377003977204E+022,0.2700772505022758E+024,0.2659640159376022E+005,0.2667813875034132E+005,0.2894252843099259E+005,0.2739793947174543E+005,0.2887330355349759E+005,0.2834312427385966E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2852884093408128E+005,0.2709076330425487E+005,0.2829587807745036E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1883414549952269E+001,0.1917277191830715E+001,0.1904769705176087E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2843828145046997E+005,0.2719556866859880E+005,0.2975069697317205E+005,0.2659640159376022E+005,0.2667813875034132E+005,0.2868282606977512E+005,0.2725428707232006E+005,0.2896815454977142E+005,0.2814659782766957E+005 -0.8400000000000004E-008,0.1028555874318341E+023,0.4116726066310634E+023,0.1876976829333922E+024,0.3015095176103983E+023,0.1426464351244414E+022,0.2707279184519662E+024,0.2617607071596902E+005,0.2651424630299928E+005,0.2889069867807283E+005,0.2738497680902597E+005,0.2907880873885282E+005,0.2825949626692623E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2849530885604825E+005,0.2709510220103136E+005,0.2862024476332972E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1883280133083968E+001,0.1917290250960098E+001,0.1905831507088078E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2844510125282776E+005,0.2710863486410046E+005,0.2972555993921500E+005,0.2617607071596902E+005,0.2651424630299928E+005,0.2865304677149560E+005,0.2722473231883617E+005,0.2913956271579625E+005,0.2807720412283255E+005 -0.8600000000000004E-008,0.1053081050883596E+023,0.4192303651236215E+023,0.1875525339292305E+024,0.2975054071507649E+023,0.1471510593915290E+022,0.2712284322594204E+024,0.2613755779272667E+005,0.2650049382140359E+005,0.2882028548429800E+005,0.2733305526927325E+005,0.2763113534257712E+005,0.2818797803696006E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2842289779306065E+005,0.2705274001875163E+005,0.2840935298341476E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1882988806153847E+001,0.1917162573439799E+001,0.1905143872635960E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2854717301207361E+005,0.2698031247972751E+005,0.2933417630331512E+005,0.2613755779272667E+005,0.2650049382140359E+005,0.2863221289618124E+005,0.2715337241912190E+005,0.2833911457974671E+005,0.2804205914071568E+005 -0.8800000000000004E-008,0.1088117017405388E+023,0.4277390998503426E+023,0.1873423181300997E+024,0.2929006801221864E+023,0.1541582526958876E+022,0.2718290488283654E+024,0.2591823758514962E+005,0.2649761619173114E+005,0.2879943749444386E+005,0.2747684557066673E+005,0.2844728760970358E+005,0.2817739066037587E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2833024614396880E+005,0.2701687293959827E+005,0.2790803021979035E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1882613919778248E+001,0.1917054163334860E+001,0.1903468246676149E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2848860659516200E+005,0.2685324471947143E+005,0.2883339454776802E+005,0.2591823758514962E+005,0.2649761619173114E+005,0.2858077522694650E+005,0.2716905643102321E+005,0.2841045895586299E+005,0.2799331675238466E+005 -0.9000000000000004E-008,0.1112141680163189E+023,0.4344459848702286E+023,0.1871571280213417E+024,0.2888965696625529E+023,0.1671716116896963E+022,0.2722845163931487E+024,0.2581817635385992E+005,0.2648199191168690E+005,0.2873252168992769E+005,0.2737277564881896E+005,0.2948773012655797E+005,0.2811476671587726E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2831905071740799E+005,0.2705766097436285E+005,0.2821044553669450E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1882568458268569E+001,0.1917177425184238E+001,0.1904486050392781E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2849710402676634E+005,0.2669714428739137E+005,0.2844641595402107E+005,0.2581817635385992E+005,0.2648199191168690E+005,0.2855101637760535E+005,0.2709008903506412E+005,0.2883377862373850E+005,0.2795599913660107E+005 -0.9200000000000005E-008,0.1149179701914798E+023,0.4402519450366971E+023,0.1869469122222109E+024,0.2857433326755916E+023,0.1721767497642381E+022,0.2727600045102302E+024,0.2608945643542585E+005,0.2648387678655041E+005,0.2866648139795729E+005,0.2744763575904581E+005,0.2948179565302281E+005,0.2808308149475870E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2825837571712843E+005,0.2701900392528581E+005,0.2771576186909087E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1882321460395429E+001,0.1917060612275874E+001,0.1902809798442818E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2845352352257627E+005,0.2667677276956829E+005,0.2939035795549649E+005,0.2608945643542585E+005,0.2648387678655041E+005,0.2849297862875841E+005,0.2710595316912756E+005,0.2896848268526601E+005,0.2792512958087330E+005 -0.9400000000000005E-008,0.1170701795635328E+023,0.4494113477131086E+023,0.1868167786322728E+024,0.2809384001240315E+023,0.1766813740313257E+022,0.2733255851126534E+024,0.2593712112415431E+005,0.2650593912669119E+005,0.2864777501516417E+005,0.2725479763373919E+005,0.2856216042021655E+005,0.2803577391850197E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2820847579823768E+005,0.2702666910037527E+005,0.2786600407572475E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1882117546428473E+001,0.1917083800889075E+001,0.1903325085473552E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2844936816214547E+005,0.2651562612029361E+005,0.2914445350194948E+005,0.2593712112415431E+005,0.2650593912669119E+005,0.2846997705369487E+005,0.2697784789626782E+005,0.2853892152179722E+005,0.2788563326184446E+005 -0.9600000000000005E-008,0.1199231082660216E+023,0.4562683868752309E+023,0.1866566142138875E+024,0.2773347007103614E+023,0.1801849706835049E+022,0.2738110835058840E+024,0.2579978052197922E+005,0.2654320748585563E+005,0.2862184610522697E+005,0.2720082252188417E+005,0.2844496689227686E+005,0.2800677450460519E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2821798084941981E+005,0.2683364015007924E+005,0.2900973576327451E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1882156442873576E+001,0.1916495876272829E+001,0.1907075626315709E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2836521340289150E+005,0.2644910221515603E+005,0.2908425967332956E+005,0.2579978052197922E+005,0.2654320748585563E+005,0.2843681645521665E+005,0.2688170946892449E+005,0.2878601462910950E+005,0.2785056240759527E+005 -0.9800000000000005E-008,0.1232264993952192E+023,0.4631754774180985E+023,0.1864564086909058E+024,0.2735307957737096E+023,0.1871921639878635E+022,0.2743216075894872E+024,0.2591522644687576E+005,0.2659721511802107E+005,0.2860408735657893E+005,0.2711928675293419E+005,0.2790698648051714E+005,0.2799164533567196E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2812997761552374E+005,0.2668334314590197E+005,0.2905810337803536E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1881795333268039E+001,0.1916032299927716E+001,0.1907227832746419E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2833238168670314E+005,0.2646806437845140E+005,0.2819276892594443E+005,0.2591522644687576E+005,0.2659721511802107E+005,0.2839548062411971E+005,0.2681018947167819E+005,0.2830758236985902E+005,0.2782176830341839E+005 -0.1000000000000001E-007,0.1261294794784535E+023,0.4714840066218380E+023,0.1862712185821478E+024,0.2689761201258766E+023,0.1952003849071304E+022,0.2748821830538359E+024,0.2584213116381391E+005,0.2649496519177742E+005,0.2854607610031399E+005,0.2706698141947325E+005,0.2798577974126886E+005,0.2792148439613955E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2811442162670125E+005,0.2654602587883429E+005,0.2889729092997293E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1881731271125803E+001,0.1915604236763345E+001,0.1906719840355969E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2832555898602423E+005,0.2656675150473663E+005,0.2738560609367231E+005,0.2584213116381391E+005,0.2649496519177742E+005,0.2836395740074249E+005,0.2677801108486922E+005,0.2806362409943638E+005,0.2777035007709858E+005 -0.1020000000000001E-007,0.1286320485157244E+023,0.4796924330640865E+023,0.1861160593018370E+024,0.2645715986202798E+023,0.2012065505965805E+022,0.2754177328278118E+024,0.2593784889675981E+005,0.2645202809440183E+005,0.2852975502000586E+005,0.2703076443911008E+005,0.2804751554054250E+005,0.2789930709311378E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2803883071705740E+005,0.2642489767829211E+005,0.2818337650369626E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1881418984515197E+001,0.1915223001667317E+001,0.1904395822500999E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2831465966123912E+005,0.2642953624856640E+005,0.2771805821256656E+005,0.2593784889675981E+005,0.2645202809440183E+005,0.2833301870383226E+005,0.2668907967539647E+005,0.2798955513161335E+005,0.2773311439385168E+005 -0.1040000000000001E-007,0.1314349258374678E+023,0.4860990097995000E+023,0.1859609000215262E+024,0.2612181561103368E+023,0.2042096334413056E+022,0.2758782055306697E+024,0.2585778184536299E+005,0.2646507063421072E+005,0.2847216040936347E+005,0.2699370467398399E+005,0.2800103352068237E+005,0.2785047833496306E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2802593420418951E+005,0.2628631047491962E+005,0.2758014724101462E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1881365540824214E+001,0.1914782570920398E+001,0.1902339941399977E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2830169448273314E+005,0.2644558293941984E+005,0.2765139513640182E+005,0.2585778184536299E+005,0.2646507063421072E+005,0.2830061793685789E+005,0.2663928289323656E+005,0.2778372380225432E+005,0.2769967954212734E+005 -0.1060000000000001E-007,0.1348884711089016E+023,0.4926557406771498E+023,0.1857506842223954E+024,0.2575644053159213E+023,0.2117173405531183E+022,0.2763787193381239E+024,0.2590463072028453E+005,0.2649455818193220E+005,0.2843874007723035E+005,0.2692572569172366E+005,0.2801064735447361E+005,0.2782422220544832E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2794585973127691E+005,0.2623606870563406E+005,0.2778312333610717E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1881032628144051E+001,0.1914621770241798E+001,0.1903041506162094E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2827280600709793E+005,0.2638825658845916E+005,0.2747192952228041E+005,0.2590463072028453E+005,0.2649455818193220E+005,0.2825577449331134E+005,0.2657930464865166E+005,0.2779184187378250E+005,0.2766729331944199E+005 -0.1080000000000001E-007,0.1378415025728813E+023,0.5005138074541804E+023,0.1855654941136374E+024,0.2532599865718153E+023,0.2192250476649310E+022,0.2769192742501743E+024,0.2592155279155563E+005,0.2646065207679445E+005,0.2842385350131242E+005,0.2682629827397414E+005,0.2812243570382754E+005,0.2779596836664978E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2788305023240730E+005,0.2613645298804267E+005,0.2762174520273588E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880770185345555E+001,0.1914301145611576E+001,0.1902484545900103E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2827006440528124E+005,0.2605989022701132E+005,0.2740212363031219E+005,0.2592155279155563E+005,0.2646065207679445E+005,0.2823133074286049E+005,0.2641361915355573E+005,0.2777572285402362E+005,0.2762647069196768E+005 -0.1100000000000001E-007,0.1399937119449343E+023,0.5082717714697202E+023,0.1854303553856248E+024,0.2491057219699456E+023,0.2247306995469270E+022,0.2774147829195540E+024,0.2605341845843789E+005,0.2638724055134637E+005,0.2835003742609801E+005,0.2666406222468203E+005,0.2743213548958705E+005,0.2771569466164470E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2789842321993040E+005,0.2623176039245057E+005,0.2841821904511428E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880834526651391E+001,0.1914607953074269E+001,0.1905172983452374E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2825183891237848E+005,0.2609147015221247E+005,0.2665738800716252E+005,0.2605341845843789E+005,0.2638724055134637E+005,0.2819804879520234E+005,0.2637874269761023E+005,0.2747980479278291E+005,0.2758886778316666E+005 -0.1120000000000001E-007,0.1441980279275494E+023,0.5148785537281154E+023,0.1851800984818977E+024,0.2454019197947846E+023,0.2327389204661939E+022,0.2779553378316046E+024,0.2597129534752314E+005,0.2636562569159497E+005,0.2831416775710883E+005,0.2662266393778635E+005,0.2743843455825227E+005,0.2767500748045734E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2784108398050742E+005,0.2624827923561677E+005,0.2834661902745721E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880594187874686E+001,0.1914660906286559E+001,0.1904937380406604E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2822127498949918E+005,0.2591852196524590E+005,0.2645266867129584E+005,0.2597129534752314E+005,0.2636562569159497E+005,0.2815786379461545E+005,0.2631533090626999E+005,0.2740345998615768E+005,0.2754344751658153E+005 -0.1140000000000001E-007,0.1466004942033294E+023,0.5214853359865106E+023,0.1850099237873632E+024,0.2415980148581329E+023,0.2427491966152775E+022,0.2784058002583133E+024,0.2605725149558710E+005,0.2631156715354501E+005,0.2824703178529309E+005,0.2660043242835147E+005,0.2794379013936942E+005,0.2762365554911874E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2786078162951487E+005,0.2625547018844369E+005,0.2766187436805811E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880676860227094E+001,0.1914683937275379E+001,0.1902623639388933E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2816749366547463E+005,0.2590089426827450E+005,0.2650576883093422E+005,0.2605725149558710E+005,0.2631156715354501E+005,0.2811833979933650E+005,0.2630257789175157E+005,0.2744942416985439E+005,0.2750797739018946E+005 -0.1160000000000001E-007,0.1496536284288000E+023,0.5279419641026695E+023,0.1848047131263070E+024,0.2378441613022265E+023,0.2532599865718153E+022,0.2788812883753948E+024,0.2645324098018807E+005,0.2616087411981280E+005,0.2818742315192441E+005,0.2656696183117877E+005,0.2765469260459748E+005,0.2756768414481130E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2789395763470997E+005,0.2620495285372194E+005,0.2787436744106294E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880815843776446E+001,0.1914521878196389E+001,0.1903353608930883E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2808841437052008E+005,0.2594846042087381E+005,0.2623470009334881E+005,0.2645324098018807E+005,0.2616087411981280E+005,0.2807842849573608E+005,0.2628782800789293E+005,0.2730386802470252E+005,0.2746846537103354E+005 -0.1180000000000001E-007,0.1535576361269426E+023,0.5355497739759731E+023,0.1845794819129527E+024,0.2337399480811023E+023,0.2592661522612654E+022,0.2794568792539671E+024,0.2641824182896952E+005,0.2613653322332898E+005,0.2818706107131443E+005,0.2652802117742012E+005,0.2663767285313021E+005,0.2754376693493759E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2784557846880367E+005,0.2590742024006394E+005,0.2684656906110318E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880613061624647E+001,0.1913554766752966E+001,0.1899717508826490E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2804352546648720E+005,0.2582742570622392E+005,0.2669132608581315E+005,0.2641824182896952E+005,0.2613653322332898E+005,0.2805200510407270E+005,0.2615357634959133E+005,0.2671074109810324E+005,0.2742392236075332E+005 -0.1200000000000001E-007,0.1567609244946493E+023,0.5422566589958590E+023,0.1843992969422692E+024,0.2301863000481776E+023,0.2632702627208989E+022,0.2799523879233468E+024,0.2634560358940174E+005,0.2609968652593762E+005,0.2813470922948845E+005,0.2646215854193301E+005,0.2711211233743961E+005,0.2749321205586454E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2785505693996786E+005,0.2573253101331704E+005,0.2658867492205753E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880652845119531E+001,0.1912976021755946E+001,0.1898761807584164E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2801824565161246E+005,0.2567424207164718E+005,0.2650785740393869E+005,0.2634560358940174E+005,0.2609968652593762E+005,0.2802442085325954E+005,0.2603230128533685E+005,0.2679286768145385E+005,0.2738222068102035E+005 -0.1220000000000001E-007,0.1593635962934111E+023,0.5480626191623276E+023,0.1842391325238838E+024,0.2269830116804708E+023,0.2692764284103491E+022,0.2803728195216083E+024,0.2635030086711099E+005,0.2609230687795851E+005,0.2808792894037163E+005,0.2638367189488031E+005,0.2786184652807707E+005,0.2745892154247808E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2782127643723868E+005,0.2577018112747311E+005,0.2633594653360924E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880510938739524E+001,0.1913101267326436E+001,0.1897807416302893E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2798870845207728E+005,0.2562138788711809E+005,0.2606112203792549E+005,0.2635030086711099E+005,0.2609230687795851E+005,0.2798620917976027E+005,0.2599336400326921E+005,0.2691990760253032E+005,0.2735143428292286E+005 -0.1240000000000001E-007,0.1615158056654640E+023,0.5537184251865598E+023,0.1840989886577966E+024,0.2238297746935095E+023,0.2757831079072534E+022,0.2807632202914225E+024,0.2626823329532367E+005,0.2621640889700893E+005,0.2803050181730240E+005,0.2636176531115288E+005,0.2698648875834414E+005,0.2742805968612103E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2777840368807064E+005,0.2559640059746572E+005,0.2673086832410251E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880330350864902E+001,0.1912520147360987E+001,0.1899290986813890E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2798659529674281E+005,0.2560276918802127E+005,0.2582363192259546E+005,0.2626823329532367E+005,0.2621640889700893E+005,0.2794884283055922E+005,0.2593040777183237E+005,0.2657902496769220E+005,0.2733612414258100E+005 -0.1260000000000001E-007,0.1646690426524254E+023,0.5592741284493012E+023,0.1839137985490386E+024,0.2207766404680390E+023,0.2812887597892494E+022,0.2811986673039077E+024,0.2607650241801438E+005,0.2624478871555645E+005,0.2798769838028058E+005,0.2624930507364476E+005,0.2720381293240576E+005,0.2738480592706141E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2775036615369998E+005,0.2574485903703470E+005,0.2617503583403593E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1880211956256476E+001,0.1913017071459748E+001,0.1897190331501260E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2794891775346043E+005,0.2552520915918430E+005,0.2576831955955193E+005,0.2607650241801438E+005,0.2624478871555645E+005,0.2791156756527193E+005,0.2590022366915220E+005,0.2650457563747742E+005,0.2730061176821233E+005 -0.1280000000000001E-007,0.1677722282586413E+023,0.5661812189921689E+023,0.1837185981641315E+024,0.2169226841506418E+023,0.2892969807085163E+022,0.2816991811113618E+024,0.2579774610303554E+005,0.2618813877878804E+005,0.2797390071970959E+005,0.2619952243179783E+005,0.2717189491986808E+005,0.2734050595401338E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2768824288438131E+005,0.2573293367738062E+005,0.2639294674016804E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1879948791135829E+001,0.1912977363153801E+001,0.1898024236866120E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2793125417955539E+005,0.2550884399250222E+005,0.2601481148461777E+005,0.2579774610303554E+005,0.2618813877878804E+005,0.2788344725829516E+005,0.2587058592814117E+005,0.2662208105076560E+005,0.2725053779407117E+005 -0.1300000000000001E-007,0.1704249514381484E+023,0.5724376415853462E+023,0.1835434183315225E+024,0.2133690361177171E+023,0.2978057154352374E+022,0.2821446383999961E+024,0.2591026054274151E+005,0.2612682763430959E+005,0.2798327147650937E+005,0.2605381213830838E+005,0.2713570591033328E+005,0.2732654484183296E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2762342939201636E+005,0.2570993674647689E+005,0.2697126935191159E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1879672994964942E+001,0.1912900686998534E+001,0.1900173181335388E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2788490376447323E+005,0.2532767934873184E+005,0.2575629637653061E+005,0.2591026054274151E+005,0.2612682763430959E+005,0.2785635834075645E+005,0.2574857629767235E+005,0.2669060447226257E+005,0.2721620286909026E+005 -0.1320000000000001E-007,0.1736782911866006E+023,0.5767921117101975E+023,0.1833181871181681E+024,0.2105661587959737E+023,0.3103185606215918E+022,0.2825250288936612E+024,0.2595740997821880E+005,0.2613717620942994E+005,0.2794148336829064E+005,0.2605985040011791E+005,0.2719101574489804E+005,0.2730267368512118E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2754868805291571E+005,0.2534442938228195E+005,0.2690978088440642E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1879353376858633E+001,0.1911663622172473E+001,0.1899949012313589E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2789414303750480E+005,0.2539836719581482E+005,0.2581934564940021E+005,0.2595740997821880E+005,0.2613717620942994E+005,0.2782041357897911E+005,0.2567056485469446E+005,0.2671598729460579E+005,0.2718988568873340E+005 -0.1340000000000001E-007,0.1761308088431261E+023,0.5824479177344298E+023,0.1831430072855592E+024,0.2072127162860307E+023,0.3208293505781297E+022,0.2829304450776991E+024,0.2578784108565590E+005,0.2613769640975378E+005,0.2792030682202037E+005,0.2588854799154175E+005,0.2791641246358706E+005,0.2727173687198233E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2749734089066837E+005,0.2542031170403040E+005,0.2677288756840907E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1879132814503281E+001,0.1911923328179167E+001,0.1899446306363354E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2786377725038085E+005,0.2538291282505945E+005,0.2573831562707034E+005,0.2578784108565590E+005,0.2613769640975378E+005,0.2778833258503726E+005,0.2561271995878783E+005,0.2697021221482322E+005,0.2715537839971182E+005 -0.1360000000000001E-007,0.1800348165412687E+023,0.5884540834238799E+023,0.1828827401056830E+024,0.2035589654916152E+023,0.3338427095719383E+022,0.2834259537470787E+024,0.2561527382839088E+005,0.2609645092287755E+005,0.2790592716453485E+005,0.2585226163648334E+005,0.2788983108986241E+005,0.2723705037417571E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2746218406575388E+005,0.2532553519564614E+005,0.2608908612585904E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1878981332446011E+001,0.1911598718857358E+001,0.1896857656105080E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2781033492202950E+005,0.2534230067586532E+005,0.2575662734586517E+005,0.2561527382839088E+005,0.2609645092287755E+005,0.2775692698057048E+005,0.2555901377977562E+005,0.2677596666888850E+005,0.2710672554107677E+005 -0.1380000000000001E-007,0.1836385159549388E+023,0.5945603518748209E+023,0.1826825345827013E+024,0.2003056257431630E+023,0.3378468200315718E+022,0.2839114521403093E+024,0.2570697311059335E+005,0.2605360692949114E+005,0.2789227374509838E+005,0.2566901407304145E+005,0.2759628665251680E+005,0.2720549799540404E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2748332751850123E+005,0.2523987735175020E+005,0.2628290251933226E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1879072479807153E+001,0.1911303276064444E+001,0.1897604814905252E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2768289396970259E+005,0.2524977582226455E+005,0.2649965566485807E+005,0.2570697311059335E+005,0.2605360692949114E+005,0.2771969246260772E+005,0.2542901781523263E+005,0.2691698620605697E+005,0.2706943500522814E+005 -0.1400000000000001E-007,0.1871421126071181E+023,0.5998657982338352E+023,0.1824623085074215E+024,0.1972024401369471E+023,0.3468560685657471E+022,0.2843519042908690E+024,0.2569400139810168E+005,0.2595409945523886E+005,0.2782827653613079E+005,0.2565613521030947E+005,0.2752057831542840E+005,0.2713804315680489E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2750484009958276E+005,0.2508459091874780E+005,0.2623585634315613E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1879165077699795E+001,0.1910762612490310E+001,0.1897424449038077E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2765536041030206E+005,0.2531487482437824E+005,0.2655457429744886E+005,0.2569400139810168E+005,0.2595409945523886E+005,0.2768965176156832E+005,0.2539934643965291E+005,0.2688705620168139E+005,0.2702355423302314E+005 -0.1420000000000001E-007,0.1903954523555703E+023,0.6048208849276317E+023,0.1822570978463653E+024,0.1942994600537128E+023,0.3553648032924681E+022,0.2847623256129814E+024,0.2568536955245599E+005,0.2601561825779550E+005,0.2773871392742591E+005,0.2561550376622651E+005,0.2724818362496838E+005,0.2708445533364238E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2748993484058617E+005,0.2508961543998063E+005,0.2643856974065587E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1879100935189980E+001,0.1910780209598415E+001,0.1898197118592065E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2765384004249042E+005,0.2511676325788073E+005,0.2639257173775929E+005,0.2568536955245599E+005,0.2601561825779550E+005,0.2764608135950595E+005,0.2532576252685675E+005,0.2677733153695857E+005,0.2699952189950244E+005 -0.1440000000000001E-007,0.1937488948655133E+023,0.6113776158052814E+023,0.1820618974614581E+024,0.1907458120207881E+023,0.3608704551744641E+022,0.2852578342823610E+024,0.2559209891699388E+005,0.2607987627028074E+005,0.2771221004498280E+005,0.2564668573108285E+005,0.2708985150845407E+005,0.2707237110161184E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2739959765599930E+005,0.2494388572197329E+005,0.2618466280559580E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1878710721775358E+001,0.1910266994364188E+001,0.1897227459928496E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2759286757660081E+005,0.2527375423394436E+005,0.2630548749131143E+005,0.2559209891699388E+005,0.2607987627028074E+005,0.2759213039385104E+005,0.2534446894886285E+005,0.2661341704013234E+005,0.2696949610435573E+005 -0.1460000000000001E-007,0.1967519777102383E+023,0.6157821373108782E+023,0.1818867176288492E+024,0.1882932943642627E+023,0.3658755932490059E+022,0.2856282144998772E+024,0.2552606690795397E+005,0.2602610707615543E+005,0.2764061416450977E+005,0.2557406750088559E+005,0.2774137702082997E+005,0.2701194511104405E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2742638163338294E+005,0.2480159778757764E+005,0.2626831346775057E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1878826678075117E+001,0.1909760172467002E+001,0.1897548951192071E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2757875759674057E+005,0.2520422230651907E+005,0.2629090609966943E+005,0.2552606690795397E+005,0.2602610707615543E+005,0.2756411580876427E+005,0.2525351769505134E+005,0.2691555438690408E+005,0.2693152148683496E+005 -0.1480000000000001E-007,0.2001054202201813E+023,0.6209374295276562E+023,0.1816614864154948E+024,0.1851400573773013E+023,0.3773874108204521E+022,0.2860536512362132E+024,0.2557680667585249E+005,0.2610533965914901E+005,0.2763162490613363E+005,0.2546444821588660E+005,0.2800913912452674E+005,0.2702128757908802E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2733302026696951E+005,0.2469919722090788E+005,0.2636539650354065E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1878421523917005E+001,0.1909391870882147E+001,0.1897919554700876E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2749561847415323E+005,0.2520624472648205E+005,0.2596008714993839E+005,0.2557680667585249E+005,0.2610533965914901E+005,0.2751053342571010E+005,0.2517823330077375E+005,0.2696276635151830E+005,0.2691205799265495E+005 -0.1500000000000001E-007,0.2033587599686335E+023,0.6255922079369801E+023,0.1814612808925131E+024,0.1824372828170488E+023,0.3848951179322647E+022,0.2864490571441020E+024,0.2563521855420466E+005,0.2607587601496321E+005,0.2761108308692031E+005,0.2541500055050332E+005,0.2781610400980481E+005,0.2699841599138892E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2726410283573904E+005,0.2463757802701561E+005,0.2637955133542069E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1878120705813499E+001,0.1909168794613474E+001,0.1897973365396862E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2746073748607059E+005,0.2521355412993341E+005,0.2614869532382483E+005,0.2563521855420466E+005,0.2607587601496321E+005,0.2747262055671981E+005,0.2514186730983283E+005,0.2693738851398440E+005,0.2688149925201779E+005 -0.1520000000000001E-007,0.2063117914326132E+023,0.6308476029152490E+023,0.1812810959218296E+024,0.1794842513530691E+023,0.3914017974291691E+022,0.2868594784662144E+024,0.2574570326053805E+005,0.2599510755760665E+005,0.2761306174563698E+005,0.2536214615143118E+005,0.2809823332384826E+005,0.2698872999877025E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2719661820415322E+005,0.2464298470502918E+005,0.2566853835005385E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1877824696386562E+001,0.1909188412026444E+001,0.1895198363209707E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2744304926690225E+005,0.2507047069155107E+005,0.2538126356511230E+005,0.2574570326053805E+005,0.2599510755760665E+005,0.2744992398422998E+005,0.2507899196559341E+005,0.2664233707168693E+005,0.2684805356654711E+005 -0.1540000000000001E-007,0.2099154908462833E+023,0.6356525354668092E+023,0.1810808903988479E+024,0.1768815795543074E+023,0.3954059078888025E+022,0.2872799100644759E+024,0.2591825885620738E+005,0.2594851170412932E+005,0.2758816692595248E+005,0.2519815178453357E+005,0.2785501611261224E+005,0.2695986373216224E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2713867400935053E+005,0.2462124008841894E+005,0.2572042151185154E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1877569385222640E+001,0.1909109463049797E+001,0.1895405951163611E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2740317935320073E+005,0.2504226837374925E+005,0.2540537307952207E+005,0.2591825885620738E+005,0.2594851170412932E+005,0.2741166135885518E+005,0.2499361682854209E+005,0.2655774522832524E+005,0.2681815832168654E+005 -0.1560000000000000E-007,0.2139696526866621E+023,0.6409079304450781E+023,0.1808506540474190E+024,0.1739785994710731E+023,0.4009115597707985E+022,0.2877453879054083E+024,0.2574149782693399E+005,0.2596188450206719E+005,0.2753033174130226E+005,0.2509075360624690E+005,0.2767816305265623E+005,0.2690252181610854E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2716908209175676E+005,0.2447451490182552E+005,0.2604931580223917E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1877703500826560E+001,0.1908573134071103E+001,0.1896702992357067E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2733723095157841E+005,0.2500212171144548E+005,0.2513073735717459E+005,0.2574149782693399E+005,0.2596188450206719E+005,0.2737555314246564E+005,0.2489485202153881E+005,0.2649146690900734E+005,0.2677686322102640E+005 -0.1580000000000000E-007,0.2174231979580960E+023,0.6463635309463286E+023,0.1806454433863628E+024,0.1709254652456026E+023,0.4074182392677029E+022,0.2881908451940426E+024,0.2567667637761974E+005,0.2588305424294633E+005,0.2748460428218952E+005,0.2506397802867492E+005,0.2739171923680707E+005,0.2684412592885009E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2720430941260168E+005,0.2432522543755010E+005,0.2563420556876751E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1877858505059286E+001,0.1908020897749200E+001,0.1895060541995452E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2728590131167904E+005,0.2504335347046161E+005,0.2517682109334754E+005,0.2567667637761974E+005,0.2588305424294633E+005,0.2735029502806318E+005,0.2485396064163548E+005,0.2626621917136564E+005,0.2673157003121489E+005 -0.1600000000000000E-007,0.2207265890872936E+023,0.6493666137910537E+023,0.1804152070349339E+024,0.1687732558735496E+023,0.4204315982615115E+022,0.2885061688927387E+024,0.2560506517239436E+005,0.2588862019395416E+005,0.2744879347798151E+005,0.2500657815684587E+005,0.2707954275402094E+005,0.2680832557808896E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2719387132440155E+005,0.2410874167080382E+005,0.2566820448093087E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1877812617240165E+001,0.1907208150468624E+001,0.1895197024709870E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2726931266485518E+005,0.2490146768814413E+005,0.2521411536958743E+005,0.2560506517239436E+005,0.2588862019395416E+005,0.2732700218919887E+005,0.2472823385919494E+005,0.2615054553437209E+005,0.2670234342216718E+005 -0.1620000000000000E-007,0.2236796205512732E+023,0.6537210839159050E+023,0.1802200066500267E+024,0.1661205326940425E+023,0.4299413606031410E+022,0.2888715439721802E+024,0.2564843751165859E+005,0.2590334440621581E+005,0.2744883677567614E+005,0.2477385194658156E+005,0.2681475817078182E+005,0.2679641351798256E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2709747511583804E+005,0.2407318469747007E+005,0.2545840729381515E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1877387206740607E+001,0.1907073283602239E+001,0.1894349122804132E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2723467500996299E+005,0.2508543756484375E+005,0.2545473360812274E+005,0.2564843751165859E+005,0.2590334440621581E+005,0.2729064219045937E+005,0.2467061682431290E+005,0.2604754271286152E+005,0.2668036417415403E+005 -0.1640000000000000E-007,0.2270831144419617E+023,0.6586261192289560E+023,0.1800298114031942E+024,0.1634678095145353E+023,0.4339454710627744E+022,0.2892869704323672E+024,0.2569412740968824E+005,0.2585205495664740E+005,0.2745808835535987E+005,0.2483085159690700E+005,0.2687027206948426E+005,0.2679669736817812E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2703039192182317E+005,0.2403229512409438E+005,0.2552975609748246E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1877089407376528E+001,0.1906917704964776E+001,0.1894639016041681E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2714873203160941E+005,0.2502993415547652E+005,0.2522237007261732E+005,0.2569412740968824E+005,0.2585205495664740E+005,0.2725138214459859E+005,0.2466802696118371E+005,0.2602387563852712E+005,0.2664616228632780E+005 -0.1660000000000000E-007,0.2302864028096684E+023,0.6628304352115712E+023,0.1798296058802125E+024,0.1609652404772644E+023,0.4419536919820413E+022,0.2896573506498833E+024,0.2566082788103518E+005,0.2585733594211485E+005,0.2741988240194153E+005,0.2489329060906708E+005,0.2654577590613354E+005,0.2676872868581184E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2697100741731609E+005,0.2410944639389769E+005,0.2564373691841382E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1876824575327140E+001,0.1907210819513627E+001,0.1895098839773392E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2709974065388400E+005,0.2516756164565435E+005,0.2504997232591915E+005,0.2566082788103518E+005,0.2585733594211485E+005,0.2720426790105263E+005,0.2475627233649084E+005,0.2586397854416254E+005,0.2661685055411321E+005 -0.1679999999999999E-007,0.2329391259891756E+023,0.6670848025749317E+023,0.1796694414618272E+024,0.1585627742014844E+023,0.4474593438640373E+022,0.2900027051770267E+024,0.2562397791856867E+005,0.2579415451015178E+005,0.2738189890562429E+005,0.2486588591270018E+005,0.2669590985243183E+005,0.2672732226815251E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2693122269343030E+005,0.2429220260749394E+005,0.2557139216969534E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1876646511724513E+001,0.1907897841046056E+001,0.1894807451545470E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2709619569134152E+005,0.2515264895116260E+005,0.2489163206134028E+005,0.2562397791856867E+005,0.2579415451015178E+005,0.2717581497100872E+005,0.2479046455087479E+005,0.2586350081024163E+005,0.2658267679156640E+005 -0.1699999999999999E-007,0.2363426198798640E+023,0.6709888102730743E+023,0.1794692359388455E+024,0.1563104620679406E+023,0.4534655095534875E+022,0.2903680802564683E+024,0.2558642144786613E+005,0.2583200914342538E+005,0.2731767442654095E+005,0.2493643207918506E+005,0.2668751175557579E+005,0.2669542199468938E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2690628986264054E+005,0.2401896019141901E+005,0.2588865582156061E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1876534657878502E+001,0.1906866854884615E+001,0.1896073449093552E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2706937948717275E+005,0.2506648325594451E+005,0.2498721158505898E+005,0.2558642144786613E+005,0.2583200914342538E+005,0.2713319673047374E+005,0.2472079242507803E+005,0.2597474529456649E+005,0.2655866145755468E+005 -0.1719999999999999E-007,0.2394958568668253E+023,0.6747426638289807E+023,0.1792740355539383E+024,0.1540581499343967E+023,0.4609732166653002E+022,0.2907134347836116E+024,0.2540226914865997E+005,0.2577109715022032E+005,0.2732052810194570E+005,0.2497035494753482E+005,0.2673430571059959E+005,0.2666903813855903E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2686864345597825E+005,0.2403847960427078E+005,0.2557189159384741E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1876365383567791E+001,0.1906941269395930E+001,0.1894809468659694E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2703966918490685E+005,0.2483322215843316E+005,0.2552586469495881E+005,0.2540226914865997E+005,0.2577109715022032E+005,0.2711553338998561E+005,0.2467336427565882E+005,0.2606431833426890E+005,0.2651626200346577E+005 -0.1739999999999999E-007,0.2425990424730413E+023,0.6790470825730866E+023,0.1790688248928821E+024,0.1514054267548896E+023,0.4709834928143838E+022,0.2910838150011277E+024,0.2548306393641126E+005,0.2576494432656416E+005,0.2727320449008559E+005,0.2492007489750519E+005,0.2700143272731719E+005,0.2664536379767581E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2680801082003981E+005,0.2409147103320289E+005,0.2612273850717225E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1876091775864691E+001,0.1907142692212415E+001,0.1896988166458359E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2697831376308804E+005,0.2500855881935827E+005,0.2515411023087706E+005,0.2548306393641126E+005,0.2576494432656416E+005,0.2706050699851257E+005,0.2471690869356689E+005,0.2622406188064750E+005,0.2649137095262471E+005 -0.1759999999999999E-007,0.2455020225562755E+023,0.6837519123631559E+023,0.1788836347841241E+024,0.1486526008138916E+023,0.4789917137336507E+022,0.2914642054947929E+024,0.2562406947176905E+005,0.2572076889915265E+005,0.2721675580525618E+005,0.2482988415978859E+005,0.2730579285025612E+005,0.2661138421311756E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2673910325518957E+005,0.2399568752071401E+005,0.2550471803213949E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1875779353932739E+001,0.1906777976057222E+001,0.1894537466607465E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2699930160393102E+005,0.2505467101257629E+005,0.2525454612691663E+005,0.2562406947176905E+005,0.2572076889915265E+005,0.2702319531910455E+005,0.2466467629043641E+005,0.2621584342200799E+005,0.2646624999798406E+005 -0.1779999999999999E-007,0.2484050026395098E+023,0.6881564338687527E+023,0.1786934395372915E+024,0.1459998776343844E+023,0.4880009622678259E+022,0.2918295805742344E+024,0.2572557749199186E+005,0.2565864767535971E+005,0.2716592296176643E+005,0.2469027123284332E+005,0.2702466689634953E+005,0.2656167703105008E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2674175292299860E+005,0.2411068291209828E+005,0.2577806084806877E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1875791396444937E+001,0.1907215502290931E+001,0.1895635608096678E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2696389564335490E+005,0.2496186635308425E+005,0.2494937716092682E+005,0.2572557749199186E+005,0.2565864767535971E+005,0.2699143989836318E+005,0.2460887669844615E+005,0.2608005632592047E+005,0.2643496935958183E+005 -0.1799999999999999E-007,0.2519085992916890E+023,0.6928612636588220E+023,0.1784832237381607E+024,0.1432971030741319E+023,0.4950081555721845E+022,0.2922400018963469E+024,0.2564540783768821E+005,0.2569144911234539E+005,0.2714211512128984E+005,0.2468203939056443E+005,0.2683388760488476E+005,0.2654331860229661E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2674531996077867E+005,0.2395598521973394E+005,0.2563421578460477E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1875807604639480E+001,0.1906625960036598E+001,0.1895060583058525E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2688513711951280E+005,0.2464357917864383E+005,0.2472975935028214E+005,0.2564540783768821E+005,0.2569144911234539E+005,0.2695911590789182E+005,0.2447046949192007E+005,0.2589383679454819E+005,0.2640525621240460E+005 -0.1819999999999998E-007,0.2558626583705770E+023,0.6972157337836733E+023,0.1782429771105827E+024,0.1406944312753701E+023,0.5035168902989055E+022,0.2926554283565338E+024,0.2560886384493014E+005,0.2567979382497994E+005,0.2710521557160425E+005,0.2458113955602292E+005,0.2636285534767608E+005,0.2650068568461231E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2668834227624131E+005,0.2405025551055655E+005,0.2546862559133672E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1875548198148388E+001,0.1906986105609269E+001,0.1894390737984507E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2683466485248686E+005,0.2490674101506742E+005,0.2507836325004001E+005,0.2560886384493014E+005,0.2567979382497994E+005,0.2691279929320987E+005,0.2452884676510335E+005,0.2574452590779902E+005,0.2637034136079415E+005 -0.1839999999999998E-007,0.2594663577842471E+023,0.6999185083439259E+023,0.1780277561733774E+024,0.1389926843300259E+023,0.5105240836032641E+022,0.2929707520552300E+024,0.2555211817021309E+005,0.2564204706694601E+005,0.2701980888554528E+005,0.2475882478208431E+005,0.2620284286632918E+005,0.2643916877664301E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2666915533398461E+005,0.2392498025207478E+005,0.2535221030961369E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1875460600387418E+001,0.1906506900093526E+001,0.1893914674534211E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2687686189360689E+005,0.2488140254664871E+005,0.2512400296745314E+005,0.2555211817021309E+005,0.2564204706694601E+005,0.2688257722078065E+005,0.2456414245708418E+005,0.2565617156889153E+005,0.2633701565838823E+005 -0.1859999999999998E-007,0.2623192864867359E+023,0.7038725674228139E+023,0.1778675917549921E+024,0.1368404749579729E+023,0.5140276802554433E+022,0.2933111014442988E+024,0.2543610175973286E+005,0.2570737274815087E+005,0.2698761013217740E+005,0.2470206069202274E+005,0.2615028803911353E+005,0.2642032478917705E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2665575375495677E+005,0.2387130913256697E+005,0.2582372370050502E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1875399342486742E+001,0.1906300082391419E+001,0.1895816831703789E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2680073139299363E+005,0.2484898649812559E+005,0.2497171943077341E+005,0.2543610175973286E+005,0.2570737274815087E+005,0.2684272826271979E+005,0.2451530220504065E+005,0.2571868675690356E+005,0.2631618979011296E+005 -0.1879999999999998E-007,0.2673744759420232E+023,0.7067254961253028E+023,0.1775873040228178E+024,0.1351387280126287E+023,0.5195333321374392E+022,0.2937065073521876E+024,0.2537375574684601E+005,0.2569878871937096E+005,0.2697723555869874E+005,0.2462868824817783E+005,0.2621495710636000E+005,0.2640209571278337E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2661826085335578E+005,0.2352622991201507E+005,0.2563009799453540E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1875227644020963E+001,0.1904948181518915E+001,0.1895044028790113E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2671911209348859E+005,0.2482573886906345E+005,0.2516138662817211E+005,0.2537375574684601E+005,0.2569878871937096E+005,0.2680423674571863E+005,0.2438161546557990E+005,0.2574861132082240E+005,0.2627787604505873E+005 -0.1899999999999998E-007,0.2710782781171841E+023,0.7102290927774821E+023,0.1773570676713888E+024,0.1329364672598303E+023,0.5285425806716145E+022,0.2940668772935546E+024,0.2545465693147497E+005,0.2566650055455143E+005,0.2693612471187699E+005,0.2450709219882802E+005,0.2651256151287234E+005,0.2637549990320485E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2658396336223146E+005,0.2328713064064243E+005,0.2538968549091977E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1875070164165357E+001,0.1903988369706310E+001,0.1894068391464493E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2668973984629214E+005,0.2463331575236961E+005,0.2553375137031940E+005,0.2545465693147497E+005,0.2566650055455143E+005,0.2676840322782982E+005,0.2420721546087242E+005,0.2592010666126737E+005,0.2625013922840499E+005 -0.1919999999999998E-007,0.2746319261501088E+023,0.7140830490948792E+023,0.1771468518722581E+024,0.1306841551262865E+023,0.5350492601685188E+022,0.2944372575110707E+024,0.2552849396404094E+005,0.2565665156677822E+005,0.2686355556424804E+005,0.2429753507846802E+005,0.2651846288583199E+005,0.2632616345018755E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2654138356768818E+005,0.2299958880339480E+005,0.2528676728751253E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874874101696617E+001,0.1902808114834025E+001,0.1893645166082466E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2670637546315935E+005,0.2465719028004113E+005,0.2585600012459835E+005,0.2552849396404094E+005,0.2565665156677822E+005,0.2672996880742399E+005,0.2404395243897381E+005,0.2598792790032034E+005,0.2622489562664555E+005 -0.1939999999999998E-007,0.2787861907519785E+023,0.7168358750358772E+023,0.1769216206589037E+024,0.1291325623231786E+023,0.5385528568206981E+022,0.2947826120382141E+024,0.2541872119294433E+005,0.2570232427762176E+005,0.2681855750351458E+005,0.2418221530524578E+005,0.2645050920526088E+005,0.2629251900596691E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2650187073474843E+005,0.2283865161739185E+005,0.2494740875547089E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874691610286096E+001,0.1902134776437095E+001,0.1892225367584522E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2670380841939055E+005,0.2450610625062596E+005,0.2570451255770323E+005,0.2541872119294433E+005,0.2570232427762176E+005,0.2669881566731193E+005,0.2390579976337925E+005,0.2582136580599979E+005,0.2619704996186014E+005 -0.1959999999999997E-007,0.2835410719227932E+023,0.7208900368762560E+023,0.1766363277886548E+024,0.1266299932859076E+023,0.5480626191623276E+022,0.2952230641887738E+024,0.2527386448127518E+005,0.2568037071722123E+005,0.2676846630563361E+005,0.2413424099976589E+005,0.2641731990330451E+005,0.2623971519636178E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2652009537422513E+005,0.2263442267827669E+005,0.2479282290826517E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874775847488614E+001,0.1901266764556117E+001,0.1891565976472106E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2664542014226269E+005,0.2438692888008271E+005,0.2579723568267991E+005,0.2527386448127518E+005,0.2568037071722123E+005,0.2666493825381724E+005,0.2379427747612183E+005,0.2579148076882166E+005,0.2615157247895147E+005 -0.1979999999999997E-007,0.2868945144327362E+023,0.7258451235700525E+023,0.1764511376798968E+024,0.1239772701064005E+023,0.5515662158145069E+022,0.2956384906489607E+024,0.2533245951778327E+005,0.2562859120607413E+005,0.2670043030301006E+005,0.2406934112714212E+005,0.2645227705807373E+005,0.2618955804118485E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2652424619067491E+005,0.2266910004160681E+005,0.2488504258998551E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874795017402112E+001,0.1901415233273956E+001,0.1891960309708669E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2660952251412762E+005,0.2430078591519137E+005,0.2538162490077369E+005,0.2533245951778327E+005,0.2562859120607413E+005,0.2662593722031888E+005,0.2375063111189921E+005,0.2571134857114717E+005,0.2611790843924900E+005 -0.1999999999999997E-007,0.2897474431352251E+023,0.7304999019793763E+023,0.1763059886757351E+024,0.1216248552113659E+023,0.5520667296219610E+022,0.2960138760045514E+024,0.2522278245468795E+005,0.2562262032206638E+005,0.2663859068494899E+005,0.2389626854816080E+005,0.2665350305799101E+005,0.2613688976620795E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2652824865796039E+005,0.2259765223273962E+005,0.2480651057285845E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874813496632715E+001,0.1901108845323698E+001,0.1891624686958555E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2659343844344724E+005,0.2439574737862116E+005,0.2534039020076394E+005,0.2522278245468795E+005,0.2562262032206638E+005,0.2659536402802323E+005,0.2368328055797656E+005,0.2576546249078788E+005,0.2608583081399154E+005 -0.2019999999999997E-007,0.2942020160215673E+023,0.7340535500123010E+023,0.1760357112197098E+024,0.1193725430778220E+023,0.5615764919635905E+022,0.2964142870505147E+024,0.2516532108251797E+005,0.2556207943341075E+005,0.2660309671941800E+005,0.2391173184367058E+005,0.2672369847883049E+005,0.2609648777738839E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2648252595173060E+005,0.2275435048708089E+005,0.2465069847815359E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874602071577569E+001,0.1901778336506664E+001,0.1890952583031059E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2657048283514786E+005,0.2413479706555848E+005,0.2534043031777802E+005,0.2516532108251797E+005,0.2556207943341075E+005,0.2656073063387787E+005,0.2365745645815430E+005,0.2575337094465565E+005,0.2604270351001592E+005 -0.2039999999999997E-007,0.2973552530085286E+023,0.7378074035682074E+023,0.1758355056967281E+024,0.1170701795635328E+023,0.5700852266903115E+022,0.2967596415776581E+024,0.2518473149783918E+005,0.2546699564072705E+005,0.2654865792395448E+005,0.2382419671096079E+005,0.2693077278960256E+005,0.2604292928790810E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2653239587934387E+005,0.2286124411913802E+005,0.2494756310650911E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874832638436541E+001,0.1902229862483415E+001,0.1892226021967783E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2649509802213348E+005,0.2400833633140145E+005,0.2541044875271344E+005,0.2518473149783918E+005,0.2546699564072705E+005,0.2652864166714026E+005,0.2361216698077252E+005,0.2594512185164818E+005,0.2600377013937999E+005 -0.2059999999999997E-007,0.3017597745141254E+023,0.7406102808899508E+023,0.1755952590691501E+024,0.1154685353796794E+023,0.5740893371499449E+022,0.2971200115190252E+024,0.2521472537919661E+005,0.2541066024205553E+005,0.2652625419933215E+005,0.2379141472123875E+005,0.2676369288414656E+005,0.2601328174937344E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2651000573666310E+005,0.2281208377794789E+005,0.2471823461120202E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874729225560416E+001,0.1902022722380630E+001,0.1891244924272911E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2643406141371397E+005,0.2382375541594460E+005,0.2564999410400476E+005,0.2521472537919661E+005,0.2541066024205553E+005,0.2649500249006139E+005,0.2353090727439601E+005,0.2587911249210003E+005,0.2596759659016838E+005 -0.2079999999999996E-007,0.3046127032166142E+023,0.7425622847390221E+023,0.1753900484080939E+024,0.1138668911958261E+023,0.5866021823362995E+022,0.2973602581466031E+024,0.2510980818633455E+005,0.2543737486543370E+005,0.2650017837984163E+005,0.2412155185947611E+005,0.2665466409659617E+005,0.2600431290019585E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2641761929438305E+005,0.2278153753359666E+005,0.2454662366836277E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874300709753366E+001,0.1901893571332611E+001,0.1890498989288904E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2643681310449416E+005,0.2375583838363993E+005,0.2584737615430038E+005,0.2510980818633455E+005,0.2543737486543370E+005,0.2645923296371120E+005,0.2364632117826426E+005,0.2584197633737122E+005,0.2594593264863282E+005 -0.2099999999999996E-007,0.3087169164377385E+023,0.7461659841526922E+023,0.1751548069185905E+024,0.1117647332045185E+023,0.5926083480257497E+022,0.2977456537783429E+024,0.2523407491487794E+005,0.2538057386604317E+005,0.2642568027565625E+005,0.2430219249985849E+005,0.2655699065757145E+005,0.2596312404698893E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2642227116815709E+005,0.2291940181128264E+005,0.2451267236951509E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874322356573894E+001,0.1902473785640517E+001,0.1890350200770531E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2637775429821086E+005,0.2342463751601394E+005,0.2583712688666594E+005,0.2523407491487794E+005,0.2538057386604317E+005,0.2641080728658343E+005,0.2366679233175405E+005,0.2578718870650603E+005,0.2591520220833169E+005 -0.2119999999999996E-007,0.3116198965209727E+023,0.7489688614744356E+023,0.1749896373621306E+024,0.1101630890206651E+023,0.5966124584853831E+022,0.2980309466485917E+024,0.2528595064785623E+005,0.2538954649771442E+005,0.2639845601414818E+005,0.2431958067872912E+005,0.2635907758195617E+005,0.2595095707857208E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2634537497169947E+005,0.2291935969503104E+005,0.2451801841243969E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873963572006343E+001,0.1902473609438119E+001,0.1890373656129845E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2635406331140847E+005,0.2336585549533337E+005,0.2610479887755065E+005,0.2528595064785623E+005,0.2538954649771442E+005,0.2637106899886648E+005,0.2365730595023064E+005,0.2578017615203260E+005,0.2589880791390380E+005 -0.2139999999999996E-007,0.3159243152650787E+023,0.7525725608881057E+023,0.1747594010107016E+024,0.1082110851715938E+023,0.5996155413301081E+022,0.2984263525564805E+024,0.2528148714547819E+005,0.2534255760804687E+005,0.2635375700034373E+005,0.2416114965978267E+005,0.2623802192236233E+005,0.2590340765980633E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2632003643122967E+005,0.2272903774826361E+005,0.2466730128262185E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873844897758636E+001,0.1901670802555714E+001,0.1891024596542391E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2632297012012366E+005,0.2349294232597146E+005,0.2614668257021340E+005,0.2528148714547819E+005,0.2534255760804687E+005,0.2633560691423039E+005,0.2357291237755137E+005,0.2578047747100078E+005,0.2586225584738770E+005 -0.2159999999999996E-007,0.3189774494905492E+023,0.7557257978750671E+023,0.1745842211780927E+024,0.1064092354647588E+023,0.6041201655971957E+022,0.2987366711171021E+024,0.2521379753261642E+005,0.2536559935179432E+005,0.2631585052530486E+005,0.2422876792721290E+005,0.2581004067327257E+005,0.2587321948475622E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2623161570666419E+005,0.2251752628629054E+005,0.2468855561967229E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873429019584934E+001,0.1900762970423455E+001,0.1891116647102135E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2636496724246950E+005,0.2355534327501688E+005,0.2585493257018659E+005,0.2521379753261642E+005,0.2536559935179432E+005,0.2630718316012194E+005,0.2356224538925335E+005,0.2551530248140554E+005,0.2583845249956320E+005 -0.2179999999999996E-007,0.3225811489042193E+023,0.7582283669123379E+023,0.1743539848266638E+024,0.1046574371386691E+023,0.6141304417462794E+022,0.2990419845396492E+024,0.2531508278403258E+005,0.2538219427366123E+005,0.2630371604418471E+005,0.2418581522877032E+005,0.2565683933625048E+005,0.2587601050266785E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2623328324629624E+005,0.2227444354639711E+005,0.2482603250808852E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873436888047185E+001,0.1899698711627834E+001,0.1891708312499735E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2624483387257954E+005,0.2326489897048395E+005,0.2558305944834113E+005,0.2531508278403258E+005,0.2538219427366123E+005,0.2626738549383992E+005,0.2339261206617486E+005,0.2540737956796399E+005,0.2582194503210138E+005 -0.2199999999999996E-007,0.3260346941756531E+023,0.7607809873303542E+023,0.1741788049940548E+024,0.1033561012392883E+023,0.6146309555537336E+022,0.2993422928241217E+024,0.2531536154729573E+005,0.2528478004056146E+005,0.2624150312166933E+005,0.2413693851219462E+005,0.2549144316681720E+005,0.2580941195188263E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2629376989970698E+005,0.2239014525511881E+005,0.2507256282632301E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873721641193856E+001,0.1900208105467370E+001,0.1892753372636476E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2619622350141124E+005,0.2338124118902387E+005,0.2544671667092708E+005,0.2531536154729573E+005,0.2528478004056146E+005,0.2624257592516551E+005,0.2343686319878702E+005,0.2536344059349369E+005,0.2578323593368140E+005 -0.2219999999999995E-007,0.3299387018737958E+023,0.7632835563676251E+023,0.1739585789187750E+024,0.1018545598169257E+023,0.6196360936282753E+022,0.2996626216608924E+024,0.2525078706464469E+005,0.2522407839524778E+005,0.2617750043953187E+005,0.2381367836175578E+005,0.2544406239002227E+005,0.2573710433831164E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2632793153801053E+005,0.2277779112193538E+005,0.2482312854143271E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873881898813126E+001,0.1901877707879024E+001,0.1891695881031960E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2620204068733168E+005,0.2316469943325017E+005,0.2523260296328233E+005,0.2525078706464469E+005,0.2522407839524778E+005,0.2622564944949879E+005,0.2334017117362186E+005,0.2521225633171274E+005,0.2574416792439457E+005 -0.2239999999999995E-007,0.3328917333377754E+023,0.7659362795471323E+023,0.1737783939480914E+024,0.1002028642523269E+023,0.6261427731251798E+022,0.2999429093930667E+024,0.2529730142966524E+005,0.2523059332388187E+005,0.2610781305685241E+005,0.2405293149125998E+005,0.2537314874910715E+005,0.2570986648269759E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2637713031063065E+005,0.2272154569057420E+005,0.2517717279079287E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1874111984907664E+001,0.1901638929524979E+001,0.1893190753524516E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2610959932579977E+005,0.2279241898997649E+005,0.2511999051622958E+005,0.2529730142966524E+005,0.2523059332388187E+005,0.2618175762337372E+005,0.2332080972671041E+005,0.2524587295342424E+005,0.2572559270888266E+005 -0.2259999999999995E-007,0.3363953299899547E+023,0.7687391568688758E+023,0.1735932038393334E+024,0.9870132282996438E+022,0.6281448283549965E+022,0.3002582330917629E+024,0.2514565749921399E+005,0.2512767355764030E+005,0.2609270726522438E+005,0.2375937335059810E+005,0.2533433590911487E+005,0.2564696356254560E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2632672413177149E+005,0.2284861988727433E+005,0.2520380715422374E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873876241611665E+001,0.1902176753111933E+001,0.1893301544483345E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2618142721818983E+005,0.2292144127123267E+005,0.2475492910231062E+005,0.2514565749921399E+005,0.2512767355764030E+005,0.2618231588351186E+005,0.2326557576377959E+005,0.2513037792210812E+005,0.2567827144041133E+005 -0.2279999999999995E-007,0.3407498001148060E+023,0.7718923938558370E+023,0.1733479520736809E+024,0.9684942174238391E+022,0.6336504802369924E+022,0.3006336184473535E+024,0.2505727904571309E+005,0.2512083136285639E+005,0.2609182306391986E+005,0.2378256136347226E+005,0.2535512179721506E+005,0.2563533601016532E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2619998160363102E+005,0.2248510237892447E+005,0.2512189312782845E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873279565265205E+001,0.1900622319688331E+001,0.1892960071056023E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2619609764864804E+005,0.2278050452052085E+005,0.2466516939571039E+005,0.2505727904571309E+005,0.2512083136285639E+005,0.2615164317567321E+005,0.2313478019479987E+005,0.2509088156619561E+005,0.2564339103483216E+005 -0.2299999999999995E-007,0.3451543216204028E+023,0.7746952711775806E+023,0.1731027003080283E+024,0.9519772617778513E+022,0.6386556183115342E+022,0.3009939883887205E+024,0.2495319950207841E+005,0.2500006449656310E+005,0.2607775300860717E+005,0.2396505998505238E+005,0.2555355767193627E+005,0.2559348210798304E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2617800871467964E+005,0.2222228661668425E+005,0.2533069175761305E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873175547256276E+001,0.1899467379097684E+001,0.1893826207303190E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2616395308175241E+005,0.2285976407399273E+005,0.2449716452617501E+005,0.2495319950207841E+005,0.2500006449656310E+005,0.2613015916074192E+005,0.2316486300155468E+005,0.2518585829505076E+005,0.2559051068779349E+005 -0.2319999999999995E-007,0.3490583293185454E+023,0.7770977374533605E+023,0.1728624536804503E+024,0.9354603061318632E+022,0.6476648668457095E+022,0.3013093120874166E+024,0.2478570042775583E+005,0.2503440081966014E+005,0.2599240895325597E+005,0.2396907098276507E+005,0.2569379624386625E+005,0.2553630192581669E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2620613015420865E+005,0.2200130402855301E+005,0.2529543593789059E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1873308641511867E+001,0.1898475299874762E+001,0.1893680944077951E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2614724011106805E+005,0.2285031122511290E+005,0.2434109229187021E+005,0.2478570042775583E+005,0.2503440081966014E+005,0.2609571118006925E+005,0.2310318740499910E+005,0.2519191992374625E+005,0.2555789635509194E+005 -0.2339999999999994E-007,0.3535629535856331E+023,0.7802009230595765E+023,0.1726372224670959E+024,0.9199443781007836E+022,0.6476648668457095E+022,0.3016897025810818E+024,0.2484572301612600E+005,0.2500447206418683E+005,0.2594105070656375E+005,0.2368891755419287E+005,0.2536536825579530E+005,0.2548944249586669E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2612667755134667E+005,0.2197142065795700E+005,0.2539712864472183E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1872931882992386E+001,0.1898339636990711E+001,0.1894098869045379E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2616732088713507E+005,0.2277549669612577E+005,0.2434312192606089E+005,0.2484572301612600E+005,0.2500447206418683E+005,0.2605747944624848E+005,0.2295145978632824E+005,0.2507753725998056E+005,0.2552740054555954E+005 -0.2359999999999994E-007,0.3576171154260119E+023,0.7831539545235562E+023,0.1724220015298906E+024,0.9039279362622499E+022,0.6501674358829804E+022,0.3020400622462998E+024,0.2477602923582695E+005,0.2504424835727738E+005,0.2592000799593395E+005,0.2359598796584517E+005,0.2542118172365074E+005,0.2547719662800468E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2605891543143654E+005,0.2166612075581228E+005,0.2510607451900711E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1872608785754734E+001,0.1896932599394600E+001,0.1892893876461501E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2613546953358698E+005,0.2274700237208325E+005,0.2420288870506745E+005,0.2477602923582695E+005,0.2504424835727738E+005,0.2602055822088888E+005,0.2281900499065874E+005,0.2498115601171820E+005,0.2550187150366314E+005 -0.2379999999999994E-007,0.3622718938353358E+023,0.7867076025564808E+023,0.1721867600403872E+024,0.8859094391938994E+022,0.6506679496904345E+022,0.3024504835684121E+024,0.2479389611302804E+005,0.2507018277569738E+005,0.2591824742170934E+005,0.2367556661572705E+005,0.2523198788011363E+005,0.2548252859419702E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2593899518300153E+005,0.2159092723477328E+005,0.2474824677155815E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1872032949730583E+001,0.1896580058310264E+001,0.1891374334565993E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2608631298482215E+005,0.2261239916534900E+005,0.2406132215362883E+005,0.2479389611302804E+005,0.2507018277569738E+005,0.2597281229672386E+005,0.2279396728271924E+005,0.2475947444343482E+005,0.2547760442896143E+005 -0.2399999999999994E-007,0.3664261584372055E+023,0.7880589898366071E+023,0.1719565236889582E+024,0.8769001906597241E+022,0.6551725739575221E+022,0.3027257661625120E+024,0.2485010074889083E+005,0.2508947719156720E+005,0.2591058335383197E+005,0.2392161917551474E+005,0.2531548621933988E+005,0.2549797556213687E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2580379781244805E+005,0.2160540834071130E+005,0.2416826983425219E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1871377483993278E+001,0.1896648139578655E+001,0.1888817722244190E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2606516191828973E+005,0.2242005694309104E+005,0.2407345669145183E+005,0.2485010074889083E+005,0.2508947719156720E+005,0.2592649298351078E+005,0.2284919076016555E+005,0.2464034254698510E+005,0.2546133606982400E+005 -0.2419999999999994E-007,0.3706805258005660E+023,0.7900109936856784E+023,0.1717362976136784E+024,0.8663894007031863E+022,0.6566741153798847E+022,0.3030360847231335E+024,0.2491799879358508E+005,0.2506920283258967E+005,0.2588696005882419E+005,0.2395533597545603E+005,0.2550482368496206E+005,0.2549173978629856E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2575587049515272E+005,0.2153353616036140E+005,0.2405751014538972E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1871143507891492E+001,0.1896309356550907E+001,0.1888315736976035E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2600522577264125E+005,0.2232305547502204E+005,0.2366052360612456E+005,0.2491799879358508E+005,0.2506920283258967E+005,0.2588568575006146E+005,0.2281602475206062E+005,0.2457258054513076E+005,0.2543824280373315E+005 -0.2439999999999994E-007,0.3740840196912544E+023,0.7943154124297843E+023,0.1715911486095167E+024,0.8473698760199274E+022,0.6516689773053430E+022,0.3034214803548732E+024,0.2490729983697920E+005,0.2505351571650614E+005,0.2584614352532701E+005,0.2396365747963984E+005,0.2534762924739693E+005,0.2545961659586391E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2572156760541184E+005,0.2177320338275467E+005,0.2369306163872729E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1870975521727342E+001,0.1897430523691799E+001,0.1886631516285402E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2596768323212192E+005,0.2207651321468213E+005,0.2375834545761727E+005,0.2490729983697920E+005,0.2505351571650614E+005,0.2584759905617561E+005,0.2281387815720219E+005,0.2443279491060949E+005,0.2540868144467619E+005 -0.2459999999999994E-007,0.3777377704856700E+023,0.7961673135173648E+023,0.1713709225342369E+024,0.8343565170261188E+022,0.6591766844171556E+022,0.3036967629489731E+024,0.2494033933235519E+005,0.2500519776961678E+005,0.2579269768997880E+005,0.2369988814178405E+005,0.2554645995430062E+005,0.2541739043396890E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2570390188007067E+005,0.2211477434692099E+005,0.2368596689562946E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1870888839247714E+001,0.1898987146183679E+001,0.1886598225440456E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2595244976562598E+005,0.2190485294472274E+005,0.2370914126852096E+005,0.2494033933235519E+005,0.2500519776961678E+005,0.2581502042946036E+005,0.2274319972130235E+005,0.2450318139509106E+005,0.2538105888853466E+005 -0.2479999999999993E-007,0.3816918295645580E+023,0.7982194201279270E+023,0.1711506964589570E+024,0.8218436718397642E+022,0.6636813086842433E+022,0.3039970712334456E+024,0.2502553807307738E+005,0.2490919110847294E+005,0.2576655325174627E+005,0.2371421346533378E+005,0.2559507494440966E+005,0.2538916359835098E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2565071256503223E+005,0.2192631742652468E+005,0.2374712821046047E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1870627144680995E+001,0.1898134192078017E+001,0.1886884573886353E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2591852671377797E+005,0.2223514391164986E+005,0.2371931940659647E+005,0.2502553807307738E+005,0.2490919110847294E+005,0.2577925255694801E+005,0.2279341292222362E+005,0.2454403754373575E+005,0.2534847378252690E+005 -0.2499999999999993E-007,0.3847449637900285E+023,0.8016729653993608E+023,0.1709805217644226E+024,0.8028241471565054E+022,0.6671849053364226E+022,0.3043224052082908E+024,0.2509893937810039E+005,0.2481464613548692E+005,0.2571507867492660E+005,0.2381285630376340E+005,0.2547582713571661E+005,0.2534455504504565E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2561991310742615E+005,0.2217439752771947E+005,0.2352444326037644E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1870475124212436E+001,0.1899254034408001E+001,0.1885834980810138E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2591069047239239E+005,0.2233616714245941E+005,0.2380106050381211E+005,0.2509893937810039E+005,0.2481464613548692E+005,0.2574611273943969E+005,0.2293374274554796E+005,0.2445496020287482E+005,0.2531641848554064E+005 -0.2519999999999993E-007,0.3882485604422078E+023,0.8047761510055766E+023,0.1707703059652918E+024,0.7838046224732466E+022,0.6741920986407810E+022,0.3046527443212106E+024,0.2508416487952551E+005,0.2475346546566854E+005,0.2570073422047817E+005,0.2383043828162532E+005,0.2506982630958007E+005,0.2530984608414090E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2559088649672652E+005,0.2232992568539255E+005,0.2346869664750904E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1870331526985644E+001,0.1899943627118925E+001,0.1885569172955544E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2589437965694752E+005,0.2202918038127130E+005,0.2371120745526037E+005,0.2508416487952551E+005,0.2475346546566854E+005,0.2572720153305605E+005,0.2289515453235405E+005,0.2423673926953178E+005,0.2528218320123922E+005 -0.2539999999999993E-007,0.3920024139981141E+023,0.8059273327627213E+023,0.1705450747519374E+024,0.7742948601316171E+022,0.6816998057525938E+022,0.3048979960868631E+024,0.2521585591030390E+005,0.2472150173119673E+005,0.2567316670372138E+005,0.2368748228451966E+005,0.2513269084931882E+005,0.2530030938258215E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2552968749367502E+005,0.2224071899192029E+005,0.2335559647664074E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1870027724837654E+001,0.1899549254312292E+001,0.1885026075616474E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2584439615315349E+005,0.2228694895821248E+005,0.2368764079416937E+005,0.2521585591030390E+005,0.2472150173119673E+005,0.2568395978944237E+005,0.2288318847028687E+005,0.2422638065192865E+005,0.2526565775140190E+005 -0.2559999999999993E-007,0.3957062161732750E+023,0.8093308266534098E+023,0.1703548795051049E+024,0.7567768768707208E+022,0.6827008333675021E+022,0.3052533608901556E+024,0.2530017186257863E+005,0.2471794943690712E+005,0.2563679845214043E+005,0.2354196437263086E+005,0.2526760358861597E+005,0.2528935093270277E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2545813042284159E+005,0.2223063010062970E+005,0.2308205231480791E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1869670694110116E+001,0.1899504456744377E+001,0.1883690989256221E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2579291754633839E+005,0.2204351616621965E+005,0.2396351082407341E+005,0.2530017186257863E+005,0.2471794943690712E+005,0.2563362330868308E+005,0.2274657656743771E+005,0.2429064387607061E+005,0.2524601013464286E+005 -0.2579999999999993E-007,0.3997603780136539E+023,0.8117833443099352E+023,0.1701496688440486E+024,0.7442640316843663E+022,0.6832013471749563E+022,0.3055786948650008E+024,0.2517724833391348E+005,0.2471802038333779E+005,0.2560861835170438E+005,0.2349754920402532E+005,0.2546153130929103E+005,0.2526088942083241E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2549017495313623E+005,0.2214074316441017E+005,0.2323886281590465E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1869830820921285E+001,0.1899103562650870E+001,0.1884460099898610E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2568074669535366E+005,0.2192907074996041E+005,0.2396229140902084E+005,0.2517724833391348E+005,0.2471802038333779E+005,0.2559737900216412E+005,0.2266937318957602E+005,0.2441758453825308E+005,0.2521112009314050E+005 -0.2599999999999993E-007,0.4041148481385053E+023,0.8140356564434790E+023,0.1699294427687688E+024,0.7327522141129202E+022,0.6837018609824105E+022,0.3059090339779206E+024,0.2515791178954618E+005,0.2465218989365874E+005,0.2557116452995642E+005,0.2384223802565492E+005,0.2512951651508831E+005,0.2522074574526713E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2548777389675793E+005,0.2201760811527139E+005,0.2314653689214003E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1869818836451502E+001,0.1898549163767580E+001,0.1884008503352966E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2563766441605825E+005,0.2179643112311902E+005,0.2403209869695579E+005,0.2515791178954618E+005,0.2465218989365874E+005,0.2556782738161521E+005,0.2274696955452479E+005,0.2426798560544655E+005,0.2517340164952541E+005 -0.2619999999999992E-007,0.4071679823639758E+023,0.8170887906689496E+023,0.1697742834884580E+024,0.7172362860818406E+022,0.6842023747898646E+022,0.3062143474004676E+024,0.2505251427527904E+005,0.2473476489274836E+005,0.2553735606983483E+005,0.2375515454579809E+005,0.2521228938437653E+005,0.2520972040609482E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2542442506325158E+005,0.2198598156096009E+005,0.2282567346157023E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1869501842675518E+001,0.1898405785025384E+001,0.1882411234965548E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2560292284928351E+005,0.2163714451906088E+005,0.2435971660167009E+005,0.2505251427527904E+005,0.2473476489274836E+005,0.2552571167875129E+005,0.2265422941624317E+005,0.2431177094970875E+005,0.2515735668990657E+005 -0.2639999999999992E-007,0.4107716817776459E+023,0.8189907431372754E+023,0.1695540574131782E+024,0.7037224132805777E+022,0.6922105957091315E+022,0.3064896299945674E+024,0.2516172706248687E+005,0.2465170514405943E+005,0.2548753486156630E+005,0.2401226359229601E+005,0.2519150021850522E+005,0.2517996184628815E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2535512184185987E+005,0.2205056579441941E+005,0.2302293726677953E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1869153281452729E+001,0.1898698147312367E+001,0.1883398383619162E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2562320988751169E+005,0.2133188665240016E+005,0.2409167607165968E+005,0.2516172706248687E+005,0.2465170514405943E+005,0.2549100687924042E+005,0.2269528672793700E+005,0.2427859123059863E+005,0.2513102570632187E+005 -0.2659999999999992E-007,0.4149259463795156E+023,0.8209427469863467E+023,0.1693188159236747E+024,0.6912095680942232E+022,0.6977162475911275E+022,0.3067949434171144E+024,0.2510731369016900E+005,0.2470982262269350E+005,0.2542781550018621E+005,0.2407692983742542E+005,0.2512477170848020E+005,0.2515501637255001E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2528371787966375E+005,0.2192086809696955E+005,0.2302081805784408E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1868792202649784E+001,0.1898109314200151E+001,0.1883387866704907E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2562601369802244E+005,0.2137015011831472E+005,0.2367816590364281E+005,0.2510731369016900E+005,0.2470982262269350E+005,0.2544632062922049E+005,0.2269887102786109E+005,0.2412878361073637E+005,0.2511153071909525E+005 -0.2679999999999992E-007,0.4182793888894586E+023,0.8227946480739272E+023,0.1691336258149166E+024,0.6801982643302312E+022,0.7012198442433068E+022,0.3070552105969906E+024,0.2510099942272428E+005,0.2470235453928422E+005,0.2541138248134278E+005,0.2393483510868081E+005,0.2527122173911087E+005,0.2514319811282727E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2521720222296238E+005,0.2202862904119177E+005,0.2276166719400861E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1868454046721186E+001,0.1898599032042743E+001,0.1882087334541869E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2560472098659927E+005,0.2115386821450115E+005,0.2359233278007166E+005,0.2510099942272428E+005,0.2470235453928422E+005,0.2541485635199642E+005,0.2260397724314555E+005,0.2409701711921333E+005,0.2508881480001167E+005 -0.2699999999999992E-007,0.4211823689726928E+023,0.8249969088267257E+023,0.1689534408442331E+024,0.6656833639140600E+022,0.7082270375476653E+022,0.3073104726387922E+024,0.2506551687910760E+005,0.2468912729401276E+005,0.2537905951344978E+005,0.2403201492725553E+005,0.2553796247657199E+005,0.2512535284643907E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2518648954817548E+005,0.2198215018113710E+005,0.2304170324667127E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1868297319342458E+001,0.1898388387976101E+001,0.1883491430130120E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2556236338857345E+005,0.2113224477948565E+005,0.2338723213203572E+005,0.2506551687910760E+005,0.2468912729401276E+005,0.2538005390842454E+005,0.2262719699276753E+005,0.2423002977303646E+005,0.2506532636666573E+005 -0.2719999999999992E-007,0.4249362225285991E+023,0.8274494264832511E+023,0.1687532353212515E+024,0.6521694911127971E+022,0.7107296065849362E+022,0.3076207911994138E+024,0.2505927863045441E+005,0.2456078131179778E+005,0.2535498938864345E+005,0.2398288191936689E+005,0.2496015304045299E+005,0.2506230043287743E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2521061458336483E+005,0.2183876756809955E+005,0.2298065466246804E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1868420461282899E+001,0.1897733024213430E+001,0.1883188190259367E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2554232583619611E+005,0.2132736992051419E+005,0.2378333718763319E+005,0.2505927863045441E+005,0.2456078131179778E+005,0.2537026510675367E+005,0.2262301766007063E+005,0.2407663808988046E+005,0.2502143780051102E+005 -0.2739999999999991E-007,0.4284898705615239E+023,0.8298018413782858E+023,0.1685930709028661E+024,0.6421592149637135E+022,0.7072260099327570E+022,0.3079160943458118E+024,0.2513095741082909E+005,0.2463093476276007E+005,0.2529336608935153E+005,0.2391781414779102E+005,0.2465227562691430E+005,0.2504883547126252E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2518530126414094E+005,0.2163548028348267E+005,0.2292302875329689E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1868291248005334E+001,0.1896789233527826E+001,0.1882900500263964E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2548318038949905E+005,0.2148083036529495E+005,0.2345320152970146E+005,0.2513095741082909E+005,0.2463093476276007E+005,0.2531924327287785E+005,0.2258341439241084E+005,0.2383079811207547E+005,0.2501630725987241E+005 -0.2759999999999991E-007,0.4317932616907215E+023,0.8314034855621391E+023,0.1684028756560336E+024,0.6316484250071757E+022,0.7122311480072987E+022,0.3081613461114644E+024,0.2515160796557925E+005,0.2459356241262838E+005,0.2525718835847329E+005,0.2359002742711424E+005,0.2458862496438795E+005,0.2501372727511827E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2519969103148727E+005,0.2188169455504070E+005,0.2262088312133267E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1868364732484856E+001,0.1897930116672590E+001,0.1881368589622569E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2544230624255100E+005,0.2133512811198223E+005,0.2355163720151195E+005,0.2515160796557925E+005,0.2459356241262838E+005,0.2529545216659047E+005,0.2246619826295135E+005,0.2374925367559044E+005,0.2499220225991221E+005 -0.2779999999999991E-007,0.4348463959161920E+023,0.8336557976956829E+023,0.1682477163757227E+024,0.6201366074357296E+022,0.7127316618147530E+022,0.3084266184294151E+024,0.2504161102060463E+005,0.2457572912879143E+005,0.2529779635659643E+005,0.2357899666330582E+005,0.2464196470601161E+005,0.2501679302928091E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2516461613291114E+005,0.2185072929181467E+005,0.2214952675396614E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1868185471104401E+001,0.1897788021005639E+001,0.1878897094414092E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2536941906999488E+005,0.2119603011995436E+005,0.2350375465500556E+005,0.2504161102060463E+005,0.2457572912879143E+005,0.2528242695043020E+005,0.2241256212270933E+005,0.2363025389938113E+005,0.2496157685368261E+005 -0.2799999999999991E-007,0.4397013798484975E+023,0.8347068766913367E+023,0.1679974594719957E+024,0.6141304417462794E+022,0.7142332032371154E+022,0.3087219215758131E+024,0.2513181730961762E+005,0.2452017897177978E+005,0.2526850963012352E+005,0.2382911558575134E+005,0.2451926254427820E+005,0.2500074379447252E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2515857762697164E+005,0.2176632067356710E+005,0.2205383844241440E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1868154560158440E+001,0.1897398664406134E+001,0.1878382742880193E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2527931451945848E+005,0.2125640589602127E+005,0.2309303647351680E+005,0.2513181730961762E+005,0.2452017897177978E+005,0.2524175423422844E+005,0.2251566915013599E+005,0.2343129426625662E+005,0.2493488600402725E+005 -0.2819999999999991E-007,0.4436053875466401E+023,0.8365087263981717E+023,0.1678122693632376E+024,0.6061222208270125E+022,0.7122311480072987E+022,0.3090072144460619E+024,0.2504928304770360E+005,0.2447717886247600E+005,0.2522857981719791E+005,0.2393224242000239E+005,0.2434980557998103E+005,0.2495374694681243E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2513447797531047E+005,0.2196425528343290E+005,0.2167659383400784E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1868031050257949E+001,0.1898307054127060E+001,0.1876311675683099E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2529759640880846E+005,0.2108595619451728E+005,0.2311161377634183E+005,0.2504928304770360E+005,0.2447717886247600E+005,0.2522308304832269E+005,0.2256546992919095E+005,0.2326024443569552E+005,0.2489883906736154E+005 -0.2839999999999991E-007,0.4472090869603102E+023,0.8380102678205343E+023,0.1676270792544796E+024,0.5981139999077456E+022,0.7132321756222071E+022,0.3092624764878636E+024,0.2491450843671648E+005,0.2450441402108319E+005,0.2519785006278145E+005,0.2395819397963258E+005,0.2426807115416708E+005,0.2492355882907994E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2509713336811010E+005,0.2219984793528097E+005,0.2149789927933136E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1867839202871964E+001,0.1899367527913389E+001,0.1875305836917750E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2529896163678051E+005,0.2073106423189970E+005,0.2311482306557532E+005,0.2491450843671648E+005,0.2450441402108319E+005,0.2519990319141343E+005,0.2253864286348785E+005,0.2317700468508746E+005,0.2487205496963541E+005 -0.2859999999999991E-007,0.4502121698050353E+023,0.8406129396192961E+023,0.1674669148360942E+024,0.5840996132990285E+022,0.7152342308520238E+022,0.3095427642200379E+024,0.2488704917378453E+005,0.2446375138299216E+005,0.2522606221815369E+005,0.2365119013877465E+005,0.2369463090537191E+005,0.2490463406918063E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2502623989804224E+005,0.2212135533293291E+005,0.2163331538002075E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1867473469732450E+001,0.1899016673701203E+001,0.1876069560569478E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2529278860957481E+005,0.2043416868404542E+005,0.2323235810792976E+005,0.2488704917378453E+005,0.2446375138299216E+005,0.2519115708168934E+005,0.2229748639294068E+005,0.2299776231430896E+005,0.2484410389780092E+005 -0.2879999999999990E-007,0.4548669482143591E+023,0.8422646351838949E+023,0.1672366784846653E+024,0.5760913923797617E+022,0.7147337170445697E+022,0.3098580879187340E+024,0.2483827012845072E+005,0.2440932340972423E+005,0.2519839902243996E+005,0.2365950657336021E+005,0.2357471618939819E+005,0.2486498007668450E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2495878205133538E+005,0.2223769633896619E+005,0.2153423548461147E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1867123577281317E+001,0.1899535837056812E+001,0.1875511688957197E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2533049925874169E+005,0.2023812238563337E+005,0.2274082830752772E+005,0.2483827012845072E+005,0.2440932340972423E+005,0.2517172205622536E+005,0.2227629064484488E+005,0.2277554349866083E+005,0.2480643097788915E+005 -0.2899999999999990E-007,0.4592714697199559E+023,0.8440664848907298E+023,0.1670164524093855E+024,0.5670821438455865E+022,0.7147337170445697E+022,0.3101684064793556E+024,0.2485201870044861E+005,0.2439747063294202E+005,0.2520198738759233E+005,0.2365596765796635E+005,0.2361926633335535E+005,0.2486649522617922E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2488495614752610E+005,0.2232858719588041E+005,0.2175317109689712E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1866738532414143E+001,0.1899937732684104E+001,0.1876737767438741E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2524614452371226E+005,0.2022265946211919E+005,0.2227625328083769E+005,0.2485201870044861E+005,0.2439747063294202E+005,0.2512866288904123E+005,0.2229529499960790E+005,0.2271939233463534E+005,0.2478139877008363E+005 -0.2919999999999990E-007,0.4627250149913898E+023,0.8451175638863837E+023,0.1668312623006274E+024,0.5605754643486821E+022,0.7172362860818406E+022,0.3103936376927100E+024,0.2483966198883735E+005,0.2440946652000328E+005,0.2515196388503725E+005,0.2338533887361333E+005,0.2342043641130776E+005,0.2483132858838941E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2484470818840253E+005,0.2230284514739043E+005,0.2168759503032520E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1866527675099076E+001,0.1899824234722988E+001,0.1876373069646114E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2526978350564875E+005,0.2034581612209131E+005,0.2209353274773025E+005,0.2483966198883735E+005,0.2440946652000328E+005,0.2510275968229257E+005,0.2220623734271984E+005,0.2256166040125294E+005,0.2476374341991573E+005 -0.2939999999999990E-007,0.4661285088820782E+023,0.8462186942627829E+023,0.1666460721918694E+024,0.5535682710443236E+022,0.7202393689265657E+022,0.3106188689060644E+024,0.2483572684572914E+005,0.2433325013094004E+005,0.2512873360368497E+005,0.2349017884404130E+005,0.2336523595356255E+005,0.2479795813328160E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2489337969353620E+005,0.2236557592748781E+005,0.2156262140340409E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1866782578772684E+001,0.1900100368416869E+001,0.1875672028958509E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2518288808103421E+005,0.2055709513578135E+005,0.2210521465677915E+005,0.2483572684572914E+005,0.2433325013094004E+005,0.2508052388962810E+005,0.2233033689895637E+005,0.2250696984380069E+005,0.2473152286817147E+005 -0.2959999999999990E-007,0.4704829790069296E+023,0.8480705953503633E+023,0.1664158358404404E+024,0.5430574810877857E+022,0.7227419379638366E+022,0.3109291874666860E+024,0.2486437208450106E+005,0.2430650527582974E+005,0.2507149473620580E+005,0.2319296941967736E+005,0.2342428074312008E+005,0.2476040186545011E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2490758558295088E+005,0.2256753315879700E+005,0.2137665070169781E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1866856794869787E+001,0.1900979115205930E+001,0.1874613987956024E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2512884417113553E+005,0.2022493359749321E+005,0.2205383272960617E+005,0.2486437208450106E+005,0.2430650527582974E+005,0.2504363685998233E+005,0.2216050535983188E+005,0.2246722163313023E+005,0.2470521266699686E+005 -0.2979999999999990E-007,0.4748374491317810E+023,0.8505231130068887E+023,0.1661805943509370E+024,0.5290430944790687E+022,0.7262455346160158E+022,0.3112695368557548E+024,0.2467294909652701E+005,0.2425037700707154E+005,0.2504381054659430E+005,0.2316617638516666E+005,0.2347248596036863E+005,0.2470186119787038E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2488936796653699E+005,0.2266062655101178E+005,0.2154258064909164E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1866761605255348E+001,0.1901378995840105E+001,0.1875558870130985E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2512030994766964E+005,0.2028399297014192E+005,0.2216719525612428E+005,0.2467294909652701E+005,0.2425037700707154E+005,0.2502410567196849E+005,0.2219164525593641E+005,0.2256634399413041E+005,0.2465363587798077E+005 -0.2999999999999990E-007,0.4782909944032148E+023,0.8525752196174509E+023,0.1660254350706262E+024,0.5205343597523477E+022,0.7227419379638366E+022,0.3115448194498546E+024,0.2476605659411749E+005,0.2424501478808192E+005,0.2500133842169610E+005,0.2324442569744549E+005,0.2343259855146471E+005,0.2469249402415155E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2480261132145550E+005,0.2251657155470396E+005,0.2156087791527668E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1866306416687999E+001,0.1900758834608270E+001,0.1875662192635139E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2508417029283282E+005,0.2064251125346733E+005,0.2224590807962215E+005,0.2476605659411749E+005,0.2424501478808192E+005,0.2497145016626133E+005,0.2228984892727316E+005,0.2257681238697560E+005,0.2464076395131794E+005 -0.3019999999999990E-007,0.4827956186703024E+023,0.8550777886547219E+023,0.1657851884430482E+024,0.5065199731436306E+022,0.7257450208085616E+022,0.3118951791150725E+024,0.2467273245240215E+005,0.2424798563615298E+005,0.2502427151953327E+005,0.2337359248108149E+005,0.2350031277419006E+005,0.2469476431836378E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2477043350451916E+005,0.2237188435173957E+005,0.2138441544496898E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1866136797147135E+001,0.1900128053182235E+001,0.1874658523765571E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2496499918732664E+005,0.2041039966844836E+005,0.2197758021766945E+005,0.2467273245240215E+005,0.2424798563615298E+005,0.2493801615611086E+005,0.2223886580897016E+005,0.2248032755566061E+005,0.2460675407425426E+005 -0.3039999999999990E-007,0.4856985987535367E+023,0.8573801521690112E+023,0.1656300291627374E+024,0.4940071279572760E+022,0.7277470760383783E+022,0.3121554462949487E+024,0.2462655168056228E+005,0.2421809209334540E+005,0.2500843917308860E+005,0.2290268919976039E+005,0.2346343050078981E+005,0.2466259442287336E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2471016246052726E+005,0.2225156482361878E+005,0.2115189069147709E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1865817929043612E+001,0.1899597368401579E+001,0.1873310991625131E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2500612784844549E+005,0.2023382678653353E+005,0.2208411805845703E+005,0.2462655168056228E+005,0.2421809209334540E+005,0.2492670780572659E+005,0.2194979316440846E+005,0.2243207053094883E+005,0.2458010271745568E+005 -0.3059999999999990E-007,0.4898528633554064E+023,0.8594322587795732E+023,0.1653947876732339E+024,0.4809937689634674E+022,0.7332527279203743E+022,0.3124657648555702E+024,0.2461651304045405E+005,0.2420154456741983E+005,0.2496827105093950E+005,0.2291434065365705E+005,0.2341179807790241E+005,0.2463409661094486E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2472685415080577E+005,0.2209005944358294E+005,0.2096922338375602E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1865906389493520E+001,0.1898876101228365E+001,0.1872231909989105E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2492086640663039E+005,0.2016637768603848E+005,0.2204876735912590E+005,0.2461651304045405E+005,0.2420154456741983E+005,0.2488885391441345E+005,0.2189082121047105E+005,0.2234967913051122E+005,0.2455137951281205E+005 -0.3079999999999991E-007,0.4935066141498219E+023,0.8605834405367179E+023,0.1651995872883268E+024,0.4739865756591088E+022,0.7357552969576452E+022,0.3127060114831483E+024,0.2457968258401053E+005,0.2421220111922579E+005,0.2494838151261266E+005,0.2287734298077802E+005,0.2346804859253645E+005,0.2462137125280393E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2471657129457979E+005,0.2228268483664999E+005,0.2103669679006111E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1865851907541242E+001,0.1899735167028666E+001,0.1872632632922252E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2484084162729482E+005,0.1988493765366773E+005,0.2190248116114640E+005,0.2457968258401053E+005,0.2421220111922579E+005,0.2485405915948579E+005,0.2184621591999194E+005,0.2234996706532081E+005,0.2452960531079524E+005 -0.3099999999999991E-007,0.4973105190864737E+023,0.8622851874820620E+023,0.1649843663511215E+024,0.4629752718951169E+022,0.7407604350321870E+022,0.3129812940772481E+024,0.2455267301991560E+005,0.2417179949660321E+005,0.2488139206206497E+005,0.2247257657744653E+005,0.2355285984689956E+005,0.2456658692034092E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2471731374304755E+005,0.2265371675704743E+005,0.2101646332589113E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1865855842759278E+001,0.1901349425937009E+001,0.1872512730848187E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2485331325345352E+005,0.1974111393443865E+005,0.2167581480697080E+005,0.2455267301991560E+005,0.2417179949660321E+005,0.2482862309695281E+005,0.2173090792779363E+005,0.2231553585945089E+005,0.2449851447104544E+005 -0.3119999999999991E-007,0.5010643726423801E+023,0.8637366775236792E+023,0.1647841608281398E+024,0.4544665371683958E+022,0.7432630040694579E+022,0.3132415612571242E+024,0.2449368557525890E+005,0.2420869472209019E+005,0.2485026325550060E+005,0.2244454192487448E+005,0.2332188448629176E+005,0.2454514877291005E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2470748869751085E+005,0.2254119967012167E+005,0.2107755498981872E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1865803748141584E+001,0.1900865411388729E+001,0.1872874069803374E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2478026388884690E+005,0.1952974612557720E+005,0.2181719906192748E+005,0.2449368557525890E+005,0.2420869472209019E+005,0.2479107309311736E+005,0.2162640421353848E+005,0.2227243744368443E+005,0.2447723979271850E+005 -0.3139999999999991E-007,0.5039673527256143E+023,0.8647377051385875E+023,0.1646239964097545E+024,0.4479598576714915E+022,0.7462660869141830E+022,0.3134367616420314E+024,0.2451973094280077E+005,0.2417809286983092E+005,0.2482505727985852E+005,0.2241430517523263E+005,0.2342522812020682E+005,0.2452969130552701E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2468324389247736E+005,0.2264932052341009E+005,0.2099617547405425E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1865675023506686E+001,0.1901330603382705E+001,0.1872392279715306E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2474850326121409E+005,0.1951696899615633E+005,0.2174538378768497E+005,0.2451973094280077E+005,0.2417809286983092E+005,0.2476422047492751E+005,0.2163940671119196E+005,0.2227456212722171E+005,0.2445926733235672E+005 -0.3159999999999991E-007,0.5077712576622661E+023,0.8666396576069134E+023,0.1644287960248473E+024,0.4379495815224079E+022,0.7472671145290913E+022,0.3137220545122803E+024,0.2444109945108333E+005,0.2415017222034802E+005,0.2482631387511164E+005,0.2236748271527086E+005,0.2332123577238856E+005,0.2450701023828608E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2460023635916359E+005,0.2254916765130190E+005,0.2112227893342659E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1865232430578365E+001,0.1900899843399250E+001,0.1873137303263306E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2476111993951569E+005,0.1911370228752169E+005,0.2166517693234314E+005,0.2444109945108333E+005,0.2415017222034802E+005,0.2474589780889023E+005,0.2147452728498112E+005,0.2224006054839176E+005,0.2442664394571371E+005 -0.3179999999999991E-007,0.5108243918877366E+023,0.8683914559330031E+023,0.1642436059160893E+024,0.4259372501435075E+022,0.7537737940259958E+022,0.3139623011398583E+024,0.2446384991827202E+005,0.2415607954989554E+005,0.2480328711736563E+005,0.2195627260199211E+005,0.2317463192177397E+005,0.2449132258116650E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2457456749893110E+005,0.2243506510002512E+005,0.2133553249350379E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1865094974527300E+001,0.1900404480543286E+001,0.1874377620230026E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2468914581993085E+005,0.1901143634340640E+005,0.2193590431866733E+005,0.2446384991827202E+005,0.2415607954989554E+005,0.2470789638960186E+005,0.2123460865856673E+005,0.2231279069872191E+005,0.2441093877123569E+005 -0.3199999999999992E-007,0.5135772178287345E+023,0.8690421238826935E+023,0.1640984569119276E+024,0.4219331396838741E+022,0.7552753354483582E+022,0.3141324758343927E+024,0.2445293902702702E+005,0.2417257438495344E+005,0.2482283824077500E+005,0.2215477983346815E+005,0.2311208152464886E+005,0.2450550016546045E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2448664564857129E+005,0.2225976673650415E+005,0.2108489487785425E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1864622024099435E+001,0.1899633722997401E+001,0.1872917345334401E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2465101229305857E+005,0.1912677195919442E+005,0.2189047134315181E+005,0.2445293902702702E+005,0.2417257438495344E+005,0.2468145769516188E+005,0.2130595519694484E+005,0.2220417399681544E+005,0.2439841476033376E+005 -0.3219999999999992E-007,0.5168305575771867E+023,0.8704936139243105E+023,0.1639282822173932E+024,0.4139249187646072E+022,0.7567768768707208E+022,0.3143677173238962E+024,0.2444263478345832E+005,0.2419208465961041E+005,0.2483817141497590E+005,0.2225312828603256E+005,0.2280131026476553E+005,0.2451117023945772E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2445476091481041E+005,0.2211904307699766E+005,0.2080259171746789E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1864449689362721E+001,0.1899006301055740E+001,0.1871231406723064E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2457148491933164E+005,0.1886875618247198E+005,0.2168361688372348E+005,0.2444263478345832E+005,0.2419208465961041E+005,0.2465633271912899E+005,0.2123510155037325E+005,0.2193167695927959E+005,0.2438201080952470E+005 -0.3239999999999992E-007,0.5205844111330931E+023,0.8709440763510194E+023,0.1637430921086351E+024,0.4119228635347905E+022,0.7562763630632666E+022,0.3145779331230269E+024,0.2440204532715867E+005,0.2415484920776803E+005,0.2481965922131347E+005,0.2224288460340445E+005,0.2288462249637039E+005,0.2448622797661193E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2440110990653771E+005,0.2201114165510759E+005,0.2114584865044546E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1864158717604096E+001,0.1898519881032854E+001,0.1873275590524403E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2455815320771457E+005,0.1932086435369153E+005,0.2158539536492941E+005,0.2440204532715867E+005,0.2415484920776803E+005,0.2462979554905574E+005,0.2133196324600804E+005,0.2203267690088633E+005,0.2435499111308032E+005 -0.3259999999999992E-007,0.5244884188312357E+023,0.8720452067274186E+023,0.1635228660333553E+024,0.4039146426155236E+022,0.7612815011378084E+022,0.3148281900267540E+024,0.2436986414666616E+005,0.2410216454897980E+005,0.2478812992424637E+005,0.2232123819673531E+005,0.2284535228449897E+005,0.2444981529918970E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2440994334875424E+005,0.2208468868267360E+005,0.2123363334243358E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1864206710866714E+001,0.1898851937915072E+001,0.1873787996761233E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2452620902047016E+005,0.1942181238755946E+005,0.2110604539032985E+005,0.2436986414666616E+005,0.2410216454897980E+005,0.2460910563035394E+005,0.2141557676527272E+005,0.2189992984796251E+005,0.2432234897898936E+005 -0.3279999999999992E-007,0.5289429917175779E+023,0.8734966967690357E+023,0.1632976348200009E+024,0.3964069355037109E+022,0.7617820149452626E+022,0.3151234931731520E+024,0.2436438598066364E+005,0.2403707681992404E+005,0.2476036581119627E+005,0.2213817509729694E+005,0.2299089556092035E+005,0.2441764879894913E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2442356214059411E+005,0.2216046622637632E+005,0.2131604847097818E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1864280637196175E+001,0.1899191800733963E+001,0.1874265305146914E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2445074341253368E+005,0.1910539247571449E+005,0.2095171481036379E+005,0.2436438598066364E+005,0.2403707681992404E+005,0.2457868015105479E+005,0.2126514093799912E+005,0.2194096964551902E+005,0.2428713566926074E+005 -0.3299999999999992E-007,0.5320962287045392E+023,0.8748480840491620E+023,0.1631524858158392E+024,0.3909012836217149E+022,0.7592794459079917E+022,0.3153487243865063E+024,0.2435771872628476E+005,0.2395106493911101E+005,0.2476126490574888E+005,0.2216198861955361E+005,0.2289071037634464E+005,0.2439114744441452E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2435261556871283E+005,0.2223283770492405E+005,0.2123553990850302E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1863894636270671E+001,0.1899514262553558E+001,0.1873799079589318E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2446449622782061E+005,0.1929069804702273E+005,0.2121001842921679E+005,0.2435771872628476E+005,0.2395106493911101E+005,0.2456382354991683E+005,0.2134917744422948E+005,0.2195049657046673E+005,0.2425628345350107E+005 -0.3319999999999993E-007,0.5354997225952277E+023,0.8764497282330153E+023,0.1629672957070812E+024,0.3813915212800855E+022,0.7622825287527168E+022,0.3155989812902334E+024,0.2435651253885644E+005,0.2389663428966134E+005,0.2474861284481645E+005,0.2230208609724511E+005,0.2272394755026262E+005,0.2436701112761652E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2435621337435494E+005,0.2221350029055633E+005,0.2084910627090968E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1863914263760488E+001,0.1899428303923807E+001,0.1871512265417264E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2439818264917677E+005,0.1965559416896952E+005,0.2143907113549852E+005,0.2435651253885644E+005,0.2389663428966134E+005,0.2453994774406970E+005,0.2151053555065911E+005,0.2183934732766829E+005,0.2422832992333733E+005 -0.3339999999999993E-007,0.5396539871970973E+023,0.8777010127516507E+023,0.1627670901840995E+024,0.3758858693980895E+022,0.7607809873303542E+022,0.3158692587462587E+024,0.2434777027000356E+005,0.2385414403354962E+005,0.2470990773547340E+005,0.2193365664038149E+005,0.2280593525093062E+005,0.2433135251864933E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2439536143412384E+005,0.2223804634506250E+005,0.2074511653154805E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1864127467175795E+001,0.1899537390882454E+001,0.1870882667173540E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2432036566080791E+005,0.1953330176841756E+005,0.2140771309409158E+005,0.2434777027000356E+005,0.2385414403354962E+005,0.2451098390197748E+005,0.2132165762084338E+005,0.2183779263255374E+005,0.2419824644647431E+005 -0.3359999999999993E-007,0.5426570700418224E+023,0.8791024514125225E+023,0.1626219411799377E+024,0.3693791899011851E+022,0.7597799597154459E+022,0.3160894848215385E+024,0.2424743026871754E+005,0.2390208318712686E+005,0.2467644706277227E+005,0.2213233928609280E+005,0.2271763896604850E+005,0.2431061567830924E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2436003829865832E+005,0.2216347854730806E+005,0.2055389816692270E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1863935124071049E+001,0.1899205263835431E+001,0.1869708707294583E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2430453272127870E+005,0.1978891104951899E+005,0.2137308072389579E+005,0.2424743026871754E+005,0.2390208318712686E+005,0.2448215704285261E+005,0.2146157845968378E+005,0.2173729441525142E+005,0.2417925435651599E+005 -0.3379999999999993E-007,0.5471116429281646E+023,0.8795529138392313E+023,0.1623566688619870E+024,0.3628725104042808E+022,0.7682886944421670E+022,0.3163347365871911E+024,0.2419101177052987E+005,0.2381460959406398E+005,0.2465950342405440E+005,0.2240387623970563E+005,0.2299877954063929E+005,0.2427734870729238E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2435968150956286E+005,0.2186973542571490E+005,0.2048909005756762E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1863933178490730E+001,0.1897875284582718E+001,0.1869305970334654E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2425534632673668E+005,0.1996632719435795E+005,0.2138705653872035E+005,0.2419101177052987E+005,0.2381460959406398E+005,0.2446032284155994E+005,0.2155015962450134E+005,0.2184657820146321E+005,0.2413734374959145E+005 -0.3399999999999993E-007,0.5497643661076718E+023,0.8804037873119034E+023,0.1622215301339744E+024,0.3583678861371932E+022,0.7687892082496211E+022,0.3165099164198001E+024,0.2417723228454821E+005,0.2376425146810307E+005,0.2462420708162662E+005,0.2243697532481379E+005,0.2305372881519199E+005,0.2424445309316876E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2436719403858497E+005,0.2172733209907444E+005,0.2029624250518957E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1863974132771070E+001,0.1897217816540012E+001,0.1868092701903096E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2425725308561316E+005,0.1990284915455411E+005,0.2146729428514209E+005,0.2417723228454821E+005,0.2376425146810307E+005,0.2444749113943649E+005,0.2150694813379246E+005,0.2184173161703151E+005,0.2411391136020435E+005 -0.3419999999999994E-007,0.5528675517138877E+023,0.8817051232112842E+023,0.1620663708536636E+024,0.3518612066402889E+022,0.7687892082496211E+022,0.3167301424950799E+024,0.2408663503855868E+005,0.2373079362830729E+005,0.2459312820822536E+005,0.2255765969793660E+005,0.2297833214748751E+005,0.2420285513061911E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2436230996279358E+005,0.2189524331415391E+005,0.2042303170848232E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1863947510211302E+001,0.1897992166071566E+001,0.1868892894991402E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2426709558618163E+005,0.1960332703702653E+005,0.2141881304064554E+005,0.2408663503855868E+005,0.2373079362830729E+005,0.2443544950564770E+005,0.2151881734259682E+005,0.2182900267483470E+005,0.2408273514776069E+005 -0.3439999999999994E-007,0.5570718676965028E+023,0.8822056370187385E+023,0.1618161139499365E+024,0.3453545271433845E+022,0.7767974291688880E+022,0.3169653839845834E+024,0.2407550793961056E+005,0.2374658645751348E+005,0.2455036729174462E+005,0.2265498054026191E+005,0.2281841106555758E+005,0.2418009760858748E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2439926835147906E+005,0.2169033841441582E+005,0.2046281508381977E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1864148707920017E+001,0.1897045631698528E+001,0.1869141979945571E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2416058963416654E+005,0.1945890674265321E+005,0.2133598448670878E+005,0.2407550793961056E+005,0.2374658645751348E+005,0.2439576309323770E+005,0.2146285884566015E+005,0.2174581764465216E+005,0.2406189424362650E+005 -0.3459999999999994E-007,0.5612761836791179E+023,0.8830064591106651E+023,0.1615958878746567E+024,0.3403493890688427E+022,0.7787994843987047E+022,0.3172156408883104E+024,0.2402435087654738E+005,0.2373403203278335E+005,0.2448470541304988E+005,0.2258119840306546E+005,0.2290004020605312E+005,0.2413496387220168E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2439378252662737E+005,0.2175899189322465E+005,0.2044707268294338E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1864118881243132E+001,0.1897364718549618E+001,0.1869043529467237E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2415381527776401E+005,0.1939906175323674E+005,0.2132820273933003E+005,0.2402435087654738E+005,0.2373403203278335E+005,0.2436360154607569E+005,0.2143231049498083E+005,0.2177493771145484E+005,0.2403332193480666E+005 -0.3479999999999994E-007,0.5649799858542788E+023,0.8834068701566285E+023,0.1613906772136005E+024,0.3363452786092093E+022,0.7828035948583382E+022,0.3174208515493666E+024,0.2400072712410706E+005,0.2379740894181268E+005,0.2444834202847862E+005,0.2267131562745025E+005,0.2288558679649126E+005,0.2413014153738732E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2432829600140058E+005,0.2163596841444860E+005,0.2050351771680305E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1863761814620067E+001,0.1896791520603504E+001,0.1869395843300946E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2412529015520123E+005,0.1944680586519523E+005,0.2098426384041183E+005,0.2400072712410706E+005,0.2379740894181268E+005,0.2432161255107063E+005,0.2145149372709565E+005,0.2168378155240496E+005,0.2402314307134702E+005 -0.3499999999999994E-007,0.5687338394101852E+023,0.8848583601982455E+023,0.1611954768286934E+024,0.3283370576899424E+022,0.7843051362807007E+022,0.3176811187292429E+024,0.2409537299485052E+005,0.2375388136844446E+005,0.2438047445801666E+005,0.2200001554120437E+005,0.2309436447952695E+005,0.2409854944435332E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2431854092343584E+005,0.2206753927430577E+005,0.2050003034870316E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1863708464293657E+001,0.1898774704556255E+001,0.1869374131064885E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2408311536759647E+005,0.1980517261370819E+005,0.2068469217242452E+005,0.2409537299485052E+005,0.2375388136844446E+005,0.2427701082211829E+005,0.2138230099316909E+005,0.2168679436597330E+005,0.2400491561206467E+005 -0.3519999999999994E-007,0.5716368194934195E+023,0.8857592850516632E+023,0.1610052815818608E+024,0.3193278091557671E+022,0.7933143848148760E+022,0.3178713139760755E+024,0.2413394518861724E+005,0.2374504514567122E+005,0.2434398193023981E+005,0.2216687629263277E+005,0.2309419313154394E+005,0.2408625274941020E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2422310716708479E+005,0.2204230875765307E+005,0.2067319958428722E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1863184327914293E+001,0.1898660862872931E+001,0.1870443631784552E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2409487611581390E+005,0.1993323644046764E+005,0.2068302497190443E+005,0.2413394518861724E+005,0.2374504514567122E+005,0.2423857552431534E+005,0.2148503509166933E+005,0.2173319393215045E+005,0.2399204701978082E+005 -0.3539999999999995E-007,0.5753906730493258E+023,0.8860095419553902E+023,0.1608050760588791E+024,0.3168252401184962E+022,0.7958169538521469E+022,0.3180715194990572E+024,0.2410547271037001E+005,0.2371109830245075E+005,0.2435260742990720E+005,0.2231625060881960E+005,0.2317150825837998E+005,0.2407936919074513E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2412440428067938E+005,0.2152852220098984E+005,0.2040012694135150E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1862637981663758E+001,0.1896285639442292E+001,0.1868749057151497E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2410990432961913E+005,0.2004615551726575E+005,0.2071427908271330E+005,0.2410547271037001E+005,0.2371109830245075E+005,0.2421993744843713E+005,0.2144129435466653E+005,0.2170203041160544E+005,0.2396681449673074E+005 -0.3559999999999995E-007,0.5779432934673421E+023,0.8863599016206082E+023,0.1606849527450901E+024,0.3158242125035879E+022,0.7943154124297843E+022,0.3182166685032189E+024,0.2408939682667120E+005,0.2365024042072214E+005,0.2436649609906843E+005,0.2239199382705192E+005,0.2296747983690685E+005,0.2406214574441906E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2416049656327784E+005,0.2166177893719113E+005,0.2051226107568510E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1862838266903946E+001,0.1896912308370705E+001,0.1869450247454626E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2404039406424126E+005,0.2013117745739713E+005,0.2048681125223082E+005,0.2408939682667120E+005,0.2365024042072214E+005,0.2421554574185466E+005,0.2153555458474445E+005,0.2157708524257780E+005,0.2394271638754895E+005 -0.3579999999999995E-007,0.5814969415002668E+023,0.8871106723317895E+023,0.1605047677744066E+024,0.3118201020439544E+022,0.7948159262372386E+022,0.3184318894404241E+024,0.2399359977977582E+005,0.2369872849425917E+005,0.2432515705133637E+005,0.2245826456741155E+005,0.2311078757307968E+005,0.2404150314970666E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2414785655963341E+005,0.2170675424675892E+005,0.2024453114691059E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1862768190765979E+001,0.1897122109310188E+001,0.1867763530947486E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2399667260071786E+005,0.2023600798185599E+005,0.2055774728724033E+005,0.2399359977977582E+005,0.2369872849425917E+005,0.2418130276543512E+005,0.2160715305702202E+005,0.2158779253289108E+005,0.2392264494510325E+005 -0.3599999999999995E-007,0.5857012574828820E+023,0.8877112889007345E+023,0.1602845416991267E+024,0.3078159915843210E+022,0.7968179814670553E+022,0.3186721360680021E+024,0.2395597323537960E+005,0.2372072465727479E+005,0.2430345366534773E+005,0.2218830718215388E+005,0.2320350929355954E+005,0.2402932615893614E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2403892172067984E+005,0.2164562876987446E+005,0.2010563688776120E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1862161277271728E+001,0.1896836762135872E+001,0.1866871210442243E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2399543640172420E+005,0.2032059990142870E+005,0.2069165952772120E+005,0.2395597323537960E+005,0.2372072465727479E+005,0.2414189586651241E+005,0.2149744163201667E+005,0.2162971709497409E+005,0.2390204150795395E+005 -0.3619999999999995E-007,0.5897554193232608E+023,0.8887623678963881E+023,0.1600743258999960E+024,0.3018098258948708E+022,0.7983195228894178E+022,0.3189273981098038E+024,0.2386367396053967E+005,0.2372049390121248E+005,0.2428940417942332E+005,0.2235765239531574E+005,0.2316188745745245E+005,0.2400563527677649E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2400852990747573E+005,0.2166973669721709E+005,0.2026805510814868E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1861990995635182E+001,0.1896949492015720E+001,0.1867913477120710E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2393362064118979E+005,0.2082214417625285E+005,0.2062098379866007E+005,0.2386367396053967E+005,0.2372049390121248E+005,0.2410949248287281E+005,0.2172317511267803E+005,0.2163489737548452E+005,0.2387110805045433E+005 -0.3639999999999996E-007,0.5925582966450042E+023,0.8895631899883149E+023,0.1599091563435361E+024,0.2953031463979664E+022,0.8033246609639596E+022,0.3191075830804873E+024,0.2382872189990982E+005,0.2372116964701708E+005,0.2422612122703834E+005,0.2211154911940622E+005,0.2328869935542180E+005,0.2396839686049966E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2400729290693483E+005,0.2097398857700096E+005,0.2018924169818253E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1861984055965680E+001,0.1893593905772566E+001,0.1867409762293971E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2395722803194899E+005,0.2106755767146008E+005,0.2054149246763215E+005,0.2382872189990982E+005,0.2372116964701708E+005,0.2408837080012159E+005,0.2149618641246086E+005,0.2164581336884919E+005,0.2385231548156889E+005 -0.3659999999999996E-007,0.5972631264350735E+023,0.8900637037957690E+023,0.1596639045778835E+024,0.2917995497457872E+022,0.8053267161937763E+022,0.3193678502603634E+024,0.2380619965248735E+005,0.2371454950449564E+005,0.2420352050976293E+005,0.2196350540341329E+005,0.2318535503855225E+005,0.2394680100395303E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2395313827696197E+005,0.2097461690900401E+005,0.2009968611634315E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1861679559076552E+001,0.1893597034764885E+001,0.1866832710993186E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2391155680891743E+005,0.2137925397510995E+005,0.2062184819824811E+005,0.2380619965248735E+005,0.2371454950449564E+005,0.2405048816871408E+005,0.2152236282400272E+005,0.2159984366553548E+005,0.2382628311274130E+005 -0.3679999999999996E-007,0.6005665175642711E+023,0.8915652452181316E+023,0.1594937298833491E+024,0.2837913288265203E+022,0.8063277438086846E+022,0.3196080968879414E+024,0.2374109670207769E+005,0.2370308277865187E+005,0.2418452068908263E+005,0.2192183168150748E+005,0.2307077790225538E+005,0.2391870882777830E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2389451568843415E+005,0.2073307244612102E+005,0.2025173419518276E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1861348422892535E+001,0.1892380469784242E+001,0.1867809480668122E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2393785537079794E+005,0.2119700661830111E+005,0.2039505720616368E+005,0.2374109670207769E+005,0.2370308277865187E+005,0.2403394810138101E+005,0.2138511800138623E+005,0.2152488790857451E+005,0.2379980235828211E+005 -0.3699999999999996E-007,0.6049710390698679E+023,0.8922659645485675E+023,0.1592534832557711E+024,0.2782856769445243E+022,0.8103318542683181E+022,0.3198633589297432E+024,0.2371975015078720E+005,0.2370132066324985E+005,0.2413510339266488E+005,0.2201084574032837E+005,0.2286507918820113E+005,0.2388488548549379E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2390119963504462E+005,0.2062236777927907E+005,0.2001412069645917E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1861386257915500E+001,0.1891813551077483E+001,0.1866276661167871E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2389132496994558E+005,0.2108495212663764E+005,0.2049275205160689E+005,0.2371975015078720E+005,0.2370132066324985E+005,0.2400059091211723E+005,0.2136101262800240E+005,0.2139917094345923E+005,0.2377512394505604E+005 -0.3719999999999996E-007,0.6091253036717376E+023,0.8927164269752762E+023,0.1590282520424167E+024,0.2742815664848909E+022,0.8138354509204974E+022,0.3200935952811720E+024,0.2370094253621878E+005,0.2369677191192812E+005,0.2408314741165348E+005,0.2205511278279490E+005,0.2292695480662640E+005,0.2385588428248784E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2386450577504346E+005,0.2042583475801067E+005,0.1986611233345331E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1861178294627021E+001,0.1890792257772061E+001,0.1865303786737635E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2389080556361244E+005,0.2116838660091278E+005,0.2027110961591593E+005,0.2370094253621878E+005,0.2369677191192812E+005,0.2396777149071840E+005,0.2135068309500253E+005,0.2132162286799776E+005,0.2375171190062943E+005 -0.3739999999999996E-007,0.6129292086083894E+023,0.8936173518286938E+023,0.1588580773478823E+024,0.2717789974476200E+022,0.8098313404608639E+022,0.3203288367706755E+024,0.2367461239848120E+005,0.2362366049552653E+005,0.2408552010580958E+005,0.2212353901457581E+005,0.2264568482488246E+005,0.2382500406701244E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2384646263537387E+005,0.2054517132255832E+005,0.1979680533441195E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1861075805826371E+001,0.1891414681529859E+001,0.1864843344361119E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2387948512666580E+005,0.2101924504764552E+005,0.2010211240099583E+005,0.2367461239848120E+005,0.2362366049552653E+005,0.2396061636520526E+005,0.2136985693340379E+005,0.2113074001364993E+005,0.2371836734986102E+005 -0.3759999999999997E-007,0.6168832676872774E+023,0.8939677114939117E+023,0.1586278409964534E+024,0.2667738593730782E+022,0.8163380199577682E+022,0.3205440577078808E+024,0.2361962523147983E+005,0.2353495515923595E+005,0.2403471067109982E+005,0.2261018882878701E+005,0.2268796542905521E+005,0.2376929723212219E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2383174928483988E+005,0.2072653051854702E+005,0.1986304233916483E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1860992118906272E+001,0.1892347133739509E+001,0.1865283457549303E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2391154061552001E+005,0.2074455947701243E+005,0.2037170432644942E+005,0.2361962523147983E+005,0.2353495515923595E+005,0.2394375448858038E+005,0.2155165333045699E+005,0.2124566452846460E+005,0.2367874453343441E+005 -0.3779999999999997E-007,0.6196360936282754E+023,0.8954192015355288E+023,0.1584826919922917E+024,0.2587656384538113E+022,0.8178395613801308E+022,0.3207542735070115E+024,0.2357375928090920E+005,0.2353533057159009E+005,0.2401435317397707E+005,0.2202378055068284E+005,0.2259576745797969E+005,0.2374328565647584E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2380164010747383E+005,0.2030431771934668E+005,0.2000524789291868E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1860820548786997E+001,0.1890151088567583E+001,0.1866218735248365E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2389933129369896E+005,0.2060433821865626E+005,0.2058151161209712E+005,0.2357375928090920E+005,0.2353533057159009E+005,0.2392313017794468E+005,0.2114006564687504E+005,0.2130495687068942E+005,0.2365817135435724E+005 -0.3799999999999997E-007,0.6237403068493997E+023,0.8956194070585104E+023,0.1582574607789373E+024,0.2557625556090862E+022,0.8218436718397642E+022,0.3209694944442168E+024,0.2359761592977059E+005,0.2347158657908553E+005,0.2400325329472523E+005,0.2229348175228275E+005,0.2251972242710409E+005,0.2372446169051890E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2375763775689050E+005,0.2019148285036441E+005,0.1985568591400087E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1860569049000579E+001,0.1889548954183827E+001,0.1865234719089176E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2386183398818192E+005,0.2076469787512522E+005,0.2077472422258742E+005,0.2359761592977059E+005,0.2347158657908553E+005,0.2389541628070329E+005,0.2127318309008054E+005,0.2128756502064661E+005,0.2363161186479303E+005 -0.3819999999999997E-007,0.6282449311164873E+023,0.8962200236274555E+023,0.1580122090132847E+024,0.2507574175345444E+022,0.8258477822993977E+022,0.3212247564860184E+024,0.2351179216332050E+005,0.2344452348940268E+005,0.2396962666880233E+005,0.2204661555092279E+005,0.2252571225523793E+005,0.2368144636690331E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2366796589108545E+005,0.2076791129755115E+005,0.2004505962198321E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1860053698349358E+001,0.1892557652907172E+001,0.1866478253711791E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2392076312353383E+005,0.2058028337484828E+005,0.2056522393683066E+005,0.2351179216332050E+005,0.2344452348940268E+005,0.2387358772147823E+005,0.2127002634525764E+005,0.2128037796364894E+005,0.2359612527526615E+005 -0.3839999999999997E-007,0.6323991957183570E+023,0.8966704860541642E+023,0.1577919829380049E+024,0.2472538208823651E+022,0.8283503513366687E+022,0.3214549928374474E+024,0.2351416218285732E+005,0.2339789969765325E+005,0.2394909967129760E+005,0.2186133322789296E+005,0.2250180576571336E+005,0.2365642842597156E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2366585495842540E+005,0.2114797436181134E+005,0.1990723948117961E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1860041520795974E+001,0.1894453356463884E+001,0.1865575536373118E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2384996357279879E+005,0.2029384276689893E+005,0.2067191298941741E+005,0.2351416218285732E+005,0.2339789969765325E+005,0.2384339781493308E+005,0.2121060636265231E+005,0.2126372384592620E+005,0.2356763369849122E+005 -0.3859999999999998E-007,0.6352020730401004E+023,0.8983722329995084E+023,0.1576618493480668E+024,0.2397461137705524E+022,0.8263482961068519E+022,0.3216802240508018E+024,0.2353733247099603E+005,0.2336684590253256E+005,0.2385215936841893E+005,0.2194437770245371E+005,0.2257720951771848E+005,0.2360748643896674E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2367660717602897E+005,0.2132943278161164E+005,0.1996060676861512E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1860103526143097E+001,0.1895335057702603E+001,0.1865926533912080E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2385185949083462E+005,0.2015258131512138E+005,0.2103234892439254E+005,0.2353733247099603E+005,0.2336684590253256E+005,0.2380447131152465E+005,0.2125563387754158E+005,0.2141609751840777E+005,0.2354915318869189E+005 -0.3879999999999998E-007,0.6385555155500434E+023,0.8991230037106898E+023,0.1574866695154579E+024,0.2352414895034648E+022,0.8278498375292144E+022,0.3218854347118580E+024,0.2353572570873116E+005,0.2335719567101405E+005,0.2380897787844143E+005,0.2179224737155619E+005,0.2258338196171028E+005,0.2358231423241045E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2365695991083320E+005,0.2162489070524131E+005,0.2030158040966751E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1859990183749410E+001,0.1896739592447383E+001,0.1868126587332783E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2380876477355847E+005,0.2035431220118373E+005,0.2088817893775499E+005,0.2353572570873116E+005,0.2335719567101405E+005,0.2376769820752563E+005,0.2132923114294559E+005,0.2146908971665849E+005,0.2353007555090763E+005 -0.3899999999999998E-007,0.6426096773904222E+023,0.9001740827063436E+023,0.1573114896828489E+024,0.2327389204661939E+022,0.8223441856472185E+022,0.3221406967536596E+024,0.2339762103971302E+005,0.2339984242162123E+005,0.2375516355703446E+005,0.2182285898012614E+005,0.2235445745957493E+005,0.2353483446927017E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2358708738616449E+005,0.2126343157525110E+005,0.2014324839478255E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1859585607300157E+001,0.1895016068950435E+001,0.1867114030216123E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2387737034823278E+005,0.2083798574453846E+005,0.2102781469821587E+005,0.2339762103971302E+005,0.2339984242162123E+005,0.2374523023893275E+005,0.2138342992549799E+005,0.2136687155937114E+005,0.2350159836205825E+005 -0.3919999999999998E-007,0.6449620922854569E+023,0.9011250589405065E+023,0.1571963715071344E+024,0.2282342961991063E+022,0.8218436718397642E+022,0.3223058663101195E+024,0.2331902546641738E+005,0.2341043150790649E+005,0.2374534593460546E+005,0.2225550170608870E+005,0.2238855843194484E+005,0.2352125122323140E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2358466850474189E+005,0.2140202718483140E+005,0.2004112114346253E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1859571559622153E+001,0.1895683681448890E+001,0.1866452625035482E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2383530434165036E+005,0.2097576372401050E+005,0.2102095821389581E+005,0.2331902546641738E+005,0.2341043150790649E+005,0.2372801622768070E+005,0.2164970337199827E+005,0.2135213084496280E+005,0.2348208153236168E+005 -0.3939999999999998E-007,0.6479651751301820E+023,0.9015254699864697E+023,0.1570161865364509E+024,0.2232291581245645E+022,0.8278498375292144E+022,0.3224760410046539E+024,0.2327573612654532E+005,0.2338554478187159E+005,0.2374173178302089E+005,0.2204847385234920E+005,0.2212988755718702E+005,0.2349542028633395E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2358809730379539E+005,0.2102586254693254E+005,0.2059344856525131E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1859591471575743E+001,0.1893851611949173E+001,0.1869953268635751E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2378422746885995E+005,0.2130740521718262E+005,0.2085102197005162E+005,0.2327573612654532E+005,0.2338554478187159E+005,0.2371247260680591E+005,0.2155255204666831E+005,0.2133937267638073E+005,0.2345744697687350E+005 -0.3959999999999998E-007,0.6513686690208704E+023,0.9023262920783965E+023,0.1568460118419165E+024,0.2192250476649310E+022,0.8278498375292144E+022,0.3226862568037846E+024,0.2322975228314928E+005,0.2340004971835949E+005,0.2370222855295633E+005,0.2214964843759335E+005,0.2228751383549058E+005,0.2347551492297389E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2348892741506155E+005,0.2131714728734278E+005,0.2107765771978800E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1859013277337970E+001,0.1895275827858618E+001,0.1872874675696259E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2379934389608077E+005,0.2109403781501537E+005,0.2065467306090384E+005,0.2322975228314928E+005,0.2340004971835949E+005,0.2367273466615526E+005,0.2161463857809132E+005,0.2148267005606451E+005,0.2343689607325358E+005 -0.3979999999999999E-007,0.6544218032463409E+023,0.9029769600280869E+023,0.1567058679758294E+024,0.2172229924351143E+022,0.8253472684919435E+022,0.3228714469125427E+024,0.2327041087425453E+005,0.2334381542794624E+005,0.2367016378976881E+005,0.2198822699096991E+005,0.2221647726686208E+005,0.2344939257049458E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2346516769074218E+005,0.2101601328496571E+005,0.2133717246911287E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858874042667052E+001,0.1893802777535791E+001,0.1874387064671572E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2379627151261524E+005,0.2161171601175868E+005,0.2038914883738905E+005,0.2327041087425453E+005,0.2334381542794624E+005,0.2365137842050350E+005,0.2161191756365861E+005,0.2144509003657318E+005,0.2341802457023838E+005 -0.3999999999999999E-007,0.6585760678482106E+023,0.9031271141703232E+023,0.1564806367624750E+024,0.2147204233978434E+022,0.8288508651441228E+022,0.3230866678497481E+024,0.2326022832494562E+005,0.2327988540843171E+005,0.2361077323349610E+005,0.2190955314302704E+005,0.2221820473291802E+005,0.2339979390431549E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2346475710839861E+005,0.2105196166966999E+005,0.2135520816869204E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858871634192316E+001,0.1893980799245687E+001,0.1874490836744552E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2380945762628452E+005,0.2219183820319346E+005,0.2019515502025429E+005,0.2326022832494562E+005,0.2327988540843171E+005,0.2362913537222904E+005,0.2175584055016369E+005,0.2139432137753730E+005,0.2338652966931522E+005 -0.4019999999999999E-007,0.6632308462575345E+023,0.9044785014504494E+023,0.1562554055491206E+024,0.2087142577083932E+022,0.8273493237217602E+022,0.3233869761342205E+024,0.2329612344111661E+005,0.2327557621072284E+005,0.2355290383328809E+005,0.2160920911558219E+005,0.2194453889748210E+005,0.2336898263751320E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2344779510809838E+005,0.2146253982551594E+005,0.2128871610290310E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858772063296738E+001,0.1895972515011164E+001,0.1874107409766288E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2376840411255245E+005,0.2159076122227617E+005,0.2001148895667126E+005,0.2329612344111661E+005,0.2327557621072284E+005,0.2358725799965531E+005,0.2156353365375454E+005,0.2120332524795476E+005,0.2336632411016595E+005 -0.4039999999999999E-007,0.6669846998134408E+023,0.9054294776846123E+023,0.1560902359926607E+024,0.2062116886711223E+022,0.8228446994546726E+022,0.3236222176237240E+024,0.2329660267006720E+005,0.2328511758104028E+005,0.2350043221928514E+005,0.2164405320210940E+005,0.2179601922217074E+005,0.2334301693423054E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2341628670763400E+005,0.2178146771599502E+005,0.2129964894316548E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858586728475851E+001,0.1897468752235732E+001,0.1874170614841375E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2373715568565450E+005,0.2140879023221071E+005,0.2012516975647081E+005,0.2329660267006720E+005,0.2328511758104028E+005,0.2354665970230387E+005,0.2161363824828627E+005,0.2117456512075974E+005,0.2334931853313133E+005 -0.4059999999999999E-007,0.6701879881811476E+023,0.9058298887305757E+023,0.1559350767123499E+024,0.2047101472487598E+022,0.8218436718397642E+022,0.3238024025944075E+024,0.2327939579175680E+005,0.2325025836588626E+005,0.2345741021751466E+005,0.2158898198197196E+005,0.2159863223410368E+005,0.2330362550844170E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2345379743678882E+005,0.2116004481237723E+005,0.2101331904609657E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858807314413946E+001,0.1894512467228216E+001,0.1872494077809644E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2373356993120249E+005,0.2183593415223043E+005,0.2006106777385894E+005,0.2327939579175680E+005,0.2325025836588626E+005,0.2353695815334754E+005,0.2154275355371792E+005,0.2099170200594027E+005,0.2332623701923209E+005 -0.4079999999999999E-007,0.6729408141221456E+023,0.9062803511572845E+023,0.1558049431224118E+024,0.2032086058263972E+022,0.8203421304174018E+022,0.3239625670127928E+024,0.2334118315878377E+005,0.2325242852047526E+005,0.2345264310470560E+005,0.2122535579581648E+005,0.2165616031940534E+005,0.2331401908372340E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2332942199536627E+005,0.2163328355740645E+005,0.2091885571207705E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858073256964273E+001,0.1896778939792423E+001,0.1871931130889298E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2372545716579764E+005,0.2190633767413801E+005,0.2009525681917479E+005,0.2334118315878377E+005,0.2325242852047526E+005,0.2349881850446611E+005,0.2153502391225575E+005,0.2100103290876663E+005,0.2332157965363939E+005 -0.4100000000000000E-007,0.6766946676780520E+023,0.9066307108225025E+023,0.1556097427375047E+024,0.2007060367891263E+022,0.8218436718397642E+022,0.3241677776738491E+024,0.2332538057818208E+005,0.2320498694411327E+005,0.2343696732087700E+005,0.2051437071985849E+005,0.2168053426267989E+005,0.2328616877185510E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2336299963734806E+005,0.2216163373448135E+005,0.2110184592871495E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858272181108853E+001,0.1899197019157150E+001,0.1873017175244055E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2363508614717622E+005,0.2201996474432086E+005,0.2006608597419309E+005,0.2332538057818208E+005,0.2320498694411327E+005,0.2347470066787194E+005,0.2140428081215129E+005,0.2105303841105631E+005,0.2329388312510160E+005 -0.4120000000000000E-007,0.6814495488488667E+023,0.9072813787721929E+023,0.1553895166622249E+024,0.1992044953667638E+022,0.8183400751875851E+022,0.3244380551298743E+024,0.2326492886248296E+005,0.2315913612509425E+005,0.2340542196676090E+005,0.2002576042237547E+005,0.2167528563727811E+005,0.2324264886452543E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2335593459740463E+005,0.2154878503741179E+005,0.2102218148690368E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858230371973365E+001,0.1896381420434719E+001,0.1872546639131789E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2362350587899777E+005,0.2243667786087568E+005,0.1998148421138135E+005,0.2326492886248296E+005,0.2315913612509425E+005,0.2345561113700422E+005,0.2114374824668204E+005,0.2100441775151827E+005,0.2325662987592962E+005 -0.4140000000000000E-007,0.6846528372165734E+023,0.9083825091485920E+023,0.1552443676580631E+024,0.1952003849071304E+022,0.8153369923428599E+022,0.3246532760670796E+024,0.2327915092797957E+005,0.2316044367274430E+005,0.2332707335945620E+005,0.2002698069588597E+005,0.2167500860439964E+005,0.2320901183458751E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2336825915193082E+005,0.2121582468502934E+005,0.2081865706853975E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858303289599184E+001,0.1894784771992754E+001,0.1871328549261840E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2360873342774163E+005,0.2236366660684039E+005,0.2000825662235337E+005,0.2327915092797957E+005,0.2316044367274430E+005,0.2342036987948347E+005,0.2103150448275554E+005,0.2095665857849647E+005,0.2324162391904682E+005 -0.4160000000000000E-007,0.6877560228227893E+023,0.9093835367635004E+023,0.1550942135158269E+024,0.1906957606400428E+022,0.8143359647279515E+022,0.3248584867281358E+024,0.2324604997261374E+005,0.2317912306102212E+005,0.2332042602722974E+005,0.1992839675824871E+005,0.2136223598763074E+005,0.2319612630755615E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2334642453296173E+005,0.2066403857935222E+005,0.2068080113421486E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858174054855273E+001,0.1892027646644578E+001,0.1870490178380131E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2356526109433619E+005,0.2219623075109668E+005,0.2004429687287451E+005,0.2324604997261374E+005,0.2317912306102212E+005,0.2339886963025382E+005,0.2078845173091523E+005,0.2079306328983136E+005,0.2322435785970428E+005 -0.4180000000000000E-007,0.6914598249979502E+023,0.9095837422864821E+023,0.1548839977166961E+024,0.1871921639878635E+022,0.8193411028024934E+022,0.3250536871130430E+024,0.2323551747608139E+005,0.2320215026651653E+005,0.2329907024677001E+005,0.1962634769925092E+005,0.2142324955615989E+005,0.2318999742970437E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2334065470774660E+005,0.2051930366308322E+005,0.2081715130097152E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858139865050789E+001,0.1891280366377763E+001,0.1871319450542413E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2346607344774483E+005,0.2166631841363627E+005,0.2002555873750839E+005,0.2323551747608139E+005,0.2320215026651653E+005,0.2335903929883802E+005,0.2046345941209781E+005,0.2085136738426252E+005,0.2320897764314138E+005 -0.4200000000000001E-007,0.6952136785538566E+023,0.9103345129976633E+023,0.1546837921937145E+024,0.1821870259133217E+022,0.8218436718397642E+022,0.3252789183263973E+024,0.2318186996546093E+005,0.2318282138412296E+005,0.2328148050561913E+005,0.1949630719038981E+005,0.2130167557794597E+005,0.2316135794206911E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2335491204486856E+005,0.1994659505429135E+005,0.2106843968108745E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1858224318721498E+001,0.1888219154929895E+001,0.1872820285474045E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2340946300466099E+005,0.2158801658198387E+005,0.1982898076985829E+005,0.2318186996546093E+005,0.2318282138412296E+005,0.2333869900006337E+005,0.2022707095382740E+005,0.2080956340352157E+005,0.2318022709516095E+005 -0.4220000000000001E-007,0.6986171724445451E+023,0.9110352323280992E+023,0.1545386431895528E+024,0.1811859982984133E+022,0.8168385337652225E+022,0.3254841289874536E+024,0.2316309036684863E+005,0.2317199591047776E+005,0.2328482098873219E+005,0.1956875933386480E+005,0.2121569293534571E+005,0.2315449976165504E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2328505107591154E+005,0.1989990451542107E+005,0.2076935287507316E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1857809532612493E+001,0.1887961972596953E+001,0.1871029954871056E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2340245677438892E+005,0.2136076298905161E+005,0.1980725272753053E+005,0.2316309036684863E+005,0.2317199591047776E+005,0.2331919042234619E+005,0.2017985399979159E+005,0.2068418658732429E+005,0.2316088125544807E+005 -0.4240000000000001E-007,0.7010696901010706E+023,0.9113855919933171E+023,0.1544035044615401E+024,0.1781829154536882E+022,0.8193411028024934E+022,0.3256242728535407E+024,0.2317743915066540E+005,0.2320645503051732E+005,0.2325981208957946E+005,0.1976759227012756E+005,0.2108017111373152E+005,0.2315318909199239E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2322533821507863E+005,0.1919422995965983E+005,0.2041670141343492E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1857453071521546E+001,0.1883925713445363E+001,0.1868853173389035E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2338416691244015E+005,0.2149281585407617E+005,0.2013585542429851E+005,0.2317743915066540E+005,0.2320645503051732E+005,0.2328674279398479E+005,0.2011191254125674E+005,0.2062470078196882E+005,0.2315638252529232E+005 -0.4260000000000001E-007,0.7042229270880318E+023,0.9121363627044984E+023,0.1542483451812293E+024,0.1746793188015090E+022,0.8188405889950392E+022,0.3258194732384478E+024,0.2321865986859702E+005,0.2317988050819396E+005,0.2321639625018218E+005,0.1928587554172872E+005,0.2133958009168609E+005,0.2313842281464066E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2319677564626449E+005,0.1904873890698968E+005,0.2032107746655484E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1857281932523233E+001,0.1883057129685010E+001,0.1868250208444802E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2335963846439182E+005,0.2095322104521947E+005,0.2004107736234812E+005,0.2321865986859702E+005,0.2317988050819396E+005,0.2325286017826888E+005,0.1970547821562935E+005,0.2068441712239790E+005,0.2314146965322326E+005 -0.4280000000000001E-007,0.7077265237402111E+023,0.9128370820349343E+023,0.1540781704866949E+024,0.1716762359567839E+022,0.8178395613801308E+022,0.3260296890375786E+024,0.2320225790868522E+005,0.2313799069258754E+005,0.2322918660687880E+005,0.1912698471611904E+005,0.2137603793483652E+005,0.2312972080212360E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2310852697791472E+005,0.1918371993186244E+005,0.2031916690071952E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856750566733873E+001,0.1883863400846235E+001,0.1868238104738488E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2335485693073416E+005,0.2060469626322127E+005,0.1997053757779218E+005,0.2320225790868522E+005,0.2313799069258754E+005,0.2323316893246933E+005,0.1957183731012986E+005,0.2067928173931109E+005,0.2311646724783563E+005 -0.4300000000000001E-007,0.7106795552041908E+023,0.9129872361771705E+023,0.1539130009302350E+024,0.1691736669195130E+022,0.8213431580323101E+022,0.3261848483178894E+024,0.2316723219889956E+005,0.2311078947824723E+005,0.2325716064832161E+005,0.1967688853802871E+005,0.2117218125195116E+005,0.2312552901214862E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2313479655460628E+005,0.1912146221805550E+005,0.2028655292638622E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856909154865218E+001,0.1883492907123550E+001,0.1868031147216059E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2325626575462322E+005,0.2005736960034033E+005,0.1982004349642201E+005,0.2316723219889956E+005,0.2311078947824723E+005,0.2322376239437492E+005,0.1963545907578856E+005,0.2053755151387300E+005,0.2309357473463539E+005 -0.4320000000000002E-007,0.7146836656638242E+023,0.9130873389386613E+023,0.1536877697168807E+024,0.1661705840747879E+022,0.8263482961068519E+022,0.3263900589789456E+024,0.2314631370813983E+005,0.2303284189262575E+005,0.2325281306470287E+005,0.1947918180671471E+005,0.2127676992003470E+005,0.2309871435107993E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2310433531127585E+005,0.1953637318005052E+005,0.2019985510299237E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856725229344591E+001,0.1885918357502518E+001,0.1867477818642940E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2322940148157952E+005,0.1980251131264747E+005,0.1997232638458852E+005,0.2314631370813983E+005,0.2303284189262575E+005,0.2320577813968490E+005,0.1958875575655805E+005,0.2060403362203821E+005,0.2306009259272250E+005 -0.4340000000000002E-007,0.7179870567930218E+023,0.9137880582690972E+023,0.1535376155746444E+024,0.1641685288449712E+022,0.8233452132621268E+022,0.3265902645019272E+024,0.2308758151388462E+005,0.2297229687273677E+005,0.2328965132326222E+005,0.1955041869928160E+005,0.2134682368147093E+005,0.2308865744745684E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2304179370220347E+005,0.1928955976368867E+005,0.2015369988817859E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856346117057861E+001,0.1884487873686100E+001,0.1867181347920595E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2321229225986871E+005,0.1968472298827766E+005,0.1986938031493024E+005,0.2308758151388462E+005,0.2297229687273677E+005,0.2319997853709803E+005,0.1951803038994523E+005,0.2059212317727551E+005,0.2302731113731237E+005 -0.4360000000000002E-007,0.7206898313532744E+023,0.9145888803610238E+023,0.1534074819847063E+024,0.1606649321927919E+022,0.8223441856472185E+022,0.3267654443345362E+024,0.2305984047087480E+005,0.2301561535662172E+005,0.2322685426736667E+005,0.1976887407649798E+005,0.2121777192502191E+005,0.2306333170201621E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2305641945296525E+005,0.1952332802011197E+005,0.2025343581338342E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856434954370142E+001,0.1885843637278727E+001,0.1867820330979151E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2317501693764919E+005,0.1884382518857579E+005,0.1991872438339621E+005,0.2305984047087480E+005,0.2301561535662172E+005,0.2316558688728840E+005,0.1943294439732029E+005,0.2057720454462279E+005,0.2301679598482706E+005 -0.4380000000000002E-007,0.7234426572942724E+023,0.9151394455492235E+023,0.1532673381186191E+024,0.1576618493480668E+022,0.8228446994546726E+022,0.3269306138909961E+024,0.2308705632336338E+005,0.2294450540048726E+005,0.2322429962770799E+005,0.1966897060764796E+005,0.2123049448392398E+005,0.2304828320569907E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2301141416465776E+005,0.2032940879728250E+005,0.2026360305513215E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856161239117434E+001,0.1890284094261262E+001,0.1867885124974094E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2315663159214519E+005,0.1813674343001702E+005,0.1997985810739880E+005,0.2308705632336338E+005,0.2294450540048726E+005,0.2314692603664010E+005,0.1940540548822632E+005,0.2060332690730092E+005,0.2299495384342672E+005 -0.4400000000000002E-007,0.7262955859967612E+023,0.9153897024529506E+023,0.1531221891144574E+024,0.1561603079257043E+022,0.8233452132621268E+022,0.3270857731713069E+024,0.2299346240458875E+005,0.2294119112529702E+005,0.2320911124145750E+005,0.1973874742244664E+005,0.2131662951246098E+005,0.2302203921036351E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2305125203794297E+005,0.2039767749779326E+005,0.2001696444697906E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856403579860999E+001,0.1890644356462935E+001,0.1866295215928232E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2311662920424381E+005,0.1805389404296757E+005,0.1994934341421262E+005,0.2299346240458875E+005,0.2294119112529702E+005,0.2313939328227117E+005,0.1943051727431713E+005,0.2056511348697108E+005,0.2296901253563459E+005 -0.4420000000000003E-007,0.7284978467495596E+023,0.9158902162604047E+023,0.1530020658006684E+024,0.1526567112735250E+022,0.8253472684919435E+022,0.3272209118993196E+024,0.2297519465563602E+005,0.2294972272020470E+005,0.2318590586905990E+005,0.1975248395817826E+005,0.2117188309843226E+005,0.2300606992700275E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2302415464030299E+005,0.2070640585534049E+005,0.2007971013037636E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856238830519383E+001,0.1892244453869754E+001,0.1866703310314427E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2310753362634897E+005,0.1760892868904228E+005,0.1994526640093116E+005,0.2297519465563602E+005,0.2294972272020470E+005,0.2311925221121321E+005,0.1939236075947943E+005,0.2051771237240705E+005,0.2295672381492153E+005 -0.4440000000000003E-007,0.7312006213098122E+023,0.9167911411138223E+023,0.1528669270726558E+024,0.1481520870064374E+022,0.8253472684919435E+022,0.3274010968700031E+024,0.2293494815747910E+005,0.2287848611413381E+005,0.2318536072804873E+005,0.1926437215338652E+005,0.2131043337611116E+005,0.2297849561915636E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2304107631660389E+005,0.2089530556615102E+005,0.2003812344898710E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856341756806205E+001,0.1893200617725747E+001,0.1866433111687617E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2309122217187181E+005,0.1734427654886072E+005,0.1974074032881619E+005,0.2293494815747910E+005,0.2287848611413381E+005,0.2311883570547057E+005,0.1915520558385404E+005,0.2050738652759276E+005,0.2292669636216814E+005 -0.4460000000000003E-007,0.7350545776272094E+023,0.9165408842100951E+023,0.1526467009973760E+024,0.1466505455840749E+022,0.8308529203739395E+022,0.3275812818406865E+024,0.2295459281096664E+005,0.2282670706925304E+005,0.2313214786204210E+005,0.1969026022226819E+005,0.2137328104993936E+005,0.2294682803646506E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2299574443419715E+005,0.2061661396693482E+005,0.2012057103950259E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856065693257630E+001,0.1891783922526881E+001,0.1866967731369051E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2311767236245350E+005,0.1744492724963750E+005,0.1965412164045507E+005,0.2295459281096664E+005,0.2282670706925304E+005,0.2309099820936003E+005,0.1929294584687429E+005,0.2053199444263136E+005,0.2290453661890911E+005 -0.4480000000000003E-007,0.7383079173756616E+023,0.9173917576827673E+023,0.1525115622693633E+024,0.1451490041617123E+022,0.8253472684919435E+022,0.3277864925017427E+024,0.2294730781855588E+005,0.2280821875181925E+005,0.2311025948903790E+005,0.1982239157331315E+005,0.2134527825425791E+005,0.2293002219303129E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2299215271622425E+005,0.2059104346155065E+005,0.2001982522416877E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856043774957733E+001,0.1891652053860465E+001,0.1866313876591455E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2305867956638233E+005,0.1770169398099454E+005,0.1959848845429558E+005,0.2294730781855588E+005,0.2280821875181925E+005,0.2306323948794780E+005,0.1941793510340364E+005,0.2047621064534859E+005,0.2288447124912257E+005 -0.4500000000000003E-007,0.7407103836514416E+023,0.9177921687287307E+023,0.1524014492317234E+024,0.1441479765468040E+022,0.8233452132621268E+022,0.3279266363678299E+024,0.2293172267800108E+005,0.2278848254646962E+005,0.2307683838495908E+005,0.1951414727837304E+005,0.2139483612199476E+005,0.2290546415010872E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2302769319258274E+005,0.2095551201703625E+005,0.2005865238747638E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856260365989942E+001,0.1893501813162178E+001,0.1866566629809419E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2301493220945723E+005,0.1781177736818430E+005,0.1950233006211166E+005,0.2293172267800108E+005,0.2278848254646962E+005,0.2304547454923639E+005,0.1941615454658020E+005,0.2048039249559008E+005,0.2286749780336261E+005 -0.4520000000000003E-007,0.7440137747806392E+023,0.9188932991051298E+023,0.1522312745371890E+024,0.1381418108573538E+022,0.8243462408770352E+022,0.3281468624431098E+024,0.2295328333588099E+005,0.2266736876026767E+005,0.2302702191518642E+005,0.1957130919623754E+005,0.2144455600812206E+005,0.2285528990103350E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2301720357739578E+005,0.2069791956058611E+005,0.2002089481880684E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856196507880076E+001,0.1892201096458770E+001,0.1866320852150591E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2306723458479268E+005,0.1766075615643949E+005,0.1939986872430773E+005,0.2295328333588099E+005,0.2266736876026767E+005,0.2303609408440165E+005,0.1932620132877240E+005,0.2046202354613667E+005,0.2283378429245492E+005 -0.4540000000000004E-007,0.7471670117676005E+023,0.9190434532473661E+023,0.1520610998426546E+024,0.1361397556275371E+022,0.8268488099143061E+022,0.3283120319995697E+024,0.2295337782028212E+005,0.2264388245317281E+005,0.2297229747012065E+005,0.1948092853964949E+005,0.2163950589244048E+005,0.2282801493167410E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2299572483122537E+005,0.2076034843237429E+005,0.1988953897790717E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1856065573649465E+001,0.1892519239333210E+001,0.1865458713883021E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2306894593261958E+005,0.1786046979304610E+005,0.1942822263760709E+005,0.2295337782028212E+005,0.2264388245317281E+005,0.2300683326049229E+005,0.1936201835563979E+005,0.2051983452600352E+005,0.2281531870756976E+005 -0.4560000000000004E-007,0.7511711222272340E+023,0.9194438642933295E+023,0.1518859200100456E+024,0.1366402694349913E+022,0.8218436718397642E+022,0.3285322580748495E+024,0.2284470568359772E+005,0.2256235451534758E+005,0.2300079305601041E+005,0.1951810246105476E+005,0.2170875123174899E+005,0.2279559519368762E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2294611153077819E+005,0.2061331461377555E+005,0.2005782675560879E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1855762218649412E+001,0.1891766925593162E+001,0.1866561265133355E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2308513091986696E+005,0.1812911343593119E+005,0.1924726122710339E+005,0.2284470568359772E+005,0.2256235451534758E+005,0.2301059500318796E+005,0.1941564804974841E+005,0.2054302483988528E+005,0.2277053931378882E+005 -0.4580000000000004E-007,0.7543243592141954E+023,0.9200945322430199E+023,0.1517457761439584E+024,0.1351387280126287E+022,0.8183400751875851E+022,0.3287224533216821E+024,0.2277597847429227E+005,0.2257747550169837E+005,0.2300557083070496E+005,0.1983991269939113E+005,0.2177304646095544E+005,0.2278936473303578E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2293194821529799E+005,0.2024032772601872E+005,0.2008105412606357E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1855675384022347E+001,0.1889810419079911E+001,0.1866712024351536E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2299927791593407E+005,0.1869883354015671E+005,0.1925543694677900E+005,0.2277597847429227E+005,0.2257747550169837E+005,0.2298380703701549E+005,0.1961850605154383E+005,0.2057979976064986E+005,0.2274870250962430E+005 -0.4600000000000004E-007,0.7582283669123379E+023,0.9201946350045107E+023,0.1515405654829022E+024,0.1336371865902662E+022,0.8203421304174018E+022,0.3289226588446638E+024,0.2274858694271178E+005,0.2258328520403021E+005,0.2298065341813116E+005,0.1980097097612612E+005,0.2180234167878627E+005,0.2277368386983809E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2297462380181415E+005,0.1969703126982612E+005,0.1990134982631316E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1855936709736712E+001,0.1886830623794856E+001,0.1865536687443199E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2288057451010753E+005,0.1840575603439311E+005,0.1944223255763302E+005,0.2274858694271178E+005,0.2258328520403021E+005,0.2294982635375417E+005,0.1936731046267859E+005,0.2059827145646192E+005,0.2272768953839231E+005 -0.4620000000000004E-007,0.7612815011378085E+023,0.9209454057156920E+023,0.1513904113406659E+024,0.1301335899380869E+022,0.8198416166099475E+022,0.3291128540914964E+024,0.2270578651253202E+005,0.2250795127066462E+005,0.2300419064952038E+005,0.1952947705978794E+005,0.2153997587019883E+005,0.2274609102460368E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2295298710683645E+005,0.1920022835274817E+005,0.2012538103738483E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1855804334846403E+001,0.1883961247193638E+001,0.1866998789094463E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2287189426743923E+005,0.1843734461266050E+005,0.1942353140062617E+005,0.2270578651253202E+005,0.2250795127066462E+005,0.2295173633445092E+005,0.1912207257299631E+005,0.2053896567780082E+005,0.2269541555460717E+005 -0.4640000000000004E-007,0.7642845839825335E+023,0.9211456112386736E+023,0.1512352520603552E+024,0.1286320485157244E+022,0.8208426442248559E+022,0.3292730185098816E+024,0.2274616043859742E+005,0.2240914936501123E+005,0.2303758929560517E+005,0.1991506201451469E+005,0.2119856757337706E+005,0.2273609489298986E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2290591124700495E+005,0.1879181431106984E+005,0.2005894725243648E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1855515479686945E+001,0.1881491128069894E+001,0.1866568545637520E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2285386156431194E+005,0.1828186011392024E+005,0.1943400200072216E+005,0.2274616043859742E+005,0.2240914936501123E+005,0.2294834930746543E+005,0.1913328604623640E+005,0.2037482125048622E+005,0.2267151775958935E+005 -0.4660000000000005E-007,0.7670874613042770E+023,0.9212457140001645E+023,0.1510800927800444E+024,0.1266299932859076E+022,0.8238457270695810E+022,0.3294181675140434E+024,0.2279434475345759E+005,0.2240043394620126E+005,0.2298924744757273E+005,0.2013459694558592E+005,0.2117829611465378E+005,0.2272293177255086E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2288633099893936E+005,0.1897271424255818E+005,0.2008559085967942E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1855394995407558E+001,0.1882598072172351E+001,0.1866741430670190E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2280376369436702E+005,0.1863721466330652E+005,0.1952967725716089E+005,0.2279434475345759E+005,0.2240043394620126E+005,0.2290728015458271E+005,0.1938166576363567E+005,0.2040106634128272E+005,0.2266300721720101E+005 -0.4680000000000005E-007,0.7699904413875112E+023,0.9219464333306004E+023,0.1509699797424044E+024,0.1266299932859076E+022,0.8168385337652225E+022,0.3295983524847270E+024,0.2280918683442437E+005,0.2240026545229969E+005,0.2294140021396355E+005,0.2028005998502906E+005,0.2119664545425895E+005,0.2270568327618737E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2285845359702742E+005,0.1968322121372388E+005,0.1962307336903172E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1855223108874889E+001,0.1886752779373439E+001,0.1863675205527824E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2280943472548675E+005,0.1803474142349858E+005,0.1945036104714956E+005,0.2280918683442437E+005,0.2240026545229969E+005,0.2288045172974054E+005,0.1946447613679197E+005,0.2026052946666198E+005,0.2265143324376647E+005 -0.4700000000000005E-007,0.7733939352781995E+023,0.9227472554225270E+023,0.1508048101859446E+024,0.1231263966337284E+022,0.8158375061503141E+022,0.3298085682838576E+024,0.2277379811252956E+005,0.2239369539445706E+005,0.2295404062049155E+005,0.2017988035022396E+005,0.2117288529031818E+005,0.2270058266627919E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2277453171925444E+005,0.1954623553913250E+005,0.1945705056058869E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854703189306706E+001,0.1885974782370256E+001,0.1862539887424738E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2277217551245384E+005,0.1867521155503986E+005,0.1968750531411554E+005,0.2277379811252956E+005,0.2239369539445706E+005,0.2285240734353280E+005,0.1956930946404664E+005,0.2027430099384581E+005,0.2262960346519842E+005 -0.4720000000000005E-007,0.7768474805496335E+023,0.9228974095647633E+023,0.1506296303533356E+024,0.1221253690188200E+022,0.8163380199577682E+022,0.3299887532545412E+024,0.2271715391104027E+005,0.2243351297977629E+005,0.2290898353026569E+005,0.2008688857786582E+005,0.2121117642157873E+005,0.2267840104030473E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2277338414382208E+005,0.2051805710133586E+005,0.1929117719609322E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854696053889870E+001,0.1891273885344828E+001,0.1861386559626267E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2273512392756579E+005,0.1834305663164660E+005,0.1964643532459378E+005,0.2271715391104027E+005,0.2243351297977629E+005,0.2282156683846261E+005,0.1969912193728872E+005,0.2023421019346599E+005,0.2261289440723684E+005 -0.4740000000000005E-007,0.7807514882477761E+023,0.9232978206107267E+023,0.1504344299684285E+024,0.1201233137890033E+022,0.8163380199577682E+022,0.3302039741917464E+024,0.2264802793555235E+005,0.2246732704241239E+005,0.2289189194264598E+005,0.2035550565057668E+005,0.2106766630630292E+005,0.2266119107889513E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2275661287314921E+005,0.2066165003086220E+005,0.1910783214211648E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854591693187480E+001,0.1892015397686450E+001,0.1860089034331637E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2267808435935419E+005,0.1829852883413801E+005,0.1956662661820146E+005,0.2264802793555235E+005,0.2246732704241239E+005,0.2279290681916900E+005,0.1984263335597204E+005,0.2009864893920365E+005,0.2259027337699180E+005 -0.4760000000000006E-007,0.7834542628080287E+023,0.9234980261337083E+023,0.1502842758261922E+024,0.1176207447517324E+022,0.8193411028024934E+022,0.3303491231959082E+024,0.2257872900034022E+005,0.2250388581466979E+005,0.2280461750616257E+005,0.1994092445347980E+005,0.2099817797423679E+005,0.2261197572860259E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2278849177825704E+005,0.2076814318128321E+005,0.1894537891575569E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854789934387536E+001,0.1892558830265583E+001,0.1858918905055226E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2272665757674598E+005,0.1781564534165218E+005,0.1955972316187830E+005,0.2257872900034022E+005,0.2250388581466979E+005,0.2277750803987465E+005,0.1955137418892495E+005,0.2002238329063524E+005,0.2257405401344264E+005 -0.4780000000000006E-007,0.7867076025564808E+023,0.9241486940833987E+023,0.1501191062697323E+024,0.1141171480995531E+022,0.8198416166099475E+022,0.3305443235808153E+024,0.2256389351499886E+005,0.2249046971040923E+005,0.2277863893962810E+005,0.1993537124485570E+005,0.2103863739824207E+005,0.2259398830151211E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2271521664174502E+005,0.2018466747846251E+005,0.1897815857888326E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854333459127757E+001,0.1889512373095258E+001,0.1859156585266809E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2273471597767585E+005,0.1830679421165842E+005,0.1952229150902341E+005,0.2256389351499886E+005,0.2249046971040923E+005,0.2274866490726609E+005,0.1953097313980132E+005,0.2003801225447535E+005,0.2255416095325760E+005 -0.4800000000000006E-007,0.7891601202130062E+023,0.9247993620330891E+023,0.1500039880940179E+024,0.1116145790622822E+022,0.8183400751875851E+022,0.3306994828611261E+024,0.2252147360351569E+005,0.2245863427452345E+005,0.2275732662190113E+005,0.2018867250083357E+005,0.2135528327758027E+005,0.2257415093809645E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2271768398533345E+005,0.2014336434828444E+005,0.1893003986786555E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854348876362884E+001,0.1889290161845644E+001,0.1858807408449031E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2270260227607936E+005,0.1837872266375888E+005,0.1961327258390070E+005,0.2252147360351569E+005,0.2245863427452345E+005,0.2273063408355517E+005,0.1965080868120036E+005,0.2019005420367684E+005,0.2253139351374363E+005 -0.4820000000000006E-007,0.7917127406310225E+023,0.9250496189368162E+023,0.1498738545040798E+024,0.1101130376399197E+022,0.8188405889950392E+022,0.3308396267272133E+024,0.2243004626415423E+005,0.2248085522463081E+005,0.2270442159890101E+005,0.1998825764801159E+005,0.2139691491163267E+005,0.2253485034649779E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2272987621455255E+005,0.1979293983513274E+005,0.1926639690382158E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854425011847898E+001,0.1887368303238047E+001,0.1861212598012251E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2270777874781676E+005,0.1895109695923062E+005,0.1961479355468875E+005,0.2243004626415423E+005,0.2248085522463081E+005,0.2271228775451137E+005,0.1963355641539438E+005,0.2029950107074700E+005,0.2251007184194002E+005 -0.4840000000000006E-007,0.7946657720950022E+023,0.9253999786020341E+023,0.1497237003618435E+024,0.1081109824101030E+022,0.8193411028024934E+022,0.3310047962836732E+024,0.2237220435050221E+005,0.2248113818222964E+005,0.2271461858809799E+005,0.2020773702429069E+005,0.2142702447121705E+005,0.2252707820641978E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2268581854280511E+005,0.1957038681811421E+005,0.1914984421199738E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854149513374541E+001,0.1886112722176248E+001,0.1860388491509224E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2268181373745604E+005,0.1882478324088428E+005,0.1954612431630148E+005,0.2237220435050221E+005,0.2248113818222964E+005,0.2269725548695515E+005,0.1963150162715796E+005,0.2026116625967780E+005,0.2248848360847841E+005 -0.4860000000000006E-007,0.7976188035589819E+023,0.9259505437902338E+023,0.1495835564957564E+024,0.1061089271802863E+022,0.8178395613801308E+022,0.3311799761162821E+024,0.2226758922135378E+005,0.2249730167779003E+005,0.2272406234467950E+005,0.1972903990751561E+005,0.2139323339777569E+005,0.2250826396348779E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2262217802757758E+005,0.1960775281596468E+005,0.1946634528188741E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853749715965925E+001,0.1886325481595747E+001,0.1862603946936270E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2269177383304773E+005,0.1880524118735417E+005,0.1937348849399867E+005,0.2226758922135378E+005,0.2249730167779003E+005,0.2268708331018657E+005,0.1942751707400254E+005,0.2028162630570129E+005,0.2246314480839756E+005 -0.4880000000000007E-007,0.8013226057341429E+023,0.9266512631206697E+023,0.1493933612489238E+024,0.1021048167206528E+022,0.8188405889950392E+022,0.3314002021915619E+024,0.2224925265147185E+005,0.2242267096685219E+005,0.2266201482667055E+005,0.2013956344411730E+005,0.2153522200505607E+005,0.2245967162930738E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2263377412345999E+005,0.1914033870301349E+005,0.1940725513229866E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853822727154289E+001,0.1883605489862481E+001,0.1862195676570495E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2271435895538758E+005,0.1849602214860620E+005,0.1927313368197106E+005,0.2224925265147185E+005,0.2242267096685219E+005,0.2266965071135489E+005,0.1938861573123857E+005,0.2029846517728435E+005,0.2243024174322021E+005 -0.4900000000000007E-007,0.8043757399596134E+023,0.9267013145014150E+023,0.1492331968305384E+024,0.1011037891057444E+022,0.8203421304174018E+022,0.3315553614718727E+024,0.2226353649909787E+005,0.2233898276454849E+005,0.2265971107842330E+005,0.2000635896268833E+005,0.2144863727907123E+005,0.2243589673607396E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2259783950486293E+005,0.1931902601627143E+005,0.1961514774447079E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853596238800924E+001,0.1884660536712770E+001,0.1863621433713369E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2270428622988165E+005,0.1830023751868864E+005,0.1946269679093551E+005,0.2226353649909787E+005,0.2233898276454849E+005,0.2265598535367474E+005,0.1932257329996899E+005,0.2037211937335619E+005,0.2240549920334689E+005 -0.4920000000000007E-007,0.8078292852310472E+023,0.9269515714051422E+023,0.1490630221360040E+024,0.1001027614908361E+022,0.8198416166099475E+022,0.3317405515806308E+024,0.2221378425462203E+005,0.2229457476755611E+005,0.2264853019297174E+005,0.1956771440453280E+005,0.2131745911668299E+005,0.2240157015217044E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2264964724482150E+005,0.1887553188293582E+005,0.1942367567572283E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853922549267188E+001,0.1882005986391032E+001,0.1862309373797103E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2264925124400675E+005,0.1838483583595037E+005,0.1958258639321134E+005,0.2221378425462203E+005,0.2229457476755611E+005,0.2264904275051200E+005,0.1903466505907453E+005,0.2029789620864788E+005,0.2237499518349528E+005 -0.4940000000000007E-007,0.8103318542683180E+023,0.9269515714051422E+023,0.1489178731318423E+024,0.9810070626101937E+021,0.8238457270695810E+022,0.3318656800324943E+024,0.2220768101256927E+005,0.2232840274446182E+005,0.2259482336673406E+005,0.1913812553092543E+005,0.2155492067369400E+005,0.2238984429657386E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2262124512816661E+005,0.1886694052597229E+005,0.1898060688498831E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853743839088970E+001,0.1881953356027052E+001,0.1859174305434021E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2265835966240353E+005,0.1758700951652035E+005,0.1963361729704556E+005,0.2220768101256927E+005,0.2232840274446182E+005,0.2262051031578639E+005,0.1861318887819120E+005,0.2029694057009070E+005,0.2236859010700576E+005 -0.4960000000000007E-007,0.8139355536819881E+023,0.9273519824511054E+023,0.1487527035753824E+024,0.9760019245356518E+021,0.8208426442248559E+022,0.3320658855554759E+024,0.2225133837460569E+005,0.2230558286255315E+005,0.2253372191829297E+005,0.1927550268130614E+005,0.2141231008366340E+005,0.2236349733811067E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2261414208560114E+005,0.1854965491785811E+005,0.1915233355721886E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853699077402223E+001,0.1879976254202872E+001,0.1860406195075383E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2262172993279432E+005,0.1710414170123182E+005,0.1957167707782070E+005,0.2225133837460569E+005,0.2230558286255315E+005,0.2258115481770612E+005,0.1844595061474041E+005,0.2026285331419858E+005,0.2235389350987427E+005 -0.4980000000000008E-007,0.8170887906689496E+023,0.9271017255473784E+023,0.1485775237427735E+024,0.9709967864611100E+021,0.8243462408770352E+022,0.3322110345596378E+024,0.2219843178813803E+005,0.2235319758853574E+005,0.2251834899710794E+005,0.1961098413860688E+005,0.2140615874103018E+005,0.2235747946820014E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2260534539545008E+005,0.1838158131974201E+005,0.1901818316249305E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853643604784637E+001,0.1878901876182583E+001,0.1859445714246695E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2254508298799881E+005,0.1763973795996807E+005,0.1970393727082479E+005,0.2219843178813803E+005,0.2235319758853574E+005,0.2254967952895206E+005,0.1870205714229730E+005,0.2026251620452694E+005,0.2234045677471908E+005 -0.5000000000000008E-007,0.8198916679906929E+023,0.9274020338318509E+023,0.1484373798766863E+024,0.9559813722374847E+021,0.8243462408770352E+022,0.3323661938399485E+024,0.2215813702607372E+005,0.2240386229569481E+005,0.2245050318910055E+005,0.1960381016167542E+005,0.2132908314215272E+005,0.2232936537694757E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2264350429942125E+005,0.1827189205454946E+005,0.1906315898814486E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853883933976162E+001,0.1878190279906524E+001,0.1859769197624362E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2249112842977386E+005,0.1745247994314809E+005,0.1978706211447678E+005,0.2215813702607372E+005,0.2240386229569481E+005,0.2251456207063971E+005,0.1861455923918094E+005,0.2026517883416869E+005,0.2232874188366183E+005 -0.5020000000000008E-007,0.8231450077391451E+023,0.9271517769281238E+023,0.1482622000440773E+024,0.9559813722374847E+021,0.8268488099143061E+022,0.3325163479821848E+024,0.2209277652397133E+005,0.2235129937682195E+005,0.2242572433822056E+005,0.1981872217566824E+005,0.2137452217496773E+005,0.2228891646398512E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2268040115976149E+005,0.1798593034450726E+005,0.1924357390839970E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854115565797344E+001,0.1876295222812986E+001,0.1861051990440903E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2247623267091873E+005,0.1843978371362056E+005,0.1967049918936502E+005,0.2209277652397133E+005,0.2235129937682195E+005,0.2250935539447581E+005,0.1891754861046777E+005,0.2029978152375243E+005,0.2229689002372970E+005 -0.5040000000000008E-007,0.8274494264832511E+023,0.9272518796896147E+023,0.1480269585545739E+024,0.9309556818647756E+021,0.8308529203739395E+022,0.3327365740574646E+024,0.2207045171865405E+005,0.2226127617306332E+005,0.2239230475420179E+005,0.1897307079058839E+005,0.2119360864475810E+005,0.2223625362622521E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2267663403099704E+005,0.1769374235865545E+005,0.1937693413202236E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1854091950089707E+001,0.1874297045816041E+001,0.1861985237467459E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2249001484108875E+005,0.1892863964730384E+005,0.1977002433308024E+005,0.2207045171865405E+005,0.2226127617306332E+005,0.2249772977655583E+005,0.1861133143446281E+005,0.2028573875991232E+005,0.2225947295123066E+005 -0.5060000000000008E-007,0.8303524065664853E+023,0.9270516741666329E+023,0.1478667941361885E+024,0.9259505437902337E+021,0.8338560032186646E+022,0.3328717127854772E+024,0.2204209534469993E+005,0.2221609565479579E+005,0.2240906834571858E+005,0.1847634899182964E+005,0.2115050823425615E+005,0.2222131631591169E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2266032194912580E+005,0.1812794658939083E+005,0.1922787427926491E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853989603242137E+001,0.1877243669334779E+001,0.1860941294831026E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2247510575091406E+005,0.1881661735056674E+005,0.1959789323082857E+005,0.2204209534469993E+005,0.2221609565479579E+005,0.2249630168184770E+005,0.1848020235436689E+005,0.2017642339059517E+005,0.2223567625293681E+005 -0.5080000000000008E-007,0.8335056435534467E+023,0.9272018283088693E+023,0.1476966194416541E+024,0.9059299914920666E+021,0.8363585722559355E+022,0.3330368823419372E+024,0.2202148024961390E+005,0.2223071344332301E+005,0.2240931457434469E+005,0.1787174730879744E+005,0.2100581611322382E+005,0.2221493629145022E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2256924715993187E+005,0.1854217581523198E+005,0.1923335447049213E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1853415525579260E+001,0.1879928850749177E+001,0.1860979954815826E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2246387674219982E+005,0.1934280270075383E+005,0.1960020428187635E+005,0.2202148024961390E+005,0.2223071344332301E+005,0.2246848884611764E+005,0.1848257756107049E+005,0.2011531077860175E+005,0.2222047739437114E+005 -0.5100000000000009E-007,0.8367589833018989E+023,0.9274520852125963E+023,0.1475314498851942E+024,0.8909145772684412E+021,0.8368590860633897E+022,0.3332120621745461E+024,0.2198540851529949E+005,0.2220101888903704E+005,0.2242641101378388E+005,0.1783151912367173E+005,0.2094572555603634E+005,0.2220345922054606E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2247725305338966E+005,0.1782627655130098E+005,0.1928990560770749E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1852831055077687E+001,0.1875211340902067E+001,0.1861377643481876E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2248154154097134E+005,0.1962592841801339E+005,0.1949079142029088E+005,0.2198540851529949E+005,0.2220101888903704E+005,0.2245624726140427E+005,0.1835208314418788E+005,0.2007243526124638E+005,0.2219612861486850E+005 -0.5120000000000009E-007,0.8398621689081147E+023,0.9275521879740872E+023,0.1473662803287343E+024,0.8758991630448157E+021,0.8388611412932064E+022,0.3333722265929315E+024,0.2198685726445093E+005,0.2217589785577712E+005,0.2240308578750061E+005,0.1763542910565066E+005,0.2100913276121561E+005,0.2218741202599488E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2242754434762773E+005,0.1817820684910247E+005,0.1930755094586441E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1852513295857193E+001,0.1877575856025617E+001,0.1861501267027582E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2245858977004040E+005,0.2012947543330115E+005,0.1967642081076401E+005,0.2198685726445093E+005,0.2217589785577712E+005,0.2242589753060326E+005,0.1850887625728492E+005,0.2015903882708486E+005,0.2217839995456144E+005 -0.5140000000000009E-007,0.8430654572758215E+023,0.9277523934970688E+023,0.1472111210484235E+024,0.8708940249702739E+021,0.8378601136782980E+022,0.3335424012874658E+024,0.2197620303131245E+005,0.2214964240462842E+005,0.2241398854668233E+005,0.1863448398327117E+005,0.2120094187469076E+005,0.2218946493874492E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2237538700786328E+005,0.1738698690431719E+005,0.1914222850817410E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1852178406342885E+001,0.1872128623619463E+001,0.1860334302757055E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2239987537526787E+005,0.2087463461004796E+005,0.1972610559343929E+005,0.2197620303131245E+005,0.2214964240462842E+005,0.2239943503193600E+005,0.1894658906477247E+005,0.2021271486437528E+005,0.2215903226007136E+005 -0.5160000000000009E-007,0.8458683345975650E+023,0.9283530100660138E+023,0.1470909977346345E+024,0.8608837488211903E+021,0.8338560032186646E+022,0.3337125759820003E+024,0.2200703918305213E+005,0.2208012894857973E+005,0.2241508380938700E+005,0.1959495103954310E+005,0.2131151532743877E+005,0.2218362469682961E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2234074548014430E+005,0.1728538263894323E+005,0.1933326331956676E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1851955140386146E+001,0.1871393813791358E+001,0.1861681014362443E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2234821408583267E+005,0.2093642627709234E+005,0.1953556502981970E+005,0.2200703918305213E+005,0.2208012894857973E+005,0.2237547311542934E+005,0.1935640241509631E+005,0.2025714180223781E+005,0.2213920414713382E+005 -0.5180000000000009E-007,0.8484209550155813E+023,0.9283029586852684E+023,0.1469358384543238E+024,0.8358580584484813E+021,0.8393616551006606E+022,0.3338377044338637E+024,0.2199713666029180E+005,0.2207728234938260E+005,0.2239545329884769E+005,0.1929660441988334E+005,0.2142461948308131E+005,0.2217358223613735E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2235278846654010E+005,0.1673448327643549E+005,0.1923628854524567E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1852032834273644E+001,0.1867257989901095E+001,0.1861000644404472E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2229180682160890E+005,0.2102561296201609E+005,0.1949476934267195E+005,0.2199713666029180E+005,0.2207728234938260E+005,0.2235366867351024E+005,0.1910349618164877E+005,0.2026849285120725E+005,0.2212563931820050E+005 -0.5200000000000010E-007,0.8503229074839071E+023,0.9280026504007959E+023,0.1468307305547584E+024,0.8408631965230232E+021,0.8413637103304773E+022,0.3339177866430565E+024,0.2200229734144560E+005,0.2206969848023995E+005,0.2239493050069118E+005,0.1854392420681936E+005,0.2131748974048757E+005,0.2216771445319238E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2229265149221329E+005,0.1737297187479218E+005,0.1938783301252104E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1851644053088422E+001,0.1872027765236610E+001,0.1862060953689541E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2229127556767203E+005,0.2101439396261029E+005,0.1959472320821759E+005,0.2200229734144560E+005,0.2206969848023995E+005,0.2233703283689422E+005,0.1894393484824374E+005,0.2029175249343990E+005,0.2211741769249876E+005 -0.5220000000000010E-007,0.8538765555168318E+023,0.9279525990200506E+023,0.1466505455840749E+024,0.8408631965230232E+021,0.8418642241379314E+022,0.3340929664756655E+024,0.2198657322616608E+005,0.2206096113235541E+005,0.2236552738514127E+005,0.1846089364925833E+005,0.2130289973418375E+005,0.2214747593262733E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2229171883679024E+005,0.1744071088688442E+005,0.1926617358245454E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1851638007460694E+001,0.1872513777699883E+001,0.1861211028276418E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2222446715227659E+005,0.2138158971592523E+005,0.1994483513554066E+005,0.2198657322616608E+005,0.2206096113235541E+005,0.2230440518652604E+005,0.1903289480955755E+005,0.2035453852715377E+005,0.2209818862514088E+005 -0.5240000000000010E-007,0.8565793300770844E+023,0.9287534211119772E+023,0.1465604530987331E+024,0.8458683345975649E+021,0.8328549756037562E+022,0.3342681463082744E+024,0.2197580169801391E+005,0.2207329159699833E+005,0.2231836654266578E+005,0.1805503600275352E+005,0.2121471337676009E+005,0.2212420247629624E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2236004489161700E+005,0.1742475821646368E+005,0.1924941419294745E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1852079608900693E+001,0.1872399653257567E+001,0.1861093124432420E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2213337446057703E+005,0.2141295111064922E+005,0.1987738385206161E+005,0.2197580169801391E+005,0.2207329159699833E+005,0.2227563607824269E+005,0.1886053314881405E+005,0.2029178991062988E+005,0.2208451019375984E+005 -0.5260000000000010E-007,0.8598827212062820E+023,0.9293540376809222E+023,0.1464102989564969E+024,0.8308529203739395E+021,0.8298518927590311E+022,0.3344633466931815E+024,0.2195049465845190E+005,0.2202934224520638E+005,0.2230168715936248E+005,0.1793710370133328E+005,0.2120260785099017E+005,0.2209761105079358E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2232332499473268E+005,0.1693844453851303E+005,0.1911578504344064E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1851842609822358E+001,0.1868819839557602E+001,0.1860145820167088E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2215174592724511E+005,0.2094266584678780E+005,0.1973600014617862E+005,0.2195049465845190E+005,0.2202934224520638E+005,0.2226376851272874E+005,0.1854052762731902E+005,0.2020918725743933E+005,0.2205786306767787E+005 -0.5280000000000010E-007,0.8626355471472799E+023,0.9298045001076310E+023,0.1462951807807824E+024,0.8308529203739395E+021,0.8253472684919435E+022,0.3346235111115669E+024,0.2197249551598793E+005,0.2203457015004837E+005,0.2227377632461883E+005,0.1773831390060667E+005,0.2110393324455123E+005,0.2208952560900368E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2227006306513092E+005,0.1803531413870666E+005,0.1929949761507189E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1851497492560421E+001,0.1876626686229488E+001,0.1861444872599455E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2212012658411035E+005,0.2094530998974651E+005,0.1963588817598221E+005,0.2197249551598793E+005,0.2203457015004837E+005,0.2222792144807700E+005,0.1875208868714188E+005,0.2018649563418633E+005,0.2204936675727207E+005 -0.5300000000000010E-007,0.8655885786112596E+023,0.9300547570113581E+023,0.1461400215004716E+024,0.8108323680757723E+021,0.8268488099143061E+022,0.3347836755299521E+024,0.2199008444257335E+005,0.2199446246500160E+005,0.2224251363301890E+005,0.1820392354115053E+005,0.2109543643332203E+005,0.2207022532491513E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2223831451090245E+005,0.1790583244346818E+005,0.1939967473067308E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1851291008492439E+001,0.1875753804765743E+001,0.1862143125894397E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2212149304655229E+005,0.2087649366126550E+005,0.1944001683865147E+005,0.2199008444257335E+005,0.2199446246500160E+005,0.2220605116636243E+005,0.1889999190914070E+005,0.2015278774931623E+005,0.2203271301102028E+005 -0.5320000000000011E-007,0.8689420211212026E+023,0.9294040890616676E+023,0.1459598365297881E+024,0.8308529203739395E+021,0.8293513789515770E+022,0.3349188142579649E+024,0.2195471909976100E+005,0.2193526541403841E+005,0.2221971814033463E+005,0.1853472671330928E+005,0.2080293695133665E+005,0.2202780353187540E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2222693416490406E+005,0.1798047513586535E+005,0.1957520826343968E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1851216854002689E+001,0.1876258498298287E+001,0.1863349815810400E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2215182426935634E+005,0.2134045594007930E+005,0.1954059612804487E+005,0.2195471909976100E+005,0.2193526541403841E+005,0.2220184842196727E+005,0.1919955617286159E+005,0.2010176772636785E+005,0.2200430218774454E+005 -0.5340000000000011E-007,0.8720952581081639E+023,0.9294541404424131E+023,0.1457896618352537E+024,0.8158375061503141E+021,0.8318539479888478E+022,0.3350789786763502E+024,0.2194420996097142E+005,0.2190302241595512E+005,0.2220360269762107E+005,0.1871861462601648E+005,0.2100803087790884E+005,0.2201454974089481E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2216018486075832E+005,0.1704864517722768E+005,0.1944762482218456E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1850780422305991E+001,0.1869648520558400E+001,0.1862474863942621E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2215791752802227E+005,0.2154014863194982E+005,0.1957554387127988E+005,0.2194420996097142E+005,0.2190302241595512E+005,0.2217853588609651E+005,0.1908556383673914E+005,0.2016705277831510E+005,0.2198365905174870E+005 -0.5360000000000011E-007,0.8752985464758708E+023,0.9301548597728489E+023,0.1456595282453156E+024,0.8108323680757723E+021,0.8258477822993977E+022,0.3352741790612573E+024,0.2184246967985948E+005,0.2188984647079687E+005,0.2224640682587715E+005,0.1880760176808935E+005,0.2092691966773482E+005,0.2200121214820323E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2216919540442447E+005,0.1765295501024444E+005,0.1957290251293898E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1850839485906056E+001,0.1874012971056033E+001,0.1863334101989381E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2206258955459033E+005,0.2220182784430171E+005,0.1952371114189951E+005,0.2184246967985948E+005,0.2188984647079687E+005,0.2217188450037069E+005,0.1948037168730658E+005,0.2015041610376937E+005,0.2195133619098054E+005 -0.5380000000000011E-007,0.8789022458895409E+023,0.9306553735803030E+023,0.1454843484127066E+024,0.7908118157776051E+021,0.8248467546844894E+022,0.3354793897223135E+024,0.2184506821646020E+005,0.2180659624910936E+005,0.2227917546881322E+005,0.1861649441550242E+005,0.2085342282196927E+005,0.2199065882132915E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2218716284581288E+005,0.1779860080252671E+005,0.1956510609580144E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1850957122091000E+001,0.1875021517923657E+001,0.1863280942197987E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2194871812805569E+005,0.2247829372114327E+005,0.1942548100713251E+005,0.2184506821646020E+005,0.2180659624910936E+005,0.2215784554562635E+005,0.1951685966838812E+005,0.2008755301752359E+005,0.2192133462951029E+005 -0.5400000000000011E-007,0.8809543525001029E+023,0.9307054249610485E+023,0.1453792405131413E+024,0.7858066777030632E+021,0.8253472684919435E+022,0.3355844976218788E+024,0.2177289269152227E+005,0.2178060006711435E+005,0.2228676446907676E+005,0.1863727867456661E+005,0.2104469953755610E+005,0.2197239389049062E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2219606781362853E+005,0.1787603529040471E+005,0.1953240739664326E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1851015355878521E+001,0.1875551181434324E+001,0.1863057535519030E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2193037534383135E+005,0.2247384578265222E+005,0.1943275777143105E+005,0.2177289269152227E+005,0.2178060006711435E+005,0.2215822014291397E+005,0.1954562523804088E+005,0.2016442558239581E+005,0.2189718419237408E+005 -0.5420000000000011E-007,0.8835069729181194E+023,0.9311558873877573E+023,0.1452641223374268E+024,0.7757964015539796E+021,0.8228446994546726E+022,0.3357346517641151E+024,0.2176157417835009E+005,0.2176720430627876E+005,0.2231948589391302E+005,0.1880779504992087E+005,0.2079017065036144E+005,0.2197389701826553E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2210495590230486E+005,0.1823945290263039E+005,0.1965291255592596E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1850417375849927E+001,0.1877978230308167E+001,0.1863877271493026E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2190663543924397E+005,0.2268839538934138E+005,0.1956633100820227E+005,0.2176157417835009E+005,0.2176720430627876E+005,0.2214100466184078E+005,0.1978102675765819E+005,0.2012474663158894E+005,0.2188261273771758E+005 -0.5440000000000012E-007,0.8864600043820990E+023,0.9320067608604294E+023,0.1451289836094142E+024,0.7457655731067288E+021,0.8203421304174018E+022,0.3359248470109478E+024,0.2171635830233516E+005,0.2173508233728681E+005,0.2229569646965999E+005,0.1871958418923181E+005,0.2056586001980718E+005,0.2193709499294053E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2210586243704864E+005,0.1833434466580413E+005,0.1952811286965611E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1850423349187819E+001,0.1878596455294585E+001,0.1863028139883839E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2191626004550539E+005,0.2281502970889452E+005,0.1965207106727016E+005,0.2171635830233516E+005,0.2173508233728681E+005,0.2213364135012415E+005,0.1980515178789900E+005,0.2001786138549684E+005,0.2185611027341770E+005 -0.5460000000000012E-007,0.8881617513274431E+023,0.9327074801908652E+023,0.1450789322286687E+024,0.7457655731067288E+021,0.8133349371130432E+022,0.3360449703247368E+024,0.2173818926918092E+005,0.2173256023986707E+005,0.2224557219999417E+005,0.1871033770075076E+005,0.2037908765590807E+005,0.2191606258860339E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2211035179692084E+005,0.1856343957139800E+005,0.1934069824078262E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1850452923448740E+001,0.1880063525046157E+001,0.1861732902744785E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2193216103595165E+005,0.2239656153457522E+005,0.1953591096683132E+005,0.2173818926918092E+005,0.2173256023986707E+005,0.2211754543620751E+005,0.1974176274892394E+005,0.1985158867431603E+005,0.2185031210769738E+005 -0.5480000000000012E-007,0.8909145772684412E+023,0.9325573260486289E+023,0.1449337832245070E+024,0.7457655731067288E+021,0.8148364785354058E+022,0.3361751039146749E+024,0.2173836115568085E+005,0.2173683570798180E+005,0.2219511649989908E+005,0.1868904547332551E+005,0.2035226374220322E+005,0.2189449562453691E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2211831616699019E+005,0.1874671039827845E+005,0.1911872853384298E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1850505361058865E+001,0.1881211875520650E+001,0.1860166825794460E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2192004169994411E+005,0.2205281184463471E+005,0.1948392653526897E+005,0.2173836115568085E+005,0.2173683570798180E+005,0.2209406278324570E+005,0.1968247698043539E+005,0.1976463143102501E+005,0.2183888926743405E+005 -0.5500000000000012E-007,0.8951689446318017E+023,0.9328075829523561E+023,0.1447285725634508E+024,0.7407604350321871E+021,0.8133349371130432E+022,0.3364003351280292E+024,0.2171839553596849E+005,0.2167261402016128E+005,0.2221410408902480E+005,0.1839789475698372E+005,0.2031396918595667E+005,0.2187770058240461E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2209906483489566E+005,0.1915812522805298E+005,0.1924953289876465E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1850378546815181E+001,0.1883711373048895E+001,0.1861093960242736E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2184123599101388E+005,0.2173841352357595E+005,0.1937111002651547E+005,0.2171839553596849E+005,0.2167261402016128E+005,0.2207416987117786E+005,0.1957648750702846E+005,0.1975039517189349E+005,0.2180646650034799E+005 -0.5520000000000012E-007,0.8987225926647264E+023,0.9323571205256473E+023,0.1445283670404691E+024,0.7407604350321871E+021,0.8178395613801308E+022,0.3365554944083399E+024,0.2166500660037601E+005,0.2161621258615269E+005,0.2223037267763700E+005,0.1871237226432312E+005,0.2010128133895242E+005,0.2184977890029472E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2207634186467923E+005,0.1905050108258098E+005,0.1921450500204928E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1850228586929332E+001,0.1883067727629747E+001,0.1860846891105004E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2185143216162395E+005,0.2158568690128975E+005,0.1926489670722110E+005,0.2166500660037601E+005,0.2161621258615269E+005,0.2207813348850711E+005,0.1963977106264562E+005,0.1961694984083920E+005,0.2177467403323129E+005 -0.5540000000000013E-007,0.9019258810324331E+023,0.9320568122411748E+023,0.1443531872078602E+024,0.7407604350321871E+021,0.8208426442248559E+022,0.3367006434125017E+024,0.2166719735636745E+005,0.2159978272032304E+005,0.2222441316479422E+005,0.1908286921218859E+005,0.2008626781421340E+005,0.2184320277867344E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2199542975682513E+005,0.1917349998967506E+005,0.1921924707209925E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1849692160833038E+001,0.1883802743961303E+001,0.1860880390674619E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2183777086644024E+005,0.2176463225728519E+005,0.1934328461569407E+005,0.2166719735636745E+005,0.2159978272032304E+005,0.2204968510646880E+005,0.1988682260878532E+005,0.1963451991629643E+005,0.2175904744606279E+005 -0.5560000000000013E-007,0.9047788097349219E+023,0.9321068636219202E+023,0.1442130433417730E+024,0.7407604350321871E+021,0.8203421304174018E+022,0.3368457924166634E+024,0.2163229019154232E+005,0.2155971052923534E+005,0.2224269187733988E+005,0.1899469126730660E+005,0.1992953156471939E+005,0.2182626740835647E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2193381462087047E+005,0.1984996187707229E+005,0.1948292118431482E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1849281086173514E+001,0.1887685564261299E+001,0.1862718040601614E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2185309709129838E+005,0.2137311097903211E+005,0.1910922034387723E+005,0.2163229019154232E+005,0.2155971052923534E+005,0.2204553389485511E+005,0.1991972208463980E+005,0.1956924696031692E+005,0.2173511859921853E+005 -0.5580000000000013E-007,0.9069810704877204E+023,0.9325072746678836E+023,0.1441079354422076E+024,0.7257450208085616E+021,0.8193411028024934E+022,0.3369759260066015E+024,0.2171353675888762E+005,0.2152535176392749E+005,0.2219627672357457E+005,0.1948349555303779E+005,0.1998867377332983E+005,0.2182116260536533E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2186975130962553E+005,0.1945342170563445E+005,0.1956713169148060E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1848851288768997E+001,0.1885441554199639E+001,0.1863294757675508E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2185184856173064E+005,0.2153628940011380E+005,0.1905908697429558E+005,0.2171353675888762E+005,0.2152535176392749E+005,0.2200755116923191E+005,0.2007153121940599E+005,0.1960334415502075E+005,0.2173235136492059E+005 -0.5600000000000013E-007,0.9100342047131908E+023,0.9323571205256473E+023,0.1439427658857477E+024,0.7207398827340198E+021,0.8218436718397642E+022,0.3371210750107632E+024,0.2168478594642402E+005,0.2150300728014207E+005,0.2218873241148473E+005,0.1933179942296627E+005,0.2001797049753907E+005,0.2180402107917933E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2188188275223479E+005,0.1913847965719624E+005,0.1941629915799688E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1848932865891156E+001,0.1883594411836079E+001,0.1862258321371750E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2178689228990742E+005,0.2254316031225268E+005,0.1927261316483653E+005,0.2168478594642402E+005,0.2150300728014207E+005,0.2198855164027915E+005,0.2021194798861294E+005,0.1963745696949741E+005,0.2171115402226162E+005 -0.5620000000000013E-007,0.9122865168467346E+023,0.9330077884753377E+023,0.1438376579861824E+024,0.6957141923613108E+021,0.8203421304174018E+022,0.3372662240149249E+024,0.2160769829600656E+005,0.2152079337034554E+005,0.2213290446967723E+005,0.2006441897780564E+005,0.2001173966700506E+005,0.2176564511248432E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2194319161192522E+005,0.1916553608798236E+005,0.1924858833805603E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1849343791075480E+001,0.1883755433089673E+001,0.1861087309291393E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2178737102464964E+005,0.2116811441253083E+005,0.1922932165148762E+005,0.2160769829600656E+005,0.2152079337034554E+005,0.2198078607448387E+005,0.2013910427815247E+005,0.1957665887735117E+005,0.2169034096612077E+005 -0.5640000000000013E-007,0.9155899079759322E+023,0.9333080967598102E+023,0.1436925089820207E+024,0.7007193304358527E+021,0.8163380199577682E+022,0.3374464089856084E+024,0.2155717755035677E+005,0.2156141571425405E+005,0.2207142370655425E+005,0.1980820265644801E+005,0.1997001805032282E+005,0.2173529989255142E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2192511950845239E+005,0.1902019034975930E+005,0.1914820220627512E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1849222894437329E+001,0.1882885167138588E+001,0.1860376811541367E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2180189889335267E+005,0.2016923768615348E+005,0.1923339576575557E+005,0.2155717755035677E+005,0.2156141571425405E+005,0.2195322070578128E+005,0.1969754170455354E+005,0.1953241355843725E+005,0.2167415015347219E+005 -0.5660000000000014E-007,0.9184428366784211E+023,0.9337585591865190E+023,0.1435673805301571E+024,0.6957141923613108E+021,0.8128344233055890E+022,0.3376115785420684E+024,0.2150633420420503E+005,0.2158899378110571E+005,0.2205078829562799E+005,0.2031539657909595E+005,0.2017951311850327E+005,0.2172632324030373E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2184431959621734E+005,0.1944382567691740E+005,0.1884499898153304E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1848679988749153E+001,0.1885386139209220E+001,0.1858186053500423E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2181669916835256E+005,0.2016810230984829E+005,0.1922966527119998E+005,0.2150633420420503E+005,0.2158899378110571E+005,0.2192669535963879E+005,0.2003395466754277E+005,0.1954093737588565E+005,0.2165759910338423E+005 -0.5680000000000014E-007,0.9206951488119649E+023,0.9341089188517370E+023,0.1434672777686663E+024,0.6907090542867690E+021,0.8103318542683181E+022,0.3377417121320064E+024,0.2150608959642795E+005,0.2158356884994829E+005,0.2204431436731345E+005,0.2062395473772711E+005,0.2013454978464852E+005,0.2172143677963073E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2188631198914659E+005,0.1929649704929151E+005,0.1896864584640953E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1848962628091854E+001,0.1884528570502135E+001,0.1859087692401845E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2172069207722092E+005,0.1952308245172009E+005,0.1895483186269377E+005,0.2150608959642795E+005,0.2158356884994829E+005,0.2190715708911307E+005,0.1994077411557732E+005,0.1947455625358065E+005,0.2164594240841907E+005 -0.5700000000000014E-007,0.9236982316566901E+023,0.9345093298977002E+023,0.1433271339025791E+024,0.6806987781376854E+021,0.8083297990385014E+022,0.3379118868265408E+024,0.2148742552089169E+005,0.2158738223929590E+005,0.2204630584741487E+005,0.2040893799828347E+005,0.2001265130009169E+005,0.2171466996640554E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2185686054554441E+005,0.1964784275342695E+005,0.1893934436031652E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1848764509101823E+001,0.1886552869076779E+001,0.1858875062030515E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2166927583178537E+005,0.1941990412271206E+005,0.1887328529157204E+005,0.2148742552089169E+005,0.2158738223929590E+005,0.2188506511847674E+005,0.1991320170846315E+005,0.1938953519393150E+005,0.2163037446538000E+005 -0.5720000000000014E-007,0.9258504410287430E+023,0.9345593812784456E+023,0.1432020054507156E+024,0.6606782258395181E+021,0.8118333956906806E+022,0.3380219998641807E+024,0.2154240959067791E+005,0.2157692853249300E+005,0.2195169841331923E+005,0.2016804801864162E+005,0.2005731574321316E+005,0.2168699332115937E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2187740227779557E+005,0.1972743857989184E+005,0.1904930498577936E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1848902747472905E+001,0.1887001646977788E+001,0.1859669713032610E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2165683809403093E+005,0.1948450508133798E+005,0.1890984650717438E+005,0.2154240959067791E+005,0.2157692853249300E+005,0.2184553732526156E+005,0.1984882105691048E+005,0.1944948683562499E+005,0.2162679621836120E+005 -0.5740000000000014E-007,0.9285532155889956E+023,0.9346594840399365E+023,0.1430818821369266E+024,0.6706885019886018E+021,0.8088303128459556E+022,0.3381621437302679E+024,0.2156406662981031E+005,0.2153551586495189E+005,0.2198160194701844E+005,0.1953981114533644E+005,0.2002047435816257E+005,0.2169190627257574E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2179474426544593E+005,0.1997570281353337E+005,0.1864489885801623E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1848344947084533E+001,0.1888378890820900E+001,0.1856702227839711E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2163450369557325E+005,0.2048951841895045E+005,0.1902661343428395E+005,0.2156406662981031E+005,0.2153551586495189E+005,0.2182980264916160E+005,0.1993504828534971E+005,0.1935809238611190E+005,0.2161261828924306E+005 -0.5760000000000015E-007,0.9315062470529752E+023,0.9350098437051545E+023,0.1429367331327648E+024,0.6556730877649764E+021,0.8083297990385014E+022,0.3383273132867278E+024,0.2152812670444235E+005,0.2150127463376198E+005,0.2200739580489241E+005,0.1998276670556896E+005,0.1988185158509056E+005,0.2168086010524517E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2173892071213543E+005,0.1941808396418438E+005,0.1859277612713113E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1847965899389441E+001,0.1885237221345292E+001,0.1856310607850318E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2161938157031963E+005,0.2101502275765682E+005,0.1905629007767310E+005,0.2152812670444235E+005,0.2150127463376198E+005,0.2182162366407183E+005,0.2012799789364861E+005,0.1929202307628085E+005,0.2158856428073420E+005 -0.5780000000000015E-007,0.9340088160902461E+023,0.9348096381821729E+023,0.1428015944047522E+024,0.6556730877649764E+021,0.8103318542683181E+022,0.3384424314624423E+024,0.2156596371995805E+005,0.2146491234056027E+005,0.2195058088491544E+005,0.1968474775222894E+005,0.1990958379692052E+005,0.2165703364606191E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2170886749685989E+005,0.2028651324844180E+005,0.1845854603455467E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1847761049834311E+001,0.1890056512865498E+001,0.1855292163086276E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2164314151198002E+005,0.2020625517319796E+005,0.1923191913072325E+005,0.2156596371995805E+005,0.2146491234056027E+005,0.2179556564390187E+005,0.2000120170775188E+005,0.1931917448613310E+005,0.2157810380315755E+005 -0.5800000000000015E-007,0.9365113851275169E+023,0.9356104602740995E+023,0.1427014916432614E+024,0.6406576735413510E+021,0.8053267161937763E+022,0.3386076010189022E+024,0.2155210985918290E+005,0.2147282337771091E+005,0.2195912600306391E+005,0.1967692030962519E+005,0.1995051620860289E+005,0.2166009405231701E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2159440216321483E+005,0.1943871014249782E+005,0.1831618565526698E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846975750409616E+001,0.1885356576199799E+001,0.1854196147020365E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2163554431732228E+005,0.1996669393925503E+005,0.1955139954026373E+005,0.2155210985918290E+005,0.2147282337771091E+005,0.2176622339796826E+005,0.1969586430369506E+005,0.1939193827043055E+005,0.2156554883199595E+005 -0.5820000000000015E-007,0.9393643138300059E+023,0.9358607171778265E+023,0.1425513375010251E+024,0.6206371212431837E+021,0.8068282576161389E+022,0.3387627602992129E+024,0.2155087074136389E+005,0.2142097516224140E+005,0.2195510008463092E+005,0.2023413699050365E+005,0.2007211803048507E+005,0.2164745399021682E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2156089078346939E+005,0.1902123896982812E+005,0.1841559106837375E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846744308318325E+001,0.1882891492455800E+001,0.1854963196436425E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2161647063832523E+005,0.1993934275893326E+005,0.1933874300413561E+005,0.2155087074136389E+005,0.2142097516224140E+005,0.2174985469900869E+005,0.1981667525503439E+005,0.1940989031733266E+005,0.2154454971356380E+005 -0.5840000000000015E-007,0.9409659580138593E+023,0.9362611282237899E+023,0.1424812655679815E+024,0.6106268450941001E+021,0.8048262023863222E+022,0.3388628630607037E+024,0.2154002405614871E+005,0.2142979217097192E+005,0.2192644563411335E+005,0.1964788404272087E+005,0.2017100122582548E+005,0.2163612076712170E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2157404658339029E+005,0.1843850236775263E+005,0.1856565672675649E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846835250542541E+001,0.1879267879505390E+001,0.1856106001141816E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2156477909963955E+005,0.2039241630295676E+005,0.1945807641442574E+005,0.2154002405614871E+005,0.2142979217097192E+005,0.2172574618571173E+005,0.1953396383651794E+005,0.1952842959979057E+005,0.2153626603930358E+005 -0.5860000000000015E-007,0.9430681160051667E+023,0.9362611282237899E+023,0.1423611422541925E+024,0.5956114308704747E+021,0.8078292852310472E+022,0.3389679709602692E+024,0.2155957663745551E+005,0.2146113707849602E+005,0.2188031907648421E+005,0.1910087606136915E+005,0.2032922005710957E+005,0.2163345127442564E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2155060348593693E+005,0.1853161056755783E+005,0.1849638834623851E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846673119997138E+001,0.1879861823120625E+001,0.1855580741762201E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2152781147940372E+005,0.1984096957778808E+005,0.1942185375060879E+005,0.2155957663745551E+005,0.2146113707849602E+005,0.2168841680666048E+005,0.1916047704963668E+005,0.1956842384814475E+005,0.2153482879459187E+005 -0.5880000000000016E-007,0.9450201198542380E+023,0.9364112823660262E+023,0.1422460240784781E+024,0.5705857404977657E+021,0.8113328818832265E+022,0.3390730788598345E+024,0.2149938638517666E+005,0.2151766141973395E+005,0.2184274086340425E+005,0.1963912285102443E+005,0.2051726617484594E+005,0.2162184494284026E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2154855432329339E+005,0.1749989278255260E+005,0.1850000963834018E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846658931853532E+001,0.1872935384708786E+001,0.1855608296795138E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2148647111760818E+005,0.1961084167365741E+005,0.1963440534372575E+005,0.2149938638517666E+005,0.2151766141973395E+005,0.2165932268732476E+005,0.1904793410581260E+005,0.1971369639815376E+005,0.2152467575413038E+005 -0.5900000000000016E-007,0.9474726375107636E+023,0.9366615392697533E+023,0.1421309059027636E+024,0.5655806024232239E+021,0.8098313404608639E+022,0.3392082175878472E+024,0.2147047260198514E+005,0.2157909638950113E+005,0.2180783652262013E+005,0.1915293095194727E+005,0.2050694137545957E+005,0.2161495753798929E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2152087694657439E+005,0.1734299862074387E+005,0.1841318618826061E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846467039809337E+001,0.1871811529750827E+001,0.1854944734693790E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2146612633559234E+005,0.1751547524528727E+005,0.1960391892823571E+005,0.2147047260198514E+005,0.2157909638950113E+005,0.2163062369651186E+005,0.1818335202940413E+005,0.1967690622931417E+005,0.2151927094311667E+005 -0.5920000000000016E-007,0.9504256689747433E+023,0.9363111796045353E+023,0.1419807517605274E+024,0.5805960166468493E+021,0.8103318542683181E+022,0.3393383511777853E+024,0.2146161331319484E+005,0.2155595817384503E+005,0.2181765730990946E+005,0.1931636526233729E+005,0.2047288609509831E+005,0.2160933465044651E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2147792264465975E+005,0.1739352724041709E+005,0.1833313167786974E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846168277979142E+001,0.1872175636426786E+001,0.1854327481650812E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2143196787319386E+005,0.1720785442829410E+005,0.1960188045665539E+005,0.2146161331319484E+005,0.2155595817384503E+005,0.2161336986347849E+005,0.1817889256386812E+005,0.1963986247432417E+005,0.2150202124786881E+005 -0.5940000000000016E-007,0.9537791114846863E+023,0.9369618475542258E+023,0.1418456130325147E+024,0.5805960166468493E+021,0.8038251747714138E+022,0.3395385567007670E+024,0.2142080587215790E+005,0.2156106028553182E+005,0.2178621918127515E+005,0.1881602922189214E+005,0.2054723232622334E+005,0.2158702926601592E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2144909650715527E+005,0.1786441353138394E+005,0.1801820864913708E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845967130012621E+001,0.1875471973244014E+001,0.1851847483617622E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2143426246476354E+005,0.1772443365582832E+005,0.1939993576301562E+005,0.2142080587215790E+005,0.2156106028553182E+005,0.2159249479098173E+005,0.1823891688627122E+005,0.1952882681216003E+005,0.2148100235620973E+005 -0.5960000000000016E-007,0.9563817832834480E+023,0.9371620530772074E+023,0.1417204845806512E+024,0.5755908785723075E+021,0.8028241471565054E+022,0.3396787005668541E+024,0.2138132582327775E+005,0.2151847998590880E+005,0.2180281624361040E+005,0.1889789794983583E+005,0.2054514692978393E+005,0.2157104896361625E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2143706993260722E+005,0.1771342659508361E+005,0.1827855194149295E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845883053431780E+001,0.1874433684529245E+001,0.1853903631093303E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2139446050997720E+005,0.1766368044835957E+005,0.1933165765181383E+005,0.2138132582327775E+005,0.2151847998590880E+005,0.2158489893871947E+005,0.1821585660303925E+005,0.1957795690323066E+005,0.2145611459227479E+005 -0.5980000000000016E-007,0.9597352257933909E+023,0.9373122072194437E+023,0.1415603201622658E+024,0.5755908785723075E+021,0.8013226057341429E+022,0.3398538803994630E+024,0.2134216531308577E+005,0.2146129983444615E+005,0.2178181093668176E+005,0.1931942951590165E+005,0.2062281529427335E+005,0.2153776236404063E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2147933941932796E+005,0.1785195937315904E+005,0.1836006225196372E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846178150658550E+001,0.1875386979888058E+001,0.1854535712530149E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2134469491842596E+005,0.1805415669977274E+005,0.1925592151554925E+005,0.2134216531308577E+005,0.2146129983444615E+005,0.2157254843846457E+005,0.1855109166862345E+005,0.1961178490889228E+005,0.2142545783632368E+005 -0.6000000000000017E-007,0.9626382058766251E+023,0.9374123099809346E+023,0.1414201762961787E+024,0.5755908785723075E+021,0.8003215781192345E+022,0.3400040345416993E+024,0.2133452327841599E+005,0.2144384564380952E+005,0.2181750185464612E+005,0.1961828881966787E+005,0.2034436634855609E+005,0.2153934037752001E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2141562886698518E+005,0.1834669605391547E+005,0.1841228365444552E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845732933351701E+001,0.1878676464997665E+001,0.1854937804925402E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2130650147821777E+005,0.1744976245246911E+005,0.1902212545566594E+005,0.2133452327841599E+005,0.2144384564380952E+005,0.2155985946947299E+005,0.1864048964991434E+005,0.1943576948092982E+005,0.2140913503844180E+005 -0.6020000000000017E-007,0.9651908262946416E+023,0.9375624641231708E+023,0.1413000529823897E+024,0.5755908785723075E+021,0.7988200366968720E+022,0.3401391732697119E+024,0.2131753852683921E+005,0.2141165409331679E+005,0.2183771399025445E+005,0.1979509116789301E+005,0.2019524969824984E+005,0.2153063767458084E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2140066715684996E+005,0.1826754055115570E+005,0.1811606479368818E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845628005387530E+001,0.1878161877609680E+001,0.1852627083360577E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2127484861364956E+005,0.1810857395337370E+005,0.1890998519055684E+005,0.2131753852683921E+005,0.2141165409331679E+005,0.2155543797013091E+005,0.1888757810341668E+005,0.1925802034040453E+005,0.2138982840441922E+005 -0.6040000000000017E-007,0.9673930870474400E+023,0.9373622586001891E+023,0.1411849348066752E+024,0.5805960166468493E+021,0.7998210643117803E+022,0.3402392760312028E+024,0.2135026723011102E+005,0.2134165570428615E+005,0.2180146884859291E+005,0.1926910643589472E+005,0.2004258146415507E+005,0.2150083244374429E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2143078702848239E+005,0.1929649704929151E+005,0.1827360403229847E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845839093793753E+001,0.1884528570502135E+001,0.1853865085165605E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2125727218070420E+005,0.1757992291505375E+005,0.1908747537378428E+005,0.2135026723011102E+005,0.2134165570428615E+005,0.2154253604190409E+005,0.1878588545509640E+005,0.1928539444433192E+005,0.2137476202239432E+005 -0.6060000000000017E-007,0.9690447826120388E+023,0.9381130293113703E+023,0.1411298782878553E+024,0.5705857404977657E+021,0.7943154124297843E+022,0.3403593993449918E+024,0.2133981663421928E+005,0.2135048890257781E+005,0.2175708119824982E+005,0.1960036229263405E+005,0.1995515482525641E+005,0.2148054607088361E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2148000333149014E+005,0.1787921422490408E+005,0.1851744072499021E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846182776640905E+001,0.1875572829948155E+001,0.1855740786032374E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2120170578401758E+005,0.1748559163878248E+005,0.1912328035719959E+005,0.2133981663421928E+005,0.2135048890257781E+005,0.2152011889870388E+005,0.1851569923338005E+005,0.1932330864468656E+005,0.2136572566210716E+005 -0.6080000000000017E-007,0.9713971975070734E+023,0.9386635944995700E+023,0.1410247703882899E+024,0.5555703262741403E+021,0.7918128433925134E+022,0.3405045483491535E+024,0.2138986382009030E+005,0.2132094037191469E+005,0.2172195233049271E+005,0.1964195916327320E+005,0.2004062849733782E+005,0.2147417579293374E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2145836590777523E+005,0.1677463788527033E+005,0.1845043642702097E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1846031868939795E+001,0.1867568408811523E+001,0.1855230170652356E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2114986366731432E+005,0.1784401220135961E+005,0.1923322720182867E+005,0.2138986382009030E+005,0.2132094037191469E+005,0.2148374627271611E+005,0.1833861392843667E+005,0.1937471724660474E+005,0.2135790766805478E+005 -0.6100000000000018E-007,0.9743502289710531E+023,0.9387136458803155E+023,0.1408796213841282E+024,0.5555703262741403E+021,0.7913123295850593E+022,0.3406547024913897E+024,0.2134550905996457E+005,0.2128815943403103E+005,0.2167874488730899E+005,0.1931788230446601E+005,0.2018727559377344E+005,0.2143730557952748E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2144752588762131E+005,0.1775889134458070E+005,0.1831202637046451E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845956155172698E+001,0.1874748147429175E+001,0.1854163875657963E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2118718893071506E+005,0.1776494903516645E+005,0.1930394620712474E+005,0.2134550905996457E+005,0.2128815943403103E+005,0.2147279380949075E+005,0.1844096553264837E+005,0.1942224017353276E+005,0.2133293209473557E+005 -0.6120000000000018E-007,0.9762521814393790E+023,0.9391140569262787E+023,0.1408095494510846E+024,0.5605754643486821E+021,0.7863071915105174E+022,0.3407698206671043E+024,0.2133137055082401E+005,0.2129306373225329E+005,0.2166762621998770E+005,0.1956400190503457E+005,0.2012712699398238E+005,0.2142906337127541E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2139502921492530E+005,0.1846348416624606E+005,0.1841505041365001E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845588428929170E+001,0.1879427815564940E+001,0.1854959046356700E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2119327904614907E+005,0.1919636531331005E+005,0.1909397044944157E+005,0.2133137055082401E+005,0.2129306373225329E+005,0.2145554858180456E+005,0.1915646556503438E+005,0.1936240396728382E+005,0.2132311477630405E+005 -0.6140000000000018E-007,0.9785044935729228E+023,0.9389639027840425E+023,0.1406894261372956E+024,0.5605754643486821E+021,0.7878087329328800E+022,0.3408749285666696E+024,0.2138724031978291E+005,0.2126431973663111E+005,0.2162909389584000E+005,0.1957024271177438E+005,0.2006924325671355E+005,0.2141975248364890E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2140248584021542E+005,0.1856507593786500E+005,0.1825866499457455E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845640767609717E+001,0.1880073876483601E+001,0.1853748581452544E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2114537460856761E+005,0.1960493013481705E+005,0.1906219184684154E+005,0.2138724031978291E+005,0.2126431973663111E+005,0.2142667666605625E+005,0.1930565064783256E+005,0.1928566334552066E+005,0.2131766401726066E+005 -0.6160000000000018E-007,0.9811572167524299E+023,0.9390139541647880E+023,0.1405492822712084E+024,0.5505651881995985E+021,0.7893102743552426E+022,0.3410100672946822E+024,0.2133033734712046E+005,0.2125854497451456E+005,0.2162055654096385E+005,0.1940338308900285E+005,0.2019090696755854E+005,0.2140069931804301E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2141120133201775E+005,0.1820007777708025E+005,0.1838126641221422E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845701897459585E+001,0.1877719847756044E+001,0.1854699247847603E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2111855820719317E+005,0.1997687641731693E+005,0.1878613207581293E+005,0.2133033734712046E+005,0.2125854497451456E+005,0.2141745041762357E+005,0.1924163128242960E+005,0.1929139430662028E+005,0.2129590645691254E+005 -0.6180000000000018E-007,0.9834595802667192E+023,0.9396145707337329E+023,0.1404491795097176E+024,0.5355497739759731E+021,0.7863071915105174E+022,0.3411552162988440E+024,0.2133583342263303E+005,0.2123371287614374E+005,0.2154315607207518E+005,0.1901554623843765E+005,0.2008990094653198E+005,0.2136070015284662E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2141549845850954E+005,0.1791410397103927E+005,0.1832422825351466E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845732019399834E+001,0.1875809935006087E+001,0.1854258508052983E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2117214165122543E+005,0.1928536991044788E+005,0.1876812645804041E+005,0.2133583342263303E+005,0.2123371287614374E+005,0.2140034437804344E+005,0.1879354344626773E+005,0.1922655991795904E+005,0.2128165932303376E+005 -0.6200000000000018E-007,0.9858119951617539E+023,0.9395645193529875E+023,0.1403290561959286E+024,0.5355497739759731E+021,0.7868077053179716E+022,0.3412703344745584E+024,0.2130853157784890E+005,0.2121462167941704E+005,0.2151493143878119E+005,0.1879783423328367E+005,0.2028940981504754E+005,0.2134011160044370E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2140358647047898E+005,0.1742488408186911E+005,0.1828896399753920E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845648490023467E+001,0.1872400554490386E+001,0.1853984678281463E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2118107074460073E+005,0.1927147060547725E+005,0.1870202969364084E+005,0.2130853157784890E+005,0.2121462167941704E+005,0.2138737229485900E+005,0.1856160820606988E+005,0.1928509532335947E+005,0.2126413432888451E+005 -0.6220000000000019E-007,0.9878140503915704E+023,0.9400650331604416E+023,0.1402389637105868E+024,0.5205343597523476E+021,0.7848056500881549E+022,0.3413954629264219E+024,0.2126208467575075E+005,0.2124882320085070E+005,0.2147952813352369E+005,0.1822104259227421E+005,0.2042628389456983E+005,0.2132390448281718E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2136897111181961E+005,0.1776480585307039E+005,0.1821854691373977E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1845405246041885E+001,0.1874788940218291E+001,0.1853434795617235E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2120515033742704E+005,0.1878036857066215E+005,0.1854087185706664E+005,0.2126208467575075E+005,0.2124882320085070E+005,0.2136955975722222E+005,0.1825934258464997E+005,0.1927901674323194E+005,0.2125241632686003E+005 -0.6240000000000019E-007,0.9906169277133139E+023,0.9400650331604416E+023,0.1400888095683506E+024,0.5105240836032640E+021,0.7868077053179716E+022,0.3415356067925091E+024,0.2124512081418612E+005,0.2124378645210133E+005,0.2146095020119048E+005,0.1829866660616982E+005,0.2066409623726359E+005,0.2131549140140491E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2127728264437591E+005,0.1733312504581411E+005,0.1801142190515810E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1844757228703467E+001,0.1871740138988258E+001,0.1851793109263547E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2123803736858429E+005,0.1911984704941577E+005,0.1856292914924818E+005,0.2124512081418612E+005,0.2124378645210133E+005,0.2134631535117215E+005,0.1827467239152370E+005,0.1933385492962380E+005,0.2123779013138034E+005 -0.6260000000000019E-007,0.9937201133195298E+023,0.9396646221144784E+023,0.1399036194595925E+024,0.5005138074541804E+021,0.7928138710074219E+022,0.3416707455205217E+024,0.2119937714524667E+005,0.2118992507760118E+005,0.2146155347654021E+005,0.1865902536253291E+005,0.2055097809403250E+005,0.2128536390867902E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2128372981606219E+005,0.1740765434252542E+005,0.1822784475509831E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1844802972113115E+001,0.1872277066093885E+001,0.1853507638937939E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2120068801213368E+005,0.2012573441454644E+005,0.1879320785021759E+005,0.2119937714524667E+005,0.2118992507760118E+005,0.2133740373115863E+005,0.1874495100790683E+005,0.1940973972534983E+005,0.2120817296331453E+005 -0.6280000000000019E-007,0.9965730420220187E+023,0.9396145707337329E+023,0.1397584704554308E+024,0.5005138074541804E+021,0.7933143848148760E+022,0.3418108893866090E+024,0.2118688372563379E+005,0.2115666484508662E+005,0.2144713628914251E+005,0.1880088353362195E+005,0.2047668701732067E+005,0.2126501105364387E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2130257921458288E+005,0.1918272483278834E+005,0.1822409162828352E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1844936556348102E+001,0.1883857497566323E+001,0.1853478244025888E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2113594761844593E+005,0.1990527178832693E+005,0.1898478110875166E+005,0.2118688372563379E+005,0.2115666484508662E+005,0.2131724816448160E+005,0.1922624258626942E+005,0.1943211547154364E+005,0.2118828206489411E+005 -0.6300000000000019E-007,0.9997763303897254E+023,0.9396145707337329E+023,0.1395933008989709E+024,0.4955086693796387E+021,0.7943154124297843E+022,0.3419710538049942E+024,0.2110880916125702E+005,0.2117119014882855E+005,0.2143563144160011E+005,0.1839709599416177E+005,0.2040080782377843E+005,0.2123898441376461E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2127211091393577E+005,0.1888277225751257E+005,0.1793476011957878E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1844720515212104E+001,0.1882050304270774E+001,0.1851176125389510E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2115872805259572E+005,0.2027433450984771E+005,0.1893646997163183E+005,0.2110880916125702E+005,0.2117119014882855E+005,0.2131065096239014E+005,0.1907546130452447E+005,0.1930701542941736E+005,0.2116354392536680E+005 -0.6320000000000020E-007,0.1002829464615196E+024,0.9397647248759691E+023,0.1394531570328838E+024,0.5005138074541804E+021,0.7918128433925134E+022,0.3421312182233796E+024,0.2109673691582008E+005,0.2115280303534217E+005,0.2136770365464021E+005,0.1858373791881988E+005,0.2038743707873422E+005,0.2120249150203319E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2128393735657751E+005,0.1818145793732196E+005,0.1800120429307950E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1844804444188941E+001,0.1877597281674775E+001,0.1851711172051329E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2115881950732780E+005,0.2017145965834983E+005,0.1904837934420291E+005,0.2109673691582008E+005,0.2115280303534217E+005,0.2128409268544006E+005,0.1893562297114412E+005,0.1935167693076961E+005,0.2114495517935921E+005 -0.6340000000000020E-007,0.1004981673987249E+024,0.9399148790182054E+023,0.1393530542713929E+024,0.5005138074541804E+021,0.7903113019701509E+022,0.3422463363990941E+024,0.2104634150277132E+005,0.2114950076591056E+005,0.2136978607286729E+005,0.1856427989641357E+005,0.2017072305253869E+005,0.2118252021011643E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2125898655282616E+005,0.1822697301382946E+005,0.1785566633078212E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1844627269017448E+001,0.1877896454558290E+001,0.1850534164926904E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2118874544987720E+005,0.2033341108951362E+005,0.1902431348490819E+005,0.2104634150277132E+005,0.2114950076591056E+005,0.2128702553094469E+005,0.1898662341473917E+005,0.1921066497031097E+005,0.2112727055206038E+005 -0.6360000000000020E-007,0.1007634397166756E+024,0.9403653414449143E+023,0.1392329309576039E+024,0.4905035313050968E+021,0.7878087329328800E+022,0.3424014956794049E+024,0.2105968440944409E+005,0.2113237446208623E+005,0.2130393586103693E+005,0.1826083889889578E+005,0.2007329453257356E+005,0.2115226477873545E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2125674694738301E+005,0.1813547812001418E+005,0.1762755151798826E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1844611345850253E+001,0.1877293562443116E+001,0.1848651294575557E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2121665340876856E+005,0.2090623927013946E+005,0.1885079172616990E+005,0.2105968440944409E+005,0.2113237446208623E+005,0.2126571453672175E+005,0.1899593355690455E+005,0.1905611154233471E+005,0.2111437196262742E+005 -0.6380000000000020E-007,0.1009536349635082E+024,0.9407657524908775E+023,0.1391328281961131E+024,0.4654778409323878E+021,0.7888097605477883E+022,0.3425166138551194E+024,0.2102332928697430E+005,0.2110257629512093E+005,0.2132382489876931E+005,0.1763564627622641E+005,0.2007819923623152E+005,0.2114078905494928E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2121130780109469E+005,0.1721651371442877E+005,0.1755459264518303E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1844287576408681E+001,0.1870890930017036E+001,0.1848039042804819E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2121805565155040E+005,0.2150771512720812E+005,0.1912182490604768E+005,0.2102332928697430E+005,0.2110257629512093E+005,0.2126259831015297E+005,0.1864861336659531E+005,0.1911785538769364E+005,0.2109517841861522E+005 -0.6400000000000020E-007,0.1011538404864899E+024,0.9405655469678959E+023,0.1390277202965477E+024,0.4704829790069296E+021,0.7898107881626967E+022,0.3426067063404611E+024,0.2100824744057860E+005,0.2109756045163978E+005,0.2130963528177271E+005,0.1808008273289312E+005,0.1990343809626071E+005,0.2112557784540621E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2115646806851003E+005,0.1665748482770693E+005,0.1760007925524604E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1843895024625508E+001,0.1866658659424557E+001,0.1848421334096521E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2123465651009536E+005,0.2175182394518146E+005,0.1949280958438941E+005,0.2100824744057860E+005,0.2109756045163978E+005,0.2124645754391003E+005,0.1876279873182331E+005,0.1916183146930455E+005,0.2108378199175835E+005 -0.6420000000000020E-007,0.1014491436328878E+024,0.9405154955871504E+023,0.1388725610162369E+024,0.4654778409323878E+021,0.7913123295850593E+022,0.3427518553446228E+024,0.2103573895296346E+005,0.2107339807542415E+005,0.2130873315875847E+005,0.1780580765463062E+005,0.1989006679843294E+005,0.2112584494766395E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2108969537006343E+005,0.1645776204238247E+005,0.1761254678019094E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1843414376410817E+001,0.1865078573611167E+001,0.1848525781770340E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2118926641035426E+005,0.2171486279554737E+005,0.1952173049970010E+005,0.2103573895296346E+005,0.2107339807542415E+005,0.2121481645722400E+005,0.1857839885476148E+005,0.1916776141077544E+005,0.2107216611242666E+005 -0.6440000000000021E-007,0.1016893902604658E+024,0.9404153928256595E+023,0.1387524377024479E+024,0.4704829790069296E+021,0.7913123295850593E+022,0.3428669735203372E+024,0.2109539686475780E+005,0.2105001805264599E+005,0.2121669287062224E+005,0.1743062366522551E+005,0.1995657276347869E+005,0.2110072474512694E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2109429349260724E+005,0.1653640216551310E+005,0.1778265336452130E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1843447569759583E+001,0.1865705173049805E+001,0.1849936626966739E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2118698225891440E+005,0.2134550266901989E+005,0.1947050745305409E+005,0.2109539686475780E+005,0.2105001805264599E+005,0.2117503871071939E+005,0.1832804121730866E+005,0.1922755233409330E+005,0.2106827418573845E+005 -0.6460000000000021E-007,0.1020397499256838E+024,0.9404153928256595E+023,0.1385622424556153E+024,0.4554675647833042E+021,0.7943154124297843E+022,0.3430421533529462E+024,0.2112506948761094E+005,0.2101836341495677E+005,0.2117383939609487E+005,0.1753152963890952E+005,0.2000974212191203E+005,0.2108491963047729E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2107767782768299E+005,0.1644538874829579E+005,0.1780161530891945E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1843327556619262E+001,0.1864979451524999E+001,0.1850092269961854E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2113105822719854E+005,0.2027096510741216E+005,0.1948933528237755E+005,0.2112506948761094E+005,0.2101836341495677E+005,0.2113543416054835E+005,0.1803455233823931E+005,0.1926142343876667E+005,0.2105274744533353E+005 -0.6480000000000021E-007,0.1023800993147526E+024,0.9404153928256595E+023,0.1383920677610809E+024,0.4554675647833042E+021,0.7943154124297843E+022,0.3432123280474806E+024,0.2107769251968227E+005,0.2102551174179460E+005,0.2116307561260436E+005,0.1877950779118544E+005,0.1988107030011737E+005,0.2106707949411530E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2111637590691496E+005,0.1584497808305003E+005,0.1774455205010912E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1843606784587301E+001,0.1859988216645074E+001,0.1849622906118107E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2102384368881052E+005,0.2053753098349635E+005,0.1972757695831391E+005,0.2107769251968227E+005,0.2102551174179460E+005,0.2110980549447660E+005,0.1849639589178122E+005,0.1925932223653308E+005,0.2103083443598681E+005 -0.6500000000000021E-007,0.1026603870469270E+024,0.9405154955871504E+023,0.1382669393092173E+024,0.4654778409323878E+021,0.7913123295850593E+022,0.3433574770516424E+024,0.2106075708152573E+005,0.2100280743707937E+005,0.2112761001513264E+005,0.1878988422596946E+005,0.2004132019372024E+005,0.2104523193796969E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2110842477707938E+005,0.1724098788617284E+005,0.1780695377585744E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1843549494012923E+001,0.1871070091062769E+001,0.1850136030856983E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2099368774503353E+005,0.2117210372182688E+005,0.1972720161939710E+005,0.2106075708152573E+005,0.2100280743707937E+005,0.2108330355159803E+005,0.1906150791069833E+005,0.1934613415025778E+005,0.2101173688414864E+005 -0.6520000000000021E-007,0.1029256593648777E+024,0.9400650331604416E+023,0.1381117800289065E+024,0.4654778409323878E+021,0.7958169538521469E+022,0.3434675900892823E+024,0.2103592710526578E+005,0.2092379142654961E+005,0.2113955755729918E+005,0.1855195877964165E+005,0.2005186693233527E+005,0.2102073950994818E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2108904617904007E+005,0.1702071666691062E+005,0.1775149821114244E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1843409688838002E+001,0.1869439496743317E+001,0.1849680197492919E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2101220171962862E+005,0.2140103870139166E+005,0.1969891921273825E+005,0.2103592710526578E+005,0.2092379142654961E+005,0.2108873130909314E+005,0.1896474287363188E+005,0.1932762262213634E+005,0.2098408038654243E+005 -0.6540000000000022E-007,0.1031458854401575E+024,0.9401651359219325E+023,0.1379966618531921E+024,0.4554675647833042E+021,0.7968179814670553E+022,0.3435827082649967E+024,0.2104071619655855E+005,0.2087685109151377E+005,0.2110751804856138E+005,0.1856585470295055E+005,0.2016516202988992E+005,0.2099912101401556E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2113773483222390E+005,0.1622024335100898E+005,0.1759637597697672E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1843760475472059E+001,0.1863150052608018E+001,0.1848390281857740E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2097626465931210E+005,0.2173142173114760E+005,0.1961464212716248E+005,0.2104071619655855E+005,0.2087685109151377E+005,0.2107730158090053E+005,0.1885157017290171E+005,0.1931106949995241E+005,0.2096755597847420E+005 -0.6560000000000022E-007,0.1034361834484809E+024,0.9405655469678959E+023,0.1378515128490304E+024,0.4354470124851370E+021,0.7968179814670553E+022,0.3437478778214566E+024,0.2100989929262271E+005,0.2088854483188390E+005,0.2110003606351804E+005,0.1732859490110115E+005,0.2022897969045835E+005,0.2099007600499603E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2108137520945204E+005,0.1618343701206629E+005,0.1779116419290801E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1843354278307723E+001,0.1862846263740894E+001,0.1850006525282166E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2095641304169130E+005,0.1946313066639813E+005,0.1953298522868106E+005,0.2100989929262271E+005,0.2088854483188390E+005,0.2105303504680136E+005,0.1763980957115668E+005,0.1936738000005315E+005,0.2095164951315368E+005 -0.6580000000000022E-007,0.1037515071471771E+024,0.9406155983486413E+023,0.1376913484306450E+024,0.4304418744105952E+021,0.7973184952745094E+022,0.3439080422398419E+024,0.2093573158349659E+005,0.2087487054584765E+005,0.2106795548790985E+005,0.1715403533307082E+005,0.2039876144836460E+005,0.2095484204364227E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2102293413356039E+005,0.1627958497336395E+005,0.1774980477897450E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1842930844768180E+001,0.1863637018937659E+001,0.1849666234222836E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2104528489432962E+005,0.1885639144947906E+005,0.1931540674993108E+005,0.2093573158349659E+005,0.2087487054584765E+005,0.2104920439533343E+005,0.1741265247240173E+005,0.1936712065558383E+005,0.2092374068773573E+005 -0.6600000000000022E-007,0.1039817434986060E+024,0.9411161121560954E+023,0.1375962508072287E+024,0.4254367363360533E+021,0.7933143848148760E+022,0.3440481861059291E+024,0.2091310227614208E+005,0.2089128000030674E+005,0.2105523823788271E+005,0.1775340423008563E+005,0.2038931201253141E+005,0.2094799300149366E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2096089361896461E+005,0.1699393802623274E+005,0.1789861410603729E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1842478821283229E+001,0.1869238448669515E+001,0.1850883433310147E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2103957084590276E+005,0.1937955034805802E+005,0.1906181698742500E+005,0.2091310227614208E+005,0.2089128000030674E+005,0.2102525455045347E+005,0.1802019782313565E+005,0.1932886752921127E+005,0.2091187946184702E+005 -0.6620000000000022E-007,0.1042420106784822E+024,0.9413163176790772E+023,0.1374861377695888E+024,0.4354470124851370E+021,0.7893102743552426E+022,0.3441883299720162E+024,0.2087075821742073E+005,0.2094551526871452E+005,0.2109024229368652E+005,0.1876004944204168E+005,0.2032475805272265E+005,0.2096368491236802E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2087574107031163E+005,0.1678524495358222E+005,0.1767480232569441E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841854155321246E+001,0.1867650165602800E+001,0.1849045187485837E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2098049625205244E+005,0.1910708515587288E+005,0.1905421274700178E+005,0.2087075821742073E+005,0.2094551526871452E+005,0.2100041692779726E+005,0.1832406734772380E+005,0.1923833238434634E+005,0.2090233809344547E+005 -0.6640000000000022E-007,0.1045423189629547E+024,0.9410160093946047E+023,0.1373259733512035E+024,0.4404521505596788E+021,0.7913123295850593E+022,0.3443234687000289E+024,0.2085467923575707E+005,0.2098106011010917E+005,0.2106885683570709E+005,0.1945964213575794E+005,0.2021330088713218E+005,0.2095811405848211E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2085086436714668E+005,0.1557203886592212E+005,0.1739035675246763E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841670728201357E+001,0.1857595251566470E+001,0.1846642539087808E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2095003082155015E+005,0.1973279875216458E+005,0.1883974407455833E+005,0.2085467923575707E+005,0.2098106011010917E+005,0.2097544070943906E+005,0.1848622800203764E+005,0.1905067521999048E+005,0.2089289282000297E+005 -0.6660000000000023E-007,0.1047375193478618E+024,0.9408658552523684E+023,0.1372208654516381E+024,0.4404521505596788E+021,0.7928138710074219E+022,0.3444135611853706E+024,0.2086704163375716E+005,0.2095007783655877E+005,0.2106084096011383E+005,0.1969054994054528E+005,0.2004084043469271E+005,0.2094641562235419E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2087391466426564E+005,0.1564965764529959E+005,0.1728884454049082E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841840702854263E+001,0.1858284043654063E+001,0.1845766478045025E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2091152070662643E+005,0.1935322949030090E+005,0.1877280152356884E+005,0.2086704163375716E+005,0.2095007783655877E+005,0.2096687078526987E+005,0.1849728256888533E+005,0.1892838361690509E+005,0.2088184221304180E+005 -0.6680000000000023E-007,0.1050178070800361E+024,0.9407657524908775E+023,0.1370757164474764E+024,0.4404521505596788E+021,0.7938148986223302E+022,0.3445486999133833E+024,0.2085135150921528E+005,0.2091101019826522E+005,0.2105035440869428E+005,0.2071904055510550E+005,0.1997848545416868E+005,0.2092653313881694E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2083868441654992E+005,0.1665858556656851E+005,0.1749536893665310E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841580764815771E+001,0.1866667265319440E+001,0.1847538401111546E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2090162113162021E+005,0.1912288732964050E+005,0.1879674852579121E+005,0.2085135150921528E+005,0.2091101019826522E+005,0.2094989897832001E+005,0.1915032833356845E+005,0.1896335759797864E+005,0.2086117465994489E+005 -0.6700000000000023E-007,0.1052080023268687E+024,0.9409659580138593E+023,0.1369856239621346E+024,0.4354470124851370E+021,0.7928138710074219E+022,0.3446538078129486E+024,0.2086187613066706E+005,0.2087635155271564E+005,0.2106467965438933E+005,0.2034577826750913E+005,0.1990082841534198E+005,0.2092367496133942E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2075130376598915E+005,0.1686373662526201E+005,0.1763189712872713E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840932347488324E+001,0.1868252039564693E+001,0.1848687606273642E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2092391214126101E+005,0.1856636905344397E+005,0.1863517703215073E+005,0.2086187613066706E+005,0.2087635155271564E+005,0.2093919400528032E+005,0.1888046369108809E+005,0.1891876465333409E+005,0.2084935767848096E+005 -0.6720000000000023E-007,0.1054132129879249E+024,0.9409159066331138E+023,0.1368705057864202E+024,0.4254367363360533E+021,0.7953164400446927E+022,0.3447539105744394E+024,0.2075678432071343E+005,0.2088282566042834E+005,0.2107775138638980E+005,0.2017483064823640E+005,0.1978303249899166E+005,0.2089542919319325E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2078717863373431E+005,0.1702071666691062E+005,0.1774458034414122E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841199201413234E+001,0.1869439496743317E+001,0.1849623139573516E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2090223123922453E+005,0.1732101839708093E+005,0.1883684484759579E+005,0.2075678432071343E+005,0.2088282566042834E+005,0.2094823569939018E+005,0.1848560261708001E+005,0.1895630912137979E+005,0.2082285393468040E+005 -0.6740000000000023E-007,0.1056484544774284E+024,0.9411661635368409E+023,0.1367804133010784E+024,0.4404521505596788E+021,0.7898107881626967E+022,0.3448840441643776E+024,0.2075416521418320E+005,0.2086190701760970E+005,0.2107403863883442E+005,0.2128409185785476E+005,0.1963283062139877E+005,0.2088542585008907E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2075637978381900E+005,0.1792594727677733E+005,0.1783137615155147E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840970159681891E+001,0.1875890214988654E+001,0.1850335902710949E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2087554036732825E+005,0.1695504094209348E+005,0.1883680748182099E+005,0.2075416521418320E+005,0.2086190701760970E+005,0.2093052141932646E+005,0.1910872082603156E+005,0.1891383782575149E+005,0.2080926351506678E+005 -0.6760000000000023E-007,0.1059537678999755E+024,0.9417167287250404E+023,0.1366352642969167E+024,0.4204315982615116E+021,0.7883092467403342E+022,0.3450642291350610E+024,0.2070333467172875E+005,0.2086899333104503E+005,0.2105787135778704E+005,0.2066578563894440E+005,0.1960949539308155E+005,0.2086389592154915E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2075442193219873E+005,0.1818579271926020E+005,0.1791164573374247E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840955577412057E+001,0.1877625837533651E+001,0.1850989089346485E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2082523660222447E+005,0.1670161405462623E+005,0.1890343540100516E+005,0.2070333467172875E+005,0.2086899333104503E+005,0.2090819834616784E+005,0.1883596205609464E+005,0.1894465399287804E+005,0.2078721184028558E+005 -0.6780000000000024E-007,0.1061940145275535E+024,0.9417167287250404E+023,0.1365251512592768E+024,0.4304418744105952E+021,0.7863071915105174E+022,0.3451843524488501E+024,0.2063714390986823E+005,0.2086385024674294E+005,0.2101560065228142E+005,0.1915089413731778E+005,0.1924766931903421E+005,0.2081517311597649E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2074131293845671E+005,0.1884669058996074E+005,0.1817925863150766E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840857871462603E+001,0.1881829119733247E+001,0.1853126193239941E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2090939498876072E+005,0.1762138615570864E+005,0.1897354822807158E+005,0.2063714390986823E+005,0.2086385024674294E+005,0.2091074011613821E+005,0.1862320375242463E+005,0.1887876585208623E+005,0.2076463793104400E+005 -0.6800000000000024E-007,0.1063691943601624E+024,0.9420670883902583E+023,0.1364350587739350E+024,0.4104213221124280E+021,0.7868077053179716E+022,0.3452894603484154E+024,0.2064150256045639E+005,0.2080669671545777E+005,0.2100208276883866E+005,0.1913700597304662E+005,0.1933837864984454E+005,0.2079756762747016E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2078114527293053E+005,0.1835297053797194E+005,0.1815106773763100E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841154385069807E+001,0.1878717069427628E+001,0.1852903957380075E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2086874320983234E+005,0.1769296460336257E+005,0.1891089113199462E+005,0.2064150256045639E+005,0.2080669671545777E+005,0.2090364044178053E+005,0.1850301224278234E+005,0.1889258980724871E+005,0.2074775814249879E+005 -0.6820000000000024E-007,0.1066194512638895E+024,0.9422672939132401E+023,0.1363099303220715E+024,0.4004110459633443E+021,0.7868077053179716E+022,0.3454245990764281E+024,0.2059672036154497E+005,0.2078347081486959E+005,0.2100855735469929E+005,0.1978631359001139E+005,0.1939262603476496E+005,0.2078181416689509E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2073580846217680E+005,0.1710607275160377E+005,0.1813535778667475E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840816808893139E+001,0.1870076227578351E+001,0.1852779820041682E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2088639043346602E+005,0.1861083176700471E+005,0.1877488136362523E+005,0.2059672036154497E+005,0.2078347081486959E+005,0.2089944544463343E+005,0.1871453242220627E+005,0.1887240932354156E+005,0.2072566502437037E+005 -0.6840000000000024E-007,0.1068446824772439E+024,0.9426176535784581E+023,0.1362098275605807E+024,0.3954059078888026E+021,0.7843051362807007E+022,0.3455547326663662E+024,0.2056710382355027E+005,0.2079026179250641E+005,0.2094564809569771E+005,0.1951449296418432E+005,0.1952644636855062E+005,0.2075236702403835E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2078073284444857E+005,0.1704952898863032E+005,0.1794740800790564E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841151320591191E+001,0.1869655124300719E+001,0.1851278270576167E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2086330009038083E+005,0.1825233886191143E+005,0.1897590237636611E+005,0.2056710382355027E+005,0.2079026179250641E+005,0.2087719032867725E+005,0.1847616707975601E+005,0.1893906292988336E+005,0.2071086257350306E+005 -0.6860000000000024E-007,0.1070498931383001E+024,0.9424674994362217E+023,0.1361147299371644E+024,0.4104213221124280E+021,0.7828035948583382E+022,0.3456498302897824E+024,0.2056640458141721E+005,0.2074055840110942E+005,0.2093206640958320E+005,0.1990532167432963E+005,0.1966197317908026E+005,0.2073661773727151E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2080400727580690E+005,0.1743707612960463E+005,0.1813899621412678E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841324072639108E+001,0.1872487792817952E+001,0.1852808588898948E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2083300174342547E+005,0.1829996775957555E+005,0.1860689462992512E+005,0.2056640458141721E+005,0.2074055840110942E+005,0.2086863896579429E+005,0.1876563722267178E+005,0.1894227674575791E+005,0.2069398797604427E+005 -0.6880000000000025E-007,0.1072200678328345E+024,0.9430681160051667E+023,0.1360496631421953E+024,0.4004110459633443E+021,0.7787994843987047E+022,0.3457649484654969E+024,0.2052733858463381E+005,0.2072545143867016E+005,0.2092325094009687E+005,0.2056553789333727E+005,0.1954520631253756E+005,0.2071507765083433E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2083045345217536E+005,0.1682154749015424E+005,0.1800688065370246E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841519911513125E+001,0.1867929215096957E+001,0.1851756703172875E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2081070473768206E+005,0.1840775307888980E+005,0.1880991247857842E+005,0.2052733858463381E+005,0.2072545143867016E+005,0.2086537186765434E+005,0.1891888745040846E+005,0.1891482892095142E+005,0.2067619822922124E+005 -0.6900000000000025E-007,0.1074703247365616E+024,0.9429680132436760E+023,0.1359245346903318E+024,0.4054161840378861E+021,0.7787994843987047E+022,0.3458850717792859E+024,0.2048969290322504E+005,0.2071263647971984E+005,0.2092795034955098E+005,0.2030287406524043E+005,0.1955793398902364E+005,0.2070149890060098E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2080582193022091E+005,0.1699261562097033E+005,0.1791870231309805E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841337525946587E+001,0.1869228504308844E+001,0.1851046239286978E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2080870335741915E+005,0.1762590074606057E+005,0.1869930703784408E+005,0.2048969290322504E+005,0.2071263647971984E+005,0.2086021891194784E+005,0.1862268886368850E+005,0.1886438334501342E+005,0.2065729662504757E+005 -0.6920000000000025E-007,0.1077155765022142E+024,0.9433183729088939E+023,0.1358194267907664E+024,0.4054161840378861E+021,0.7752958877465255E+022,0.3460252156453731E+024,0.2044467470891145E+005,0.2072540892574533E+005,0.2091254645915920E+005,0.2057093344390871E+005,0.1945723413276339E+005,0.2068287656479239E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2080939941185764E+005,0.1704881757501810E+005,0.1804516627016054E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841364041654679E+001,0.1869649808748374E+001,0.1852063070806071E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2078467004214067E+005,0.1772196289649804E+005,0.1851684746785384E+005,0.2044467470891145E+005,0.2072540892574533E+005,0.2084740095670861E+005,0.1878291444767982E+005,0.1880107962496651E+005,0.2064050954963673E+005 -0.6940000000000025E-007,0.1080108796486121E+024,0.9432683215281485E+023,0.1356642675104556E+024,0.4004110459633443E+021,0.7767974291688880E+022,0.3461703646495349E+024,0.2041351735616347E+005,0.2070267578559130E+005,0.2092617229487552E+005,0.2014541516482291E+005,0.1940854656394377E+005,0.2067035741558766E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2078794780566559E+005,0.1721987891902434E+005,0.1784836751363025E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1841204913075103E+001,0.1870915594209380E+001,0.1850474645435742E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2074717794178063E+005,0.1679387633184745E+005,0.1864128681776358E+005,0.2041351735616347E+005,0.2070267578559130E+005,0.2083664299081100E+005,0.1837323373096826E+005,0.1876310351128588E+005,0.2061873741762484E+005 -0.6960000000000025E-007,0.1082761519665629E+024,0.9435185784318755E+023,0.1355391390585921E+024,0.3954059078888026E+021,0.7752958877465255E+022,0.3463155136536965E+024,0.2037362330088639E+005,0.2067670386035347E+005,0.2091658097199255E+005,0.1964770092220630E+005,0.1932120777098972E+005,0.2064430670122665E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2073620578808372E+005,0.1684783966762483E+005,0.1797076246152570E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840819773593962E+001,0.1868130583972916E+001,0.1851466514921654E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2080166635940321E+005,0.1703704177451157E+005,0.1832736276948081E+005,0.2037362330088639E+005,0.2067670386035347E+005,0.2083444645464237E+005,0.1812591495611770E+005,0.1866616636285481E+005,0.2059575942751921E+005 -0.6980000000000025E-007,0.1085314140083645E+024,0.9439690408585844E+023,0.1354190157448031E+024,0.3803904936651771E+021,0.7737943463241630E+022,0.3464656677959328E+024,0.2038816525582550E+005,0.2067448456315076E+005,0.2087554960559572E+005,0.2012631459443852E+005,0.1923388232938975E+005,0.2063060596902365E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2068680496187637E+005,0.1504364888970842E+005,0.1793033328067589E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840450314672607E+001,0.1852722399166425E+001,0.1851140340809922E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2079549833872946E+005,0.1776709938547815E+005,0.1842618670319294E+005,0.2038816525582550E+005,0.2067448456315076E+005,0.2080136184758072E+005,0.1806360167639173E+005,0.1864588627584284E+005,0.2058621210491384E+005 -0.7000000000000026E-007,0.1088317222928370E+024,0.9438689380970935E+023,0.1352588513264177E+024,0.3753853555906353E+021,0.7757964015539797E+022,0.3466108168000945E+024,0.2032089295597108E+005,0.2063783708555339E+005,0.2091793836927572E+005,0.1952022791279987E+005,0.1942015991055778E+005,0.2061916015133547E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2067353062478754E+005,0.1562447481277951E+005,0.1785201333599343E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840350746267983E+001,0.1858061301123215E+001,0.1850504381857020E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2074553793155553E+005,0.1710723100532162E+005,0.1844183811250286E+005,0.2032089295597108E+005,0.2063783708555339E+005,0.2080177519579570E+005,0.1776105117769848E+005,0.1871094122636826E+005,0.2055605029276663E+005 -0.7020000000000026E-007,0.1090119072635205E+024,0.9439690408585844E+023,0.1351837742552996E+024,0.3853956317397189E+021,0.7727933187092546E+022,0.3467059144235108E+024,0.2031069477069675E+005,0.2065900366317212E+005,0.2087454318111759E+005,0.1977669007204719E+005,0.1940001055875454E+005,0.2060448533867867E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2066296505665671E+005,0.1530590678286876E+005,0.1802118549017828E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840271407054940E+001,0.1855181921676349E+001,0.1851871321034869E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2072302609138222E+005,0.1708975144176244E+005,0.1866333582902294E+005,0.2031069477069675E+005,0.2065900366317212E+005,0.2077331980691634E+005,0.1778287083419921E+005,0.1881232350626691E+005,0.2054970181039576E+005 -0.7040000000000026E-007,0.1092721744433967E+024,0.9437688353356026E+023,0.1350536406653615E+024,0.3954059078888026E+021,0.7727933187092546E+022,0.3468260377372998E+024,0.2029256767738727E+005,0.2067950727255443E+005,0.2083022073457732E+005,0.1970345197082681E+005,0.1959544017310052E+005,0.2059101661151135E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2063544777447781E+005,0.1546461482561818E+005,0.1798386307013299E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840064403314319E+001,0.1856630852848318E+001,0.1851571901664576E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2072702205715365E+005,0.1722245544696252E+005,0.1835430419417005E+005,0.2029256767738727E+005,0.2067950727255443E+005,0.2074764956095198E+005,0.1783198635642934E+005,0.1879763451367898E+005,0.2053895329146031E+005 -0.7060000000000026E-007,0.1094873953806020E+024,0.9442192977623114E+023,0.1349435276277216E+024,0.3703802175160935E+021,0.7732938325167088E+022,0.3469561713272379E+024,0.2028061418492363E+005,0.2069545824878477E+005,0.2081876027612649E+005,0.1890163595846642E+005,0.1958292372376731E+005,0.2058579326568554E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2055409568895619E+005,0.1535945421570413E+005,0.1802279709420674E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1839449270092004E+001,0.1855674045461771E+001,0.1851884222952357E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2072429448395942E+005,0.1623748240273209E+005,0.1850620317770239E+005,0.2028061418492363E+005,0.2069545824878477E+005,0.2071995573217310E+005,0.1716563717017812E+005,0.1884697798692470E+005,0.2052910876794633E+005 -0.7080000000000026E-007,0.1096125238324655E+024,0.9445696574275294E+023,0.1348984813850507E+024,0.3703802175160935E+021,0.7697902358645295E+022,0.3470362535364306E+024,0.2029146605741929E+005,0.2068935136296154E+005,0.2079224951801341E+005,0.1844479416712129E+005,0.1953969256207154E+005,0.2057577905442517E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2057379849713820E+005,0.1440548148296718E+005,0.1772063999670945E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1839598683785205E+001,0.1846373738646059E+001,0.1849425347296696E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2069857178594637E+005,0.1796805698431166E+005,0.1858962330821486E+005,0.2029146605741929E+005,0.2068935136296154E+005,0.2070610152865776E+005,0.1721617949475244E+005,0.1877111123396979E+005,0.2052393216136111E+005 -0.7100000000000027E-007,0.1098677858742671E+024,0.9444195032852930E+023,0.1347683477951126E+024,0.3753853555906353E+021,0.7702907496719837E+022,0.3471563768502195E+024,0.2023673276207277E+005,0.2074271940750388E+005,0.2077334426531798E+005,0.1760633733134233E+005,0.1938804856388562E+005,0.2056102426597567E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2055560955415816E+005,0.1450109491787108E+005,0.1784370527765216E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1839460760156122E+001,0.1847359537450216E+001,0.1850436601610954E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2068457218856718E+005,0.1825245937397934E+005,0.1835843160605775E+005,0.2023673276207277E+005,0.2074271940750388E+005,0.2068882610941722E+005,0.1695729077857406E+005,0.1867029237637517E+005,0.2051158595672221E+005 -0.7120000000000027E-007,0.1101330581922179E+024,0.9442693491430569E+023,0.1346282039290255E+024,0.3753853555906353E+021,0.7717922910943462E+022,0.3472815053020831E+024,0.2019480837627792E+005,0.2072623491314946E+005,0.2078314828980927E+005,0.1768245583338856E+005,0.1933115467356582E+005,0.2054547321145103E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2063147367978909E+005,0.1444036222277131E+005,0.1750719437049258E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1840034463154452E+001,0.1846734838683437E+001,0.1847638629448878E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2059827596056278E+005,0.1865329513403543E+005,0.1819006698776613E+005,0.2019480837627792E+005,0.2072623491314946E+005,0.2068829040983649E+005,0.1709157438186093E+005,0.1850573218969948E+005,0.2048971757500952E+005 -0.7140000000000027E-007,0.1103682996817213E+024,0.9440190922393296E+023,0.1344930652010128E+024,0.3703802175160935E+021,0.7752958877465255E+022,0.3473866132016485E+024,0.2019491894407909E+005,0.2069035129052695E+005,0.2079618163367688E+005,0.1819084557943824E+005,0.1921891057065969E+005,0.2053841577171827E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2055743593614009E+005,0.1517483253585013E+005,0.1757569333516318E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1839474619999971E+001,0.1853963021464228E+001,0.1848216622458015E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2059714393393950E+005,0.1854018462695476E+005,0.1842024100330479E+005,0.2019491894407909E+005,0.2069035129052695E+005,0.2067376842253934E+005,0.1747696682860310E+005,0.1854218540275743E+005,0.2047515842063740E+005 -0.7160000000000027E-007,0.1105084435478085E+024,0.9442192977623114E+023,0.1344330035441183E+024,0.3703802175160935E+021,0.7732938325167088E+022,0.3474666954108412E+024,0.2019796978627411E+005,0.2063619770063481E+005,0.2076262119919856E+005,0.1811127759203671E+005,0.1920408671131698E+005,0.2051117276704347E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2060123062187436E+005,0.1600556817800177E+005,0.1741710645551339E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1839806249576471E+001,0.1861358983122804E+001,0.1846871738713258E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2059788002809648E+005,0.1833524373804496E+005,0.1862001471697230E+005,0.2019796978627411E+005,0.2063619770063481E+005,0.2067103823439941E+005,0.1760532114081724E+005,0.1855145767264137E+005,0.2046067610181221E+005 -0.7180000000000027E-007,0.1107887312799828E+024,0.9446197088082748E+023,0.1343028699541802E+024,0.3603699413670099E+021,0.7712917772868921E+022,0.3476268598292265E+024,0.2021307476931343E+005,0.2058860675170726E+005,0.2074125377180261E+005,0.1821699183248061E+005,0.1929739520736101E+005,0.2049679150414642E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2056297931670957E+005,0.1698910298050230E+005,0.1714726550497396E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1839516672348866E+001,0.1869202082247179E+001,0.1844527799943525E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2058138760432739E+005,0.1780399088941772E+005,0.1880680893424427E+005,0.2021307476931343E+005,0.2058860675170726E+005,0.2064655831328192E+005,0.1776261965829780E+005,0.1857460662349237E+005,0.2044369887819588E+005 -0.7200000000000027E-007,0.1109939419410391E+024,0.9443694519045476E+023,0.1341877517784658E+024,0.3603699413670099E+021,0.7737943463241630E+022,0.3477169523145682E+024,0.2025953045551600E+005,0.2054136866758425E+005,0.2069017387297662E+005,0.1862548746738756E+005,0.1927493848034706E+005,0.2047866108539086E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2054511711791984E+005,0.1714716967776149E+005,0.1733744837496954E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1839381089971003E+001,0.1870380589685762E+001,0.1846187178799989E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2058111511331517E+005,0.1843444884977793E+005,0.1880746135086919E+005,0.2025953045551600E+005,0.2054136866758425E+005,0.2061927094109320E+005,0.1816742053889052E+005,0.1861589666148951E+005,0.2043615810469936E+005 -0.7220000000000028E-007,0.1112391937066916E+024,0.9442192977623114E+023,0.1340526130504531E+024,0.3553648032924681E+021,0.7762969153614338E+022,0.3478320704902826E+024,0.2024543376070111E+005,0.2050383039298302E+005,0.2068376833899793E+005,0.1908690064538086E+005,0.1940840078173882E+005,0.2046464483310867E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2050439890552750E+005,0.1711689244713243E+005,0.1744500214583799E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1839071162541594E+001,0.1870156496250964E+001,0.1847110029419466E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2059429056460777E+005,0.1938837132920776E+005,0.1847835443817903E+005,0.2024543376070111E+005,0.2050383039298302E+005,0.2060936807480648E+005,0.1863839816022646E+005,0.1860708373328098E+005,0.2041762923926101E+005 -0.7240000000000028E-007,0.1114343940915987E+024,0.9442693491430569E+023,0.1339525102889623E+024,0.3503596652179263E+021,0.7767974291688880E+022,0.3479321732517736E+024,0.2030421561611816E+005,0.2046324507712581E+005,0.2065707081717288E+005,0.1901357794233768E+005,0.1950359218201353E+005,0.2046404876508317E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2044824529735149E+005,0.1620773497750002E+005,0.1725069013459047E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1838641782575349E+001,0.1863046963100639E+001,0.1845434609872351E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2059502252599040E+005,0.1996334154927711E+005,0.1838100820171712E+005,0.2030421561611816E+005,0.2046324507712581E+005,0.2058277947036319E+005,0.1852867815677716E+005,0.1856826057248714E+005,0.2041407628493296E+005 -0.7260000000000028E-007,0.1116646304430277E+024,0.9442693491430569E+023,0.1338273818370988E+024,0.3403493890688427E+021,0.7787994843987047E+022,0.3480472914274879E+024,0.2030531992913612E+005,0.2045776022409274E+005,0.2062807115930544E+005,0.1933327975671830E+005,0.1949078256255510E+005,0.2045160170489606E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2044665492859180E+005,0.1631773400995229E+005,0.1723437899327910E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1838629588439963E+001,0.1863948250789926E+001,0.1845292299214750E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2056132161577712E+005,0.2080711071160644E+005,0.1821755848698458E+005,0.2030531992913612E+005,0.2045776022409274E+005,0.2055977438571509E+005,0.1894383053414038E+005,0.1851052167841193E+005,0.2040302556501396E+005 -0.7280000000000028E-007,0.1119299027609784E+024,0.9443194005238021E+023,0.1336972482471607E+024,0.3403493890688427E+021,0.7782989705912506E+022,0.3481824301555006E+024,0.2027202463414223E+005,0.2041870925813956E+005,0.2063185068571672E+005,0.1925361356638717E+005,0.1938058157965775E+005,0.2042905369168963E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2037930286195503E+005,0.1695376982923080E+005,0.1746524447492339E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1838111471335222E+001,0.1868935711733119E+001,0.1847282480067257E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2059529310456505E+005,0.2039179300499208E+005,0.1825577676549320E+005,0.2027202463414223E+005,0.2041870925813956E+005,0.2055327252616596E+005,0.1895925920067171E+005,0.1853531510756811E+005,0.2037969862435853E+005 -0.7300000000000028E-007,0.1121551339743327E+024,0.9444695546660385E+023,0.1335821300714462E+024,0.3303391129197591E+021,0.7787994843987047E+022,0.3483025534692896E+024,0.2028282145050495E+005,0.2041519722580713E+005,0.2061201909172413E+005,0.1865215300392301E+005,0.1931365017284240E+005,0.2042175478912073E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2033533090205742E+005,0.1657236033556368E+005,0.1747072972120505E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1837771412218351E+001,0.1865989751568041E+001,0.1847329143649596E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2057819531983748E+005,0.1987657625107939E+005,0.1828071839541811E+005,0.2028282145050495E+005,0.2041519722580713E+005,0.2052776105586588E+005,0.1844358506804675E+005,0.1851474827988177E+005,0.2037137873042991E+005 -0.7320000000000028E-007,0.1123603446353890E+024,0.9447198115697655E+023,0.1334920375861045E+024,0.3303391129197591E+021,0.7762969153614338E+022,0.3484176716450041E+024,0.2026831272103084E+005,0.2045357767535333E+005,0.2060172779193062E+005,0.1940772844525307E+005,0.1936708725251256E+005,0.2042539469116432E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2031353966981695E+005,0.1695174112486966E+005,0.1772102883873344E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1837602359208545E+001,0.1868920384760661E+001,0.1849428564016706E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2051178024019440E+005,0.1879315772110657E+005,0.1791687008161917E+005,0.2026831272103084E+005,0.2045357767535333E+005,0.2049796769602377E+005,0.1856055219482197E+005,0.1849917517273700E+005,0.2036549940319397E+005 -0.7340000000000029E-007,0.1125755655725943E+024,0.9449700684734926E+023,0.1333869296865391E+024,0.3203288367706755E+021,0.7757964015539797E+022,0.3485377949587931E+024,0.2028584400527255E+005,0.2042177845358191E+005,0.2057452290399454E+005,0.1842934039784755E+005,0.1959557612440458E+005,0.2041610713912288E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2019682607572180E+005,0.1723410453555585E+005,0.1816536994203451E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1836690887465612E+001,0.1871019752344791E+001,0.1853016789158827E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2056172990883705E+005,0.1881930536996877E+005,0.1767410963856859E+005,0.2028584400527255E+005,0.2042177845358191E+005,0.2046931143182649E+005,0.1821738059925737E+005,0.1864809135392593E+005,0.2035455776014318E+005 -0.7360000000000029E-007,0.1127257197148305E+024,0.9450701712349835E+023,0.1333118526154210E+024,0.3153236986961337E+021,0.7757964015539797E+022,0.3486178771679857E+024,0.2033622257279789E+005,0.2040841876464749E+005,0.2056704693647657E+005,0.1749781680865347E+005,0.1978116062924596E+005,0.2042914237187673E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2018035140166865E+005,0.1832125330952343E+005,0.1820608707124128E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1836561404930788E+001,0.1878511537002537E+001,0.1853337066222191E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2046569962876314E+005,0.1904255557430331E+005,0.1758411542691946E+005,0.2033622257279789E+005,0.2040841876464749E+005,0.2043351713164577E+005,0.1817184526280843E+005,0.1871405528464325E+005,0.2035494327001044E+005 -0.7380000000000029E-007,0.1130710742419739E+024,0.9449200170927473E+023,0.1331316676447374E+024,0.3153236986961337E+021,0.7772979429763422E+022,0.3487830467244456E+024,0.2033559945057744E+005,0.2039109946675746E+005,0.2051969875584013E+005,0.1664511644171724E+005,0.1968326384038156E+005,0.2040303239301774E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2013298691047113E+005,0.1879083049263489E+005,0.1822997526649976E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1836187998822101E+001,0.1881485050941416E+001,0.1853524320099439E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2046888069927316E+005,0.1893177982323615E+005,0.1781965655678984E+005,0.2033559945057744E+005,0.2039109946675746E+005,0.2040096127191741E+005,0.1789636607892402E+005,0.1874638523849709E+005,0.2033796183154192E+005 -0.7400000000000029E-007,0.1133013105934028E+024,0.9451202226157289E+023,0.1330215546070975E+024,0.3103185606215919E+021,0.7762969153614338E+022,0.3489081751763091E+024,0.2029893641336191E+005,0.2036058816498256E+005,0.2053025965999127E+005,0.1647957783261766E+005,0.1965832805871790E+005,0.2038617876254370E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2013335016288928E+005,0.1867256507542059E+005,0.1829603038756182E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1836190869072044E+001,0.1880749948633427E+001,0.1854039631717679E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2043500075344156E+005,0.1872761658638554E+005,0.1788015098862748E+005,0.2029893641336191E+005,0.2036058816498256E+005,0.2039578134814582E+005,0.1773242646338402E+005,0.1877095238838249E+005,0.2031627956381325E+005 -0.7420000000000029E-007,0.1135665829113535E+024,0.9451702739964743E+023,0.1329064364313831E+024,0.3253339748452173E+021,0.7727933187092546E+022,0.3490433139043219E+024,0.2026861874497472E+005,0.2037450897026059E+005,0.2045909358284541E+005,0.1836613591957478E+005,0.1961662822848306E+005,0.2035361186366354E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2012864766641098E+005,0.1786109329971216E+005,0.1834641133067468E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1836153704381861E+001,0.1875449325666712E+001,0.1854430236145912E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2047274969853749E+005,0.1961669506953342E+005,0.1772059400960967E+005,0.2026861874497472E+005,0.2037450897026059E+005,0.2037433286984339E+005,0.1859214826952578E+005,0.1871974886029173E+005,0.2030169068961252E+005 -0.7440000000000030E-007,0.1138468706435279E+024,0.9451702739964743E+023,0.1327813079795195E+024,0.3403493890688427E+021,0.7697902358645295E+022,0.3491834577704090E+024,0.2031597106805273E+005,0.2033380136387074E+005,0.2044856835734491E+005,0.1927199782029120E+005,0.1953877191922943E+005,0.2035306786905784E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2005917501434539E+005,0.1745585244630212E+005,0.1821664902042769E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835602679469251E+001,0.1872621910918514E+001,0.1853419917800357E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2043199974547061E+005,0.1988876205485783E+005,0.1791013968898361E+005,0.2031597106805273E+005,0.2033380136387074E+005,0.2033915464174492E+005,0.1895662689203330E+005,0.1870594488639490E+005,0.2029279452768647E+005 -0.7460000000000030E-007,0.1140170453380623E+024,0.9456707878039284E+023,0.1327112360464759E+024,0.3303391129197591E+021,0.7667871530198044E+022,0.3492935708080488E+024,0.2025557163800811E+005,0.2034661883387594E+005,0.2044817393189446E+005,0.2025152601961940E+005,0.1994502981636199E+005,0.2034657825040795E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2004865034707500E+005,0.1733109647297053E+005,0.1801063798083927E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835518879522795E+001,0.1871725461574016E+001,0.1851786826012148E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2040577681867241E+005,0.1933449027195693E+005,0.1796742961690503E+005,0.2025557163800811E+005,0.2034661883387594E+005,0.2032848626463547E+005,0.1918915618582099E+005,0.1884498366669695E+005,0.2027595040270438E+005 -0.7480000000000030E-007,0.1141722046183731E+024,0.9457208391846739E+023,0.1326311538372833E+024,0.3253339748452173E+021,0.7672876668272585E+022,0.3493736530172416E+024,0.2026511545411199E+005,0.2034797268410003E+005,0.2037988996927182E+005,0.2117127610126889E+005,0.1998937832257625E+005,0.2032590356719116E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2004335658211394E+005,0.1747593487841760E+005,0.1806059902480736E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835476697012161E+001,0.1872765046774048E+001,0.1852186208618539E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2042272781546378E+005,0.1922847965049186E+005,0.1809635911967445E+005,0.2026511545411199E+005,0.2034797268410003E+005,0.2030205728530648E+005,0.1959896878302507E+005,0.1891548794707176E+005,0.2027130760120500E+005 -0.7500000000000030E-007,0.1143523895890566E+024,0.9460211474691464E+023,0.1325560767661651E+024,0.3253339748452173E+021,0.7642845839825335E+022,0.3494787609168070E+024,0.2024258631299486E+005,0.2037535491925321E+005,0.2033420569969629E+005,0.2165436565497077E+005,0.1995739194104919E+005,0.2030835425976899E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2005084583391285E+005,0.1681060392320901E+005,0.1793236515741558E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835536367565257E+001,0.1867845218249137E+001,0.1851156767724806E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2042087875391898E+005,0.1933777081176672E+005,0.1804329831190897E+005,0.2024258631299486E+005,0.2037535491925321E+005,0.2028347504570489E+005,0.1966238906833111E+005,0.1885147223281517E+005,0.2026307228633703E+005 -0.7520000000000030E-007,0.1145876310785601E+024,0.9457708905654193E+023,0.1324309483143016E+024,0.3303391129197591E+021,0.7657861254048961E+022,0.3495838688163723E+024,0.2022050174533679E+005,0.2038355544256818E+005,0.2030136399912326E+005,0.2043939344109716E+005,0.1993736586252153E+005,0.2028925177736533E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2004294955964404E+005,0.1788284398825337E+005,0.1803606558768404E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835473452824404E+001,0.1875597539398661E+001,0.1851990360395019E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2040751763929099E+005,0.2053246727770376E+005,0.1797276782125043E+005,0.2022050174533679E+005,0.2038355544256818E+005,0.2026303372617825E+005,0.1976906476588289E+005,0.1885003423012149E+005,0.2025027919834051E+005 -0.7540000000000030E-007,0.1148378879822872E+024,0.9459710960884009E+023,0.1323208352766617E+024,0.3353442509943009E+021,0.7627830425601710E+022,0.3497190075443850E+024,0.2018464437553701E+005,0.2031698161763756E+005,0.2030291912204697E+005,0.2001330065409272E+005,0.1996116633925658E+005,0.2026015305988204E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2009817773458540E+005,0.1800584846094045E+005,0.1819737262161335E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835912486039173E+001,0.1876429126944789E+001,0.1853268636564119E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2036487204261151E+005,0.2032432254466639E+005,0.1780006830571008E+005,0.2018464437553701E+005,0.2031698161763756E+005,0.2026605770390634E+005,0.1955597055921686E+005,0.1885352266615292E+005,0.2022160835834851E+005 -0.7560000000000031E-007,0.1150931500240888E+024,0.9465216612766007E+023,0.1322157273770963E+024,0.3303391129197591E+021,0.7582784182930834E+022,0.3498741668246957E+024,0.2018556404786129E+005,0.2032887594636049E+005,0.2025138309627513E+005,0.1902880208251842E+005,0.1990032607221722E+005,0.2024193309457753E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2011841596060187E+005,0.1819318154591224E+005,0.1819268416846569E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1836072783095359E+001,0.1877674481566871E+001,0.1853231794377710E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2030317123453624E+005,0.2075554238412171E+005,0.1789643785937511E+005,0.2018556404786129E+005,0.2032887594636049E+005,0.2023082142778600E+005,0.1930279836576773E+005,0.1885374937521824E+005,0.2021173929780102E+005 -0.7580000000000031E-007,0.1153484120658904E+024,0.9469721237033093E+023,0.1321056143394564E+024,0.3253339748452173E+021,0.7547748216409041E+022,0.3500243209669320E+024,0.2017602161202363E+005,0.2035083551045350E+005,0.2020882892296080E+005,0.1971232623731683E+005,0.1980261521241021E+005,0.2022721572743689E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2015059995652248E+005,0.1912146221805547E+005,0.1807820331621304E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1836327053233829E+001,0.1883492907123550E+001,0.1852326423222094E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2022614349435809E+005,0.1978430477245759E+005,0.1796276048453002E+005,0.2017602161202363E+005,0.2035083551045350E+005,0.2019825331957100E+005,0.1957156468905272E+005,0.1879946930968296E+005,0.2020146213474360E+005 -0.7600000000000031E-007,0.1155536227269466E+024,0.9470221750840548E+023,0.1320105167160401E+024,0.3303391129197591E+021,0.7532732802185415E+022,0.3501294288664974E+024,0.2015493353030688E+005,0.2033115665753632E+005,0.2023596980151860E+005,0.1997465926882992E+005,0.1991920294426304E+005,0.2022790972623941E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2010128464679014E+005,0.1871038054932329E+005,0.1819186581636656E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835937114715025E+001,0.1880985987622603E+001,0.1853225361815483E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2020262934825718E+005,0.1943941305537523E+005,0.1774887384238860E+005,0.2015493353030688E+005,0.2033115665753632E+005,0.2019004275806846E+005,0.1947348356683691E+005,0.1881872794462371E+005,0.2018644507458566E+005 -0.7620000000000031E-007,0.1158138899068228E+024,0.9473224833685273E+023,0.1318903934022511E+024,0.3253339748452173E+021,0.7512712249887248E+022,0.3502745778706591E+024,0.2010127210197967E+005,0.2032862675709524E+005,0.2022585512713422E+005,0.1964337458835058E+005,0.1968060677445200E+005,0.2020022251648340E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2008276290904421E+005,0.1996159675704359E+005,0.1826794937182661E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835790182467120E+001,0.1888301537443563E+001,0.1853821008504103E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2022270984961513E+005,0.1876518000668088E+005,0.1764784777851356E+005,0.2010127210197967E+005,0.2032862675709524E+005,0.2018650666309196E+005,0.1947562790265938E+005,0.1870533590665594E+005,0.2016433299355485E+005 -0.7640000000000031E-007,0.1159890697394318E+024,0.9471723292262911E+023,0.1317902906407602E+024,0.3203288367706755E+021,0.7537737940259958E+022,0.3503546600798519E+024,0.2002834566193409E+005,0.2036593365613132E+005,0.2028207590265879E+005,0.1975413702804898E+005,0.1958767570454997E+005,0.2020532373108253E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.2002691233793258E+005,0.1965202535448629E+005,0.1821344804449229E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835345525725203E+001,0.1886576540139474E+001,0.1853394818120208E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2019204275839000E+005,0.1906695801421511E+005,0.1768519385497884E+005,0.2002834566193409E+005,0.2036593365613132E+005,0.2018721901606166E+005,0.1952659297820767E+005,0.1866084304835800E+005,0.2014949365521853E+005 -0.7660000000000032E-007,0.1162193060908607E+024,0.9474726375107636E+023,0.1316851827411949E+024,0.3153236986961337E+021,0.7517717387961790E+022,0.3504847936697898E+024,0.1999266461359123E+005,0.2038881843370943E+005,0.2023712661897331E+005,0.1884942304455603E+005,0.1953727981308534E+005,0.2018081134671842E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1999391103837962E+005,0.1962155207268654E+005,0.1846491212729509E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835081651739643E+001,0.1886403852837697E+001,0.1855340790374575E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2022128326431673E+005,0.1924044477790445E+005,0.1750208578004294E+005,0.1999266461359123E+005,0.2038881843370943E+005,0.2016719224466248E+005,0.1917449701467000E+005,0.1865329814665678E+005,0.2013586690986049E+005 -0.7680000000000032E-007,0.1164745681326623E+024,0.9474225861300181E+023,0.1315650594274059E+024,0.3253339748452173E+021,0.7502701973738165E+022,0.3506099221216534E+024,0.1998191324376351E+005,0.2035371222872151E+005,0.2019730708170896E+005,0.1908747353366709E+005,0.1957181036609080E+005,0.2015360121829194E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1998546775403504E+005,0.1915646948276909E+005,0.1808190210992805E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1835014004551235E+001,0.1883701524526148E+001,0.1852355849574748E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2025967867467200E+005,0.1960883646648115E+005,0.1757466982275385E+005,0.1998191324376351E+005,0.2035371222872151E+005,0.2015868463749824E+005,0.1925783153596563E+005,0.1858614623705614E+005,0.2011817414009356E+005 -0.7700000000000032E-007,0.1166897890698676E+024,0.9470722264648002E+023,0.1314449361136169E+024,0.3303391129197591E+021,0.7527727664110874E+022,0.3507000146069951E+024,0.1995404101954820E+005,0.2036540720712373E+005,0.2016952982684819E+005,0.1883204586251569E+005,0.1958957890768702E+005,0.2013701806130782E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1993102899816764E+005,0.1912411428883579E+005,0.1800240142194264E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834576509043214E+001,0.1883508737691672E+001,0.1851720776765329E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2030007179197769E+005,0.1938425288658006E+005,0.1764488691440463E+005,0.1995404101954820E+005,0.2036540720712373E+005,0.2014371051131457E+005,0.1907240692605976E+005,0.1859298349234444E+005,0.2010617541503527E+005 -0.7720000000000032E-007,0.1168449483501784E+024,0.9476227916529997E+023,0.1313898795947969E+024,0.3253339748452173E+021,0.7482681421439998E+022,0.3508051225065606E+024,0.1995259898282442E+005,0.2034374067128671E+005,0.2020263072862706E+005,0.1921133355357677E+005,0.1953911591425650E+005,0.2014239666158017E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1994570555448741E+005,0.1898143164206327E+005,0.1790653533952373E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834694684853865E+001,0.1882650892969460E+001,0.1850947673833588E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2020895409377742E+005,0.2021448006681262E+005,0.1743622324970608E+005,0.1995259898282442E+005,0.2034374067128671E+005,0.2013551251161072E+005,0.1943994721013644E+005,0.1848413682372084E+005,0.2009496761896905E+005 -0.7740000000000032E-007,0.1169850922162656E+024,0.9475226888915090E+023,0.1313248127998279E+024,0.3353442509943009E+021,0.7472671145290913E+022,0.3508701893015295E+024,0.1993791801012175E+005,0.2033233492075193E+005,0.2017203338799096E+005,0.2024041898337064E+005,0.1955726857055295E+005,0.2012423771243557E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1993832874936795E+005,0.1902479958172215E+005,0.1784239154471475E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834635307823612E+001,0.1882912965110043E+001,0.1850425878062142E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2023862191811102E+005,0.1990310917195141E+005,0.1750247022116457E+005,0.1993791801012175E+005,0.2033233492075193E+005,0.2012878518116397E+005,0.1980985634661146E+005,0.1849414495536216E+005,0.2008499720995534E+005 -0.7760000000000032E-007,0.1171452566346509E+024,0.9474225861300181E+023,0.1312347203144861E+024,0.3303391129197591E+021,0.7492691697589081E+022,0.3509452663726477E+024,0.1988838817276992E+005,0.2032598083867826E+005,0.2021047641188150E+005,0.2057808730225031E+005,0.1946647069528436E+005,0.2011860701957219E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1991251508898277E+005,0.1843454564676568E+005,0.1765337476574966E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834427193800984E+001,0.1879242509253807E+001,0.1848866816914779E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2023909599290217E+005,0.1990317764054744E+005,0.1748368841008937E+005,0.1988838817276992E+005,0.2032598083867826E+005,0.2013887579671526E+005,0.1979630734384438E+005,0.1839801109955719E+005,0.2006828470655655E+005 -0.7780000000000033E-007,0.1173704878480053E+024,0.9476728430337452E+023,0.1311296124149207E+024,0.3253339748452173E+021,0.7477676283365456E+022,0.3510703948245112E+024,0.1987651921019668E+005,0.2027715152788867E+005,0.2019477080421464E+005,0.2142442876450098E+005,0.1929279210278696E+005,0.2009253773885877E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1993160452746297E+005,0.1873637216194377E+005,0.1738679082596132E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834581146392333E+001,0.1881147682821569E+001,0.1846611933338859E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2024469833300149E+005,0.1965125732769760E+005,0.1755586725547619E+005,0.1987651921019668E+005,0.2027715152788867E+005,0.2013874032862020E+005,0.2017420500542118E+005,0.1827133879632559E+005,0.2004869441796270E+005 -0.7800000000000033E-007,0.1175556779567634E+024,0.9477228944144906E+023,0.1310395199295790E+024,0.3253339748452173E+021,0.7472671145290913E+022,0.3511654924479275E+024,0.1991402597036002E+005,0.2029077253695894E+005,0.2014218944443165E+005,0.1996287718208690E+005,0.1910703875642280E+005,0.2008371550687708E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1988820804876855E+005,0.1863134428235967E+005,0.1726153504722079E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834230747383895E+001,0.1880491585731612E+001,0.1845529084331841E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2026234245312062E+005,0.1947661785093365E+005,0.1739144037890002E+005,0.1991402597036002E+005,0.2029077253695894E+005,0.2010918580786331E+005,0.1945761458085392E+005,0.1810826606239260E+005,0.2004967839351976E+005 -0.7820000000000033E-007,0.1177658937558941E+024,0.9474225861300181E+023,0.1309394171680881E+024,0.3453545271433845E+021,0.7462660869141830E+022,0.3512555849332694E+024,0.1989546183562120E+005,0.2025430798121314E+005,0.2013499047675565E+005,0.1892001157984944E+005,0.1893426454760596E+005,0.2006016147862764E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1993053102622737E+005,0.1883480277688818E+005,0.1733448609115875E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834572496405788E+001,0.1881756064433914E+001,0.1846161603766504E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2021764847849422E+005,0.1904508027741166E+005,0.1768333447603952E+005,0.1989546183562120E+005,0.2025430798121314E+005,0.2010429657729046E+005,0.1893305987923235E+005,0.1813742246006931E+005,0.2003180293371010E+005 -0.7840000000000033E-007,0.1179160478981304E+024,0.9479230999374722E+023,0.1308793555111936E+024,0.3353442509943009E+021,0.7432630040694579E+022,0.3513556876947601E+024,0.1991273835397768E+005,0.2025780830710895E+005,0.2012364483239490E+005,0.1935719062624096E+005,0.1864086293524737E+005,0.2005696144336517E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1993620936110278E+005,0.1824361651294100E+005,0.1732349758155509E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834618240661831E+001,0.1878005488440037E+001,0.1846066659609309E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2016254345117767E+005,0.1856264457469034E+005,0.1766292446511374E+005,0.1991273835397768E+005,0.2025780830710895E+005,0.2008471430436174E+005,0.1882209503699652E+005,0.1799993706986975E+005,0.2002839094104884E+005 -0.7860000000000033E-007,0.1181412791114847E+024,0.9481733568411995E+023,0.1307792527497028E+024,0.3353442509943009E+021,0.7407604350321870E+022,0.3514808161466236E+024,0.1988310112725907E+005,0.2024832227972579E+005,0.2014046022405091E+005,0.1893980075829668E+005,0.1860291686906892E+005,0.2004950309133918E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1991665442056938E+005,0.1834551463494900E+005,0.1734239741570942E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834460601007590E+001,0.1878668816572693E+001,0.1846229887652628E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2012461551089709E+005,0.1936717248650251E+005,0.1749767529505666E+005,0.1988310112725907E+005,0.2024832227972579E+005,0.2007575104202619E+005,0.1890175221160507E+005,0.1794011531094885E+005,0.2001142092889088E+005 -0.7880000000000034E-007,0.1182914332537210E+024,0.9482734596026902E+023,0.1307091808166592E+024,0.3353442509943009E+021,0.7397594074172786E+022,0.3515608983558163E+024,0.1987736948367366E+005,0.2026208486196061E+005,0.2013016936239621E+005,0.1887260681342801E+005,0.1850998707471235E+005,0.2004539875603289E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1988166487478561E+005,0.1824361651294100E+005,0.1736410551418081E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834177786693672E+001,0.1878005488440037E+001,0.1846416942904011E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2012414169932191E+005,0.1895311011205354E+005,0.1731857371061269E+005,0.1987736948367366E+005,0.2026208486196061E+005,0.2006171098279002E+005,0.1872427302088396E+005,0.1785291317844773E+005,0.2000597842337067E+005 -0.7900000000000034E-007,0.1184515976721063E+024,0.9483735623641811E+023,0.1306391088836156E+024,0.3403493890688427E+021,0.7377573521874619E+022,0.3516459857030835E+024,0.1987305646451332E+005,0.2027764916791715E+005,0.2009381959401766E+005,0.1865498899089139E+005,0.1835717193381948E+005,0.2003120609516706E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1989733303181737E+005,0.1758973410515503E+005,0.1713212638932362E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834304548919547E+001,0.1873570106460090E+001,0.1844394169864529E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2010839355064443E+005,0.1913166692252837E+005,0.1745656140780534E+005,0.1987305646451332E+005,0.2027764916791715E+005,0.2004534819810301E+005,0.1850332488762976E+005,0.1776388525112170E+005,0.2000060459447550E+005 -0.7920000000000034E-007,0.1186668186093116E+024,0.9482234082219449E+023,0.1305239907079012E+024,0.3403493890688427E+021,0.7392588936098245E+022,0.3517460884645744E+024,0.1987447653792887E+005,0.2029392840657575E+005,0.2007094567395920E+005,0.1918245845091323E+005,0.1848107523098588E+005,0.2003050093880885E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1980442077347274E+005,0.1678639925095654E+005,0.1756079168797984E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833550004831912E+001,0.1867659056569192E+001,0.1848091255905591E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2011311155247000E+005,0.1884764406219143E+005,0.1718256922687968E+005,0.1987447653792887E+005,0.2029392840657575E+005,0.2001177365132569E+005,0.1843334577657370E+005,0.1785348721902862E+005,0.1999462895847741E+005 -0.7940000000000034E-007,0.1188419984419206E+024,0.9484736651256720E+023,0.1304489136367830E+024,0.3403493890688427E+021,0.7367563245725536E+022,0.3518461912260652E+024,0.1990664090263159E+005,0.2025408541234683E+005,0.2005939795195117E+005,0.1873715728919837E+005,0.1857653710629710E+005,0.2002795394247116E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1974637503516698E+005,0.1671944960085923E+005,0.1772601714206890E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833075118524132E+001,0.1867141396148824E+001,0.1849469817889715E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2010698447203436E+005,0.1957203978920027E+005,0.1707764547196124E+005,0.1990664090263159E+005,0.2025408541234683E+005,0.1998935313730819E+005,0.1843170551105408E+005,0.1790921621963719E+005,0.1998771545334478E+005 -0.7960000000000034E-007,0.1190371988268277E+024,0.9485237165064174E+023,0.1303488108752922E+024,0.3353442509943009E+021,0.7372568383800078E+022,0.3519462939875561E+024,0.1991974133496951E+005,0.2024440209839164E+005,0.2002719650261033E+005,0.1782290347386261E+005,0.1855766516663946E+005,0.2001650704917572E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1977219411502306E+005,0.1668097816047055E+005,0.1765152289905820E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833286684571323E+001,0.1866842096382645E+001,0.1848851381545330E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2004967389732233E+005,0.1862746254168351E+005,0.1719598875638171E+005,0.1991974133496951E+005,0.2024440209839164E+005,0.1996536129624797E+005,0.1774678753832962E+005,0.1791541510764967E+005,0.1998007903910892E+005 -0.7980000000000034E-007,0.1192374043498094E+024,0.9486238192679081E+023,0.1302487081138014E+024,0.3303391129197591E+021,0.7372568383800078E+022,0.3520514018871215E+024,0.1992361804618908E+005,0.2021556625824293E+005,0.2001553592008115E+005,0.1824437134853802E+005,0.1844319981820888E+005,0.2000371396821544E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1976994873900537E+005,0.1667583044597838E+005,0.1783409980385538E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833268306843572E+001,0.1866801945973268E+001,0.1850358159968682E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2001526578769061E+005,0.1896920298371110E+005,0.1711521844753698E+005,0.1992361804618908E+005,0.2021556625824293E+005,0.1994956932252154E+005,0.1802906123030200E+005,0.1789096359423353E+005,0.1996754144135922E+005 -0.8000000000000035E-007,0.1193875584920457E+024,0.9486238192679081E+023,0.1301736310426832E+024,0.3303391129197591E+021,0.7372568383800078E+022,0.3521264789582396E+024,0.1989411927984409E+005,0.2017518515270138E+005,0.2005568358834385E+005,0.1855389199287229E+005,0.1829626315556498E+005,0.1999485285128699E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1975073626426384E+005,0.1584801064891846E+005,0.1798127378826008E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833110892846418E+001,0.1860014352952176E+001,0.1851551084255864E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2001517080686000E+005,0.1887363736719311E+005,0.1689667920387283E+005,0.1989411927984409E+005,0.2017518515270138E+005,0.1996201793085347E+005,0.1791344327622970E+005,0.1780259584339692E+005,0.1994928979091812E+005 -0.8020000000000035E-007,0.1196127897054000E+024,0.9486738706486536E+023,0.1300635180050433E+024,0.3303391129197591E+021,0.7367563245725536E+022,0.3522415971339541E+024,0.1992856683237087E+005,0.2012872814805807E+005,0.1999756496028287E+005,0.1761933989928938E+005,0.1834578277592691E+005,0.1997268095964136E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1977264498355156E+005,0.1684827623240913E+005,0.1794227101435947E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833290374306713E+001,0.1868133922394491E+001,0.1851236800777424E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1999541255827951E+005,0.1862933433371312E+005,0.1683745501403503E+005,0.1992856683237087E+005,0.2012872814805807E+005,0.1993659163564499E+005,0.1770372070533816E+005,0.1779644380899515E+005,0.1993875589086557E+005 -0.8040000000000035E-007,0.1196978770526672E+024,0.9488240247908899E+023,0.1300184717623725E+024,0.3203288367706755E+021,0.7372568383800078E+022,0.3522916485146995E+024,0.1991836211295423E+005,0.2012447506803710E+005,0.2000795756756084E+005,0.1650382925556563E+005,0.1826586987946807E+005,0.1996925367165943E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1973834580117607E+005,0.1680732084889638E+005,0.1809677415491928E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833009216172883E+001,0.1867819998334912E+001,0.1852474048339654E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1999707654322596E+005,0.1887172723579518E+005,0.1682451153826996E+005,0.1991836211295423E+005,0.2012447506803710E+005,0.1993244721993531E+005,0.1727593213960954E+005,0.1779947451609089E+005,0.1993232703730111E+005 -0.8060000000000035E-007,0.1199080928517980E+024,0.9497249496443074E+023,0.1299383895531798E+024,0.3003082844725083E+021,0.7322517003054660E+022,0.3524418026569357E+024,0.1989837493107205E+005,0.2008262339942878E+005,0.2003851905873729E+005,0.1540688183623195E+005,0.1823275946155717E+005,0.1996125994822433E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1971375127412662E+005,0.1641370222081003E+005,0.1824157285408023E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1832807025271223E+001,0.1864724946770083E+001,0.1853615058625559E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1995824381445013E+005,0.1732771102590938E+005,0.1662816610344433E+005,0.1989837493107205E+005,0.2008262339942878E+005,0.1992790753948975E+005,0.1623999627442734E+005,0.1776689581852851E+005,0.1991151049789139E+005 -0.8080000000000035E-007,0.1201082983747797E+024,0.9500252579287799E+023,0.1298533022059126E+024,0.3003082844725083E+021,0.7292486174607409E+022,0.3525569208326502E+024,0.1989838225057506E+005,0.1999324133377396E+005,0.2004124582849338E+005,0.1566764952825061E+005,0.1816657865761905E+005,0.1993713764354536E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1974935017661435E+005,0.1603428223869882E+005,0.1808721166984186E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833099524697331E+001,0.1861601258830173E+001,0.1852398070158530E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1995942905697565E+005,0.1768667371911395E+005,0.1647258631406142E+005,0.1989838225057506E+005,0.1999324133377396E+005,0.1993899247754617E+005,0.1635561901510334E+005,0.1765070028833653E+005,0.1988939111744749E+005 -0.8100000000000035E-007,0.1202434371027923E+024,0.9497750010250528E+023,0.1297682148586454E+024,0.2953031463979665E+021,0.7327522141129202E+022,0.3526119773514701E+024,0.1982022086175373E+005,0.1996342066403274E+005,0.2002536237091765E+005,0.1562641381563755E+005,0.1818627033074225E+005,0.1989682164476320E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1974484800321466E+005,0.1524576161537946E+005,0.1811004720130909E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833062588952836E+001,0.1854625147282429E+001,0.1852579379118063E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2007428007148913E+005,0.1775127179185799E+005,0.1655823658214370E+005,0.1982022086175373E+005,0.1996342066403274E+005,0.1996442849441105E+005,0.1614340033690324E+005,0.1769050418094041E+005,0.1986452736435523E+005 -0.8120000000000036E-007,0.1203935912450286E+024,0.9498751037865435E+023,0.1296981429256018E+024,0.2953031463979665E+021,0.7317511864980117E+022,0.3526920595606627E+024,0.1982409481782644E+005,0.1994089012674181E+005,0.2003378200941572E+005,0.1610806619526623E+005,0.1818906296876047E+005,0.1989562581598418E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1974742924268292E+005,0.1512997968539074E+005,0.1802042450576176E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833083767389633E+001,0.1853541198409206E+001,0.1851865228088813E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.2002388411113181E+005,0.1794858422096797E+005,0.1647025131113131E+005,0.1982409481782644E+005,0.1994089012674181E+005,0.1995406625829140E+005,0.1638064242347576E+005,0.1764177855843211E+005,0.1985518472284252E+005 -0.8140000000000036E-007,0.1205687710776375E+024,0.9496248468828165E+023,0.1295930350260364E+024,0.2902980083234246E+021,0.7352547831501910E+022,0.3527671366317809E+024,0.1979715504665846E+005,0.1991206183663657E+005,0.2006236306137753E+005,0.1699373546283307E+005,0.1828252445885240E+005,0.1989163869152746E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1974204413118064E+005,0.1494032963653421E+005,0.1808086033630318E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833039577785369E+001,0.1851730366197140E+001,0.1852347562761525E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1997596641183438E+005,0.1759749329876584E+005,0.1642999593448308E+005,0.1979715504665846E+005,0.1991206183663657E+005,0.1995114600094637E+005,0.1661502262503377E+005,0.1768731105829404E+005,0.1983806445224742E+005 -0.8160000000000036E-007,0.1207289354960229E+024,0.9497249496443074E+023,0.1295029425406946E+024,0.2752825940997992E+021,0.7372568383800078E+022,0.3528522239790482E+024,0.1983015777626763E+005,0.1984479979899486E+005,0.2008825888291237E+005,0.1660883038263772E+005,0.1820294552632350E+005,0.1989231391919023E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1974966687227245E+005,0.1652407359349512E+005,0.1780429183726950E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833102122247708E+001,0.1865607324540618E+001,0.1850114213399460E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1991722300996879E+005,0.1590996592369554E+005,0.1644196463878387E+005,0.1983015777626763E+005,0.1984479979899486E+005,0.1994736453332659E+005,0.1638221506210343E+005,0.1758112864871726E+005,0.1982743405728599E+005 -0.8180000000000036E-007,0.1208991101905573E+024,0.9497249496443074E+023,0.1294228603315020E+024,0.2802877321743410E+021,0.7362558107650994E+022,0.3529373113263153E+024,0.1981566894911975E+005,0.1983346381768252E+005,0.2006085221353812E+005,0.1765470321568879E+005,0.1811874039899099E+005,0.1987325117281680E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1977247151651696E+005,0.1685813011413603E+005,0.1776143494136801E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833288954738240E+001,0.1868209230352611E+001,0.1849762079042856E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1990325349033581E+005,0.1696558646180971E+005,0.1642834693006864E+005,0.1981566894911975E+005,0.1983346381768252E+005,0.1993735639789168E+005,0.1723736026171147E+005,0.1752868822238232E+005,0.1981532459324934E+005 -0.8200000000000036E-007,0.1210342489185699E+024,0.9501754120710162E+023,0.1293728089507566E+024,0.2752825940997992E+021,0.7327522141129202E+022,0.3530274038116571E+024,0.1978174414087607E+005,0.1976628074690330E+005,0.2005804691197700E+005,0.1763231651814659E+005,0.1811057635800931E+005,0.1984247470391565E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1982687681910211E+005,0.1668962630975819E+005,0.1775203579752689E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833732999765805E+001,0.1866909494550165E+001,0.1849684629643285E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1990160929558185E+005,0.1672657690503983E+005,0.1667078554579636E+005,0.1978174414087607E+005,0.1976628074690330E+005,0.1995023183335465E+005,0.1711222861987042E+005,0.1759336005101002E+005,0.1979182304213913E+005 -0.8220000000000037E-007,0.1212394595796261E+024,0.9497249496443074E+023,0.1292526856369676E+024,0.2802877321743410E+021,0.7362558107650994E+022,0.3531074860208497E+024,0.1977288105132145E+005,0.1976366534952107E+005,0.2005383489638484E+005,0.1718303568390374E+005,0.1816580616226051E+005,0.1983767921502145E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1980600841735153E+005,0.1584185074741435E+005,0.1803566323718878E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833562955805734E+001,0.1859961253342684E+001,0.1851987144144526E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1986623462038346E+005,0.1684664264985757E+005,0.1637495961848208E+005,0.1977288105132145E+005,0.1976366534952107E+005,0.1993243321928151E+005,0.1672132198515856E+005,0.1760790725917255E+005,0.1978124181458928E+005 -0.8240000000000037E-007,0.1214696959310550E+024,0.9498250524057983E+023,0.1291425725993276E+024,0.2802877321743410E+021,0.7352547831501910E+022,0.3532276093346387E+024,0.1971118869474152E+005,0.1978675594197857E+005,0.2002761833847415E+005,0.1747048592763722E+005,0.1817651534270992E+005,0.1981347487797469E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1983682125519600E+005,0.1669553881201486E+005,0.1826765319701297E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833813908876798E+001,0.1866955533594240E+001,0.1853818699163329E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1982354168791570E+005,0.1705464418559140E+005,0.1642906303727953E+005,0.1971118869474152E+005,0.1978675594197857E+005,0.1991669350845780E+005,0.1713868309613510E+005,0.1769124549558686E+005,0.1976255561950375E+005 -0.8260000000000037E-007,0.1217549888013039E+024,0.9498751037865435E+023,0.1290024287332405E+024,0.2802877321743410E+021,0.7347542693427369E+022,0.3533727583388005E+024,0.1966858798193117E+005,0.1982281667985524E+005,0.2001120813511340E+005,0.1872590229008311E+005,0.1794363042537744E+005,0.1979850804036517E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1987985665129026E+005,0.1681748273924757E+005,0.1794087920361831E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834163144902871E+001,0.1867898028747926E+001,0.1851225561021505E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1974033122989863E+005,0.1625811883950489E+005,0.1651676499893482E+005,0.1966858798193117E+005,0.1982281667985524E+005,0.1989668440419106E+005,0.1748821646792832E+005,0.1752635851402855E+005,0.1974704207321562E+005 -0.8280000000000037E-007,0.1219852251527328E+024,0.9496748982635619E+023,0.1288773002813769E+024,0.2802877321743410E+021,0.7367563245725536E+022,0.3534778662383659E+024,0.1962086976135102E+005,0.1977260555856469E+005,0.2000371348875991E+005,0.1869803760161376E+005,0.1789009192501855E+005,0.1976441357253657E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1989733654938033E+005,0.1624838707614516E+005,0.1790125813770364E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834304577356425E+001,0.1863381436893112E+001,0.1850904882331746E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1976170087471554E+005,0.1590394255631905E+005,0.1680042316910957E+005,0.1962086976135102E+005,0.1977260555856469E+005,0.1990433937874906E+005,0.1721876335465904E+005,0.1757499925458765E+005,0.1972044149931151E+005 -0.8300000000000037E-007,0.1221704152614909E+024,0.9501253606902708E+023,0.1288072283483333E+024,0.2802877321743410E+021,0.7322517003054660E+022,0.3535929844140804E+024,0.1962497299032497E+005,0.1973461611470508E+005,0.2002670230960223E+005,0.1728988087685822E+005,0.1794369846174116E+005,0.1976410881780332E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1990319070259470E+005,0.1669553881201486E+005,0.1792271648322109E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834351890316547E+001,0.1866955533594240E+001,0.1851078729770118E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1967648426641794E+005,0.1648402673782799E+005,0.1675867207427307E+005,0.1962497299032497E+005,0.1973461611470508E+005,0.1989106401484712E+005,0.1689358903084954E+005,0.1759209075672154E+005,0.1970710281701994E+005 -0.8320000000000037E-007,0.1223756259225471E+024,0.9497750010250528E+023,0.1286921101726189E+024,0.2852928702488828E+021,0.7347542693427369E+022,0.3536780717613476E+024,0.1959931799905682E+005,0.1970723904885589E+005,0.2002356472367133E+005,0.1845588009907685E+005,0.1797734581244596E+005,0.1974805086482860E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1989045502258836E+005,0.1674117896325505E+005,0.1805116621439242E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834248926676623E+001,0.1867309852529907E+001,0.1852110968659903E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1967524255242728E+005,0.1576097780110998E+005,0.1663580977415862E+005,0.1959931799905682E+005,0.1970723904885589E+005,0.1988590502193622E+005,0.1720478132743298E+005,0.1760573062523355E+005,0.1968923153963969E+005 -0.8340000000000038E-007,0.1226158725501251E+024,0.9497750010250528E+023,0.1285819971349790E+024,0.2953031463979665E+021,0.7327522141129202E+022,0.3537981950751365E+024,0.1957587398187114E+005,0.1969096005848319E+005,0.2001205875288692E+005,0.1908277951879151E+005,0.1827187762493231E+005,0.1973787430607935E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1989221202174749E+005,0.1690497756800154E+005,0.1812129318744439E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1834263139021153E+001,0.1868566087683038E+001,0.1852668506218377E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1961890794560980E+005,0.1694671197724275E+005,0.1659200948936074E+005,0.1957587398187114E+005,0.1969096005848319E+005,0.1986483994738457E+005,0.1786833361442846E+005,0.1774088458000365E+005,0.1967235904528898E+005 -0.8360000000000038E-007,0.1227610215542868E+024,0.9500252579287799E+023,0.1285269406161590E+024,0.3003082844725083E+021,0.7292486174607409E+022,0.3538832824224037E+024,0.1958649128083921E+005,0.1973678882010427E+005,0.1997502600135155E+005,0.1915679280165421E+005,0.1821321121053431E+005,0.1973928786532723E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1985951196070234E+005,0.1561688543796447E+005,0.1798550981523056E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833998228904825E+001,0.1857994035703318E+001,0.1851585138194543E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1958899561066045E+005,0.1709713877632769E+005,0.1671651395877944E+005,0.1958649128083921E+005,0.1973678882010427E+005,0.1983105269401516E+005,0.1759708966344145E+005,0.1771478596234420E+005,0.1967540352591225E+005 -0.8380000000000038E-007,0.1229211859726722E+024,0.9503255662132524E+023,0.1284668789592645E+024,0.3053134225470500E+021,0.7252445070011074E+022,0.3539783800458200E+024,0.1956905422507602E+005,0.1969920535833264E+005,0.1998399818733850E+005,0.1980371734583819E+005,0.1823298551196893E+005,0.1972741709333117E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1980907218264179E+005,0.1567722683046677E+005,0.1799618493532794E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833587942333773E+001,0.1858527093774569E+001,0.1851670887578700E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1961473042487563E+005,0.1672028477786858E+005,0.1676304418131645E+005,0.1956905422507602E+005,0.1969920535833264E+005,0.1982898770867383E+005,0.1778636589824827E+005,0.1773991463179027E+005,0.1965931800110420E+005 -0.8400000000000038E-007,0.1230863555291321E+024,0.9503756175939978E+023,0.1283867967500718E+024,0.3053134225470500E+021,0.7247439931936533E+022,0.3540634673930873E+024,0.1954690230187602E+005,0.1974086576462372E+005,0.1993229577442773E+005,0.1972794727313525E+005,0.1833099876169049E+005,0.1971398063962179E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1979509913356200E+005,0.1605045483639176E+005,0.1792811945025243E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833473924270937E+001,0.1861737343404690E+001,0.1851122438746788E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1962599324639761E+005,0.1638037439507251E+005,0.1668708458805324E+005,0.1954690230187602E+005,0.1974086576462372E+005,0.1980583717823468E+005,0.1775444259378243E+005,0.1774224745606908E+005,0.1965437242465249E+005 -0.8420000000000038E-007,0.1233266021567101E+024,0.9503756175939978E+023,0.1282616682982083E+024,0.3003082844725083E+021,0.7257450208085616E+022,0.3541835907068763E+024,0.1953563000964001E+005,0.1971767572171931E+005,0.1992535018394063E+005,0.1795939618587518E+005,0.1827484857060147E+005,0.1969843802009105E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1978576698056563E+005,0.1785525773698036E+005,0.1778027957839665E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833397688266795E+001,0.1875409500846724E+001,0.1849917119760662E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1960490633783380E+005,0.1610266332617687E+005,0.1672783093664792E+005,0.1953563000964001E+005,0.1971767572171931E+005,0.1979411251045616E+005,0.1739088198241195E+005,0.1768959376482805E+005,0.1963843820462991E+005 -0.8440000000000039E-007,0.1234717511608718E+024,0.9501253606902708E+023,0.1281815860890156E+024,0.3053134225470500E+021,0.7272465622309242E+022,0.3542436523637708E+024,0.1956098260057638E+005,0.1968855482992802E+005,0.1989857916770189E+005,0.1791081700349746E+005,0.1834560854526687E+005,0.1969098363355479E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1977826531924966E+005,0.1750578405631937E+005,0.1793889669710575E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833336355290154E+001,0.1872977201177885E+001,0.1851209548091034E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1958674625797973E+005,0.1683293394232210E+005,0.1663251063958733E+005,0.1956098260057638E+005,0.1968855482992802E+005,0.1977503167523826E+005,0.1748678190010127E+005,0.1773562798071661E+005,0.1963339039314007E+005 -0.8460000000000039E-007,0.1237019875123007E+024,0.9501253606902708E+023,0.1280714730513757E+024,0.3103185606215919E+021,0.7262455346160158E+022,0.3543587705394852E+024,0.1957921622862737E+005,0.1972035061782155E+005,0.1985295131411392E+005,0.1822137196290095E+005,0.1841771773693849E+005,0.1969099699984712E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1979601843774402E+005,0.1731440979954753E+005,0.1771029324776007E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833481430457400E+001,0.1871604600296850E+001,0.1849339702688865E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1948198500108772E+005,0.1784755402156375E+005,0.1671758625681109E+005,0.1957921622862737E+005,0.1972035061782155E+005,0.1972910258396488E+005,0.1786554380017514E+005,0.1773027466079811E+005,0.1963183539365746E+005 -0.8480000000000039E-007,0.1239472392779532E+024,0.9504757203554887E+023,0.1279663651518103E+024,0.3103185606215919E+021,0.7227419379638366E+022,0.3544989144055724E+024,0.1955408696757842E+005,0.1974664941557205E+005,0.1981390794339756E+005,0.1793961971420941E+005,0.1806428350052733E+005,0.1966771920669678E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1979832158599095E+005,0.1713085331490743E+005,0.1766630742753609E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833500232864358E+001,0.1870259922149702E+001,0.1848974523315328E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1948153616751192E+005,0.1843407890302690E+005,0.1654449954320926E+005,0.1955408696757842E+005,0.1974664941557205E+005,0.1971244879097500E+005,0.1786339479531333E+005,0.1751304542515799E+005,0.1961978946414390E+005 -0.8500000000000039E-007,0.1241624602151585E+024,0.9505257717362340E+023,0.1278462418380213E+024,0.2953031463979665E+021,0.7252445070011074E+022,0.3546090274432123E+024,0.1954311361086988E+005,0.1973233685954030E+005,0.1973360502839829E+005,0.1812923448560244E+005,0.1799157301402145E+005,0.1962960261989194E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1980303206888650E+005,0.1489840575369592E+005,0.1761173098304108E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833538675025229E+001,0.1851324009237973E+001,0.1848518951763627E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1954663414772773E+005,0.1814174642750932E+005,0.1667876534471144E+005,0.1954311361086988E+005,0.1973233685954030E+005,0.1969751178165706E+005,0.1725987158446545E+005,0.1750566349767169E+005,0.1960592825466633E+005 -0.8520000000000039E-007,0.1243826862904384E+024,0.9506258744977249E+023,0.1277511442146050E+024,0.3053134225470500E+021,0.7222414241563824E+022,0.3547241456189267E+024,0.1954784769418318E+005,0.1972662210586467E+005,0.1969427011432384E+005,0.1792446759265213E+005,0.1803946078035715E+005,0.1961638138520210E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1976167167018163E+005,0.1507999629721570E+005,0.1765863043922170E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1833200526542832E+001,0.1853068246458486E+001,0.1848910605972685E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1953910173678921E+005,0.1853655912792248E+005,0.1680479011437340E+005,0.1954784769418318E+005,0.1972662210586467E+005,0.1966693648249854E+005,0.1733395598245673E+005,0.1757610788070015E+005,0.1959659496657223E+005 -0.8540000000000039E-007,0.1246279380560909E+024,0.9500753093095253E+023,0.1276009900723688E+024,0.3053134225470500E+021,0.7277470760383783E+022,0.3548192432423431E+024,0.1955569240329323E+005,0.1974747003139624E+005,0.1969825019783395E+005,0.1905496722759039E+005,0.1815561734708317E+005,0.1962916347836941E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1972072749568234E+005,0.1496800591409562E+005,0.1772550939536023E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1832864426271650E+001,0.1851997410731662E+001,0.1849465619795595E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1942542311004974E+005,0.1882716350933945E+005,0.1694269298788603E+005,0.1955569240329323E+005,0.1974747003139624E+005,0.1962442225328938E+005,0.1788382708759465E+005,0.1768531517072118E+005,0.1959195948165347E+005 -0.8560000000000040E-007,0.1248581744075198E+024,0.9502755148325069E+023,0.1274958821728034E+024,0.3053134225470500E+021,0.7257450208085616E+022,0.3549443716942066E+024,0.1950824604729782E+005,0.1977283112409077E+005,0.1968070894868324E+005,0.1856309700068582E+005,0.1823358896070564E+005,0.1961415519174448E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1971523175597693E+005,0.1478134808617981E+005,0.1752099055788894E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1832819210106369E+001,0.1850177525983348E+001,0.1847755394914552E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1941132942314932E+005,0.1856413339791323E+005,0.1690352856162480E+005,0.1950824604729782E+005,0.1977283112409077E+005,0.1961112054424106E+005,0.1754197980634391E+005,0.1765283977910854E+005,0.1957640630731042E+005 -0.8580000000000040E-007,0.1250233439639797E+024,0.9505257717362340E+023,0.1274258102397598E+024,0.3053134225470500E+021,0.7232424517712907E+022,0.3550394693176229E+024,0.1948823010695735E+005,0.1976132127544106E+005,0.1964768067452903E+005,0.1865056397038454E+005,0.1829355639777996E+005,0.1959351417316429E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1973521256212611E+005,0.1433333071869145E+005,0.1743087461900151E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1832983485066651E+001,0.1845621381277897E+001,0.1846989441883052E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1942256681528029E+005,0.1905733179530989E+005,0.1672528262500761E+005,0.1948823010695735E+005,0.1976132127544106E+005,0.1960527120365168E+005,0.1760545178129903E+005,0.1760275473629053E+005,0.1956332226559464E+005 -0.8600000000000040E-007,0.1252335597631105E+024,0.9499251551672890E+023,0.1273056869259708E+024,0.3203288367706755E+021,0.7262455346160158E+022,0.3551145463887410E+024,0.1947585899874097E+005,0.1979467766803952E+005,0.1960150283258820E+005,0.1817915987467267E+005,0.1821580460812106E+005,0.1957924564812492E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1973065553531873E+005,0.1542003142600405E+005,0.1737741341454444E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1832946047240792E+001,0.1856226761751637E+001,0.1846531390299671E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1940863015685913E+005,0.1770320627909729E+005,0.1689922860739067E+005,0.1947585899874097E+005,0.1979467766803952E+005,0.1957969446260144E+005,0.1729332638816061E+005,0.1760509132581946E+005,0.1955813875303867E+005 -0.8620000000000040E-007,0.1253686984911231E+024,0.9501754120710162E+023,0.1272506304071508E+024,0.3203288367706755E+021,0.7237429655787449E+022,0.3551946285979337E+024,0.1945951798187922E+005,0.1978430254515483E+005,0.1961041818457167E+005,0.1753220859719778E+005,0.1821006608985041E+005,0.1957326458822569E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1970518279710622E+005,0.1534887715339101E+005,0.1732292242970699E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1832736469116229E+001,0.1855577102831113E+001,0.1846061686892318E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1940639746440213E+005,0.1771461934495575E+005,0.1683891901766520E+005,0.1945951798187922E+005,0.1978430254515483E+005,0.1957611818192636E+005,0.1699446855223778E+005,0.1757027984975317E+005,0.1954745519311660E+005 -0.8640000000000040E-007,0.1255138474952848E+024,0.9503255662132524E+023,0.1271805584741072E+024,0.3153236986961337E+021,0.7232424517712907E+022,0.3552747108071263E+024,0.1943094453935307E+005,0.1982892351670979E+005,0.1962080579018102E+005,0.1651912808049719E+005,0.1819946162752457E+005,0.1957771222668381E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1964473901979442E+005,0.1525004977202491E+005,0.1732261507171099E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1832237056419166E+001,0.1854664985108293E+001,0.1846059029367981E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1938211678353791E+005,0.1749499256951396E+005,0.1692736790639383E+005,0.1943094453935307E+005,0.1982892351670979E+005,0.1955735268404188E+005,0.1646048391263140E+005,0.1759138946131427E+005,0.1954256666457306E+005 -0.8660000000000040E-007,0.1256840221898192E+024,0.9508260800207066E+023,0.1271104865410637E+024,0.3053134225470500E+021,0.7202393689265657E+022,0.3553848238447663E+024,0.1943637005620845E+005,0.1980945411673738E+005,0.1960836788221654E+005,0.1684837280737473E+005,0.1825175862076708E+005,0.1957147527562413E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1956855547709760E+005,0.1459468097199118E+005,0.1731122576633888E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1831603334420718E+001,0.1848312266682738E+001,0.1845960488775183E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1941841130067488E+005,0.1805053984583155E+005,0.1672155265627255E+005,0.1943637005620845E+005,0.1980945411673738E+005,0.1954208275486307E+005,0.1659120109569377E+005,0.1755111209724082E+005,0.1953334650941327E+005 -0.8680000000000041E-007,0.1259092534031736E+024,0.9506759258784703E+023,0.1269903632272747E+024,0.3053134225470500E+021,0.7217409103489281E+022,0.3554899317443316E+024,0.1941088396222152E+005,0.1978071646329952E+005,0.1958348682619822E+005,0.1714560589342354E+005,0.1824279669722417E+005,0.1954578455485748E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1952239911106890E+005,0.1522931192383962E+005,0.1755768890548218E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1831217056929010E+001,0.1854472123722122E+001,0.1848065126370323E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1946836023188553E+005,0.1755908298837988E+005,0.1667875607343008E+005,0.1941088396222152E+005,0.1978071646329952E+005,0.1953340525922590E+005,0.1674779851915460E+005,0.1760112565814627E+005,0.1951452478146217E+005 -0.8700000000000041E-007,0.1260544024073353E+024,0.9509261827821974E+023,0.1269303015703802E+024,0.3053134225470500E+021,0.7192383413116573E+022,0.3555750190915988E+024,0.1938148703774621E+005,0.1977323183146925E+005,0.1959526889275607E+005,0.1706298343991147E+005,0.1816606898693984E+005,0.1953599117220917E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1957326724221213E+005,0.1500533639589329E+005,0.1746528991767964E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1831642667313204E+001,0.1852356088272387E+001,0.1847282866770786E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1940507504118829E+005,0.1736189255157880E+005,0.1661763844032958E+005,0.1938148703774621E+005,0.1977323183146925E+005,0.1953368972570801E+005,0.1659399485193248E+005,0.1752473455593985E+005,0.1950063386867671E+005 -0.8720000000000041E-007,0.1262646182064661E+024,0.9510262855436882E+023,0.1268251936708148E+024,0.3003082844725083E+021,0.7192383413116573E+022,0.3556851321292388E+024,0.1937059115788653E+005,0.1970703017564202E+005,0.1958275753874872E+005,0.1693969533807151E+005,0.1819523923406536E+005,0.1951037961951716E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1961098318778731E+005,0.1516149842644522E+005,0.1753213323340908E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1831956852268355E+001,0.1853837873371067E+001,0.1847849571633559E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1937719650778423E+005,0.1706788068037445E+005,0.1672040967351868E+005,0.1937059115788653E+005,0.1970703017564202E+005,0.1953014978689448E+005,0.1649613099461220E+005,0.1758556181392341E+005,0.1947891856838598E+005 -0.8740000000000041E-007,0.1263597158298824E+024,0.9518771590163603E+023,0.1267951628423675E+024,0.2752825940997992E+021,0.7157347446594780E+022,0.3557752246145805E+024,0.1933925237257062E+005,0.1976471081367221E+005,0.1958799349409353E+005,0.1588094870137407E+005,0.1830782823082654E+005,0.1951830732656460E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1954327239882590E+005,0.1544784595403965E+005,0.1745997446033347E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1831391962222670E+001,0.1856479131245097E+001,0.1847237620627409E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1936500266335550E+005,0.1791746271441795E+005,0.1658734057277063E+005,0.1933925237257062E+005,0.1976471081367221E+005,0.1951072029431080E+005,0.1635772136434036E+005,0.1757656067810232E+005,0.1947642538635430E+005 -0.8760000000000041E-007,0.1265198802482677E+024,0.9514767479703971E+023,0.1267050703570258E+024,0.2852928702488828E+021,0.7177367998892947E+022,0.3558352862714751E+024,0.1930461660145132E+005,0.1976156002142302E+005,0.1961348147795356E+005,0.1598189223931181E+005,0.1843304851791467E+005,0.1951653581885198E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1948292569911676E+005,0.1538320611853604E+005,0.1757948628043143E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1830885301012549E+001,0.1855891267057519E+001,0.1848248499243891E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1936729541494869E+005,0.1829392948788957E+005,0.1658864503084176E+005,0.1930461660145132E+005,0.1976156002142302E+005,0.1950640827291294E+005,0.1649429507900955E+005,0.1766403406127412E+005,0.1946330885237713E+005 -0.8780000000000042E-007,0.1266850498047276E+024,0.9514266965896516E+023,0.1266199830097586E+024,0.2852928702488828E+021,0.7182373136967490E+022,0.3559153684806677E+024,0.1928957305537472E+005,0.1974824375827990E+005,0.1962087961439928E+005,0.1650054412594156E+005,0.1841186967795154E+005,0.1951010161290739E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1944599311882224E+005,0.1502367404624648E+005,0.1731186771516206E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1830573717548004E+001,0.1852531643942372E+001,0.1845966046286929E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1936126419269646E+005,0.1740243116941948E+005,0.1690704521300819E+005,0.1928957305537472E+005,0.1974824375827990E+005,0.1949799484652003E+005,0.1636451053746554E+005,0.1767563827248339E+005,0.1945141809667621E+005 -0.8800000000000042E-007,0.1268201885327402E+024,0.9518771590163603E+023,0.1265649264909386E+024,0.2752825940997992E+021,0.7157347446594780E+022,0.3560054609660095E+024,0.1929664655634453E+005,0.1972564250865243E+005,0.1963214620382767E+005,0.1663030186739353E+005,0.1827950740837770E+005,0.1950811414530265E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1941743147505393E+005,0.1387439139901817E+005,0.1750411525990862E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1830331968186951E+001,0.1840657837758164E+001,0.1847612544641792E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1932080493477459E+005,0.1816125901811213E+005,0.1702497759418189E+005,0.1929664655634453E+005,0.1972564250865243E+005,0.1948344453384267E+005,0.1633635734480114E+005,0.1770387847738566E+005,0.1944344853613366E+005 -0.8820000000000042E-007,0.1269553272607529E+024,0.9522275186815782E+023,0.1265198802482677E+024,0.2802877321743410E+021,0.7112301203923904E+022,0.3560905483132767E+024,0.1929260759629421E+005,0.1965869118341934E+005,0.1967517575494759E+005,0.1699506415964702E+005,0.1831174873824163E+005,0.1950503060971400E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1944113540656849E+005,0.1470334904901303E+005,0.1746768626892584E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1830532649845864E+001,0.1849403729775010E+001,0.1847303256192201E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1926174465669210E+005,0.1836159059051655E+005,0.1682056420818321E+005,0.1929260759629421E+005,0.1965869118341934E+005,0.1949140081967537E+005,0.1677529997712326E+005,0.1764847909204822E+005,0.1942631424489183E+005 -0.8840000000000042E-007,0.1271605379218091E+024,0.9523776728238146E+023,0.1264347929010005E+024,0.2902980083234246E+021,0.7077265237402111E+022,0.3562006613509165E+024,0.1930022196636302E+005,0.1965070075293032E+005,0.1963564375508332E+005,0.1845037981574262E+005,0.1835806920834251E+005,0.1949357710724417E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1942674507888821E+005,0.1352661875703670E+005,0.1731093037352099E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1830410875405885E+001,0.1836678893569734E+001,0.1845957931350948E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1924726114352536E+005,0.1874849268087506E+005,0.1690261602390165E+005,0.1930022196636302E+005,0.1965070075293032E+005,0.1946594157273657E+005,0.1721481757642407E+005,0.1765051583819052E+005,0.1941827549408728E+005 -0.8860000000000042E-007,0.1273557383067162E+024,0.9529282380120141E+023,0.1263747312441060E+024,0.3003082844725083E+021,0.7002188166283984E+022,0.3563257898027802E+024,0.1932579974776967E+005,0.1961518932521496E+005,0.1962925429125035E+005,0.1804858669030583E+005,0.1829189347931276E+005,0.1948942128221604E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1938603789560070E+005,0.1280772758014859E+005,0.1733742807216433E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1830065452551030E+001,0.1827790281570652E+001,0.1846187003543569E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1922166561214242E+005,0.2012714079354843E+005,0.1674661452684411E+005,0.1932579974776967E+005,0.1961518932521496E+005,0.1944473493486299E+005,0.1725446693581127E+005,0.1758307855321814E+005,0.1940938127074985E+005 -0.8880000000000042E-007,0.1275359232773997E+024,0.9527280324890325E+023,0.1262796336206897E+024,0.3053134225470500E+021,0.7012198442433068E+022,0.3564058720119728E+024,0.1933727461051469E+005,0.1956135400144408E+005,0.1960360517747488E+005,0.1705421252121587E+005,0.1832500938751484E+005,0.1946966733388674E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1939214939314532E+005,0.1265269148672201E+005,0.1737917929469626E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1830117401632595E+001,0.1825745153762472E+001,0.1846546563988599E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1922052318009555E+005,0.1952810349784438E+005,0.1685593626892409E+005,0.1933727461051469E+005,0.1956135400144408E+005,0.1943477163662529E+005,0.1660176759760904E+005,0.1764077164788812E+005,0.1939599743093773E+005 -0.8900000000000043E-007,0.1277461390765305E+024,0.9530283407735050E+023,0.1261845359972734E+024,0.3003082844725083E+021,0.6992177890134901E+022,0.3565259953257618E+024,0.1933310357411935E+005,0.1956848280947598E+005,0.1957149986848314E+005,0.1637142656676183E+005,0.1835732802565768E+005,0.1945876628099251E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1932405259847961E+005,0.1257983969812724E+005,0.1739182052880388E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1829536764610467E+001,0.1824767290430364E+001,0.1846655098901603E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1924688195215251E+005,0.1958814236066162E+005,0.1673106751376311E+005,0.1933310357411935E+005,0.1956848280947598E+005,0.1941014928960562E+005,0.1630031321032686E+005,0.1762186227002326E+005,0.1938717595773767E+005 -0.8920000000000043E-007,0.1279213189091394E+024,0.9534788032002136E+023,0.1261294794784535E+024,0.3103185606215919E+021,0.6927111095165858E+022,0.3566361083634017E+024,0.1932529958409802E+005,0.1947915334080989E+005,0.1957124244380479E+005,0.1756026648040734E+005,0.1823189232961051E+005,0.1943064056758431E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1935622367807844E+005,0.1411953863993619E+005,0.1736053395204368E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1829811569284719E+001,0.1843348176606513E+001,0.1846386198579103E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1926699889243560E+005,0.1877925875453270E+005,0.1652578690499997E+005,0.1932529958409802E+005,0.1947915334080989E+005,0.1942454279950074E+005,0.1698971610916827E+005,0.1749850178079531E+005,0.1936401669132418E+005 -0.8940000000000043E-007,0.1280664679133011E+024,0.9537290601039409E+023,0.1260744229596335E+024,0.3153236986961337E+021,0.6892075128644065E+022,0.3567211957106689E+024,0.1932546232166088E+005,0.1949531983906032E+005,0.1951551519008978E+005,0.1758038489955221E+005,0.1828287925054257E+005,0.1941635903884429E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1939976741855823E+005,0.1470786755644946E+005,0.1705550641529368E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1830182112120693E+001,0.1849448773906019E+001,0.1843714324031115E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1923502120155135E+005,0.1895293435816509E+005,0.1659349367886685E+005,0.1932546232166088E+005,0.1949531983906032E+005,0.1940236630688793E+005,0.1720554090177233E+005,0.1745851754379859E+005,0.1936011079676802E+005 -0.8960000000000043E-007,0.1282816888505064E+024,0.9541795225306495E+023,0.1259893356123663E+024,0.3153236986961337E+021,0.6847028885973188E+022,0.3568513293006070E+024,0.1931125845884442E+005,0.1948880240569695E+005,0.1947464230426495E+005,0.1837734529237848E+005,0.1830630012054200E+005,0.1939630799000894E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1935853849898450E+005,0.1492474951152041E+005,0.1716719181718733E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1829831308300478E+001,0.1851579611666575E+001,0.1844703336493646E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1925739989504316E+005,0.1824621719216182E+005,0.1666822681705999E+005,0.1931125845884442E+005,0.1948880240569695E+005,0.1937992031668492E+005,0.1740603465559273E+005,0.1752066146968635E+005,0.1934693300766954E+005 -0.8980000000000043E-007,0.1283867967500718E+024,0.9544297794343767E+023,0.1259442893696954E+024,0.3103185606215919E+021,0.6832013471749563E+022,0.3569163960955761E+024,0.1929281209505591E+005,0.1944693775142577E+005,0.1950050806629525E+005,0.1901673988832232E+005,0.1831511236548239E+005,0.1938836109600847E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1933081944916184E+005,0.1415627572050717E+005,0.1717793761641630E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1829594640514083E+001,0.1843743541790013E+001,0.1844797835000717E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1926476495130052E+005,0.1719321936433618E+005,0.1688912738566427E+005,0.1929281209505591E+005,0.1944693775142577E+005,0.1938601406546329E+005,0.1717440164310727E+005,0.1759196062396272E+005,0.1933251563756909E+005 -0.9000000000000044E-007,0.1285619765826808E+024,0.9546800363381038E+023,0.1258592020224282E+024,0.3003082844725083E+021,0.6827008333675021E+022,0.3570164988570669E+024,0.1926130805284912E+005,0.1942989101954063E+005,0.1949121944634826E+005,0.1905265438483926E+005,0.1822346022337681E+005,0.1936741711983527E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1934956982586923E+005,0.1425056569432419E+005,0.1697628313066369E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1829754804855662E+001,0.1844749223567344E+001,0.1843005108878993E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1926066574555020E+005,0.1761051079344944E+005,0.1692551351394414E+005,0.1926130805284912E+005,0.1942989101954063E+005,0.1938575570777282E+005,0.1733704199604985E+005,0.1750821201085366E+005,0.1931511757580854E+005 -0.9020000000000044E-007,0.1287621821056625E+024,0.9544798308151220E+023,0.1257590992609374E+024,0.3103185606215919E+021,0.6827008333675021E+022,0.3571065913424087E+024,0.1925962455960850E+005,0.1938594076653805E+005,0.1944624869573697E+005,0.1886026266882210E+005,0.1836647487169309E+005,0.1934168644640231E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1931590136715185E+005,0.1408280114675566E+005,0.1698835677279271E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1829466996123512E+001,0.1842950802681647E+001,0.1843113608515588E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1931499097830605E+005,0.1929011275706867E+005,0.1708885652952912E+005,0.1925962455960850E+005,0.1938594076653805E+005,0.1937289281440310E+005,0.1769922460213508E+005,0.1762189204024450E+005,0.1930060981893378E+005 -0.9040000000000044E-007,0.1289223465240478E+024,0.9543797280536313E+023,0.1256740119136702E+024,0.3103185606215919E+021,0.6837018609824105E+022,0.3571816684135268E+024,0.1925197440577370E+005,0.1939200661909767E+005,0.1943346945635284E+005,0.1948761519963824E+005,0.1838028262869674E+005,0.1933676865812275E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1926191050407262E+005,0.1514803192399885E+005,0.1705379479736362E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1829003429898755E+001,0.1853711264951051E+001,0.1843699069126413E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1931122810943489E+005,0.1958944506237903E+005,0.1720127123770076E+005,0.1925197440577370E+005,0.1939200661909767E+005,0.1935172039710620E+005,0.1834361096971678E+005,0.1767837170109636E+005,0.1929357574697859E+005 -0.9060000000000044E-007,0.1290674955282095E+024,0.9546299849573583E+023,0.1256089451187011E+024,0.3053134225470500E+021,0.6822003195600479E+022,0.3572667557607940E+024,0.1922777082433474E+005,0.1938638722781554E+005,0.1946012028374013E+005,0.1886220274961292E+005,0.1839148898569580E+005,0.1933556265535469E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1920910632367244E+005,0.1418397882180035E+005,0.1690320712349949E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1828547610531761E+001,0.1844040366726717E+001,0.1842345198298478E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1930559273961392E+005,0.1984503766801818E+005,0.1735653951899456E+005,0.1922777082433474E+005,0.1938638722781554E+005,0.1934764452623648E+005,0.1788892328693662E+005,0.1768824649551405E+005,0.1928175793173950E+005 -0.9080000000000044E-007,0.1292576907750421E+024,0.9546299849573583E+023,0.1255038372191357E+024,0.2953031463979665E+021,0.6842023747898646E+022,0.3573618533842102E+024,0.1923382972488751E+005,0.1935752873363557E+005,0.1947716315219615E+005,0.1860250322346683E+005,0.1850650111875488E+005,0.1933788426928517E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1913905328620927E+005,0.1401057028350302E+005,0.1669289201841337E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827939134258337E+001,0.1842163608590189E+001,0.1840414640776748E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1929712770025428E+005,0.1901061343136950E+005,0.1743229726458836E+005,0.1923382972488751E+005,0.1935752873363557E+005,0.1933391126603149E+005,0.1748547770690551E+005,0.1770447364858612E+005,0.1927129626241146E+005 -0.9100000000000044E-007,0.1294128500553529E+024,0.9549803446225763E+023,0.1254387704241667E+024,0.2902980083234246E+021,0.6816998057525938E+022,0.3574569510076266E+024,0.1924816692625498E+005,0.1933536900780124E+005,0.1949216920230746E+005,0.1907825339950180E+005,0.1834367901777759E+005,0.1933970173880129E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1910552463289554E+005,0.1458695661022279E+005,0.1654383777659799E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827646377087342E+001,0.1848234080982559E+001,0.1839017562553586E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1925117027038303E+005,0.1871085623939312E+005,0.1757393314150113E+005,0.1924816692625498E+005,0.1933536900780124E+005,0.1931807591382902E+005,0.1775882389298675E+005,0.1763459597177942E+005,0.1926401460088264E+005 -0.9120000000000045E-007,0.1296230658544837E+024,0.9550804473840672E+023,0.1253386676626759E+024,0.2902980083234246E+021,0.6806987781376853E+022,0.3575670640452665E+024,0.1927498236547377E+005,0.1929741450326121E+005,0.1944105759453433E+005,0.1858783650370415E+005,0.1847794980815766E+005,0.1932345783021988E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1913037394718271E+005,0.1423354893684851E+005,0.1635230142041312E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827863445516826E+001,0.1844568683269147E+001,0.1837186010665261E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1922703522938507E+005,0.1809505049230265E+005,0.1738530816802929E+005,0.1927498236547377E+005,0.1929741450326121E+005,0.1929519468729263E+005,0.1727038979174184E+005,0.1758716012475374E+005,0.1925430070813324E+005 -0.9140000000000045E-007,0.1297832302728690E+024,0.9552806529070488E+023,0.1252585854534832E+024,0.2802877321743410E+021,0.6806987781376853E+022,0.3576571565306083E+024,0.1926473773362483E+005,0.1931662469403210E+005,0.1943563895795155E+005,0.1809332408184596E+005,0.1841369853642214E+005,0.1932133428115818E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1910623506337491E+005,0.1405262360926408E+005,0.1643506040509923E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827652590568671E+001,0.1842622874864130E+001,0.1837982471412406E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1918949080655500E+005,0.1790006508148603E+005,0.1736603363996805E+005,0.1926473773362483E+005,0.1931662469403210E+005,0.1927535953987290E+005,0.1694873299956612E+005,0.1757543490829618E+005,0.1924835031362907E+005 -0.9160000000000045E-007,0.1299333844151052E+024,0.9556810639530122E+023,0.1252085340727378E+024,0.2852928702488828E+021,0.6756936400631436E+022,0.3577522541540246E+024,0.1925477727487491E+005,0.1929051348361561E+005,0.1944103133340139E+005,0.1901431577132491E+005,0.1841356814277303E+005,0.1931343026903741E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1914614516550229E+005,0.1510357281654840E+005,0.1648009483476323E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1828000930104398E+001,0.1853291711555855E+001,0.1838412613883328E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1912225231821296E+005,0.1788247222989547E+005,0.1717909825726040E+005,0.1925477727487491E+005,0.1929051348361561E+005,0.1926871000075720E+005,0.1762645210123865E+005,0.1753274070091198E+005,0.1923537696891102E+005 -0.9180000000000045E-007,0.1300685231431179E+024,0.9559313208567392E+023,0.1251434672777687E+024,0.2752825940997992E+021,0.6751931262556894E+022,0.3578323363632172E+024,0.1929633090507804E+005,0.1926836390222885E+005,0.1942566982985285E+005,0.2003717982419020E+005,0.1811551894885133E+005,0.1931238213681163E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1911852833528670E+005,0.1503384307009160E+005,0.1671111440171570E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827760037662369E+001,0.1852628817477817E+001,0.1840583777908841E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1909306819629584E+005,0.1699695744755183E+005,0.1695444466362009E+005,0.1929633090507804E+005,0.1926836390222885E+005,0.1924602317999638E+005,0.1779719703564113E+005,0.1739817186900286E+005,0.1923429609411588E+005 -0.9200000000000045E-007,0.1301586156284596E+024,0.9563317319027026E+023,0.1251084313112469E+024,0.2652723179507156E+021,0.6731910710258727E+022,0.3578974031581863E+024,0.1925120738506128E+005,0.1931999258844848E+005,0.1941128597755201E+005,0.1877161632150740E+005,0.1799292351926508E+005,0.1930152194961745E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1912493135742568E+005,0.1478698317364200E+005,0.1653245676087376E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827815949109697E+001,0.1850233121689371E+001,0.1838909883811919E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1909446525602644E+005,0.1716083364475801E+005,0.1695019129091089E+005,0.1925120738506128E+005,0.1931999258844848E+005,0.1924182549510152E+005,0.1722509003645039E+005,0.1729527852982217E+005,0.1922801577358689E+005 -0.9220000000000046E-007,0.1302987594945468E+024,0.9561315263797208E+023,0.1250233439639797E+024,0.2602671798761738E+021,0.6761941538705977E+022,0.3579574648150807E+024,0.1925666058261936E+005,0.1932610354956063E+005,0.1936404840892130E+005,0.1823119894344277E+005,0.1803996686036901E+005,0.1928898716175577E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1911193277186220E+005,0.1303559418729695E+005,0.1654200431638170E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827702406994309E+001,0.1830710565020166E+001,0.1839000225431415E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1910506670803504E+005,0.1822213823131753E+005,0.1699829820288061E+005,0.1925666058261936E+005,0.1932610354956063E+005,0.1922069773249701E+005,0.1683606298324014E+005,0.1733254024659783E+005,0.1922454133033519E+005 -0.9240000000000046E-007,0.1305340009840503E+024,0.9561815777604663E+023,0.1249182360644144E+024,0.2702774560252574E+021,0.6736915848333269E+022,0.3580775881288697E+024,0.1926019008570305E+005,0.1928210936253154E+005,0.1933462613655760E+005,0.1829709175082256E+005,0.1803937649344268E+005,0.1926831536059742E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1914247984937166E+005,0.1238147460314348E+005,0.1672711455333895E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827968997519736E+001,0.1822048275147846E+001,0.1840731993560134E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1907332644466774E+005,0.1800745570754465E+005,0.1678600552690565E+005,0.1926019008570305E+005,0.1928210936253154E+005,0.1920664710793846E+005,0.1663222342259700E+005,0.1731982418898344E+005,0.1920887446031783E+005 -0.9260000000000046E-007,0.1307091808166592E+024,0.9562316291412117E+023,0.1248231384409981E+024,0.2602671798761738E+021,0.6751931262556894E+022,0.3581676806142116E+024,0.1921339543939678E+005,0.1929652694073061E+005,0.1932836447912253E+005,0.1839662987417243E+005,0.1795603693799561E+005,0.1925136066839233E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1916293803812083E+005,0.1242205808405922E+005,0.1666634868448728E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1828147079910180E+001,0.1822611395163130E+001,0.1840167627333643E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1904543282141227E+005,0.1730167491928243E+005,0.1697611286047751E+005,0.1921339543939678E+005,0.1929652694073061E+005,0.1920120155039295E+005,0.1647958788275358E+005,0.1732255966600896E+005,0.1919370886147435E+005 -0.9280000000000046E-007,0.1308843606492682E+024,0.9562816805219571E+023,0.1247380510937308E+024,0.2602671798761738E+021,0.6746926124482352E+022,0.3582577730995532E+024,0.1921160404610346E+005,0.1927455124146663E+005,0.1929511641037681E+005,0.1878281586319605E+005,0.1798054536682722E+005,0.1923398802123344E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1917273345797058E+005,0.1229056488528884E+005,0.1656575063839772E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1828232215757512E+001,0.1820773794402580E+001,0.1839224481262383E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1903843566644192E+005,0.1739525258078858E+005,0.1701209064132231E+005,0.1921160404610346E+005,0.1927455124146663E+005,0.1918716666279539E+005,0.1664287581357132E+005,0.1731686857658089E+005,0.1918234873534871E+005 -0.9300000000000046E-007,0.1310745558961008E+024,0.9567821943294113E+023,0.1246729842987618E+024,0.2652723179507156E+021,0.6686864467587850E+022,0.3583778964133422E+024,0.1919561557809651E+005,0.1924005756230386E+005,0.1928386107456902E+005,0.1830788028064803E+005,0.1810303045341609E+005,0.1921713615495754E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1919132846617025E+005,0.1216485320558538E+005,0.1668029233718542E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1828393600667224E+001,0.1818981072923212E+001,0.1840297482770596E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1900030165242424E+005,0.1911514387520391E+005,0.1690183009219928E+005,0.1919561557809651E+005,0.1924005756230386E+005,0.1917603119298941E+005,0.1690598127423475E+005,0.1736904744916506E+005,0.1916489129501947E+005 -0.9320000000000046E-007,0.1312297151764116E+024,0.9567321429486658E+023,0.1246029123657182E+024,0.2752825940997992E+021,0.6671849053364226E+022,0.3584529734844604E+024,0.1920176791790429E+005,0.1924561181444211E+005,0.1929069913479442E+005,0.1893606373331990E+005,0.1798007173442969E+005,0.1922144039767971E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1915010958557433E+005,0.1213435646750456E+005,0.1669843851979259E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1828035455181026E+001,0.1818540758817832E+001,0.1840466160433465E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1897286886958756E+005,0.1830004913707226E+005,0.1674708566758275E+005,0.1920176791790429E+005,0.1924561181444211E+005,0.1915996413541204E+005,0.1693545809533396E+005,0.1727474338660035E+005,0.1916133059403854E+005 -0.9340000000000047E-007,0.1313848744567224E+024,0.9565819888064296E+023,0.1245278352946001E+024,0.2852928702488828E+021,0.6666843915289683E+022,0.3585230454175040E+024,0.1918939165542147E+005,0.1924671717358326E+005,0.1929143934194177E+005,0.1959968686190466E+005,0.1803029485038854E+005,0.1921890431929882E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1914414398796168E+005,0.1242590279642995E+005,0.1678212678652962E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827983497122372E+001,0.1822664558271447E+001,0.1841239498888596E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1891106003747291E+005,0.1794503994032335E+005,0.1696877931313411E+005,0.1918939165542147E+005,0.1924671717358326E+005,0.1914058776392460E+005,0.1719817706055706E+005,0.1738403660790843E+005,0.1915257983271163E+005 -0.9360000000000047E-007,0.1315500440131822E+024,0.9565319374256842E+023,0.1244477530854074E+024,0.2902980083234246E+021,0.6661838777215141E+022,0.3586031276266966E+024,0.1913492756362911E+005,0.1922715630180932E+005,0.1930922421231118E+005,0.1991088187549958E+005,0.1798623313562082E+005,0.1919930413703208E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1903378779445796E+005,0.1262306150210935E+005,0.1657309140120492E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827016648087642E+001,0.1825348759595454E+001,0.1839293679799200E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1903881214479999E+005,0.1770209617576415E+005,0.1713223553874309E+005,0.1913492756362911E+005,0.1922715630180932E+005,0.1915629488611387E+005,0.1731462109786812E+005,0.1735646373892874E+005,0.1913243126086602E+005 -0.9380000000000047E-007,0.1317001981554185E+024,0.9568322457101567E+023,0.1243926965665875E+024,0.2953031463979665E+021,0.6621797672618807E+022,0.3586932201120384E+024,0.1909336431585846E+005,0.1923232149944959E+005,0.1931458163810505E+005,0.1966584154324024E+005,0.1793201707345054E+005,0.1918618050707057E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1906491318397908E+005,0.1227273468769715E+005,0.1653059785093212E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827290440477881E+001,0.1820521687266209E+001,0.1838892282506831E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1901058442734804E+005,0.1773501419294549E+005,0.1694743690938701E+005,0.1909336431585846E+005,0.1923232149944959E+005,0.1915870556833691E+005,0.1712630470697152E+005,0.1726725747011512E+005,0.1911776081000087E+005 -0.9400000000000047E-007,0.1319154190926238E+024,0.9572827081368655E+023,0.1243026040812457E+024,0.2902980083234246E+021,0.6586761706097014E+022,0.3588233537019765E+024,0.1907144762766458E+005,0.1924932780695566E+005,0.1932128694228805E+005,0.1926654577688008E+005,0.1771795597045428E+005,0.1918076422751060E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1900290850139421E+005,0.1148328275832615E+005,0.1656156645714674E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826744162124708E+001,0.1808602129919141E+001,0.1839185011952020E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1900859896603022E+005,0.1768617411275163E+005,0.1679347431644333E+005,0.1907144762766458E+005,0.1924932780695566E+005,0.1914448642331427E+005,0.1673481179207472E+005,0.1713663267507221E+005,0.1910679813809134E+005 -0.9420000000000047E-007,0.1321256348917545E+024,0.9576831191828289E+023,0.1242075064578294E+024,0.2802877321743410E+021,0.6566741153798847E+022,0.3589484821538401E+024,0.1903025325872083E+005,0.1925470109825509E+005,0.1932268463598679E+005,0.1902789113201735E+005,0.1785695173502445E+005,0.1916986029399462E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1904145935146944E+005,0.1189603613337655E+005,0.1639887512721368E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827084210925185E+001,0.1815024749245738E+001,0.1837635189379007E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1893784948516607E+005,0.1732393394754873E+005,0.1665729056980920E+005,0.1903025325872083E+005,0.1925470109825509E+005,0.1913468452656349E+005,0.1662842696260079E+005,0.1711418978983574E+005,0.1908934430898398E+005 -0.9440000000000047E-007,0.1323058198624381E+024,0.9579834274673014E+023,0.1241424396628604E+024,0.2902980083234246E+021,0.6516689773053430E+022,0.3590535900534054E+024,0.1903344679964839E+005,0.1921618796744893E+005,0.1932682772972084E+005,0.1914676631912106E+005,0.1779003488958049E+005,0.1916116392450042E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1906953053775663E+005,0.1223010556826029E+005,0.1620492658806090E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827330982983024E+001,0.1819916058206805E+001,0.1835748153108987E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1887660867161002E+005,0.1772046386386048E+005,0.1661289388089074E+005,0.1903344679964839E+005,0.1921618796744893E+005,0.1912607501239271E+005,0.1688275797233193E+005,0.1701994483704138E+005,0.1907594654183305E+005 -0.9460000000000048E-007,0.1324409585904507E+024,0.9581335816095376E+023,0.1240873831440404E+024,0.2953031463979665E+021,0.6491664082680720E+022,0.3591286671245236E+024,0.1904938209690578E+005,0.1917358493421674E+005,0.1927028970085645E+005,0.1855711602162556E+005,0.1789669353896799E+005,0.1913760647356011E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1911707852656449E+005,0.1381753144668096E+005,0.1643172997583501E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827747372836845E+001,0.1840020590580126E+001,0.1837950570220620E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1885125349419845E+005,0.1835519386615740E+005,0.1670239320605170E+005,0.1904938209690578E+005,0.1917358493421674E+005,0.1910653089819987E+005,0.1722308823635884E+005,0.1715361544416957E+005,0.1906649503187562E+005 -0.9480000000000048E-007,0.1326361589753578E+024,0.9584839412747555E+023,0.1240022957967732E+024,0.2902980083234246E+021,0.6466638392308011E+022,0.3592437853002380E+024,0.1905849143370292E+005,0.1914934416371886E+005,0.1926951899642641E+005,0.1867621945352328E+005,0.1774731502438195E+005,0.1913166211918654E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1904738908382772E+005,0.1466548685519796E+005,0.1636919333525387E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1827136397523664E+001,0.1849025227744322E+001,0.1837349210937023E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1885341955821377E+005,0.1742638666572290E+005,0.1687818012795191E+005,0.1905849143370292E+005,0.1914934416371886E+005,0.1908817495221453E+005,0.1722847893543113E+005,0.1712275125570331E+005,0.1905665405182978E+005 -0.9500000000000048E-007,0.1327562822891468E+024,0.9585840440362464E+023,0.1239422341398787E+024,0.2852928702488828E+021,0.6466638392308011E+022,0.3593088520952070E+024,0.1909703612952190E+005,0.1912747403759611E+005,0.1927354487548265E+005,0.1702931449142771E+005,0.1764349329847979E+005,0.1913824072389123E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1895911751005844E+005,0.1518346999224956E+005,0.1654341970838076E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826356266570103E+001,0.1854043974598773E+001,0.1839013609646601E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1887022502433916E+005,0.1595000064356424E+005,0.1647055149276666E+005,0.1909703612952190E+005,0.1912747403759611E+005,0.1907125597675155E+005,0.1621506459922430E+005,0.1700466814552664E+005,0.1905631819727468E+005 -0.9520000000000048E-007,0.1329865186405757E+024,0.9584839412747555E+023,0.1238321211022388E+024,0.2953031463979665E+021,0.6456628116158928E+022,0.3594189651328470E+024,0.1909488813380742E+005,0.1911366205403395E+005,0.1928896976056753E+005,0.1741328816606086E+005,0.1782515816679132E+005,0.1914257129833134E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1886123626851538E+005,0.1567026805349719E+005,0.1634148893796228E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825482940336682E+001,0.1858465823794201E+001,0.1837081374604761E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1886574605766300E+005,0.1599149594209751E+005,0.1650890712334175E+005,0.1909488813380742E+005,0.1911366205403395E+005,0.1905055914365071E+005,0.1652636565108549E+005,0.1704147242434030E+005,0.1904562379646134E+005 -0.9540000000000048E-007,0.1331416779208865E+024,0.9584338898940101E+023,0.1237420286168970E+024,0.2852928702488828E+021,0.6481653806531637E+022,0.3594940422039651E+024,0.1909160584243674E+005,0.1906472759856902E+005,0.1926340650192275E+005,0.1764597262181158E+005,0.1775173104337976E+005,0.1911827061451186E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887779513892874E+005,0.1518346999224956E+005,0.1660136750894943E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825631299858907E+001,0.1854043974598773E+001,0.1839559672487411E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1887397011168397E+005,0.1546325518576973E+005,0.1649124306482264E+005,0.1909160584243674E+005,0.1906472759856902E+005,0.1904615817877185E+005,0.1634294289688490E+005,0.1707374319828418E+005,0.1903023306147351E+005 -0.9560000000000049E-007,0.1332718115108246E+024,0.9582336843710284E+023,0.1236719566838534E+024,0.2902980083234246E+021,0.6491664082680720E+022,0.3595490987227851E+024,0.1913342348768775E+005,0.1905150073831488E+005,0.1923255536551535E+005,0.1772469023004896E+005,0.1756048192859240E+005,0.1911615118412698E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1888207696338337E+005,0.1564698115830194E+005,0.1636611676730897E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825669621950768E+001,0.1858260403273650E+001,0.1837319511203622E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1882789225117735E+005,0.1587389482571437E+005,0.1677807858437805E+005,0.1913342348768775E+005,0.1905150073831488E+005,0.1902024154418158E+005,0.1662200312551596E+005,0.1701067039841647E+005,0.1903230570806989E+005 -0.9580000000000049E-007,0.1334369810672845E+024,0.9584839412747555E+023,0.1235918744746608E+024,0.2802877321743410E+021,0.6486658944606178E+022,0.3596441963462013E+024,0.1912937428877133E+005,0.1906226074760559E+005,0.1919312576627711E+005,0.1691923902640735E+005,0.1760018313071923E+005,0.1910409270231525E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1890071597618763E+005,0.1523197822446737E+005,0.1637350843982823E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825836244201664E+001,0.1854496948891541E+001,0.1837390848666321E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1879830458240297E+005,0.1637971413824959E+005,0.1650344767735041E+005,0.1912937428877133E+005,0.1906226074760559E+005,0.1899922501722569E+005,0.1630532529694278E+005,0.1694973738957239E+005,0.1902524852938778E+005 -0.9600000000000049E-007,0.1335921403475953E+024,0.9588343009399734E+023,0.1235268076796917E+024,0.2752825940997992E+021,0.6461633254233469E+022,0.3597392939696177E+024,0.1909149670604774E+005,0.1904405325454146E+005,0.1918638423968391E+005,0.1602509404719195E+005,0.1753745451712382E+005,0.1908117349483780E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1892637254967164E+005,0.1540644752079281E+005,0.1632558191127893E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826065079701687E+001,0.1856103188294558E+001,0.1836927192406870E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1878293877548180E+005,0.1717823624394224E+005,0.1688273425227176E+005,0.1909149670604774E+005,0.1904405325454146E+005,0.1899862025254275E+005,0.1619399649390554E+005,0.1702032713319611E+005,0.1900753995530021E+005 -0.9620000000000049E-007,0.1336622122806389E+024,0.9597352257933909E+023,0.1235218025416172E+024,0.2602671798761738E+021,0.6401571597338968E+022,0.3598193761788103E+024,0.1908285437246760E+005,0.1899514612844406E+005,0.1914886842465835E+005,0.1498828728239077E+005,0.1752881635328463E+005,0.1905151236522939E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1899007890609058E+005,0.1399943374915346E+005,0.1638503184560556E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826630698482997E+001,0.1842041537079870E+001,0.1837501937119161E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1880095526976581E+005,0.1676100890019148E+005,0.1696032708293555E+005,0.1908285437246760E+005,0.1899514612844406E+005,0.1900445221664268E+005,0.1524024920690517E+005,0.1705515143604003E+005,0.1899369120781251E+005 -0.9640000000000049E-007,0.1337372893517570E+024,0.9599854826971181E+023,0.1234917717131699E+024,0.2552620418016320E+021,0.6386556183115342E+022,0.3598694275595558E+024,0.1908426228573472E+005,0.1893773974507722E+005,0.1913626466526969E+005,0.1447478495426896E+005,0.1746889021274259E+005,0.1903108362469734E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1901085545915476E+005,0.1398483245627776E+005,0.1640975011803639E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826814369826408E+001,0.1841881200974782E+001,0.1837739716501490E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1883738762444770E+005,0.1644008572779311E+005,0.1687784413546519E+005,0.1908426228573472E+005,0.1893773974507722E+005,0.1901514617915150E+005,0.1491737773872074E+005,0.1701135364340148E+005,0.1898171504558099E+005 -0.9660000000000049E-007,0.1339074640462914E+024,0.9598853799356273E+023,0.1233966740897536E+024,0.2502569037270902E+021,0.6406576735413509E+022,0.3599495097687484E+024,0.1907906783736673E+005,0.1885645640275221E+005,0.1914771704932694E+005,0.1500431466454382E+005,0.1751880990715554E+005,0.1901263432840236E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1897956036049080E+005,0.1378741630480517E+005,0.1637538834495614E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826537562708134E+001,0.1839681013415110E+001,0.1837408981770351E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1887858206432528E+005,0.1651254182192374E+005,0.1682642470482997E+005,0.1907906783736673E+005,0.1885645640275221E+005,0.1902387469574473E+005,0.1511802603581497E+005,0.1700901102540375E+005,0.1896118449268716E+005 -0.9680000000000050E-007,0.1340576181885277E+024,0.9603858937430814E+023,0.1233416175709337E+024,0.2452517656525484E+021,0.6366535630817175E+022,0.3600496125302392E+024,0.1911796114885515E+005,0.1882570710829838E+005,0.1909986048704946E+005,0.1531518335041290E+005,0.1740569449028654E+005,0.1900093817786838E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1895970503475588E+005,0.1395384173457348E+005,0.1650475469399715E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826361482280102E+001,0.1841539813252459E+001,0.1838647184847530E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1887082982269158E+005,0.1662853393285356E+005,0.1679889882200466E+005,0.1911796114885515E+005,0.1882570710829838E+005,0.1899526071597524E+005,0.1533268472921708E+005,0.1698600596430326E+005,0.1895769642970236E+005 -0.9700000000000050E-007,0.1342177826069130E+024,0.9601856882200997E+023,0.1232415148094428E+024,0.2352414895034648E+021,0.6406576735413509E+022,0.3601196844632828E+024,0.1914323239478800E+005,0.1881211619667188E+005,0.1909630060265968E+005,0.1551826421017113E+005,0.1767199315426036E+005,0.1901034435594453E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1891908670240533E+005,0.1488937244933413E+005,0.1638825640095971E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826000157046602E+001,0.1851236160197184E+001,0.1837532995470858E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1881743337481936E+005,0.1643256699664358E+005,0.1665489413300139E+005,0.1914323239478800E+005,0.1881211619667188E+005,0.1896718735257191E+005,0.1561523625855754E+005,0.1702949436308575E+005,0.1895479194005376E+005 -0.9720000000000050E-007,0.1343629316110747E+024,0.9604359451238268E+023,0.1231814531525483E+024,0.2352414895034648E+021,0.6381551045040801E+022,0.3602047718105500E+024,0.1913248028795276E+005,0.1879484390738089E+005,0.1912024813926148E+005,0.1574078349368418E+005,0.1768118912116190E+005,0.1901034436586036E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1892061908479826E+005,0.1595516541833901E+005,0.1640653232391231E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826013815804954E+001,0.1860931652034010E+001,0.1837708802048389E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1874453583717726E+005,0.1668934062003034E+005,0.1673910637026062E+005,0.1913248028795276E+005,0.1879484390738089E+005,0.1895676326422790E+005,0.1607544130378287E+005,0.1706305611198305E+005,0.1894370386494911E+005 -0.9740000000000050E-007,0.1344430138202674E+024,0.9606361506468086E+023,0.1231514223241011E+024,0.2352414895034648E+021,0.6361530492742633E+022,0.3602548231912954E+024,0.1911112526404560E+005,0.1881411567008202E+005,0.1911262484155493E+005,0.1503771889839165E+005,0.1773135849684403E+005,0.1900541452738493E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1893203345805488E+005,0.1619735566483624E+005,0.1659447137482830E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826115489464213E+001,0.1862961302629128E+001,0.1839494881867311E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1870916888442635E+005,0.1671138980526014E+005,0.1670792112017610E+005,0.1911112526404560E+005,0.1881411567008202E+005,0.1894610368634084E+005,0.1584024422118770E+005,0.1712631779325119E+005,0.1893833002722325E+005 -0.9760000000000050E-007,0.1345881628244291E+024,0.9608864075505356E+023,0.1231013709433557E+024,0.2452517656525484E+021,0.6316484250071757E+022,0.3603399105385626E+024,0.1910557594933813E+005,0.1877504043081769E+005,0.1907410816375406E+005,0.1538304986748955E+005,0.1754588046302378E+005,0.1897681090568540E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1889951608826306E+005,0.1702071666691062E+005,0.1651432757159570E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825825527464558E+001,0.1869439496743317E+001,0.1838738061286164E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1881027907281596E+005,0.1752470516181615E+005,0.1662277954345947E+005,0.1910557594933813E+005,0.1877504043081769E+005,0.1895010369765762E+005,0.1645225348875708E+005,0.1699856349178080E+005,0.1892558145762155E+005 -0.9780000000000051E-007,0.1347983786235599E+024,0.9610866130735172E+023,0.1230062733199394E+024,0.2452517656525484E+021,0.6296463697773589E+022,0.3604550287142771E+024,0.1908841253131627E+005,0.1879666385043116E+005,0.1905347949982605E+005,0.1544223100692975E+005,0.1754433891352517E+005,0.1896924928016535E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1885889713036746E+005,0.1873923004314464E+005,0.1634668224930944E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825461962449574E+001,0.1881165435056429E+001,0.1837131648806847E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1880332631319014E+005,0.1664093072036018E+005,0.1652824515231782E+005,0.1908841253131627E+005,0.1879666385043116E+005,0.1892813866692882E+005,0.1669196117754759E+005,0.1692530147179499E+005,0.1891651327849049E+005 -0.9800000000000051E-007,0.1348884711089016E+024,0.9609865103120263E+023,0.1229512168011194E+024,0.2402466275780066E+021,0.6316484250071757E+022,0.3604950698188734E+024,0.1912706908635685E+005,0.1876323270835544E+005,0.1901043262024889E+005,0.1647670539929054E+005,0.1727797301587939E+005,0.1895613385629102E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1889515842158192E+005,0.1934390168026830E+005,0.1652955383258155E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825786596105158E+001,0.1884805899173402E+001,0.1838882395412118E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1878056826030547E+005,0.1620415058675208E+005,0.1649128344121155E+005,0.1912706908635685E+005,0.1876323270835544E+005,0.1891224689509420E+005,0.1718246223696426E+005,0.1684666950174533E+005,0.1891555959672763E+005 -0.9820000000000051E-007,0.1349685533180943E+024,0.9612868185964990E+023,0.1229211859726722E+024,0.2352414895034648E+021,0.6296463697773589E+022,0.3605501263376934E+024,0.1910665725629194E+005,0.1871319583076011E+005,0.1906540740265469E+005,0.1656964491988847E+005,0.1740106022992749E+005,0.1895624973875600E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887846418285396E+005,0.1997425774963336E+005,0.1664781368198018E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825637288874518E+001,0.1888370971448521E+001,0.1839994686233060E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1875663639228739E+005,0.1589269157066217E+005,0.1637796006093436E+005,0.1910665725629194E+005,0.1871319583076011E+005,0.1892493223628921E+005,0.1730643237795297E+005,0.1689928060273849E+005,0.1890007588996866E+005 -0.9840000000000051E-007,0.1350786663557342E+024,0.9611867158350081E+023,0.1228611243157777E+024,0.2352414895034648E+021,0.6306473973922673E+022,0.3606001777184388E+024,0.1908087334324962E+005,0.1873073686932107E+005,0.1907812432613964E+005,0.1580460068987743E+005,0.1757971262124135E+005,0.1895821631450741E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887097109866597E+005,0.2065196878074697E+005,0.1668880428206451E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825570190274883E+001,0.1891965721820316E+001,0.1840376649829474E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1870400231654669E+005,0.1642257505290944E+005,0.1635008896077838E+005,0.1908087334324962E+005,0.1873073686932107E+005,0.1891309536230509E+005,0.1731462024236673E+005,0.1698049792367238E+005,0.1889249433722600E+005 -0.9860000000000051E-007,0.1351637537030014E+024,0.9611366644542627E+023,0.1228010626588832E+024,0.2202260752798394E+021,0.6341509940444466E+022,0.3606402188230351E+024,0.1908201737747730E+005,0.1871489581781058E+005,0.1908578621233106E+005,0.1668155852437187E+005,0.1760790338957324E+005,0.1895807298078379E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1888330154092143E+005,0.2022730474880832E+005,0.1649543929599053E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825680578757507E+001,0.1889740828600290E+001,0.1838558654390201E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1866441161118508E+005,0.1739913693814235E+005,0.1638493144407154E+005,0.1908201737747730E+005,0.1871489581781058E+005,0.1890815974411428E+005,0.1786240094473424E+005,0.1695114593453921E+005,0.1888676229675888E+005 -0.9880000000000051E-007,0.1353489438117595E+024,0.9604859965045722E+023,0.1226759342070196E+024,0.2202260752798394E+021,0.6406576735413509E+022,0.3607002804799297E+024,0.1906239964290251E+005,0.1868457320758414E+005,0.1907396991343061E+005,0.1588119533613363E+005,0.1733920050132368E+005,0.1893317684916019E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887691534728323E+005,0.1846902557178933E+005,0.1665204134565908E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825623423687715E+001,0.1879463234837652E+001,0.1840034165420047E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1869174804297332E+005,0.1776268251441441E+005,0.1665958449069120E+005,0.1906239964290251E+005,0.1868457320758414E+005,0.1890926830262734E+005,0.1713517487610588E+005,0.1695563102179786E+005,0.1887111387473643E+005 -0.9900000000000052E-007,0.1355091082301448E+024,0.9606862020275538E+023,0.1226008571359015E+024,0.2152209372052976E+021,0.6396566459264426E+022,0.3607903729652715E+024,0.1903870413176763E+005,0.1867754723074592E+005,0.1904670354276415E+005,0.1651859717019625E+005,0.1739395225102655E+005,0.1891459257457345E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1888360626805464E+005,0.1913774468547703E+005,0.1652571748805650E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825683305064653E+001,0.1883590031569099E+001,0.1838846053927675E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1869788645636251E+005,0.1606395823382886E+005,0.1677179637621451E+005,0.1903870413176763E+005,0.1867754723074592E+005,0.1890087226113944E+005,0.1710319361766071E+005,0.1697855149554927E+005,0.1885802132767182E+005 -0.9920000000000052E-007,0.1356292315439338E+024,0.9608864075505356E+023,0.1225458006170815E+024,0.2102157991307558E+021,0.6386556183115342E+022,0.3608604448983150E+024,0.1904352387792975E+005,0.1867770972417073E+005,0.1904069268221781E+005,0.1571498127555774E+005,0.1762424780633538E+005,0.1891809717848829E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1889164950453515E+005,0.1945902610397962E+005,0.1647644233639484E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825755234828785E+001,0.1885473893618047E+001,0.1838377812417751E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1862599134994373E+005,0.1549715768581609E+005,0.1667923129623969E+005,0.1904352387792975E+005,0.1867770972417073E+005,0.1887931581057184E+005,0.1667695596362984E+005,0.1703929429267634E+005,0.1885350247306082E+005 -0.9940000000000052E-007,0.1357944011003937E+024,0.9612367672157536E+023,0.1224757286840379E+024,0.2052106610562140E+021,0.6361530492742633E+022,0.3609605476598058E+024,0.1904943667199358E+005,0.1869771957910789E+005,0.1896494159249996E+005,0.1570605910726983E+005,0.1771559170770737E+005,0.1890169662382474E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1891781104145119E+005,0.1951848717814251E+005,0.1650592118303070E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825988784918385E+001,0.1885815884949881E+001,0.1838658263938485E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1860600948901105E+005,0.1550410623243884E+005,0.1648635951804459E+005,0.1904943667199358E+005,0.1869771957910789E+005,0.1884716758349542E+005,0.1669150974667041E+005,0.1703086161805550E+005,0.1885022794099836E+005 -0.9960000000000052E-007,0.1358444524811391E+024,0.9615370755002261E+023,0.1224657184078889E+024,0.2052106610562140E+021,0.6331499664295382E+022,0.3610005887644022E+024,0.1905680371247572E+005,0.1867635382906612E+005,0.1896006010612072E+005,0.1583583026871469E+005,0.1761191699150980E+005,0.1889547788151751E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1895065299172928E+005,0.1913000058918297E+005,0.1673212498891488E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826281088634379E+001,0.1883543858452651E+001,0.1840778350576532E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1856078309591698E+005,0.1587060028556891E+005,0.1654769986378305E+005,0.1905680371247572E+005,0.1867635382906612E+005,0.1884056106338757E+005,0.1674731633440148E+005,0.1706403542968070E+005,0.1884584804172859E+005 -0.9980000000000052E-007,0.1360546682802699E+024,0.9613368699772443E+023,0.1223606105083235E+024,0.2152209372052976E+021,0.6331499664295382E+022,0.3610956863878185E+024,0.1904312113814497E+005,0.1865337263002275E+005,0.1896596826498784E+005,0.1557520179715666E+005,0.1785086525822153E+005,0.1889024318256466E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1892394443280668E+005,0.1834393483021309E+005,0.1660843876939294E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1826043448640230E+001,0.1878658587519310E+001,0.1839626054204888E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1853158723643417E+005,0.1587860367323993E+005,0.1651569449511720E+005,0.1904312113814497E+005,0.1865337263002275E+005,0.1882745473109921E+005,0.1641959722213167E+005,0.1712627276936094E+005,0.1883110476884077E+005 -0.1000000000000000E-006,0.1361047196610153E+024,0.9616371782617168E+023,0.1223506002321744E+024,0.2152209372052976E+021,0.6301468835848132E+022,0.3611357274924148E+024,0.1902251521382607E+005,0.1864768437127644E+005,0.1897980576422724E+005,0.1481168640783540E+005,0.1777665131206958E+005,0.1888398645182978E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1887191403594963E+005,0.1823808711560371E+005,0.1665088306876403E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.1825578636868022E+001,0.1877969286184467E+001,0.1840023351020406E+001,0.0000000000000000E+000,0.0000000000000000E+000,0.1857825101245568E+005,0.1625022500075497E+005,0.1653814885628155E+005,0.1902251521382607E+005,0.1864768437127644E+005,0.1883328714785974E+005,0.1616553840829329E+005,0.1711167627709153E+005,0.1882355049615058E+005 diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/PartAnalyze_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/PartAnalyze_ref.csv new file mode 100644 index 000000000..d617e7eb9 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/PartAnalyze_ref.csv @@ -0,0 +1,502 @@ +001-TIME,002-NumDens-Spe001,003-NumDens-Spe002,004-NumDens-Spe003,005-NumDens-Spe004,006-NumDens-Spe005,007-NumDens-Spe006,008-TempTra-001,009-TempTra-002,010-TempTra-003,011-TempTra-004,012-TempTra-005,013-TempTra-006,014-TempVib001,015-TempVib002,016-TempVib003,017-TempVib004,018-TempVib005,019-XiVibMean001,020-XiVibMean002,021-XiVibMean003,022-XiVibMean004,023-XiVibMean005,024-TempRot001,025-TempRot002,026-TempRot003,027-TempRot004,028-TempRot005,029-TempTotal001,030-TempTotal002,031-TempTotal003,032-TempTotal004,033-TempTotal005,034-TempTotal006 +0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.93553694480606E+023,5.14528194062896E+022,0.00000000000000E+000,2.45006513886895E+023,0.00000000000000E+000,0.00000000000000E+000,3.00793987717752E+004,2.96144940204329E+004,0.00000000000000E+000,2.99817660197620E+004,0.00000000000000E+000,0.00000000000000E+000,2.96446452581148E+004,2.97769121171040E+004,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.88771739608870E+000,1.92464329725261E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.98996825890104E+004,2.96301612221258E+004,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.99080612925477E+004,2.96641617491133E+004,0.00000000000000E+000,2.98568409434945E+004 +2.00000000000000E-010,2.30236351428923E+020,9.81007062610192E+020,1.93438576304891E+023,5.09623158749845E+022,0.00000000000000E+000,2.45612135593915E+023,2.38401293156852E+004,3.04458934648506E+004,3.00408640736518E+004,2.95925903729921E+004,0.00000000000000E+000,2.99436564836146E+004,0.00000000000000E+000,0.00000000000000E+000,2.96679950537786E+004,2.96410320352895E+004,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.88780405039268E+000,1.92430231818178E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.98482790504293E+004,2.94740303706137E+004,0.00000000000000E+000,2.38401293156852E+004,3.04458934648506E+004,2.98827478316014E+004,2.95718079757066E+004,0.00000000000000E+000,2.98148155378221E+004 +4.00000000000000E-010,3.70380217516093E+020,1.91196274447497E+021,1.93368504371848E+023,5.04968380340522E+022,0.00000000000000E+000,2.46147685367891E+023,2.74555330859691E+004,2.80680282208478E+004,2.99938509294075E+004,2.95693350077252E+004,0.00000000000000E+000,2.98879837721058E+004,0.00000000000000E+000,0.00000000000000E+000,2.96471154451514E+004,2.96813684332063E+004,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.88772656962094E+000,1.92440386037421E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.98609591386653E+004,2.93202121001582E+004,0.00000000000000E+000,2.74555330859691E+004,2.80680282208478E+004,2.98602327669496E+004,2.95285158607854E+004,0.00000000000000E+000,2.97746421331568E+004 +6.00000000000000E-010,5.15529221677805E+020,2.96804687820328E+021,1.93293427300730E+023,4.99662933981507E+022,5.00513807454179E+018,2.46748301936836E+023,2.85214754514311E+004,2.89892282836771E+004,2.99511552857361E+004,2.93577070856354E+004,0.00000000000000E+000,2.98158173626130E+004,0.00000000000000E+000,0.00000000000000E+000,2.96781393919327E+004,2.96118893799376E+004,2.05105327381797E+004,0.00000000000000E+000,0.00000000000000E+000,1.88784165578012E+000,1.92422878505940E+000,1.86943949674332E+000,0.00000000000000E+000,0.00000000000000E+000,2.98007977679524E+004,2.94015331379726E+004,5.25265152401878E+004,2.85214754514311E+004,2.89892282836771E+004,2.98326673974591E+004,2.94410025702196E+004,2.08745168435296E+004,2.97402890472735E+004 +8.00000000000000E-010,7.25745020808560E+020,3.90901283621714E+021,1.93183314263090E+023,4.94908052810693E+022,1.50154142236254E+019,2.47323892815408E+023,2.94411392365477E+004,2.95943570668110E+004,2.99181407220195E+004,2.93527253505987E+004,2.71172550010618E+004,2.97983109146798E+004,0.00000000000000E+000,0.00000000000000E+000,2.96372686594057E+004,2.95348145993597E+004,2.05105327381797E+004,0.00000000000000E+000,0.00000000000000E+000,1.88768999269681E+000,1.92403361877962E+000,1.86943949674332E+000,0.00000000000000E+000,0.00000000000000E+000,2.97513251473665E+004,2.93223011721182E+004,2.88988663932434E+004,2.94411392365477E+004,2.95943570668110E+004,2.97927241408368E+004,2.93945358753900E+004,2.58380174792745E+004,2.97086375624449E+004 +1.00000000000000E-009,9.55981372237483E+020,5.14027680255442E+021,1.93068196087375E+023,4.88751732979006E+022,1.50154142236254E+019,2.48054642974291E+023,2.86367519768083E+004,2.88729957214178E+004,2.98255240715941E+004,2.93383050586245E+004,2.71172550010618E+004,2.97050414131076E+004,0.00000000000000E+000,0.00000000000000E+000,2.97142020157192E+004,2.94699994234608E+004,2.05105327381797E+004,0.00000000000000E+000,0.00000000000000E+000,1.88797513730629E+000,1.92386871608761E+000,1.86943949674332E+000,0.00000000000000E+000,0.00000000000000E+000,2.96687959591485E+004,2.93082704643405E+004,2.88988663932434E+004,2.86367519768083E+004,2.88729957214178E+004,2.97495032544195E+004,2.93662220350941E+004,2.58380174792745E+004,2.96512953388736E+004 +1.20000000000000E-009,1.01604302913198E+021,6.33149966429537E+021,1.93028154982779E+023,4.82695515908811E+022,3.50359665217926E+019,2.48680285233609E+023,2.86488503610051E+004,2.89706283152839E+004,2.97596292740443E+004,2.92320060506608E+004,5.73793472200044E+004,2.96364807448531E+004,0.00000000000000E+000,0.00000000000000E+000,2.98015029304215E+004,2.94922129109855E+004,2.09023606792952E+004,0.00000000000000E+000,0.00000000000000E+000,1.88829696003029E+000,1.92392531217716E+000,1.87183232009149E+000,0.00000000000000E+000,0.00000000000000E+000,2.95768781461610E+004,2.92050603603683E+004,3.22758305920694E+004,2.86488503610051E+004,2.89706283152839E+004,2.97180468104272E+004,2.92965254040990E+004,4.01370994346664E+004,2.96142981871033E+004 +1.40000000000000E-009,1.20623827596457E+021,7.23242451771289E+021,1.92933057359363E+023,4.78190891641723E+022,3.50359665217926E+019,2.49225845283734E+023,2.84840515907102E+004,2.95571224737320E+004,2.97185366401227E+004,2.91845834812080E+004,5.70006899465647E+004,2.96092630775555E+004,0.00000000000000E+000,0.00000000000000E+000,2.97433882732237E+004,2.93216638010649E+004,4.12624806804298E+004,0.00000000000000E+000,0.00000000000000E+000,1.88808293446916E+000,1.92348861369476E+000,1.93435915210772E+000,0.00000000000000E+000,0.00000000000000E+000,2.95928819428820E+004,2.91148921697456E+004,3.03068636019016E+004,2.84840515907102E+004,2.95571224737320E+004,2.96888640226362E+004,2.92025353864420E+004,4.49114687247911E+004,2.95880375798611E+004 +1.60000000000000E-009,1.38141810857354E+021,8.29851892759030E+021,1.92832954597872E+023,4.72735291140472E+022,6.00616568945015E+019,2.49846482404977E+023,2.86867642676164E+004,2.94984554167954E+004,2.97242860979045E+004,2.91822092795121E+004,3.98847236388649E+004,2.96109247133606E+004,0.00000000000000E+000,0.00000000000000E+000,2.96674280502538E+004,2.92375017245207E+004,3.07912018951504E+004,0.00000000000000E+000,0.00000000000000E+000,1.88780194774853E+000,1.92327126055668E+000,1.91237094935467E+000,0.00000000000000E+000,0.00000000000000E+000,2.95174045386992E+004,2.91091889663655E+004,3.08814249327492E+004,2.86867642676164E+004,2.94984554167954E+004,2.96486306340187E+004,2.91764752479556E+004,3.47639359262870E+004,2.95502174446853E+004 +1.80000000000000E-009,1.60164418385337E+021,9.35960819939316E+021,1.92712831284083E+023,4.67329742019967E+022,8.00822091926687E+019,2.50487140078519E+023,2.79422947108478E+004,2.91348730966301E+004,2.96844662563647E+004,2.91686905296689E+004,3.57096095983991E+004,2.95584895595267E+004,0.00000000000000E+000,0.00000000000000E+000,2.96564931431577E+004,2.91388725030794E+004,2.11962177785985E+004,0.00000000000000E+000,0.00000000000000E+000,1.88776138193528E+000,1.92301496868420E+000,1.87357010646009E+000,0.00000000000000E+000,0.00000000000000E+000,2.94909522667653E+004,2.90366784859245E+004,3.31791891759074E+004,2.79422947108478E+004,2.91348730966301E+004,2.96206088551491E+004,2.91222707832996E+004,3.10173321643490E+004,2.94992001232121E+004 +2.00000000000000E-009,1.75179832608963E+021,1.03506255381524E+022,1.92627743936816E+023,4.62274552564680E+022,1.00102761490836E+020,2.51057725819016E+023,2.78875347624931E+004,2.90006805369060E+004,2.95970534757809E+004,2.91480966288306E+004,3.66197230676188E+004,2.94806710428893E+004,0.00000000000000E+000,0.00000000000000E+000,2.96555431636337E+004,2.92110220211138E+004,2.40754820286195E+004,0.00000000000000E+000,0.00000000000000E+000,1.88775785636071E+000,1.92320261970810E+000,1.88839749692052E+000,0.00000000000000E+000,0.00000000000000E+000,2.95099528517909E+004,2.88548144205871E+004,3.52402640471131E+004,2.78875347624931E+004,2.90006805369060E+004,2.95877925694671E+004,2.90808522965794E+004,3.27803059271810E+004,2.94596528563688E+004 +2.20000000000000E-009,1.92697815869859E+021,1.12765760819427E+022,1.92532646313399E+023,4.57569722774611E+022,1.15118175714461E+020,2.51608291007216E+023,2.74249762855216E+004,2.87724064528462E+004,2.95387116306815E+004,2.91740708320671E+004,4.03532666251462E+004,2.94268141751492E+004,0.00000000000000E+000,0.00000000000000E+000,2.96937573510003E+004,2.90251504279921E+004,2.24183763809179E+004,0.00000000000000E+000,0.00000000000000E+000,1.88789950281864E+000,1.92271732439977E+000,1.88031923595085E+000,0.00000000000000E+000,0.00000000000000E+000,2.95061830126065E+004,2.86909743858509E+004,3.28336517801555E+004,2.74249762855216E+004,2.87724064528462E+004,2.95717628536357E+004,2.89931411949593E+004,3.32660157086366E+004,2.94159591100977E+004 +2.40000000000000E-009,2.07212716286030E+021,1.21524752449875E+022,1.92452564104207E+023,4.53115149888269E+022,1.30133589938087E+020,2.52118815090819E+023,2.76491463921926E+004,2.86680723966045E+004,2.94975156246623E+004,2.91829759030631E+004,3.78656578331978E+004,2.93901331617428E+004,0.00000000000000E+000,0.00000000000000E+000,2.96410291010076E+004,2.89740771045963E+004,2.49401570077066E+004,0.00000000000000E+000,0.00000000000000E+000,1.88770396406514E+000,1.92258290032029E+000,1.89219461427802E+000,0.00000000000000E+000,0.00000000000000E+000,2.94770380401974E+004,2.87825640372393E+004,3.11339026611421E+004,2.76491463921926E+004,2.86680723966045E+004,2.95309020463877E+004,2.90092764318120E+004,3.23636261125041E+004,2.93815606842511E+004 +2.60000000000000E-009,2.31237379043831E+021,1.30333795461068E+022,1.92312420238119E+023,4.48510422859690E+022,1.70174694534421E+020,2.52679390555168E+023,2.75811380070012E+004,2.86291998134674E+004,2.94747750888819E+004,2.90790743113865E+004,3.40622902308556E+004,2.93466822772719E+004,0.00000000000000E+000,0.00000000000000E+000,2.95550804282082E+004,2.88254821384774E+004,2.41399937218230E+004,0.00000000000000E+000,0.00000000000000E+000,1.88738376403324E+000,1.92218912847699E+000,1.88868999848436E+000,0.00000000000000E+000,0.00000000000000E+000,2.95171179928280E+004,2.87784648731874E+004,2.98363182669950E+004,2.75811380070012E+004,2.86291998134674E+004,2.95090773449484E+004,2.89218016662702E+004,3.01149379603499E+004,2.93422148308485E+004 +2.80000000000000E-009,2.63270262720898E+021,1.39743455041207E+022,1.92142245543585E+023,4.43705490308130E+022,1.90195246832588E+020,2.53310037952560E+023,2.72483182956324E+004,2.84666399883897E+004,2.94738020485124E+004,2.90143345033771E+004,3.13025097764919E+004,2.93160014197861E+004,0.00000000000000E+000,0.00000000000000E+000,2.95322907485839E+004,2.87080456552794E+004,2.47681150039894E+004,0.00000000000000E+000,0.00000000000000E+000,1.88729855514935E+000,1.92187508080356E+000,1.89145983573220E+000,0.00000000000000E+000,0.00000000000000E+000,2.94383035146994E+004,2.87496547195329E+004,2.85716127935273E+004,2.72483182956324E+004,2.84666399883897E+004,2.94795210646399E+004,2.88528163512400E+004,2.87165062803194E+004,2.92901057619826E+004 +3.00000000000000E-009,2.83791328826520E+021,1.49803782571036E+022,1.92027127367870E+023,4.38550198091352E+022,2.15220937205297E+020,2.53915659659580E+023,2.71775976748123E+004,2.82952095246701E+004,2.94427190805389E+004,2.89541517438164E+004,3.11237911455365E+004,2.92667446104254E+004,0.00000000000000E+000,0.00000000000000E+000,2.94904003439200E+004,2.84680292707821E+004,2.58670531537132E+004,0.00000000000000E+000,0.00000000000000E+000,1.88714159342464E+000,1.92122528178548E+000,1.89598821386953E+000,0.00000000000000E+000,0.00000000000000E+000,2.94413077532883E+004,2.88163908013408E+004,2.82296893508112E+004,2.71775976748123E+004,2.82952095246701E+004,2.94553743511864E+004,2.87794033978304E+004,2.88391415236504E+004,2.92441971970566E+004 +3.20000000000000E-009,3.11820102043954E+021,1.59113339389684E+022,1.91876973225634E+023,4.33795316920537E+022,2.35241489503464E+020,2.54521281366599E+023,2.72517489115275E+004,2.83346089054933E+004,2.93958588195378E+004,2.89766300667652E+004,3.10562961524823E+004,2.92333301285312E+004,0.00000000000000E+000,0.00000000000000E+000,2.94486647872758E+004,2.85213065136278E+004,2.61112097168411E+004,0.00000000000000E+000,0.00000000000000E+000,1.88698477668614E+000,1.92137045135774E+000,1.89694349280782E+000,0.00000000000000E+000,0.00000000000000E+000,2.93714680228534E+004,2.87338100821200E+004,2.76365257388331E+004,2.72517489115275E+004,2.83346089054933E+004,2.94032441217448E+004,2.87800670884277E+004,2.87045166461438E+004,2.92032227183085E+004 +3.40000000000000E-009,3.25834488652671E+021,1.69223718300258E+022,1.91796891016442E+023,4.28640024703759E+022,2.55262041801632E+020,2.55096872245172E+023,2.73587760715648E+004,2.83608538987922E+004,2.93453188222199E+004,2.88703399249753E+004,2.97205956485477E+004,2.91752029551952E+004,0.00000000000000E+000,0.00000000000000E+000,2.93648913783440E+004,2.85655778856763E+004,2.63708143014940E+004,0.00000000000000E+000,0.00000000000000E+000,1.88666868891475E+000,1.92149067544437E+000,1.89794015758341E+000,0.00000000000000E+000,0.00000000000000E+000,2.94341003385693E+004,2.85857097927000E+004,2.71908824032390E+004,2.73587760715648E+004,2.83608538987922E+004,2.93764644996423E+004,2.87034889191088E+004,2.80654477685298E+004,2.91689278713705E+004 +3.60000000000000E-009,3.48858123795563E+021,1.80034816541268E+022,1.91661752288429E+023,4.23034270060272E+022,2.95303146397966E+020,2.55752545332937E+023,2.67810675394705E+004,2.81076708852188E+004,2.93328281001648E+004,2.88143030114512E+004,2.84316663462273E+004,2.91249684930127E+004,0.00000000000000E+000,0.00000000000000E+000,2.93084177941753E+004,2.84919685359603E+004,2.48793923103366E+004,0.00000000000000E+000,0.00000000000000E+000,1.88645460766110E+000,1.92129057762851E+000,1.89193623146725E+000,0.00000000000000E+000,0.00000000000000E+000,2.94122532806804E+004,2.86132300951579E+004,2.67850789625224E+004,2.67810675394705E+004,2.81076708852188E+004,2.93492082889919E+004,2.86667230172672E+004,2.69786855896309E+004,2.91111553221504E+004 +3.80000000000000E-009,3.67377134671368E+021,1.87692677795317E+022,1.91536623836565E+023,4.18880005458403E+022,3.60369941367009E+020,2.56228033450018E+023,2.63411533107321E+004,2.79148766459955E+004,2.93044669235728E+004,2.88311999129120E+004,2.85523992956149E+004,2.90817615495143E+004,0.00000000000000E+000,0.00000000000000E+000,2.92316900255346E+004,2.83869616865553E+004,2.45095849250159E+004,0.00000000000000E+000,0.00000000000000E+000,1.88616244767186E+000,1.92100335814643E+000,1.89033665027016E+000,0.00000000000000E+000,0.00000000000000E+000,2.94758290156835E+004,2.85471329877032E+004,2.51462178449951E+004,2.63411533107321E+004,2.79148766459955E+004,2.93343028639307E+004,2.86258081652845E+004,2.64545855297730E+004,2.90675368632991E+004 +4.00000000000000E-009,3.89900256006806E+021,1.95951155618311E+022,1.91406490246627E+023,4.14575586714297E+022,3.95405907888802E+020,2.56753572947845E+023,2.62234562664012E+004,2.78929397207128E+004,2.92315391571112E+004,2.88229710036491E+004,2.75026427831676E+004,2.90150654896382E+004,0.00000000000000E+000,0.00000000000000E+000,2.92683979444078E+004,2.82257244310605E+004,2.59251566203940E+004,0.00000000000000E+000,0.00000000000000E+000,1.88630240945081E+000,1.92055823200433E+000,1.89621714931539E+000,0.00000000000000E+000,0.00000000000000E+000,2.94724177801524E+004,2.84205415269503E+004,2.59220434108165E+004,2.62234562664012E+004,2.78929397207128E+004,2.93115943206215E+004,2.85409264474900E+004,2.66104935184113E+004,2.90278304066403E+004 +4.20000000000000E-009,4.09920808304973E+021,2.05761226244413E+022,1.91296377208987E+023,4.09570448639755E+022,4.15426460186969E+020,2.57344179240641E+023,2.59584251688575E+004,2.79792164143216E+004,2.91829986173141E+004,2.88624553081434E+004,2.65184157408449E+004,2.89800687789665E+004,0.00000000000000E+000,0.00000000000000E+000,2.92468856268271E+004,2.82350514972446E+004,2.45082085940749E+004,0.00000000000000E+000,0.00000000000000E+000,1.88622042797649E+000,1.92058411777338E+000,1.89033060860557E+000,0.00000000000000E+000,0.00000000000000E+000,2.94184298700445E+004,2.83002080195412E+004,2.58836543110358E+004,2.59584251688575E+004,2.79792164143216E+004,2.92688755499612E+004,2.85258541871680E+004,2.57826776105926E+004,2.89891465588020E+004 +4.40000000000000E-009,4.36948553907499E+021,2.16071810677969E+022,1.91131207652528E+023,4.04114848138504E+022,4.75488117081470E+020,2.57994847190331E+023,2.55472595392559E+004,2.78393577709467E+004,2.91531338383059E+004,2.88305178678445E+004,2.64964518722967E+004,2.89266044145264E+004,0.00000000000000E+000,0.00000000000000E+000,2.92445056235412E+004,2.82052927658044E+004,2.52731347992532E+004,0.00000000000000E+000,0.00000000000000E+000,1.88621135074052E+000,1.92050146820740E+000,1.89358885219113E+000,0.00000000000000E+000,0.00000000000000E+000,2.93348306421869E+004,2.83107770187332E+004,2.61041646388728E+004,2.55472595392559E+004,2.78393577709467E+004,2.92309328019047E+004,2.85068090390924E+004,2.60466086766045E+004,2.89327067083225E+004 +4.60000000000000E-009,4.62975271895116E+021,2.24080031597236E+022,1.90971043234142E+023,3.99810429394399E+022,5.35549773975972E+020,2.58525391826233E+023,2.51989450030068E+004,2.76410534988905E+004,2.91376347563642E+004,2.86298087088614E+004,2.55614057909202E+004,2.88514376434098E+004,0.00000000000000E+000,0.00000000000000E+000,2.92813743046510E+004,2.82616115477084E+004,2.71217920793808E+004,0.00000000000000E+000,0.00000000000000E+000,1.88635180409518E+000,1.92065773859907E+000,1.90071772828127E+000,0.00000000000000E+000,0.00000000000000E+000,2.92726773032468E+004,2.82671310893270E+004,2.72721909794898E+004,2.51989450030068E+004,2.76410534988905E+004,2.92162291217688E+004,2.84228145155237E+004,2.64870231701684E+004,2.88794005384615E+004 +4.80000000000000E-009,4.95508669379638E+021,2.32538714943212E+022,1.90795863401533E+023,3.95455959269547E+022,5.60575464348681E+020,2.59110992980954E+023,2.48329786820119E+004,2.76070341157134E+004,2.90767459796200E+004,2.85893539954330E+004,2.79131580683246E+004,2.87867883436319E+004,0.00000000000000E+000,0.00000000000000E+000,2.93003434182654E+004,2.83640454775269E+004,2.76098995230972E+004,0.00000000000000E+000,0.00000000000000E+000,1.88642393306870E+000,1.92094039787559E+000,1.90244341108994E+000,0.00000000000000E+000,0.00000000000000E+000,2.92072537379358E+004,2.81052962433567E+004,2.71875440218162E+004,2.48329786820119E+004,2.76070341157134E+004,2.91758997759738E+004,2.83869364542252E+004,2.76193258420461E+004,2.88282713260071E+004 +5.00000000000000E-009,5.16530249292713E+021,2.42548991092295E+022,1.90665729811595E+023,3.90200564291278E+022,6.10626845094099E+020,2.59716614687974E+023,2.49735786262029E+004,2.76724550192168E+004,2.90492231384212E+004,2.84177554785796E+004,2.91143993650548E+004,2.87448705884357E+004,0.00000000000000E+000,0.00000000000000E+000,2.93727327647007E+004,2.83096679700882E+004,2.71404806240749E+004,0.00000000000000E+000,0.00000000000000E+000,1.88669835042224E+000,1.92079059815674E+000,1.90078492374529E+000,0.00000000000000E+000,0.00000000000000E+000,2.90551304938335E+004,2.81109141390674E+004,2.64265580668281E+004,2.49735786262029E+004,2.76724550192168E+004,2.91395682874916E+004,2.82990846219102E+004,2.77916980084891E+004,2.87902566077957E+004 +5.20000000000000E-009,5.36550801590880E+021,2.51958650672434E+022,1.90535596221657E+023,3.85195426216737E+022,6.70688501988600E+020,2.60287200428471E+023,2.46737704974925E+004,2.75598073328012E+004,2.90677993363649E+004,2.83182654848479E+004,2.85068992786969E+004,2.87188799495828E+004,0.00000000000000E+000,0.00000000000000E+000,2.93074386427919E+004,2.84048878462081E+004,2.72219696954037E+004,0.00000000000000E+000,0.00000000000000E+000,1.88645088874285E+000,1.92105253884911E+000,1.90107686164811E+000,0.00000000000000E+000,0.00000000000000E+000,2.90067175181777E+004,2.79918915209719E+004,2.66942726598523E+004,2.46737704974925E+004,2.75598073328012E+004,2.91157056020949E+004,2.82479955630679E+004,2.76276157612132E+004,2.87412835034335E+004 +5.40000000000000E-009,5.53568271044322E+021,2.62369337867481E+022,1.90425483184017E+023,3.79739825715486E+022,7.20739882734018E+020,2.60892822135491E+023,2.51741096488217E+004,2.73654535524687E+004,2.90781792231051E+004,2.82193582090845E+004,2.90786579006676E+004,2.86980964409768E+004,0.00000000000000E+000,0.00000000000000E+000,2.93104050956510E+004,2.84356041010156E+004,2.67369833640607E+004,0.00000000000000E+000,0.00000000000000E+000,1.88646215488910E+000,1.92113666719737E+000,1.89931362020917E+000,0.00000000000000E+000,0.00000000000000E+000,2.89241052643327E+004,2.77252764886743E+004,2.64021844424970E+004,2.51741096488217E+004,2.73654535524687E+004,2.90970477508740E+004,2.81366079967653E+004,2.76581511956081E+004,2.86958996674727E+004 +5.60000000000000E-009,5.77592933802123E+021,2.73680949915945E+022,1.90285339317930E+023,3.73883814168272E+022,7.60780987330353E+020,2.61578526051703E+023,2.48633034930897E+004,2.73440510832349E+004,2.90525502374771E+004,2.80932413913267E+004,2.99371366252274E+004,2.86467478558571E+004,0.00000000000000E+000,0.00000000000000E+000,2.92077473008789E+004,2.83866222017765E+004,2.69143184658607E+004,0.00000000000000E+000,0.00000000000000E+000,1.88607097190730E+000,1.92100242617347E+000,1.89996558940297E+000,0.00000000000000E+000,0.00000000000000E+000,2.89675808582951E+004,2.75744754019239E+004,2.67911981615618E+004,2.48633034930897E+004,2.73440510832349E+004,2.90703795509338E+004,2.80247618993464E+004,2.81929065624523E+004,2.86448568081430E+004 +5.80000000000000E-009,6.08624789864282E+021,2.82790301211611E+022,1.90110159485321E+023,3.69128932997457E+022,8.00822091926687E+020,2.62189152896797E+023,2.44312927104599E+004,2.74782200803855E+004,2.90092823545246E+004,2.80145856027173E+004,2.93720828282191E+004,2.85989437449328E+004,0.00000000000000E+000,0.00000000000000E+000,2.91663464851547E+004,2.82927805142985E+004,2.72281065099947E+004,0.00000000000000E+000,0.00000000000000E+000,1.88591244838523E+000,1.92074396084936E+000,1.90109877750769E+000,0.00000000000000E+000,0.00000000000000E+000,2.89318843275528E+004,2.75201601647967E+004,2.90375062990596E+004,2.44312927104599E+004,2.74782200803855E+004,2.90298189422705E+004,2.79489120736785E+004,2.86845019126458E+004,2.86024884530345E+004 +6.00000000000000E-009,6.36153049274262E+021,2.92149909411005E+022,1.89944989928861E+023,3.64173846303661E+022,8.55878610746647E+020,2.62794774603817E+023,2.46499690791709E+004,2.73789768793042E+004,2.89997172638086E+004,2.80349714678551E+004,2.86302054376030E+004,2.85793483751186E+004,0.00000000000000E+000,0.00000000000000E+000,2.91097243120239E+004,2.80394854157186E+004,2.72769975793308E+004,0.00000000000000E+000,0.00000000000000E+000,1.88569492703069E+000,1.92003780060321E+000,1.90127303168949E+000,0.00000000000000E+000,0.00000000000000E+000,2.89125345803427E+004,2.74381121278535E+004,2.66033107732602E+004,2.46499690791709E+004,2.73789768793042E+004,2.90045206084493E+004,2.78637221533828E+004,2.76700047752816E+004,2.85559616996355E+004 +6.20000000000000E-009,6.65683363914059E+021,3.04312394932141E+022,1.89769810096252E+023,3.57817320948993E+022,9.10935129566607E+020,2.63550550453073E+023,2.48570951809896E+004,2.71906431785230E+004,2.89671641407381E+004,2.79555443146866E+004,2.77226330081588E+004,2.85165751486137E+004,0.00000000000000E+000,0.00000000000000E+000,2.90466546059191E+004,2.79609654072043E+004,2.71392461054983E+004,0.00000000000000E+000,0.00000000000000E+000,1.88545165844579E+000,1.91981633340225E+000,1.90078048778586E+000,0.00000000000000E+000,0.00000000000000E+000,2.88773943411023E+004,2.75318215148647E+004,2.59024076029573E+004,2.48570951809896E+004,2.71906431785230E+004,2.89628559019563E+004,2.78345818415003E+004,2.70344005306563E+004,2.84946713597743E+004 +6.40000000000000E-009,6.96214706168764E+021,3.12971283801098E+022,1.89599635401718E+023,3.53312696681905E+022,9.45971096088399E+020,2.64136151607794E+023,2.48679202514270E+004,2.71754298172532E+004,2.89717735347929E+004,2.79353629969300E+004,2.69138045307183E+004,2.85047548829921E+004,0.00000000000000E+000,0.00000000000000E+000,2.89808627249297E+004,2.80121317980768E+004,2.64296835036746E+004,0.00000000000000E+000,0.00000000000000E+000,1.88519678456954E+000,1.91996078816204E+000,1.89816349145783E+000,0.00000000000000E+000,0.00000000000000E+000,2.88111961673207E+004,2.73215456265760E+004,2.64741743931164E+004,2.48679202514270E+004,2.71754298172532E+004,2.89276179598055E+004,2.77792578272880E+004,2.66531262883989E+004,2.84512450973745E+004 +6.60000000000000E-009,7.25244507001106E+021,3.22681251665709E+022,1.89429460707183E+023,3.48207455845873E+022,9.96022476833817E+020,2.64766799005186E+023,2.51748019881191E+004,2.71429363709946E+004,2.89143993141875E+004,2.77986241471708E+004,2.73623280380007E+004,2.84434904474578E+004,0.00000000000000E+000,0.00000000000000E+000,2.89566014707729E+004,2.80212298902899E+004,2.65180190221446E+004,0.00000000000000E+000,0.00000000000000E+000,1.88510251153798E+000,1.91998641974170E+000,1.89849678542372E+000,0.00000000000000E+000,0.00000000000000E+000,2.87889067204560E+004,2.71766639879561E+004,2.64815167298155E+004,2.51748019881191E+004,2.71429363709946E+004,2.88895006586041E+004,2.76806296504829E+004,2.68746072093143E+004,2.84083237415421E+004 +6.80000000000000E-009,7.47767628336544E+021,3.30839626727213E+022,1.89279306564947E+023,3.43752882959530E+022,1.07109954795194E+021,2.65287333364939E+023,2.50586148425951E+004,2.71535263452060E+004,2.88810282319268E+004,2.77734244328905E+004,2.81879214909196E+004,2.84115298863757E+004,0.00000000000000E+000,0.00000000000000E+000,2.88896131207528E+004,2.79266580456031E+004,2.66350421404110E+004,0.00000000000000E+000,0.00000000000000E+000,1.88484140648810E+000,1.91971918333106E+000,1.89893497511590E+000,0.00000000000000E+000,0.00000000000000E+000,2.87871441392071E+004,2.70937791398954E+004,2.70046052671240E+004,2.50586148425951E+004,2.71535263452060E+004,2.88561057941567E+004,2.76194983772348E+004,2.74174475876896E+004,2.83706918697600E+004 +7.00000000000000E-009,7.72292804901799E+021,3.39098104550207E+022,1.89139162698860E+023,3.39448464215424E+022,1.10613551447374E+021,2.65822883138915E+023,2.51773489909771E+004,2.71317383636398E+004,2.88413651701422E+004,2.76933033539704E+004,2.79262554781864E+004,2.83664133144144E+004,0.00000000000000E+000,0.00000000000000E+000,2.88067849056143E+004,2.79482163295867E+004,2.65155257997990E+004,0.00000000000000E+000,0.00000000000000E+000,1.88451691654207E+000,1.91978025858774E+000,1.89848740829364E+000,0.00000000000000E+000,0.00000000000000E+000,2.88053187740027E+004,2.70456310236655E+004,2.63549039362159E+004,2.51773489909771E+004,2.71317383636398E+004,2.88214276948735E+004,2.75768303256017E+004,2.70824537474088E+004,2.83338428471987E+004 +7.20000000000000E-009,8.03324660963958E+021,3.48407661368854E+022,1.88943962313953E+023,3.34393274760137E+022,1.18621772366641E+021,2.66443520260158E+023,2.54731002987129E+004,2.70999676333624E+004,2.88193949358025E+004,2.76518038067684E+004,2.88099320643863E+004,2.83470904804090E+004,0.00000000000000E+000,0.00000000000000E+000,2.87423468797727E+004,2.78890464249006E+004,2.66191519760887E+004,0.00000000000000E+000,0.00000000000000E+000,1.88426320548688E+000,1.91961240558164E+000,1.89887569690042E+000,0.00000000000000E+000,0.00000000000000E+000,2.87158268490944E+004,2.70433272792489E+004,2.68441484657071E+004,2.54731002987129E+004,2.70999676333624E+004,2.87682180734526E+004,2.75417486277348E+004,2.76370472901447E+004,2.82917653330159E+004 +7.40000000000000E-009,8.32354461796300E+021,3.57717218187502E+022,1.88753767067120E+023,3.29288033924105E+022,1.27631020900816E+021,2.67054147105252E+023,2.57659904791063E+004,2.68897953782278E+004,2.88033741193323E+004,2.76006004657209E+004,2.86402559742985E+004,2.83032961665160E+004,0.00000000000000E+000,0.00000000000000E+000,2.86913814648289E+004,2.77204748517914E+004,2.59730569867689E+004,0.00000000000000E+000,0.00000000000000E+000,1.88406174939232E+000,1.91913032865418E+000,1.89640512691533E+000,0.00000000000000E+000,0.00000000000000E+000,2.86969486586150E+004,2.70310779647135E+004,2.71815688239988E+004,2.57659904791063E+004,2.68897953782278E+004,2.87418040734165E+004,2.74692269564933E+004,2.74837890921649E+004,2.82380526148306E+004 +7.60000000000000E-009,8.67390428318093E+021,3.66626363960186E+022,1.88543551267989E+023,3.24483101372545E+022,1.34638214205174E+021,2.67674784226495E+023,2.59593467606774E+004,2.68434264485045E+004,2.87504800273178E+004,2.76034933437663E+004,2.78090616369530E+004,2.82550544919332E+004,0.00000000000000E+000,0.00000000000000E+000,2.85804120050421E+004,2.75698275396876E+004,2.53321373936348E+004,0.00000000000000E+000,0.00000000000000E+000,1.88362067512173E+000,1.91869459325904E+000,1.89383215523424E+000,0.00000000000000E+000,0.00000000000000E+000,2.87583424390700E+004,2.68826278970414E+004,2.73315336032559E+004,2.59593467606774E+004,2.68434264485045E+004,2.87062273245894E+004,2.73857752078652E+004,2.69900781284580E+004,2.81933721330961E+004 +7.80000000000000E-009,9.02926908647340E+021,3.76686691490015E+022,1.88338340606933E+023,3.19177655013530E+022,1.40143866087170E+021,2.68355483004633E+023,2.59390358774844E+004,2.67353610841750E+004,2.86785369699061E+004,2.76290482066530E+004,2.77529775910222E+004,2.81839430398088E+004,0.00000000000000E+000,0.00000000000000E+000,2.84995384416588E+004,2.74017020079852E+004,2.53973253709167E+004,0.00000000000000E+000,0.00000000000000E+000,1.88329710489631E+000,1.91820272668787E+000,1.89409967434494E+000,0.00000000000000E+000,0.00000000000000E+000,2.88079493860743E+004,2.67953805135631E+004,2.75465902974181E+004,2.59390358774844E+004,2.67353610841750E+004,2.86671641384709E+004,2.73250051527754E+004,2.70459070639859E+004,2.81361063758238E+004 +8.00000000000000E-009,9.33958764709499E+021,3.83894090317356E+022,1.88148145360101E+023,3.15223595934642E+022,1.47151059391529E+021,2.68871012226311E+023,2.60144544186523E+004,2.67466309309895E+004,2.86659503706601E+004,2.75438647700483E+004,2.76392401872696E+004,2.81626346079823E+004,0.00000000000000E+000,0.00000000000000E+000,2.84185191306970E+004,2.72975287354094E+004,2.63768474914363E+004,0.00000000000000E+000,0.00000000000000E+000,1.88297114313743E+000,1.91789496150277E+000,1.89796309090580E+000,0.00000000000000E+000,0.00000000000000E+000,2.87496290581371E+004,2.69299291601802E+004,2.69993805656612E+004,2.60144544186523E+004,2.67466309309895E+004,2.86225754234754E+004,2.72980793296985E+004,2.71063736094557E+004,2.81005499244100E+004 +8.20000000000000E-009,9.65991648386566E+021,3.92202619521095E+022,1.87952944975193E+023,3.10718971667555E+022,1.54158252695887E+021,2.69446603104883E+023,2.59398720499941E+004,2.67293738052485E+004,2.86793291987538E+004,2.73731604381279E+004,2.74926435388923E+004,2.81398709082716E+004,0.00000000000000E+000,0.00000000000000E+000,2.84768277652721E+004,2.71079838253769E+004,2.68756741858818E+004,0.00000000000000E+000,0.00000000000000E+000,1.88320591716448E+000,1.91732899755358E+000,1.89982423472299E+000,0.00000000000000E+000,0.00000000000000E+000,2.85976008270961E+004,2.67913743799663E+004,2.68981733210757E+004,2.59398720499941E+004,2.67293738052485E+004,2.86001787784934E+004,2.71314482214594E+004,2.71504502185636E+004,2.80548279695088E+004 +8.40000000000000E-009,9.90016311144367E+021,4.00310943201853E+022,1.87812801109106E+023,3.06464604304194E+022,1.58162363155521E+021,2.69972142602710E+023,2.58576063334799E+004,2.67106081206868E+004,2.86887885106962E+004,2.73093959667936E+004,2.72512560034975E+004,2.81266378233565E+004,0.00000000000000E+000,0.00000000000000E+000,2.83455713226092E+004,2.71989414754947E+004,2.69661375231614E+004,0.00000000000000E+000,0.00000000000000E+000,1.88267609404471E+000,1.91760155920256E+000,1.90015451060023E+000,0.00000000000000E+000,0.00000000000000E+000,2.85868515558441E+004,2.67126477517024E+004,2.66534696942598E+004,2.58576063334799E+004,2.67106081206868E+004,2.85652841218268E+004,2.71062469240378E+004,2.69994729771504E+004,2.80161829815341E+004 +8.60000000000000E-009,1.01303994628726E+022,4.07818650313665E+022,1.87677662381094E+023,3.02510545225306E+022,1.62166473615154E+021,2.70462646134015E+023,2.62863412398158E+004,2.66566718113387E+004,2.86501263259125E+004,2.72327771408804E+004,2.70281526505397E+004,2.80927499663040E+004,0.00000000000000E+000,0.00000000000000E+000,2.83572873213527E+004,2.70802138279937E+004,2.65614273801052E+004,0.00000000000000E+000,0.00000000000000E+000,1.88272358147879E+000,1.91724542301114E+000,1.89865976924193E+000,0.00000000000000E+000,0.00000000000000E+000,2.85428255463058E+004,2.65376012362358E+004,2.61917527331391E+004,2.62863412398158E+004,2.66566718113387E+004,2.85388424061665E+004,2.69894934318707E+004,2.66572179451534E+004,2.79860933658171E+004 +8.80000000000000E-009,1.04257026092706E+022,4.14175175668334E+022,1.87477456858112E+023,2.98806743050145E+022,1.72677263571692E+021,2.70928123974947E+023,2.64834527338811E+004,2.66232466881054E+004,2.86017621334469E+004,2.71680765215271E+004,2.70630548132839E+004,2.80498572578121E+004,0.00000000000000E+000,0.00000000000000E+000,2.84080495382375E+004,2.70155403421740E+004,2.58118008347267E+004,0.00000000000000E+000,0.00000000000000E+000,1.88292888839775E+000,1.91705013002382E+000,1.89576957376925E+000,0.00000000000000E+000,0.00000000000000E+000,2.84349696516622E+004,2.65865034444365E+004,2.56134060848931E+004,2.64834527338811E+004,2.66232466881054E+004,2.85003035804880E+004,2.69576449604884E+004,2.62986170486521E+004,2.79515690541102E+004 +9.00000000000000E-009,1.07910776887121E+022,4.22333550729837E+022,1.87267241058981E+023,2.94452272925294E+022,1.78182915453688E+021,2.71518730267743E+023,2.64646351823239E+004,2.65271984776857E+004,2.85897559521653E+004,2.70858445600237E+004,2.67023570199831E+004,2.80089963833469E+004,0.00000000000000E+000,0.00000000000000E+000,2.82984547456570E+004,2.69854780817158E+004,2.62178668649430E+004,0.00000000000000E+000,0.00000000000000E+000,1.88248473175795E+000,1.91695903764180E+000,1.89735531288702E+000,0.00000000000000E+000,0.00000000000000E+000,2.84237093004084E+004,2.65781094143839E+004,2.66315224034333E+004,2.64646351823239E+004,2.65271984776857E+004,2.84618278257075E+004,2.69112203194615E+004,2.65485416581988E+004,2.79008172149454E+004 +9.20000000000000E-009,1.11364322158555E+022,4.28890281607486E+022,1.87062030397925E+023,2.90848573511624E+022,1.84689594950592E+021,2.72019244075197E+023,2.62645177064547E+004,2.65918630986142E+004,2.85223494699426E+004,2.70511547848270E+004,2.60656671845577E+004,2.79515530934764E+004,0.00000000000000E+000,0.00000000000000E+000,2.82658963149322E+004,2.68920927500321E+004,2.65071557655543E+004,0.00000000000000E+000,0.00000000000000E+000,1.88235213187701E+000,1.91667478833896E+000,1.89845591551773E+000,0.00000000000000E+000,0.00000000000000E+000,2.84306857577520E+004,2.64791229171445E+004,2.64958109574941E+004,2.62645177064547E+004,2.65918630986142E+004,2.84255711367974E+004,2.68416706075919E+004,2.63118721578009E+004,2.78642737760819E+004 +9.40000000000000E-009,1.14067096718807E+022,4.36598194242281E+022,1.86886850565316E+023,2.86594206148263E+022,1.92697815869859E+021,2.72539778434950E+023,2.63511438486238E+004,2.65867930907391E+004,2.84816891031212E+004,2.70483287436162E+004,2.65128020754701E+004,2.79243150218170E+004,0.00000000000000E+000,0.00000000000000E+000,2.82188008906171E+004,2.66942376374862E+004,2.60728812919083E+004,0.00000000000000E+000,0.00000000000000E+000,1.88215979743309E+000,1.91606607583733E+000,1.89679469267139E+000,0.00000000000000E+000,0.00000000000000E+000,2.84079080519139E+004,2.64020672398063E+004,2.66041752589322E+004,2.63511438486238E+004,2.65867930907391E+004,2.83883521644107E+004,2.67633423160404E+004,2.64183099135932E+004,2.78296753442820E+004 +9.60000000000000E-009,1.18071207178441E+022,4.44005798592603E+022,1.86656614213887E+023,2.82590095688630E+022,1.98703981559309E+021,2.73110364175448E+023,2.63665543233473E+004,2.65596022074180E+004,2.84315837985353E+004,2.69016929928848E+004,2.58814873709077E+004,2.78611204147937E+004,0.00000000000000E+000,0.00000000000000E+000,2.81993964410785E+004,2.68034648104174E+004,2.53454605665791E+004,0.00000000000000E+000,0.00000000000000E+000,1.88208036802758E+000,1.91640321445249E+000,1.89388694080841E+000,0.00000000000000E+000,0.00000000000000E+000,2.83742880359000E+004,2.62324062024222E+004,2.68106546986573E+004,2.63665543233473E+004,2.65596022074180E+004,2.83514355347913E+004,2.66809397576823E+004,2.60037929001538E+004,2.77843915603670E+004 +9.80000000000001E-009,1.21424649688384E+022,4.51463454323670E+022,1.86456408690905E+023,2.78535933848251E+022,2.05210661056214E+021,2.73650919087498E+023,2.60468367416214E+004,2.64789415606213E+004,2.83987501602492E+004,2.69344043786636E+004,2.50442887944472E+004,2.78034611937068E+004,0.00000000000000E+000,0.00000000000000E+000,2.81691928934561E+004,2.66940747743889E+004,2.57070488767197E+004,0.00000000000000E+000,0.00000000000000E+000,1.88195652084027E+000,1.91606557111712E+000,1.89535252504710E+000,0.00000000000000E+000,0.00000000000000E+000,2.83532974158162E+004,2.62473407047857E+004,2.67861380492067E+004,2.60468367416214E+004,2.64789415606213E+004,2.83227656226500E+004,2.66691358369817E+004,2.57316883853655E+004,2.77298423331631E+004 +1.00000000000000E-008,1.23376653537455E+022,4.60322548715609E+022,1.86321269962893E+023,2.73731001296691E+022,2.12718368168026E+021,2.74191473999549E+023,2.61463376027814E+004,2.63805608994757E+004,2.83733595207594E+004,2.69385595551357E+004,2.58118207509038E+004,2.77754815145357E+004,0.00000000000000E+000,0.00000000000000E+000,2.81695496628557E+004,2.66388536246975E+004,2.49882891650294E+004,0.00000000000000E+000,0.00000000000000E+000,1.88195798526177E+000,1.91589408764779E+000,1.89239840614673E+000,0.00000000000000E+000,0.00000000000000E+000,2.82801593331994E+004,2.61285818509074E+004,2.65291533608329E+004,2.61463376027814E+004,2.63805608994757E+004,2.82905397816826E+004,2.66212961325314E+004,2.57938611621848E+004,2.76873906436237E+004 +1.02000000000000E-008,1.26379736382180E+022,4.70132619341711E+022,1.86131074716060E+023,2.68425554937676E+022,2.20726589087293E+021,2.74832131673090E+023,2.60352160967666E+004,2.63105138389974E+004,2.83583987430532E+004,2.66978606294857E+004,2.61260499746551E+004,2.77211423089684E+004,0.00000000000000E+000,0.00000000000000E+000,2.81337227459567E+004,2.65324804483301E+004,2.58950984640452E+004,0.00000000000000E+000,0.00000000000000E+000,1.88181074597667E+000,1.91556177462613E+000,1.89609884207723E+000,0.00000000000000E+000,0.00000000000000E+000,2.82515864478562E+004,2.59820352562077E+004,2.65670840671893E+004,2.60352160967666E+004,2.63105138389974E+004,2.82659198418475E+004,2.64450327672181E+004,2.61904575916856E+004,2.76343344880930E+004 +1.04000000000000E-008,1.30684155126286E+022,4.76739401600106E+022,1.85850786983886E+023,2.64471495858788E+022,2.33739948081102E+021,2.75377691723215E+023,2.58761359781581E+004,2.62909452673572E+004,2.83344761797486E+004,2.66012992806847E+004,2.60799458597500E+004,2.76784422532691E+004,0.00000000000000E+000,0.00000000000000E+000,2.80663686487982E+004,2.64426589515761E+004,2.59945576661247E+004,0.00000000000000E+000,0.00000000000000E+000,1.88153294190083E+000,1.91527911824462E+000,1.89648928184087E+000,0.00000000000000E+000,0.00000000000000E+000,2.82094314988476E+004,2.60474925262909E+004,2.64634013348998E+004,2.58761359781581E+004,2.62909452673572E+004,2.82248287335142E+004,2.63971926937623E+004,2.61676677616583E+004,2.75855841124327E+004 +1.06000000000000E-008,1.32736261736848E+022,4.84797673900118E+022,1.85715648255873E+023,2.60117025733937E+022,2.40246627578006E+021,2.75883210668744E+023,2.57317158957470E+004,2.63975990662887E+004,2.82780771529942E+004,2.64662753928586E+004,2.63736499294913E+004,2.76377048812824E+004,0.00000000000000E+000,0.00000000000000E+000,2.80027407943042E+004,2.62625057312956E+004,2.65199704877607E+004,0.00000000000000E+000,0.00000000000000E+000,1.88126930509030E+000,1.91470645849616E+000,1.89850412377230E+000,0.00000000000000E+000,0.00000000000000E+000,2.82060104096112E+004,2.60725097644943E+004,2.71736436304785E+004,2.57317158957470E+004,2.63975990662887E+004,2.81818572119355E+004,2.62959586410431E+004,2.66458506198947E+004,2.75592447807603E+004 +1.08000000000000E-008,1.35689293200828E+022,4.93756871053548E+022,1.85550478699413E+023,2.55462247324613E+022,2.43750224230185E+021,2.76478822099614E+023,2.56780273975902E+004,2.63178784959992E+004,2.82609400460874E+004,2.64970894298131E+004,2.61101225150505E+004,2.76052308539446E+004,0.00000000000000E+000,0.00000000000000E+000,2.79382374707565E+004,2.60155652542767E+004,2.63322950787777E+004,0.00000000000000E+000,0.00000000000000E+000,1.88100084092722E+000,1.91390880609644E+000,1.89779349527711E+000,0.00000000000000E+000,0.00000000000000E+000,2.81955068639896E+004,2.59483025839360E+004,2.73353733813491E+004,2.56780273975902E+004,2.63178784959992E+004,2.81537070727424E+004,2.62050452174449E+004,2.65265077519867E+004,2.75099511631938E+004 +1.10000000000000E-008,1.38792478807044E+022,5.01464783688342E+022,1.85370293728730E+023,2.51358034103489E+022,2.48755362304727E+021,2.77019377011665E+023,2.58136168525323E+004,2.62056363619275E+004,2.82086012020214E+004,2.62887553583090E+004,2.58292523379719E+004,2.75304614917103E+004,0.00000000000000E+000,0.00000000000000E+000,2.78917982352221E+004,2.59690153740135E+004,2.62868901311137E+004,0.00000000000000E+000,0.00000000000000E+000,1.88080680729656E+000,1.91375676962527E+000,1.89762007348491E+000,0.00000000000000E+000,0.00000000000000E+000,2.82547539754942E+004,2.57527093861818E+004,2.73516279219444E+004,2.58136168525323E+004,2.62056363619275E+004,2.81354208841191E+004,2.60451835116513E+004,2.63965746591358E+004,2.74644856506687E+004 +1.12000000000000E-008,1.41945715794005E+022,5.08121617327483E+022,1.85160077929599E+023,2.47504077786092E+022,2.59266152261265E+021,2.77509880542970E+023,2.59554929963602E+004,2.62112873411039E+004,2.81641518795688E+004,2.61818226926281E+004,2.54208984793760E+004,2.74911811792713E+004,0.00000000000000E+000,0.00000000000000E+000,2.78389587737569E+004,2.57955661203722E+004,2.77514491140170E+004,0.00000000000000E+000,0.00000000000000E+000,1.88058526139535E+000,1.91318550893454E+000,1.90293269196045E+000,0.00000000000000E+000,0.00000000000000E+000,2.82047336609825E+004,2.58547817419836E+004,2.74567599487963E+004,2.59554929963602E+004,2.62112873411039E+004,2.80870668963995E+004,2.59803146647791E+004,2.66532158597375E+004,2.74332895991098E+004 +1.14000000000000E-008,1.44248079308295E+022,5.15228913393332E+022,1.85009923787363E+023,2.43600070087949E+022,2.66273345565623E+021,2.77980363521977E+023,2.60649904100682E+004,2.61407115071218E+004,2.81540940892657E+004,2.61140817809817E+004,2.53595688522795E+004,2.74669736075406E+004,0.00000000000000E+000,0.00000000000000E+000,2.78265896937839E+004,2.55464312677446E+004,2.71848257677521E+004,0.00000000000000E+000,0.00000000000000E+000,1.88053328121430E+000,1.91235160934988E+000,1.90094400532258E+000,0.00000000000000E+000,0.00000000000000E+000,2.81579752725842E+004,2.58003243734110E+004,2.74057418298307E+004,2.60649904100682E+004,2.61407115071218E+004,2.80657113253205E+004,2.58662555295854E+004,2.64553692443579E+004,2.73969294035861E+004 +1.16000000000000E-008,1.47501419056747E+022,5.21485335986510E+022,1.84834743954754E+023,2.40346730339497E+022,2.68775914602894E+021,2.78455851639058E+023,2.60564108725537E+004,2.62263745780660E+004,2.80699568772609E+004,2.59250147460539E+004,2.50644231694249E+004,2.74038859895601E+004,0.00000000000000E+000,0.00000000000000E+000,2.78892304052604E+004,2.54609844791555E+004,2.72605199755999E+004,0.00000000000000E+000,0.00000000000000E+000,1.88079605986700E+000,1.91206190261464E+000,1.90121437197018E+000,0.00000000000000E+000,0.00000000000000E+000,2.80969208697174E+004,2.57039615777083E+004,2.67770508071580E+004,2.60564108725537E+004,2.62263745780660E+004,2.80283945857686E+004,2.57326899447982E+004,2.61657519611335E+004,2.73703276619726E+004 +1.18000000000000E-008,1.50504501901472E+022,5.28692734813850E+022,1.84664569260219E+023,2.36542825402845E+022,2.72780025062528E+021,2.78966375722661E+023,2.58789240977741E+004,2.62355744801394E+004,2.80463510575746E+004,2.58652287864771E+004,2.51708493646271E+004,2.73731807882436E+004,0.00000000000000E+000,0.00000000000000E+000,2.78654528083623E+004,2.52723175556633E+004,2.73324695363142E+004,0.00000000000000E+000,0.00000000000000E+000,1.88069644869466E+000,1.91141539767023E+000,1.90146999913922E+000,0.00000000000000E+000,0.00000000000000E+000,2.80440173901779E+004,2.55962414331011E+004,2.69909226320394E+004,2.58789240977741E+004,2.62355744801394E+004,2.79962279294533E+004,2.56234151684815E+004,2.62938568459012E+004,2.73304783177867E+004 +1.20000000000000E-008,1.53657738888433E+022,5.35249465691500E+022,1.84459358599163E+023,2.32788971846939E+022,2.82289787404157E+021,2.79451874115892E+023,2.58318054850317E+004,2.61939283413099E+004,2.80323108749044E+004,2.58231242569709E+004,2.49858131986279E+004,2.73443957349227E+004,0.00000000000000E+000,0.00000000000000E+000,2.78358239265008E+004,2.50542335811758E+004,2.76519038565891E+004,0.00000000000000E+000,0.00000000000000E+000,1.88057209170007E+000,1.91065614582816E+000,1.90258911720400E+000,0.00000000000000E+000,0.00000000000000E+000,2.79962300927463E+004,2.55166701350563E+004,2.66994204383386E+004,2.58318054850317E+004,2.61939283413099E+004,2.79681200736191E+004,2.55218512815728E+004,2.62171902089664E+004,2.72893671359702E+004 +1.22000000000000E-008,1.56760924494649E+022,5.41555939665422E+022,1.84259153076182E+023,2.29185272433269E+022,2.91299035938332E+021,2.79922357094899E+023,2.61240910723196E+004,2.61834070508879E+004,2.79990586173657E+004,2.58496720567405E+004,2.51284475679197E+004,2.73369368337504E+004,0.00000000000000E+000,0.00000000000000E+000,2.78077251383194E+004,2.47776909305483E+004,2.79209052148502E+004,0.00000000000000E+000,0.00000000000000E+000,1.88045391709929E+000,1.90967445536770E+000,1.90351202030121E+000,0.00000000000000E+000,0.00000000000000E+000,2.79024198564385E+004,2.54253677806368E+004,2.68830931796182E+004,2.61240910723196E+004,2.61834070508879E+004,2.79186756486455E+004,2.54305866795295E+004,2.64067487998956E+004,2.72630147704231E+004 +1.24000000000000E-008,1.60214469766083E+022,5.48212773304563E+022,1.84058947553200E+023,2.25581573019599E+022,2.96804687820328E+021,2.80427876040428E+023,2.60753905158308E+004,2.61581862442230E+004,2.80217195486658E+004,2.57579479967640E+004,2.52469856836479E+004,2.73347466943065E+004,0.00000000000000E+000,0.00000000000000E+000,2.77650600342784E+004,2.47007249143138E+004,2.77834839403702E+004,0.00000000000000E+000,0.00000000000000E+000,1.88027403356191E+000,1.90939738758348E+000,1.90304274358443E+000,0.00000000000000E+000,0.00000000000000E+000,2.78023122288397E+004,2.52142866531636E+004,2.67222152060458E+004,2.60753905158308E+004,2.61581862442230E+004,2.78877997577495E+004,2.53084179575010E+004,2.63736661831413E+004,2.72226121054953E+004 +1.26000000000000E-008,1.63367706753044E+022,5.53768476567304E+022,1.83858742030218E+023,2.22378284651892E+022,3.05313422547049E+021,2.80863323052913E+023,2.61602472607387E+004,2.60690432435920E+004,2.79489007391531E+004,2.57120153537658E+004,2.57143160001695E+004,2.72728161496050E+004,0.00000000000000E+000,0.00000000000000E+000,2.77723389913304E+004,2.45533158948062E+004,2.73337063052779E+004,0.00000000000000E+000,0.00000000000000E+000,1.88030476119140E+000,1.90886196187488E+000,1.90147438165186E+000,0.00000000000000E+000,0.00000000000000E+000,2.77965774777301E+004,2.52026186486373E+004,2.66475890768935E+004,2.61602472607387E+004,2.60690432435920E+004,2.78563704748671E+004,2.52444143580392E+004,2.64309419063173E+004,2.71830109968020E+004 +1.28000000000000E-008,1.66220635455533E+022,5.60225104683463E+022,1.83678557059535E+023,2.18774585238222E+022,3.12821129658862E+021,2.81328800893845E+023,2.61083412471138E+004,2.60222672100580E+004,2.79026018020222E+004,2.55183510365557E+004,2.60125998152726E+004,2.72157220744340E+004,0.00000000000000E+000,0.00000000000000E+000,2.77649331997042E+004,2.43755548011474E+004,2.69200027737297E+004,0.00000000000000E+000,0.00000000000000E+000,1.88027349799846E+000,1.90820781470138E+000,1.89998634806654E+000,0.00000000000000E+000,0.00000000000000E+000,2.77695344622752E+004,2.53516046286449E+004,2.69053351704075E+004,2.61083412471138E+004,2.60222672100580E+004,2.78262982504131E+004,2.51544092458226E+004,2.65212274800964E+004,2.71432575673580E+004 +1.30000000000000E-008,1.69824334869203E+022,5.64729728950551E+022,1.83473346398479E+023,2.16272016200951E+022,3.17826267733404E+021,2.81734217077883E+023,2.59711939268675E+004,2.60342973516065E+004,2.78773701915719E+004,2.54593454303131E+004,2.61826673000456E+004,2.71882929606922E+004,0.00000000000000E+000,0.00000000000000E+000,2.77515302156070E+004,2.42758775546439E+004,2.67068553635762E+004,0.00000000000000E+000,0.00000000000000E+000,1.88021687642096E+000,1.90783688548404E+000,1.89920200994546E+000,0.00000000000000E+000,0.00000000000000E+000,2.77172000472705E+004,2.52377701316143E+004,2.66515663267449E+004,2.59711939268675E+004,2.60342973516065E+004,2.77964211829659E+004,2.50683381861988E+004,2.64628934877204E+004,2.71087224143845E+004 +1.32000000000000E-008,1.72477058048710E+022,5.71086254305219E+022,1.83288156289721E+023,2.12568214025790E+022,3.28337057689942E+021,2.82184679504592E+023,2.60932337658868E+004,2.59551824912943E+004,2.77797076593394E+004,2.53313769726114E+004,2.59838586887158E+004,2.71020518201884E+004,0.00000000000000E+000,0.00000000000000E+000,2.77896132097709E+004,2.44558061566895E+004,2.69180572163172E+004,0.00000000000000E+000,0.00000000000000E+000,1.88037762008265E+000,1.90850429221186E+000,1.89997924400717E+000,0.00000000000000E+000,0.00000000000000E+000,2.77074358066660E+004,2.51106908944315E+004,2.63711140689056E+004,2.60932337658868E+004,2.59551824912943E+004,2.77614066972478E+004,2.50256084983754E+004,2.63533479991103E+004,2.70714305790480E+004 +1.34000000000000E-008,1.76080757462380E+022,5.77592933802123E+022,1.83087950766739E+023,2.09114668754356E+022,3.32341168149575E+021,2.82690198450121E+023,2.61165929790451E+004,2.59399263938980E+004,2.77418691401158E+004,2.54078737485871E+004,2.60492055412892E+004,2.70799091153030E+004,0.00000000000000E+000,0.00000000000000E+000,2.77497669807642E+004,2.42791465389509E+004,2.62174957682126E+004,0.00000000000000E+000,0.00000000000000E+000,1.88020942356236E+000,1.90784909789197E+000,1.89735388572815E+000,0.00000000000000E+000,0.00000000000000E+000,2.76852968689157E+004,2.47288988722667E+004,2.63237875772027E+004,2.61165929790451E+004,2.59399263938980E+004,2.77275825185995E+004,2.48995547492067E+004,2.61751190730868E+004,2.70345345613128E+004 +1.36000000000000E-008,1.79133891687851E+022,5.82848328780392E+022,1.82912770934130E+023,2.06261740051867E+022,3.36845792416663E+021,2.83105624910308E+023,2.62510898086946E+004,2.59395694508274E+004,2.77128324517384E+004,2.53090161080822E+004,2.58321798538727E+004,2.70577570329022E+004,0.00000000000000E+000,0.00000000000000E+000,2.76738189668498E+004,2.43182478354792E+004,2.51839457644288E+004,0.00000000000000E+000,0.00000000000000E+000,1.87988752346185E+000,1.90799492372275E+000,1.89321894886402E+000,0.00000000000000E+000,0.00000000000000E+000,2.76712161558453E+004,2.46564113692984E+004,2.65605232937409E+004,2.62510898086946E+004,2.59395694508274E+004,2.76900742954835E+004,2.48464230767374E+004,2.58654644223745E+004,2.70097461037099E+004 +1.38000000000000E-008,1.82337180055558E+022,5.88754391708351E+022,1.82717570549223E+023,2.02958348922670E+022,3.43852985721021E+021,2.83561092475091E+023,2.62660843465654E+004,2.59352248559383E+004,2.76324525381875E+004,2.53285793027553E+004,2.61462342067458E+004,2.70092766545472E+004,0.00000000000000E+000,0.00000000000000E+000,2.76359363698529E+004,2.43702395373571E+004,2.45060930108299E+004,0.00000000000000E+000,0.00000000000000E+000,1.87972631358757E+000,1.90818811035505E+000,1.89032132055568E+000,0.00000000000000E+000,0.00000000000000E+000,2.76632006704725E+004,2.46440991749117E+004,2.62571703224379E+004,2.62660843465654E+004,2.59352248559383E+004,2.76423431808558E+004,2.48657006505502E+004,2.57284711582520E+004,2.69774535114725E+004 +1.40000000000000E-008,1.85740673946246E+022,5.94560351874820E+022,1.82502349612017E+023,1.99604906412727E+022,3.52862234255197E+021,2.84021565177949E+023,2.63019214033910E+004,2.60189212420899E+004,2.75390511588175E+004,2.53265542658494E+004,2.59214246145301E+004,2.69643414678071E+004,0.00000000000000E+000,0.00000000000000E+000,2.76189912328953E+004,2.43145943525406E+004,2.46802077274815E+004,0.00000000000000E+000,0.00000000000000E+000,1.87965406324351E+000,1.90798131783261E+000,1.89108051170032E+000,0.00000000000000E+000,0.00000000000000E+000,2.76369350662530E+004,2.43993042317478E+004,2.61988459537702E+004,2.63019214033910E+004,2.60189212420899E+004,2.75893483825945E+004,2.47785937976558E+004,2.56613205010508E+004,2.69549196217461E+004 +1.42000000000000E-008,1.88743756790971E+022,6.00966928610233E+022,1.82307149227110E+023,1.95951155618311E+022,3.61871482789372E+021,2.84492048156956E+023,2.62832016355250E+004,2.59783761706952E+004,2.75598908025342E+004,2.51943283721006E+004,2.58786904411430E+004,2.69567886595061E+004,0.00000000000000E+000,0.00000000000000E+000,2.75157624697541E+004,2.44122116797836E+004,2.48646101932484E+004,0.00000000000000E+000,0.00000000000000E+000,1.87921203727992E+000,1.90834347642472E+000,1.89187318780907E+000,0.00000000000000E+000,0.00000000000000E+000,2.75946608891020E+004,2.41755919874933E+004,2.59897204585206E+004,2.62832016355250E+004,2.59783761706952E+004,2.75579448934770E+004,2.46833491382442E+004,2.56325380308630E+004,2.69172156530902E+004 +1.44000000000000E-008,1.92948072773586E+022,6.06772888776702E+022,1.82061897461458E+023,1.92697815869859E+022,3.68878676093730E+021,2.84992561964410E+023,2.62275017680356E+004,2.58724449540694E+004,2.75474171287240E+004,2.51193622108214E+004,2.61744637691403E+004,2.69194958177172E+004,0.00000000000000E+000,0.00000000000000E+000,2.74379874086791E+004,2.45204222841005E+004,2.49381539938623E+004,0.00000000000000E+000,0.00000000000000E+000,1.87887685435175E+000,1.90874161966626E+000,1.89218611677826E+000,0.00000000000000E+000,0.00000000000000E+000,2.75363943006363E+004,2.42265088584007E+004,2.61957562560122E+004,2.62275017680356E+004,2.58724449540694E+004,2.75143229726334E+004,2.46954169496010E+004,2.58412250579158E+004,2.68653759351449E+004 +1.46000000000000E-008,1.95951155618311E+022,6.11978232374225E+022,1.81856686800402E+023,1.89544578882898E+022,3.79889979857722E+021,2.85402983286522E+023,2.63769262434793E+004,2.58970236262202E+004,2.75011519609838E+004,2.52426966936569E+004,2.60714469163876E+004,2.69109773431276E+004,0.00000000000000E+000,0.00000000000000E+000,2.73637811181400E+004,2.46325342726676E+004,2.47448263747243E+004,0.00000000000000E+000,0.00000000000000E+000,1.87855531356744E+000,1.90915048637981E+000,1.89135960160513E+000,0.00000000000000E+000,0.00000000000000E+000,2.74357966479596E+004,2.43168048589384E+004,2.69882879497968E+004,2.63769262434793E+004,2.58970236262202E+004,2.74446329195457E+004,2.48060763655592E+004,2.59734351347668E+004,2.68446619740355E+004 +1.48000000000000E-008,1.99154443986018E+022,6.16182548356840E+022,1.81666491553569E+023,1.87142112607118E+022,3.85896145547172E+021,2.85773363504038E+023,2.63813191027514E+004,2.58932824970641E+004,2.74576943723001E+004,2.53152946931436E+004,2.61483973211943E+004,2.68873869563632E+004,0.00000000000000E+000,0.00000000000000E+000,2.73870736598563E+004,2.45203592422670E+004,2.48851781126609E+004,0.00000000000000E+000,0.00000000000000E+000,1.87865642529195E+000,1.90874138872086E+000,1.89196088709663E+000,0.00000000000000E+000,0.00000000000000E+000,2.73367437276826E+004,2.41919821325281E+004,2.70818831374380E+004,2.63813191027514E+004,2.58932824970641E+004,2.74032399379939E+004,2.47704847044783E+004,2.60725133006006E+004,2.68160679624744E+004 +1.50000000000000E-008,2.02708092018943E+022,6.21237737812128E+022,1.81446265478289E+023,1.84189081143138E+022,3.94404880273893E+021,2.86203805378449E+023,2.62342536711415E+004,2.58677966294638E+004,2.73593010646954E+004,2.53835289538337E+004,2.61746946874541E+004,2.68123928385539E+004,0.00000000000000E+000,0.00000000000000E+000,2.73621972194214E+004,2.44137351101371E+004,2.49647785097298E+004,0.00000000000000E+000,0.00000000000000E+000,1.87854843182821E+000,1.90834910574057E+000,1.89229895819306E+000,0.00000000000000E+000,0.00000000000000E+000,2.73830736152136E+004,2.40664559797162E+004,2.72347413934610E+004,2.62342536711415E+004,2.58677966294638E+004,2.73670040951357E+004,2.47343360578233E+004,2.61501122206136E+004,2.67751582090959E+004 +1.52000000000000E-008,2.06612099717085E+022,6.25141745510270E+022,1.81231044541084E+023,1.82036871771085E+022,3.98408990733527E+021,2.86594206148263E+023,2.63039241794352E+004,2.58430343830659E+004,2.73008006220626E+004,2.54060929895339E+004,2.55927481521169E+004,2.67668630093169E+004,0.00000000000000E+000,0.00000000000000E+000,2.73300756591171E+004,2.44735988107787E+004,2.52885424807380E+004,0.00000000000000E+000,0.00000000000000E+000,1.87840870133808E+000,1.90856976557724E+000,1.89365249477167E+000,0.00000000000000E+000,0.00000000000000E+000,2.73817221597975E+004,2.38905895245181E+004,2.64224691649457E+004,2.63039241794352E+004,2.58430343830659E+004,2.73323244190947E+004,2.47097495654361E+004,2.57499046374415E+004,2.67447522984474E+004 +1.54000000000000E-008,2.10416004653737E+022,6.29245958731394E+022,1.80990797913506E+023,1.79484251353069E+022,4.08419266882610E+021,2.86989612056152E+023,2.61066087026652E+004,2.58078358841429E+004,2.72597102010120E+004,2.55348524163754E+004,2.61500936398274E+004,2.67331682358510E+004,0.00000000000000E+000,0.00000000000000E+000,2.73292389235559E+004,2.44533436604172E+004,2.50269932393419E+004,0.00000000000000E+000,0.00000000000000E+000,1.87840505719909E+000,1.90849522333814E+000,1.89256172160976E+000,0.00000000000000E+000,0.00000000000000E+000,2.73266864586530E+004,2.38024039232615E+004,2.57010261824767E+004,2.61066087026652E+004,2.58078358841429E+004,2.72981719689842E+004,2.47345404667782E+004,2.57114074351461E+004,2.67011294733573E+004 +1.56000000000000E-008,2.14620320636352E+022,6.34351199567427E+022,1.80765566700151E+023,1.76781476792816E+022,4.11422349727336E+021,2.87455089897084E+023,2.58341665215221E+004,2.58402074903012E+004,2.72115268018629E+004,2.54486260845497E+004,2.61866709394520E+004,2.66829848968398E+004,0.00000000000000E+000,0.00000000000000E+000,2.73093314259519E+004,2.44149712198463E+004,2.46538375858146E+004,0.00000000000000E+000,0.00000000000000E+000,1.87831829190689E+000,1.90835367285324E+000,1.89096620598539E+000,0.00000000000000E+000,0.00000000000000E+000,2.73026788751412E+004,2.37391680870711E+004,2.53247869972410E+004,2.58341665215221E+004,2.58402074903012E+004,2.72647392798965E+004,2.46681948403210E+004,2.55158936032429E+004,2.66588513081032E+004 +1.58000000000000E-008,2.17873660384804E+022,6.39406389022714E+022,1.80570366315244E+023,1.73928548090327E+022,4.17929029224240E+021,2.87870516357271E+023,2.58295913951772E+004,2.58303943034075E+004,2.71672783816677E+004,2.53703185945289E+004,2.59215331097901E+004,2.66424365471151E+004,0.00000000000000E+000,0.00000000000000E+000,2.72967846491259E+004,2.44465515690865E+004,2.47206792377282E+004,0.00000000000000E+000,0.00000000000000E+000,1.87826354413499E+000,1.90847020012692E+000,1.89125547685786E+000,0.00000000000000E+000,0.00000000000000E+000,2.72504739959219E+004,2.36795145702748E+004,2.52579608867585E+004,2.58295913951772E+004,2.58303943034075E+004,2.72268338387658E+004,2.46256399986322E+004,2.53993835652564E+004,2.66272201554834E+004 +1.60000000000000E-008,2.21777668082947E+022,6.43710807766820E+022,1.80330119687666E+023,1.71325876291566E+022,4.26938277758415E+021,2.88280937679384E+023,2.57251060676634E+004,2.57568588171817E+004,2.71355940649809E+004,2.54322898466885E+004,2.61279761506746E+004,2.66030716287746E+004,0.00000000000000E+000,0.00000000000000E+000,2.72864701067777E+004,2.43221128747619E+004,2.47475619287370E+004,0.00000000000000E+000,0.00000000000000E+000,1.87821849980810E+000,1.90800931308925E+000,1.89137138500517E+000,0.00000000000000E+000,0.00000000000000E+000,2.71856289553402E+004,2.36621956393999E+004,2.56147326543746E+004,2.57251060676634E+004,2.57568588171817E+004,2.71913422145359E+004,2.46131802943217E+004,2.56001620555960E+004,2.65814474584091E+004 +1.62000000000000E-008,2.25481470258108E+022,6.48816048602853E+022,1.80099883336237E+023,1.68322793446841E+022,4.35947526292590E+021,2.88721389829943E+023,2.56898132912663E+004,2.56725888612546E+004,2.71059389624369E+004,2.53029324078857E+004,2.67439596780597E+004,2.65626615331243E+004,0.00000000000000E+000,0.00000000000000E+000,2.72733805448388E+004,2.43326298688074E+004,2.46159506457460E+004,0.00000000000000E+000,0.00000000000000E+000,1.87816128878302E+000,1.90804844461158E+000,1.89080155836293E+000,0.00000000000000E+000,0.00000000000000E+000,2.71265588046423E+004,2.36438699414460E+004,2.53259634923999E+004,2.56898132912663E+004,2.56725888612546E+004,2.71576565607419E+004,2.45546010629596E+004,2.57484825760521E+004,2.65362639509274E+004 +1.64000000000000E-008,2.28935015529542E+022,6.54672060150067E+022,1.79889667537107E+023,1.65019402317643E+022,4.43455233404403E+021,2.89186867670876E+023,2.56685827819341E+004,2.56346235154169E+004,2.70863043277839E+004,2.52379212569050E+004,2.67046635619720E+004,2.65341063271665E+004,0.00000000000000E+000,0.00000000000000E+000,2.71793185439624E+004,2.43768568582110E+004,2.43948331663009E+004,0.00000000000000E+000,0.00000000000000E+000,1.87774858290181E+000,1.90821264030013E+000,1.88983063012797E+000,0.00000000000000E+000,0.00000000000000E+000,2.71169398273186E+004,2.35628365117649E+004,2.52474754096735E+004,2.56685827819341E+004,2.56346235154169E+004,2.71206074589386E+004,2.45151201909894E+004,2.56480970181001E+004,2.64979973542812E+004 +1.66000000000000E-008,2.31387533186067E+022,6.58826324751936E+022,1.79744518532945E+023,1.62717038803354E+022,4.47959857671491E+021,2.89517206783796E+023,2.55412758368046E+004,2.57035801063533E+004,2.70555621230541E+004,2.52800442343855E+004,2.68173046353609E+004,2.65234043557021E+004,0.00000000000000E+000,0.00000000000000E+000,2.71543487680390E+004,2.42416412104361E+004,2.44599338765892E+004,0.00000000000000E+000,0.00000000000000E+000,1.87763855583234E+000,1.90770878922801E+000,1.89011827578741E+000,0.00000000000000E+000,0.00000000000000E+000,2.70647371946454E+004,2.34976563884346E+004,2.47920344072340E+004,2.55412758368046E+004,2.57035801063533E+004,2.70851995858188E+004,2.44772098305816E+004,2.55827467265211E+004,2.64775810479714E+004 +1.68000000000000E-008,2.35591849168682E+022,6.64231873872442E+022,1.79509277043441E+023,1.59764007339374E+022,4.52964995746032E+021,2.89997700038952E+023,2.54679190935207E+004,2.56387779945533E+004,2.70574984846792E+004,2.51049724703544E+004,2.69144527381598E+004,2.64936063677139E+004,0.00000000000000E+000,0.00000000000000E+000,2.70946741339403E+004,2.41734169193637E+004,2.45465693866023E+004,0.00000000000000E+000,0.00000000000000E+000,1.87737480132815E+000,1.90745246163720E+000,1.89049875172613E+000,0.00000000000000E+000,0.00000000000000E+000,2.70056002936618E+004,2.34458873992865E+004,2.48623833445850E+004,2.54679190935207E+004,2.56387779945533E+004,2.70525541918536E+004,2.43673534857400E+004,2.56691699775537E+004,2.64304584947518E+004 +1.70000000000000E-008,2.39145497201607E+022,6.68986755043256E+022,1.79309071520460E+023,1.57161335540612E+022,4.57469620013120E+021,2.90413126499139E+023,2.53480549095414E+004,2.56901603821100E+004,2.70484933132095E+004,2.51502903196324E+004,2.68404410021435E+004,2.64895651319375E+004,0.00000000000000E+000,0.00000000000000E+000,2.70627887113352E+004,2.38869156386402E+004,2.50587525108570E+004,0.00000000000000E+000,0.00000000000000E+000,1.87723340528431E+000,1.90636031517672E+000,1.89269536311372E+000,0.00000000000000E+000,0.00000000000000E+000,2.69086555568286E+004,2.33483215985081E+004,2.44649085222260E+004,2.53480549095414E+004,2.56901603821100E+004,2.70117285709129E+004,2.42797326708983E+004,2.56619095165830E+004,2.64011893897731E+004 +1.72000000000000E-008,2.42448888330805E+022,6.74091995879289E+022,1.79118876273627E+023,1.54358458218869E+022,4.62474758087662E+021,2.90833558097400E+023,2.53496952953227E+004,2.57009337476223E+004,2.69797118772106E+004,2.51735058816119E+004,2.67633868754019E+004,2.64481303506465E+004,0.00000000000000E+000,0.00000000000000E+000,2.70025430577851E+004,2.39938549048275E+004,2.46445897009447E+004,0.00000000000000E+000,0.00000000000000E+000,1.87696535403336E+000,1.90677097005421E+000,1.89092606268510E+000,0.00000000000000E+000,0.00000000000000E+000,2.69125867248712E+004,2.32004243427479E+004,2.45432482549517E+004,2.53496952953227E+004,2.57009337476223E+004,2.69664215718152E+004,2.42764894115539E+004,2.55376059044864E+004,2.63728444028267E+004 +1.74000000000000E-008,2.45752279460002E+022,6.78496517384886E+022,1.78923675888720E+023,1.51855889181598E+022,4.68480923777112E+021,2.91218953729140E+023,2.53533247540589E+004,2.56191674463291E+004,2.69947499008733E+004,2.51334174201946E+004,2.67535158462025E+004,2.64348043652241E+004,0.00000000000000E+000,0.00000000000000E+000,2.70182501589443E+004,2.38471006617157E+004,2.43191909385734E+004,0.00000000000000E+000,0.00000000000000E+000,1.87703535239864E+000,1.90620649717595E+000,1.88949451048117E+000,0.00000000000000E+000,0.00000000000000E+000,2.68041376894430E+004,2.29890562814876E+004,2.47592357104689E+004,2.53533247540589E+004,2.56191674463291E+004,2.69457297067931E+004,2.41573812065932E+004,2.55069506870178E+004,2.63337378734216E+004 +1.76000000000000E-008,2.49305927492927E+022,6.83051193032719E+022,1.78713460089589E+023,1.49253217382836E+022,4.74987603274016E+021,2.91624369913178E+023,2.52859609479109E+004,2.56403909020508E+004,2.69332554166444E+004,2.50033237853950E+004,2.67672090873534E+004,2.63881334760230E+004,0.00000000000000E+000,0.00000000000000E+000,2.69704660530073E+004,2.39256768040395E+004,2.41572432292767E+004,0.00000000000000E+000,0.00000000000000E+000,1.87682215580346E+000,1.90650957820555E+000,1.88876794971866E+000,0.00000000000000E+000,0.00000000000000E+000,2.68037760428507E+004,2.28946181913416E+004,2.46988665082972E+004,2.52859609479109E+004,2.56403909020508E+004,2.69057541963794E+004,2.40952014684757E+004,2.54511094470573E+004,2.63033663280186E+004 +1.78000000000000E-008,2.52158856195416E+022,6.85703916212226E+022,1.78563305947353E+023,1.47851778721965E+022,4.76489144696379E+021,2.91899652507277E+023,2.52519195931447E+004,2.55772480504791E+004,2.69416389237419E+004,2.49112259319017E+004,2.71434689626957E+004,2.63756125394473E+004,0.00000000000000E+000,0.00000000000000E+000,2.68914889230229E+004,2.39325885136125E+004,2.44049486154603E+004,0.00000000000000E+000,0.00000000000000E+000,1.87646816183633E+000,1.90653614412598E+000,1.88987542370092E+000,0.00000000000000E+000,0.00000000000000E+000,2.67917143190568E+004,2.29216908257444E+004,2.44580955503881E+004,2.52519195931447E+004,2.55772480504791E+004,2.68843487451555E+004,2.40649438448604E+004,2.56127868418141E+004,2.62727145443264E+004 +1.80000000000000E-008,2.55262041801632E+022,6.90909259809749E+022,1.78373110700520E+023,1.44898747257985E+022,4.83496338000737E+021,2.92315078967464E+023,2.52826947196975E+004,2.55334286194058E+004,2.69302325958118E+004,2.46763179401089E+004,2.70310863538329E+004,2.63461601430867E+004,0.00000000000000E+000,0.00000000000000E+000,2.68357655362940E+004,2.38109956953932E+004,2.44705603237546E+004,0.00000000000000E+000,0.00000000000000E+000,1.87621717043769E+000,1.90606657469440E+000,1.89016508595694E+000,0.00000000000000E+000,0.00000000000000E+000,2.67932820066152E+004,2.27357793552475E+004,2.38263499497639E+004,2.52826947196975E+004,2.55334286194058E+004,2.68646235717919E+004,2.38755091270315E+004,2.53984274013205E+004,2.62394247962722E+004 +1.82000000000000E-008,2.59015895357538E+022,6.95163627173110E+022,1.78172905177539E+023,1.42646435124441E+022,4.85998907038008E+021,2.92715490013428E+023,2.51008724196264E+004,2.55346815200233E+004,2.68675472019679E+004,2.45535433875680E+004,2.67523730405011E+004,2.62800011041793E+004,0.00000000000000E+000,0.00000000000000E+000,2.68484374155058E+004,2.37697353520472E+004,2.45207614066746E+004,0.00000000000000E+000,0.00000000000000E+000,1.87627433711209E+000,1.90590616099266E+000,1.89038568691636E+000,0.00000000000000E+000,0.00000000000000E+000,2.67779571403547E+004,2.28647889121748E+004,2.33766123034819E+004,2.51008724196264E+004,2.55346815200233E+004,2.68362751330232E+004,2.38481510174491E+004,2.51602810062031E+004,2.62001571712341E+004 +1.84000000000000E-008,2.63620622386116E+022,6.99668251440197E+022,1.77932658549961E+023,1.40294020229407E+022,4.88000962267825E+021,2.93170957578211E+023,2.51023327339981E+004,2.54829485550066E+004,2.68431457231176E+004,2.44419284565834E+004,2.64998660649372E+004,2.62413707394808E+004,0.00000000000000E+000,0.00000000000000E+000,2.68127187272691E+004,2.37619589673927E+004,2.44902527541274E+004,0.00000000000000E+000,0.00000000000000E+000,1.87611306386078E+000,1.90587586627152E+000,1.89025172703866E+000,0.00000000000000E+000,0.00000000000000E+000,2.67097102595926E+004,2.28494685232771E+004,2.35667566984030E+004,2.51023327339981E+004,2.54829485550066E+004,2.67960325636266E+004,2.37930813888643E+004,2.50971751114877E+004,2.61583780323013E+004 +1.86000000000000E-008,2.66723807992332E+022,7.02971642569395E+022,1.77732453026979E+023,1.38191862238099E+022,4.97010210802000E+021,2.93491286414982E+023,2.50522709354280E+004,2.54449092562352E+004,2.68112683036368E+004,2.42644087483206E+004,2.66803813656107E+004,2.62020036670935E+004,0.00000000000000E+000,0.00000000000000E+000,2.67916186911131E+004,2.36288653861141E+004,2.48543570671857E+004,0.00000000000000E+000,0.00000000000000E+000,1.87601759760749E+000,1.90535432914324E+000,1.89182941645538E+000,0.00000000000000E+000,0.00000000000000E+000,2.66722948520224E+004,2.29245270217027E+004,2.39488616760465E+004,2.50522709354280E+004,2.54449092562352E+004,2.67654845461579E+004,2.37009765818706E+004,2.53864483148653E+004,2.61258364554042E+004 +1.88000000000000E-008,2.70727918451966E+022,7.07776575120955E+022,1.77522237227848E+023,1.35689293200828E+022,4.99012266031817E+021,2.93931738565541E+023,2.51480747700738E+004,2.53872634081805E+004,2.67393144371933E+004,2.41562746114092E+004,2.66088534215199E+004,2.61457262554502E+004,0.00000000000000E+000,0.00000000000000E+000,2.67478429163343E+004,2.37364419840161E+004,2.45041997014301E+004,0.00000000000000E+000,0.00000000000000E+000,1.87581906609622E+000,1.90577632177292E+000,1.89031300702155E+000,0.00000000000000E+000,0.00000000000000E+000,2.66497814735450E+004,2.31796478305437E+004,2.40405866900187E+004,2.51480747700738E+004,2.53872634081805E+004,2.67155982745149E+004,2.37575706114775E+004,2.52859835089229E+004,2.60905385582709E+004 +1.90000000000000E-008,2.74031309581163E+022,7.11680582819098E+022,1.77342052257165E+023,1.33587135209520E+022,5.02015348876542E+021,2.94292108506908E+023,2.51221078716743E+004,2.54062078252444E+004,2.67104172038453E+004,2.40874620977450E+004,2.61386130809078E+004,2.61183097603702E+004,0.00000000000000E+000,0.00000000000000E+000,2.66074620260685E+004,2.36810233662854E+004,2.42753030670911E+004,0.00000000000000E+000,0.00000000000000E+000,1.87517810310438E+000,1.90555940108274E+000,1.88929855122711E+000,0.00000000000000E+000,0.00000000000000E+000,2.67146181433793E+004,2.31436213389940E+004,2.42294297544042E+004,2.51221078716743E+004,2.54062078252444E+004,2.66835586391462E+004,2.37019502936207E+004,2.50733790069264E+004,2.60664540264025E+004 +1.92000000000000E-008,2.77635008994833E+022,7.14683665663823E+022,1.77126831319960E+023,1.31735234121940E+022,5.09022542180900E+021,2.94622447619828E+023,2.50652556477469E+004,2.53444132798072E+004,2.66578674269114E+004,2.41408082064921E+004,2.62338833037936E+004,2.60693053001976E+004,0.00000000000000E+000,0.00000000000000E+000,2.65539933380691E+004,2.37919075674221E+004,2.42288790656608E+004,0.00000000000000E+000,0.00000000000000E+000,1.87493222858801E+000,1.90599243108923E+000,1.88909051062651E+000,0.00000000000000E+000,0.00000000000000E+000,2.67147624982421E+004,2.33681325366566E+004,2.43259895121771E+004,2.50652556477469E+004,2.53444132798072E+004,2.66460903312932E+004,2.38207451107102E+004,2.51301930486682E+004,2.60288452788876E+004 +1.94000000000000E-008,2.80788245981795E+022,7.19538649596128E+022,1.76966666901574E+023,1.29282716465415E+022,5.09523055988355E+021,2.95022858665792E+023,2.49388258298910E+004,2.53488338060014E+004,2.66081057415168E+004,2.41437336030336E+004,2.64036558819605E+004,2.60305820437711E+004,0.00000000000000E+000,0.00000000000000E+000,2.65532008785117E+004,2.37177867436830E+004,2.42144542048406E+004,0.00000000000000E+000,0.00000000000000E+000,1.87492857719988E+000,1.90570341236757E+000,1.88902570901017E+000,0.00000000000000E+000,0.00000000000000E+000,2.66617534236069E+004,2.33939502155911E+004,2.41608466929934E+004,2.49388258298910E+004,2.53488338060014E+004,2.66087388633676E+004,2.38090399418351E+004,2.51522341291071E+004,2.59946822781970E+004 +1.96000000000000E-008,2.85292870248882E+022,7.22942143486817E+022,1.76696389445549E+023,1.27130507093362E+022,5.18532304522530E+021,2.95418264573680E+023,2.48951367800387E+004,2.53051182313490E+004,2.65838318621519E+004,2.43180011448883E+004,2.63013759378013E+004,2.60053601475518E+004,0.00000000000000E+000,0.00000000000000E+000,2.65623576274368E+004,2.37156102533117E+004,2.49016840046723E+004,0.00000000000000E+000,0.00000000000000E+000,1.87497075544020E+000,1.90569489874308E+000,1.89203116356798E+000,0.00000000000000E+000,0.00000000000000E+000,2.65214542793708E+004,2.33829903730115E+004,2.39445214943368E+004,2.48951367800387E+004,2.53051182313490E+004,2.65598290360282E+004,2.38809712967510E+004,2.52331901636684E+004,2.59534470281422E+004 +1.98000000000000E-008,2.89246929327770E+022,7.26695997042723E+022,1.76451137679896E+023,1.24778092198327E+022,5.28042066864159E+021,2.95803660205420E+023,2.48221411944165E+004,2.52908442932320E+004,2.65343853187227E+004,2.43628011862509E+004,2.62274676680969E+004,2.59643753642874E+004,0.00000000000000E+000,0.00000000000000E+000,2.64941742560033E+004,2.38317531691333E+004,2.49109723723671E+004,0.00000000000000E+000,0.00000000000000E+000,1.87465600189854E+000,1.90614706990857E+000,1.89207067010587E+000,0.00000000000000E+000,0.00000000000000E+000,2.65346960340942E+004,2.32024304713221E+004,2.35987218726095E+004,2.48221411944165E+004,2.52908442932320E+004,2.65235105230520E+004,2.38801880854976E+004,2.51032200945824E+004,2.59174613931062E+004 +2.00000000000000E-008,2.92250012172495E+022,7.31300724071302E+022,1.76260942433064E+023,1.22075317638074E+022,5.36050287783426E+021,2.96184050699085E+023,2.48700871105200E+004,2.53381238139920E+004,2.65492223497100E+004,2.40594616192224E+004,2.58173049095982E+004,2.59686450655572E+004,0.00000000000000E+000,0.00000000000000E+000,2.64009756506624E+004,2.36766236064937E+004,2.49655581448520E+004,0.00000000000000E+000,0.00000000000000E+000,1.87422319989319E+000,1.90554213666114E+000,1.89230225892509E+000,0.00000000000000E+000,0.00000000000000E+000,2.64752055707853E+004,2.31306480396157E+004,2.35929234950901E+004,2.48700871105200E+004,2.53381238139920E+004,2.64872690281305E+004,2.36848145498419E+004,2.49379869504751E+004,2.59004204152060E+004 +2.02000000000000E-008,2.96304174012874E+022,7.34854372104226E+022,1.76000675253188E+023,1.19722902743040E+022,5.47562105354872E+021,2.96564441192750E+023,2.47936679955308E+004,2.54141714277152E+004,2.65276910005237E+004,2.39978234592912E+004,2.58743534138898E+004,2.59643293412390E+004,0.00000000000000E+000,0.00000000000000E+000,2.63836913936443E+004,2.35781986208606E+004,2.44884920695424E+004,0.00000000000000E+000,0.00000000000000E+000,1.87414260548562E+000,1.90515426593600E+000,1.89024398609095E+000,0.00000000000000E+000,0.00000000000000E+000,2.63582120418855E+004,2.29930433167494E+004,2.36809540985737E+004,2.47936679955308E+004,2.54141714277152E+004,2.64391223235782E+004,2.35910243889258E+004,2.48574932393467E+004,2.58765696476696E+004 +2.04000000000000E-008,3.00158130330271E+022,7.37406992522243E+022,1.75770438901759E+023,1.18071207178441E+022,5.55069812466685E+021,2.96884770029521E+023,2.48334703755990E+004,2.53867043480069E+004,2.65218025247189E+004,2.39449108725839E+004,2.57004710789071E+004,2.59513312637343E+004,0.00000000000000E+000,0.00000000000000E+000,2.62870435867784E+004,2.35223802192104E+004,2.43011986309280E+004,0.00000000000000E+000,0.00000000000000E+000,1.87369003902261E+000,1.90493287975253E+000,1.88941425880298E+000,0.00000000000000E+000,0.00000000000000E+000,2.63582012244196E+004,2.29229341567116E+004,2.34298846782501E+004,2.48334703755990E+004,2.53867043480069E+004,2.64102077219515E+004,2.35323296041384E+004,2.46575699197417E+004,2.58493546826877E+004 +2.06000000000000E-008,3.05563679450777E+022,7.40510178128459E+022,1.75470130617286E+023,1.16219306090860E+022,5.61075978156135E+021,2.97310206765857E+023,2.47331076531715E+004,2.53731366927743E+004,2.64932312079620E+004,2.38588065045754E+004,2.57114736896450E+004,2.59156174136909E+004,0.00000000000000E+000,0.00000000000000E+000,2.62413382703552E+004,2.33036693029024E+004,2.45687915590035E+004,0.00000000000000E+000,0.00000000000000E+000,1.87347488276505E+000,1.90405538397585E+000,1.89059592045179E+000,0.00000000000000E+000,0.00000000000000E+000,2.63050206442936E+004,2.30089334740208E+004,2.30229403129975E+004,2.47331076531715E+004,2.53731366927743E+004,2.63698094695315E+004,2.34595110346697E+004,2.46176035781373E+004,2.58065230923492E+004 +2.08000000000000E-008,3.09167378864447E+022,7.44013774780638E+022,1.75269925094305E+023,1.14267302241789E+022,5.65080088615769E+021,2.97665571569150E+023,2.47805763641432E+004,2.53564051302551E+004,2.64891957184034E+004,2.38366009420066E+004,2.51416555383904E+004,2.59011825259458E+004,0.00000000000000E+000,0.00000000000000E+000,2.62069641328697E+004,2.31050961692449E+004,2.44866163908695E+004,0.00000000000000E+000,0.00000000000000E+000,1.87331258433605E+000,1.90324453845585E+000,1.89023573836438E+000,0.00000000000000E+000,0.00000000000000E+000,2.62266206449562E+004,2.29910235049431E+004,2.32843945359291E+004,2.47805763641432E+004,2.53564051302551E+004,2.63358696307505E+004,2.33899432406078E+004,2.44228556889138E+004,2.57801101305365E+004 +2.10000000000000E-008,3.12170461709172E+022,7.47717576955799E+022,1.75084734985546E+023,1.12065041488991E+022,5.72087281920127E+021,2.98000915820144E+023,2.48259666412329E+004,2.53781932053566E+004,2.64578507155522E+004,2.38766933929234E+004,2.50635816754078E+004,2.58921723320625E+004,0.00000000000000E+000,0.00000000000000E+000,2.62119819465392E+004,2.31027199162598E+004,2.41812657723435E+004,0.00000000000000E+000,0.00000000000000E+000,1.87333630201682E+000,1.90323475239112E+000,1.88887632692416E+000,0.00000000000000E+000,0.00000000000000E+000,2.60981956283782E+004,2.29374069222367E+004,2.37208732909917E+004,2.48259666412329E+004,2.53781932053566E+004,2.62861866192492E+004,2.33911780831003E+004,2.44318382408523E+004,2.57609283864610E+004 +2.12000000000000E-008,3.15323698696133E+022,7.51071019465742E+022,1.74904550014863E+023,1.10163089020665E+022,5.76591906187215E+021,2.98326249794989E+023,2.48321552091075E+004,2.53462550891761E+004,2.64144408648908E+004,2.39945874718032E+004,2.50897449021624E+004,2.58633076783755E+004,0.00000000000000E+000,0.00000000000000E+000,2.61475579755287E+004,2.30340741773411E+004,2.40121739673154E+004,0.00000000000000E+000,0.00000000000000E+000,1.87303111325071E+000,1.90295119345638E+000,1.88810895490581E+000,0.00000000000000E+000,0.00000000000000E+000,2.61059410747561E+004,2.30609848745837E+004,2.34018160882205E+004,2.48321552091075E+004,2.53462550891761E+004,2.62519391218846E+004,2.34593069793134E+004,2.43042711248260E+004,2.57330875326669E+004 +2.14000000000000E-008,3.19177655013530E+022,7.55825900636556E+022,1.74679318801509E+023,1.07460314460412E+022,5.83098585684119E+021,2.98756691669400E+023,2.47863075813271E+004,2.52679136757538E+004,2.63619459574962E+004,2.39055034016802E+004,2.50188974952996E+004,2.58022632462009E+004,0.00000000000000E+000,0.00000000000000E+000,2.61049837693638E+004,2.28727356243451E+004,2.37448190742339E+004,0.00000000000000E+000,0.00000000000000E+000,1.87282862306916E+000,1.90227815644405E+000,1.88687378910437E+000,0.00000000000000E+000,0.00000000000000E+000,2.61514149472246E+004,2.29019317487991E+004,2.32817594687187E+004,2.47863075813271E+004,2.52679136757538E+004,2.62306596689810E+004,2.33300767383027E+004,2.41653460275155E+004,2.56881449688442E+004 +2.16000000000000E-008,3.22831405807946E+022,7.57978110008609E+022,1.74454087588154E+023,1.05958773038050E+022,5.91607320410840E+021,2.99046989677723E+023,2.48516354658771E+004,2.52527953842523E+004,2.63035371819776E+004,2.37882911712234E+004,2.51041905332538E+004,2.57676262996525E+004,0.00000000000000E+000,0.00000000000000E+000,2.61111429795140E+004,2.28664594080652E+004,2.37145479700731E+004,0.00000000000000E+000,0.00000000000000E+000,1.87285795725338E+000,1.90225178606096E+000,1.88673221806764E+000,0.00000000000000E+000,0.00000000000000E+000,2.60958922504685E+004,2.27979639917744E+004,2.34073911401712E+004,2.48516354658771E+004,2.52527953842523E+004,2.61906850204961E+004,2.32472778044907E+004,2.42307019190262E+004,2.56653425256713E+004 +2.18000000000000E-008,3.26785464886834E+022,7.60530730426626E+022,1.74218846098651E+023,1.04307077473451E+022,5.99115027522653E+021,2.99372323652568E+023,2.47911998219941E+004,2.51926334375048E+004,2.62989988674289E+004,2.38036967257153E+004,2.50964664731347E+004,2.57423425616987E+004,0.00000000000000E+000,0.00000000000000E+000,2.60688396666959E+004,2.26217266226334E+004,2.41187728110693E+004,0.00000000000000E+000,0.00000000000000E+000,1.87265620820942E+000,1.90121229541488E+000,1.88859395035834E+000,0.00000000000000E+000,0.00000000000000E+000,2.60384277569484E+004,2.27544447155885E+004,2.37506890492738E+004,2.47911998219941E+004,2.51926334375048E+004,2.61604569051592E+004,2.31739986484756E+004,2.44376932581790E+004,2.56265949657922E+004 +2.20000000000000E-008,3.31039832250194E+022,7.64084378459550E+022,1.73973594332998E+023,1.02204919482143E+022,6.05621707019557E+021,2.99762724422383E+023,2.47748099155579E+004,2.51190293243255E+004,2.62755302561503E+004,2.38351568487960E+004,2.52919621492211E+004,2.57119352675023E+004,0.00000000000000E+000,0.00000000000000E+000,2.60697655815912E+004,2.24082759145672E+004,2.37763774414418E+004,0.00000000000000E+000,0.00000000000000E+000,1.87266063084703E+000,1.90028745996478E+000,1.88702100422422E+000,0.00000000000000E+000,0.00000000000000E+000,2.59758843201654E+004,2.26427655141396E+004,2.35013530847164E+004,2.47748099155579E+004,2.51190293243255E+004,2.61322641573099E+004,2.30965982532217E+004,2.43567017075411E+004,2.55847110081613E+004 +2.22000000000000E-008,3.34993891329082E+022,7.67137512685021E+022,1.73763378533867E+023,1.00553223917545E+022,6.08124276056828E+021,3.00113084087601E+023,2.47432112431409E+004,2.50916852489279E+004,2.62486055775616E+004,2.37902040818509E+004,2.55145027354523E+004,2.56875978272690E+004,0.00000000000000E+000,0.00000000000000E+000,2.60000875727193E+004,2.24786317462172E+004,2.33251403736974E+004,0.00000000000000E+000,0.00000000000000E+000,1.87232695336051E+000,1.90059420319580E+000,1.88487894622953E+000,0.00000000000000E+000,0.00000000000000E+000,2.59792389573604E+004,2.24100832271398E+004,2.32832967274586E+004,2.47432112431409E+004,2.50916852489279E+004,2.61025065624713E+004,2.30289640591921E+004,2.42669724441564E+004,2.55522231668008E+004 +2.24000000000000E-008,3.38047025554553E+022,7.70591057956455E+022,1.73618229529706E+023,9.89015283529459E+021,6.06622734634466E+021,3.00438418062446E+023,2.46810177272187E+004,2.50852209010300E+004,2.62394501081947E+004,2.35675384806149E+004,2.52482297356146E+004,2.56600808075203E+004,0.00000000000000E+000,0.00000000000000E+000,2.59520877027291E+004,2.25386741797835E+004,2.35651236621841E+004,0.00000000000000E+000,0.00000000000000E+000,1.87209607061711E+000,1.90085449300300E+000,1.88602817306810E+000,0.00000000000000E+000,0.00000000000000E+000,2.59293826917924E+004,2.26242783644146E+004,2.34148023273182E+004,2.46810177272187E+004,2.50852209010300E+004,2.60709273094708E+004,2.30107608286267E+004,2.42547339035613E+004,2.55243058361593E+004 +2.26000000000000E-008,3.40950005637787E+022,7.74695271177579E+022,1.73443049697097E+023,9.65491134579112E+021,6.12628900323916E+021,3.00788777727664E+023,2.46449591626105E+004,2.50860810995599E+004,2.61459989885334E+004,2.35318994487373E+004,2.51572715614776E+004,2.55988195961828E+004,0.00000000000000E+000,0.00000000000000E+000,2.59763641145606E+004,2.23252087061847E+004,2.36315058675002E+004,0.00000000000000E+000,0.00000000000000E+000,1.87221294608226E+000,1.89992285141616E+000,1.88634202425859E+000,0.00000000000000E+000,0.00000000000000E+000,2.59348309068287E+004,2.26227204717337E+004,2.30565153164865E+004,2.46449591626105E+004,2.50860810995599E+004,2.60383293373783E+004,2.29360989798188E+004,2.41292034793573E+004,2.54966708531960E+004 +2.27999999999999E-008,3.44904064716675E+022,7.77047686072614E+022,1.73202803069519E+023,9.49474692740578E+021,6.21137635050637E+021,3.01104101426360E+023,2.46802067952177E+004,2.49570211199725E+004,2.61166235127937E+004,2.34581771144453E+004,2.53100848495504E+004,2.55523660941512E+004,0.00000000000000E+000,0.00000000000000E+000,2.59504371218114E+004,2.23834870255249E+004,2.39334224268383E+004,0.00000000000000E+000,0.00000000000000E+000,1.87208811636226E+000,1.90017893193587E+000,1.88774793716120E+000,0.00000000000000E+000,0.00000000000000E+000,2.59208835645357E+004,2.27300768115153E+004,2.26740689098442E+004,2.46802067952177E+004,2.49570211199725E+004,2.60143845059186E+004,2.29511896717001E+004,2.41673566893648E+004,2.54539957479255E+004 +2.29999999999999E-008,3.48407661368854E+022,7.79950666155848E+022,1.72997592408463E+023,9.31956709479682E+021,6.27143800740087E+021,3.01424430263130E+023,2.46515060152321E+004,2.49288803750904E+004,2.61178978221008E+004,2.31143319974136E+004,2.53268265615871E+004,2.55314131883335E+004,0.00000000000000E+000,0.00000000000000E+000,2.58894324849100E+004,2.24476133825886E+004,2.38481306653652E+004,0.00000000000000E+000,0.00000000000000E+000,1.87179343586742E+000,1.90045919959877E+000,1.88735430121569E+000,0.00000000000000E+000,0.00000000000000E+000,2.59105426674739E+004,2.23833766339882E+004,2.25063931168637E+004,2.46515060152321E+004,2.49288803750904E+004,2.59953169797643E+004,2.27188536425677E+004,2.41025988566347E+004,2.54233610779181E+004 +2.31999999999999E-008,3.51911258021034E+022,7.83854673853990E+022,1.72807397161630E+023,9.10935129566607E+021,6.30146883584812E+021,3.01794810480647E+023,2.45403043138175E+004,2.49401475202735E+004,2.60906518755755E+004,2.30518962241713E+004,2.50676662424841E+004,2.54979687136815E+004,0.00000000000000E+000,0.00000000000000E+000,2.58709622372551E+004,2.21878563805041E+004,2.37233383777131E+004,0.00000000000000E+000,0.00000000000000E+000,1.87170394823712E+000,1.89931408465838E+000,1.88677336527593E+000,0.00000000000000E+000,0.00000000000000E+000,2.58806264494021E+004,2.22046018720377E+004,2.25008905652188E+004,2.45403043138175E+004,2.49401475202735E+004,2.59696855443657E+004,2.25684174742376E+004,2.39539380918451E+004,2.53908556132307E+004 +2.33999999999999E-008,3.54313724296814E+022,7.86957859460206E+022,1.72677263571692E+023,8.94418173920619E+021,6.32148938814629E+021,3.02070093074746E+023,2.45991621374502E+004,2.48788966310673E+004,2.60591545823869E+004,2.30441173377485E+004,2.45736722965378E+004,2.54600606340587E+004,0.00000000000000E+000,0.00000000000000E+000,2.58217636793858E+004,2.21635923899042E+004,2.37609246652024E+004,0.00000000000000E+000,0.00000000000000E+000,1.87146497276040E+000,1.89920577256677E+000,1.88694896719206E+000,0.00000000000000E+000,0.00000000000000E+000,2.58780270366354E+004,2.26189086438055E+004,2.27569376624239E+004,2.45991621374502E+004,2.48788966310673E+004,2.59417816707125E+004,2.26784643140697E+004,2.38234006455674E+004,2.53664368850321E+004 +2.35999999999999E-008,3.57366858522284E+022,7.90411404731640E+022,1.72497078601008E+023,8.74397621622452E+021,6.37654590696625E+021,3.02395427049592E+023,2.45112076449095E+004,2.48255676182837E+004,2.60292847861354E+004,2.28439979421451E+004,2.47191292312117E+004,2.54155170287742E+004,0.00000000000000E+000,0.00000000000000E+000,2.58259385320323E+004,2.22474593018028E+004,2.39825116164835E+004,0.00000000000000E+000,0.00000000000000E+000,1.87148528609890E+000,1.89957916097813E+000,1.88797324773309E+000,0.00000000000000E+000,0.00000000000000E+000,2.58301549905753E+004,2.28271306144911E+004,2.25578822886564E+004,2.45112076449095E+004,2.48255676182837E+004,2.59159440626628E+004,2.26748706666991E+004,2.38896823053825E+004,2.53284826605092E+004 +2.37999999999999E-008,3.60419992747755E+022,7.92663716865184E+022,1.72316893630325E+023,8.60383235013735E+021,6.43160242578621E+021,3.02660699367542E+023,2.44753231988244E+004,2.47671062598234E+004,2.60210481219797E+004,2.25900906484268E+004,2.48997589224083E+004,2.53872112613695E+004,0.00000000000000E+000,0.00000000000000E+000,2.57520468716818E+004,2.24357897246386E+004,2.40914844774378E+004,0.00000000000000E+000,0.00000000000000E+000,1.87112480471361E+000,1.90040764203614E+000,1.88847019662170E+000,0.00000000000000E+000,0.00000000000000E+000,2.58408742916182E+004,2.25865663179455E+004,2.28371817544815E+004,2.44753231988244E+004,2.47671062598234E+004,2.58953507147572E+004,2.25465738982172E+004,2.40793218188780E+004,2.52969751557386E+004 +2.39999999999999E-008,3.63873538019188E+022,7.94715823475746E+022,1.72106677831194E+023,8.46368848405017E+021,6.50667949690433E+021,3.02935981961642E+023,2.44338349349502E+004,2.48151028728295E+004,2.60028256855151E+004,2.25752436268761E+004,2.51186144498016E+004,2.53880261573199E+004,0.00000000000000E+000,0.00000000000000E+000,2.57207391727966E+004,2.23263384382037E+004,2.41366440853416E+004,0.00000000000000E+000,0.00000000000000E+000,1.87097145936010E+000,1.89992782805069E+000,1.88867484867417E+000,0.00000000000000E+000,0.00000000000000E+000,2.57470191527853E+004,2.27158014153012E+004,2.24345651896195E+004,2.44338349349502E+004,2.48151028728295E+004,2.58515532073839E+004,2.25474482176437E+004,2.40701223365102E+004,2.52787870459228E+004 +2.41999999999999E-008,3.68228008144040E+022,7.96667827324817E+022,1.71851415789393E+023,8.32854975603755E+021,6.58175656802246E+021,3.03251305660338E+023,2.44789223363801E+004,2.48179689660615E+004,2.59874652214156E+004,2.25929513309422E+004,2.51182294230908E+004,2.53849574956246E+004,0.00000000000000E+000,0.00000000000000E+000,2.56530053639780E+004,2.21253229903943E+004,2.42996156532658E+004,0.00000000000000E+000,0.00000000000000E+000,1.87063844725312E+000,1.89903446741910E+000,1.88940719261893E+000,0.00000000000000E+000,0.00000000000000E+000,2.56770154937234E+004,2.25743669388610E+004,2.23254683893153E+004,2.44789223363801E+004,2.48179689660615E+004,2.58060333307201E+004,2.24588439967675E+004,2.40829855170728E+004,2.52559886518353E+004 +2.43999999999999E-008,3.70680525800565E+022,7.98019214604944E+022,1.71706266785231E+023,8.23845727069579E+021,6.62680281069334E+021,3.03441500907171E+023,2.44373677298499E+004,2.47927577869682E+004,2.59402866434304E+004,2.27307723089849E+004,2.52527098244567E+004,2.53527494504071E+004,0.00000000000000E+000,0.00000000000000E+000,2.56810440716859E+004,2.20221978839277E+004,2.42821471526466E+004,0.00000000000000E+000,0.00000000000000E+000,1.87077650725492E+000,1.89856993783862E+000,1.88932915576455E+000,0.00000000000000E+000,0.00000000000000E+000,2.56660699695728E+004,2.23822337207846E+004,2.20078156111455E+004,2.44373677298499E+004,2.47927577869682E+004,2.57898788606239E+004,2.24347174313887E+004,2.40445369252122E+004,2.52332163021855E+004 +2.45999999999999E-008,3.73633557264545E+022,8.00271526738488E+022,1.71546102366845E+023,8.11332881883225E+021,6.65182850106604E+021,3.03701768087047E+023,2.44683510065284E+004,2.48150035196094E+004,2.59507669891311E+004,2.25987993821842E+004,2.53310806154765E+004,2.53659906269280E+004,0.00000000000000E+000,0.00000000000000E+000,2.55537884607612E+004,2.22059661853464E+004,2.39151841412746E+004,0.00000000000000E+000,0.00000000000000E+000,1.87014753576914E+000,1.89939477352460E+000,1.88766399570654E+000,0.00000000000000E+000,0.00000000000000E+000,2.56553147037218E+004,2.19629250495402E+004,2.21460556469169E+004,2.44683510065284E+004,2.48150035196094E+004,2.57566935750652E+004,2.23063253243187E+004,2.40181845829820E+004,2.52197990670764E+004 +2.47999999999999E-008,3.76636640109270E+022,8.03274609583213E+022,1.71365917396162E+023,7.93314384814874E+021,6.71189015796055E+021,3.04002076371520E+023,2.44348378045401E+004,2.47495235097794E+004,2.59539666297231E+004,2.27517493669212E+004,2.49716829252440E+004,2.53422522359214E+004,0.00000000000000E+000,0.00000000000000E+000,2.55544338173920E+004,2.17438795723363E+004,2.42813673309478E+004,0.00000000000000E+000,0.00000000000000E+000,1.87015074093654E+000,1.89729464951262E+000,1.88932566950800E+000,0.00000000000000E+000,0.00000000000000E+000,2.55919035859150E+004,2.16702229428411E+004,2.23308217661794E+004,2.44348378045401E+004,2.47495235097794E+004,2.57398064565178E+004,2.21608975875037E+004,2.40157180592421E+004,2.51850052905843E+004 +2.49999999999999E-008,3.80640750568903E+022,8.05576973097502E+022,1.71150696458957E+023,7.80301025821066E+021,6.74192098640780E+021,3.04317400070216E+023,2.44667159192355E+004,2.47109986390925E+004,2.59487291814385E+004,2.26889753702915E+004,2.47706399397145E+004,2.53260284637152E+004,0.00000000000000E+000,0.00000000000000E+000,2.54771957906955E+004,2.18620269794197E+004,2.42197947018349E+004,0.00000000000000E+000,0.00000000000000E+000,1.86976601133684E+000,1.89783991046518E+000,1.88904970924891E+000,0.00000000000000E+000,0.00000000000000E+000,2.55605256955490E+004,2.14994863115694E+004,2.23655653422464E+004,2.44667159192355E+004,2.47109986390925E+004,2.57073724778383E+004,2.21165651913389E+004,2.39213612324439E+004,2.51567950898022E+004 +2.51999999999999E-008,3.84744963790028E+022,8.07278720042846E+022,1.70940480659826E+023,7.71291777286890E+021,6.75193126255688E+021,3.04607698078539E+023,2.43239880054624E+004,2.46727986605685E+004,2.59215432552418E+004,2.28295095946347E+004,2.43733182466894E+004,2.52762025795805E+004,0.00000000000000E+000,0.00000000000000E+000,2.55103108305547E+004,2.19407054965528E+004,2.39582099082345E+004,0.00000000000000E+000,0.00000000000000E+000,1.86993123903840E+000,1.89819981974752E+000,1.88786182037142E+000,0.00000000000000E+000,0.00000000000000E+000,2.55075835887847E+004,2.15870307278871E+004,2.24887990911890E+004,2.43239880054624E+004,2.46727986605685E+004,2.56890961411764E+004,2.22247017286286E+004,2.37123430974751E+004,2.51157919470614E+004 +2.53999999999999E-008,3.88448765965189E+022,8.10482008410553E+022,1.70745280274919E+023,7.54274307833448E+021,6.77195181485505E+021,3.04953052605682E+023,2.42474104889845E+004,2.46557670974372E+004,2.58569159420561E+004,2.27552855911405E+004,2.42757858452748E+004,2.52208372750725E+004,0.00000000000000E+000,0.00000000000000E+000,2.55395110933670E+004,2.16637310598930E+004,2.39439661791955E+004,0.00000000000000E+000,0.00000000000000E+000,1.87007658666848E+000,1.89692143239503E+000,1.88779640745601E+000,0.00000000000000E+000,0.00000000000000E+000,2.54733371247124E+004,2.16660123429350E+004,2.25330080781341E+004,2.42474104889845E+004,2.46557670974372E+004,2.56588498807029E+004,2.21391933646285E+004,2.36787932420414E+004,2.50814431115593E+004 +2.55999999999999E-008,3.92502927805568E+022,8.12434012259624E+022,1.70485013095043E+023,7.38758379802369E+021,6.88706999056951E+021,3.05253360890155E+023,2.42815063772356E+004,2.45874378034084E+004,2.58143924615067E+004,2.26517343597624E+004,2.41479628501513E+004,2.51765963182244E+004,0.00000000000000E+000,0.00000000000000E+000,2.55523762669408E+004,2.19415456136283E+004,2.38826010826891E+004,0.00000000000000E+000,0.00000000000000E+000,1.87014052154872E+000,1.89820364912447E+000,1.88751371985093E+000,0.00000000000000E+000,0.00000000000000E+000,2.54039849487094E+004,2.14736755292295E+004,2.29550496599115E+004,2.42815063772356E+004,2.45874378034084E+004,2.56235925609453E+004,2.21147539052908E+004,2.37288420360659E+004,2.50475820924110E+004 +2.57999999999999E-008,3.95756267554020E+022,8.14686324393168E+022,1.70289812710135E+023,7.24243479386198E+021,6.95213678553855E+021,3.05528643484255E+023,2.43189999587148E+004,2.44898958423084E+004,2.58305710344482E+004,2.24695435461366E+004,2.43868462033041E+004,2.51647632732908E+004,0.00000000000000E+000,0.00000000000000E+000,2.54596462964159E+004,2.15810813147856E+004,2.40839698194208E+004,0.00000000000000E+000,0.00000000000000E+000,1.86967827781646E+000,1.89653371760893E+000,1.88843606905460E+000,0.00000000000000E+000,0.00000000000000E+000,2.53965515013713E+004,2.13748485905361E+004,2.31298250464065E+004,2.43189999587148E+004,2.44898958423084E+004,2.56032606818513E+004,2.19077557483205E+004,2.39388482875727E+004,2.50145583984519E+004 +2.59999999999999E-008,3.98509093495018E+022,8.16738431003730E+022,1.70139658567899E+023,7.12731661814752E+021,6.97716247591126E+021,3.05768890111833E+023,2.43463743673550E+004,2.44672841144803E+004,2.57699890256475E+004,2.24000300367193E+004,2.43919657935043E+004,2.51264876156920E+004,0.00000000000000E+000,0.00000000000000E+000,2.54461922010607E+004,2.12201832494486E+004,2.38705369058224E+004,0.00000000000000E+000,0.00000000000000E+000,1.86961093798843E+000,1.89480599033584E+000,1.88745797683035E+000,0.00000000000000E+000,0.00000000000000E+000,2.54211878290915E+004,2.12292183289198E+004,2.32494887874389E+004,2.43463743673550E+004,2.44672841144803E+004,2.55803164969108E+004,2.17361673867457E+004,2.39173162005001E+004,2.49946426595519E+004 +2.61999999999999E-008,4.01962638766452E+022,8.19391154183237E+022,1.69944458182992E+023,6.97215733783672E+021,7.02220871858214E+021,3.06074203534380E+023,2.42564611670598E+004,2.44046322546706E+004,2.57140658515187E+004,2.25044704851904E+004,2.45737720777583E+004,2.50728184819352E+004,0.00000000000000E+000,0.00000000000000E+000,2.55000777532336E+004,2.07665030157660E+004,2.38724378786276E+004,0.00000000000000E+000,0.00000000000000E+000,1.86988022578861E+000,1.89255050199206E+000,1.88746676401778E+000,0.00000000000000E+000,0.00000000000000E+000,2.53807862633238E+004,2.13665780470115E+004,2.31840035097091E+004,2.42564611670598E+004,2.44046322546706E+004,2.55587951255571E+004,2.16970805238903E+004,2.39780113622419E+004,2.49545458378800E+004 +2.63999999999999E-008,4.04665413326704E+022,8.21793620459017E+022,1.69804314316905E+023,6.84702888597317E+021,7.03221899473122E+021,3.06329465576181E+023,2.42930441613592E+004,2.43503271098416E+004,2.56962511927954E+004,2.23128835000054E+004,2.44207185283931E+004,2.50449068671185E+004,0.00000000000000E+000,0.00000000000000E+000,2.54526705327293E+004,2.06603195672078E+004,2.37505646493699E+004,0.00000000000000E+000,0.00000000000000E+000,1.86964337172076E+000,1.89200857359582E+000,1.88690061991142E+000,0.00000000000000E+000,0.00000000000000E+000,2.53961170386804E+004,2.12640715963595E+004,2.32295796149555E+004,2.42930441613592E+004,2.43503271098416E+004,2.55425784011119E+004,2.15548622525312E+004,2.38911927231134E+004,2.49306239078908E+004 +2.65999999999999E-008,4.08469318263356E+022,8.24496395019270E+022,1.69609113931998E+023,6.70688501988600E+021,7.04222927088030E+021,3.06654799551027E+023,2.42196052596176E+004,2.44088043353526E+004,2.56525079859408E+004,2.23093886016136E+004,2.44371219561163E+004,2.50262222004635E+004,0.00000000000000E+000,0.00000000000000E+000,2.54635480186610E+004,2.05818516913524E+004,2.38531384794319E+004,0.00000000000000E+000,0.00000000000000E+000,1.86969779353788E+000,1.89160457280322E+000,1.88737748937044E+000,0.00000000000000E+000,0.00000000000000E+000,2.52871053715942E+004,2.12789855545584E+004,2.30000581925811E+004,2.42196052596176E+004,2.44088043353526E+004,2.54946985312654E+004,2.15361836452127E+004,2.38597868526948E+004,2.49087694662029E+004 +2.67999999999999E-008,4.11672606631063E+022,8.25697628157160E+022,1.69423923823240E+023,6.62179767261879E+021,7.09228065162572E+021,3.06875025626307E+023,2.41511100456413E+004,2.43369522621512E+004,2.56317270166822E+004,2.25214196471389E+004,2.44805217237344E+004,2.49910014121949E+004,0.00000000000000E+000,0.00000000000000E+000,2.54310767614238E+004,2.07256206923563E+004,2.39069508617190E+004,0.00000000000000E+000,0.00000000000000E+000,1.86953519985802E+000,1.89234249585494E+000,1.88762606102557E+000,0.00000000000000E+000,0.00000000000000E+000,2.53053492254267E+004,2.13154975940366E+004,2.26379622022254E+004,2.41511100456413E+004,2.43369522621512E+004,2.54820985094146E+004,2.16784390805397E+004,2.37882939071021E+004,2.48742041281920E+004 +2.69999999999999E-008,4.15076100521751E+022,8.28700711001885E+022,1.69243738852556E+023,6.46163325423346E+021,7.11230120392389E+021,3.07195354463077E+023,2.41328461807555E+004,2.43059744315712E+004,2.56104586969969E+004,2.24312574418152E+004,2.46639290423067E+004,2.49701179442662E+004,0.00000000000000E+000,0.00000000000000E+000,2.53705953128466E+004,2.04967000660355E+004,2.40035131426798E+004,0.00000000000000E+000,0.00000000000000E+000,1.86923126670142E+000,1.89116272729942E+000,1.88806936505704E+000,0.00000000000000E+000,0.00000000000000E+000,2.52821748474941E+004,2.13476815734174E+004,2.24713576823918E+004,2.41328461807555E+004,2.43059744315712E+004,2.54496069519476E+004,2.15858682426001E+004,2.38462755824442E+004,2.48447868062033E+004 +2.71999999999999E-008,4.18629748554676E+022,8.30752817612447E+022,1.69038528191500E+023,6.33149966429537E+021,7.16735772274385E+021,3.07475642195251E+023,2.40294314530913E+004,2.43339925209614E+004,2.55908152616872E+004,2.20586592427228E+004,2.45089696144697E+004,2.49407055736342E+004,0.00000000000000E+000,0.00000000000000E+000,2.52811907991997E+004,2.03846784297823E+004,2.42351613100575E+004,0.00000000000000E+000,0.00000000000000E+000,1.86877938709744E+000,1.89057594121233E+000,1.88911870906528E+000,0.00000000000000E+000,0.00000000000000E+000,2.53043644708931E+004,2.14316653029365E+004,2.23613110836727E+004,2.40294314530913E+004,2.43339925209614E+004,2.54231695520304E+004,2.14173811016402E+004,2.38103935475740E+004,2.48190511210932E+004 +2.73999999999999E-008,4.21933139683873E+022,8.34156311503135E+022,1.68878363773115E+023,6.16633010783549E+021,7.15734744659477E+021,3.07810986446246E+023,2.40954523688422E+004,2.43284873151229E+004,2.55317527580319E+004,2.18447177714726E+004,2.44821160187681E+004,2.49105224649705E+004,0.00000000000000E+000,0.00000000000000E+000,2.53661748074754E+004,2.01294266588935E+004,2.38185593543294E+004,0.00000000000000E+000,0.00000000000000E+000,1.86920899713457E+000,1.88921497517730E+000,1.88721717954885E+000,0.00000000000000E+000,0.00000000000000E+000,2.51639617283962E+004,2.14625917544352E+004,2.26031436633814E+004,2.40954523688422E+004,2.43284873151229E+004,2.53796127001861E+004,2.12634025265314E+004,2.37546494503573E+004,2.47984911267964E+004 +2.75999999999999E-008,4.26137455666488E+022,8.35057236356553E+022,1.68653132559760E+023,6.10626845094099E+021,7.18737827504202E+021,3.08066248488047E+023,2.41358433959036E+004,2.42980954399239E+004,2.54642989849095E+004,2.18478939767379E+004,2.41418228059914E+004,2.48618863003891E+004,0.00000000000000E+000,0.00000000000000E+000,2.53343446592184E+004,2.01581332291009E+004,2.38371988151382E+004,0.00000000000000E+000,0.00000000000000E+000,1.86904841951368E+000,1.88936972112057E+000,1.88730364926131E+000,0.00000000000000E+000,0.00000000000000E+000,2.51857751530084E+004,2.13668081984765E+004,2.26577848142690E+004,2.41358433959036E+004,2.42980954399239E+004,2.53478434670576E+004,2.12448265674930E+004,2.36273988552753E+004,2.47741764683494E+004 +2.77999999999999E-008,4.29641052318668E+022,8.37259497109351E+022,1.68467942451002E+023,5.98614513715199E+021,7.20739882734018E+021,3.08351541358296E+023,2.40949112736067E+004,2.43102202244287E+004,2.54134247291007E+004,2.18850397869892E+004,2.39797285198289E+004,2.48281504033223E+004,0.00000000000000E+000,0.00000000000000E+000,2.52920558783262E+004,2.01982508662645E+004,2.35575827235646E+004,0.00000000000000E+000,0.00000000000000E+000,1.86883446930043E+000,1.88958525713743E+000,1.88599241032398E+000,0.00000000000000E+000,0.00000000000000E+000,2.51920789818996E+004,2.12078812125756E+004,2.27191750127022E+004,2.40949112736067E+004,2.43102202244287E+004,2.53159540753499E+004,2.12258348485458E+004,2.34979866612284E+004,2.47508396737402E+004 +2.79999999999999E-008,4.33645162778301E+022,8.39061346816186E+022,1.68267736928021E+023,5.89605265181023E+021,7.20739882734018E+021,3.08641839366620E+023,2.41339040311268E+004,2.42754819436169E+004,2.53873096398521E+004,2.17297172603889E+004,2.41626757827826E+004,2.48104783373163E+004,0.00000000000000E+000,0.00000000000000E+000,2.52817035244326E+004,2.02004406568657E+004,2.36108970432492E+004,0.00000000000000E+000,0.00000000000000E+000,1.86878198747699E+000,1.88959699784572E+000,1.88624477204456E+000,0.00000000000000E+000,0.00000000000000E+000,2.50929600235917E+004,2.13605705558794E+004,2.27388607162293E+004,2.41339040311268E+004,2.42754819436169E+004,2.52728710042661E+004,2.12031247922015E+004,2.35980110018177E+004,2.47248421465780E+004 +2.81999999999999E-008,4.37198810811226E+022,8.41013350665258E+022,1.68052515990815E+023,5.76091392379761E+021,7.28247589845831E+021,3.08917121960720E+023,2.40801397645423E+004,2.42304723024846E+004,2.53323181109438E+004,2.15215880752929E+004,2.42496885918570E+004,2.47585418763900E+004,0.00000000000000E+000,0.00000000000000E+000,2.52816378681585E+004,2.04548931918964E+004,2.33490339497478E+004,0.00000000000000E+000,0.00000000000000E+000,1.86878165449497E+000,1.89094447392163E+000,1.88499440470388E+000,0.00000000000000E+000,0.00000000000000E+000,2.51040453349607E+004,2.13149650286945E+004,2.25599789183218E+004,2.40801397645423E+004,2.42304723024846E+004,2.52520628505996E+004,2.11689068285475E+004,2.35122663065828E+004,2.46909213941898E+004 +2.83999999999999E-008,4.41152869890114E+022,8.42765148991347E+022,1.67842300191685E+023,5.66081116230677E+021,7.30750158883102E+021,3.09202414830968E+023,2.40505254358937E+004,2.41576707086579E+004,2.52673063348688E+004,2.14673720870196E+004,2.43085305152671E+004,2.46990318986119E+004,0.00000000000000E+000,0.00000000000000E+000,2.52159061637819E+004,2.05377361821537E+004,2.31233372140478E+004,0.00000000000000E+000,0.00000000000000E+000,1.86844744044066E+000,1.89137610931682E+000,1.88389447076969E+000,0.00000000000000E+000,0.00000000000000E+000,2.51992765440005E+004,2.09646012779811E+004,2.26869378021183E+004,2.40505254358937E+004,2.41576707086579E+004,2.52335144041807E+004,2.10663153582820E+004,2.35130557216732E+004,2.46545466215259E+004 +2.85999999999999E-008,4.44005798592603E+022,8.44116536271474E+022,1.67662115221001E+023,5.55570326274139E+021,7.38257865994915E+021,3.09412630630099E+023,2.40727984830122E+004,2.41816492143515E+004,2.52149634225030E+004,2.14189464323183E+004,2.44383733159433E+004,2.46824727875044E+004,0.00000000000000E+000,0.00000000000000E+000,2.51642593254850E+004,2.03378028079376E+004,2.32901033531956E+004,0.00000000000000E+000,0.00000000000000E+000,1.86818364501970E+000,1.89032851836111E+000,1.88470922076652E+000,0.00000000000000E+000,0.00000000000000E+000,2.51568684717579E+004,2.14141788770170E+004,2.29678269922637E+004,2.40727984830122E+004,2.41816492143515E+004,2.51842545077191E+004,2.11209560345104E+004,2.36968390738463E+004,2.46427888784135E+004 +2.87999999999999E-008,4.48610525621181E+022,8.45918385978309E+022,1.67416863455348E+023,5.45059536317601E+021,7.41260948839640E+021,3.09732959466870E+023,2.40967621477471E+004,2.41279806223101E+004,2.51783041423502E+004,2.11399216412864E+004,2.44158188288876E+004,2.46454854683570E+004,0.00000000000000E+000,0.00000000000000E+000,2.51000908510960E+004,2.00507615652049E+004,2.30899970369970E+004,0.00000000000000E+000,0.00000000000000E+000,1.86785441643114E+000,1.88878869600417E+000,1.88373020190784E+000,0.00000000000000E+000,0.00000000000000E+000,2.51680915161240E+004,2.14282736277997E+004,2.30455947346888E+004,2.40967621477471E+004,2.41279806223101E+004,2.51540583904969E+004,2.09250087832866E+004,2.36549030773264E+004,2.46103877438743E+004 +2.89999999999999E-008,4.51513505704415E+022,8.46819310831726E+022,1.67236678484665E+023,5.37051315398335E+021,7.48268142143998E+021,3.09923154713702E+023,2.41566729357109E+004,2.40292892279296E+004,2.51571600330641E+004,2.12035736547973E+004,2.42786262086006E+004,2.46135085011323E+004,0.00000000000000E+000,0.00000000000000E+000,2.51045352022221E+004,2.01319825274856E+004,2.33537987612511E+004,0.00000000000000E+000,0.00000000000000E+000,1.86787727199215E+000,1.88922877041703E+000,1.88501740153292E+000,0.00000000000000E+000,0.00000000000000E+000,2.51396448656905E+004,2.14567607619910E+004,2.28326542367094E+004,2.41566729357109E+004,2.40292892279296E+004,2.51377468934666E+004,2.09832142177624E+004,2.36053875651631E+004,2.45829600816745E+004 +2.91999999999999E-008,4.56218335494485E+022,8.48020543969616E+022,1.66971406166714E+023,5.28042066864159E+021,7.54274307833448E+021,3.10218457860100E+023,2.40947335153180E+004,2.40260992362371E+004,2.51158543341373E+004,2.08986710454113E+004,2.44051773637502E+004,2.45787237202095E+004,0.00000000000000E+000,0.00000000000000E+000,2.50670668780759E+004,2.01268271823574E+004,2.33220644878947E+004,0.00000000000000E+000,0.00000000000000E+000,1.86768433918190E+000,1.88920094104108E+000,1.88486406610419E+000,0.00000000000000E+000,0.00000000000000E+000,2.50976866475906E+004,2.17144646936692E+004,2.29217636118601E+004,2.40947335153180E+004,2.40260992362371E+004,2.50972956854818E+004,2.09238436518691E+004,2.36777340918239E+004,2.45514759559287E+004 +2.93999999999999E-008,4.60773011142318E+022,8.49472034011233E+022,1.66766195505658E+023,5.23036928789617E+021,7.49769683566361E+021,3.10518766144573E+023,2.40228537406246E+004,2.39768081611539E+004,2.51092139461028E+004,2.05517639359737E+004,2.44037488189167E+004,2.45444243739736E+004,0.00000000000000E+000,0.00000000000000E+000,2.50096251055042E+004,2.02022667151723E+004,2.34451163759783E+004,0.00000000000000E+000,0.00000000000000E+000,1.86738746266443E+000,1.88960678647075E+000,1.88545636610810E+000,0.00000000000000E+000,0.00000000000000E+000,2.50795383676599E+004,2.19250572918000E+004,2.28914899978900E+004,2.40228537406246E+004,2.39768081611539E+004,2.50734911751692E+004,2.08545641473690E+004,2.37019830930988E+004,2.45133949439107E+004 +2.95999999999999E-008,4.63726042606297E+022,8.51624243383286E+022,1.66596020811124E+023,5.10023569795809E+021,7.54274307833448E+021,3.10774028186375E+023,2.40315070101940E+004,2.39623948692500E+004,2.50778902350149E+004,2.02488604345714E+004,2.44911593233137E+004,2.45225782078767E+004,0.00000000000000E+000,0.00000000000000E+000,2.49966553573190E+004,2.01628586811268E+004,2.34239545832073E+004,0.00000000000000E+000,0.00000000000000E+000,1.86732024671739E+000,1.88939515277919E+000,1.88535493968576E+000,0.00000000000000E+000,0.00000000000000E+000,2.50180238955893E+004,2.19824573643107E+004,2.30862201252816E+004,2.40315070101940E+004,2.39623948692500E+004,2.50383661992978E+004,2.07285400711875E+004,2.37908413053293E+004,2.44922655501286E+004 +2.97999999999999E-008,4.67179587877731E+022,8.52475116855958E+022,1.66420840978515E+023,5.05518945528721E+021,7.54774821640903E+021,3.10989249123580E+023,2.39756652508387E+004,2.39335246091000E+004,2.50538204623690E+004,2.01836895146652E+004,2.47762276421822E+004,2.44988614713605E+004,0.00000000000000E+000,0.00000000000000E+000,2.49470545193673E+004,1.99453077783316E+004,2.29128998243367E+004,0.00000000000000E+000,0.00000000000000E+000,1.86706256005210E+000,1.88821208013766E+000,1.88284978644613E+000,0.00000000000000E+000,0.00000000000000E+000,2.50566114371637E+004,2.18564626008031E+004,2.29180453811381E+004,2.39756652508387E+004,2.39335246091000E+004,2.50256050873694E+004,2.06040352973387E+004,2.37265561935586E+004,2.44651196146836E+004 +2.99999999999999E-008,4.70482979006929E+022,8.53876555516830E+022,1.66260676560129E+023,4.99012266031817E+021,7.53773794025994E+021,3.11224490613083E+023,2.40189956300768E+004,2.38942460920081E+004,2.50421485300275E+004,2.04649548234651E+004,2.44192277649448E+004,2.44840611134564E+004,0.00000000000000E+000,0.00000000000000E+000,2.49230752623059E+004,2.03850752995930E+004,2.30508249289994E+004,0.00000000000000E+000,0.00000000000000E+000,1.86693762376382E+000,1.89057803123982E+000,1.88353660416460E+000,0.00000000000000E+000,0.00000000000000E+000,2.49942374989565E+004,2.15784196038531E+004,2.27876589395023E+004,2.40189956300768E+004,2.38942460920081E+004,2.49958215582293E+004,2.07662228852135E+004,2.35707432115109E+004,2.44435930793447E+004 +3.01999999999999E-008,4.73686267374635E+022,8.55678405223665E+022,1.66090501865595E+023,4.89001989882733E+021,7.55775849255811E+021,3.11474747516810E+023,2.40385396283288E+004,2.38595503918697E+004,2.50063533114900E+004,2.03811266744823E+004,2.42666509774412E+004,2.44535592320114E+004,0.00000000000000E+000,0.00000000000000E+000,2.49219598069131E+004,2.00510588129251E+004,2.31984478710876E+004,0.00000000000000E+000,0.00000000000000E+000,1.86693180632529E+000,1.88879031293531E+000,1.88426285037855E+000,0.00000000000000E+000,0.00000000000000E+000,2.49678289441780E+004,2.14361603260186E+004,2.26541630719520E+004,2.40385396283288E+004,2.38595503918697E+004,2.49721887589383E+004,2.05969320998210E+004,2.35058213352884E+004,2.44202683099473E+004 +3.03999999999999E-008,4.76839504361597E+022,8.57129895265282E+022,1.65930337447210E+023,4.81494282770921E+021,7.56276363063265E+021,3.11704983868239E+023,2.39614574380779E+004,2.38692255662222E+004,2.49558726804233E+004,2.05113471034681E+004,2.40547276973382E+004,2.44144225540686E+004,0.00000000000000E+000,0.00000000000000E+000,2.49819698415957E+004,2.00580936165691E+004,2.32438508400822E+004,0.00000000000000E+000,0.00000000000000E+000,1.86724405651685E+000,1.88882856627034E+000,1.88448439790905E+000,0.00000000000000E+000,0.00000000000000E+000,2.49073632052026E+004,2.08309810342630E+004,2.28070859188335E+004,2.39614574380779E+004,2.38692255662222E+004,2.49488408666487E+004,2.04798685625028E+004,2.34703167072638E+004,2.43960137345579E+004 +3.05999999999999E-008,4.80242998252285E+022,8.59332156018081E+022,1.65735137062302E+023,4.67980409969658E+021,7.61281501137807E+021,3.11985271600414E+023,2.39827765796056E+004,2.38326929515672E+004,2.49173314302045E+004,2.03132006847330E+004,2.38655220276834E+004,2.43799936447703E+004,0.00000000000000E+000,0.00000000000000E+000,2.48768785930621E+004,2.00192501336117E+004,2.34566317864966E+004,0.00000000000000E+000,0.00000000000000E+000,1.86669626788007E+000,1.88861701703346E+000,1.88551148302192E+000,0.00000000000000E+000,0.00000000000000E+000,2.49586611287133E+004,2.07452670077497E+004,2.28248265803540E+004,2.39827765796056E+004,2.38326929515672E+004,2.49183721398296E+004,2.03580533209378E+004,2.34512669434031E+004,2.43711109702556E+004 +3.07999999999999E-008,4.83596440762228E+022,8.60583440536716E+022,1.65559957229693E+023,4.60973216665299E+021,7.62783042560169E+021,3.12215507951843E+023,2.39224934721723E+004,2.38608931977735E+004,2.49165205527607E+004,2.02087999306279E+004,2.40255612530970E+004,2.43803083810368E+004,0.00000000000000E+000,0.00000000000000E+000,2.48148712321337E+004,1.99931800668990E+004,2.31323776480381E+004,0.00000000000000E+000,0.00000000000000E+000,1.86637092961758E+000,1.88847458240826E+000,1.88393893354653E+000,0.00000000000000E+000,0.00000000000000E+000,2.49213881706703E+004,2.05758929736399E+004,2.27082878674542E+004,2.39224934721723E+004,2.38608931977735E+004,2.48903087295051E+004,2.02562695772090E+004,2.33984130198925E+004,2.43517877402354E+004 +3.09999999999999E-008,4.86149061180244E+022,8.61934827816842E+022,1.65414808225532E+023,4.52464481938578E+021,7.66286639212349E+021,3.12410708336750E+023,2.39096321553894E+004,2.39001120510100E+004,2.48975753881936E+004,2.03384678570767E+004,2.37843140238288E+004,2.43753054483231E+004,0.00000000000000E+000,0.00000000000000E+000,2.47448305319884E+004,1.99433590643265E+004,2.32654609471494E+004,0.00000000000000E+000,0.00000000000000E+000,1.86600152809812E+000,1.88820136841767E+000,1.88458954867260E+000,0.00000000000000E+000,0.00000000000000E+000,2.48848869448879E+004,2.07559730164240E+004,2.28777511897510E+004,2.39096321553894E+004,2.39001120510100E+004,2.48523672680921E+004,2.03513834718782E+004,2.33789230075553E+004,2.43416122654052E+004 +3.11999999999999E-008,4.90553582685841E+022,8.63736677523677E+022,1.65189577012177E+023,4.42954719596949E+021,7.67287666827257E+021,3.12721026897371E+023,2.39873131120966E+004,2.38841025290850E+004,2.49129785913270E+004,2.01521730990669E+004,2.37448036095558E+004,2.43875002514462E+004,0.00000000000000E+000,0.00000000000000E+000,2.46606127656365E+004,2.03711537921378E+004,2.31670696560044E+004,0.00000000000000E+000,0.00000000000000E+000,1.86555464356533E+000,1.89050466894987E+000,1.88410924073242E+000,0.00000000000000E+000,0.00000000000000E+000,2.47614857572394E+004,2.09267551754666E+004,2.27875210259783E+004,2.39873131120966E+004,2.38841025290850E+004,2.48002727800209E+004,2.04370793969040E+004,2.33085701125687E+004,2.43212975229948E+004 +3.13999999999999E-008,4.94207333480257E+022,8.65088064803804E+022,1.64999381765345E+023,4.35447012485136E+021,7.68789208249620E+021,3.12971283801098E+023,2.39762386541925E+004,2.38831088664297E+004,2.49091731975467E+004,2.01040068902976E+004,2.36146411352390E+004,2.43795843999277E+004,0.00000000000000E+000,0.00000000000000E+000,2.45770632873905E+004,1.99477158720067E+004,2.31511709737285E+004,0.00000000000000E+000,0.00000000000000E+000,1.86510835170490E+000,1.88822531414853E+000,1.88403125427203E+000,0.00000000000000E+000,0.00000000000000E+000,2.47364245053877E+004,2.09962376771700E+004,2.29146516754485E+004,2.39762386541925E+004,2.38831088664297E+004,2.47686192103406E+004,2.03202235279233E+004,2.32844318283189E+004,2.43003808854078E+004 +3.15999999999999E-008,4.98661906366599E+022,8.66039041037967E+022,1.64764140275841E+023,4.29440846795686E+021,7.71291777286890E+021,3.13241561257124E+023,2.39619424783810E+004,2.38913262766016E+004,2.48373261781205E+004,2.03758462518352E+004,2.34643088153782E+004,2.43414509763241E+004,0.00000000000000E+000,0.00000000000000E+000,2.45396323599938E+004,1.97685426623732E+004,2.28614609702656E+004,0.00000000000000E+000,0.00000000000000E+000,1.86490744693267E+000,1.88723201353821E+000,1.88259156169787E+000,0.00000000000000E+000,0.00000000000000E+000,2.47444644198064E+004,2.08218330813992E+004,2.30533015637244E+004,2.39619424783810E+004,2.38913262766016E+004,2.47294012074365E+004,2.03389447627694E+004,2.31799783052845E+004,2.42771758116875E+004 +3.17999999999999E-008,5.02515862683996E+022,8.66689708987657E+022,1.64553924476711E+023,4.24435708721144E+021,7.74795373939070E+021,3.13466792470478E+023,2.38464903070153E+004,2.38623196925852E+004,2.47932311693608E+004,2.05747554778423E+004,2.34041364995630E+004,2.42926239853877E+004,0.00000000000000E+000,0.00000000000000E+000,2.45412056465088E+004,1.97338618870403E+004,2.25762653159157E+004,0.00000000000000E+000,0.00000000000000E+000,1.86491590334794E+000,1.88703770820902E+000,1.88113897104675E+000,0.00000000000000E+000,0.00000000000000E+000,2.47664020973364E+004,2.07431222604349E+004,2.30534202259523E+004,2.38464903070153E+004,2.38623196925852E+004,2.47169498926434E+004,2.03932457486652E+004,2.30758807699097E+004,2.42420091000393E+004 +3.19999999999999E-008,5.07971463185247E+022,8.67140171414366E+022,1.64238600778014E+023,4.17929029224240E+021,7.83304108665791E+021,3.13762095616876E+023,2.39382596442628E+004,2.37680975479835E+004,2.47209981054043E+004,2.03381811013633E+004,2.31588917206793E+004,2.42335465438629E+004,0.00000000000000E+000,0.00000000000000E+000,2.45214080545119E+004,1.98115187364743E+004,2.27465669738552E+004,0.00000000000000E+000,0.00000000000000E+000,1.86480941411087E+000,1.88747186971249E+000,1.88201066045488E+000,0.00000000000000E+000,0.00000000000000E+000,2.47732303692034E+004,2.07770681295823E+004,2.28567968548170E+004,2.39382596442628E+004,2.37680975479835E+004,2.46819973317312E+004,2.03212973529682E+004,2.29583414209322E+004,2.42079000000854E+004 +3.21999999999999E-008,5.11525111218171E+022,8.67790839364056E+022,1.64043400393107E+023,4.12923891149698E+021,7.86807705317970E+021,3.13972311416007E+023,2.39316156137374E+004,2.37479348790525E+004,2.47155470961588E+004,2.02537809035356E+004,2.30333164939498E+004,2.42195537279757E+004,0.00000000000000E+000,0.00000000000000E+000,2.45525984207393E+004,1.95088677255476E+004,2.27401000771687E+004,0.00000000000000E+000,0.00000000000000E+000,1.86497710795216E+000,1.88576069700976E+000,1.88197779312971E+000,0.00000000000000E+000,0.00000000000000E+000,2.46703699554572E+004,2.06196919936351E+004,2.28802084365290E+004,2.39316156137374E+004,2.37479348790525E+004,2.46581179416792E+004,2.01560566515401E+004,2.29086367978512E+004,2.41851386231099E+004 +3.23999999999999E-008,5.14077731636188E+022,8.68741815598219E+022,1.63903256527020E+023,4.06917725460248E+021,7.89310274355241E+021,3.14147491248616E+023,2.39603936077557E+004,2.37034696105194E+004,2.46618058934473E+004,2.01776615243167E+004,2.32532507409133E+004,2.41885333801554E+004,0.00000000000000E+000,0.00000000000000E+000,2.45100373795907E+004,1.97722807221778E+004,2.26791285077598E+004,0.00000000000000E+000,0.00000000000000E+000,1.86474817650631E+000,1.88725291681143E+000,1.88166700934558E+000,0.00000000000000E+000,0.00000000000000E+000,2.47022922284375E+004,2.05164010856002E+004,2.29386985198850E+004,2.39603936077557E+004,2.37034696105194E+004,2.46323747498292E+004,2.01649457173401E+004,2.30048499820286E+004,2.41667720863149E+004 +3.25999999999999E-008,5.17831585192094E+022,8.70093202878345E+022,1.63708056142113E+023,3.99410018348435E+021,7.90811815777603E+021,3.14402753290417E+023,2.38619390033012E+004,2.37108317637903E+004,2.46418832027867E+004,2.03246300333583E+004,2.33251454834503E+004,2.41677951594674E+004,0.00000000000000E+000,0.00000000000000E+000,2.45030389098057E+004,1.96443624923856E+004,2.26142678353028E+004,0.00000000000000E+000,0.00000000000000E+000,1.86471045816031E+000,1.88653316531641E+000,1.88133460109400E+000,0.00000000000000E+000,0.00000000000000E+000,2.46641867851997E+004,2.02532527340768E+004,2.24912755965647E+004,2.38619390033012E+004,2.37108317637903E+004,2.46106659735011E+004,2.01175444299550E+004,2.28884368121560E+004,2.41379252672802E+004 +3.27999999999999E-008,5.21235079082782E+022,8.70994127731763E+022,1.63517860895280E+023,3.92903338851531E+021,7.94815926237237E+021,3.14617974227623E+023,2.37289881539661E+004,2.37229003546333E+004,2.45879858901474E+004,2.06850401485016E+004,2.35167242898670E+004,2.41303776440403E+004,0.00000000000000E+000,0.00000000000000E+000,2.45260129576014E+004,1.96820068202517E+004,2.26278461111552E+004,0.00000000000000E+000,0.00000000000000E+000,1.86483419839021E+000,1.88674592896839E+000,1.88140434359373E+000,0.00000000000000E+000,0.00000000000000E+000,2.46373064655146E+004,1.99118157587097E+004,2.24142363115887E+004,2.37289881539661E+004,2.37229003546333E+004,2.45855199757840E+004,2.01856870630606E+004,2.29532760416151E+004,2.41086256369682E+004 +3.29999999999999E-008,5.24338264688998E+022,8.71995155346672E+022,1.63362701614970E+023,3.87898200776989E+021,7.94815926237237E+021,3.14823184888679E+023,2.37608452071653E+004,2.36523100378365E+004,2.45260977362290E+004,2.06670007250007E+004,2.34948215849669E+004,2.40830392070116E+004,0.00000000000000E+000,0.00000000000000E+000,2.44925784839791E+004,1.98690052115978E+004,2.21305164599049E+004,0.00000000000000E+000,0.00000000000000E+000,1.86465404234052E+000,1.88779112056445E+000,1.87879525519568E+000,0.00000000000000E+000,0.00000000000000E+000,2.47109848888112E+004,1.97758852399972E+004,2.25531753119145E+004,2.37608452071653E+004,2.36523100378365E+004,2.45708592776068E+004,2.01895356339586E+004,2.28484086046777E+004,2.40840635741145E+004 +3.31999999999999E-008,5.28442477910123E+022,8.72695874677107E+022,1.63127460125466E+023,3.81391521280085E+021,8.00822091926687E+021,3.15063431516257E+023,2.36879165288673E+004,2.36046398374574E+004,2.45272705304167E+004,2.07098007615078E+004,2.32218165620834E+004,2.40515361683395E+004,0.00000000000000E+000,0.00000000000000E+000,2.44580910499482E+004,1.98250252324136E+004,2.19435443179260E+004,0.00000000000000E+000,0.00000000000000E+000,1.86446770901360E+000,1.88754704106773E+000,1.87778443641572E+000,0.00000000000000E+000,0.00000000000000E+000,2.46903227331507E+004,1.98784641951152E+004,2.27753524094157E+004,2.36879165288673E+004,2.36046398374574E+004,2.45559867406699E+004,2.02259233309996E+004,2.27429925946616E+004,2.40483761914482E+004 +3.33999999999999E-008,5.31896023181556E+022,8.73847056434252E+022,1.62942270016708E+023,3.74384327975726E+021,8.03324660963958E+021,3.15293667867686E+023,2.36098471193152E+004,2.36017034345714E+004,2.44778014074808E+004,2.11882611809079E+004,2.31052100997664E+004,2.40145330030658E+004,0.00000000000000E+000,0.00000000000000E+000,2.44811232259468E+004,1.98470844758269E+004,2.17306244826691E+004,0.00000000000000E+000,0.00000000000000E+000,1.86459220715965E+000,1.88766959769558E+000,1.87661261850404E+000,0.00000000000000E+000,0.00000000000000E+000,2.46582559820083E+004,1.95619719555465E+004,2.28875195411185E+004,2.36098471193152E+004,2.36017034345714E+004,2.45312791633040E+004,2.03484594366464E+004,2.26667753646990E+004,2.40210274134276E+004 +3.35999999999999E-008,5.35499722595227E+022,8.74948186810651E+022,1.62762085046025E+023,3.68878676093730E+021,8.03324660963958E+021,3.15528909357189E+023,2.35643270851378E+004,2.35902286404573E+004,2.44615281896899E+004,2.14432444168082E+004,2.30727611899010E+004,2.39970084610528E+004,0.00000000000000E+000,0.00000000000000E+000,2.44471702146155E+004,1.97997317682797E+004,2.18844040235641E+004,0.00000000000000E+000,0.00000000000000E+000,1.86440859751971E+000,1.88740618637168E+000,1.87746119145378E+000,0.00000000000000E+000,0.00000000000000E+000,2.46081486223852E+004,2.01153632201381E+004,2.25993680882388E+004,2.35643270851378E+004,2.35902286404573E+004,2.45003475183230E+004,2.06072637620087E+004,2.26106894200658E+004,2.39954955220868E+004 +3.37999999999999E-008,5.39503833054860E+022,8.76549830994505E+022,1.62556874384968E+023,3.60369941367009E+021,8.04325688578866E+021,3.15809197089364E+023,2.34243804815633E+004,2.36194822579796E+004,2.44256255684393E+004,2.17406967542740E+004,2.30905633630968E+004,2.39661900596560E+004,0.00000000000000E+000,0.00000000000000E+000,2.44493008730915E+004,1.95145561531368E+004,2.20140953024506E+004,0.00000000000000E+000,0.00000000000000E+000,1.86442013423707E+000,1.88579333863479E+000,1.87816782646626E+000,0.00000000000000E+000,0.00000000000000E+000,2.45560689802103E+004,2.02537236349921E+004,2.22885891298153E+004,2.34243804815633E+004,2.36194822579796E+004,2.44700615924959E+004,2.06991337850788E+004,2.25634264516745E+004,2.39637518904060E+004 +3.39999999999999E-008,5.42707121422567E+022,8.77751064132395E+022,1.62381694552359E+023,3.52862234255197E+021,8.07328771423591E+021,3.16029423164643E+023,2.34332739127094E+004,2.35689429121784E+004,2.44229307504884E+004,2.15816065253292E+004,2.28945894667825E+004,2.39450228636663E+004,0.00000000000000E+000,0.00000000000000E+000,2.44068816502944E+004,1.98580738697460E+004,2.17874809788335E+004,0.00000000000000E+000,0.00000000000000E+000,1.86419008009145E+000,1.88773055291474E+000,1.87692772432492E+000,0.00000000000000E+000,0.00000000000000E+000,2.45473773069996E+004,2.03567666961704E+004,2.21363984256359E+004,2.34332739127094E+004,2.35689429121784E+004,2.44548317522223E+004,2.07535769055011E+004,2.23719222465867E+004,2.39388167708121E+004 +3.41999999999999E-008,5.46010512551764E+022,8.78752091747303E+022,1.62226535272049E+023,3.48858123795563E+021,8.05326716193775E+021,3.16244644101849E+023,2.34449618681133E+004,2.35527444611737E+004,2.43906337687715E+004,2.15673354574137E+004,2.28006877772750E+004,2.39229011250467E+004,0.00000000000000E+000,0.00000000000000E+000,2.44032987188353E+004,1.98024956681348E+004,2.18537184305546E+004,0.00000000000000E+000,0.00000000000000E+000,1.86417061287098E+000,1.88742159519016E+000,1.87729279786655E+000,0.00000000000000E+000,0.00000000000000E+000,2.45113769052806E+004,2.00473703084035E+004,2.19440171157958E+004,2.34449618681133E+004,2.35527444611737E+004,2.44292540064800E+004,2.06423264478294E+004,2.22930636059673E+004,2.39195816228514E+004 +3.43999999999999E-008,5.49464057823198E+022,8.79803170742957E+022,1.62036340025216E+023,3.41850930491205E+021,8.08830312845954E+021,3.16469875315203E+023,2.34263816539354E+004,2.35068297919880E+004,2.43447909886912E+004,2.13290911542397E+004,2.24690955278070E+004,2.38718620091989E+004,0.00000000000000E+000,0.00000000000000E+000,2.44496725223469E+004,1.93731216782641E+004,2.19310543648847E+004,0.00000000000000E+000,0.00000000000000E+000,1.86442214637757E+000,1.88497618092121E+000,1.87771631175144E+000,0.00000000000000E+000,0.00000000000000E+000,2.44916931748862E+004,2.02555707332301E+004,2.18654140304699E+004,2.34263816539354E+004,2.35068297919880E+004,2.44160785371620E+004,2.04817393898271E+004,2.21466554092901E+004,2.38909680935522E+004 +3.45999999999999E-008,5.53468168282832E+022,8.81304712165319E+022,1.61851149916458E+023,3.35844764801754E+021,8.05827230001229E+021,3.16745157909303E+023,2.34463975136130E+004,2.34845604579629E+004,2.42841276784033E+004,2.11337733319380E+004,2.26064908205162E+004,2.38391924200846E+004,0.00000000000000E+000,0.00000000000000E+000,2.44304934340531E+004,1.95203067455240E+004,2.21083822388524E+004,0.00000000000000E+000,0.00000000000000E+000,1.86431823117032E+000,1.88582631802967E+000,1.87867646499766E+000,0.00000000000000E+000,0.00000000000000E+000,2.44601138472294E+004,2.00432785282371E+004,2.16771265971163E+004,2.34463975136130E+004,2.34845604579629E+004,2.43751556091149E+004,2.03751559753478E+004,2.22002334059678E+004,2.38673269171411E+004 +3.47999999999999E-008,5.57021816315756E+022,8.82355791160973E+022,1.61675970083849E+023,3.30839626727213E+021,8.05326716193775E+021,3.16975394260732E+023,2.33384395000276E+004,2.35174805898066E+004,2.42923571260866E+004,2.12926337903789E+004,2.28336757785058E+004,2.38406551975906E+004,0.00000000000000E+000,0.00000000000000E+000,2.43619846932390E+004,1.89935599544497E+004,2.22508353622614E+004,0.00000000000000E+000,0.00000000000000E+000,1.86394573683284E+000,1.88272430231750E+000,1.87943693836770E+000,0.00000000000000E+000,0.00000000000000E+000,2.43958364971551E+004,2.03508495001137E+004,2.16291550406062E+004,2.33384395000276E+004,2.35174805898066E+004,2.43414164808670E+004,2.03900710127059E+004,2.23242658784430E+004,2.38433155600235E+004 +3.49999999999999E-008,5.59824693637500E+022,8.83356818775881E+022,1.61525815941613E+023,3.24833461037762E+021,8.07328771423591E+021,3.17165589507564E+023,2.33180428262232E+004,2.35221346749352E+004,2.42488065577309E+004,2.10240735135558E+004,2.29421534049877E+004,2.38158418487702E+004,0.00000000000000E+000,0.00000000000000E+000,2.43294133690267E+004,1.89564028061251E+004,2.24046280025607E+004,0.00000000000000E+000,0.00000000000000E+000,1.86376792281687E+000,1.88249910951600E+000,1.88024732125337E+000,0.00000000000000E+000,0.00000000000000E+000,2.43944112908855E+004,2.01120705333453E+004,2.16030578472609E+004,2.33180428262232E+004,2.35221346749352E+004,2.43131213569093E+004,2.01935039580831E+004,2.24059994498708E+004,2.38264420133324E+004 +3.51999999999999E-008,5.63078033385952E+022,8.84207692248553E+022,1.61360646385153E+023,3.20328836770675E+021,8.07829285231046E+021,3.17370800168621E+023,2.33566628086377E+004,2.35286049463246E+004,2.42648016046365E+004,2.10358947884000E+004,2.31950734411134E+004,2.38387539893288E+004,0.00000000000000E+000,0.00000000000000E+000,2.42782279855380E+004,1.84076080917335E+004,2.20670429470043E+004,0.00000000000000E+000,0.00000000000000E+000,1.86348755006011E+000,1.87906950363275E+000,1.87845398038975E+000,0.00000000000000E+000,0.00000000000000E+000,2.42777737474516E+004,2.00694718945266E+004,2.18484537417904E+004,2.33566628086377E+004,2.35286049463246E+004,2.42722270102937E+004,2.00369836474924E+004,2.24954696080390E+004,2.38146394935352E+004 +3.53999999999999E-008,5.66982041084094E+022,8.85108617101971E+022,1.61170451138320E+023,3.16324726311041E+021,8.06828257616137E+021,3.17611046796199E+023,2.32474768378505E+004,2.35749602854492E+004,2.42138042909951E+004,2.07173682298882E+004,2.28256676319421E+004,2.37931840494409E+004,0.00000000000000E+000,0.00000000000000E+000,2.42625350686164E+004,1.84575686527409E+004,2.20502608119624E+004,0.00000000000000E+000,0.00000000000000E+000,1.86340135946916E+000,1.87938998211998E+000,1.87836342740562E+000,0.00000000000000E+000,0.00000000000000E+000,2.42898608155146E+004,2.00509642745616E+004,2.18705906658655E+004,2.32474768378505E+004,2.35749602854492E+004,2.42491975360618E+004,1.99062712268043E+004,2.23362125777427E+004,2.37906324480584E+004 +3.55999999999999E-008,5.71686870874164E+022,8.85208719863462E+022,1.60940214786891E+023,3.16324726311041E+021,8.05827230001229E+021,3.17851293423777E+023,2.31752921984952E+004,2.35986084682737E+004,2.41804320230708E+004,2.07951368739633E+004,2.27764764035486E+004,2.37683272510354E+004,0.00000000000000E+000,0.00000000000000E+000,2.41944039391644E+004,1.86556071815075E+004,2.18528842251702E+004,0.00000000000000E+000,0.00000000000000E+000,1.86302589647649E+000,1.88064379558291E+000,1.87728821353138E+000,0.00000000000000E+000,0.00000000000000E+000,2.42970824893388E+004,2.02956967386979E+004,2.15941418345225E+004,2.31752921984952E+004,2.35986084682737E+004,2.42182187046240E+004,2.00651799598534E+004,2.21805267034084E+004,2.37650868598599E+004 +3.57999999999999E-008,5.75140416145598E+022,8.86359901620606E+022,1.60750019540059E+023,3.08817019199229E+021,8.09330826653408E+021,3.18081529775206E+023,2.30775266808596E+004,2.35602415014837E+004,2.41978322229983E+004,2.08104049486249E+004,2.27322910622754E+004,2.37474168438981E+004,0.00000000000000E+000,0.00000000000000E+000,2.41503145293645E+004,1.86584666944957E+004,2.17741465062784E+004,0.00000000000000E+000,0.00000000000000E+000,1.86278182334637E+000,1.88066170880623E+000,1.87685396749481E+000,0.00000000000000E+000,0.00000000000000E+000,2.42879847698565E+004,2.00698920096920E+004,2.14442302826156E+004,2.30775266808596E+004,2.35602415014837E+004,2.42112072653777E+004,2.00069802220398E+004,2.20961834771277E+004,2.37301907926104E+004 +3.60000000000000E-008,5.79494886270449E+022,8.86810364047315E+022,1.60499762636332E+023,3.03311367317233E+021,8.15837506150312E+021,3.18321776402784E+023,2.30342783037741E+004,2.35090449626340E+004,2.41944554808749E+004,2.07811386995439E+004,2.29598297664561E+004,2.37281345512588E+004,0.00000000000000E+000,0.00000000000000E+000,2.41090234802183E+004,1.84854120138148E+004,2.19642802145027E+004,0.00000000000000E+000,0.00000000000000E+000,1.86255245194496E+000,1.87956785126823E+000,1.87789737001466E+000,0.00000000000000E+000,0.00000000000000E+000,2.42406784288295E+004,1.99881522639606E+004,2.13003546003072E+004,2.30342783037741E+004,2.35090449626340E+004,2.41847396081212E+004,1.99233890454179E+004,2.22054581993184E+004,2.36957286826692E+004 +3.62000000000000E-008,5.82598071876665E+022,8.87210775093279E+022,1.60319577665648E+023,2.98806743050145E+021,8.20842644224854E+021,3.18496956235393E+023,2.30989242942829E+004,2.34939072779720E+004,2.41587734308089E+004,2.08108802039995E+004,2.28646847930219E+004,2.37149374469524E+004,0.00000000000000E+000,0.00000000000000E+000,2.40501515537716E+004,1.83550159490615E+004,2.19487280403652E+004,0.00000000000000E+000,0.00000000000000E+000,1.86222409045421E+000,1.87873030014331E+000,1.87781268801553E+000,0.00000000000000E+000,0.00000000000000E+000,2.42346790054930E+004,2.02672962118927E+004,2.11843168832979E+004,2.30989242942829E+004,2.34939072779720E+004,2.41514190911464E+004,1.99820826898876E+004,2.21259715913505E+004,2.36844215494700E+004 +3.64000000000000E-008,5.86151719909590E+022,8.88562162373405E+022,1.60124377280741E+023,2.90298008323424E+021,8.24346240877034E+021,3.18742208001045E+023,2.31186732910048E+004,2.34536481971002E+004,2.41156132062006E+004,2.03670889454203E+004,2.28831688855779E+004,2.36817296262697E+004,0.00000000000000E+000,0.00000000000000E+000,2.39964318606309E+004,1.80723774905010E+004,2.22623020396892E+004,0.00000000000000E+000,0.00000000000000E+000,1.86192309468801E+000,1.87687429102693E+000,1.87949773801734E+000,0.00000000000000E+000,0.00000000000000E+000,2.42302036546468E+004,2.07217889451015E+004,2.11744814645926E+004,2.31186732910048E+004,2.34536481971002E+004,2.41166733167585E+004,1.98439610266222E+004,2.22167986287647E+004,2.36602637570597E+004 +3.66000000000000E-008,5.89204854135060E+022,8.89413035846077E+022,1.59959207724281E+023,2.84792356441428E+021,8.26848809914304E+021,3.18937408385952E+023,2.31223191856125E+004,2.34432599009464E+004,2.41025352252034E+004,1.99583309424680E+004,2.30325776873329E+004,2.36728555569640E+004,0.00000000000000E+000,0.00000000000000E+000,2.39666798970289E+004,1.83686758096544E+004,2.22984996034077E+004,0.00000000000000E+000,0.00000000000000E+000,1.86175582579310E+000,1.87881858485383E+000,1.87968926648279E+000,0.00000000000000E+000,0.00000000000000E+000,2.41629903006837E+004,2.06729294970063E+004,2.12520411274310E+004,2.31223191856125E+004,2.34432599009464E+004,2.40832953540851E+004,1.97319146649126E+004,2.23143894634854E+004,2.36425651572780E+004 +3.68000000000000E-008,5.92558296645003E+022,8.89863498272786E+022,1.59774017615523E+023,2.80788245981795E+021,8.30352406566484E+021,3.19127603632785E+023,2.30659334250169E+004,2.34470830467458E+004,2.40570503193226E+004,1.98774138699521E+004,2.30779364912584E+004,2.36406832092272E+004,0.00000000000000E+000,0.00000000000000E+000,2.39768234878080E+004,1.82378040982054E+004,2.23884798888495E+004,0.00000000000000E+000,0.00000000000000E+000,1.86181289969045E+000,1.87796743262570E+000,1.88016274367640E+000,0.00000000000000E+000,0.00000000000000E+000,2.41392553281970E+004,2.06312054732469E+004,2.10806722055217E+004,2.30659334250169E+004,2.34470830467458E+004,2.40592425487164E+004,1.96489233220744E+004,2.23089402645968E+004,2.36197615092479E+004 +3.70000000000000E-008,5.95311122586001E+022,8.90514166222476E+022,1.59628868611361E+023,2.76784135522161E+021,8.31853947988846E+021,3.19297778327319E+023,2.29984113152690E+004,2.34455428295226E+004,2.40465692369510E+004,1.97638103244613E+004,2.29511325966401E+004,2.36178575471956E+004,0.00000000000000E+000,0.00000000000000E+000,2.39847903124050E+004,1.81401813501750E+004,2.26688775836589E+004,0.00000000000000E+000,0.00000000000000E+000,1.86185769279041E+000,1.87732469873667E+000,1.88161459769305E+000,0.00000000000000E+000,0.00000000000000E+000,2.40997082547860E+004,2.04029182011945E+004,2.09186324622118E+004,2.29984113152690E+004,2.34455428295226E+004,2.40452947234534E+004,1.95064627221486E+004,2.22832522095148E+004,2.35975895206342E+004 +3.72000000000000E-008,5.98314205430726E+022,8.91515193837384E+022,1.59478714469125E+023,2.71778997447619E+021,8.31853947988846E+021,3.19497983850301E+023,2.30361412649165E+004,2.34491704018473E+004,2.40116847766369E+004,2.00350261737922E+004,2.29389518048851E+004,2.36102786137260E+004,0.00000000000000E+000,0.00000000000000E+000,2.39737390514433E+004,1.84164483832420E+004,2.28223169910690E+004,0.00000000000000E+000,0.00000000000000E+000,1.86179554979403E+000,1.87912633473138E+000,1.88239429391810E+000,0.00000000000000E+000,0.00000000000000E+000,2.40146402046729E+004,1.99855506186815E+004,2.09350620648647E+004,2.30361412649165E+004,2.34491704018473E+004,2.40022504637435E+004,1.95785055186328E+004,2.23247277416436E+004,2.35856939625905E+004 +3.74000000000000E-008,6.01817802082905E+022,8.92115810406329E+022,1.59283514084218E+023,2.66773859373078E+021,8.35858058448480E+021,3.19703194511357E+023,2.30983267492238E+004,2.34452347999377E+004,2.39591985198690E+004,2.03124052981568E+004,2.30156201998210E+004,2.35986266514393E+004,0.00000000000000E+000,0.00000000000000E+000,2.39894923449411E+004,1.84682492900898E+004,2.26568975265894E+004,0.00000000000000E+000,0.00000000000000E+000,1.86188411613255E+000,1.87945827429285E+000,1.88155328636548E+000,0.00000000000000E+000,0.00000000000000E+000,2.39129283041186E+004,1.98223328833834E+004,2.10687601897903E+004,2.30983267492238E+004,2.34452347999377E+004,2.39539322053743E+004,1.96661103544677E+004,2.23517183662297E+004,2.35732523037357E+004 +3.76000000000000E-008,6.05721809781048E+022,8.92616324213784E+022,1.59098323975460E+023,2.65272317950715E+021,8.33856003218663E+021,3.19923420586637E+023,2.30010437415477E+004,2.34433181851535E+004,2.38957936941401E+004,2.00213734165455E+004,2.27681570195747E+004,2.35386260663535E+004,0.00000000000000E+000,0.00000000000000E+000,2.39989570329118E+004,1.84721482739451E+004,2.30109829311559E+004,0.00000000000000E+000,0.00000000000000E+000,1.86193727286880E+000,1.87948318520382E+000,1.88333903347798E+000,0.00000000000000E+000,0.00000000000000E+000,2.39391752882848E+004,1.98691227484787E+004,2.09670758588660E+004,2.30010437415477E+004,2.34433181851535E+004,2.39364304477060E+004,1.95538609806312E+004,2.23112800898606E+004,2.35430501332140E+004 +3.78000000000000E-008,6.08524687102791E+022,8.93016735259747E+022,1.58958180109373E+023,2.63270262720898E+021,8.33856003218663E+021,3.20083585005022E+023,2.31080968151263E+004,2.33890603454678E+004,2.38440516859762E+004,2.02285500799233E+004,2.28638487845786E+004,2.35219227639006E+004,0.00000000000000E+000,0.00000000000000E+000,2.40041325247141E+004,1.80418822785809E+004,2.29698358648216E+004,0.00000000000000E+000,0.00000000000000E+000,1.86196632280710E+000,1.87667063777652E+000,1.88313428658128E+000,0.00000000000000E+000,0.00000000000000E+000,2.38959940089378E+004,2.02545411722944E+004,2.08608939692545E+004,2.31080968151263E+004,2.33890603454678E+004,2.39026281577440E+004,1.96393589893466E+004,2.23108562716578E+004,2.35317604541120E+004 +3.80000000000000E-008,6.11627872709007E+022,8.93216940782729E+022,1.58783000276764E+023,2.60267179876173E+021,8.37860113678296E+021,3.20248754561482E+023,2.30811220280692E+004,2.33790151005902E+004,2.38534862911632E+004,2.01869053980188E+004,2.28215425569313E+004,2.35168427546929E+004,0.00000000000000E+000,0.00000000000000E+000,2.39840436327466E+004,1.75678497987701E+004,2.28254038491722E+004,0.00000000000000E+000,0.00000000000000E+000,1.86185349585144E+000,1.87341608020785E+000,1.88240987433641E+000,0.00000000000000E+000,0.00000000000000E+000,2.38394420137083E+004,2.01994041877967E+004,2.09316916204384E+004,2.30811220280692E+004,2.33790151005902E+004,2.38848174887844E+004,1.94766932941580E+004,2.22734157514629E+004,2.35122646780953E+004 +3.82000000000000E-008,6.15531880407150E+022,8.94217968397637E+022,1.58602815306080E+023,2.56763583223994E+021,8.34857030833571E+021,3.20494006327135E+023,2.31288764412808E+004,2.33380059066667E+004,2.38627405103877E+004,2.01309590232407E+004,2.27844079501757E+004,2.35174024602371E+004,0.00000000000000E+000,0.00000000000000E+000,2.39612902755649E+004,1.77039749335047E+004,2.22731305263637E+004,0.00000000000000E+000,0.00000000000000E+000,1.86172548139246E+000,1.87436811261358E+000,1.87955509754826E+000,0.00000000000000E+000,0.00000000000000E+000,2.37413773199698E+004,2.00066831170694E+004,2.11137395680029E+004,2.31288764412808E+004,2.33380059066667E+004,2.38541051063657E+004,1.94330602023787E+004,2.21590316298282E+004,2.34912473764507E+004 +3.84000000000000E-008,6.19786247770510E+022,8.94568328062855E+022,1.58377584092726E+023,2.53760500379269E+021,8.37359599870842E+021,3.20724242678564E+023,2.30875131973064E+004,2.33311445242733E+004,2.38095388027225E+004,1.98344400636917E+004,2.28071326597357E+004,2.34789533605574E+004,0.00000000000000E+000,0.00000000000000E+000,2.39568638387819E+004,1.77883728413109E+004,2.19465891043178E+004,0.00000000000000E+000,0.00000000000000E+000,1.86170054991140E+000,1.87495122001776E+000,1.87780103226737E+000,0.00000000000000E+000,0.00000000000000E+000,2.37082572735024E+004,2.02216060796059E+004,2.15445431902023E+004,2.30875131973064E+004,2.33311445242733E+004,2.38199898624395E+004,1.93890632013661E+004,2.22050349112964E+004,2.34648705452870E+004 +3.86000000000000E-008,6.23139690280453E+022,8.94918687728073E+022,1.58212414536266E+023,2.52258958956906E+021,8.36859086063388E+021,3.20909432787322E+023,2.29981141079640E+004,2.33962106612755E+004,2.38287079534125E+004,1.97636214003073E+004,2.25960901420300E+004,2.34827149787628E+004,0.00000000000000E+000,0.00000000000000E+000,2.39258816825501E+004,1.76710180108304E+004,2.19622093842121E+004,0.00000000000000E+000,0.00000000000000E+000,1.86152579402537E+000,1.87413893397908E+000,1.87788610106067E+000,0.00000000000000E+000,0.00000000000000E+000,2.36086487059443E+004,2.02763148983278E+004,2.16501755778395E+004,2.29981141079640E+004,2.33962106612755E+004,2.37909281505776E+004,1.93422679017277E+004,2.21479604481199E+004,2.34490906949785E+004 +3.88000000000000E-008,6.27494160405305E+022,8.95068841870309E+022,1.57982178184837E+023,2.50256903727090E+021,8.39361655100659E+021,3.21134664000676E+023,2.30424076455291E+004,2.33564981198060E+004,2.37989650781155E+004,2.00216698959861E+004,2.25687656611114E+004,2.34662194980721E+004,0.00000000000000E+000,0.00000000000000E+000,2.38697649026735E+004,1.76124937034521E+004,2.17371168430973E+004,0.00000000000000E+000,0.00000000000000E+000,1.86120813913118E+000,1.87372989626856E+000,1.87664868152186E+000,0.00000000000000E+000,0.00000000000000E+000,2.35947079387387E+004,2.04676855736600E+004,2.13778282983601E+004,2.30424076455291E+004,2.33564981198060E+004,2.37586309178007E+004,1.94947195856534E+004,2.19954358945476E+004,2.34272853073663E+004 +3.90000000000000E-008,6.31498270864938E+022,8.95669458439254E+022,1.57781972661856E+023,2.47253820882365E+021,8.39361655100659E+021,3.21364900352105E+023,2.30008905685964E+004,2.33883242668143E+004,2.37232160725950E+004,2.02690793132249E+004,2.25516180085157E+004,2.34307622395085E+004,0.00000000000000E+000,0.00000000000000E+000,2.38209045376522E+004,1.77901447918768E+004,2.18172469441500E+004,0.00000000000000E+000,0.00000000000000E+000,1.86093037137849E+000,1.87496340448981E+000,1.87709205033438E+000,0.00000000000000E+000,0.00000000000000E+000,2.36127018534321E+004,2.02260155186500E+004,2.13207309312534E+004,2.30008905685964E+004,2.33883242668143E+004,2.37174971679212E+004,1.95804881425850E+004,2.19932052065154E+004,2.34080714883725E+004 +3.92000000000000E-008,6.34901764755627E+022,8.96370177769690E+022,1.57601787691172E+023,2.42749196615277E+021,8.41363710330476E+021,3.21570111013161E+023,2.29551179275397E+004,2.34018469248053E+004,2.36762208242535E+004,1.97575698342472E+004,2.24441836449349E+004,2.33955497895346E+004,0.00000000000000E+000,0.00000000000000E+000,2.38130402065659E+004,1.78278846677319E+004,2.17684582347599E+004,0.00000000000000E+000,0.00000000000000E+000,1.86088555935823E+000,1.87522235296716E+000,1.87682247712330E+000,0.00000000000000E+000,0.00000000000000E+000,2.36068623984809E+004,2.01059291173020E+004,2.13669544751818E+004,2.29551179275397E+004,2.34018469248053E+004,2.36931119908875E+004,1.93325842785338E+004,2.19464719490067E+004,2.33875977552237E+004 +3.94000000000000E-008,6.38105053123333E+022,8.96770588815653E+022,1.57451633548936E+023,2.41748169000369E+021,8.39361655100659E+021,3.21750295983845E+023,2.29688250883765E+004,2.33756286253033E+004,2.36233213488525E+004,1.99154459208479E+004,2.24263291699383E+004,2.33653980231664E+004,0.00000000000000E+000,0.00000000000000E+000,2.37752101936972E+004,1.81893265068940E+004,2.17191283459808E+004,0.00000000000000E+000,0.00000000000000E+000,1.86066959486986E+000,1.87764910690139E+000,1.87654870935432E+000,0.00000000000000E+000,0.00000000000000E+000,2.36342153201783E+004,2.00107787059544E+004,2.12112106718027E+004,2.29688250883765E+004,2.33756286253033E+004,2.36676906183304E+004,1.94719250377104E+004,2.18799309768139E+004,2.33695240595489E+004 +3.96000000000000E-008,6.40307313876132E+022,8.97671513669071E+022,1.57356535925519E+023,2.38745086155644E+021,8.36358572255934E+021,3.21905455264156E+023,2.30140748817953E+004,2.33489581921745E+004,2.36231270390836E+004,2.02453503191282E+004,2.21517190739375E+004,2.33622431904840E+004,0.00000000000000E+000,0.00000000000000E+000,2.36935657625447E+004,1.82278794955837E+004,2.18596853735185E+004,0.00000000000000E+000,0.00000000000000E+000,1.86020121054992E+000,1.87790239806257E+000,1.87732557893156E+000,0.00000000000000E+000,0.00000000000000E+000,2.36337787917787E+004,2.01434439069439E+004,2.11365387200869E+004,2.30140748817953E+004,2.33489581921745E+004,2.36453324670830E+004,1.96648788481971E+004,2.17767763707292E+004,2.33590511249033E+004 +3.98000000000000E-008,6.44661784000983E+022,8.98522387141743E+022,1.57146320126389E+023,2.35241489503464E+021,8.34857030833571E+021,3.22165722444032E+023,2.29649426955510E+004,2.33293215848047E+004,2.36021504877240E+004,2.03470003499829E+004,2.22612601015346E+004,2.33400350161734E+004,0.00000000000000E+000,0.00000000000000E+000,2.36414659880229E+004,1.83330123196463E+004,2.15563006387672E+004,0.00000000000000E+000,0.00000000000000E+000,1.85990067189255E+000,1.87858781833217E+000,1.87563636138248E+000,0.00000000000000E+000,0.00000000000000E+000,2.36289277706801E+004,1.98568195377310E+004,2.09321277714091E+004,2.29649426955510E+004,2.33293215848047E+004,2.36206168617129E+004,1.96544432248322E+004,2.16823300865217E+004,2.33289832603088E+004 +4.00000000000000E-008,6.47114301657509E+022,8.99773671660378E+022,1.57046217364898E+023,2.31237379043831E+021,8.30352406566484E+021,3.22350912552790E+023,2.30020116765589E+004,2.32922518547141E+004,2.35730826516630E+004,2.01732365502534E+004,2.24076699226548E+004,2.33256442861865E+004,0.00000000000000E+000,0.00000000000000E+000,2.36638452792279E+004,1.82227367745816E+004,2.15008087490335E+004,0.00000000000000E+000,0.00000000000000E+000,1.86002992538559E+000,1.87786867125463E+000,1.87532234471714E+000,0.00000000000000E+000,0.00000000000000E+000,2.35808577106589E+004,1.98575647856705E+004,2.04819310105098E+004,2.30020116765589E+004,2.32922518547141E+004,2.35999588203349E+004,1.95488969246459E+004,2.16001245352004E+004,2.33134576337985E+004 +4.02000000000000E-008,6.50617898309688E+022,9.00174082706342E+022,1.56866032394214E+023,2.28734810006560E+021,8.31353434181392E+021,3.22546112937697E+023,2.29605489044333E+004,2.32234489776823E+004,2.35652159960699E+004,2.00186525734175E+004,2.24195693438150E+004,2.32931857379591E+004,0.00000000000000E+000,0.00000000000000E+000,2.36669344434103E+004,1.84002164562985E+004,2.15194298235815E+004,0.00000000000000E+000,0.00000000000000E+000,1.86004774839614E+000,1.87902194441019E+000,1.87542789392184E+000,0.00000000000000E+000,0.00000000000000E+000,2.35530973092404E+004,1.97807819052592E+004,2.05029646974442E+004,2.29605489044333E+004,2.32234489776823E+004,2.35892630291719E+004,1.95074144432837E+004,2.16165129897094E+004,2.32805566802617E+004 +4.04000000000000E-008,6.54321700484849E+022,9.01675624128704E+022,1.56685847423531E+023,2.21727616702201E+021,8.30352406566484E+021,3.22806380117573E+023,2.30275002326079E+004,2.31977080527750E+004,2.35080833384488E+004,2.00938066543619E+004,2.20412108501369E+004,2.32627908391352E+004,0.00000000000000E+000,0.00000000000000E+000,2.35901149308596E+004,1.82331889325269E+004,2.14677465305451E+004,0.00000000000000E+000,0.00000000000000E+000,1.85960318583880E+000,1.87793719869237E+000,1.87513449809258E+000,0.00000000000000E+000,0.00000000000000E+000,2.35633775140266E+004,1.98324226739369E+004,2.08484655340722E+004,2.30275002326079E+004,2.31977080527750E+004,2.35464433652045E+004,1.95097810843125E+004,2.15378296636043E+004,2.32644503153984E+004 +4.06000000000000E-008,6.56223652953175E+022,9.02076035174668E+022,1.56580739523965E+023,2.18724533857476E+021,8.32354461796300E+021,3.22921498293288E+023,2.29583686493833E+004,2.31916758913356E+004,2.35591855163519E+004,2.04589237301784E+004,2.19213456937177E+004,2.32712119595136E+004,0.00000000000000E+000,0.00000000000000E+000,2.35437999269799E+004,1.83539866482344E+004,2.13120729081563E+004,0.00000000000000E+000,0.00000000000000E+000,1.85933378955594E+000,1.87872364248465E+000,1.87424236346753E+000,0.00000000000000E+000,0.00000000000000E+000,2.35276047937113E+004,1.99471242899674E+004,2.06856081526965E+004,2.29583686493833E+004,2.31916758913356E+004,2.35458069005434E+004,1.97352147689016E+004,2.13957023200053E+004,2.32462740760778E+004 +4.08000000000000E-008,6.59476992701627E+022,9.03427422454794E+022,1.56425580243655E+023,2.12718368168026E+021,8.30852920373938E+021,3.23151734644716E+023,2.29142030350972E+004,2.31447145224779E+004,2.35338495597613E+004,2.04154082929080E+004,2.20866265793874E+004,2.32408677476404E+004,0.00000000000000E+000,0.00000000000000E+000,2.35776208768772E+004,1.79632491456143E+004,2.11516088880953E+004,0.00000000000000E+000,0.00000000000000E+000,1.85953061443293E+000,1.87614238956869E+000,1.87330934094216E+000,0.00000000000000E+000,0.00000000000000E+000,2.34747715467467E+004,1.96709872079245E+004,2.07159753002443E+004,2.29142030350972E+004,2.31447145224779E+004,2.35284903123310E+004,1.95298184451161E+004,2.14329560241329E+004,2.32156375672462E+004 +4.10000000000000E-008,6.63381000399769E+022,9.03927936262248E+022,1.56205354168375E+023,2.07713230093484E+021,8.35858058448480E+021,3.23371960719996E+023,2.29132965029168E+004,2.31234890435078E+004,2.35394830385011E+004,2.01960166259475E+004,2.19203404468415E+004,2.32314122952263E+004,0.00000000000000E+000,0.00000000000000E+000,2.34681868219377E+004,1.77391781776765E+004,2.11559817383662E+004,0.00000000000000E+000,0.00000000000000E+000,1.85889175035832E+000,1.87461199225262E+000,1.87333495037611E+000,0.00000000000000E+000,0.00000000000000E+000,2.34728416141520E+004,2.00446286059225E+004,2.07029406187749E+004,2.29132965029168E+004,2.31234890435078E+004,2.35007282648183E+004,1.94820279872086E+004,2.13577751757961E+004,2.31935642420505E+004 +4.12000000000000E-008,6.66334031863749E+022,9.04578604211938E+022,1.56050194888064E+023,2.03709119633851E+021,8.37359599870842E+021,3.23552145690680E+023,2.28798764211699E+004,2.30846257117279E+004,2.35250383776243E+004,2.00556026431394E+004,2.18303819792834E+004,2.32033404669848E+004,0.00000000000000E+000,0.00000000000000E+000,2.34521894599086E+004,1.76190922940731E+004,2.10728565826199E+004,0.00000000000000E+000,0.00000000000000E+000,1.85879787264027E+000,1.87377614796538E+000,1.87284635281448E+000,0.00000000000000E+000,0.00000000000000E+000,2.34644830467466E+004,1.94867783183505E+004,2.09976400829355E+004,2.28798764211699E+004,2.30846257117279E+004,2.34876379351863E+004,1.92259096907994E+004,2.13816286810610E+004,2.31684645265439E+004 +4.14000000000000E-008,6.69036806424002E+022,9.05079118019393E+022,1.55930071574275E+023,2.02708092018943E+021,8.34356517026117E+021,3.23712310109065E+023,2.29263604612733E+004,2.30428422395404E+004,2.34908308810649E+004,1.99495451556562E+004,2.18502789511957E+004,2.31844533145499E+004,0.00000000000000E+000,0.00000000000000E+000,2.33612083713798E+004,1.71837000366741E+004,2.09794544871142E+004,0.00000000000000E+000,0.00000000000000E+000,1.85826158317810E+000,1.87064993795300E+000,1.87229283429010E+000,0.00000000000000E+000,0.00000000000000E+000,2.35528526413363E+004,1.91957250299032E+004,2.06438001771860E+004,2.29263604612733E+004,2.30428422395404E+004,2.34737960963599E+004,1.89770653594132E+004,2.12619169518541E+004,2.31549933069260E+004 +4.16000000000000E-008,6.72340197553199E+022,9.06080145634301E+022,1.55779917432039E+023,1.99204495366763E+021,8.31353434181392E+021,3.23927531046270E+023,2.29048729662327E+004,2.30073540591883E+004,2.34661521799610E+004,2.00019572489100E+004,2.19176604710755E+004,2.31602747657646E+004,0.00000000000000E+000,0.00000000000000E+000,2.32955575144103E+004,1.69578068468022E+004,2.10108703703207E+004,0.00000000000000E+000,0.00000000000000E+000,1.85787206746753E+000,1.86896620096675E+000,1.87247954757398E+000,0.00000000000000E+000,0.00000000000000E+000,2.35686981028387E+004,1.92078263443977E+004,2.06719631594107E+004,2.29048729662327E+004,2.30073540591883E+004,2.34498422784158E+004,1.89424563271848E+004,2.13080783672750E+004,2.31302708006701E+004 +4.18000000000000E-008,6.75393331778670E+022,9.06430505299519E+022,1.55634768427877E+023,1.98203467751855E+021,8.29851892759030E+021,3.24097705740805E+023,2.29051346980484E+004,2.29740709101299E+004,2.35008239915568E+004,2.03778856504735E+004,2.18704492111197E+004,2.31685216333606E+004,0.00000000000000E+000,0.00000000000000E+000,2.32413282097829E+004,1.68022912194759E+004,2.10498223831153E+004,0.00000000000000E+000,0.00000000000000E+000,1.85754870016841E+000,1.86778134307238E+000,1.87271029378032E+000,0.00000000000000E+000,0.00000000000000E+000,2.35010580989175E+004,1.92488270803364E+004,2.04751978401246E+004,2.29051346980484E+004,2.29740709101299E+004,2.34306009631152E+004,1.90766581852311E+004,2.12408141959406E+004,2.31107203577318E+004 +4.20000000000000E-008,6.78246260481159E+022,9.06780864964737E+022,1.55484614285641E+023,1.95700898714584E+021,8.31353434181392E+021,3.24257870159190E+023,2.29290368823763E+004,2.29616362636152E+004,2.34085499925213E+004,2.05679122865789E+004,2.19966002310891E+004,2.31299275324005E+004,0.00000000000000E+000,0.00000000000000E+000,2.32913184269508E+004,1.68227845876632E+004,2.08721663928048E+004,0.00000000000000E+000,0.00000000000000E+000,1.85784684282034E+000,1.86793870366901E+000,1.87165105078961E+000,0.00000000000000E+000,0.00000000000000E+000,2.34873816990319E+004,1.89667837422732E+004,2.04005684423647E+004,2.29290368823763E+004,2.29616362636152E+004,2.33997812226244E+004,1.90830524898322E+004,2.12258085664267E+004,2.30969991234728E+004 +4.22000000000000E-008,6.81249343325884E+022,9.07181276010700E+022,1.55324449867256E+023,1.92697815869859E+021,8.33355489411209E+021,3.24428044853725E+023,2.29865036739598E+004,2.29241170103927E+004,2.34138229297412E+004,2.05417312270830E+004,2.20956912674613E+004,2.31362406359407E+004,0.00000000000000E+000,0.00000000000000E+000,2.31483728891735E+004,1.69202091691501E+004,2.07675178200144E+004,0.00000000000000E+000,0.00000000000000E+000,1.85699097706033E+000,1.86868169765028E+000,1.87101881473429E+000,0.00000000000000E+000,0.00000000000000E+000,2.35117979803634E+004,1.93035241396006E+004,2.02513861844330E+004,2.29865036739598E+004,2.29241170103927E+004,2.33705111870331E+004,1.91959291402833E+004,2.11971858431680E+004,2.30844311565238E+004 +4.24000000000000E-008,6.84702888597318E+022,9.07431532914427E+022,1.55129249482348E+023,1.89194219217680E+021,8.37860113678296E+021,3.24613234962483E+023,2.29907939759930E+004,2.29030273844262E+004,2.34097761341880E+004,2.04625900293408E+004,2.19436407787225E+004,2.31247234375991E+004,0.00000000000000E+000,0.00000000000000E+000,2.30051337969749E+004,1.70508247774839E+004,2.08415047016506E+004,0.00000000000000E+000,0.00000000000000E+000,1.85612295993077E+000,1.86966480508465E+000,1.87146645025560E+000,0.00000000000000E+000,0.00000000000000E+000,2.35695299250387E+004,1.89360484514713E+004,2.02455100197911E+004,2.29907939759930E+004,2.29030273844262E+004,2.33468311792212E+004,1.90896059263369E+004,2.11492146908943E+004,2.30661355938190E+004 +4.26000000000000E-008,6.87806074203533E+022,9.08332457767845E+022,1.54974090202038E+023,1.84689594950592E+021,8.37860113678296E+021,3.24813440485464E+023,2.29753733781035E+004,2.29026672921484E+004,2.33690213569848E+004,2.00993947377572E+004,2.19268361140828E+004,2.30994575254150E+004,0.00000000000000E+000,0.00000000000000E+000,2.30320377619105E+004,1.68911765415420E+004,2.09889625439477E+004,0.00000000000000E+000,0.00000000000000E+000,1.85628679802746E+000,1.86846116014793E+000,1.87234940094603E+000,0.00000000000000E+000,0.00000000000000E+000,2.35125206167784E+004,1.83942580474180E+004,2.00811583954800E+004,2.29753733781035E+004,2.29026672921484E+004,2.33196448228528E+004,1.87301354154284E+004,2.11341839748215E+004,2.30476669374375E+004 +4.28000000000000E-008,6.91059413951986E+022,9.08883022956044E+022,1.54813925783652E+023,1.82187025913321E+021,8.37359599870842E+021,3.25003635732297E+023,2.29768662198106E+004,2.28331450927912E+004,2.33563066436534E+004,2.02259444299042E+004,2.19792564440437E+004,2.30762949184577E+004,0.00000000000000E+000,0.00000000000000E+000,2.30591392607933E+004,1.69331706434291E+004,2.10302329744780E+004,0.00000000000000E+000,0.00000000000000E+000,1.85645146246924E+000,1.86877991707056E+000,1.87259435332112E+000,0.00000000000000E+000,0.00000000000000E+000,2.34331702964461E+004,1.82909442986202E+004,2.02051928536532E+004,2.29768662198106E+004,2.28331450927912E+004,2.32982664870065E+004,1.87666649207037E+004,2.12044015788667E+004,2.30205036532341E+004 +4.30000000000000E-008,6.94512959223419E+022,9.09633793667226E+022,1.54643751089118E+023,1.78683429261142E+021,8.36859086063388E+021,3.25213851531428E+023,2.29540150371765E+004,2.28165792889023E+004,2.33266440713430E+004,2.02909722164414E+004,2.18717421119234E+004,2.30502828185339E+004,0.00000000000000E+000,0.00000000000000E+000,2.30456572238488E+004,1.73331250458141E+004,2.07582398704149E+004,0.00000000000000E+000,0.00000000000000E+000,1.85636959489786E+000,1.87174013898826E+000,1.87096246128080E+000,0.00000000000000E+000,0.00000000000000E+000,2.33998593699706E+004,1.79299081343667E+004,2.04967459323800E+004,2.29540150371765E+004,2.28165792889023E+004,2.32719234443689E+004,1.87981262660828E+004,2.11683016142147E+004,2.29979588569471E+004 +4.32000000000000E-008,6.97716247591126E+022,9.09934101951698E+022,1.54483586670732E+023,1.77181887838780E+021,8.36859086063388E+021,3.25389031364037E+023,2.29537411841989E+004,2.27285404387373E+004,2.33431045729352E+004,2.06118727004151E+004,2.17104496658272E+004,2.30308934596427E+004,0.00000000000000E+000,0.00000000000000E+000,2.29832876177886E+004,1.77793949510614E+004,2.10502280186083E+004,0.00000000000000E+000,0.00000000000000E+000,1.85598964752292E+000,1.87488944881165E+000,1.87271269231644E+000,0.00000000000000E+000,0.00000000000000E+000,2.33995901362753E+004,1.79444605239486E+004,2.03309056478606E+004,2.29537411841989E+004,2.27285404387373E+004,2.32621760060032E+004,1.90634249648620E+004,2.11290935589600E+004,2.29690879478458E+004 +4.34000000000000E-008,7.00819433197342E+022,9.10534718520643E+022,1.54333432528496E+023,1.74679318801509E+021,8.35858058448480E+021,3.25574221472795E+023,2.29510685615631E+004,2.27102086961978E+004,2.33285037576634E+004,2.03831584026926E+004,2.17941567912423E+004,2.30191451865038E+004,0.00000000000000E+000,0.00000000000000E+000,2.29253594720373E+004,1.81358773556496E+004,2.08570786666059E+004,0.00000000000000E+000,0.00000000000000E+000,1.85563495312539E+000,1.87729620607385E+000,1.87156028051518E+000,0.00000000000000E+000,0.00000000000000E+000,2.33983277437714E+004,1.70719760587727E+004,2.03251736918087E+004,2.29510685615631E+004,2.27102086961978E+004,2.32397533122992E+004,1.88067864468271E+004,2.11113767230851E+004,2.29510874981933E+004 +4.36000000000000E-008,7.03972670184303E+022,9.11585797516297E+022,1.54178273248185E+023,1.69674180726967E+021,8.35357544641025E+021,3.25784437271925E+023,2.28949224661324E+004,2.27105623728339E+004,2.33103170016208E+004,2.07732869808865E+004,2.19029467414473E+004,2.30034371531495E+004,0.00000000000000E+000,0.00000000000000E+000,2.29261673316126E+004,1.79069513485559E+004,2.08556429563499E+004,0.00000000000000E+000,0.00000000000000E+000,1.85563991165976E+000,1.87576140057485E+000,1.87155163635618E+000,0.00000000000000E+000,0.00000000000000E+000,2.33389210937457E+004,1.67985586991775E+004,2.01427881002694E+004,2.28949224661324E+004,2.27105623728339E+004,2.32146825628351E+004,1.88351716904807E+004,2.11053975582146E+004,2.29276335900427E+004 +4.38000000000000E-008,7.06725496125301E+022,9.12036259943006E+022,1.54033124244024E+023,1.66671097882242E+021,8.36859086063388E+021,3.25944601690311E+023,2.29094787737928E+004,2.26619880496424E+004,2.33168982680247E+004,2.06306975243058E+004,2.19569562795345E+004,2.29966552608945E+004,0.00000000000000E+000,0.00000000000000E+000,2.29057084858841E+004,1.76358683410873E+004,2.07057463701079E+004,0.00000000000000E+000,0.00000000000000E+000,1.85551423305327E+000,1.87389358444842E+000,1.87064269105341E+000,0.00000000000000E+000,0.00000000000000E+000,2.32799917473067E+004,1.75088831553549E+004,2.01990748031608E+004,2.29094787737928E+004,2.26619880496424E+004,2.31948386374503E+004,1.89059661496922E+004,2.11045862920200E+004,2.29082691041764E+004 +4.40000000000000E-008,7.10179041396735E+022,9.12586825131205E+022,1.53847934135266E+023,1.62666987422608E+021,8.39361655100659E+021,3.26144807213292E+023,2.29142730132933E+004,2.25801898153357E+004,2.33038600924811E+004,2.03485836107761E+004,2.19512577784184E+004,2.29669872192263E+004,0.00000000000000E+000,0.00000000000000E+000,2.29425056369624E+004,1.78330825515978E+004,2.05579644700521E+004,0.00000000000000E+000,0.00000000000000E+000,1.85574012099251E+000,1.87525793377013E+000,1.86973389382286E+000,0.00000000000000E+000,0.00000000000000E+000,2.32255376125687E+004,1.74863135277956E+004,2.00333183343658E+004,2.29142730132933E+004,2.25801898153357E+004,2.31831984416263E+004,1.88298400835982E+004,2.10136717364633E+004,2.28783646897971E+004 +4.42000000000000E-008,7.13282227002951E+022,9.13187441700150E+022,1.53717800545328E+023,1.62166473615154E+021,8.34356517026117E+021,3.26329997322050E+023,2.28840074485525E+004,2.25647085123157E+004,2.32614466188246E+004,2.06750371421291E+004,2.18705571864846E+004,2.29355599990457E+004,0.00000000000000E+000,0.00000000000000E+000,2.29926598139582E+004,1.82640591546504E+004,2.05747028107737E+004,0.00000000000000E+000,0.00000000000000E+000,1.85604686990364E+000,1.87813914497262E+000,1.86983746806846E+000,0.00000000000000E+000,0.00000000000000E+000,2.31689820372799E+004,1.67787737448443E+004,1.99882122745613E+004,2.28840074485525E+004,2.25647085123157E+004,2.31617083755032E+004,1.88837562926386E+004,2.09698478294623E+004,2.28566474632357E+004 +4.44000000000000E-008,7.16085104324695E+022,9.13687955507604E+022,1.53567646403091E+023,1.58662876962975E+021,8.36358572255934E+021,3.26495166878510E+023,2.28474737694725E+004,2.25450082021141E+004,2.32499416784794E+004,2.02959444690640E+004,2.17803992885441E+004,2.29123973530843E+004,0.00000000000000E+000,0.00000000000000E+000,2.30151122547348E+004,1.83561222422846E+004,2.03053477339939E+004,0.00000000000000E+000,0.00000000000000E+000,1.85618376965948E+000,1.87873745498472E+000,1.86815049212642E+000,0.00000000000000E+000,0.00000000000000E+000,2.31111859350437E+004,1.69616194647621E+004,2.02953219809484E+004,2.28474737694725E+004,2.25450082021141E+004,2.31458899091815E+004,1.87966770890315E+004,2.09467290145307E+004,2.28348150748628E+004 +4.46000000000000E-008,7.19088187169420E+022,9.14588880361022E+022,1.53427502537004E+023,1.55159280310796E+021,8.34356517026117E+021,3.26690367263418E+023,2.28274030223243E+004,2.25632882937376E+004,2.32090775543606E+004,2.01988269767861E+004,2.16937949599749E+004,2.28912767098046E+004,0.00000000000000E+000,0.00000000000000E+000,2.30278936591667E+004,1.82321117942495E+004,2.02999190475499E+004,0.00000000000000E+000,0.00000000000000E+000,1.85626158582760E+000,1.87793014020809E+000,1.86811604274300E+000,0.00000000000000E+000,0.00000000000000E+000,2.30451937174740E+004,1.71927995168045E+004,2.03780189826023E+004,2.28274030223243E+004,2.25632882937376E+004,2.31122183009498E+004,1.87877325863799E+004,2.09315082024774E+004,2.28196170931321E+004 +4.48000000000000E-008,7.22741937963835E+022,9.15239548310713E+022,1.53247317566321E+023,1.52156197466071E+021,8.33856003218663E+021,3.26905588200623E+023,2.28332894928983E+004,2.25094894938916E+004,2.31610374310268E+004,1.97864932999795E+004,2.18136051657485E+004,2.28560864346888E+004,0.00000000000000E+000,0.00000000000000E+000,2.30514035086706E+004,1.85180230807875E+004,2.04347987616091E+004,0.00000000000000E+000,0.00000000000000E+000,1.85640449972658E+000,1.87977551188521E+000,1.86896666752836E+000,0.00000000000000E+000,0.00000000000000E+000,2.30090378659591E+004,1.68307918281033E+004,2.01032013673263E+004,2.28332894928983E+004,2.25094894938916E+004,2.30870155385115E+004,1.85806629374897E+004,2.09404387788000E+004,2.27935015380987E+004 +4.50000000000000E-008,7.26746048423469E+022,9.16540884210093E+022,1.53082148009861E+023,1.49153114621345E+021,8.26848809914304E+021,3.27170860518573E+023,2.28133713788300E+004,2.24981804439513E+004,2.31313392585180E+004,1.97438657476388E+004,2.17555905905250E+004,2.28331230067215E+004,0.00000000000000E+000,0.00000000000000E+000,2.30585258776393E+004,1.82732514642181E+004,1.99426744514681E+004,0.00000000000000E+000,0.00000000000000E+000,1.85644773982068E+000,1.87819915007096E+000,1.86580879730877E+000,0.00000000000000E+000,0.00000000000000E+000,2.29502019918288E+004,1.75713699847175E+004,1.99859100585583E+004,2.28133713788300E+004,2.24981804439513E+004,2.30587872915789E+004,1.87105868518144E+004,2.07474186257476E+004,2.27689863765319E+004 +4.52000000000000E-008,7.29298668841485E+022,9.16590935590839E+022,1.52942004143774E+023,1.47651573198983E+021,8.29351378951575E+021,3.27300994108512E+023,2.27912932336580E+004,2.24705858648493E+004,2.31039674775054E+004,1.96617335925000E+004,2.16440911973769E+004,2.28044007368463E+004,0.00000000000000E+000,0.00000000000000E+000,2.30482478119369E+004,1.85251281538864E+004,1.99030012627866E+004,0.00000000000000E+000,0.00000000000000E+000,1.85638533308316E+000,1.87982066060698E+000,1.86554758279704E+000,0.00000000000000E+000,0.00000000000000E+000,2.29710728858116E+004,1.71449985706308E+004,1.99397532765083E+004,2.27912932336580E+004,2.24705858648493E+004,2.30501160185549E+004,1.86195429913325E+004,2.06745018266289E+004,2.27499668548433E+004 +4.54000000000000E-008,7.31901340640247E+022,9.17091449398293E+022,1.52811870553836E+023,1.45149004161712E+021,8.29351378951575E+021,3.27456153388822E+023,2.28425465976197E+004,2.25177672166183E+004,2.30382484767268E+004,1.93661884111473E+004,2.17508554955773E+004,2.27998553137295E+004,0.00000000000000E+000,0.00000000000000E+000,2.30469025781997E+004,1.83862734771104E+004,2.00056399731324E+004,0.00000000000000E+000,0.00000000000000E+000,1.85637716103012E+000,1.87893213070109E+000,1.86622129599536E+000,0.00000000000000E+000,0.00000000000000E+000,2.28894315277874E+004,1.69545412595475E+004,1.99210911750166E+004,2.28425465976197E+004,2.25177672166183E+004,2.29971818004133E+004,1.83973624609142E+004,2.07435347703855E+004,2.27508840392471E+004 +4.56000000000000E-008,7.35605142815408E+022,9.17091449398293E+022,1.52631685583152E+023,1.45649517969166E+021,8.28350351336667E+021,3.27641343497580E+023,2.28254606193384E+004,2.24147497397969E+004,2.30982265764000E+004,1.90697997072643E+004,2.16652768921134E+004,2.27915402854111E+004,0.00000000000000E+000,0.00000000000000E+000,2.29807918349154E+004,1.81391489833469E+004,1.99586210264607E+004,0.00000000000000E+000,0.00000000000000E+000,1.85597440173802E+000,1.87731786562156E+000,1.86591350647088E+000,0.00000000000000E+000,0.00000000000000E+000,2.28689319323371E+004,1.74694028104554E+004,1.97548218013961E+004,2.28254606193384E+004,2.24147497397969E+004,2.29995469252589E+004,1.83503446637487E+004,2.06449636584190E+004,2.27165763254811E+004 +4.58000000000000E-008,7.38958585325350E+022,9.17141500779038E+022,1.52461510888618E+023,1.45149004161712E+021,8.28850865144121E+021,3.27811518192115E+023,2.28428815948556E+004,2.24078781434534E+004,2.30810357044294E+004,1.94074970249852E+004,2.15004691620152E+004,2.27827871231278E+004,0.00000000000000E+000,0.00000000000000E+000,2.29203798260011E+004,1.83705790077365E+004,1.99788318277782E+004,0.00000000000000E+000,0.00000000000000E+000,1.85560438120410E+000,1.87883087516986E+000,1.86604598116414E+000,0.00000000000000E+000,0.00000000000000E+000,2.28421676650001E+004,1.77967440045713E+004,1.96746310775281E+004,2.28428815948556E+004,2.24078781434534E+004,2.29678655464688E+004,1.86559594860532E+004,2.05550747648434E+004,2.27029215579756E+004 +4.60000000000000E-008,7.42011719550821E+022,9.17291654921275E+022,1.52306351608307E+023,1.44147976546804E+021,8.29351378951575E+021,3.27971682610500E+023,2.28057024213972E+004,2.24392609819946E+004,2.30866907160785E+004,1.89872541510131E+004,2.16162340972885E+004,2.27868405695239E+004,0.00000000000000E+000,0.00000000000000E+000,2.28705852269720E+004,1.87355212474561E+004,1.97672507217741E+004,0.00000000000000E+000,0.00000000000000E+000,1.85529796026154E+000,1.88114239619134E+000,1.86464603946475E+000,0.00000000000000E+000,0.00000000000000E+000,2.27657195901579E+004,1.78147869337322E+004,1.99379756052819E+004,2.28057024213972E+004,2.24392609819946E+004,2.29345627807171E+004,1.85776593904804E+004,2.06250371043067E+004,2.26893291653478E+004 +4.62000000000000E-008,7.45365162060764E+022,9.17441809063511E+022,1.52131171775698E+023,1.42646435124441E+021,8.30852920373938E+021,3.28146862443109E+023,2.28367199314818E+004,2.24423146192954E+004,2.30724100277066E+004,1.92075775501183E+004,2.14849192670963E+004,2.27857156366282E+004,0.00000000000000E+000,0.00000000000000E+000,2.28053602163120E+004,1.88174453261142E+004,1.94694805742037E+004,0.00000000000000E+000,0.00000000000000E+000,1.85489461356417E+000,1.88164923374639E+000,1.86262554201254E+000,0.00000000000000E+000,0.00000000000000E+000,2.27182982066293E+004,1.78272810082169E+004,2.02102259650058E+004,2.28367199314818E+004,2.24423146192954E+004,2.28968314131963E+004,1.86997508699930E+004,2.05664086834524E+004,2.26788523597189E+004 +4.64000000000000E-008,7.48768655951452E+022,9.17842220109474E+022,1.51971007357312E+023,1.41645407509533E+021,8.28850865144121E+021,3.28337057689942E+023,2.27761985469497E+004,2.24295094668818E+004,2.30073971782445E+004,1.89362038786635E+004,2.16119581941143E+004,2.27403387782957E+004,0.00000000000000E+000,0.00000000000000E+000,2.28215344268579E+004,1.91517688693915E+004,1.90809663446966E+004,0.00000000000000E+000,0.00000000000000E+000,1.85499484308265E+000,1.88367355576368E+000,1.85989686410526E+000,0.00000000000000E+000,0.00000000000000E+000,2.27420610263381E+004,1.82523688678335E+004,2.01979467494297E+004,2.27761985469497E+004,2.24295094668818E+004,2.28796878554520E+004,1.87965087084485E+004,2.05134858930792E+004,2.26528960643989E+004 +4.66000000000000E-008,7.51571533273196E+022,9.17642014586493E+022,1.51810842938927E+023,1.40644379894624E+021,8.32854975603755E+021,3.28467191279880E+023,2.27974891787500E+004,2.23608369970207E+004,2.29254290910479E+004,1.89037476269662E+004,2.14929037495768E+004,2.26848812619165E+004,0.00000000000000E+000,0.00000000000000E+000,2.28803335904704E+004,1.91426410082775E+004,1.91471943734262E+004,0.00000000000000E+000,0.00000000000000E+000,1.85535805102071E+000,1.88361920634429E+000,1.86036964162502E+000,0.00000000000000E+000,0.00000000000000E+000,2.27568596031695E+004,1.87023635165394E+004,2.03083102835954E+004,2.27974891787500E+004,2.23608369970207E+004,2.28640453861143E+004,1.89106068007580E+004,2.05114590468634E+004,2.26316550145173E+004 +4.68000000000000E-008,7.54274307833448E+022,9.18142528393947E+022,1.51680709348989E+023,1.38642324664808E+021,8.31853947988846E+021,3.28627355698265E+023,2.26987572577315E+004,2.23371550194391E+004,2.29194797184826E+004,1.86855206751477E+004,2.14374202703609E+004,2.26507471768189E+004,0.00000000000000E+000,0.00000000000000E+000,2.29004843552528E+004,1.88693295763257E+004,1.91703141259533E+004,0.00000000000000E+000,0.00000000000000E+000,1.85548210618177E+000,1.88196799597932E+000,1.86053393499930E+000,0.00000000000000E+000,0.00000000000000E+000,2.27563478836156E+004,1.84971464915433E+004,2.02144710323343E+004,2.26987572577315E+004,2.23371550194391E+004,2.28667468514562E+004,1.86810414480090E+004,2.04660780315342E+004,2.26018014111531E+004 +4.70000000000001E-008,7.57327442058919E+022,9.18392785297674E+022,1.51525550068678E+023,1.37140783242445E+021,8.32354461796300E+021,3.28792525254725E+023,2.26503120537808E+004,2.23295970903706E+004,2.29101146974926E+004,1.80939821431517E+004,2.15370967223876E+004,2.26332740254435E+004,0.00000000000000E+000,0.00000000000000E+000,2.28545674524629E+004,1.90473587502164E+004,1.94185706717604E+004,0.00000000000000E+000,0.00000000000000E+000,1.85519911524149E+000,1.88304882790825E+000,1.86227404640996E+000,0.00000000000000E+000,0.00000000000000E+000,2.27322944753167E+004,1.86185014989468E+004,2.02650917166983E+004,2.26503120537808E+004,2.23295970903706E+004,2.28432031991577E+004,1.85072137626262E+004,2.05914501264898E+004,2.25802216510569E+004 +4.72000000000001E-008,7.60280473522899E+022,9.18843247724383E+022,1.51390411340666E+023,1.36139755627537E+021,8.29851892759030E+021,3.28962699949259E+023,2.25759066353304E+004,2.22561843749492E+004,2.29376019976831E+004,1.83787154872067E+004,2.17447728261198E+004,2.26147211278530E+004,0.00000000000000E+000,0.00000000000000E+000,2.28463273234687E+004,1.91793785673689E+004,1.94549878944779E+004,0.00000000000000E+000,0.00000000000000E+000,1.85514821316000E+000,1.88383764193430E+000,1.86252566336996E+000,0.00000000000000E+000,0.00000000000000E+000,2.27105088581741E+004,1.85073008306421E+004,1.99312036001429E+004,2.25759066353304E+004,2.22561843749492E+004,2.28466463671985E+004,1.86351843389752E+004,2.05947703288091E+004,2.25449139073413E+004 +4.74000000000001E-008,7.63633916032842E+022,9.19193607389601E+022,1.51210226369982E+023,1.33136672782812E+021,8.32354461796300E+021,3.29147890058017E+023,2.24528171132346E+004,2.22978903865770E+004,2.29472404913866E+004,1.84794243485397E+004,2.17213581862220E+004,2.26021200035246E+004,0.00000000000000E+000,0.00000000000000E+000,2.28409063876661E+004,1.89543201756413E+004,1.95241463697053E+004,0.00000000000000E+000,0.00000000000000E+000,1.85511470668655E+000,1.88248646204017E+000,1.86300097835639E+000,0.00000000000000E+000,0.00000000000000E+000,2.26324302227981E+004,1.87712269523956E+004,1.99139009610840E+004,2.24528171132346E+004,2.22978903865770E+004,2.28266177837892E+004,1.86941127727392E+004,2.05981873986304E+004,2.25191715147598E+004 +4.76000000000001E-008,7.66787153019803E+022,9.19644069816309E+022,1.51050061951597E+023,1.30634103745541E+021,8.32854975603755E+021,3.29328075028701E+023,2.24514426029528E+004,2.23504003076241E+004,2.29003656747153E+004,1.85594025500612E+004,2.14110809357789E+004,2.25873815977607E+004,0.00000000000000E+000,0.00000000000000E+000,2.28104686379521E+004,1.85118280114673E+004,1.95049557950135E+004,0.00000000000000E+000,0.00000000000000E+000,1.85492628475842E+000,1.87973611804207E+000,1.86286941425483E+000,0.00000000000000E+000,0.00000000000000E+000,2.26099185510674E+004,1.86981424067760E+004,1.97553855430580E+004,2.24514426029528E+004,2.23504003076241E+004,2.27912986194835E+004,1.85867367576106E+004,2.04111707530698E+004,2.25121779293255E+004 +4.78000000000001E-008,7.69690133103037E+022,9.20244686385254E+022,1.50919928361659E+023,1.29132562323178E+021,8.29851892759030E+021,3.29503254861310E+023,2.24442890178317E+004,2.24214192900588E+004,2.28291672912979E+004,1.77921747231569E+004,2.12546530698104E+004,2.25659922650656E+004,0.00000000000000E+000,0.00000000000000E+000,2.28143131542423E+004,1.86085473402472E+004,1.93027627511040E+004,0.00000000000000E+000,0.00000000000000E+000,1.85495011088169E+000,1.88034821834429E+000,1.86146774264277E+000,0.00000000000000E+000,0.00000000000000E+000,2.25714432825762E+004,1.90549056975928E+004,1.98385243506259E+004,2.24442890178317E+004,2.24214192900588E+004,2.27499542128891E+004,1.83823376939927E+004,2.03123418112972E+004,2.25082916897705E+004 +4.80000000000001E-008,7.71992496617326E+022,9.20945405715690E+022,1.50809815324019E+023,1.26129479478453E+021,8.28850865144121E+021,3.29653409003546E+023,2.24102333279646E+004,2.24230022894046E+004,2.28126612968316E+004,1.83243470193361E+004,2.12234650714233E+004,2.25524311391457E+004,0.00000000000000E+000,0.00000000000000E+000,2.27804862564853E+004,1.83754368233358E+004,1.92781109180087E+004,0.00000000000000E+000,0.00000000000000E+000,1.85474020230215E+000,1.87886223427731E+000,1.86129488661894E+000,0.00000000000000E+000,0.00000000000000E+000,2.25534976634766E+004,1.94332053155022E+004,1.99467811574727E+004,2.24102333279646E+004,2.24230022894046E+004,2.27283395588091E+004,1.86606973076286E+004,2.03235991323633E+004,2.24925171356720E+004 +4.82000000000001E-008,7.74845425319815E+022,9.21896381949853E+022,1.50689692010230E+023,1.23626910441182E+021,8.24346240877034E+021,3.29843604250379E+023,2.23461406479198E+004,2.24800100124688E+004,2.27942251879902E+004,1.80672591149855E+004,2.12689449284203E+004,2.25453060017820E+004,0.00000000000000E+000,0.00000000000000E+000,2.27777106243449E+004,1.85318428320717E+004,1.95228913873086E+004,0.00000000000000E+000,0.00000000000000E+000,1.85472295150806E+000,1.87986329744814E+000,1.86299238233147E+000,0.00000000000000E+000,0.00000000000000E+000,2.24834989268747E+004,1.98751651564196E+004,1.93268102695821E+004,2.23461406479198E+004,2.24800100124688E+004,2.26990962576058E+004,1.87197671325323E+004,2.02289971379660E+004,2.24783013851962E+004 +4.84000000000001E-008,7.78599278875721E+022,9.22346844376562E+022,1.50494491625323E+023,1.20623827596457E+021,8.25847782299396E+021,3.30053820049510E+023,2.23443132952048E+004,2.24492739404672E+004,2.27290940045838E+004,1.76012555577536E+004,2.13272783867396E+004,2.25063110300184E+004,0.00000000000000E+000,0.00000000000000E+000,2.27229622579260E+004,1.88149605426347E+004,1.95113864069381E+004,0.00000000000000E+000,0.00000000000000E+000,1.85438184678339E+000,1.88163392474672E+000,1.86291352848431E+000,0.00000000000000E+000,0.00000000000000E+000,2.25342738812410E+004,1.95618617751224E+004,1.92478471542685E+004,2.23443132952048E+004,2.24492739404672E+004,2.26705896995508E+004,1.85029252740997E+004,2.02283701505977E+004,2.24554337021484E+004 +4.86000000000001E-008,7.80901642390011E+022,9.22947460945507E+022,1.50379373449608E+023,1.17620744751732E+021,8.25847782299396E+021,3.30198969053671E+023,2.23099055446004E+004,2.24306415851425E+004,2.26468044196795E+004,1.75300247443394E+004,2.13794043410407E+004,2.24567845283422E+004,0.00000000000000E+000,0.00000000000000E+000,2.27556405005270E+004,1.86089977364315E+004,1.92736289295630E+004,0.00000000000000E+000,0.00000000000000E+000,1.85458563791869E+000,1.88035105416421E+000,1.86126341306758E+000,0.00000000000000E+000,0.00000000000000E+000,2.25977364093694E+004,1.93813429875988E+004,1.91294721400851E+004,2.23099055446004E+004,2.24306415851425E+004,2.26619344096286E+004,1.83630468451732E+004,2.01523319165369E+004,2.24359525275128E+004 +4.88000000000001E-008,7.84205033519208E+022,9.23347871991470E+022,1.50214203893148E+023,1.15618689521915E+021,8.25847782299396E+021,3.30384159162429E+023,2.22787922863354E+004,2.24225899967847E+004,2.26040531264120E+004,1.80894680686432E+004,2.13839333516184E+004,2.24298361948657E+004,0.00000000000000E+000,0.00000000000000E+000,2.27305172634035E+004,1.84099170289395E+004,1.92370499893288E+004,0.00000000000000E+000,0.00000000000000E+000,1.85442901273476E+000,1.87908435212431E+000,1.86100601271135E+000,0.00000000000000E+000,0.00000000000000E+000,2.25991173683440E+004,1.92329621490449E+004,1.90851923939947E+004,2.22787922863354E+004,2.24225899967847E+004,2.26368271544389E+004,1.85094569276050E+004,2.01315157403908E+004,2.24149009965903E+004 +4.90000000000001E-008,7.86857756698715E+022,9.23297820610725E+022,1.50079065165136E+023,1.15618689521915E+021,8.26348296106850E+021,3.30514292752367E+023,2.22631412758672E+004,2.24046629932696E+004,2.25865861244224E+004,1.81779954094947E+004,2.12935050006121E+004,2.24110114465232E+004,0.00000000000000E+000,0.00000000000000E+000,2.26969235055516E+004,1.80454035174599E+004,1.93225663163656E+004,0.00000000000000E+000,0.00000000000000E+000,1.85421905236196E+000,1.87669418771029E+000,1.86160629155951E+000,0.00000000000000E+000,0.00000000000000E+000,2.25940621796823E+004,1.93500182676265E+004,1.92139366572926E+004,2.22631412758672E+004,2.24046629932696E+004,2.26186162919907E+004,1.84826783321247E+004,2.01526280384436E+004,2.23980973625545E+004 +4.92000000000001E-008,7.91012021300585E+022,9.23548077514452E+022,1.49863844227930E+023,1.13616634292099E+021,8.27849837529213E+021,3.30734518827647E+023,2.22294662744921E+004,2.23579094889545E+004,2.25536086397766E+004,1.85189685739072E+004,2.13108144053894E+004,2.23764686765424E+004,0.00000000000000E+000,0.00000000000000E+000,2.26497645222189E+004,1.80534326548096E+004,1.92716445773159E+004,0.00000000000000E+000,0.00000000000000E+000,1.85392328628855E+000,1.87674785272133E+000,1.86124947393119E+000,0.00000000000000E+000,0.00000000000000E+000,2.26111113741207E+004,1.92979233868393E+004,1.92141779547153E+004,2.22294662744921E+004,2.23579094889545E+004,2.25963974318321E+004,1.86184656187294E+004,2.01464963461993E+004,2.23670554858313E+004 +4.94000000000001E-008,7.95066183140964E+022,9.23798334418179E+022,1.49648623290725E+023,1.11114065254828E+021,8.30352406566484E+021,3.30949739764853E+023,2.22329162276238E+004,2.22818055681371E+004,2.25927603674980E+004,1.92849226132342E+004,2.12626313595281E+004,2.23750349372422E+004,0.00000000000000E+000,0.00000000000000E+000,2.26362399382719E+004,1.72872900984208E+004,1.93018371883098E+004,0.00000000000000E+000,0.00000000000000E+000,1.85383824299409E+000,1.87140768642061E+000,1.86146126047516E+000,0.00000000000000E+000,0.00000000000000E+000,2.25002576977012E+004,1.87339686754581E+004,1.90890337465069E+004,2.22329162276238E+004,2.22818055681371E+004,2.25775278445229E+004,1.85805119685299E+004,2.00971161271391E+004,2.23365393361096E+004 +4.96000000000001E-008,7.97869060462707E+022,9.24098642702651E+022,1.49498469148489E+023,1.08611496217557E+021,8.32354461796300E+021,3.31104899045163E+023,2.22410851153961E+004,2.22531075412535E+004,2.25681423768833E+004,1.90841191233691E+004,2.12179805670412E+004,2.23560361970973E+004,0.00000000000000E+000,0.00000000000000E+000,2.25659563656330E+004,1.70626737326341E+004,1.91414253316720E+004,0.00000000000000E+000,0.00000000000000E+000,1.85339469804121E+000,1.86975326151454E+000,1.86032858538705E+000,0.00000000000000E+000,0.00000000000000E+000,2.25411816450141E+004,1.88255527947737E+004,1.90812030552620E+004,2.22410851153961E+004,2.22531075412535E+004,2.25596833565067E+004,1.84586619044669E+004,2.00319396965817E+004,2.23203496422366E+004 +4.98000000000001E-008,8.00772040545942E+022,9.24098642702651E+022,1.49323289315880E+023,1.05608413372832E+021,8.38360627485751E+021,3.31250048049325E+023,2.22729311182718E+004,2.22210934482299E+004,2.25440788999908E+004,1.91264792485753E+004,2.10767101725903E+004,2.23403931561265E+004,0.00000000000000E+000,0.00000000000000E+000,2.25516772139024E+004,1.72580385529796E+004,1.93166597584686E+004,0.00000000000000E+000,0.00000000000000E+000,1.85330425629710E+000,1.87119461554282E+000,1.86156499732709E+000,0.00000000000000E+000,0.00000000000000E+000,2.24959658985451E+004,1.91146659010318E+004,1.89994459949141E+004,2.22729311182718E+004,2.22210934482299E+004,2.25320928546751E+004,1.86142185630484E+004,1.99937244976448E+004,2.23059475412142E+004 +5.00000000000001E-008,8.03825174771412E+022,9.24549105129360E+022,1.49168130035569E+023,1.03105844335561E+021,8.38861141293205E+021,3.31425227881934E+023,2.23622542401043E+004,2.21363949257098E+004,2.25172207045075E+004,1.94299709489947E+004,2.09544247156016E+004,2.23242401295599E+004,0.00000000000000E+000,0.00000000000000E+000,2.25419710823181E+004,1.77278372155521E+004,1.91487722667543E+004,0.00000000000000E+000,0.00000000000000E+000,1.85324271560358E+000,1.87453352818276E+000,1.86038086673521E+000,0.00000000000000E+000,0.00000000000000E+000,2.24643524872037E+004,1.85017559552368E+004,1.88988829498186E+004,2.23622542401043E+004,2.21363949257098E+004,2.25084849892109E+004,1.86957921542279E+004,1.98655223726432E+004,2.22904634305022E+004 +5.02000000000001E-008,8.06227641047192E+022,9.24649207890851E+022,1.49048006721780E+023,1.02605330528107E+021,8.38861141293205E+021,3.31550356333798E+023,2.23602100106604E+004,2.21086584652842E+004,2.25000779672076E+004,1.90438361466712E+004,2.11644167125324E+004,2.23124149322956E+004,0.00000000000000E+000,0.00000000000000E+000,2.25009555284618E+004,1.76757760610466E+004,1.89539757869080E+004,0.00000000000000E+000,0.00000000000000E+000,1.85298209011380E+000,1.87417207251589E+000,1.85898131714646E+000,0.00000000000000E+000,0.00000000000000E+000,2.24861085343985E+004,1.79451761042529E+004,1.87114849481744E+004,2.23602100106604E+004,2.21086584652842E+004,2.24962383598680E+004,1.83511999949120E+004,1.98500769446763E+004,2.22752909999113E+004 +5.04000000000001E-008,8.09330826653408E+022,9.25049618936815E+022,1.48892847441469E+023,1.00603275298290E+021,8.38861141293205E+021,3.31725536166407E+023,2.23559592332590E+004,2.20982264550213E+004,2.25176209517784E+004,1.88822174582729E+004,2.10566639751680E+004,2.23132574610876E+004,0.00000000000000E+000,0.00000000000000E+000,2.24164358391065E+004,1.78473318151724E+004,1.88573934502797E+004,0.00000000000000E+000,0.00000000000000E+000,1.85244209799010E+000,1.87535536957884E+000,1.85827695424955E+000,0.00000000000000E+000,0.00000000000000E+000,2.24404039522621E+004,1.78690802247126E+004,1.90266106926499E+004,2.23559592332590E+004,2.20982264550213E+004,2.24677301892521E+004,1.83052214192955E+004,1.98687620645360E+004,2.22590750115246E+004 +5.06000000000001E-008,8.12984577447824E+022,9.25399978602032E+022,1.48712662470786E+023,9.91017338759275E+020,8.38360627485751E+021,3.31925741689388E+023,2.23224057904020E+004,2.21485050258434E+004,2.24884245125719E+004,1.85592030985218E+004,2.09580961622177E+004,2.23026094226077E+004,0.00000000000000E+000,0.00000000000000E+000,2.23495282967527E+004,1.72046474130022E+004,1.88547683802819E+004,0.00000000000000E+000,0.00000000000000E+000,1.85201180972339E+000,1.87080388452463E+000,1.85825771176855E+000,0.00000000000000E+000,0.00000000000000E+000,2.24052877394685E+004,1.77895166798300E+004,1.92210003665752E+004,2.23224057904020E+004,2.21485050258434E+004,2.24266162451622E+004,1.79663349357682E+004,1.98816249981529E+004,2.22459584230554E+004 +5.08000000000001E-008,8.15787454769567E+022,9.25900492409487E+022,1.48572518604699E+023,9.65991648386566E+020,8.38360627485751E+021,3.32090911245848E+023,2.22292682958098E+004,2.20843009177692E+004,2.25029429410175E+004,1.78952404487338E+004,2.10133346204576E+004,2.22679849553617E+004,0.00000000000000E+000,0.00000000000000E+000,2.23771048367654E+004,1.59002003255146E+004,1.87630406263274E+004,0.00000000000000E+000,0.00000000000000E+000,1.85218946030347E+000,1.86046262888527E+000,1.85758202728991E+000,0.00000000000000E+000,0.00000000000000E+000,2.23993521151044E+004,1.80229233972107E+004,1.92100237669877E+004,2.22292682958098E+004,2.20843009177692E+004,2.24386922858398E+004,1.73914359850421E+004,1.98778429332175E+004,2.22091093067421E+004 +5.10000000000001E-008,8.18890640375783E+022,9.26401006216941E+022,1.48422364462462E+023,9.45971096088399E+020,8.37359599870842E+021,3.32271096216532E+023,2.22255366889960E+004,2.20830673808014E+004,2.24471704068240E+004,1.81799385190217E+004,2.09013825998650E+004,2.22399287897078E+004,0.00000000000000E+000,0.00000000000000E+000,2.23764414595414E+004,1.60210321210239E+004,1.86018718914609E+004,0.00000000000000E+000,0.00000000000000E+000,1.85218519177050E+000,1.86148956582194E+000,1.85637910215578E+000,0.00000000000000E+000,0.00000000000000E+000,2.23983735628704E+004,1.76912970358721E+004,1.90498788692072E+004,2.22255366889960E+004,2.20830673808014E+004,2.24138092540974E+004,1.74518073090517E+004,1.97387031495595E+004,2.21936529010868E+004 +5.12000000000001E-008,8.22043877362744E+022,9.26551160359177E+022,1.48272210320226E+023,9.45971096088399E+020,8.35858058448480E+021,3.32436265772991E+023,2.21791754677028E+004,2.20143007301901E+004,2.25088513899812E+004,1.80858390087705E+004,2.11355196458493E+004,2.22423744403990E+004,0.00000000000000E+000,0.00000000000000E+000,2.23180494901789E+004,1.56114644479864E+004,1.84538595439983E+004,0.00000000000000E+000,0.00000000000000E+000,1.85180849807864E+000,1.85794594988161E+000,1.85525634452630E+000,0.00000000000000E+000,0.00000000000000E+000,2.23472453724655E+004,1.80025418987551E+004,1.90261901654257E+004,2.21791754677028E+004,2.20143007301901E+004,2.24101124052702E+004,1.73911924705002E+004,1.97943844035457E+004,2.21626378027884E+004 +5.14000000000001E-008,8.24396292257779E+022,9.26801417262904E+022,1.48157092144512E+023,9.35960819939316E+020,8.35357544641025E+021,3.32566399362930E+023,2.21505324092940E+004,2.19805156874792E+004,2.25333224889210E+004,1.77426939184510E+004,2.10321669433835E+004,2.22331865104123E+004,0.00000000000000E+000,0.00000000000000E+000,2.22512105193854E+004,1.58155442519604E+004,1.86696300580241E+004,0.00000000000000E+000,0.00000000000000E+000,1.85137494983044E+000,1.85973403215050E+000,1.85688729845025E+000,0.00000000000000E+000,0.00000000000000E+000,2.23447635716692E+004,1.89182124785594E+004,1.89266400570626E+004,2.21505324092940E+004,2.19805156874792E+004,2.24020476901346E+004,1.75629568187581E+004,1.97782425119393E+004,2.21427015072879E+004 +5.16000000000001E-008,8.27849837529213E+022,9.26551160359177E+022,1.47971902035754E+023,9.35960819939316E+020,8.37860113678296E+021,3.32726563781315E+023,2.21586184947841E+004,2.19645395666625E+004,2.25106512381532E+004,1.72133020880152E+004,2.11768034418586E+004,2.22224958409476E+004,0.00000000000000E+000,0.00000000000000E+000,2.22347186633042E+004,1.54746329621441E+004,1.84636920907044E+004,0.00000000000000E+000,0.00000000000000E+000,1.85126758588431E+000,1.85672134219340E+000,1.85533147367635E+000,0.00000000000000E+000,0.00000000000000E+000,2.23090779395682E+004,1.89087570219506E+004,1.86575157352818E+004,2.21586184947841E+004,2.19645395666625E+004,2.23772494088683E+004,1.72370285582528E+004,1.97075387778208E+004,2.21262369261554E+004 +5.18000000000001E-008,8.30152201043502E+022,9.26851468643649E+022,1.47871799274263E+023,9.35960819939316E+020,8.34857030833571E+021,3.32856697371253E+023,2.21714839018305E+004,2.19023425834924E+004,2.24629767869783E+004,1.72634381984682E+004,2.09649379605022E+004,2.21819734089077E+004,0.00000000000000E+000,0.00000000000000E+000,2.23016142119892E+004,1.53285199613901E+004,1.86241133664484E+004,0.00000000000000E+000,0.00000000000000E+000,1.85170212583883E+000,1.85539015497742E+000,1.85654631372019E+000,0.00000000000000E+000,0.00000000000000E+000,2.22730029695067E+004,1.91129814480970E+004,1.88730283120945E+004,2.21714839018305E+004,2.19023425834924E+004,2.23639148246198E+004,1.72793465930353E+004,1.97209197365017E+004,2.21068078653418E+004 +5.20000000000001E-008,8.33305438030463E+022,9.27602239354831E+022,1.47726650270101E+023,9.10935129566607E+020,8.32354461796300E+021,3.33051897756160E+023,2.21697640782547E+004,2.19011486238293E+004,2.23756960225455E+004,1.72379562011672E+004,2.07579912467142E+004,2.21375207412104E+004,0.00000000000000E+000,0.00000000000000E+000,2.22853104290962E+004,1.50192839572011E+004,1.87504290196635E+004,0.00000000000000E+000,0.00000000000000E+000,1.85159645377615E+000,1.85248965337846E+000,1.85748862398790E+000,0.00000000000000E+000,0.00000000000000E+000,2.22991369023921E+004,1.95016880454874E+004,1.90575022787699E+004,2.21697640782547E+004,2.19011486238293E+004,2.23289221229482E+004,1.72988678308914E+004,1.97182517260912E+004,2.20909556762469E+004 +5.22000000000001E-008,8.35457647402516E+022,9.27852496258558E+022,1.47631552646685E+023,9.10935129566607E+020,8.29851892759030E+021,3.33172021069949E+023,2.21624740816569E+004,2.18772172814377E+004,2.23606138135748E+004,1.72430959227149E+004,2.08899362906566E+004,2.21256841962466E+004,0.00000000000000E+000,0.00000000000000E+000,2.22800684491259E+004,1.53821086934017E+004,1.89354200902530E+004,0.00000000000000E+000,0.00000000000000E+000,1.85156244619498E+000,1.85588124502154E+000,1.85884653630522E+000,0.00000000000000E+000,0.00000000000000E+000,2.22792089515524E+004,1.92338646202085E+004,1.86201170561993E+004,2.21624740816569E+004,2.18772172814377E+004,2.23150848559796E+004,1.73200759753177E+004,1.96983679861426E+004,2.20760412552176E+004 +5.24000000000001E-008,8.38160421962769E+022,9.28353010066012E+022,1.47496413918672E+023,8.85909439193898E+020,8.29851892759030E+021,3.33332185488334E+023,2.20714190362426E+004,2.19230446839525E+004,2.23545511361031E+004,1.66412871961934E+004,2.08623578624626E+004,2.21108468809631E+004,0.00000000000000E+000,0.00000000000000E+000,2.22400486741566E+004,1.61590438883697E+004,1.88841225493178E+004,0.00000000000000E+000,0.00000000000000E+000,1.85130230183868E+000,1.86264418615791E+000,1.85847258901210E+000,0.00000000000000E+000,0.00000000000000E+000,2.22795074898737E+004,1.79589997517200E+004,1.84728058988639E+004,2.20714190362426E+004,2.19230446839525E+004,2.23017048380016E+004,1.68944224849099E+004,1.96294886016246E+004,2.20574425768231E+004 +5.26000000000001E-008,8.41263607568985E+022,9.28353010066012E+022,1.47351264914510E+023,8.95919715342981E+020,8.27849837529213E+021,3.33487344768645E+023,2.20563789530387E+004,2.19029846939597E+004,2.23101012341528E+004,1.72039858345386E+004,2.07385718409381E+004,2.20800352574553E+004,0.00000000000000E+000,0.00000000000000E+000,2.22438524896401E+004,1.66392211387732E+004,1.89448803786757E+004,0.00000000000000E+000,0.00000000000000E+000,1.85132706732481E+000,1.86651570639894E+000,1.85891528405149E+000,0.00000000000000E+000,0.00000000000000E+000,2.22639773822023E+004,1.78856016802792E+004,1.85366990493045E+004,2.20563789530387E+004,2.19029846939597E+004,2.22787356613693E+004,1.72489998605208E+004,1.96103954840538E+004,2.20382914425041E+004 +5.28000000000001E-008,8.43816227987001E+022,9.28202855923776E+022,1.47221131324572E+023,9.00924853417523E+020,8.28350351336667E+021,3.33607468082434E+023,2.20283582794090E+004,2.18643059914821E+004,2.22572087039761E+004,1.69053206086504E+004,2.09607338336548E+004,2.20433612270656E+004,0.00000000000000E+000,0.00000000000000E+000,2.22823159293655E+004,1.67551561830009E+004,1.89607462287557E+004,0.00000000000000E+000,0.00000000000000E+000,1.85157702873147E+000,1.86741798514206E+000,1.85903043078282E+000,0.00000000000000E+000,0.00000000000000E+000,2.22695789114987E+004,1.78706427504143E+004,1.83815907822642E+004,2.20283582794090E+004,2.18643059914821E+004,2.22676046137838E+004,1.71456182777178E+004,1.96666261589548E+004,2.20164650734024E+004 +5.30000000000001E-008,8.46969464973962E+022,9.28252907304521E+022,1.47055961768112E+023,8.90914577268439E+020,8.29851892759030E+021,3.33767632500820E+023,2.20251325374375E+004,2.18586627735278E+004,2.22643345821774E+004,1.67183484579678E+004,2.11391235133018E+004,2.20480317877467E+004,0.00000000000000E+000,0.00000000000000E+000,2.21974506661226E+004,1.67777484995624E+004,1.87997287562373E+004,0.00000000000000E+000,0.00000000000000E+000,1.85102439492471E+000,1.86759239515572E+000,1.85785305025550E+000,0.00000000000000E+000,0.00000000000000E+000,2.22371171415706E+004,1.83897971698052E+004,1.83059856058889E+004,2.20251325374375E+004,2.18586627735278E+004,2.22383182332076E+004,1.72212659712531E+004,1.96791144657739E+004,2.20016111229418E+004 +5.32000000000001E-008,8.50222804722415E+022,9.28603266969739E+022,1.46880781935503E+023,8.60883748821189E+020,8.32354461796300E+021,3.33947817471503E+023,2.20378891254879E+004,2.18100245716429E+004,2.22639009943263E+004,1.74255782167179E+004,2.10243000415073E+004,2.20367808853907E+004,0.00000000000000E+000,0.00000000000000E+000,2.21962805236680E+004,1.59486880691621E+004,1.88411690780007E+004,0.00000000000000E+000,0.00000000000000E+000,1.85101674633378E+000,1.86087654396284E+000,1.85815794150307E+000,0.00000000000000E+000,0.00000000000000E+000,2.21551235582522E+004,1.83710796397893E+004,1.83655471145004E+004,2.20378891254879E+004,2.18100245716429E+004,2.22138760843865E+004,1.73006222607318E+004,1.96574449659678E+004,2.19803877944277E+004 +5.34000000000001E-008,8.53476144470867E+022,9.27852496258558E+022,1.46695591826745E+023,8.75899163044814E+020,8.36859086063388E+021,3.34072945923367E+023,2.19605039695030E+004,2.17772012060343E+004,2.22686969431879E+004,1.77018152363289E+004,2.12187536346152E+004,2.20151781694298E+004,0.00000000000000E+000,0.00000000000000E+000,2.22378087492727E+004,1.59930862977063E+004,1.87418542208628E+004,0.00000000000000E+000,0.00000000000000E+000,1.85128771451125E+000,1.86125340235195E+000,1.85742504788738E+000,0.00000000000000E+000,0.00000000000000E+000,2.20976733266620E+004,1.82843062099512E+004,1.82438088214877E+004,2.19605039695030E+004,2.17772012060343E+004,2.22104261211752E+004,1.74080794587270E+004,1.96801958574935E+004,2.19502794206388E+004 +5.36000000000001E-008,8.56329073173356E+022,9.27602239354831E+022,1.46535427408360E+023,8.70894024970272E+020,8.40362682715567E+021,3.34203079513305E+023,2.19484243696400E+004,2.17704722954804E+004,2.22549911277264E+004,1.81858171383765E+004,2.10513133723430E+004,2.20010875542592E+004,0.00000000000000E+000,0.00000000000000E+000,2.22273707799061E+004,1.67852449535822E+004,1.88603476605120E+004,0.00000000000000E+000,0.00000000000000E+000,1.85121970035528E+000,1.86765016560280E+000,1.85829860317501E+000,0.00000000000000E+000,0.00000000000000E+000,2.20617557020865E+004,1.79203609779889E+004,1.80776121432737E+004,2.19484243696400E+004,2.17704722954804E+004,2.21911189702954E+004,1.77276267649930E+004,1.95904742401127E+004,2.19351548402310E+004 +5.38000000000001E-008,8.58381179783918E+022,9.28052701781539E+022,1.46445334923018E+023,8.60883748821189E+020,8.37860113678296E+021,3.34328207965168E+023,2.19459170081157E+004,2.17302638718245E+004,2.22804329559443E+004,1.82593055967830E+004,2.09861860065207E+004,2.19990372800588E+004,0.00000000000000E+000,0.00000000000000E+000,2.21882270023715E+004,1.75897341051550E+004,1.88783634817586E+004,0.00000000000000E+000,0.00000000000000E+000,1.85096408350627E+000,1.87357010646009E+000,1.85843048306465E+000,0.00000000000000E+000,0.00000000000000E+000,2.20271029639922E+004,1.78000748395634E+004,1.79923025754926E+004,2.19459170081157E+004,2.17302638718245E+004,2.21815665943641E+004,1.79431742979622E+004,1.95419767928497E+004,2.19187236180597E+004 +5.40000000000001E-008,8.60533389155971E+022,9.28102753162285E+022,1.46335221885378E+023,8.55878610746647E+020,8.38360627485751E+021,3.34438321002808E+023,2.19429310739077E+004,2.17333257395109E+004,2.23027776801630E+004,1.79830496389030E+004,2.09219517003404E+004,2.20064884952288E+004,0.00000000000000E+000,0.00000000000000E+000,2.21803350530232E+004,1.77394668156925E+004,1.87925247197293E+004,0.00000000000000E+000,0.00000000000000E+000,1.85091244110939E+000,1.87461398795602E+000,1.85779991388369E+000,0.00000000000000E+000,0.00000000000000E+000,2.19220942316788E+004,1.77927978289374E+004,1.82849411335286E+004,2.19429310739077E+004,2.17333257395109E+004,2.21585636813188E+004,1.78612788181683E+004,1.95760287351430E+004,2.19093360616207E+004 +5.42000000000001E-008,8.63936883046659E+022,9.28202855923776E+022,1.46160042052769E+023,8.45868334597563E+020,8.39361655100659E+021,3.34613500835417E+023,2.19172363802689E+004,2.17783534160908E+004,2.22620202364265E+004,1.81187166932604E+004,2.08345794995348E+004,2.19925531628209E+004,0.00000000000000E+000,0.00000000000000E+000,2.21473537482546E+004,1.76267689127910E+004,1.88092983276701E+004,0.00000000000000E+000,0.00000000000000E+000,1.85069623437539E+000,1.87382991331651E+000,1.85792357327233E+000,0.00000000000000E+000,0.00000000000000E+000,2.18763786348535E+004,1.77637719347937E+004,1.83464852868522E+004,2.19172363802689E+004,2.17783534160908E+004,2.21184587636407E+004,1.78813357856232E+004,1.95602862001554E+004,2.18972800398255E+004 +5.44000000000001E-008,8.66739760368403E+022,9.28403061446757E+022,1.46024903324757E+023,8.40863196523021E+020,8.38360627485751E+021,3.34763654977653E+023,2.18598484143005E+004,2.17521811232697E+004,2.22285204612854E+004,1.82349741889262E+004,2.06688933430800E+004,2.19518742766188E+004,0.00000000000000E+000,0.00000000000000E+000,2.21967727900885E+004,1.78335827445710E+004,1.87482985179991E+004,0.00000000000000E+000,0.00000000000000E+000,1.85101996410984E+000,1.87526135664520E+000,1.85747283310783E+000,0.00000000000000E+000,0.00000000000000E+000,2.18603144812384E+004,1.80611548037509E+004,1.84425313674896E+004,2.18598484143005E+004,2.17521811232697E+004,2.21124534322212E+004,1.80749289807867E+004,1.94993405271425E+004,2.18715539588356E+004 +5.46000000000001E-008,8.69142226644183E+022,9.28803472492721E+022,1.45909785149042E+023,8.25847782299396E+020,8.37359599870842E+021,3.34903798843741E+023,2.18418801357537E+004,2.17446601312634E+004,2.21722285625389E+004,1.82229321460906E+004,2.07439757437716E+004,2.19224678516826E+004,0.00000000000000E+000,0.00000000000000E+000,2.21580809141533E+004,1.84552336213224E+004,1.87478314929738E+004,0.00000000000000E+000,0.00000000000000E+000,1.85076662432386E+000,1.87937504158564E+000,1.85746937113830E+000,0.00000000000000E+000,0.00000000000000E+000,2.18909364978193E+004,1.81248473800787E+004,1.87024557448057E+004,2.18418801357537E+004,2.17446601312634E+004,2.20862866297348E+004,1.82578789343085E+004,1.96078690573965E+004,2.18567050663623E+004 +5.48000000000001E-008,8.71845001204435E+022,9.28403061446757E+022,1.45759631006806E+023,8.30852920373938E+020,8.40362682715567E+021,3.35018917019455E+023,2.18179753136657E+004,2.17303811402293E+004,2.21460251156464E+004,1.78016183330976E+004,2.09957344745346E+004,2.19058430119182E+004,0.00000000000000E+000,0.00000000000000E+000,2.21211044916505E+004,1.86522234347896E+004,1.86446450398085E+004,0.00000000000000E+000,0.00000000000000E+000,1.85052371077376E+000,1.88062259138812E+000,1.85670032596587E+000,0.00000000000000E+000,0.00000000000000E+000,2.19060804470738E+004,1.85868397093061E+004,1.85743212500572E+004,2.18179753136657E+004,2.17303811402293E+004,2.20692418557170E+004,1.82623484314141E+004,1.96528006242808E+004,2.18398926595776E+004 +5.50000000000001E-008,8.75448700618105E+022,9.28403061446757E+022,1.45574440898048E+023,8.25847782299396E+020,8.41363710330476E+021,3.35199101990139E+023,2.18011582356752E+004,2.16854491047496E+004,2.21540718799401E+004,1.79547375214364E+004,2.09887983827599E+004,2.18925107366578E+004,0.00000000000000E+000,0.00000000000000E+000,2.21201900936459E+004,1.84414416448085E+004,1.86468653758666E+004,0.00000000000000E+000,0.00000000000000E+000,1.85051769369846E+000,1.87928671907235E+000,1.85671696135701E+000,0.00000000000000E+000,0.00000000000000E+000,2.18234521230158E+004,1.84502490396453E+004,1.86581473315180E+004,2.18011582356752E+004,2.16854491047496E+004,2.20483954345605E+004,1.82317545595990E+004,1.96748154825584E+004,2.18143172371161E+004 +5.52000000000001E-008,8.78702040366557E+022,9.28653318350484E+022,1.45424286755812E+023,8.25847782299396E+020,8.38861141293205E+021,3.35374281822747E+023,2.18318299560362E+004,2.16537733544557E+004,2.20894113062003E+004,1.81909100206466E+004,2.09958787430030E+004,2.18643428342995E+004,0.00000000000000E+000,0.00000000000000E+000,2.21027481603628E+004,1.94895615190738E+004,1.86085630846375E+004,0.00000000000000E+000,0.00000000000000E+000,1.85040282660421E+000,1.88564977394492E+000,1.85642944754788E+000,0.00000000000000E+000,0.00000000000000E+000,2.18318649474017E+004,1.74101570119889E+004,1.85169905350105E+004,2.18318299560362E+004,2.16537733544557E+004,2.20178222073735E+004,1.83197716264873E+004,1.96264109206330E+004,2.17993637701598E+004 +5.54000000000001E-008,8.82606048064700E+022,9.28353010066012E+022,1.45219076094756E+023,8.30852920373938E+020,8.40863196523021E+021,3.35554466793431E+023,2.18304438817092E+004,2.16057059604370E+004,2.20565114653153E+004,1.84178532965842E+004,2.08321276337115E+004,2.18326369035943E+004,0.00000000000000E+000,0.00000000000000E+000,2.21320538413233E+004,1.97351226454271E+004,1.82880787808674E+004,0.00000000000000E+000,0.00000000000000E+000,1.85059572393850E+000,1.88704478355969E+000,1.85397779127206E+000,0.00000000000000E+000,0.00000000000000E+000,2.17919615924670E+004,1.70499035207595E+004,1.86119586960197E+004,2.18304438817092E+004,2.16057059604370E+004,2.19996840938913E+004,1.83815309977995E+004,1.94961227286288E+004,2.17744747500692E+004 +5.56000000000001E-008,8.86109644716879E+022,9.28853523873466E+022,1.45063916814445E+023,8.25847782299396E+020,8.36859086063388E+021,3.35754672316413E+023,2.18734229844235E+004,2.15486927640189E+004,2.20201717234311E+004,1.83111832570572E+004,2.10079880378751E+004,2.18166581069115E+004,0.00000000000000E+000,0.00000000000000E+000,2.21283101283390E+004,2.01100971560181E+004,1.81986691593148E+004,0.00000000000000E+000,0.00000000000000E+000,1.85057110958257E+000,1.88911053332567E+000,1.85327882158397E+000,0.00000000000000E+000,0.00000000000000E+000,2.17551695478306E+004,1.72003158807365E+004,1.80222561095362E+004,2.18734229844235E+004,2.15486927640189E+004,2.19720171188054E+004,1.84819763422806E+004,1.93769563334323E+004,2.17556198394682E+004 +5.58000000000001E-008,8.88812419277132E+022,9.29053729396448E+022,1.44923772948358E+023,8.10832368075771E+020,8.37860113678296E+021,3.35899821320574E+023,2.18499424471428E+004,2.15673991568198E+004,2.20103358993599E+004,1.79300404113087E+004,2.09895754515368E+004,2.18100733552431E+004,0.00000000000000E+000,0.00000000000000E+000,2.20600817212772E+004,1.96476362051751E+004,1.86718514221015E+004,0.00000000000000E+000,0.00000000000000E+000,1.85012109385075E+000,1.88655169987922E+000,1.85690389817027E+000,0.00000000000000E+000,0.00000000000000E+000,2.17179425437952E+004,1.76589923293796E+004,1.80385987967101E+004,2.18499424471428E+004,2.15673991568198E+004,2.19384027306001E+004,1.83218529204362E+004,1.95011859033738E+004,2.17428576174567E+004 +5.60000000000001E-008,8.91665347979621E+022,9.29804500107629E+022,1.44803649634569E+023,7.95816953852145E+020,8.33355489411209E+021,3.36080006291258E+023,2.18315260810566E+004,2.15552616604830E+004,2.19976554576781E+004,1.83048040667786E+004,2.08681195302301E+004,2.17944328996284E+004,0.00000000000000E+000,0.00000000000000E+000,2.20356764880448E+004,1.98975327110243E+004,1.85432623163970E+004,0.00000000000000E+000,0.00000000000000E+000,1.84995946524533E+000,1.88794887657044E+000,1.85593660339085E+000,0.00000000000000E+000,0.00000000000000E+000,2.16860361220238E+004,1.75521063100680E+004,1.81202246341836E+004,2.18315260810566E+004,2.15552616604830E+004,2.19169394608742E+004,1.85228072442226E+004,1.94371586038920E+004,2.17246891740611E+004 +5.62000000000001E-008,8.95168944631800E+022,9.29704397346138E+022,1.44623464663885E+023,7.95816953852145E+020,8.34356517026117E+021,3.36250180985792E+023,2.18260733419250E+004,2.15679405318884E+004,2.19758921701868E+004,1.83476535674275E+004,2.05342319853845E+004,2.17788521009595E+004,0.00000000000000E+000,0.00000000000000E+000,2.19433349095922E+004,2.01694166061970E+004,1.85522067335989E+004,0.00000000000000E+000,0.00000000000000E+000,1.84934474891722E+000,1.88943042716732E+000,1.85600430931547E+000,0.00000000000000E+000,0.00000000000000E+000,2.16804280603491E+004,1.77124342392096E+004,1.85718091422203E+004,2.18260733419250E+004,2.15679405318884E+004,2.18808264606241E+004,1.86628691549948E+004,1.94252051015356E+004,2.17111908244860E+004 +5.64000000000001E-008,8.97471308146089E+022,9.29704397346138E+022,1.44493331073947E+023,7.80801539628520E+020,8.37359599870842E+021,3.36365299161507E+023,2.18072858056446E+004,2.15418928770201E+004,2.19807511326541E+004,1.85108085479918E+004,2.06362310197147E+004,2.17716431618612E+004,0.00000000000000E+000,0.00000000000000E+000,2.18577664326297E+004,1.99820157022220E+004,1.84952695742730E+004,0.00000000000000E+000,0.00000000000000E+000,1.84877061071925E+000,1.88841347412772E+000,1.85557222670914E+000,0.00000000000000E+000,0.00000000000000E+000,2.17202479806985E+004,1.78732721591463E+004,1.84413275585390E+004,2.18072858056446E+004,2.15418928770201E+004,2.18714794333344E+004,1.87290263772839E+004,1.94164181080532E+004,2.16948431245494E+004 +5.66000000000001E-008,8.99773671660378E+022,9.29704397346138E+022,1.44363197484009E+023,7.65786125404895E+020,8.40362682715567E+021,3.36480417337221E+023,2.17332647751482E+004,2.15061586750000E+004,2.19459892842104E+004,1.79245706731509E+004,2.06726466202086E+004,2.17266247216709E+004,0.00000000000000E+000,0.00000000000000E+000,2.18565656550151E+004,1.99657148672619E+004,1.87459610056756E+004,0.00000000000000E+000,0.00000000000000E+000,1.84876252275564E+000,1.88832413099772E+000,1.85745550387954E+000,0.00000000000000E+000,0.00000000000000E+000,2.17874798654476E+004,1.82659273042529E+004,1.83055167821271E+004,2.17332647751482E+004,2.15061586750000E+004,2.18755616864907E+004,1.85832294430501E+004,1.94603904895753E+004,2.16676313640531E+004 +5.68000000000001E-008,9.02276240697649E+022,9.29604294584648E+022,1.44238069032145E+023,7.70791263479436E+020,8.40362682715567E+021,3.36600540651010E+023,2.17161565824451E+004,2.14914031628885E+004,2.19233532473916E+004,1.87022150391750E+004,2.05586882107319E+004,2.17070728786375E+004,0.00000000000000E+000,0.00000000000000E+000,2.18506487320572E+004,1.98579481288172E+004,1.89796340049088E+004,0.00000000000000E+000,0.00000000000000E+000,1.84872265607155E+000,1.88772985583754E+000,1.85916726452877E+000,0.00000000000000E+000,0.00000000000000E+000,2.17516740065024E+004,1.79720831735205E+004,1.85027785176100E+004,2.17161565824451E+004,2.14914031628885E+004,2.18535929445631E+004,1.88069590030772E+004,1.95312245255887E+004,2.16517676286958E+004 +5.70000000000001E-008,9.04828861115666E+022,9.29954654249865E+022,1.44102930304133E+023,7.45765573106727E+020,8.41864224137930E+021,3.36745689655172E+023,2.16568741689849E+004,2.14390732295516E+004,2.19237392017918E+004,1.82886865479918E+004,2.04342938821617E+004,2.16729016616559E+004,0.00000000000000E+000,0.00000000000000E+000,2.18501423025519E+004,1.85176211636964E+004,1.88192497723289E+004,0.00000000000000E+000,0.00000000000000E+000,1.84871924290582E+000,1.87977295691605E+000,1.85799683636946E+000,0.00000000000000E+000,0.00000000000000E+000,2.17809000826186E+004,1.86888775865046E+004,1.86227540912006E+004,2.16568741689849E+004,2.14390732295516E+004,2.18621600616297E+004,1.84675772154944E+004,1.94684394808501E+004,2.16228000353487E+004 +5.72000000000001E-008,9.08132252244863E+022,9.29954654249865E+022,1.43917740195375E+023,7.25745020808560E+020,8.45868334597563E+021,3.36910859211632E+023,2.15784687346334E+004,2.13970145552672E+004,2.19470758764877E+004,1.85485081979116E+004,2.03644782789041E+004,2.16488343840064E+004,0.00000000000000E+000,0.00000000000000E+000,2.18142216458626E+004,1.82136324185604E+004,1.87168611492130E+004,0.00000000000000E+000,0.00000000000000E+000,1.84847675643574E+000,1.87780891770153E+000,1.85723941800755E+000,0.00000000000000E+000,0.00000000000000E+000,2.17861205837655E+004,1.85776851525692E+004,1.86718591422460E+004,2.15784687346334E+004,2.13970145552672E+004,2.18642124072913E+004,1.84655633498795E+004,1.94245580924458E+004,2.15896608467796E+004 +5.74000000000001E-008,9.10935129566607E+022,9.29954654249865E+022,1.43772591191213E+023,7.20739882734018E+020,8.46869362212472E+021,3.37051003077719E+023,2.15646366405012E+004,2.14149189335830E+004,2.19199469958056E+004,1.85509386721529E+004,2.03479100448623E+004,2.16378737628236E+004,0.00000000000000E+000,0.00000000000000E+000,2.18322498719215E+004,1.68310318973221E+004,1.88697851261279E+004,0.00000000000000E+000,0.00000000000000E+000,1.84859855504332E+000,1.86800192595454E+000,1.85836771816928E+000,0.00000000000000E+000,0.00000000000000E+000,2.16948758937314E+004,1.80753396281866E+004,1.88424343948733E+004,2.15646366405012E+004,2.14149189335830E+004,2.18305478324992E+004,1.79446506569963E+004,1.95083734132638E+004,2.15773490836412E+004 +5.76000000000001E-008,9.13637904126859E+022,9.30655373580301E+022,1.43652467877424E+023,7.00719330435851E+020,8.43866279367747E+021,3.37221177772253E+023,2.15291728252780E+004,2.14159937808431E+004,2.18754013537012E+004,1.81693359212970E+004,2.01367115685411E+004,2.16036008326493E+004,0.00000000000000E+000,0.00000000000000E+000,2.19108791668087E+004,1.71182663752850E+004,1.88606907586350E+004,0.00000000000000E+000,0.00000000000000E+000,1.84912749439711E+000,1.87016668199489E+000,1.85830111702457E+000,0.00000000000000E+000,0.00000000000000E+000,2.16225454157020E+004,1.78418973930027E+004,1.89147488570215E+004,2.15291728252780E+004,2.14159937808431E+004,2.18111436980071E+004,1.77878965147586E+004,1.94346198643023E+004,2.15578659590858E+004 +5.78000000000001E-008,9.15740062118167E+022,9.30955681864774E+022,1.43557370254008E+023,6.95714192361309E+020,8.41864224137930E+021,3.37341301086042E+023,2.14394820754285E+004,2.14386768048822E+004,2.18931213735265E+004,1.84612884713882E+004,2.01012060501921E+004,2.15927685504575E+004,0.00000000000000E+000,0.00000000000000E+000,2.19098632444361E+004,1.69060877864437E+004,1.85093172604691E+004,0.00000000000000E+000,0.00000000000000E+000,1.84912068383793E+000,1.86857452126903E+000,1.85567907189873E+000,0.00000000000000E+000,0.00000000000000E+000,2.15963773658821E+004,1.83979608391708E+004,1.89996624091942E+004,2.14394820754285E+004,2.14386768048822E+004,2.18109896223908E+004,1.80197611020059E+004,1.93489651795519E+004,2.15381335509050E+004 +5.80000000000001E-008,9.18492888059165E+022,9.30705424961047E+022,1.43402210973697E+023,6.90709054286768E+020,8.45367820790109E+021,3.37466429537906E+023,2.13862946582464E+004,2.14518623725435E+004,2.18640519811912E+004,1.88310744614059E+004,2.01600241109202E+004,2.15714463158972E+004,0.00000000000000E+000,0.00000000000000E+000,2.18749806055429E+004,1.73340952325858E+004,1.86589430576009E+004,0.00000000000000E+000,0.00000000000000E+000,1.84888646363367E+000,1.87174715743274E+000,1.85680738323324E+000,0.00000000000000E+000,0.00000000000000E+000,2.15945714015437E+004,1.85736853327286E+004,1.90667420675570E+004,2.13862946582464E+004,2.14518623725435E+004,2.17883089569172E+004,1.83484104754286E+004,1.94346453462311E+004,2.15201013088953E+004 +5.82000000000002E-008,9.21295765380908E+022,9.30705424961047E+022,1.43257061969535E+023,6.85703916212226E+020,8.46368848405017E+021,3.37606573403993E+023,2.13675608020302E+004,2.14691387170669E+004,2.18329506210164E+004,1.86222267641477E+004,2.03026322352972E+004,2.15607696580996E+004,0.00000000000000E+000,0.00000000000000E+000,2.18950357578385E+004,1.74526763865903E+004,1.85800055771665E+004,0.00000000000000E+000,0.00000000000000E+000,1.84902121308632E+000,1.87259924433423E+000,1.85621433085766E+000,0.00000000000000E+000,0.00000000000000E+000,2.15258083383959E+004,1.88336496510594E+004,1.88703198910134E+004,2.13675608020302E+004,2.14691387170669E+004,2.17600222689644E+004,1.83650819319565E+004,1.94184432812234E+004,2.15071352565136E+004 +5.84000000000002E-008,9.24048591321906E+022,9.30254962534338E+022,1.43096897551150E+023,6.85703916212226E+020,8.50873472672105E+021,3.37721691579708E+023,2.13164060245704E+004,2.14536297222796E+004,2.18652884577962E+004,1.90383988375163E+004,2.04202896653827E+004,2.15595702130298E+004,0.00000000000000E+000,0.00000000000000E+000,2.18752810163649E+004,1.79344420526547E+004,1.86515584270959E+004,0.00000000000000E+000,0.00000000000000E+000,1.84888848385048E+000,1.87594773306197E+000,1.85675211033722E+000,0.00000000000000E+000,0.00000000000000E+000,2.14443447960026E+004,1.89339112216556E+004,1.89934083468867E+004,2.13164060245704E+004,2.14536297222796E+004,2.17450627891980E+004,1.87068168435581E+004,1.95251343502231E+004,2.14854028527606E+004 +5.86000000000002E-008,9.27101725547377E+022,9.31105836007010E+022,1.42966763961212E+023,6.65683363914059E+020,8.46368848405017E+021,3.37916891964615E+023,2.12919628607397E+004,2.14674408715467E+004,2.18240907894950E+004,1.92931184947933E+004,2.03073825937989E+004,2.15368505589940E+004,0.00000000000000E+000,0.00000000000000E+000,2.19005101211612E+004,1.84239164640509E+004,1.87503724316472E+004,0.00000000000000E+000,0.00000000000000E+000,1.84905795331682E+000,1.87917430278706E+000,1.85748820461331E+000,0.00000000000000E+000,0.00000000000000E+000,2.13810425016266E+004,1.83939764227977E+004,1.88215074086306E+004,2.12919628607397E+004,2.14674408715467E+004,2.17153469581814E+004,1.87942699247400E+004,1.94522767290813E+004,2.14684426780405E+004 +5.88000000000002E-008,9.29354037680920E+022,9.31356092910737E+022,1.42866661199721E+023,6.65683363914059E+020,8.43866279367747E+021,3.38042020416478E+023,2.13135152080150E+004,2.14489041595699E+004,2.18240609909395E+004,1.92401889464924E+004,2.03032207811962E+004,2.15372855872319E+004,0.00000000000000E+000,0.00000000000000E+000,2.17848860473902E+004,1.92622800056273E+004,1.84050288966937E+004,0.00000000000000E+000,0.00000000000000E+000,1.84827814614474E+000,1.88432756154403E+000,1.85488207793567E+000,0.00000000000000E+000,0.00000000000000E+000,2.14216884742779E+004,1.90203180864020E+004,1.88838672794028E+004,2.13135152080150E+004,2.14489041595699E+004,2.16959775213953E+004,1.91823597794416E+004,1.93754689922773E+004,2.14598800089734E+004 +5.90000000000002E-008,9.31306041529992E+022,9.30905630484028E+022,1.42746537885932E+023,6.65683363914059E+020,8.48370903634834E+021,3.38117097487596E+023,2.13126268998965E+004,2.14739498007662E+004,2.17901447339808E+004,1.93574581365632E+004,2.04447575089913E+004,2.15330161765974E+004,0.00000000000000E+000,0.00000000000000E+000,2.17203147710846E+004,1.96386598930076E+004,1.86476925494230E+004,0.00000000000000E+000,0.00000000000000E+000,1.84783914206859E+000,1.88650086482590E+000,1.85672315779046E+000,0.00000000000000E+000,0.00000000000000E+000,2.14417690474819E+004,1.87436424368226E+004,1.85467807586346E+004,2.13126268998965E+004,2.14739498007662E+004,2.16695540053444E+004,1.92562247153465E+004,1.94045221862200E+004,2.14558051972649E+004 +5.92000000000002E-008,9.34259072993971E+022,9.30955681864774E+022,1.42586373467547E+023,6.50667949690433E+020,8.50873472672105E+021,3.38267251629833E+023,2.12754846411669E+004,2.14956965035228E+004,2.17479692114136E+004,1.95782183538885E+004,2.03422632486724E+004,2.15085125781404E+004,0.00000000000000E+000,0.00000000000000E+000,2.16704532533633E+004,2.06966513973695E+004,1.87048186933928E+004,0.00000000000000E+000,0.00000000000000E+000,1.84749840504727E+000,1.89219461427802E+000,1.85714980307249E+000,0.00000000000000E+000,0.00000000000000E+000,2.14670245338588E+004,1.87771024201477E+004,1.84685819107987E+004,2.12754846411669E+004,2.14956965035228E+004,2.16449973051400E+004,1.96528043373950E+004,1.93522976355418E+004,2.14403498616633E+004 +5.94000000000002E-008,9.37362258600187E+022,9.30955681864774E+022,1.42426209049161E+023,6.45662811615891E+020,8.51874500287013E+021,3.38422410910143E+023,2.12167826939086E+004,2.14744898278539E+004,2.17441464956646E+004,2.03710054719176E+004,2.03553492331111E+004,2.14863198087831E+004,0.00000000000000E+000,0.00000000000000E+000,2.16841681041755E+004,2.14305682773846E+004,1.86859843110527E+004,0.00000000000000E+000,0.00000000000000E+000,1.84759227971827E+000,1.89582011077402E+000,1.85700941978964E+000,0.00000000000000E+000,0.00000000000000E+000,2.14193914288634E+004,1.86622248222760E+004,1.84384656834611E+004,2.12167826939086E+004,2.14744898278539E+004,2.16331110082102E+004,2.01667047794083E+004,1.93441513390820E+004,2.14137465715432E+004 +5.96000000000002E-008,9.39514467972240E+022,9.31606349814464E+022,1.42341121701894E+023,6.35652535466808E+020,8.47369876019926E+021,3.38562554776231E+023,2.12245500428012E+004,2.14816638643077E+004,2.17339869373942E+004,2.11944444818519E+004,2.02143350016248E+004,2.14841396224189E+004,0.00000000000000E+000,0.00000000000000E+000,2.16200054224877E+004,2.03176931380392E+004,1.84882879624552E+004,0.00000000000000E+000,0.00000000000000E+000,1.84715210589726E+000,1.89022203063003E+000,1.85551906648647E+000,0.00000000000000E+000,0.00000000000000E+000,2.14111367945170E+004,2.03458468640564E+004,1.84871457677993E+004,2.12245500428012E+004,2.14816638643077E+004,2.16089361910686E+004,2.07076024140436E+004,1.92432791860227E+004,2.14063467301288E+004 +5.98000000000002E-008,9.41566574582802E+022,9.32056812241173E+022,1.42271049768851E+023,6.45662811615891E+020,8.40863196523021E+021,3.38687683228094E+023,2.12930354746480E+004,2.14847136195904E+004,2.17036562503459E+004,2.10689713995148E+004,2.00672734651441E+004,2.14874130463610E+004,0.00000000000000E+000,0.00000000000000E+000,2.16027058604784E+004,2.03724092993566E+004,1.83207444169808E+004,0.00000000000000E+000,0.00000000000000E+000,1.84703299089414E+000,1.89051128914135E+000,1.85423150148228E+000,0.00000000000000E+000,0.00000000000000E+000,2.13367647715583E+004,1.97239375763270E+004,1.87038662448541E+004,2.12930354746480E+004,2.14847136195904E+004,2.15692561884026E+004,2.04874577799628E+004,1.91969667621026E+004,2.14082404348050E+004 +6.00000000000002E-008,9.44119195000819E+022,9.32106863621918E+022,1.42150926455062E+023,6.50667949690433E+020,8.39361655100659E+021,3.38817816818032E+023,2.12788674639691E+004,2.15167067883276E+004,2.16387711141153E+004,2.11532925181477E+004,2.01988561755128E+004,2.14682993431849E+004,0.00000000000000E+000,0.00000000000000E+000,2.15933799236206E+004,2.07141520359804E+004,1.83233710986786E+004,0.00000000000000E+000,0.00000000000000E+000,1.84696870077107E+000,1.89228399953102E+000,1.85425186434831E+000,0.00000000000000E+000,0.00000000000000E+000,2.13117746925945E+004,2.00762189308226E+004,1.88142212888032E+004,2.12788674639691E+004,2.15167067883276E+004,2.15310111719539E+004,2.07201812762422E+004,1.92874669243840E+004,2.13996788693922E+004 +6.02000000000002E-008,9.46972123703307E+022,9.32657428810118E+022,1.42035808279347E+023,6.50667949690433E+020,8.33856003218663E+021,3.38987991512567E+023,2.12241553183715E+004,2.14747372332427E+004,2.16180931810302E+004,2.09793994967665E+004,2.03142183612497E+004,2.14353048996505E+004,0.00000000000000E+000,0.00000000000000E+000,2.16438439013255E+004,2.12391577317651E+004,1.84159813552667E+004,0.00000000000000E+000,0.00000000000000E+000,1.84731594079069E+000,1.89489826221930E+000,1.85496619214127E+000,0.00000000000000E+000,0.00000000000000E+000,2.12624401961889E+004,1.99666677459072E+004,1.88054652578722E+004,2.12241553183715E+004,2.14747372332427E+004,2.15211593956852E+004,2.07570252114164E+004,1.93603592911610E+004,2.13707994539208E+004 +6.04000000000002E-008,9.50225463451760E+022,9.33007788475336E+022,1.41880648999036E+023,6.40657673541350E+020,8.32354461796300E+021,3.39168176483250E+023,2.12158107225421E+004,2.14337065236519E+004,2.16005130824753E+004,2.03906530168569E+004,2.01887656925991E+004,2.14099161082099E+004,0.00000000000000E+000,0.00000000000000E+000,2.16006175664465E+004,2.08251710243602E+004,1.82406051852531E+004,0.00000000000000E+000,0.00000000000000E+000,1.84701859953194E+000,1.89284760033374E+000,1.85360749196412E+000,0.00000000000000E+000,0.00000000000000E+000,2.12832184627108E+004,2.09362643980472E+004,1.87416283318654E+004,2.12158107225421E+004,2.14337065236519E+004,2.15078601640600E+004,2.06682885081874E+004,1.92395721998203E+004,2.13483878083173E+004 +6.06000000000002E-008,9.53228546296485E+022,9.33107891236827E+022,1.41735499994875E+023,6.40657673541350E+020,8.31353434181392E+021,3.39323335763561E+023,2.11782203850667E+004,2.14065877750105E+004,2.15792883558713E+004,2.02173539184163E+004,2.03137859230829E+004,2.13855524818125E+004,0.00000000000000E+000,0.00000000000000E+000,2.16106418779659E+004,2.03274902524097E+004,1.83782883119814E+004,0.00000000000000E+000,0.00000000000000E+000,1.84708765684740E+000,1.89027393558559E+000,1.85467630168205E+000,0.00000000000000E+000,0.00000000000000E+000,2.12616339323135E+004,2.05677183812423E+004,1.84847498596560E+004,2.11782203850667E+004,2.14065877750105E+004,2.14949610955246E+004,2.03492669273413E+004,1.92564356764568E+004,2.13246725754329E+004 +6.08000000000002E-008,9.55781166714501E+022,9.33958764709499E+022,1.41645407509533E+023,6.35652535466808E+020,8.23845727069579E+021,3.39493510458095E+023,2.12131297933038E+004,2.13450965491507E+004,2.15956270553147E+004,1.98124259610471E+004,2.02967400074134E+004,2.13841614347070E+004,0.00000000000000E+000,0.00000000000000E+000,2.15461047659668E+004,1.94039969309499E+004,1.85688910718311E+004,0.00000000000000E+000,0.00000000000000E+000,1.84664196798426E+000,1.88515556285005E+000,1.85613043376060E+000,0.00000000000000E+000,0.00000000000000E+000,2.12167300144213E+004,2.09712033594054E+004,1.85085648457799E+004,2.12131297933038E+004,2.13450965491507E+004,2.14715890197903E+004,2.00371997551135E+004,1.93073388600636E+004,2.13088207335021E+004 +6.10000000000002E-008,9.59334814747426E+022,9.33908713328753E+022,1.41470227676924E+023,6.40657673541350E+020,8.23345213262125E+021,3.39668690290704E+023,2.11657694192866E+004,2.13672308164266E+004,2.15423419456447E+004,1.99467309465618E+004,2.03810514922118E+004,2.13566805467209E+004,0.00000000000000E+000,0.00000000000000E+000,2.15360229237052E+004,1.90653955809939E+004,1.86060731288320E+004,0.00000000000000E+000,0.00000000000000E+000,1.84657210890464E+000,1.88315722836570E+000,1.85641071692376E+000,0.00000000000000E+000,0.00000000000000E+000,2.11911844507593E+004,2.18697007838179E+004,1.85419730909275E+004,2.11657694192866E+004,2.13672308164266E+004,2.14380585892318E+004,2.02643535923469E+004,1.93640112438144E+004,2.12891934463589E+004 +6.12000000000002E-008,9.61687229642460E+022,9.33658456425026E+022,1.41335088948911E+023,6.35652535466808E+020,8.26848809914304E+021,3.39773798190270E+023,2.11718085727467E+004,2.13090991686696E+004,2.15359942252553E+004,1.96543170456541E+004,2.03533963063296E+004,2.13382688326542E+004,0.00000000000000E+000,0.00000000000000E+000,2.14936617791210E+004,1.90456585676257E+004,1.87387073999746E+004,0.00000000000000E+000,0.00000000000000E+000,1.84627788380282E+000,1.88303859952538E+000,1.85740170220274E+000,0.00000000000000E+000,0.00000000000000E+000,2.11913921376388E+004,2.11040965133025E+004,1.89068735963916E+004,2.11718085727467E+004,2.13090991686696E+004,2.14239097251339E+004,1.99090637686148E+004,1.94941537536912E+004,2.12712119279246E+004 +6.14000000000002E-008,9.64039644537495E+022,9.34108918851735E+022,1.41239991325495E+023,6.35652535466808E+020,8.22344185647217E+021,3.39913942056357E+023,2.11269603515486E+004,2.13556069896967E+004,2.15058374421026E+004,1.94995301105506E+004,2.05344860028074E+004,2.13298470717717E+004,0.00000000000000E+000,0.00000000000000E+000,2.14336649483552E+004,1.92427465907539E+004,1.87674083182033E+004,0.00000000000000E+000,0.00000000000000E+000,1.84585923286525E+000,1.88421249799490E+000,1.85761434650049E+000,0.00000000000000E+000,0.00000000000000E+000,2.11940286874327E+004,2.11963755283627E+004,1.87985563403710E+004,2.11269603515486E+004,2.13556069896967E+004,2.13952833469134E+004,1.99222155112688E+004,1.95495358668142E+004,2.12608717939944E+004 +6.16000000000002E-008,9.66742419097748E+022,9.33908713328753E+022,1.41084832045184E+023,6.25642259317724E+020,8.26348296106850E+021,3.40039070508220E+023,2.11281714466144E+004,2.13261066784095E+004,2.14852739290062E+004,1.96361033837548E+004,2.05312075272769E+004,2.13134459958363E+004,0.00000000000000E+000,0.00000000000000E+000,2.14758523407460E+004,1.86957615543436E+004,1.87741941612738E+004,0.00000000000000E+000,0.00000000000000E+000,1.84615384895662E+000,1.88089484869528E+000,1.85766453001356E+000,0.00000000000000E+000,0.00000000000000E+000,2.11327098593208E+004,2.08806622273627E+004,1.85467131202856E+004,2.11281714466144E+004,2.13261066784095E+004,2.13797370309549E+004,1.97408039496122E+004,1.94764854435252E+004,2.12442191614902E+004 +6.18000000000002E-008,9.68594320185328E+022,9.34058867470990E+022,1.40989734421768E+023,6.15631983168641E+020,8.26848809914304E+021,3.40139173269711E+023,2.11584858147627E+004,2.12745567327954E+004,2.14537256445225E+004,2.02197451451429E+004,2.07366370571632E+004,2.13007849846457E+004,0.00000000000000E+000,0.00000000000000E+000,2.14587109581713E+004,1.86674922535893E+004,1.86822391267708E+004,0.00000000000000E+000,0.00000000000000E+000,1.84603427777534E+000,1.88071821356596E+000,1.85698147194359E+000,0.00000000000000E+000,0.00000000000000E+000,2.11402406909312E+004,2.04791754444306E+004,1.84109580484753E+004,2.11584858147627E+004,2.12745567327954E+004,2.13634884616169E+004,1.98708731797284E+004,1.95019338652769E+004,2.12327351284109E+004 +6.20000000000002E-008,9.70996786461108E+022,9.34959792324407E+022,1.40914657350650E+023,6.15631983168641E+020,8.17839561380129E+021,3.40304342826171E+023,2.11434557075238E+004,2.13096807875111E+004,2.14471364703372E+004,1.99905143616476E+004,2.06309080767216E+004,2.13004705782587E+004,0.00000000000000E+000,0.00000000000000E+000,2.14592611359861E+004,1.88524988696750E+004,1.86184376583896E+004,0.00000000000000E+000,0.00000000000000E+000,1.84603811847264E+000,1.88186478109828E+000,1.85650368069635E+000,0.00000000000000E+000,0.00000000000000E+000,2.10633504575019E+004,1.97760520814291E+004,1.81209129868088E+004,2.11434557075238E+004,2.13096807875111E+004,2.13382867359634E+004,1.96169941143180E+004,1.93538506540875E+004,2.12240308988811E+004 +6.22000000000002E-008,9.74200074828815E+022,9.35059895085898E+022,1.40754492932264E+023,6.10626845094099E+020,8.17839561380129E+021,3.40469512382631E+023,2.11374561985491E+004,2.13163170134961E+004,2.13839133645975E+004,1.95795488757105E+004,2.06774636805510E+004,2.12746232822351E+004,0.00000000000000E+000,0.00000000000000E+000,2.14354153751853E+004,1.90167264644559E+004,1.83396899866702E+004,0.00000000000000E+000,0.00000000000000E+000,1.84587147940876E+000,1.88286426799182E+000,1.85437824624851E+000,0.00000000000000E+000,0.00000000000000E+000,2.10768043075588E+004,1.91242255174140E+004,1.81763888108379E+004,2.11374561985491E+004,2.13163170134961E+004,2.13080790426762E+004,1.92932778049395E+004,1.93152297788662E+004,2.12100368411694E+004 +6.24000000000002E-008,9.76452386962359E+022,9.35710563035588E+022,1.40664400446923E+023,6.00616568945015E+020,8.13334937113042E+021,3.40614661386793E+023,2.11023761277921E+004,2.12719666646939E+004,2.14851245286547E+004,1.98139528709678E+004,2.06597118529095E+004,2.12941871560747E+004,0.00000000000000E+000,0.00000000000000E+000,2.12717020835169E+004,1.92775351216349E+004,1.83766323053722E+004,0.00000000000000E+000,0.00000000000000E+000,1.84471761223414E+000,1.88441726448890E+000,1.85466353907123E+000,0.00000000000000E+000,0.00000000000000E+000,2.10656989070130E+004,1.93526935072748E+004,1.82901903079738E+004,2.11023761277921E+004,2.12719666646939E+004,2.13050505714074E+004,1.95331224795300E+004,1.93506195200269E+004,2.11880673203234E+004 +6.26000000000002E-008,9.79305315664848E+022,9.35860717177825E+022,1.40504236028537E+023,5.75590878572306E+020,8.16838533765221E+021,3.40764815529029E+023,2.10665354368549E+004,2.12178226031128E+004,2.15086109174601E+004,1.92877120892856E+004,2.06800461078483E+004,2.12780918467712E+004,0.00000000000000E+000,0.00000000000000E+000,2.12311246914437E+004,1.89996966385998E+004,1.85925814592014E+004,0.00000000000000E+000,0.00000000000000E+000,1.84442894414693E+000,1.88276141101641E+000,1.85630914121869E+000,0.00000000000000E+000,0.00000000000000E+000,2.10367570502774E+004,1.94160604066211E+004,1.84097761667970E+004,2.10665354368549E+004,2.12178226031128E+004,2.12959545551675E+004,1.92462218029596E+004,1.94526336009115E+004,2.11609172511082E+004 +6.28000000000002E-008,9.82708809555536E+022,9.35760614416334E+022,1.40334061334003E+023,5.80596016646848E+020,8.16838533765221E+021,3.40929985085489E+023,2.10549700381929E+004,2.12350484668262E+004,2.14712699978460E+004,1.82996097983471E+004,2.07468512309401E+004,2.12636800753240E+004,0.00000000000000E+000,0.00000000000000E+000,2.11577702120986E+004,1.95318829497246E+004,1.85875377875435E+004,0.00000000000000E+000,0.00000000000000E+000,1.84390436850394E+000,1.88589264934531E+000,1.85627113167427E+000,0.00000000000000E+000,0.00000000000000E+000,2.10250531233372E+004,2.06659698286984E+004,1.85230297811169E+004,2.10549700381929E+004,2.12350484668262E+004,2.12564076481835E+004,1.93244086585997E+004,1.95135403034018E+004,2.11474342986227E+004 +6.30000000000002E-008,9.84410556500880E+022,9.35860717177825E+022,1.40248973986736E+023,5.75590878572306E+020,8.16838533765221E+021,3.41020077570831E+023,2.10736215730751E+004,2.12120604996984E+004,2.14783453918129E+004,1.80979906282547E+004,2.08833722051673E+004,2.12684818872761E+004,0.00000000000000E+000,0.00000000000000E+000,2.10661104787917E+004,1.91382048416916E+004,1.85909002358652E+004,0.00000000000000E+000,0.00000000000000E+000,1.84324389830316E+000,1.88359277403574E+000,1.85629647360719E+000,0.00000000000000E+000,0.00000000000000E+000,2.10366172246983E+004,2.08077517717833E+004,1.85012829531471E+004,2.10736215730751E+004,2.12120604996984E+004,2.12382098878408E+004,1.91699399002640E+004,1.95678389327629E+004,2.11400216017933E+004 +6.32000000000002E-008,9.86312508969206E+022,9.36261128223788E+022,1.40183907191767E+023,5.85601154721390E+020,8.10832368075771E+021,3.41135195746545E+023,2.10749256463618E+004,2.12144001723051E+004,2.14990904221260E+004,1.84551754745423E+004,2.06670289584163E+004,2.12733163342929E+004,0.00000000000000E+000,0.00000000000000E+000,2.10177110939519E+004,1.94715282101478E+004,1.81718720295445E+004,0.00000000000000E+000,0.00000000000000E+000,1.84289288996937E+000,1.88554596959305E+000,1.85306802771781E+000,0.00000000000000E+000,0.00000000000000E+000,2.10197181089183E+004,2.06480092499095E+004,1.84176054384519E+004,2.10749256463618E+004,2.12144001723051E+004,2.12293397191168E+004,1.93704329403802E+004,1.93358671295736E+004,2.11323979439720E+004 +6.34000000000002E-008,9.88664923864241E+022,9.36311179604533E+022,1.40053773601828E+023,5.70585740497765E+020,8.13334937113042E+021,3.41255319060334E+023,2.10858732446840E+004,2.12388252108829E+004,2.14277009293401E+004,1.82527410636068E+004,2.05147256372957E+004,2.12497781855485E+004,0.00000000000000E+000,0.00000000000000E+000,2.09462978842429E+004,1.90170536871534E+004,1.86518563881430E+004,0.00000000000000E+000,0.00000000000000E+000,1.84237209962576E+000,1.88286624258947E+000,1.85675434135835E+000,0.00000000000000E+000,0.00000000000000E+000,2.10645496256810E+004,2.11201406059636E+004,1.83529800897614E+004,2.10858732446840E+004,2.12388252108829E+004,2.11919309181815E+004,1.92950245062203E+004,1.93797306712555E+004,2.11277080639662E+004 +6.36000000000002E-008,9.91517852566729E+022,9.36361230985279E+022,1.39913629735741E+023,5.70585740497765E+020,8.12834423305587E+021,3.41400468064496E+023,2.10205311207257E+004,2.12426106487067E+004,2.13795630330625E+004,1.84970796616873E+004,2.06676113518529E+004,2.12159603351510E+004,0.00000000000000E+000,0.00000000000000E+000,2.09339155595255E+004,1.91567765633734E+004,1.83854555293345E+004,0.00000000000000E+000,0.00000000000000E+000,1.84228144871026E+000,1.88370335119531E+000,1.85473151260434E+000,0.00000000000000E+000,0.00000000000000E+000,2.10954249309147E+004,2.21839603541894E+004,1.85239571428639E+004,2.10205311207257E+004,2.12426106487067E+004,2.11765190209342E+004,1.97487946485028E+004,1.94246604466264E+004,2.11052471101602E+004 +6.38000000000002E-008,9.92919291227601E+022,9.36861744792733E+022,1.39858573216921E+023,5.60575464348681E+020,8.09831340460862E+021,3.41495565687912E+023,2.10292407359464E+004,2.12458687293101E+004,2.13338620182305E+004,1.87592012012025E+004,2.06315677117055E+004,2.12002705896675E+004,0.00000000000000E+000,0.00000000000000E+000,2.09552754936230E+004,1.87885729802157E+004,1.84861063536966E+004,0.00000000000000E+000,0.00000000000000E+000,1.84243775955530E+000,1.88147110374379E+000,1.85550244699986E+000,0.00000000000000E+000,0.00000000000000E+000,2.10618669674069E+004,2.21147953282051E+004,1.86349459196015E+004,2.10292407359464E+004,2.12458687293101E+004,2.11524190510498E+004,1.97424866507051E+004,1.94683922266720E+004,2.10999913712065E+004 +6.40000000000002E-008,9.94921346457418E+022,9.37362258600187E+022,1.39768480731580E+023,5.45560050125056E+020,8.07829285231046E+021,3.41620694139776E+023,2.09861525508669E+004,2.12304570721217E+004,2.13327395016731E+004,1.82857692038498E+004,2.04569004593320E+004,2.11781591880568E+004,0.00000000000000E+000,0.00000000000000E+000,2.09528887811906E+004,1.83779222958237E+004,1.83671863210114E+004,0.00000000000000E+000,0.00000000000000E+000,1.84242030908809E+000,1.87887827270493E+000,1.85459069733883E+000,0.00000000000000E+000,0.00000000000000E+000,2.10838177755168E+004,2.28599594556691E+004,1.83673804164078E+004,2.09861525508669E+004,2.12304570721217E+004,2.11577008340601E+004,1.96408629526225E+004,1.92818332901133E+004,2.10809222790757E+004 +6.42000000000002E-008,9.97023504448725E+022,9.37462361361678E+022,1.39658367693940E+023,5.35549773975972E+020,8.08830312845954E+021,3.41730807177416E+023,2.09889472101878E+004,2.12371714978944E+004,2.13356497112465E+004,1.91738634490275E+004,2.03318143286088E+004,2.11803342290042E+004,0.00000000000000E+000,0.00000000000000E+000,2.09108584721698E+004,1.84245561053010E+004,1.82849415746560E+004,0.00000000000000E+000,0.00000000000000E+000,1.84211237000585E+000,1.87917840948263E+000,1.85395337849520E+000,0.00000000000000E+000,0.00000000000000E+000,2.10219560684287E+004,2.32264632132501E+004,1.86882032752213E+004,2.09889472101878E+004,2.12371714978944E+004,2.11295875471713E+004,2.01473979247166E+004,1.92985378568814E+004,2.10731902962372E+004 +6.44000000000002E-008,9.99175713820778E+022,9.38113029311368E+022,1.39568275208598E+023,5.20534359752347E+020,8.05326716193775E+021,3.41870951043503E+023,2.09855559093307E+004,2.12080973297652E+004,2.12998386530657E+004,1.85825578724804E+004,2.03912578103562E+004,2.11572695822513E+004,0.00000000000000E+000,0.00000000000000E+000,2.09003905120915E+004,1.74146575092709E+004,1.82530873288406E+004,0.00000000000000E+000,0.00000000000000E+000,1.84203548834643E+000,1.87232728775632E+000,1.85370503581044E+000,0.00000000000000E+000,0.00000000000000E+000,2.10495319864155E+004,2.26112603991483E+004,1.84325230826174E+004,2.09855559093307E+004,2.12080973297652E+004,2.11191305893857E+004,1.94368119101741E+004,1.92413678160675E+004,2.10577091621206E+004 +6.46000000000002E-008,1.00177838561954E+023,9.38113029311368E+022,1.39443146756734E+023,5.25539497826888E+020,8.04325688578866E+021,3.42001084633441E+023,2.10127523673042E+004,2.11785044352276E+004,2.12653075661263E+004,2.00197798845848E+004,2.03230774094358E+004,2.11434461925683E+004,0.00000000000000E+000,0.00000000000000E+000,2.08733919714063E+004,1.66955388120149E+004,1.81853920035178E+004,0.00000000000000E+000,0.00000000000000E+000,1.84183685251815E+000,1.86695553359424E+000,1.85317445528969E+000,0.00000000000000E+000,0.00000000000000E+000,2.10466066630178E+004,2.22409408462625E+004,1.82961025427773E+004,2.10127523673042E+004,2.11785044352276E+004,2.10958726005407E+004,1.97629137474078E+004,1.91534801996606E+004,2.10464613864549E+004 +6.48000000000002E-008,1.00433100603756E+023,9.38463388976586E+022,1.39323023442945E+023,5.15529221677805E+020,8.02824147156504E+021,3.42146233637603E+023,2.09478804594974E+004,2.11671225141367E+004,2.12398793792138E+004,2.02585663534002E+004,2.03355256393609E+004,2.11115114951955E+004,0.00000000000000E+000,0.00000000000000E+000,2.08854817914530E+004,1.67776243434702E+004,1.81416957503829E+004,0.00000000000000E+000,0.00000000000000E+000,1.84192586239272E+000,1.86759143793862E+000,1.85282992673221E+000,0.00000000000000E+000,0.00000000000000E+000,2.10538403178320E+004,2.24121273377742E+004,1.82839326189774E+004,2.09478804594974E+004,2.11671225141367E+004,2.10900893601692E+004,1.99391158524810E+004,1.91436122545908E+004,2.10220677139685E+004 +6.50000000000002E-008,1.00723398612079E+023,9.38463388976586E+022,1.39177874438784E+023,5.15529221677805E+020,8.02824147156504E+021,3.42291382641764E+023,2.09988542633793E+004,2.10999068427085E+004,2.12374423796875E+004,2.03752491712897E+004,2.02310770355387E+004,2.11046244221010E+004,0.00000000000000E+000,0.00000000000000E+000,2.08602129055606E+004,1.69765188429807E+004,1.82049922207024E+004,0.00000000000000E+000,0.00000000000000E+000,1.84173970902399E+000,1.86910733677594E+000,1.85332847248195E+000,0.00000000000000E+000,0.00000000000000E+000,2.09939694979438E+004,2.13662771024710E+004,1.83384749189592E+004,2.09988542633793E+004,2.10999068427085E+004,2.10647225283546E+004,1.97389895067182E+004,1.91308518036044E+004,2.10076320122705E+004 +6.52000000000002E-008,1.00978660653881E+023,9.38813748641804E+022,1.39062756263069E+023,5.10524083603263E+020,8.00321578119233E+021,3.42436531645926E+023,2.09838837877595E+004,2.10890213874714E+004,2.11822605090818E+004,2.05365343949683E+004,2.03451510426615E+004,2.10776733647000E+004,0.00000000000000E+000,0.00000000000000E+000,2.09007523655849E+004,1.71322929958143E+004,1.81136938857800E+004,0.00000000000000E+000,0.00000000000000E+000,1.84203814721834E+000,1.87027057833065E+000,1.85260829175896E+000,0.00000000000000E+000,0.00000000000000E+000,2.09686644540767E+004,2.03935926941940E+004,1.82132558558892E+004,2.09838837877595E+004,2.10890213874714E+004,2.10440354906392E+004,1.95681975796899E+004,1.91196605363404E+004,2.09914554132088E+004 +6.54000000000002E-008,1.01168855900713E+023,9.39013954164786E+022,1.38972663777727E+023,5.05518945528721E+020,7.99320550504325E+021,3.42541639545491E+023,2.09803846479092E+004,2.11130688458059E+004,2.11594209493073E+004,1.99632258729502E+004,2.03845340729054E+004,2.10739891333823E+004,0.00000000000000E+000,0.00000000000000E+000,2.08509168645640E+004,1.78319732125912E+004,1.79216817414408E+004,0.00000000000000E+000,0.00000000000000E+000,1.84167111573609E+000,1.87525034177230E+000,1.85107035597930E+000,0.00000000000000E+000,0.00000000000000E+000,2.09649030922995E+004,1.96431371749109E+004,1.82975263787855E+004,2.09803846479092E+004,2.11130688458059E+004,2.10195137892317E+004,1.92888053871029E+004,1.91098532016826E+004,2.09864873941866E+004 +6.56000000000002E-008,1.01419112804440E+023,9.39314262449259E+022,1.38872561016237E+023,5.15529221677805E+020,7.94315412429783E+021,3.42681783411579E+023,2.09773238468752E+004,2.11380152652609E+004,2.11145418309054E+004,2.02451624559423E+004,2.02701541116683E+004,2.10594851392058E+004,0.00000000000000E+000,0.00000000000000E+000,2.09149176964386E+004,1.96278636995950E+004,1.76235063540416E+004,0.00000000000000E+000,0.00000000000000E+000,1.84214216275530E+000,1.88643966298219E+000,1.84861747774064E+000,0.00000000000000E+000,0.00000000000000E+000,2.08649724077900E+004,1.98875477728380E+004,1.83395841595940E+004,2.09773238468752E+004,2.11380152652609E+004,2.09878454161839E+004,1.99722019253802E+004,1.89919721669515E+004,2.09781030166373E+004 +6.58000000000002E-008,1.01649349155869E+023,9.39114056926277E+022,1.38752437702448E+023,5.20534359752347E+020,7.95316440044691E+021,3.42786891311144E+023,2.09585675050423E+004,2.10888917877228E+004,2.11396632235641E+004,2.01803942256690E+004,2.01476278339325E+004,2.10475785124794E+004,0.00000000000000E+000,0.00000000000000E+000,2.09389923446638E+004,1.92746178981644E+004,1.74613392605452E+004,0.00000000000000E+000,0.00000000000000E+000,1.84231862841813E+000,1.88440012142349E+000,1.84724924061212E+000,0.00000000000000E+000,0.00000000000000E+000,2.08256628108045E+004,2.03819897927133E+004,1.80706031921346E+004,2.09585675050423E+004,2.10888917877228E+004,2.09938500017485E+004,1.99910307568917E+004,1.88162473787301E+004,2.09573790369696E+004 +6.60000000000002E-008,1.01869575231149E+023,9.38913851403295E+022,1.38632314388659E+023,5.20534359752347E+020,7.97318495274508E+021,3.42886994072635E+023,2.09144980950698E+004,2.10721174767714E+004,2.11346530949006E+004,2.01072458147421E+004,2.00888091631395E+004,2.10262437336313E+004,0.00000000000000E+000,0.00000000000000E+000,2.09335189100856E+004,1.95371639693607E+004,1.77549728329132E+004,0.00000000000000E+000,0.00000000000000E+000,1.84227854312020E+000,1.88592288385192E+000,1.84970883952700E+000,0.00000000000000E+000,0.00000000000000E+000,2.08136612965441E+004,2.11908006739844E+004,1.79945688333911E+004,2.09144980950698E+004,2.10721174767714E+004,2.09866718656500E+004,2.02658272190114E+004,1.88470923911149E+004,2.09377805628667E+004 +6.62000000000002E-008,1.02064775616056E+023,9.38763697261059E+022,1.38527206489093E+023,5.20534359752347E+020,7.98820036696870E+021,3.42977086557976E+023,2.08634775998596E+004,2.10861314933048E+004,2.11002214015780E+004,2.01843165506993E+004,1.99394060093926E+004,2.09974871382488E+004,0.00000000000000E+000,0.00000000000000E+000,2.09608375354152E+004,1.83118753520605E+004,1.80283791196595E+004,0.00000000000000E+000,0.00000000000000E+000,1.84247841148572E+000,1.87845063298136E+000,1.85192889326741E+000,0.00000000000000E+000,0.00000000000000E+000,2.08088986803397E+004,2.10717434579148E+004,1.80352414296890E+004,2.08634775998596E+004,2.10861314933048E+004,2.09775381929059E+004,1.99309986694867E+004,1.88670926233716E+004,2.09225763700598E+004 +6.64000000000002E-008,1.02315032519783E+023,9.39064005545532E+022,1.38417093451453E+023,5.20534359752347E+020,7.95816953852145E+021,3.43117230424064E+023,2.08646975010109E+004,2.10589737070010E+004,2.10925703384660E+004,1.99161026070235E+004,1.98151544701315E+004,2.09840125741446E+004,0.00000000000000E+000,0.00000000000000E+000,2.09106895621765E+004,1.90558231894001E+004,1.79240884496034E+004,0.00000000000000E+000,0.00000000000000E+000,1.84211113004440E+000,1.88309972379341E+000,1.85108983114672E+000,0.00000000000000E+000,0.00000000000000E+000,2.08168707190756E+004,2.09614520486831E+004,1.80298610002940E+004,2.08646975010109E+004,2.10589737070010E+004,2.09630132727773E+004,1.99844885041477E+004,1.87830383842856E+004,2.09079130147553E+004 +6.66000000000002E-008,1.02430150695498E+023,9.39314262449259E+022,1.38367042070708E+023,5.15529221677805E+020,7.94315412429783E+021,3.43187302357107E+023,2.09079295009701E+004,2.10383129927596E+004,2.10659092416203E+004,1.90374957758605E+004,1.97470907967503E+004,2.09776328746543E+004,0.00000000000000E+000,0.00000000000000E+000,2.08764615440599E+004,1.94290452506496E+004,1.78569486891316E+004,0.00000000000000E+000,0.00000000000000E+000,1.84185946137063E+000,1.88530068052546E+000,1.85054461725396E+000,0.00000000000000E+000,0.00000000000000E+000,2.08276265400620E+004,2.05592518565502E+004,1.80880719856140E+004,2.09079295009701E+004,2.10383129927596E+004,2.09452546970533E+004,1.95867384056494E+004,1.87521582320890E+004,2.09067842029346E+004 +6.68000000000002E-008,1.02695423013449E+023,9.39564519352986E+022,1.38241913618844E+023,5.10524083603263E+020,7.92813871007420E+021,3.43332451361269E+023,2.09050351122237E+004,2.09918970212555E+004,2.10934234836098E+004,1.90148399488310E+004,1.96503699751283E+004,2.09728768098475E+004,0.00000000000000E+000,0.00000000000000E+000,2.08543779818138E+004,1.93411131799803E+004,1.80494149728975E+004,0.00000000000000E+000,0.00000000000000E+000,1.84169666144293E+000,1.88478962263132E+000,1.85209699161517E+000,0.00000000000000E+000,0.00000000000000E+000,2.07659599743049E+004,1.93067837129327E+004,1.79716336623188E+004,2.09050351122237E+004,2.09918970212555E+004,2.09333496926491E+004,1.91889692968760E+004,1.87276456504874E+004,2.08873751443996E+004 +6.70000000000002E-008,1.02880613122207E+023,9.39814776256713E+022,1.38156826271577E+023,5.05518945528721E+020,7.91312329585058E+021,3.43437559260834E+023,2.08809717307528E+004,2.09744505704246E+004,2.10695495867555E+004,1.91822305346511E+004,1.95533399382702E+004,2.09493222562354E+004,0.00000000000000E+000,0.00000000000000E+000,2.08594549820135E+004,1.89360251607234E+004,1.80690428724011E+004,0.00000000000000E+000,0.00000000000000E+000,1.84173411870906E+000,1.88237524232004E+000,1.85225349533909E+000,0.00000000000000E+000,0.00000000000000E+000,2.07679760236788E+004,1.99963951461110E+004,1.80662271830509E+004,2.08809717307528E+004,2.09744505704246E+004,2.09248369290163E+004,1.93514858108455E+004,1.87180643690418E+004,2.08721113699590E+004 +6.72000000000002E-008,1.03135875164008E+023,9.40065033160440E+022,1.38031697819714E+023,4.95508669379638E+020,7.90811815777603E+021,3.43577703126921E+023,2.09145616169336E+004,2.09755388221016E+004,2.10644738793441E+004,1.88442316973483E+004,1.94937073017555E+004,2.09557829988289E+004,0.00000000000000E+000,0.00000000000000E+000,2.07947781168670E+004,1.83081178504944E+004,1.78486629523631E+004,0.00000000000000E+000,0.00000000000000E+000,1.84125561510706E+000,1.87842621320683E+000,1.85047705556287E+000,0.00000000000000E+000,0.00000000000000E+000,2.07283966574126E+004,1.99320721208947E+004,1.79707527995683E+004,2.09145616169336E+004,2.09755388221016E+004,2.08936378009035E+004,1.90141296518623E+004,1.86047143485767E+004,2.08669330266567E+004 +6.74000000000002E-008,1.03296039582394E+023,9.39964930398949E+022,1.37951615610521E+023,5.00513807454179E+020,7.90811815777603E+021,3.43652780198040E+023,2.08545172260893E+004,2.09982471221136E+004,2.10369833356288E+004,1.87110710484063E+004,1.94855161589047E+004,2.09324521526047E+004,0.00000000000000E+000,0.00000000000000E+000,2.07403965582517E+004,1.71345245005188E+004,1.79163984918958E+004,0.00000000000000E+000,0.00000000000000E+000,1.84085103687213E+000,1.87028709194876E+000,1.85102758587907E+000,0.00000000000000E+000,0.00000000000000E+000,2.08004734206066E+004,1.99539986723237E+004,1.81735968492425E+004,2.08545172260893E+004,2.09982471221136E+004,2.08880264439776E+004,1.86437173258701E+004,1.86785833831788E+004,2.08539895979063E+004 +6.76000000000002E-008,1.03501250243450E+023,9.40115084541185E+022,1.37866528263254E+023,5.10524083603263E+020,7.87308219125424E+021,3.43762893235680E+023,2.07846893975498E+004,2.09689289079788E+004,2.11004188617309E+004,1.83972176799467E+004,1.94528963205548E+004,2.09276512534939E+004,0.00000000000000E+000,0.00000000000000E+000,2.07113372710925E+004,1.71546080045609E+004,1.78926397695464E+004,0.00000000000000E+000,0.00000000000000E+000,1.84063400087098E+000,1.87043552535641E+000,1.85083494533557E+000,0.00000000000000E+000,0.00000000000000E+000,2.07737792544691E+004,1.99511741506293E+004,1.81215606737236E+004,2.07846893975498E+004,2.09689289079788E+004,2.09002274731562E+004,1.85112849261176E+004,1.86427106006760E+004,2.08289782521755E+004 +6.78000000000002E-008,1.03761517423326E+023,9.40014981779694E+022,1.37736394673316E+023,5.15529221677805E+020,7.87308219125424E+021,3.43888021687543E+023,2.07607419264245E+004,2.09804229880884E+004,2.10755094033931E+004,1.90102477182645E+004,1.93829178112254E+004,2.09126958464204E+004,0.00000000000000E+000,0.00000000000000E+000,2.07203648417546E+004,1.77941256577089E+004,1.78420480091454E+004,0.00000000000000E+000,0.00000000000000E+000,1.84070148867546E+000,1.87499076948291E+000,1.85042307364633E+000,0.00000000000000E+000,0.00000000000000E+000,2.07249568980777E+004,2.12899123223681E+004,1.80337130218678E+004,2.07607419264245E+004,2.09804229880884E+004,2.08774565960638E+004,1.93417553008227E+004,1.85727969538263E+004,2.08153201782559E+004 +6.80000000000002E-008,1.03971733222457E+023,9.40415392825658E+022,1.37626281635676E+023,4.90503531305096E+020,7.88309246740333E+021,3.44013150139407E+023,2.07276951225769E+004,2.09929453417699E+004,2.10748921177668E+004,1.98670222359968E+004,1.95122683511581E+004,2.09100267735879E+004,0.00000000000000E+000,0.00000000000000E+000,2.07124043708467E+004,1.76942417939691E+004,1.76485490868308E+004,0.00000000000000E+000,0.00000000000000E+000,1.84064198121291E+000,1.87430051633610E+000,1.84882658813003E+000,0.00000000000000E+000,0.00000000000000E+000,2.06638053333420E+004,2.12775548867559E+004,1.80874083098957E+004,2.07276951225769E+004,2.09929453417699E+004,2.08571663929596E+004,1.96849850672863E+004,1.85930723793789E+004,2.08016001665765E+004 +6.82000000000002E-008,1.04131897640842E+023,9.41016009394603E+022,1.37566219978781E+023,4.80493255156012E+020,7.84305136280699E+021,3.44123263177047E+023,2.07165427041914E+004,2.09312406384486E+004,2.10595404019533E+004,2.05846318552770E+004,1.94391499392453E+004,2.08830710469902E+004,0.00000000000000E+000,0.00000000000000E+000,2.07042885761243E+004,1.78268092948342E+004,1.78213203993257E+004,0.00000000000000E+000,0.00000000000000E+000,1.84058126689744E+000,1.87521498924022E+000,1.85025367134839E+000,0.00000000000000E+000,0.00000000000000E+000,2.06821066457886E+004,2.14076420354233E+004,1.82467205499622E+004,2.07165427041914E+004,2.09312406384486E+004,2.08536021471447E+004,2.00718493680047E+004,1.86540324702510E+004,2.07821355504939E+004 +6.84000000000002E-008,1.04362133992271E+023,9.41316317679075E+022,1.37461112079216E+023,4.75488117081470E+020,7.82303081050882E+021,3.44253396766985E+023,2.07133647841857E+004,2.09427446533357E+004,2.10260294598304E+004,2.05418970262727E+004,1.93424366943585E+004,2.08695427401265E+004,0.00000000000000E+000,0.00000000000000E+000,2.06424862715401E+004,1.77155098165906E+004,1.78091692579060E+004,0.00000000000000E+000,0.00000000000000E+000,1.84011740269378E+000,1.87444812790136E+000,1.85015418428268E+000,0.00000000000000E+000,0.00000000000000E+000,2.07089385457680E+004,2.13322682637744E+004,1.81573266537700E+004,2.07133647841857E+004,2.09427446533357E+004,2.08301342368837E+004,2.00011738046045E+004,1.85823076367818E+004,2.07733008554790E+004 +6.86000000000002E-008,1.04557334377178E+023,9.41666677344293E+022,1.37381029870023E+023,4.75488117081470E+020,7.78799484398703E+021,3.44368514942699E+023,2.07268434548383E+004,2.09171278902693E+004,2.09922102952449E+004,1.94730425915069E+004,1.95057869067345E+004,2.08553949036532E+004,0.00000000000000E+000,0.00000000000000E+000,2.06016657907189E+004,1.83383639370506E+004,1.79539738506200E+004,0.00000000000000E+000,0.00000000000000E+000,1.83980953796642E+000,1.87862250286628E+000,1.85133124152795E+000,0.00000000000000E+000,0.00000000000000E+000,2.07225121822628E+004,2.08623257358126E+004,1.80374051818624E+004,2.07268434548383E+004,2.09171278902693E+004,2.08082981960250E+004,1.95670924444474E+004,1.86578227320752E+004,2.07629786308290E+004 +6.88000000000002E-008,1.04772555314383E+023,9.41416420440566E+022,1.37265911694309E+023,4.80493255156012E+020,7.80301025821066E+021,3.44463612566115E+023,2.07124917074971E+004,2.09623834254445E+004,2.09698405456123E+004,2.01788275998779E+004,1.93532410236573E+004,2.08518032886448E+004,0.00000000000000E+000,0.00000000000000E+000,2.06226798745232E+004,1.78268092948342E+004,1.80169800495838E+004,0.00000000000000E+000,0.00000000000000E+000,1.83996817227658E+000,1.87521498924022E+000,1.85183764322181E+000,0.00000000000000E+000,0.00000000000000E+000,2.06308499669056E+004,2.05983515393832E+004,1.81420766917227E+004,2.07124917074971E+004,2.09623834254445E+004,2.07773329622846E+004,1.96593540841894E+004,1.86385616497712E+004,2.07581766129574E+004 +6.90000000000002E-008,1.05022812218110E+023,9.41416420440566E+022,1.37125767828222E+023,4.65477840932387E+020,7.83304108665791E+021,3.44588741017979E+023,2.06478984502865E+004,2.09726909903204E+004,2.09906634624130E+004,2.04413312456473E+004,1.92986782286983E+004,2.08420828813570E+004,0.00000000000000E+000,0.00000000000000E+000,2.05579488933533E+004,1.71675650674333E+004,1.80510897722465E+004,0.00000000000000E+000,0.00000000000000E+000,1.83947851224235E+000,1.87053110851731E+000,1.85211035861337E+000,0.00000000000000E+000,0.00000000000000E+000,2.06335057803688E+004,2.14748999879953E+004,1.81352250686117E+004,2.06478984502865E+004,2.09726909903204E+004,2.07698447972027E+004,1.98509046935229E+004,1.86218680810298E+004,2.07380277079839E+004 +6.92000000000002E-008,1.05278074259912E+023,9.41266266298330E+022,1.36995634238283E+023,4.70482979006929E+020,7.83804622473245E+021,3.44708864331768E+023,2.06285909290363E+004,2.09889141374800E+004,2.09659532263633E+004,1.99962258276644E+004,1.94091752438295E+004,2.08324667899294E+004,0.00000000000000E+000,0.00000000000000E+000,2.06249069449036E+004,1.71902168853787E+004,1.81613002449911E+004,0.00000000000000E+000,0.00000000000000E+000,1.83998496592749E+000,1.87069787089257E+000,1.85298470045031E+000,0.00000000000000E+000,0.00000000000000E+000,2.05117647075398E+004,2.10816131466988E+004,1.79952375676909E+004,2.06285909290363E+004,2.09889141374800E+004,2.07414063778148E+004,1.95481752258453E+004,1.86591124817076E+004,2.07255598649003E+004 +6.94000000000003E-008,1.05563367130161E+023,9.41416420440566E+022,1.36865500648345E+023,4.75488117081470E+020,7.81302053435974E+021,3.44859018474004E+023,2.06390638415462E+004,2.10167379788403E+004,2.09059688909384E+004,2.01487919902559E+004,1.92554732397202E+004,2.08160689745438E+004,0.00000000000000E+000,0.00000000000000E+000,2.05612760788665E+004,1.75717659433843E+004,1.80236914020339E+004,0.00000000000000E+000,0.00000000000000E+000,1.83950375384863E+000,1.87344367039015E+000,1.85189138148762E+000,0.00000000000000E+000,0.00000000000000E+000,2.05396103743708E+004,2.08259797926531E+004,1.79095659984436E+004,2.06390638415462E+004,2.10167379788403E+004,2.07061326449100E+004,1.96434357674194E+004,1.85296968993256E+004,2.07196194621105E+004 +6.96000000000003E-008,1.05708516134323E+023,9.41566574582802E+022,1.36795428715302E+023,4.70482979006929E+020,7.80801539628520E+021,3.44939100683197E+023,2.06439297499978E+004,2.09944951412160E+004,2.08846850656100E+004,2.03056126882205E+004,1.94027098072313E+004,2.08065429623557E+004,0.00000000000000E+000,0.00000000000000E+000,2.05474664142393E+004,1.69238571570875E+004,1.82402106661079E+004,0.00000000000000E+000,0.00000000000000E+000,1.83939893529219E+000,1.86870935621915E+000,1.85360440680750E+000,0.00000000000000E+000,0.00000000000000E+000,2.05310917086783E+004,2.11955822823478E+004,1.77319076203995E+004,2.06439297499978E+004,2.09944951412160E+004,2.06905939832335E+004,1.96447055544648E+004,1.86007350245753E+004,2.07105157222851E+004 +6.98000000000003E-008,1.05918731933453E+023,9.41566574582802E+022,1.36685315677662E+023,4.65477840932387E+020,7.81802567243428E+021,3.45044208582762E+023,2.06297200577180E+004,2.09654399417689E+004,2.08702602184353E+004,1.97085585084268E+004,1.94287167621214E+004,2.07881644357967E+004,0.00000000000000E+000,0.00000000000000E+000,2.05442930922358E+004,1.65801484783761E+004,1.80779866349372E+004,0.00000000000000E+000,0.00000000000000E+000,1.83937482970989E+000,1.86605122939425E+000,1.85232469901564E+000,0.00000000000000E+000,0.00000000000000E+000,2.05303672887351E+004,2.14009995021996E+004,1.77644921313466E+004,2.06297200577180E+004,2.09654399417689E+004,2.06832019538280E+004,1.93513092958694E+004,1.85778463941899E+004,2.06943024461881E+004 +7.00000000000003E-008,1.06133952870659E+023,9.41816831486529E+022,1.36570197501947E+023,4.45457288634220E+020,7.83304108665791E+021,3.45164331896551E+023,2.06022015514185E+004,2.09418477993648E+004,2.08343701832159E+004,1.94848837978646E+004,1.92344800469095E+004,2.07542585001759E+004,0.00000000000000E+000,0.00000000000000E+000,2.05542729013236E+004,1.59720374947573E+004,1.80090081820145E+004,0.00000000000000E+000,0.00000000000000E+000,1.83945061519858E+000,1.86107499186117E+000,1.85177376126667E+000,0.00000000000000E+000,0.00000000000000E+000,2.05564474803471E+004,2.11699145921784E+004,1.79768078462396E+004,2.06022015514185E+004,2.09418477993648E+004,2.06777683472659E+004,1.90232055885323E+004,1.85361731248435E+004,2.06758533293659E+004 +7.02000000000003E-008,1.06374199498237E+023,9.41616625963548E+022,1.36440063912009E+023,4.45457288634220E+020,7.85306163895607E+021,3.45274444934191E+023,2.05834837256480E+004,2.09987380199853E+004,2.08017645427505E+004,1.96458545945299E+004,1.92740221335041E+004,2.07519941031680E+004,0.00000000000000E+000,0.00000000000000E+000,2.05764614828698E+004,1.56139008487986E+004,1.82252545913133E+004,0.00000000000000E+000,0.00000000000000E+000,1.83961885687864E+000,1.85796756552011E+000,1.85348735374380E+000,0.00000000000000E+000,0.00000000000000E+000,2.04387428875335E+004,2.02190223994887E+004,1.81057884957028E+004,2.05834837256480E+004,2.09987380199853E+004,2.06350132819319E+004,1.87206674141138E+004,1.86494722611341E+004,2.06707013428363E+004 +7.04000000000003E-008,1.06599430711591E+023,9.41766780105784E+022,1.36339961150518E+023,4.50462426708762E+020,7.82803594858337E+021,3.45394568247980E+023,2.04968205318065E+004,2.10256189137367E+004,2.07901938820854E+004,1.97820001365448E+004,1.94488800495510E+004,2.07321272740128E+004,0.00000000000000E+000,0.00000000000000E+000,2.05198467253059E+004,1.48199247869531E+004,1.81547865107378E+004,0.00000000000000E+000,0.00000000000000E+000,1.83918888449924E+000,1.85055730000357E+000,1.85293331187100E+000,0.00000000000000E+000,0.00000000000000E+000,2.04946408684389E+004,2.05171773146822E+004,1.80274396220133E+004,2.04968205318065E+004,2.10256189137367E+004,2.06310630945933E+004,1.86562157561885E+004,1.86841345539628E+004,2.06505120235981E+004 +7.06000000000003E-008,1.06809646510722E+023,9.41966985628766E+022,1.36239858389028E+023,4.45457288634220E+020,7.81802567243428E+021,3.45509686423695E+023,2.04958196364662E+004,2.09635890689512E+004,2.08089481733370E+004,2.00745799011968E+004,1.94299543051599E+004,2.07221586364670E+004,0.00000000000000E+000,0.00000000000000E+000,2.05080041434796E+004,1.54859879765223E+004,1.81992007936662E+004,0.00000000000000E+000,0.00000000000000E+000,1.83909865209197E+000,1.85682376903505E+000,1.85328299745700E+000,0.00000000000000E+000,0.00000000000000E+000,2.04572907787848E+004,1.95299746266334E+004,1.80731940354572E+004,2.04958196364662E+004,2.09635890689512E+004,2.06251841113307E+004,1.86731413598331E+004,1.87011860493954E+004,2.06314005449791E+004 +7.08000000000003E-008,1.07009852033704E+023,9.41766780105784E+022,1.36119735075239E+023,4.35447012485136E+020,7.85806677703062E+021,3.45599778909036E+023,2.05245892436010E+004,2.09618468329987E+004,2.07908755026827E+004,1.93761571966129E+004,1.94409744487596E+004,2.07225381072790E+004,0.00000000000000E+000,0.00000000000000E+000,2.04802888098954E+004,1.51628070810335E+004,1.80029941022099E+004,0.00000000000000E+000,0.00000000000000E+000,1.83888708413391E+000,1.85385016531365E+000,1.85172553145280E+000,0.00000000000000E+000,0.00000000000000E+000,2.04236979140255E+004,1.89952661744009E+004,1.80699504162560E+004,2.05245892436010E+004,2.09618468329987E+004,2.05999834731574E+004,1.81253709019109E+004,1.86521522810253E+004,2.06278405903570E+004 +7.10000000000003E-008,1.07195042142462E+023,9.41916934248020E+022,1.36029642589897E+023,4.30441874410594E+020,7.85306163895607E+021,3.45699881670527E+023,2.05497128949317E+004,2.09239216026735E+004,2.07544252070844E+004,1.89926416845504E+004,1.93808503490288E+004,2.07037335327296E+004,0.00000000000000E+000,0.00000000000000E+000,2.04921630750549E+004,1.53265377735333E+004,1.80206338513712E+004,0.00000000000000E+000,0.00000000000000E+000,1.83897779563391E+000,1.85537192594679E+000,1.85186690429858E+000,0.00000000000000E+000,0.00000000000000E+000,2.04069443457335E+004,1.84855400579105E+004,1.81431727470668E+004,2.05497128949317E+004,2.09239216026735E+004,2.05822860372670E+004,1.78524862543539E+004,1.86519548248785E+004,2.06180208569752E+004 +7.12000000000003E-008,1.07425278493891E+023,9.41916934248020E+022,1.35924534690332E+023,4.40452150559678E+020,7.83304108665791E+021,3.45814999846242E+023,2.05218024301554E+004,2.09243835969185E+004,2.07281920452834E+004,1.82976190099569E+004,1.93497929251091E+004,2.06831984635453E+004,0.00000000000000E+000,0.00000000000000E+000,2.04894841050120E+004,1.66068505954508E+004,1.81527854004200E+004,0.00000000000000E+000,0.00000000000000E+000,1.83895733899889E+000,1.86626158250724E+000,1.85291751737063E+000,0.00000000000000E+000,0.00000000000000E+000,2.03973803305592E+004,1.91759109809565E+004,1.79665532622521E+004,2.05218024301554E+004,2.09243835969185E+004,2.05672614979013E+004,1.80938935651714E+004,1.86224478893633E+004,2.06032092651527E+004 +7.14000000000003E-008,1.07550406945754E+023,9.42067088390256E+022,1.35864473033437E+023,4.35447012485136E+020,7.82803594858337E+021,3.45885071779285E+023,2.04877172342815E+004,2.09562609133217E+004,2.07000316458014E+004,1.87806185463789E+004,1.92115024680942E+004,2.06676970673993E+004,0.00000000000000E+000,0.00000000000000E+000,2.04721466256640E+004,1.63404371584297E+004,1.82056660018339E+004,0.00000000000000E+000,0.00000000000000E+000,1.83882482421065E+000,1.86413279719827E+000,1.85333376126815E+000,0.00000000000000E+000,0.00000000000000E+000,2.04255201742956E+004,1.81158239408996E+004,1.79533033994827E+004,2.04877172342815E+004,2.09562609133217E+004,2.05584775630474E+004,1.79242232024912E+004,1.85723173691261E+004,2.05965501703707E+004 +7.16000000000003E-008,1.07815679263705E+023,9.42217242532493E+022,1.35739344581573E+023,4.35447012485136E+020,7.81302053435974E+021,3.46025215645372E+023,2.04506889130346E+004,2.09536238121101E+004,2.06912710856189E+004,1.82231089212255E+004,1.92787532316236E+004,2.06527479134919E+004,0.00000000000000E+000,0.00000000000000E+000,2.04659605843187E+004,1.70468795857665E+004,1.83752574614634E+004,0.00000000000000E+000,0.00000000000000E+000,1.83877748995461E+000,1.86963532624901E+000,1.85465294163983E+000,0.00000000000000E+000,0.00000000000000E+000,2.03814967519332E+004,1.93552552481170E+004,1.77415386401124E+004,2.04506889130346E+004,2.09536238121101E+004,2.05400972030161E+004,1.82325959948973E+004,1.85857786475927E+004,2.05778102034440E+004 +7.18000000000003E-008,1.08125997824326E+023,9.42417448055474E+022,1.35579180163188E+023,4.20431598261511E+020,7.82303081050882E+021,3.46190385201832E+023,2.04142088403062E+004,2.09756332511915E+004,2.06703783978419E+004,1.84094417562319E+004,1.91816544906237E+004,2.06370795492204E+004,0.00000000000000E+000,0.00000000000000E+000,2.03700898393476E+004,1.63432406878630E+004,1.82182356576686E+004,0.00000000000000E+000,0.00000000000000E+000,1.83804034002705E+000,1.86415555146098E+000,1.85343235584988E+000,0.00000000000000E+000,0.00000000000000E+000,2.04229835277934E+004,1.93939491034430E+004,1.77741149045352E+004,2.04142088403062E+004,2.09756332511915E+004,2.05173035149502E+004,1.81351610404909E+004,1.85103542471065E+004,2.05616277544555E+004 +7.20000000000003E-008,1.08356234175755E+023,9.42517550816965E+022,1.35464061987474E+023,4.15426460186969E+020,7.82303081050882E+021,3.46310508515621E+023,2.04056902165232E+004,2.09284753631393E+004,2.06674809988593E+004,1.80217185477397E+004,1.92063274637055E+004,2.06204213374593E+004,0.00000000000000E+000,0.00000000000000E+000,2.03394132293149E+004,1.64173591413549E+004,1.83674571540892E+004,0.00000000000000E+000,0.00000000000000E+000,1.83780304317760E+000,1.86475436792742E+000,1.85459278685618E+000,0.00000000000000E+000,0.00000000000000E+000,2.04192942645310E+004,1.93258459822535E+004,1.77483637483389E+004,2.04056902165232E+004,2.09284753631393E+004,2.05067133653150E+004,1.79658561932838E+004,1.85539633634441E+004,2.05427312091767E+004 +7.22000000000003E-008,1.08621506493706E+023,9.42467499436220E+022,1.35343938673685E+023,4.30441874410594E+020,7.79800512013612E+021,3.46440642105559E+023,2.03550012364955E+004,2.08914064806154E+004,2.06169175894486E+004,1.80410891548877E+004,1.89245534717688E+004,2.05681765661186E+004,0.00000000000000E+000,0.00000000000000E+000,2.03839624249105E+004,1.85291645877184E+004,1.81439510981531E+004,0.00000000000000E+000,0.00000000000000E+000,1.83814742282080E+000,1.87984629476692E+000,1.85284774884510E+000,0.00000000000000E+000,0.00000000000000E+000,2.04733309462803E+004,2.01794773802480E+004,1.78396865644655E+004,2.03550012364955E+004,2.08914064806154E+004,2.05123016492778E+004,1.87960890519995E+004,1.83968792408751E+004,2.05163669514467E+004 +7.24000000000003E-008,1.08886778811657E+023,9.42517550816965E+022,1.35203794807597E+023,4.20431598261511E+020,7.81302053435974E+021,3.46575780833572E+023,2.03377560846173E+004,2.08718135589061E+004,2.05959967866587E+004,1.83163030983435E+004,1.89780510523277E+004,2.05506321572926E+004,0.00000000000000E+000,0.00000000000000E+000,2.03074838923034E+004,1.62890388432289E+004,1.80869751957309E+004,0.00000000000000E+000,0.00000000000000E+000,1.83755531689564E+000,1.86371427914752E+000,1.85239619027600E+000,0.00000000000000E+000,0.00000000000000E+000,2.05252571966605E+004,2.01656064208964E+004,1.78058148592183E+004,2.03377560846173E+004,2.08718135589061E+004,2.04977690500067E+004,1.83047008241931E+004,1.83950290265588E+004,2.04991548044037E+004 +7.26000000000003E-008,1.09016912401595E+023,9.42517550816965E+022,1.35138728012628E+023,4.20431598261511E+020,7.81302053435974E+021,3.46640847628541E+023,2.03530575069651E+004,2.08869855397908E+004,2.05352574110762E+004,1.93086881668677E+004,1.90419337300812E+004,2.05384453371751E+004,0.00000000000000E+000,0.00000000000000E+000,2.02849956498780E+004,1.59096092142948E+004,1.83014307028034E+004,0.00000000000000E+000,0.00000000000000E+000,1.83738038581033E+000,1.86054314012428E+000,1.85408160067493E+000,0.00000000000000E+000,0.00000000000000E+000,2.05335840408920E+004,2.01052031370688E+004,1.78235986330351E+004,2.03530575069651E+004,2.08869855397908E+004,2.04675161467941E+004,1.86190775936351E+004,1.84861155396708E+004,2.04986721211970E+004 +7.28000000000003E-008,1.09192092234204E+023,9.42667704959201E+022,1.35053640665361E+023,4.15426460186969E+020,7.80801539628520E+021,3.46735945251957E+023,2.03323824926849E+004,2.08805701391313E+004,2.05385734793216E+004,1.94119476573165E+004,1.90700571315406E+004,2.05322005230398E+004,0.00000000000000E+000,0.00000000000000E+000,2.02700412605177E+004,1.55396193719836E+004,1.81944779582885E+004,0.00000000000000E+000,0.00000000000000E+000,1.83726385036189E+000,1.85730557459998E+000,1.85324589228464E+000,0.00000000000000E+000,0.00000000000000E+000,2.05054634977594E+004,2.00143726036836E+004,1.79177482344593E+004,2.03323824926849E+004,2.08805701391313E+004,2.04567301405771E+004,1.85388281859496E+004,1.84970029376464E+004,2.04863720648734E+004 +7.30000000000003E-008,1.09437343999856E+023,9.42517550816965E+022,1.34918501937349E+023,4.10421322112427E+020,7.83304108665791E+021,3.46851063427672E+023,2.03176566761299E+004,2.08468351772128E+004,2.05143644026443E+004,1.93823475388226E+004,1.88958157578132E+004,2.05047522683230E+004,0.00000000000000E+000,0.00000000000000E+000,2.02551728051021E+004,1.56603853372111E+004,1.80738838096905E+004,0.00000000000000E+000,0.00000000000000E+000,1.83714781900754E+000,1.85837871818620E+000,1.85229204384721E+000,0.00000000000000E+000,0.00000000000000E+000,2.05261820941107E+004,2.02245066535469E+004,1.81367856895645E+004,2.03176566761299E+004,2.08468351772128E+004,2.04481762921666E+004,1.86194125463229E+004,1.84520929676675E+004,2.04680828569029E+004 +7.32000000000003E-008,1.09712626593956E+023,9.42467499436220E+022,1.34783363209336E+023,4.15426460186969E+020,7.82803594858337E+021,3.46986202155684E+023,2.03216496634157E+004,2.07911550078636E+004,2.05078862914981E+004,1.89319178994321E+004,1.87904397608298E+004,2.04853082008985E+004,0.00000000000000E+000,0.00000000000000E+000,2.02943324955322E+004,1.64447859626521E+004,1.82460183202285E+004,0.00000000000000E+000,0.00000000000000E+000,1.83745306075754E+000,1.86497461890886E+000,1.85364980979167E+000,0.00000000000000E+000,0.00000000000000E+000,2.04534445891873E+004,1.92366749541103E+004,1.80380371004351E+004,2.03216496634157E+004,2.07911550078636E+004,2.04345726648887E+004,1.83450368036858E+004,1.84236319882741E+004,2.04478523958875E+004 +7.34000000000003E-008,1.09837755045820E+023,9.42917961862929E+022,1.34738316966665E+023,4.10421322112427E+020,7.79299998206157E+021,3.47071289502952E+023,2.03236593108958E+004,2.07744149932015E+004,2.05087904783941E+004,1.88419310293966E+004,1.87633771400705E+004,2.04812045031856E+004,0.00000000000000E+000,0.00000000000000E+000,2.02463781230337E+004,1.68264053592704E+004,1.82094002759120E+004,0.00000000000000E+000,0.00000000000000E+000,1.83707910868563E+000,1.86796646725814E+000,1.85336306621780E+000,0.00000000000000E+000,0.00000000000000E+000,2.04646747989742E+004,1.80630291789802E+004,1.80780104592960E+004,2.03236593108958E+004,2.07744149932015E+004,2.04253771368680E+004,1.80669217028511E+004,1.84135556585650E+004,2.04400509625923E+004 +7.36000000000003E-008,1.10007929740354E+023,9.43118167385910E+022,1.34663239895547E+023,4.10421322112427E+020,7.77297942976341E+021,3.47166387126368E+023,2.03096732398558E+004,2.07815184066651E+004,2.04663535239679E+004,1.86388721927859E+004,1.87750514864656E+004,2.04622955439034E+004,0.00000000000000E+000,0.00000000000000E+000,2.02307286790641E+004,1.66043269254951E+004,1.80462168536040E+004,0.00000000000000E+000,0.00000000000000E+000,1.83695670071346E+000,1.86624172987693E+000,1.85207145990510E+000,0.00000000000000E+000,0.00000000000000E+000,2.04935708903222E+004,1.80735899081608E+004,1.81088436729008E+004,2.03096732398558E+004,2.07815184066651E+004,2.04110075679298E+004,1.79212280954406E+004,1.83835976808043E+004,2.04312142959091E+004 +7.38000000000003E-008,1.10183109572963E+023,9.43468527051128E+022,1.34588162824429E+023,4.05416184037885E+020,7.74795373939070E+021,3.47271495025933E+023,2.02680413836884E+004,2.07458810004325E+004,2.04857833298705E+004,1.91705003746807E+004,1.88291782866757E+004,2.04488651706759E+004,0.00000000000000E+000,0.00000000000000E+000,2.01831865037140E+004,1.65148760685063E+004,1.79567126241213E+004,0.00000000000000E+000,0.00000000000000E+000,1.83658370199930E+000,1.86553423343087E+000,1.85135332586356E+000,0.00000000000000E+000,0.00000000000000E+000,2.05173356422485E+004,1.77229243659300E+004,1.82742441671316E+004,2.02680413836884E+004,2.07458810004325E+004,2.04137239803601E+004,1.80272084173586E+004,1.84314305256789E+004,2.04107290841576E+004 +7.40000000000003E-008,1.10318248300976E+023,9.43918989477837E+022,1.34528101167534E+023,3.90400769814260E+020,7.73293832516707E+021,3.47361587511275E+023,2.02375246467662E+004,2.07533848901145E+004,2.04830499804430E+004,1.74615507492834E+004,1.88936045048559E+004,2.04397545233474E+004,0.00000000000000E+000,0.00000000000000E+000,2.01751563334745E+004,1.52695113500074E+004,1.80263492929914E+004,0.00000000000000E+000,0.00000000000000E+000,1.83652053178786E+000,1.85484551313889E+000,1.85191265263838E+000,0.00000000000000E+000,0.00000000000000E+000,2.04994361513051E+004,1.74901751798655E+004,1.83076015717620E+004,2.02375246467662E+004,2.07533848901145E+004,2.04051330547110E+004,1.68767606799050E+004,1.84881576016417E+004,2.03998951521467E+004 +7.42000000000003E-008,1.10468402443212E+023,9.44319400523800E+022,1.34448018958342E+023,3.65375079441551E+020,7.74294860131616E+021,3.47456685134691E+023,2.02170777022219E+004,2.07489300466887E+004,2.04781469870629E+004,1.69668632693039E+004,1.89243220671674E+004,2.04304188530635E+004,0.00000000000000E+000,0.00000000000000E+000,2.01759608260786E+004,1.48064067922495E+004,1.81980697800251E+004,0.00000000000000E+000,0.00000000000000E+000,1.83652686261620E+000,1.85042443928010E+000,1.85327411330418E+000,0.00000000000000E+000,0.00000000000000E+000,2.04584311378305E+004,1.61848795218474E+004,1.83970433100977E+004,2.02170777022219E+004,2.07489300466887E+004,2.03912015668856E+004,1.61549823399757E+004,1.85740512275744E+004,2.03881159983603E+004 +7.44000000000003E-008,1.10658597690045E+023,9.44319400523800E+022,1.34347916196851E+023,3.60369941367009E+020,7.75295887746524E+021,3.47551782758108E+023,2.02083032797857E+004,2.07081402693959E+004,2.04782286615512E+004,1.71830867531299E+004,1.89476193537167E+004,2.04171937676805E+004,0.00000000000000E+000,0.00000000000000E+000,2.01476013037170E+004,1.46174963516106E+004,1.83905973294724E+004,0.00000000000000E+000,0.00000000000000E+000,1.83630339563311E+000,1.84854273376914E+000,1.85477109539624E+000,0.00000000000000E+000,0.00000000000000E+000,2.04499057035533E+004,1.54611342532176E+004,1.84830793903964E+004,2.02083032797857E+004,2.07081402693959E+004,2.03811326116158E+004,1.59877217225498E+004,1.86613620521380E+004,2.03720357006762E+004 +7.46000000000003E-008,1.10838782660728E+023,9.44219297762310E+022,1.34257823711509E+023,3.65375079441551E+020,7.75295887746524E+021,3.47636870105375E+023,2.01568084108681E+004,2.06459078870803E+004,2.05219435789207E+004,1.70885119759603E+004,1.91971249693415E+004,2.04060411924264E+004,0.00000000000000E+000,0.00000000000000E+000,2.01452081607166E+004,1.51807338136985E+004,1.80947681542606E+004,0.00000000000000E+000,0.00000000000000E+000,1.83628451024394E+000,1.85401833992453E+000,1.85245811625517E+000,0.00000000000000E+000,0.00000000000000E+000,2.04382924021141E+004,1.63878182273597E+004,1.85494320475206E+004,2.01568084108681E+004,2.06459078870803E+004,2.03962765202671E+004,1.63679940325262E+004,1.87100799387661E+004,2.03458890998274E+004 +7.48000000000003E-008,1.11038988183710E+023,9.44719811569764E+022,1.34187751778466E+023,3.70380217516093E+020,7.69289722057074E+021,3.47761998557238E+023,2.01338516546902E+004,2.06063894958818E+004,2.04699241146318E+004,1.72556375758697E+004,1.90820599752358E+004,2.03655648244830E+004,0.00000000000000E+000,0.00000000000000E+000,2.01679569336126E+004,1.56979064736800E+004,1.79937773548939E+004,0.00000000000000E+000,0.00000000000000E+000,1.83646385542211E+000,1.85870885947493E+000,1.85165155700345E+000,0.00000000000000E+000,0.00000000000000E+000,2.04968844394024E+004,1.63201575804308E+004,1.85047526343411E+004,2.01338516546902E+004,2.06063894958818E+004,2.03966945657727E+004,1.65607066947298E+004,1.86194364947750E+004,2.03263345114537E+004 +7.50000000000003E-008,1.11279234811288E+023,9.44319400523800E+022,1.34057618188527E+023,3.80390493665176E+020,7.71291777286890E+021,3.47862101318729E+023,2.01329559177664E+004,2.06260292969574E+004,2.04219077931024E+004,1.72821413140571E+004,1.89404192681016E+004,2.03486037730085E+004,0.00000000000000E+000,0.00000000000000E+000,2.01688324619529E+004,1.54331386619021E+004,1.79059326224259E+004,0.00000000000000E+000,0.00000000000000E+000,1.83647075000545E+000,1.85634579801878E+000,1.85094278779395E+000,0.00000000000000E+000,0.00000000000000E+000,2.04870424788972E+004,1.68809151445287E+004,1.83923054348257E+004,2.01329559177664E+004,2.06260292969574E+004,2.03729796130741E+004,1.66644885923794E+004,1.85009172381330E+004,2.03193278401600E+004 +7.52000000000003E-008,1.11534496853089E+023,9.44569657427528E+022,1.33932489736664E+023,3.70380217516093E+020,7.70791263479436E+021,3.48002245184816E+023,2.01480398112895E+004,2.05958919006677E+004,2.04255824715924E+004,1.66439063410702E+004,1.88154168474303E+004,2.03431682244214E+004,0.00000000000000E+000,0.00000000000000E+000,2.01202057673229E+004,1.47132409094560E+004,1.77991068762690E+004,0.00000000000000E+000,0.00000000000000E+000,1.83608694421657E+000,1.84950230479024E+000,1.85007169882260E+000,0.00000000000000E+000,0.00000000000000E+000,2.04565131439541E+004,1.85299544174343E+004,1.83892709915899E+004,2.01480398112895E+004,2.05958919006677E+004,2.03526113641263E+004,1.66732991317023E+004,1.84165103619657E+004,2.03062803821428E+004 +7.54000000000003E-008,1.11774743480667E+023,9.45170273996472E+022,1.33837392113248E+023,3.65375079441551E+020,7.65786125404895E+021,3.48152399327053E+023,2.01699244726803E+004,2.05382147493579E+004,2.04355002388223E+004,1.67551288282424E+004,1.87075896273524E+004,2.03362528726864E+004,0.00000000000000E+000,0.00000000000000E+000,2.01669423271305E+004,1.50247685608356E+004,1.77186037930230E+004,0.00000000000000E+000,0.00000000000000E+000,1.83645586490389E+000,1.85254210909510E+000,1.84940850043114E+000,0.00000000000000E+000,0.00000000000000E+000,2.03437848544714E+004,1.83079453660231E+004,1.82927960073503E+004,2.01699244726803E+004,2.05382147493579E+004,2.03365270962956E+004,1.67405456002777E+004,1.83194355190595E+004,2.02896524012521E+004 +7.56000000000003E-008,1.11984959279798E+023,9.45770890565417E+022,1.33762315042129E+023,3.65375079441551E+020,7.59779959715444E+021,3.48287538055065E+023,2.01629459535654E+004,2.04976382041794E+004,2.04522038534903E+004,1.68336535440578E+004,1.87103431762811E+004,2.03297420444642E+004,0.00000000000000E+000,0.00000000000000E+000,2.01064701360126E+004,1.51807338136985E+004,1.76947193525760E+004,0.00000000000000E+000,0.00000000000000E+000,1.83597820394402E+000,1.85401833992453E+000,1.84921060696756E+000,0.00000000000000E+000,0.00000000000000E+000,2.03463529256891E+004,1.82520896975993E+004,1.81871954612322E+004,2.01629459535654E+004,2.04976382041794E+004,2.03283793765820E+004,1.68004363601906E+004,1.82833745888928E+004,2.02728373177167E+004 +7.58000000000003E-008,1.12250231597749E+023,9.46121250230635E+022,1.33637186590266E+023,3.55364803292467E+020,7.58278418293082E+021,3.48437692197302E+023,2.01044203977160E+004,2.04953291392345E+004,2.04371176252160E+004,1.66341421839653E+004,1.86146689476531E+004,2.03022053999447E+004,0.00000000000000E+000,0.00000000000000E+000,2.01000986333315E+004,1.52892469412237E+004,1.75659648209149E+004,0.00000000000000E+000,0.00000000000000E+000,1.83592771398832E+000,1.85502812582093E+000,1.84813480056818E+000,0.00000000000000E+000,0.00000000000000E+000,2.03724057598116E+004,1.84762568011437E+004,1.79269763783721E+004,2.01044203977160E+004,2.04953291392345E+004,2.03276714359857E+004,1.68076514257886E+004,1.81308099368154E+004,2.02498763305110E+004 +7.60000000000003E-008,1.12515503915700E+023,9.46271404372872E+022,1.33507053000328E+023,3.50359665217926E+020,7.57777904485628E+021,3.48577836063389E+023,2.00566161315880E+004,2.05126641035243E+004,2.04381830445147E+004,1.64027312097275E+004,1.85033977068382E+004,2.02891216475439E+004,0.00000000000000E+000,0.00000000000000E+000,2.00839519582934E+004,1.48090806851514E+004,1.75712699608958E+004,0.00000000000000E+000,0.00000000000000E+000,1.83579962304834E+000,1.85045073818734E+000,1.84817943049368E+000,0.00000000000000E+000,0.00000000000000E+000,2.03263786716946E+004,1.85735940424392E+004,1.80880787693213E+004,2.00566161315880E+004,2.05126641035243E+004,2.03103404966947E+004,1.66060395654894E+004,1.81305428148785E+004,2.02322561193997E+004 +7.62000000000003E-008,1.12750745405203E+023,9.46421558515108E+022,1.33391934824613E+023,3.45354527143384E+020,7.57277390678173E+021,3.48702964515252E+023,2.00429520979874E+004,2.04279097606716E+004,2.04199300921318E+004,1.61956635464928E+004,1.83017206839331E+004,2.02500177789376E+004,0.00000000000000E+000,0.00000000000000E+000,2.00824145617418E+004,1.48430273350243E+004,1.75675128774564E+004,0.00000000000000E+000,0.00000000000000E+000,1.83578741652175E+000,1.85078381670741E+000,1.84814782642994E+000,0.00000000000000E+000,0.00000000000000E+000,2.03811223141443E+004,1.84336875738073E+004,1.82149764870470E+004,2.00429520979874E+004,2.04279097606716E+004,2.03179341877740E+004,1.64836029848590E+004,1.80782423078453E+004,2.02064324280812E+004 +7.64000000000003E-008,1.13011012585079E+023,9.46021147469145E+022,1.33236775544303E+023,3.40349389068842E+020,7.62282528752715E+021,3.48813077552892E+023,2.00145897181748E+004,2.04059632775415E+004,2.04297700963692E+004,1.64078675071869E+004,1.83841353062227E+004,2.02401714164339E+004,0.00000000000000E+000,0.00000000000000E+000,2.01206706232081E+004,1.52128435580089E+004,1.73237524157168E+004,0.00000000000000E+000,0.00000000000000E+000,1.83609062180069E+000,1.85431860361690E+000,1.84606886278251E+000,0.00000000000000E+000,0.00000000000000E+000,2.02933448967201E+004,1.90552654015867E+004,1.82679286978606E+004,2.00145897181748E+004,2.04059632775415E+004,2.03068365237081E+004,1.68570501066719E+004,1.80642505522992E+004,2.01866618991691E+004 +7.66000000000003E-008,1.13236243798434E+023,9.46271404372872E+022,1.33131667644737E+023,3.35344250994300E+020,7.60780987330353E+021,3.48938206004756E+023,2.00242018474189E+004,2.03255920619704E+004,2.03830837200098E+004,1.66907262616636E+004,1.83437464438807E+004,2.02030180050833E+004,0.00000000000000E+000,0.00000000000000E+000,2.01603520188778E+004,1.66470031538049E+004,1.69743820581833E+004,0.00000000000000E+000,0.00000000000000E+000,1.83640394403124E+000,1.86657665500498E+000,1.84298801124824E+000,0.00000000000000E+000,0.00000000000000E+000,2.03149430972914E+004,1.86111969192291E+004,1.84464706105010E+004,2.00242018474189E+004,2.03255920619704E+004,2.03033185943208E+004,1.72382085037758E+004,1.80049655182354E+004,2.01657247255641E+004 +7.68000000000003E-008,1.13481495564086E+023,9.46721866799580E+022,1.33041575159395E+023,3.45354527143384E+020,7.54274307833448E+021,3.49083355008917E+023,1.99742193199579E+004,2.03869001724348E+004,2.03470007527102E+004,1.69651610567194E+004,1.81165752244211E+004,2.01850970447618E+004,0.00000000000000E+000,0.00000000000000E+000,2.01516755660722E+004,1.66248454248225E+004,1.70750009611524E+004,0.00000000000000E+000,0.00000000000000E+000,1.83633553749349E+000,1.86640296957206E+000,1.84388786071863E+000,0.00000000000000E+000,0.00000000000000E+000,2.03000446928308E+004,1.95492252184099E+004,1.81823306221667E+004,1.99742193199579E+004,2.03869001724348E+004,2.02807964684313E+004,1.76253265374674E+004,1.78551689329979E+004,2.01548703053050E+004 +7.70000000000003E-008,1.13621639430173E+023,9.47222380607035E+022,1.32996528916725E+023,3.45354527143384E+020,7.49269169758907E+021,3.49178452632334E+023,1.99422186922267E+004,2.03792482788704E+004,2.03459088303832E+004,1.76822694366717E+004,1.82352565516673E+004,2.01756683289344E+004,0.00000000000000E+000,0.00000000000000E+000,2.01815099235583E+004,1.76804421648366E+004,1.72225515595395E+004,0.00000000000000E+000,0.00000000000000E+000,1.83657051702763E+000,1.87420455373535E+000,1.84518894390214E+000,0.00000000000000E+000,0.00000000000000E+000,2.02416290202790E+004,1.89907735037616E+004,1.80865131193163E+004,1.99422186922267E+004,2.03792482788704E+004,2.02712383791323E+004,1.80624710196411E+004,1.79188125590526E+004,2.01408133037300E+004 +7.72000000000003E-008,1.13846870643528E+023,9.47372534749271E+022,1.32886415879085E+023,3.40349389068842E+020,7.48768655951452E+021,3.49298575946123E+023,2.00070469968730E+004,2.02796503084424E+004,2.03066182110563E+004,1.69492834531705E+004,1.84198969493764E+004,2.01579489689302E+004,0.00000000000000E+000,0.00000000000000E+000,2.01441213428430E+004,1.83595005381828E+004,1.70478958583012E+004,0.00000000000000E+000,0.00000000000000E+000,1.83627593222787E+000,1.87875929855526E+000,1.84364647164500E+000,0.00000000000000E+000,0.00000000000000E+000,2.02735977648009E+004,1.88271565039660E+004,1.79640992342832E+004,2.00070469968730E+004,2.02796503084424E+004,2.02533099502011E+004,1.78804404082314E+004,1.79170830744783E+004,2.01277972922865E+004 +7.74000000000003E-008,1.14097127547255E+023,9.48073254079707E+022,1.32796323393743E+023,3.40349389068842E+020,7.41761462647094E+021,3.49458740364508E+023,2.00092108230573E+004,2.02490616508140E+004,2.02988754200574E+004,1.69020395199970E+004,1.84275788256994E+004,2.01477580759688E+004,0.00000000000000E+000,0.00000000000000E+000,2.01504169135076E+004,1.85268297880256E+004,1.68781202612267E+004,0.00000000000000E+000,0.00000000000000E+000,1.83632560932828E+000,1.87983146849919E+000,1.84211737215400E+000,0.00000000000000E+000,0.00000000000000E+000,2.02123222944742E+004,1.83060182600749E+004,1.79342783020221E+004,2.00092108230573E+004,2.02490616508140E+004,2.02336760082479E+004,1.77541373341003E+004,1.78662196180900E+004,2.01118963960999E+004 +7.76000000000003E-008,1.14287322794087E+023,9.47873048556725E+022,1.32686210356103E+023,3.35344250994300E+020,7.44764545491819E+021,3.49543827711775E+023,2.00152217907999E+004,2.02165253955003E+004,2.03047901593865E+004,1.68669794754815E+004,1.83763155668231E+004,2.01417896619949E+004,0.00000000000000E+000,0.00000000000000E+000,2.00724013752562E+004,1.80398158282435E+004,1.70514074131975E+004,0.00000000000000E+000,0.00000000000000E+000,1.83570787005227E+000,1.87665681323524E+000,1.84367778644107E+000,0.00000000000000E+000,0.00000000000000E+000,2.02283929853137E+004,1.91957131825822E+004,1.79666621983211E+004,2.00152217907999E+004,2.02165253955003E+004,2.02200305003871E+004,1.78643360300825E+004,1.78996697382628E+004,2.01004161112436E+004 +7.78000000000003E-008,1.14447487212473E+023,9.48073254079707E+022,1.32616138423059E+023,3.35344250994300E+020,7.42762490262002E+021,3.49633920197117E+023,2.00247999942702E+004,2.01863257229390E+004,2.03243636784837E+004,1.66624051873557E+004,1.82890627819474E+004,2.01421250999064E+004,0.00000000000000E+000,0.00000000000000E+000,1.99930671521570E+004,1.81756836154107E+004,1.70716725731666E+004,0.00000000000000E+000,0.00000000000000E+000,1.83507489305689E+000,1.87755922198850E+000,1.84385825931728E+000,0.00000000000000E+000,0.00000000000000E+000,2.02439730047287E+004,1.86701243367855E+004,1.78830736434028E+004,2.00247999942702E+004,2.01863257229390E+004,2.02118944960450E+004,1.76593734351854E+004,1.78424326571636E+004,2.00909335504043E+004 +7.80000000000003E-008,1.14617661907007E+023,9.47873048556725E+022,1.32526045937718E+023,3.40349389068842E+020,7.43763517876911E+021,3.49708997268235E+023,2.00224409358283E+004,2.01397571755881E+004,2.03367989484245E+004,1.63634473318960E+004,1.82321438673641E+004,2.01317312377789E+004,0.00000000000000E+000,0.00000000000000E+000,1.99769204428559E+004,1.89618683516504E+004,1.71871224225241E+004,0.00000000000000E+000,0.00000000000000E+000,1.83494546740392E+000,1.88253228794607E+000,1.84487851509803E+000,0.00000000000000E+000,0.00000000000000E+000,2.02482563146978E+004,1.87891631981868E+004,1.75366676339441E+004,2.00224409358283E+004,2.01397571755881E+004,2.02142752642113E+004,1.77790662919423E+004,1.77472718464916E+004,2.00763649883968E+004 +7.82000000000003E-008,1.14792841739616E+023,9.48223408221943E+022,1.32450968866600E+023,3.35344250994300E+020,7.41260948839640E+021,3.49814105167801E+023,2.00217457288417E+004,2.00979721130800E+004,2.03436830757382E+004,1.63674979862121E+004,1.82468266726800E+004,2.01231900798939E+004,0.00000000000000E+000,0.00000000000000E+000,2.00079002063040E+004,1.90587622618048E+004,1.72982086116121E+004,0.00000000000000E+000,0.00000000000000E+000,1.83519361037236E+000,1.88311738580686E+000,1.84584770949390E+000,0.00000000000000E+000,0.00000000000000E+000,2.01736463579563E+004,1.82101034984734E+004,1.74960412297309E+004,2.00217457288417E+004,2.00979721130800E+004,2.02037748205323E+004,1.76391859556402E+004,1.77717101496241E+004,2.00613675757916E+004 +7.84000000000003E-008,1.15008062676821E+023,9.47973151318216E+022,1.32340855828960E+023,3.45354527143384E+020,7.41761462647094E+021,3.49909202791217E+023,2.00022318790273E+004,2.01175292589155E+004,2.02845489554667E+004,1.59674383995805E+004,1.83706896117937E+004,2.01016759042468E+004,0.00000000000000E+000,0.00000000000000E+000,2.00760840452594E+004,1.93624512456257E+004,1.72874135179887E+004,0.00000000000000E+000,0.00000000000000E+000,1.83573713476442E+000,1.88491405652910E+000,1.84575405667405E+000,0.00000000000000E+000,0.00000000000000E+000,2.01190922258292E+004,1.87541287113175E+004,1.73593295929116E+004,2.00022318790273E+004,2.01175292589155E+004,2.01801563753880E+004,1.77064126207224E+004,1.77831456759315E+004,2.00514542606829E+004 +7.86000000000003E-008,1.15233293890176E+023,9.47923099937470E+022,1.32225737653245E+023,3.45354527143384E+020,7.42261976454548E+021,3.50019315828857E+023,2.00410658076320E+004,2.00959480473124E+004,2.02410281550814E+004,1.62905969564060E+004,1.83527432391644E+004,2.00919646137930E+004,0.00000000000000E+000,0.00000000000000E+000,2.00734962151189E+004,1.84720238184499E+004,1.70378897974297E+004,0.00000000000000E+000,0.00000000000000E+000,1.83571657139694E+000,1.87948239020700E+000,1.84355717236192E+000,0.00000000000000E+000,0.00000000000000E+000,2.00799448922771E+004,1.94740514046487E+004,1.74952967225463E+004,2.00410658076320E+004,2.00959480473124E+004,2.01489079395255E+004,1.78120576820154E+004,1.77479553456598E+004,2.00458405002176E+004 +7.88000000000003E-008,1.15508576484276E+023,9.47572740272252E+022,1.32075583511009E+023,3.50359665217926E+020,7.44764545491819E+021,3.50139439142646E+023,2.00222963909436E+004,2.01168845051753E+004,2.01850005908283E+004,1.64363925354967E+004,1.83245180102806E+004,2.00695671483466E+004,0.00000000000000E+000,0.00000000000000E+000,2.00357146000048E+004,1.86788570749150E+004,1.70348064113676E+004,0.00000000000000E+000,0.00000000000000E+000,1.83541576497013E+000,1.88078928731104E+000,1.84352963407621E+000,0.00000000000000E+000,0.00000000000000E+000,2.00892670042084E+004,2.01894689733843E+004,1.77217907771259E+004,2.00222963909436E+004,2.01168845051753E+004,2.01169039233700E+004,1.81402313930981E+004,1.78009466648047E+004,2.00344487839043E+004 +7.90000000000003E-008,1.15738812835704E+023,9.47973151318216E+022,1.31975480749518E+023,3.45354527143384E+020,7.41761462647094E+021,3.50274577870658E+023,2.00044226616601E+004,2.01008439199249E+004,2.01942972626494E+004,1.67715359855368E+004,1.82097635335336E+004,2.00608660565115E+004,0.00000000000000E+000,0.00000000000000E+000,2.00392455296358E+004,1.80432617835756E+004,1.71059221363669E+004,0.00000000000000E+000,0.00000000000000E+000,1.83544392383922E+000,1.87667986493328E+000,1.84416232662053E+000,0.00000000000000E+000,0.00000000000000E+000,2.00218490542040E+004,1.94353130273898E+004,1.77605118388440E+004,2.00044226616601E+004,2.01008439199249E+004,2.01022059244503E+004,1.78933238881465E+004,1.77810527624308E+004,2.00181955450568E+004 +7.92000000000003E-008,1.15929008082537E+023,9.47672843033743E+022,1.31865367711878E+023,3.45354527143384E+020,7.44764545491819E+021,3.50354660079851E+023,1.99989444688692E+004,2.01261637785462E+004,2.01576942767662E+004,1.65641587047822E+004,1.83269845797655E+004,2.00541783481471E+004,0.00000000000000E+000,0.00000000000000E+000,2.00452143381683E+004,1.76804421648366E+004,1.71436339417776E+004,0.00000000000000E+000,0.00000000000000E+000,1.83549150270289E+000,1.87420455373535E+000,1.84449576574283E+000,0.00000000000000E+000,0.00000000000000E+000,1.99840883984188E+004,1.91615776865535E+004,1.75330093082336E+004,1.99989444688692E+004,2.01261637785462E+004,2.00766953130491E+004,1.76242059365272E+004,1.77760841316867E+004,2.00130263987501E+004 +7.94000000000003E-008,1.16144229019742E+023,9.48023202698961E+022,1.31770270088462E+023,3.40349389068842E+020,7.42261976454548E+021,3.50479788531715E+023,1.99654053581000E+004,2.00921087611919E+004,2.01071335984567E+004,1.82932311702960E+004,1.80647491045742E+004,2.00110866598406E+004,0.00000000000000E+000,0.00000000000000E+000,2.00779022862185E+004,1.72884962857187E+004,1.72766329546892E+004,0.00000000000000E+000,0.00000000000000E+000,1.83575157976049E+000,1.87141645727248E+000,1.84566041636218E+000,0.00000000000000E+000,0.00000000000000E+000,2.00176268953307E+004,1.81248628754431E+004,1.77334792349937E+004,1.99654053581000E+004,2.00921087611919E+004,2.00730956684417E+004,1.79705882331832E+004,1.77554824463218E+004,1.99914262754379E+004 +7.96000000000003E-008,1.16379470509246E+023,9.48073254079707E+022,1.31650146774673E+023,3.35344250994300E+020,7.42762490262002E+021,3.50599911845504E+023,1.99587593178273E+004,2.00968138060940E+004,2.00662250675383E+004,1.82350596564542E+004,1.80065846785287E+004,1.99934381764580E+004,0.00000000000000E+000,0.00000000000000E+000,2.00537647171226E+004,1.63751952349436E+004,1.72621680394576E+004,0.00000000000000E+000,0.00000000000000E+000,1.83555961203309E+000,1.86441436671130E+000,1.84553459502111E+000,0.00000000000000E+000,0.00000000000000E+000,2.00233947987924E+004,1.84727093096098E+004,1.76895650774326E+004,1.99587593178273E+004,2.00968138060940E+004,2.00503474716096E+004,1.77991508547071E+004,1.77132714485922E+004,1.99808452240732E+004 +7.98000000000003E-008,1.16574670894153E+023,9.48423613744925E+022,1.31570064565480E+023,3.35344250994300E+020,7.39258893609823E+021,3.50715030021218E+023,1.99434299405326E+004,2.00453386270616E+004,2.00642900896976E+004,1.83080763364999E+004,1.78631949426858E+004,1.99709169559719E+004,0.00000000000000E+000,0.00000000000000E+000,2.00943663813033E+004,1.67829019014498E+004,1.74604552286163E+004,0.00000000000000E+000,0.00000000000000E+000,1.83588226312483E+000,1.86763211459018E+000,1.84724171411678E+000,0.00000000000000E+000,0.00000000000000E+000,1.99858870809762E+004,1.87302848059310E+004,1.75565953679141E+004,1.99434299405326E+004,2.00453386270616E+004,2.00494288789229E+004,1.80162657410937E+004,1.76649900587387E+004,1.99608848946182E+004 +8.00000000000003E-008,1.16744845588687E+023,9.48623819267906E+022,1.31494987494362E+023,3.35344250994300E+020,7.37256838380006E+021,3.50810127644634E+023,1.99179220065240E+004,2.00256830081643E+004,2.00820588373835E+004,1.78994126657177E+004,1.76999448614627E+004,1.99600432310057E+004,0.00000000000000E+000,0.00000000000000E+000,2.00620689780674E+004,1.60693939745987E+004,1.77223189117242E+004,0.00000000000000E+000,0.00000000000000E+000,1.83562570695541E+000,1.86189636746422E+000,1.84943923524273E+000,0.00000000000000E+000,0.00000000000000E+000,1.99813260810079E+004,1.92484976937875E+004,1.74824683153160E+004,1.99179220065240E+004,2.00256830081643E+004,2.00472179285040E+004,1.77960687707838E+004,1.76424841508306E+004,1.99456773581878E+004 +8.02000000000003E-008,1.16874979178625E+023,9.48824024790888E+022,1.31439930975542E+023,3.35344250994300E+020,7.35254783150190E+021,3.50885204715753E+023,1.98947588920669E+004,2.00197474474592E+004,2.00595512688269E+004,1.76416735458800E+004,1.78983225853014E+004,1.99463001373109E+004,0.00000000000000E+000,0.00000000000000E+000,2.00947979365922E+004,1.61033728303786E+004,1.76175817040247E+004,0.00000000000000E+000,0.00000000000000E+000,1.83588568579023E+000,1.86218075931309E+000,1.84856792147946E+000,0.00000000000000E+000,0.00000000000000E+000,1.99608866534270E+004,1.89225737520757E+004,1.73854877755631E+004,1.98947588920669E+004,2.00197474474592E+004,2.00401506550552E+004,1.75975485668576E+004,1.76727808042222E+004,1.99342645226150E+004 +8.04000000000003E-008,1.17070179563533E+023,9.48773973410143E+022,1.31339828214051E+023,3.35344250994300E+020,7.35755296957644E+021,3.50980302339169E+023,1.99184226665568E+004,1.99448698295486E+004,2.01147002714825E+004,1.86629120450514E+004,1.76907723603245E+004,1.99511231384455E+004,0.00000000000000E+000,0.00000000000000E+000,2.00107666538085E+004,1.58315351924657E+004,1.75187373706736E+004,0.00000000000000E+000,0.00000000000000E+000,1.83521653248585E+000,1.85987224093300E+000,1.84773633705104E+000,0.00000000000000E+000,0.00000000000000E+000,1.99501533515845E+004,1.77596997542919E+004,1.75555180336882E+004,1.99184226665568E+004,1.99448698295486E+004,2.00386478844423E+004,1.76319272766964E+004,1.76048484979072E+004,1.99198774202099E+004 +8.06000000000004E-008,1.17230343981918E+023,9.48974178933124E+022,1.31264751142933E+023,3.30339112919758E+020,7.34754269342735E+021,3.51070394824511E+023,1.98882308293499E+004,1.99178700413672E+004,2.01309738132992E+004,1.84394503756335E+004,1.79120345052546E+004,1.99442808599048E+004,0.00000000000000E+000,0.00000000000000E+000,1.99775859509620E+004,1.55720388659221E+004,1.75183990855157E+004,0.00000000000000E+000,0.00000000000000E+000,1.83495080586454E+000,1.85759525156647E+000,1.84773347536256E+000,0.00000000000000E+000,0.00000000000000E+000,1.99426493185172E+004,1.78440364863886E+004,1.75560769980818E+004,1.98882308293499E+004,1.99178700413672E+004,2.00346880915929E+004,1.74890708994275E+004,1.77018557122768E+004,1.99029866730982E+004 +8.08000000000004E-008,1.17490611161794E+023,9.49274487217597E+022,1.31149632967219E+023,3.30339112919758E+020,7.31751186498010E+021,3.51215543828672E+023,1.98620568248456E+004,1.98761124455236E+004,2.01141257441333E+004,1.70807892052202E+004,1.82638101455054E+004,1.99240673489337E+004,0.00000000000000E+000,0.00000000000000E+000,1.99445142073395E+004,1.60204845947102E+004,1.74779584847325E+004,0.00000000000000E+000,0.00000000000000E+000,1.83468509840368E+000,1.86148494652514E+000,1.84739059601703E+000,0.00000000000000E+000,0.00000000000000E+000,1.99475453415848E+004,1.84429333537074E+004,1.76081282219069E+004,1.98620568248456E+004,1.98761124455236E+004,2.00198500672158E+004,1.71901747437192E+004,1.78602784969997E+004,1.98805586432455E+004 +8.10000000000004E-008,1.17750878341670E+023,9.49274487217597E+022,1.31024504515355E+023,3.35344250994300E+020,7.30750158883102E+021,3.51345677418610E+023,1.98340763301131E+004,1.98690408111541E+004,2.01120351762322E+004,1.70758314148569E+004,1.81339565392291E+004,1.99091873137323E+004,0.00000000000000E+000,0.00000000000000E+000,1.99453970882270E+004,1.64091720021971E+004,1.73741759481013E+004,0.00000000000000E+000,0.00000000000000E+000,1.83469220281538E+000,1.86468848189012E+000,1.84650356391292E+000,0.00000000000000E+000,0.00000000000000E+000,1.99163779352496E+004,1.81788131072482E+004,1.74718295323040E+004,1.98340763301131E+004,1.98690408111541E+004,2.00100490059650E+004,1.72160928788974E+004,1.77356230602933E+004,1.98630035262996E+004 +8.12000000000004E-008,1.17886017069683E+023,9.49324538598342E+022,1.30959437720386E+023,3.35344250994300E+020,7.30249645075648E+021,3.51415749351654E+023,1.97994580509011E+004,1.98698341376638E+004,2.00945676224626E+004,1.64632886135224E+004,1.81076720138024E+004,1.98901066102024E+004,0.00000000000000E+000,0.00000000000000E+000,1.99872699595760E+004,1.73264640578063E+004,1.76823904675605E+004,0.00000000000000E+000,0.00000000000000E+000,1.83502844838959E+000,1.87169193188402E+000,1.84910825301930E+000,0.00000000000000E+000,0.00000000000000E+000,1.98729377986968E+004,1.78060235053864E+004,1.75346320286026E+004,1.97994580509011E+004,1.98698341376638E+004,2.00009097955482E+004,1.70891997197287E+004,1.78255226425232E+004,1.98499380193862E+004 +8.14000000000004E-008,1.18096232868814E+023,9.49524744121324E+022,1.30864340096970E+023,3.35344250994300E+020,7.28247589845831E+021,3.51530867527368E+023,1.97693839096705E+004,1.98560384032148E+004,2.01111616410855E+004,1.56201922066768E+004,1.80992912858027E+004,1.98814672646094E+004,0.00000000000000E+000,0.00000000000000E+000,1.99644620414217E+004,1.75302870059388E+004,1.76387771913947E+004,0.00000000000000E+000,0.00000000000000E+000,1.83484546697388E+000,1.87315082922868E+000,1.84874506012932E+000,0.00000000000000E+000,0.00000000000000E+000,1.98511398355608E+004,1.80582190868058E+004,1.74468516340003E+004,1.97693839096705E+004,1.98560384032148E+004,1.99956923579374E+004,1.68501884089207E+004,1.77844522252404E+004,1.98331325411883E+004 +8.16000000000004E-008,1.18321464082168E+023,9.49474692740578E+022,1.30764237335479E+023,3.50359665217926E+020,7.25745020808560E+021,3.51640980565008E+023,1.97821536957273E+004,1.98549773920744E+004,2.00654840715083E+004,1.76479334066463E+004,1.83088151489003E+004,1.98746442816449E+004,0.00000000000000E+000,0.00000000000000E+000,1.99705750912283E+004,1.71832986053913E+004,1.76231938968126E+004,0.00000000000000E+000,0.00000000000000E+000,1.83489454999893E+000,1.87064698417104E+000,1.84861486502675E+000,0.00000000000000E+000,0.00000000000000E+000,1.98058793927246E+004,1.85938357988188E+004,1.70992284764856E+004,1.97821536957273E+004,1.98549773920744E+004,1.99640403223536E+004,1.77967748617513E+004,1.77705131628968E+004,1.98259589256857E+004 +8.18000000000004E-008,1.18521669605150E+023,9.49274487217597E+022,1.30639108883615E+023,3.35344250994300E+020,7.30750158883102E+021,3.51731073050350E+023,1.97756289086354E+004,1.98658116294291E+004,2.00459913873332E+004,1.70505421683531E+004,1.83478703875272E+004,1.98681244018000E+004,0.00000000000000E+000,0.00000000000000E+000,1.99624934724202E+004,1.63072410201872E+004,1.76880873689307E+004,0.00000000000000E+000,0.00000000000000E+000,1.83482965469189E+000,1.86386278732658E+000,1.84915556573580E+000,0.00000000000000E+000,0.00000000000000E+000,1.97494618654638E+004,1.88947837944601E+004,1.73125041921413E+004,1.97756289086354E+004,1.98658116294291E+004,1.99368060042544E+004,1.73860779990843E+004,1.78674062193237E+004,1.98179088957998E+004 +8.20000000000004E-008,1.18776931646951E+023,9.49124333075361E+022,1.30518985569826E+023,3.50359665217926E+020,7.29248617460739E+021,3.51851196364139E+023,1.98021352147610E+004,1.98465156803441E+004,2.00068559418941E+004,1.67335371720473E+004,1.83582379485282E+004,1.98570660661424E+004,0.00000000000000E+000,0.00000000000000E+000,1.99641278500848E+004,1.69231652974879E+004,1.75579605989962E+004,0.00000000000000E+000,0.00000000000000E+000,1.83484278283733E+000,1.86870411152475E+000,1.84806741474814E+000,0.00000000000000E+000,0.00000000000000E+000,1.97161449568456E+004,1.99296344788220E+004,1.69994169435776E+004,1.98021352147610E+004,1.98465156803441E+004,1.99103180518589E+004,1.77157535205287E+004,1.77454214781041E+004,1.98095321816583E+004 +8.22000000000004E-008,1.18927085789188E+023,9.49324538598342E+022,1.30453918774857E+023,3.50359665217926E+020,7.27246562230923E+021,3.51936283711406E+023,1.97771483662885E+004,1.98565368438668E+004,2.00247623322075E+004,1.64432062506626E+004,1.82733555018191E+004,1.98559535242459E+004,0.00000000000000E+000,0.00000000000000E+000,1.99110340049601E+004,1.69556826069626E+004,1.75252761074134E+004,0.00000000000000E+000,0.00000000000000E+000,1.83441523717797E+000,1.86895015959268E+000,1.84779162971119E+000,0.00000000000000E+000,0.00000000000000E+000,1.97118791266667E+004,1.98386138021149E+004,1.70232253537453E+004,1.97771483662885E+004,1.98565368438668E+004,1.99026756051757E+004,1.75712691555853E+004,1.77063763427798E+004,1.98001059132369E+004 +8.24000000000004E-008,1.19092255345647E+023,9.49474692740578E+022,1.30388851979888E+023,3.60369941367009E+020,7.23742965578743E+021,3.52026376196748E+023,1.97716093014942E+004,1.98402313492714E+004,2.00303898670254E+004,1.73946576314994E+004,1.83400132541206E+004,1.98541029297234E+004,0.00000000000000E+000,0.00000000000000E+000,1.98396061811988E+004,1.82851307389302E+004,1.75639616981315E+004,0.00000000000000E+000,0.00000000000000E+000,1.83383655326510E+000,1.87827660757228E+000,1.84811794231331E+000,0.00000000000000E+000,0.00000000000000E+000,1.97358862975437E+004,1.89710095598741E+004,1.67394617077306E+004,1.97716093014942E+004,1.98402313492714E+004,1.98930039011070E+004,1.80961790938373E+004,1.76631356161169E+004,1.97900178300205E+004 +8.26000000000004E-008,1.19302471144778E+023,9.50075309309523E+022,1.30298759494547E+023,3.45354527143384E+020,7.20739882734018E+021,3.52161514924761E+023,1.97962645389414E+004,1.97620107250475E+004,2.00112210287725E+004,1.74861523387540E+004,1.83157712658344E+004,1.98339912067832E+004,0.00000000000000E+000,0.00000000000000E+000,1.98740356549582E+004,1.63609150769040E+004,1.76012314220356E+004,0.00000000000000E+000,0.00000000000000E+000,1.83411599279784E+000,1.86429882676101E+000,1.84843099250064E+000,0.00000000000000E+000,0.00000000000000E+000,1.96839839249570E+004,2.01795806848259E+004,1.68321713590092E+004,1.97962645389414E+004,1.97620107250475E+004,1.98786379563347E+004,1.79653095357319E+004,1.76896457473032E+004,1.97725913485560E+004 +8.28000000000004E-008,1.19472645839313E+023,9.49975206548033E+022,1.30213672147279E+023,3.50359665217926E+020,7.20739882734018E+021,3.52241597133953E+023,1.97869858772900E+004,1.96988571879376E+004,2.00586139966252E+004,1.87151823313097E+004,1.83166804535923E+004,1.98324804858266E+004,0.00000000000000E+000,0.00000000000000E+000,1.98517178997079E+004,1.66630199694122E+004,1.75288109860335E+004,0.00000000000000E+000,0.00000000000000E+000,1.83393496264846E+000,1.86670192352105E+000,1.84782150453311E+000,0.00000000000000E+000,0.00000000000000E+000,1.96551801546043E+004,1.95937520295674E+004,1.67618958501656E+004,1.97869858772900E+004,1.96988571879376E+004,1.98850241576382E+004,1.84131980519698E+004,1.76499850164009E+004,1.97543672997945E+004 +8.30000000000004E-008,1.19657835948071E+023,9.49925155167287E+022,1.30113569385788E+023,3.45354527143384E+020,7.22241424156381E+021,3.52331689619295E+023,1.97743811590200E+004,1.97260819697184E+004,1.99971514581949E+004,1.86150393020173E+004,1.82775097587073E+004,1.98118060299580E+004,0.00000000000000E+000,0.00000000000000E+000,1.98526718111813E+004,1.67897952258841E+004,1.75939688296527E+004,0.00000000000000E+000,0.00000000000000E+000,1.83394270836344E+000,1.86768520711734E+000,1.84837009094597E+000,0.00000000000000E+000,0.00000000000000E+000,1.96578878963232E+004,1.91678533301327E+004,1.68255128331048E+004,1.97743811590200E+004,1.97260819697184E+004,1.98590914013354E+004,1.82796492492300E+004,1.76689809547636E+004,1.97480185165925E+004 +8.32000000000004E-008,1.19843026056829E+023,9.50075309309523E+022,1.30008461486223E+023,3.25333974845217E+020,7.24743993193652E+021,3.52431792380786E+023,1.97575389883997E+004,1.97128783454438E+004,1.99677751706811E+004,1.79570393146797E+004,1.81757346337681E+004,1.97888630337014E+004,0.00000000000000E+000,0.00000000000000E+000,1.99082830681338E+004,1.66004831797232E+004,1.75547658176247E+004,0.00000000000000E+000,0.00000000000000E+000,1.83439302459845E+000,1.86621148145454E+000,1.84804050188314E+000,0.00000000000000E+000,0.00000000000000E+000,1.96163293244061E+004,1.94822115556216E+004,1.68864248127719E+004,1.97575389883997E+004,1.97128783454438E+004,1.98489608754600E+004,1.80325866305454E+004,1.76316088851533E+004,1.97339139493314E+004 +8.34000000000004E-008,1.20003190475214E+023,9.50375617593996E+022,1.29943394691254E+023,3.25333974845217E+020,7.21740910348927E+021,3.52526890004202E+023,1.97458332140577E+004,1.97187874188140E+004,1.99264927506199E+004,1.75197775271978E+004,1.80682820528529E+004,1.97687346229717E+004,0.00000000000000E+000,0.00000000000000E+000,1.98626821704469E+004,1.76159951728622E+004,1.77213576769838E+004,0.00000000000000E+000,0.00000000000000E+000,1.83402394847791E+000,1.87375444344006E+000,1.84943128424456E+000,0.00000000000000E+000,0.00000000000000E+000,1.96821281384788E+004,1.78808874837774E+004,1.66210845229484E+004,1.97458332140577E+004,1.97187874188140E+004,1.98378539982461E+004,1.76510752279938E+004,1.75520336656412E+004,1.97256137121353E+004 +8.36000000000004E-008,1.20113303512854E+023,9.50976234162941E+022,1.29918369000881E+023,3.25333974845217E+020,7.15734744659477E+021,3.52611977351469E+023,1.97186247602959E+004,1.97194579480378E+004,1.98767462154326E+004,1.78207942193982E+004,1.80178098369268E+004,1.97408343394656E+004,0.00000000000000E+000,0.00000000000000E+000,1.99229417424291E+004,1.66004831797232E+004,1.76691594721654E+004,0.00000000000000E+000,0.00000000000000E+000,1.83451131818966E+000,1.86621148145453E+000,1.84899825520457E+000,0.00000000000000E+000,0.00000000000000E+000,1.96947470506380E+004,1.82214290438533E+004,1.65000126320887E+004,1.97186247602959E+004,1.97194579480378E+004,1.98358870962559E+004,1.76058155767706E+004,1.74804687267871E+004,1.97146746296609E+004 +8.38000000000004E-008,1.20278473069314E+023,9.51326593828159E+022,1.29843291929763E+023,3.15323698696133E+020,7.14233203237114E+021,3.52712080112960E+023,1.97435292934654E+004,1.97128045460325E+004,1.98823410495632E+004,1.81166144705926E+004,1.80439293499870E+004,1.97504718867540E+004,0.00000000000000E+000,0.00000000000000E+000,1.98620730566924E+004,1.66955388120149E+004,1.76593381159410E+004,0.00000000000000E+000,0.00000000000000E+000,1.83401900742109E+000,1.86695553359424E+000,1.84891650023478E+000,0.00000000000000E+000,0.00000000000000E+000,1.96462367626034E+004,1.90202363018421E+004,1.64343896187699E+004,1.97435292934654E+004,1.97128045460325E+004,1.98078050470245E+004,1.79934388656538E+004,1.74700931029292E+004,1.97113029160498E+004 +8.40000000000004E-008,1.20498699144594E+023,9.51426696589650E+022,1.29743189168272E+023,3.20328836770675E+020,7.12231148007297E+021,3.52827198288675E+023,1.97210315745098E+004,1.97191367029100E+004,1.98493358607960E+004,1.75925843947167E+004,1.80345030661424E+004,1.97317238901717E+004,0.00000000000000E+000,0.00000000000000E+000,1.98751101697482E+004,1.65227801925193E+004,1.77921017781474E+004,0.00000000000000E+000,0.00000000000000E+000,1.83412469875934E+000,1.86559705091011E+000,1.85001422156769E+000,0.00000000000000E+000,0.00000000000000E+000,1.96193448822913E+004,2.00954084924671E+004,1.62840437451105E+004,1.97210315745098E+004,1.97191367029100E+004,1.97889464651443E+004,1.80309766581297E+004,1.74579547051556E+004,1.96982768085195E+004 +8.42000000000004E-008,1.20673878977203E+023,9.52077364539340E+022,1.29683127511378E+023,3.15323698696133E+020,7.06725496125301E+021,3.52947321602464E+023,1.96594623091997E+004,1.97458550720203E+004,1.98509196097255E+004,1.90757323566945E+004,1.79533489592770E+004,1.97184298596329E+004,0.00000000000000E+000,0.00000000000000E+000,1.98054580795487E+004,1.60812596339091E+004,1.76309842428794E+004,0.00000000000000E+000,0.00000000000000E+000,1.83355846673325E+000,1.86199581232427E+000,1.84867997969153E+000,0.00000000000000E+000,0.00000000000000E+000,1.96717768058654E+004,2.00629609884140E+004,1.63111330924431E+004,1.96594623091997E+004,1.97458550720203E+004,1.97862912051488E+004,1.85509231750802E+004,1.73867608076131E+004,1.96828695350137E+004 +8.44000000000004E-008,1.20844053671737E+023,9.51877159016358E+022,1.29583024749887E+023,3.10318560621591E+020,7.09728578970026E+021,3.53022398673582E+023,1.96559070415738E+004,1.96912356000469E+004,1.98355199989075E+004,1.80372620359866E+004,1.80549795120055E+004,1.96977545258807E+004,0.00000000000000E+000,0.00000000000000E+000,1.97793143698706E+004,1.59559466968813E+004,1.77225199306401E+004,0.00000000000000E+000,0.00000000000000E+000,1.83334493495671E+000,1.86093829605661E+000,1.84944089789492E+000,0.00000000000000E+000,0.00000000000000E+000,1.97082040752343E+004,2.00226066170330E+004,1.63833040542787E+004,1.96559070415738E+004,1.96912356000469E+004,1.97831772361666E+004,1.80514714250198E+004,1.74770907001838E+004,1.96669356141753E+004 +8.46000000000004E-008,1.21024238642421E+023,9.51977261777849E+022,1.29487927126471E+023,3.00308284472508E+020,7.10729606584935E+021,3.53117496296998E+023,1.96483260734906E+004,1.96888532123035E+004,1.98133953175323E+004,1.73646029961243E+004,1.83702858119246E+004,1.96921169770463E+004,0.00000000000000E+000,0.00000000000000E+000,1.97315223238547E+004,1.63378205295599E+004,1.78462656486988E+004,0.00000000000000E+000,0.00000000000000E+000,1.83295316955204E+000,1.86411155300042E+000,1.85045749662176E+000,0.00000000000000E+000,0.00000000000000E+000,1.96974886653598E+004,2.02003166222474E+004,1.63529456406424E+004,1.96483260734906E+004,1.96888532123035E+004,1.97575069398234E+004,1.79119994311754E+004,1.76397714799322E+004,1.96573850131474E+004 +8.48000000000004E-008,1.21224444165402E+023,9.52077364539340E+022,1.29397834641129E+023,3.05313422547049E+020,7.08727551355118E+021,3.53222604196564E+023,1.95988230698452E+004,1.96939812343280E+004,1.98311462341824E+004,1.78551650348102E+004,1.83629396779834E+004,1.96832754780154E+004,0.00000000000000E+000,0.00000000000000E+000,1.97242757021760E+004,1.66102430679318E+004,1.76546253796630E+004,0.00000000000000E+000,0.00000000000000E+000,1.83289360613964E+000,1.86628826035621E+000,1.84887723904067E+000,0.00000000000000E+000,0.00000000000000E+000,1.96501360126990E+004,2.07995397023283E+004,1.66718446184838E+004,1.95988230698452E+004,1.96939812343280E+004,1.97494966739924E+004,1.83744217202274E+004,1.76778965476282E+004,1.96400680799771E+004 +8.50000000000004E-008,1.21394618859937E+023,9.52177467300831E+022,1.29307742155787E+023,2.95303146397966E+020,7.09728578970026E+021,3.53312696681905E+023,1.96248304554109E+004,1.96764901602056E+004,1.98218589207666E+004,1.78913771150340E+004,1.83086861566851E+004,1.96829752105292E+004,0.00000000000000E+000,0.00000000000000E+000,1.96773862286796E+004,1.68278168458654E+004,1.74380216389358E+004,0.00000000000000E+000,0.00000000000000E+000,1.83250717127692E+000,1.86797728718685E+000,1.84705047004666E+000,0.00000000000000E+000,0.00000000000000E+000,1.96362343730063E+004,2.02547435128772E+004,1.67363189669481E+004,1.96248304554109E+004,1.96764901602056E+004,1.97287750316640E+004,1.82903339337231E+004,1.76145338779735E+004,1.96352971859666E+004 +8.52000000000004E-008,1.21549778140247E+023,9.52127415920085E+022,1.29232665084669E+023,3.00308284472508E+020,7.09228065162572E+021,3.53387773753023E+023,1.95792428568891E+004,1.97039978842418E+004,1.98025786412836E+004,1.78150284537616E+004,1.82129413869134E+004,1.96656084512699E+004,0.00000000000000E+000,0.00000000000000E+000,1.97083070691794E+004,1.71345245005188E+004,1.73196434538125E+004,0.00000000000000E+000,0.00000000000000E+000,1.83276220247224E+000,1.87028709194876E+000,1.84603333099477E+000,0.00000000000000E+000,0.00000000000000E+000,1.96118722763457E+004,1.99582480382126E+004,1.68998176001044E+004,1.95792428568891E+004,1.97039978842418E+004,1.97214708714573E+004,1.82536857280207E+004,1.75884475923426E+004,1.96237871795842E+004 +8.54000000000004E-008,1.21770004215527E+023,9.52728032489031E+022,1.29152582875476E+023,3.00308284472508E+020,7.03221899473122E+021,3.53527917619111E+023,1.95699897913131E+004,1.97137839875665E+004,1.97718464709355E+004,1.76931205002301E+004,1.81005348447033E+004,1.96516603409034E+004,0.00000000000000E+000,0.00000000000000E+000,1.96459726822080E+004,1.74759348784176E+004,1.73841902703409E+004,0.00000000000000E+000,0.00000000000000E+000,1.83224727925789E+000,1.87276504677405E+000,1.84658960550777E+000,0.00000000000000E+000,0.00000000000000E+000,1.96405658325776E+004,1.92172312071389E+004,1.67361995003891E+004,1.95699897913131E+004,1.97137839875665E+004,1.96996603858184E+004,1.80774612647766E+004,1.75087854677071E+004,1.96138446291373E+004 +8.56000000000004E-008,1.21950189186211E+023,9.53028340773503E+022,1.29072500666284E+023,2.95303146397966E+020,7.01219844243305E+021,3.53633025518676E+023,1.95578210673049E+004,1.96829245355669E+004,1.97852082752734E+004,1.84221188072807E+004,1.80501484719781E+004,1.96436859966631E+004,0.00000000000000E+000,0.00000000000000E+000,1.96005768303937E+004,1.56702680534972E+004,1.74438237696947E+004,0.00000000000000E+000,0.00000000000000E+000,1.83187028133638E+000,1.85846582379420E+000,1.84709997848137E+000,0.00000000000000E+000,0.00000000000000E+000,1.96559635440465E+004,2.02354418727528E+004,1.64401878671828E+004,1.95578210673049E+004,1.96829245355669E+004,1.96978661134998E+004,1.82052227134074E+004,1.74163234120593E+004,1.95990577315075E+004 +8.58000000000004E-008,1.22090333052298E+023,9.53128443534994E+022,1.29002428733240E+023,2.90298008323424E+020,7.01219844243305E+021,3.53708102589794E+023,1.95605646306163E+004,1.97125955591189E+004,1.97444078129970E+004,1.77669311747275E+004,1.81754510788835E+004,1.96396505710957E+004,0.00000000000000E+000,0.00000000000000E+000,1.96066573112862E+004,1.52151529190479E+004,1.72831902052092E+004,0.00000000000000E+000,0.00000000000000E+000,1.83192087593670E+000,1.85434015127090E+000,1.84571738637719E+000,0.00000000000000E+000,0.00000000000000E+000,1.96203544824128E+004,1.81384096901879E+004,1.64761699716821E+004,1.95605646306163E+004,1.97125955591189E+004,1.96711554012652E+004,1.71849775865348E+004,1.74384321022942E+004,1.95978454719109E+004 +8.60000000000004E-008,1.22295543713354E+023,9.53378700438721E+022,1.28922346524048E+023,3.00308284472508E+020,6.96715219976218E+021,3.53823220765509E+023,1.95400454821846E+004,1.97260020722568E+004,1.96936820038998E+004,1.80829764837526E+004,1.81454543795944E+004,1.96174343762507E+004,0.00000000000000E+000,0.00000000000000E+000,1.96039736382534E+004,1.59583947021432E+004,1.70848636274839E+004,0.00000000000000E+000,0.00000000000000E+000,1.83189854932170E+000,1.86095910987911E+000,1.84397550965891E+000,0.00000000000000E+000,0.00000000000000E+000,1.96350322261625E+004,1.72909715591479E+004,1.65698455002763E+004,1.95400454821846E+004,1.97260020722568E+004,1.96524582974394E+004,1.72758342778758E+004,1.73992621812016E+004,1.95870353451932E+004 +8.62000000000004E-008,1.22505759512485E+023,9.52778083869776E+022,1.28797218072184E+023,3.10318560621591E+020,7.00719330435851E+021,3.53898297836627E+023,1.95148117077172E+004,1.96980468792755E+004,1.96835766681253E+004,1.84012562971967E+004,1.80917590898674E+004,1.95964101258586E+004,0.00000000000000E+000,0.00000000000000E+000,1.96687873728684E+004,1.58090640364493E+004,1.71397341200966E+004,0.00000000000000E+000,0.00000000000000E+000,1.83243611083066E+000,1.85967794640792E+000,1.84446135052875E+000,0.00000000000000E+000,0.00000000000000E+000,1.95686753527309E+004,1.84017267127293E+004,1.67383025000023E+004,1.95148117077172E+004,1.96980468792755E+004,1.96459761600043E+004,1.76986428528411E+004,1.74397156035138E+004,1.95691992869046E+004 +8.64000000000004E-008,1.22695954759318E+023,9.52978289392758E+022,1.28697115310693E+023,2.95303146397966E+020,7.01720358050760E+021,3.54003405736192E+023,1.95471164672445E+004,1.96640486710607E+004,1.96463079429801E+004,1.82014098096043E+004,1.80173987404605E+004,1.95832102155549E+004,0.00000000000000E+000,0.00000000000000E+000,1.97127377624810E+004,1.59017998141416E+004,1.72698322066912E+004,0.00000000000000E+000,0.00000000000000E+000,1.83279868272563E+000,1.86047632215746E+000,1.84560128638813E+000,0.00000000000000E+000,0.00000000000000E+000,1.95091488573079E+004,1.66535735292966E+004,1.64555754832160E+004,1.95471164672445E+004,1.96640486710607E+004,1.96239795102611E+004,1.71265511319999E+004,1.73595520324104E+004,1.95611560257409E+004 +8.66000000000004E-008,1.22871134591927E+023,9.53328649057976E+022,1.28617033101500E+023,2.85292870248882E+020,7.00218816628397E+021,3.54108513635757E+023,1.95248309266607E+004,1.96176223448231E+004,1.96842103975528E+004,1.84120630139216E+004,1.80267244044210E+004,1.95771806928710E+004,0.00000000000000E+000,0.00000000000000E+000,1.96936990692685E+004,1.65415004387158E+004,1.71804844075349E+004,0.00000000000000E+000,0.00000000000000E+000,1.83264181429967E+000,1.86574559504370E+000,1.84482021462642E+000,0.00000000000000E+000,0.00000000000000E+000,1.94721890837330E+004,1.54044357277321E+004,1.66253804084629E+004,1.95248309266607E+004,1.96176223448231E+004,1.96246941369111E+004,1.70276178250138E+004,1.73891841173478E+004,1.95418413723563E+004 +8.68000000000004E-008,1.23046314424535E+023,9.53078392154248E+022,1.28531945754233E+023,3.00308284472508E+020,6.99718302820943E+021,3.54183590706876E+023,1.95650617393003E+004,1.95862346022954E+004,1.96780994048797E+004,1.80960490833040E+004,1.79622883942189E+004,1.95788704981812E+004,0.00000000000000E+000,0.00000000000000E+000,1.96651404067600E+004,1.67172179316954E+004,1.72075500404501E+004,0.00000000000000E+000,0.00000000000000E+000,1.83240595431730E+000,1.86712407097480E+000,1.84505765281979E+000,0.00000000000000E+000,0.00000000000000E+000,1.94207588295799E+004,1.42302784360789E+004,1.67776365176241E+004,1.95650617393003E+004,1.95862346022954E+004,1.95992944715200E+004,1.65952767045161E+004,1.74127182197241E+004,1.95381427816114E+004 +8.70000000000004E-008,1.23206478842921E+023,9.53679008723194E+022,1.28471884097339E+023,2.90298008323424E+020,6.95714192361309E+021,3.54293703744515E+023,1.96230836657159E+004,1.95745360653112E+004,1.96085440861871E+004,1.79412534971670E+004,1.78602451385979E+004,1.95687491983364E+004,0.00000000000000E+000,0.00000000000000E+000,1.96867047546490E+004,1.51366339087919E+004,1.68410007625829E+004,0.00000000000000E+000,0.00000000000000E+000,1.83258411107868E+000,1.85360393248557E+000,1.84177906213520E+000,0.00000000000000E+000,0.00000000000000E+000,1.93885961500303E+004,1.41670480714345E+004,1.67818163532284E+004,1.96230836657159E+004,1.95745360653112E+004,1.95651256857172E+004,1.60813466692887E+004,1.72706206439970E+004,1.95399028707183E+004 +8.72000000000004E-008,1.23281555914039E+023,9.54129471149902E+022,1.28456868683115E+023,2.90298008323424E+020,6.91209568094222E+021,3.54353765401410E+023,1.96237593529612E+004,1.95882165965557E+004,1.96165320736209E+004,1.73642769696444E+004,1.80579534395463E+004,1.95791752173319E+004,0.00000000000000E+000,0.00000000000000E+000,1.96737086510457E+004,1.49795912741806E+004,1.68886293491243E+004,0.00000000000000E+000,0.00000000000000E+000,1.83247678735947E+000,1.85210891104745E+000,1.84221289038595E+000,0.00000000000000E+000,0.00000000000000E+000,1.93233925943048E+004,1.39648497936974E+004,1.67286784028615E+004,1.96237593529612E+004,1.95882165965557E+004,1.95460592095767E+004,1.57274740343572E+004,1.73545707674657E+004,1.95385668372069E+004 +8.74000000000004E-008,1.23491771713170E+023,9.54529882195866E+022,1.28371781335848E+023,2.90298008323424E+020,6.87205457634588E+021,3.54478893853273E+023,1.95831964474242E+004,1.95811014765013E+004,1.95752920137028E+004,1.72731891623904E+004,1.81507605251383E+004,1.95501083115024E+004,0.00000000000000E+000,0.00000000000000E+000,1.97027954567647E+004,1.50188525171515E+004,1.69754697193499E+004,0.00000000000000E+000,0.00000000000000E+000,1.83271680023297E+000,1.85248552542738E+000,1.84299779377628E+000,0.00000000000000E+000,0.00000000000000E+000,1.93297238737924E+004,1.42480019411606E+004,1.65150096985436E+004,1.95831964474242E+004,1.95811014765013E+004,1.95376117490056E+004,1.57808108991663E+004,1.73561438703955E+004,1.95198358006630E+004 +8.76000000000004E-008,1.23706992650375E+023,9.54179522530648E+022,1.28246652883984E+023,2.90298008323424E+020,6.90709054286768E+021,3.54568986338615E+023,1.95943687789184E+004,1.95373703321033E+004,1.95252934891844E+004,1.76501518252062E+004,1.82312905301908E+004,1.95259007010328E+004,0.00000000000000E+000,0.00000000000000E+000,1.97054530572727E+004,1.55292141252896E+004,1.71067756641255E+004,0.00000000000000E+000,0.00000000000000E+000,1.83273869545171E+000,1.85721235106765E+000,1.84416988911995E+000,0.00000000000000E+000,0.00000000000000E+000,1.93294720252445E+004,1.44864175776196E+004,1.66436513283023E+004,1.95943687789184E+004,1.95373703321033E+004,1.95162989236335E+004,1.61529690544692E+004,1.74643494774874E+004,1.95064813957357E+004 +8.78000000000004E-008,1.23817105688015E+023,9.54379728053629E+022,1.28206611779388E+023,2.95303146397966E+020,6.87705971442043E+021,3.54634053133584E+023,1.95937043165586E+004,1.95462244143257E+004,1.95148299275622E+004,1.76366523344824E+004,1.81246055581510E+004,1.95222937820663E+004,0.00000000000000E+000,0.00000000000000E+000,1.96733910959007E+004,1.57474466134242E+004,1.70319791595772E+004,0.00000000000000E+000,0.00000000000000E+000,1.83247416322205E+000,1.85914240456953E+000,1.84350437485728E+000,0.00000000000000E+000,0.00000000000000E+000,1.93196712584765E+004,1.52347471276924E+004,1.68701989932551E+004,1.95937043165586E+004,1.95462244143257E+004,1.95002293463500E+004,1.64242394131506E+004,1.74636759484229E+004,1.95031890944851E+004 +8.80000000000004E-008,1.24062357453667E+023,9.54229573911393E+022,1.28076478189450E+023,2.95303146397966E+020,6.89207512864405E+021,3.54749171309299E+023,1.95758274853545E+004,1.95630812673834E+004,1.94796233820476E+004,1.78518368289861E+004,1.80646143372726E+004,1.95068709917279E+004,0.00000000000000E+000,0.00000000000000E+000,1.96594478778287E+004,1.56702680534972E+004,1.68761107907073E+004,0.00000000000000E+000,0.00000000000000E+000,1.83235886150351E+000,1.85846582379420E+000,1.84209909469805E+000,0.00000000000000E+000,0.00000000000000E+000,1.93018220856361E+004,1.53787545906291E+004,1.70064317481506E+004,1.95758274853545E+004,1.95630812673834E+004,1.94758033859098E+004,1.65395119272579E+004,1.74353182066811E+004,1.94921734477828E+004 +8.82000000000004E-008,1.24182480767456E+023,9.54129471149902E+022,1.28016416532555E+023,3.00308284472508E+020,6.89207512864405E+021,3.54804227828119E+023,1.95493531288008E+004,1.95277958071610E+004,1.94951212726136E+004,1.68924592886148E+004,1.80521111457939E+004,1.94926559268889E+004,0.00000000000000E+000,0.00000000000000E+000,1.96653924014247E+004,1.61101685729318E+004,1.68860774313745E+004,0.00000000000000E+000,0.00000000000000E+000,1.83240803839273E+000,1.86223749703075E+000,1.84218970634906E+000,0.00000000000000E+000,0.00000000000000E+000,1.92938817676336E+004,1.62985926296865E+004,1.72163047973540E+004,1.95493531288008E+004,1.95277958071610E+004,1.94818795539821E+004,1.65070828828398E+004,1.74938588659288E+004,1.94767079609263E+004 +8.84000000000004E-008,1.24317619495469E+023,9.54479830815120E+022,1.27961360013736E+023,2.95303146397966E+020,6.86704943827134E+021,3.54889315175386E+023,1.95277515222826E+004,1.95230976171664E+004,1.94884767635333E+004,1.77154658426027E+004,1.83523190720073E+004,1.94880862429704E+004,0.00000000000000E+000,0.00000000000000E+000,1.95729710686722E+004,1.67120737416526E+004,1.66647958751120E+004,0.00000000000000E+000,0.00000000000000E+000,1.83164019545520E+000,1.86708411774526E+000,1.84015315316178E+000,0.00000000000000E+000,0.00000000000000E+000,1.93433481816191E+004,1.51934056856909E+004,1.74754504194376E+004,1.95277515222826E+004,1.95230976171664E+004,1.94686434593234E+004,1.67081186700957E+004,1.76419492413707E+004,1.94663512574794E+004 +8.86000000000004E-008,1.24492799328078E+023,9.54329676672884E+022,1.27871267528394E+023,3.00308284472508E+020,6.87205457634588E+021,3.54969397384579E+023,1.95247534586078E+004,1.94520299082300E+004,1.95156811125969E+004,1.81194677302984E+004,1.81645199772655E+004,1.94744112758337E+004,0.00000000000000E+000,0.00000000000000E+000,1.95265116618688E+004,1.67930941709484E+004,1.67095820080539E+004,0.00000000000000E+000,0.00000000000000E+000,1.83125154624441E+000,1.86771060060272E+000,1.84056956828299E+000,0.00000000000000E+000,0.00000000000000E+000,1.93898192718206E+004,1.48885927922508E+004,1.72454072070319E+004,1.95247534586078E+004,1.94520299082300E+004,1.94817356166827E+004,1.68178648595444E+004,1.75043205530426E+004,1.94483006807868E+004 +8.88000000000004E-008,1.24612922641867E+023,9.54629984957356E+022,1.27826221285723E+023,3.00308284472508E+020,6.84202374789863E+021,3.55044474455697E+023,1.95407553390154E+004,1.94567075098302E+004,1.94695600628338E+004,1.81520906607335E+004,1.81357836260011E+004,1.94642748972533E+004,0.00000000000000E+000,0.00000000000000E+000,1.94880720320639E+004,1.74380013407520E+004,1.68234103807263E+004,0.00000000000000E+000,0.00000000000000E+000,1.83092862742673E+000,1.87249440815744E+000,1.84161823557004E+000,0.00000000000000E+000,0.00000000000000E+000,1.94116658803677E+004,1.45736471262782E+004,1.72189901210261E+004,1.95407553390154E+004,1.94567075098302E+004,1.94575713165029E+004,1.69161470828939E+004,1.75145157674375E+004,1.94469408162525E+004 +8.90000000000004E-008,1.24808123026774E+023,9.54780139099593E+022,1.27736128800381E+023,3.00308284472508E+020,6.82700833367501E+021,3.55149582355262E+023,1.95400532175305E+004,1.94450881619665E+004,1.94558318623357E+004,1.90437795141233E+004,1.80604545288000E+004,1.94553693154560E+004,0.00000000000000E+000,0.00000000000000E+000,1.94606975765368E+004,1.81966296623455E+004,1.67790749803377E+004,0.00000000000000E+000,0.00000000000000E+000,1.83069790974043E+000,1.87769716887209E+000,1.84121142969046E+000,0.00000000000000E+000,0.00000000000000E+000,1.93845768476631E+004,1.50004832216130E+004,1.73912960831946E+004,1.95400532175305E+004,1.94450881619665E+004,1.94362727516426E+004,1.76367266553390E+004,1.75199643539804E+004,1.94367549457113E+004 +8.92000000000004E-008,1.24928246340563E+023,9.55180550145556E+022,1.27696087695785E+023,3.00308284472508E+020,6.78696722907867E+021,3.55229664564455E+023,1.95549827379457E+004,1.94437040198571E+004,1.94454769310549E+004,1.92566625088148E+004,1.79487024327586E+004,1.94547547637190E+004,0.00000000000000E+000,0.00000000000000E+000,1.94253618151897E+004,1.74000675695204E+004,1.71517628332546E+004,0.00000000000000E+000,0.00000000000000E+000,1.83039916068119E+000,1.87222261464459E+000,1.84456745282680E+000,0.00000000000000E+000,0.00000000000000E+000,1.93494189156023E+004,1.35418366727747E+004,1.74595683711104E+004,1.95549827379457E+004,1.94437040198571E+004,1.94119598968792E+004,1.70876974534777E+004,1.75910060571609E+004,1.94340385155464E+004 +8.94000000000004E-008,1.25073395344725E+023,9.55130498764811E+022,1.27611000348518E+023,2.90298008323424E+020,6.81199291945138E+021,3.55299736497498E+023,1.95480163908658E+004,1.94260711974491E+004,1.94473223632467E+004,1.94711689905335E+004,1.79570769292174E+004,1.94485037926341E+004,0.00000000000000E+000,0.00000000000000E+000,1.94840794698078E+004,1.74916314467312E+004,1.72911513573703E+004,0.00000000000000E+000,0.00000000000000E+000,1.83089501641108E+000,1.87287669908226E+000,1.84578649716162E+000,0.00000000000000E+000,0.00000000000000E+000,1.92569290781398E+004,1.28745466531788E+004,1.73316993829133E+004,1.95480163908658E+004,1.94260711974491E+004,1.94014296703799E+004,1.70121296165677E+004,1.75948232243631E+004,1.94230662945947E+004 +8.96000000000004E-008,1.25218544348887E+023,9.55380755668538E+022,1.27535923277399E+023,2.75282594099799E+020,6.81699805752592E+021,3.55384823844766E+023,1.95025070212535E+004,1.94479530811445E+004,1.94304481177518E+004,1.92848869611099E+004,1.79963161280793E+004,1.94329213693362E+004,0.00000000000000E+000,0.00000000000000E+000,1.94440067411140E+004,1.62757346648933E+004,1.71887307253120E+004,0.00000000000000E+000,0.00000000000000E+000,1.83055692686791E+000,1.86360552782506E+000,1.84489263394015E+000,0.00000000000000E+000,0.00000000000000E+000,1.93101122063527E+004,1.29448564510120E+004,1.72154440121694E+004,1.95025070212535E+004,1.94479530811445E+004,1.93988471819577E+004,1.66204078037118E+004,1.75504869886227E+004,1.94109650135454E+004 +8.98000000000004E-008,1.25423755009943E+023,9.55530909810774E+022,1.27440825653983E+023,2.75282594099799E+020,6.80198264330230E+021,3.55494936882406E+023,1.94599011925655E+004,1.94011477393334E+004,1.94359282950852E+004,1.95106268619462E+004,1.80864273875752E+004,1.94092743646368E+004,0.00000000000000E+000,0.00000000000000E+000,1.94407531774778E+004,1.58204142260887E+004,1.73449777321835E+004,0.00000000000000E+000,0.00000000000000E+000,1.83052941758955E+000,1.85977615190315E+000,1.84625214567174E+000,0.00000000000000E+000,0.00000000000000E+000,1.93223137163996E+004,1.23958783655397E+004,1.71922761791704E+004,1.94599011925655E+004,1.94011477393334E+004,1.94039546287904E+004,1.64358229643612E+004,1.76252691703775E+004,1.93866074296730E+004 +9.00000000000004E-008,1.25553888599881E+023,9.55330704287792E+022,1.27375758859014E+023,2.85292870248882E+020,6.80198264330230E+021,3.55549993401225E+023,1.94540399613815E+004,1.93956934574746E+004,1.94382640317577E+004,1.86137447400415E+004,1.80535941695347E+004,1.94052450515204E+004,0.00000000000000E+000,0.00000000000000E+000,1.93445276140693E+004,1.71405143247245E+004,1.71894736077279E+004,0.00000000000000E+000,0.00000000000000E+000,1.82971176422876E+000,1.87033139717518E+000,1.84489915463085E+000,0.00000000000000E+000,0.00000000000000E+000,1.93844564403785E+004,1.28200919712643E+004,1.73357859989471E+004,1.94540399613815E+004,1.93956934574746E+004,1.93973946922343E+004,1.65261111443037E+004,1.76109533699107E+004,1.93804603930582E+004 +9.02000000000004E-008,1.25699037604043E+023,9.55580961191519E+022,1.27335717754418E+023,3.05313422547049E+020,6.73691584833326E+021,3.55635080748493E+023,1.94546388979059E+004,1.94142643425067E+004,1.93925257954424E+004,1.91877688590561E+004,1.78924437635416E+004,1.93917283766871E+004,0.00000000000000E+000,0.00000000000000E+000,1.94046648313991E+004,1.63863351834970E+004,1.71308785774974E+004,0.00000000000000E+000,0.00000000000000E+000,1.83022368665798E+000,1.86450436296414E+000,1.84438314542802E+000,0.00000000000000E+000,0.00000000000000E+000,1.93179833473383E+004,1.34286182641803E+004,1.74742836133932E+004,1.94546388979059E+004,1.94142643425067E+004,1.93739513312832E+004,1.67489057430660E+004,1.75650310156041E+004,1.93767817001950E+004 +9.04000000000004E-008,1.25869212298577E+023,9.55981372237483E+022,1.27270650959449E+023,3.05313422547049E+020,6.69687474373692E+021,3.55740188648058E+023,1.94185070394337E+004,1.94208994901669E+004,1.93528588818358E+004,1.92566512397345E+004,1.78485961703931E+004,1.93659707117664E+004,0.00000000000000E+000,0.00000000000000E+000,1.94041337136534E+004,1.66848769180124E+004,1.71988695894079E+004,0.00000000000000E+000,0.00000000000000E+000,1.83021917893934E+000,1.86687248925949E+000,1.84498158111001E+000,0.00000000000000E+000,0.00000000000000E+000,1.93447630825259E+004,1.32007778819577E+004,1.75089258896152E+004,1.94185070394337E+004,1.94208994901669E+004,1.93642278555005E+004,1.67936782528596E+004,1.75742237540503E+004,1.93627591552005E+004 +9.06000000000004E-008,1.26054402407335E+023,9.55931320856737E+022,1.27170548197958E+023,3.00308284472508E+020,6.71189015796055E+021,3.55830281133400E+023,1.93860366856036E+004,1.94598000729070E+004,1.93160311749515E+004,1.93267586593194E+004,1.79408635481388E+004,1.93535239636836E+004,0.00000000000000E+000,0.00000000000000E+000,1.93706145801527E+004,1.63757615162481E+004,1.73024732207192E+004,0.00000000000000E+000,0.00000000000000E+000,1.82993420971245E+000,1.86441894440797E+000,1.84588467579701E+000,0.00000000000000E+000,0.00000000000000E+000,1.93602418371441E+004,1.29729334718929E+004,1.73189932544933E+004,1.93860366856036E+004,1.94598000729070E+004,1.93436017721291E+004,1.66740147780441E+004,1.75870545629517E+004,1.93544648615368E+004 +9.08000000000004E-008,1.26234587378019E+023,9.55931320856737E+022,1.27080455712616E+023,3.00308284472508E+020,6.71189015796055E+021,3.55920373618742E+023,1.93536564482476E+004,1.94670839233942E+004,1.92961554579747E+004,1.92461824515156E+004,1.79803699091219E+004,1.93376023288571E+004,0.00000000000000E+000,0.00000000000000E+000,1.93473024501441E+004,1.57307247041756E+004,1.73372656894618E+004,0.00000000000000E+000,0.00000000000000E+000,1.82973545308838E+000,1.85899636221067E+000,1.84618560182088E+000,0.00000000000000E+000,0.00000000000000E+000,1.93809172554120E+004,1.26062486709811E+004,1.72546786713185E+004,1.93536564482476E+004,1.94670839233942E+004,1.93346795064643E+004,1.63572626039925E+004,1.75949476638191E+004,1.93416514797529E+004 +9.10000000000004E-008,1.26344700415659E+023,9.56331731902701E+022,1.27045419746094E+023,3.00308284472508E+020,6.67184905336421E+021,3.55995450689860E+023,1.93494793414104E+004,1.94156000605777E+004,1.92967967633108E+004,1.90120239775349E+004,1.78593639081972E+004,1.93202292149717E+004,0.00000000000000E+000,0.00000000000000E+000,1.94106315010898E+004,1.60722255550391E+004,1.72152689042344E+004,0.00000000000000E+000,0.00000000000000E+000,1.83027431072879E+000,1.86192011165608E+000,1.84512523495682E+000,0.00000000000000E+000,0.00000000000000E+000,1.93361481158391E+004,1.19369582008706E+004,1.74473049450804E+004,1.93494793414104E+004,1.94156000605777E+004,1.93388231136773E+004,1.61522119947265E+004,1.75653511907268E+004,1.93273046470218E+004 +9.12000000000004E-008,1.26474834005597E+023,9.56131526379719E+022,1.26970342674976E+023,3.00308284472508E+020,6.69186960566238E+021,3.56050507208680E+023,1.93239626509305E+004,1.94179900284594E+004,1.93049842284242E+004,1.90655646921046E+004,1.78870237660286E+004,1.93152199320100E+004,0.00000000000000E+000,0.00000000000000E+000,1.94151270181472E+004,1.56168854379645E+004,1.73749815672351E+004,0.00000000000000E+000,0.00000000000000E+000,1.83031243291938E+000,1.85799403570332E+000,1.84651048924197E+000,0.00000000000000E+000,0.00000000000000E+000,1.92987672178664E+004,1.17946588356598E+004,1.73783904363264E+004,1.93239626509305E+004,1.94179900284594E+004,1.93326786711263E+004,1.60108176204287E+004,1.76003437187994E+004,1.93171314067000E+004 +9.14000000000004E-008,1.26634998423982E+023,9.56431834664191E+022,1.26905275880007E+023,3.00308284472508E+020,6.66183877721513E+021,3.56145604832096E+023,1.93056737741323E+004,1.94407597089536E+004,1.92756964678282E+004,1.87392098597415E+004,1.77593068279289E+004,1.93018663690912E+004,0.00000000000000E+000,0.00000000000000E+000,1.93854841642601E+004,1.61101685729318E+004,1.72433082844186E+004,0.00000000000000E+000,0.00000000000000E+000,1.83006074414375E+000,1.86223749703075E+000,1.84537023748424E+000,0.00000000000000E+000,0.00000000000000E+000,1.93322333268296E+004,1.22753355868128E+004,1.71268468413202E+004,1.93056737741323E+004,1.94407597089536E+004,1.93216685145193E+004,1.61418576376552E+004,1.74354195506775E+004,1.93099990092693E+004 +9.16000000000004E-008,1.26775142290069E+023,9.56331731902701E+022,1.26830198808889E+023,3.00308284472508E+020,6.67184905336421E+021,3.56210671627065E+023,1.92822366030266E+004,1.94482282064779E+004,1.92847489594637E+004,1.89509443016339E+004,1.76233593282440E+004,1.92963453264018E+004,0.00000000000000E+000,0.00000000000000E+000,1.93210974158586E+004,1.66413406317925E+004,1.72749780435595E+004,0.00000000000000E+000,0.00000000000000E+000,1.82951147703335E+000,1.86653231174526E+000,1.84564603169237E+000,0.00000000000000E+000,0.00000000000000E+000,1.93539951749233E+004,1.19833390758551E+004,1.72629214596243E+004,1.92822366030266E+004,1.94482282064779E+004,1.93147646274592E+004,1.62936844941716E+004,1.74241284205226E+004,1.93010606749182E+004 +9.18000000000005E-008,1.26980352951125E+023,9.56682091567919E+022,1.26740106323547E+023,2.95303146397966E+020,6.64682336299150E+021,3.56330794940854E+023,1.92638923174105E+004,1.94194751011529E+004,1.92636114228163E+004,1.94870730632275E+004,1.74975206379508E+004,1.92727994092485E+004,0.00000000000000E+000,0.00000000000000E+000,1.93569357839589E+004,1.53615402895700E+004,1.71945909697404E+004,0.00000000000000E+000,0.00000000000000E+000,1.82981764206425E+000,1.85569314973581E+000,1.84494405767268E+000,0.00000000000000E+000,0.00000000000000E+000,1.93413894018205E+004,1.24199882129793E+004,1.71132701678765E+004,1.92638923174105E+004,1.94194751011529E+004,1.93113905199406E+004,1.63087084352215E+004,1.73035980550601E+004,1.92835421732035E+004 +9.20000000000005E-008,1.27185563612182E+023,9.56632040187173E+022,1.26634998423982E+023,2.95303146397966E+020,6.65182850106604E+021,3.56430897702345E+023,1.92306475605087E+004,1.94040522077035E+004,1.92504755678185E+004,1.93148148481356E+004,1.74352890526576E+004,1.92507967727005E+004,0.00000000000000E+000,0.00000000000000E+000,1.93786646563562E+004,1.50913849722362E+004,1.71661094131628E+004,0.00000000000000E+000,0.00000000000000E+000,1.83000273612110E+000,1.85317627650615E+000,1.84469381146278E+000,0.00000000000000E+000,0.00000000000000E+000,1.93270163892850E+004,1.20882960380282E+004,1.72171082221796E+004,1.92306475605087E+004,1.94040522077035E+004,1.93072351388869E+004,1.60637971050056E+004,1.72989914034419E+004,1.92657255677934E+004 +9.22000000000005E-008,1.27375758859014E+023,9.56632040187173E+022,1.26534895662491E+023,2.90298008323424E+020,6.66183877721513E+021,3.56525995325761E+023,1.92337090536885E+004,1.93884784141280E+004,1.92556378902201E+004,2.01223687468697E+004,1.74547801613914E+004,1.92505031575883E+004,0.00000000000000E+000,0.00000000000000E+000,1.93162937034809E+004,1.47047513450157E+004,1.71896951385756E+004,0.00000000000000E+000,0.00000000000000E+000,1.82947035553819E+000,1.84941771187617E+000,1.84490109902384E+000,0.00000000000000E+000,0.00000000000000E+000,1.93133369739389E+004,1.17749253329502E+004,1.71768896958078E+004,1.92337090536885E+004,1.93884784141280E+004,1.92887833858303E+004,1.62221358320809E+004,1.73021356503927E+004,1.92562388932313E+004 +9.24000000000005E-008,1.27535923277399E+023,9.56932348471646E+022,1.26459818591373E+023,2.80287732174340E+020,6.65182850106604E+021,3.56621092949177E+023,1.92383932469092E+004,1.93901076289115E+004,1.92020341125185E+004,2.05591871341391E+004,1.72795844474013E+004,1.92307117398865E+004,0.00000000000000E+000,0.00000000000000E+000,1.92915326153654E+004,1.47033490490130E+004,1.71805655970277E+004,0.00000000000000E+000,0.00000000000000E+000,1.82925807701561E+000,1.84940372977501E+000,1.84482092796340E+000,0.00000000000000E+000,0.00000000000000E+000,1.93415463300527E+004,1.20860185745319E+004,1.73329035026977E+004,1.92383932469092E+004,1.93901076289115E+004,1.92668640383009E+004,1.65039223241441E+004,1.72684762040098E+004,1.92503063451551E+004 +9.26000000000005E-008,1.27696087695785E+023,9.57032451233136E+022,1.26379736382180E+023,2.75282594099799E+020,6.65182850106604E+021,3.56706180296445E+023,1.92202498510566E+004,1.93842170201570E+004,1.91840680241840E+004,1.92208459541343E+004,1.73380000573284E+004,1.92163230946111E+004,0.00000000000000E+000,0.00000000000000E+000,1.92413027236594E+004,1.53650486841966E+004,1.72879527879792E+004,0.00000000000000E+000,0.00000000000000E+000,1.82882582659790E+000,1.85572526823399E+000,1.84575873780835E+000,0.00000000000000E+000,0.00000000000000E+000,1.93824606618256E+004,1.19465290061870E+004,1.72314716995730E+004,1.92202498510566E+004,1.93842170201570E+004,1.92575004977299E+004,1.60550343923042E+004,1.72933838340705E+004,1.92390647929950E+004 +9.28000000000005E-008,1.27821216147648E+023,9.57282708136864E+022,1.26329685001435E+023,2.75282594099799E+020,6.62680281069334E+021,3.56781257367563E+023,1.92090500154795E+004,1.94066551735475E+004,1.91715797617250E+004,1.85000957107637E+004,1.74738317560157E+004,1.92160253894979E+004,0.00000000000000E+000,0.00000000000000E+000,1.92553007492204E+004,1.56548321822680E+004,1.71037232421212E+004,0.00000000000000E+000,0.00000000000000E+000,1.82894650540707E+000,1.85832972600957E+000,1.84414284041101E+000,0.00000000000000E+000,0.00000000000000E+000,1.93335557361776E+004,1.26391150359551E+004,1.70156181776927E+004,1.92090500154795E+004,1.94066551735475E+004,1.92414401942290E+004,1.60199876053681E+004,1.72402071575811E+004,1.92345087923047E+004 +9.30000000000005E-008,1.27981380566034E+023,9.57482913659845E+022,1.26249602792242E+023,2.65272317950715E+020,6.62680281069334E+021,3.56871349852904E+023,1.91780079258817E+004,1.93698991476820E+004,1.91725930906344E+004,1.82325732786108E+004,1.73382171150350E+004,1.91927104433624E+004,0.00000000000000E+000,0.00000000000000E+000,1.91755923089829E+004,1.69348224677025E+004,1.69834871965299E+004,0.00000000000000E+000,0.00000000000000E+000,1.82825704727141E+000,1.86879242371071E+000,1.84306986616481E+000,0.00000000000000E+000,0.00000000000000E+000,1.94297329728115E+004,1.26129056881309E+004,1.73001336513211E+004,1.91780079258817E+004,1.93698991476820E+004,1.92487125311941E+004,1.62432043733750E+004,1.72315458453961E+004,1.92161795034836E+004 +9.32000000000005E-008,1.28136539846344E+023,9.57432862279100E+022,1.26164515444975E+023,2.60267179876173E+020,6.64181822491696E+021,3.56946426924023E+023,1.91514082007271E+004,1.93542209678938E+004,1.91791250345017E+004,1.78940106813905E+004,1.74995010739019E+004,1.91839506627803E+004,0.00000000000000E+000,0.00000000000000E+000,1.91663898166907E+004,1.78523399536839E+004,1.70183526828513E+004,0.00000000000000E+000,0.00000000000000E+000,1.82817709029482E+000,1.87538957887610E+000,1.84338251888100E+000,0.00000000000000E+000,0.00000000000000E+000,1.94096414735357E+004,1.23613093421295E+004,1.72637240658749E+004,1.91514082007271E+004,1.93542209678938E+004,1.92432344796490E+004,1.62732223029043E+004,1.73009889279921E+004,1.92017348931146E+004 +9.34000000000005E-008,1.28281688850506E+023,9.57683119182827E+022,1.26109458926155E+023,2.65272317950715E+020,6.60678225839517E+021,3.57031514271290E+023,1.91736259681730E+004,1.93265775494199E+004,1.91371360682793E+004,1.81003328317244E+004,1.74805877074581E+004,1.91696373653872E+004,0.00000000000000E+000,0.00000000000000E+000,1.92063300965980E+004,1.71066095783412E+004,1.70372546442950E+004,0.00000000000000E+000,0.00000000000000E+000,1.82852357823150E+000,1.87008021250309E+000,1.84355150048507E+000,0.00000000000000E+000,0.00000000000000E+000,1.93892705809334E+004,1.34777226806856E+004,1.68110860750509E+004,1.91736259681730E+004,1.93265775494199E+004,1.92295121039384E+004,1.64841126200992E+004,1.71655012207895E+004,1.91952346732370E+004 +9.36000000000005E-008,1.28451863545041E+023,9.57382810898354E+022,1.26009356164664E+023,2.65272317950715E+020,6.63681308684242E+021,3.57101586204333E+023,1.90928436713923E+004,1.93475322262063E+004,1.91428499109689E+004,1.77176293525698E+004,1.76140058857110E+004,1.91502646491678E+004,0.00000000000000E+000,0.00000000000000E+000,1.91845053079606E+004,1.78795908985514E+004,1.69370602294518E+004,0.00000000000000E+000,0.00000000000000E+000,1.82833441810720E+000,1.87557539459328E+000,1.84265159555478E+000,0.00000000000000E+000,0.00000000000000E+000,1.94295175004247E+004,1.32789898155690E+004,1.68457718687228E+004,1.90928436713923E+004,1.93475322262063E+004,1.92379675685355E+004,1.64706780079260E+004,1.72071690054883E+004,1.91753410787648E+004 +9.38000000000005E-008,1.28652069068022E+023,9.57482913659845E+022,1.25919263679322E+023,2.70277456025257E+020,6.61679253454425E+021,3.57206694103899E+023,1.90844987678880E+004,1.93027337094250E+004,1.91151052365867E+004,1.77779045770142E+004,1.77871687913638E+004,1.91287651849916E+004,0.00000000000000E+000,0.00000000000000E+000,1.92016838355837E+004,1.68099554148576E+004,1.69906064967558E+004,0.00000000000000E+000,0.00000000000000E+000,1.82848334299389E+000,1.86784023730125E+000,1.84313380907158E+000,0.00000000000000E+000,0.00000000000000E+000,1.94304958061599E+004,1.47516795913461E+004,1.65838138449488E+004,1.90844987678880E+004,1.93027337094250E+004,1.92306636447480E+004,1.66333781913563E+004,1.72209251817595E+004,1.91581458591845E+004 +9.40000000000005E-008,1.28782202657960E+023,9.57783221944318E+022,1.25864207160503E+023,2.65272317950715E+020,6.59677198224609E+021,3.57286776313091E+023,1.90452664724849E+004,1.93306081478113E+004,1.90977031232710E+004,1.75390343498383E+004,1.78105425088856E+004,1.91163149745279E+004,0.00000000000000E+000,0.00000000000000E+000,1.92795976217903E+004,1.54744032286505E+004,1.69486821684297E+004,0.00000000000000E+000,0.00000000000000E+000,1.82915556878751E+000,1.85671926839243E+000,1.84275650903460E+000,0.00000000000000E+000,0.00000000000000E+000,1.93658250406423E+004,1.48349744589948E+004,1.63220074302844E+004,1.90452664724849E+004,1.93306081478113E+004,1.92249453805147E+004,1.61912235667543E+004,1.71433744014966E+004,1.91478206271373E+004 +9.42000000000005E-008,1.28962387628644E+023,9.57382810898354E+022,1.25764104399012E+023,2.75282594099799E+020,6.61679253454425E+021,3.57356848246135E+023,1.90458405423077E+004,1.93081806877582E+004,1.91273968613329E+004,1.79328357986902E+004,1.79283924716142E+004,1.91232772536997E+004,0.00000000000000E+000,0.00000000000000E+000,1.92332823132949E+004,1.66896263097582E+004,1.67809046929762E+004,0.00000000000000E+000,0.00000000000000E+000,1.82875660489843E+000,1.86690949455016E+000,1.84122825978920E+000,0.00000000000000E+000,0.00000000000000E+000,1.93325385624648E+004,1.39017989727913E+004,1.61809612852134E+004,1.90458405423077E+004,1.93081806877582E+004,1.92158349411831E+004,1.64207970484139E+004,1.71087078936923E+004,1.91380591592029E+004 +9.44000000000005E-008,1.29122552047029E+023,9.57182605375373E+022,1.25669006775595E+023,2.70277456025257E+020,6.64682336299150E+021,3.57426920179179E+023,1.90549557566525E+004,1.92766042291017E+004,1.91250813685048E+004,1.83172224022429E+004,1.79657274481399E+004,1.91181550292490E+004,0.00000000000000E+000,0.00000000000000E+000,1.92360561851642E+004,1.68942608647979E+004,1.68060298651571E+004,0.00000000000000E+000,0.00000000000000E+000,1.82878055166123E+000,1.86848462441120E+000,1.84145900659160E+000,0.00000000000000E+000,0.00000000000000E+000,1.92773437827230E+004,1.29763191138188E+004,1.64059679715939E+004,1.90549557566525E+004,1.92766042291017E+004,1.91993952831237E+004,1.63749324998561E+004,1.71976084683821E+004,1.91285304298596E+004 +9.46000000000005E-008,1.29257690775042E+023,9.57332759517609E+022,1.25603939980626E+023,2.65272317950715E+020,6.64181822491696E+021,3.57501997250297E+023,1.90675856635968E+004,1.92736612508346E+004,1.91237222620561E+004,1.82624583273413E+004,1.78766517862405E+004,1.91197692173140E+004,0.00000000000000E+000,0.00000000000000E+000,1.91546305214134E+004,1.61187594036888E+004,1.72148422188454E+004,0.00000000000000E+000,0.00000000000000E+000,1.82807480990919E+000,1.86230915517465E+000,1.84512150067190E+000,0.00000000000000E+000,0.00000000000000E+000,1.92704914392397E+004,1.44197418637665E+004,1.64228512043018E+004,1.90675856635968E+004,1.92736612508346E+004,1.91749872195238E+004,1.65607478980174E+004,1.72734893404573E+004,1.91253120357068E+004 +9.48000000000005E-008,1.29387824364980E+023,9.57432862279100E+022,1.25543878323732E+023,2.65272317950715E+020,6.63180794876788E+021,3.57572069183340E+023,1.90398175483938E+004,1.92549355435246E+004,1.91716677096379E+004,1.84541176878582E+004,1.78153162188392E+004,1.91205650654929E+004,0.00000000000000E+000,0.00000000000000E+000,1.91532626383129E+004,1.68918748790317E+004,1.70855808964549E+004,0.00000000000000E+000,0.00000000000000E+000,1.82806290439125E+000,1.86846647354527E+000,1.84398188015034E+000,0.00000000000000E+000,0.00000000000000E+000,1.92180585543293E+004,1.45491162125644E+004,1.64263168906449E+004,1.90398175483938E+004,1.92549355435246E+004,1.91803284472540E+004,1.68920512056615E+004,1.72127989357162E+004,1.91112722554528E+004 +9.50000000000005E-008,1.29578019611813E+023,9.57633067802081E+022,1.25453785838390E+023,2.60267179876173E+020,6.62179767261879E+021,3.57677177082906E+023,1.90101240079200E+004,1.92844740618651E+004,1.91424981644610E+004,1.88410190345843E+004,1.77353175771812E+004,1.91062833016614E+004,0.00000000000000E+000,0.00000000000000E+000,1.91013934322183E+004,1.68893971235063E+004,1.71965764512927E+004,0.00000000000000E+000,0.00000000000000E+000,1.82761023640746E+000,1.86844761926011E+000,1.84496147257640E+000,0.00000000000000E+000,0.00000000000000E+000,1.92433669594782E+004,1.39519283089900E+004,1.64271258170503E+004,1.90101240079200E+004,1.92844740618651E+004,1.91610425974674E+004,1.68864747898275E+004,1.72078726593854E+004,1.91016006771384E+004 +9.52000000000005E-008,1.29723168615974E+023,9.57683119182827E+022,1.25378708767272E+023,2.55262041801632E+020,6.62680281069334E+021,3.57752254154024E+023,1.89999639436726E+004,1.92811756115828E+004,1.91116885418626E+004,1.84556554155377E+004,1.78936874986154E+004,1.90935176111497E+004,0.00000000000000E+000,0.00000000000000E+000,1.91469136965194E+004,1.71546080045609E+004,1.72757789077242E+004,0.00000000000000E+000,0.00000000000000E+000,1.82800762411816E+000,1.87043552535641E+000,1.84565299322645E+000,0.00000000000000E+000,0.00000000000000E+000,1.91972739425386E+004,1.38445571830614E+004,1.62271442108095E+004,1.89999639436726E+004,1.92811756115828E+004,1.91461880130983E+004,1.67591513555550E+004,1.72402025176564E+004,1.90922931044218E+004 +9.54000000000005E-008,1.29858307343987E+023,9.57933376086554E+022,1.25318647110377E+023,2.50256903727090E+020,6.61178739646971E+021,3.57832336363216E+023,1.90338549983407E+004,1.92583412261387E+004,1.90814558827038E+004,1.71664011130838E+004,1.79853213093075E+004,1.90899414286071E+004,0.00000000000000E+000,0.00000000000000E+000,1.91614377131017E+004,1.72483301180606E+004,1.72559645432975E+004,0.00000000000000E+000,0.00000000000000E+000,1.82813403254849E+000,1.87112374236195E+000,1.84548057181835E+000,0.00000000000000E+000,0.00000000000000E+000,1.91414101408019E+004,1.39073640309398E+004,1.61780903159409E+004,1.90338549983407E+004,1.92583412261387E+004,1.91204308092450E+004,1.62400934090546E+004,1.72606861757640E+004,1.90895539195380E+004 +9.56000000000005E-008,1.30038492314670E+023,9.57833273325063E+022,1.25218544348887E+023,2.45251765652548E+020,6.63180794876788E+021,3.57917423710484E+023,1.90482915086800E+004,1.92351429711403E+004,1.90563563092275E+004,1.67465355495969E+004,1.80229992722246E+004,1.90805421500155E+004,0.00000000000000E+000,0.00000000000000E+000,1.91475983246263E+004,1.73458760595524E+004,1.73590029188264E+004,0.00000000000000E+000,0.00000000000000E+000,1.82801358688731E+000,1.87183232009149E+000,1.84637301554210E+000,0.00000000000000E+000,0.00000000000000E+000,1.91180289049368E+004,1.40062433823920E+004,1.61328341485744E+004,1.90482915086800E+004,1.92351429711403E+004,1.90988484383908E+004,1.61122477506366E+004,1.72917631585527E+004,1.90814245459691E+004 +9.58000000000005E-008,1.30178636180758E+023,9.57733170563572E+022,1.25143467277768E+023,2.45251765652548E+020,6.64181822491696E+021,3.57982490505453E+023,1.90345482177535E+004,1.92339443352415E+004,1.90690181291538E+004,1.57197660196354E+004,1.81035343197548E+004,1.90803994283084E+004,0.00000000000000E+000,0.00000000000000E+000,1.91416605636031E+004,1.76710180108305E+004,1.71817499155448E+004,0.00000000000000E+000,0.00000000000000E+000,1.82796185820386E+000,1.87413893397908E+000,1.84483133272998E+000,0.00000000000000E+000,0.00000000000000E+000,1.90741413678698E+004,1.60357171348532E+004,1.60832110114632E+004,1.90345482177535E+004,1.92339443352415E+004,1.90899664120913E+004,1.63436724606209E+004,1.72647724732738E+004,1.90725880160860E+004 +9.60000000000005E-008,1.30298759494547E+023,9.58033478848045E+022,1.25103426173172E+023,2.50256903727090E+020,6.60177712032063E+021,3.58057567576571E+023,1.90299001296770E+004,1.92459391841909E+004,1.90386248086877E+004,1.61858191655866E+004,1.80522628283830E+004,1.90707395331508E+004,0.00000000000000E+000,0.00000000000000E+000,1.91441441520874E+004,1.79311196527055E+004,1.70595911179489E+004,0.00000000000000E+000,0.00000000000000E+000,1.82798349855227E+000,1.87592524345933E+000,1.84375071718522E+000,0.00000000000000E+000,0.00000000000000E+000,1.90499053825537E+004,1.84076189569221E+004,1.62636386144796E+004,1.90299001296770E+004,1.92459391841909E+004,1.90701785999777E+004,1.73082357932573E+004,1.72621277359007E+004,1.90679804352964E+004 +9.62000000000005E-008,1.30448913636783E+023,9.58333787132517E+022,1.25038359378203E+023,2.45251765652548E+020,6.58175656802246E+021,3.58147660061913E+023,1.90290554303446E+004,1.92243408492263E+004,1.90354574183704E+004,1.55166883583029E+004,1.79536831119441E+004,1.90613775807577E+004,0.00000000000000E+000,0.00000000000000E+000,1.90898103355169E+004,1.83212533095235E+004,1.71638856219084E+004,0.00000000000000E+000,0.00000000000000E+000,1.82750882405661E+000,1.87851153700254E+000,1.84467423869172E+000,0.00000000000000E+000,0.00000000000000E+000,1.90541619991251E+004,1.90599055844274E+004,1.65331574576781E+004,1.90290554303446E+004,1.92243408492263E+004,1.90554851621246E+004,1.73128388776307E+004,1.73257539742960E+004,1.90580601462157E+004 +9.64000000000005E-008,1.30579047226721E+023,9.58634095416990E+022,1.24988307997458E+023,2.45251765652548E+020,6.55172573957521E+021,3.58227742271105E+023,1.90204379684150E+004,1.92244807488038E+004,1.90329477568748E+004,1.56317861139702E+004,1.79374753709462E+004,1.90572789653028E+004,0.00000000000000E+000,0.00000000000000E+000,1.90652056194307E+004,1.82283663278418E+004,1.71233795153110E+004,0.00000000000000E+000,0.00000000000000E+000,1.82729300876079E+000,1.87790558982370E+000,1.84431685820612E+000,0.00000000000000E+000,0.00000000000000E+000,1.90355437248275E+004,1.93933107141192E+004,1.66003628096230E+004,1.90204379684150E+004,1.92244807488038E+004,1.90423418904720E+004,1.74345415511339E+004,1.73273814901546E+004,1.90506326850626E+004 +9.66000000000005E-008,1.30719191092808E+023,9.58834300939972E+022,1.24933251478638E+023,2.50256903727090E+020,6.52169491112796E+021,3.58307824480298E+023,1.90124479055721E+004,1.91826330071474E+004,1.90320191751358E+004,1.62561694837409E+004,1.78625665880610E+004,1.90419590690723E+004,0.00000000000000E+000,0.00000000000000E+000,1.90284671067981E+004,1.76124937034521E+004,1.70698613829993E+004,0.00000000000000E+000,0.00000000000000E+000,1.82696975819673E+000,1.87372989626856E+000,1.84384214657590E+000,0.00000000000000E+000,0.00000000000000E+000,1.90914834509332E+004,1.94279812455716E+004,1.64040257807110E+004,1.90124479055721E+004,1.91826330071474E+004,1.90484890049645E+004,1.75487731934081E+004,1.72227644436189E+004,1.90369592285072E+004 +9.68000000000005E-008,1.30879355511193E+023,9.59034506462953E+022,1.24858174407520E+023,2.45251765652548E+020,6.51168463497887E+021,3.58397916965640E+023,1.90182130460296E+004,1.91352352938716E+004,1.90208624445538E+004,1.64008865012701E+004,1.77551853990667E+004,1.90257111218486E+004,0.00000000000000E+000,0.00000000000000E+000,1.90629506301690E+004,1.76245701918391E+004,1.72860797427153E+004,0.00000000000000E+000,0.00000000000000E+000,1.82727320258530E+000,1.87381451863694E+000,1.84574247761530E+000,0.00000000000000E+000,0.00000000000000E+000,1.90436417021366E+004,1.95038771131212E+004,1.64366939226068E+004,1.90182130460296E+004,1.91352352938716E+004,1.90388000786943E+004,1.76373087914361E+004,1.72435051538937E+004,1.90235096431250E+004 +9.70000000000005E-008,1.31099581586473E+023,9.58834300939972E+022,1.24743056231805E+023,2.50256903727090E+020,6.52169491112796E+021,3.58498019727131E+023,1.90029271299543E+004,1.91019869555228E+004,1.90251073939201E+004,1.74662081253004E+004,1.77904290636695E+004,1.90140092351484E+004,0.00000000000000E+000,0.00000000000000E+000,1.90574971211167E+004,1.79311196527055E+004,1.73689636359686E+004,0.00000000000000E+000,0.00000000000000E+000,1.82722528418711E+000,1.87592524345933E+000,1.84645874231443E+000,0.00000000000000E+000,0.00000000000000E+000,1.89972971298996E+004,1.91479361215032E+004,1.66243818383759E+004,1.90029271299543E+004,1.91019869555228E+004,1.90256292458134E+004,1.80822118066478E+004,1.73361339176365E+004,1.90063564236487E+004 +9.72000000000005E-008,1.31249735728709E+023,9.58734198178481E+022,1.24667979160687E+023,2.55262041801632E+020,6.52169491112796E+021,3.58568091660174E+023,1.90103754073135E+004,1.91169268705988E+004,1.89783265311291E+004,1.81395793965577E+004,1.77995947972530E+004,1.90050803506380E+004,0.00000000000000E+000,0.00000000000000E+000,1.90738836301309E+004,1.91180301251720E+004,1.74068764591183E+004,0.00000000000000E+000,0.00000000000000E+000,1.82736918773952E+000,1.88347241411292E+000,1.84678416586968E+000,0.00000000000000E+000,0.00000000000000E+000,1.89640242113437E+004,1.84879997833431E+004,1.64656339986679E+004,1.90103754073135E+004,1.91169268705988E+004,1.89997130205366E+004,1.85085393598863E+004,1.73040062810268E+004,1.90037648816214E+004 +9.74000000000005E-008,1.31479972080138E+023,9.59034506462953E+022,1.24567876399196E+023,2.55262041801632E+020,6.49166408268071E+021,3.58698225250112E+023,1.89983332608660E+004,1.90731154489470E+004,1.89910731098212E+004,1.81261616648578E+004,1.80720671100642E+004,1.89984220465891E+004,0.00000000000000E+000,0.00000000000000E+000,1.90344743508999E+004,1.94749601576711E+004,1.72824803190172E+004,0.00000000000000E+000,0.00000000000000E+000,1.82702269668863E+000,1.88556573927543E+000,1.84571122084726E+000,0.00000000000000E+000,0.00000000000000E+000,1.89343982385888E+004,1.87625737614512E+004,1.65104577534120E+004,1.89983332608660E+004,1.90731154489470E+004,1.89860848899979E+004,1.86803750098347E+004,1.74029521319998E+004,1.89849746090187E+004 +9.76000000000005E-008,1.31630126222375E+023,9.59535020270407E+022,1.24517825018451E+023,2.55262041801632E+020,6.44161270193529E+021,3.58798328011603E+023,1.89814613621282E+004,1.90507609971680E+004,1.89654335714626E+004,1.86406335768610E+004,1.79863863915422E+004,1.89763245184345E+004,0.00000000000000E+000,0.00000000000000E+000,1.90712955981863E+004,1.88949409391873E+004,1.73640146174902E+004,0.00000000000000E+000,0.00000000000000E+000,1.82734647600764E+000,1.88212471309515E+000,1.84641616060971E+000,0.00000000000000E+000,0.00000000000000E+000,1.89263478999696E+004,1.88815767677305E+004,1.63840705701016E+004,1.89814613621282E+004,1.90507609971680E+004,1.89823179142883E+004,1.87802016017280E+004,1.73504640575411E+004,1.89708664737149E+004 +9.78000000000005E-008,1.31835336883431E+023,9.59585071651153E+022,1.24427732533109E+023,2.65272317950715E+020,6.41658701156258E+021,3.58903435911168E+023,1.90024987507888E+004,1.90110942753963E+004,1.89430121118905E+004,1.89370849186742E+004,1.77667941573247E+004,1.89620329013298E+004,0.00000000000000E+000,0.00000000000000E+000,1.90791555237368E+004,2.00263208061268E+004,1.73795689431323E+004,0.00000000000000E+000,0.00000000000000E+000,1.82741543371326E+000,1.88865558520056E+000,1.84654991171927E+000,0.00000000000000E+000,0.00000000000000E+000,1.88935182401927E+004,1.86692316806913E+004,1.63712273860627E+004,1.90024987507888E+004,1.90110942753963E+004,1.89649534790250E+004,1.91579531196830E+004,1.72546874360102E+004,1.89606473683259E+004 +9.80000000000005E-008,1.31935439644922E+023,9.59785277174135E+022,1.24392696566587E+023,2.70277456025257E+020,6.38655618311533E+021,3.58963497568063E+023,1.90200436266083E+004,1.90293949875790E+004,1.89161604127849E+004,1.90921221120867E+004,1.75994163764004E+004,1.89613239575077E+004,0.00000000000000E+000,0.00000000000000E+000,1.90974942017724E+004,2.00970740008646E+004,1.73885011296471E+004,0.00000000000000E+000,0.00000000000000E+000,1.82757611116209E+000,1.88904005509183E+000,1.84662661411167E+000,0.00000000000000E+000,0.00000000000000E+000,1.88242884683124E+004,1.88251331342626E+004,1.65435171006844E+004,1.90200436266083E+004,1.90293949875790E+004,1.89377870354034E+004,1.92901782134858E+004,1.72340860611393E+004,1.89624675874961E+004 +9.82000000000005E-008,1.32100609201382E+023,9.59635123031898E+022,1.24297598943171E+023,2.65272317950715E+020,6.41158187348804E+021,3.59038574639181E+023,1.90003294267691E+004,1.90165517146215E+004,1.89092795564031E+004,1.86280772353354E+004,1.75689692375711E+004,1.89473084837828E+004,0.00000000000000E+000,0.00000000000000E+000,1.91075928328060E+004,1.83948610025131E+004,1.75099536230126E+004,0.00000000000000E+000,0.00000000000000E+000,1.82766446448277E+000,1.87898746301073E+000,1.84766199698556E+000,0.00000000000000E+000,0.00000000000000E+000,1.87958983348662E+004,1.84129289212653E+004,1.67198515353757E+004,1.90003294267691E+004,1.90165517146215E+004,1.89291527774363E+004,1.85018221708432E+004,1.73050431977878E+004,1.89493821280206E+004 +9.84000000000005E-008,1.32200711962872E+023,9.59835328554880E+022,1.24257557838575E+023,2.65272317950715E+020,6.39156132118987E+021,3.59098636296076E+023,1.89756407269559E+004,1.89946419804035E+004,1.89531446025074E+004,1.87965899621763E+004,1.76714484326196E+004,1.89495898669972E+004,0.00000000000000E+000,0.00000000000000E+000,1.90482755324411E+004,1.82660470426362E+004,1.77627336711807E+004,0.00000000000000E+000,0.00000000000000E+000,1.82714419630818E+000,1.87815212641588E+000,1.84977277436827E+000,0.00000000000000E+000,0.00000000000000E+000,1.88061316187539E+004,1.84277177254882E+004,1.63733563838933E+004,1.89756407269559E+004,1.89946419804035E+004,1.89355372343997E+004,1.85444605015316E+004,1.73170823494783E+004,1.89370036758475E+004 +9.86000000000005E-008,1.32285799310140E+023,9.60085585458607E+022,1.24222521872053E+023,2.60267179876173E+020,6.37654590696625E+021,3.59153692814896E+023,1.89972943218912E+004,1.89812072911120E+004,1.89318163430191E+004,1.91529876929068E+004,1.76856153173833E+004,1.89471715132665E+004,0.00000000000000E+000,0.00000000000000E+000,1.89817753284556E+004,1.82462293035814E+004,1.77950338382645E+004,0.00000000000000E+000,0.00000000000000E+000,1.82655718330575E+000,1.87802258752195E+000,1.85003828465672E+000,0.00000000000000E+000,0.00000000000000E+000,1.88354720466473E+004,1.85300594910752E+004,1.64658880095694E+004,1.89972943218912E+004,1.89812072911120E+004,1.89169573670668E+004,1.87242643058113E+004,1.73590439801168E+004,1.89359234061276E+004 +9.88000000000005E-008,1.32435953452376E+023,9.60185688220098E+022,1.24157455077084E+023,2.65272317950715E+020,6.35652535466808E+021,3.59233775024088E+023,1.89799722748549E+004,1.89228875053332E+004,1.89388816060453E+004,1.96466053741691E+004,1.77502733047737E+004,1.89292457413850E+004,0.00000000000000E+000,0.00000000000000E+000,1.89714081062683E+004,1.94252939150122E+004,1.75898417153039E+004,0.00000000000000E+000,0.00000000000000E+000,1.82646531031043E+000,1.88527897047186E+000,1.84833546061359E+000,0.00000000000000E+000,0.00000000000000E+000,1.88730737628840E+004,1.66126939674230E+004,1.64304178309598E+004,1.89799722748549E+004,1.89228875053332E+004,1.89283040730590E+004,1.87047326220008E+004,1.73215206012395E+004,1.89173078054953E+004 +9.90000000000005E-008,1.32556076766165E+023,9.60485996504570E+022,1.24102398558264E+023,2.55262041801632E+020,6.34651507851900E+021,3.59308852095206E+023,1.89596147726172E+004,1.89030714302979E+004,1.89259277484887E+004,1.94667468938791E+004,1.77092781385197E+004,1.89111401025299E+004,0.00000000000000E+000,0.00000000000000E+000,1.89793892122576E+004,1.98318753398060E+004,1.75722477615545E+004,0.00000000000000E+000,0.00000000000000E+000,1.82653604646072E+000,1.88758512746594E+000,1.84818765346123E+000,0.00000000000000E+000,0.00000000000000E+000,1.88808546309326E+004,1.63023776521016E+004,1.65443325984027E+004,1.89596147726172E+004,1.89030714302979E+004,1.89270268499228E+004,1.86479508492510E+004,1.73320763061802E+004,1.89042754691424E+004 +9.92000000000005E-008,1.32741266874923E+023,9.60135636839352E+022,1.23992285520624E+023,2.55262041801632E+020,6.38155104504079E+021,3.59383929166324E+023,1.90069755830829E+004,1.88844736473718E+004,1.88773341901812E+004,1.96022217513362E+004,1.74983122003602E+004,1.89031533316799E+004,0.00000000000000E+000,0.00000000000000E+000,1.89272511499948E+004,2.06794938796681E+004,1.74893716061638E+004,0.00000000000000E+000,0.00000000000000E+000,1.82607290545453E+000,1.89210683744906E+000,1.84748751940969E+000,0.00000000000000E+000,0.00000000000000E+000,1.88869356382288E+004,1.62248392575180E+004,1.67662219831496E+004,1.90069755830829E+004,1.88844736473718E+004,1.88935008654368E+004,1.89178952980376E+004,1.72820725845277E+004,1.89044052415834E+004 +9.94000000000005E-008,1.32896426155234E+023,9.60485996504570E+022,1.23917208449506E+023,2.40246627578006E+020,6.37654590696625E+021,3.59479026789741E+023,1.90181842690493E+004,1.88647185514840E+004,1.88302860902141E+004,2.01059545753647E+004,1.73387994327396E+004,1.88833465655819E+004,0.00000000000000E+000,0.00000000000000E+000,1.89086149267506E+004,2.08607187271218E+004,1.77497993702284E+004,0.00000000000000E+000,0.00000000000000E+000,1.82590676039938E+000,1.89302681832614E+000,1.84966618962063E+000,0.00000000000000E+000,0.00000000000000E+000,1.89086773658332E+004,1.63208362938400E+004,1.67000263342249E+004,1.90181842690493E+004,1.88647185514840E+004,1.88742075374193E+004,1.92149892644603E+004,1.72632726122496E+004,1.88965517072610E+004 +9.96000000000005E-008,1.33026559745172E+023,9.60786304789043E+022,1.23862151930686E+023,2.35241489503464E+020,6.35652535466808E+021,3.59559108998933E+023,1.89695590069317E+004,1.88854239777081E+004,1.88382774054569E+004,2.08780182202921E+004,1.74355565919804E+004,1.88759822467681E+004,0.00000000000000E+000,0.00000000000000E+000,1.88686001976769E+004,2.10392117760409E+004,1.77389409946798E+004,0.00000000000000E+000,0.00000000000000E+000,1.82554894873346E+000,1.89391772821020E+000,1.84957659471218E+000,0.00000000000000E+000,0.00000000000000E+000,1.89201303283603E+004,1.49367216964808E+004,1.67815555131738E+004,1.89695590069317E+004,1.88854239777081E+004,1.88703717599055E+004,1.91986674982285E+004,1.73265178131811E+004,1.88840118447041E+004 +9.98000000000005E-008,1.33191729301632E+023,9.60536047885316E+022,1.23772059445344E+023,2.40246627578006E+020,6.37154076889170E+021,3.59629180931977E+023,1.89074234961722E+004,1.89355495391621E+004,1.88460153221323E+004,2.17032690151156E+004,1.75971468945669E+004,1.88724547079165E+004,0.00000000000000E+000,0.00000000000000E+000,1.89024965515207E+004,2.11450960866026E+004,1.77476301077275E+004,0.00000000000000E+000,0.00000000000000E+000,1.82585214489041E+000,1.89443925134871E+000,1.84964829907214E+000,0.00000000000000E+000,0.00000000000000E+000,1.88501556047057E+004,1.53985716409471E+004,1.64962439647534E+004,1.89074234961722E+004,1.89355495391621E+004,1.88623366453322E+004,1.97209730001817E+004,1.73163346898547E+004,1.88717725537120E+004 +1.00000000000000E-007,1.33411955376912E+023,9.60636150646807E+022,1.23671956683853E+023,2.45251765652548E+020,6.35152021659354E+021,3.59744299107691E+023,1.89028483593757E+004,1.89023320897377E+004,1.88418292240665E+004,2.09630308313559E+004,1.76205137093402E+004,1.88604975516222E+004,0.00000000000000E+000,0.00000000000000E+000,1.89093415614882E+004,1.97608576474700E+004,1.73539723577937E+004,0.00000000000000E+000,0.00000000000000E+000,1.82591324441094E+000,1.88718901449919E+000,1.84632968372399E+000,0.00000000000000E+000,0.00000000000000E+000,1.88042902363952E+004,1.60587798382066E+004,1.68753762944142E+004,1.89028483593757E+004,1.89023320897377E+004,1.88488896266809E+004,1.92094518331568E+004,1.73309573878173E+004,1.88566169692956E+004 diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/externals.ini b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/externals.ini index 563c06535..6706ecfad 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/externals.ini +++ b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/externals.ini @@ -2,6 +2,4 @@ MPI = 1 externalbinary = ./hopr/build/bin/hopr externaldirectory = hopr.ini -externalruntime = pre - -nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime +externalruntime = pre \ No newline at end of file diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/hopr.ini b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/hopr.ini index 7158fe526..1f22cfdad 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/hopr.ini +++ b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/hopr.ini @@ -1,43 +1,24 @@ -!=============================================================================== ! -! MAKEFILE PARAMETER (put a "#" in front, NO blanks!) -!=============================================================================== ! -! This is only a dummy parameter needed for the regression check -#MPI= - !=============================================================================== ! ! OUTPUT !=============================================================================== ! - ProjectName =cube ! name of the project (used for filenames) - Debugvisu =F ! Write debug mesh to tecplot file - Logging =F ! Write log files - +ProjectName =cube ! name of the project (used for filenames) +Debugvisu =F ! Write debug mesh to tecplot file +Logging =F ! Write log files !=============================================================================== ! ! MESH !=============================================================================== ! - Mode =1 ! 1 Cartesian 2 gambit file 3 CGNS - nZones =1 ! number of zones - Corner =(/0.,0.,0.,,4.64E-6,0.,0.,,4.64E-6,4.64E-6,0.,,0.,4.64E-6,0. ,,0.,0.,4.64E-6,,4.64E-6,0.,4.64E-6,,4.64E-6,4.64E-6,4.64E-6,,0.,4.64E-6,4.64E-6/) ! [0,1]x[0,1]x[0,0.05] - nElems =(/1,1,1/) ! Anzahl der Elemente in jede Richtung (nfine 4:16 5:32 6:64 7:128) - BCIndex =(/1,1,1,1,1,1/) ! Indices of UserDefinedBoundaries - elemtype =108 ! Elementform (108: Hexaeder) - useCurveds =F ! T if curved boundaries defined - SpaceQuandt =1. ! characteristic length of the mesh - ConformConnect=T - jacobianTolerance = 1e-27 +Mode =1 ! 1 Cartesian 2 gambit file 3 CGNS +nZones =1 ! number of zones +Corner =(/0.,0.,0.,,4.64E-6,0.,0.,,4.64E-6,4.64E-6,0.,,0.,4.64E-6,0. ,,0.,0.,4.64E-6,,4.64E-6,0.,4.64E-6,,4.64E-6,4.64E-6,4.64E-6,,0.,4.64E-6,4.64E-6/) ! [0,1]x[0,1]x[0,0.05] +nElems =(/1,1,1/) ! Anzahl der Elemente in jede Richtung (nfine 4:16 5:32 6:64 7:128) +BCIndex =(/1,1,1,1,1,1/) ! Indices of UserDefinedBoundaries +elemtype =108 ! Elementform (108: Hexaeder) +useCurveds =F ! T if curved boundaries defined +SpaceQuandt =1. ! characteristic length of the mesh +ConformConnect=T +jacobianTolerance = 1e-27 !=============================================================================== ! ! BOUNDARY CONDITIONS !=============================================================================== ! - nUserDefinedBoundaries=1 - BoundaryName=BC_adiabat ! Outflow: open (absorbing) [for MAXWELL] - BoundaryType=(/4,0,0,0/) ! Outflow: open (absorbing) [for MAXWELL] - -!=============================================================================== ! -! BASIS -!=============================================================================== ! - NVisu = 7 - -!=============================================================================== ! -! SEARCH -!=============================================================================== ! -! nElemsNodeSearch=50 -! RefineSideSearch=50 +BoundaryName=BC_adiabat ! Outflow: open (absorbing) [for MAXWELL] +BoundaryType=(/4,0,0,0/) ! Outflow: open (absorbing) [for MAXWELL] diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini index 525fa4a68..90478fc43 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini +++ b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini @@ -31,31 +31,27 @@ tend = 1E-7 ! End time Analyze_dt = 1E-7 ! Timestep of analyze outputs CFLscale = 0.2 ! Scaling of theoretical CFL number ! =============================================================================== ! -! PARTICLES +! BOUNDARIES ! =============================================================================== ! -Part-maxParticleNumber=500000 -Part-nSpecies=5 -Particles-Species-Database = ../../../SpeciesDatabase.h5 Part-nBounds=1 Part-Boundary1-SourceName=BC_adiabat Part-Boundary1-Condition=reflective Part-FIBGMdeltas=(/4.64E-6,4.64E-6,4.64E-6/) ! =============================================================================== ! -! Species1 - N +! PARTICLES ! =============================================================================== ! -Part-Species1-MacroParticleFactor=500 +Part-maxParticleNumber=500000 +Part-Species$-MacroParticleFactor=500 +Part-nSpecies=5 +Particles-Species-Database = SpeciesDatabase.h5 Part-Species1-SpeciesName=N -! =============================================================================== ! -! Species2 - O -! =============================================================================== ! -Part-Species2-MacroParticleFactor=500 Part-Species2-SpeciesName=O +Part-Species3-SpeciesName=N2 +Part-Species4-SpeciesName=O2 +Part-Species5-SpeciesName=NO ! =============================================================================== ! ! Species3 - N2 ! =============================================================================== ! -Part-Species3-MacroParticleFactor=500 -Part-Species3-SpeciesName=N2 - Part-Species3-nInits=1 Part-Species3-Init1-SpaceIC=cell_local Part-Species3-Init1-velocityDistribution=maxwell_lpn @@ -68,9 +64,6 @@ Part-Species3-Init1-TempRot=30000.0 ! =============================================================================== ! ! Species4 - O2 ! =============================================================================== ! -Part-Species4-MacroParticleFactor=500 -Part-Species4-SpeciesName=O2 - Part-Species4-nInits=1 Part-Species4-Init1-SpaceIC=cell_local Part-Species4-Init1-velocityDistribution=maxwell_lpn @@ -81,82 +74,25 @@ Part-Species4-Init1-MWTemperatureIC=30000.0 Part-Species4-Init1-TempVib=30000.0 Part-Species4-Init1-TempRot=30000.0 ! =============================================================================== ! -! Species5 - NO -! =============================================================================== ! -Part-Species5-MacroParticleFactor=500 -Part-Species5-SpeciesName=NO -! =============================================================================== ! ! Reactions ! =============================================================================== ! DSMC-ChemistryModel=Titan-wo-Argon_18Spec_30Reac_Gokcen2007 - -;DSMC-NumOfReactions=8 - -;!Reaction1 (N2 + molecule -> N + N + molecule) -;DSMC-Reaction1-ReactionName = DISS_N2_MOL -;DSMC-Reaction1-ReactionModel=TCE -;DSMC-Reaction1-Reactants=(/3,0,0/) -;DSMC-Reaction1-Products=(/1,0,1,0/) -;DSMC-Reaction1-NumberOfNonReactives=3 -;DSMC-Reaction1-NonReactiveSpecies=(/3,4,5/) -;!Reaction2 (N2 + atom -> N + N + atom) -;DSMC-Reaction2-ReactionName = DISS_N2_AT -;DSMC-Reaction2-ReactionModel=TCE -;DSMC-Reaction2-Reactants=(/3,0,0/) -;DSMC-Reaction2-Products=(/1,0,1,0/) -;DSMC-Reaction2-NumberOfNonReactives=2 -;DSMC-Reaction2-NonReactiveSpecies=(/1,2/) -;!Reaction3 (O2 + molecule -> O + O + molecule) -;DSMC-Reaction3-ReactionName = DISS_O2_MOL -;DSMC-Reaction3-ReactionModel=TCE -;DSMC-Reaction3-Reactants=(/4,0,0/) -;DSMC-Reaction3-Products=(/2,0,2,0/) -;DSMC-Reaction3-NumberOfNonReactives=3 -;DSMC-Reaction3-NonReactiveSpecies=(/3,4,5/) -;!Reaction4 (O2 + atom --> O + O + atom) -;DSMC-Reaction4-ReactionModel=TCE -;DSMC-Reaction4-Reactants=(/4,0,0/) -;DSMC-Reaction4-Products=(/2,0,2,0/) -;DSMC-Reaction4-NumberOfNonReactives=2 -;DSMC-Reaction4-NonReactiveSpecies=(/1,2/) -;!Reaction5 (NO + molecule --> N + O + molecule) -;DSMC-Reaction5-ReactionModel=TCE -;DSMC-Reaction5-Reactants=(/5,0,0/) -;DSMC-Reaction5-Products=(/1,0,2,0/) -;DSMC-Reaction5-NumberOfNonReactives=3 -;DSMC-Reaction5-NonReactiveSpecies=(/3,4,5/) -;!Reaction6 (NO + atom --> N + O + atom) -;DSMC-Reaction6-ReactionModel=TCE -;DSMC-Reaction6-Reactants=(/5,0,0/) -;DSMC-Reaction6-Products=(/1,0,2,0/) -;DSMC-Reaction6-NumberOfNonReactives=2 -;DSMC-Reaction6-NonReactiveSpecies=(/1,2/) -;!Reaction7 (N2 + O --> NO + N) -;DSMC-Reaction7-ReactionModel=TCE -;DSMC-Reaction7-Reactants=(/3,2,0/) -;DSMC-Reaction7-Products=(/5,1,0,0/) - -;!Reaction8 (NO + O --> N + O2) -;DSMC-Reaction8-ReactionModel=TCE -;DSMC-Reaction8-Reactants=(/5,2,0/) -;DSMC-Reaction8-Products=(/4,1,0,0/) - -;UseDSMC=true -;Particles-DSMCReservoirSim=true -;Particles-DSMCReservoirSimRate=false -;Particles-DSMCReservoirStatistic=false -;Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem) -;Part-NumberOfRandomSeeds=2 -;Particles-RandomSeed1=1 -;Particles-RandomSeed2=2 -;ManualTimeStep=2.0E-10 -;Particles-HaloEpsVelo=5000 -;Particles-DSMC-CalcQualityFactors=F -;Particles-DSMC-BackwardReacRate = true -;Particles-DSMC-PartitionMaxTemp = 120000. -;Particles-DSMC-PartitionInterval= 20. -;Particles-DSMC-ElectronicModel = 0 -;Particles-DSMCElectronicDatabase = DSMCSpecies_electronic_state_full_Data.h5 -;EpsMergeElectronicState = 1E-3 -;Particles-DSMC-RotRelaxProb = 1 -;Particles-DSMC-VibRelaxProb = 1 +UseDSMC=true +Particles-DSMCReservoirSim=true +Particles-DSMCReservoirSimRate=false +Particles-DSMCReservoirStatistic=false +Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem) +Part-NumberOfRandomSeeds=2 +Particles-RandomSeed1=1 +Particles-RandomSeed2=2 +ManualTimeStep=2.0E-10 +Particles-HaloEpsVelo=5000 +Particles-DSMC-CalcQualityFactors=F +Particles-DSMC-BackwardReacRate = true +Particles-DSMC-PartitionMaxTemp = 120000. +Particles-DSMC-PartitionInterval= 20. +Particles-DSMC-ElectronicModel = 0 +Particles-DSMCElectronicDatabase = DSMCSpecies_electronic_state_full_Data.h5 +EpsMergeElectronicState = 1E-3 +Particles-DSMC-RotRelaxProb = 1 +Particles-DSMC-VibRelaxProb = 1 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/Species_Database.h5 b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/Species_Database.h5 deleted file mode 100644 index e0b2353eeaa49ca3bb8549cd6b6d3f13104cdfff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53408 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 F`G10aWpe-k diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/parameter.ini index a45861b64..10635d038 100755 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/parameter.ini +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/parameter.ini @@ -73,7 +73,6 @@ Part-FIBGMdeltas = (/0.01,0.01,0.01/) ! SPECIES ! =============================================================================== ! Part-nSpecies=6 -Particles-Species-Database = Species_Database.h5 ! =============================================================================== ! ! Weighting Factor ! =============================================================================== ! diff --git a/src/io_hdf5/hdf5_input.f90 b/src/io_hdf5/hdf5_input.f90 index f05e88e33..12bfa1a92 100644 --- a/src/io_hdf5/hdf5_input.f90 +++ b/src/io_hdf5/hdf5_input.f90 @@ -62,10 +62,6 @@ MODULE MOD_HDF5_Input MODULE PROCEDURE ReadAttribute END INTERFACE -INTERFACE AttributeExists - MODULE PROCEDURE AttributeExists -END INTERFACE - INTERFACE GetVarnames MODULE PROCEDURE GetVarnames END INTERFACE @@ -606,6 +602,7 @@ SUBROUTINE ReadAttribute(File_ID_in,AttribName,nVal,DatasetName,RealScalar,IntSc StrScalar,LogicalScalar,RealArray,IntArray,StrArray) ! MODULES USE MOD_Globals +USE hdf5 USE,INTRINSIC :: ISO_C_BINDING IMPLICIT NONE !---------------------------------------------------------------------------------------------------------------------------------- @@ -623,11 +620,14 @@ SUBROUTINE ReadAttribute(File_ID_in,AttribName,nVal,DatasetName,RealScalar,IntSc LOGICAL ,INTENT(OUT),OPTIONAL :: LogicalScalar !< Scalar logical attribute !---------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -INTEGER(HID_T) :: Attr_ID,Type_ID,Loc_ID +INTEGER(HID_T) :: Attr_ID,Type_ID,Loc_ID,memtype INTEGER(HSIZE_T), DIMENSION(1) :: Dimsf INTEGER,TARGET :: IntToLog CHARACTER(LEN=255),TARGET :: StrTmp(1) TYPE(C_PTR) :: buf +INTEGER :: pad_type +INTEGER(SIZE_T) , PARAMETER :: sdim = 255 +LOGICAL :: vstatus !================================================================================================================================== LOGWRITE(*,*)' READ ATTRIBUTE "',TRIM(AttribName),'" FROM HDF5 FILE...' @@ -661,7 +661,27 @@ SUBROUTINE ReadAttribute(File_ID_in,AttribName,nVal,DatasetName,RealScalar,IntSc IF(PRESENT(IntArray)) Type_ID=H5T_NATIVE_INTEGER IF(PRESENT(IntScalar)) Type_ID=H5T_NATIVE_INTEGER IF(PRESENT(LogicalScalar)) Type_ID=H5T_NATIVE_INTEGER -IF(PRESENT(StrScalar).OR.PRESENT(StrArray)) CALL H5AGET_TYPE_F(Attr_ID, Type_ID, iError) +IF(PRESENT(StrScalar).OR.PRESENT(StrArray)) THEN + CALL H5AGET_TYPE_F(Attr_ID, Type_ID, iError) + ! Check if string is variable length + call H5Tis_variable_str_f(Type_ID, vstatus, iError) + IF(vstatus) THEN + CALL abort(__STAMP__,'ERROR in ReadAttribute: Read-in of variable length strings is not implemented yet!') + END IF + ! Check the padding type of the string (H5T_STR_SPACEPAD: Pad with spaces Fortran-style, H5T_STR_NULLPAD: Pad with zeros, + ! H5T_STR_NULLTERM: Null terminate C-style) + CALL H5Tget_strpad_f(Type_ID, pad_type, iError) + IF(pad_type.EQ.H5T_STR_NULLTERM_F) THEN + CALL abort(__STAMP__,'ERROR in ReadAttribute: Read-in of null terminated strings is not implemented yet!') + END IF + ! Set the type in case of C type string output (e.g. by h5py) using NULLPAD (based on h5ex_t_stringCatt_F03.f90) + IF(pad_type.EQ.H5T_STR_NULLPAD_F) THEN + ! Create the memory datatype. + CALL H5Tcopy_f(H5T_FORTRAN_S1, memtype, iError) + CALL H5Tset_size_f(memtype, sdim, iError) + Type_ID = memtype + END IF +END IF buf=C_NULL_PTR IF(PRESENT(RealArray)) buf=C_LOC(RealArray) @@ -698,13 +718,18 @@ SUBROUTINE AttributeExists(File_ID_in,AttribName,DatasetName,AttrExists) ! INPUT/OUTPUT VARIABLES INTEGER(HID_T) ,INTENT(IN) :: File_ID_in !< HDF5 file id of opened file CHARACTER(LEN=*) ,INTENT(IN) :: AttribName !< name of attribute to be read -CHARACTER(LEN=*) ,INTENT(IN) :: DatasetName !< dataset name +CHARACTER(LEN=*) ,INTENT(IN) ,OPTIONAL :: DatasetName !< dataset name LOGICAL ,INTENT(OUT) :: AttrExists !---------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -INTEGER(HID_T) :: Attr_ID,Type_ID,Loc_ID +INTEGER(HID_T) :: Attr_ID,Loc_ID !================================================================================================================================== -CALL H5DOPEN_F(File_ID_in, TRIM(DatasetName),Loc_ID, iError) +IF(PRESENT(DatasetName))THEN + ! Open dataset + IF(TRIM(DataSetName).NE.'') CALL H5DOPEN_F(File_ID_in, TRIM(DatasetName),Loc_ID, iError) +ELSE + Loc_ID = File_ID_in +END IF ! Create the attribute for group Loc_ID. CALL H5AOPEN_F(Loc_ID, TRIM(AttribName), Attr_ID, iError) diff --git a/src/particles/boundary/particle_boundary_tools.f90 b/src/particles/boundary/particle_boundary_tools.f90 index 2a36ee9a8..c3ef06c71 100644 --- a/src/particles/boundary/particle_boundary_tools.f90 +++ b/src/particles/boundary/particle_boundary_tools.f90 @@ -41,7 +41,7 @@ SUBROUTINE CalcWallSample(PartID,SurfSideID,SampleType,SurfaceNormal_opt) ! MODULES USE MOD_Particle_Vars USE MOD_Globals ,ONLY: abort,DOTPRODUCT -USE MOD_DSMC_Vars ,ONLY: SpecDSMC,useDSMC,PartStateIntEn,RadialWeighting +USE MOD_DSMC_Vars ,ONLY: useDSMC,PartStateIntEn,RadialWeighting USE MOD_DSMC_Vars ,ONLY: CollisMode,DSMC,AmbipolElecVelo USE MOD_Particle_Boundary_Vars ,ONLY: SampWallState,CalcSurfaceImpact,SWIVarTimeStep USE MOD_part_tools ,ONLY: GetParticleWeight @@ -173,7 +173,6 @@ SUBROUTINE SampleImpactProperties(SurfSideID,SpecID,MPF,ETrans,EVib,ERot,EElec,P !> Sampling of impact energy for each species (trans, rot, vib), impact vector (x,y,z), angle and number of impacts !> !=================================================================================================================================== -!USE MOD_DSMC_Vars ,ONLY: SpecDSMC USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactEnergy,SampWallImpactVector USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactAngle ,SampWallImpactNumber USE MOD_Globals_Vars ,ONLY: PI diff --git a/src/particles/dsmc/dsmc_chemical_init.f90 b/src/particles/dsmc/dsmc_chemical_init.f90 index 50918098d..62b5064d4 100644 --- a/src/particles/dsmc/dsmc_chemical_init.f90 +++ b/src/particles/dsmc/dsmc_chemical_init.f90 @@ -43,6 +43,8 @@ SUBROUTINE DefineParametersChemistry() IMPLICIT NONE !=================================================================================================================================== CALL prms%SetSection("Chemistry") +CALL prms%CreateStringOption( 'DSMC-ChemistryModel', 'Name of available chemistry reaction sets:\n'//& + 'Air_5Spec_11Reac_Park', 'none') CALL prms%CreateIntOption( 'DSMC-NumOfReactions','Number of chemical reactions') CALL prms%CreateLogicalOption( 'DSMC-OverwriteReacDatabase','Flag to set reac parameters manually', '.FALSE.') CALL prms%CreateIntOption( 'DSMC-Reaction[$]-NumberOfNonReactives', & @@ -156,40 +158,54 @@ SUBROUTINE DSMC_chemical_init() !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES CHARACTER(LEN=3) :: hilf -INTEGER :: iReac, iReac2, iSpec, iPart, iReacDiss, iSpec2, iInit, err +INTEGER :: iReac, iReac2, iSpec, iPart, iReacDiss, iSpec2, iInit INTEGER, ALLOCATABLE :: DummyRecomb(:,:) LOGICAL :: DoScat REAL :: BGGasEVib, PhotonEnergy, omega, ChargeProducts, ChargeReactants -INTEGER :: Reactant1, Reactant2, Reactant3, MaxSpecies, ReadInNumOfReact -LOGICAL :: Attr_Exists, DataSetFound -CHARACTER(LEN=64) :: dsetname -INTEGER(HID_T) :: file_id_specdb ! File identifier +INTEGER :: Reactant1, Reactant2, Reactant3, MaxSpecies, ReadInNumOfReact, CustomNumReact !=================================================================================================================================== NbrOfPhotonXsecReactions = 0 -ChemReac%NumOfReact = GETINT('DSMC-NumOfReactions') -ReadInNumOfReact = ChemReac%NumOfReact -ChemReac%NumOfReactWOBackward = ChemReac%NumOfReact -IF(ChemReac%NumOfReact.LE.0) THEN - CALL Abort(__STAMP__,' CollisMode = 3 requires a chemical reaction database. DSMC-NumOfReactions cannot be zero!') -END IF ChemReac%AnyQKReaction = .FALSE. ChemReac%AnyXSecReaction = .FALSE. -ALLOCATE(ChemReac%ArbDiss(ChemReac%NumOfReact)) -! Allowing unspecified non-reactive collision partner (CH4 + M -> CH3 + H + M, e.g. (/1,0,0/) -> (/2,0,3/) -iReacDiss = ChemReac%NumOfReact -DO iReac = 1, ReadInNumOfReact - WRITE(UNIT=hilf,FMT='(I0)') iReac - ChemReac%ArbDiss(iReac)%NumOfNonReactives = GETINT('DSMC-Reaction'//TRIM(hilf)//'-NumberOfNonReactives') - IF(ChemReac%ArbDiss(iReac)%NumOfNonReactives.GT.0) THEN - ALLOCATE(ChemReac%ArbDiss(iReac)%NonReactiveSpecies(ChemReac%ArbDiss(iReac)%NumOfNonReactives)) - ChemReac%ArbDiss(iReac)%NonReactiveSpecies = GETINTARRAY('DSMC-Reaction'//TRIM(hilf)//'-NonReactiveSpecies', & - ChemReac%ArbDiss(iReac)%NumOfNonReactives) - ! First reaction is saved within the dummy input reaction, thus "- 1" - ChemReac%NumOfReact = ChemReac%NumOfReact + ChemReac%ArbDiss(iReac)%NumOfNonReactives - 1 - ChemReac%NumOfReactWOBackward = ChemReac%NumOfReactWOBackward + ChemReac%ArbDiss(iReac)%NumOfNonReactives - 1 + +! Read-in of the name of the chemistry model (number of reactions is then given by the available reactions) +ChemReac%ChemistryModel = TRIM(GETSTR('DSMC-ChemistryModel')) + +IF(ChemReac%ChemistryModel.EQ.'none') THEN + ChemReac%NumOfReact = GETINT('DSMC-NumOfReactions') + ReadInNumOfReact = ChemReac%NumOfReact + ChemReac%NumOfReactWOBackward = ChemReac%NumOfReact + ALLOCATE(ChemReac%ArbDiss(ChemReac%NumOfReact)) + ! Allowing unspecified non-reactive collision partner (CH4 + M -> CH3 + H + M, e.g. (/1,0,0/) -> (/2,0,3/) + DO iReac = 1, ReadInNumOfReact + WRITE(UNIT=hilf,FMT='(I0)') iReac + ChemReac%ArbDiss(iReac)%NumOfNonReactives = GETINT('DSMC-Reaction'//TRIM(hilf)//'-NumberOfNonReactives') + IF(ChemReac%ArbDiss(iReac)%NumOfNonReactives.GT.0) THEN + ALLOCATE(ChemReac%ArbDiss(iReac)%NonReactiveSpecies(ChemReac%ArbDiss(iReac)%NumOfNonReactives)) + ChemReac%ArbDiss(iReac)%NonReactiveSpecies = GETINTARRAY('DSMC-Reaction'//TRIM(hilf)//'-NonReactiveSpecies', & + ChemReac%ArbDiss(iReac)%NumOfNonReactives) + ! First reaction is saved within the dummy input reaction, thus "- 1" + ChemReac%NumOfReact = ChemReac%NumOfReact + ChemReac%ArbDiss(iReac)%NumOfNonReactives - 1 + ChemReac%NumOfReactWOBackward = ChemReac%NumOfReactWOBackward + ChemReac%ArbDiss(iReac)%NumOfNonReactives - 1 + END IF + END DO +ELSE + ! Number of reactions is set based on the chemistry model + CALL GetNumReacFromDatabase(ReadInNumOfReact) + CustomNumReact = GETINT('DSMC-NumOfReactions','0') + IF(CustomNumReact.GT.0) THEN + CALL Abort(__STAMP__,' Custom reactions in addition to a chemistry model are not supported yet!') END IF -END DO +END IF + +IF(ChemReac%NumOfReact.LE.0) THEN + CALL Abort(__STAMP__,' CollisMode = 3 requires a chemical reaction database. DSMC-NumOfReactions cannot be zero!') +END IF + +! Set counter for filling-up the reaction array with the non-reactives at the end of the read-in reaction list. +iReacDiss = ReadInNumOfReact + !----------------------------------------------------------------------------------- ! Flag for the automatic calculation of the backward reaction rate with the partition functions and equilibrium constant. DSMC%BackwardReacRate = GETLOGICAL('Particles-DSMC-BackwardReacRate') @@ -292,100 +308,60 @@ SUBROUTINE DSMC_chemical_init() END DO END IF -ChemReac%DoOverwriteReacParameters = GETLOGICAL('DSMC-OverwriteReacDatabase') -IF(SpeciesDatabase.EQ.'none') THEN - ChemReac%DoOverwriteReacParameters = .TRUE. -END IF +! ChemReac%DoOverwriteReacParameters = GETLOGICAL('DSMC-OverwriteReacDatabase') +! IF(SpeciesDatabase.EQ.'none') THEN +! ChemReac%DoOverwriteReacParameters = .TRUE. +! END IF DoScat = .false. -DO iReac = 1, ReadInNumOfReact - WRITE(UNIT=hilf,FMT='(I0)') iReac - ChemReac%ReactModel(iReac) = TRIM(GETSTR('DSMC-Reaction'//TRIM(hilf)//'-ReactionModel')) - IF (TRIM(ChemReac%ReactModel(iReac)).EQ.'TCE') THEN - ChemReac%ReactionName(iReac)= TRIM(GETSTR('DSMC-Reaction'//TRIM(hilf)//'-ReactionName')) - END IF - ChemReac%Reactants(iReac,:) = GETINTARRAY('DSMC-Reaction'//TRIM(hilf)//'-Reactants',3) - ChemReac%Products(iReac,:) = GETINTARRAY('DSMC-Reaction'//TRIM(hilf)//'-Products',4) - SELECT CASE (TRIM(ChemReac%ReactModel(iReac))) - CASE('TCE') - IF(SpeciesDatabase.NE.'none') THEN - ! Initialize FORTRAN interface. - CALL H5OPEN_F(err) - CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) - LBWRITE (UNIT_stdOut,*) 'Read-in from database for reaction: ', ChemReac%ReactionName(iReac) - dsetname = TRIM('/Reaction/'//TRIM(ChemReac%ReactionName(iReac))) - CALL DatasetExists(file_id_specdb,TRIM(dsetname),DataSetFound) - IF(.NOT.DataSetFound)THEN - Species(iSpec)%DoOverwriteParameters = .TRUE. - SWRITE(*,*) 'WARNING: DataSet not found: ['//TRIM(dsetname)//'] ['//TRIM(SpeciesDatabase)//']' - ELSE - CALL AttributeExists(file_id_specdb,'Arrhenius-Prefactor',TRIM(dsetname), AttrExists=Attr_Exists) - IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'Arrhenius-Prefactor',1,DatasetName = dsetname,RealScalar=ChemReac%Arrhenius_Prefactor(iReac)) - ELSE - ChemReac%Arrhenius_Prefactor(iReac) = 0.0 - END IF - LBWRITE (UNIT_stdOut,*) 'Arrhenius-Prefactor: ', ChemReac%Arrhenius_Prefactor(iReac) - CALL AttributeExists(file_id_specdb,'Arrhenius-Powerfactor',TRIM(dsetname), AttrExists=Attr_Exists) - IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'Arrhenius-Powerfactor',1,DatasetName = dsetname,RealScalar=ChemReac%Arrhenius_Powerfactor(iReac)) - ELSE - ChemReac%Arrhenius_Powerfactor(iReac) = 0.0 - END IF - LBWRITE (UNIT_stdOut,*) 'Arrhenius-Powerfactor: ', ChemReac%Arrhenius_Powerfactor(iReac) - CALL AttributeExists(file_id_specdb,'Activation-Energy_K',TRIM(dsetname), AttrExists=Attr_Exists) - IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'Activation-Energy_K',1,DatasetName = dsetname,RealScalar=ChemReac%EActiv(iReac)) - ChemReac%EActiv(iReac) = ChemReac%EActiv(iReac)*BoltzmannConst - ELSE - ChemReac%EActiv(iReac) = 0.0 - END IF - LBWRITE (UNIT_stdOut,*) 'Activation-Energy_K: ', ChemReac%EActiv(iReac) - END IF - - ! Close the file. - CALL H5FCLOSE_F(file_id_specdb, err) - ! Close FORTRAN interface. - CALL H5CLOSE_F(err) - END IF !database - - IF(ChemReac%DoOverwriteReacParameters) THEN +IF(SpeciesDatabase.EQ.'none') THEN + DO iReac = 1, ReadInNumOfReact + WRITE(UNIT=hilf,FMT='(I0)') iReac + ChemReac%ReactModel(iReac) = TRIM(GETSTR('DSMC-Reaction'//TRIM(hilf)//'-ReactionModel')) + ChemReac%Reactants(iReac,:) = GETINTARRAY('DSMC-Reaction'//TRIM(hilf)//'-Reactants',3) + ChemReac%Products(iReac,:) = GETINTARRAY('DSMC-Reaction'//TRIM(hilf)//'-Products',4) + SELECT CASE (TRIM(ChemReac%ReactModel(iReac))) + CASE('TCE') ! Total Collision Energy: Arrhenius-based chemistry model ChemReac%Arrhenius_Prefactor(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-Arrhenius-Prefactor') ChemReac%Arrhenius_Powerfactor(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-Arrhenius-Powerfactor') ChemReac%EActiv(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-Activation-Energy_K')*BoltzmannConst - END IF + CASE('QK') + ! Quantum Kinetic: Threshold energy based chemistry model + ChemReac%AnyQKReaction = .TRUE. + CASE('XSec') + ! Chemistry model based on cross-section data + ChemReac%AnyXSecReaction = .TRUE. + CASE('CEX') + ! Simple charge exchange reactions + ChemReac%CEXa(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-CEXa','-27.2') + ChemReac%CEXb(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-CEXb','175.269') + ChemReac%DoScat(iReac) = GETLOGICAL('DSMC-Reaction'//TRIM(hilf)//'-DoScat','.FALSE.') + IF (ChemReac%DoScat(iReac)) THEN + DoScat = .true. + ChemReac%ELa(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-ELa','-26.8') + ChemReac%ELb(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-ELb','148.975') + ChemReac%TLU_FileName(iReac) = TRIM(GETSTR('DSMC-Reaction'//TRIM(hilf)//'-TLU_FileName')) + ELSE + ChemReac%MEXa(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-MEXa','-27.2') + ChemReac%MEXb(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-MEXb','175.269') + END IF + CASE('phIon') + ! Photo-ionization reactions + ChemReac%CrossSection(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-CrossSection') + CASE('phIonXSec') + ! Photo-ionization reactions (data read-in from database) + NbrOfPhotonXsecReactions = NbrOfPhotonXsecReactions + 1 + CASE DEFAULT + CALL abort(__STAMP__,'Selected reaction model is not supported in reaction number: ', IntInfoOpt=iReac) + END SELECT + END DO +ELSE + CALL ReadReacFromDatabase(ReadInNumOfReact) +END IF - CASE('QK') - ! Quantum Kinetic: Threshold energy based chemistry model - ChemReac%AnyQKReaction = .TRUE. - CASE('XSec') - ! Chemistry model based on cross-section data - ChemReac%AnyXSecReaction = .TRUE. - CASE('CEX') - ! Simple charge exchange reactions - ChemReac%CEXa(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-CEXa','-27.2') - ChemReac%CEXb(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-CEXb','175.269') - ChemReac%DoScat(iReac) = GETLOGICAL('DSMC-Reaction'//TRIM(hilf)//'-DoScat','.FALSE.') - IF (ChemReac%DoScat(iReac)) THEN - DoScat = .true. - ChemReac%ELa(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-ELa','-26.8') - ChemReac%ELb(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-ELb','148.975') - ChemReac%TLU_FileName(iReac) = TRIM(GETSTR('DSMC-Reaction'//TRIM(hilf)//'-TLU_FileName')) - ELSE - ChemReac%MEXa(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-MEXa','-27.2') - ChemReac%MEXb(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-MEXb','175.269') - END IF - CASE('phIon') - ! Photo-ionization reactions - ChemReac%CrossSection(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-CrossSection') - CASE('phIonXSec') - ! Photo-ionization reactions (data read-in from database) - NbrOfPhotonXsecReactions = NbrOfPhotonXsecReactions + 1 - CASE DEFAULT - CALL abort(__STAMP__,'Selected reaction model is not supported in reaction number: ', IntInfoOpt=iReac) - END SELECT - ! Filling up ChemReac-Array for the given non-reactive dissociation/electron-impact ionization partners +! Filling up ChemReac-Array for the given non-reactive dissociation/electron-impact ionization partners +DO iReac = 1, ReadInNumOfReact IF((ChemReac%Reactants(iReac,2).EQ.0).AND.(ChemReac%Products(iReac,2).EQ.0)) THEN IF(ChemReac%ArbDiss(iReac)%NumOfNonReactives.EQ.0) THEN CALL abort(__STAMP__,'Error in Definition: Non-reacting partner(s) has to be defined!',IntInfoOpt=iReac) @@ -736,63 +712,47 @@ SUBROUTINE DSMC_BackwardRate_init() DO iSpec = 1, nSpecies IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN WRITE(UNIT=hilf,FMT='(I0)') iSpec - - IF(SpeciesDatabase.NE.'none') THEN ! Initialize FORTRAN interface. CALL H5OPEN_F(err) CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) - - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) CALL ReadAttribute(file_id_specdb,'SymmetryFactor',1,DatasetName = dsetname,IntScalar=SpecDSMC(iSpec)%SymmetryFactor) LBWRITE (UNIT_stdOut,*) 'SymmetryFactor: ', SpecDSMC(iSpec)%SymmetryFactor - ! Close the file. CALL H5FCLOSE_F(file_id_specdb, err) ! Close FORTRAN interface. CALL H5CLOSE_F(err) - END IF - IF(ANY(Species(:)%DoOverwriteParameters)) THEN - IF(Species(iSpec)%DoOverwriteParameters) THEN - LBWRITE (UNIT_stdOut,'(66(". "))') - WRITE(UNIT=hilf,FMT='(I0)') iSpec - SpecDSMC(iSpec)%SymmetryFactor = GETINT('Part-Species'//TRIM(hilf)//'-SymmetryFactor') - END IF + IF(Species(iSpec)%DoOverwriteParameters) THEN + LBWRITE (UNIT_stdOut,'(66(". "))') + WRITE(UNIT=hilf,FMT='(I0)') iSpec + SpecDSMC(iSpec)%SymmetryFactor = GETINT('Part-Species'//TRIM(hilf)//'-SymmetryFactor') END IF IF(SpecDSMC(iSpec)%PolyatomicMol) THEN iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray IF(PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN IF(PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1)*SpecDSMC(iSpec)%SymmetryFactor.EQ.0) THEN - CALL abort(& - __STAMP__& - ,'ERROR: Char. rotational temperature or symmetry factor not defined properly for backward rate!', iSpec) + CALL abort(__STAMP__,'ERROR: Char. rotational temperature or symmetry factor not defined properly for backward rate!', iSpec) END IF ELSE IF(PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1)*PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(2) & * PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(3)*SpecDSMC(iSpec)%SymmetryFactor.EQ.0) THEN - CALL abort(& - __STAMP__& - ,'ERROR: Char. rotational temperature or symmetry factor not defined properly for backward rate!', iSpec) + CALL abort(__STAMP__,'ERROR: Char. rotational temperature or symmetry factor not defined properly for backward rate!', iSpec) END IF END IF ELSE IF(SpecDSMC(iSpec)%CharaTRot*SpecDSMC(iSpec)%SymmetryFactor.EQ.0) THEN - CALL abort(& - __STAMP__& - ,'ERROR: Char. rotational temperature or symmetry factor not defined properly for backward rate!', iSpec) + CALL abort(__STAMP__,'ERROR: Char. rotational temperature or symmetry factor not defined properly for backward rate!', iSpec) END IF END IF END IF IF((Species(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN IF(.NOT.ALLOCATED(SpecDSMC(iSpec)%ElectronicState)) THEN - CALL abort(& - __STAMP__& - ,'ERROR: Electronic energy levels required for the calculation of backward reaction rate!',iSpec) + CALL abort(__STAMP__,'ERROR: Electronic energy levels required for the calculation of backward reaction rate!',iSpec) END IF END IF END DO @@ -802,9 +762,7 @@ SUBROUTINE DSMC_BackwardRate_init() IF(MOD(DSMC%PartitionMaxTemp,DSMC%PartitionInterval).EQ.0.0) THEN PartitionArraySize = NINT(DSMC%PartitionMaxTemp / DSMC%PartitionInterval) ELSE - CALL abort(& - __STAMP__& - ,'ERROR in Chemistry Init: Partition temperature limit must be multiple of partition interval!') + CALL abort(__STAMP__,'ERROR in Chemistry Init: Partition temperature limit must be multiple of partition interval!') END IF DO iSpec = 1, nSpecies ALLOCATE(SpecDSMC(iSpec)%PartitionFunction(1:PartitionArraySize)) @@ -873,6 +831,405 @@ SUBROUTINE DSMC_BackwardRate_init() END SUBROUTINE DSMC_BackwardRate_init +SUBROUTINE GetNumReacFromDatabase(ReadInNumOfReact) +!=================================================================================================================================== +!> Determine the number of reactions depending on the selected chemistry model +!=================================================================================================================================== +! use module +USE MOD_io_hdf5 +USE MOD_Globals +USE MOD_Particle_Vars ,ONLY: SpeciesDatabase, Species, nSpecies +USE MOD_DSMC_Vars ,ONLY: ChemReac +USE MOD_HDF5_Input ,ONLY: DatasetExists,nDims,HSize,ReadAttribute,GetDataSize,AttributeExists +USE MOD_StringTools ,ONLY: STRICMP +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +INTEGER,INTENT(OUT) :: ReadInNumOfReact +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +CHARACTER(LEN=256) :: dsetname, groupname, dsetname2 +CHARACTER(LEN=255),ALLOCATABLE :: ModelNames(:), NonReactiveSpeciesName(:) +INTEGER :: storage, max_corder, err +INTEGER :: totalNumReac, ModelNamesSize, iModel, numReac, iSpec, jSpec +INTEGER(HID_T) :: file_id_specdb, group_id, dset_id ! File/group/dataset identifiers +INTEGER(SIZE_T) :: size ! Size of name +INTEGER(HSIZE_T) :: iReac, ReacID +LOGICAL :: GroupFound, AttrExists, SpeciesFound +!=================================================================================================================================== + +! 1) Open the species database +! Initialize FORTRAN interface +CALL H5OPEN_F(err) +! Open the file +CALL H5FOPEN_F(TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) +! Check if the REACTIONS group exists +groupname = 'Reactions' +CALL H5LEXISTS_F(file_id_specdb, TRIM(groupname), GroupFound, err) +! Abort if the group does not exist +IF(.NOT.GroupFound) CALL abort(__STAMP__,'ERROR in SpeciesDatabase: No reactions group found!') +! Open the group and get number of available reactions in the database +CALL H5GOPEN_F(file_id_specdb,TRIM(groupname), group_id, err) +CALL H5Gget_info_f(group_id, storage, totalNumReac, max_corder, err) +IF(totalNumReac.EQ.0) CALL abort(__STAMP__,'ERROR in SpeciesDatabase: No reactions found!') + +! Loop over all the reactions and filter out the selected chemistry model +numReac = 0 +ALLOCATE(ChemReac%totalReacToModel(totalNumReac)) +DO iReac = 0, totalNumReac-1 + ! Get name and size of name + CALL H5Lget_name_by_idx_f(group_id, ".", H5_INDEX_NAME_F, H5_ITER_INC_F, iReac, dsetname, err, size) + dsetname2 = TRIM(groupname)//'/'//TRIM(dsetname) + ! Open the reaction dataset + CALL H5DOPEN_F(file_id_specdb, dsetname2, dset_id, err) + ! Get the size of the attribute array + CALL GetDataSize(dset_id,'ChemistryModel',nDims,HSize,attrib=.TRUE.) + ModelNamesSize = INT(HSize(1),4) + IF(ALLOCATED(ModelNames)) THEN + DEALLOCATE(ModelNames) + ALLOCATE(ModelNames(ModelNamesSize)) + ELSE + ALLOCATE(ModelNames(ModelNamesSize)) + END IF + ModelNames = '' + CALL ReadAttribute(file_id_specdb,'ChemistryModel',ModelNamesSize,TRIM(dsetname2),StrArray=ModelNames) + DO iModel = 1,ModelNamesSize + IF(STRICMP(ChemReac%ChemistryModel,ModelNames(iModel))) THEN + numReac = numReac + 1 + ChemReac%totalReacToModel(numReac) = INT(iReac,4) + END IF + END DO + CALL H5DCLOSE_F(dset_id, err) +END DO + +! Set the number of reactions as found in the database +ChemReac%NumOfReact = numReac +ChemReac%NumOfReactWOBackward = numReac +ReadInNumOfReact = numReac +ALLOCATE(ChemReac%ArbDiss(numReac)) + +! Look for the definition of the non-reactive species +DO iReac = 1, numReac + ReacID = ChemReac%totalReacToModel(iReac) + ! Get name and size of name + CALL H5Lget_name_by_idx_f(group_id, ".", H5_INDEX_NAME_F, H5_ITER_INC_F, ReacID, dsetname, err, size) + dsetname2 = TRIM(groupname)//'/'//TRIM(dsetname) + ! Open the reaction dataset + CALL H5DOPEN_F(file_id_specdb, dsetname2, dset_id, err) + ! Check if the non-reactive species list exists + CALL AttributeExists(file_id_specdb,'NonReactiveSpecies',TRIM(dsetname2), AttrExists=AttrExists) + IF(AttrExists) THEN + ! Get the size of the attribute array + CALL GetDataSize(dset_id,'NonReactiveSpecies',nDims,HSize,attrib=.TRUE.) + ChemReac%ArbDiss(iReac)%NumOfNonReactives = INT(HSize(1),4) + IF(ChemReac%ArbDiss(iReac)%NumOfNonReactives.GT.0) THEN + ALLOCATE(ChemReac%ArbDiss(iReac)%NonReactiveSpecies(ChemReac%ArbDiss(iReac)%NumOfNonReactives)) + ALLOCATE(NonReactiveSpeciesName(ChemReac%ArbDiss(iReac)%NumOfNonReactives)) + ! Read-in the non-reactive species names array + CALL ReadAttribute(file_id_specdb,'NonReactiveSpecies',ChemReac%ArbDiss(iReac)%NumOfNonReactives,TRIM(dsetname2),StrArray=NonReactiveSpeciesName) + ! Find the index of the respective species + DO iSpec = 1, ChemReac%ArbDiss(iReac)%NumOfNonReactives + SpeciesFound = .FALSE. + DO jSpec = 1, nSpecies + IF(STRICMP(NonReactiveSpeciesName(iSpec),Species(jSpec)%Name)) THEN + ChemReac%ArbDiss(iReac)%NonReactiveSpecies(iSpec) = jSpec + SpeciesFound = .TRUE. + EXIT + END IF + END DO + IF(.NOT.SpeciesFound) CALL abort(__STAMP__,'ERROR in SpeciesDatabase: Species defined as non-reactive has not beend found!') + END DO + DEALLOCATE(NonReactiveSpeciesName) + ! First reaction is saved within the dummy input reaction, thus "- 1" + ChemReac%NumOfReact = ChemReac%NumOfReact + ChemReac%ArbDiss(iReac)%NumOfNonReactives - 1 + ChemReac%NumOfReactWOBackward = ChemReac%NumOfReactWOBackward + ChemReac%ArbDiss(iReac)%NumOfNonReactives - 1 + END IF + ELSE + ChemReac%ArbDiss(iReac)%NumOfNonReactives = 0 + END IF +END DO + +! Close the group and the file +CALL H5GCLOSE_F(group_id, err) +CALL H5FCLOSE_F(file_id_specdb, err) +! Close FORTRAN interface +CALL H5CLOSE_F(err) + +END SUBROUTINE GetNumReacFromDatabase + + +SUBROUTINE ReadReacFromDatabase(ReadInNumOfReact) +!=================================================================================================================================== +!> Read-in of the reactions from the species database, depending on whether the reactions are defined in the ini or by the chemistry +!> model +!=================================================================================================================================== +! use module +USE MOD_io_hdf5 +USE MOD_Globals +USE MOD_ReadInTools +USE MOD_Globals_Vars ,ONLY: BoltzmannConst +USE MOD_Particle_Vars ,ONLY: SpeciesDatabase, Species, nSpecies +USE MOD_DSMC_Vars ,ONLY: ChemReac +USE MOD_HDF5_Input ,ONLY: DatasetExists,nDims,HSize,ReadAttribute,GetDataSize,AttributeExists +USE MOD_StringTools ,ONLY: STRICMP +USE MOD_MCC_Vars ,ONLY: NbrOfPhotonXsecReactions +#if USE_LOADBALANCE +USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance +#endif /*USE_LOADBALANCE*/ +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER,INTENT(IN) :: ReadInNumOfReact +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +CHARACTER(LEN=256) :: dsetname, groupname, dsetname2 +INTEGER :: err +INTEGER(HID_T) :: file_id_specdb, group_id, dset_id ! File/group/dataset identifiers +INTEGER(SIZE_T) :: size ! Size of name +INTEGER(HSIZE_T) :: ReacID +INTEGER :: nSets, start +LOGICAL :: AttrExists, GroupFound, SpeciesFound +INTEGER :: iReac, iVar, indexSubset, iSpec, iProd +CHARACTER(LEN=32) :: hilf +CHARACTER(LEN=255) :: reacNameReactants, reacNameProducts +CHARACTER(LEN=255) :: ReactantNames(3), ProductNames(4) +!=================================================================================================================================== + +! Initialize FORTRAN interface. +CALL H5OPEN_F(err) +CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) +! Check if the REACTIONS group exists +groupname = 'Reactions' +CALL H5LEXISTS_F(file_id_specdb, TRIM(groupname), GroupFound, err) +IF(.NOT.GroupFound) CALL abort(__STAMP__,'ERROR in SpeciesDatabase: No reactions group found!') +! Open the group and get number of available reactions in the database +CALL H5GOPEN_F(file_id_specdb,TRIM(groupname), group_id, err) + +IF(ChemReac%ChemistryModel.EQ.'none') THEN + DO iReac = 1, ReadInNumOfReact + ! Read-in the reaction name from the parameter file by combining the reactant and product definition + WRITE(UNIT=hilf,FMT='(I0)') iReac + ChemReac%ReactModel(iReac) = TRIM(GETSTR('DSMC-Reaction'//TRIM(hilf)//'-ReactionModel')) + ChemReac%Reactants(iReac,:) = GETINTARRAY('DSMC-Reaction'//TRIM(hilf)//'-Reactants',3) + ChemReac%Products(iReac,:) = GETINTARRAY('DSMC-Reaction'//TRIM(hilf)//'-Products',4) + ! Get the first reactant and write its species name to the string + IF(ChemReac%Reactants(iReac,1).NE.0) THEN + reacNameReactants = TRIM(Species(ChemReac%Reactants(iReac,1))%Name) + ELSE + CALL abort(__STAMP__,'ERROR in parameter.ini: First reactant cannot be zero!') + END IF + ! Add additional reactants to the string + DO iVar = 2, 3 + IF(ChemReac%Reactants(iReac,iVar).GT.0) THEN + reacNameReactants = TRIM(reacNameReactants)//'+'//TRIM(Species(ChemReac%Reactants(iReac,iVar))%Name) + ELSE IF(ChemReac%Reactants(iReac,iVar).LT.0) THEN + ! Treatment of non-reactive species (e.g. CH4 + M/A -> CH3 + H + M/A) + IF(ABS(ChemReac%Reactants(iReac,iVar)).EQ.2) THEN + reacNameReactants = TRIM(reacNameReactants)//'+M' + ELSE IF (ABS(ChemReac%Reactants(iReac,iVar)).EQ.1) THEN + reacNameReactants = TRIM(reacNameReactants)//'+A' + ELSE + CALL abort(__STAMP__,'ERROR in parameter.ini: Only -1 (=A) and -2 (=M) is supported as generic non-reactive species!') + END IF + END IF + END DO + ! Get the first product and write its species name to the string + IF(ChemReac%Products(iReac,1).NE.0) THEN + reacNameProducts = TRIM(Species(ChemReac%Products(iReac,1))%Name) + ELSE + CALL abort(__STAMP__,'ERROR in parameter.ini: First product cannot be zero!') + END IF + ! Add additional products to the string + DO iVar = 2, 4 + IF(ChemReac%Products(iReac,iVar).GT.0) THEN + reacNameProducts = TRIM(reacNameProducts)//'+'//TRIM(Species(ChemReac%Products(iReac,iVar))%Name) + ELSE IF(ChemReac%Products(iReac,iVar).LT.0) THEN + ! Treatment of non-reactive species (e.g. CH4 + M/A -> CH3 + H + M/A) + IF(ABS(ChemReac%Products(iReac,iVar)).EQ.2) THEN + reacNameProducts = TRIM(reacNameProducts)//'+M' + ELSE IF (ABS(ChemReac%Products(iReac,iVar)).EQ.1) THEN + reacNameProducts = TRIM(reacNameProducts)//'+A' + ELSE + CALL abort(__STAMP__,'ERROR in parameter.ini: Only -1 (=A) and -2 (=M) is supported as generic non-reactive species!') + END IF + END IF + END DO + ! Combine both strings to the reaction name to read-in from the database + ChemReac%ReactionName(iReac) = TRIM(reacNameReactants)//'_'//TRIM(reacNameProducts) + ! TODO: Reactions might have multiple variants #1, #2, etc. + dsetname2 = TRIM(groupname)//'/'//TRIM(ChemReac%ReactionName(iReac)) + SELECT CASE (TRIM(ChemReac%ReactModel(iReac))) + CASE('TCE') + ! Total Collision Energy: Arrhenius-based chemistry model + CALL ReadArrheniusFromDatabase(file_id_specdb,dsetname2,iReac) + CASE('QK') + ! Quantum Kinetic: Threshold energy based chemistry model + ChemReac%AnyQKReaction = .TRUE. + CASE('XSec') + ! Chemistry model based on cross-section data + ChemReac%AnyXSecReaction = .TRUE. + ! CURRENTLY READ-IN DURING MCC_Chemistry_Init() + CASE('phIon') + ! Photo-ionization reactions + ChemReac%CrossSection(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-CrossSection') + CASE('phIonXSec') + ! Photo-ionization reactions (data read-in from database) + NbrOfPhotonXsecReactions = NbrOfPhotonXsecReactions + 1 + CASE DEFAULT + CALL abort(__STAMP__,'Selected reaction model is not supported in reaction number: ', IntInfoOpt=iReac) + END SELECT + END DO +ELSE + ! Read-in of reactions part of the chemistry model + DO iReac = 1, ReadInNumOfReact + ReacID = ChemReac%totalReacToModel(iReac) + ! Get name and size of name + CALL H5Lget_name_by_idx_f(group_id, ".", H5_INDEX_NAME_F, H5_ITER_INC_F, ReacID, dsetname, err, size) + indexSubset = INDEX(TRIM(dsetname),'#') + dsetname2 = TRIM(groupname)//'/'//TRIM(dsetname) + ! Remove a potential #1,#2, etc. if reaction has multiple variants + IF(indexSubset.GT.0) THEN + ChemReac%ReactionName(iReac) = TRIM(dsetname(1:indexSubset-1)) + ELSE + ChemReac%ReactionName(iReac) = TRIM(dsetname) + END IF + LBWRITE (UNIT_stdOut,*) 'Read-in from database for reaction: ', TRIM(ChemReac%ReactionName(iReac)) + ! Open the reaction dataset + CALL H5DOPEN_F(file_id_specdb, dsetname2, dset_id, err) + ! Read-in the reaction model + CALL AttributeExists(file_id_specdb,'ReactionModel',TRIM(dsetname2), AttrExists=AttrExists) + IF(AttrExists) THEN + CALL ReadAttribute(file_id_specdb,'ReactionModel',1,TRIM(dsetname2), StrScalar=ChemReac%ReactModel(iReac)) + ELSE + CALL abort(__STAMP__,'ERROR in reaction definition: No reaction model found in the selected reaction in the database!') + END IF + ! Read-in of reactants + CALL AttributeExists(file_id_specdb,'Reactants',TRIM(dsetname2), AttrExists=AttrExists) + IF(AttrExists) THEN + ! Open the reaction dataset + CALL H5DOPEN_F(file_id_specdb, dsetname2, dset_id, err) + ! Get the size of the attribute array + CALL GetDataSize(dset_id,'Reactants',nDims,HSize,attrib=.TRUE.) + nSets = INT(HSize(1),4) + CALL ReadAttribute(dset_id,'Reactants',nSets,StrArray=ReactantNames(1:nSets)) + DO iProd = 1,nSets + DO iSpec = 1, nSpecies + IF(STRICMP(ReactantNames(iProd),Species(iSpec)%Name)) THEN + ChemReac%Reactants(iReac,iProd) = iSpec + SpeciesFound = .TRUE. + END IF + END DO + IF(.NOT.SpeciesFound) CALL abort(__STAMP__,'ERROR in SpeciesDatabase: Species defined in the reaction has not been found!') + END DO + ELSE + CALL abort(__STAMP__,'ERROR in reaction definition: No reactants found in the selected reaction in the database') + END IF + ! Read-in of products + CALL AttributeExists(file_id_specdb,'Products',TRIM(dsetname2), AttrExists=AttrExists) + IF(AttrExists) THEN + ! Open the reaction dataset + CALL H5DOPEN_F(file_id_specdb, dsetname2, dset_id, err) + ! Get the size of the attribute array + CALL GetDataSize(dset_id,'Products',nDims,HSize,attrib=.TRUE.) + nSets = INT(HSize(1),4) + CALL ReadAttribute(dset_id,'Products',nSets,StrArray=ProductNames(1:nSets)) + start = 0 + DO iProd = 1,nSets + ! If non-reactives are present, keep the second entry empty + IF(ChemReac%ArbDiss(iReac)%NumOfNonReactives.GT.0.AND.iProd.GT.1) start = 1 + DO iSpec = 1, nSpecies + IF(STRICMP(ProductNames(iProd),Species(iSpec)%Name)) THEN + ChemReac%Products(iReac,start+iProd) = iSpec + SpeciesFound = .TRUE. + END IF + END DO + IF(.NOT.SpeciesFound) CALL abort(__STAMP__,'ERROR in SpeciesDatabase: Species defined in the reaction has not been found!') + END DO + ELSE + CALL abort(__STAMP__,'ERROR in reaction definition: No products found in the selected reaction in the database') + END IF + ! Read-in of the reaction parameters, depending on the model + SELECT CASE (TRIM(ChemReac%ReactModel(iReac))) + CASE('TCE') + ! Total Collision Energy: Arrhenius-based chemistry model + CALL ReadArrheniusFromDatabase(file_id_specdb,dsetname2,iReac) + CASE('QK') + ! Quantum Kinetic: Threshold energy based chemistry model + ! Only requires the species-specific dissociation energy + ChemReac%AnyQKReaction = .TRUE. + CASE('XSec') + ! CURRENTLY READ-IN DURING MCC_Chemistry_Init() + ! Chemistry model based on cross-section data + ChemReac%AnyXSecReaction = .TRUE. + CASE('phIon') + ! Photo-ionization reactions + ChemReac%CrossSection(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-CrossSection') + CASE('phIonXSec') + ! Photo-ionization reactions (data read-in from database) + NbrOfPhotonXsecReactions = NbrOfPhotonXsecReactions + 1 + CASE DEFAULT + CALL abort(__STAMP__,'Selected reaction model as part of a chemistry model is not supported in reaction number: ', IntInfoOpt=iReac) + END SELECT + END DO +END IF + +! Close the group and the file +CALL H5GCLOSE_F(group_id, err) +CALL H5FCLOSE_F(file_id_specdb, err) +! Close FORTRAN interface +CALL H5CLOSE_F(err) + +END SUBROUTINE ReadReacFromDatabase + + +SUBROUTINE ReadArrheniusFromDatabase(file_id_specdb,dsetname2,iReac) +!=================================================================================================================================== +!> Read-in of the Arrhenius parameters from the database +!=================================================================================================================================== +! use module +USE MOD_io_hdf5 +USE MOD_Globals +USE MOD_Globals_Vars ,ONLY: BoltzmannConst +USE MOD_DSMC_Vars ,ONLY: ChemReac +USE MOD_HDF5_Input ,ONLY: DatasetExists,ReadAttribute +#if USE_LOADBALANCE +USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance +#endif /*USE_LOADBALANCE*/ +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER(HID_T),INTENT(IN) :: file_id_specdb +CHARACTER(LEN=256),INTENT(IN) :: dsetname2 +INTEGER,INTENT(IN) :: iReac +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +LOGICAL :: ReactionFound +!=================================================================================================================================== + +LBWRITE (UNIT_stdOut,*) 'Read-in from database: ', dsetname2 +CALL DatasetExists(file_id_specdb,TRIM(dsetname2),ReactionFound) +IF(.NOT.ReactionFound) CALL abort(__STAMP__,'ERROR in parameter.ini: Defined reaction has not been found in the database!') + +CALL ReadAttribute(file_id_specdb,'Arrhenius-Prefactor',1,DatasetName = dsetname2,RealScalar=ChemReac%Arrhenius_Prefactor(iReac)) +LBWRITE (UNIT_stdOut,*) 'Arrhenius-Prefactor: ', ChemReac%Arrhenius_Prefactor(iReac) +CALL ReadAttribute(file_id_specdb,'Arrhenius-Powerfactor',1,DatasetName = dsetname2,RealScalar=ChemReac%Arrhenius_Powerfactor(iReac)) +LBWRITE (UNIT_stdOut,*) 'Arrhenius-Powerfactor: ', ChemReac%Arrhenius_Powerfactor(iReac) +CALL ReadAttribute(file_id_specdb,'Activation-Energy_K',1,DatasetName = dsetname2,RealScalar=ChemReac%EActiv(iReac)) +ChemReac%EActiv(iReac) = ChemReac%EActiv(iReac)*BoltzmannConst +LBWRITE (UNIT_stdOut,*) 'Activation-Energy_K: ', ChemReac%EActiv(iReac) + +END SUBROUTINE ReadArrheniusFromDatabase + + ! SUBROUTINE Init_TLU_Data ! !=================================================================================================================================== ! ! Reads Scattering Angle Lookup Table from Test_Lookup_komplett.txt diff --git a/src/particles/dsmc/dsmc_chemical_reactions.f90 b/src/particles/dsmc/dsmc_chemical_reactions.f90 index 98cbbe15e..771ff343b 100644 --- a/src/particles/dsmc/dsmc_chemical_reactions.f90 +++ b/src/particles/dsmc/dsmc_chemical_reactions.f90 @@ -348,7 +348,7 @@ END FUNCTION Calc_Beta_TCE SUBROUTINE DSMC_Chemistry(iPair, iReac) !=================================================================================================================================== -! Routine performs an exchange reaction of the type A + B + C -> D + E + F, where A, B, C, D, E, F can be anything +! Routine performs an exchange reaction of the type A + B + C -> D + E + F + G, where A, B, C, D, E, F can be anything !=================================================================================================================================== ! MODULES USE MOD_Globals ,ONLY: abort,DOTPRODUCT,StringBeginsWith,UNIT_StdOut,myrank diff --git a/src/particles/dsmc/dsmc_electronic_model.f90 b/src/particles/dsmc/dsmc_electronic_model.f90 index 2d40845e9..8fdd894de 100644 --- a/src/particles/dsmc/dsmc_electronic_model.f90 +++ b/src/particles/dsmc/dsmc_electronic_model.f90 @@ -1297,9 +1297,7 @@ SUBROUTINE ReadSpeciesLevel ( Dsetname, iSpec ) ! Check if the ground state is defined at 0K IF(SpecDSMC(iSpec)%ElectronicState(2,0).NE.0.0) THEN - CALL Abort(& - __STAMP__,& -'ERROR in electronic energy levels: given ground state is not zero! Species: ', IntInfoOpt=iSpec) + CALL Abort(__STAMP__,'ERROR in electronic energy levels: given ground state is not zero! Species: ', IntInfoOpt=iSpec) END IF IF (DSMC%ElectronicModel.EQ.4) THEN @@ -1332,39 +1330,40 @@ SUBROUTINE SortEnergies(ElectronicState, nQuants) !=================================================================================================================================== !> !=================================================================================================================================== -! use module - USE MOD_Globals - USE MOD_Particle_Vars ,ONLY: Species +! MODULES +USE MOD_Globals ! IMPLICIT VARIABLE HANDLING - IMPLICIT NONE +IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES - INTEGER, INTENT(IN) :: nQuants - REAL,INTENT(INOUT) :: ElectronicState(1:2,0:nQuants-1) +INTEGER, INTENT(IN) :: nQuants +REAL,INTENT(INOUT) :: ElectronicState(1:2,0:nQuants-1) !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES - INTEGER :: iStep, iLoop - REAL :: TempState(2) - LOGICAL :: changed +INTEGER :: iStep, iLoop +REAL :: TempState(2) +LOGICAL :: changed !=================================================================================================================================== - iStep = nQuants - changed = .true. - DO WHILE (changed.OR.iStep.GT.1) - changed = .false. - IF (iStep.GT.1) THEN - iStep = INT(iStep/1.3) + +iStep = nQuants +changed = .true. +DO WHILE (changed.OR.iStep.GT.1) + changed = .false. + IF (iStep.GT.1) THEN + iStep = INT(iStep/1.3) + END IF + DO iLoop = 0, nQuants - 1 - iStep + IF (ElectronicState(2,iLoop).GT.ElectronicState(2,iLoop+iStep)) THEN + TempState(1:2) = ElectronicState(1:2,iLoop+iStep) + ElectronicState(1:2,iLoop+iStep) = ElectronicState(1:2,iLoop) + ElectronicState(1:2,iLoop) = TempState(1:2) + changed = .true. END IF - DO iLoop = 0, nQuants - 1 - iStep - IF (ElectronicState(2,iLoop).GT.ElectronicState(2,iLoop+iStep)) THEN - TempState(1:2) = ElectronicState(1:2,iLoop+iStep) - ElectronicState(1:2,iLoop+iStep) = ElectronicState(1:2,iLoop) - ElectronicState(1:2,iLoop) = TempState(1:2) - changed = .true. - END IF - END DO END DO +END DO + END SUBROUTINE SortEnergies @@ -1375,7 +1374,7 @@ SUBROUTINE CalcProbCorrFactorElec() ! use module USE MOD_Globals_Vars, ONLY: BoltzmannConst USE MOD_DSMC_Vars, ONLY: DSMC, SpecDSMC, CollInf - USE MOD_Particle_Vars, ONLY: nSpecies, SPecies + USE MOD_Particle_Vars, ONLY: nSpecies, Species USE MOD_Particle_Analyze_Tools, ONLY: CalcEelec USE MOD_part_tools ,ONLY: CalcXiElec ! IMPLICIT VARIABLE HANDLING diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index a4d777e01..c77f27fe8 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -483,15 +483,15 @@ SUBROUTINE InitDSMC() END DO !iSpec END IF - DO iSpec=1, nSpecies - SpecDSMC(iSpec)%FullyIonized = GETLOGICAL('Part-Species'//TRIM(hilf)//'-FullyIonized') - ! Save the electron species into a global variable - IF(Species(iSpec)%InterID.EQ.4) DSMC%ElectronSpecies = iSpec - ! reading electronic state informations from HDF5 file - IF(((DSMC%ElectronicModelDatabase.NE.'none').OR.(SpeciesDatabase.NE.'none')).AND.(Species(iSpec)%InterID.NE.4)) THEN - CALL SetElectronicModel(iSpec) - END IF - END DO + DO iSpec=1, nSpecies + SpecDSMC(iSpec)%FullyIonized = GETLOGICAL('Part-Species'//TRIM(hilf)//'-FullyIonized') + ! Save the electron species into a global variable + IF(Species(iSpec)%InterID.EQ.4) DSMC%ElectronSpecies = iSpec + ! reading electronic state informations from HDF5 file + IF(((DSMC%ElectronicModelDatabase.NE.'none').OR.(SpeciesDatabase.NE.'none')).AND.(Species(iSpec)%InterID.NE.4)) THEN + CALL SetElectronicModel(iSpec) + END IF + END DO ! determine number of different species combinations and allocate collidingSpecies array CollInf%NumCase = 0 @@ -1129,7 +1129,7 @@ SUBROUTINE InitDSMC() ! Calculating the heat of formation for ionized species (including higher ionization levels) ! Requires the completed read-in of species data - CALL CalcHeatOfFormation() + CALL CalcHeatOfFormationIons() ! Set "NextIonizationSpecies" information for field ionization from "PreviousState" info ! NextIonizationSpecies => SpeciesID of the next higher ionization level @@ -1342,7 +1342,7 @@ SUBROUTINE SetElectronicModel(iSpec) END SUBROUTINE SetElectronicModel -SUBROUTINE CalcHeatOfFormation() +SUBROUTINE CalcHeatOfFormationIons() !=================================================================================================================================== ! Calculating the heat of formation for ionized species (including higher ionization levels) ! Requires the completed read-in of species data @@ -1377,41 +1377,26 @@ SUBROUTINE CalcHeatOfFormation() counter = 0 IF((Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20)) THEN IF(SpecDSMC(iSpec)%PreviousState.EQ.0) THEN - WRITE(UNIT=hilf2,FMT='(I0)') iSpec + ! Fall-back for "fake" ions (e.g. the previous state is not available) IF(SpeciesDatabase.NE.'none') THEN ! Initialize FORTRAN interface. CALL H5OPEN_F(err) CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) - ! Read-in of heat of formation, ions are treated later using the heat of formation of their ground state and data from the - ! from the electronic state database to ensure consistent energies across chemical reactions of QK and Arrhenius type. - IF((Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20).OR.(Species(iSpec)%InterID.EQ.4)) THEN - SpecDSMC(iSpec)%HeatOfFormation = 0.0 - LBWRITE (UNIT_stdOut,*) 'HeatOfFormation_K: ', SpecDSMC(iSpec)%HeatOfFormation - ELSE - CALL ReadAttribute(file_id_specdb,'HeatOfFormation_K',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%HeatOfFormation) - LBWRITE (UNIT_stdOut,*) 'HeatOfFormation_K: ', SpecDSMC(iSpec)%HeatOfFormation - SpecDSMC(iSpec)%HeatOfFormation = SpecDSMC(iSpec)%HeatOfFormation * BoltzmannConst - ENDIF + CALL ReadAttribute(file_id_specdb,'HeatOfFormation_K',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%HeatOfFormation) + LBWRITE (UNIT_stdOut,*) 'HeatOfFormation_K: ', SpecDSMC(iSpec)%HeatOfFormation + SpecDSMC(iSpec)%HeatOfFormation = SpecDSMC(iSpec)%HeatOfFormation * BoltzmannConst ! Close the file. CALL H5FCLOSE_F(file_id_specdb, err) ! Close FORTRAN interface. CALL H5CLOSE_F(err) - END IF !database - - IF(Species(iSpec)%DoOverwriteParameters) THEN - ! Read-in of heat of formation, ions are treated later using the heat of formation of their ground state and data from the - ! from the electronic state database to ensure consistent energies across chemical reactions of QK and Arrhenius type. - IF((Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20).OR.(Species(iSpec)%InterID.EQ.4)) THEN - SpecDSMC(iSpec)%HeatOfFormation = 0.0 - ELSE - SpecDSMC(iSpec)%HeatOfFormation = GETREAL('Part-Species'//TRIM(hilf2)//'-HeatOfFormation_K') - SpecDSMC(iSpec)%HeatOfFormation = SpecDSMC(iSpec)%HeatOfFormation * BoltzmannConst - END IF + ELSE + WRITE(UNIT=hilf2,FMT='(I0)') iSpec + SpecDSMC(iSpec)%HeatOfFormation = GETREAL('Part-Species'//TRIM(hilf2)//'-HeatOfFormation_K') * BoltzmannConst END IF - ELSE + ! Get the last electronic state level from the previous state (e.g. for NIon get the last electronic state for N) IF(SpecDSMC(SpecDSMC(iSpec)%PreviousState)%MaxElecQuant.GT.0) THEN jSpec = SpecDSMC(iSpec)%PreviousState DO @@ -1422,11 +1407,8 @@ SUBROUTINE CalcHeatOfFormation() jSpec = SpecDSMC(jSpec)%PreviousState ! Fail-safe, abort after 100 iterations counter = counter + 1 - IF(counter.GT.100) THEN - CALL abort(& - __STAMP__& - ,'ERROR: Nbr. of ionization lvls per spec limited to 100. More likely wrong input in PreviuosState of spec:', iSpec) - END IF + IF(counter.GT.100) CALL abort(__STAMP__,& + 'ERROR: Nbr. of ionization lvls per spec limited to 100. More likely wrong input in PreviuosState of spec:', iSpec) END DO IF(AutoDetect)THEN LBWRITE(UNIT_stdOut,'(A)')' Automatically determined HeatOfFormation:' @@ -1445,7 +1427,8 @@ SUBROUTINE CalcHeatOfFormation() END IF END IF END DO -END SUBROUTINE CalcHeatOfFormation + +END SUBROUTINE CalcHeatOfFormationIons SUBROUTINE SetNextIonizationSpecies() diff --git a/src/particles/dsmc/dsmc_relaxation.f90 b/src/particles/dsmc/dsmc_relaxation.f90 index 24dd4316a..a59d94cff 100644 --- a/src/particles/dsmc/dsmc_relaxation.f90 +++ b/src/particles/dsmc/dsmc_relaxation.f90 @@ -528,7 +528,7 @@ SUBROUTINE SumVibRelaxProb(iPair) ! summes up the variable vibrational realaxation probabilities !=================================================================================================================================== ! MODULES -USE MOD_DSMC_Vars ,ONLY: DSMC, VarVibRelaxProb, Coll_pData, SpecDSMC +USE MOD_DSMC_Vars ,ONLY: DSMC, VarVibRelaxProb, Coll_pData USE MOD_Particle_Vars ,ONLY: PartSpecies, Species ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE diff --git a/src/particles/dsmc/dsmc_vars.f90 b/src/particles/dsmc/dsmc_vars.f90 index 5603509f4..bc7c1d83b 100644 --- a/src/particles/dsmc/dsmc_vars.f90 +++ b/src/particles/dsmc/dsmc_vars.f90 @@ -373,7 +373,6 @@ MODULE MOD_DSMC_Vars TYPE tChemReactions LOGICAL :: AnyQKReaction ! Defines if any QK reaction present INTEGER :: NumOfReact ! Number of possible reactions - LOGICAL :: DoOverwriteReacParameters ! Flag to overwrite reaction parameters manually INTEGER :: NumOfReactWOBackward ! Number of possible reactions w/o automatic backward reactions TYPE(tArbDiss), ALLOCATABLE :: ArbDiss(:) ! Construct to allow the definition of a list of non-reactive educts LOGICAL, ALLOCATABLE :: BackwardReac(:) ! Defines if backward reaction is calculated @@ -389,13 +388,12 @@ MODULE MOD_DSMC_Vars ! R (molecular recombination ! D (molecular dissociation) ! E (molecular exchange reaction) - CHARACTER(LEN=15),ALLOCATABLE :: ReactModel(:) ! Model of Reaction (reaction num) + CHARACTER(LEN=255),ALLOCATABLE :: ReactModel(:) ! Model of Reaction (reaction num) ! TCE (total collision energy) ! QK (quantum kinetic) ! phIon (photon-ionization) ! phIonXSec (photon-ionization based on cross-section data) ! XSec (based on cross-section data) - CHARACTER(LEN=200),ALLOCATABLE :: ReactionName(:) ! Name of reaction to identify reaction [NumofReact] INTEGER, ALLOCATABLE :: Reactants(:,:) ! Reactants: indices of the species starting the reaction [NumOfReact,3] INTEGER, ALLOCATABLE :: Products(:,:) ! Products: indices of the species resulting from the reaction [NumOfReact,4] INTEGER, ALLOCATABLE :: ReactCase(:) ! Case/pair of the reaction (1:NumOfReact) @@ -430,6 +428,10 @@ MODULE MOD_DSMC_Vars TYPE(tCollCaseInfo), ALLOCATABLE:: CollCaseInfo(:) ! Information of collision cases (nCase) ! XSec Chemistry LOGICAL :: AnyXSecReaction ! Defines if any XSec reaction is present + ! Species database + CHARACTER(LEN=255) :: ChemistryModel ! Defines a set of chemical reactions to read-in from the species database + CHARACTER(LEN=200),ALLOCATABLE :: ReactionName(:) ! Name of reaction to identify reaction [NumofReact] + INTEGER,ALLOCATABLE :: totalReacToModel(:) ! Mapping from all available reactions in the database to the model reactions END TYPE TYPE(tChemReactions) :: ChemReac diff --git a/src/particles/mcc/mcc_xsec.f90 b/src/particles/mcc/mcc_xsec.f90 index a461dabe8..1bbfe774d 100644 --- a/src/particles/mcc/mcc_xsec.f90 +++ b/src/particles/mcc/mcc_xsec.f90 @@ -52,7 +52,7 @@ SUBROUTINE ReadCollXSec(iCase,iSpec,jSpec) ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -CHARACTER(LEN=64) :: dsetname, spec_pair, spec_pair_exists +CHARACTER(LEN=64) :: dsetname, spec_pair CHARACTER(LEN=265) :: XSecDatabaseName INTEGER :: err INTEGER(HSIZE_T), DIMENSION(2) :: dims,sizeMax @@ -931,7 +931,10 @@ SUBROUTINE ReadReacXSec(iCase,iPath) END IF END DO -IF(.NOT.ReactionFound) CALL abort(__STAMP__,'No reaction cross-section data found for reaction number:', IntInfoOpt=iReac) +IF(.NOT.ReactionFound) THEN + SWRITE(*,*) ' Trying to read the following product pair failed: ', TRIM(ProductPair) + CALL abort(__STAMP__,'No reaction cross-section data found for reaction number:', IntInfoOpt=iReac) +END IF ! Store the energy value in J (read-in was in eV) SpecXSec(iCase)%ReactionPath(iPath)%XSecData(1,:) = SpecXSec(iCase)%ReactionPath(iPath)%XSecData(1,:) * ElementaryCharge diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 66a26e371..56aa06b38 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -1542,12 +1542,11 @@ SUBROUTINE InitializeSpeciesParameter() USE MOD_Globals USE MOD_Globals_Vars USE MOD_ReadInTools -USE MOD_Particle_Vars +USE MOD_Particle_Vars ,ONLY: nSpecies, Species, SpeciesDatabase USE MOD_io_hdf5 -USE MOD_HDF5_input, ONLY:ReadAttribute, DatasetExists, AttributeExists -USE MOD_DSMC_Vars ,ONLY: SpecDSMC +USE MOD_HDF5_input ,ONLY:ReadAttribute, DatasetExists, AttributeExists #if USE_MPI -USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance +USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance #endif /*USE_MPI*/ ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -1558,14 +1557,10 @@ SUBROUTINE InitializeSpeciesParameter() !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: iSpec,err -CHARACTER(32) :: hilf, hilf2 +CHARACTER(32) :: hilf CHARACTER(LEN=64) :: dsetname -CHARACTER(LEN=64) :: AttribName INTEGER(HID_T) :: file_id_specdb ! File identifier -INTEGER(HID_T) :: dset_id_specdb ! Dataset identifier -LOGICAL :: DataSetFound -LOGICAL :: Attr_Exists -INTEGER(HID_T) :: Loc_ID, Attr_ID +LOGICAL :: DataSetFound, AttrExists !=================================================================================================================================== ! Read-in of the species database SpeciesDatabase = GETSTR('Particles-Species-Database') @@ -1598,6 +1593,7 @@ SUBROUTINE InitializeSpeciesParameter() CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) DO iSpec = 1, nSpecies + IF (Species(iSpec)%DoOverwriteParameters) CYCLE LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) @@ -1606,9 +1602,8 @@ SUBROUTINE InitializeSpeciesParameter() Species(iSpec)%DoOverwriteParameters = .TRUE. SWRITE(*,*) 'WARNING: DataSet not found: ['//TRIM(dsetname)//'] ['//TRIM(SpeciesDatabase)//']' ELSE - - CALL AttributeExists(file_id_specdb,'ChargeIC',TRIM(dsetname), AttrExists=Attr_Exists) - IF (Attr_Exists) THEN + CALL AttributeExists(file_id_specdb,'ChargeIC',TRIM(dsetname), AttrExists=AttrExists) + IF (AttrExists) THEN CALL ReadAttribute(file_id_specdb,'ChargeIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%ChargeIC) ELSE Species(iSpec)%ChargeIC = 0.0 @@ -1628,17 +1623,15 @@ SUBROUTINE InitializeSpeciesParameter() END IF -IF(ANY(Species(:)%DoOverwriteParameters)) THEN - DO iSpec = 1, nSpecies - IF(Species(iSpec)%DoOverwriteParameters) THEN - LBWRITE (UNIT_stdOut,'(66(". "))') - WRITE(UNIT=hilf,FMT='(I0)') iSpec - Species(iSpec)%ChargeIC = GETREAL('Part-Species'//TRIM(hilf)//'-ChargeIC') - Species(iSpec)%MassIC = GETREAL('Part-Species'//TRIM(hilf)//'-MassIC') - Species(iSpec)%InterID = GETINT('Part-Species'//TRIM(hilf)//'-InteractionID') - END IF - END DO ! iSpec -END IF +DO iSpec = 1, nSpecies + IF(Species(iSpec)%DoOverwriteParameters) THEN + LBWRITE (UNIT_stdOut,'(66(". "))') + WRITE(UNIT=hilf,FMT='(I0)') iSpec + Species(iSpec)%ChargeIC = GETREAL('Part-Species'//TRIM(hilf)//'-ChargeIC') + Species(iSpec)%MassIC = GETREAL('Part-Species'//TRIM(hilf)//'-MassIC') + Species(iSpec)%InterID = GETINT('Part-Species'//TRIM(hilf)//'-InteractionID') + END IF +END DO ! iSpec IF(nSpecies.GT.0)THEN LBWRITE (UNIT_stdOut,'(66(". "))') From 2b119d3f679bac8458431084bffb76626a49fd5a Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Thu, 3 Aug 2023 15:39:00 +0200 Subject: [PATCH 078/222] Documentation Database --- .../features-and-models/SpeciesDatabase.md | 66 ++++--------------- docs/documentation/userguide/tools.md | 49 +++++++------- 2 files changed, 40 insertions(+), 75 deletions(-) diff --git a/docs/documentation/userguide/features-and-models/SpeciesDatabase.md b/docs/documentation/userguide/features-and-models/SpeciesDatabase.md index 078f95891..ee9927f3c 100644 --- a/docs/documentation/userguide/features-and-models/SpeciesDatabase.md +++ b/docs/documentation/userguide/features-and-models/SpeciesDatabase.md @@ -74,14 +74,23 @@ The database contains different chemistry models including various reactions. | Titan_14Spec_24Reac_Gokcen2007 | 2.2.0 (Nov 2021) | 14 | 24 | 1.10.5 | | Titan_18Spec_30Reac_Gokcen2007 | 2.3.0 (Nov 2021) | 18 | 30 | 1.12.1 | -The database contains data for the TCE and QK model. Reactions to be included in the simualtion are specified by their name: +The database contains data for the TCE and QK model. Reactions to be included in the simulation are specified by their reaction equation or their chemical model: ! Reaction1: CH4 + M -> CH3 + H + M - DSMC-Reaction1-ReactionName = DISS_CH4_TO_CH3 + DSMC-Reaction1-Reactants = (/1,0,0/) + DSMC-Reaction1-Products = (/2,0,3,0/) + DSMC-Reaction1-ReactionName = CH4+M_CH3_M+H -To ensure consistency and findability, a naming convention is used in the database. The available flags for the reaction are `DISS` (dissociation), `EXC` (exchange) and `RECOMB` (recombination or addition). The main reactants and products are specified as well. To further state atomic, electronic or molecular collision parameters, as well as ionization processes, the flags `_AT`, `_MOL`, `_EL` and `_ION` are used respectively. The name of reactants, products and non-reactive collision parameters are deposited in the database as well, but they are not read out to avoid restrictions in the simulation setup. These values are given manually in the `parameter.ini`, as described in Section {ref} `sec:DSMC-chemistry`. +The reaction name is generated automatically and follows a set convention, that is enforced inside the database. To ensure a correct read-in, all species in the chosen reactions must have a defined species name in the parameter.ini Reactants are ordered according to a predefined list, with nonreacting partners listed always at the end. The same general order is used for the products, however the nonreacting partners are given always at the second position. If one reaction appears in multiple models or with multiple parameter sets in the database an additional enumerator in the form of f.e. '#5' is given at the end of the reaction name. In these cases, the correct number needs to be supplied in the parameter.ini as well. -If the reaction parameters should be given manually, the following command can be set: +If a chemistry model is defined, all reactions with this model are read-in from te database and no additional reaction names need to be supplied. The use of a set of reaction equations from the database can be initialized with the following command: + + ! Reaction set 1 + DSMC-ChemistryModel = Titan_14Spec_24Reac_Gokcen2007 + +It is possible as well to supply a chemical model and additional reactions for the consideration. TODO + +If the reaction parameters should be given manually, the following command can be set: TODO DSMC-OverwriteReacDatabase = true @@ -95,50 +104,6 @@ Arrhenius-type reaction rates needed for the Total-Collision-Energy model ({ref} The dissociation energy used in the Quantum-Kinetic model ({ref}`ssec:QK`) is deposited in the species database. -(ssec:Catalysis)= -## Heterogenous reactions - -All data necessary for the modelling of gas-surface reactions with PICLas can be found in the species database. To include parameters for a certain reaction, the reaction name needs to be specified by - - ! Reaction 1: CO(g) -> CO(ads) - Surface-Reaction1-SurfName = Adsorption_CO - -According to the naming convention used in the database, the surface mechanism (adsorption, desorption, ER and LH reaction) is stated together with the main reactant and product (only in the case of reactions). The database contains the sticking coefficients for the Kisluik and Langmuir adsorption model, together with the Polanyi-Wigner parameters and the Arrhenius-type reaction rates. All parameters that can be found in the database are givel below. - - Surface-Reaction1-SurfName - Surface-Reaction1-Type - Surface-Reaction1-StickingCoefficient - Surface-Reaction1-EqConstant - Surface-Reaction1-DissOrder - Surface-Reaction1-ReactHeat - Surface-Reaction1-HeatScaling - Surface-Reaction1-Energy - Surface-Reaction1-Prefactor - Surface-Reaction1-LateralInteraction - Surface-Reaction1-Ca - Surface-Reaction1-Cb - -The reactants and products are deposited in the database as well, but again not read out to ensure the correct input. Reactants and products need to be defined by - - Surface-Reaction1-Reactants = (/2,2/) - Surface-Reaction1-Products = (/3,0/) - -So far, the database does not contain any surface-specific or diffusion parameters. These need to be set in the `parameter.ini` by - - Surface-Reaction1-NumOfBoundaries = 1 - Surface-Reaction1-Boundaries = (/1,0/) - Part-Boundary1-WallTemp = 323 - Part-Boundary1-LatticeVector = 0.389E-9 - Part-Boundary1-NbrOfMol-UnitCell = 2 - Part-Boundary1-Species1-Coverage = 0.1 - Part-Boundary1-Species1-MaxCoverage = 0.333 - -If a parameter is not defined or set to a default value, the code will abort. - -To define parameters manually instead of using the database, the following option can be selected: - - OverwriteCatParameters = true - (ssec:El-states)= ## Electronic states @@ -156,11 +121,6 @@ In this case, the electronic relaxation data is taken from an additional Electro The use of the unififed species database for the cross-section data, follows the description given in Section {ref} `ssec:xsec-chemistry`. All reaction paths are again stored by their reaction names and can be called in the `parameter.ini`. -(ssec:Rad-data)= -## Radiation data - -TO-DO - (ssec:Overview)= ## Overview diff --git a/docs/documentation/userguide/tools.md b/docs/documentation/userguide/tools.md index 7577bb85d..2cdba6992 100644 --- a/docs/documentation/userguide/tools.md +++ b/docs/documentation/userguide/tools.md @@ -7,34 +7,34 @@ An overview of the tools is given in [TOOLS.md](https://github.com/piclas-framew (sec:tools-usd)= ## Unified Species Database (USD) -A tool to create a database containing cross-section, electronic states, surface reactions, Arrhenius rates, and species data can be found in the *tools* folder: `piclas/tools/species_database/`. -The Python script (python3.7) `create_species_database.py` creates a new database or expands an existing one combining all necessary parameters (formerly read-in through ini files). The script uses the `numpy`, `h5py`, `argparse`,`datetime`, `cmath`, and `matplotlib.rcsetup` packages. To create the unified database with +A tool to create a database containing cross-section, electronic states, Arrhenius rates, and species data can be found in the *tools* folder: `piclas/tools/species_database/`. +The Python script (python3.7) `create_species_database.py` creates a new database or expands an existing one combining all necessary parameters (formerly read-in through ini files). The script uses the `numpy`, `h5py`, `argparse`,`datetime`, `cmath`, and `matplotlib.rcsetup` packages. To create the species database run the command: python3.7 create_species_database.py -an electronic states and a cross-section database need to be built before ({ref}`ssec:tools-xsec-collision`, {ref}`ssec:tools-electronic-database`). -If nothing additionally is specified, the following filenames are called: `DSMC.ini` for the parameter and (gas and surface) reaction input, `Electronic-State-Database.h5` for the electronic state database, `XSec_Database.h5` for the cross-section data,`Rad.dat` for the radiation data, and `Species_Database.h5` for the final output. For custom file names, the following options can be added: +If electronic states or cross-section data should be added to the species database, an electronic states `Electronic-State-Database.h5` and a cross-section database `XSec-Database.h5` need to be built before ({ref}`ssec:tools-xsec-collision`, {ref}`ssec:tools-electronic-database`). - python3 create_species_database.py --parameter parameter-filename --electronic electronic_statefile --crosssection crosssection_statefile --radiation radiation-filename --output output_filename --reference reference-name +If nothing additionally is specified, the following filenames are called: `DSMC.ini` for the parameter, gas-phase reaction input and `Species_Database.h5` for the final output. For custom file names and for the inclusion of electronic and cross-section data, the following options can be added: + + python3 create_species_database.py --parameter parameter-filename --electronic electronic_statefile --crosssection crosssection_statefile --output output_filename --reference reference-name or - python3 create_species_database.py -p parameter-filename -e electronic_statefile -c crosssection_statefile -s radiation-filename -o output_filename -r reference-name + python3 create_species_database.py -p parameter-filename -e electronic_statefile -c crosssection_statefile -o output_filename -r reference-name The data is grouped in the output file, as shown in the following example: Cross-Sections (group) H2-H2Ion1 (dataset) - Radiation (group) - N (group) - Levels (dataset) - Lines (dataset) Reaction (group) - DISS_CH3_TO_CH2 (dataset) + CH3_CH2+H (dataset) + Chemistry model (attributes) Arrhenius parameters (attributes) - EXC_CN+_N (dataset) + O2+M_O+O+M (dataset) + Chemistry model (attributes) Arrhenius parameters (attributes) - RECOMB_C_N_ION (dataset) + Fe_FeIon1+electron (dataset) + Chemistry model (attributes) Arrhenius parameters (attributes) Species (group) H2 (group) @@ -46,19 +46,24 @@ The data is grouped in the output file, as shown in the following example: electron (group) Electronic levels (dataset) Species parameters (attributes) - Surface-Chemistry - Adsorption_CO (dataset) - Reaction parameters (attributes) - LH_Oxidation_CO (dataset) - Reaction parameters (attributes) -For cross-sections, reactions, radiation and species data, the former `DSMC.ini` files are used to create the database. However, for every species and for every reaction, names must be defined to create the database and to run simulations. +For cross-sections, reactions and species data, the former `DSMC.ini` files are used to create the database. However, every species must be defined to create the database and to run simulations. Part-Species1-SpeciesName=CO2 - DSMC-Reaction1-ReactionName = DISS_CH3_TO_CH2 - Surface-Reaction1-SurfName = Adsorption_CO + +The name of the reaction is optional, if none is given, the reaction name is created automatically from the reactants and products, following the naming convention defined below: + + Reac1+Reac2_Prod1+Prod2+Prod3 + Reac1+Reac2_Prod1+Prod2+Prod3#2 - +Non-reacting partners can be given as A (atoms or similar) or M (molecules or similar) in the reaction name. If a name is defined in the input file, the programm automatically renames it according to the set convention. If multiple sets of parameters or multiple models exist for the same reaction, a counter variable f.e. '#5' is added at the end of the reaction name. + +For reactions a chemistry model is defined in all cases. The name of the given parameter-file is automatically taken as the model name. To have a clear distinction, the following naming convention should be used for the parameter-filename and thus the chemistry model for the reactions: + + PlanetAtmosphere_XSpec_XReac_Source (Titan_18Spec_30Reac_Gokcen2007) + TestCase_XSpec_XReac_Source (CO2_6Spec_10Reac_Johnston2014) + +In addition to creating a new database, the same script can be used to extend an existing version. For this, only the name of the existing database needs to be defined in the call to create_species_database.py. The function automatically tests if the provided data is already included and adds them if not. (ssec:tools-electronic-database)= ### Electronic database From 5c740a1661f4cb0a71dff96120d79694fb92befd Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Thu, 3 Aug 2023 16:08:11 +0200 Subject: [PATCH 079/222] Fix the problem with the columns of the NIST electronic states --- .../create_electronic_database_atoms.py | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/tools/electronic_data/create_electronic_database_atoms.py b/tools/electronic_data/create_electronic_database_atoms.py index 77bf1c3a2..46cb69044 100644 --- a/tools/electronic_data/create_electronic_database_atoms.py +++ b/tools/electronic_data/create_electronic_database_atoms.py @@ -52,33 +52,37 @@ def int_to_Roman(num): data = data.replace(' ','') data = data.replace('"','') # Read-in data as a pandas dataframe - data = pd.read_csv(io.StringIO(data),skipinitialspace=True,delimiter=",",usecols=['J','Levelcm-1'], na_values=['---']) + data = pd.read_csv(io.StringIO(data),skipinitialspace=True,delimiter=",",usecols=['J','Prefix'], na_values=['---']) # Drop rows with an empty cell and '---' entries (which were converted to N/A during read-in) # and also drop all rows following the first '---' entry J = data.columns.get_loc("J") - Level = data.columns.get_loc("Levelcm-1") + Level = data.columns.get_loc("Prefix") rows_with_nan = [index for index, row in data.iterrows() if row.isnull().any()] - max_level = rows_with_nan[0] - drop_to_end = 1 - (len(data)-max_level) - if drop_to_end < 0: - data = data.iloc[:drop_to_end] - elif drop_to_end == 0: - pass + if len(rows_with_nan) == 1: + max_level = rows_with_nan[0] + drop_to_end = 1 - (len(data)-max_level) + if drop_to_end < 0: + data = data.iloc[:drop_to_end] + elif drop_to_end == 0: + pass + else: + print("ERROR: drop_to_end must be negative!") + exit(1) else: - print("ERROR: drop_to_end must be negative!") - exit(1) + for val in rows_with_nan: + data = data.drop(val) + max_level = len(data)-1 if data['J'].dtype == 'float64': data.iloc[max_level,J] = 0.0 else: data.iloc[max_level,J] = "0.0" # Check the datatype: if its a float, then all non-numerical characters have already been removed - if data['Levelcm-1'].dtype != 'float64': + if data['Prefix'].dtype != 'float64': # Drop rows with a question mark ("This level/line may not be real.") - data.drop(data[data['Levelcm-1'].str.contains(r'[?]')].index,inplace=True) + data.drop(data[data['Prefix'].str.contains(r'[?]')].index,inplace=True) # Drop rows with a +x ("The relative positions of the levels within such a system are accurate within experimental uncertainties, but no experimental connection between this system and the other levels of the spectrum has been made.") - data.drop(data[data['Levelcm-1'].str.contains(r'[+x]')].index,inplace=True) - + data.drop(data[data['Prefix'].str.contains(r'[+x]')].index,inplace=True) # Execute fractions and convert J to g if data['J'].dtype != 'float64': for i in range(len(data['J'])): @@ -98,11 +102,11 @@ def int_to_Roman(num): data['J'] = data['J'].astype(float) # Convert 1/cm to K - data['Levelcm-1'] = data['Levelcm-1'].astype(float) - data['Levelcm-1'] = 100 * data['Levelcm-1'] * 1.986E-025 / 1.38065E-023 # 1/cm * 100cm/m * (J m) / (J/K) = K + data['Prefix'] = data['Prefix'].astype(float) + data['Prefix'] = 100 * data['Prefix'] * 1.986E-025 / 1.38065E-023 # 1/cm * 100cm/m * (J m) / (J/K) = K x_old=0. - for i in range(len(data['Levelcm-1'])): + for i in range(len(data['Prefix'])): x = data.iloc[i,Level] if x < x_old: print('Error in level %s: the energy is not increasing with the levels E2=%s < E1=%s' % (i,x,x_old)) From be4668ed75f27faa89911ac68ac527e47af32807 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Thu, 3 Aug 2023 16:44:22 +0200 Subject: [PATCH 080/222] Updated regression checks with database to use the new link database feature of the reggie --- SpeciesDatabase.h5 | Bin 301216 -> 2261416 bytes .../command_line.ini | 1 + .../parameter.ini | 2 +- .../command_line.ini | 1 + .../parameter.ini | 2 +- .../parameter_old.ini | 217 ------------------ .../command_line.ini | 3 +- .../parameter.ini | 2 +- 8 files changed, 7 insertions(+), 221 deletions(-) delete mode 100755 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter_old.ini diff --git a/SpeciesDatabase.h5 b/SpeciesDatabase.h5 index 33aa765d195de70517e1accbfaa6d4d8c90decbf..ebc82a0c54be8a8d8f43cd10ef3d42ca660dcf67 100644 GIT binary patch literal 2261416 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

    #Nio2>}~6bl>AT&Ix7}$;f2#1@6 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%0AaF`&O1Xy0)iQGdy1)A)j{GV{Ab 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¾m9({`?l&xnI~`9;f$x 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 delta 17995 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 diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/command_line.ini b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/command_line.ini index 0100a3584..ee8922be2 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/command_line.ini +++ b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/command_line.ini @@ -1 +1,2 @@ MPI=1 +database = ../../../SpeciesDatabase.h5 \ No newline at end of file diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini index 90478fc43..fcb5c9df4 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini +++ b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini @@ -76,7 +76,7 @@ Part-Species4-Init1-TempRot=30000.0 ! =============================================================================== ! ! Reactions ! =============================================================================== ! -DSMC-ChemistryModel=Titan-wo-Argon_18Spec_30Reac_Gokcen2007 +DSMC-ChemistryModel=Air_5Spec_8Reac_Laux1995 UseDSMC=true Particles-DSMCReservoirSim=true Particles-DSMCReservoirSimRate=false diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/command_line.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/command_line.ini index 0100a3584..347b9fc96 100755 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/command_line.ini +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/command_line.ini @@ -1 +1,2 @@ MPI=1 +database = ../../../SpeciesDatabase.h5 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter.ini index 26296761b..ee3d6b2a4 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter.ini +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter.ini @@ -71,7 +71,7 @@ Part-FIBGMdeltas = (/0.01,0.01,0.01/) ! SPECIES ! =============================================================================== ! Part-nSpecies=6 -Particles-Species-Database = ../../../SpeciesDatabase.h5 +Particles-Species-Database = SpeciesDatabase.h5 ! =============================================================================== ! ! Weighting Factor ! =============================================================================== ! diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter_old.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter_old.ini deleted file mode 100755 index 32674ba1b..000000000 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter_old.ini +++ /dev/null @@ -1,217 +0,0 @@ -! =============================================================================== ! -! POSTI -! =============================================================================== ! -VisuParticles = T -NVisu = 1 -TimeStampLength = 21 -! =============================================================================== ! -! VARIABLES -! =============================================================================== ! -CFLscale = 0.2 -IniExactFunc = 0 -N = 1 -NAnalyze = 1 -! =============================================================================== ! -! MESH -! =============================================================================== ! -ProjectName = H2_Plasma_Chemistry_Test -MeshFile = cube_mesh.h5 -Logging = F -useCurveds = F -TrackingMethod = triatracking -! =============================================================================== ! -! PART ANALYZE -! =============================================================================== ! -Part-AnalyzeStep = 100 -CalcCollRates = T -CalcRelaxProb = F -CalcReacRates = F -! =============================================================================== ! -! CALCULATION -! =============================================================================== ! -IterDisplayStep = 50 -ManualTimeStep= 1.0E-11 -tend = 1.0E-09 -Analyze_dt = 2.0E-6 ! Timestep of analyze outputs -! =============================================================================== ! -! PIC -! =============================================================================== ! -PIC-DoDeposition = F -PIC-DoInterpolation = F -! =============================================================================== ! -! DSMC -! =============================================================================== ! -UseDSMC = T -Particles-DSMC-CollisMode = 3 -Part-NumberOfRandomSeeds = 2 -Particles-RandomSeed1 = 1 -Particles-RandomSeed2 = 2 -Particles-HaloEpsVelo = 3E5 -Particles-DSMC-CalcQualityFactors = T -Particles-CollXSec-NullCollision = T - -Particles-DSMC-ElectronicModel = 1 -EpsMergeElectronicState = 1E-3 -Part-Species$-ElecRelaxProb = 1. - -Particles-DSMCReservoirSim = T -Particles-DSMCReservoirSimRate = T -Particles-DSMCReservoirStatistic = T - -Particles-DSMC-VibRelaxProb = 0. -! =============================================================================== ! -! PARTICLES -! =============================================================================== ! -Part-maxParticleNumber = 500000 -Part-nBounds = 1 -Part-Boundary1-SourceName = BC_adiabat -Part-Boundary1-Condition = reflective -Part-FIBGMdeltas = (/0.01,0.01,0.01/) -! =============================================================================== ! -! SPECIES -! =============================================================================== ! -Part-nSpecies=6 -Particles-Species-Database = Species_Database.h5 -! =============================================================================== ! -! Weighting Factor -! =============================================================================== ! -Part-Species1-MacroParticleFactor = 5 -Part-Species2-MacroParticleFactor = 5 -Part-Species3-MacroParticleFactor = 5 -Part-Species4-MacroParticleFactor = 5 -Part-Species5-MacroParticleFactor = 5 -Part-Species6-MacroParticleFactor = 5 -! =============================================================================== ! -! Species1 | H2 -! =============================================================================== ! -Part-Species1-nInits = 1 -Part-Species1-SpeciesName = H2 -Part-Species1-Init1-velocityDistribution = maxwell_lpn -Part-Species1-Init1-SpaceIC = background -Part-Species1-Init1-VeloIC = 0. -Part-Species1-Init1-PartDensity = 1E22 -Part-Species1-Init1-VeloVecIC = (/0.,1.,0./) -Part-Species1-Init1-MWTemperatureIC = 300. -Part-Species1-Init1-TempVib = 300. -Part-Species1-Init1-TempRot = 300. -Part-Species1-Init1-TempElec = 300. -! =============================================================================== ! -! Species2 | H -! =============================================================================== ! -Part-Species2-SpeciesName = H -! =============================================================================== ! -! Species3 | e -! =============================================================================== ! -Part-Species3-SpeciesName = electron -Part-Species3-nInits = 1 -Part-Species3-Init1-velocityDistribution = constant -Part-Species3-Init1-SpaceIC = cell_local -Part-Species3-Init1-VeloIC = 593158,1875731,4194262,5931582,7264675,8388524 -Part-Species3-Init1-PartDensity = 1E21 -Part-Species3-Init1-VeloVecIC = (/0.,1.,0./) -Part-Species3-Init1-MWTemperatureIC = 300. -! =============================================================================== ! -! Species4 | H2Ion -! =============================================================================== ! -Part-Species4-SpeciesName = H2Ion1 -Part-Species4-nInits = 1 -Part-Species4-Init1-velocityDistribution = constant -Part-Species4-Init1-SpaceIC = cell_local -Part-Species4-Init1-VeloIC = 13836,43754,97838,138364,169460,195676 -Part-Species4-Init1-PartDensity = 1E21 -Part-Species4-Init1-VeloVecIC = (/0.,1.,0./) -Part-Species4-Init1-MWTemperatureIC = 300. -Part-Species4-Init1-TempVib = 300. -Part-Species4-Init1-TempRot = 300. -Part-Species4-Init1-TempElec = 300. -! =============================================================================== ! -! Species5 | HIon -! =============================================================================== ! -Part-Species5-SpeciesName = HIon1 -Part-Species5-nInits = 1 -Part-Species5-Init1-velocityDistribution = constant -Part-Species5-Init1-SpaceIC = cell_local -Part-Species5-Init1-VeloIC = 16948,53594,119840,169480,207569,239680 -Part-Species5-Init1-PartDensity = 1E21 -Part-Species5-Init1-VeloVecIC = (/0.,1.,0./) -Part-Species5-Init1-MWTemperatureIC = 300. -Part-Species5-Init1-TempElec = 300. -! =============================================================================== ! -! Species6 | H3Ion -! =============================================================================== ! -Part-Species6-SpeciesName = H3Ion1 -Part-Species6-nInits = 1 -Part-Species6-Init1-velocityDistribution = constant -Part-Species6-Init1-SpaceIC = cell_local -Part-Species6-Init1-VeloIC = 12630,39941,89311,126304,154691,178621 -Part-Species6-Init1-PartDensity = 1E21 -Part-Species6-Init1-VeloVecIC = (/0.,1.,0./) -Part-Species6-Init1-MWTemperatureIC = 300. -Part-Species6-Init1-TempVib = 300. -Part-Species6-Init1-TempRot = 300. -Part-Species6-Init1-TempElec = 300. -! =============================================================================== ! -! Reactions -! =============================================================================== ! -DSMC-NumOfReactions=11 - -nocrosscombination: Part-Species3-Init1-VeloIC,Part-Species4-Init1-VeloIC, Part-Species5-Init1-VeloIC, Part-Species6-Init1-VeloIC - -! ---------------------------------------------------- -! Electron impact -! ---------------------------------------------------- -! Dissociation: H2 + e --> H + H + e -DSMC-Reaction4-ReactionModel = XSec -DSMC-Reaction4-Reactants = (/1,3,0/) -DSMC-Reaction4-Products = (/2,3,2,0/) -! ---------------------------------------------------- -! Ionization: H2 + e --> H2Ion1 + electron + electron -DSMC-Reaction5-ReactionModel = XSec -DSMC-Reaction5-Reactants = (/1,3,0/) -DSMC-Reaction5-Products = (/4,3,3,0/) -! ---------------------------------------------------- -! Dissociative ionization: H2 + e --> H + HIon + electron + electron -DSMC-Reaction6-ReactionModel = XSec -DSMC-Reaction6-Reactants = (/1,3,0/) -DSMC-Reaction6-Products = (/2,3,3,5/) -! ---------------------------------------------------- -! H2Ion1 impact -! ---------------------------------------------------- -! H3Ion formation: H2 + H2Ion1 --> H + H3Ion -DSMC-Reaction7-ReactionModel = XSec -DSMC-Reaction7-Reactants = (/1,4,0/) -DSMC-Reaction7-Products = (/2,6,0,0/) -! Charge exchange: H2 + H2Ion1 --> H2Ion1 + H2 -DSMC-Reaction8-ReactionModel = XSec -DSMC-Reaction8-Reactants = (/1,4,0/) -DSMC-Reaction8-Products = (/4,1,0,0/) -! Dissociative charge exchange: H2 + H2Ion1 --> H + H2 + HIon1 -DSMC-Reaction9-ReactionModel = XSec -DSMC-Reaction9-Reactants = (/1,4,0/) -DSMC-Reaction9-Products = (/2,1,5,0/) -! ---------------------------------------------------- -! HIon1 impact -! ---------------------------------------------------- -! Charge exchange: H2 + HIon1 --> H2Ion1 + H -DSMC-Reaction10-ReactionModel = XSec -DSMC-Reaction10-Reactants = (/1,5,0/) -DSMC-Reaction10-Products = (/4,2,0,0/) -! ---------------------------------------------------- -! H3Ion1 impact -! ---------------------------------------------------- -! Ionization: H2 + H3Ion1 --> H2Ion1 + H3Ion1 + electron -DSMC-Reaction11-ReactionModel = XSec -DSMC-Reaction11-Reactants = (/1,6,0/) -DSMC-Reaction11-Products = (/4,6,3,0/) -! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H + H2Ion1 -DSMC-Reaction1-ReactionModel = XSec -DSMC-Reaction1-Reactants = (/1,6,0/) -DSMC-Reaction1-Products = (/1,2,4,0/) -! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H + H + HIon1 -DSMC-Reaction2-ReactionModel = XSec -DSMC-Reaction2-Reactants = (/1,6,0/) -DSMC-Reaction2-Products = (/1,2,2,5/) -! Dissociative charge exchange: H2 + H3Ion1 --> H2 + H2 + HIon1 -DSMC-Reaction3-ReactionModel = XSec -DSMC-Reaction3-Reactants = (/1,6,0/) -DSMC-Reaction3-Products = (/1,1,5,0/) diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/command_line.ini b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/command_line.ini index 5f5e4a494..347b9fc96 100644 --- a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/command_line.ini +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/command_line.ini @@ -1 +1,2 @@ -MPI=1!6 +MPI=1 +database = ../../../SpeciesDatabase.h5 diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini index 49bd45d4d..18c4be4fc 100755 --- a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini @@ -39,7 +39,7 @@ Part-FIBGMdeltas=(/4.64E-6,4.64E-6,4.64E-6/) ! =============================================================================== ! Part-maxParticleNumber=500000 Part-nSpecies=18 -Particles-Species-Database = ../../../SpeciesDatabase.h5 +Particles-Species-Database = SpeciesDatabase.h5 Part-Species1-MacroParticleFactor = 10 Part-Species2-MacroParticleFactor = 10 Part-Species3-MacroParticleFactor = 10 From 4c7c89b5d9469d2b70cbee8801554974eb0163aa Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Thu, 3 Aug 2023 16:55:14 +0200 Subject: [PATCH 081/222] added chemistry models --- .../features-and-models/SpeciesDatabase.md | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/documentation/userguide/features-and-models/SpeciesDatabase.md b/docs/documentation/userguide/features-and-models/SpeciesDatabase.md index ee9927f3c..b9a0252e1 100644 --- a/docs/documentation/userguide/features-and-models/SpeciesDatabase.md +++ b/docs/documentation/userguide/features-and-models/SpeciesDatabase.md @@ -59,20 +59,20 @@ The database contains different chemistry models including various reactions. | Name | Description | Species | React. | Reference | | :----------------------------------------: | :------------: | :---------: | :------: | :----: | -| Air_5Spec_8Reac_Laux1995 | 2.3.0 (Nov 2021) | 5 | 8 | 1.12.1 | -| Air_5Spec_8Reac_Park1993 | 2.2.0 (Nov 2021) | 8 | 8 | 1.10.5 | -| Air_11Spec_27Reac_Park1993 | 2.1.0 (Nov 2021) | 11 | 27 | 1.10.6 | -| Air_11Spec_43Reac_Farbar2008 | 2.0.0 (Nov 2021) | 11 | 43 | 1.10.5 | -| Air_11Spec_51Reac_Park1993 | 2.0.0 (Nov 2021) | 11 | 51 | 1.10.5 | -| Fe-in-Air_3Spec_7Reac_Voronov1997Plane2015 | 2.0.0 (Nov 2021) | 3 | 7 | 1.10.5 | -| CH4_7Spec_7Reac | 2.0.0 (Nov 2021) | 7 | 7 | 1.10.5 | -| CH4-Ar_8Spec_7Reac | 2.3.0 (Nov 2021) | 8 | 7 | 1.12.1 | -| CO2_6Spec_10Reac_Johnston2014 | 2.2.0 (Nov 2021) | 6 | 10 | 1.10.5 | -| Mars_11Spec_27Reac_Johnston2014 | 2.3.0 (Nov 2021) | 11 | 27 | 1.12.1 | -| Mars_16Spec_31Reac_Park1994 | 2.2.0 (Nov 2021) | 16 | 31 | 1.10.5 | -| Mars_17Spec_42Reac_Johnston2014 | 2.3.0 (Nov 2021) | 17 | 42 | 1.12.1 | -| Titan_14Spec_24Reac_Gokcen2007 | 2.2.0 (Nov 2021) | 14 | 24 | 1.10.5 | -| Titan_18Spec_30Reac_Gokcen2007 | 2.3.0 (Nov 2021) | 18 | 30 | 1.12.1 | +| Air_5Spec_8Reac_Laux1995 | Air without ions | 5 | 8 | M. Laux. Direkte Simulation verdünnter, reagierender Strömungen. PhD Thesis, University of Stuttgart, 1995. | +| Air_5Spec_8Reac_Park1993 | Air without ions | 8 | 8 | C. Park. Review of chemical-kinetic problems of future NASA missions. I - Earth entries. Journal of Thermophysics and Heat Transfer, 7(3):385–398, 1993. doi:10.2514/3.431. | +| Air_11Spec_27Reac_Park1993 | Air with ions | 11 | 27 | C. Park. Review of chemical-kinetic problems of future NASA missions. I - Earth entries. Journal of Thermophysics and Heat Transfer, 7(3):385–398, 1993. doi:10.2514/3.431. | +| Air_11Spec_43Reac_Farbar2008 | Air with ions and backward reaction rates| 11 | 43 | E. Farbar and I. Boyd. Simulation of Fire II Reentry Flow Using the Direct Simulation Monte Carlo Method. 2008. doi:10.2514/6.2008-4103. | +| Air_11Spec_51Reac_Park1993 | Air with ions | 11 | 51 | C. Park. Review of chemical-kinetic problems of future NASA missions. I - Earth entries. Journal of Thermophysics and Heat Transfer, 7(3):385–398, 1993. doi:10.2514/3.431. | +| Fe-in-Air_3Spec_7Reac_Voronov1997Plane2015 | Outgassing of iron into air | 3 | 7 | Voronov. G. A practical fit formula for ionization rate coefficients of atoms and ions by electron impact: Z= 1–28. Atomic Data and Nuclear Data Tables, 65(1):1–35, 1997. + J. M. Plane, W. Feng, and E. C. Dawkins. The mesosphere and metals: Chemistry and changes. Chemical reviews, 115(10):4497–4541, 2015. | +| CH4_7Spec_7Reac | | 7 | 7 | - | +| CH4-Ar_8Spec_7Reac | | 8 | 7 | - | +| CO2_6Spec_10Reac_Johnston2014 | | 6 | 10 | C. Johnston and A. Brandis. Modeling of nonequilibrium CO Fourth-Positive and CN Violet emission in CO2–N2 gases. Journal of Quantitative Spectroscopy and Radiative Transfer, 149:303–317, 2014. doi:10.1016/j.jqsrt.2014.08.025. | +| Mars_11Spec_27Reac_Johnston2014 | Mars without ions | 11 | 27 | C. Johnston and A. Brandis. Modeling of nonequilibrium CO Fourth-Positive and CN Violet emission in CO2–N2 gases. Journal of Quantitative Spectroscopy and Radiative Transfer, 149:303–317, 2014. doi:10.1016/j.jqsrt.2014.08.025. | +| Mars_16Spec_31Reac_Park1994 | Mars with ions | 16 | 31 | C. Park, J. T. Howe, R. L. Jaffe, and G. V. Candler. Review of chemical-kinetic problems of future NASA missions. II - Mars entries. Journal of Thermophysics and Heat Transfer, 8(1):9–23, 1994. doi:10.2514/3.496. | +| Mars_17Spec_42Reac_Johnston2014 | Mars with ions and O2+ | 17 | 42 | C. Johnston and A. Brandis. Modeling of nonequilibrium CO Fourth-Positive and CN Violet emission in CO2–N2 gases. Journal of Quantitative Spectroscopy and Radiative Transfer, 149:303–317, 2014. doi:10.1016/j.jqsrt.2014.08.025. | +| Titan_14Spec_24Reac_Gokcen2007 | Titan without ions but with Argon | 14 | 24 | T. Gokcen. N2-CH4-Ar Chemical Kinetic Model for Simulations of Atmospheric Entry to Titan. Journal of Thermophysics and Heat Transfer, 21(1):9–18, 2007. doi:10.2514/1.22095. | +| Titan_18Spec_30Reac_Gokcen2007 | Titan with ions but without Argon | 18 | 30 | T. Gokcen. N2-CH4-Ar Chemical Kinetic Model for Simulations of Atmospheric Entry to Titan. Journal of Thermophysics and Heat Transfer, 21(1):9–18, 2007. doi:10.2514/1.22095. | The database contains data for the TCE and QK model. Reactions to be included in the simulation are specified by their reaction equation or their chemical model: From a315f65270a2f4b0495b3c215cc566d6f5c9819c Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Thu, 3 Aug 2023 16:57:31 +0200 Subject: [PATCH 082/222] Surface chemistry in database --- .../create_species_database.py | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/tools/species_database/create_species_database.py b/tools/species_database/create_species_database.py index 4c07e497c..f15e4d6c0 100644 --- a/tools/species_database/create_species_database.py +++ b/tools/species_database/create_species_database.py @@ -19,6 +19,8 @@ help="Output file name", metavar="FILE", default="SpeciesDatabase.h5") parser.add_argument("-r", "--reference", dest="reference", help="Reference for species data", default="Unknown") +parser.add_argument("-s", "--surface", dest="database_surf", + help="Sticking coefficient data", metavar="FILE", default="") # parser.add_argument("-s", "--radiation", dest="rad_file_name", # help="Radiation file to read-in parameters", metavar="FILE", default="Rad.dat") @@ -30,8 +32,13 @@ else: print('No electronic state data is given as input.') if args.database_crosssection != "": - h5_crosssection = h5py.File(args.database_crosssection, 'r')# - print('No crosssection-data is given as input.') + h5_crosssection = h5py.File(args.database_crosssection, 'r') +else: + print('No crosssection data is given as input.') +if args.database_surf != "": + h5_surface = h5py.File(args.database_surf, 'r') +else: + print('No surface data is given as input.') # Name of the DSMC.ini is the name of the ChemicalModel model_name = args.ini_filename[:-4] @@ -68,6 +75,21 @@ def is_float(value): hdf_xsec_group = h5_species.create_group('Cross-Sections') hdf_xsec_group.attrs['* Created'] = date.today().strftime("%B %d, %Y") +hdf_surf_group = 'Surface-Chemistry' +if hdf_surf_group in h5_species.keys(): + print('Group Surface-Chemistry already exists.') + hdf_surf_group = h5_species['Surface-Chemistry'] + hdf_surf_group.attrs['* Last Modified'] = date.today().strftime("%B %d, %Y") +else: + print('Group Surface-Chemistry does not exist, creating new group.') + #hdf_surf_group = h5_species.create_group('Surface-Chemistry') + #hdf_surf_group.attrs['* Created'] = date.today().strftime("%B %d, %Y") + # Copy sticking coefficient data if not defined already + if args.database_surf != "": + for dataset in h5_surface.keys(): + print('Surface-Chemistry added: ', dataset) + h5_species.copy(source=h5_surface[dataset],dest=h5_species) + # hdf_rad_group = 'Radiation' # if hdf_rad_group in h5_species.keys(): # print('Group Radiation already exists.') From f62dc69a9b3257c3e447806ccdebbe52bcea6b80 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Thu, 3 Aug 2023 17:05:06 +0200 Subject: [PATCH 083/222] Missing help variable during read-in --- src/particles/dsmc/dsmc_init.f90 | 48 ++++++++++++++++---------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index c77f27fe8..108721b51 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -462,32 +462,32 @@ SUBROUTINE InitDSMC() END IF !database - IF(ANY(Species(:)%DoOverwriteParameters)) THEN - DO iSpec = 1, nSpecies - IF(Species(iSpec)%DoOverwriteParameters) THEN - LBWRITE (UNIT_stdOut,'(66(". "))') - WRITE(UNIT=hilf,FMT='(I0)') iSpec - SpecDSMC(iSpec)%Tref = GETREAL('Part-Species'//TRIM(hilf)//'-Tref' ) - SpecDSMC(iSpec)%dref = GETREAL('Part-Species'//TRIM(hilf)//'-dref' ) - SpecDSMC(iSpec)%omega = GETREAL('Part-Species'//TRIM(hilf)//'-omega' ) - SpecDSMC(iSpec)%alphaVSS = GETREAL('Part-Species'//TRIM(hilf)//'-alphaVSS' ) - ! check for faulty parameters - IF((Species(iSpec)%InterID * SpecDSMC(iSpec)%Tref * SpecDSMC(iSpec)%dref * SpecDSMC(iSpec)%alphaVSS) .EQ. 0) THEN - CALL Abort(__STAMP__,'ERROR in species data: check collision parameters in ini \n'//& - 'Part-Species'//TRIM(hilf)//'-(InterID * Tref * dref * alphaVSS) .EQ. 0 - but must not be 0') - END IF ! (Tref * dref * alphaVSS) .EQ. 0 - IF ((SpecDSMC(iSpec)%alphaVSS.LT.0.0) .OR. (SpecDSMC(iSpec)%alphaVSS.GT.2.0)) THEN - CALL Abort(__STAMP__,'ERROR: Check set parameter Part-Species'//TRIM(hilf)//'-alphaVSS must not be lower 0 or greater 2') - END IF ! alphaVSS parameter check - END IF - END DO !iSpec - END IF + DO iSpec = 1, nSpecies + IF(Species(iSpec)%DoOverwriteParameters) THEN + LBWRITE (UNIT_stdOut,'(66(". "))') + WRITE(UNIT=hilf,FMT='(I0)') iSpec + SpecDSMC(iSpec)%Tref = GETREAL('Part-Species'//TRIM(hilf)//'-Tref' ) + SpecDSMC(iSpec)%dref = GETREAL('Part-Species'//TRIM(hilf)//'-dref' ) + SpecDSMC(iSpec)%omega = GETREAL('Part-Species'//TRIM(hilf)//'-omega' ) + SpecDSMC(iSpec)%alphaVSS = GETREAL('Part-Species'//TRIM(hilf)//'-alphaVSS' ) + ! check for faulty parameters + IF((Species(iSpec)%InterID * SpecDSMC(iSpec)%Tref * SpecDSMC(iSpec)%dref * SpecDSMC(iSpec)%alphaVSS) .EQ. 0) THEN + CALL Abort(__STAMP__,'ERROR in species data: check collision parameters in ini \n'//& + 'Part-Species'//TRIM(hilf)//'-(InterID * Tref * dref * alphaVSS) .EQ. 0 - but must not be 0') + END IF ! (Tref * dref * alphaVSS) .EQ. 0 + IF ((SpecDSMC(iSpec)%alphaVSS.LT.0.0) .OR. (SpecDSMC(iSpec)%alphaVSS.GT.2.0)) THEN + CALL Abort(__STAMP__,'ERROR: Check set parameter Part-Species'//TRIM(hilf)//'-alphaVSS must not be lower 0 or greater 2') + END IF ! alphaVSS parameter check + END IF + END DO !iSpec DO iSpec=1, nSpecies - SpecDSMC(iSpec)%FullyIonized = GETLOGICAL('Part-Species'//TRIM(hilf)//'-FullyIonized') - ! Save the electron species into a global variable - IF(Species(iSpec)%InterID.EQ.4) DSMC%ElectronSpecies = iSpec - ! reading electronic state informations from HDF5 file + ! TODO: read-in of parameter from database if available! + WRITE(UNIT=hilf,FMT='(I0)') iSpec + SpecDSMC(iSpec)%FullyIonized = GETLOGICAL('Part-Species'//TRIM(hilf)//'-FullyIonized') + ! Save the electron species into a global variable + IF(Species(iSpec)%InterID.EQ.4) DSMC%ElectronSpecies = iSpec + ! reading electronic state informations from HDF5 file IF(((DSMC%ElectronicModelDatabase.NE.'none').OR.(SpeciesDatabase.NE.'none')).AND.(Species(iSpec)%InterID.NE.4)) THEN CALL SetElectronicModel(iSpec) END IF From f9f3a64e797b07ed17db88fbb609ab220a29b174 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Fri, 4 Aug 2023 09:52:57 +0200 Subject: [PATCH 084/222] completed database --- SpeciesDatabase.h5 | Bin 2261416 -> 2267624 bytes .../features-and-models/SpeciesDatabase.md | 12 +++++------- ...i => Titan_14Spec_24Reac_Savajano2011.ini} | 0 ...i => Titan_18Spec_30Reac_Savajano2011.ini} | 0 4 files changed, 5 insertions(+), 7 deletions(-) rename tools/species_database/{Titan_14Spec_24Reac_Gokcen2007.ini => Titan_14Spec_24Reac_Savajano2011.ini} (100%) rename tools/species_database/{Titan_18Spec_30Reac_Gokcen2007.ini => Titan_18Spec_30Reac_Savajano2011.ini} (100%) diff --git a/SpeciesDatabase.h5 b/SpeciesDatabase.h5 index ebc82a0c54be8a8d8f43cd10ef3d42ca660dcf67..74b4d72ccca983552052e9f41cbee86dba4760e1 100644 GIT binary patch delta 923 zcmZXQ&rcIU6vt<`3%mSo6`_cgp^dQ`NS2-&o0v^NqESGEcp)Zimo04EU$(no6B961 z2pALUCaxSzl*FWRz-~C;al^@@Xa4~?c{SX8(=D;+H~Hkf`Oce}H?LCKqK*%?sO=lu?jHRJr9I!LTp>e89iL7|X6$@Ul;q*jC0SDnR=((d%+P(#9@}$}4(-zvu2Kw)fZ%OUwe(hokai|+b(Ws$m(3JbdWJbd44YxNz?g}PzJ8`AK zZH9bia%zl%ZaK(_=3mA=?>ANUf4$+7?%Kv6ze+kHnvyIdE9Y@)WC*ADREi1g`se=N zCyx@5Mu;Yi1zE**0VarbLm$o>wl2w7)EBU1=nJx55G}>fv6(lrVpdTVtBB_mZPgSd z3#t}X87Ggb*M`m>{%fnoikzR7H4`WA%IdPBL#b_=|9FoOBL5~LvmhF?HLZx3Mb(xI zctx?64BNuyQn8>&qKexzS=6CtC}f=o*Xs(;;^D*j2VGA)%YO5Xn*zB4p;@68(48Rq Q*&wbxtjFoIzMmKV09M@b=>Px# delta 233 zcmXxWy$-=p0EXe5Q=F=Qs_N&Ui9tGb>_v1kh_Sa}lqQDO=Lv;xbC8DuFp!}L3Y4G>6{tcD>d=5Dv_OS6 XXwU&2y3m6@41mKBMljBJVr=dopvhBV diff --git a/docs/documentation/userguide/features-and-models/SpeciesDatabase.md b/docs/documentation/userguide/features-and-models/SpeciesDatabase.md index b9a0252e1..3bad607f7 100644 --- a/docs/documentation/userguide/features-and-models/SpeciesDatabase.md +++ b/docs/documentation/userguide/features-and-models/SpeciesDatabase.md @@ -71,10 +71,10 @@ The database contains different chemistry models including various reactions. | Mars_11Spec_27Reac_Johnston2014 | Mars without ions | 11 | 27 | C. Johnston and A. Brandis. Modeling of nonequilibrium CO Fourth-Positive and CN Violet emission in CO2–N2 gases. Journal of Quantitative Spectroscopy and Radiative Transfer, 149:303–317, 2014. doi:10.1016/j.jqsrt.2014.08.025. | | Mars_16Spec_31Reac_Park1994 | Mars with ions | 16 | 31 | C. Park, J. T. Howe, R. L. Jaffe, and G. V. Candler. Review of chemical-kinetic problems of future NASA missions. II - Mars entries. Journal of Thermophysics and Heat Transfer, 8(1):9–23, 1994. doi:10.2514/3.496. | | Mars_17Spec_42Reac_Johnston2014 | Mars with ions and O2+ | 17 | 42 | C. Johnston and A. Brandis. Modeling of nonequilibrium CO Fourth-Positive and CN Violet emission in CO2–N2 gases. Journal of Quantitative Spectroscopy and Radiative Transfer, 149:303–317, 2014. doi:10.1016/j.jqsrt.2014.08.025. | -| Titan_14Spec_24Reac_Gokcen2007 | Titan without ions but with Argon | 14 | 24 | T. Gokcen. N2-CH4-Ar Chemical Kinetic Model for Simulations of Atmospheric Entry to Titan. Journal of Thermophysics and Heat Transfer, 21(1):9–18, 2007. doi:10.2514/1.22095. | -| Titan_18Spec_30Reac_Gokcen2007 | Titan with ions but without Argon | 18 | 30 | T. Gokcen. N2-CH4-Ar Chemical Kinetic Model for Simulations of Atmospheric Entry to Titan. Journal of Thermophysics and Heat Transfer, 21(1):9–18, 2007. doi:10.2514/1.22095. | +| Titan_14Spec_24Reac_Savajano2011 | Titan without ions but with Argon | 14 | 24 | R. Savajano, R. Sobbia, M. Gaffuri, and P. Leyland. Reduced Chemical Kinetic Model for Titan Entries, International Journal of Chemical Engineering, vol. 2011, Article ID 970247, 2011. doi:10.1155/2011/970247. | +| Titan_18Spec_30Reac_Savajano2011 | Titan with ions but without Argon | 18 | 30 | R. Savajano, R. Sobbia, M. Gaffuri, and P. Leyland. Reduced Chemical Kinetic Model for Titan Entries, International Journal of Chemical Engineering, vol. 2011, Article ID 970247, 2011. doi:10.1155/2011/970247. | -The database contains data for the TCE and QK model. Reactions to be included in the simulation are specified by their reaction equation or their chemical model: +he database contains data for the TCE and QK model. Reactions to be included in the simulation are specified by their reaction equation or their chemical model: ! Reaction1: CH4 + M -> CH3 + H + M DSMC-Reaction1-Reactants = (/1,0,0/) @@ -86,11 +86,9 @@ The reaction name is generated automatically and follows a set convention, that If a chemistry model is defined, all reactions with this model are read-in from te database and no additional reaction names need to be supplied. The use of a set of reaction equations from the database can be initialized with the following command: ! Reaction set 1 - DSMC-ChemistryModel = Titan_14Spec_24Reac_Gokcen2007 + DSMC-ChemistryModel = Titan_14Spec_24Reac_Savajano2011 -It is possible as well to supply a chemical model and additional reactions for the consideration. TODO - -If the reaction parameters should be given manually, the following command can be set: TODO +If the reaction parameters should be given manually in the parameter.ini, the following command can be set: DSMC-OverwriteReacDatabase = true diff --git a/tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini b/tools/species_database/Titan_14Spec_24Reac_Savajano2011.ini similarity index 100% rename from tools/species_database/Titan_14Spec_24Reac_Gokcen2007.ini rename to tools/species_database/Titan_14Spec_24Reac_Savajano2011.ini diff --git a/tools/species_database/Titan_18Spec_30Reac_Gokcen2007.ini b/tools/species_database/Titan_18Spec_30Reac_Savajano2011.ini similarity index 100% rename from tools/species_database/Titan_18Spec_30Reac_Gokcen2007.ini rename to tools/species_database/Titan_18Spec_30Reac_Savajano2011.ini From 27deae6d7abded2d103ed0f9cede0a239f14e1b7 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Fri, 4 Aug 2023 12:05:05 +0200 Subject: [PATCH 085/222] Using PrintOption for read-in parameters from the database --- .../command_line.ini | 2 +- .../parameter.ini | 4 +- src/particles/analyze/particle_analyze.f90 | 2 +- .../boundary/particle_boundary_init.f90 | 2 +- src/particles/dsmc/dsmc_chemical_init.f90 | 23 +- src/particles/dsmc/dsmc_electronic_model.f90 | 8 +- src/particles/dsmc/dsmc_init.f90 | 324 +++++++++--------- src/particles/dsmc/dsmc_polyatomic_model.f90 | 317 +++++++---------- .../emission/particle_emission_init.f90 | 3 - src/particles/mcc/mcc_xsec.f90 | 32 +- src/particles/particle_init.f90 | 58 ++-- src/readintools/readintools.f90 | 4 - 12 files changed, 334 insertions(+), 445 deletions(-) diff --git a/regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/command_line.ini b/regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/command_line.ini index a2534cbf8..6e94617ce 100644 --- a/regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/command_line.ini +++ b/regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/command_line.ini @@ -1,2 +1,2 @@ MPI=5 -cmd_suffix=DSMC.ini +database = ../../../SpeciesDatabase.h5 diff --git a/regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/parameter.ini b/regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/parameter.ini index a7074b5f3..33547ef87 100755 --- a/regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/parameter.ini +++ b/regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/parameter.ini @@ -51,7 +51,7 @@ Part-maxParticleNumber=500000 Part-nSpecies=1 Part-nBounds=6 -Particles-Species-Database = Species_Database.h5 +Particles-Species-Database = SpeciesDatabase.h5 Part-Boundary1-SourceName=BC_Xplus Part-Boundary1-Condition=reflective @@ -84,7 +84,7 @@ Part-FIBGMdeltas=(/2e-6,2e-6,1e-6/) ! =============================================================================== ! ! Species1 - O2 ! =============================================================================== ! -Part-Species1-MassIC=5.31352E-26 +Part-Species1-SpeciesName = O2 Part-Species1-MacroParticleFactor=1E1 Part-Species1-nSurfaceFluxBCs=1 diff --git a/src/particles/analyze/particle_analyze.f90 b/src/particles/analyze/particle_analyze.f90 index 768723006..df873373d 100644 --- a/src/particles/analyze/particle_analyze.f90 +++ b/src/particles/analyze/particle_analyze.f90 @@ -543,7 +543,7 @@ SUBROUTINE InitParticleAnalyze() CalcCharge = GETLOGICAL('CalcCharge') IF(CalcCharge) DoPartAnalyze = .TRUE. ELSE - LBWRITE(UNIT_stdOut,'(A)') ' Deposition is switched of. VerifyCharge and CalcCharge are deactivated!' + LBWRITE(UNIT_stdOut,'(A)') ' | Deposition is switched off. VerifyCharge and CalcCharge are deactivated!' END IF CalcEkin = GETLOGICAL('CalcKineticEnergy') diff --git a/src/particles/boundary/particle_boundary_init.f90 b/src/particles/boundary/particle_boundary_init.f90 index 446841ee8..335ff266d 100644 --- a/src/particles/boundary/particle_boundary_init.f90 +++ b/src/particles/boundary/particle_boundary_init.f90 @@ -519,7 +519,7 @@ SUBROUTINE InitializeVariablesPartBoundary() IF (TRIM(BoundaryName(iBC)).EQ.TRIM(PartBound%SourceBoundName(iPBC))) THEN PartBound%MapToPartBC(iBC) = iPBC !PartBound%TargetBoundCond(iPBC) PartBound%MapToFieldBC(iPBC) = iBC ! part BC to field BC - LBWRITE(*,*) " | Mapped PartBound",iPBC,"on FieldBound", iBC,", i.e.: ",TRIM(BoundaryName(iBC)) + LBWRITE(*,*) "| Mapped PartBound",iPBC,"on FieldBound", iBC,", i.e.: ",TRIM(BoundaryName(iBC)) END IF END DO END DO diff --git a/src/particles/dsmc/dsmc_chemical_init.f90 b/src/particles/dsmc/dsmc_chemical_init.f90 index 62b5064d4..4ebcf62f0 100644 --- a/src/particles/dsmc/dsmc_chemical_init.f90 +++ b/src/particles/dsmc/dsmc_chemical_init.f90 @@ -239,7 +239,7 @@ SUBROUTINE DSMC_chemical_init() END IF ChemEnergySum = 0. -LBWRITE(*,*) '| Number of considered reaction paths (including dissociation and recombination): ', ChemReac%NumOfReact +CALL PrintOption('Number of considered reaction paths (including dissociation and recombination)','INFO',IntOpt=ChemReac%NumOfReact) !---------------------------------------------------------------------------------------------------------------------------------- ALLOCATE(ChemReac%NumReac(ChemReac%NumOfReact)) ChemReac%NumReac = 0 @@ -716,10 +716,9 @@ SUBROUTINE DSMC_BackwardRate_init() ! Initialize FORTRAN interface. CALL H5OPEN_F(err) CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) CALL ReadAttribute(file_id_specdb,'SymmetryFactor',1,DatasetName = dsetname,IntScalar=SpecDSMC(iSpec)%SymmetryFactor) - LBWRITE (UNIT_stdOut,*) 'SymmetryFactor: ', SpecDSMC(iSpec)%SymmetryFactor + CALL PrintOption('SymmetryFactor '//TRIM(Species(iSpec)%Name),'READIN',IntOpt=SpecDSMC(iSpec)%SymmetryFactor) ! Close the file. CALL H5FCLOSE_F(file_id_specdb, err) ! Close FORTRAN interface. @@ -727,7 +726,6 @@ SUBROUTINE DSMC_BackwardRate_init() END IF IF(Species(iSpec)%DoOverwriteParameters) THEN - LBWRITE (UNIT_stdOut,'(66(". "))') WRITE(UNIT=hilf,FMT='(I0)') iSpec SpecDSMC(iSpec)%SymmetryFactor = GETINT('Part-Species'//TRIM(hilf)//'-SymmetryFactor') END IF @@ -1099,16 +1097,11 @@ SUBROUTINE ReadReacFromDatabase(ReadInNumOfReact) ELSE ChemReac%ReactionName(iReac) = TRIM(dsetname) END IF - LBWRITE (UNIT_stdOut,*) 'Read-in from database for reaction: ', TRIM(ChemReac%ReactionName(iReac)) + CALL PrintOption('Read-in from database for reaction','INFO',StrOpt=TRIM(ChemReac%ReactionName(iReac))) ! Open the reaction dataset CALL H5DOPEN_F(file_id_specdb, dsetname2, dset_id, err) ! Read-in the reaction model - CALL AttributeExists(file_id_specdb,'ReactionModel',TRIM(dsetname2), AttrExists=AttrExists) - IF(AttrExists) THEN - CALL ReadAttribute(file_id_specdb,'ReactionModel',1,TRIM(dsetname2), StrScalar=ChemReac%ReactModel(iReac)) - ELSE - CALL abort(__STAMP__,'ERROR in reaction definition: No reaction model found in the selected reaction in the database!') - END IF + CALL ReadAttribute(file_id_specdb,'ReactionModel',1,TRIM(dsetname2), StrScalar=ChemReac%ReactModel(iReac)) ! Read-in of reactants CALL AttributeExists(file_id_specdb,'Reactants',TRIM(dsetname2), AttrExists=AttrExists) IF(AttrExists) THEN @@ -1198,6 +1191,7 @@ SUBROUTINE ReadArrheniusFromDatabase(file_id_specdb,dsetname2,iReac) USE MOD_Globals_Vars ,ONLY: BoltzmannConst USE MOD_DSMC_Vars ,ONLY: ChemReac USE MOD_HDF5_Input ,ONLY: DatasetExists,ReadAttribute +USE MOD_ReadInTools ,ONLY: PrintOption #if USE_LOADBALANCE USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance #endif /*USE_LOADBALANCE*/ @@ -1215,17 +1209,16 @@ SUBROUTINE ReadArrheniusFromDatabase(file_id_specdb,dsetname2,iReac) LOGICAL :: ReactionFound !=================================================================================================================================== -LBWRITE (UNIT_stdOut,*) 'Read-in from database: ', dsetname2 CALL DatasetExists(file_id_specdb,TRIM(dsetname2),ReactionFound) IF(.NOT.ReactionFound) CALL abort(__STAMP__,'ERROR in parameter.ini: Defined reaction has not been found in the database!') CALL ReadAttribute(file_id_specdb,'Arrhenius-Prefactor',1,DatasetName = dsetname2,RealScalar=ChemReac%Arrhenius_Prefactor(iReac)) -LBWRITE (UNIT_stdOut,*) 'Arrhenius-Prefactor: ', ChemReac%Arrhenius_Prefactor(iReac) +CALL PrintOption('Arrhenius-Prefactor','READIN',RealOpt=ChemReac%Arrhenius_Prefactor(iReac)) CALL ReadAttribute(file_id_specdb,'Arrhenius-Powerfactor',1,DatasetName = dsetname2,RealScalar=ChemReac%Arrhenius_Powerfactor(iReac)) -LBWRITE (UNIT_stdOut,*) 'Arrhenius-Powerfactor: ', ChemReac%Arrhenius_Powerfactor(iReac) +CALL PrintOption('Arrhenius-Powerfactor','READIN',RealOpt=ChemReac%Arrhenius_Powerfactor(iReac)) CALL ReadAttribute(file_id_specdb,'Activation-Energy_K',1,DatasetName = dsetname2,RealScalar=ChemReac%EActiv(iReac)) ChemReac%EActiv(iReac) = ChemReac%EActiv(iReac)*BoltzmannConst -LBWRITE (UNIT_stdOut,*) 'Activation-Energy_K: ', ChemReac%EActiv(iReac) +CALL PrintOption('Activation-Energy_K','READIN',RealOpt=ChemReac%EActiv(iReac)) END SUBROUTINE ReadArrheniusFromDatabase diff --git a/src/particles/dsmc/dsmc_electronic_model.f90 b/src/particles/dsmc/dsmc_electronic_model.f90 index 8fdd894de..adea6d2cc 100644 --- a/src/particles/dsmc/dsmc_electronic_model.f90 +++ b/src/particles/dsmc/dsmc_electronic_model.f90 @@ -1226,16 +1226,14 @@ SUBROUTINE ReadSpeciesLevel ( Dsetname, iSpec ) datasetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) ElLevelDatabase = TRIM(SpeciesDatabase) END IF -LBWRITE(UNIT_StdOut,'(A)') 'Read electronic level entries '//TRIM(datasetname)//' from '//TRIM(ElLevelDatabase) +LBWRITE(UNIT_StdOut,'(A)') ' | Read electronic level entries '//TRIM(datasetname)//' from '//TRIM(ElLevelDatabase) ! Initialize FORTRAN interface. CALL H5OPEN_F(err) ! Open the file. CALL H5FOPEN_F (TRIM(ElLevelDatabase), H5F_ACC_RDONLY_F, file_id_dsmc, err) CALL DatasetExists(File_ID_DSMC,TRIM(datasetname),DataSetFound) IF(.NOT.DataSetFound)THEN - CALL abort(& - __STAMP__& - ,'DataSet not found: ['//TRIM(datasetname)//'] ['//TRIM(ElLevelDatabase)//']') + CALL abort(__STAMP__,'DataSet not found: ['//TRIM(datasetname)//'] ['//TRIM(ElLevelDatabase)//']') END IF ! Open the dataset. CALL H5DOPEN_F(file_id_dsmc, datasetname, dset_id_dsmc, err) @@ -1287,7 +1285,7 @@ SUBROUTINE ReadSpeciesLevel ( Dsetname, iSpec ) SpecDSMC(iSpec)%ElectronicState( 1:2, 0) = ElectronicState(1:2,0) SpecDSMC(iSpec)%ElectronicState( 1:2, nQuants) = ElectronicState(1:2,dims(2)-1) SpecDSMC(iSpec)%MaxElecQuant = SIZE( SpecDSMC(iSpec)%ElectronicState,2) - LBWRITE(UNIT_StdOut,'(A,I5,A,I5,A,A,A)') 'Merged ',dims(2),' Electronic States to ',nQuants, ' for ',TRIM(datasetname),& + LBWRITE(UNIT_StdOut,'(A,I5,A,I5,A,A,A)') ' | Merged ',dims(2),' Electronic States to ',nQuants, ' for ',TRIM(datasetname),& ' (+1 for the ground state)' END IF ! Close the file. diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index 108721b51..d9cdab94a 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -304,7 +304,7 @@ SUBROUTINE InitDSMC() INTEGER :: iColl, jColl, pColl ! for collision parameter read in REAL :: A1, A2, delta_ij ! species constant for cross section (p. 24 Laux) LOGICAL :: PostCollPointerSet -LOGICAL :: Attr_Exists +LOGICAL :: AttrExists CHARACTER(LEN=64) :: dsetname INTEGER(HID_T) :: file_id_specdb ! File identifier INTEGER :: IntToLog @@ -363,7 +363,7 @@ SUBROUTINE InitDSMC() PartStateIntEn = 0. ! nullify - DSMC%ElectronicModelDatabase = TRIM(GETSTR('Particles-DSMCElectronicDatabase','none')) +DSMC%ElectronicModelDatabase = TRIM(GETSTR('Particles-DSMCElectronicDatabase','none')) IF (SpeciesDatabase.EQ.'none') THEN IF ((DSMC%ElectronicModelDatabase .NE. 'none').AND.((CollisMode .GT. 1).OR.(CollisMode .EQ. 0))) THEN ! CollisMode=0 is for use of in PIC simulation without collisions @@ -417,54 +417,62 @@ SUBROUTINE InitDSMC() CollInf%averagedCollisionParameters = GETLOGICAL('Particles-DSMC-averagedCollisionParameters') CollInf%crossSectionConstantMode = GETINT('Particles-DSMC-crossSectionConstantMode','0') ALLOCATE(SpecDSMC(nSpecies)) + ! Read-in from species database based on SpeciesName IF(SpeciesDatabase.NE.'none') THEN ! Initialize FORTRAN interface. CALL H5OPEN_F(err) - CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) - DO iSpec = 1, nSpecies WRITE(UNIT=hilf,FMT='(I0)') iSpec ! averagedCollisionParameters set true: species-specific collision parameters get read in IF(CollInf%averagedCollisionParameters) THEN - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) + LBWRITE (UNIT_stdOut,'(68(". "))') + CALL PrintOption('Species Name','INFO',StrOpt=TRIM(Species(iSpec)%Name)) dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) - + ! Reference temperature CALL ReadAttribute(file_id_specdb,'Tref',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%Tref) - LBWRITE (UNIT_stdOut,*) 'Tref: ', SpecDSMC(iSpec)%Tref + CALL PrintOption('Tref','READ-IN',RealOpt=SpecDSMC(iSpec)%Tref) + ! Reference diameter CALL ReadAttribute(file_id_specdb,'dref',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%dref) - LBWRITE (UNIT_stdOut,*) 'dref: ', SpecDSMC(iSpec)%dref + CALL PrintOption('dref','READIN',RealOpt=SpecDSMC(iSpec)%dref) + ! Viscosity exponent CALL ReadAttribute(file_id_specdb,'omega',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%omega) - LBWRITE (UNIT_stdOut,*) 'omega: ', SpecDSMC(iSpec)%omega - CALL AttributeExists(file_id_specdb,'alphaVSS',TRIM(dsetname), AttrExists=Attr_Exists) - IF (Attr_Exists) THEN + CALL PrintOption('omega','READIN',RealOpt=SpecDSMC(iSpec)%omega) + ! Alpha parameter (VSS only) + CALL AttributeExists(file_id_specdb,'alphaVSS',TRIM(dsetname), AttrExists=AttrExists) + IF (AttrExists) THEN CALL ReadAttribute(file_id_specdb,'alphaVSS',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%alphaVSS) ELSE SpecDSMC(iSpec)%alphaVSS = 1.0 END IF - LBWRITE (UNIT_stdOut,*) 'alphaVSS: ', SpecDSMC(iSpec)%alphaVSS + CALL PrintOption('alphaVSS','READIN',RealOpt=SpecDSMC(iSpec)%alphaVSS) ! check for faulty parameters IF((Species(iSpec)%InterID * SpecDSMC(iSpec)%Tref * SpecDSMC(iSpec)%dref * SpecDSMC(iSpec)%alphaVSS) .EQ. 0) THEN - CALL Abort(__STAMP__,'ERROR in species data: check collision parameters in ini \n'//& + CALL Abort(__STAMP__,'ERROR in species data: check collision parameters \n'//& 'Part-Species'//TRIM(hilf)//'-(InterID * Tref * dref * alphaVSS) .EQ. 0 - but must not be 0') END IF ! (Tref * dref * alphaVSS) .EQ. 0 IF ((SpecDSMC(iSpec)%alphaVSS.LT.0.0) .OR. (SpecDSMC(iSpec)%alphaVSS.GT.2.0)) THEN CALL Abort(__STAMP__,'ERROR: Check set parameter Part-Species'//TRIM(hilf)//'-alphaVSS must not be lower 0 or greater 2') END IF ! alphaVSS parameter check - END IF ! averagedCollisionParameters + ! Flag to identify fully ionized species + CALL AttributeExists(file_id_specdb,'FullyIonized',TRIM(dsetname), AttrExists=AttrExists) + IF (AttrExists) THEN + CALL ReadAttribute(file_id_specdb,'FullyIonized',1,DatasetName = dsetname,LogicalScalar=SpecDSMC(iSpec)%FullyIonized) + ELSE + SpecDSMC(iSpec)%FullyIonized = .FALSE. + END IF END DO ! iSpec = nSpecies - ! Close the file. CALL H5FCLOSE_F(file_id_specdb, err) ! Close FORTRAN interface. CALL H5CLOSE_F(err) - END IF !database + ! Read-in from parameter file DO iSpec = 1, nSpecies IF(Species(iSpec)%DoOverwriteParameters) THEN - LBWRITE (UNIT_stdOut,'(66(". "))') + LBWRITE (UNIT_stdOut,'(68(". "))') WRITE(UNIT=hilf,FMT='(I0)') iSpec SpecDSMC(iSpec)%Tref = GETREAL('Part-Species'//TRIM(hilf)//'-Tref' ) SpecDSMC(iSpec)%dref = GETREAL('Part-Species'//TRIM(hilf)//'-dref' ) @@ -478,16 +486,14 @@ SUBROUTINE InitDSMC() IF ((SpecDSMC(iSpec)%alphaVSS.LT.0.0) .OR. (SpecDSMC(iSpec)%alphaVSS.GT.2.0)) THEN CALL Abort(__STAMP__,'ERROR: Check set parameter Part-Species'//TRIM(hilf)//'-alphaVSS must not be lower 0 or greater 2') END IF ! alphaVSS parameter check + SpecDSMC(iSpec)%FullyIonized = GETLOGICAL('Part-Species'//TRIM(hilf)//'-FullyIonized') END IF END DO !iSpec DO iSpec=1, nSpecies - ! TODO: read-in of parameter from database if available! - WRITE(UNIT=hilf,FMT='(I0)') iSpec - SpecDSMC(iSpec)%FullyIonized = GETLOGICAL('Part-Species'//TRIM(hilf)//'-FullyIonized') ! Save the electron species into a global variable IF(Species(iSpec)%InterID.EQ.4) DSMC%ElectronSpecies = iSpec - ! reading electronic state informations from HDF5 file + ! reading electronic state information from HDF5 file IF(((DSMC%ElectronicModelDatabase.NE.'none').OR.(SpeciesDatabase.NE.'none')).AND.(Species(iSpec)%InterID.NE.4)) THEN CALL SetElectronicModel(iSpec) END IF @@ -683,47 +689,42 @@ SUBROUTINE InitDSMC() IF(SpeciesDatabase.NE.'none') THEN ! Initialize FORTRAN interface. CALL H5OPEN_F(err) - CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) - DO iSpec = 1, nSpecies IF(.NOT.Species(iSpec)%DoOverwriteParameters) THEN dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) WRITE(UNIT=hilf,FMT='(I0)') iSpec IF(Species(iSpec)%InterID.NE.4) THEN dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) - CALL AttributeExists(file_id_specdb,'PolyatomicMol',TRIM(dsetname),AttrExists=Attr_Exists) - IF (Attr_Exists) THEN + CALL AttributeExists(file_id_specdb,'PolyatomicMol',TRIM(dsetname),AttrExists=AttrExists) + IF (AttrExists) THEN CALL ReadAttribute(file_id_specdb,'PolyatomicMol',1,DatasetName = dsetname,IntScalar=IntToLog) IF(IntToLog.EQ.1) SpecDSMC(iSpec)%PolyatomicMol = .TRUE. - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) - LBWRITE (UNIT_stdOut,*) 'PolyatomicMol: ', SpecDSMC(iSpec)%PolyatomicMol + CALL PrintOption('Species Name','INFO',StrOpt=TRIM(Species(iSpec)%Name)) + CALL PrintOption('PolyatomicMol','READIN',LogOpt=SpecDSMC(iSpec)%PolyatomicMol) ELSE SpecDSMC(iSpec)%PolyatomicMol = .FALSE. END IF IF(SpecDSMC(iSpec)%PolyatomicMol.AND.DSMC%DoTEVRRelaxation) THEN - CALL Abort(& - __STAMP__& - ,'! Simulation of Polyatomic Molecules and T-E-V-R relaxation not possible yet!!!') + CALL Abort(__STAMP__,'! Simulation of Polyatomic Molecules and T-E-V-R relaxation not possible yet!!!') END IF IF(SpecDSMC(iSpec)%PolyatomicMol) THEN DSMC%NumPolyatomMolecs = DSMC%NumPolyatomMolecs + 1 SpecDSMC(iSpec)%SpecToPolyArray = DSMC%NumPolyatomMolecs ELSEIF ((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) SpecDSMC(iSpec)%Xi_Rot = 2 CALL ReadAttribute(file_id_specdb,'CharaTempVib',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%CharaTVib) - LBWRITE (UNIT_stdOut,*) 'CharaTempVib: ', SpecDSMC(iSpec)%CharaTVib - CALL AttributeExists(file_id_specdb,'CharaTempRot',TRIM(dsetname), AttrExists=Attr_Exists) - IF (Attr_Exists) THEN + CALL PrintOption('CharaTempVib','READIN',RealOpt=SpecDSMC(iSpec)%CharaTVib) + CALL AttributeExists(file_id_specdb,'CharaTempRot',TRIM(dsetname), AttrExists=AttrExists) + IF (AttrExists) THEN CALL ReadAttribute(file_id_specdb,'CharaTempRot',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%CharaTRot) ELSE SpecDSMC(iSpec)%CharaTRot = 0.0 END IF - LBWRITE (UNIT_stdOut,*) 'CharaTempRot: ', SpecDSMC(iSpec)%CharaTRot + CALL PrintOption('CharaTempRot','READIN',RealOpt=SpecDSMC(iSpec)%CharaTRot) CALL ReadAttribute(file_id_specdb,'Ediss_eV',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%Ediss_eV) - LBWRITE (UNIT_stdOut,*) 'Ediss_eV: ', SpecDSMC(iSpec)%Ediss_eV - + CALL PrintOption('Ediss_eV','READIN',RealOpt=SpecDSMC(iSpec)%Ediss_eV) + ! Set the limit for the acceptance-rejection SpecDSMC(iSpec)%MaxVibQuant = 200 ! Calculation of the zero-point energy SpecDSMC(iSpec)%EZeroPoint = DSMC%GammaQuant * BoltzmannConst * SpecDSMC(iSpec)%CharaTVib @@ -838,128 +839,119 @@ SUBROUTINE InitDSMC() END IF !database - IF(ANY(Species(:)%DoOverwriteParameters)) THEN - DO iSpec = 1, nSpecies - IF(Species(iSpec)%DoOverwriteParameters) THEN - IF(Species(iSpec)%InterID.NE.4) THEN - LBWRITE (UNIT_stdOut,'(66(". "))') - WRITE(UNIT=hilf,FMT='(I0)') iSpec - SpecDSMC(iSpec)%PolyatomicMol=GETLOGICAL('Part-Species'//TRIM(hilf)//'-PolyatomicMol','.FALSE.') - IF(SpecDSMC(iSpec)%PolyatomicMol.AND.DSMC%DoTEVRRelaxation) THEN + DO iSpec = 1, nSpecies + IF(Species(iSpec)%DoOverwriteParameters) THEN + IF(Species(iSpec)%InterID.NE.4) THEN + LBWRITE (UNIT_stdOut,'(68(". "))') + WRITE(UNIT=hilf,FMT='(I0)') iSpec + SpecDSMC(iSpec)%PolyatomicMol=GETLOGICAL('Part-Species'//TRIM(hilf)//'-PolyatomicMol','.FALSE.') + IF(SpecDSMC(iSpec)%PolyatomicMol.AND.DSMC%DoTEVRRelaxation) THEN + CALL Abort(__STAMP__,'! Simulation of Polyatomic Molecules and T-E-V-R relaxation not possible yet!!!') + END IF + IF(SpecDSMC(iSpec)%PolyatomicMol) THEN + DSMC%NumPolyatomMolecs = DSMC%NumPolyatomMolecs + 1 + SpecDSMC(iSpec)%SpecToPolyArray = DSMC%NumPolyatomMolecs + ELSEIF ((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN + SpecDSMC(iSpec)%Xi_Rot = 2 + SpecDSMC(iSpec)%CharaTVib = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempVib') + SpecDSMC(iSpec)%CharaTRot = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempRot','0') + SpecDSMC(iSpec)%Ediss_eV = GETREAL('Part-Species'//TRIM(hilf)//'-Ediss_eV') + SpecDSMC(iSpec)%MaxVibQuant = 200 + ! Calculation of the zero-point energy + SpecDSMC(iSpec)%EZeroPoint = DSMC%GammaQuant * BoltzmannConst * SpecDSMC(iSpec)%CharaTVib + ! Calculation of the dissociation quantum number (used for QK chemistry) + SpecDSMC(iSpec)%DissQuant = INT(SpecDSMC(iSpec)%Ediss_eV*ElementaryCharge/(BoltzmannConst*SpecDSMC(iSpec)%CharaTVib)) + END IF + ! Read in species values for rotational relaxation models of Boyd/Zhang if necessary + IF(DSMC%RotRelaxProb.GT.1.0.AND.((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) THEN + SpecDSMC(iSpec)%CollNumRotInf = GETREAL('Part-Species'//TRIM(hilf)//'-CollNumRotInf') + SpecDSMC(iSpec)%TempRefRot = GETREAL('Part-Species'//TRIM(hilf)//'-TempRefRot') + IF(SpecDSMC(iSpec)%CollNumRotInf*SpecDSMC(iSpec)%TempRefRot.EQ.0) THEN CALL Abort(& - __STAMP__& - ,'! Simulation of Polyatomic Molecules and T-E-V-R relaxation not possible yet!!!') + __STAMP__& + ,'Error! CollNumRotRef or TempRefRot is equal to zero for species:', iSpec) END IF - IF(SpecDSMC(iSpec)%PolyatomicMol) THEN - DSMC%NumPolyatomMolecs = DSMC%NumPolyatomMolecs + 1 - SpecDSMC(iSpec)%SpecToPolyArray = DSMC%NumPolyatomMolecs - ELSEIF ((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN - SpecDSMC(iSpec)%Xi_Rot = 2 - SpecDSMC(iSpec)%CharaTVib = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempVib') - SpecDSMC(iSpec)%CharaTRot = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempRot','0') - SpecDSMC(iSpec)%Ediss_eV = GETREAL('Part-Species'//TRIM(hilf)//'-Ediss_eV') - SpecDSMC(iSpec)%MaxVibQuant = 200 - ! Calculation of the zero-point energy - SpecDSMC(iSpec)%EZeroPoint = DSMC%GammaQuant * BoltzmannConst * SpecDSMC(iSpec)%CharaTVib - ! Calculation of the dissociation quantum number (used for QK chemistry) - SpecDSMC(iSpec)%DissQuant = INT(SpecDSMC(iSpec)%Ediss_eV*ElementaryCharge/(BoltzmannConst*SpecDSMC(iSpec)%CharaTVib)) + END IF + ! Read in species values for vibrational relaxation models of Milikan-White if necessary + IF(DSMC%VibRelaxProb.EQ.2.0) THEN + ! Only molecules or charged molecules + IF(((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) THEN + ALLOCATE(SpecDSMC(iSpec)%MW_ConstA(1:nSpecies)) + ALLOCATE(SpecDSMC(iSpec)%MW_ConstB(1:nSpecies)) + DO jSpec = 1, nSpecies + WRITE(UNIT=hilf2,FMT='(I0)') jSpec + hilf2=TRIM(hilf)//'-'//TRIM(hilf2) + SpecDSMC(iSpec)%MW_ConstA(jSpec) = GETREAL('Part-Species'//TRIM(hilf)//'-MWConstA-'//TRIM(hilf2)) + SpecDSMC(iSpec)%MW_ConstB(jSpec) = GETREAL('Part-Species'//TRIM(hilf)//'-MWConstB-'//TRIM(hilf2)) + IF(SpecDSMC(iSpec)%MW_ConstA(jSpec).EQ.0) THEN + CALL Abort(__STAMP__,'Error! MW_ConstA is equal to zero for species:', iSpec) + END IF + IF(SpecDSMC(iSpec)%MW_ConstB(jSpec).EQ.0) THEN + CALL Abort(__STAMP__,'Error! MW_ConstB is equal to zero for species:', iSpec) + END IF + END DO END IF - ! Read in species values for rotational relaxation models of Boyd/Zhang if necessary - IF(DSMC%RotRelaxProb.GT.1.0.AND.((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) THEN - SpecDSMC(iSpec)%CollNumRotInf = GETREAL('Part-Species'//TRIM(hilf)//'-CollNumRotInf') - SpecDSMC(iSpec)%TempRefRot = GETREAL('Part-Species'//TRIM(hilf)//'-TempRefRot') - IF(SpecDSMC(iSpec)%CollNumRotInf*SpecDSMC(iSpec)%TempRefRot.EQ.0) THEN - CALL Abort(& - __STAMP__& - ,'Error! CollNumRotRef or TempRefRot is equal to zero for species:', iSpec) - END IF + SpecDSMC(iSpec)%VibCrossSec = GETREAL('Part-Species'//TRIM(hilf)//'-VibCrossSection') + ! Only molecules or charged molecules + IF((SpecDSMC(iSpec)%VibCrossSec.EQ.0).AND.((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) THEN + CALL Abort(& + __STAMP__& + ,'Error! VibCrossSec is equal to zero for species:', iSpec) END IF - ! Read in species values for vibrational relaxation models of Milikan-White if necessary - IF(DSMC%VibRelaxProb.EQ.2.0) THEN - ! Only molecules or charged molecules - IF(((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) THEN - ALLOCATE(SpecDSMC(iSpec)%MW_ConstA(1:nSpecies)) - ALLOCATE(SpecDSMC(iSpec)%MW_ConstB(1:nSpecies)) - DO jSpec = 1, nSpecies - WRITE(UNIT=hilf2,FMT='(I0)') jSpec - hilf2=TRIM(hilf)//'-'//TRIM(hilf2) - SpecDSMC(iSpec)%MW_ConstA(jSpec) = GETREAL('Part-Species'//TRIM(hilf)//'-MWConstA-'//TRIM(hilf2)) - SpecDSMC(iSpec)%MW_ConstB(jSpec) = GETREAL('Part-Species'//TRIM(hilf)//'-MWConstB-'//TRIM(hilf2)) - - IF(SpecDSMC(iSpec)%MW_ConstA(jSpec).EQ.0) THEN - CALL Abort(& - __STAMP__& - ,'Error! MW_ConstA is equal to zero for species:', iSpec) - END IF - IF(SpecDSMC(iSpec)%MW_ConstB(jSpec).EQ.0) THEN - CALL Abort(& - __STAMP__& - ,'Error! MW_ConstB is equal to zero for species:', iSpec) - END IF - END DO - END IF - SpecDSMC(iSpec)%VibCrossSec = GETREAL('Part-Species'//TRIM(hilf)//'-VibCrossSection') - ! Only molecules or charged molecules - IF((SpecDSMC(iSpec)%VibCrossSec.EQ.0).AND.((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20))) THEN + END IF + ! Setting the values of Rot-/Vib-RelaxProb to a fix value (electronic: species-specific values are possible) + SpecDSMC(iSpec)%RotRelaxProb = DSMC%RotRelaxProb + SpecDSMC(iSpec)%VibRelaxProb = DSMC%VibRelaxProb + SpecDSMC(iSpec)%ElecRelaxProb = GETREAL('Part-Species'//TRIM(hilf)//'-ElecRelaxProb') + ! multi init stuff + ALLOCATE(SpecDSMC(iSpec)%Init(0:Species(iSpec)%NumberOfInits)) + ! Skip the read-in of temperatures if a background gas distribution is used but not if background gas regions are used + IF(BGGas%NumberOfSpecies.GT.0) THEN + IF(BGGas%BackgroundSpecies(iSpec).AND.BGGas%UseDistribution.AND.(.NOT.BGGas%UseRegions)) THEN + SpecDSMC(iSpec)%Init(1)%TVib = 0. + SpecDSMC(iSpec)%Init(1)%TRot = 0. + SpecDSMC(iSpec)%Init(1)%Telec = 0. + CYCLE + END IF + END IF + DO iInit = 1, Species(iSpec)%NumberOfInits + WRITE(UNIT=hilf2,FMT='(I0)') iInit + hilf2=TRIM(hilf)//'-Init'//TRIM(hilf2) + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN + SpecDSMC(iSpec)%Init(iInit)%TVib = GETREAL('Part-Species'//TRIM(hilf2)//'-TempVib') + SpecDSMC(iSpec)%Init(iInit)%TRot = GETREAL('Part-Species'//TRIM(hilf2)//'-TempRot') + END IF + ! read electronic temperature + IF (DSMC%ElectronicModel.GT.0) THEN + SpecDSMC(iSpec)%Init(iInit)%Telec = GETREAL('Part-Species'//TRIM(hilf2)//'-TempElec') + END IF ! electronic model + END DO !Inits + ALLOCATE(SpecDSMC(iSpec)%Surfaceflux(1:Species(iSpec)%nSurfacefluxBCs)) + DO iInit = 1, Species(iSpec)%nSurfacefluxBCs + WRITE(UNIT=hilf2,FMT='(I0)') iInit + hilf2=TRIM(hilf)//'-Surfaceflux'//TRIM(hilf2) + IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN + SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib = GETREAL('Part-Species'//TRIM(hilf2)//'-TempVib','0.') + SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot = GETREAL('Part-Species'//TRIM(hilf2)//'-TempRot','0.') + IF (SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot*SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib.EQ.0.) THEN CALL Abort(& - __STAMP__& - ,'Error! VibCrossSec is equal to zero for species:', iSpec) + __STAMP__& + ,'Error! TVib and TRot not def. in Part-SpeciesXX-SurfacefluxXX-TempVib/TempRot for iSpec, iInit',iSpec,REAL(iInit)) END IF END IF - ! Setting the values of Rot-/Vib-RelaxProb to a fix value (electronic: species-specific values are possible) - SpecDSMC(iSpec)%RotRelaxProb = DSMC%RotRelaxProb - SpecDSMC(iSpec)%VibRelaxProb = DSMC%VibRelaxProb - SpecDSMC(iSpec)%ElecRelaxProb = GETREAL('Part-Species'//TRIM(hilf)//'-ElecRelaxProb') - ! multi init stuff - ALLOCATE(SpecDSMC(iSpec)%Init(0:Species(iSpec)%NumberOfInits)) - ! Skip the read-in of temperatures if a background gas distribution is used but not if background gas regions are used - IF(BGGas%NumberOfSpecies.GT.0) THEN - IF(BGGas%BackgroundSpecies(iSpec).AND.BGGas%UseDistribution.AND.(.NOT.BGGas%UseRegions)) THEN - SpecDSMC(iSpec)%Init(1)%TVib = 0. - SpecDSMC(iSpec)%Init(1)%TRot = 0. - SpecDSMC(iSpec)%Init(1)%Telec = 0. - CYCLE + ! read electronic temperature + IF (DSMC%ElectronicModel.GT.0) THEN + SpecDSMC(iSpec)%Surfaceflux(iInit)%Telec = GETREAL('Part-Species'//TRIM(hilf2)//'-TempElec','0.') + IF (SpecDSMC(iSpec)%Surfaceflux(iInit)%Telec.EQ.0.) THEN + CALL Abort(& + __STAMP__& + ,' Error! Telec not defined in Part-SpeciesXX-SurfacefluxXX-Tempelec for iSpec, iInit',iSpec,REAL(iInit)) END IF END IF - DO iInit = 1, Species(iSpec)%NumberOfInits - WRITE(UNIT=hilf2,FMT='(I0)') iInit - hilf2=TRIM(hilf)//'-Init'//TRIM(hilf2) - IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN - SpecDSMC(iSpec)%Init(iInit)%TVib = GETREAL('Part-Species'//TRIM(hilf2)//'-TempVib') - SpecDSMC(iSpec)%Init(iInit)%TRot = GETREAL('Part-Species'//TRIM(hilf2)//'-TempRot') - END IF - ! read electronic temperature - IF (DSMC%ElectronicModel.GT.0) THEN - SpecDSMC(iSpec)%Init(iInit)%Telec = GETREAL('Part-Species'//TRIM(hilf2)//'-TempElec') - END IF ! electronic model - END DO !Inits - ALLOCATE(SpecDSMC(iSpec)%Surfaceflux(1:Species(iSpec)%nSurfacefluxBCs)) - DO iInit = 1, Species(iSpec)%nSurfacefluxBCs - WRITE(UNIT=hilf2,FMT='(I0)') iInit - hilf2=TRIM(hilf)//'-Surfaceflux'//TRIM(hilf2) - IF((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN - SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib = GETREAL('Part-Species'//TRIM(hilf2)//'-TempVib','0.') - SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot = GETREAL('Part-Species'//TRIM(hilf2)//'-TempRot','0.') - IF (SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot*SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib.EQ.0.) THEN - CALL Abort(& - __STAMP__& - ,'Error! TVib and TRot not def. in Part-SpeciesXX-SurfacefluxXX-TempVib/TempRot for iSpec, iInit',iSpec,REAL(iInit)) - END IF - END IF - ! read electronic temperature - IF (DSMC%ElectronicModel.GT.0) THEN - SpecDSMC(iSpec)%Surfaceflux(iInit)%Telec = GETREAL('Part-Species'//TRIM(hilf2)//'-TempElec','0.') - IF (SpecDSMC(iSpec)%Surfaceflux(iInit)%Telec.EQ.0.) THEN - CALL Abort(& - __STAMP__& - ,' Error! Telec not defined in Part-SpeciesXX-SurfacefluxXX-Tempelec for iSpec, iInit',iSpec,REAL(iInit)) - END IF - END IF - END DO !SurfaceFluxBCs - END IF ! not electron - END IF !iSpec overwrite parameters - END DO !Species - END IF + END DO !SurfaceFluxBCs + END IF ! not electron + END IF !iSpec overwrite parameters + END DO !Species ! Initialization of polyatomic species and burn-in phase (Metropolis-Hastings) per initialization region IF(DSMC%NumPolyatomMolecs.GT.0) THEN @@ -987,14 +979,10 @@ SUBROUTINE InitDSMC() DSMC%CompareLandauTeller = GETLOGICAL('Particles-DSMC-CompareLandauTeller','.FALSE.') IF(DSMC%CompareLandauTeller) THEN IF(CollisMode.NE.2) THEN - CALL abort(& - __STAMP__& - ,'ERROR: Comparison with Landau-Teller only available in CollisMode = 2, CollisMode:', CollisMode) + CALL abort(__STAMP__,'ERROR: Comparison with Landau-Teller only available in CollisMode = 2, CollisMode:', CollisMode) END IF IF(nSpecies.GT.1) THEN - CALL abort(& - __STAMP__& - ,'ERROR: Comparison with Landau-Teller only available for a single species, nSpecies:', nSpecies) + CALL abort(__STAMP__,'ERROR: Comparison with Landau-Teller only available for a single species, nSpecies:', nSpecies) END IF END IF #endif @@ -1022,25 +1010,22 @@ SUBROUTINE InitDSMC() ! Define chemical reactions (including ionization and backward reaction rate) !----------------------------------------------------------------------------------------------------------------------------------- IF (CollisMode.EQ.3) THEN ! perform chemical reactions - IF(SpeciesDatabase.NE.'none') THEN ! Initialize FORTRAN interface. CALL H5OPEN_F(err) CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) DO iSpec = 1, nSpecies - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) WRITE(UNIT=hilf,FMT='(I0)') iSpec ! Read-in of heat of formation, ions are treated later using the heat of formation of their ground state and data from the ! from the electronic state database to ensure consistent energies across chemical reactions of QK and Arrhenius type. IF((Species(iSpec)%InterID.EQ.10).OR.(Species(iSpec)%InterID.EQ.20).OR.(Species(iSpec)%InterID.EQ.4)) THEN SpecDSMC(iSpec)%HeatOfFormation = 0.0 - LBWRITE (UNIT_stdOut,*) 'HeatOfFormation_K: ', SpecDSMC(iSpec)%HeatOfFormation ELSE CALL ReadAttribute(file_id_specdb,'HeatOfFormation_K',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%HeatOfFormation) - LBWRITE (UNIT_stdOut,*) 'HeatOfFormation_K: ', SpecDSMC(iSpec)%HeatOfFormation SpecDSMC(iSpec)%HeatOfFormation = SpecDSMC(iSpec)%HeatOfFormation * BoltzmannConst ENDIF + CALL PrintOption('HeatOfFormation [J], '//TRIM(Species(iSpec)%Name),'READIN',RealOpt=SpecDSMC(iSpec)%HeatOfFormation) END DO ! iSpec = nSpecies ! Close the file. CALL H5FCLOSE_F(file_id_specdb, err) @@ -1068,11 +1053,9 @@ SUBROUTINE InitDSMC() CALL H5OPEN_F(err) CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) DO iSpec=1,nSpecies - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) - WRITE(UNIT=hilf,FMT='(I0)') iSpec - CALL AttributeExists(file_id_specdb,'PreviousState',TRIM(dsetname), AttrExists=Attr_Exists) - IF (Attr_Exists) THEN + CALL AttributeExists(file_id_specdb,'PreviousState',TRIM(dsetname), AttrExists=AttrExists) + IF (AttrExists) THEN CALL ReadAttribute(file_id_specdb,'PreviousState',1,DatasetName = dsetname,StrScalar=hilfname) DO jSpec=1,nSpecies IF(TRIM(hilfname).EQ.TRIM(Species(jSpec)%Name)) THEN @@ -1082,7 +1065,10 @@ SUBROUTINE InitDSMC() ELSE SpecDSMC(iSpec)%PreviousState = 0 END IF - LBWRITE (UNIT_stdOut,*) 'PreviousState: ', SpecDSMC(iSpec)%PreviousState + IF(SpecDSMC(iSpec)%PreviousState.GT.0) THEN + CALL PrintOption('Previous species of '//TRIM(Species(iSpec)%Name)//' (ground state or previous ionized level)', & + 'READIN',StrOpt=TRIM(Species(SpecDSMC(iSpec)%PreviousState)%Name)) + END IF END DO ! Close the file. CALL H5FCLOSE_F(file_id_specdb, err) @@ -1102,6 +1088,7 @@ SUBROUTINE InitDSMC() END DO DO iSpec=1,nSpecies + WRITE(UNIT=hilf,FMT='(I0)') iSpec ! Read-in of species for field ionization (only required if it cannot be determined automatically) IF(Species(iSpec)%InterID.NE.4) THEN SpecDSMC(iSpec)%NextIonizationSpecies = GETINT('Part-Species'//TRIM(hilf)//'-NextIonizationSpecies') @@ -1382,11 +1369,10 @@ SUBROUTINE CalcHeatOfFormationIons() ! Initialize FORTRAN interface. CALL H5OPEN_F(err) CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) CALL ReadAttribute(file_id_specdb,'HeatOfFormation_K',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%HeatOfFormation) - LBWRITE (UNIT_stdOut,*) 'HeatOfFormation_K: ', SpecDSMC(iSpec)%HeatOfFormation SpecDSMC(iSpec)%HeatOfFormation = SpecDSMC(iSpec)%HeatOfFormation * BoltzmannConst + CALL PrintOption('HeatOfFormation [J], '//TRIM(Species(iSpec)%Name),'READIN',RealOpt=SpecDSMC(iSpec)%HeatOfFormation) ! Close the file. CALL H5FCLOSE_F(file_id_specdb, err) ! Close FORTRAN interface. @@ -1411,7 +1397,7 @@ SUBROUTINE CalcHeatOfFormationIons() 'ERROR: Nbr. of ionization lvls per spec limited to 100. More likely wrong input in PreviuosState of spec:', iSpec) END DO IF(AutoDetect)THEN - LBWRITE(UNIT_stdOut,'(A)')' Automatically determined HeatOfFormation:' + LBWRITE(UNIT_stdOut,'(A)')' | Automatically determined HeatOfFormation:' AutoDetect=.FALSE. END IF ! Add the heat of formation of the ground state @@ -1469,7 +1455,7 @@ SUBROUTINE SetNextIonizationSpecies() END IF END DO IF(AutoDetect)THEN - LBWRITE(UNIT_stdOut,'(A)')' Automatically determined NextIonizationSpecies:' + LBWRITE(UNIT_stdOut,'(A)')' | Automatically determined NextIonizationSpecies:' DO iSpec = 1, nSpecies WRITE(UNIT=hilf2,FMT='(I0)') iSpec CALL PrintOption('iSpec='//TRIM(hilf2)//': NextIonizationSpecies','CALCUL.',IntOpt=SpecDSMC(iSpec)%NextIonizationSpecies) diff --git a/src/particles/dsmc/dsmc_polyatomic_model.f90 b/src/particles/dsmc/dsmc_polyatomic_model.f90 index 4ba52e2f9..7d6d67479 100644 --- a/src/particles/dsmc/dsmc_polyatomic_model.f90 +++ b/src/particles/dsmc/dsmc_polyatomic_model.f90 @@ -42,226 +42,155 @@ MODULE MOD_DSMC_PolyAtomicModel SUBROUTINE InitPolyAtomicMolecs(iSpec) !=================================================================================================================================== -! Initialization of variables for polyatomic molecules +!> Initialization of variables for polyatomic molecules !=================================================================================================================================== ! MODULES - USE MOD_Globals - USE MOD_Globals_Vars, ONLY : BoltzmannConst - USE MOD_DSMC_Vars, ONLY : DSMC, SpecDSMC, PolyatomMolDSMC - USE MOD_ReadInTools - USE MOD_PARTICLE_Vars, ONLY : Species, SpeciesDatabase - USE MOD_io_hdf5 - USE MOD_HDF5_input, ONLY : ReadAttribute, DatasetExists, AttributeExists +USE MOD_Globals +USE MOD_Globals_Vars ,ONLY: BoltzmannConst +USE MOD_DSMC_Vars ,ONLY: DSMC, SpecDSMC, PolyatomMolDSMC +USE MOD_ReadInTools +USE MOD_PARTICLE_Vars ,ONLY: Species, SpeciesDatabase +USE MOD_io_hdf5 +USE MOD_HDF5_input ,ONLY: ReadAttribute, DatasetExists, AttributeExists #if USE_MPI - USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance +USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance #endif /*USE_MPI*/ ! IMPLICIT VARIABLE HANDLING - IMPLICIT NONE +IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES - INTEGER, INTENT(IN) :: iSpec +INTEGER, INTENT(IN) :: iSpec !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES - CHARACTER(32) :: hilf, hilf2 - INTEGER :: iPolyatMole, iVibDOF - LOGICAL :: Attr_Exists - CHARACTER(LEN=64) :: dsetname - INTEGER(HID_T) :: file_id_specdb ! File identifier - INTEGER :: IntToLog,err +CHARACTER(32) :: hilf, hilf2 +CHARACTER(LEN=64) :: dsetname +INTEGER :: iPolyatMole, iVibDOF, IntToLog, err +INTEGER(HID_T) :: file_id_specdb ! File identifier +LOGICAL :: AttrExists !=================================================================================================================================== - WRITE(UNIT=hilf,FMT='(I0)') iSpec - iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray - IF(SpeciesDatabase.NE.'none') THEN - ! Initialize FORTRAN interface. - CALL H5OPEN_F(err) - CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) - - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) - dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) - - CALL ReadAttribute(file_id_specdb,'LinearMolec',1,DatasetName = dsetname,IntScalar=IntToLog) - IF(IntToLog.EQ.1) THEN - PolyatomMolDSMC(iPolyatMole)%LinearMolec = .TRUE. - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) - LBWRITE (UNIT_stdOut,*) 'LinearMolec: ', PolyatomMolDSMC(iPolyatMole)%LinearMolec - ELSE - PolyatomMolDSMC(iPolyatMole)%LinearMolec = .FALSE. - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) - LBWRITE (UNIT_stdOut,*) 'LinearMolec: ', PolyatomMolDSMC(iPolyatMole)%LinearMolec - END IF - - ! Close the file. - CALL H5FCLOSE_F(file_id_specdb, err) - ! Close FORTRAN interface. - CALL H5CLOSE_F(err) - - END IF - - IF(ANY(Species(:)%DoOverwriteParameters)) THEN - IF(Species(iSpec)%DoOverwriteParameters) THEN - LBWRITE (UNIT_stdOut,'(66(". "))') - PolyatomMolDSMC(iPolyatMole)%LinearMolec = GETLOGICAL('Part-Species'//TRIM(hilf)//'-LinearMolec') - END IF - END IF +LBWRITE (UNIT_stdOut,'(68(". "))') +WRITE(UNIT=hilf,FMT='(I0)') iSpec +iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray - IF (PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN - SpecDSMC(iSpec)%Xi_Rot = 2 - ELSE - SpecDSMC(iSpec)%Xi_Rot = 3 +IF(SpeciesDatabase.NE.'none') THEN + ! Initialize FORTRAN interface. + CALL H5OPEN_F(err) + CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) + dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) + ! Linear molecule + CALL ReadAttribute(file_id_specdb,'LinearMolec',1,DatasetName = dsetname,IntScalar=IntToLog) + IF(IntToLog.EQ.1) THEN + PolyatomMolDSMC(iPolyatMole)%LinearMolec = .TRUE. + ELSE + PolyatomMolDSMC(iPolyatMole)%LinearMolec = .FALSE. END IF + CALL PrintOption('LinearMolec, '//TRIM(Species(iSpec)%Name),'READIN',LogOpt=PolyatomMolDSMC(iPolyatMole)%LinearMolec) + ! Number of atoms + CALL ReadAttribute(file_id_specdb,'NumOfAtoms',1,DatasetName = dsetname,IntScalar=PolyatomMolDSMC(iPolyatMole)%NumOfAtoms) + CALL PrintOption('NumOfAtoms, '//TRIM(Species(iSpec)%Name),'READIN',IntOpt=PolyatomMolDSMC(iPolyatMole)%NumOfAtoms) + ! Dissociation energy + ! TSHO not implemented with polyatomic molecules, but Ediss_eV required for the calculation of polyatomic temp. (upper bound) + CALL ReadAttribute(file_id_specdb,'Ediss_eV',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%Ediss_eV) + CALL PrintOption('Ediss_eV, '//TRIM(Species(iSpec)%Name),'READIN',RealOpt=SpecDSMC(iSpec)%Ediss_eV) + ! Close the file. + CALL H5FCLOSE_F(file_id_specdb, err) + ! Close FORTRAN interface. + CALL H5CLOSE_F(err) +END IF +IF(Species(iSpec)%DoOverwriteParameters) THEN + PolyatomMolDSMC(iPolyatMole)%LinearMolec = GETLOGICAL('Part-Species'//TRIM(hilf)//'-LinearMolec') + PolyatomMolDSMC(iPolyatMole)%NumOfAtoms = GETINT('Part-Species'//TRIM(hilf)//'-NumOfAtoms') + SpecDSMC(iSpec)%Ediss_eV = GETREAL('Part-Species'//TRIM(hilf)//'-Ediss_eV') +END IF +IF(SpecDSMC(iSpec)%Ediss_eV.EQ.0.) THEN + CALL abort(__STAMP__,'ERROR in Polyatomic Species-Ini: Missing dissociation energy, Species: ',iSpec) +END IF +IF (PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN + SpecDSMC(iSpec)%Xi_Rot = 2 +ELSE + SpecDSMC(iSpec)%Xi_Rot = 3 +END IF - IF(SpeciesDatabase.NE.'none') THEN - ! Initialize FORTRAN interface. - CALL H5OPEN_F(err) - CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) - - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) - dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) - - CALL ReadAttribute(file_id_specdb,'NumOfAtoms',1,DatasetName = dsetname,IntScalar=PolyatomMolDSMC(iPolyatMole)%NumOfAtoms) - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) - LBWRITE (UNIT_stdOut,*) 'NumOfAtoms: ', PolyatomMolDSMC(iPolyatMole)%NumOfAtoms - - ! Close the file. - CALL H5FCLOSE_F(file_id_specdb, err) - ! Close FORTRAN interface. - CALL H5CLOSE_F(err) - - END IF - - IF(ANY(Species(:)%DoOverwriteParameters)) THEN - IF(Species(iSpec)%DoOverwriteParameters) THEN - LBWRITE (UNIT_stdOut,'(66(". "))') - PolyatomMolDSMC(iPolyatMole)%NumOfAtoms = GETINT('Part-Species'//TRIM(hilf)//'-NumOfAtoms') - END IF - END IF - - ! TSHO not implemented with polyatomic molecules, but Ediss_eV required for the calculation of polyatomic temp. (upper bound) - IF(SpeciesDatabase.NE.'none') THEN - IF(.NOT.Species(iSpec)%DoOverwriteParameters) THEN - ! Initialize FORTRAN interface. - CALL H5OPEN_F(err) - CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) - - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) - dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) - - CALL AttributeExists(file_id_specdb,'Ediss_eV',TRIM(dsetname), AttrExists=Attr_Exists) - IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'Ediss_eV',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%Ediss_eV) - ELSE - CALL abort(__STAMP__& - ,'ERROR in Polyatomic Species-Ini: Missing dissociation energy, Species: ',iSpec) - END IF - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) - LBWRITE (UNIT_stdOut,*) 'Ediss_eV: ', SpecDSMC(iSpec)%Ediss_eV - - ! Close the file. - CALL H5FCLOSE_F(file_id_specdb, err) - ! Close FORTRAN interface. - CALL H5CLOSE_F(err) - END IF - - END IF - - IF(ANY(Species(:)%DoOverwriteParameters)) THEN - IF(Species(iSpec)%DoOverwriteParameters) THEN - LBWRITE (UNIT_stdOut,'(66(". "))') - SpecDSMC(iSpec)%Ediss_eV = GETREAL('Part-Species'//TRIM(hilf)//'-Ediss_eV','0.') - END IF - END IF - - IF(SpecDSMC(iSpec)%Ediss_eV.EQ.0.) THEN - CALL abort(& - __STAMP__& - ,'ERROR in Polyatomic Species-Ini: Missing dissociation energy, Species: ',iSpec) - END IF - PolyatomMolDSMC(iPolyatMole)%VibDOF = 3*PolyatomMolDSMC(iPolyatMole)%NumOfAtoms - 3 - SpecDSMC(iSpec)%Xi_Rot - ALLOCATE(PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(PolyatomMolDSMC(iPolyatMole)%VibDOF)) - IF(DSMC%PolySingleMode) THEN - ALLOCATE(PolyatomMolDSMC(iPolyatMole)%GammaVib(PolyatomMolDSMC(iPolyatMole)%VibDOF)) - PolyatomMolDSMC(iPolyatMole)%GammaVib(:) = 0.0 - ALLOCATE(PolyatomMolDSMC(iPolyatMole)%VibRelaxProb(PolyatomMolDSMC(iPolyatMole)%VibDOF)) - PolyatomMolDSMC(iPolyatMole)%VibRelaxProb(:) = 0.0 - END IF +PolyatomMolDSMC(iPolyatMole)%VibDOF = 3*PolyatomMolDSMC(iPolyatMole)%NumOfAtoms - 3 - SpecDSMC(iSpec)%Xi_Rot +ALLOCATE(PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(PolyatomMolDSMC(iPolyatMole)%VibDOF)) +IF(DSMC%PolySingleMode) THEN + ALLOCATE(PolyatomMolDSMC(iPolyatMole)%GammaVib(PolyatomMolDSMC(iPolyatMole)%VibDOF)) + PolyatomMolDSMC(iPolyatMole)%GammaVib(:) = 0.0 + ALLOCATE(PolyatomMolDSMC(iPolyatMole)%VibRelaxProb(PolyatomMolDSMC(iPolyatMole)%VibDOF)) + PolyatomMolDSMC(iPolyatMole)%VibRelaxProb(:) = 0.0 +END IF ! Read-in of characteristic rotational temperature - ALLOCATE(PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(3)) - - IF(SpeciesDatabase.NE.'none') THEN - ! Initialize FORTRAN interface. - CALL H5OPEN_F(err) - CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) - - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) - dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) - - IF(PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN - CALL AttributeExists(file_id_specdb,'CharaTempRot',TRIM(dsetname), AttrExists=Attr_Exists) - IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'CharaTempRot',1,DatasetName = dsetname,RealScalar=PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1)) - ELSE - PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1) = 0 - END IF - LBWRITE (UNIT_stdOut,*) 'CharaTempRot: ', PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1) - PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(2:3) = 1 - ELSE - DO iVibDOF = 1,3 - WRITE(UNIT=hilf2,FMT='(I0)') iVibDOF - CALL AttributeExists(file_id_specdb,TRIM('CharaTempRot'//TRIM(hilf2)),TRIM(dsetname), AttrExists=Attr_Exists) - IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,TRIM('CharaTempRot'//TRIM(hilf2)),1,DatasetName = dsetname,RealScalar=PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF)) - ELSE - PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF) = 0 - END IF - LBWRITE (UNIT_stdOut,*) 'CharaTempRot',hilf2,':', PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF) - END DO +ALLOCATE(PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(3)) + +IF(SpeciesDatabase.NE.'none') THEN + ! Initialize FORTRAN interface. + CALL H5OPEN_F(err) + CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) + dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) + IF(PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN + CALL AttributeExists(file_id_specdb,'CharaTempRot',TRIM(dsetname), AttrExists=AttrExists) + IF (AttrExists) THEN + CALL ReadAttribute(file_id_specdb,'CharaTempRot',1,DatasetName = dsetname,RealScalar=PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1)) + ELSE + PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1) = 0 END IF - ! Read-in of characteristic vibrational temperature and calculation of zero-point energy - DO iVibDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF + CALL PrintOption('CharaTempRot, '//TRIM(Species(iSpec)%Name),'READIN',RealOpt=PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1)) + PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(2:3) = 1 + ELSE + DO iVibDOF = 1,3 WRITE(UNIT=hilf2,FMT='(I0)') iVibDOF - CALL ReadAttribute(file_id_specdb,TRIM('CharaTempVib'//TRIM(hilf2)),1,DatasetName = dsetname,RealScalar=PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF)) - SpecDSMC(iSpec)%EZeroPoint = SpecDSMC(iSpec)%EZeroPoint & - + DSMC%GammaQuant*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF)*BoltzmannConst - LBWRITE (UNIT_stdOut,*) 'CharaTempVib',hilf2,':', PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF) + CALL AttributeExists(file_id_specdb,TRIM('CharaTempRot'//TRIM(hilf2)),TRIM(dsetname), AttrExists=AttrExists) + IF (AttrExists) THEN + CALL ReadAttribute(file_id_specdb,TRIM('CharaTempRot'//TRIM(hilf2)),1,DatasetName = dsetname,RealScalar=PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF)) + ELSE + PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF) = 0 + END IF + CALL PrintOption('CharaTempRot'//TRIM(hilf2)//' '//TRIM(Species(iSpec)%Name),'READIN',RealOpt=PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF)) END DO - ! Close the file. - CALL H5FCLOSE_F(file_id_specdb, err) - ! Close FORTRAN interface. - CALL H5CLOSE_F(err) - END IF - - IF(ANY(Species(:)%DoOverwriteParameters)) THEN - IF(Species(iSpec)%DoOverwriteParameters) THEN - IF(PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN - PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1) = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempRot','0') - PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(2:3) = 1 - ELSE - DO iVibDOF = 1,3 - WRITE(UNIT=hilf2,FMT='(I0)') iVibDOF - PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF) = & - GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempRot'//TRIM(hilf2),'0') - END DO - END IF - ! Read-in of characteristic vibrational temperature and calculation of zero-point energy - DO iVibDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF - WRITE(UNIT=hilf2,FMT='(I0)') iVibDOF - PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF) = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempVib'//TRIM(hilf2)) - SpecDSMC(iSpec)%EZeroPoint = SpecDSMC(iSpec)%EZeroPoint & - + DSMC%GammaQuant*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF)*BoltzmannConst - END DO - END IF + ! Read-in of characteristic vibrational temperature and calculation of zero-point energy + DO iVibDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF + WRITE(UNIT=hilf2,FMT='(I0)') iVibDOF + CALL ReadAttribute(file_id_specdb,TRIM('CharaTempVib'//TRIM(hilf2)),1,DatasetName = dsetname,RealScalar=PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF)) + SpecDSMC(iSpec)%EZeroPoint = SpecDSMC(iSpec)%EZeroPoint & + + DSMC%GammaQuant*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF)*BoltzmannConst + CALL PrintOption('CharaTempVib'//TRIM(hilf2)//' '//TRIM(Species(iSpec)%Name),'READIN',RealOpt=PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF)) + END DO + ! Close the file. + CALL H5FCLOSE_F(file_id_specdb, err) + ! Close FORTRAN interface. + CALL H5CLOSE_F(err) +END IF + +IF(Species(iSpec)%DoOverwriteParameters) THEN + IF(PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN + PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1) = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempRot','0') + PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(2:3) = 1 + ELSE + DO iVibDOF = 1,3 + WRITE(UNIT=hilf2,FMT='(I0)') iVibDOF + PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF) = & + GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempRot'//TRIM(hilf2),'0') + END DO END IF + ! Read-in of characteristic vibrational temperature and calculation of zero-point energy + DO iVibDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF + WRITE(UNIT=hilf2,FMT='(I0)') iVibDOF + PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF) = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempVib'//TRIM(hilf2)) + SpecDSMC(iSpec)%EZeroPoint = SpecDSMC(iSpec)%EZeroPoint & + + DSMC%GammaQuant*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF)*BoltzmannConst + END DO +END IF - ALLOCATE(PolyatomMolDSMC(iPolyatMole)%MaxVibQuantDOF(PolyatomMolDSMC(iPolyatMole)%VibDOF)) - ! Maximum number of quantum number per DOF cut at 80 to reduce computational effort - PolyatomMolDSMC(iPolyatMole)%MaxVibQuantDOF(1:PolyatomMolDSMC(iPolyatMole)%VibDOF) = 80 +ALLOCATE(PolyatomMolDSMC(iPolyatMole)%MaxVibQuantDOF(PolyatomMolDSMC(iPolyatMole)%VibDOF)) +! Maximum number of quantum number per DOF cut at 80 to reduce computational effort +PolyatomMolDSMC(iPolyatMole)%MaxVibQuantDOF(1:PolyatomMolDSMC(iPolyatMole)%VibDOF) = 80 END SUBROUTINE InitPolyAtomicMolecs diff --git a/src/particles/emission/particle_emission_init.f90 b/src/particles/emission/particle_emission_init.f90 index a4d6eff08..96bb4b470 100644 --- a/src/particles/emission/particle_emission_init.f90 +++ b/src/particles/emission/particle_emission_init.f90 @@ -484,12 +484,9 @@ SUBROUTINE InitialParticleInserting() CALL SetPartPosAndVeloEmissionDistribution(iSpec,iInit,NbrOfParticle) CASE DEFAULT NbrOfParticle = INT(Species(iSpec)%Init(iInit)%ParticleNumber,4) - LBWRITE(UNIT_stdOut,'(A,I0,A)') ' Set particle position for species ',iSpec,' ... ' CALL SetParticlePosition(iSpec,iInit,NbrOfParticle) - LBWRITE(UNIT_stdOut,'(A,I0,A)') ' Set particle velocities for species ',iSpec,' ... ' CALL SetParticleVelocity(iSpec,iInit,NbrOfParticle) END SELECT - LBWRITE(UNIT_stdOut,'(A,I0,A)') ' Set particle charge and mass for species ',iSpec,' ... ' CALL SetParticleChargeAndMass(iSpec,NbrOfParticle) IF (usevMPF) CALL SetParticleMPF(iSpec,iInit,NbrOfParticle) IF (UseVarTimeStep) CALL SetParticleTimeStep(NbrOfParticle) diff --git a/src/particles/mcc/mcc_xsec.f90 b/src/particles/mcc/mcc_xsec.f90 index 1bbfe774d..65519bb80 100644 --- a/src/particles/mcc/mcc_xsec.f90 +++ b/src/particles/mcc/mcc_xsec.f90 @@ -94,7 +94,7 @@ SUBROUTINE ReadCollXSec(iCase,iSpec,jSpec) END IF CALL H5LEXISTS_F(file_id_dsmc, TRIM(spec_pair), DatasetFound, err) IF(.NOT.DatasetFound) THEN - LBWRITE(UNIT_StdOut,'(A)') TRIM(spec_pair)//': No data set found. Using standard collision modelling.' + LBWRITE(UNIT_StdOut,'(A)') ' | '//TRIM(spec_pair)//': No data set found. Using standard collision modelling.' RETURN END IF END IF @@ -116,7 +116,7 @@ SUBROUTINE ReadCollXSec(iCase,iSpec,jSpec) END IF IF(DatasetFound) CALL abort(__STAMP__,'ERROR: Please provide either elastic or effective collision cross-section data '//& & 'for '//TRIM(spec_pair)//'.') - LBWRITE(UNIT_StdOut,'(A)') TRIM(spec_pair)//': Found EFFECTIVE collision cross section.' + LBWRITE(UNIT_StdOut,'(A)') ' | '//TRIM(spec_pair)//': Found EFFECTIVE collision cross section.' ELSE IF (SpeciesDatabase.EQ.'none') THEN @@ -128,9 +128,9 @@ SUBROUTINE ReadCollXSec(iCase,iSpec,jSpec) IF(DatasetFound) THEN SpecXSec(iCase)%UseCollXSec = .TRUE. SpecXSec(iCase)%CollXSec_Effective = .FALSE. - LBWRITE(UNIT_StdOut,'(A)') TRIM(spec_pair)//': Found ELASTIC collision cross section.' + LBWRITE(UNIT_StdOut,'(A)') ' | '//TRIM(spec_pair)//': Found ELASTIC collision cross section.' ELSE - LBWRITE(UNIT_StdOut,'(A)') TRIM(spec_pair)//': No data set found. Using standard collision modelling.' + LBWRITE(UNIT_StdOut,'(A)') ' | '//TRIM(spec_pair)//': No data set found. Using standard collision modelling.' RETURN END IF END IF @@ -227,7 +227,7 @@ SUBROUTINE ReadVibXSec(iCase,iSpec,jSpec) END IF CALL H5LEXISTS_F(file_id_dsmc, TRIM(spec_pair), GroupFound, err) IF(.NOT.GroupFound) THEN - LBWRITE(UNIT_StdOut,'(A)') TRIM(spec_pair)//': No vibrational excitation cross sections found, using constant read-in values.' + LBWRITE(UNIT_StdOut,'(A)') ' | '//TRIM(spec_pair)//': No vibrational excitation cross sections found, using constant read-in values.' RETURN END IF END IF @@ -236,7 +236,7 @@ SUBROUTINE ReadVibXSec(iCase,iSpec,jSpec) groupname = TRIM(spec_pair)//'/VIBRATION/' CALL H5LEXISTS_F(file_id_dsmc, TRIM(groupname), GroupFound, err) IF(.NOT.GroupFound) THEN - LBWRITE(UNIT_StdOut,'(A)') TRIM(spec_pair)//': No vibrational excitation cross sections found, using constant read-in values.' + LBWRITE(UNIT_StdOut,'(A)') ' | '//TRIM(spec_pair)//': No vibrational excitation cross sections found, using constant read-in values.' RETURN END IF @@ -245,13 +245,13 @@ SUBROUTINE ReadVibXSec(iCase,iSpec,jSpec) call H5Gget_info_f(group_id, storage, nVib,max_corder, err) ! If cross-section data is found, set the corresponding flag IF(nVib.GT.0) THEN - LBWRITE(UNIT_StdOut,'(A,I3,A)') TRIM(spec_pair)//': Found ', nVib,' vibrational excitation cross section(s).' + LBWRITE(UNIT_StdOut,'(A,I3,A)') ' | '//TRIM(spec_pair)//': Found ', nVib,' vibrational excitation cross section(s).' SpecXSec(iCase)%UseVibXSec = .TRUE. ELSE - LBWRITE(UNIT_StdOut,'(A)') TRIM(spec_pair)//': No vibrational excitation cross sections found, using constant read-in values.' + LBWRITE(UNIT_StdOut,'(A)') ' | '//TRIM(spec_pair)//': No vibrational excitation cross sections found, using constant read-in values.' END IF ELSE - LBWRITE(UNIT_StdOut,'(A)') TRIM(spec_pair)//': No vibrational excitation cross sections found, using constant read-in values.' + LBWRITE(UNIT_StdOut,'(A)') ' | '//TRIM(spec_pair)//': No vibrational excitation cross sections found, using constant read-in values.' END IF IF(SpecXSec(iCase)%UseVibXSec) THEN @@ -354,7 +354,7 @@ SUBROUTINE ReadElecXSec(iCase,iSpec,jSpec) END IF CALL H5LEXISTS_F(file_id_dsmc, TRIM(spec_pair), GroupFound, err) IF(.NOT.GroupFound) THEN - LBWRITE(UNIT_StdOut,'(A)') TRIM(spec_pair)//': No electronic excitation cross sections found, using constant read-in values.' + LBWRITE(UNIT_StdOut,'(A)') ' | '//TRIM(spec_pair)//': No electronic excitation cross sections found, using constant read-in values.' RETURN END IF END IF @@ -363,7 +363,7 @@ SUBROUTINE ReadElecXSec(iCase,iSpec,jSpec) groupname = TRIM(spec_pair)//'/ELECTRONIC/' CALL H5LEXISTS_F(file_id_dsmc, TRIM(groupname), GroupFound, err) IF(.NOT.GroupFound) THEN - LBWRITE(UNIT_StdOut,'(A)') TRIM(spec_pair)//': No electronic excitation cross sections found, using constant read-in values.' + LBWRITE(UNIT_StdOut,'(A)') ' | '//TRIM(spec_pair)//': No electronic excitation cross sections found, using constant read-in values.' RETURN END IF @@ -376,10 +376,10 @@ SUBROUTINE ReadElecXSec(iCase,iSpec,jSpec) SpecXSec(iCase)%UseElecXSec = .TRUE. SpecXSec(iCase)%NumElecLevel = nElec ELSE - LBWRITE(UNIT_StdOut,'(A)') TRIM(spec_pair)//': No electronic excitation cross sections found, using constant read-in values.' + LBWRITE(UNIT_StdOut,'(A)') ' | '//TRIM(spec_pair)//': No electronic excitation cross sections found, using constant read-in values.' END IF ELSE - LBWRITE(UNIT_StdOut,'(A)') TRIM(spec_pair)//': No electronic excitation cross sections found, using constant read-in values.' + LBWRITE(UNIT_StdOut,'(A)') ' | '//TRIM(spec_pair)//': No electronic excitation cross sections found, using constant read-in values.' END IF IF(SpecXSec(iCase)%UseElecXSec) THEN @@ -889,8 +889,6 @@ SUBROUTINE ReadReacXSec(iCase,iPath) CALL H5Gget_info_f(group_id, storage, nSets,max_corder, err) IF(nSets.EQ.0) CALL abort(__STAMP__,'No reaction cross sections found in database for reaction number:',IntInfoOpt=iReac) -LBWRITE(UNIT_StdOut,'(A,I0)') 'Read cross section for '//TRIM(EductPair)//' from '//TRIM(XSecDatabaseName)//' for reaction # ', iReac - SELECT CASE(COUNT(ProductReac.GT.0)) CASE(2) ProductPair = TRIM(Species(ProductReac(1))%Name)//'-'//TRIM(Species(ProductReac(2))%Name) @@ -904,9 +902,7 @@ SUBROUTINE ReadReacXSec(iCase,iPath) CALL abort(__STAMP__,'Number of products is not supported yet! Reaction number:', IntInfoOpt=iReac) END SELECT -! IF (SpeciesDatabase.NE.'none') THEN -! groupname = TRIM('/Cross-Sections/'//TRIM(ProductPair)) -! END IF +LBWRITE(UNIT_StdOut,'(A,I0)') ' | Reading cross section for '//TRIM(EductPair)//' -> '//TRIM(ProductPair)//' as reaction # ', iReac ReactionFound = .FALSE. diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 56aa06b38..f886fe315 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -807,10 +807,8 @@ SUBROUTINE InitializeVariablesRandomNumbers() CALL InitRandomSeed(nRandomSeeds,SeedSize,Seeds) ELSE IF(nRandomSeeds.GT.0) THEN ! read in numbers from ini - IF(nRandomSeeds.GT.SeedSize) THEN - LBWRITE (*,*) 'Expected ',SeedSize,'seeds. Provided ',nRandomSeeds,'. Computer uses default value for all unset values.' - ELSE IF(nRandomSeeds.LT.SeedSize) THEN - LBWRITE (*,*) 'Expected ',SeedSize,'seeds. Provided ',nRandomSeeds,'. Computer uses default value for all unset values.' + IF(nRandomSeeds.GT.SeedSize.OR.nRandomSeeds.LT.SeedSize) THEN + LBWRITE (*,*) '| Expected ',SeedSize,'seeds. Provided ',nRandomSeeds,'. Computer uses default value for all unset values.' END IF DO iSeed=1,MIN(SeedSize,nRandomSeeds) WRITE(UNIT=hilf,FMT='(I0)') iSeed @@ -1536,7 +1534,8 @@ END SUBROUTINE InitRandomSeed SUBROUTINE InitializeSpeciesParameter() !=================================================================================================================================== -! Initialize the species parameter +!> Initialize the species parameter: read-in the species name, and then either read-in from the database or the parameter file. +!> Possbility to overwrite specific parameters with custom values. !=================================================================================================================================== ! MODULES USE MOD_Globals @@ -1565,67 +1564,62 @@ SUBROUTINE InitializeSpeciesParameter() ! Read-in of the species database SpeciesDatabase = GETSTR('Particles-Species-Database') +! Read-in of species name and whether to overwrite the database parameters DO iSpec = 1, nSpecies WRITE(UNIT=hilf,FMT='(I0)') iSpec - Species(iSpec)%Name = TRIM(GETSTR('Part-Species'//TRIM(hilf)//'-SpeciesName','none')) - IF(Species(iSpec)%Name .EQ. 'none') THEN - CALL abort(__STAMP__,'ERROR: Species-name is not defined for Species:', iSpec) - END IF + Species(iSpec)%Name = TRIM(GETSTR('Part-Species'//TRIM(hilf)//'-SpeciesName')) + IF(Species(iSpec)%Name.EQ.'none') CALL abort(__STAMP__,'ERROR: Please define a species name for species:', iSpec) + Species(iSpec)%DoOverwriteParameters = GETLOGICAL('Part-Species'//TRIM(hilf)//'-DoOverwriteParameters') END DO ! iSpec -DO iSpec = 1, nSpecies - WRITE(UNIT=hilf,FMT='(I0)') iSpec - Species(iSpec)%DoOverwriteParameters = GETLOGICAL('Part-Species'//TRIM(hilf)//'-DoOverwriteParameters') - IF(SpeciesDatabase.EQ.'none') THEN - Species(iSpec)%DoOverwriteParameters = .TRUE. - END IF -END DO +! If no database is used, use the overwrite per default +IF(SpeciesDatabase.EQ.'none') Species(:)%DoOverwriteParameters = .TRUE. +! Read-in the values from the database IF(SpeciesDatabase.NE.'none') THEN ! Initialize FORTRAN interface. CALL H5OPEN_F(err) - ! Check if file exists IF(.NOT.FILEEXISTS(SpeciesDatabase)) THEN CALL abort(__STAMP__,'ERROR: Database ['//TRIM(SpeciesDatabase)//'] does not exist.') END IF - + ! Open file CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) - + ! Loop over number of species and skip those with overwrite DO iSpec = 1, nSpecies IF (Species(iSpec)%DoOverwriteParameters) CYCLE - LBWRITE (UNIT_stdOut,*) 'Read-in from database for species: ', TRIM(Species(iSpec)%Name) + LBWRITE (UNIT_stdOut,'(68(". "))') + CALL PrintOption('Species Name','INFO',StrOpt=TRIM(Species(iSpec)%Name)) dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) - CALL DatasetExists(file_id_specdb,TRIM(dsetname),DataSetFound) - IF(.NOT.DataSetFound)THEN - Species(iSpec)%DoOverwriteParameters = .TRUE. - SWRITE(*,*) 'WARNING: DataSet not found: ['//TRIM(dsetname)//'] ['//TRIM(SpeciesDatabase)//']' - ELSE + ! Read-in if dataset is there, otherwise set the overwrite parameter + IF(DataSetFound) THEN CALL AttributeExists(file_id_specdb,'ChargeIC',TRIM(dsetname), AttrExists=AttrExists) IF (AttrExists) THEN CALL ReadAttribute(file_id_specdb,'ChargeIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%ChargeIC) ELSE Species(iSpec)%ChargeIC = 0.0 END IF - LBWRITE (UNIT_stdOut,*) 'ChargeIC: ', Species(iSpec)%ChargeIC + CALL PrintOption('ChargeIC','READIN',RealOpt=Species(iSpec)%ChargeIC) CALL ReadAttribute(file_id_specdb,'MassIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%MassIC) - LBWRITE (UNIT_stdOut,*) 'MassIC: ', Species(iSpec)%MassIC + CALL PrintOption('MassIC','READIN',RealOpt=Species(iSpec)%MassIC) CALL ReadAttribute(file_id_specdb,'InteractionID',1,DatasetName = dsetname,IntScalar=Species(iSpec)%InterID) - LBWRITE (UNIT_stdOut,*) 'InteractionID: ', Species(iSpec)%InterID + CALL PrintOption('InteractionID','READIN',IntOpt=Species(iSpec)%InterID) + ELSE + Species(iSpec)%DoOverwriteParameters = .TRUE. + SWRITE(*,*) 'WARNING: DataSet not found: ['//TRIM(dsetname)//'] ['//TRIM(SpeciesDatabase)//']' END IF - END DO ! Close the file. CALL H5FCLOSE_F(file_id_specdb, err) ! Close FORTRAN interface. CALL H5CLOSE_F(err) - END IF +! Old parameter file read-in of species values DO iSpec = 1, nSpecies IF(Species(iSpec)%DoOverwriteParameters) THEN - LBWRITE (UNIT_stdOut,'(66(". "))') + LBWRITE (UNIT_stdOut,'(68(". "))') WRITE(UNIT=hilf,FMT='(I0)') iSpec Species(iSpec)%ChargeIC = GETREAL('Part-Species'//TRIM(hilf)//'-ChargeIC') Species(iSpec)%MassIC = GETREAL('Part-Species'//TRIM(hilf)//'-MassIC') @@ -1634,7 +1628,7 @@ SUBROUTINE InitializeSpeciesParameter() END DO ! iSpec IF(nSpecies.GT.0)THEN - LBWRITE (UNIT_stdOut,'(66(". "))') + LBWRITE (UNIT_stdOut,'(68(". "))') END IF ! nSpecies.GT.0 END SUBROUTINE InitializeSpeciesParameter diff --git a/src/readintools/readintools.f90 b/src/readintools/readintools.f90 index 500e204c5..e6748e2aa 100644 --- a/src/readintools/readintools.f90 +++ b/src/readintools/readintools.f90 @@ -153,10 +153,6 @@ MODULE MOD_ReadInTools MODULE PROCEDURE FinalizeParameters END INTERFACE -INTERFACE PrintOption - MODULE PROCEDURE PrintOption -END INTERFACE - PUBLIC :: IgnoredParameters PUBLIC :: PrintDefaultParameterFile PUBLIC :: CountOption From 48aa1a7295f395307684258342c7afe018629a28 Mon Sep 17 00:00:00 2001 From: asim Date: Wed, 27 Sep 2023 11:50:41 +0200 Subject: [PATCH 086/222] subcycling in rot ref frame --- .../boundary/particle_boundary_condition.f90 | 70 ++++++++--- src/particles/particle_init.f90 | 5 + src/particles/particle_vars.f90 | 10 ++ .../tracking/particle_triatracking.f90 | 109 +++++++++++++++++- src/timedisc/timedisc_TimeStep_DSMC.f90 | 42 +++---- src/timedisc/timedisc_init.f90 | 42 +++++++ 6 files changed, 235 insertions(+), 43 deletions(-) diff --git a/src/particles/boundary/particle_boundary_condition.f90 b/src/particles/boundary/particle_boundary_condition.f90 index 6cc95575b..e0e9bda76 100644 --- a/src/particles/boundary/particle_boundary_condition.f90 +++ b/src/particles/boundary/particle_boundary_condition.f90 @@ -470,6 +470,8 @@ SUBROUTINE RotPeriodicInterPlaneBoundary(PartID,SideID,ElemID,IsInterPlanePart) USE MOD_Globals_Vars ,ONLY: PI USE MOD_Mesh_Tools ,ONLY: GetCNElemID USE MOD_Particle_Vars ,ONLY: PartState,LastPartPos,Species,PartSpecies +USE MOD_Particle_Vars ,ONLY: RotRefSubTimeStep, NewPosSubCycling, GlobalElemIDSubCycling, LastPartPosSubCycling +USE MOD_Particle_Vars ,ONLY: InRotRefFrameSubCycling, PartVeloRotRefSubCycling, LastVeloRotRefSubCycling USE MOD_Particle_Mesh_Vars ,ONLY: ElemInfo_Shared, SideInfo_Shared, ElemSideNodeID_Shared, NodeCoords_Shared USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, InterPlaneSideMapping USE MOD_TImeDisc_Vars ,ONLY: dt,RKdtFrac @@ -482,7 +484,7 @@ SUBROUTINE RotPeriodicInterPlaneBoundary(PartID,SideID,ElemID,IsInterPlanePart) USE MOD_part_operations ,ONLY: CreateParticle, RemoveParticle USE MOD_DSMC_Vars ,ONLY: CollisMode, useDSMC, PartStateIntEn USE MOD_Particle_Vars ,ONLY: usevMPF,PartMPF,PDM,InterPlanePartNumber, InterPlanePartIndx -USE MOD_Particle_Vars ,ONLY: UseRotRefFrame, RotRefFrameOmega, PartVeloRotRef +USE MOD_Particle_Vars ,ONLY: UseRotRefFrame, RotRefFrameOmega, PartVeloRotRef, LastPartVeloRotRef USE MOD_Part_Tools ,ONLY: InRotRefFrameCheck USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame USE MOD_part_tools ,ONLY: RotateVectorAroundAxis @@ -571,28 +573,60 @@ SUBROUTINE RotPeriodicInterPlaneBoundary(PartID,SideID,ElemID,IsInterPlanePart) ! - ParticleInside for InterParticles must be .FALSE. in order to avoid error looping over the original PDM%ParticleVecLength ! in ParticleTriaTracking() routine. The inside flag is set to .TRUE. ! when we loop over all inter particle in SingleParticleTriaTracking routine - IF (usevMPF) THEN - CALL CreateParticle( PartSpecies(PartID), PartState(1:3,PartID), ElemID, PartState(4:6,PartID) & - , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & - , NewPartID=NewPartID, NewMPF=PartMPF(PartID) ) - LastPartPos(1:3,NewPartID) = LastPartPos(1:3,PartID) - PDM%ParticleInside(NewPartID) = .FALSE. - InterPlanePartIndx(InterPlanePartNumber) = NewPartID + ! in case of sub cycling step particle information befor sub cycling must be used => interplane particle can act like origin particle + IF(RotRefSubTimeStep) THEN + IF (usevMPF) THEN + CALL CreateParticle( PartSpecies(PartID), NewPosSubCycling(1:3), GlobalElemIDSubCycling, PartState(4:6,PartID) & + , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & + , NewPartID=NewPartID, NewMPF=PartMPF(PartID) ) + LastPartPos(1:3,NewPartID) = LastPartPosSubCycling(1:3) + PDM%ParticleInside(NewPartID) = .FALSE. + InterPlanePartIndx(InterPlanePartNumber) = NewPartID + ELSE + CALL CreateParticle( PartSpecies(PartID), NewPosSubCycling(1:3), GlobalElemIDSubCycling,PartState(4:6,PartID) & + , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & + , NewPartID=NewPartID ) + LastPartPos(1:3,NewPartID) = LastPartPosSubCycling(1:3) + PDM%ParticleInside(NewPartID) = .FALSE. + InterPlanePartIndx(InterPlanePartNumber) = NewPartID + END IF ELSE - CALL CreateParticle( PartSpecies(PartID), PartState(1:3,PartID), ElemID,PartState(4:6,PartID) & - , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & - , NewPartID=NewPartID ) - LastPartPos(1:3,NewPartID) = LastPartPos(1:3,PartID) - PDM%ParticleInside(NewPartID) = .FALSE. - InterPlanePartIndx(InterPlanePartNumber) = NewPartID + IF (usevMPF) THEN + CALL CreateParticle( PartSpecies(PartID), PartState(1:3,PartID), ElemID, PartState(4:6,PartID) & + , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & + , NewPartID=NewPartID, NewMPF=PartMPF(PartID) ) + LastPartPos(1:3,NewPartID) = LastPartPos(1:3,PartID) + PDM%ParticleInside(NewPartID) = .FALSE. + InterPlanePartIndx(InterPlanePartNumber) = NewPartID + ELSE + CALL CreateParticle( PartSpecies(PartID), PartState(1:3,PartID), ElemID,PartState(4:6,PartID) & + , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & + , NewPartID=NewPartID ) + LastPartPos(1:3,NewPartID) = LastPartPos(1:3,PartID) + PDM%ParticleInside(NewPartID) = .FALSE. + InterPlanePartIndx(InterPlanePartNumber) = NewPartID + END IF END IF ! Treatment for the rotational frame of reference: stored here, will be rotated together with the regular velocity later IF(UseRotRefFrame) THEN - PDM%InRotRefFrame(NewPartID) = PDM%InRotRefFrame(PartID) - IF(PDM%InRotRefFrame(NewPartID)) THEN - PartVeloRotRef(1:3,NewPartID) = PartVeloRotRef(1:3,PartID) + IF(RotRefSubTimeStep) THEN + PDM%InRotRefFrame(NewPartID) = InRotRefFrameSubCycling + IF(PDM%InRotRefFrame(NewPartID)) THEN + PartVeloRotRef(1:3,NewPartID) = PartVeloRotRefSubCycling(1:3) + LastPartVeloRotRef(1:3,NewPartID) = LastVeloRotRefSubCycling(1:3) + ELSE + PartVeloRotRef(1:3,NewPartID) = 0. + LastPartVeloRotRef(1:3,NewPartID) = 0. + END IF ELSE - PartVeloRotRef(1:3,NewPartID) = 0. + PDM%InRotRefFrame(NewPartID) = PDM%InRotRefFrame(PartID) + IF(PDM%InRotRefFrame(NewPartID)) THEN + PartVeloRotRef(1:3,NewPartID) = PartVeloRotRef(1:3,PartID) + LastPartVeloRotRef(1:3,NewPartID) = LastPartVeloRotRef(1:3,PartID) + ELSE + PartVeloRotRef(1:3,NewPartID) = 0. + LastPartVeloRotRef(1:3,NewPartID) = 0. + END IF END IF END IF END DO diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 0f93b4c62..4fdfc2d71 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -196,6 +196,7 @@ SUBROUTINE DefineParametersParticles() ! === Rotational frame of reference CALL prms%CreateLogicalOption( 'Part-UseRotationalReferenceFrame', 'Activate rotational frame of reference', '.FALSE.') +CALL prms%CreateLogicalOption( 'Part-UseRotationalReferenceSubCycling', 'Activate sub cycling in rot ref frame', '.FALSE.') CALL prms%CreateIntOption( 'Part-RotRefFrame-Axis','Axis of rotational frame of reference (x=1, y=2, z=3)') CALL prms%CreateRealOption( 'Part-RotRefFrame-Frequency','Frequency of rotational frame of reference [1/s], sign according '//& 'to right-hand rule, e.g. positive: counter-clockwise, negative: clockwise') @@ -1388,6 +1389,7 @@ SUBROUTINE FinalizeParticles() SDEALLOCATE(PartState) SDEALLOCATE(LastPartPos) SDEALLOCATE(PartVeloRotRef) +SDEALLOCATE(LastPartVeloRotRef) SDEALLOCATE(PartSpecies) SDEALLOCATE(Pt) SDEALLOCATE(PDM%ParticleInside) @@ -1545,6 +1547,7 @@ SUBROUTINE InitializeVariablesRotationalRefFrame() !=================================================================================================================================== UseRotRefFrame = GETLOGICAL('Part-UseRotationalReferenceFrame') +UseRotSubCycling = GETLOGICAL('Part-UseRotationalReferenceSubCycling') IF(UseRotRefFrame) THEN ! Abort for other timedisc except DSMC/BGK @@ -1553,6 +1556,8 @@ SUBROUTINE InitializeVariablesRotationalRefFrame() #endif ALLOCATE(PartVeloRotRef(1:3,1:PDM%maxParticleNumber)) PartVeloRotRef = 0.0 + ALLOCATE(LastPartVeloRotRef(1:3,1:PDM%maxParticleNumber)) + LastPartVeloRotRef = 0.0 RotRefFrameAxis = GETINT('Part-RotRefFrame-Axis') RotRefFrameFreq = GETREAL('Part-RotRefFrame-Frequency') omegaTemp = 2.*PI*RotRefFrameFreq diff --git a/src/particles/particle_vars.f90 b/src/particles/particle_vars.f90 index 313c01b56..ef2a1d157 100644 --- a/src/particles/particle_vars.f90 +++ b/src/particles/particle_vars.f90 @@ -72,6 +72,16 @@ MODULE MOD_Particle_Vars ! ! 2nd index: 1:NParts REAL , ALLOCATABLE :: PartPosRef(:,:) ! (1:3,1:NParts) particles pos mapped to -1|1 space REAL , ALLOCATABLE :: PartVeloRotRef(:,:) ! (1:3,1:NParts) Velocity in the rotational reference frame +REAL , ALLOCATABLE :: LastPartVeloRotRef(:,:) ! (1:3,1:NParts) Last Velocity in the rotational reference frame +! Rot Ref Sub Cycling +LOGICAL :: UseRotSubCycling ! Flag if sub cycling is active +REAL :: LastPartPosSubCycling(3) ! Last position befor SubCycling +REAL :: NewPosSubCycling(3) ! New particle position befor SubCycling +REAL :: PartVeloRotRefSubCycling(3) ! Velocity in the rotational reference frame befor SubCycling +REAL :: LastVeloRotRefSubCycling(3) ! Last Velocity in the rotational reference frame befor SubCycling +INTEGER :: GlobalElemIDSubCycling ! Elemnt ID befor SubCycling +LOGICAL :: RotRefSubTimeStep ! Flag for loop, that defines the cureent time step is a sub cycling step +LOGICAL :: InRotRefFrameSubCycling ! Check for RotRefFrame befor SubCycling REAL , ALLOCATABLE :: Pt(:,:) ! Derivative of PartState (vx,xy,vz) only ! since temporal derivative of position ! is the velocity. Thus we can take diff --git a/src/particles/tracking/particle_triatracking.f90 b/src/particles/tracking/particle_triatracking.f90 index 86857e139..c92086cb6 100644 --- a/src/particles/tracking/particle_triatracking.f90 +++ b/src/particles/tracking/particle_triatracking.f90 @@ -40,10 +40,18 @@ SUBROUTINE ParticleTriaTracking() ! MODULES USE MOD_Preproc USE MOD_Globals -USE MOD_Particle_Vars ,ONLY: PEM,PDM,InterPlanePartNumber, InterPlanePartIndx +USE MOD_Particle_Vars ,ONLY: PEM,PDM,InterPlanePartNumber, InterPlanePartIndx, UseRotRefFrame, UseRotSubCycling +USE MOD_Particle_Vars ,ONLY: RotRefSubTimeStep, NewPosSubCycling, GlobalElemIDSubCycling, LastPartPosSubCycling +USE MOD_Particle_Vars ,ONLY: InRotRefFrameSubCycling, PartVeloRotRefSubCycling, LastVeloRotRefSubCycling USE MOD_DSMC_Vars ,ONLY: RadialWeighting USE MOD_DSMC_Symmetry ,ONLY: DSMC_2D_RadialWeighting, DSMC_2D_SetInClones USE MOD_part_tools ,ONLY: ParticleOnProc +!----- Used for RotRef Subcycling +USE MOD_TimeDiscInit ,ONLY: CalcPartPosInRotRef +USE MOD_TimeDisc_Vars ,ONLY: dt +USE MOD_Particle_Vars ,ONLY: UseVarTimeStep, PartTimeStep, VarTimeStep, Species, PartState, LastPartPos, PartSpecies +USE MOD_Particle_Vars ,ONLY: PartVeloRotRef, LastPartVeloRotRef +!----- ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -59,7 +67,8 @@ SUBROUTINE ParticleTriaTracking() LOGICAL :: doParticle LOGICAL :: doPartInExists #endif -INTEGER :: i, InterPartID +INTEGER :: i, InterPartID, iStep +REAL :: dtVar !----------------------------------------------------------------------------------------------------------------------------------- !=================================================================================================================================== #ifdef IMPA @@ -81,7 +90,56 @@ SUBROUTINE ParticleTriaTracking() #else IF (PDM%ParticleInside(i)) THEN #endif /*IMPA*/ - CALL SingleParticleTriaTracking(i=i) + IF(UseRotSubCycling) THEN +!--- Store Particle informations befor tracking for sub-cycling. +!--- it must be stored before first call of "SingleParticleTriaTracking" +!--- because particle informations like LastPartPos & PartState can be changed within "SingleParticleTriaTracking" +!--- e.g. in RotPeriodicInterPlaneBoundary + RotRefSubTimeStep=.FALSE. + LastPartPosSubCycling(1:3) = LastPartPos(1:3,i) + NewPosSubCycling(1:3) = PartState(1:3,i) + PartVeloRotRefSubCycling(1:3) = PartVeloRotRef(1:3,i) + LastVeloRotRefSubCycling(1:3) = LastPartVeloRotRef(1:3,i) + GlobalElemIDSubCycling = PEM%LastGlobalElemID(i) + InRotRefFrameSubCycling = PDM%InRotRefFrame(i) + CALL SingleParticleTriaTracking(i=i) + IF(RotRefSubTimeStep) THEN +!--- split time step in 10 sub-steps + IF (UseVarTimeStep) THEN + dtVar = dt * PartTimeStep(i) + ELSE + dtVar = dt + END IF + IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(PartSpecies(i))%TimeStepFactor + dtVar = 0.1 * dtVar +!--- Reset Particle Push + PartState(1:3,i) = LastPartPosSubCycling(1:3) + PartVeloRotRef(1:3,i)=LastVeloRotRefSubCycling(1:3) + PEM%GlobalElemID(i) = GlobalElemIDSubCycling +!--- 10 sub-steps + DO iStep = 1, 10 + IF (PDM%ParticleInside(i)) THEN + IF(iStep.GT.1) THEN + LastPartPos(1:3,i)=PartState(1:3,i) + PEM%LastGlobalElemID(i)=PEM%GlobalElemID(i) + LastPartVeloRotRef(1:3,i)=PartVeloRotRef(1:3,i) + END IF + CALL CalcPartPosInRotRef(i, dtVar) + CALL SingleParticleTriaTracking(i=i) + END IF + END DO + END IF +!--- Reset stored particle informations + RotRefSubTimeStep = .FALSE. + LastPartPosSubCycling = 0.0 + NewPosSubCycling = 0.0 + PartVeloRotRefSubCycling = 0.0 + LastVeloRotRefSubCycling = 0.0 + GlobalElemIDSubCycling = 0 + InRotRefFrameSubCycling = .FALSE. + ELSE + CALL SingleParticleTriaTracking(i=i) + END IF END IF ! Particle treatment for an axisymmetric simulation (cloning/deleting particles) IF(RadialWeighting%PerformCloning) THEN @@ -95,7 +153,40 @@ SUBROUTINE ParticleTriaTracking() DO i = 1,InterPlanePartNumber InterPartID = InterPlanePartIndx(i) PDM%ParticleInside(InterPartID) = .TRUE. - CALL SingleParticleTriaTracking(i=InterPartID,IsInterPlanePart=.TRUE.) + IF(UseRotSubCycling) THEN + RotRefSubTimeStep=.FALSE. + CALL SingleParticleTriaTracking(i=InterPartID,IsInterPlanePart=.TRUE.) + IF(RotRefSubTimeStep) THEN + !--- split time step in 10 sub-steps + IF (UseVarTimeStep) THEN + dtVar = dt * PartTimeStep(InterPartID) + ELSE + dtVar = dt + END IF + IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(PartSpecies(InterPartID))%TimeStepFactor + dtVar = 0.1 * dtVar + !--- Reset Particle Push + PartState(1:3,InterPartID) = LastPartPos(1:3,InterPartID) + PartVeloRotRef(1:3,InterPartID)=LastPartVeloRotRef(1:3,InterPartID) + PEM%GlobalElemID(InterPartID) = PEM%LastGlobalElemID(InterPartID) + !--- 10 sub-steps + DO iStep = 1, 10 + IF (PDM%ParticleInside(InterPartID)) THEN + IF(iStep.GT.1) THEN + LastPartPos(1:3,InterPartID)=PartState(1:3,InterPartID) + PEM%LastGlobalElemID(InterPartID)=PEM%GlobalElemID(InterPartID) + LastPartVeloRotRef(1:3,InterPartID)=PartVeloRotRef(1:3,InterPartID) + END IF + CALL CalcPartPosInRotRef(InterPartID, dtVar) + CALL SingleParticleTriaTracking(i=InterPartID,IsInterPlanePart=.TRUE.) + END IF + END DO + !--- Reset + RotRefSubTimeStep = .FALSE. + END IF + ELSE + CALL SingleParticleTriaTracking(i=InterPartID,IsInterPlanePart=.TRUE.) + END IF ! Particle treatment for an axisymmetric simulation (cloning/deleting particles) IF(RadialWeighting%PerformCloning) THEN IF(PDM%ParticleInside(InterPartID).AND.(ParticleOnProc(InterPartID))) THEN @@ -128,7 +219,7 @@ SUBROUTINE SingleParticleTriaTracking(i,IsInterPlanePart) USE MOD_Particle_Vars ,ONLY: PEM,PDM,PartSpecies USE MOD_Particle_Vars ,ONLY: PartState,LastPartPos USE MOD_Particle_Vars ,ONLY: Symmetry -USE MOD_Particle_Vars ,ONLY: UseRotRefFrame, RotRefFrameOmega, PartVeloRotRef +USE MOD_Particle_Vars ,ONLY: UseRotRefFrame, RotRefFrameOmega, PartVeloRotRef, RotRefSubTimeStep, UseRotSubCycling USE MOD_Particle_Mesh_Tools ,ONLY: ParticleInsideQuad3D USE MOD_Particle_Mesh_Vars USE MOD_Particle_Tracking_vars ,ONLY: ntracks,MeasureTrackTime,CountNbrOfLostParts, NbrOfLostParticles, TrackInfo @@ -386,6 +477,14 @@ SUBROUTINE SingleParticleTriaTracking(i,IsInterPlanePart) BCType = PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID))) ! Calculate the intersection with the wall and determine alpha (= fraction of trajectory to the intersection) IF(BCType.NE.1) CALL IntersectionWithWall(i,LocalSide,ElemID,TriNum) + IF((UseRotRefFrame).AND.(UseRotSubCycling)) THEN + IF((BCType.EQ.2).AND.(PDM%InRotRefFrame(i))) THEN + IF(.NOT.RotRefSubTimeStep) THEN + RotRefSubTimeStep=.TRUE. + EXIT + END IF + END IF + END IF IF(PRESENT(IsInterPlanePart)) THEN CALL GetBoundaryInteraction(i,SideID,flip,ElemID,crossedBC,TriNum=TriNum,IsInterPlanePart=IsInterPlanePart) ELSE diff --git a/src/timedisc/timedisc_TimeStep_DSMC.f90 b/src/timedisc/timedisc_TimeStep_DSMC.f90 index 13d5041af..5bbc148a3 100644 --- a/src/timedisc/timedisc_TimeStep_DSMC.f90 +++ b/src/timedisc/timedisc_TimeStep_DSMC.f90 @@ -37,7 +37,7 @@ SUBROUTINE TimeStep_DSMC() #ifdef PARTICLES USE MOD_Globals ,ONLY: abort, CROSS USE MOD_Particle_Vars ,ONLY: PartState, LastPartPos, PDM, PEM, DoSurfaceFlux, WriteMacroVolumeValues -USE MOD_Particle_Vars ,ONLY: UseRotRefFrame, RotRefFrameOmega, PartVeloRotRef +USE MOD_Particle_Vars ,ONLY: UseRotRefFrame, RotRefFrameOmega, PartVeloRotRef, LastPartVeloRotRef USE MOD_Particle_Vars ,ONLY: WriteMacroSurfaceValues, Symmetry, Species, PartSpecies USE MOD_Particle_Vars ,ONLY: UseVarTimeStep, PartTimeStep, VarTimeStep USE MOD_Particle_Vars ,ONLY: UseSplitAndMerge @@ -53,7 +53,7 @@ SUBROUTINE TimeStep_DSMC() USE MOD_vMPF ,ONLY: SplitAndMerge USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame USE MOD_Part_Tools ,ONLY: InRotRefFrameCheck -USE MOD_Part_Tools ,ONLY: CalcPartSymmetryPos +USE MOD_Part_Tools ,ONLY: CalcPartSymmetryPos!, CalcPartPosInRotRef #if USE_MPI USE MOD_Particle_MPI ,ONLY: IRecvNbOfParticles, MPIParticleSend,MPIParticleRecv,SendNbOfparticles #endif /*USE_MPI*/ @@ -63,6 +63,7 @@ SUBROUTINE TimeStep_DSMC() #endif /*PARTICLES*/ USE MOD_DSMC_ParticlePairing ,ONLY: GeoCoordToMap2D USE MOD_Eval_xyz ,ONLY: GetPositionInRefElem +USE MOD_TimeDiscInit ,ONLY: CalcPartPosInRotRef ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -113,23 +114,25 @@ SUBROUTINE TimeStep_DSMC() PEM%LastGlobalElemID(iPart)=PEM%GlobalElemID(iPart) END IF IF(UseRotRefFrame) THEN - IF(PDM%InRotRefFrame(iPart)) THEN - ! Midpoint method - ! calculate the acceleration (force / mass) at the current time step - Pt_local_old(1:3) = CalcPartRHSRotRefFrame(PartState(1:3,iPart), PartVeloRotRef(1:3,iPart)) - ! estimate the mid-point velocity in the rotational frame - VeloRotRef_half(1:3) = PartVeloRotRef(1:3,iPart) + 0.5*Pt_local_old(1:3)*dtVar - ! estimate the mid-point position - PartState_half(1:3) = PartState(1:3,iPart) + 0.5*PartVeloRotRef(1:3,iPart)*dtVar - ! calculate the acceleration (force / mass) at the mid-point - Pt_local(1:3) = CalcPartRHSRotRefFrame(PartState_half(1:3), VeloRotRef_half(1:3)) - ! update the position using the mid-point velocity in the rotational frame - PartState(1:3,iPart) = PartState(1:3,iPart) + VeloRotRef_half(1:3)*dtVar - ! update the velocity in the rotational frame using the mid-point acceleration - PartVeloRotRef(1:3,iPart) = PartVeloRotRef(1:3,iPart) + Pt_local(1:3)*dtVar - ELSE - PartState(1:3,iPart) = PartState(1:3,iPart) + PartState(4:6,iPart) * dtVar - END IF + LastPartVeloRotRef(1:3,iPart)=PartVeloRotRef(1:3,iPart) + CALL CalcPartPosInRotRef(iPart, dtVar) +! IF(PDM%InRotRefFrame(iPart)) THEN +! ! Midpoint method +! ! calculate the acceleration (force / mass) at the current time step +! Pt_local_old(1:3) = CalcPartRHSRotRefFrame(PartState(1:3,iPart), PartVeloRotRef(1:3,iPart)) +! ! estimate the mid-point velocity in the rotational frame +! VeloRotRef_half(1:3) = PartVeloRotRef(1:3,iPart) + 0.5*Pt_local_old(1:3)*dtVar +! ! estimate the mid-point position +! PartState_half(1:3) = PartState(1:3,iPart) + 0.5*PartVeloRotRef(1:3,iPart)*dtVar +! ! calculate the acceleration (force / mass) at the mid-point +! Pt_local(1:3) = CalcPartRHSRotRefFrame(PartState_half(1:3), VeloRotRef_half(1:3)) +! ! update the position using the mid-point velocity in the rotational frame +! PartState(1:3,iPart) = PartState(1:3,iPart) + VeloRotRef_half(1:3)*dtVar +! ! update the velocity in the rotational frame using the mid-point acceleration +! PartVeloRotRef(1:3,iPart) = PartVeloRotRef(1:3,iPart) + Pt_local(1:3)*dtVar +! ELSE +! PartState(1:3,iPart) = PartState(1:3,iPart) + PartState(4:6,iPart) * dtVar +! END IF ELSE PartState(1:3,iPart) = PartState(1:3,iPart) + PartState(4:6,iPart) * dtVar END IF @@ -249,6 +252,5 @@ SUBROUTINE TimeStep_DSMC() END SUBROUTINE TimeStep_DSMC - END MODULE MOD_TimeStep #endif diff --git a/src/timedisc/timedisc_init.f90 b/src/timedisc/timedisc_init.f90 index 971ac1992..af67cf956 100644 --- a/src/timedisc/timedisc_init.f90 +++ b/src/timedisc/timedisc_init.f90 @@ -23,6 +23,7 @@ MODULE MOD_TimeDiscInit PRIVATE !----------------------------------------------------------------------------------------------------------------------------------- PUBLIC :: DefineParametersTimeDisc,InitTime,InitTimeDisc,InitTimeStep,UpdateTimeStep,FinalizeTimeDisc +PUBLIC ::CalcPartPosInRotRef !=================================================================================================================================== CONTAINS @@ -503,4 +504,45 @@ SUBROUTINE FinalizeTimeDisc() END SUBROUTINE FinalizeTimeDisc + +SUBROUTINE CalcPartPosInRotRef(iPart, RotTimestep) +!=================================================================================================================================== +!> Particle push in rotational frame of references +!=================================================================================================================================== +! MODULES +USE MOD_Particle_Vars ,ONLY: PartState, PDM, PartVeloRotRef +USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame +! IMPLICIT VARIABLE HANDLING + IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER, INTENT(IN) :: iPart +REAL, INTENT(IN) :: RotTimestep +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +!INTEGER :: +REAL :: Pt_local(1:3), Pt_local_old(1:3), VeloRotRef_half(1:3), PartState_half(1:3) +!=================================================================================================================================== +IF(PDM%InRotRefFrame(iPart)) THEN + ! Midpoint method + ! calculate the acceleration (force / mass) at the current time step + Pt_local_old(1:3) = CalcPartRHSRotRefFrame(PartState(1:3,iPart), PartVeloRotRef(1:3,iPart)) + ! estimate the mid-point velocity in the rotational frame + VeloRotRef_half(1:3) = PartVeloRotRef(1:3,iPart) + 0.5*Pt_local_old(1:3)*RotTimestep + ! estimate the mid-point position + PartState_half(1:3) = PartState(1:3,iPart) + 0.5*PartVeloRotRef(1:3,iPart)*RotTimestep + ! calculate the acceleration (force / mass) at the mid-point + Pt_local(1:3) = CalcPartRHSRotRefFrame(PartState_half(1:3), VeloRotRef_half(1:3)) + ! update the position using the mid-point velocity in the rotational frame + PartState(1:3,iPart) = PartState(1:3,iPart) + VeloRotRef_half(1:3)*RotTimestep + ! update the velocity in the rotational frame using the mid-point acceleration + PartVeloRotRef(1:3,iPart) = PartVeloRotRef(1:3,iPart) + Pt_local(1:3)*RotTimestep +ELSE + PartState(1:3,iPart) = PartState(1:3,iPart) + PartState(4:6,iPart) * RotTimestep +END IF + +END SUBROUTINE CalcPartPosInRotRef + END MODULE MOD_TimeDiscInit From 6c30a39476ff14e5068fdb7ab975c4f550d41f80 Mon Sep 17 00:00:00 2001 From: asim Date: Thu, 5 Oct 2023 09:38:26 +0200 Subject: [PATCH 087/222] Delete unsed variable and avoid compilation problems --- src/particles/particle_rhs.f90 | 47 +++++++++++++++++++ .../tracking/particle_triatracking.f90 | 4 +- src/timedisc/timedisc_TimeStep_DSMC.f90 | 7 ++- src/timedisc/timedisc_init.f90 | 41 ---------------- 4 files changed, 52 insertions(+), 47 deletions(-) diff --git a/src/particles/particle_rhs.f90 b/src/particles/particle_rhs.f90 index 42edd3df0..473437c92 100644 --- a/src/particles/particle_rhs.f90 +++ b/src/particles/particle_rhs.f90 @@ -36,12 +36,17 @@ MODULE MOD_part_RHS PROCEDURE PartRHS END INTERFACE +INTERFACE CalcPartPosInRotRef + PROCEDURE CalcPartPosInRotRef +END INTERFACE + !---------------------------------------------------------------------------------------------------------------------------------- PUBLIC :: CalcPartRHS PUBLIC :: PartVeloToImp PUBLIC :: PartRHS PUBLIC :: CalcPartRHSSingleParticle PUBLIC :: CalcPartRHSRotRefFrame +PUBLIC :: CalcPartPosInRotRef !---------------------------------------------------------------------------------------------------------------------------------- ABSTRACT INTERFACE @@ -794,4 +799,46 @@ SUBROUTINE PartVeloToImp(VeloToImp,doParticle_In) END SUBROUTINE PartVeloToImp + +SUBROUTINE CalcPartPosInRotRef(iPart, RotTimestep) +!=================================================================================================================================== +!> Particle push in rotational frame of references +!=================================================================================================================================== +! MODULES +USE MOD_Particle_Vars ,ONLY: PartState, PDM, PartVeloRotRef +!USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame +! IMPLICIT VARIABLE HANDLING + IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER, INTENT(IN) :: iPart +REAL, INTENT(IN) :: RotTimestep +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +!INTEGER :: +REAL :: Pt_local(1:3), Pt_local_old(1:3), VeloRotRef_half(1:3), PartState_half(1:3) +!=================================================================================================================================== +IF(PDM%InRotRefFrame(iPart)) THEN + ! Midpoint method + ! calculate the acceleration (force / mass) at the current time step + Pt_local_old(1:3) = CalcPartRHSRotRefFrame(PartState(1:3,iPart), PartVeloRotRef(1:3,iPart)) + ! estimate the mid-point velocity in the rotational frame + VeloRotRef_half(1:3) = PartVeloRotRef(1:3,iPart) + 0.5*Pt_local_old(1:3)*RotTimestep + ! estimate the mid-point position + PartState_half(1:3) = PartState(1:3,iPart) + 0.5*PartVeloRotRef(1:3,iPart)*RotTimestep + ! calculate the acceleration (force / mass) at the mid-point + Pt_local(1:3) = CalcPartRHSRotRefFrame(PartState_half(1:3), VeloRotRef_half(1:3)) + ! update the position using the mid-point velocity in the rotational frame + PartState(1:3,iPart) = PartState(1:3,iPart) + VeloRotRef_half(1:3)*RotTimestep + ! update the velocity in the rotational frame using the mid-point acceleration + PartVeloRotRef(1:3,iPart) = PartVeloRotRef(1:3,iPart) + Pt_local(1:3)*RotTimestep +ELSE + PartState(1:3,iPart) = PartState(1:3,iPart) + PartState(4:6,iPart) * RotTimestep +END IF + +END SUBROUTINE CalcPartPosInRotRef + + END MODULE MOD_part_RHS diff --git a/src/particles/tracking/particle_triatracking.f90 b/src/particles/tracking/particle_triatracking.f90 index c92086cb6..6ec82341c 100644 --- a/src/particles/tracking/particle_triatracking.f90 +++ b/src/particles/tracking/particle_triatracking.f90 @@ -40,14 +40,14 @@ SUBROUTINE ParticleTriaTracking() ! MODULES USE MOD_Preproc USE MOD_Globals -USE MOD_Particle_Vars ,ONLY: PEM,PDM,InterPlanePartNumber, InterPlanePartIndx, UseRotRefFrame, UseRotSubCycling +USE MOD_Particle_Vars ,ONLY: PEM,PDM,InterPlanePartNumber, InterPlanePartIndx, UseRotSubCycling USE MOD_Particle_Vars ,ONLY: RotRefSubTimeStep, NewPosSubCycling, GlobalElemIDSubCycling, LastPartPosSubCycling USE MOD_Particle_Vars ,ONLY: InRotRefFrameSubCycling, PartVeloRotRefSubCycling, LastVeloRotRefSubCycling USE MOD_DSMC_Vars ,ONLY: RadialWeighting USE MOD_DSMC_Symmetry ,ONLY: DSMC_2D_RadialWeighting, DSMC_2D_SetInClones USE MOD_part_tools ,ONLY: ParticleOnProc !----- Used for RotRef Subcycling -USE MOD_TimeDiscInit ,ONLY: CalcPartPosInRotRef +USE MOD_part_RHS ,ONLY: CalcPartPosInRotRef USE MOD_TimeDisc_Vars ,ONLY: dt USE MOD_Particle_Vars ,ONLY: UseVarTimeStep, PartTimeStep, VarTimeStep, Species, PartState, LastPartPos, PartSpecies USE MOD_Particle_Vars ,ONLY: PartVeloRotRef, LastPartVeloRotRef diff --git a/src/timedisc/timedisc_TimeStep_DSMC.f90 b/src/timedisc/timedisc_TimeStep_DSMC.f90 index 5bbc148a3..5c89afc95 100644 --- a/src/timedisc/timedisc_TimeStep_DSMC.f90 +++ b/src/timedisc/timedisc_TimeStep_DSMC.f90 @@ -51,9 +51,9 @@ SUBROUTINE TimeStep_DSMC() USE MOD_SurfaceModel_Porous ,ONLY: PorousBoundaryRemovalProb_Pressure USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC USE MOD_vMPF ,ONLY: SplitAndMerge -USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame +USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame, CalcPartPosInRotRef USE MOD_Part_Tools ,ONLY: InRotRefFrameCheck -USE MOD_Part_Tools ,ONLY: CalcPartSymmetryPos!, CalcPartPosInRotRef +USE MOD_Part_Tools ,ONLY: CalcPartSymmetryPos #if USE_MPI USE MOD_Particle_MPI ,ONLY: IRecvNbOfParticles, MPIParticleSend,MPIParticleRecv,SendNbOfparticles #endif /*USE_MPI*/ @@ -63,7 +63,6 @@ SUBROUTINE TimeStep_DSMC() #endif /*PARTICLES*/ USE MOD_DSMC_ParticlePairing ,ONLY: GeoCoordToMap2D USE MOD_Eval_xyz ,ONLY: GetPositionInRefElem -USE MOD_TimeDiscInit ,ONLY: CalcPartPosInRotRef ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -73,7 +72,7 @@ SUBROUTINE TimeStep_DSMC() INTEGER :: iPart REAL :: timeEnd, timeStart, dtVar, RandVal ! Rotational frame of reference -REAL :: Pt_local(1:3), Pt_local_old(1:3), VeloRotRef_half(1:3), PartState_half(1:3) +!REAL :: Pt_local(1:3), Pt_local_old(1:3), VeloRotRef_half(1:3), PartState_half(1:3) #if USE_LOADBALANCE REAL :: tLBStart #endif /*USE_LOADBALANCE*/ diff --git a/src/timedisc/timedisc_init.f90 b/src/timedisc/timedisc_init.f90 index af67cf956..a710cca8c 100644 --- a/src/timedisc/timedisc_init.f90 +++ b/src/timedisc/timedisc_init.f90 @@ -23,7 +23,6 @@ MODULE MOD_TimeDiscInit PRIVATE !----------------------------------------------------------------------------------------------------------------------------------- PUBLIC :: DefineParametersTimeDisc,InitTime,InitTimeDisc,InitTimeStep,UpdateTimeStep,FinalizeTimeDisc -PUBLIC ::CalcPartPosInRotRef !=================================================================================================================================== CONTAINS @@ -505,44 +504,4 @@ SUBROUTINE FinalizeTimeDisc() END SUBROUTINE FinalizeTimeDisc -SUBROUTINE CalcPartPosInRotRef(iPart, RotTimestep) -!=================================================================================================================================== -!> Particle push in rotational frame of references -!=================================================================================================================================== -! MODULES -USE MOD_Particle_Vars ,ONLY: PartState, PDM, PartVeloRotRef -USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame -! IMPLICIT VARIABLE HANDLING - IMPLICIT NONE -!----------------------------------------------------------------------------------------------------------------------------------- -! INPUT VARIABLES -INTEGER, INTENT(IN) :: iPart -REAL, INTENT(IN) :: RotTimestep -!----------------------------------------------------------------------------------------------------------------------------------- -! OUTPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! LOCAL VARIABLES -!INTEGER :: -REAL :: Pt_local(1:3), Pt_local_old(1:3), VeloRotRef_half(1:3), PartState_half(1:3) -!=================================================================================================================================== -IF(PDM%InRotRefFrame(iPart)) THEN - ! Midpoint method - ! calculate the acceleration (force / mass) at the current time step - Pt_local_old(1:3) = CalcPartRHSRotRefFrame(PartState(1:3,iPart), PartVeloRotRef(1:3,iPart)) - ! estimate the mid-point velocity in the rotational frame - VeloRotRef_half(1:3) = PartVeloRotRef(1:3,iPart) + 0.5*Pt_local_old(1:3)*RotTimestep - ! estimate the mid-point position - PartState_half(1:3) = PartState(1:3,iPart) + 0.5*PartVeloRotRef(1:3,iPart)*RotTimestep - ! calculate the acceleration (force / mass) at the mid-point - Pt_local(1:3) = CalcPartRHSRotRefFrame(PartState_half(1:3), VeloRotRef_half(1:3)) - ! update the position using the mid-point velocity in the rotational frame - PartState(1:3,iPart) = PartState(1:3,iPart) + VeloRotRef_half(1:3)*RotTimestep - ! update the velocity in the rotational frame using the mid-point acceleration - PartVeloRotRef(1:3,iPart) = PartVeloRotRef(1:3,iPart) + Pt_local(1:3)*RotTimestep -ELSE - PartState(1:3,iPart) = PartState(1:3,iPart) + PartState(4:6,iPart) * RotTimestep -END IF - -END SUBROUTINE CalcPartPosInRotRef - END MODULE MOD_TimeDiscInit From 84667b8326094aab11a587348aa850862c305fab Mon Sep 17 00:00:00 2001 From: Asim Date: Mon, 23 Oct 2023 15:56:34 +0200 Subject: [PATCH 088/222] Use sub-time-step in particle_boundary_condition.f90. Use Subcycling also for Rot- and Interplane-BCs --- .../boundary/particle_boundary_condition.f90 | 2 ++ .../tracking/particle_triatracking.f90 | 32 +++++++++++++------ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/particles/boundary/particle_boundary_condition.f90 b/src/particles/boundary/particle_boundary_condition.f90 index e0e9bda76..5274bbc23 100644 --- a/src/particles/boundary/particle_boundary_condition.f90 +++ b/src/particles/boundary/particle_boundary_condition.f90 @@ -644,6 +644,8 @@ SUBROUTINE RotPeriodicInterPlaneBoundary(PartID,SideID,ElemID,IsInterPlanePart) ! Species-specific time step IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(PartSpecies(PartID))%TimeStepFactor +IF(RotRefSubTimeStep) dtVar = 0.1 * dtVar + ! (2) Calculate the POI and a new random POI on corresponding inter plane using a random angle within the periodic segment POI(1:3) = LastPartPos(1:3,PartID) + TrackInfo%PartTrajectory(1:3)*TrackInfo%alpha IF (DSMC%DoAmbipolarDiff) THEN diff --git a/src/particles/tracking/particle_triatracking.f90 b/src/particles/tracking/particle_triatracking.f90 index 6ec82341c..bb3a0abdf 100644 --- a/src/particles/tracking/particle_triatracking.f90 +++ b/src/particles/tracking/particle_triatracking.f90 @@ -155,6 +155,12 @@ SUBROUTINE ParticleTriaTracking() PDM%ParticleInside(InterPartID) = .TRUE. IF(UseRotSubCycling) THEN RotRefSubTimeStep=.FALSE. + LastPartPosSubCycling(1:3) = LastPartPos(1:3,InterPartID) + NewPosSubCycling(1:3) = PartState(1:3,InterPartID) + PartVeloRotRefSubCycling(1:3) = PartVeloRotRef(1:3,InterPartID) + LastVeloRotRefSubCycling(1:3) = LastPartVeloRotRef(1:3,InterPartID) + GlobalElemIDSubCycling = PEM%LastGlobalElemID(InterPartID) + InRotRefFrameSubCycling = PDM%InRotRefFrame(InterPartID) CALL SingleParticleTriaTracking(i=InterPartID,IsInterPlanePart=.TRUE.) IF(RotRefSubTimeStep) THEN !--- split time step in 10 sub-steps @@ -166,9 +172,9 @@ SUBROUTINE ParticleTriaTracking() IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(PartSpecies(InterPartID))%TimeStepFactor dtVar = 0.1 * dtVar !--- Reset Particle Push - PartState(1:3,InterPartID) = LastPartPos(1:3,InterPartID) - PartVeloRotRef(1:3,InterPartID)=LastPartVeloRotRef(1:3,InterPartID) - PEM%GlobalElemID(InterPartID) = PEM%LastGlobalElemID(InterPartID) + PartState(1:3,InterPartID) = LastPartPosSubCycling(1:3) + PartVeloRotRef(1:3,InterPartID)=LastVeloRotRefSubCycling(1:3) + PEM%GlobalElemID(InterPartID) = GlobalElemIDSubCycling !--- 10 sub-steps DO iStep = 1, 10 IF (PDM%ParticleInside(InterPartID)) THEN @@ -181,9 +187,15 @@ SUBROUTINE ParticleTriaTracking() CALL SingleParticleTriaTracking(i=InterPartID,IsInterPlanePart=.TRUE.) END IF END DO - !--- Reset - RotRefSubTimeStep = .FALSE. END IF +!--- Reset stored particle informations + RotRefSubTimeStep = .FALSE. + LastPartPosSubCycling = 0.0 + NewPosSubCycling = 0.0 + PartVeloRotRefSubCycling = 0.0 + LastVeloRotRefSubCycling = 0.0 + GlobalElemIDSubCycling = 0 + InRotRefFrameSubCycling = .FALSE. ELSE CALL SingleParticleTriaTracking(i=InterPartID,IsInterPlanePart=.TRUE.) END IF @@ -478,10 +490,12 @@ SUBROUTINE SingleParticleTriaTracking(i,IsInterPlanePart) ! Calculate the intersection with the wall and determine alpha (= fraction of trajectory to the intersection) IF(BCType.NE.1) CALL IntersectionWithWall(i,LocalSide,ElemID,TriNum) IF((UseRotRefFrame).AND.(UseRotSubCycling)) THEN - IF((BCType.EQ.2).AND.(PDM%InRotRefFrame(i))) THEN - IF(.NOT.RotRefSubTimeStep) THEN - RotRefSubTimeStep=.TRUE. - EXIT + IF((BCType.EQ.2).OR.(BCType.EQ.6).OR.(BCType.EQ.7)) THEN + IF(PDM%InRotRefFrame(i)) THEN + IF(.NOT.RotRefSubTimeStep) THEN + RotRefSubTimeStep=.TRUE. + EXIT + END IF END IF END IF END IF From 3b59687ce78ef5e7ff3a18e3519309aa24ede616 Mon Sep 17 00:00:00 2001 From: Asim Date: Thu, 26 Oct 2023 10:34:02 +0200 Subject: [PATCH 089/222] Change time step in case of subcycling in surfacemodel_main --- src/particles/surfacemodel/surfacemodel_main.f90 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index 9f06c8796..2fa4bd006 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -316,7 +316,7 @@ SUBROUTINE PerfectReflection(PartID,SideID,n_Loc,opt_Symmetry) !----------------------------------------------------------------------------------------------------------------------------------! USE MOD_Globals USE MOD_Particle_Boundary_Vars ,ONLY: PartBound -USE MOD_Particle_Vars ,ONLY: PartState,LastPartPos,PartSpecies,Species,PartLorentzType +USE MOD_Particle_Vars ,ONLY: PartState,LastPartPos,PartSpecies,Species,PartLorentzType,RotRefSubTimeStep USE MOD_DSMC_Vars ,ONLY: DSMC, AmbipolElecVelo USE MOD_Globals_Vars ,ONLY: c2_inv #if defined(LSERK) @@ -376,6 +376,8 @@ SUBROUTINE PerfectReflection(PartID,SideID,n_Loc,opt_Symmetry) ! Species-specific time step IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(SpecID)%TimeStepFactor +IF(RotRefSubTimeStep) dtVar = 0.1 * dtVar + IF(PDM%InRotRefFrame(PartID)) THEN ! In case of RotRefFrame utilize the respective velocity OldVelo = PartVeloRotRef(1:3,PartID) @@ -523,7 +525,7 @@ SUBROUTINE DiffuseReflection(PartID,SideID,n_loc) USE MOD_Particle_Vars ,ONLY: UseVarTimeStep, PartTimeStep, VarTimeStep USE MOD_TimeDisc_Vars ,ONLY: dt,RKdtFrac USE MOD_Mesh_Tools ,ONLY: GetCNElemID -USE MOD_Particle_Vars ,ONLY: PDM, RotRefFrameOmega +USE MOD_Particle_Vars ,ONLY: PDM, RotRefFrameOmega,RotRefSubTimeStep USE MOD_SurfaceModel_Tools ,ONLY: CalcPostWallCollVelo, SurfaceModel_EnergyAccommodation USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame @@ -573,6 +575,7 @@ SUBROUTINE DiffuseReflection(PartID,SideID,n_loc) ! Species-specific time step IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(SpecID)%TimeStepFactor +IF(RotRefSubTimeStep) dtVar = 0.1 * dtVar IF(PDM%InRotRefFrame(PartID)) THEN ! In case of RotRefFrame utilize the respective velocity From 5bef73d03fc015e1fa578620955821405d36c34b Mon Sep 17 00:00:00 2001 From: Asim Date: Mon, 30 Oct 2023 09:21:10 +0100 Subject: [PATCH 090/222] Bugfix: PDM%InRotRefFrame(InterPartID) was not set for subcycling --- src/particles/tracking/particle_triatracking.f90 | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/particles/tracking/particle_triatracking.f90 b/src/particles/tracking/particle_triatracking.f90 index bb3a0abdf..70c29a56b 100644 --- a/src/particles/tracking/particle_triatracking.f90 +++ b/src/particles/tracking/particle_triatracking.f90 @@ -114,8 +114,12 @@ SUBROUTINE ParticleTriaTracking() dtVar = 0.1 * dtVar !--- Reset Particle Push PartState(1:3,i) = LastPartPosSubCycling(1:3) + LastPartPos(1:3,i) = LastPartPosSubCycling(1:3) PartVeloRotRef(1:3,i)=LastVeloRotRefSubCycling(1:3) PEM%GlobalElemID(i) = GlobalElemIDSubCycling + PEM%LastGlobalElemID(i)= GlobalElemIDSubCycling + LastPartVeloRotRef(1:3,i) = LastVeloRotRefSubCycling(1:3) + PDM%InRotRefFrame(i) = InRotRefFrameSubCycling !--- 10 sub-steps DO iStep = 1, 10 IF (PDM%ParticleInside(i)) THEN @@ -173,8 +177,12 @@ SUBROUTINE ParticleTriaTracking() dtVar = 0.1 * dtVar !--- Reset Particle Push PartState(1:3,InterPartID) = LastPartPosSubCycling(1:3) + LastPartPos(1:3,InterPartID) = LastPartPosSubCycling(1:3) PartVeloRotRef(1:3,InterPartID)=LastVeloRotRefSubCycling(1:3) PEM%GlobalElemID(InterPartID) = GlobalElemIDSubCycling + PEM%LastGlobalElemID(InterPartID)= GlobalElemIDSubCycling + LastPartVeloRotRef(1:3,InterPartID) = LastVeloRotRefSubCycling(1:3) + PDM%InRotRefFrame(InterPartID) = InRotRefFrameSubCycling !--- 10 sub-steps DO iStep = 1, 10 IF (PDM%ParticleInside(InterPartID)) THEN @@ -504,7 +512,6 @@ SUBROUTINE SingleParticleTriaTracking(i,IsInterPlanePart) ELSE CALL GetBoundaryInteraction(i,SideID,flip,ElemID,crossedBC,TriNum=TriNum) END IF - IF(.NOT.PDM%ParticleInside(i)) PartisDone = .TRUE. #if USE_LOADBALANCE IF (OldElemID.GE.offsetElem+1.AND.OldElemID.LE.offsetElem+PP_nElems) CALL LBElemSplitTime(OldElemID-offsetElem,tLBStart) @@ -535,7 +542,6 @@ SUBROUTINE SingleParticleTriaTracking(i,IsInterPlanePart) END IF END IF ! SideInfo_Shared(SIDE_BCID,SideID).GT./.LE. 0 CNElemID = GetCNElemID(ElemID) - IF (CNElemID.LT.1) THEN IPWRITE(UNIT_StdOut,*) "VECNORM(PartState(1:3,i)-LastPartPos(1:3,i)): ", VECNORM(PartState(1:3,i)-LastPartPos(1:3,i)) IPWRITE(UNIT_StdOut,*) " PartState(1:3,i) : ", PartState(1:3,i) From 65cce4dd407fa72b6e9f6de9eff3a0a9f01f2ae4 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 13 Nov 2023 22:25:28 +0100 Subject: [PATCH 091/222] Reverted git hook pre-commit to an executable --- .githooks/pre-commit | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 .githooks/pre-commit diff --git a/.githooks/pre-commit b/.githooks/pre-commit old mode 100644 new mode 100755 From 1c8a464d3ed58b05e34795958878fab86b03d6b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Tue, 14 Nov 2023 09:10:30 +0100 Subject: [PATCH 092/222] Output MaxMCSoverMFP and resolved cells --- src/particles/analyze/particle_analyze.f90 | 14 +++++++++++++- src/particles/dsmc/dsmc_main.f90 | 3 +++ src/particles/dsmc/dsmc_particle_pairing.f90 | 4 ++++ src/particles/dsmc/dsmc_vars.f90 | 3 +++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/particles/analyze/particle_analyze.f90 b/src/particles/analyze/particle_analyze.f90 index dad723ddd..1243f65af 100644 --- a/src/particles/analyze/particle_analyze.f90 +++ b/src/particles/analyze/particle_analyze.f90 @@ -889,7 +889,7 @@ SUBROUTINE AnalyzeParticles(Time) #if (PP_TimeDiscMethod==2 || PP_TimeDiscMethod==4 || PP_TimeDiscMethod==300 || PP_TimeDiscMethod==400 || (PP_TimeDiscMethod>=501 && PP_TimeDiscMethod<=509) || PP_TimeDiscMethod==120) REAL :: ETotal REAL :: IntEn(nSpecAnalyze,3),IntTemp(nSpecies,3),TempTotal(nSpecAnalyze), Xi_Vib(nSpecies), Xi_Elec(nSpecies) -REAL :: MaxCollProb, MeanCollProb, MeanFreePath +REAL :: MaxCollProb, MeanCollProb, MeanFreePath, MaxMCSoverMFP, ResolvedCellPercentage REAL :: NumSpecTmp(nSpecAnalyze), RotRelaxProb(2), VibRelaxProb(2) INTEGER :: bgSpec #endif @@ -1172,6 +1172,12 @@ SUBROUTINE AnalyzeParticles(Time) WRITE(unit_index,'(A1)',ADVANCE='NO') ',' WRITE(unit_index,'(I3.3,A)',ADVANCE='NO') OutputCounter,'-MeanFreePath' OutputCounter = OutputCounter + 1 + WRITE(unit_index,'(A1)',ADVANCE='NO') ',' + WRITE(unit_index,'(I3.3,A)',ADVANCE='NO') OutputCounter,'-MaxMCSoverMFP' + OutputCounter = OutputCounter + 1 + WRITE(unit_index,'(A1)',ADVANCE='NO') ',' + WRITE(unit_index,'(I3.3,A)',ADVANCE='NO') OutputCounter,'-ResolvedCellPercentage' + OutputCounter = OutputCounter + 1 IF(CalcRelaxProb) THEN WRITE(unit_index,'(A1)',ADVANCE='NO') ',' WRITE(unit_index,'(I3.3,A)',ADVANCE='NO') OutputCounter,'-RotRelaxPmean' @@ -1355,6 +1361,8 @@ SUBROUTINE AnalyzeParticles(Time) MaxCollProb = 0.0 MeanCollProb = 0.0 MeanFreePath = 0.0 + MaxMCSoverMFP = 0.0 + ResolvedCellPercentage = 0.0 IF(DSMC%CalcQualityFactors.OR.CalcReacRates) THEN NumSpecTmp = NumSpec IF(BGGas%NumberOfSpecies.GT.0) THEN @@ -1377,7 +1385,9 @@ SUBROUTINE AnalyzeParticles(Time) END IF IF(DSMC%CalcQualityFactors) THEN IF(iter.GT.0) THEN + MaxMCSoverMFP = DSMC%MaxMCSoverMFP MaxCollProb = DSMC%CollProbMax + ResolvedCellPercentage = REAL(DSMC%ResolvedCellCounter) / REAL(DSMC%ParticlePairingCounter) * 100 IF(DSMC%CollProbMeanCount.GT.0) MeanCollProb = DSMC%CollProbMean / DSMC%CollProbMeanCount IF (MPIRoot) THEN IF(TempTotal(nSpecAnalyze).GT.0.0) MeanFreePath = CalcMeanFreePath(NumSpecTmp(1:nSpecies), NumSpecTmp(nSpecAnalyze), & @@ -1648,6 +1658,8 @@ SUBROUTINE AnalyzeParticles(Time) WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', MeanCollProb WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', MaxCollProb WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', MeanFreePath + WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', MaxMCSoverMFP + WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', ResolvedCellPercentage IF(CalcRelaxProb) THEN WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', RotRelaxProb(2) WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', RotRelaxProb(1) diff --git a/src/particles/dsmc/dsmc_main.f90 b/src/particles/dsmc/dsmc_main.f90 index ad7b99b70..b39752ae0 100644 --- a/src/particles/dsmc/dsmc_main.f90 +++ b/src/particles/dsmc/dsmc_main.f90 @@ -71,6 +71,9 @@ SUBROUTINE DSMC_main(DoElement) ! Reset the number of particles created during the DSMC loop DSMCSumOfFormedParticles = 0 +DSMC%MaxMCSoverMFP = 0.0 +DSMC%ParticlePairingCounter = 0 ! Counts ParticleParing Calls +DSMC%ResolvedCellCounter = 0 ! Counts resolved cells ! Insert background gas particles for every simulation particle IF((BGGas%NumberOfSpecies.GT.0).AND.(.NOT.UseMCC)) CALL BGGas_InsertParticles() diff --git a/src/particles/dsmc/dsmc_particle_pairing.f90 b/src/particles/dsmc/dsmc_particle_pairing.f90 index 7012f867e..7f934d4b8 100644 --- a/src/particles/dsmc/dsmc_particle_pairing.f90 +++ b/src/particles/dsmc/dsmc_particle_pairing.f90 @@ -609,6 +609,7 @@ SUBROUTINE PerformPairingAndCollision(iPartIndx_Node, PartNum, iElem, NodeVolume END IF END DO +DSMC%ParticlePairingCounter = DSMC%ParticlePairingCounter + 1 ! Counts Particle Pairing Calls ! 6.) Calculate the mean free path and the mean collision separation distance within a cell IF(DSMC%CalcQualityFactors) THEN IF((Time.GE.(1-DSMC%TimeFracSamp)*TEnd).OR.WriteMacroVolumeValues) THEN @@ -618,6 +619,9 @@ SUBROUTINE PerformPairingAndCollision(iPartIndx_Node, PartNum, iElem, NodeVolume ! Determination of the maximum MCS/MFP for the cell IF((DSMC%CollSepCount.GT.0).AND.(DSMC%MeanFreePath.GT.0.0)) DSMC%MCSoverMFP = & MAX(DSMC%MCSoverMFP,(DSMC%CollSepDist/DSMC%CollSepCount)/DSMC%MeanFreePath) + IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP + IF( (TotalPartNum .GE. 7) .AND. (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) & + .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = DSMC%ResolvedCellCounter + 1 ! Number of resolved Cells END IF END IF diff --git a/src/particles/dsmc/dsmc_vars.f90 b/src/particles/dsmc/dsmc_vars.f90 index da62ea4bb..e4a0158c3 100644 --- a/src/particles/dsmc/dsmc_vars.f90 +++ b/src/particles/dsmc/dsmc_vars.f90 @@ -206,7 +206,10 @@ MODULE MOD_DSMC_Vars ! 2: Max Prob ! 3: Sample size REAL :: MeanFreePath + REAL :: MaxMCSoverMFP ! Maximum MCSoverMFP after each time step REAL :: MCSoverMFP ! Subcell local mean collision distance over mean free path + INTEGER :: ParticlePairingCounter ! Counts Calls of ParticlePairing. Used for ResolvedCellPercentage + INTEGER :: ResolvedCellCounter ! Counts resolved Cells. Used for ResolvedCellPercentage INTEGER :: CollProbMeanCount ! counter of possible collision pairs INTEGER :: CollSepCount ! counter of actual collision pairs REAL :: CollSepDist ! Summation of mean collision separation distance From c605b3a0ed8d13be74c2983b503990c399ad21e3 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Thu, 16 Nov 2023 22:16:52 +0100 Subject: [PATCH 093/222] Different abort if chemistry model has been defined but number of reactions found is zero --- .../parameter.ini | 1 - .../parameter.ini | 30 +++---------------- src/particles/dsmc/dsmc_chemical_init.f90 | 3 ++ 3 files changed, 7 insertions(+), 27 deletions(-) mode change 100755 => 100644 regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini index fcb5c9df4..ed72407b1 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini +++ b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini @@ -92,7 +92,6 @@ Particles-DSMC-BackwardReacRate = true Particles-DSMC-PartitionMaxTemp = 120000. Particles-DSMC-PartitionInterval= 20. Particles-DSMC-ElectronicModel = 0 -Particles-DSMCElectronicDatabase = DSMCSpecies_electronic_state_full_Data.h5 EpsMergeElectronicState = 1E-3 Particles-DSMC-RotRelaxProb = 1 Particles-DSMC-VibRelaxProb = 1 diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini old mode 100755 new mode 100644 index 18c4be4fc..93ba732c4 --- a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini @@ -1,10 +1,8 @@ ! =============================================================================== ! -! EQUATION (linearscalaradvection) +! Irrelevant parameters ! =============================================================================== ! IniExactFunc = 0 -! =============================================================================== ! -! DISCRETIZATION -! =============================================================================== ! +CFLscale = 0.2 N = 1 ! Polynomial degree NAnalyze = 1 ! Number of analyze points ! =============================================================================== ! @@ -12,7 +10,6 @@ NAnalyze = 1 ! Number of analyze points ! =============================================================================== ! MeshFile = cube_mesh.h5 useCurveds = F -! if boundaries have to be changed (else they are used from Mesh directly): TrackingMethod = triatracking ! =============================================================================== ! ! OUTPUT / VISUALIZATION @@ -26,7 +23,6 @@ CalcNumDens = T ! =============================================================================== ! tend = 5.0E-6 ! End time: 1e-4 Analyze_dt = 5.0E-6 ! Timestep of analyze outputs -CFLscale = 0.2 ! Scaling of theoretical CFL number ! =============================================================================== ! ! BOUNDARIES ! =============================================================================== ! @@ -40,24 +36,7 @@ Part-FIBGMdeltas=(/4.64E-6,4.64E-6,4.64E-6/) Part-maxParticleNumber=500000 Part-nSpecies=18 Particles-Species-Database = SpeciesDatabase.h5 -Part-Species1-MacroParticleFactor = 10 -Part-Species2-MacroParticleFactor = 10 -Part-Species3-MacroParticleFactor = 10 -Part-Species4-MacroParticleFactor = 10 -Part-Species5-MacroParticleFactor = 10 -Part-Species6-MacroParticleFactor = 10 -Part-Species7-MacroParticleFactor = 10 -Part-Species8-MacroParticleFactor = 10 -Part-Species9-MacroParticleFactor = 10 -Part-Species10-MacroParticleFactor = 10 -Part-Species11-MacroParticleFactor = 10 -Part-Species12-MacroParticleFactor = 10 -Part-Species13-MacroParticleFactor = 10 -Part-Species14-MacroParticleFactor = 10 -Part-Species15-MacroParticleFactor = 10 -Part-Species16-MacroParticleFactor = 10 -Part-Species17-MacroParticleFactor = 10 -Part-Species18-MacroParticleFactor = 10 +Part-Species$-MacroParticleFactor = 10 ! =============================================================================== ! ! Species Definition ! =============================================================================== ! @@ -130,5 +109,4 @@ Part-Species$-ElecRelaxProb = 1 ! =============================================================================== ! ! Data for chemical Reactions ! =============================================================================== ! -DSMC-ChemistryModel=Titan-wo-Argon_18Spec_30Reac_Gokcen2007 - +DSMC-ChemistryModel=Titan_18Spec_30Reac_Gokcen2007 diff --git a/src/particles/dsmc/dsmc_chemical_init.f90 b/src/particles/dsmc/dsmc_chemical_init.f90 index efae71977..aefe78ae5 100644 --- a/src/particles/dsmc/dsmc_chemical_init.f90 +++ b/src/particles/dsmc/dsmc_chemical_init.f90 @@ -197,6 +197,9 @@ SUBROUTINE DSMC_chemical_init() IF(CustomNumReact.GT.0) THEN CALL Abort(__STAMP__,' Custom reactions in addition to a chemistry model are not supported yet!') END IF + IF(ChemReac%NumOfReact.LE.0) THEN + CALL Abort(__STAMP__,' No reactions found for the selected chemistry model: '//TRIM(ChemReac%ChemistryModel)) + END IF END IF IF(ChemReac%NumOfReact.LE.0) THEN From 40df94031b10890c32eee6955b630b0313d51d94 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Thu, 16 Nov 2023 23:23:36 +0100 Subject: [PATCH 094/222] Removed InitEquation call in case of DSMC, BGK, FP --- src/init/piclas_init.f90 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/init/piclas_init.f90 b/src/init/piclas_init.f90 index 621bd1447..fbbc6b9aa 100644 --- a/src/init/piclas_init.f90 +++ b/src/init/piclas_init.f90 @@ -65,7 +65,9 @@ SUBROUTINE InitPiclas(IsLoadBalance) USE MOD_Restart_Vars ,ONLY: DoRestart USE MOD_Mesh ,ONLY: InitMesh USE MOD_Mesh_Vars ,ONLY: GetMeshMinMaxBoundariesIsDone +#if !(PP_TimeDiscMethod==4) && !(PP_TimeDiscMethod==300) && !(PP_TimeDiscMethod==400) USE MOD_Equation ,ONLY: InitEquation +#endif USE MOD_GetBoundaryFlux ,ONLY: InitBC USE MOD_DG ,ONLY: InitDG USE MOD_Mortar ,ONLY: InitMortar @@ -170,7 +172,9 @@ SUBROUTINE InitPiclas(IsLoadBalance) #if USE_MPI CALL InitMPIvars() #endif /*USE_MPI*/ +#if !(PP_TimeDiscMethod==4) && !(PP_TimeDiscMethod==300) && !(PP_TimeDiscMethod==400) CALL InitEquation() +#endif CALL InitBC() #if !(USE_HDG) CALL InitPML() ! Perfectly Matched Layer (PML): electromagnetic-wave-absorbing layer From 86822a46ea47a4eb7c9ba41c73a397c2619d782c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Fri, 17 Nov 2023 10:17:24 +0100 Subject: [PATCH 095/222] MPI_REDUCE MaxMCSoverMFP --- src/particles/dsmc/dsmc_particle_pairing.f90 | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/particles/dsmc/dsmc_particle_pairing.f90 b/src/particles/dsmc/dsmc_particle_pairing.f90 index 7f934d4b8..9dbda3bd7 100644 --- a/src/particles/dsmc/dsmc_particle_pairing.f90 +++ b/src/particles/dsmc/dsmc_particle_pairing.f90 @@ -616,12 +616,19 @@ SUBROUTINE PerformPairingAndCollision(iPartIndx_Node, PartNum, iElem, NodeVolume ! Calculation of the mean free path with VHS model and the current translational temperature in the cell DSMC%MeanFreePath = CalcMeanFreePath(REAL(CollInf%Coll_SpecPartNum), REAL(SUM(CollInf%Coll_SpecPartNum)), NodeVolume, & DSMC%InstantTransTemp(nSpecies+1)) - ! Determination of the maximum MCS/MFP for the cell IF((DSMC%CollSepCount.GT.0).AND.(DSMC%MeanFreePath.GT.0.0)) DSMC%MCSoverMFP = & MAX(DSMC%MCSoverMFP,(DSMC%CollSepDist/DSMC%CollSepCount)/DSMC%MeanFreePath) + ! Calculation of the maximum MCS/MFP for the cell and number of resolved Cells IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP - IF( (TotalPartNum .GE. 7) .AND. (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) & - .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = DSMC%ResolvedCellCounter + 1 ! Number of resolved Cells + #if USE_MPI + IF(MPIRoot)THEN + CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%MaxMCSoverMFP,1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR) + ELSE + CALL MPI_REDUCE(DSMC%MaxMCSoverMFP,DSMC%MaxMCSoverMFP,1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR) + END IF + #endif /*USE_MPI*/ + IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & + DSMC%ResolvedCellCounter + 1 END IF END IF From d3d1d5f2c9f0de71e5d3eff118dbb2f55cddf9a6 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Fri, 17 Nov 2023 17:34:44 +0100 Subject: [PATCH 096/222] Moved addition of heat flux due to surface chemistry to CalcSurfaceValues --- .../boundary/particle_boundary_sampling.f90 | 22 ++++++------------- .../emission/particle_surface_chemflux.f90 | 2 +- .../emission/particle_surface_flux.f90 | 3 +-- 3 files changed, 9 insertions(+), 18 deletions(-) diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index ed0de29e8..9a6a4d1ea 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -466,7 +466,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) USE MOD_DSMC_Vars ,ONLY: DSMC USE MOD_Mesh_Vars ,ONLY: MeshFile USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac, ChemWallProp USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample,CalcSurfaceImpact USE MOD_Particle_Boundary_Vars ,ONLY: SurfSide2GlobalSide, GlobalSide2SurfSide, PartBound USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfSides, BoundaryWallTemp @@ -612,6 +612,12 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) / (SurfSideArea(p,q,iSurfSide) * TimeSampleTemp) END IF + ! Add the heat flux due to catalytic reactions on the surface + IF(SurfChemReac%NumOfReact.GT.0) THEN + MacroSurfaceVal(4,p,q,OutputCounter) = MacroSurfaceVal(4,p,q,OutputCounter) + SUM(ChemWallProp(:,2,p, q, iSurfSide)) & + / (SurfSideArea(p,q,iSurfSide)*TimeSampleTemp) + END IF + ! Number of simulation particle impacts per iteration MacroSurfaceVal(5,p,q,OutputCounter) = CounterSum / IterNum @@ -830,20 +836,6 @@ SUBROUTINE WriteSurfSampleToHDF5(MeshFileName,OutputTime) CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Total_SimPartPerIter') CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'iBC') - ! ! Add the heat flux due to catalytic reactions on the surface - ! IF(SurfChemReac%NumOfReact.GT.0) THEN - ! OutputCounter = 0 - ! DO iSurfSide = 1,nComputeNodeSurfSides - ! OutputCounter = OutputCounter + 1 - ! DO q = 1,nSurfSample - ! DO p = 1,nSurfSample - ! MacroSurfaceVal(4,p,q,OutputCounter) = MacroSurfaceVal(4,p,q,OutputCounter) + SUM(ChemWallProp(:,2,p, q, iSurfSide)) & - ! / (SurfSideArea(p,q,iSurfSide)*OutputTime) - ! END DO ! q=1,nSurfSample - ! END DO ! p=1,nSurfSample - ! END DO ! iSurfSide=1,nComputeNodeSurfSides - ! END IF - IF(nPorousBC.GT.0) THEN DO iPBC = 1, nPorousBC WRITE(PBCID,'(I2.2)') iPBC diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index c785f62dd..1f203cd29 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -544,7 +544,7 @@ SUBROUTINE ParticleSurfDiffusion() INTEGER :: iSpec , PositionNbr, iSF, iSide, BoundID, SideID INTEGER :: BCSideID, ElemID, iLocSide, iSample, jSample INTEGER :: Node1, Node2, globElemId -INTEGER :: CatBoundNum +INTEGER :: CatBoundNum INTEGER :: SurfSideID INTEGER :: SubP, SubQ REAL :: Coverage_Sum diff --git a/src/particles/emission/particle_surface_flux.f90 b/src/particles/emission/particle_surface_flux.f90 index bfd139e2e..acaa260a9 100644 --- a/src/particles/emission/particle_surface_flux.f90 +++ b/src/particles/emission/particle_surface_flux.f90 @@ -527,8 +527,7 @@ SUBROUTINE SetInnerEnergies(iSpec, iSF, NbrOfParticle) USE MOD_Globals USE MOD_DSMC_Vars ,ONLY: SpecDSMC USE MOD_Particle_Vars ,ONLY: PDM -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly -USE MOD_DSMC_Relaxation ,ONLY: DSMC_SetInternalEnr_Diatomic +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- From da9871236d33f3f612fc60a9e38d663de5088305 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Sat, 18 Nov 2023 15:16:10 +0100 Subject: [PATCH 097/222] Split SurfaceModel_Chemsitry_Init into two routines, separate InitializeVariablesSurfaceChemistry as number of reactive surfaces is required before current surface chemistry init --- .../DSMC.ini | 0 .../cube_mesh.h5 | Bin 1007858 -> 0 bytes .../externals.ini | 5 ++ .../hopr.ini | 0 .../parameter.ini | 10 +-- .../emission/particle_surface_chemflux.f90 | 38 +++++------ .../emission/particle_surface_flux_init.f90 | 30 +++------ src/particles/particle_init.f90 | 5 +- .../surfacemodel/surfacemodel_chemistry.f90 | 63 ++++++++++++------ .../surfacemodel/surfacemodel_init.f90 | 11 ++- .../surfacemodel/surfacemodel_vars.f90 | 20 +++--- 11 files changed, 93 insertions(+), 89 deletions(-) mode change 100755 => 100644 regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/DSMC.ini delete mode 100755 regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/cube_mesh.h5 create mode 100644 regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/externals.ini mode change 100755 => 100644 regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/hopr.ini mode change 100755 => 100644 regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/parameter.ini diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/DSMC.ini b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/DSMC.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/cube_mesh.h5 b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/cube_mesh.h5 deleted file mode 100755 index 5177ac376f1c969e473378728b41c3935b1e7578..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1007858 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�i7#U|_eFf^pSdqJ;I2;gd3@%s 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 CwWWFh diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/externals.ini b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/externals.ini new file mode 100644 index 000000000..6706ecfad --- /dev/null +++ b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/externals.ini @@ -0,0 +1,5 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre \ No newline at end of file diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/hopr.ini b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/hopr.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/parameter.ini b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/parameter.ini old mode 100755 new mode 100644 index 27b047833..886e6eb8f --- a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/parameter.ini +++ b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/parameter.ini @@ -93,7 +93,7 @@ Surface-NumOfReactions = 4 ! Adsorption of CO Surface-Reaction1-SurfName = Adsorption_CO Surface-Reaction1-Type = A -Surface-Reaction1-Reactants = (/1,0/) +Surface-Reaction1-Reactants = (/1,0/) Surface-Reaction1-NumOfBoundaries = 1 Surface-Reaction1-Boundaries = 1 Surface-Reaction1-StickingCoefficient = 1.0 @@ -103,7 +103,7 @@ Surface-Reaction1-HeatScaling = 7340.2 ! Adsorption of O2 Surface-Reaction2-SurfName = Adsorption_O2 Surface-Reaction2-Type = A -Surface-Reaction2-Reactants = (/2,0/) +Surface-Reaction2-Reactants = (/2,0/) Surface-Reaction2-NumOfBoundaries = 1 Surface-Reaction2-Boundaries = 1 Surface-Reaction2-StickingCoefficient = 0.42 @@ -113,7 +113,7 @@ Surface-Reaction2-ReactHeat = 27676.3 ! Desorption of CO Surface-Reaction3-SurfName = Desorption_CO Surface-Reaction3-Type = D -Surface-Reaction3-Products = (/1,0/) +Surface-Reaction3-Products = (/1,0/) Surface-Reaction3-NumOfBoundaries = 1 Surface-Reaction3-Boundaries = 1 Surface-Reaction3-Energy = 17688.8 @@ -125,13 +125,13 @@ Surface-Reaction3-HeatScaling = 7340.2 ! Desorption of O2 Surface-Reaction4-SurfName = Desorption_O2 Surface-Reaction4-Type = D -Surface-Reaction4-Products = (/2,0/) +Surface-Reaction4-Products = (/2,0/) Surface-Reaction4-NumOfBoundaries = 1 Surface-Reaction4-Boundaries = 1 Surface-Reaction4-Energy = 26713.6 Surface-Reaction4-LateralInteraction = -8375 Surface-Reaction4-DissOrder = 2 -Surface-Reaction4-Ca = -1.7 +Surface-Reaction4-Ca = -1.7 Surface-Reaction4-Cb = 0 Surface-Reaction4-ReactHeat = 27676.3 ! =============================================================================== ! diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index 1f203cd29..0406cd9ea 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -63,7 +63,7 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC #endif !#if defined(IMPA) || defined(ROS) -USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod, TrackInfo +USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo !#endif /*IMPA*/ #if USE_LOADBALANCE USE MOD_LoadBalance_Timers ,ONLY: LBStartTime, LBElemSplitTime, LBPauseTime @@ -88,23 +88,19 @@ SUBROUTINE ParticleSurfChemFlux() REAL :: WallTemp REAL :: SurfMol REAL :: MPF -INTEGER :: SurfNumOfReac, iReac, ReactantCount, BoundID, nSF +INTEGER :: iReac, ReactantCount, BoundID, nSF INTEGER :: iVal, iReactant, iValReac, SurfSideID, iBias INTEGER :: SubP, SubQ -INTEGER, ALLOCATABLE :: SurfReacBias(:) - +INTEGER :: SurfReacBias(SurfChemReac%NumOfReact) #if USE_LOADBALANCE REAL :: tLBStart #endif /*USE_LOADBALANCE*/ !=================================================================================================================================== ! 1.) Determine the surface parameters -SurfNumOfReac = SurfChemReac%NumOfReact nSF = SurfChemReac%CatBoundNum SubP = TrackInfo%p SubQ = TrackInfo%q -ALLOCATE(SurfReacBias(SurfNumOfReac)) - DO iSF = 1, nSF BoundID = SurfChemReac%Surfaceflux(iSF)%BC IF(ANY(SurfChemReac%PSMap(BoundID)%PureSurfReac)) THEN @@ -131,10 +127,10 @@ SUBROUTINE ParticleSurfChemFlux() END IF ! Randomize the order in which the reactions are called to remove biases - CALL RemoveBias(SurfNumOfReac, SurfReacBias) + SurfReacBias = RemoveBias(SurfChemReac%NumOfReact) ! Loop over the different types of pure surface reactions - DO iBias = 1, SurfNumOfReac + DO iBias = 1, SurfChemReac%NumOfReact iReac = SurfReacBias(iBias) IF (SurfChemReac%PSMap(BoundID)%PureSurfReac(iReac)) THEN @@ -475,7 +471,7 @@ END SUBROUTINE ParticleSurfChemFlux !=================================================================================================================================== !> Bias treatment for multiple reactions on the same surface element !=================================================================================================================================== -SUBROUTINE RemoveBias(SurfNumOfReac, SurfReacBias) +PPURE FUNCTION RemoveBias(SurfNumOfReac) ! MODULES ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -484,7 +480,7 @@ SUBROUTINE RemoveBias(SurfNumOfReac, SurfReacBias) INTEGER, INTENT(IN) :: SurfNumOfReac !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES -INTEGER, ALLOCATABLE, INTENT(OUT) :: SurfReacBias(:) +INTEGER :: RemoveBias(SurfNumOfReac) !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: i, j, k, m @@ -492,20 +488,20 @@ SUBROUTINE RemoveBias(SurfNumOfReac, SurfReacBias) REAL :: RanNum !=================================================================================================================================== -SurfReacBias = [(i,i=1,SurfNumOfReac)] +RemoveBias = [(i,i=1,SurfNumOfReac)] ! Shuffle m = SurfNumOfReac DO k = 1, 2 DO i = 1, m CALL RANDOM_NUMBER(RanNum) j = 1 + FLOOR(m*RanNum) - temp = SurfReacBias(j) - SurfReacBias(j) = SurfReacBias(i) - SurfReacBias(i) = temp + temp = RemoveBias(j) + RemoveBias(j) = RemoveBias(i) + RemoveBias(i) = temp END DO END DO -END SUBROUTINE RemoveBias +END FUNCTION RemoveBias !=================================================================================================================================== !> (Instantaneous) Diffusion of particles along the surface @@ -517,7 +513,6 @@ SUBROUTINE ParticleSurfDiffusion() USE MOD_MPI_Shared_Vars ,ONLY: myComputeNodeRank, nComputeNodeProcessors USE MOD_Mesh_Vars ,ONLY: SideToElem, offsetElem USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID -USE MOD_Timedisc_Vars ,ONLY: dt USE MOD_Particle_Surfaces_Vars USE MOD_Particle_Boundary_Vars USE MOD_SurfaceModel @@ -526,7 +521,7 @@ SUBROUTINE ParticleSurfDiffusion() USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC !#if defined(IMPA) || defined(ROS) -USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod, TrackInfo +USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo !#endif /*IMPA*/ #if USE_LOADBALANCE USE MOD_LoadBalance_Timers ,ONLY: LBStartTime, LBElemSplitTime, LBPauseTime @@ -541,14 +536,13 @@ SUBROUTINE ParticleSurfDiffusion() ! LOCAL VARIABLES ! Local variable declaration INTEGER :: firstSide, lastSide, SideNumber -INTEGER :: iSpec , PositionNbr, iSF, iSide, BoundID, SideID -INTEGER :: BCSideID, ElemID, iLocSide, iSample, jSample -INTEGER :: Node1, Node2, globElemId +INTEGER :: iSpec , iSF, iSide, BoundID, SideID +INTEGER :: BCSideID, ElemID, iLocSide +INTEGER :: globElemId INTEGER :: CatBoundNum INTEGER :: SurfSideID INTEGER :: SubP, SubQ REAL :: Coverage_Sum - #if USE_LOADBALANCE REAL :: tLBStart #endif /*USE_LOADBALANCE*/ diff --git a/src/particles/emission/particle_surface_flux_init.f90 b/src/particles/emission/particle_surface_flux_init.f90 index 79802b42a..ff326ca22 100644 --- a/src/particles/emission/particle_surface_flux_init.f90 +++ b/src/particles/emission/particle_surface_flux_init.f90 @@ -157,7 +157,6 @@ SUBROUTINE InitializeParticleSurfaceflux() !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES ! Local variable declaration -INTEGER :: iReac, SurfNumReac, CatBoundNum INTEGER :: iSpec,iSF,SideID,BCSideID,iSide,ElemID,iLocSide,iSample,jSample,currentBC, MaxSF, iSFElec INTEGER :: iCopy1, iCopy2, iCopy3, MaxSurfacefluxBCs,nDataBC REAL :: tmp_SubSideDmax(SurfFluxSideSize(1),SurfFluxSideSize(2)) @@ -314,7 +313,7 @@ SUBROUTINE InitializeParticleSurfaceflux() END DO; END DO END IF ! Initialize surface flux - CALL InitSurfChemFlux(iSF, iSide, tmp_SubSideAreas, BCdata_auxSFTemp) + CALL InitSurfChemFlux(iSF, iSide) ! Initialize acceptance-rejection on SF IF (SurfChemReac%Surfaceflux(iSF)%AcceptReject) THEN DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) @@ -763,7 +762,6 @@ SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp) ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -INTEGER :: iReac INTEGER :: TmpMapToBC(1:nDataBC), TmpSideStart(1:nDataBC), TmpSideNumber(1:nDataBC), TmpSideEnd(1:nDataBC) ! PartBC, Start of Linked List for Sides in SurfacefluxBC, Number of Particles in Sides in SurfacefluxBC, End of Linked List for Sides in SurfacefluxBC INTEGER :: TmpSideNext(1:nBCSides) !Next: Sides of diff. BCs ar not overlapping! @@ -1260,30 +1258,26 @@ SUBROUTINE CalcConstMassflowWeightForZeroMassFlow(iSpec,iSF) END SUBROUTINE CalcConstMassflowWeightForZeroMassFlow -SUBROUTINE InitSurfChemFlux(iSF, iSide, tmp_SubSideAreas, BCdata_auxSFTemp) +SUBROUTINE InitSurfChemFlux(iSF, iSide) !=================================================================================================================================== !> Initialize surface flux variables in SurfFluxSubSideData type !=================================================================================================================================== ! MODULES USE MOD_Globals +USE MOD_SurfaceModel_Vars ,ONLY: SurfChemReac USE MOD_Globals_Vars ,ONLY: BoltzmannConst, PI -USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, SurfMeshSubSideData, tBCdata_auxSFRadWeight, BCdata_auxSF +USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, SurfMeshSubSideData, BCdata_auxSF USE MOD_Particle_Vars ,ONLY: Species, nSpecies -USE MOD_SurfaceModel_Vars -USE MOD_DSMC_Vars ,ONLY: RadialWeighting ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES INTEGER, INTENT(IN) :: iSF, iSide -REAL, INTENT(IN) :: tmp_SubSideAreas(SurfFluxSideSize(1),SurfFluxSideSize(2)) -TYPE(tBCdata_auxSFRadWeight), ALLOCATABLE, INTENT(IN) :: BCdata_auxSFTemp(:) !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -INTEGER :: iSpec, iReac -INTEGER :: jSample, iSample, currentBC, BCSideID +INTEGER :: iSpec, jSample, iSample, currentBC, BCSideID REAL :: vec_nIn(3), vec_t1(3), vec_t2(3), projFak, v_thermal, a !=================================================================================================================================== currentBC = SurfChemReac%Surfaceflux(iSF)%BC @@ -1333,22 +1327,16 @@ END SUBROUTINE InitSurfChemFlux SUBROUTINE ReadInAndPrepareSurfChemFlux(nDataBC) !=================================================================================================================================== -! Initialize the variables first +!> !=================================================================================================================================== ! MODULES USE MOD_Globals USE MOD_ReadInTools USE MOD_Globals_Vars ,ONLY: BoltzmannConst, Pi USE MOD_Particle_Boundary_Vars ,ONLY: PartBound,nPartBound -USE MOD_SurfaceModel_Tools ,ONLY: GetWallTemperature USE MOD_SurfaceModel_Vars -USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, BezierSampleN, SurfMeshSubSideData, SurfMeshSideAreas, tBCdata_auxSFRadWeight -USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, TriaSurfaceFlux -USE MOD_Particle_Surfaces ,ONLY: GetBezierSampledAreas -USE MOD_Particle_Vars ,ONLY: Species, nSpecies, DoSurfaceFlux -USE MOD_Particle_Vars ,ONLY: UseCircularInflow, DoForceFreeSurfaceFlux -USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive -USE MOD_Restart_Vars ,ONLY: DoRestart, RestartTime +USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF +USE MOD_Particle_Surfaces_Vars ,ONLY: TriaSurfaceFlux ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -1359,7 +1347,7 @@ SUBROUTINE ReadInAndPrepareSurfChemFlux(nDataBC) !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: iSF, iBound -INTEGER :: iReac, CatBoundNum +INTEGER :: CatBoundNum !=================================================================================================================================== CatBoundNum = SurfChemReac%CatBoundNum ALLOCATE(SurfChemReac%SurfaceFlux(1:CatBoundNum)) diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index cc1c89122..722371fbc 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -350,8 +350,9 @@ SUBROUTINE InitParticles() CALL InitAdaptiveWallTemp() END IF -! Initialize surface reactions +! Initialize arrays for surface chemistry CALL SurfaceModel_Chemistry_Init() + ! Initialize porous boundary condition (requires BCdata_auxSF and InitParticleBoundarySurfSides) IF(nPorousBC.GT.0) CALL InitPorousBoundaryCondition() @@ -403,6 +404,7 @@ SUBROUTINE InitializeVariables() USE MOD_Particle_Mesh ,ONLY: InitParticleMesh USE MOD_Particle_Emission_Init ,ONLY: InitializeVariablesSpeciesInits USE MOD_Particle_Boundary_Init ,ONLY: InitializeVariablesPartBoundary +USE MOD_SurfaceModel_Chemistry ,ONLY: InitializeVariablesSurfaceChemistry USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod USE MOD_Particle_Surfaces_Vars ,ONLY: TriaSurfaceFlux USE MOD_PICInit ,ONLY: InitPIC @@ -521,6 +523,7 @@ SUBROUTINE InitializeVariables() CALL InitializeVariablesVarTimeStep() CALL InitializeVariablesAmbipolarDiff() CALL InitializeVariablesRotationalRefFrame() +CALL InitializeVariablesSurfaceChemistry() END SUBROUTINE InitializeVariables diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index c012b2a7f..c26e59cfc 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -26,7 +26,7 @@ MODULE MOD_SurfaceModel_Chemistry !----------------------------------------------------------------------------------------------------------------------------------- ! Private Part --------------------------------------------------------------------------------------------------------------------- ! Public Part ---------------------------------------------------------------------------------------------------------------------- -PUBLIC :: DefineParametersSurfaceChemistry, SurfaceModel_Chemistry_Init +PUBLIC :: DefineParametersSurfaceChemistry, InitializeVariablesSurfaceChemistry, SurfaceModel_Chemistry_Init !=================================================================================================================================== CONTAINS @@ -46,7 +46,6 @@ SUBROUTINE DefineParametersSurfaceChemistry() CALL prms%CreateStringOption( 'Surface-Reaction[$]-Type', & 'No default, options are A (adsorption), D (desorption), ER (Eley-Rideal), LH (Langmuir-Hinshelwood), LHD', & numberedmulti=.TRUE.) -CALL prms%CreateStringOption( 'Surface-Database', 'none') CALL prms%CreateStringOption( 'Surface-Reaction[$]-SurfName', 'none' ,numberedmulti=.TRUE.) CALL prms%CreateLogicalOption( 'OverwriteCatParameters', 'Flag to set catalytic parameters manually', '.FALSE.') CALL prms%CreateIntArrayOption( 'Surface-Reaction[$]-Reactants' & @@ -90,26 +89,20 @@ SUBROUTINE DefineParametersSurfaceChemistry() numberedmulti=.TRUE., no=0) END SUBROUTINE DefineParametersSurfaceChemistry -SUBROUTINE SurfaceModel_Chemistry_Init() + +SUBROUTINE InitializeVariablesSurfaceChemistry() !=================================================================================================================================== ! Readin of variables and definition of reaction cases !=================================================================================================================================== ! MODULES USE MOD_Globals USE MOD_ReadInTools -USE MOD_PARTICLE_Vars ,ONLY: nSpecies -USE MOD_Mesh_Vars ,ONLY: SideToElem, offsetElem -USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID -USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared -USE MOD_Particle_Boundary_Vars -USE MOD_SurfaceModel_Vars -USE MOD_Particle_Surfaces_Vars +USE MOD_PARTICLE_Vars ,ONLY: nSpecies, SpeciesDatabase +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, nPartBound +USE MOD_SurfaceModel_Vars ,ONLY: SurfChemReac, DoChemSurface +! USE MOD_Particle_Surfaces_Vars USE MOD_io_hdf5 USE MOD_HDF5_input, ONLY:ReadAttribute, DatasetExists, AttributeExists -#if USE_MPI -USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED, myComputeNodeRank -USE MOD_MPI_Shared -#endif ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -119,16 +112,12 @@ SUBROUTINE SurfaceModel_Chemistry_Init() !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES CHARACTER(LEN=64) :: dsetname -CHARACTER(LEN=64) :: AttribName INTEGER(HID_T) :: file_id_specdb ! File identifier -INTEGER(HID_T) :: dset_id_specdb ! Dataset identifier LOGICAL :: DataSetFound LOGICAL :: Attr_Exists -INTEGER(HID_T) :: Loc_ID, Attr_ID -CHARACTER(LEN=32) :: hilf, hilf2 -INTEGER :: iReac, iReac2, iSpec, iBound, iVal, err +CHARACTER(LEN=32) :: hilf +INTEGER :: iReac, iReac2, iBound, iVal, err INTEGER :: ReadInNumOfReact -INTEGER :: iSide, SideID, iBC REAL, ALLOCATABLE :: StoichCoeff(:,:) !=================================================================================================================================== @@ -246,8 +235,7 @@ SUBROUTINE SurfaceModel_Chemistry_Init() SurfChemReac%Diffusion = GETLOGICAL('Surface-Diffusion', '.FALSE.') SurfChemReac%TotDiffusion = GETLOGICAL('Surface-TotalDiffusion', '.FALSE.') -!SpeciesDatabase -SpeciesDatabase = GETSTR('Surface-Database', 'none') +! SpeciesDatabase SurfChemReac%OverwriteCatParameters = GETLOGICAL('OverwriteCatParameters', '.FALSE.') IF (SpeciesDatabase.EQ.'none') THEN @@ -477,6 +465,37 @@ SUBROUTINE SurfaceModel_Chemistry_Init() END IF +END SUBROUTINE InitializeVariablesSurfaceChemistry + + +SUBROUTINE SurfaceModel_Chemistry_Init() +!=================================================================================================================================== +! Allocation of side-specific arrays for chemistry modelling +!=================================================================================================================================== +! MODULES +USE MOD_Globals +USE MOD_PARTICLE_Vars ,ONLY: nSpecies +USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, nSurfSample, nComputeNodeSurfTotalSides, SurfSide2GlobalSide +USE MOD_SurfaceModel_Vars ,ONLY: ChemSampWall, ChemDesorpWall, ChemWallProp +! USE MOD_Particle_Surfaces_Vars +#if USE_MPI +USE MOD_MPI_Shared +USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED, myComputeNodeRank +USE MOD_SurfaceModel_Vars ,ONLY: ChemSampWall_Shared, ChemSampWall_Shared_Win +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared, ChemWallProp_Shared_Win +#endif +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: iSide, iSpec, iBC, SideID +!=================================================================================================================================== + ALLOCATE( ChemSampWall(1:nSpecies,2,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) ChemSampWall = 0.0 ALLOCATE(ChemDesorpWall(1:nSpecies,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) diff --git a/src/particles/surfacemodel/surfacemodel_init.f90 b/src/particles/surfacemodel/surfacemodel_init.f90 index d6acfe7c2..aea7a9a27 100644 --- a/src/particles/surfacemodel/surfacemodel_init.f90 +++ b/src/particles/surfacemodel/surfacemodel_init.f90 @@ -230,15 +230,12 @@ SUBROUTINE FinalizeSurfaceModel() END IF ADEALLOCATE(ChemSampWall_Shared) ADEALLOCATE(ChemWallProp_Shared) - SDEALLOCATE(ChemDesorpWall) - ! SDEALLOCATE(ChemCountReacWall) - SDEALLOCATE(ChemSampWall) #else - SDEALLOCATE(ChemDesorpWall) - ! SDEALLOCATE(ChemCountReacWall) - SDEALLOCATE(ChemSampWall) - SDEALLOCATE(ChemWallProp) #endif +SDEALLOCATE(ChemDesorpWall) +! SDEALLOCATE(ChemCountReacWall) +ADEALLOCATE(ChemSampWall) +ADEALLOCATE(ChemWallProp) SNULLIFY(SurfChemReac%Surfaceflux) SDEALLOCATE(SurfChemReac%SFAux) diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90 index 22b089a6a..a7b37ea2a 100644 --- a/src/particles/surfacemodel/surfacemodel_vars.f90 +++ b/src/particles/surfacemodel/surfacemodel_vars.f90 @@ -62,8 +62,6 @@ MODULE MOD_SurfaceModel_Vars LOGICAL :: DoChemSurface ! Call the surface catalysis routines - CHARACTER(LEN=256) :: SpeciesDatabase ! Name of the species database - TYPE tSurfReactions INTEGER :: NumOfReact ! Number of catalytic reactions CHARACTER(LEN=64),ALLOCATABLE :: CatName(:) @@ -105,8 +103,8 @@ MODULE MOD_SurfaceModel_Vars LOGICAL :: TotDiffusion ! Activates instantaneous diffussion over all boundaries INTEGER :: CatBoundNum ! Number of catalytic boundaries TYPE(tBoundMap), ALLOCATABLE :: BoundMap(:) ! Map of the reactions to the boundaries - TYPE(tPureSurf), ALLOCATABLE :: PSMap(:) ! Map for reactions occurring only on the surface - TYPE(tCollCaseInfo), ALLOCATABLE :: CollCaseInfo(:) ! Information of collision cases (nCase) + TYPE(tPureSurf), ALLOCATABLE :: PSMap(:) ! Map for reactions occurring only on the surface + TYPE(tCollCaseInfo), ALLOCATABLE :: CollCaseInfo(:) ! Information of collision cases (nCase) TYPE(tSurfaceFlux), POINTER :: SurfaceFlux(:) ! Surface flux data (using the regular surface flux type) TYPE(tSFAux), ALLOCATABLE :: SFAux(:) ! Additional surface flux data, where variables differ from the regular surface flux type END TYPE @@ -116,15 +114,15 @@ MODULE MOD_SurfaceModel_Vars REAL, ALLOCATABLE :: a_nIn(:,:,:,:) ! Speed ratio projected to inwards normal (additionally to regular surface flux variable due to missing species dependency) END TYPE -REAL,ALLOCATABLE :: ChemSampWall(:,:,:,:,:) ! Sampling direct impact mechanism -REAL,ALLOCATABLE :: ChemDesorpWall(:,:,:,:,:) ! Desorption numbers -REAL,ALLOCPOINT :: ChemWallProp(:,:,:,:,:) ! Adsorption count / heat flux -! INTEGER,ALLOCATABLE :: ChemCountReacWall(:,:,:,:,:) ! Count the number of catalytic reactions on the subside +REAL,ALLOCATABLE :: ChemDesorpWall(:,:,:,:,:) ! Desorption numbers +REAL,ALLOCPOINT :: ChemWallProp(:,:,:,:,:) ! Adsorption count / heat flux +REAL,ALLOCPOINT :: ChemSampWall(:,:,:,:,:) ! Sampling direct impact mechanism +! INTEGER,ALLOCATABLE :: ChemCountReacWall(:,:,:,:,:)! Count the number of catalytic reactions on the subside #if USE_MPI -INTEGER :: ChemWallProp_Shared_Win ! Adsorption count / heat flux -REAL,ALLOCPOINT :: ChemWallProp_Shared(:,:,:,:,:) -REAL,POINTER :: ChemSampWall_Shared(:,:,:,:,:) ! Sampling direct impact mechanism +REAL,ALLOCPOINT :: ChemWallProp_Shared(:,:,:,:,:) ! Adsorption count / heat flux +INTEGER :: ChemWallProp_Shared_Win +REAL,ALLOCPOINT :: ChemSampWall_Shared(:,:,:,:,:) ! Sampling direct impact mechanism INTEGER :: ChemSampWall_Shared_Win #endif From 70e0ef579775ce25ad768ef69fe59fc2dc8e986c Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Sat, 18 Nov 2023 15:48:36 +0100 Subject: [PATCH 098/222] Output of surface chemistry got lost during merge --- .../boundary/particle_boundary_sampling.f90 | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index 9a6a4d1ea..dc612c85a 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -33,14 +33,9 @@ MODULE MOD_Particle_Boundary_Sampling MODULE PROCEDURE FinalizeParticleBoundarySampling END INTERFACE -INTERFACE WriteSurfSampleToHDF5 - MODULE PROCEDURE WriteSurfSampleToHDF5 -END INTERFACE - PUBLIC::DefineParametersParticleBoundarySampling PUBLIC::InitParticleBoundarySampling PUBLIC::CalcSurfaceValues -PUBLIC::WriteSurfSampleToHDF5, WriteSurfSampleChemToHDF5 PUBLIC::FinalizeParticleBoundarySampling !=================================================================================================================================== @@ -711,6 +706,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) #endif /*USE_MPI*/ CALL WriteSurfSampleToHDF5(TRIM(MeshFile),ActualTime) +IF(SurfChemReac%NumOfReact.GT.0) CALL WriteSurfSampleChemToHDF5(TRIM(MeshFile),ActualTime) MacroSurfaceVal = 0. MacroSurfaceSpecVal = 0. @@ -733,15 +729,14 @@ SUBROUTINE WriteSurfSampleToHDF5(MeshFileName,OutputTime) USE MOD_MPI_Shared_Vars ,ONLY: mySurfRank USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample,CalcSurfaceImpact -USE MOD_SurfaceModel_Vars ,ONLY: SurfChemReac, ChemWallProp_Shared_Win, ChemWallProp -USE MOD_Particle_Boundary_Vars ,ONLY: nOutputSides, nComputeNodeSurfSides +USE MOD_Particle_Boundary_Vars ,ONLY: nOutputSides USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfOutputSides,offsetComputeNodeSurfOutputSide USE MOD_Particle_Boundary_Vars ,ONLY: nSurfBC,SurfBCName, PartBound USE MOD_Particle_Boundary_Vars ,ONLY: SurfOutputSize,SurfSpecOutputSize USE MOD_Particle_Boundary_Vars ,ONLY: MacroSurfaceVal,MacroSurfaceSpecVal USE MOD_Particle_Vars ,ONLY: nSpecies #if USE_MPI -USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides, SurfSideArea_Shared, SurfSideArea +USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SURF #endif !----------------------------------------------------------------------------------------------------------------------------------! @@ -909,15 +904,15 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) USE MOD_HDF5_Output ,ONLY: WriteAttributeToHDF5,WriteArrayToHDF5,WriteHDF5Header USE MOD_IO_HDF5 USE MOD_MPI_Shared_Vars ,ONLY: mySurfRank -USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win, ChemWallProp, SurfChemReac !, ChemCountReacWall -USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp, SurfChemReac !, ChemCountReacWall +USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample, SurfSideArea USE MOD_Particle_Boundary_Vars ,ONLY: nOutputSides, nComputeNodeSurfSides USE MOD_Particle_boundary_Vars ,ONLY: nComputeNodeSurfOutputSides,offsetComputeNodeSurfOutputSide -USE MOD_Particle_Boundary_Vars ,ONLY: nSurfBC,SurfBCName, PartBound +USE MOD_Particle_Boundary_Vars ,ONLY: nSurfBC,SurfBCName USE MOD_Particle_Vars ,ONLY: nSpecies #if USE_MPI -USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides, SurfSideArea_Shared, SurfSideArea -USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SURF, MPI_COMM_SHARED +USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides +USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SURF USE MOD_MPI_Shared #endif !----------------------------------------------------------------------------------------------------------------------------------! @@ -933,10 +928,10 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) CHARACTER(LEN=255) :: FileName,FileString,Statedummy CHARACTER(LEN=255) :: H5_Name CHARACTER(LEN=255) :: NodeTypeTemp -CHARACTER(LEN=255) :: SpecID, PBCID, ReacID +CHARACTER(LEN=255) :: SpecID, ReacID CHARACTER(LEN=255),ALLOCATABLE :: Str2DVarNames(:) INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, nVar2D_Heat !, nVar2D_Count -INTEGER :: iSpec, iPBC, iSurfSide, nReac, iReac +INTEGER :: iSpec, iSurfSide, nReac, iReac INTEGER :: p,q,OutputCounter REAL :: tstart,tend, tout REAL, ALLOCATABLE :: MacroSurfaceSpecChemVal(:,:,:,:,:) From 45d511af35adba0abbb31855aa1f800ca9a0a953 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Sun, 19 Nov 2023 16:25:14 +0100 Subject: [PATCH 099/222] Created a surface chemistry routine in the respective module, moved MaxwellScattering, DiffuseReflection, PerfectReflection to the tools to avoid circular definitions --- .../boundary/particle_boundary_condition.f90 | 9 +- .../emission/particle_surface_chemflux.f90 | 110 +-- .../surfacemodel/surfacemodel_chemistry.f90 | 413 ++++++++- .../surfacemodel/surfacemodel_main.f90 | 784 +----------------- .../surfacemodel/surfacemodel_tools.f90 | 469 ++++++++++- 5 files changed, 915 insertions(+), 870 deletions(-) diff --git a/src/particles/boundary/particle_boundary_condition.f90 b/src/particles/boundary/particle_boundary_condition.f90 index 9bd1d9c2a..61d478655 100644 --- a/src/particles/boundary/particle_boundary_condition.f90 +++ b/src/particles/boundary/particle_boundary_condition.f90 @@ -52,8 +52,9 @@ SUBROUTINE GetBoundaryInteraction(iPart,SideID,flip,ElemID,crossedBC,TriNum,IsIn USE MOD_Particle_Mesh_Vars USE MOD_Particle_Boundary_Vars ,ONLY: PartBound,DoBoundaryParticleOutputHDF5 USE MOD_Particle_Surfaces_vars ,ONLY: SideNormVec,SideType -USE MOD_SurfaceModel ,ONLY: SurfaceModelling,PerfectReflection USE MOD_Particle_Vars ,ONLY: LastPartPos +USE MOD_SurfaceModel ,ONLY: SurfaceModelling +USE MOD_SurfaceModel_Tools ,ONLY: PerfectReflection USE MOD_Particle_Boundary_Tools ,ONLY: StoreBoundaryParticleProperties #ifdef CODE_ANALYZE USE MOD_Globals ,ONLY: myRank,UNIT_stdout @@ -541,7 +542,7 @@ SUBROUTINE RotPeriodicInterPlaneBoundary(PartID,SideID,ElemID,IsInterPlanePart) ELSE IF(DeleteOrCloneProb.GT.1.0) THEN NewPartNumber = INT(DeleteOrCloneProb) - 1 DeleteOrCloneProb = DeleteOrCloneProb - INT(DeleteOrCloneProb) - CALL RANDOM_NUMBER(RanNum) + CALL RANDOM_NUMBER(RanNum) IF(RanNum.LE.DeleteOrCloneProb) THEN NewPartNumber = NewPartNumber + 1 END IF @@ -564,9 +565,9 @@ SUBROUTINE RotPeriodicInterPlaneBoundary(PartID,SideID,ElemID,IsInterPlanePart) ! For creating inter particles: ! - LastPartPos(1:3,NewPartID) must be redefined as long as LastPartPos is set to PartState in CreateParticle routine ! - ParticleInside for InterParticles must be .FALSE. in order to avoid error looping over the original PDM%ParticleVecLength - ! in ParticleTriaTracking() routine. The inside flag is set to .TRUE. + ! in ParticleTriaTracking() routine. The inside flag is set to .TRUE. ! when we loop over all inter particle in SingleParticleTriaTracking routine - IF (usevMPF) THEN + IF (usevMPF) THEN CALL CreateParticle( PartSpecies(PartID), PartState(1:3,PartID), ElemID, PartState(4:6,PartID) & , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & , NewPartID=NewPartID, NewMPF=PartMPF(PartID) ) diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index 0406cd9ea..84217e4be 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -53,7 +53,7 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID USE MOD_Timedisc_Vars ,ONLY: dt USE MOD_Particle_Surfaces_Vars -USE MOD_Particle_Boundary_Vars +USE MOD_Particle_Boundary_Vars USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win,SurfChemReac, ChemWallProp, ChemDesorpWall !, ChemCountReacWall USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle USE MOD_Particle_SurfFlux ,ONLY: SetSurfacefluxVelocities, CalcPartPosTriaSurface @@ -95,7 +95,7 @@ SUBROUTINE ParticleSurfChemFlux() #if USE_LOADBALANCE REAL :: tLBStart #endif /*USE_LOADBALANCE*/ -!=================================================================================================================================== +!=================================================================================================================================== ! 1.) Determine the surface parameters nSF = SurfChemReac%CatBoundNum SubP = TrackInfo%p @@ -155,9 +155,9 @@ SUBROUTINE ParticleSurfChemFlux() ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) * BoltzmannConst nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) - ! Calculate the rate in dependence of the temperature and coverage + ! Calculate the rate in dependence of the temperature and coverage Rate = nu * Coverage * exp(-E_act/WallTemp) ! Energy in K DO iVal=1,SIZE(SurfChemReac%Products(iReac,:)) @@ -189,24 +189,24 @@ SUBROUTINE ParticleSurfChemFlux() END IF END DO - ! Update the surface coverage values and the heat flux + ! Update the surface coverage values and the heat flux IF(INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8).GE.1) THEN ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) & + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) * ReacHeat * BetaCoeff - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) & - - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8)/SurfMol - END IF + - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8)/SurfMol + END IF END IF END DO ! iValReac ! Count the number of surface reactions - !ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/MPF) + !ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/MPF) END IF !ChemDesorpWall.GE.1 - END IF ! iVal in Products - END DO ! iVal + END IF ! iVal in Products + END DO ! iVal ! b) Langmuir-Hinshelwood reaction (Arrhenius model) CASE('LH') @@ -227,8 +227,8 @@ SUBROUTINE ParticleSurfChemFlux() BetaCoeff = SurfChemReac%HeatAccommodation(iReac) ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) * BoltzmannConst - nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) + nu = SurfChemReac%Prefactor(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) ! Calculate the rate in dependence of the temperature and coverage Rate = nu * Coverage * exp(-E_act/WallTemp) ! Energy in K @@ -236,7 +236,7 @@ SUBROUTINE ParticleSurfChemFlux() IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN iSpec = SurfChemReac%Products(iReac,iVal) ! Reaction product number - DesCount = Rate * dt + DesCount = Rate * dt DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN @@ -249,7 +249,7 @@ SUBROUTINE ParticleSurfChemFlux() ELSE Coverage = 1. END IF - + ! Check if enough adsorbate reactants are available IF(DesCount .GT. Coverage/ReactantCount) THEN DesCount = Coverage/ReactantCount @@ -259,25 +259,25 @@ SUBROUTINE ParticleSurfChemFlux() END DO ! Update the surface coverage values and the heat flux - ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) + DesCount + ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) + DesCount ! Test for the maximum of the product coverage IF(ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID).GT.PartBound%MaxCoverage(BoundID, iSpec)) THEN ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) = PartBound%MaxCoverage(BoundID, iSpec) END IF ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) & + DesCount*ReacHeat*BetaCoeff*SurfMol - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN - ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) - DesCount + ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) - DesCount END IF END IF - END DO ! iValReac + END DO ! iValReac ! Count the number of surface reactions !ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + INT(DesCount/MPF) END IF ! iVal in Products - END DO ! iVal + END DO ! iVal ! c) Thermal desorption (Polanyi-Wigner equation) @@ -286,10 +286,10 @@ SUBROUTINE ParticleSurfChemFlux() IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN iSpec = SurfChemReac%Products(iReac,iVal) MPF = Species(iSpec)%MacroParticleFactor - + ! Number of adsorbed particles on the subside IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN @@ -300,10 +300,10 @@ SUBROUTINE ParticleSurfChemFlux() AdCount = Coverage * SurfMol END IF END DO - ELSE + ELSE Coverage = ChemWallProp(iSpec,1,SubP, SubQ, SurfSideID) AdCount = Coverage * SurfMol - END IF + END IF ! Calculate the desorption energy in dependence of the coverage [J] DesHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) * BoltzmannConst @@ -311,18 +311,18 @@ SUBROUTINE ParticleSurfChemFlux() ! Define the variables DissOrder = SurfChemReac%DissOrder(iReac) nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) Rate = SurfChemReac%Rate(iReac) ! Calculate the desorption prefactor in dependence of coverage and temperature of the boundary IF(nu.EQ.0.) THEN - nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) + nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) IF (DissOrder.EQ.2) THEN ! Convert the prefactor to coverage values for the associative desorption nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) *10.**(15) END IF END IF - + E_act = SurfChemReac%E_initial(iReac) + Coverage * SurfChemReac%W_interact(iReac) Rate = nu * Coverage**DissOrder * exp(-E_act/WallTemp) ! Energy in K @@ -338,9 +338,9 @@ SUBROUTINE ParticleSurfChemFlux() ! Update the adsorbtion and desorption count together with the heat flux IF(INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/Species(iSpec)%MacroParticleFactor).GE.1) THEN ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) & - - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) * DesHeat + - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) * DesHeat IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) IF (iReactant.NE.SurfChemReac%SurfSpecies) THEN @@ -349,18 +349,18 @@ SUBROUTINE ParticleSurfChemFlux() END IF END IF END DO - ELSE + ELSE ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) = ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) & - DissOrder*INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8)/SurfMol END IF ! Count the number of surface reactions - !ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/MPF) + !ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/MPF) END IF !ChemDesorbWall .GE. 1 END IF ! Products .NE. 1 END DO !iSpec - CASE DEFAULT - END SELECT + CASE DEFAULT + END SELECT END IF !iReac.EQ.PureSurfReac @@ -380,8 +380,8 @@ SUBROUTINE ParticleSurfChemFlux() xyzNod(1:3) = BCdata_auxSF(BoundID)%TriaSideGeo(iSide)%xyzNod(1:3) DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - Node1 = jSample+1 - Node2 = jSample+2 + Node1 = jSample+1 + Node2 = jSample+2 Vector1 = BCdata_auxSF(BoundID)%TriaSideGeo(iSide)%Vectors(:,Node1-1) Vector2 = BCdata_auxSF(BoundID)%TriaSideGeo(iSide)%Vectors(:,Node2-1) midpoint(1:3) = BCdata_auxSF(BoundID)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) @@ -406,7 +406,7 @@ SUBROUTINE ParticleSurfChemFlux() PDM%dtFracPush(ParticleIndexNbr) = .TRUE. PDM%IsNewPart(ParticleIndexNbr) = .TRUE. PEM%GlobalElemID(ParticleIndexNbr) = globElemId - PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId + PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId iPartTotal = iPartTotal + 1 IF (RadialWeighting%DoRadialWeighting) THEN PartMPF(ParticleIndexNbr) = CalcRadWeightMPF(PartState(2,ParticleIndexNbr), iSpec,ParticleIndexNbr) @@ -415,7 +415,7 @@ SUBROUTINE ParticleSurfChemFlux() CALL abort(__STAMP__,'ERROR in ParticleSurfChemFlux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?') END IF END DO - + CALL SetSurfacefluxVelocities(2,iSpec,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) PartsEmitted = PartsEmitted + PartInsSubSide END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) @@ -471,7 +471,7 @@ END SUBROUTINE ParticleSurfChemFlux !=================================================================================================================================== !> Bias treatment for multiple reactions on the same surface element !=================================================================================================================================== -PPURE FUNCTION RemoveBias(SurfNumOfReac) +FUNCTION RemoveBias(SurfNumOfReac) ! MODULES ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -492,19 +492,19 @@ PPURE FUNCTION RemoveBias(SurfNumOfReac) ! Shuffle m = SurfNumOfReac DO k = 1, 2 - DO i = 1, m - CALL RANDOM_NUMBER(RanNum) - j = 1 + FLOOR(m*RanNum) - temp = RemoveBias(j) - RemoveBias(j) = RemoveBias(i) - RemoveBias(i) = temp - END DO + DO i = 1, m + CALL RANDOM_NUMBER(RanNum) + j = 1 + FLOOR(m*RanNum) + temp = RemoveBias(j) + RemoveBias(j) = RemoveBias(i) + RemoveBias(i) = temp + END DO END DO END FUNCTION RemoveBias !=================================================================================================================================== -!> (Instantaneous) Diffusion of particles along the surface +!> (Instantaneous) Diffusion of particles along the surface !=================================================================================================================================== SUBROUTINE ParticleSurfDiffusion() ! Modules @@ -514,7 +514,7 @@ SUBROUTINE ParticleSurfDiffusion() USE MOD_Mesh_Vars ,ONLY: SideToElem, offsetElem USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID USE MOD_Particle_Surfaces_Vars -USE MOD_Particle_Boundary_Vars +USE MOD_Particle_Boundary_Vars USE MOD_SurfaceModel USE MOD_SurfaceModel_Chemistry USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win,SurfChemReac, ChemWallProp @@ -546,7 +546,7 @@ SUBROUTINE ParticleSurfDiffusion() #if USE_LOADBALANCE REAL :: tLBStart #endif /*USE_LOADBALANCE*/ -!=================================================================================================================================== +!=================================================================================================================================== CatBoundNum = SurfChemReac%CatBoundNum SubP = TrackInfo%p @@ -573,7 +573,7 @@ SUBROUTINE ParticleSurfDiffusion() DO iSF = 1, CatBoundNum BoundID = SurfChemReac%Surfaceflux(iSF)%BC SideNumber = BCdata_auxSF(BoundID)%SideNumber - + ! Determine the sum of the coverage on all indivual subsides DO iSpec = 1, nSpecies Coverage_Sum = 0.0 @@ -584,10 +584,10 @@ SUBROUTINE ParticleSurfDiffusion() globElemId = ElemID + offSetElem SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) - + Coverage_Sum = Coverage_Sum + ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) - END DO + END DO ! Redistribute the coverage equally over all subsides DO iSide = 1, SideNumber @@ -597,13 +597,13 @@ SUBROUTINE ParticleSurfDiffusion() globElemId = ElemID + offSetElem SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) - + ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) = Coverage_Sum/SideNumber - END DO + END DO END DO !iSpec - END DO !iSF + END DO !iSF END IF !Diffusion #if USE_MPI diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index c26e59cfc..fe0a1d028 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -27,6 +27,7 @@ MODULE MOD_SurfaceModel_Chemistry ! Private Part --------------------------------------------------------------------------------------------------------------------- ! Public Part ---------------------------------------------------------------------------------------------------------------------- PUBLIC :: DefineParametersSurfaceChemistry, InitializeVariablesSurfaceChemistry, SurfaceModel_Chemistry_Init +PUBLIC :: SurfaceModelChemistry !=================================================================================================================================== CONTAINS @@ -53,7 +54,7 @@ SUBROUTINE DefineParametersSurfaceChemistry() '(SpecNumOfReactant1,\n'//& 'SpecNumOfReactant2)', '0 , 0' , numberedmulti=.TRUE.) CALL prms%CreateIntArrayOption( 'Surface-Reaction[$]-Products' & - ,'Products of Reaction[j] (Product1, Product2)', '0 , 0' & + ,'Products of Reaction[$] (Product1, Product2)', '0 , 0' & , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-ReactHeat', & 'Heat flux to or from the surface due to the reaction', '0.' , numberedmulti=.TRUE.) @@ -68,7 +69,7 @@ SUBROUTINE DefineParametersSurfaceChemistry() CALL prms%CreateRealOption( 'Surface-Reaction[$]-StickingCoefficient', & 'Ratio of adsorbed to impinging particles on a reactive surface', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-DissOrder', & - 'Associative = 1, dissociative = 2', '0.' , numberedmulti=.TRUE.) + 'Associative = 1, dissociative = 2', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-EqConstant', & 'Equilibrium constant between the adsorption and desorption (K), Langmuir: K=1', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-LateralInteraction', & @@ -78,7 +79,7 @@ SUBROUTINE DefineParametersSurfaceChemistry() CALL prms%CreateRealOption( 'Surface-Reaction[$]-Cb', & 'Desorption prefactor: nu = 10^(Ca + Coverage*Cb)', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-Prefactor', & - 'Arrhenius prefactor for the reaction/desorption', '0.' , numberedmulti=.TRUE.) + 'Arrhenius prefactor for the reaction/desorption', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-Energy', & 'Arrhenius energy for the reaction/desorption', '0.' , numberedmulti=.TRUE.) CALL prms%CreateLogicalOption( 'Surface-Diffusion', 'Diffusion along the surface', '.FALSE.') @@ -94,7 +95,7 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() !=================================================================================================================================== ! Readin of variables and definition of reaction cases !=================================================================================================================================== -! MODULES +! MODULES USE MOD_Globals USE MOD_ReadInTools USE MOD_PARTICLE_Vars ,ONLY: nSpecies, SpeciesDatabase @@ -184,7 +185,7 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() SurfChemReac%Prob = 0.0 ALLOCATE(SurfChemReac%ArrheniusEnergy(SurfChemReac%NumOfReact)) SurfChemReac%ArrheniusEnergy = 0.0 -ALLOCATE(SurfChemReac%Prefactor(SurfChemReac%NumOfReact)) +ALLOCATE(SurfChemReac%Prefactor(SurfChemReac%NumOfReact)) SurfChemReac%Prefactor = 0.0 ALLOCATE(SurfChemReac%EReact(SurfChemReac%NumOfReact)) SurfChemReac%EReact = 0.0 @@ -198,9 +199,9 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() WRITE(UNIT=hilf,FMT='(I0)') iReac SurfChemReac%CatName(iReac) = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-SurfName')) SurfChemReac%Reactants(iReac,:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Reactants',2,'0,0') - SurfChemReac%Products(iReac,:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Products',2,'0,0') + SurfChemReac%Products(iReac,:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Products',2,'0,0') - SurfChemReac%NumOfBounds(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-NumOfBoundaries','0') + SurfChemReac%NumOfBounds(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-NumOfBoundaries') IF (SurfChemReac%NumOfBounds(iReac).EQ.0) THEN CALL abort(__STAMP__,'ERROR: At least one boundary must be defined for each surface reaction!',iReac) END IF @@ -210,12 +211,12 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() ! Define the surface model PartBound%SurfaceModel(SurfChemReac%BoundMap(iReac)%Boundaries) = 20 - DO iReac2 = 1, SurfChemReac%NumOfBounds(iReac) + DO iReac2 = 1, SurfChemReac%NumOfBounds(iReac) SurfChemReac%BoundisChemSurf(SurfChemReac%BoundMap(iReac)%Boundaries(iReac2)) = .TRUE. END DO ! Select pure surface reactions - DO iVal = 1, SurfChemReac%NumOfBounds(iReac) + DO iVal = 1, SurfChemReac%NumOfBounds(iReac) iBound = SurfChemReac%BoundMap(iReac)%Boundaries(iVal) SurfChemReac%PSMap(iBound)%PureSurfReac(iReac) = .TRUE. END DO @@ -260,31 +261,31 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() CALL AttributeExists(file_id_specdb,'Inhibition',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'Inhibition',1,DatasetName = dsetname,IntScalar=SurfChemReac%Inhibition(iReac)) - ELSE + ELSE SurfChemReac%Inhibition(iReac)= 0 END IF CALL AttributeExists(file_id_specdb,'Promotion',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'Promotion',1,DatasetName = dsetname,IntScalar=SurfChemReac%Promotion(iReac)) - ELSE + ELSE SurfChemReac%Promotion(iReac)= 0 END IF CALL AttributeExists(file_id_specdb,'ReactHeat',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'ReactHeat',1,DatasetName = dsetname,RealScalar=SurfChemReac%EReact(iReac)) - ELSE + ELSE SurfChemReac%EReact(iReac)= 0. END IF CALL AttributeExists(file_id_specdb,'HeatScaling',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'HeatScaling',1,DatasetName = dsetname,RealScalar=SurfChemReac%EScale(iReac)) - ELSE + ELSE SurfChemReac%EScale(iReac)= 0. END IF CALL AttributeExists(file_id_specdb,'EnergyAccommodation',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'EnergyAccommodation',1,DatasetName = dsetname,RealScalar=SurfChemReac%HeatAccommodation(iReac)) - ELSE + ELSE SurfChemReac%HeatAccommodation(iReac)= 0. END IF @@ -293,19 +294,19 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() CALL AttributeExists(file_id_specdb,'StickingCoefficient',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'StickingCoefficient',1,DatasetName = dsetname,RealScalar=SurfChemReac%S_initial(iReac)) - ELSE + ELSE SurfChemReac%S_initial(iReac)= 1. END IF CALL AttributeExists(file_id_specdb,'EqConstant',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'EqConstant',1,DatasetName = dsetname,RealScalar=SurfChemReac%EqConstant(iReac)) - ELSE + ELSE SurfChemReac%EqConstant(iReac)= 1. END IF CALL AttributeExists(file_id_specdb,'DissOrder',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'DissOrder',1,DatasetName = dsetname,RealScalar=SurfChemReac%DissOrder(iReac)) - ELSE + ELSE SurfChemReac%DissOrder(iReac)= 1. END IF @@ -313,37 +314,37 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() CALL AttributeExists(file_id_specdb,'LateralInteraction',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'LateralInteraction',1,DatasetName = dsetname,RealScalar=SurfChemReac%W_interact(iReac)) - ELSE + ELSE SurfChemReac%W_interact(iReac)= 0. END IF CALL AttributeExists(file_id_specdb,'Ca',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'Ca',1,DatasetName = dsetname,RealScalar=SurfChemReac%C_a(iReac)) - ELSE + ELSE SurfChemReac%C_a(iReac)= 0. END IF CALL AttributeExists(file_id_specdb,'Cb',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'Cb',1,DatasetName = dsetname,RealScalar=SurfChemReac%C_b(iReac)) - ELSE + ELSE SurfChemReac%C_b(iReac)= 0. END IF CALL AttributeExists(file_id_specdb,'Prefactor',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'Prefactor',1,DatasetName = dsetname,RealScalar=SurfChemReac%Prefactor(iReac)) - ELSE + ELSE SurfChemReac%Prefactor(iReac)= 0. END IF CALL AttributeExists(file_id_specdb,'Energy',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'Energy',1,DatasetName = dsetname,RealScalar=SurfChemReac%E_initial(iReac)) - ELSE + ELSE SurfChemReac%E_initial(iReac)= 0. END IF CALL AttributeExists(file_id_specdb,'DissOrder',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'DissOrder',1,DatasetName = dsetname,RealScalar=SurfChemReac%DissOrder(iReac)) - ELSE + ELSE SurfChemReac%DissOrder(iReac)= 1. END IF @@ -352,32 +353,32 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) END IF - CASE('LH') + CASE('LH') CALL AttributeExists(file_id_specdb,'Energy',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'Energy',1,DatasetName = dsetname,RealScalar=SurfChemReac%ArrheniusEnergy(iReac)) - ELSE + ELSE SurfChemReac%ArrheniusEnergy(iReac)= 0. END IF CALL AttributeExists(file_id_specdb,'Prefactor',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'Prefactor',1,DatasetName = dsetname,RealScalar=SurfChemReac%Prefactor(iReac)) - ELSE + ELSE SurfChemReac%Prefactor(iReac)= 1. END IF SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) - CASE('LHD') + CASE('LHD') CALL AttributeExists(file_id_specdb,'Energy',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'Energy',1,DatasetName = dsetname,RealScalar=SurfChemReac%ArrheniusEnergy(iReac)) - ELSE + ELSE SurfChemReac%ArrheniusEnergy(iReac)= 0. END IF CALL AttributeExists(file_id_specdb,'Prefactor',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'Prefactor',1,DatasetName = dsetname,RealScalar=SurfChemReac%Prefactor(iReac)) - ELSE + ELSE SurfChemReac%Prefactor(iReac)= 1. END IF SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) @@ -386,13 +387,13 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() CALL AttributeExists(file_id_specdb,'Energy',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'Energy',1,DatasetName = dsetname,RealScalar=SurfChemReac%ArrheniusEnergy(iReac)) - ELSE + ELSE SurfChemReac%ArrheniusEnergy(iReac)= 0. END IF CALL AttributeExists(file_id_specdb,'Prefactor',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'Prefactor',1,DatasetName = dsetname,RealScalar=SurfChemReac%Prefactor(iReac)) - ELSE + ELSE SurfChemReac%Prefactor(iReac)= 1. END IF @@ -417,9 +418,9 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() SurfChemReac%ReactType(iReac) = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-Type')) SurfChemReac%Inhibition(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-Inhibition','0') - SurfChemReac%Promotion(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-Promotion','0') - SurfChemReac%EReact(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-ReactHeat','0.') - SurfChemReac%EScale(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-HeatScaling','0.') + SurfChemReac%Promotion(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-Promotion','0') + SurfChemReac%EReact(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-ReactHeat','0.') + SurfChemReac%EScale(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-HeatScaling','0.') SurfChemReac%HeatAccommodation(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EnergyAccommodation','1.') SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) @@ -434,20 +435,20 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() SurfChemReac%C_b(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Cb','0.') SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','0.') SurfChemReac%E_initial(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') - SurfChemReac%DissOrder(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-DissOrder','1.') + SurfChemReac%DissOrder(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-DissOrder','1.') ! Convert the prefactor from absolute to coverage values for associative desorption IF(SurfChemReac%DissOrder(iReac).EQ.2) THEN SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) END IF - CASE('LH') + CASE('LH') SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') ! Convert the prefactor to coverage dependent values SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) - CASE('LHD') + CASE('LHD') SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') ! Convert the prefactor to coverage dependent values @@ -546,4 +547,342 @@ SUBROUTINE SurfaceModel_Chemistry_Init() END SUBROUTINE SurfaceModel_Chemistry_Init + +!=================================================================================================================================== +!> Selection and execution of a catalytic gas-surface interaction +!> 0.) Determine the surface parameters: Coverage and number of surface molecules +!> 1.) Calculate the sticking coefficient by the Kisliuk model (adsorption) +!> 2.) Calculate the reaction probability by the Arrhenius equation (bias-free for multiple channels) +!> 3.) Choose the occuring pathway by comparison with a random number +!> 4.) Perform the chosen process +!> a.) Adsorption: delete the incoming particle and update the surface values +!> b.) ER: delete the incoming particle, update the surface values and create the gas phase products +!=================================================================================================================================== +SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) +! MODULES +! ROUTINES / FUNCTIONS +USE MOD_Globals ,ONLY: abort,UNITVECTOR,OrthoNormVec +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr +USE MOD_part_operations ,ONLY: RemoveParticle, CreateParticle +USE MOD_part_tools ,ONLY: VeloFromDistribution, GetParticleWeight +USE MOD_SurfaceModel_Tools ,ONLY: MaxwellScattering +! VARIABLES +USE MOD_Globals_Vars ,ONLY: PI, BoltzmannConst +USE MOD_TimeDisc_Vars ,ONLY: dt +USE MOD_Particle_Vars ,ONLY: PartSpecies,Species,usevMPF,PartMPF +USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, dXiEQ_SurfSample,SurfSideArea_Shared +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac , ChemWallProp, ChemSampWall +USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared, BoundsOfElem_Shared +USE MOD_Particle_Vars ,ONLY: PDM, LastPartPos +USE MOD_DSMC_Vars ,ONLY: RadialWeighting +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +REAL,INTENT(IN) :: n_loc(1:3) +INTEGER,INTENT(IN) :: PartID, SideID +INTEGER,INTENT(IN) :: GlobalElemID !< Global element ID of the particle impacting the surface +REAL,INTENT(IN) :: PartPosImpact(1:3) !< Charge and position of impact of bombarding particle +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: ProductSpecNbr !< number of emitted particles for ProductSpec(2) +REAL :: TempErgy !< temperature, energy or velocity used for VeloFromDistribution +INTEGER :: locBCID +INTEGER :: iBC, SurfSideID +CHARACTER(LEN=5) :: InteractionType +REAL :: RanNum, RanNum2 +REAL :: Coverage, MaxCoverage, TotalCoverage, Theta, MaxTotalCov +REAL :: CoAds_Coverage, CoAds_MaxCov +REAL :: S_0, StickCoeff +REAL :: EqConstant, DissOrder +REAL :: WallTemp +REAL :: nu, E_act, Rate, Prob, Prob_new, Prob_Scaled +REAL :: NewPos(1:3) +REAL :: SurfMol, AdCountIter +REAL :: tang1(1:3), tang2(1:3), WallVelo(1:3), BoundsOfElemCenter(1:3), NewVelo(3) +REAL :: AdsHeat, ReacHeat, BetaCoeff +REAL :: partWeight +REAL,PARAMETER :: eps=1e-6 +REAL,PARAMETER :: eps2=1.0-eps +INTEGER :: speciesID +INTEGER :: iReac_Ads, iReac_ER, iReac_ER_new +INTEGER :: iReac, iValProd, iProd, iReactant, iValReac +INTEGER :: iCoadsReac, iCoadsSpec +INTEGER :: NewPartID, iNewPart +INTEGER :: SurfNumOfReac +INTEGER :: SubP, SubQ +!=================================================================================================================================== +! 0.) Determine the surface parameters: Coverage and number of surface molecules +locBCID = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) +SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) +ProductSpecNbr = 0 +SubP = TrackInfo%p +SubQ = TrackInfo%q +InteractionType = 'None' +StickCoeff = 0.0 +Prob = 0.0 +iReac_ER = 0 +speciesID = PartSpecies(PartID) +SurfNumOfReac = SurfChemReac%NumOfReact +! MacroParticleFactor +partWeight = GetParticleWeight(PartID) +IF(.NOT.(usevMPF.OR.RadialWeighting%DoRadialWeighting)) THEN + partWeight = partWeight * Species(speciesID)%MacroParticleFactor +END IF + +IF(PartBound%LatticeVec(locBCID).GT.0.) THEN + ! Number of surface molecules in dependence of the occupancy of the unit cell + SurfMol = PartBound%MolPerUnitCell(locBCID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & + /(PartBound%LatticeVec(locBCID)*PartBound%LatticeVec(locBCID)) +ELSE + ! Alternative calculation by the average number of surface molecules per area for a monolayer + SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) +END IF ! LatticeVec.GT.0 + +DO iReac = 1, SurfNumOfReac + SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) + + ! 1.) Calculate the sticking coefficient by the Kisliuk model (adsorption) + CASE('A') + IF(ANY(SurfChemReac%Reactants(iReac,:).EQ.speciesID)) THEN + iReac_Ads = iReac + + ! Absolute coverage in terms of the number of surface molecules + IF(ANY(SurfChemReac%Products(iReac,:).NE.0)) THEN + DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) + IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN + iProd = SurfChemReac%Products(iReac,iValProd) + Coverage = ChemWallProp(iProd,1,SubP,SubQ,SurfSideID) + END IF + END DO + ELSE + Coverage = ChemWallProp(speciesID,1,SubP,SubQ,SurfSideID) + END IF + + ! Definition of the variables + MaxCoverage = PartBound%MaxCoverage(locBCID,speciesID) + TotalCoverage = SUM(ChemWallProp(:,1,SubP, SubQ, SurfSideID)) + MaxTotalCov = PartBound%MaxTotalCoverage(locBCID) + DissOrder = SurfChemReac%DissOrder(iReac) + S_0 = SurfChemReac%S_initial(iReac) + EqConstant = SurfChemReac%EqConstant(iReac) + StickCoeff = SurfChemReac%StickCoeff(iReac) + + ! Determine the heat of adsorption in dependence of the coverage [J] + AdsHeat = (SurfChemReac%EReact(iReac) - Coverage * SurfChemReac%EScale(iReac)) * BoltzmannConst + + ! Theta = free surface sites required for the adsorption + ! Determination of possible coadsorption processes + IF(SurfChemReac%Inhibition(iReac).NE.0) THEN + iCoadsReac = SurfChemReac%Inhibition(iReac) + iCoadsSpec = SurfChemReac%Reactants(iCoadsReac,1) + CoAds_Coverage = ChemWallProp(iCoadsSpec,1,SubP, SubQ, SurfSideID) + CoAds_MaxCov = PartBound%MaxCoverage(locBCID,iCoadsSpec) + Theta = 1.0 - Coverage/MaxCoverage - CoAds_Coverage/CoAds_MaxCov + ELSE IF(SurfChemReac%Promotion(iReac).NE.0) THEN + iCoadsReac = SurfChemReac%Promotion(iReac) + iCoadsSpec = SurfChemReac%Reactants(iCoadsReac,1) + CoAds_Coverage = ChemWallProp(iCoadsSpec,1,SubP, SubQ, SurfSideID) + CoAds_MaxCov = PartBound%MaxCoverage(locBCID,iCoadsSpec) + Theta = 1.0 - Coverage/MaxCoverage + CoAds_Coverage/CoAds_MaxCov + ELSE + Theta = 1.0 - Coverage/MaxCoverage + END IF + + ! Check whether the maximum coverage value is reached: + IF(Theta.GE.0.0 .AND. TotalCoverage.LT.MaxTotalCov) THEN + Theta = Theta**DissOrder + ! Kisliuk model (for EqConstant=1 and MaxCoverage=1: Langmuir model) + StickCoeff = S_0 * (1.0 + EqConstant * (1.0/Theta - 1.0))**(-1.0) + ELSE + StickCoeff = 0.0 + END IF + + END IF + + ! 2.) Calculate the reaction probability by the Arrhenius equation (bias-free for multiple channels) + CASE('ER') + IF(ANY(SurfChemReac%Reactants(iReac,:).EQ.speciesID)) THEN + + ! Definition of the variables + WallTemp = PartBound%WallTemp(locBCID) + nu = SurfChemReac%Prefactor(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) + Rate = SurfChemReac%Rate(iReac) + BetaCoeff = SurfChemReac%HeatAccommodation(iReac) + + ! Check for the coverage values of the reactant adsorbed on the surface + IF(ANY(SurfChemReac%Reactants(iReac,:).NE.speciesID)) THEN + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN + Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) + AdCountIter = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) + ELSE ! Involvement of the bulk species + Coverage = 1. + AdCountIter = 0. + END IF + END IF + END DO + ELSE + Coverage = ChemWallProp(speciesID,1,SubP, SubQ, SurfSideID) + AdCountIter = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) + END IF + + ! Determine the reaction heat in dependence of the coverage [J] + ReacHeat = (SurfChemReac%EReact(iReac) - Coverage * SurfChemReac%EScale(iReac)) * BoltzmannConst + + ! Bias free calculation for multiple reaction channels + IF(iReac_ER.EQ.0) THEN + iReac_ER = iReac + Rate = nu * Coverage * exp(-E_act/WallTemp) ! Energy in K + Prob = Rate * dt + + ! Comparison of adsorbate numbers to reactant particle weights + IF(partWeight.GT.(Coverage*SurfMol)) THEN + Prob = 0.0 + ! Test for the changes during the iteration + ELSE IF ((Coverage*SurfMol + AdCountIter - partWeight).LT.0.0) THEN + Prob = 0.0 + END IF + + ELSE ! iReac.NE.0 + iReac_ER_new = iReac + Rate = nu * Coverage * exp(-E_act/WallTemp) ! Energy in K + Prob_new = Rate * dt + + ! Comparison of adsorbate numbers to reactant particle weights + IF(partWeight.GT.(Coverage*SurfMol)) THEN + Prob_new = 0.0 + ! Test for the changes during the iteration + ELSE IF ((Coverage*SurfMol + AdCountIter - partWeight).LT.0.0) THEN + Prob_new = 0.0 + END IF + + ! determine most likely reaction channel + CALL RANDOM_NUMBER(RanNum) + + IF(Prob_new.GT.Prob) THEN + iReac_ER = iReac_ER_new + Prob = Prob_new + ELSE IF(Prob_new.EQ.Prob) THEN + IF(RanNum.GT.0.5) THEN + iReac_ER = iReac_ER_new + Prob = Prob_new + END IF + END IF + END IF !iReac.EQ.0 + END IF !iReac.EQ.speciesID + + CASE DEFAULT + END SELECT !Surface reaction +END DO !iReac + +! 3.) Choose the occuring pathway by comparison with a random number +! Rescale the probability (ER-Reaction) and the sticking coefficient (adsorption) +IF ((Prob+StickCoeff).GT.0.) THEN + CALL RANDOM_NUMBER(RanNum) + CALL RANDOM_NUMBER(RanNum2) + Prob_Scaled = Prob/(Prob + StickCoeff) + IF(Prob_Scaled.GT.RanNum) THEN + IF(Prob.GT.RanNum2) THEN + InteractionType = 'ER' + iReac = iReac_ER + END IF + ELSE + IF (StickCoeff.GT.RanNum2) THEN + InteractionType = 'A' + iReac = iReac_Ads + END IF + END IF +END IF + +! 4.) Perform the chosen process +SELECT CASE(TRIM(InteractionType)) + +! 4a.) Adsorption: delete the incoming particle and update the surface values +CASE('A') + CALL RemoveParticle(PartID) + + ! Heat flux on the surface created by the adsorption + ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) + AdsHeat * partWeight + ! Update the number of adsorbed molecules + IF(ANY(SurfChemReac%Products(iReac,:).NE.0)) THEN + DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) + IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN + iProd = SurfChemReac%Reactants(iReac,iValProd) + ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) + DissOrder * partWeight + END IF + END DO + ELSE + ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) + DissOrder * partWeight + END IF + + ! Count the number of surface reactions + ! ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + partWeight + + +! 4b.) ER: delete the incoming particle, update the surface values and create the gas phase products +CASE('ER') + CALL RemoveParticle(PartID) + + ! Heat flux on the surface created by the reaction + ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) + ReacHeat * partWeight * BetaCoeff + + ! Create the Eley-Rideal reaction product + TempErgy = SQRT(2*BoltzmannConst*WallTemp/Species(speciesID)%MassIC) + WallVelo = PartBound%WallVelo(1:3,locBCID) + CALL OrthoNormVec(n_loc,tang1,tang2) + + ! Get Elem Center + BoundsOfElemCenter(1:3) = (/SUM(BoundsOfElem_Shared(1:2,1,GlobalElemID)), & + SUM(BoundsOfElem_Shared(1:2,2,GlobalElemID)), & + SUM(BoundsOfElem_Shared(1:2,3,GlobalElemID)) /) / 2. + + iNewPart = 1 + ProductSpecNbr = 1 + + DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) + IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN + iProd = SurfChemReac%Products(iReac,iValProd) + + NewVelo(1:3) = VeloFromDistribution('deltadistribution',TempErgy,1,1) + + + NewVelo(1:3) = tang1(1:3)*NewVelo(1) + tang2(1:3)*NewVelo(2) - n_loc(1:3)*NewVelo(3) + WallVelo(1:3) + NewPos(1:3) = eps*BoundsOfElemCenter(1:3) + eps2*PartPosImpact(1:3) + + CALL CreateParticle(iProd,NewPos(1:3),GlobalElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID, NewMPF=partWeight) + + CALL DSMC_SetInternalEnr(iProd,locBCID,NewPartID,4,iReac) + END IF + END DO + + ! Update the number of adsorbed molecules + IF(ANY(SurfChemReac%Reactants(iReac,:).NE.speciesID)) THEN + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN + ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) - partWeight + END IF + END IF + END DO + ELSE + ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) - partWeight + END IF + + ! Count the number of surface reactions + ! ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + partWeight + +CASE DEFAULT + CALL MaxwellScattering(PartID,SideID,n_Loc) +END SELECT !Interaction Type + +END SUBROUTINE SurfaceModelChemistry + END MODULE MOD_SurfaceModel_Chemistry diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index f2e56a562..46e129535 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -25,7 +25,7 @@ MODULE MOD_SurfaceModel !----------------------------------------------------------------------------------------------------------------------------------- ! Private Part --------------------------------------------------------------------------------------------------------------------- ! Public Part ---------------------------------------------------------------------------------------------------------------------- -PUBLIC :: SurfaceModelling, MaxwellScattering, PerfectReflection, DiffuseReflection, SpeciesSwap +PUBLIC :: SurfaceModelling !=================================================================================================================================== CONTAINS @@ -53,18 +53,19 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) USE MOD_Particle_Vars ,ONLY: PartSpecies,WriteMacroSurfaceValues,Species,usevMPF,PartMPF USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod, TrackInfo USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, dXiEQ_SurfSample,SurfSideArea_Shared -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac , ChemWallProp, ChemSampWall +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac , ChemSampWall USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared, BoundsOfElem_Shared USE MOD_Particle_Vars ,ONLY: PDM, LastPartPos USE MOD_Particle_Vars ,ONLY: UseCircularInflow USE MOD_Dielectric_Vars ,ONLY: DoDielectricSurfaceCharge USE MOD_DSMC_Vars ,ONLY: DSMC, SamplingActive, RadialWeighting USE MOD_SurfaceModel_Analyze_Vars ,ONLY: CalcSurfCollCounter, SurfAnalyzeCount, SurfAnalyzeNumOfAds, SurfAnalyzeNumOfDes -USE MOD_SurfaceModel_Tools ,ONLY: SurfaceModel_ParticleEmission, GetWallTemperature, SurfaceModel_EnergyAccommodation +USE MOD_SurfaceModel_Tools ,ONLY: MaxwellScattering, SurfaceModel_ParticleEmission +USE MOD_SurfaceModel_Chemistry ,ONLY: SurfaceModelChemistry USE MOD_SEE ,ONLY: SecondaryElectronEmission USE MOD_SurfaceModel_Porous ,ONLY: PorousBoundaryTreatment USE MOD_Particle_Boundary_Tools ,ONLY: CalcWallSample -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr USE MOD_PICDepo_Tools ,ONLY: DepositParticleOnNodes USE MOD_part_operations ,ONLY: RemoveParticle, CreateParticle USE MOD_part_tools ,ONLY: CalcRadWeightMPF, VeloFromDistribution, GetParticleWeight @@ -95,30 +96,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) REAL :: ChargeRefl !< Charge of reflected particle REAL :: MPF !< macro-particle factor REAL :: ChargeHole !< Charge of SEE electrons holes -INTEGER :: i -!=================================================================================================================================== -CHARACTER(LEN=5) :: InteractionType -REAL :: RanNum, RanNum2 -REAL :: Coverage, MaxCoverage, TotalCoverage, Theta, MaxTotalCov -REAL :: CoAds_Coverage, CoAds_MaxCov -REAL :: S_0, StickCoeff -REAL :: EqConstant, DissOrder -REAL :: WallTemp -REAL :: nu, E_act, Rate, Prob, Prob_new, Prob_Scaled -REAL :: NewPos(1:3) -REAL :: SurfMol, AdCountIter -REAL :: tang1(1:3), tang2(1:3), WallVelo(1:3), BoundsOfElemCenter(1:3), NewVelo(3) -REAL :: AdsHeat, ReacHeat, BetaCoeff -REAL :: partWeight -REAL,PARAMETER :: eps=1e-6 -REAL,PARAMETER :: eps2=1.0-eps -INTEGER :: speciesID -INTEGER :: iReac_Ads, iReac_ER, iReac_ER_new -INTEGER :: iReac, iValProd, iProd, iReactant, iValReac -INTEGER :: iCoadsReac, iCoadsSpec -INTEGER :: NewPartID, iNewPart -INTEGER :: SurfNumOfReac -INTEGER :: SubP, SubQ +INTEGER :: iProd !=================================================================================================================================== iBC = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) @@ -194,280 +172,9 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) !----------------------------------------------------------------------------------------------------------------------------------- CALL StickingCoefficientModel(PartID,SideID,n_Loc) !----------------------------------------------------------------------------------------------------------------------------------- -CASE(20) ! Adsorption or Eley-Rideal reaction - !> Selection and execution of a catalytic gas-surface interaction - !> 0.) Determine the surface parameters: Coverage and number of surface molecules - !> 1.) Calculate the sticking coefficient by the Kisliuk model (adsorption) - !> 2.) Calculate the reaction probability by the Arrhenius equation (bias-free for multiple channels) - !> 3.) Choose the occuring pathway by comparison with a random number - !> 4.) Perform the chosen process - !> a.) Adsorption: delete the incoming particle and update the surface values - !> b.) ER: delete the incoming particle, update the surface values and create the gas phase products +CASE(20) ! Catalytic gas-surface interaction: Adsorption or Eley-Rideal reaction !----------------------------------------------------------------------------------------------------------------------------------- - ! 0.) Determine the surface parameters: Coverage and number of surface molecules - SubP = TrackInfo%p - SubQ = TrackInfo%q - InteractionType = 'None' - StickCoeff = 0.0 - Prob = 0.0 - iReac_ER = 0 - speciesID = PartSpecies(PartID) - SurfNumOfReac = SurfChemReac%NumOfReact - ! MacroParticleFactor - partWeight = GetParticleWeight(PartID) - IF(.NOT.(usevMPF.OR.RadialWeighting%DoRadialWeighting)) THEN - partWeight = partWeight * Species(speciesID)%MacroParticleFactor - END IF - - IF(PartBound%LatticeVec(locBCID).GT.0.) THEN - ! Number of surface molecules in dependence of the occupancy of the unit cell - SurfMol = PartBound%MolPerUnitCell(locBCID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & - /(PartBound%LatticeVec(locBCID)*PartBound%LatticeVec(locBCID)) - ELSE - ! Alternative calculation by the average number of surface molecules per area for a monolayer - SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) - END IF ! LatticeVec.GT.0 - - DO iReac = 1, SurfNumOfReac - SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) - - ! 1.) Calculate the sticking coefficient by the Kisliuk model (adsorption) - CASE('A') - IF(ANY(SurfChemReac%Reactants(iReac,:).EQ.speciesID)) THEN - iReac_Ads = iReac - - ! Absolute coverage in terms of the number of surface molecules - IF(ANY(SurfChemReac%Products(iReac,:).NE.0)) THEN - DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) - IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN - iProd = SurfChemReac%Products(iReac,iValProd) - Coverage = ChemWallProp(iProd,1,SubP,SubQ,SurfSideID) - END IF - END DO - ELSE - Coverage = ChemWallProp(speciesID,1,SubP,SubQ,SurfSideID) - END IF - - ! Definition of the variables - MaxCoverage = PartBound%MaxCoverage(locBCID,speciesID) - TotalCoverage = SUM(ChemWallProp(:,1,SubP, SubQ, SurfSideID)) - MaxTotalCov = PartBound%MaxTotalCoverage(locBCID) - DissOrder = SurfChemReac%DissOrder(iReac) - S_0 = SurfChemReac%S_initial(iReac) - EqConstant = SurfChemReac%EqConstant(iReac) - StickCoeff = SurfChemReac%StickCoeff(iReac) - - ! Determine the heat of adsorption in dependence of the coverage [J] - AdsHeat = (SurfChemReac%EReact(iReac) - Coverage * SurfChemReac%EScale(iReac)) * BoltzmannConst - - ! Theta = free surface sites required for the adsorption - ! Determination of possible coadsorption processes - IF(SurfChemReac%Inhibition(iReac).NE.0) THEN - iCoadsReac = SurfChemReac%Inhibition(iReac) - iCoadsSpec = SurfChemReac%Reactants(iCoadsReac,1) - CoAds_Coverage = ChemWallProp(iCoadsSpec,1,SubP, SubQ, SurfSideID) - CoAds_MaxCov = PartBound%MaxCoverage(locBCID,iCoadsSpec) - Theta = 1.0 - Coverage/MaxCoverage - CoAds_Coverage/CoAds_MaxCov - ELSE IF(SurfChemReac%Promotion(iReac).NE.0) THEN - iCoadsReac = SurfChemReac%Promotion(iReac) - iCoadsSpec = SurfChemReac%Reactants(iCoadsReac,1) - CoAds_Coverage = ChemWallProp(iCoadsSpec,1,SubP, SubQ, SurfSideID) - CoAds_MaxCov = PartBound%MaxCoverage(locBCID,iCoadsSpec) - Theta = 1.0 - Coverage/MaxCoverage + CoAds_Coverage/CoAds_MaxCov - ELSE - Theta = 1.0 - Coverage/MaxCoverage - END IF - - ! Check whether the maximum coverage value is reached: - IF(Theta.GE.0.0 .AND. TotalCoverage.LT.MaxTotalCov) THEN - Theta = Theta**DissOrder - ! Kisliuk model (for EqConstant=1 and MaxCoverage=1: Langmuir model) - StickCoeff = S_0 * (1.0 + EqConstant * (1.0/Theta - 1.0))**(-1.0) - ELSE - StickCoeff = 0.0 - END IF - - END IF - - ! 2.) Calculate the reaction probability by the Arrhenius equation (bias-free for multiple channels) - CASE('ER') - IF(ANY(SurfChemReac%Reactants(iReac,:).EQ.speciesID)) THEN - - ! Definition of the variables - WallTemp = PartBound%WallTemp(locBCID) - nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) - Rate = SurfChemReac%Rate(iReac) - BetaCoeff = SurfChemReac%HeatAccommodation(iReac) - - ! Check for the coverage values of the reactant adsorbed on the surface - IF(ANY(SurfChemReac%Reactants(iReac,:).NE.speciesID)) THEN - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN - Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) - AdCountIter = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) - ELSE ! Involvement of the bulk species - Coverage = 1. - AdCountIter = 0. - END IF - END IF - END DO - ELSE - Coverage = ChemWallProp(speciesID,1,SubP, SubQ, SurfSideID) - AdCountIter = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) - END IF - - ! Determine the reaction heat in dependence of the coverage [J] - ReacHeat = (SurfChemReac%EReact(iReac) - Coverage * SurfChemReac%EScale(iReac)) * BoltzmannConst - - ! Bias free calculation for multiple reaction channels - IF(iReac_ER.EQ.0) THEN - iReac_ER = iReac - Rate = nu * Coverage * exp(-E_act/WallTemp) ! Energy in K - Prob = Rate * dt - - ! Comparison of adsorbate numbers to reactant particle weights - IF(partWeight.GT.(Coverage*SurfMol)) THEN - Prob = 0.0 - ! Test for the changes during the iteration - ELSE IF ((Coverage*SurfMol + AdCountIter - partWeight).LT.0.0) THEN - Prob = 0.0 - END IF - - ELSE ! iReac.NE.0 - iReac_ER_new = iReac - Rate = nu * Coverage * exp(-E_act/WallTemp) ! Energy in K - Prob_new = Rate * dt - - ! Comparison of adsorbate numbers to reactant particle weights - IF(partWeight.GT.(Coverage*SurfMol)) THEN - Prob_new = 0.0 - ! Test for the changes during the iteration - ELSE IF ((Coverage*SurfMol + AdCountIter - partWeight).LT.0.0) THEN - Prob_new = 0.0 - END IF - - ! determine most likely reaction channel - CALL RANDOM_NUMBER(RanNum) - - IF(Prob_new.GT.Prob) THEN - iReac_ER = iReac_ER_new - Prob = Prob_new - ELSE IF(Prob_new.EQ.Prob) THEN - IF(RanNum.GT.0.5) THEN - iReac_ER = iReac_ER_new - Prob = Prob_new - END IF - END IF - END IF !iReac.EQ.0 - END IF !iReac.EQ.speciesID - - CASE DEFAULT - END SELECT !Surface reaction - END DO !iReac - - ! 3.) Choose the occuring pathway by comparison with a random number - ! Rescale the probability (ER-Reaction) and the sticking coefficient (adsorption) - IF ((Prob+StickCoeff).GT.0.) THEN - CALL RANDOM_NUMBER(RanNum) - CALL RANDOM_NUMBER(RanNum2) - Prob_Scaled = Prob/(Prob + StickCoeff) - IF(Prob_Scaled.GT.RanNum) THEN - IF(Prob.GT.RanNum2) THEN - InteractionType = 'ER' - iReac = iReac_ER - END IF - ELSE - IF (StickCoeff.GT.RanNum2) THEN - InteractionType = 'A' - iReac = iReac_Ads - END IF - END IF - END IF - - ! 4.) Perform the chosen process - SELECT CASE(TRIM(InteractionType)) - - ! 4a.) Adsorption: delete the incoming particle and update the surface values - CASE('A') - CALL RemoveParticle(PartID) - - ! Heat flux on the surface created by the adsorption - ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) + AdsHeat * partWeight - ! Update the number of adsorbed molecules - IF(ANY(SurfChemReac%Products(iReac,:).NE.0)) THEN - DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) - IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN - iProd = SurfChemReac%Reactants(iReac,iValProd) - ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) + DissOrder * partWeight - END IF - END DO - ELSE - ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) + DissOrder * partWeight - END IF - - ! Count the number of surface reactions - ! ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + partWeight - - - ! 4b.) ER: delete the incoming particle, update the surface values and create the gas phase products - CASE('ER') - CALL RemoveParticle(PartID) - - ! Heat flux on the surface created by the reaction - ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) + ReacHeat * partWeight * BetaCoeff - - ! Create the Eley-Rideal reaction product - TempErgy = SQRT(2*BoltzmannConst*WallTemp/Species(speciesID)%MassIC) - WallVelo = PartBound%WallVelo(1:3,locBCID) - CALL OrthoNormVec(n_loc,tang1,tang2) - - ! Get Elem Center - BoundsOfElemCenter(1:3) = (/SUM(BoundsOfElem_Shared(1:2,1,GlobalElemID)), & - SUM(BoundsOfElem_Shared(1:2,2,GlobalElemID)), & - SUM(BoundsOfElem_Shared(1:2,3,GlobalElemID)) /) / 2. - - iNewPart = 1 - ProductSpecNbr = 1 - - DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) - IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN - iProd = SurfChemReac%Products(iReac,iValProd) - - NewVelo(1:3) = VeloFromDistribution('deltadistribution',TempErgy,1,1) - - - NewVelo(1:3) = tang1(1:3)*NewVelo(1) + tang2(1:3)*NewVelo(2) - n_loc(1:3)*NewVelo(3) + WallVelo(1:3) - NewPos(1:3) = eps*BoundsOfElemCenter(1:3) + eps2*PartPosImpact(1:3) - - CALL CreateParticle(iProd,NewPos(1:3),GlobalElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID, NewMPF=partWeight) - - CALL DSMC_SetInternalEnr(iProd,locBCID,NewPartID,4,iReac) - END IF - END DO - - ! Update the number of adsorbed molecules - IF(ANY(SurfChemReac%Reactants(iReac,:).NE.speciesID)) THEN - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN - ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) - partWeight - END IF - END IF - END DO - ELSE - ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) - partWeight - END IF - - ! Count the number of surface reactions - ! ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + partWeight - - CASE DEFAULT - CALL MaxwellScattering(PartID,SideID,n_Loc) - END SELECT !Interaction Type + CALL SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact(1:3)) !----------------------------------------------------------------------------------------------------------------------------------- CASE (SEE_MODELS_ID) ! 5: SEE by Levko2015 @@ -504,9 +211,9 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) ! Calculate the opposite charge ChargeHole = -Species(ProductSpec(2))%ChargeIC*MPF ! Deposit the charge(s) - DO i = 1, ProductSpecNbr + DO iProd = 1, ProductSpecNbr CALL DepositParticleOnNodes(ChargeHole, PartPosImpact, GlobalElemID) - END DO ! i = 1, ProductSpecNbr + END DO ! iProd = 1, ProductSpecNbr END IF END IF CASE DEFAULT @@ -564,475 +271,6 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) END SUBROUTINE SurfaceModelling -SUBROUTINE MaxwellScattering(PartID,SideID,n_loc,SpecularReflectionOnly_opt) -!=================================================================================================================================== -!> SurfaceModel = 0, classic DSMC gas-surface interaction model choosing between a perfect specular and a complete diffuse -!> reflection by comparing the given momentum accommodation coefficient (MomentumACC) with a random number -!=================================================================================================================================== -USE MOD_Particle_Boundary_Vars ,ONLY: PartBound -USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared -! IMPLICIT VARIABLE HANDLING -IMPLICIT NONE -!----------------------------------------------------------------------------------------------------------------------------------- -! INPUT VARIABLES -REAL,INTENT(IN) :: n_loc(1:3) -INTEGER,INTENT(IN) :: PartID, SideID -LOGICAL,INTENT(IN),OPTIONAL :: SpecularReflectionOnly_opt -!----------------------------------------------------------------------------------------------------------------------------------- -! OUTPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! LOCAL VARIABLES -REAL :: RanNum,ACC -INTEGER :: iBC -LOGICAL :: SpecularReflectionOnly -!=================================================================================================================================== -iBC = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) -ACC = PartBound%MomentumACC(iBC) - -! Check if optional parameter was supplied -IF (PRESENT(SpecularReflectionOnly_opt)) THEN; SpecularReflectionOnly = SpecularReflectionOnly_opt -ELSE; SpecularReflectionOnly = PartBound%OnlySpecular(iBC) -END IF - -IF (SpecularReflectionOnly) THEN - CALL PerfectReflection(PartID,SideID,n_loc) -ELSE IF(PartBound%OnlyDiffuse(iBC)) THEN - CALL DiffuseReflection(PartID,SideID,n_loc) -ELSE - CALL RANDOM_NUMBER(RanNum) - IF(RanNum.GE.ACC) THEN - CALL PerfectReflection(PartID,SideID,n_loc) - ELSE - CALL DiffuseReflection(PartID,SideID,n_loc) - END IF -END IF - -END SUBROUTINE MaxwellScattering - - -SUBROUTINE PerfectReflection(PartID,SideID,n_Loc,opt_Symmetry) -!----------------------------------------------------------------------------------------------------------------------------------! -! Computes the perfect reflection in 3D -!----------------------------------------------------------------------------------------------------------------------------------! -! MODULES ! -!----------------------------------------------------------------------------------------------------------------------------------! -USE MOD_Globals -USE MOD_Particle_Boundary_Vars ,ONLY: PartBound -USE MOD_Particle_Vars ,ONLY: PartState,LastPartPos,PartSpecies,Species,PartLorentzType -USE MOD_DSMC_Vars ,ONLY: DSMC, AmbipolElecVelo -USE MOD_Globals_Vars ,ONLY: c2_inv -#if defined(LSERK) -USE MOD_Particle_Vars ,ONLY: Pt_temp,PDM -#elif (PP_TimeDiscMethod==508) || (PP_TimeDiscMethod==509) -USE MOD_Particle_Vars ,ONLY: PDM -#endif -#if defined(IMPA) || defined(ROS) -USE MOD_Particle_Vars ,ONLY: PEM -#endif -USE MOD_SurfaceModel_Tools ,ONLY: CalcRotWallVelo -USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared -USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo -USE MOD_Particle_Vars ,ONLY: UseVarTimeStep, PartTimeStep, VarTimeStep -USE MOD_TimeDisc_Vars ,ONLY: dt,RKdtFrac -USE MOD_Particle_Vars ,ONLY: PDM, PartVeloRotRef -USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame -! IMPLICIT VARIABLE HANDLING -IMPLICIT NONE -!----------------------------------------------------------------------------------------------------------------------------------! -! INPUT VARIABLES -REAL,INTENT(IN) :: n_loc(1:3) -INTEGER,INTENT(IN) :: PartID, SideID !,ElemID -LOGICAL,INTENT(IN),OPTIONAL :: opt_Symmetry -!----------------------------------------------------------------------------------------------------------------------------------! -! OUTPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! LOCAL VARIABLES -REAL :: WallVelo(3), v_old_Ambi(1:3), NewVeloPush(1:3), OldVelo(1:3) -REAL :: LorentzFac, LorentzFacInv, POI_fak -INTEGER :: locBCID, SpecID -LOGICAL :: Symmetry -REAL :: POI_vec(1:3) -REAL :: dtVar -!=================================================================================================================================== -! Initialize -Symmetry = .FALSE. - -locBCID = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) -SpecID = PartSpecies(PartID) -WallVelo = PartBound%WallVelo(1:3,locBCID) -IF(PRESENT(opt_Symmetry)) Symmetry = opt_Symmetry - -! Get Point Of Intersection -POI_vec(1:3) = LastPartPos(1:3,PartID) + TrackInfo%PartTrajectory(1:3)*TrackInfo%alpha - -IF(PartBound%RotVelo(locBCID)) THEN - WallVelo(1:3) = CalcRotWallVelo(locBCID,POI_vec) -END IF - -! Set the time step, considering whether a variable particle time step or Runge-Kutta time discretization is used -IF (UseVarTimeStep) THEN - dtVar = dt*RKdtFrac*PartTimeStep(PartID) -ELSE - dtVar = dt*RKdtFrac -END IF -! Species-specific time step -IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(SpecID)%TimeStepFactor - -IF(PDM%InRotRefFrame(PartID)) THEN - ! In case of RotRefFrame utilize the respective velocity - OldVelo = PartVeloRotRef(1:3,PartID) -ELSE - OldVelo = PartState(4:6,PartID) -END IF - -IF(SUM(ABS(WallVelo)).GT.0.)THEN - SELECT CASE(PartLorentzType) - CASE(3) - PartState(4:6,PartID) = PartState(4:6,PartID) - 2.*DOT_PRODUCT(PartState(4:6,PartID),n_loc)*n_loc + WallVelo - ! sanity check of new particle velocity - LorentzFac=1.0-DOT_PRODUCT(PartState(4:6,PartID),PartState(4:6,PartID))*c2_inv - IF(LorentzFac.LT.0.) CALL Abort(__STAMP__,'Particle exceeds speed of light! PartID ',PartID) - CASE(5) - ! map relativistic momentum to velocity - LorentzFacInv = 1.0+DOT_PRODUCT(PartState(4:6,PartID),PartState(4:6,PartID))*c2_inv - LorentzFacInv = 1.0/SQRT(LorentzFacInv) - PartState(4:6,PartID) = LorentzFacInv*PartState(4:6,PartID) - ! update velocity - PartState(4:6,PartID) = PartState(4:6,PartID) - 2.*DOT_PRODUCT(PartState(4:6,PartID),n_loc)*n_loc + WallVelo - ! map back from velocity to relativistic momentum - LorentzFac=1.0-DOT_PRODUCT(PartState(4:6,PartID),PartState(4:6,PartID))*c2_inv - IF(LorentzFac.LT.0.) CALL Abort(__STAMP__,'Particle exceeds speed of light! PartID ',PartID) - LorentzFac=1.0/SQRT(LorentzFac) - PartState(4:6,PartID) = LorentzFac*PartState(4:6,PartID) - CASE DEFAULT - PartState(4:6,PartID) = PartState(4:6,PartID) - 2.*DOT_PRODUCT(PartState(4:6,PartID),n_loc)*n_loc + WallVelo - END SELECT -ELSE - PartState(4:6,PartID) = PartState(4:6,PartID) - 2.*DOT_PRODUCT(PartState(4:6,PartID),n_loc)*n_loc - IF (DSMC%DoAmbipolarDiff) THEN - IF(Species(PartSpecies(PartID))%ChargeIC.GT.0.0) THEN - v_old_Ambi = AmbipolElecVelo(PartID)%ElecVelo(1:3) - AmbipolElecVelo(PartID)%ElecVelo(1:3) = AmbipolElecVelo(PartID)%ElecVelo(1:3) & - - 2.*DOT_PRODUCT(AmbipolElecVelo(PartID)%ElecVelo(1:3),n_loc)*n_loc - END IF - END IF -END IF - -! set particle position on face -LastPartPos(1:3,PartID) = POI_vec(1:3) - -! Determine the correct velocity in case of a rotational frame of reference -NewVeloPush(1:3) = PartState(4:6,PartID) -! In case of RotRefFrame, the velocity in the rotational reference frame is mirrored as well -IF(PDM%InRotRefFrame(PartID)) THEN - ! Mirror the velocity in the rotational frame - PartVeloRotRef(1:3,PartID) = PartVeloRotRef(1:3,PartID) - 2.*DOT_PRODUCT(PartVeloRotRef(1:3,PartID),n_loc)*n_loc - ! ALTERNATIVE: Transform the inertial velocity (which was mirrored) - ! PartVeloRotRef(1:3,PartID) = PartState(4:6,PartID) - CROSS(RotRefFrameOmega(1:3),LastPartPos(1:3,PartID)) -END IF - -TrackInfo%PartTrajectory(1:3) = TrackInfo%PartTrajectory(1:3)-2.*DOT_PRODUCT(TrackInfo%PartTrajectory(1:3),n_loc)*n_loc - -! Check if rotational frame of reference is used, otherwise mirror the LastPartPos -IF(PDM%InRotRefFrame(PartID)) THEN - POI_fak = 1.- (TrackInfo%lengthPartTrajectory-TrackInfo%alpha) / VECNORM(OldVelo*dtVar) - ! Add the acceleration due to new velocity vector at the POI - PartVeloRotRef(1:3,PartID) = PartVeloRotRef(1:3,PartID) + CalcPartRHSRotRefFrame(LastPartPos(1:3,PartID),PartVeloRotRef(1:3,PartID)) * dtVar * (1.0 - POI_fak) - ! IF(DOT_PRODUCT(PartVeloRotRef(1:3,PartID),n_loc).GT.0.) THEN - ! PartVeloRotRef(1:3,PartID) = PartVeloRotRef(1:3,PartID) - 2.*DOT_PRODUCT(PartVeloRotRef(1:3,PartID),n_loc)*n_loc - ! END IF - PartState(1:3,PartID) = LastPartPos(1:3,PartID) + (1.0 - POI_fak) * dtVar * PartVeloRotRef(1:3,PartID) -ELSE - PartState(1:3,PartID) = LastPartPos(1:3,PartID) + TrackInfo%PartTrajectory(1:3)*(TrackInfo%lengthPartTrajectory - TrackInfo%alpha) -END IF - -! #if !defined(IMPA) && !defined(ROS) -! compute moved particle || rest of movement -TrackInfo%PartTrajectory=PartState(1:3,PartID) - LastPartPos(1:3,PartID) - -TrackInfo%lengthPartTrajectory = VECNORM(TrackInfo%PartTrajectory) -IF(ALMOSTZERO(TrackInfo%lengthPartTrajectory)) THEN - TrackInfo%lengthPartTrajectory= 0.0 -ELSE - TrackInfo%PartTrajectory=TrackInfo%PartTrajectory/TrackInfo%lengthPartTrajectory -END IF -! #endif - -#if defined(LSERK) || (PP_TimeDiscMethod==508) || (PP_TimeDiscMethod==509) -!#if (PP_TimeDiscMethod==1)||(PP_TimeDiscMethod==2)||(PP_TimeDiscMethod==6)||(PP_TimeDiscMethod>=501 && PP_TimeDiscMethod<=506) - ! correction for Runge-Kutta (correct position!!) -!---------- old ---------- -! absPt_temp=SQRT(Pt_temp(1,PartID)*Pt_temp(1,PartID)+Pt_temp(2,PartID)*Pt_temp(2,PartID)+Pt_temp(3,PartID)*Pt_temp(3,PartID)) -! ! scale PartTrajectory to new Pt_temp -! Pt_temp(1:3,PartID)=absPt_temp*PartTrajectory(1:3) -! ! deleate force history -! Pt_temp(4:6,PartID)=0. -! ! what happens with force term || acceleration? -!------------------------- -IF (.NOT.ALMOSTZERO(DOT_PRODUCT(WallVelo,WallVelo))) THEN - PDM%IsNewPart(PartID)=.TRUE. !reconstruction in timedisc during push -#if defined(LSERK) -ELSE - Pt_temp(1:3,PartID)=Pt_temp(1:3,PartID)-2.*DOT_PRODUCT(Pt_temp(1:3,PartID),n_loc)*n_loc - IF (Symmetry) THEN !reflect also force history for symmetry - Pt_temp(4:6,PartID)=Pt_temp(4:6,PartID)-2.*DOT_PRODUCT(Pt_temp(4:6,PartID),n_loc)*n_loc - ELSE - Pt_temp(4:6,PartID)=0. !produces best result compared to analytical solution in plate capacitor... - END IF -#endif /*LSERK*/ -END IF -#endif /*LSERK || (PP_TimeDiscMethod==508) || (PP_TimeDiscMethod==509)*/ - -! rotation for IMEX and Rosenbrock Method (requires the rotation of the previous rk-stages... simplification of boundary condition) -! results in an order reduction -#ifdef IMPA -!IF(SUM(ABS(PEM%NormVec(1:3,PartID))).GT.0)THEN -! IPWRITE(*,*) ' Caution: Field rotation for several reflection is not implemented!', iStage,PartIsImplicit(PartID), PartID -! END IF -PEM%NormVec(1:3,PartID)=n_loc -#endif /*IMPA*/ -#ifdef ROS -! IF(SUM(ABS(PEM%NormVec(1:3,PartID))).GT.0)THEN -! !IPWRITE(*,*) ' Caution: Field rotation for several reflection is not implemented!' -! END IF -PEM%NormVec(1:3,PartID)=n_loc -#endif /*ROS*/ - -END SUBROUTINE PerfectReflection - - -SUBROUTINE DiffuseReflection(PartID,SideID,n_loc) -!----------------------------------------------------------------------------------------------------------------------------------! -!> Computes the new particle state (position, velocity, and energy) after a diffuse reflection -!> 1.) Get the wall velocity, temperature and accommodation coefficients -!> 2.) Get the tangential vectors -!> 3.) Calculate new velocity vector (Extended Maxwellian Model)+ -!> 4.) Perform vector transformation from the local to the global coordinate system and add wall velocity -!> 5.) Perform internal energy accommodation at the wall -!> 6.) Determine the new particle position after the reflection -!> 7.) Axisymmetric simulation: Rotate the vector back into the symmetry plane -!> 8.) Saving new particle velocity and recompute the trajectory based on new and old particle position -!----------------------------------------------------------------------------------------------------------------------------------! -! MODULES ! -!----------------------------------------------------------------------------------------------------------------------------------! -USE MOD_Globals -USE MOD_Particle_Mesh_Vars -USE MOD_Globals ,ONLY: ABORT, OrthoNormVec, VECNORM, DOTPRODUCT -USE MOD_DSMC_Vars ,ONLY: DSMC, AmbipolElecVelo -USE MOD_SurfaceModel_Tools ,ONLY: GetWallTemperature, CalcRotWallVelo -USE MOD_Particle_Boundary_Vars ,ONLY: PartBound -USE MOD_Particle_Vars ,ONLY: PartState,LastPartPos,Species,PartSpecies,Symmetry,PartVeloRotRef -USE MOD_Particle_Vars ,ONLY: UseVarTimeStep, PartTimeStep, VarTimeStep -USE MOD_TimeDisc_Vars ,ONLY: dt,RKdtFrac -USE MOD_Mesh_Tools ,ONLY: GetCNElemID -USE MOD_Particle_Vars ,ONLY: PDM, RotRefFrameOmega -USE MOD_SurfaceModel_Tools ,ONLY: CalcPostWallCollVelo, SurfaceModel_EnergyAccommodation -USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo -USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame -! IMPLICIT VARIABLE HANDLING -IMPLICIT NONE -!----------------------------------------------------------------------------------------------------------------------------------! -! INPUT VARIABLES -REAL,INTENT(IN) :: n_loc(1:3) -INTEGER,INTENT(IN) :: PartID, SideID -!----------------------------------------------------------------------------------------------------------------------------------! -! OUTPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! LOCAL VARIABLES -INTEGER :: LocSideID, CNElemID, locBCID, SpecID -REAL :: WallVelo(1:3), WallTemp, TransACC, VibACC, RotACC, ElecACC -REAL :: tang1(1:3), tang2(1:3), NewVelo(3), POI_vec(1:3), NewVeloAmbi(3), VeloC(1:3), VeloCAmbi(1:3) -REAL :: POI_fak, TildTrajectory(3), dtVar -! Symmetry -REAL :: rotVelY, rotVelZ, rotPosY -REAL :: nx, ny, nVal, VelX, VelY, VecX, VecY, Vector1(1:3), Vector2(1:3), OldVelo(1:3) -REAL :: NewVeloPush(1:3) -!=================================================================================================================================== -! 1.) Get the wall velocity, temperature and accommodation coefficients -locBCID=PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) -! get BC values -WallVelo = PartBound%WallVelo(1:3,locBCID) -WallTemp = GetWallTemperature(PartID,locBCID,SideID) -TransACC = PartBound%TransACC(locBCID) -VibACC = PartBound%VibACC(locBCID) -RotACC = PartBound%RotACC(locBCID) -ElecACC = PartBound%ElecACC(locBCID) - -SpecID = PartSpecies(PartID) - -POI_vec(1:3) = LastPartPos(1:3,PartID) + TrackInfo%PartTrajectory(1:3)*TrackInfo%alpha - -IF(PartBound%RotVelo(locBCID)) THEN - WallVelo(1:3) = CalcRotWallVelo(locBCID,POI_vec) -END IF - -! Set the time step, considering whether a variable particle time step or Runge-Kutta time discretization is used -IF (UseVarTimeStep) THEN - dtVar = dt*RKdtFrac*PartTimeStep(PartID) -ELSE - dtVar = dt*RKdtFrac -END IF - -! Species-specific time step -IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(SpecID)%TimeStepFactor - -IF(PDM%InRotRefFrame(PartID)) THEN - ! In case of RotRefFrame utilize the respective velocity - OldVelo = PartVeloRotRef(1:3,PartID) -ELSE - OldVelo = PartState(4:6,PartID) -END IF - -! 2.) Get the tangential vectors -IF(Symmetry%Axisymmetric) THEN - ! Storing the old and the new particle position (which is outside the domain), at this point the position is only in the xy-plane - VelX = PartState(1,PartID) - LastPartPos(1,PartID) - VelY = PartState(2,PartID) - LastPartPos(2,PartID) - - CNElemID = GetCNElemID(SideInfo_Shared(SIDE_ELEMID,SideID)) - LocSideID = SideInfo_Shared(SIDE_LOCALID,SideID) - - ! Getting the vectors, which span the cell (1-2 and 1-4) - Vector1(1:3)=NodeCoords_Shared(1:3,ElemSideNodeID_Shared(2,LocSideID,CNElemID)+1)-NodeCoords_Shared(1:3,ElemSideNodeID_Shared(1,LocSideID,CNElemID)+1) - Vector2(1:3)=NodeCoords_Shared(1:3,ElemSideNodeID_Shared(4,LocSideID,CNElemID)+1)-NodeCoords_Shared(1:3,ElemSideNodeID_Shared(1,LocSideID,CNElemID)+1) - - ! Get the vector, which does NOT have the z-component - IF (ABS(Vector1(3)).GT.ABS(Vector2(3))) THEN - Vector1 = Vector2 - END IF - ! Cross product of the two vectors is simplified as Vector1(3) is zero - nx = Vector1(2) - ny = -Vector1(1) - ! Check for the correct orientation of the normal vectors (should be inwards) - IF ((VelX*nx+VelY*ny).GT.0) THEN - nx = -Vector1(2) - ny = Vector1(1) - END IF - - nVal = SQRT(nx*nx + ny*ny) - nx = nx/nVal - ny = ny/nVal -ELSE - CALL OrthoNormVec(n_loc,tang1,tang2) -END IF - -! 3.) Calculate new velocity vector (Extended Maxwellian Model) -VeloC(1:3) = CalcPostWallCollVelo(SpecID,DOTPRODUCT(PartState(4:6,PartID)),WallTemp,TransACC) -IF (DSMC%DoAmbipolarDiff) THEN - IF(Species(SpecID)%ChargeIC.GT.0.0) THEN - VeloCAmbi(1:3) = CalcPostWallCollVelo(DSMC%AmbiDiffElecSpec,DOTPRODUCT(AmbipolElecVelo(PartID)%ElecVelo(1:3)),WallTemp,TransACC) - END IF -END IF - -! 4.) Perform vector transformation from the local to the global coordinate system and add wall velocity -! NewVelo = VeloCx*tang1+CROSS(-n_loc,tang1)*VeloCy-VeloCz*n_loc -IF(Symmetry%Axisymmetric) THEN - VecX = Vector1(1) / SQRT( Vector1(1)**2 + Vector1(2)**2) - VecY = Vector1(2) / SQRT( Vector1(1)**2 + Vector1(2)**2) - NewVelo(1) = VecX*VeloC(1) + nx*VeloC(3) - NewVelo(2) = VecY*VeloC(1) + ny*VeloC(3) - NewVelo(3) = VeloC(2) -ELSE - NewVelo(1:3) = VeloC(1)*tang1(1:3)-tang2(1:3)*VeloC(2)-VeloC(3)*n_loc(1:3) -END IF - -NewVelo(1:3) = NewVelo(1:3) + WallVelo(1:3) - -IF (DSMC%DoAmbipolarDiff) THEN - IF(Species(SpecID)%ChargeIC.GT.0.0) THEN - IF(Symmetry%Axisymmetric) THEN - NewVeloAmbi(1) = VecX*VeloCAmbi(1) + nx*VeloCAmbi(3) - NewVeloAmbi(2) = VecY*VeloCAmbi(1) + ny*VeloCAmbi(3) - NewVeloAmbi(3) = VeloCAmbi(2) - ELSE - NewVeloAmbi(1:3) = VeloCAmbi(1)*tang1(1:3)-tang2(1:3)*VeloCAmbi(2)-VeloCAmbi(3)*n_loc(1:3) - END IF - NewVeloAmbi(1:3) = NewVeloAmbi(1:3) + WallVelo(1:3) - END IF -END IF - -! 5.) Perform internal energy accommodation at the wall -CALL SurfaceModel_EnergyAccommodation(PartID,locBCID,WallTemp) - -! 6.) Determine the new particle position after the reflection -LastPartPos(1:3,PartID) = POI_vec(1:3) - -! recompute initial position and ignoring preceding reflections and trajectory between current position and recomputed position -!TildPos =PartState(1:3,PartID)-dt*RKdtFrac*PartState(4:6,PartID) -TildTrajectory = OldVelo * dtVar -POI_fak=1.- (TrackInfo%lengthPartTrajectory-TrackInfo%alpha)/SQRT(DOT_PRODUCT(TildTrajectory,TildTrajectory)) -! travel rest of particle vector -!PartState(1:3,PartID) = LastPartPos(1:3,PartID) + (1.0 - alpha/lengthPartTrajectory) * dt*RKdtFrac * NewVelo(1:3) -IF (PartBound%Resample(locBCID)) CALL RANDOM_NUMBER(POI_fak) !Resample Equilibirum Distribution - -! ! 6a.) Determine the correct velocity for the subsequent push in case of a rotational frame of reference -NewVeloPush(1:3) = NewVelo(1:3) -IF(PDM%InRotRefFrame(PartID)) THEN - NewVeloPush(1:3) = NewVeloPush(1:3) - CROSS(RotRefFrameOmega(1:3),LastPartPos(1:3,PartID)) - NewVeloPush(1:3) = NewVeloPush(1:3) + CalcPartRHSRotRefFrame(LastPartPos(1:3,PartID),NewVeloPush(1:3)) * (1.0 - POI_fak) * dtVar - ! Store the new rotational reference frame velocity - PartVeloRotRef(1:3,PartID) = NewVeloPush(1:3) -END IF - -PartState(1:3,PartID) = LastPartPos(1:3,PartID) + (1.0 - POI_fak) * dtVar * NewVeloPush(1:3) - -! 7.) Axisymmetric simulation: Rotate the vector back into the symmetry plane -IF(Symmetry%Axisymmetric) THEN - ! Symmetry considerations -------------------------------------------------------- - rotPosY = SQRT(PartState(2,PartID)**2 + (PartState(3,PartID))**2) - ! Rotation: Vy' = Vy * cos(alpha) + Vz * sin(alpha) = Vy * y/y' + Vz * z/y' - ! Vz' = - Vy * sin(alpha) + Vz * cos(alpha) = - Vy * z/y' + Vz * y/y' - ! Right-hand system, using new y and z positions after tracking, position vector and velocity vector DO NOT have to - ! coincide (as opposed to Bird 1994, p. 391, where new positions are calculated with the velocity vector) - IF (DSMC%DoAmbipolarDiff) THEN - IF(Species(SpecID)%ChargeIC.GT.0.0) THEN - rotVelY = (NewVeloAmbi(2)*(PartState(2,PartID))+NewVeloAmbi(3)*PartState(3,PartID))/rotPosY - rotVelZ = (-NewVeloAmbi(2)*PartState(3,PartID)+NewVeloAmbi(3)*(PartState(2,PartID)))/rotPosY - - NewVeloAmbi(2) = rotVelY - NewVeloAmbi(3) = rotVelZ - END IF - END IF - rotVelY = (NewVelo(2)*(PartState(2,PartID))+NewVelo(3)*PartState(3,PartID))/rotPosY - rotVelZ = (-NewVelo(2)*PartState(3,PartID)+NewVelo(3)*(PartState(2,PartID)))/rotPosY - - PartState(2,PartID) = rotPosY - PartState(3,PartID) = 0.0 - NewVelo(2) = rotVelY - NewVelo(3) = rotVelZ -END IF ! Symmetry%Axisymmetric - -IF(Symmetry%Order.LT.3) THEN - ! y/z-variable is set to zero for the different symmetry cases - LastPartPos(Symmetry%Order+1:3,PartID) = 0.0 - PartState(Symmetry%Order+1:3,PartID) = 0.0 -END IF - -! 8.) Saving new particle velocity and recompute the trajectory based on new and old particle position -PartState(4:6,PartID) = NewVelo(1:3) -IF (DSMC%DoAmbipolarDiff) THEN - IF(Species(SpecID)%ChargeIC.GT.0.0) AmbipolElecVelo(PartID)%ElecVelo(1:3) = NewVeloAmbi(1:3) -END IF - -! Recompute trajectory etc -IF(Symmetry%Axisymmetric) THEN - TrackInfo%PartTrajectory(1:2)=PartState(1:2,PartID) - LastPartPos(1:2,PartID) - TrackInfo%PartTrajectory(3) = 0. - TrackInfo%lengthPartTrajectory=SQRT(TrackInfo%PartTrajectory(1)**2 + TrackInfo%PartTrajectory(2)**2) -ELSE - TrackInfo%PartTrajectory=PartState(1:3,PartID) - LastPartPos(1:3,PartID) - TrackInfo%lengthPartTrajectory=VECNORM(TrackInfo%PartTrajectory(1:3)) -END IF - -IF(ABS(TrackInfo%lengthPartTrajectory).GT.0.) TrackInfo%PartTrajectory=TrackInfo%PartTrajectory/TrackInfo%lengthPartTrajectory - -#if defined(LSERK) || (PP_TimeDiscMethod==508) || (PP_TimeDiscMethod==509) -PDM%IsNewPart(PartID)=.TRUE. !reconstruction in timedisc during push -#endif - -END SUBROUTINE DiffuseReflection - - SUBROUTINE SpeciesSwap(PartID,SideID,targetSpecies_IN) !----------------------------------------------------------------------------------------------------------------------------------! ! Computes the Species Swap on ReflectiveBC @@ -1144,7 +382,7 @@ SUBROUTINE StickingCoefficientModel(PartID,SideID,n_Loc) USE MOD_SurfaceModel_Vars ,ONLY: StickingCoefficientData USE MOD_DSMC_Vars ,ONLY: DSMC, SamplingActive USE MOD_Particle_Vars ,ONLY: WriteMacroSurfaceValues -USE MOD_SurfaceModel_Tools ,ONLY: GetWallTemperature +USE MOD_SurfaceModel_Tools ,ONLY: MaxwellScattering, GetWallTemperature ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- diff --git a/src/particles/surfacemodel/surfacemodel_tools.f90 b/src/particles/surfacemodel/surfacemodel_tools.f90 index 58b1307e0..113233e2e 100644 --- a/src/particles/surfacemodel/surfacemodel_tools.f90 +++ b/src/particles/surfacemodel/surfacemodel_tools.f90 @@ -25,14 +25,481 @@ MODULE MOD_SurfaceModel_Tools !----------------------------------------------------------------------------------------------------------------------------------- ! Private Part --------------------------------------------------------------------------------------------------------------------- ! Public Part ---------------------------------------------------------------------------------------------------------------------- +PUBLIC :: MaxwellScattering, PerfectReflection, DiffuseReflection PUBLIC :: SurfaceModel_ParticleEmission, SurfaceModel_EnergyAccommodation, GetWallTemperature, CalcPostWallCollVelo, CalcRotWallVelo PUBLIC :: CalcWallTempGradient !=================================================================================================================================== CONTAINS +SUBROUTINE MaxwellScattering(PartID,SideID,n_loc,SpecularReflectionOnly_opt) !=================================================================================================================================== -!> Routine for the particle emission at a surface +!> SurfaceModel = 0, classic DSMC gas-surface interaction model choosing between a perfect specular and a complete diffuse +!> reflection by comparing the given momentum accommodation coefficient (MomentumACC) with a random number +!=================================================================================================================================== +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound +USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +REAL,INTENT(IN) :: n_loc(1:3) +INTEGER,INTENT(IN) :: PartID, SideID +LOGICAL,INTENT(IN),OPTIONAL :: SpecularReflectionOnly_opt +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +REAL :: RanNum,ACC +INTEGER :: iBC +LOGICAL :: SpecularReflectionOnly +!=================================================================================================================================== +iBC = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) +ACC = PartBound%MomentumACC(iBC) + +! Check if optional parameter was supplied +IF (PRESENT(SpecularReflectionOnly_opt)) THEN; SpecularReflectionOnly = SpecularReflectionOnly_opt +ELSE; SpecularReflectionOnly = PartBound%OnlySpecular(iBC) +END IF + +IF (SpecularReflectionOnly) THEN + CALL PerfectReflection(PartID,SideID,n_loc) +ELSE IF(PartBound%OnlyDiffuse(iBC)) THEN + CALL DiffuseReflection(PartID,SideID,n_loc) +ELSE + CALL RANDOM_NUMBER(RanNum) + IF(RanNum.GE.ACC) THEN + CALL PerfectReflection(PartID,SideID,n_loc) + ELSE + CALL DiffuseReflection(PartID,SideID,n_loc) + END IF +END IF + +END SUBROUTINE MaxwellScattering + + +SUBROUTINE PerfectReflection(PartID,SideID,n_Loc,opt_Symmetry) +!----------------------------------------------------------------------------------------------------------------------------------! +! Computes the perfect reflection in 3D +!----------------------------------------------------------------------------------------------------------------------------------! +! MODULES ! +!----------------------------------------------------------------------------------------------------------------------------------! +USE MOD_Globals +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound +USE MOD_Particle_Vars ,ONLY: PartState,LastPartPos,PartSpecies,Species,PartLorentzType +USE MOD_DSMC_Vars ,ONLY: DSMC, AmbipolElecVelo +USE MOD_Globals_Vars ,ONLY: c2_inv +#if defined(LSERK) +USE MOD_Particle_Vars ,ONLY: Pt_temp,PDM +#elif (PP_TimeDiscMethod==508) || (PP_TimeDiscMethod==509) +USE MOD_Particle_Vars ,ONLY: PDM +#endif +#if defined(IMPA) || defined(ROS) +USE MOD_Particle_Vars ,ONLY: PEM +#endif +USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared +USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo +USE MOD_Particle_Vars ,ONLY: UseVarTimeStep, PartTimeStep, VarTimeStep +USE MOD_TimeDisc_Vars ,ONLY: dt,RKdtFrac +USE MOD_Particle_Vars ,ONLY: PDM, PartVeloRotRef +USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------! +! INPUT VARIABLES +REAL,INTENT(IN) :: n_loc(1:3) +INTEGER,INTENT(IN) :: PartID, SideID !,ElemID +LOGICAL,INTENT(IN),OPTIONAL :: opt_Symmetry +!----------------------------------------------------------------------------------------------------------------------------------! +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +REAL :: WallVelo(3), v_old_Ambi(1:3), NewVeloPush(1:3), OldVelo(1:3) +REAL :: LorentzFac, LorentzFacInv, POI_fak +INTEGER :: locBCID, SpecID +LOGICAL :: Symmetry +REAL :: POI_vec(1:3) +REAL :: dtVar +!=================================================================================================================================== +! Initialize +Symmetry = .FALSE. + +locBCID = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) +SpecID = PartSpecies(PartID) +WallVelo = PartBound%WallVelo(1:3,locBCID) +IF(PRESENT(opt_Symmetry)) Symmetry = opt_Symmetry + +! Get Point Of Intersection +POI_vec(1:3) = LastPartPos(1:3,PartID) + TrackInfo%PartTrajectory(1:3)*TrackInfo%alpha + +IF(PartBound%RotVelo(locBCID)) THEN + WallVelo(1:3) = CalcRotWallVelo(locBCID,POI_vec) +END IF + +! Set the time step, considering whether a variable particle time step or Runge-Kutta time discretization is used +IF (UseVarTimeStep) THEN + dtVar = dt*RKdtFrac*PartTimeStep(PartID) +ELSE + dtVar = dt*RKdtFrac +END IF +! Species-specific time step +IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(SpecID)%TimeStepFactor + +IF(PDM%InRotRefFrame(PartID)) THEN + ! In case of RotRefFrame utilize the respective velocity + OldVelo = PartVeloRotRef(1:3,PartID) +ELSE + OldVelo = PartState(4:6,PartID) +END IF + +IF(SUM(ABS(WallVelo)).GT.0.)THEN + SELECT CASE(PartLorentzType) + CASE(3) + PartState(4:6,PartID) = PartState(4:6,PartID) - 2.*DOT_PRODUCT(PartState(4:6,PartID),n_loc)*n_loc + WallVelo + ! sanity check of new particle velocity + LorentzFac=1.0-DOT_PRODUCT(PartState(4:6,PartID),PartState(4:6,PartID))*c2_inv + IF(LorentzFac.LT.0.) CALL Abort(__STAMP__,'Particle exceeds speed of light! PartID ',PartID) + CASE(5) + ! map relativistic momentum to velocity + LorentzFacInv = 1.0+DOT_PRODUCT(PartState(4:6,PartID),PartState(4:6,PartID))*c2_inv + LorentzFacInv = 1.0/SQRT(LorentzFacInv) + PartState(4:6,PartID) = LorentzFacInv*PartState(4:6,PartID) + ! update velocity + PartState(4:6,PartID) = PartState(4:6,PartID) - 2.*DOT_PRODUCT(PartState(4:6,PartID),n_loc)*n_loc + WallVelo + ! map back from velocity to relativistic momentum + LorentzFac=1.0-DOT_PRODUCT(PartState(4:6,PartID),PartState(4:6,PartID))*c2_inv + IF(LorentzFac.LT.0.) CALL Abort(__STAMP__,'Particle exceeds speed of light! PartID ',PartID) + LorentzFac=1.0/SQRT(LorentzFac) + PartState(4:6,PartID) = LorentzFac*PartState(4:6,PartID) + CASE DEFAULT + PartState(4:6,PartID) = PartState(4:6,PartID) - 2.*DOT_PRODUCT(PartState(4:6,PartID),n_loc)*n_loc + WallVelo + END SELECT +ELSE + PartState(4:6,PartID) = PartState(4:6,PartID) - 2.*DOT_PRODUCT(PartState(4:6,PartID),n_loc)*n_loc + IF (DSMC%DoAmbipolarDiff) THEN + IF(Species(PartSpecies(PartID))%ChargeIC.GT.0.0) THEN + v_old_Ambi = AmbipolElecVelo(PartID)%ElecVelo(1:3) + AmbipolElecVelo(PartID)%ElecVelo(1:3) = AmbipolElecVelo(PartID)%ElecVelo(1:3) & + - 2.*DOT_PRODUCT(AmbipolElecVelo(PartID)%ElecVelo(1:3),n_loc)*n_loc + END IF + END IF +END IF + +! set particle position on face +LastPartPos(1:3,PartID) = POI_vec(1:3) + +! Determine the correct velocity in case of a rotational frame of reference +NewVeloPush(1:3) = PartState(4:6,PartID) +! In case of RotRefFrame, the velocity in the rotational reference frame is mirrored as well +IF(PDM%InRotRefFrame(PartID)) THEN + ! Mirror the velocity in the rotational frame + PartVeloRotRef(1:3,PartID) = PartVeloRotRef(1:3,PartID) - 2.*DOT_PRODUCT(PartVeloRotRef(1:3,PartID),n_loc)*n_loc + ! ALTERNATIVE: Transform the inertial velocity (which was mirrored) + ! PartVeloRotRef(1:3,PartID) = PartState(4:6,PartID) - CROSS(RotRefFrameOmega(1:3),LastPartPos(1:3,PartID)) +END IF + +TrackInfo%PartTrajectory(1:3) = TrackInfo%PartTrajectory(1:3)-2.*DOT_PRODUCT(TrackInfo%PartTrajectory(1:3),n_loc)*n_loc + +! Check if rotational frame of reference is used, otherwise mirror the LastPartPos +IF(PDM%InRotRefFrame(PartID)) THEN + POI_fak = 1.- (TrackInfo%lengthPartTrajectory-TrackInfo%alpha) / VECNORM(OldVelo*dtVar) + ! Add the acceleration due to new velocity vector at the POI + PartVeloRotRef(1:3,PartID) = PartVeloRotRef(1:3,PartID) + CalcPartRHSRotRefFrame(LastPartPos(1:3,PartID),PartVeloRotRef(1:3,PartID)) * dtVar * (1.0 - POI_fak) + ! IF(DOT_PRODUCT(PartVeloRotRef(1:3,PartID),n_loc).GT.0.) THEN + ! PartVeloRotRef(1:3,PartID) = PartVeloRotRef(1:3,PartID) - 2.*DOT_PRODUCT(PartVeloRotRef(1:3,PartID),n_loc)*n_loc + ! END IF + PartState(1:3,PartID) = LastPartPos(1:3,PartID) + (1.0 - POI_fak) * dtVar * PartVeloRotRef(1:3,PartID) +ELSE + PartState(1:3,PartID) = LastPartPos(1:3,PartID) + TrackInfo%PartTrajectory(1:3)*(TrackInfo%lengthPartTrajectory - TrackInfo%alpha) +END IF + +! #if !defined(IMPA) && !defined(ROS) +! compute moved particle || rest of movement +TrackInfo%PartTrajectory=PartState(1:3,PartID) - LastPartPos(1:3,PartID) + +TrackInfo%lengthPartTrajectory = VECNORM(TrackInfo%PartTrajectory) +IF(ALMOSTZERO(TrackInfo%lengthPartTrajectory)) THEN + TrackInfo%lengthPartTrajectory= 0.0 +ELSE + TrackInfo%PartTrajectory=TrackInfo%PartTrajectory/TrackInfo%lengthPartTrajectory +END IF +! #endif + +#if defined(LSERK) || (PP_TimeDiscMethod==508) || (PP_TimeDiscMethod==509) +!#if (PP_TimeDiscMethod==1)||(PP_TimeDiscMethod==2)||(PP_TimeDiscMethod==6)||(PP_TimeDiscMethod>=501 && PP_TimeDiscMethod<=506) + ! correction for Runge-Kutta (correct position!!) +!---------- old ---------- +! absPt_temp=SQRT(Pt_temp(1,PartID)*Pt_temp(1,PartID)+Pt_temp(2,PartID)*Pt_temp(2,PartID)+Pt_temp(3,PartID)*Pt_temp(3,PartID)) +! ! scale PartTrajectory to new Pt_temp +! Pt_temp(1:3,PartID)=absPt_temp*PartTrajectory(1:3) +! ! deleate force history +! Pt_temp(4:6,PartID)=0. +! ! what happens with force term || acceleration? +!------------------------- +IF (.NOT.ALMOSTZERO(DOT_PRODUCT(WallVelo,WallVelo))) THEN + PDM%IsNewPart(PartID)=.TRUE. !reconstruction in timedisc during push +#if defined(LSERK) +ELSE + Pt_temp(1:3,PartID)=Pt_temp(1:3,PartID)-2.*DOT_PRODUCT(Pt_temp(1:3,PartID),n_loc)*n_loc + IF (Symmetry) THEN !reflect also force history for symmetry + Pt_temp(4:6,PartID)=Pt_temp(4:6,PartID)-2.*DOT_PRODUCT(Pt_temp(4:6,PartID),n_loc)*n_loc + ELSE + Pt_temp(4:6,PartID)=0. !produces best result compared to analytical solution in plate capacitor... + END IF +#endif /*LSERK*/ +END IF +#endif /*LSERK || (PP_TimeDiscMethod==508) || (PP_TimeDiscMethod==509)*/ + +! rotation for IMEX and Rosenbrock Method (requires the rotation of the previous rk-stages... simplification of boundary condition) +! results in an order reduction +#ifdef IMPA +!IF(SUM(ABS(PEM%NormVec(1:3,PartID))).GT.0)THEN +! IPWRITE(*,*) ' Caution: Field rotation for several reflection is not implemented!', iStage,PartIsImplicit(PartID), PartID +! END IF +PEM%NormVec(1:3,PartID)=n_loc +#endif /*IMPA*/ +#ifdef ROS +! IF(SUM(ABS(PEM%NormVec(1:3,PartID))).GT.0)THEN +! !IPWRITE(*,*) ' Caution: Field rotation for several reflection is not implemented!' +! END IF +PEM%NormVec(1:3,PartID)=n_loc +#endif /*ROS*/ + +END SUBROUTINE PerfectReflection + + +SUBROUTINE DiffuseReflection(PartID,SideID,n_loc) +!----------------------------------------------------------------------------------------------------------------------------------! +!> Computes the new particle state (position, velocity, and energy) after a diffuse reflection +!> 1.) Get the wall velocity, temperature and accommodation coefficients +!> 2.) Get the tangential vectors +!> 3.) Calculate new velocity vector (Extended Maxwellian Model)+ +!> 4.) Perform vector transformation from the local to the global coordinate system and add wall velocity +!> 5.) Perform internal energy accommodation at the wall +!> 6.) Determine the new particle position after the reflection +!> 7.) Axisymmetric simulation: Rotate the vector back into the symmetry plane +!> 8.) Saving new particle velocity and recompute the trajectory based on new and old particle position +!----------------------------------------------------------------------------------------------------------------------------------! +! MODULES ! +!----------------------------------------------------------------------------------------------------------------------------------! +USE MOD_Globals +USE MOD_Particle_Mesh_Vars +USE MOD_Globals ,ONLY: ABORT, OrthoNormVec, VECNORM, DOTPRODUCT +USE MOD_DSMC_Vars ,ONLY: DSMC, AmbipolElecVelo +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound +USE MOD_Particle_Vars ,ONLY: PartState,LastPartPos,Species,PartSpecies,Symmetry,PartVeloRotRef +USE MOD_Particle_Vars ,ONLY: UseVarTimeStep, PartTimeStep, VarTimeStep +USE MOD_TimeDisc_Vars ,ONLY: dt,RKdtFrac +USE MOD_Mesh_Tools ,ONLY: GetCNElemID +USE MOD_Particle_Vars ,ONLY: PDM, RotRefFrameOmega +USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo +USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------! +! INPUT VARIABLES +REAL,INTENT(IN) :: n_loc(1:3) +INTEGER,INTENT(IN) :: PartID, SideID +!----------------------------------------------------------------------------------------------------------------------------------! +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: LocSideID, CNElemID, locBCID, SpecID +REAL :: WallVelo(1:3), WallTemp, TransACC, VibACC, RotACC, ElecACC +REAL :: tang1(1:3), tang2(1:3), NewVelo(3), POI_vec(1:3), NewVeloAmbi(3), VeloC(1:3), VeloCAmbi(1:3) +REAL :: POI_fak, TildTrajectory(3), dtVar +! Symmetry +REAL :: rotVelY, rotVelZ, rotPosY +REAL :: nx, ny, nVal, VelX, VelY, VecX, VecY, Vector1(1:3), Vector2(1:3), OldVelo(1:3) +REAL :: NewVeloPush(1:3) +!=================================================================================================================================== +! 1.) Get the wall velocity, temperature and accommodation coefficients +locBCID=PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) +! get BC values +WallVelo = PartBound%WallVelo(1:3,locBCID) +WallTemp = GetWallTemperature(PartID,locBCID,SideID) +TransACC = PartBound%TransACC(locBCID) +VibACC = PartBound%VibACC(locBCID) +RotACC = PartBound%RotACC(locBCID) +ElecACC = PartBound%ElecACC(locBCID) + +SpecID = PartSpecies(PartID) + +POI_vec(1:3) = LastPartPos(1:3,PartID) + TrackInfo%PartTrajectory(1:3)*TrackInfo%alpha + +IF(PartBound%RotVelo(locBCID)) THEN + WallVelo(1:3) = CalcRotWallVelo(locBCID,POI_vec) +END IF + +! Set the time step, considering whether a variable particle time step or Runge-Kutta time discretization is used +IF (UseVarTimeStep) THEN + dtVar = dt*RKdtFrac*PartTimeStep(PartID) +ELSE + dtVar = dt*RKdtFrac +END IF + +! Species-specific time step +IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(SpecID)%TimeStepFactor + +IF(PDM%InRotRefFrame(PartID)) THEN + ! In case of RotRefFrame utilize the respective velocity + OldVelo = PartVeloRotRef(1:3,PartID) +ELSE + OldVelo = PartState(4:6,PartID) +END IF + +! 2.) Get the tangential vectors +IF(Symmetry%Axisymmetric) THEN + ! Storing the old and the new particle position (which is outside the domain), at this point the position is only in the xy-plane + VelX = PartState(1,PartID) - LastPartPos(1,PartID) + VelY = PartState(2,PartID) - LastPartPos(2,PartID) + + CNElemID = GetCNElemID(SideInfo_Shared(SIDE_ELEMID,SideID)) + LocSideID = SideInfo_Shared(SIDE_LOCALID,SideID) + + ! Getting the vectors, which span the cell (1-2 and 1-4) + Vector1(1:3)=NodeCoords_Shared(1:3,ElemSideNodeID_Shared(2,LocSideID,CNElemID)+1)-NodeCoords_Shared(1:3,ElemSideNodeID_Shared(1,LocSideID,CNElemID)+1) + Vector2(1:3)=NodeCoords_Shared(1:3,ElemSideNodeID_Shared(4,LocSideID,CNElemID)+1)-NodeCoords_Shared(1:3,ElemSideNodeID_Shared(1,LocSideID,CNElemID)+1) + + ! Get the vector, which does NOT have the z-component + IF (ABS(Vector1(3)).GT.ABS(Vector2(3))) THEN + Vector1 = Vector2 + END IF + ! Cross product of the two vectors is simplified as Vector1(3) is zero + nx = Vector1(2) + ny = -Vector1(1) + ! Check for the correct orientation of the normal vectors (should be inwards) + IF ((VelX*nx+VelY*ny).GT.0) THEN + nx = -Vector1(2) + ny = Vector1(1) + END IF + + nVal = SQRT(nx*nx + ny*ny) + nx = nx/nVal + ny = ny/nVal +ELSE + CALL OrthoNormVec(n_loc,tang1,tang2) +END IF + +! 3.) Calculate new velocity vector (Extended Maxwellian Model) +VeloC(1:3) = CalcPostWallCollVelo(SpecID,DOTPRODUCT(PartState(4:6,PartID)),WallTemp,TransACC) +IF (DSMC%DoAmbipolarDiff) THEN + IF(Species(SpecID)%ChargeIC.GT.0.0) THEN + VeloCAmbi(1:3) = CalcPostWallCollVelo(DSMC%AmbiDiffElecSpec,DOTPRODUCT(AmbipolElecVelo(PartID)%ElecVelo(1:3)),WallTemp,TransACC) + END IF +END IF + +! 4.) Perform vector transformation from the local to the global coordinate system and add wall velocity +! NewVelo = VeloCx*tang1+CROSS(-n_loc,tang1)*VeloCy-VeloCz*n_loc +IF(Symmetry%Axisymmetric) THEN + VecX = Vector1(1) / SQRT( Vector1(1)**2 + Vector1(2)**2) + VecY = Vector1(2) / SQRT( Vector1(1)**2 + Vector1(2)**2) + NewVelo(1) = VecX*VeloC(1) + nx*VeloC(3) + NewVelo(2) = VecY*VeloC(1) + ny*VeloC(3) + NewVelo(3) = VeloC(2) +ELSE + NewVelo(1:3) = VeloC(1)*tang1(1:3)-tang2(1:3)*VeloC(2)-VeloC(3)*n_loc(1:3) +END IF + +NewVelo(1:3) = NewVelo(1:3) + WallVelo(1:3) + +IF (DSMC%DoAmbipolarDiff) THEN + IF(Species(SpecID)%ChargeIC.GT.0.0) THEN + IF(Symmetry%Axisymmetric) THEN + NewVeloAmbi(1) = VecX*VeloCAmbi(1) + nx*VeloCAmbi(3) + NewVeloAmbi(2) = VecY*VeloCAmbi(1) + ny*VeloCAmbi(3) + NewVeloAmbi(3) = VeloCAmbi(2) + ELSE + NewVeloAmbi(1:3) = VeloCAmbi(1)*tang1(1:3)-tang2(1:3)*VeloCAmbi(2)-VeloCAmbi(3)*n_loc(1:3) + END IF + NewVeloAmbi(1:3) = NewVeloAmbi(1:3) + WallVelo(1:3) + END IF +END IF + +! 5.) Perform internal energy accommodation at the wall +CALL SurfaceModel_EnergyAccommodation(PartID,locBCID,WallTemp) + +! 6.) Determine the new particle position after the reflection +LastPartPos(1:3,PartID) = POI_vec(1:3) + +! recompute initial position and ignoring preceding reflections and trajectory between current position and recomputed position +!TildPos =PartState(1:3,PartID)-dt*RKdtFrac*PartState(4:6,PartID) +TildTrajectory = OldVelo * dtVar +POI_fak=1.- (TrackInfo%lengthPartTrajectory-TrackInfo%alpha)/SQRT(DOT_PRODUCT(TildTrajectory,TildTrajectory)) +! travel rest of particle vector +!PartState(1:3,PartID) = LastPartPos(1:3,PartID) + (1.0 - alpha/lengthPartTrajectory) * dt*RKdtFrac * NewVelo(1:3) +IF (PartBound%Resample(locBCID)) CALL RANDOM_NUMBER(POI_fak) !Resample Equilibirum Distribution + +! ! 6a.) Determine the correct velocity for the subsequent push in case of a rotational frame of reference +NewVeloPush(1:3) = NewVelo(1:3) +IF(PDM%InRotRefFrame(PartID)) THEN + NewVeloPush(1:3) = NewVeloPush(1:3) - CROSS(RotRefFrameOmega(1:3),LastPartPos(1:3,PartID)) + NewVeloPush(1:3) = NewVeloPush(1:3) + CalcPartRHSRotRefFrame(LastPartPos(1:3,PartID),NewVeloPush(1:3)) * (1.0 - POI_fak) * dtVar + ! Store the new rotational reference frame velocity + PartVeloRotRef(1:3,PartID) = NewVeloPush(1:3) +END IF + +PartState(1:3,PartID) = LastPartPos(1:3,PartID) + (1.0 - POI_fak) * dtVar * NewVeloPush(1:3) + +! 7.) Axisymmetric simulation: Rotate the vector back into the symmetry plane +IF(Symmetry%Axisymmetric) THEN + ! Symmetry considerations -------------------------------------------------------- + rotPosY = SQRT(PartState(2,PartID)**2 + (PartState(3,PartID))**2) + ! Rotation: Vy' = Vy * cos(alpha) + Vz * sin(alpha) = Vy * y/y' + Vz * z/y' + ! Vz' = - Vy * sin(alpha) + Vz * cos(alpha) = - Vy * z/y' + Vz * y/y' + ! Right-hand system, using new y and z positions after tracking, position vector and velocity vector DO NOT have to + ! coincide (as opposed to Bird 1994, p. 391, where new positions are calculated with the velocity vector) + IF (DSMC%DoAmbipolarDiff) THEN + IF(Species(SpecID)%ChargeIC.GT.0.0) THEN + rotVelY = (NewVeloAmbi(2)*(PartState(2,PartID))+NewVeloAmbi(3)*PartState(3,PartID))/rotPosY + rotVelZ = (-NewVeloAmbi(2)*PartState(3,PartID)+NewVeloAmbi(3)*(PartState(2,PartID)))/rotPosY + + NewVeloAmbi(2) = rotVelY + NewVeloAmbi(3) = rotVelZ + END IF + END IF + rotVelY = (NewVelo(2)*(PartState(2,PartID))+NewVelo(3)*PartState(3,PartID))/rotPosY + rotVelZ = (-NewVelo(2)*PartState(3,PartID)+NewVelo(3)*(PartState(2,PartID)))/rotPosY + + PartState(2,PartID) = rotPosY + PartState(3,PartID) = 0.0 + NewVelo(2) = rotVelY + NewVelo(3) = rotVelZ +END IF ! Symmetry%Axisymmetric + +IF(Symmetry%Order.LT.3) THEN + ! y/z-variable is set to zero for the different symmetry cases + LastPartPos(Symmetry%Order+1:3,PartID) = 0.0 + PartState(Symmetry%Order+1:3,PartID) = 0.0 +END IF + +! 8.) Saving new particle velocity and recompute the trajectory based on new and old particle position +PartState(4:6,PartID) = NewVelo(1:3) +IF (DSMC%DoAmbipolarDiff) THEN + IF(Species(SpecID)%ChargeIC.GT.0.0) AmbipolElecVelo(PartID)%ElecVelo(1:3) = NewVeloAmbi(1:3) +END IF + +! Recompute trajectory etc +IF(Symmetry%Axisymmetric) THEN + TrackInfo%PartTrajectory(1:2)=PartState(1:2,PartID) - LastPartPos(1:2,PartID) + TrackInfo%PartTrajectory(3) = 0. + TrackInfo%lengthPartTrajectory=SQRT(TrackInfo%PartTrajectory(1)**2 + TrackInfo%PartTrajectory(2)**2) +ELSE + TrackInfo%PartTrajectory=PartState(1:3,PartID) - LastPartPos(1:3,PartID) + TrackInfo%lengthPartTrajectory=VECNORM(TrackInfo%PartTrajectory(1:3)) +END IF + +IF(ABS(TrackInfo%lengthPartTrajectory).GT.0.) TrackInfo%PartTrajectory=TrackInfo%PartTrajectory/TrackInfo%lengthPartTrajectory + +#if defined(LSERK) || (PP_TimeDiscMethod==508) || (PP_TimeDiscMethod==509) +PDM%IsNewPart(PartID)=.TRUE. !reconstruction in timedisc during push +#endif + +END SUBROUTINE DiffuseReflection + + +!=================================================================================================================================== +!> Routine for the particle emission at a surface due to a single particle-wall interaction !=================================================================================================================================== SUBROUTINE SurfaceModel_ParticleEmission(n_loc, PartID, SideID, ProductSpec, ProductSpecNbr, TempErgy, GlobElemID,POI_vec) ! MODULES From 8c411aa55382663b07573d439525f926affe1269 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Mon, 20 Nov 2023 10:56:36 +0100 Subject: [PATCH 100/222] MPI MaxMCSoverMFP --- src/particles/analyze/particle_analyze.f90 | 10 ++++++++++ src/particles/dsmc/dsmc_particle_pairing.f90 | 7 ------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/particles/analyze/particle_analyze.f90 b/src/particles/analyze/particle_analyze.f90 index 1243f65af..55fd0fdd7 100644 --- a/src/particles/analyze/particle_analyze.f90 +++ b/src/particles/analyze/particle_analyze.f90 @@ -1385,6 +1385,16 @@ SUBROUTINE AnalyzeParticles(Time) END IF IF(DSMC%CalcQualityFactors) THEN IF(iter.GT.0) THEN + write (*,*) "Before USE_MPI" +#if USE_MPI + IF(MPIRoot)THEN + write (*,*) "MPI Root" + CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%MaxMCSoverMFP,1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR) + ELSE + write (*,*) "MPI Not Root" + CALL MPI_REDUCE(DSMC%MaxMCSoverMFP,DSMC%MaxMCSoverMFP,1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR) + END IF +#endif /*USE_MPI*/ MaxMCSoverMFP = DSMC%MaxMCSoverMFP MaxCollProb = DSMC%CollProbMax ResolvedCellPercentage = REAL(DSMC%ResolvedCellCounter) / REAL(DSMC%ParticlePairingCounter) * 100 diff --git a/src/particles/dsmc/dsmc_particle_pairing.f90 b/src/particles/dsmc/dsmc_particle_pairing.f90 index 9dbda3bd7..38a93a4cf 100644 --- a/src/particles/dsmc/dsmc_particle_pairing.f90 +++ b/src/particles/dsmc/dsmc_particle_pairing.f90 @@ -620,13 +620,6 @@ SUBROUTINE PerformPairingAndCollision(iPartIndx_Node, PartNum, iElem, NodeVolume MAX(DSMC%MCSoverMFP,(DSMC%CollSepDist/DSMC%CollSepCount)/DSMC%MeanFreePath) ! Calculation of the maximum MCS/MFP for the cell and number of resolved Cells IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP - #if USE_MPI - IF(MPIRoot)THEN - CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%MaxMCSoverMFP,1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR) - ELSE - CALL MPI_REDUCE(DSMC%MaxMCSoverMFP,DSMC%MaxMCSoverMFP,1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR) - END IF - #endif /*USE_MPI*/ IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & DSMC%ResolvedCellCounter + 1 END IF From 1d364183c801d98058acd3f39cc88f566c3f57da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Mon, 20 Nov 2023 11:12:25 +0100 Subject: [PATCH 101/222] Delete writes --- src/particles/analyze/particle_analyze.f90 | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/particles/analyze/particle_analyze.f90 b/src/particles/analyze/particle_analyze.f90 index 55fd0fdd7..5c43c01a0 100644 --- a/src/particles/analyze/particle_analyze.f90 +++ b/src/particles/analyze/particle_analyze.f90 @@ -1385,13 +1385,10 @@ SUBROUTINE AnalyzeParticles(Time) END IF IF(DSMC%CalcQualityFactors) THEN IF(iter.GT.0) THEN - write (*,*) "Before USE_MPI" #if USE_MPI IF(MPIRoot)THEN - write (*,*) "MPI Root" CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%MaxMCSoverMFP,1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR) ELSE - write (*,*) "MPI Not Root" CALL MPI_REDUCE(DSMC%MaxMCSoverMFP,DSMC%MaxMCSoverMFP,1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR) END IF #endif /*USE_MPI*/ From d4d7dc5a9381cb057396600314a5de63eea0e033 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Mon, 20 Nov 2023 12:03:07 +0100 Subject: [PATCH 102/222] MPI ResolvedCellPercentage --- src/particles/analyze/particle_analyze.f90 | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/particles/analyze/particle_analyze.f90 b/src/particles/analyze/particle_analyze.f90 index 5c43c01a0..81d05a53b 100644 --- a/src/particles/analyze/particle_analyze.f90 +++ b/src/particles/analyze/particle_analyze.f90 @@ -1385,6 +1385,7 @@ SUBROUTINE AnalyzeParticles(Time) END IF IF(DSMC%CalcQualityFactors) THEN IF(iter.GT.0) THEN + ! MaxMCSoverMFP: #if USE_MPI IF(MPIRoot)THEN CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%MaxMCSoverMFP,1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR) @@ -1393,14 +1394,28 @@ SUBROUTINE AnalyzeParticles(Time) END IF #endif /*USE_MPI*/ MaxMCSoverMFP = DSMC%MaxMCSoverMFP + ! MaxCollProb MaxCollProb = DSMC%CollProbMax + ! ResolvedCellPercentage: +#if USE_MPI + IF(MPIRoot)THEN + CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%ResolvedCellCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) + CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%ParticlePairingCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) + ELSE + CALL MPI_REDUCE(DSMC%ResolvedCellCounter,DSMC%ResolvedCellCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) + CALL MPI_REDUCE(DSMC%ParticlePairingCounter,DSMC%ParticlePairingCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) + END IF +#endif /*USE_MPI*/ ResolvedCellPercentage = REAL(DSMC%ResolvedCellCounter) / REAL(DSMC%ParticlePairingCounter) * 100 + ! MeanCollProb: IF(DSMC%CollProbMeanCount.GT.0) MeanCollProb = DSMC%CollProbMean / DSMC%CollProbMeanCount + ! MeanFreePath: IF (MPIRoot) THEN IF(TempTotal(nSpecAnalyze).GT.0.0) MeanFreePath = CalcMeanFreePath(NumSpecTmp(1:nSpecies), NumSpecTmp(nSpecAnalyze), & MeshVolume, TempTotal(nSpecAnalyze)) END IF END IF + ! CalcRelaxProb: IF(CalcRelaxProb) CALL CalcRelaxProbRotVib(RotRelaxProb,VibRelaxProb) END IF #endif From 59ece44aa89cc24955251b7f3ee1b15600a26012 Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Wed, 22 Nov 2023 10:22:54 +0100 Subject: [PATCH 103/222] Update branch to the current version of the catalytic model --- .../boundary/particle_boundary_init.f90 | 2 +- .../boundary/particle_boundary_sampling.f90 | 42 +--- .../emission/particle_surface_chemflux.f90 | 151 +++++++---- .../emission/particle_surface_flux.f90 | 2 +- .../emission/particle_surface_flux_init.f90 | 6 +- src/particles/particle_init.f90 | 2 +- src/particles/restart/particle_restart.f90 | 89 ++++++- .../surfacemodel/surfacemodel_chemistry.f90 | 238 +++++++++++------- .../surfacemodel/surfacemodel_init.f90 | 5 +- .../surfacemodel/surfacemodel_vars.f90 | 9 +- src/restart/restart_vars.f90 | 3 + src/timedisc/timedisc_TimeStep_BGK.f90 | 12 +- src/timedisc/timedisc_TimeStep_FPFlow.f90 | 12 +- 13 files changed, 386 insertions(+), 187 deletions(-) diff --git a/src/particles/boundary/particle_boundary_init.f90 b/src/particles/boundary/particle_boundary_init.f90 index 0843ffb63..e19f480cb 100644 --- a/src/particles/boundary/particle_boundary_init.f90 +++ b/src/particles/boundary/particle_boundary_init.f90 @@ -430,7 +430,7 @@ SUBROUTINE InitializeVariablesPartBoundary() PartBound%Reactive(iPartBound) = .FALSE. CASE (SEE_MODELS_ID) ! SEE models require reactive BC - PartBound%Reactive(iPartBound) = .TRUE. + PartBound%Reactive(iPartBound) = .TRUE. CASE DEFAULT CALL abort(__STAMP__,'Error in particle init: only allowed SurfaceModels: 0,1,20,SEE_MODELS_ID! SurfaceModel=',& IntInfoOpt=PartBound%SurfaceModel(iPartBound)) diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index dc612c85a..5b5a1b8c5 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -904,7 +904,7 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) USE MOD_HDF5_Output ,ONLY: WriteAttributeToHDF5,WriteArrayToHDF5,WriteHDF5Header USE MOD_IO_HDF5 USE MOD_MPI_Shared_Vars ,ONLY: mySurfRank -USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp, SurfChemReac !, ChemCountReacWall +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp, SurfChemReac USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample, SurfSideArea USE MOD_Particle_Boundary_Vars ,ONLY: nOutputSides, nComputeNodeSurfSides USE MOD_Particle_boundary_Vars ,ONLY: nComputeNodeSurfOutputSides,offsetComputeNodeSurfOutputSide @@ -930,13 +930,12 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) CHARACTER(LEN=255) :: NodeTypeTemp CHARACTER(LEN=255) :: SpecID, ReacID CHARACTER(LEN=255),ALLOCATABLE :: Str2DVarNames(:) -INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, nVar2D_Heat !, nVar2D_Count +INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, nVar2D_Heat INTEGER :: iSpec, iSurfSide, nReac, iReac INTEGER :: p,q,OutputCounter REAL :: tstart,tend, tout REAL, ALLOCATABLE :: MacroSurfaceSpecChemVal(:,:,:,:,:) REAL, ALLOCATABLE :: MacroSurfaceHeatVal(:,:,:,:) -!REAL, ALLOCATABLE :: MacroSurfaceReacCount(:,:,:,:,:) !=================================================================================================================================== nReac = SurfChemReac%NumOfReact @@ -961,9 +960,8 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) nVar2D = 0 nVar2D_Spec = 1 nVar2D_Heat = 1 -!nVar2D_Count = 1 -nVar2D_Total = nVar2D + nVar2D_Spec*nSpecies + nVar2D_Heat !+ nVar2D_Count*nReac +nVar2D_Total = nVar2D + nVar2D_Spec*nSpecies + nVar2D_Heat ! Generate skeleton for the file with all relevant data on a single proc (MPIRoot) #if USE_MPI @@ -994,11 +992,6 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Heat_Flux') - ! DO iReac = 1, nReac - ! WRITE(ReacID,'(I3.3)') iReac - ! CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Reaction'//TRIM(ReacID)//'_Count') - ! END DO ! iReac - CALL WriteAttributeToHDF5(File_ID,'VarNamesSurface',nVar2D_Total,StrArray=Str2DVarNames) CALL CloseDataFile() DEALLOCATE(Str2DVarNames) @@ -1018,22 +1011,8 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) ALLOCATE(MacroSurfaceHeatVal(1:nVar2D_Heat , 1:nSurfSample , 1:nSurfSample , nComputeNodeSurfOutputSides)) MacroSurfaceHeatVal = 0. -! ALLOCATE(MacroSurfaceReacCount(1:nVar2D_Count , 1:nSurfSample , 1:nSurfSample , nComputeNodeSurfOutputSides , nReac)) -! MacroSurfaceReacCount = 0. - OutputCounter = 0 DO iSurfSide = 1,nComputeNodeSurfSides - !================== INNER BC CHECK TODO ! -! GlobalSideID = SurfSide2GlobalSide(SURF_SIDEID,iSurfSide) -! IF(SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID).GT.0) THEN -! IF(GlobalSideID.LT.SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID)) THEN -! SurfSideNb = GlobalSide2SurfSide(SURF_SIDEID,SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID)) -! SampWallState(:,:,:,iSurfSide) = SampWallState(:,:,:,iSurfSide) + SampWallState(:,:,:,SurfSideNb) -! ELSE -! CYCLE -! END IF -! END IF - !================== INNER BC CHECK OutputCounter = OutputCounter + 1 DO q = 1,nSurfSample DO p = 1,nSurfSample @@ -1044,10 +1023,6 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) DO iSpec=1,nSpecies MacroSurfaceSpecChemVal(1,p,q,OutputCounter,iSpec) = ChemWallProp(iSpec,1,p, q, iSurfSide) END DO ! iSpec=1,nSpecies - ! DO iReac=1,nReac - ! ! Species-specific counter of simulation particle impacts per iteration - ! MacroSurfaceReacCount(1,p,q,OutputCounter,iReac) = ChemCountReacWall(iReac,1,p, q, iSurfSide) - ! END DO ! iReac END DO ! q=1,nSurfSample END DO ! p=1,nSurfSample END DO ! iSurfSide=1,nComputeNodeSurfSides @@ -1062,7 +1037,6 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) offsetSurfSide => INT(offsetComputeNodeSurfOutputSide,IK) , & nVar2D_Spec => INT(nVar2D_Spec,IK) , & nVar2D_Heat => INT(nVar2D_Heat,IK) , & - ! nVar2D_Count => INT(nVar2D_Count,IK) , & nVar2D => INT(nVar2D,IK)) DO iSpec = 1,nSpecies @@ -1084,16 +1058,6 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) nVarCount = nVarCount + INT(nVar2D_Heat) - ! DO iReac = 1,nReac - ! CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , & - ! nValGlobal =(/nVar2D_Total , nSurfSample , nSurfSample , nGlobalSides /) , & - ! nVal =(/nVar2D_Count , nSurfSample , nSurfSample , nLocalSides/) , & - ! offset =(/INT(nVarCount,IK) , 0_IK , 0_IK , offsetSurfSide/) , & - ! collective =.FALSE. , & - ! RealArray = MacroSurfaceReacCount(1:nVar2D_Count,1:nSurfSample,1:nSurfSample,1:nLocalSides,iReac)) - ! nVarCount = nVarCount + INT(nVar2D_Count) - ! END DO - END ASSOCIATE CALL CloseDataFile() diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index 84217e4be..e27c6d1c8 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -46,6 +46,8 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_DSMC_Vars ,ONLY: useDSMC, CollisMode, RadialWeighting USE MOD_Eval_xyz ,ONLY: GetPositionInRefElem USE MOD_Mesh_Vars ,ONLY: SideToElem, offsetElem +USE MOD_Particle_Mesh_Vars ,ONLY: ElemMidPoint_Shared +USE MOD_Mesh_Tools ,ONLY: GetCNElemID USE MOD_Part_Tools ,ONLY: GetParticleWeight USE MOD_Part_Emission_Tools ,ONLY: SetParticleChargeAndMass, SetParticleMPF USE MOD_Particle_Analyze_Vars ,ONLY: CalcPartBalance, nPartIn, PartEkinIn @@ -54,9 +56,9 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Timedisc_Vars ,ONLY: dt USE MOD_Particle_Surfaces_Vars USE MOD_Particle_Boundary_Vars -USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win,SurfChemReac, ChemWallProp, ChemDesorpWall !, ChemCountReacWall +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win,SurfChemReac, ChemWallProp, ChemDesorpWall USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle -USE MOD_Particle_SurfFlux ,ONLY: SetSurfacefluxVelocities, CalcPartPosTriaSurface +USE MOD_Particle_SurfFlux ,ONLY: SetSurfacefluxVelocities, CalcPartPosTriaSurface, DefineSideDirectVec2D USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr #if USE_MPI USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED @@ -79,14 +81,14 @@ SUBROUTINE ParticleSurfChemFlux() ! Local variable declaration INTEGER :: iSpec , PositionNbr, iSF, iSide, SideID, NbrOfParticle, ParticleIndexNbr INTEGER :: BCSideID, ElemID, iLocSide, iSample, jSample, PartInsSubSide, iPart, iPartTotal -INTEGER :: PartsEmitted, Node1, Node2, globElemId -REAL :: xyzNod(3), Vector1(3), Vector2(3), ndist(3), midpoint(3) -REAL :: ReacHeat, DesHeat -REAL :: DesCount +INTEGER :: PartsEmitted, Node1, Node2, globElemId, CNElemID +REAL :: xyzNod(3), Vector1(3), Vector2(3), ndist(3), midpoint(3), RVec(2), minPos(2) +REAL :: ReacHeat, DesHeat, RanNum, Area, AdsDens +REAL :: DesCount, SurfElemMPF REAL :: nu, E_act, Coverage, Rate, DissOrder, AdCount REAL :: BetaCoeff REAL :: WallTemp -REAL :: SurfMol +REAL :: SurfMol, SurfMolAbs REAL :: MPF INTEGER :: iReac, ReactantCount, BoundID, nSF INTEGER :: iVal, iReactant, iValReac, SurfSideID, iBias @@ -110,20 +112,30 @@ SUBROUTINE ParticleSurfChemFlux() ElemID = SideToElem(S2E_ELEM_ID,BCSideID) iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) globElemId = ElemID + offSetElem + CNElemID = GetCNElemID(globElemId) SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + IF (RadialWeighting%DoRadialWeighting) THEN + SurfElemMPF = CalcRadWeightMPF(ElemMidPoint_Shared(2,CNElemID), iSpec, ElemID) + ELSE + SurfElemMPF = Species(1)%MacroParticleFactor + END IF + IF (SurfSideID.LT.1) CALL abort(__STAMP__,'Chemical Surface Flux is not allowed on non-sampling sides!') WallTemp = PartBound%WallTemp(BoundID) ! Boundary temperature + Area = SurfSideArea_Shared(SubP, SubQ,SurfSideID) IF(PartBound%LatticeVec(BoundID).GT.0.) THEN ! Number of surface molecules in dependence of the occupancy of the unit cell - SurfMol = PartBound%MolPerUnitCell(BoundID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & + SurfMol = PartBound%MolPerUnitCell(BoundID) * Area & /(PartBound%LatticeVec(BoundID)*PartBound%LatticeVec(BoundID)) + SurfMolAbs = PartBound%MolPerUnitCell(BoundID) /(PartBound%LatticeVec(BoundID)*PartBound%LatticeVec(BoundID)) ELSE ! Alternative calculation by the average number of surface molecules per area for a monolayer - SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) + SurfMol = 10.**19 * Area + SurfMolAbs = 10.**19 END IF ! Randomize the order in which the reactions are called to remove biases @@ -139,13 +151,18 @@ SUBROUTINE ParticleSurfChemFlux() ! 2a) Langmuir-Hinshelwood reaction with instantaneous desorption (Arrhenius model) CASE('LHD') + AdsDens = 1. Coverage = 1. ! Product of the reactant coverage values DO iVal=1,SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iVal).GT.0) THEN iSpec = SurfChemReac%Reactants(iReac,iVal) + ! Test for multiples of the same reactant + ReactantCount = COUNT(SurfChemReac%Reactants(iReac,:).EQ.iSpec) IF(iSpec.NE.SurfChemReac%SurfSpecies) THEN Coverage = Coverage * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) + ! Get the particle density per surface area from the coverage + AdsDens = AdsDens * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) * SurfMolAbs END IF END IF END DO @@ -158,21 +175,22 @@ SUBROUTINE ParticleSurfChemFlux() E_act = SurfChemReac%ArrheniusEnergy(iReac) ! Calculate the rate in dependence of the temperature and coverage - Rate = nu * Coverage * exp(-E_act/WallTemp) ! Energy in K + Rate = nu * AdsDens * exp(-E_act/WallTemp) ! Energy in K DO iVal=1,SIZE(SurfChemReac%Products(iReac,:)) IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN iSpec = SurfChemReac%Products(iReac,iVal) + + ! Randomize the reaction process + CALL RANDOM_NUMBER(RanNum) + ! Number of products to be inserted into the gas phase - ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = Rate * dt * SurfMol + & + ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = Rate * dt * Area * (-LOG(RanNum)) / ReactantCount + & ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - ! Test for multiples of the same reactant - ReactantCount = COUNT(SurfChemReac%Reactants(iReac,:).EQ.iReactant) - IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN Coverage = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) ELSE @@ -202,8 +220,6 @@ SUBROUTINE ParticleSurfChemFlux() END IF END IF END DO ! iValReac - ! Count the number of surface reactions - !ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/MPF) END IF !ChemDesorpWall.GE.1 END IF ! iVal in Products END DO ! iVal @@ -211,39 +227,43 @@ SUBROUTINE ParticleSurfChemFlux() ! b) Langmuir-Hinshelwood reaction (Arrhenius model) CASE('LH') Coverage = 1. + AdsDens = 1. ! Product of the reactant coverage values DO iVal=1,SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iVal).GT.0) THEN iSpec = SurfChemReac%Reactants(iReac,iVal) - MPF = Species(iSpec)%MacroParticleFactor + ! Test for multiples of the same reactant + ReactantCount = COUNT(SurfChemReac%Reactants(iReac,:).EQ.iSpec) IF(iSpec.NE.SurfChemReac%SurfSpecies) THEN Coverage = Coverage * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) + ! Calculate the absolute particle density per unit element + AdsDens = AdsDens * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) * SurfMolAbs END IF END IF END DO ! Determine the reaction energy in dependence of the surface coverage [J] - BetaCoeff = SurfChemReac%HeatAccommodation(iReac) + ! Complete accomodation due to the intermediate desorption step ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) * BoltzmannConst nu = SurfChemReac%Prefactor(iReac) E_act = SurfChemReac%ArrheniusEnergy(iReac) ! Calculate the rate in dependence of the temperature and coverage - Rate = nu * Coverage * exp(-E_act/WallTemp) ! Energy in K + Rate = nu * AdsDens * exp(-E_act/WallTemp)! Energy in K + + ! Randomize the reaction process + CALL RANDOM_NUMBER(RanNum) + + ! Reaction product number + DesCount = Rate * dt * Area * (-LOG(RanNum))/(SurfMol*ReactantCount) DO iVal=1,SIZE(SurfChemReac%Products(iReac,:)) IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN iSpec = SurfChemReac%Products(iReac,iVal) - ! Reaction product number - DesCount = Rate * dt DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) - ! Test for multiples of the same reactant - ReactantCount = COUNT(SurfChemReac%Reactants(iReac,:).EQ.iReactant) - IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN Coverage = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) ELSE @@ -258,14 +278,16 @@ SUBROUTINE ParticleSurfChemFlux() END IF END DO + ! Consider reactions between the same species + DesCount = DesCount / ReactantCount + ! Update the surface coverage values and the heat flux ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) + DesCount ! Test for the maximum of the product coverage IF(ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID).GT.PartBound%MaxCoverage(BoundID, iSpec)) THEN ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) = PartBound%MaxCoverage(BoundID, iSpec) END IF - ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) & - + DesCount*ReacHeat*BetaCoeff*SurfMol + ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) + DesCount*ReacHeat*SurfMol DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN iReactant = SurfChemReac%Reactants(iReac,iValReac) @@ -274,8 +296,6 @@ SUBROUTINE ParticleSurfChemFlux() END IF END IF END DO ! iValReac - ! Count the number of surface reactions - !ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + INT(DesCount/MPF) END IF ! iVal in Products END DO ! iVal @@ -285,7 +305,6 @@ SUBROUTINE ParticleSurfChemFlux() DO iVal=1, SIZE(SurfChemReac%Products(iReac,:)) IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN iSpec = SurfChemReac%Products(iReac,iVal) - MPF = Species(iSpec)%MacroParticleFactor ! Number of adsorbed particles on the subside IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN @@ -304,6 +323,8 @@ SUBROUTINE ParticleSurfChemFlux() Coverage = ChemWallProp(iSpec,1,SubP, SubQ, SurfSideID) AdCount = Coverage * SurfMol END IF + ! Absolute particle density of the surface element + AdsDens = Coverage * SurfMolAbs ! Calculate the desorption energy in dependence of the coverage [J] DesHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) * BoltzmannConst @@ -311,8 +332,6 @@ SUBROUTINE ParticleSurfChemFlux() ! Define the variables DissOrder = SurfChemReac%DissOrder(iReac) nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) - Rate = SurfChemReac%Rate(iReac) ! Calculate the desorption prefactor in dependence of coverage and temperature of the boundary IF(nu.EQ.0.) THEN @@ -324,10 +343,12 @@ SUBROUTINE ParticleSurfChemFlux() END IF E_act = SurfChemReac%E_initial(iReac) + Coverage * SurfChemReac%W_interact(iReac) - Rate = nu * Coverage**DissOrder * exp(-E_act/WallTemp) ! Energy in K + Rate = nu * AdsDens**DissOrder * exp(-E_act/WallTemp) ! Energy in K + ! Randomize the desorption process + CALL RANDOM_NUMBER(RanNum) ! Determine the desorption probability - ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = (Rate * dt * SurfMol)/DissOrder + & + ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = (Rate * dt * Area*(-LOG(RanNum)))/DissOrder + & ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) IF(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID).GE.(AdCount/DissOrder)) THEN @@ -353,8 +374,6 @@ SUBROUTINE ParticleSurfChemFlux() ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) = ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) & - DissOrder*INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8)/SurfMol END IF - ! Count the number of surface reactions - !ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/MPF) END IF !ChemDesorbWall .GE. 1 END IF ! Products .NE. 1 END DO !iSpec @@ -374,7 +393,7 @@ SUBROUTINE ParticleSurfChemFlux() ! 3.) Insert the product species into the gas phase DO iSpec = 1, nSpecies - IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/Species(iSpec)%MacroParticleFactor).GE.1) THEN + IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfElemMPF).GE.1) THEN ! Define the necessary variables xyzNod(1:3) = BCdata_auxSF(BoundID)%TriaSideGeo(iSide)%xyzNod(1:3) @@ -387,7 +406,10 @@ SUBROUTINE ParticleSurfChemFlux() midpoint(1:3) = BCdata_auxSF(BoundID)%TriaSwapGeo(iSample,jSample,iSide)%midpoint(1:3) ndist(1:3) = BCdata_auxSF(BoundID)%TriaSwapGeo(iSample,jSample,iSide)%ndist(1:3) - PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/Species(iSpec)%MacroParticleFactor) + ! REQUIRED LATER FOR THE POSITION START + IF(Symmetry%Axisymmetric) CALL DefineSideDirectVec2D(SideID, xyzNod, minPos, RVec) + + PartInsSubSide = INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfElemMPF) ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) = ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID) & - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) @@ -400,7 +422,11 @@ SUBROUTINE ParticleSurfChemFlux() ParticleIndexNbr = PDM%nextFreePosition(iPartTotal + 1 + PDM%CurrentNextFreePosition) END IF IF (ParticleIndexNbr .ne. 0) THEN - PartState(1:3,ParticleIndexNbr) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) + IF(Symmetry%Axisymmetric) THEN + PartState(1:3,ParticleIndexNbr) = CalcPartPosAxisym(minPos, RVec) + ELSE + PartState(1:3,ParticleIndexNbr) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) + END IF LastPartPos(1:3,ParticleIndexNbr)=PartState(1:3,ParticleIndexNbr) PDM%ParticleInside(ParticleIndexNbr) = .TRUE. PDM%dtFracPush(ParticleIndexNbr) = .TRUE. @@ -408,9 +434,9 @@ SUBROUTINE ParticleSurfChemFlux() PEM%GlobalElemID(ParticleIndexNbr) = globElemId PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId iPartTotal = iPartTotal + 1 - IF (RadialWeighting%DoRadialWeighting) THEN - PartMPF(ParticleIndexNbr) = CalcRadWeightMPF(PartState(2,ParticleIndexNbr), iSpec,ParticleIndexNbr) - END IF + IF(usevMPF)THEN + PartMPF(ParticleIndexNbr) = SurfElemMPF + END IF ! usevMPF ELSE CALL abort(__STAMP__,'ERROR in ParticleSurfChemFlux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?') END IF @@ -612,4 +638,45 @@ SUBROUTINE ParticleSurfDiffusion() END SUBROUTINE ParticleSurfDiffusion +!=================================================================================================================================== +!> +!=================================================================================================================================== +FUNCTION CalcPartPosAxisym(minPos,RVec) +! MODULES +! IMPLICIT VARIABLE HANDLING +USE MOD_Globals +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +REAL, INTENT(IN) :: minPos(2), RVec(2) +REAL :: CalcPartPosAxisym(1:3) +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +REAL :: RandVal1, Particle_pos(3) +!=================================================================================================================================== +IF ((.NOT.(ALMOSTEQUAL(minPos(2),minPos(2)+RVec(2))))) THEN + CALL RANDOM_NUMBER(RandVal1) + Particle_pos(2) = minPos(2) + RandVal1 * RVec(2) + ! x-position depending on the y-location + Particle_pos(1) = minPos(1) + (Particle_pos(2)-minPos(2)) * RVec(1) / RVec(2) + Particle_pos(3) = 0. +ELSE + CALL RANDOM_NUMBER(RandVal1) + IF (ALMOSTEQUAL(minPos(2),minPos(2)+RVec(2))) THEN + ! y_min = y_max, faces parallel to x-direction, constant distribution + Particle_pos(1:2) = minPos(1:2) + RVec(1:2) * RandVal1 + ELSE + ! No VarWeighting, regular linear distribution of particle positions + Particle_pos(1:2) = minPos(1:2) + RVec(1:2) & + * ( SQRT(RandVal1*((minPos(2) + RVec(2))**2-minPos(2)**2)+minPos(2)**2) - minPos(2) ) / (RVec(2)) + END IF + Particle_pos(3) = 0. +END IF + +CalcPartPosAxisym = Particle_pos + +END FUNCTION CalcPartPosAxisym + END MODULE MOD_Particle_SurfChemFlux \ No newline at end of file diff --git a/src/particles/emission/particle_surface_flux.f90 b/src/particles/emission/particle_surface_flux.f90 index acaa260a9..fc5c4d1cc 100644 --- a/src/particles/emission/particle_surface_flux.f90 +++ b/src/particles/emission/particle_surface_flux.f90 @@ -24,7 +24,7 @@ MODULE MOD_Particle_SurfFlux !----------------------------------------------------------------------------------------------------------------------------------- ! Private Part --------------------------------------------------------------------------------------------------------------------- ! Public Part ---------------------------------------------------------------------------------------------------------------------- -PUBLIC :: ParticleSurfaceflux, CalcPartPosTriaSurface, SetSurfacefluxVelocities +PUBLIC :: ParticleSurfaceflux, CalcPartPosTriaSurface, SetSurfacefluxVelocities, DefineSideDirectVec2D !=================================================================================================================================== CONTAINS diff --git a/src/particles/emission/particle_surface_flux_init.f90 b/src/particles/emission/particle_surface_flux_init.f90 index ff326ca22..7f56b5ed7 100644 --- a/src/particles/emission/particle_surface_flux_init.f90 +++ b/src/particles/emission/particle_surface_flux_init.f90 @@ -292,7 +292,7 @@ SUBROUTINE InitializeParticleSurfaceflux() DO iSF=1,SurfChemReac%CatBoundNum currentBC = SurfChemReac%Surfaceflux(iSF)%BC IF (BCdata_auxSF(currentBC)%SideNumber.GT.0) THEN - + ! Loop over sides on the surface flux DO iSide=1,BCdata_auxSF(currentBC)%SideNumber BCSideID=BCdata_auxSF(currentBC)%SideList(iSide) @@ -1307,7 +1307,7 @@ SUBROUTINE InitSurfChemFlux(iSF, iSide) !-- store species-specific data in separate arrays to be able to re-use the surface flux types SurfChemReac%SFAux(iSF)%a_nIn(iSample,jSample,iSide,iSpec) = a END DO !iSpec - + SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%projFak = projFak IF (.NOT.SurfChemReac%Surfaceflux(iSF)%VeloIsNormal) THEN SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 & @@ -1358,7 +1358,7 @@ SUBROUTINE ReadInAndPrepareSurfChemFlux(nDataBC) iSF = 1 DO iBound=1,nPartBound - IF (SurfChemReac%BoundisChemSurf(iBound)) THEN + IF (SurfChemReac%BoundisChemSurf(iBound)) THEN SurfChemReac%Surfaceflux(iSF)%BC = iBound iSF = iSF + 1 END IF diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 722371fbc..3e38358c9 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -1654,4 +1654,4 @@ SUBROUTINE InitPartDataSize() END SUBROUTINE InitPartDataSize END MODULE MOD_ParticleInit - + diff --git a/src/particles/restart/particle_restart.f90 b/src/particles/restart/particle_restart.f90 index cb5922bd3..2d57bcccc 100644 --- a/src/particles/restart/particle_restart.f90 +++ b/src/particles/restart/particle_restart.f90 @@ -67,7 +67,7 @@ SUBROUTINE ParticleRestart() USE MOD_Particle_Vars ,ONLY: PartInt,PartData,PartState,PartSpecies,PEM,PDM,usevMPF,PartMPF,PartPosRef,SpecReset,Species USE MOD_Particle_Vars ,ONLY: DoVirtualCellMerge ! Restart -USE MOD_Restart_Vars ,ONLY: DoMacroscopicRestart +USE MOD_Restart_Vars ,ONLY: DoMacroscopicRestart, DoCatalyticRestart ! HDG #if USE_HDG USE MOD_HDG_Vars ,ONLY: UseBRElectronFluid,BRConvertElectronsToFluid,BRConvertFluidToElectrons @@ -128,6 +128,8 @@ SUBROUTINE ParticleRestart() ! =========================================================================== CALL ParticleReadin() +IF(DoCatalyticRestart) CALL CatalyticRestart() + IF(.NOT.DoMacroscopicRestart) THEN IF(PartIntExists)THEN IF(PartDataExists)THEN @@ -1081,6 +1083,91 @@ SUBROUTINE RestartAdaptiveWallTemp() END SUBROUTINE RestartAdaptiveWallTemp +SUBROUTINE CatalyticRestart() +!=================================================================================================================================== +!> Restart of the catalytic surface values +!=================================================================================================================================== +! MODULES +USE MOD_Globals +USE MOD_PreProc +USE MOD_io_hdf5 +USE MOD_HDF5_Input ,ONLY: OpenDataFile,ReadArray,GetDataSize,ReadAttribute +USE MOD_HDF5_Input ,ONLY: HSize,File_ID,GetDataProps +USE MOD_Restart_Vars ,ONLY: CatalyticFileName +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp +USE MOD_Particle_Boundary_Vars ,ONLY: SurfSideArea_Shared +USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfSides, offsetComputeNodeSurfSide +USE MOD_Particle_Vars ,ONLY: nSpecies +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +CHARACTER(LEN=255) :: File_Type +CHARACTER(LEN=255),ALLOCATABLE :: VarNamesSurf_HDF5(:) +INTEGER :: iSpec, nVarSurf, nSurfSample, nSurfaceSidesReadin +REAL, ALLOCATABLE :: tempSurfData(:,:,:,:), SurfData(:,:) +REAL :: OutputTime +INTEGER :: iSide, ReadInSide +!=================================================================================================================================== + +SWRITE(UNIT_stdOut,*) 'Using catalytic values from file: ',TRIM(CatalyticFileName) + +CALL OpenDataFile(CatalyticFileName,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS) + +! Check if the provided file is a DSMC surface chemistry state file. +CALL ReadAttribute(File_ID,'File_Type',1,StrScalar=File_Type) + +IF(TRIM(File_Type).NE.'DSMCSurfChemState') THEN + SWRITE(*,*) 'ERROR: The given file type is: ', TRIM(File_Type) + CALL abort(__STAMP__,'ERROR: Given file for the catalytic restart is not of the type "DSMCSurfChemState", please check the input file!') +END IF + +CALL ReadAttribute(File_ID,'DSMC_nSurfSample',1,IntScalar=nSurfSample) +CALL ReadAttribute(File_ID,'Time',1,RealScalar=OutputTime) + +CALL GetDataSize(File_ID,'SurfaceData',nDims,HSize) +nVarSurf = INT(HSize(1),4) +nSurfaceSidesReadin = INT(HSize(4),4) +ALLOCATE(VarNamesSurf_HDF5(nVarSurf)) +CALL ReadAttribute(File_ID,'VarNamesSurface',nVarSurf,StrArray=VarNamesSurf_HDF5(1:nVarSurf)) + +ALLOCATE(SurfData(1:nVarSurf,1:nSurfaceSidesReadin)) +ALLOCATE(tempSurfData(1:nVarSurf,nSurfSample,nSurfSample,1:nSurfaceSidesReadin)) +SurfData=0. +tempSurfData = 0. +ASSOCIATE(nVarSurf => INT(nVarSurf,IK), & + nSurfaceSidesReadin => INT(nSurfaceSidesReadin,IK)) + CALL ReadArray('SurfaceData',4,(/nVarSurf, 1_IK, 1_IK, nSurfaceSidesReadin/), & + 0_IK,4,RealArray=tempSurfData(:,:,:,:)) +END ASSOCIATE + +! Copy data from tmp array +DO iSide = 1, nSurfaceSidesReadin + SurfData(1:nVarSurf,iSide) = tempSurfData(1:nVarSurf,1,1,iSide) +END DO + +CALL CloseDataFile() + +! Read-In of the coverage values per species +DO iSide = 1, nComputeNodeSurfSides + ReadInSide = iSide + offsetComputeNodeSurfSide + DO iSpec = 1, nSpecies + ! Initial surface coverage + ChemWallProp(iSpec,1,1,1,iSide) = SurfData(iSpec,ReadInSide) + END DO + ! Heat flux on the surface element + ChemWallProp(1,2,1,1,iSide) = SurfData(nSpecies+1,ReadInSide)*OutputTime*SurfSideArea_Shared(1,1,iSide) +END DO + +SDEALLOCATE(VarNamesSurf_HDF5) +SDEALLOCATE(SurfData) +SDEALLOCATE(tempSurfData) + +END SUBROUTINE CatalyticRestart SUBROUTINE MacroscopicRestart() !=================================================================================================================================== diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index fe0a1d028..471ab0a38 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -70,8 +70,14 @@ SUBROUTINE DefineParametersSurfaceChemistry() 'Ratio of adsorbed to impinging particles on a reactive surface', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-DissOrder', & 'Associative = 1, dissociative = 2', '0.' , numberedmulti=.TRUE.) - CALL prms%CreateRealOption( 'Surface-Reaction[$]-EqConstant', & - 'Equilibrium constant between the adsorption and desorption (K), Langmuir: K=1', '0.' , numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Surface-Reaction[$]-EqConstant', & + 'Equilibrium constant between the adsorption and desorption (K), Langmuir: K=1', '1.' , numberedmulti=.TRUE.) +CALL prms%CreateLogicalOption( 'Surface-Reaction[$]-DissociativeAdsorption', 'Special adsorption case, only one half of the molecule is' //& + 'adsorbed and the other remains in the gas-phase', '.FALSE.', numberedmulti=.TRUE.) +CALL prms%CreateIntOption( 'Surface-Reaction[$]-AdsorptionProduct','Species that stays adsorbed on the surface', & + '0', numberedmulti=.TRUE.) +CALL prms%CreateIntOption( 'Surface-Reaction[$]-GasPhaseProduct','Species that is desorbed into the gas-phase', & + '0', numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-LateralInteraction', & 'Interaction between neighbouring particles (W), Edes = E0 + W*Coverage', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-Ca', & @@ -162,11 +168,17 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() ALLOCATE(SurfChemReac%S_initial(SurfChemReac%NumOfReact)) SurfChemReac%S_initial = 0.0 ALLOCATE(SurfChemReac%EqConstant(SurfChemReac%NumOfReact)) -SurfChemReac%EqConstant = 0.0 +SurfChemReac%EqConstant = 1.0 ALLOCATE(SurfChemReac%DissOrder(SurfChemReac%NumOfReact)) SurfChemReac%DissOrder = 0.0 ALLOCATE(SurfChemReac%StickCoeff(SurfChemReac%NumOfReact)) SurfChemReac%StickCoeff = 0.0 +ALLOCATE(SurfChemReac%DissociativeAds(SurfChemReac%NumOfReact)) +SurfChemReac%DissociativeAds = .FALSE. +ALLOCATE(SurfChemReac%AdsorbedProduct(SurfChemReac%NumOfReact)) +SurfChemReac%AdsorbedProduct = 0.0 +ALLOCATE(SurfChemReac%GasProduct(SurfChemReac%NumOfReact)) +SurfChemReac%GasProduct = 0.0 ! Desorption parameter ALLOCATE(SurfChemReac%E_initial(SurfChemReac%NumOfReact)) @@ -291,6 +303,7 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) CASE('A') + SurfChemReac%DissociativeAds(iReac) = GETLOGICAL('Surface-Reaction'//TRIM(hilf)//'-DissociativeAdsorption', '.FALSE.') CALL AttributeExists(file_id_specdb,'StickingCoefficient',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN CALL ReadAttribute(file_id_specdb,'StickingCoefficient',1,DatasetName = dsetname,RealScalar=SurfChemReac%S_initial(iReac)) @@ -309,6 +322,21 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() ELSE SurfChemReac%DissOrder(iReac)= 1. END IF + ! Special case: dissociative adsorption + IF (SurfChemReac%DissociativeAds(iReac)) THEN + CALL AttributeExists(file_id_specdb,'AdsorptionProduct',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'AdsorptionProduct',1,DatasetName = dsetname,IntScalar=SurfChemReac%AdsorbedProduct(iReac)) + ELSE + CALL abort(__STAMP__,'Product not defined for the dissociative-adsorption') + END IF + CALL AttributeExists(file_id_specdb,'GasPhaseProduct',TRIM(dsetname), AttrExists=Attr_Exists) + IF (Attr_Exists) THEN + CALL ReadAttribute(file_id_specdb,'GasPhaseProduct',1,DatasetName = dsetname,IntScalar=SurfChemReac%GasProduct(iReac)) + ELSE + CALL abort(__STAMP__,'Product not defined for the dissociative-adsorption') + END IF + END IF CASE('D') CALL AttributeExists(file_id_specdb,'LateralInteraction',TRIM(dsetname), AttrExists=Attr_Exists) @@ -348,11 +376,6 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() SurfChemReac%DissOrder(iReac)= 1. END IF - ! Convert the prefactor from absolute to coverage values for associative desorption - IF(SurfChemReac%DissOrder(iReac).EQ.2) THEN - SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) - END IF - CASE('LH') CALL AttributeExists(file_id_specdb,'Energy',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN @@ -366,7 +389,6 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() ELSE SurfChemReac%Prefactor(iReac)= 1. END IF - SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) CASE('LHD') CALL AttributeExists(file_id_specdb,'Energy',TRIM(dsetname), AttrExists=Attr_Exists) @@ -381,7 +403,6 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() ELSE SurfChemReac%Prefactor(iReac)= 1. END IF - SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) CASE('ER') CALL AttributeExists(file_id_specdb,'Energy',TRIM(dsetname), AttrExists=Attr_Exists) @@ -421,13 +442,22 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() SurfChemReac%Promotion(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-Promotion','0') SurfChemReac%EReact(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-ReactHeat','0.') SurfChemReac%EScale(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-HeatScaling','0.') - SurfChemReac%HeatAccommodation(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EnergyAccommodation','1.') + SurfChemReac%HeatAccommodation(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EnergyAccommodation','1.') SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) CASE('A') SurfChemReac%S_initial(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-StickingCoefficient','1.') SurfChemReac%EqConstant(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EqConstant','1.') SurfChemReac%DissOrder(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-DissOrder','1.') + SurfChemReac%DissociativeAds(iReac) = GETLOGICAL('Surface-Reaction'//TRIM(hilf)//'-DissociativeAdsorption', '.FALSE.') + ! Special case of the dissociative adsorption, half of the molecule is desorbed back into the gas-phase + IF (SurfChemReac%DissociativeAds(iReac)) THEN + SurfChemReac%AdsorbedProduct(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-AdsorptionProduct','0') + SurfChemReac%GasProduct(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-GasPhaseProduct','0') + IF ((SurfChemReac%GasProduct(iReac).EQ.0).OR.(SurfChemReac%GasProduct(iReac).EQ.0)) THEN + CALL abort(__STAMP__,'Product not defined for the dissociative-adsorption') + END IF + END IF CASE('D') SurfChemReac%W_interact(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-LateralInteraction','0.') @@ -437,22 +467,13 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() SurfChemReac%E_initial(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') SurfChemReac%DissOrder(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-DissOrder','1.') - ! Convert the prefactor from absolute to coverage values for associative desorption - IF(SurfChemReac%DissOrder(iReac).EQ.2) THEN - SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) - END IF - CASE('LH') SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') - ! Convert the prefactor to coverage dependent values - SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) CASE('LHD') SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') - ! Convert the prefactor to coverage dependent values - SurfChemReac%Prefactor(iReac) = SurfChemReac%Prefactor(iReac) * 10.0**(15) CASE('ER') SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') @@ -501,8 +522,6 @@ SUBROUTINE SurfaceModel_Chemistry_Init() ChemSampWall = 0.0 ALLOCATE(ChemDesorpWall(1:nSpecies,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) ChemDesorpWall = 0.0 -! ALLOCATE(ChemCountReacWall(1:ReadInNumOfReact,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) -! ChemCountReacWall = 0.0 #if USE_MPI CALL Allocate_Shared((/nSpecies,2,nSurfSample,nSurfSample,nComputeNodeSurfTotalSides/),ChemSampWall_Shared_Win,ChemSampWall_Shared) @@ -569,13 +588,16 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) ! VARIABLES USE MOD_Globals_Vars ,ONLY: PI, BoltzmannConst USE MOD_TimeDisc_Vars ,ONLY: dt -USE MOD_Particle_Vars ,ONLY: PartSpecies,Species,usevMPF,PartMPF +USE MOD_Particle_Vars ,ONLY: PartSpecies,Species,usevMPF,PartMPF, WriteMacroSurfaceValues USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, dXiEQ_SurfSample,SurfSideArea_Shared USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac , ChemWallProp, ChemSampWall USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared, BoundsOfElem_Shared USE MOD_Particle_Vars ,ONLY: PDM, LastPartPos -USE MOD_DSMC_Vars ,ONLY: RadialWeighting +USE MOD_DSMC_Vars ,ONLY: RadialWeighting, DSMC, SamplingActive +USE MOD_Particle_Boundary_Tools ,ONLY: CalcWallSample +USE MOD_SurfaceModel_Tools ,ONLY: CalcPostWallCollVelo +USE MOD_Particle_Mesh_Vars ,ONLY: BoundsOfElem_Shared ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -601,7 +623,7 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) REAL :: WallTemp REAL :: nu, E_act, Rate, Prob, Prob_new, Prob_Scaled REAL :: NewPos(1:3) -REAL :: SurfMol, AdCountIter +REAL :: SurfMol, AdCountIter, AdsDens REAL :: tang1(1:3), tang2(1:3), WallVelo(1:3), BoundsOfElemCenter(1:3), NewVelo(3) REAL :: AdsHeat, ReacHeat, BetaCoeff REAL :: partWeight @@ -651,18 +673,24 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) iReac_Ads = iReac ! Absolute coverage in terms of the number of surface molecules - IF(ANY(SurfChemReac%Products(iReac,:).NE.0)) THEN - DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) - IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN - iProd = SurfChemReac%Products(iReac,iValProd) - Coverage = ChemWallProp(iProd,1,SubP,SubQ,SurfSideID) - END IF - END DO + ! Special case: dissociative adsorption + IF (SurfChemReac%DissociativeAds(iReac)) THEN + iProd = SurfChemReac%AdsorbedProduct(iReac) + Coverage = ChemWallProp(iProd,1,SubP,SubQ,SurfSideID) ELSE - Coverage = ChemWallProp(speciesID,1,SubP,SubQ,SurfSideID) - END IF + IF(ANY(SurfChemReac%Products(iReac,:).NE.0)) THEN + DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) + IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN + iProd = SurfChemReac%Products(iReac,iValProd) + Coverage = ChemWallProp(iProd,1,SubP,SubQ,SurfSideID) + END IF + END DO + ELSE + Coverage = ChemWallProp(speciesID,1,SubP,SubQ,SurfSideID) + END IF + END IF ! Dissociative ADS - ! Definition of the variables + ! Definition of the variables MaxCoverage = PartBound%MaxCoverage(locBCID,speciesID) TotalCoverage = SUM(ChemWallProp(:,1,SubP, SubQ, SurfSideID)) MaxTotalCov = PartBound%MaxTotalCoverage(locBCID) @@ -707,40 +735,42 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) CASE('ER') IF(ANY(SurfChemReac%Reactants(iReac,:).EQ.speciesID)) THEN - ! Definition of the variables - WallTemp = PartBound%WallTemp(locBCID) - nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) - Rate = SurfChemReac%Rate(iReac) - BetaCoeff = SurfChemReac%HeatAccommodation(iReac) - - ! Check for the coverage values of the reactant adsorbed on the surface - IF(ANY(SurfChemReac%Reactants(iReac,:).NE.speciesID)) THEN - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN - Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) - AdCountIter = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) - ELSE ! Involvement of the bulk species - Coverage = 1. - AdCountIter = 0. - END IF + ! Definition of the variables + WallTemp = PartBound%WallTemp(locBCID) + nu = SurfChemReac%Prefactor(iReac) + E_act = SurfChemReac%ArrheniusEnergy(iReac) + Rate = SurfChemReac%Rate(iReac) + BetaCoeff = SurfChemReac%HeatAccommodation(iReac) + + ! Check for the coverage values of the reactant adsorbed on the surface + IF(ANY(SurfChemReac%Reactants(iReac,:).NE.speciesID)) THEN + DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) + IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN + iReactant = SurfChemReac%Reactants(iReac,iValReac) + IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN + Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) + AdCountIter = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) + ELSE ! Involvement of the bulk species + Coverage = 1. + AdCountIter = 0. END IF - END DO - ELSE - Coverage = ChemWallProp(speciesID,1,SubP, SubQ, SurfSideID) - AdCountIter = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) - END IF + END IF + END DO + ELSE + Coverage = ChemWallProp(speciesID,1,SubP, SubQ, SurfSideID) + AdCountIter = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) + END IF + ! Absolute particle density of the element + AdsDens = Coverage * SurfMol / SurfSideArea_Shared(SubP, SubQ,SurfSideID) - ! Determine the reaction heat in dependence of the coverage [J] - ReacHeat = (SurfChemReac%EReact(iReac) - Coverage * SurfChemReac%EScale(iReac)) * BoltzmannConst + ! Determine the reaction heat in dependence of the coverage [J] + ReacHeat = (SurfChemReac%EReact(iReac) - Coverage * SurfChemReac%EScale(iReac)) * BoltzmannConst ! Bias free calculation for multiple reaction channels IF(iReac_ER.EQ.0) THEN iReac_ER = iReac - Rate = nu * Coverage * exp(-E_act/WallTemp) ! Energy in K - Prob = Rate * dt + Rate = nu * AdsDens * exp(-E_act/WallTemp) ! Energy in K + Prob = SQRT(2.*PI*Species(speciesID)%MassIC/(BoltzmannConst*WallTemp)) * Rate ! Comparison of adsorbate numbers to reactant particle weights IF(partWeight.GT.(Coverage*SurfMol)) THEN @@ -752,8 +782,8 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) ELSE ! iReac.NE.0 iReac_ER_new = iReac - Rate = nu * Coverage * exp(-E_act/WallTemp) ! Energy in K - Prob_new = Rate * dt + Rate = nu * AdsDens * exp(-E_act/WallTemp) ! Energy in K + Prob_new = SQRT(2.*PI*Species(speciesID)%MassIC/(BoltzmannConst*WallTemp)) * Rate ! Comparison of adsorbate numbers to reactant particle weights IF(partWeight.GT.(Coverage*SurfMol)) THEN @@ -806,25 +836,55 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) ! 4a.) Adsorption: delete the incoming particle and update the surface values CASE('A') - CALL RemoveParticle(PartID) + ! Dissociative adsorption + IF (SurfChemReac%DissociativeAds(iReac)) THEN + CALL RemoveParticle(PartID) - ! Heat flux on the surface created by the adsorption - ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) + AdsHeat * partWeight - ! Update the number of adsorbed molecules - IF(ANY(SurfChemReac%Products(iReac,:).NE.0)) THEN - DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) - IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN - iProd = SurfChemReac%Reactants(iReac,iValProd) - ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) + DissOrder * partWeight - END IF - END DO - ELSE - ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) + DissOrder * partWeight - END IF + ! Heat flux on the surface created by the adsorption + ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) + AdsHeat * partWeight + ! Update the number of adsorbed molecules by binding half of the molecule to the surface + iProd = SurfChemReac%AdsorbedProduct(iReac) + ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) + DissOrder * partWeight - ! Count the number of surface reactions - ! ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + partWeight + ! Re-insert the other half of the molecule into the gas-phase + WallVelo = PartBound%WallVelo(1:3,locBCID) + CALL OrthoNormVec(n_loc,tang1,tang2) + ! Get Elem Center + BoundsOfElemCenter(1:3) = (/SUM(BoundsOfElem_Shared(1:2,1,GlobalElemID)), & + SUM(BoundsOfElem_Shared(1:2,2,GlobalElemID)), & + SUM(BoundsOfElem_Shared(1:2,3,GlobalElemID)) /) / 2. + + iProd = SurfChemReac%GasProduct(iReac) + + NewVelo(1:3) = CalcPostWallCollVelo(iProd,0.,WallTemp,BetaCoeff) + NewVelo(1:3) = tang1(1:3)*NewVelo(1) + tang2(1:3)*NewVelo(2) - n_loc(1:3)*NewVelo(3) + WallVelo(1:3) + NewPos(1:3) = eps*BoundsOfElemCenter(1:3) + eps2*PartPosImpact(1:3) + + CALL CreateParticle(iProd,NewPos(1:3),GlobalElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID, NewMPF=partWeight) + + CALL DSMC_SetInternalEnr(iProd,locBCID,NewPartID,4,iReac) + + IF((DSMC%CalcSurfaceVal.AND.SamplingActive).OR.(DSMC%CalcSurfaceVal.AND.WriteMacroSurfaceValues)) & + CALL CalcWallSample(NewPartID,SurfSideID,'new',SurfaceNormal_opt=n_loc) + + ELSE + CALL RemoveParticle(PartID) + + ! Heat flux on the surface created by the adsorption + ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) + AdsHeat * partWeight + ! Update the number of adsorbed molecules + IF(ANY(SurfChemReac%Products(iReac,:).NE.0)) THEN + DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) + IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN + iProd = SurfChemReac%Reactants(iReac,iValProd) + ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) + DissOrder * partWeight + END IF + END DO + ELSE + ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) + DissOrder * partWeight + END IF + END IF ! 4b.) ER: delete the incoming particle, update the surface values and create the gas phase products CASE('ER') @@ -834,7 +894,7 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) + ReacHeat * partWeight * BetaCoeff ! Create the Eley-Rideal reaction product - TempErgy = SQRT(2*BoltzmannConst*WallTemp/Species(speciesID)%MassIC) + ! Incomplete energy accomodation: remaining energy is added to the product WallVelo = PartBound%WallVelo(1:3,locBCID) CALL OrthoNormVec(n_loc,tang1,tang2) @@ -843,22 +903,21 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) SUM(BoundsOfElem_Shared(1:2,2,GlobalElemID)), & SUM(BoundsOfElem_Shared(1:2,3,GlobalElemID)) /) / 2. - iNewPart = 1 - ProductSpecNbr = 1 - DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN iProd = SurfChemReac%Products(iReac,iValProd) - NewVelo(1:3) = VeloFromDistribution('deltadistribution',TempErgy,1,1) - - + NewVelo(1:3) = CalcPostWallCollVelo(iProd,0.,WallTemp,BetaCoeff) NewVelo(1:3) = tang1(1:3)*NewVelo(1) + tang2(1:3)*NewVelo(2) - n_loc(1:3)*NewVelo(3) + WallVelo(1:3) NewPos(1:3) = eps*BoundsOfElemCenter(1:3) + eps2*PartPosImpact(1:3) CALL CreateParticle(iProd,NewPos(1:3),GlobalElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID, NewMPF=partWeight) CALL DSMC_SetInternalEnr(iProd,locBCID,NewPartID,4,iReac) + + ! Sampling of newly created particles + IF((DSMC%CalcSurfaceVal.AND.SamplingActive).OR.(DSMC%CalcSurfaceVal.AND.WriteMacroSurfaceValues)) & + CALL CalcWallSample(NewPartID,SurfSideID,'new',SurfaceNormal_opt=n_loc) END IF END DO @@ -876,9 +935,6 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) - partWeight END IF - ! Count the number of surface reactions - ! ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) = ChemCountReacWall(iReac, 1, SubP, SubQ, SurfSideID) + partWeight - CASE DEFAULT CALL MaxwellScattering(PartID,SideID,n_Loc) END SELECT !Interaction Type diff --git a/src/particles/surfacemodel/surfacemodel_init.f90 b/src/particles/surfacemodel/surfacemodel_init.f90 index aea7a9a27..ab9b5c091 100644 --- a/src/particles/surfacemodel/surfacemodel_init.f90 +++ b/src/particles/surfacemodel/surfacemodel_init.f90 @@ -101,7 +101,7 @@ SUBROUTINE InitSurfaceModel() DO iSpec = 1,nSpecies WRITE(UNIT=hilf,FMT='(I0)') iSpec - ! Loop particle boundaries + ! Loop particle boundaries DO iPartBound=1,nPartBound IF(.NOT.PartBound%Reactive(iPartBound)) CYCLE WRITE(UNIT=hilf2,FMT='(I0)') iPartBound @@ -220,7 +220,7 @@ SUBROUTINE FinalizeSurfaceModel() SDEALLOCATE(SurfChemReac%Rate) SDEALLOCATE(SurfChemReac%Prob) SDEALLOCATE(SurfChemReac%ArrheniusEnergy) -SDEALLOCATE(SurfChemReac%Prefactor) +SDEALLOCATE(SurfChemReac%Prefactor) #if USE_MPI CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR) @@ -233,7 +233,6 @@ SUBROUTINE FinalizeSurfaceModel() #else #endif SDEALLOCATE(ChemDesorpWall) -! SDEALLOCATE(ChemCountReacWall) ADEALLOCATE(ChemSampWall) ADEALLOCATE(ChemWallProp) diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90 index a7b37ea2a..0bcfab37d 100644 --- a/src/particles/surfacemodel/surfacemodel_vars.f90 +++ b/src/particles/surfacemodel/surfacemodel_vars.f90 @@ -21,7 +21,7 @@ MODULE MOD_SurfaceModel_Vars USE MOD_DSMC_Vars ,ONLY: tCollCaseInfo USE MOD_Particle_SurfaceFlux_Vars ,ONLY: tSurfaceFlux -IMPLICIT NONE +IMPLICIT NONE PUBLIC SAVE !----------------------------------------------------------------------------------------------------------------------------------- @@ -87,7 +87,11 @@ MODULE MOD_SurfaceModel_Vars REAL, ALLOCATABLE :: MaxCoverage(:) ! Maximal surface coverage REAL, ALLOCATABLE :: DissOrder(:) ! Molecular (1) or dissociative (2) adsorption REAL, ALLOCATABLE :: EqConstant(:) ! Equilibrium constant for adsorption/desorption - REAL, ALLOCATABLE :: StickCoeff(:) ! Sticking coefficient + REAL, ALLOCATABLE :: StickCoeff(:) ! Sticking coefficient + ! Parameter for the dissociative-adsorption + LOGICAL, ALLOCATABLE :: DissociativeAds(:) ! Dissociative adsorption where the other molecule half is desorbed + INTEGER, ALLOCATABLE :: AdsorbedProduct(:) ! Species ID of the particle that stays adsorbed on the surface + INTEGER, ALLOCATABLE :: GasProduct(:) ! Species ID of the particle that remains in the gas phase ! Parameters for the desorption REAL, ALLOCATABLE :: E_initial(:) ! Desorption energy at zero coverage [K] REAL, ALLOCATABLE :: W_interact(:) ! Scaling factor for Edes [K] @@ -117,7 +121,6 @@ MODULE MOD_SurfaceModel_Vars REAL,ALLOCATABLE :: ChemDesorpWall(:,:,:,:,:) ! Desorption numbers REAL,ALLOCPOINT :: ChemWallProp(:,:,:,:,:) ! Adsorption count / heat flux REAL,ALLOCPOINT :: ChemSampWall(:,:,:,:,:) ! Sampling direct impact mechanism -! INTEGER,ALLOCATABLE :: ChemCountReacWall(:,:,:,:,:)! Count the number of catalytic reactions on the subside #if USE_MPI REAL,ALLOCPOINT :: ChemWallProp_Shared(:,:,:,:,:) ! Adsorption count / heat flux diff --git a/src/restart/restart_vars.f90 b/src/restart/restart_vars.f90 index febad788f..1b3b49440 100644 --- a/src/restart/restart_vars.f90 +++ b/src/restart/restart_vars.f90 @@ -42,5 +42,8 @@ MODULE MOD_Restart_Vars LOGICAL :: DoMacroscopicRestart CHARACTER(LEN=300) :: MacroRestartFileName REAL, ALLOCATABLE :: MacroRestartValues(:,:,:) +LOGICAL :: DoCatalyticRestart +CHARACTER(LEN=300) :: CatalyticFileName +REAL, ALLOCATABLE :: CatRestartValues(:,:,:) !=================================================================================================================================== END MODULE MOD_Restart_Vars diff --git a/src/timedisc/timedisc_TimeStep_BGK.f90 b/src/timedisc/timedisc_TimeStep_BGK.f90 index 5db0421aa..356dc9493 100644 --- a/src/timedisc/timedisc_TimeStep_BGK.f90 +++ b/src/timedisc/timedisc_TimeStep_BGK.f90 @@ -53,11 +53,13 @@ SUBROUTINE TimeStep_BGK() USE MOD_Particle_MPI ,ONLY: IRecvNbOfParticles, MPIParticleSend,MPIParticleRecv,SendNbOfparticles USE MOD_Particle_MPI_Vars ,ONLY: DoParticleLatencyHiding USE MOD_Globals ,ONLY: CollectiveStop +USE MOD_Particle_MPI_Boundary_Sampling, ONLY: ExchangeChemSurfData #endif /*USE_MPI*/ USE MOD_BGK ,ONLY: BGK_main, BGK_DSMC_main USE MOD_BGK_Vars ,ONLY: CoupledBGKDSMC,DoBGKCellAdaptation USE MOD_SurfaceModel_Porous ,ONLY: PorousBoundaryRemovalProb_Pressure -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, DoChemSurface +USE MOD_Particle_SurfChemFlux USE MOD_DSMC_ParticlePairing ,ONLY: GeoCoordToMap2D ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -79,6 +81,14 @@ SUBROUTINE TimeStep_BGK() CALL ParticleSurfaceflux() END IF +IF (DoChemSurface) THEN + CALL ExchangeChemSurfData() + IF (time.GT.0.0) THEN + CALL ParticleSurfChemFlux() + CALL ParticleSurfDiffusion() + END IF +END IF + DO iPart=1,PDM%ParticleVecLength IF (PDM%ParticleInside(iPart)) THEN ! Variable time step: getting the right time step for the particle (can be constant across an element) diff --git a/src/timedisc/timedisc_TimeStep_FPFlow.f90 b/src/timedisc/timedisc_TimeStep_FPFlow.f90 index 315969555..68e1765c0 100644 --- a/src/timedisc/timedisc_TimeStep_FPFlow.f90 +++ b/src/timedisc/timedisc_TimeStep_FPFlow.f90 @@ -48,11 +48,13 @@ SUBROUTINE TimeStep_FPFlow() USE MOD_Part_Tools ,ONLY: CalcPartSymmetryPos #if USE_MPI USE MOD_Particle_MPI ,ONLY: IRecvNbOfParticles, MPIParticleSend,MPIParticleRecv,SendNbOfparticles +USE MOD_Particle_MPI_Boundary_Sampling, ONLY: ExchangeChemSurfData #endif /*USE_MPI*/ USE MOD_FPFlow ,ONLY: FPFlow_main, FP_DSMC_main USE MOD_FPFlow_Vars ,ONLY: CoupledFPDSMC USE MOD_SurfaceModel_Porous ,ONLY: PorousBoundaryRemovalProb_Pressure -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, DoChemSurface +USE MOD_Particle_SurfChemFlux ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -67,6 +69,14 @@ SUBROUTINE TimeStep_FPFlow() CALL ParticleSurfaceflux() END IF +IF (DoChemSurface) THEN + CALL ExchangeChemSurfData() + IF (time.GT.0.0) THEN + CALL ParticleSurfChemFlux() + CALL ParticleSurfDiffusion() + END IF +END IF + DO iPart=1,PDM%ParticleVecLength IF (PDM%ParticleInside(iPart)) THEN ! Variable time step: getting the right time step for the particle (can be constant across an element) From ba5e23aa57395f6459dd1dac011bbe9235b54f11 Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Wed, 22 Nov 2023 11:54:08 +0100 Subject: [PATCH 104/222] Add LoadBalance step for the SurfaceChemflux --- src/particles/boundary/particle_boundary_init.f90 | 2 +- .../emission/particle_surface_chemflux.f90 | 15 +++++++++++++++ src/particles/particle_init.f90 | 2 +- src/particles/surfacemodel/surfacemodel_init.f90 | 3 +++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/particles/boundary/particle_boundary_init.f90 b/src/particles/boundary/particle_boundary_init.f90 index e19f480cb..9ba3dd190 100644 --- a/src/particles/boundary/particle_boundary_init.f90 +++ b/src/particles/boundary/particle_boundary_init.f90 @@ -427,7 +427,7 @@ SUBROUTINE InitializeVariablesPartBoundary() IF(TRIM(SpeciesDatabase).EQ.'none') & CALL abort(__STAMP__,'ERROR in InitializeVariablesPartBoundary: SpeciesDatabase is required for the boundary #', iPartBound) CASE (20) - PartBound%Reactive(iPartBound) = .FALSE. + PartBound%Reactive(iPartBound) = .TRUE. CASE (SEE_MODELS_ID) ! SEE models require reactive BC PartBound%Reactive(iPartBound) = .TRUE. diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index e27c6d1c8..a4dc97a71 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -68,6 +68,7 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo !#endif /*IMPA*/ #if USE_LOADBALANCE +USE MOD_LoadBalance_Vars ,ONLY: nSurfacefluxPerElem USE MOD_LoadBalance_Timers ,ONLY: LBStartTime, LBElemSplitTime, LBPauseTime #endif /*USE_LOADBALANCE*/ ! IMPLICIT VARIABLE HANDLING @@ -393,6 +394,10 @@ SUBROUTINE ParticleSurfChemFlux() ! 3.) Insert the product species into the gas phase DO iSpec = 1, nSpecies +#if USE_LOADBALANCE + CALL LBStartTime(tLBStart) +#endif /*USE_LOADBALANCE*/ + IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfElemMPF).GE.1) THEN ! Define the necessary variables @@ -444,7 +449,14 @@ SUBROUTINE ParticleSurfChemFlux() CALL SetSurfacefluxVelocities(2,iSpec,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) PartsEmitted = PartsEmitted + PartInsSubSide +#if USE_LOADBALANCE + !used for calculating LoadBalance of tCurrent(LB_SURFFLUX) + nSurfacefluxPerElem(ElemID)=nSurfacefluxPerElem(ElemID)+PartInsSubSide +#endif /*USE_LOADBALANCE*/ END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) +#if USE_LOADBALANCE + CALL LBElemSplitTime(ElemID,tLBStart) +#endif /*USE_LOADBALANCE*/ END IF ! iSide IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'ERROR in ParticleSurfChemFlux: NbrOfParticle.NE.iPartTotal') @@ -473,6 +485,9 @@ SUBROUTINE ParticleSurfChemFlux() PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle +#if USE_LOADBALANCE + CALL LBPauseTime(LB_SURFFLUX,tLBStart) +#endif /*USE_LOADBALANCE*/ IF (NbrOfParticle.NE.PartsEmitted) THEN ! should be equal for including the following lines in tSurfaceFlux diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 3e38358c9..314273566 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -345,7 +345,7 @@ SUBROUTINE InitParticles() IF(PartBound%UseRotPeriodicBC) CALL InitRotPeriodicMapping() IF(PartBound%UseInterPlaneBC) CALL InitRotPeriodicInterPlaneMapping() ! Initialize surface sampling (the following IF arguments have to be considered in FinalizeParticleBoundarySampling as well) -IF (WriteMacroSurfaceValues.OR.DSMC%CalcSurfaceVal.OR.ANY(PartBound%Reactive).OR.(SurfChemReac%NumOfReact.GT.0)) THEN +IF (WriteMacroSurfaceValues.OR.DSMC%CalcSurfaceVal.OR.ANY(PartBound%Reactive)) THEN CALL InitParticleBoundarySampling() CALL InitAdaptiveWallTemp() END IF diff --git a/src/particles/surfacemodel/surfacemodel_init.f90 b/src/particles/surfacemodel/surfacemodel_init.f90 index ab9b5c091..750f2fbf3 100644 --- a/src/particles/surfacemodel/surfacemodel_init.f90 +++ b/src/particles/surfacemodel/surfacemodel_init.f90 @@ -213,6 +213,9 @@ SUBROUTINE FinalizeSurfaceModel() SDEALLOCATE(SurfChemReac%EqConstant) SDEALLOCATE(SurfChemReac%DissOrder) SDEALLOCATE(SurfChemReac%StickCoeff) +SDEALLOCATE(SurfChemReac%DissociativeAds) +SDEALLOCATE(SurfChemReac%AdsorbedProduct) +SDEALLOCATE(SurfChemReac%GasProduct) SDEALLOCATE(SurfChemReac%E_initial) SDEALLOCATE(SurfChemReac%W_interact) SDEALLOCATE(SurfChemReac%C_a) From 57ea9dee765edee41bed21275ad667d72924fac2 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Thu, 23 Nov 2023 18:37:46 +0100 Subject: [PATCH 105/222] Simplified the treatment of the VeloRotRef in the interplane boundary condition --- .../boundary/particle_boundary_condition.f90 | 32 +++++++------------ 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/src/particles/boundary/particle_boundary_condition.f90 b/src/particles/boundary/particle_boundary_condition.f90 index 17bf7039a..b919db94d 100644 --- a/src/particles/boundary/particle_boundary_condition.f90 +++ b/src/particles/boundary/particle_boundary_condition.f90 @@ -543,7 +543,7 @@ SUBROUTINE RotPeriodicInterPlaneBoundary(PartID,SideID,ElemID,IsInterPlanePart) ELSE IF(DeleteOrCloneProb.GT.1.0) THEN NewPartNumber = INT(DeleteOrCloneProb) - 1 DeleteOrCloneProb = DeleteOrCloneProb - INT(DeleteOrCloneProb) - CALL RANDOM_NUMBER(RanNum) + CALL RANDOM_NUMBER(RanNum) IF(RanNum.LE.DeleteOrCloneProb) THEN NewPartNumber = NewPartNumber + 1 END IF @@ -566,7 +566,7 @@ SUBROUTINE RotPeriodicInterPlaneBoundary(PartID,SideID,ElemID,IsInterPlanePart) ! For creating inter particles: ! - LastPartPos(1:3,NewPartID) must be redefined as long as LastPartPos is set to PartState in CreateParticle routine ! - ParticleInside for InterParticles must be .FALSE. in order to avoid error looping over the original PDM%ParticleVecLength - ! in ParticleTriaTracking() routine. The inside flag is set to .TRUE. + ! in ParticleTriaTracking() routine. The inside flag is set to .TRUE. ! when we loop over all inter particle in SingleParticleTriaTracking routine ! in case of sub cycling step particle information befor sub cycling must be used => interplane particle can act like origin particle IF(RotRefSubTimeStep) THEN @@ -716,29 +716,19 @@ SUBROUTINE RotPeriodicInterPlaneBoundary(PartID,SideID,ElemID,IsInterPlanePart) ! (5) Treatment of velocity in rotational frame of reference IF(UseRotRefFrame) THEN - ! Setting the PartState to the POI to determine whether the particle moved into a RotRefFrame (is later overwritten anyway) - PartState(1:3,PartID) = POI_rotated(1:3) - ! Check is repeated in the FUNCTION InRotRefFrameCheck at the current PartState(1:3) - IF(InRotRefFrameCheck(PartID)) THEN - ! Particle moved into a RotRefFrame - IF(PDM%InRotRefFrame(PartID)) THEN - ! Particle comes from a RotRefFrame: rotate the old PartVeloRotRef - Velo_old(1:3) = PartVeloRotRef(1:3,PartID) - PartVeloRotRef(1:3,PartID) = RotateVectorAroundAxis(Velo_old(1:3),PartBound%RotPeriodicAxis,RotAlpha) - ELSE - ! Particle comes from an inertial frame: initialize the new PartVeloRotRef - PartVeloRotRef(1:3,PartID) = PartState(4:6,PartID) - CROSS(RotRefFrameOmega(1:3),PartState(1:3,PartID)) - END IF - ! Calculate the acceleration - PartVeloRotRef(1:3,PartID) = PartVeloRotRef(1:3,PartID) + CalcPartRHSRotRefFrame(PartState(1:3,PartID),PartVeloRotRef(1:3,PartID)) & - * dtVar * (1.0 - TrackInfo%alpha/TrackInfo%lengthPartTrajectory) - ELSE + ! Check from which frame are we coming from and adapt logical accordingly (assuming that an interplane is ALWAYS between two different reference frames) + IF(PDM%InRotRefFrame(PartID)) THEN + ! Particle comes from the rotational frame and CONSEQUENTLY moves to the inertial frame PartVeloRotRef(1:3,PartID) = 0. + PDM%InRotRefFrame(PartID) = .FALSE. + ELSE + ! Particle comes from an inertial frame: initialize the new PartVeloRotRef at the target location + PartVeloRotRef(1:3,PartID) = PartState(4:6,PartID) - CROSS(RotRefFrameOmega(1:3),PartState_rotated(1:3)) + PDM%InRotRefFrame(PartID) = .TRUE. END IF - PDM%InRotRefFrame(PartID) = InRotRefFrameCheck(PartID) END IF -! (7) Track the particle, moving inside the domain through the interplane BC +! (6) Track the particle, moving inside the domain through the interplane BC ParticleFound = .FALSE. PartState(1:3,PartID) = PartState_rotated(1:3) LastPartPos(1:3,PartID) = LastPartPos_rotated(1:3) From 744f94ab88d4b3b493610ad0aa517aca2aaf1ffb Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Mon, 27 Nov 2023 12:02:14 +0100 Subject: [PATCH 106/222] Separate the variables of SurfChemReac --- .../boundary/particle_boundary_sampling.f90 | 10 +- src/particles/dsmc/dsmc_polyatomic_model.f90 | 1 - .../emission/particle_surface_chemflux.f90 | 144 +++---- .../emission/particle_surface_flux.f90 | 6 +- .../emission/particle_surface_flux_init.f90 | 94 ++--- src/particles/particle_init.f90 | 6 +- .../surfacemodel/surfacemodel_chemistry.f90 | 370 ++++++++---------- .../surfacemodel/surfacemodel_init.f90 | 36 +- .../surfacemodel/surfacemodel_main.f90 | 4 +- .../surfacemodel/surfacemodel_vars.f90 | 82 ++-- 10 files changed, 332 insertions(+), 421 deletions(-) diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index 5b5a1b8c5..2c5201923 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -461,7 +461,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) USE MOD_DSMC_Vars ,ONLY: DSMC USE MOD_Mesh_Vars ,ONLY: MeshFile USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac, ChemWallProp +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChem, ChemWallProp USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample,CalcSurfaceImpact USE MOD_Particle_Boundary_Vars ,ONLY: SurfSide2GlobalSide, GlobalSide2SurfSide, PartBound USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfSides, BoundaryWallTemp @@ -608,7 +608,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) END IF ! Add the heat flux due to catalytic reactions on the surface - IF(SurfChemReac%NumOfReact.GT.0) THEN + IF(SurfChem%NumOfReact.GT.0) THEN MacroSurfaceVal(4,p,q,OutputCounter) = MacroSurfaceVal(4,p,q,OutputCounter) + SUM(ChemWallProp(:,2,p, q, iSurfSide)) & / (SurfSideArea(p,q,iSurfSide)*TimeSampleTemp) END IF @@ -706,7 +706,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) #endif /*USE_MPI*/ CALL WriteSurfSampleToHDF5(TRIM(MeshFile),ActualTime) -IF(SurfChemReac%NumOfReact.GT.0) CALL WriteSurfSampleChemToHDF5(TRIM(MeshFile),ActualTime) +IF(SurfChem%NumOfReact.GT.0) CALL WriteSurfSampleChemToHDF5(TRIM(MeshFile),ActualTime) MacroSurfaceVal = 0. MacroSurfaceSpecVal = 0. @@ -904,7 +904,7 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) USE MOD_HDF5_Output ,ONLY: WriteAttributeToHDF5,WriteArrayToHDF5,WriteHDF5Header USE MOD_IO_HDF5 USE MOD_MPI_Shared_Vars ,ONLY: mySurfRank -USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp, SurfChemReac +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp, SurfChem USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample, SurfSideArea USE MOD_Particle_Boundary_Vars ,ONLY: nOutputSides, nComputeNodeSurfSides USE MOD_Particle_boundary_Vars ,ONLY: nComputeNodeSurfOutputSides,offsetComputeNodeSurfOutputSide @@ -937,7 +937,7 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) REAL, ALLOCATABLE :: MacroSurfaceSpecChemVal(:,:,:,:,:) REAL, ALLOCATABLE :: MacroSurfaceHeatVal(:,:,:,:) !=================================================================================================================================== -nReac = SurfChemReac%NumOfReact +nReac = SurfChem%NumOfReact #if USE_MPI ! Return if not a sampling leader diff --git a/src/particles/dsmc/dsmc_polyatomic_model.f90 b/src/particles/dsmc/dsmc_polyatomic_model.f90 index 1c75eb096..98b10c67c 100644 --- a/src/particles/dsmc/dsmc_polyatomic_model.f90 +++ b/src/particles/dsmc/dsmc_polyatomic_model.f90 @@ -190,7 +190,6 @@ SUBROUTINE DSMC_SetInternalEnr(iSpec, iInit, iPart, init_or_sf, iReac) USE MOD_Particle_Boundary_Vars ,ONLY: PartBound USE MOD_DSMC_Relaxation ,ONLY: DSMC_SetInternalEnr_Diatomic ! USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly -USE MOD_SurfaceModel_Vars ,ONLY: SurfChemReac ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index a4dc97a71..48029f412 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -56,7 +56,7 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Timedisc_Vars ,ONLY: dt USE MOD_Particle_Surfaces_Vars USE MOD_Particle_Boundary_Vars -USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win,SurfChemReac, ChemWallProp, ChemDesorpWall +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win, SurfChem, SurfChemReac, ChemWallProp, ChemDesorpWall USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle USE MOD_Particle_SurfFlux ,ONLY: SetSurfacefluxVelocities, CalcPartPosTriaSurface, DefineSideDirectVec2D USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr @@ -94,19 +94,19 @@ SUBROUTINE ParticleSurfChemFlux() INTEGER :: iReac, ReactantCount, BoundID, nSF INTEGER :: iVal, iReactant, iValReac, SurfSideID, iBias INTEGER :: SubP, SubQ -INTEGER :: SurfReacBias(SurfChemReac%NumOfReact) +INTEGER :: SurfReacBias(SurfChem%NumOfReact) #if USE_LOADBALANCE REAL :: tLBStart #endif /*USE_LOADBALANCE*/ !=================================================================================================================================== ! 1.) Determine the surface parameters -nSF = SurfChemReac%CatBoundNum +nSF = SurfChem%CatBoundNum SubP = TrackInfo%p SubQ = TrackInfo%q DO iSF = 1, nSF - BoundID = SurfChemReac%Surfaceflux(iSF)%BC - IF(ANY(SurfChemReac%PSMap(BoundID)%PureSurfReac)) THEN + BoundID = SurfChem%Surfaceflux(iSF)%BC + IF(ANY(SurfChem%PSMap(BoundID)%PureSurfReac)) THEN DO iSide = 1, BCdata_auxSF(BoundID)%SideNumber BCSideID=BCdata_auxSF(BoundID)%SideList(iSide) @@ -140,27 +140,27 @@ SUBROUTINE ParticleSurfChemFlux() END IF ! Randomize the order in which the reactions are called to remove biases - SurfReacBias = RemoveBias(SurfChemReac%NumOfReact) + SurfReacBias = RemoveBias(SurfChem%NumOfReact) ! Loop over the different types of pure surface reactions - DO iBias = 1, SurfChemReac%NumOfReact + DO iBias = 1, SurfChem%NumOfReact iReac = SurfReacBias(iBias) - IF (SurfChemReac%PSMap(BoundID)%PureSurfReac(iReac)) THEN + IF (SurfChem%PSMap(BoundID)%PureSurfReac(iReac)) THEN ! 2.) Calculate the number of newly created products and update the surface properties - SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) + SELECT CASE (TRIM(SurfChemReac(iReac)%ReactType)) ! 2a) Langmuir-Hinshelwood reaction with instantaneous desorption (Arrhenius model) CASE('LHD') AdsDens = 1. Coverage = 1. ! Product of the reactant coverage values - DO iVal=1,SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iVal).GT.0) THEN - iSpec = SurfChemReac%Reactants(iReac,iVal) + DO iVal=1,SIZE(SurfChemReac(iReac)%Reactants(:)) + IF(SurfChemReac(iReac)%Reactants(iVal).GT.0) THEN + iSpec = SurfChemReac(iReac)%Reactants(iVal) ! Test for multiples of the same reactant - ReactantCount = COUNT(SurfChemReac%Reactants(iReac,:).EQ.iSpec) - IF(iSpec.NE.SurfChemReac%SurfSpecies) THEN + ReactantCount = COUNT(SurfChemReac(iReac)%Reactants(:).EQ.iSpec) + IF(iSpec.NE.SurfChem%SurfSpecies) THEN Coverage = Coverage * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) ! Get the particle density per surface area from the coverage AdsDens = AdsDens * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) * SurfMolAbs @@ -169,18 +169,18 @@ SUBROUTINE ParticleSurfChemFlux() END DO ! Determine the reaction energy in dependence of the surface coverage [J] - BetaCoeff = SurfChemReac%HeatAccommodation(iReac) - ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) * BoltzmannConst + BetaCoeff = SurfChemReac(iReac)%HeatAccommodation + ReacHeat = (SurfChemReac(iReac)%EReact - Coverage*SurfChemReac(iReac)%EScale) * BoltzmannConst - nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) + nu = SurfChemReac(iReac)%Prefactor + E_act = SurfChemReac(iReac)%ArrheniusEnergy ! Calculate the rate in dependence of the temperature and coverage Rate = nu * AdsDens * exp(-E_act/WallTemp) ! Energy in K - DO iVal=1,SIZE(SurfChemReac%Products(iReac,:)) - IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN - iSpec = SurfChemReac%Products(iReac,iVal) + DO iVal=1,SIZE(SurfChemReac(iReac)%Products(:)) + IF (SurfChemReac(iReac)%Products(iVal).NE.0) THEN + iSpec = SurfChemReac(iReac)%Products(iVal) ! Randomize the reaction process CALL RANDOM_NUMBER(RanNum) @@ -189,10 +189,10 @@ SUBROUTINE ParticleSurfChemFlux() ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) = Rate * dt * Area * (-LOG(RanNum)) / ReactantCount + & ChemDesorpWall(iSpec, 1, SubP, SubQ, SurfSideID) - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN + DO iValReac=1, SIZE(SurfChemReac(iReac)%Reactants(:)) + IF (SurfChemReac(iReac)%Reactants(iValReac).NE.0) THEN + iReactant = SurfChemReac(iReac)%Reactants(iValReac) + IF(iReactant.NE.SurfChem%SurfSpecies) THEN Coverage = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) ELSE Coverage = 1. @@ -212,10 +212,10 @@ SUBROUTINE ParticleSurfChemFlux() IF(INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8).GE.1) THEN ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) & + INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) * ReacHeat * BetaCoeff - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN + DO iValReac=1, SIZE(SurfChemReac(iReac)%Reactants(:)) + IF(SurfChemReac(iReac)%Reactants(iValReac).NE.0) THEN + iReactant = SurfChemReac(iReac)%Reactants(iValReac) + IF(iReactant.NE.SurfChem%SurfSpecies) THEN ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) & - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8)/SurfMol END IF @@ -230,12 +230,12 @@ SUBROUTINE ParticleSurfChemFlux() Coverage = 1. AdsDens = 1. ! Product of the reactant coverage values - DO iVal=1,SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iVal).GT.0) THEN - iSpec = SurfChemReac%Reactants(iReac,iVal) + DO iVal=1,SIZE(SurfChemReac(iReac)%Reactants(:)) + IF(SurfChemReac(iReac)%Reactants(iVal).GT.0) THEN + iSpec = SurfChemReac(iReac)%Reactants(iVal) ! Test for multiples of the same reactant - ReactantCount = COUNT(SurfChemReac%Reactants(iReac,:).EQ.iSpec) - IF(iSpec.NE.SurfChemReac%SurfSpecies) THEN + ReactantCount = COUNT(SurfChemReac(iReac)%Reactants(:).EQ.iSpec) + IF(iSpec.NE.SurfChem%SurfSpecies) THEN Coverage = Coverage * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) ! Calculate the absolute particle density per unit element AdsDens = AdsDens * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) * SurfMolAbs @@ -245,10 +245,10 @@ SUBROUTINE ParticleSurfChemFlux() ! Determine the reaction energy in dependence of the surface coverage [J] ! Complete accomodation due to the intermediate desorption step - ReacHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) * BoltzmannConst + ReacHeat = (SurfChemReac(iReac)%EReact - Coverage*SurfChemReac(iReac)%EScale) * BoltzmannConst - nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) + nu = SurfChemReac(iReac)%Prefactor + E_act = SurfChemReac(iReac)%ArrheniusEnergy ! Calculate the rate in dependence of the temperature and coverage Rate = nu * AdsDens * exp(-E_act/WallTemp)! Energy in K @@ -258,14 +258,14 @@ SUBROUTINE ParticleSurfChemFlux() ! Reaction product number DesCount = Rate * dt * Area * (-LOG(RanNum))/(SurfMol*ReactantCount) - DO iVal=1,SIZE(SurfChemReac%Products(iReac,:)) - IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN - iSpec = SurfChemReac%Products(iReac,iVal) + DO iVal=1,SIZE(SurfChemReac(iReac)%Products(:)) + IF (SurfChemReac(iReac)%Products(iVal).NE.0) THEN + iSpec = SurfChemReac(iReac)%Products(iVal) - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF (SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN + DO iValReac=1, SIZE(SurfChemReac(iReac)%Reactants(:)) + IF (SurfChemReac(iReac)%Reactants(iValReac).NE.0) THEN + iReactant = SurfChemReac(iReac)%Reactants(iValReac) + IF(iReactant.NE.SurfChem%SurfSpecies) THEN Coverage = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) ELSE Coverage = 1. @@ -289,10 +289,10 @@ SUBROUTINE ParticleSurfChemFlux() ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) = PartBound%MaxCoverage(BoundID, iSpec) END IF ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) + DesCount*ReacHeat*SurfMol - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN + DO iValReac=1, SIZE(SurfChemReac(iReac)%Reactants(:)) + IF(SurfChemReac(iReac)%Reactants(iValReac).NE.0) THEN + iReactant = SurfChemReac(iReac)%Reactants(iValReac) + IF(iReactant.NE.SurfChem%SurfSpecies) THEN ChemWallProp(iReactant,1, SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1,SubP,SubQ,SurfSideID) - DesCount END IF END IF @@ -303,16 +303,16 @@ SUBROUTINE ParticleSurfChemFlux() ! c) Thermal desorption (Polanyi-Wigner equation) CASE('D') - DO iVal=1, SIZE(SurfChemReac%Products(iReac,:)) - IF (SurfChemReac%Products(iReac,iVal).NE.0) THEN - iSpec = SurfChemReac%Products(iReac,iVal) + DO iVal=1, SIZE(SurfChemReac(iReac)%Products(:)) + IF (SurfChemReac(iReac)%Products(iVal).NE.0) THEN + iSpec = SurfChemReac(iReac)%Products(iVal) ! Number of adsorbed particles on the subside - IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN + IF(ANY(SurfChemReac(iReac)%Reactants(:).NE.0)) THEN + DO iValReac=1, SIZE(SurfChemReac(iReac)%Reactants(:)) + IF(SurfChemReac(iReac)%Reactants(iValReac).NE.0) THEN + iReactant = SurfChemReac(iReac)%Reactants(iValReac) + IF(iReactant.NE.SurfChem%SurfSpecies) THEN Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) ELSE Coverage = 1. @@ -328,22 +328,22 @@ SUBROUTINE ParticleSurfChemFlux() AdsDens = Coverage * SurfMolAbs ! Calculate the desorption energy in dependence of the coverage [J] - DesHeat = (SurfChemReac%EReact(iReac) - Coverage*SurfChemReac%EScale(iReac)) * BoltzmannConst + DesHeat = (SurfChemReac(iReac)%EReact - Coverage*SurfChemReac(iReac)%EScale) * BoltzmannConst ! Define the variables - DissOrder = SurfChemReac%DissOrder(iReac) - nu = SurfChemReac%Prefactor(iReac) + DissOrder = SurfChemReac(iReac)%DissOrder + nu = SurfChemReac(iReac)%Prefactor ! Calculate the desorption prefactor in dependence of coverage and temperature of the boundary IF(nu.EQ.0.) THEN - nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) + nu = 10.**(SurfChemReac(iReac)%C_a + SurfChemReac(iReac)%C_b * Coverage) IF (DissOrder.EQ.2) THEN ! Convert the prefactor to coverage values for the associative desorption - nu = 10.**(SurfChemReac%C_a(iReac) + SurfChemReac%C_b(iReac) * Coverage) *10.**(15) + nu = 10.**(SurfChemReac(iReac)%C_a + SurfChemReac(iReac)%C_b * Coverage) *10.**(15) !! END IF END IF - E_act = SurfChemReac%E_initial(iReac) + Coverage * SurfChemReac%W_interact(iReac) + E_act = SurfChemReac(iReac)%E_initial + Coverage * SurfChemReac(iReac)%W_interact Rate = nu * AdsDens**DissOrder * exp(-E_act/WallTemp) ! Energy in K ! Randomize the desorption process CALL RANDOM_NUMBER(RanNum) @@ -361,11 +361,11 @@ SUBROUTINE ParticleSurfChemFlux() IF(INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/Species(iSpec)%MacroParticleFactor).GE.1) THEN ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) & - INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8) * DesHeat - IF(ANY(SurfChemReac%Reactants(iReac,:).NE.0)) THEN - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - IF (iReactant.NE.SurfChemReac%SurfSpecies) THEN + IF(ANY(SurfChemReac(iReac)%Reactants(:).NE.0)) THEN + DO iValReac=1, SIZE(SurfChemReac(iReac)%Reactants(:)) + IF(SurfChemReac(iReac)%Reactants(iValReac).NE.0) THEN + iReactant = SurfChemReac(iReac)%Reactants(iValReac) + IF (iReactant.NE.SurfChem%SurfSpecies) THEN ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) & - DissOrder*INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID),8)/SurfMol END IF @@ -558,7 +558,7 @@ SUBROUTINE ParticleSurfDiffusion() USE MOD_Particle_Boundary_Vars USE MOD_SurfaceModel USE MOD_SurfaceModel_Chemistry -USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win,SurfChemReac, ChemWallProp +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win, SurfChem, ChemWallProp USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC !#if defined(IMPA) || defined(ROS) @@ -588,7 +588,7 @@ SUBROUTINE ParticleSurfDiffusion() REAL :: tLBStart #endif /*USE_LOADBALANCE*/ !=================================================================================================================================== -CatBoundNum = SurfChemReac%CatBoundNum +CatBoundNum = SurfChem%CatBoundNum SubP = TrackInfo%p SubQ = TrackInfo%q @@ -604,15 +604,15 @@ SUBROUTINE ParticleSurfDiffusion() SideNumber = lastSide - firstSide + 1 ! Average/diffusion over all catalytic boundaries -IF(SurfChemReac%TotDiffusion) THEN +IF(SurfChem%TotDiffusion) THEN DO iSpec = 1, nSpecies ChemWallProp(iSpec,1,SubP,SubQ,:) = SUM(ChemWallProp(iSpec,1,SubP,SubQ,:))/SideNumber END DO ! Diffusion over a single reactive boundary -ELSE IF(SurfChemReac%Diffusion) THEN +ELSE IF(SurfChem%Diffusion) THEN DO iSF = 1, CatBoundNum - BoundID = SurfChemReac%Surfaceflux(iSF)%BC + BoundID = SurfChem%Surfaceflux(iSF)%BC SideNumber = BCdata_auxSF(BoundID)%SideNumber ! Determine the sum of the coverage on all indivual subsides diff --git a/src/particles/emission/particle_surface_flux.f90 b/src/particles/emission/particle_surface_flux.f90 index fc5c4d1cc..c7a763c61 100644 --- a/src/particles/emission/particle_surface_flux.f90 +++ b/src/particles/emission/particle_surface_flux.f90 @@ -1183,7 +1183,7 @@ SUBROUTINE SetSurfacefluxVelocities(Mode,iSpec,iSF,iSample,jSample,iSide,BCSideI USE MOD_Particle_SurfaceFlux_Vars ,ONLY: tSurfaceFlux USE MOD_Mesh_Vars ,ONLY: SideToElem USE MOD_DSMC_Vars ,ONLY: AmbiPolarSFMapping, AmbipolElecVelo, DSMC -USE MOD_SurfaceModel_Vars ,ONLY: SurfChemReac +USE MOD_SurfaceModel_Vars ,ONLY: SurfChem ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -1217,8 +1217,8 @@ SUBROUTINE SetSurfacefluxVelocities(Mode,iSpec,iSF,iSample,jSample,iSide,BCSideI a = SF%SurfFluxSubSideData(iSample,jSample,iSide)%a_nIn CASE(2) ! 2: Surface flux at a boundary - SF => SurfChemReac%Surfaceflux(iSF) - a = SurfChemReac%SFAux(iSF)%a_nIn(iSample,jSample,iSide,iSpec) + SF => SurfChem%Surfaceflux(iSF) + a = SurfChem%SFAux(iSF)%a_nIn(iSample,jSample,iSide,iSpec) CASE(3) ! 3: Ambipolar diffusion: setting velocity of electrons ! Only insert electron for positively charged species diff --git a/src/particles/emission/particle_surface_flux_init.f90 b/src/particles/emission/particle_surface_flux_init.f90 index 7f56b5ed7..9dc844454 100644 --- a/src/particles/emission/particle_surface_flux_init.f90 +++ b/src/particles/emission/particle_surface_flux_init.f90 @@ -183,7 +183,7 @@ SUBROUTINE InitializeParticleSurfaceflux() CALL ReadInAndPrepareSurfaceFlux(MaxSurfacefluxBCs, nDataBC) ! Call to the reactive surfaces -IF (SurfChemReac%CatBoundNum.GT.0) CALL ReadInAndPrepareSurfChemFlux(nDataBC) +IF (SurfChem%CatBoundNum.GT.0) CALL ReadInAndPrepareSurfChemFlux(nDataBC) #if USE_MPI CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoPoissonRounding,1,MPI_LOGICAL,MPI_LAND,MPI_COMM_PICLAS,iError) !set T if this is for all procs @@ -289,8 +289,8 @@ SUBROUTINE InitializeParticleSurfaceflux() END DO !iSpec !initialize Surfaceflux-specific data -DO iSF=1,SurfChemReac%CatBoundNum - currentBC = SurfChemReac%Surfaceflux(iSF)%BC +DO iSF=1,SurfChem%CatBoundNum + currentBC = SurfChem%Surfaceflux(iSF)%BC IF (BCdata_auxSF(currentBC)%SideNumber.GT.0) THEN ! Loop over sides on the surface flux @@ -299,14 +299,14 @@ SUBROUTINE InitializeParticleSurfaceflux() ElemID = SideToElem(S2E_ELEM_ID,BCSideID) iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) SideID=GetGlobalNonUniqueSideID(offsetElem+ElemID,iLocSide) - IF (SurfChemReac%Surfaceflux(iSF)%AcceptReject) THEN + IF (SurfChem%Surfaceflux(iSF)%AcceptReject) THEN CALL GetBezierSampledAreas(SideID=SideID,BezierSampleN=BezierSampleN & - ,BezierSurfFluxProjection_opt=.NOT.SurfChemReac%Surfaceflux(iSF)%VeloIsNormal & - ,SurfMeshSubSideAreas=tmp_SubSideAreas,DmaxSampleN_opt=SurfChemReac%Surfaceflux(iSF)%ARM_DmaxSampleN & + ,BezierSurfFluxProjection_opt=.NOT.SurfChem%Surfaceflux(iSF)%VeloIsNormal & + ,SurfMeshSubSideAreas=tmp_SubSideAreas,DmaxSampleN_opt=SurfChem%Surfaceflux(iSF)%ARM_DmaxSampleN & ,Dmax_opt=tmp_SubSideDmax,BezierControlPoints2D_opt=tmp_BezierControlPoints2D) ELSE IF (.NOT.TriaSurfaceFlux) THEN CALL GetBezierSampledAreas(SideID=SideID,BezierSampleN=BezierSampleN & - ,BezierSurfFluxProjection_opt=.NOT.SurfChemReac%Surfaceflux(iSF)%VeloIsNormal,SurfMeshSubSideAreas=tmp_SubSideAreas) + ,BezierSurfFluxProjection_opt=.NOT.SurfChem%Surfaceflux(iSF)%VeloIsNormal,SurfMeshSubSideAreas=tmp_SubSideAreas) ELSE ! TriaSurfaceFlux DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) tmp_SubSideAreas(iSample,jSample)=SurfMeshSubSideData(iSample,jSample,BCSideID)%area @@ -315,9 +315,9 @@ SUBROUTINE InitializeParticleSurfaceflux() ! Initialize surface flux CALL InitSurfChemFlux(iSF, iSide) ! Initialize acceptance-rejection on SF - IF (SurfChemReac%Surfaceflux(iSF)%AcceptReject) THEN + IF (SurfChem%Surfaceflux(iSF)%AcceptReject) THEN DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Dmax = tmp_SubSideDmax(iSample,jSample) + SurfChem%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Dmax = tmp_SubSideDmax(iSample,jSample) ! IF (.NOT.SurfChemReac%Surfaceflux(iSF)%VeloIsNormal) THEN ! ALLOCATE(SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample & ! ,iSide)%BezierControlPoints2D(1:2,0:NGeo,0:NGeo)) @@ -751,7 +751,7 @@ SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp) USE MOD_DSMC_Symmetry ,ONLY: DSMC_1D_CalcSymmetryArea, DSMC_2D_CalcSymmetryArea, DSMC_2D_CalcSymmetryAreaSubSides USE MOD_DSMC_Vars ,ONLY: RadialWeighting USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle -USE MOD_SurfaceModel_Vars ,ONLY: SurfChemReac +USE MOD_SurfaceModel_Vars ,ONLY: SurfChem ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -833,10 +833,10 @@ SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp) END DO END DO - DO iSF=1,SurfChemReac%CatBoundNum - IF (TmpMapToBC(iBC).EQ.SurfChemReac%Surfaceflux(iSF)%BC) THEN !only surfacefluxes with iBC - ALLOCATE(SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(SurfFluxSideSize(1),SurfFluxSideSize(2),1:TmpSideNumber(iBC))) - ALLOCATE(SurfChemReac%SFAux(iSF)%a_nIn(SurfFluxSideSize(1),SurfFluxSideSize(2),1:TmpSideNumber(iBC),nSpecies)) + DO iSF=1,SurfChem%CatBoundNum + IF (TmpMapToBC(iBC).EQ.SurfChem%Surfaceflux(iSF)%BC) THEN !only surfacefluxes with iBC + ALLOCATE(SurfChem%Surfaceflux(iSF)%SurfFluxSubSideData(SurfFluxSideSize(1),SurfFluxSideSize(2),1:TmpSideNumber(iBC))) + ALLOCATE(SurfChem%SFAux(iSF)%a_nIn(SurfFluxSideSize(1),SurfFluxSideSize(2),1:TmpSideNumber(iBC),nSpecies)) END IF END DO @@ -1264,7 +1264,7 @@ SUBROUTINE InitSurfChemFlux(iSF, iSide) !=================================================================================================================================== ! MODULES USE MOD_Globals -USE MOD_SurfaceModel_Vars ,ONLY: SurfChemReac +USE MOD_SurfaceModel_Vars ,ONLY: SurfChem USE MOD_Globals_Vars ,ONLY: BoltzmannConst, PI USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, SurfMeshSubSideData, BCdata_auxSF USE MOD_Particle_Vars ,ONLY: Species, nSpecies @@ -1280,45 +1280,45 @@ SUBROUTINE InitSurfChemFlux(iSF, iSide) INTEGER :: iSpec, jSample, iSample, currentBC, BCSideID REAL :: vec_nIn(3), vec_t1(3), vec_t2(3), projFak, v_thermal, a !=================================================================================================================================== -currentBC = SurfChemReac%Surfaceflux(iSF)%BC +currentBC = SurfChem%Surfaceflux(iSF)%BC BCSideID=BCdata_auxSF(currentBC)%SideList(iSide) DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) vec_nIn = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn vec_t1 = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1 vec_t2 = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2 - IF (.NOT.SurfChemReac%Surfaceflux(iSF)%VeloIsNormal) THEN - projFak = DOT_PRODUCT(vec_nIn,SurfChemReac%Surfaceflux(iSF)%VeloVecIC) !VeloVecIC projected to inwards normal + IF (.NOT.SurfChem%Surfaceflux(iSF)%VeloIsNormal) THEN + projFak = DOT_PRODUCT(vec_nIn,SurfChem%Surfaceflux(iSF)%VeloVecIC) !VeloVecIC projected to inwards normal ELSE projFak = 1. END IF DO iSpec=1,nSpecies - v_thermal = SQRT(2.*BoltzmannConst*SurfChemReac%Surfaceflux(iSF)%MWTemperatureIC/Species(iSpec)%MassIC) !thermal speed + v_thermal = SQRT(2.*BoltzmannConst*SurfChem%Surfaceflux(iSF)%MWTemperatureIC/Species(iSpec)%MassIC) !thermal speed a = 0 !dummy for projected speed ratio in constant v-distri !-- compute total volume flow rate through surface - SELECT CASE(TRIM(SurfChemReac%Surfaceflux(iSF)%velocityDistribution)) + SELECT CASE(TRIM(SurfChem%Surfaceflux(iSF)%velocityDistribution)) CASE('constant') CASE('maxwell','maxwell_lpn') - a = SurfChemReac%Surfaceflux(iSF)%VeloIC * projFak / v_thermal !speed ratio proj. to inwards n (can be negative!) + a = SurfChem%Surfaceflux(iSF)%VeloIC * projFak / v_thermal !speed ratio proj. to inwards n (can be negative!) CASE DEFAULT CALL abort(__STAMP__,& 'ERROR in SurfaceFlux: Wrong velocity distribution!') END SELECT !-- store species-specific data in separate arrays to be able to re-use the surface flux types - SurfChemReac%SFAux(iSF)%a_nIn(iSample,jSample,iSide,iSpec) = a + SurfChem%SFAux(iSF)%a_nIn(iSample,jSample,iSide,iSpec) = a END DO !iSpec - SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%projFak = projFak - IF (.NOT.SurfChemReac%Surfaceflux(iSF)%VeloIsNormal) THEN - SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 & - = SurfChemReac%Surfaceflux(iSF)%VeloIC & - * DOT_PRODUCT(vec_t1,SurfChemReac%Surfaceflux(iSF)%VeloVecIC) !v in t1-dir - SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 & - = SurfChemReac%Surfaceflux(iSF)%VeloIC & - * DOT_PRODUCT(vec_t2,SurfChemReac%Surfaceflux(iSF)%VeloVecIC) !v in t2-dir + SurfChem%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%projFak = projFak + IF (.NOT.SurfChem%Surfaceflux(iSF)%VeloIsNormal) THEN + SurfChem%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 & + = SurfChem%Surfaceflux(iSF)%VeloIC & + * DOT_PRODUCT(vec_t1,SurfChem%Surfaceflux(iSF)%VeloVecIC) !v in t1-dir + SurfChem%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 & + = SurfChem%Surfaceflux(iSF)%VeloIC & + * DOT_PRODUCT(vec_t2,SurfChem%Surfaceflux(iSF)%VeloVecIC) !v in t2-dir ELSE - SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 = 0. !v in t1-dir - SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 = 0. !v in t2-dir + SurfChem%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 = 0. !v in t1-dir + SurfChem%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 = 0. !v in t2-dir END IF! .NOT.VeloIsNormal END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) @@ -1349,39 +1349,39 @@ SUBROUTINE ReadInAndPrepareSurfChemFlux(nDataBC) INTEGER :: iSF, iBound INTEGER :: CatBoundNum !=================================================================================================================================== -CatBoundNum = SurfChemReac%CatBoundNum -ALLOCATE(SurfChemReac%SurfaceFlux(1:CatBoundNum)) +CatBoundNum = SurfChem%CatBoundNum +ALLOCATE(SurfChem%SurfaceFlux(1:CatBoundNum)) ! Type for variables different from the regular surface flux type -ALLOCATE(SurfChemReac%SFAux(1:CatBoundNum)) +ALLOCATE(SurfChem%SFAux(1:CatBoundNum)) ! Initialize Surfaceflux to BC mapping -SurfChemReac%Surfaceflux(:)%BC=-1 +SurfChem%Surfaceflux(:)%BC=-1 iSF = 1 DO iBound=1,nPartBound - IF (SurfChemReac%BoundisChemSurf(iBound)) THEN - SurfChemReac%Surfaceflux(iSF)%BC = iBound + IF (SurfChem%BoundisChemSurf(iBound)) THEN + SurfChem%Surfaceflux(iSF)%BC = iBound iSF = iSF + 1 END IF END DO DO iSF = 1, CatBoundNum IF (TriaSurfaceFlux) THEN - SurfChemReac%Surfaceflux(iSF)%AcceptReject=.FALSE. + SurfChem%Surfaceflux(iSF)%AcceptReject=.FALSE. END IF - SurfChemReac%Surfaceflux(iSF)%Adaptive = .FALSE. + SurfChem%Surfaceflux(iSF)%Adaptive = .FALSE. ! get surfaceflux data - IF (SurfChemReac%Surfaceflux(iSF)%BC.LT.1 .OR. SurfChemReac%Surfaceflux(iSF)%BC.GT.nPartBound) THEN + IF (SurfChem%Surfaceflux(iSF)%BC.LT.1 .OR. SurfChem%Surfaceflux(iSF)%BC.GT.nPartBound) THEN CALL abort(__STAMP__, 'Chemistry Surfaceflux BCs must be between 1 and nPartBound!') - ELSE IF (BCdata_auxSF(SurfChemReac%Surfaceflux(iSF)%BC)%SideNumber.EQ. -1) THEN !not set yet - BCdata_auxSF(SurfChemReac%Surfaceflux(iSF)%BC)%SideNumber=0 + ELSE IF (BCdata_auxSF(SurfChem%Surfaceflux(iSF)%BC)%SideNumber.EQ. -1) THEN !not set yet + BCdata_auxSF(SurfChem%Surfaceflux(iSF)%BC)%SideNumber=0 nDataBC=nDataBC+1 END IF - SurfChemReac%Surfaceflux(iSF)%velocityDistribution = 'maxwell_lpn' - SurfChemReac%Surfaceflux(iSF)%VeloIC = 0. - SurfChemReac%Surfaceflux(iSF)%VeloIsNormal = .FALSE. - SurfChemReac%Surfaceflux(iSF)%MWTemperatureIC = PartBound%WallTemp(SurfChemReac%Surfaceflux(iSF)%BC) + SurfChem%Surfaceflux(iSF)%velocityDistribution = 'maxwell_lpn' + SurfChem%Surfaceflux(iSF)%VeloIC = 0. + SurfChem%Surfaceflux(iSF)%VeloIsNormal = .FALSE. + SurfChem%Surfaceflux(iSF)%MWTemperatureIC = PartBound%WallTemp(SurfChem%Surfaceflux(iSF)%BC) END DO !iSF END SUBROUTINE ReadInAndPrepareSurfChemFlux diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 314273566..243ae0081 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -263,7 +263,7 @@ SUBROUTINE InitParticles() USE MOD_Mesh_Vars ,ONLY: nElems USE MOD_SurfaceModel_Porous ,ONLY: InitPorousBoundaryCondition USE MOD_Particle_Boundary_Sampling ,ONLY: InitParticleBoundarySampling -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC,SurfChemReac,BulkElectronTempSEE +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC,BulkElectronTempSEE USE MOD_Particle_Boundary_Vars ,ONLY: PartBound USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod USE MOD_Particle_Vars ,ONLY: ParticlesInitIsDone,WriteMacroVolumeValues,WriteMacroSurfaceValues,nSpecies @@ -410,7 +410,7 @@ SUBROUTINE InitializeVariables() USE MOD_PICInit ,ONLY: InitPIC USE MOD_PICDepo_Vars ,ONLY: DoDeposition USE MOD_PICInterpolation_Vars ,ONLY: DoInterpolation -USE MOD_SurfaceModel_Vars ,ONLY: SurfChemReac +USE MOD_SurfaceModel_Vars ,ONLY: SurfChem #if USE_MPI USE MOD_Particle_MPI_Emission ,ONLY: InitEmissionComm USE MOD_Particle_MPI_Halo ,ONLY: IdentifyPartExchangeProcs @@ -442,7 +442,7 @@ SUBROUTINE InitializeVariables() ! initialization of surface model flags DoPoissonRounding = GETLOGICAL('Particles-DoPoissonRounding','.FALSE.') DoTimeDepInflow = GETLOGICAL('Particles-DoTimeDepInflow','.FALSE.') -SurfChemReac%NumOfReact = GETINT('Surface-NumOfReactions', '0') +SurfChem%NumOfReact = GETINT('Surface-NumOfReactions', '0') DelayTime = GETREAL('Part-DelayTime','0.') !--- Read Manual Time Step: Old variable name still supported ManualTimeStepParticle = GETREAL('Particles-ManualTimeStep') diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index 471ab0a38..055da738e 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -106,7 +106,7 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() USE MOD_ReadInTools USE MOD_PARTICLE_Vars ,ONLY: nSpecies, SpeciesDatabase USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, nPartBound -USE MOD_SurfaceModel_Vars ,ONLY: SurfChemReac, DoChemSurface +USE MOD_SurfaceModel_Vars ,ONLY: SurfChem, SurfChemReac, DoChemSurface ! USE MOD_Particle_Surfaces_Vars USE MOD_io_hdf5 USE MOD_HDF5_input, ONLY:ReadAttribute, DatasetExists, AttributeExists @@ -125,134 +125,74 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() CHARACTER(LEN=32) :: hilf INTEGER :: iReac, iReac2, iBound, iVal, err INTEGER :: ReadInNumOfReact -REAL, ALLOCATABLE :: StoichCoeff(:,:) !=================================================================================================================================== -IF(SurfChemReac%NumOfReact.LE.0) THEN +IF(SurfChem%NumOfReact.LE.0) THEN RETURN END IF -ReadInNumOfReact = SurfChemReac%NumOfReact +ReadInNumOfReact = SurfChem%NumOfReact IF(ReadInNumOfReact.GT.0) THEN DoChemSurface = .TRUE. END IF -SWRITE(*,*) '| Number of considered reaction paths on Surfaces: ', SurfChemReac%NumOfReact +SWRITE(*,*) '| Number of considered reaction paths on Surfaces: ', SurfChem%NumOfReact !---------------------------------------------------------------------------------------------------------------------------------- -ALLOCATE(StoichCoeff(nSpecies,2)) -ALLOCATE(SurfChemReac%ReactType(SurfChemReac%NumOfReact)) -SurfChemReac%ReactType = '0' -ALLOCATE(SurfChemReac%CatName(SurfChemReac%NumOfReact)) -SurfChemReac%CatName = '0' -ALLOCATE(SurfChemReac%Reactants(SurfChemReac%NumOfReact,2)) -SurfChemReac%Reactants = 0 -ALLOCATE(SurfChemReac%Products(SurfChemReac%NumOfReact,2)) -SurfChemReac%Products = 0 -ALLOCATE(SurfChemReac%Inhibition(SurfChemReac%NumOfReact)) -SurfChemReac%Inhibition = 0 -ALLOCATE(SurfChemReac%Promotion(SurfChemReac%NumOfReact)) -SurfChemReac%Promotion = 0 -ALLOCATE(SurfChemReac%BoundisChemSurf(nPartBound)) -SurfChemReac%BoundisChemSurf = .FALSE. -ALLOCATE(SurfChemReac%NumOfBounds(SurfChemReac%NumOfReact)) -SurfChemReac%NumOfBounds = 0 -ALLOCATE(SurfChemReac%BoundMap(SurfChemReac%NumOfReact)) -ALLOCATE(SurfChemReac%PSMap(nPartBound)) -SurfChemReac%CatBoundNum = 0 - +ALLOCATE(SurfChemReac(ReadInNumOfReact)) ! Surface map +ALLOCATE(SurfChem%BoundisChemSurf(nPartBound)) +SurfChem%BoundisChemSurf = .FALSE. +ALLOCATE(SurfChem%PSMap(nPartBound)) +SurfChem%CatBoundNum = 0 DO iBound=1, nPartBound - ALLOCATE(SurfChemReac%PSMap(iBound)%PureSurfReac(ReadInNumOfReact)) - SurfChemReac%PSMap(iBound)%PureSurfReac = .FALSE. + ALLOCATE(SurfChem%PSMap(iBound)%PureSurfReac(ReadInNumOfReact)) + SurfChem%PSMap(iBound)%PureSurfReac = .FALSE. END DO -! Adsorption parameter -ALLOCATE(SurfChemReac%S_initial(SurfChemReac%NumOfReact)) -SurfChemReac%S_initial = 0.0 -ALLOCATE(SurfChemReac%EqConstant(SurfChemReac%NumOfReact)) -SurfChemReac%EqConstant = 1.0 -ALLOCATE(SurfChemReac%DissOrder(SurfChemReac%NumOfReact)) -SurfChemReac%DissOrder = 0.0 -ALLOCATE(SurfChemReac%StickCoeff(SurfChemReac%NumOfReact)) -SurfChemReac%StickCoeff = 0.0 -ALLOCATE(SurfChemReac%DissociativeAds(SurfChemReac%NumOfReact)) -SurfChemReac%DissociativeAds = .FALSE. -ALLOCATE(SurfChemReac%AdsorbedProduct(SurfChemReac%NumOfReact)) -SurfChemReac%AdsorbedProduct = 0.0 -ALLOCATE(SurfChemReac%GasProduct(SurfChemReac%NumOfReact)) -SurfChemReac%GasProduct = 0.0 - -! Desorption parameter -ALLOCATE(SurfChemReac%E_initial(SurfChemReac%NumOfReact)) -SurfChemReac%E_initial = 0.0 -ALLOCATE(SurfChemReac%W_interact(SurfChemReac%NumOfReact)) -SurfChemReac%W_interact = 0.0 -ALLOCATE(SurfChemReac%C_a(SurfChemReac%NumOfReact)) -SurfChemReac%C_a = 0.0 -ALLOCATE(SurfChemReac%C_b(SurfChemReac%NumOfReact)) -SurfChemReac%C_b = 0.0 - -! General reaction parameter -ALLOCATE(SurfChemReac%Rate(SurfChemReac%NumOfReact)) -SurfChemReac%Rate = 0.0 -ALLOCATE(SurfChemReac%Prob(SurfChemReac%NumOfReact)) -SurfChemReac%Prob = 0.0 -ALLOCATE(SurfChemReac%ArrheniusEnergy(SurfChemReac%NumOfReact)) -SurfChemReac%ArrheniusEnergy = 0.0 -ALLOCATE(SurfChemReac%Prefactor(SurfChemReac%NumOfReact)) -SurfChemReac%Prefactor = 0.0 -ALLOCATE(SurfChemReac%EReact(SurfChemReac%NumOfReact)) -SurfChemReac%EReact = 0.0 -ALLOCATE(SurfChemReac%EScale(SurfChemReac%NumOfReact)) -SurfChemReac%EScale = 0.0 -ALLOCATE(SurfChemReac%HeatAccommodation(SurfChemReac%NumOfReact)) -SurfChemReac%HeatAccommodation = 0.0 - ! Get the reaction names, reactive species and boundaries DO iReac = 1, ReadInNumOfReact WRITE(UNIT=hilf,FMT='(I0)') iReac - SurfChemReac%CatName(iReac) = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-SurfName')) - SurfChemReac%Reactants(iReac,:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Reactants',2,'0,0') - SurfChemReac%Products(iReac,:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Products',2,'0,0') + SurfChemReac(iReac)%CatName = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-SurfName')) + SurfChemReac(iReac)%Reactants(:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Reactants',2,'0,0') + SurfChemReac(iReac)%Products(:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Products',2,'0,0') - SurfChemReac%NumOfBounds(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-NumOfBoundaries') - IF (SurfChemReac%NumOfBounds(iReac).EQ.0) THEN + SurfChemReac(iReac)%NumOfBounds = GETINT('Surface-Reaction'//TRIM(hilf)//'-NumOfBoundaries') + IF (SurfChemReac(iReac)%NumOfBounds.EQ.0) THEN CALL abort(__STAMP__,'ERROR: At least one boundary must be defined for each surface reaction!',iReac) END IF - SurfChemReac%BoundMap(iReac)%Boundaries = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Boundaries', & - SurfChemReac%NumOfBounds(iReac)) + SurfChemReac(iReac)%Boundaries = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Boundaries',SurfChemReac(iReac)%NumOfBounds) ! Define the surface model - PartBound%SurfaceModel(SurfChemReac%BoundMap(iReac)%Boundaries) = 20 + PartBound%SurfaceModel(SurfChemReac(iReac)%Boundaries) = 20 - DO iReac2 = 1, SurfChemReac%NumOfBounds(iReac) - SurfChemReac%BoundisChemSurf(SurfChemReac%BoundMap(iReac)%Boundaries(iReac2)) = .TRUE. + DO iReac2 = 1, SurfChemReac(iReac)%NumOfBounds + SurfChem%BoundisChemSurf(SurfChemReac(iReac)%Boundaries(iReac2)) = .TRUE. END DO ! Select pure surface reactions - DO iVal = 1, SurfChemReac%NumOfBounds(iReac) - iBound = SurfChemReac%BoundMap(iReac)%Boundaries(iVal) - SurfChemReac%PSMap(iBound)%PureSurfReac(iReac) = .TRUE. + DO iVal = 1, SurfChemReac(iReac)%NumOfBounds + iBound = SurfChemReac(iReac)%Boundaries(iVal) + SurfChem%PSMap(iBound)%PureSurfReac(iReac) = .TRUE. END DO END DO ! Determine the number of boundaries with a surface reaction on them DO iBound = 1, nPartBound - IF (SurfChemReac%BoundisChemSurf(iBound)) THEN - SurfChemReac%CatBoundNum = SurfChemReac%CatBoundNum + 1 + IF (SurfChem%BoundisChemSurf(iBound)) THEN + SurfChem%CatBoundNum = SurfChem%CatBoundNum + 1 END IF END DO ! Bulk species involved in the reactions -SurfChemReac%SurfSpecies = GETINT('Surface-Species','0') +SurfChem%SurfSpecies = GETINT('Surface-Species','0') ! Diffusion -SurfChemReac%Diffusion = GETLOGICAL('Surface-Diffusion', '.FALSE.') -SurfChemReac%TotDiffusion = GETLOGICAL('Surface-TotalDiffusion', '.FALSE.') +SurfChem%Diffusion = GETLOGICAL('Surface-Diffusion', '.FALSE.') +SurfChem%TotDiffusion = GETLOGICAL('Surface-TotalDiffusion', '.FALSE.') ! SpeciesDatabase -SurfChemReac%OverwriteCatParameters = GETLOGICAL('OverwriteCatParameters', '.FALSE.') +SurfChem%OverwriteCatParameters = GETLOGICAL('OverwriteCatParameters', '.FALSE.') IF (SpeciesDatabase.EQ.'none') THEN - SurfChemReac%OverwriteCatParameters = .TRUE. + SurfChem%OverwriteCatParameters = .TRUE. END IF IF(SpeciesDatabase.NE.'none') THEN @@ -262,77 +202,77 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() DO iReac = 1, ReadInNumOfReact WRITE(UNIT=hilf,FMT='(I0)') iReac - dsetname = TRIM('/Surface-Chemistry/'//TRIM(SurfChemReac%CatName(iReac))) + dsetname = TRIM('/Surface-Chemistry/'//TRIM(SurfChemReac(iReac)%CatName)) CALL DatasetExists(file_id_specdb,TRIM(dsetname),DataSetFound) IF(.NOT.DataSetFound)THEN - SurfChemReac%OverwriteCatParameters = .TRUE. + SurfChem%OverwriteCatParameters = .TRUE. SWRITE(*,*) 'WARNING: DataSet not found: ['//TRIM(dsetname)//'] ['//TRIM(SpeciesDatabase)//']' ELSE - CALL ReadAttribute(file_id_specdb,'Type',1,DatasetName = dsetname,StrScalar=SurfChemReac%ReactType(iReac)) + CALL ReadAttribute(file_id_specdb,'Type',1,DatasetName = dsetname,StrScalar=SurfChemReac(iReac)%ReactType) CALL AttributeExists(file_id_specdb,'Inhibition',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'Inhibition',1,DatasetName = dsetname,IntScalar=SurfChemReac%Inhibition(iReac)) + CALL ReadAttribute(file_id_specdb,'Inhibition',1,DatasetName = dsetname,IntScalar=SurfChemReac(iReac)%Inhibition) ELSE - SurfChemReac%Inhibition(iReac)= 0 + SurfChemReac(iReac)%Inhibition= 0 END IF CALL AttributeExists(file_id_specdb,'Promotion',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'Promotion',1,DatasetName = dsetname,IntScalar=SurfChemReac%Promotion(iReac)) + CALL ReadAttribute(file_id_specdb,'Promotion',1,DatasetName = dsetname,IntScalar=SurfChemReac(iReac)%Promotion) ELSE - SurfChemReac%Promotion(iReac)= 0 + SurfChemReac(iReac)%Promotion= 0 END IF CALL AttributeExists(file_id_specdb,'ReactHeat',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'ReactHeat',1,DatasetName = dsetname,RealScalar=SurfChemReac%EReact(iReac)) + CALL ReadAttribute(file_id_specdb,'ReactHeat',1,DatasetName = dsetname,RealScalar=SurfChemReac(iReac)%EReact) ELSE - SurfChemReac%EReact(iReac)= 0. + SurfChemReac(iReac)%EReact= 0. END IF CALL AttributeExists(file_id_specdb,'HeatScaling',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'HeatScaling',1,DatasetName = dsetname,RealScalar=SurfChemReac%EScale(iReac)) + CALL ReadAttribute(file_id_specdb,'HeatScaling',1,DatasetName = dsetname,RealScalar=SurfChemReac(iReac)%EScale) ELSE - SurfChemReac%EScale(iReac)= 0. + SurfChemReac(iReac)%EScale= 0. END IF CALL AttributeExists(file_id_specdb,'EnergyAccommodation',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'EnergyAccommodation',1,DatasetName = dsetname,RealScalar=SurfChemReac%HeatAccommodation(iReac)) + CALL ReadAttribute(file_id_specdb,'EnergyAccommodation',1,DatasetName = dsetname,RealScalar=SurfChemReac(iReac)%HeatAccommodation) ELSE - SurfChemReac%HeatAccommodation(iReac)= 0. + SurfChemReac(iReac)%HeatAccommodation= 0. END IF - SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) + SELECT CASE (TRIM(SurfChemReac(iReac)%ReactType)) CASE('A') - SurfChemReac%DissociativeAds(iReac) = GETLOGICAL('Surface-Reaction'//TRIM(hilf)//'-DissociativeAdsorption', '.FALSE.') + SurfChemReac(iReac)%DissociativeAds = GETLOGICAL('Surface-Reaction'//TRIM(hilf)//'-DissociativeAdsorption', '.FALSE.') CALL AttributeExists(file_id_specdb,'StickingCoefficient',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'StickingCoefficient',1,DatasetName = dsetname,RealScalar=SurfChemReac%S_initial(iReac)) + CALL ReadAttribute(file_id_specdb,'StickingCoefficient',1,DatasetName = dsetname,RealScalar=SurfChemReac(iReac)%S_initial) ELSE - SurfChemReac%S_initial(iReac)= 1. + SurfChemReac(iReac)%S_initial= 1. END IF CALL AttributeExists(file_id_specdb,'EqConstant',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'EqConstant',1,DatasetName = dsetname,RealScalar=SurfChemReac%EqConstant(iReac)) + CALL ReadAttribute(file_id_specdb,'EqConstant',1,DatasetName = dsetname,RealScalar=SurfChemReac(iReac)%EqConstant) ELSE - SurfChemReac%EqConstant(iReac)= 1. + SurfChemReac(iReac)%EqConstant= 1. END IF CALL AttributeExists(file_id_specdb,'DissOrder',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'DissOrder',1,DatasetName = dsetname,RealScalar=SurfChemReac%DissOrder(iReac)) + CALL ReadAttribute(file_id_specdb,'DissOrder',1,DatasetName = dsetname,RealScalar=SurfChemReac(iReac)%DissOrder) ELSE - SurfChemReac%DissOrder(iReac)= 1. + SurfChemReac(iReac)%DissOrder= 1. END IF ! Special case: dissociative adsorption - IF (SurfChemReac%DissociativeAds(iReac)) THEN + IF (SurfChemReac(iReac)%DissociativeAds) THEN CALL AttributeExists(file_id_specdb,'AdsorptionProduct',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'AdsorptionProduct',1,DatasetName = dsetname,IntScalar=SurfChemReac%AdsorbedProduct(iReac)) + CALL ReadAttribute(file_id_specdb,'AdsorptionProduct',1,DatasetName = dsetname,IntScalar=SurfChemReac(iReac)%AdsorbedProduct) ELSE CALL abort(__STAMP__,'Product not defined for the dissociative-adsorption') END IF CALL AttributeExists(file_id_specdb,'GasPhaseProduct',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'GasPhaseProduct',1,DatasetName = dsetname,IntScalar=SurfChemReac%GasProduct(iReac)) + CALL ReadAttribute(file_id_specdb,'GasPhaseProduct',1,DatasetName = dsetname,IntScalar=SurfChemReac(iReac)%GasProduct) ELSE CALL abort(__STAMP__,'Product not defined for the dissociative-adsorption') END IF @@ -341,85 +281,85 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() CASE('D') CALL AttributeExists(file_id_specdb,'LateralInteraction',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'LateralInteraction',1,DatasetName = dsetname,RealScalar=SurfChemReac%W_interact(iReac)) + CALL ReadAttribute(file_id_specdb,'LateralInteraction',1,DatasetName = dsetname,RealScalar=SurfChemReac(iReac)%W_interact) ELSE - SurfChemReac%W_interact(iReac)= 0. + SurfChemReac(iReac)%W_interact= 0. END IF CALL AttributeExists(file_id_specdb,'Ca',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'Ca',1,DatasetName = dsetname,RealScalar=SurfChemReac%C_a(iReac)) + CALL ReadAttribute(file_id_specdb,'Ca',1,DatasetName = dsetname,RealScalar=SurfChemReac(iReac)%C_a) ELSE - SurfChemReac%C_a(iReac)= 0. + SurfChemReac(iReac)%C_a= 0. END IF CALL AttributeExists(file_id_specdb,'Cb',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'Cb',1,DatasetName = dsetname,RealScalar=SurfChemReac%C_b(iReac)) + CALL ReadAttribute(file_id_specdb,'Cb',1,DatasetName = dsetname,RealScalar=SurfChemReac(iReac)%C_b) ELSE - SurfChemReac%C_b(iReac)= 0. + SurfChemReac(iReac)%C_b= 0. END IF CALL AttributeExists(file_id_specdb,'Prefactor',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'Prefactor',1,DatasetName = dsetname,RealScalar=SurfChemReac%Prefactor(iReac)) + CALL ReadAttribute(file_id_specdb,'Prefactor',1,DatasetName = dsetname,RealScalar=SurfChemReac(iReac)%Prefactor) ELSE - SurfChemReac%Prefactor(iReac)= 0. + SurfChemReac(iReac)%Prefactor= 0. END IF CALL AttributeExists(file_id_specdb,'Energy',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'Energy',1,DatasetName = dsetname,RealScalar=SurfChemReac%E_initial(iReac)) + CALL ReadAttribute(file_id_specdb,'Energy',1,DatasetName = dsetname,RealScalar=SurfChemReac(iReac)%E_initial) ELSE - SurfChemReac%E_initial(iReac)= 0. + SurfChemReac(iReac)%E_initial= 0. END IF CALL AttributeExists(file_id_specdb,'DissOrder',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'DissOrder',1,DatasetName = dsetname,RealScalar=SurfChemReac%DissOrder(iReac)) + CALL ReadAttribute(file_id_specdb,'DissOrder',1,DatasetName = dsetname,RealScalar=SurfChemReac(iReac)%DissOrder) ELSE - SurfChemReac%DissOrder(iReac)= 1. + SurfChemReac(iReac)%DissOrder= 1. END IF CASE('LH') CALL AttributeExists(file_id_specdb,'Energy',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'Energy',1,DatasetName = dsetname,RealScalar=SurfChemReac%ArrheniusEnergy(iReac)) + CALL ReadAttribute(file_id_specdb,'Energy',1,DatasetName = dsetname,RealScalar=SurfChemReac(iReac)%ArrheniusEnergy) ELSE - SurfChemReac%ArrheniusEnergy(iReac)= 0. + SurfChemReac(iReac)%ArrheniusEnergy= 0. END IF CALL AttributeExists(file_id_specdb,'Prefactor',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'Prefactor',1,DatasetName = dsetname,RealScalar=SurfChemReac%Prefactor(iReac)) + CALL ReadAttribute(file_id_specdb,'Prefactor',1,DatasetName = dsetname,RealScalar=SurfChemReac(iReac)%Prefactor) ELSE - SurfChemReac%Prefactor(iReac)= 1. + SurfChemReac(iReac)%Prefactor= 1. END IF CASE('LHD') CALL AttributeExists(file_id_specdb,'Energy',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'Energy',1,DatasetName = dsetname,RealScalar=SurfChemReac%ArrheniusEnergy(iReac)) + CALL ReadAttribute(file_id_specdb,'Energy',1,DatasetName = dsetname,RealScalar=SurfChemReac(iReac)%ArrheniusEnergy) ELSE - SurfChemReac%ArrheniusEnergy(iReac)= 0. + SurfChemReac(iReac)%ArrheniusEnergy= 0. END IF CALL AttributeExists(file_id_specdb,'Prefactor',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'Prefactor',1,DatasetName = dsetname,RealScalar=SurfChemReac%Prefactor(iReac)) + CALL ReadAttribute(file_id_specdb,'Prefactor',1,DatasetName = dsetname,RealScalar=SurfChemReac(iReac)%Prefactor) ELSE - SurfChemReac%Prefactor(iReac)= 1. + SurfChemReac(iReac)%Prefactor= 1. END IF CASE('ER') CALL AttributeExists(file_id_specdb,'Energy',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'Energy',1,DatasetName = dsetname,RealScalar=SurfChemReac%ArrheniusEnergy(iReac)) + CALL ReadAttribute(file_id_specdb,'Energy',1,DatasetName = dsetname,RealScalar=SurfChemReac(iReac)%ArrheniusEnergy) ELSE - SurfChemReac%ArrheniusEnergy(iReac)= 0. + SurfChemReac(iReac)%ArrheniusEnergy = 0. END IF CALL AttributeExists(file_id_specdb,'Prefactor',TRIM(dsetname), AttrExists=Attr_Exists) IF (Attr_Exists) THEN - CALL ReadAttribute(file_id_specdb,'Prefactor',1,DatasetName = dsetname,RealScalar=SurfChemReac%Prefactor(iReac)) + CALL ReadAttribute(file_id_specdb,'Prefactor',1,DatasetName = dsetname,RealScalar=SurfChemReac(iReac)%Prefactor) ELSE - SurfChemReac%Prefactor(iReac)= 1. + SurfChemReac(iReac)%Prefactor = 1. END IF CASE DEFAULT - SWRITE(*,*) ' Reaction Type does not exists: ', TRIM(SurfChemReac%ReactType(iReac)) + SWRITE(*,*) ' Reaction Type does not exists: ', TRIM(SurfChemReac(iReac)%ReactType) CALL abort(__STAMP__,'Surface Reaction Type does not exist') END SELECT @@ -432,55 +372,55 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() END IF !SpeciesDatabase -IF (SurfChemReac%OverwriteCatParameters) THEN +IF (SurfChem%OverwriteCatParameters) THEN ! Loop over the surface reactions DO iReac = 1, ReadInNumOfReact WRITE(UNIT=hilf,FMT='(I0)') iReac - SurfChemReac%ReactType(iReac) = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-Type')) + SurfChemReac(iReac)%ReactType = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-Type')) - SurfChemReac%Inhibition(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-Inhibition','0') - SurfChemReac%Promotion(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-Promotion','0') - SurfChemReac%EReact(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-ReactHeat','0.') - SurfChemReac%EScale(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-HeatScaling','0.') - SurfChemReac%HeatAccommodation(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EnergyAccommodation','1.') + SurfChemReac(iReac)%Inhibition = GETINT('Surface-Reaction'//TRIM(hilf)//'-Inhibition','0') + SurfChemReac(iReac)%Promotion = GETINT('Surface-Reaction'//TRIM(hilf)//'-Promotion','0') + SurfChemReac(iReac)%EReact = GETREAL('Surface-Reaction'//TRIM(hilf)//'-ReactHeat','0.') + SurfChemReac(iReac)%EScale = GETREAL('Surface-Reaction'//TRIM(hilf)//'-HeatScaling','0.') + SurfChemReac(iReac)%HeatAccommodation = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EnergyAccommodation','1.') - SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) + SELECT CASE (TRIM(SurfChemReac(iReac)%ReactType)) CASE('A') - SurfChemReac%S_initial(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-StickingCoefficient','1.') - SurfChemReac%EqConstant(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EqConstant','1.') - SurfChemReac%DissOrder(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-DissOrder','1.') - SurfChemReac%DissociativeAds(iReac) = GETLOGICAL('Surface-Reaction'//TRIM(hilf)//'-DissociativeAdsorption', '.FALSE.') + SurfChemReac(iReac)%S_initial = GETREAL('Surface-Reaction'//TRIM(hilf)//'-StickingCoefficient','1.') + SurfChemReac(iReac)%EqConstant = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EqConstant','1.') + SurfChemReac(iReac)%DissOrder = GETREAL('Surface-Reaction'//TRIM(hilf)//'-DissOrder','1.') + SurfChemReac(iReac)%DissociativeAds = GETLOGICAL('Surface-Reaction'//TRIM(hilf)//'-DissociativeAdsorption', '.FALSE.') ! Special case of the dissociative adsorption, half of the molecule is desorbed back into the gas-phase - IF (SurfChemReac%DissociativeAds(iReac)) THEN - SurfChemReac%AdsorbedProduct(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-AdsorptionProduct','0') - SurfChemReac%GasProduct(iReac) = GETINT('Surface-Reaction'//TRIM(hilf)//'-GasPhaseProduct','0') - IF ((SurfChemReac%GasProduct(iReac).EQ.0).OR.(SurfChemReac%GasProduct(iReac).EQ.0)) THEN + IF (SurfChemReac(iReac)%DissociativeAds) THEN + SurfChemReac(iReac)%AdsorbedProduct = GETINT('Surface-Reaction'//TRIM(hilf)//'-AdsorptionProduct','0') + SurfChemReac(iReac)%GasProduct = GETINT('Surface-Reaction'//TRIM(hilf)//'-GasPhaseProduct','0') + IF ((SurfChemReac(iReac)%GasProduct.EQ.0).OR.(SurfChemReac(iReac)%GasProduct.EQ.0)) THEN CALL abort(__STAMP__,'Product not defined for the dissociative-adsorption') END IF END IF CASE('D') - SurfChemReac%W_interact(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-LateralInteraction','0.') - SurfChemReac%C_a(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Ca','0.') - SurfChemReac%C_b(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Cb','0.') - SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','0.') - SurfChemReac%E_initial(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') - SurfChemReac%DissOrder(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-DissOrder','1.') + SurfChemReac(iReac)%W_interact = GETREAL('Surface-Reaction'//TRIM(hilf)//'-LateralInteraction','0.') + SurfChemReac(iReac)%C_a = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Ca','0.') + SurfChemReac(iReac)%C_b = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Cb','0.') + SurfChemReac(iReac)%Prefactor = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','0.') + SurfChemReac(iReac)%E_initial = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') + SurfChemReac(iReac)%DissOrder = GETREAL('Surface-Reaction'//TRIM(hilf)//'-DissOrder','1.') CASE('LH') - SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') - SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') + SurfChemReac(iReac)%ArrheniusEnergy = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') + SurfChemReac(iReac)%Prefactor = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') CASE('LHD') - SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') - SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') + SurfChemReac(iReac)%ArrheniusEnergy = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') + SurfChemReac(iReac)%Prefactor = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') CASE('ER') - SurfChemReac%ArrheniusEnergy(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') - SurfChemReac%Prefactor(iReac) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') + SurfChemReac(iReac)%ArrheniusEnergy = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') + SurfChemReac(iReac)%Prefactor = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') CASE DEFAULT - SWRITE(*,*) ' Reaction Type does not exists: ', TRIM(SurfChemReac%ReactType(iReac)) + SWRITE(*,*) ' Reaction Type does not exists: ', TRIM(SurfChemReac(iReac)%ReactType) CALL abort(__STAMP__,'Surface Reaction Type does not exist') END SELECT END DO @@ -591,7 +531,7 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) USE MOD_Particle_Vars ,ONLY: PartSpecies,Species,usevMPF,PartMPF, WriteMacroSurfaceValues USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, dXiEQ_SurfSample,SurfSideArea_Shared -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac , ChemWallProp, ChemSampWall +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac, SurfChem, ChemWallProp, ChemSampWall USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared, BoundsOfElem_Shared USE MOD_Particle_Vars ,ONLY: PDM, LastPartPos USE MOD_DSMC_Vars ,ONLY: RadialWeighting, DSMC, SamplingActive @@ -648,7 +588,7 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) Prob = 0.0 iReac_ER = 0 speciesID = PartSpecies(PartID) -SurfNumOfReac = SurfChemReac%NumOfReact +SurfNumOfReac = SurfChem%NumOfReact ! MacroParticleFactor partWeight = GetParticleWeight(PartID) IF(.NOT.(usevMPF.OR.RadialWeighting%DoRadialWeighting)) THEN @@ -665,23 +605,23 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) END IF ! LatticeVec.GT.0 DO iReac = 1, SurfNumOfReac - SELECT CASE (TRIM(SurfChemReac%ReactType(iReac))) + SELECT CASE (TRIM(SurfChemReac(iReac)%ReactType)) ! 1.) Calculate the sticking coefficient by the Kisliuk model (adsorption) CASE('A') - IF(ANY(SurfChemReac%Reactants(iReac,:).EQ.speciesID)) THEN + IF(ANY(SurfChemReac(iReac)%Reactants(:).EQ.speciesID)) THEN iReac_Ads = iReac ! Absolute coverage in terms of the number of surface molecules ! Special case: dissociative adsorption - IF (SurfChemReac%DissociativeAds(iReac)) THEN - iProd = SurfChemReac%AdsorbedProduct(iReac) + IF (SurfChemReac(iReac)%DissociativeAds) THEN + iProd = SurfChemReac(iReac)%AdsorbedProduct Coverage = ChemWallProp(iProd,1,SubP,SubQ,SurfSideID) ELSE - IF(ANY(SurfChemReac%Products(iReac,:).NE.0)) THEN - DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) - IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN - iProd = SurfChemReac%Products(iReac,iValProd) + IF(ANY(SurfChemReac(iReac)%Products(:).NE.0)) THEN + DO iValProd=1, SIZE(SurfChemReac(iReac)%Products(:)) + IF(SurfChemReac(iReac)%Products(iValProd).NE.0) THEN + iProd = SurfChemReac(iReac)%Products(iValProd) Coverage = ChemWallProp(iProd,1,SubP,SubQ,SurfSideID) END IF END DO @@ -694,25 +634,25 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) MaxCoverage = PartBound%MaxCoverage(locBCID,speciesID) TotalCoverage = SUM(ChemWallProp(:,1,SubP, SubQ, SurfSideID)) MaxTotalCov = PartBound%MaxTotalCoverage(locBCID) - DissOrder = SurfChemReac%DissOrder(iReac) - S_0 = SurfChemReac%S_initial(iReac) - EqConstant = SurfChemReac%EqConstant(iReac) - StickCoeff = SurfChemReac%StickCoeff(iReac) + DissOrder = SurfChemReac(iReac)%DissOrder + S_0 = SurfChemReac(iReac)%S_initial + EqConstant = SurfChemReac(iReac)%EqConstant + StickCoeff = SurfChemReac(iReac)%StickCoeff ! Determine the heat of adsorption in dependence of the coverage [J] - AdsHeat = (SurfChemReac%EReact(iReac) - Coverage * SurfChemReac%EScale(iReac)) * BoltzmannConst + AdsHeat = (SurfChemReac(iReac)%EReact - Coverage * SurfChemReac(iReac)%EScale) * BoltzmannConst ! Theta = free surface sites required for the adsorption ! Determination of possible coadsorption processes - IF(SurfChemReac%Inhibition(iReac).NE.0) THEN - iCoadsReac = SurfChemReac%Inhibition(iReac) - iCoadsSpec = SurfChemReac%Reactants(iCoadsReac,1) + IF(SurfChemReac(iReac)%Inhibition.NE.0) THEN + iCoadsReac = SurfChemReac(iReac)%Inhibition + iCoadsSpec = SurfChemReac(iCoadsReac)%Reactants(1) CoAds_Coverage = ChemWallProp(iCoadsSpec,1,SubP, SubQ, SurfSideID) CoAds_MaxCov = PartBound%MaxCoverage(locBCID,iCoadsSpec) Theta = 1.0 - Coverage/MaxCoverage - CoAds_Coverage/CoAds_MaxCov - ELSE IF(SurfChemReac%Promotion(iReac).NE.0) THEN - iCoadsReac = SurfChemReac%Promotion(iReac) - iCoadsSpec = SurfChemReac%Reactants(iCoadsReac,1) + ELSE IF(SurfChemReac(iReac)%Promotion.NE.0) THEN + iCoadsReac = SurfChemReac(iReac)%Promotion + iCoadsSpec = SurfChemReac(iCoadsReac)%Reactants(1) CoAds_Coverage = ChemWallProp(iCoadsSpec,1,SubP, SubQ, SurfSideID) CoAds_MaxCov = PartBound%MaxCoverage(locBCID,iCoadsSpec) Theta = 1.0 - Coverage/MaxCoverage + CoAds_Coverage/CoAds_MaxCov @@ -733,21 +673,21 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) ! 2.) Calculate the reaction probability by the Arrhenius equation (bias-free for multiple channels) CASE('ER') - IF(ANY(SurfChemReac%Reactants(iReac,:).EQ.speciesID)) THEN + IF(ANY(SurfChemReac(iReac)%Reactants(:).EQ.speciesID)) THEN ! Definition of the variables WallTemp = PartBound%WallTemp(locBCID) - nu = SurfChemReac%Prefactor(iReac) - E_act = SurfChemReac%ArrheniusEnergy(iReac) - Rate = SurfChemReac%Rate(iReac) - BetaCoeff = SurfChemReac%HeatAccommodation(iReac) + nu = SurfChemReac(iReac)%Prefactor + E_act = SurfChemReac(iReac)%ArrheniusEnergy + Rate = SurfChemReac(iReac)%Rate + BetaCoeff = SurfChemReac(iReac)%HeatAccommodation ! Check for the coverage values of the reactant adsorbed on the surface - IF(ANY(SurfChemReac%Reactants(iReac,:).NE.speciesID)) THEN - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN + IF(ANY(SurfChemReac(iReac)%Reactants(:).NE.speciesID)) THEN + DO iValReac=1, SIZE(SurfChemReac(iReac)%Reactants(:)) + IF(SurfChemReac(iReac)%Reactants(iValReac).NE.speciesID .AND. SurfChemReac(iReac)%Reactants(iValReac).NE.0) THEN + iReactant = SurfChemReac(iReac)%Reactants(iValReac) + IF(iReactant.NE.SurfChem%SurfSpecies) THEN Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) AdCountIter = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) ELSE ! Involvement of the bulk species @@ -764,7 +704,7 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) AdsDens = Coverage * SurfMol / SurfSideArea_Shared(SubP, SubQ,SurfSideID) ! Determine the reaction heat in dependence of the coverage [J] - ReacHeat = (SurfChemReac%EReact(iReac) - Coverage * SurfChemReac%EScale(iReac)) * BoltzmannConst + ReacHeat = (SurfChemReac(iReac)%EReact - Coverage * SurfChemReac(iReac)%EScale) * BoltzmannConst ! Bias free calculation for multiple reaction channels IF(iReac_ER.EQ.0) THEN @@ -837,13 +777,13 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) ! 4a.) Adsorption: delete the incoming particle and update the surface values CASE('A') ! Dissociative adsorption - IF (SurfChemReac%DissociativeAds(iReac)) THEN + IF (SurfChemReac(iReac)%DissociativeAds) THEN CALL RemoveParticle(PartID) ! Heat flux on the surface created by the adsorption ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) + AdsHeat * partWeight ! Update the number of adsorbed molecules by binding half of the molecule to the surface - iProd = SurfChemReac%AdsorbedProduct(iReac) + iProd = SurfChemReac(iReac)%AdsorbedProduct ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) + DissOrder * partWeight ! Re-insert the other half of the molecule into the gas-phase @@ -855,7 +795,7 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) SUM(BoundsOfElem_Shared(1:2,2,GlobalElemID)), & SUM(BoundsOfElem_Shared(1:2,3,GlobalElemID)) /) / 2. - iProd = SurfChemReac%GasProduct(iReac) + iProd = SurfChemReac(iReac)%GasProduct NewVelo(1:3) = CalcPostWallCollVelo(iProd,0.,WallTemp,BetaCoeff) NewVelo(1:3) = tang1(1:3)*NewVelo(1) + tang2(1:3)*NewVelo(2) - n_loc(1:3)*NewVelo(3) + WallVelo(1:3) @@ -874,10 +814,10 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) ! Heat flux on the surface created by the adsorption ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) + AdsHeat * partWeight ! Update the number of adsorbed molecules - IF(ANY(SurfChemReac%Products(iReac,:).NE.0)) THEN - DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) - IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN - iProd = SurfChemReac%Reactants(iReac,iValProd) + IF(ANY(SurfChemReac(iReac)%Products(:).NE.0)) THEN + DO iValProd=1, SIZE(SurfChemReac(iReac)%Products(:)) + IF(SurfChemReac(iReac)%Products(iValProd).NE.0) THEN + iProd = SurfChemReac(iReac)%Reactants(iValProd) ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iProd, 1,SubP,SubQ, SurfSideID) + DissOrder * partWeight END IF END DO @@ -903,9 +843,9 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) SUM(BoundsOfElem_Shared(1:2,2,GlobalElemID)), & SUM(BoundsOfElem_Shared(1:2,3,GlobalElemID)) /) / 2. - DO iValProd=1, SIZE(SurfChemReac%Products(iReac,:)) - IF(SurfChemReac%Products(iReac,iValProd).NE.0) THEN - iProd = SurfChemReac%Products(iReac,iValProd) + DO iValProd=1, SIZE(SurfChemReac(iReac)%Products(:)) + IF(SurfChemReac(iReac)%Products(iValProd).NE.0) THEN + iProd = SurfChemReac(iReac)%Products(iValProd) NewVelo(1:3) = CalcPostWallCollVelo(iProd,0.,WallTemp,BetaCoeff) NewVelo(1:3) = tang1(1:3)*NewVelo(1) + tang2(1:3)*NewVelo(2) - n_loc(1:3)*NewVelo(3) + WallVelo(1:3) @@ -922,11 +862,11 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) END DO ! Update the number of adsorbed molecules - IF(ANY(SurfChemReac%Reactants(iReac,:).NE.speciesID)) THEN - DO iValReac=1, SIZE(SurfChemReac%Reactants(iReac,:)) - IF(SurfChemReac%Reactants(iReac,iValReac).NE.speciesID .AND. SurfChemReac%Reactants(iReac,iValReac).NE.0) THEN - iReactant = SurfChemReac%Reactants(iReac,iValReac) - IF(iReactant.NE.SurfChemReac%SurfSpecies) THEN + IF(ANY(SurfChemReac(iReac)%Reactants(:).NE.speciesID)) THEN + DO iValReac=1, SIZE(SurfChemReac(iReac)%Reactants(:)) + IF(SurfChemReac(iReac)%Reactants(iValReac).NE.speciesID .AND. SurfChemReac(iReac)%Reactants(iValReac).NE.0) THEN + iReactant = SurfChemReac(iReac)%Reactants(iValReac) + IF(iReactant.NE.SurfChem%SurfSpecies) THEN ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) = ChemSampWall(iReactant, 1,SubP,SubQ, SurfSideID) - partWeight END IF END IF diff --git a/src/particles/surfacemodel/surfacemodel_init.f90 b/src/particles/surfacemodel/surfacemodel_init.f90 index 750f2fbf3..33fa9f874 100644 --- a/src/particles/surfacemodel/surfacemodel_init.f90 +++ b/src/particles/surfacemodel/surfacemodel_init.f90 @@ -196,38 +196,10 @@ SUBROUTINE FinalizeSurfaceModel() !=================================================================================================================================== SDEALLOCATE(SurfModResultSpec) SDEALLOCATE(SurfModEnergyDistribution) -SDEALLOCATE(SurfChemReac%ReactType) -SDEALLOCATE(SurfChemReac%CatName) -SDEALLOCATE(SurfChemReac%Reactants) -SDEALLOCATE(SurfChemReac%Products) -SDEALLOCATE(SurfChemReac%Inhibition) -SDEALLOCATE(SurfChemReac%Promotion) -SDEALLOCATE(SurfChemReac%EReact) -SDEALLOCATE(SurfChemReac%EScale) -SDEALLOCATE(SurfChemReac%HeatAccommodation) -SDEALLOCATE(SurfChemReac%BoundisChemSurf) -SDEALLOCATE(SurfChemReac%NumOfBounds) -SDEALLOCATE(SurfChemReac%BoundMap) -SDEALLOCATE(SurfChemReac%PSMap) -SDEALLOCATE(SurfChemReac%S_initial) -SDEALLOCATE(SurfChemReac%EqConstant) -SDEALLOCATE(SurfChemReac%DissOrder) -SDEALLOCATE(SurfChemReac%StickCoeff) -SDEALLOCATE(SurfChemReac%DissociativeAds) -SDEALLOCATE(SurfChemReac%AdsorbedProduct) -SDEALLOCATE(SurfChemReac%GasProduct) -SDEALLOCATE(SurfChemReac%E_initial) -SDEALLOCATE(SurfChemReac%W_interact) -SDEALLOCATE(SurfChemReac%C_a) -SDEALLOCATE(SurfChemReac%C_b) -SDEALLOCATE(SurfChemReac%Rate) -SDEALLOCATE(SurfChemReac%Prob) -SDEALLOCATE(SurfChemReac%ArrheniusEnergy) -SDEALLOCATE(SurfChemReac%Prefactor) - +SDEALLOCATE(SurfChemReac) #if USE_MPI CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR) - IF(SurfChemReac%NumOfReact.GT.0) THEN + IF(SurfChem%NumOfReact.GT.0) THEN CALL UNLOCK_AND_FREE(ChemWallProp_Shared_Win) CALL UNLOCK_AND_FREE(ChemSampWall_Shared_Win) END IF @@ -239,8 +211,8 @@ SUBROUTINE FinalizeSurfaceModel() ADEALLOCATE(ChemSampWall) ADEALLOCATE(ChemWallProp) -SNULLIFY(SurfChemReac%Surfaceflux) -SDEALLOCATE(SurfChemReac%SFAux) +SNULLIFY(SurfChem%Surfaceflux) +SDEALLOCATE(SurfChem%SFAux) SDEALLOCATE(SurfModEmissionEnergy) SDEALLOCATE(SurfModEmissionYield) diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index 46e129535..69b3f40a1 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -53,7 +53,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) USE MOD_Particle_Vars ,ONLY: PartSpecies,WriteMacroSurfaceValues,Species,usevMPF,PartMPF USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod, TrackInfo USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, dXiEQ_SurfSample,SurfSideArea_Shared -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac , ChemSampWall +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChem USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared, BoundsOfElem_Shared USE MOD_Particle_Vars ,ONLY: PDM, LastPartPos USE MOD_Particle_Vars ,ONLY: UseCircularInflow @@ -135,7 +135,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) ! Counter for surface analyze IF(CalcSurfCollCounter) SurfAnalyzeCount(PartSpecImpact) = SurfAnalyzeCount(PartSpecImpact) + 1 ! Sampling -DoSample = (DSMC%CalcSurfaceVal.AND.SamplingActive).OR.(DSMC%CalcSurfaceVal.AND.WriteMacroSurfaceValues).OR.(SurfChemReac%NumOfReact.GT.0) +DoSample = (DSMC%CalcSurfaceVal.AND.SamplingActive).OR.(DSMC%CalcSurfaceVal.AND.WriteMacroSurfaceValues).OR.(SurfChem%NumOfReact.GT.0) IF(DoSample) THEN IF (TrackingMethod.EQ.TRIATRACKING) THEN TrackInfo%p = 1 ; TrackInfo%q = 1 diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90 index 0bcfab37d..ebd6ee88b 100644 --- a/src/particles/surfacemodel/surfacemodel_vars.f90 +++ b/src/particles/surfacemodel/surfacemodel_vars.f90 @@ -52,67 +52,67 @@ MODULE MOD_SurfaceModel_Vars TYPE(tPorousBC), ALLOCATABLE :: PorousBC(:) ! Container for the porous BC, allocated with nPorousBC !=== Heterogenous Surface BC ======================================================================================================== -TYPE tBoundMap - INTEGER, ALLOCATABLE :: Boundaries(:) ! Map of the reactions to the boundaries -END TYPE - TYPE tPureSurf LOGICAL, ALLOCATABLE :: PureSurfReac(:) ! List of boundaries on which LH/D reactions occur END TYPE LOGICAL :: DoChemSurface ! Call the surface catalysis routines -TYPE tSurfReactions +TYPE tSurfChemistry ! General surface chemistry parameter INTEGER :: NumOfReact ! Number of catalytic reactions - CHARACTER(LEN=64),ALLOCATABLE :: CatName(:) LOGICAL :: OverwriteCatParameters ! Flag to read the cat parameters manually INTEGER :: SurfSpecies ! Bulk species of the surface, involved in the reactions - CHARACTER(LEN=255),ALLOCATABLE :: ReactType(:) ! Type of Reaction (reaction num) + LOGICAL :: Diffusion ! Activates instantaneous diffussion over the whole boundary + LOGICAL :: TotDiffusion ! Activates instantaneous diffussion over all boundaries + INTEGER :: CatBoundNum ! Number of catalytic boundaries + LOGICAL, ALLOCATABLE :: BoundisChemSurf(:) ! Boundary with catalytic activity + TYPE(tPureSurf), ALLOCATABLE :: PSMap(:) ! Map for reactions occurring only on the surface + TYPE(tCollCaseInfo), ALLOCATABLE :: CollCaseInfo(:) ! Information of collision cases (nCase) + TYPE(tSurfaceFlux), POINTER :: SurfaceFlux(:) ! Surface flux data (using the regular surface flux type) + TYPE(tSFAux), ALLOCATABLE :: SFAux(:) ! Additional surface flux data, where variables differ from the regular surface flux type +END TYPE +TYPE(tSurfChemistry) :: SurfChem + +TYPE tSurfReactions + CHARACTER(LEN=64) :: CatName + CHARACTER(LEN=255) :: ReactType ! Type of Reaction (reaction num) ! A (adsorption) ! D (desorption) ! LH (Langmuir-Hinshelwood) ! LHD (LH with instant desorption) ! ER (Eley-Rideal) - INTEGER, ALLOCATABLE :: Reactants(:,:) ! Reactants: indices of the species starting the reaction [NumOfReact,3] - INTEGER, ALLOCATABLE :: Products(:,:) ! Products: indices of the species resulting from the reaction [NumOfReact,4] - INTEGER, ALLOCATABLE :: Inhibition(:) ! Reaction number of inhibiting reactions - INTEGER, ALLOCATABLE :: Promotion(:) ! Reaction number of promoting reactions - INTEGER, ALLOCATABLE :: NumOfBounds(:) ! Number of catalytic boundaries + INTEGER :: Reactants(2) ! Reactants: indices of the species starting the reaction [NumOfReact,3] + INTEGER :: Products(2) ! Products: indices of the species resulting from the reaction [NumOfReact,4] + INTEGER :: Inhibition ! Reaction number of inhibiting reactions + INTEGER :: Promotion ! Reaction number of promoting reactions + INTEGER :: NumOfBounds ! Number of catalytic boundaries + INTEGER, ALLOCATABLE :: Boundaries(:) ! Map of the reactions to the boundaries ! Surface energy accommodation - REAL, ALLOCATABLE :: EReact(:) ! Reaction energy [K] - REAL, ALLOCATABLE :: EScale(:) ! Scaling factor for E_reac [K] - REAL, ALLOCATABLE :: HeatAccommodation(:) ! Beta coefficient for the energy accommodation + REAL :: EReact ! Reaction energy [K] + REAL :: EScale ! Scaling factor for E_reac [K] + REAL :: HeatAccommodation ! Beta coefficient for the energy accommodation ! Parameters for the adsorption - REAL, ALLOCATABLE :: S_initial(:) ! Initial sticking coefficient at zero coverage - REAL, ALLOCATABLE :: MaxCoverage(:) ! Maximal surface coverage - REAL, ALLOCATABLE :: DissOrder(:) ! Molecular (1) or dissociative (2) adsorption - REAL, ALLOCATABLE :: EqConstant(:) ! Equilibrium constant for adsorption/desorption - REAL, ALLOCATABLE :: StickCoeff(:) ! Sticking coefficient + REAL :: S_initial ! Initial sticking coefficient at zero coverage + REAL :: MaxCoverage ! Maximal surface coverage + REAL :: DissOrder ! Molecular (1) or dissociative (2) adsorption + REAL :: EqConstant ! Equilibrium constant for adsorption/desorption + REAL :: StickCoeff ! Sticking coefficient ! Parameter for the dissociative-adsorption - LOGICAL, ALLOCATABLE :: DissociativeAds(:) ! Dissociative adsorption where the other molecule half is desorbed - INTEGER, ALLOCATABLE :: AdsorbedProduct(:) ! Species ID of the particle that stays adsorbed on the surface - INTEGER, ALLOCATABLE :: GasProduct(:) ! Species ID of the particle that remains in the gas phase + LOGICAL :: DissociativeAds ! Dissociative adsorption where the other molecule half is desorbed + INTEGER :: AdsorbedProduct ! Species ID of the particle that stays adsorbed on the surface + INTEGER :: GasProduct ! Species ID of the particle that remains in the gas phase ! Parameters for the desorption - REAL, ALLOCATABLE :: E_initial(:) ! Desorption energy at zero coverage [K] - REAL, ALLOCATABLE :: W_interact(:) ! Scaling factor for Edes [K] - REAL, ALLOCATABLE :: C_a(:) ! Pre-exponential factor - REAL, ALLOCATABLE :: C_b(:) ! Pre-exponential factor + REAL :: E_initial ! Desorption energy at zero coverage [K] + REAL :: W_interact ! Scaling factor for Edes [K] + REAL :: C_a ! Pre-exponential factor + REAL :: C_b ! Pre-exponential factor ! General Parameters - REAL, ALLOCATABLE :: Rate(:) ! Catalytic reaction rate [Cov/s*m^2] - REAL, ALLOCATABLE :: Prob(:) ! Catalytic reaction probability - REAL, ALLOCATABLE :: Prefactor(:) ! Pre-exponential factor [1/s] - REAL, ALLOCATABLE :: ArrheniusEnergy(:) ! Catalytic reaction energy [K] - LOGICAL, ALLOCATABLE :: BoundisChemSurf(:) ! Boundary with catalytic activity - LOGICAL :: Diffusion ! Activates instantaneous diffussion over the whole boundary - LOGICAL :: TotDiffusion ! Activates instantaneous diffussion over all boundaries - INTEGER :: CatBoundNum ! Number of catalytic boundaries - TYPE(tBoundMap), ALLOCATABLE :: BoundMap(:) ! Map of the reactions to the boundaries - TYPE(tPureSurf), ALLOCATABLE :: PSMap(:) ! Map for reactions occurring only on the surface - TYPE(tCollCaseInfo), ALLOCATABLE :: CollCaseInfo(:) ! Information of collision cases (nCase) - TYPE(tSurfaceFlux), POINTER :: SurfaceFlux(:) ! Surface flux data (using the regular surface flux type) - TYPE(tSFAux), ALLOCATABLE :: SFAux(:) ! Additional surface flux data, where variables differ from the regular surface flux type + REAL :: Rate ! Catalytic reaction rate [Cov/s*m^2] + REAL :: Prob ! Catalytic reaction probability + REAL :: Prefactor ! Pre-exponential factor [1/s] + REAL :: ArrheniusEnergy ! Catalytic reaction energy [K] END TYPE -TYPE(tSurfReactions) :: SurfChemReac +TYPE(tSurfReactions), ALLOCATABLE :: SurfChemReac(:) TYPE tSFAux REAL, ALLOCATABLE :: a_nIn(:,:,:,:) ! Speed ratio projected to inwards normal (additionally to regular surface flux variable due to missing species dependency) From 1aaa1b637cd99911332091c139f6353d1a6d7132 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 27 Nov 2023 20:14:27 +0100 Subject: [PATCH 107/222] Extension of surface chemistry products to three species and implementation of a simple probability based model --- .../parameter.ini | 6 +- .../boundary/particle_boundary_sampling.f90 | 6 +- src/particles/particle_init.f90 | 4 +- src/particles/particle_tools.f90 | 22 +- .../surfacemodel/surfacemodel_chemistry.f90 | 229 +++++++++++++----- .../surfacemodel/surfacemodel_init.f90 | 2 +- .../surfacemodel/surfacemodel_main.f90 | 35 +-- .../surfacemodel/surfacemodel_tools.f90 | 199 ++++++++------- .../surfacemodel/surfacemodel_vars.f90 | 7 +- src/timedisc/timedisc_TimeStep_DSMC.f90 | 14 +- 10 files changed, 318 insertions(+), 206 deletions(-) diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/parameter.ini b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/parameter.ini index 886e6eb8f..dd5902345 100644 --- a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/parameter.ini +++ b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/parameter.ini @@ -12,7 +12,7 @@ CFLscale = 0.2 ! Scaling of theoretical CFL number ! =============================================================================== ! ! MESH ! =============================================================================== ! -MeshFile = cube_mesh.h5 +MeshFile = cube_mesh.h5 useCurveds = F TrackingMethod = triatracking ! =============================================================================== ! @@ -113,7 +113,7 @@ Surface-Reaction2-ReactHeat = 27676.3 ! Desorption of CO Surface-Reaction3-SurfName = Desorption_CO Surface-Reaction3-Type = D -Surface-Reaction3-Products = (/1,0/) +Surface-Reaction3-Products = (/1,0,0/) Surface-Reaction3-NumOfBoundaries = 1 Surface-Reaction3-Boundaries = 1 Surface-Reaction3-Energy = 17688.8 @@ -125,7 +125,7 @@ Surface-Reaction3-HeatScaling = 7340.2 ! Desorption of O2 Surface-Reaction4-SurfName = Desorption_O2 Surface-Reaction4-Type = D -Surface-Reaction4-Products = (/2,0/) +Surface-Reaction4-Products = (/2,0,0/) Surface-Reaction4-NumOfBoundaries = 1 Surface-Reaction4-Boundaries = 1 Surface-Reaction4-Energy = 26713.6 diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index 2c5201923..6f2066f2b 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -461,7 +461,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) USE MOD_DSMC_Vars ,ONLY: DSMC USE MOD_Mesh_Vars ,ONLY: MeshFile USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChem, ChemWallProp +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, DoChemSurface, ChemWallProp USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample,CalcSurfaceImpact USE MOD_Particle_Boundary_Vars ,ONLY: SurfSide2GlobalSide, GlobalSide2SurfSide, PartBound USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfSides, BoundaryWallTemp @@ -608,7 +608,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) END IF ! Add the heat flux due to catalytic reactions on the surface - IF(SurfChem%NumOfReact.GT.0) THEN + IF(DoChemSurface) THEN MacroSurfaceVal(4,p,q,OutputCounter) = MacroSurfaceVal(4,p,q,OutputCounter) + SUM(ChemWallProp(:,2,p, q, iSurfSide)) & / (SurfSideArea(p,q,iSurfSide)*TimeSampleTemp) END IF @@ -706,7 +706,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) #endif /*USE_MPI*/ CALL WriteSurfSampleToHDF5(TRIM(MeshFile),ActualTime) -IF(SurfChem%NumOfReact.GT.0) CALL WriteSurfSampleChemToHDF5(TRIM(MeshFile),ActualTime) +IF(DoChemSurface) CALL WriteSurfSampleChemToHDF5(TRIM(MeshFile),ActualTime) MacroSurfaceVal = 0. MacroSurfaceSpecVal = 0. diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 243ae0081..3620fbf3a 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -271,7 +271,7 @@ SUBROUTINE InitParticles() USE MOD_Particle_Emission_Init ,ONLY: InitialParticleInserting USE MOD_Particle_SurfFlux_Init ,ONLY: InitializeParticleSurfaceflux USE MOD_SurfaceModel_Init ,ONLY: InitSurfaceModel -USE MOD_SurfaceModel_Chemistry ,ONLY: SurfaceModel_Chemistry_Init +USE MOD_SurfaceModel_Chemistry ,ONLY: InitSurfaceModelChemistry USE MOD_Particle_Surfaces ,ONLY: InitParticleSurfaces USE MOD_Particle_Sampling_Adapt ,ONLY: InitAdaptiveBCSampling USE MOD_Particle_Boundary_Init ,ONLY: InitParticleBoundarySurfSides @@ -351,7 +351,7 @@ SUBROUTINE InitParticles() END IF ! Initialize arrays for surface chemistry -CALL SurfaceModel_Chemistry_Init() +CALL InitSurfaceModelChemistry() ! Initialize porous boundary condition (requires BCdata_auxSF and InitParticleBoundarySurfSides) IF(nPorousBC.GT.0) CALL InitPorousBoundaryCondition() diff --git a/src/particles/particle_tools.f90 b/src/particles/particle_tools.f90 index 94b31e45a..3cd45a50b 100644 --- a/src/particles/particle_tools.f90 +++ b/src/particles/particle_tools.f90 @@ -357,7 +357,7 @@ END FUNCTION DiceUnitVector !=================================================================================================================================== -!> Calculation of velocity vector (Vx,Vy,Vz) sampled from given distribution function +!> Calculation of velocity vector (Vx,Vy,Vz) sampled from given distribution function at the surface !=================================================================================================================================== FUNCTION VeloFromDistribution(distribution,Tempergy,iNewPart,ProductSpecNbr) ! MODULES @@ -1038,7 +1038,7 @@ END FUNCTION CalcEElec_particle SUBROUTINE MergeCells() !=================================================================================================================================== -!> Routine for virtual merging of neighbouring cells. +!> Routine for virtual merging of neighbouring cells. !> Currently, the merging is only done via the number of particles within the cells. !=================================================================================================================================== ! MODULES @@ -1062,7 +1062,7 @@ SUBROUTINE MergeCells() !Nullify every value DO iElem = 1, nElems VirtMergedCells(iElem)%isMerged = .FALSE. - VirtMergedCells(iElem)%MasterCell = 0 + VirtMergedCells(iElem)%MasterCell = 0 VirtMergedCells(iElem)%MergedVolume = 0.0 IF (VirtMergedCells(iElem)%NumOfMergedCells.GT.0) THEN DEALLOCATE(VirtMergedCells(iElem)%MergedCellID) @@ -1088,7 +1088,7 @@ SUBROUTINE MergeCells() IF(VirtualCellMergeSpread.GT.1) THEN IF (VirtMergedCells(iElem)%NumOfMergedCells.GT.0) THEN MasterCellID = VirtMergedCells(LocNBElem)%MasterCell-offSetElem - IF(VirtMergedCells(MasterCellID)%NumOfMergedCells.GE.(MaxNumOfMergedCells-1)) CYCLE NBElemLoop + IF(VirtMergedCells(MasterCellID)%NumOfMergedCells.GE.(MaxNumOfMergedCells-1)) CYCLE NBElemLoop ALLOCATE(tempCellID(VirtMergedCells(MasterCellID)%NumOfMergedCells)) tempCellID = VirtMergedCells(MasterCellID)%MergedCellID DEALLOCATE(VirtMergedCells(MasterCellID)%MergedCellID) @@ -1121,9 +1121,9 @@ SUBROUTINE MergeCells() VirtMergedCells(MasterCellID)%MergedCellID(1:VirtMergedCells(MasterCellID)%NumOfMergedCells-1) = & tempCellID(1:VirtMergedCells(MasterCellID)%NumOfMergedCells-1) VirtMergedCells(MasterCellID)%MergedCellID(VirtMergedCells(MasterCellID)%NumOfMergedCells) = iElem - VirtMergedCells(MasterCellID)%MergedVolume=VirtMergedCells(MasterCellID)%MergedVolume+ElemVolume_Shared(CNElemID) + VirtMergedCells(MasterCellID)%MergedVolume=VirtMergedCells(MasterCellID)%MergedVolume+ElemVolume_Shared(CNElemID) VirtMergedCells(iElem)%MasterCell = VirtMergedCells(LocNBElem)%MasterCell - VirtMergedCells(iElem)%isMerged = .TRUE. + VirtMergedCells(iElem)%isMerged = .TRUE. DEALLOCATE(tempCellID) CYCLE ElemLoop END IF @@ -1167,7 +1167,7 @@ SUBROUTINE MergeCells() VirtMergedCells(MasterCellID)%MergedCellID(1:VirtMergedCells(MasterCellID)%NumOfMergedCells-1) = & tempCellID(1:VirtMergedCells(MasterCellID)%NumOfMergedCells-1) VirtMergedCells(MasterCellID)%MergedCellID(VirtMergedCells(MasterCellID)%NumOfMergedCells) = iElem - VirtMergedCells(MasterCellID)%MergedVolume=VirtMergedCells(MasterCellID)%MergedVolume+ElemVolume_Shared(CNElemID) + VirtMergedCells(MasterCellID)%MergedVolume=VirtMergedCells(MasterCellID)%MergedVolume+ElemVolume_Shared(CNElemID) VirtMergedCells(iElem)%MasterCell = MasterCellID + offSetElem VirtMergedCells(iElem)%isMerged = .TRUE. DEALLOCATE(tempCellID) @@ -1188,8 +1188,8 @@ SUBROUTINE MergeCells() ALLOCATE(VirtMergedCells(iElem)%MergedCellID(VirtMergedCells(iElem)%NumOfMergedCells)) VirtMergedCells(iElem)%MergedCellID(VirtMergedCells(iElem)%NumOfMergedCells) = LocNBElem VirtMergedCells(iElem)%MergedVolume = VirtMergedCells(iElem)%MergedVolume + ElemVolume_Shared(CNNbElem) - VirtMergedCells(iElem)%MasterCell = iElem + offSetElem - VirtMergedCells(LocNBElem)%MasterCell = iElem + offSetElem + VirtMergedCells(iElem)%MasterCell = iElem + offSetElem + VirtMergedCells(LocNBElem)%MasterCell = iElem + offSetElem VirtMergedCells(LocNBElem)%isMerged = .TRUE. ELSE IF(VirtMergedCells(iElem)%NumOfMergedCells.GE.(MaxNumOfMergedCells-1)) CYCLE ElemLoop @@ -1202,14 +1202,14 @@ SUBROUTINE MergeCells() tempCellID(1:VirtMergedCells(iElem)%NumOfMergedCells-1) VirtMergedCells(iElem)%MergedCellID(VirtMergedCells(iElem)%NumOfMergedCells) = LocNBElem VirtMergedCells(iElem)%MergedVolume = VirtMergedCells(iElem)%MergedVolume + ElemVolume_Shared(CNNbElem) - VirtMergedCells(LocNBElem)%MasterCell = iElem + offSetElem + VirtMergedCells(LocNBElem)%MasterCell = iElem + offSetElem VirtMergedCells(LocNBElem)%isMerged = .TRUE. DEALLOCATE(tempCellID) END IF nPartMerged = nPartMerged + PEM%pNumber(LocNBElem) IF (nPartMerged.GT.MinPartNumCellMerge) CYCLE ElemLoop END IF - END DO NBElemLoop + END DO NBElemLoop END IF END DO ElemLoop diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index 055da738e..f567778b0 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -26,8 +26,8 @@ MODULE MOD_SurfaceModel_Chemistry !----------------------------------------------------------------------------------------------------------------------------------- ! Private Part --------------------------------------------------------------------------------------------------------------------- ! Public Part ---------------------------------------------------------------------------------------------------------------------- -PUBLIC :: DefineParametersSurfaceChemistry, InitializeVariablesSurfaceChemistry, SurfaceModel_Chemistry_Init -PUBLIC :: SurfaceModelChemistry +PUBLIC :: DefineParametersSurfaceChemistry, InitializeVariablesSurfaceChemistry, InitSurfaceModelChemistry +PUBLIC :: SurfaceModelChemistry, SurfaceModelEventProbability !=================================================================================================================================== CONTAINS @@ -45,16 +45,16 @@ SUBROUTINE DefineParametersSurfaceChemistry() CALL prms%CreateIntOption( 'Surface-NumOfReactions','Number of chemical Surface reactions') CALL prms%CreateIntOption( 'Surface-Species','Bulk species of the boundary') CALL prms%CreateStringOption( 'Surface-Reaction[$]-Type', & - 'No default, options are A (adsorption), D (desorption), ER (Eley-Rideal), LH (Langmuir-Hinshelwood), LHD', & - numberedmulti=.TRUE.) + 'No default, options are:/n'//& + ' A (adsorption), D (desorption), ER (Eley-Rideal), LH (Langmuir-Hinshelwood), LHD/n'//& + ' P (probability-based)', numberedmulti=.TRUE.) CALL prms%CreateStringOption( 'Surface-Reaction[$]-SurfName', 'none' ,numberedmulti=.TRUE.) CALL prms%CreateLogicalOption( 'OverwriteCatParameters', 'Flag to set catalytic parameters manually', '.FALSE.') CALL prms%CreateIntArrayOption( 'Surface-Reaction[$]-Reactants' & - ,'Reactants of Reaction[$]\n'//& - '(SpecNumOfReactant1,\n'//& - 'SpecNumOfReactant2)', '0 , 0' , numberedmulti=.TRUE.) + ,'Reactants of Reaction[$] (Reactant1, Reactant2)', '0 , 0' & + , numberedmulti=.TRUE.) CALL prms%CreateIntArrayOption( 'Surface-Reaction[$]-Products' & - ,'Products of Reaction[$] (Product1, Product2)', '0 , 0' & + ,'Products of Reaction[$] (Product1, Product2, Product3)', '0 , 0, 0' & , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-ReactHeat', & 'Heat flux to or from the surface due to the reaction', '0.' , numberedmulti=.TRUE.) @@ -94,6 +94,8 @@ SUBROUTINE DefineParametersSurfaceChemistry() numberedmulti=.TRUE.) CALL prms%CreateIntArrayOption( 'Surface-Reaction[$]-Boundaries', 'Array of boundary indices of surface reaction.', & numberedmulti=.TRUE., no=0) + CALL prms%CreateRealOption( 'Surface-Reaction[$]-EventProbability', & + 'Simple probability-based surface chemistry (Type = P)',numberedmulti=.TRUE.) END SUBROUTINE DefineParametersSurfaceChemistry @@ -125,15 +127,12 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() CHARACTER(LEN=32) :: hilf INTEGER :: iReac, iReac2, iBound, iVal, err INTEGER :: ReadInNumOfReact +INTEGER :: iSpec, SpecID, ReactionPathPerSpecies(nSpecies) !=================================================================================================================================== -IF(SurfChem%NumOfReact.LE.0) THEN - RETURN -END IF +IF(SurfChem%NumOfReact.LE.0) RETURN + ReadInNumOfReact = SurfChem%NumOfReact -IF(ReadInNumOfReact.GT.0) THEN - DoChemSurface = .TRUE. -END IF SWRITE(*,*) '| Number of considered reaction paths on Surfaces: ', SurfChem%NumOfReact !---------------------------------------------------------------------------------------------------------------------------------- ALLOCATE(SurfChemReac(ReadInNumOfReact)) @@ -147,13 +146,18 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() SurfChem%PSMap(iBound)%PureSurfReac = .FALSE. END DO +! Probability based surface chemistry model +ALLOCATE(SurfChem%EventProbInfo(nSpecies)) +SurfChem%EventProbInfo(:)%NumOfReactionPaths = 0 +ReactionPathPerSpecies = 0 + ! Get the reaction names, reactive species and boundaries DO iReac = 1, ReadInNumOfReact WRITE(UNIT=hilf,FMT='(I0)') iReac SurfChemReac(iReac)%CatName = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-SurfName')) SurfChemReac(iReac)%Reactants(:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Reactants',2,'0,0') - SurfChemReac(iReac)%Products(:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Products',2,'0,0') - + SurfChemReac(iReac)%Products(:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Products',3,'0,0,0') + SurfChemReac(iReac)%ReactType = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-Type')) SurfChemReac(iReac)%NumOfBounds = GETINT('Surface-Reaction'//TRIM(hilf)//'-NumOfBoundaries') IF (SurfChemReac(iReac)%NumOfBounds.EQ.0) THEN CALL abort(__STAMP__,'ERROR: At least one boundary must be defined for each surface reaction!',iReac) @@ -161,17 +165,29 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() SurfChemReac(iReac)%Boundaries = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Boundaries',SurfChemReac(iReac)%NumOfBounds) ! Define the surface model - PartBound%SurfaceModel(SurfChemReac(iReac)%Boundaries) = 20 - - DO iReac2 = 1, SurfChemReac(iReac)%NumOfBounds - SurfChem%BoundisChemSurf(SurfChemReac(iReac)%Boundaries(iReac2)) = .TRUE. - END DO - - ! Select pure surface reactions - DO iVal = 1, SurfChemReac(iReac)%NumOfBounds - iBound = SurfChemReac(iReac)%Boundaries(iVal) - SurfChem%PSMap(iBound)%PureSurfReac(iReac) = .TRUE. - END DO + SELECT CASE (TRIM(SurfChemReac(iReac)%ReactType)) + CASE('P') + ! Simple probability based surface model + PartBound%SurfaceModel(SurfChemReac(iReac)%Boundaries) = 2 + IF(SurfChemReac(iReac)%Reactants(2).NE.0) CALL abort(__STAMP__,' ERROR: Probability based model only supports one reactant!') + SpecID = SurfChemReac(iReac)%Reactants(1) + SurfChem%EventProbInfo(SpecID)%NumOfReactionPaths = SurfChem%EventProbInfo(SpecID)%NumOfReactionPaths + 1 + CASE('A','D','LH','LHD') + SurfChemReac(iReac)%CatName = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-SurfName')) + PartBound%SurfaceModel(SurfChemReac(iReac)%Boundaries) = 20 + DO iReac2 = 1, SurfChemReac(iReac)%NumOfBounds + SurfChem%BoundisChemSurf(SurfChemReac(iReac)%Boundaries(iReac2)) = .TRUE. + END DO + DoChemSurface = .TRUE. + ! Select pure surface reactions + DO iVal = 1, SurfChemReac(iReac)%NumOfBounds + iBound = SurfChemReac(iReac)%Boundaries(iVal) + SurfChem%PSMap(iBound)%PureSurfReac(iReac) = .TRUE. + END DO + CASE DEFAULT + SWRITE(*,*) ' Reaction Type does not exists: ', TRIM(SurfChemReac(iReac)%ReactType) + CALL abort(__STAMP__,' ERROR: Surface Reaction Type does not exist!') + END SELECT END DO ! Determine the number of boundaries with a surface reaction on them @@ -181,6 +197,16 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() END IF END DO +DO iSpec = 1, nSpecies + IF(SurfChem%EventProbInfo(iSpec)%NumOfReactionPaths.GT.0) THEN + ! Allocate the species specific type with the number of the possible reaction paths + ALLOCATE(SurfChem%EventProbInfo(iSpec)%ReactionIndex(SurfChem%EventProbInfo(iSpec)%NumOfReactionPaths)) + SurfChem%EventProbInfo(iSpec)%ReactionIndex = 0 + ALLOCATE(SurfChem%EventProbInfo(iSpec)%ReactionProb(SurfChem%EventProbInfo(iSpec)%NumOfReactionPaths)) + SurfChem%EventProbInfo(iSpec)%ReactionProb = 0. + END IF +END DO + ! Bulk species involved in the reactions SurfChem%SurfSpecies = GETINT('Surface-Species','0') @@ -376,24 +402,22 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() ! Loop over the surface reactions DO iReac = 1, ReadInNumOfReact WRITE(UNIT=hilf,FMT='(I0)') iReac - SurfChemReac(iReac)%ReactType = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-Type')) - - SurfChemReac(iReac)%Inhibition = GETINT('Surface-Reaction'//TRIM(hilf)//'-Inhibition','0') - SurfChemReac(iReac)%Promotion = GETINT('Surface-Reaction'//TRIM(hilf)//'-Promotion','0') SurfChemReac(iReac)%EReact = GETREAL('Surface-Reaction'//TRIM(hilf)//'-ReactHeat','0.') SurfChemReac(iReac)%EScale = GETREAL('Surface-Reaction'//TRIM(hilf)//'-HeatScaling','0.') SurfChemReac(iReac)%HeatAccommodation = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EnergyAccommodation','1.') SELECT CASE (TRIM(SurfChemReac(iReac)%ReactType)) CASE('A') - SurfChemReac(iReac)%S_initial = GETREAL('Surface-Reaction'//TRIM(hilf)//'-StickingCoefficient','1.') - SurfChemReac(iReac)%EqConstant = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EqConstant','1.') - SurfChemReac(iReac)%DissOrder = GETREAL('Surface-Reaction'//TRIM(hilf)//'-DissOrder','1.') - SurfChemReac(iReac)%DissociativeAds = GETLOGICAL('Surface-Reaction'//TRIM(hilf)//'-DissociativeAdsorption', '.FALSE.') + SurfChemReac(iReac)%Inhibition = GETINT('Surface-Reaction'//TRIM(hilf)//'-Inhibition','0') + SurfChemReac(iReac)%Promotion = GETINT('Surface-Reaction'//TRIM(hilf)//'-Promotion','0') + SurfChemReac(iReac)%S_initial = GETREAL('Surface-Reaction'//TRIM(hilf)//'-StickingCoefficient','1.') + SurfChemReac(iReac)%EqConstant = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EqConstant','1.') + SurfChemReac(iReac)%DissOrder = GETREAL('Surface-Reaction'//TRIM(hilf)//'-DissOrder','1.') + SurfChemReac(iReac)%DissociativeAds = GETLOGICAL('Surface-Reaction'//TRIM(hilf)//'-DissociativeAdsorption', '.FALSE.') ! Special case of the dissociative adsorption, half of the molecule is desorbed back into the gas-phase IF (SurfChemReac(iReac)%DissociativeAds) THEN - SurfChemReac(iReac)%AdsorbedProduct = GETINT('Surface-Reaction'//TRIM(hilf)//'-AdsorptionProduct','0') - SurfChemReac(iReac)%GasProduct = GETINT('Surface-Reaction'//TRIM(hilf)//'-GasPhaseProduct','0') + SurfChemReac(iReac)%AdsorbedProduct = GETINT('Surface-Reaction'//TRIM(hilf)//'-AdsorptionProduct','0') + SurfChemReac(iReac)%GasProduct = GETINT('Surface-Reaction'//TRIM(hilf)//'-GasPhaseProduct','0') IF ((SurfChemReac(iReac)%GasProduct.EQ.0).OR.(SurfChemReac(iReac)%GasProduct.EQ.0)) THEN CALL abort(__STAMP__,'Product not defined for the dissociative-adsorption') END IF @@ -419,18 +443,28 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() SurfChemReac(iReac)%ArrheniusEnergy = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Energy','0.') SurfChemReac(iReac)%Prefactor = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') - CASE DEFAULT - SWRITE(*,*) ' Reaction Type does not exists: ', TRIM(SurfChemReac(iReac)%ReactType) - CALL abort(__STAMP__,'Surface Reaction Type does not exist') + CASE('P') + SpecID = SurfChemReac(Ireac)%Reactants(1) + ReactionPathPerSpecies(SpecID) = ReactionPathPerSpecies(SpecID) + 1 + SurfChem%EventProbInfo(SpecID)%ReactionIndex(ReactionPathPerSpecies(SpecID)) = iReac + SurfChem%EventProbInfo(SpecID)%ReactionProb(ReactionPathPerSpecies(SpecID)) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EventProbability') END SELECT END DO - END IF +! Sanity check: Total reaction probability of a single species at the surface must not be above 1 +DO iSpec = 1, nSpecies + IF(SurfChem%EventProbInfo(iSpec)%NumOfReactionPaths.GT.0) THEN + IF(SUM(SurfChem%EventProbInfo(iSpec)%ReactionProb(:)).GT.1.) THEN + CALL abort(__STAMP__,'ERROR: Total probability above unity for species: ', IntInfoOpt=iSpec) + END IF + END IF +END DO + END SUBROUTINE InitializeVariablesSurfaceChemistry -SUBROUTINE SurfaceModel_Chemistry_Init() +SUBROUTINE InitSurfaceModelChemistry() !=================================================================================================================================== ! Allocation of side-specific arrays for chemistry modelling !=================================================================================================================================== @@ -504,7 +538,7 @@ SUBROUTINE SurfaceModel_Chemistry_Init() #endif /*USE_MPI*/ -END SUBROUTINE SurfaceModel_Chemistry_Init +END SUBROUTINE InitSurfaceModelChemistry !=================================================================================================================================== @@ -524,20 +558,17 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr USE MOD_part_operations ,ONLY: RemoveParticle, CreateParticle USE MOD_part_tools ,ONLY: VeloFromDistribution, GetParticleWeight -USE MOD_SurfaceModel_Tools ,ONLY: MaxwellScattering +USE MOD_SurfaceModel_Tools ,ONLY: MaxwellScattering, CalcPostWallCollVelo +USE MOD_Particle_Boundary_Tools ,ONLY: CalcWallSample ! VARIABLES USE MOD_Globals_Vars ,ONLY: PI, BoltzmannConst USE MOD_TimeDisc_Vars ,ONLY: dt -USE MOD_Particle_Vars ,ONLY: PartSpecies,Species,usevMPF,PartMPF, WriteMacroSurfaceValues +USE MOD_Particle_Vars ,ONLY: PartSpecies,Species,usevMPF, WriteMacroSurfaceValues USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo -USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, dXiEQ_SurfSample,SurfSideArea_Shared -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChemReac, SurfChem, ChemWallProp, ChemSampWall +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, SurfSideArea_Shared +USE MOD_SurfaceModel_Vars ,ONLY: SurfChem, SurfChemReac , ChemWallProp, ChemSampWall USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared, BoundsOfElem_Shared -USE MOD_Particle_Vars ,ONLY: PDM, LastPartPos -USE MOD_DSMC_Vars ,ONLY: RadialWeighting, DSMC, SamplingActive -USE MOD_Particle_Boundary_Tools ,ONLY: CalcWallSample -USE MOD_SurfaceModel_Tools ,ONLY: CalcPostWallCollVelo -USE MOD_Particle_Mesh_Vars ,ONLY: BoundsOfElem_Shared +USE MOD_DSMC_Vars ,ONLY: DSMC, RadialWeighting, SamplingActive ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -552,8 +583,7 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) ! LOCAL VARIABLES INTEGER :: ProductSpecNbr !< number of emitted particles for ProductSpec(2) REAL :: TempErgy !< temperature, energy or velocity used for VeloFromDistribution -INTEGER :: locBCID -INTEGER :: iBC, SurfSideID +INTEGER :: locBCID, SurfSideID CHARACTER(LEN=5) :: InteractionType REAL :: RanNum, RanNum2 REAL :: Coverage, MaxCoverage, TotalCoverage, Theta, MaxTotalCov @@ -574,7 +604,6 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) INTEGER :: iReac, iValProd, iProd, iReactant, iValReac INTEGER :: iCoadsReac, iCoadsSpec INTEGER :: NewPartID, iNewPart -INTEGER :: SurfNumOfReac INTEGER :: SubP, SubQ !=================================================================================================================================== ! 0.) Determine the surface parameters: Coverage and number of surface molecules @@ -588,7 +617,6 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) Prob = 0.0 iReac_ER = 0 speciesID = PartSpecies(PartID) -SurfNumOfReac = SurfChem%NumOfReact ! MacroParticleFactor partWeight = GetParticleWeight(PartID) IF(.NOT.(usevMPF.OR.RadialWeighting%DoRadialWeighting)) THEN @@ -604,7 +632,7 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) END IF ! LatticeVec.GT.0 -DO iReac = 1, SurfNumOfReac +DO iReac = 1, SurfChem%NumOfReact SELECT CASE (TRIM(SurfChemReac(iReac)%ReactType)) ! 1.) Calculate the sticking coefficient by the Kisliuk model (adsorption) @@ -752,6 +780,7 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) END SELECT !Surface reaction END DO !iReac +! ---------------------------------------------------------------------------------------------------------------------------------- ! 3.) Choose the occuring pathway by comparison with a random number ! Rescale the probability (ER-Reaction) and the sticking coefficient (adsorption) IF ((Prob+StickCoeff).GT.0.) THEN @@ -771,9 +800,9 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) END IF END IF +! ---------------------------------------------------------------------------------------------------------------------------------- ! 4.) Perform the chosen process SELECT CASE(TRIM(InteractionType)) - ! 4a.) Adsorption: delete the incoming particle and update the surface values CASE('A') ! Dissociative adsorption @@ -881,4 +910,88 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) END SUBROUTINE SurfaceModelChemistry + +!=================================================================================================================================== +!> +!=================================================================================================================================== +SUBROUTINE SurfaceModelEventProbability(PartID,SideID,GlobalElemID,n_loc,PartPosImpact) +! MODULES +! ROUTINES / FUNCTIONS +USE MOD_Globals +USE MOD_SurfaceModel_Tools ,ONLY: SurfaceModelParticleEmission, MaxwellScattering +USE MOD_part_operations ,ONLY: RemoveParticle +! VARIABLES +USE MOD_Globals_Vars ,ONLY: BoltzmannConst +USE MOD_Particle_Vars ,ONLY: PartSpecies,Species +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide +USE MOD_SurfaceModel_Vars ,ONLY: SurfChem, SurfChemReac +USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER,INTENT(IN) :: PartID, SideID +INTEGER,INTENT(IN) :: GlobalElemID !< Global element ID of the particle impacting the surface +REAL,INTENT(IN) :: n_loc(1:3) +REAL,INTENT(IN) :: PartPosImpact(1:3) !< Charge and position of impact of bombarding particle +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: locBCID, SurfSideID +INTEGER :: SpecID, ProdSpecID +INTEGER :: iPath, iProd, ReacTodo +INTEGER :: NumProd, NumReac +REAL :: TempErgy !< temperature, energy or velocity used for SurfaceModelParticleEmission +REAL :: RanNum +REAL :: WallTemp +REAL :: TotalProb +!=================================================================================================================================== +locBCID = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) +SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) +WallTemp = PartBound%WallTemp(locBCID) +SpecID = PartSpecies(PartID) +NumReac = 0 +ReacTodo = 0 +TotalProb = 0. +! ---------------------------------------------------------------------------------------------------------------------------------- +! 1.) Check whether species has any reactions to perform at the boundary +IF(SurfChem%EventProbInfo(SpecID)%NumOfReactionPaths.EQ.0) THEN + ReacTodo = 0 +ELSE + IF(SurfChem%EventProbInfo(SpecID)%NumOfReactionPaths.GT.1) THEN + ! 2a.) Determine which reaction path to follow + CALL RANDOM_NUMBER(RanNum) + DO iPath = 1, SurfChem%EventProbInfo(SpecID)%NumOfReactionPaths + TotalProb = TotalProb + SurfChem%EventProbInfo(SpecID)%ReactionProb(iPath) + IF(TotalProb.GT.RanNum) THEN + ReacTodo = SurfChem%EventProbInfo(SpecID)%ReactionIndex(iPath) + EXIT + END IF + END DO + ELSE + ! 2b.) Only one available reaction + ReacTodo = SurfChem%EventProbInfo(SpecID)%ReactionIndex(1) + END IF +END IF + +IF(ReacTodo.GT.0) THEN + NumProd = COUNT(SurfChemReac(ReacTodo)%Products(:).GT.0) + ! Create products if any have been defined + IF(NumProd.GT.0) THEN + DO iProd = 1, NumProd + ProdSpecID = SurfChemReac(ReacTodo)%Products(iProd) + TempErgy = SQRT(2*BoltzmannConst*WallTemp/Species(ProdSpecID)%MassIC) + CALL SurfaceModelParticleEmission(n_loc, PartID, SideID, ProdSpecID, 1, TempErgy, GlobalElemID, PartPosImpact(1:3), & + EnergyDistribution = 'deltadistribution') + END DO + END IF + ! Remove original reactant + CALL RemoveParticle(PartID,BCID=locBCID) +ELSE + CALL MaxwellScattering(PartID,SideID,n_loc) +END IF + +END SUBROUTINE SurfaceModelEventProbability + END MODULE MOD_SurfaceModel_Chemistry diff --git a/src/particles/surfacemodel/surfacemodel_init.f90 b/src/particles/surfacemodel/surfacemodel_init.f90 index 33fa9f874..a87278ca3 100644 --- a/src/particles/surfacemodel/surfacemodel_init.f90 +++ b/src/particles/surfacemodel/surfacemodel_init.f90 @@ -199,7 +199,7 @@ SUBROUTINE FinalizeSurfaceModel() SDEALLOCATE(SurfChemReac) #if USE_MPI CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR) - IF(SurfChem%NumOfReact.GT.0) THEN + IF(DoChemSurface) THEN CALL UNLOCK_AND_FREE(ChemWallProp_Shared_Win) CALL UNLOCK_AND_FREE(ChemSampWall_Shared_Win) END IF diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index 69b3f40a1..b9e7c6eba 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -49,19 +49,18 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) USE MOD_Globals ,ONLY: myrank #endif /*USE_MPI*/ USE MOD_Globals_Vars ,ONLY: PI, BoltzmannConst -USE MOD_TimeDisc_Vars ,ONLY: dt USE MOD_Particle_Vars ,ONLY: PartSpecies,WriteMacroSurfaceValues,Species,usevMPF,PartMPF USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod, TrackInfo -USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, dXiEQ_SurfSample,SurfSideArea_Shared -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChem -USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared, BoundsOfElem_Shared +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, dXiEQ_SurfSample +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChem, SurfModEnergyDistribution +USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared USE MOD_Particle_Vars ,ONLY: PDM, LastPartPos USE MOD_Particle_Vars ,ONLY: UseCircularInflow USE MOD_Dielectric_Vars ,ONLY: DoDielectricSurfaceCharge USE MOD_DSMC_Vars ,ONLY: DSMC, SamplingActive, RadialWeighting USE MOD_SurfaceModel_Analyze_Vars ,ONLY: CalcSurfCollCounter, SurfAnalyzeCount, SurfAnalyzeNumOfAds, SurfAnalyzeNumOfDes -USE MOD_SurfaceModel_Tools ,ONLY: MaxwellScattering, SurfaceModel_ParticleEmission -USE MOD_SurfaceModel_Chemistry ,ONLY: SurfaceModelChemistry +USE MOD_SurfaceModel_Tools ,ONLY: MaxwellScattering, SurfaceModelParticleEmission +USE MOD_SurfaceModel_Chemistry ,ONLY: SurfaceModelChemistry, SurfaceModelEventProbability USE MOD_SEE ,ONLY: SecondaryElectronEmission USE MOD_SurfaceModel_Porous ,ONLY: PorousBoundaryTreatment USE MOD_Particle_Boundary_Tools ,ONLY: CalcWallSample @@ -89,8 +88,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) INTEGER :: ProductSpecNbr !< number of emitted particles for ProductSpec(2) REAL :: TempErgy !< temperature, energy or velocity used for VeloFromDistribution REAL :: Xitild,Etatild -INTEGER :: PartSpecImpact, locBCID -INTEGER :: iBC, SurfSideID +INTEGER :: PartSpecImpact, locBCID, SurfSideID LOGICAL :: SpecularReflectionOnly,DoSample REAL :: ChargeImpact,PartPosImpact(1:3) !< Charge and position of impact of bombarding particle REAL :: ChargeRefl !< Charge of reflected particle @@ -98,8 +96,6 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) REAL :: ChargeHole !< Charge of SEE electrons holes INTEGER :: iProd !=================================================================================================================================== -iBC = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) - !=================================================================================================================================== ! 0.) Initial surface pre-treatment !=================================================================================================================================== @@ -116,7 +112,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) ! Store info of impacting particle for possible surface charging PartPosImpact(1:3) = LastPartPos(1:3,PartID)+TrackInfo%PartTrajectory(1:3)*TrackInfo%alpha -IF(DoDielectricSurfaceCharge.AND.PartBound%Dielectric(iBC)) THEN ! Surface charging active + dielectric surface contact +IF(DoDielectricSurfaceCharge.AND.PartBound%Dielectric(locBCID)) THEN ! Surface charging active + dielectric surface contact IF(usevMPF)THEN MPF = PartMPF(PartID) ELSE @@ -127,7 +123,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) !=================================================================================================================================== ! 1.) Species Swap !=================================================================================================================================== -IF (PartBound%NbrOfSpeciesSwaps(iBC).GT.0) CALL SpeciesSwap(PartID,SideID) +IF (PartBound%NbrOfSpeciesSwaps(locBCID).GT.0) CALL SpeciesSwap(PartID,SideID) !=================================================================================================================================== ! 2.) Count and sample the properties BEFORE the surface interaction @@ -155,7 +151,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) IF(.NOT.PDM%ParticleInside(PartID)) THEN ! Increase the counter for deleted/absorbed/adsorbed particles IF(CalcSurfCollCounter) SurfAnalyzeNumOfAds(PartSpecImpact) = SurfAnalyzeNumOfAds(PartSpecImpact) + 1 - IF(DoDeposition.AND.DoDielectricSurfaceCharge.AND.PartBound%Dielectric(iBC)) & + IF(DoDeposition.AND.DoDielectricSurfaceCharge.AND.PartBound%Dielectric(locBCID)) & CALL DepositParticleOnNodes(ChargeImpact, PartPosImpact, GlobalElemID) RETURN END IF @@ -172,6 +168,10 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) !----------------------------------------------------------------------------------------------------------------------------------- CALL StickingCoefficientModel(PartID,SideID,n_Loc) !----------------------------------------------------------------------------------------------------------------------------------- +CASE (2) ! Event probability model +!----------------------------------------------------------------------------------------------------------------------------------- + CALL SurfaceModelEventProbability(PartID,SideID,GlobalElemID,n_loc,PartPosImpact(1:3)) +!----------------------------------------------------------------------------------------------------------------------------------- CASE(20) ! Catalytic gas-surface interaction: Adsorption or Eley-Rideal reaction !----------------------------------------------------------------------------------------------------------------------------------- CALL SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact(1:3)) @@ -195,9 +195,10 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) END IF ! Emit the secondary electrons IF (ProductSpec(2).GT.0) THEN - CALL SurfaceModel_ParticleEmission(n_loc, PartID, SideID, ProductSpec, ProductSpecNbr, TempErgy, GlobalElemID,PartPosImpact(1:3)) + CALL SurfaceModelParticleEmission(n_loc, PartID, SideID, ProductSpec(2), ProductSpecNbr, TempErgy, GlobalElemID, & + PartPosImpact(1:3),EnergyDistribution=SurfModEnergyDistribution(locBCID)) ! Deposit opposite charge of SEE on node - IF(DoDeposition.AND.DoDielectricSurfaceCharge.AND.PartBound%Dielectric(iBC)) THEN + IF(DoDeposition.AND.DoDielectricSurfaceCharge.AND.PartBound%Dielectric(locBCID)) THEN ! Get MPF IF (usevMPF) THEN IF (RadialWeighting%DoRadialWeighting) THEN @@ -223,7 +224,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) !=================================================================================================================================== ! 4.) PIC ONLY: Deposit charges on dielectric surface (when activated), if these were removed/changed in SurfaceModel !=================================================================================================================================== -IF(DoDeposition.AND.DoDielectricSurfaceCharge.AND.PartBound%Dielectric(iBC)) THEN ! Surface charging active + dielectric surface contact +IF(DoDeposition.AND.DoDielectricSurfaceCharge.AND.PartBound%Dielectric(locBCID)) THEN ! Surface charging active + dielectric surface contact IF(.NOT.PDM%ParticleInside(PartID))THEN ! Particle was deleted on surface contact: deposit impacting charge CALL DepositParticleOnNodes(ChargeImpact, PartPosImpact, GlobalElemID) @@ -264,7 +265,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) ! Sampling IF(DoSample) THEN ! Sample momentum, heatflux and collision counter on surface (only the original impacting particle, not the newly created parts - ! through SurfaceModel_ParticleEmission), checking if the particle was deleted/absorbed/adsorbed at the wall + ! through SurfaceModelParticleEmission), checking if the particle was deleted/absorbed/adsorbed at the wall IF(PDM%ParticleInside(PartID)) CALL CalcWallSample(PartID,SurfSideID,'new',SurfaceNormal_opt=n_loc) END IF diff --git a/src/particles/surfacemodel/surfacemodel_tools.f90 b/src/particles/surfacemodel/surfacemodel_tools.f90 index 113233e2e..6d536b3bd 100644 --- a/src/particles/surfacemodel/surfacemodel_tools.f90 +++ b/src/particles/surfacemodel/surfacemodel_tools.f90 @@ -26,7 +26,7 @@ MODULE MOD_SurfaceModel_Tools ! Private Part --------------------------------------------------------------------------------------------------------------------- ! Public Part ---------------------------------------------------------------------------------------------------------------------- PUBLIC :: MaxwellScattering, PerfectReflection, DiffuseReflection -PUBLIC :: SurfaceModel_ParticleEmission, SurfaceModel_EnergyAccommodation, GetWallTemperature, CalcPostWallCollVelo, CalcRotWallVelo +PUBLIC :: SurfaceModelParticleEmission, SurfaceModelEnergyAccommodation, GetWallTemperature, CalcPostWallCollVelo, CalcRotWallVelo PUBLIC :: CalcWallTempGradient !=================================================================================================================================== @@ -417,7 +417,7 @@ SUBROUTINE DiffuseReflection(PartID,SideID,n_loc) END IF ! 5.) Perform internal energy accommodation at the wall -CALL SurfaceModel_EnergyAccommodation(PartID,locBCID,WallTemp) +CALL SurfaceModelEnergyAccommodation(PartID,locBCID,WallTemp) ! 6.) Determine the new particle position after the reflection LastPartPos(1:3,PartID) = POI_vec(1:3) @@ -501,9 +501,9 @@ END SUBROUTINE DiffuseReflection !=================================================================================================================================== !> Routine for the particle emission at a surface due to a single particle-wall interaction !=================================================================================================================================== -SUBROUTINE SurfaceModel_ParticleEmission(n_loc, PartID, SideID, ProductSpec, ProductSpecNbr, TempErgy, GlobElemID,POI_vec) +SUBROUTINE SurfaceModelParticleEmission(n_loc, PartID, SideID, ProductSpec, ProductSpecNbr, TempErgy, GlobElemID, POI_vec, EnergyDistribution) ! MODULES -USE MOD_Globals ,ONLY: OrthoNormVec +USE MOD_Globals! ,ONLY: OrthoNormVec USE MOD_Part_Tools ,ONLY: VeloFromDistribution USE MOD_part_operations ,ONLY: CreateParticle USE MOD_Particle_Vars ,ONLY: WriteMacroSurfaceValues @@ -519,17 +519,14 @@ SUBROUTINE SurfaceModel_ParticleEmission(n_loc, PartID, SideID, ProductSpec, Pro IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES -REAL,INTENT(IN) :: n_loc(1:3) !< normal vector of the surface -REAL,INTENT(IN) :: POI_vec(1:3) !< Point Of Intersection -INTEGER,INTENT(IN) :: PartID, SideID !< Particle index and side index -INTEGER,INTENT(IN) :: GlobElemID !< global element ID of the impacting particle (used for creating a new particle) -INTEGER,INTENT(IN) :: ProductSpec(2) !< 1: product species of incident particle (also used for simple reflection) - !< 2: additional species added or removed from surface - !< If productSpec is negative, then the respective particles are adsorbed - !< If productSpec is positive the particle is reflected/emitted - !< with respective species -INTEGER,INTENT(IN) :: ProductSpecNbr !< number of emitted particles for ProductSpec(1) -REAL,INTENT(IN) :: TempErgy !< temperature, energy or velocity used for VeloFromDistribution +REAL,INTENT(IN) :: n_loc(1:3) !< normal vector of the surface +REAL,INTENT(IN) :: POI_vec(1:3) !< Point Of Intersection +INTEGER,INTENT(IN) :: PartID, SideID !< Particle index and side index +INTEGER,INTENT(IN) :: GlobElemID !< global element ID of the impacting particle (used for creating a new particle) +INTEGER,INTENT(IN) :: ProductSpec !< emitted species index +INTEGER,INTENT(IN) :: ProductSpecNbr !< number of emitted particles +REAL,INTENT(IN) :: TempErgy !< temperature, energy or velocity used for VeloFromDistribution +CHARACTER(LEN=*),INTENT(IN) :: EnergyDistribution !< energy distribution model used for VeloFromDistribution !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- @@ -559,7 +556,7 @@ SUBROUTINE SurfaceModel_ParticleEmission(n_loc, PartID, SideID, ProductSpec, Pro DO iNewPart = 1, ProductSpecNbr ! create new particle and assign correct energies ! sample newly created velocity - NewVelo(1:3) = VeloFromDistribution(SurfModEnergyDistribution(locBCID),TempErgy,iNewPart,ProductSpecNbr) + NewVelo(1:3) = VeloFromDistribution(EnergyDistribution,TempErgy,iNewPart,ProductSpecNbr) ! Rotate velocity vector from global coordinate system into the surface local coordinates (important: n_loc points outwards) NewVelo(1:3) = tang1(1:3)*NewVelo(1) + tang2(1:3)*NewVelo(2) - n_Loc(1:3)*NewVelo(3) + WallVelo(1:3) ! Create new position by using POI and moving the particle by eps in the direction of the element center @@ -568,22 +565,22 @@ SUBROUTINE SurfaceModel_ParticleEmission(n_loc, PartID, SideID, ProductSpec, Pro ! Get MPF of old particle OldMPF = PartMPF(PartID) ! New particle acquires the MPF of the impacting particle (not necessarily the MPF of the newly created particle species) - CALL CreateParticle(ProductSpec(2),NewPos(1:3),GlobElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID, NewMPF=OldMPF) + CALL CreateParticle(ProductSpec,NewPos(1:3),GlobElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID, NewMPF=OldMPF) ELSE ! New particle acquires the MPF of the new particle species - CALL CreateParticle(ProductSpec(2),NewPos(1:3),GlobElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID) + CALL CreateParticle(ProductSpec,NewPos(1:3),GlobElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID) END IF ! usevMPF ! Adding the energy that is transferred from the surface onto the internal energies of the particle - CALL SurfaceModel_EnergyAccommodation(NewPartID,locBCID,WallTemp) + CALL SurfaceModelEnergyAccommodation(NewPartID,locBCID,WallTemp) ! Sampling of newly created particles IF((DSMC%CalcSurfaceVal.AND.SamplingActive).OR.(DSMC%CalcSurfaceVal.AND.WriteMacroSurfaceValues)) & CALL CalcWallSample(NewPartID,SurfSideID,'new',SurfaceNormal_opt=n_loc) END DO ! iNewPart = 1, ProductSpecNbr -END SUBROUTINE SurfaceModel_ParticleEmission +END SUBROUTINE SurfaceModelParticleEmission -SUBROUTINE SurfaceModel_EnergyAccommodation(PartID,locBCID,WallTemp) +SUBROUTINE SurfaceModelEnergyAccommodation(PartID,locBCID,WallTemp) !=================================================================================================================================== !> Energy accommodation at the surface: Particle internal energies PartStateIntEn() are sampled at surface temperature !=================================================================================================================================== @@ -615,107 +612,105 @@ SUBROUTINE SurfaceModel_EnergyAccommodation(PartID,locBCID,WallTemp) ! Polyatomic Molecules REAL :: NormProb, VibQuantNewR REAL, ALLOCATABLE :: RanNumPoly(:), VibQuantNewRPoly(:) -INTEGER :: iPolyatMole, iDOF +INTEGER :: iPolyatMole, iDOF, VibDOF INTEGER, ALLOCATABLE :: VibQuantNewPoly(:), VibQuantWallPoly(:), VibQuantTemp(:) !----------------------------------------------------------------------------------------------------------------------------------- + +! Requires the usage of DSMC and CollisMode = 2/3 +IF(.NOT.useDSMC) RETURN +IF(.NOT.(CollisMode.GT.1)) RETURN + SpecID = PartSpecies(PartID) VibACC = PartBound%VibACC(locBCID) RotACC = PartBound%RotACC(locBCID) ElecACC = PartBound%ElecACC(locBCID) -IF (useDSMC) THEN - IF (CollisMode.GT.1) THEN - IF ((SpecDSMC(SpecID)%InterID.EQ.2).OR.(SpecDSMC(SpecID)%InterID.EQ.20)) THEN - !---- Rotational energy accommodation - IF (SpecDSMC(SpecID)%Xi_Rot.EQ.2) THEN - CALL RANDOM_NUMBER(RanNum) - ErotWall = - BoltzmannConst * WallTemp * LOG(RanNum) - ELSE IF (SpecDSMC(SpecID)%Xi_Rot.EQ.3) THEN - CALL RANDOM_NUMBER(RanNum) - ErotWall = RanNum*10. !the distribution function has only non-negligible values betwenn 0 and 10 - NormProb = SQRT(ErotWall)*EXP(-ErotWall)/(SQRT(0.5)*EXP(-0.5)) - CALL RANDOM_NUMBER(RanNum) - DO WHILE (RanNum.GE.NormProb) - CALL RANDOM_NUMBER(RanNum) - ErotWall = RanNum*10. !the distribution function has only non-negligible values betwenn 0 and 10 - NormProb = SQRT(ErotWall)*EXP(-ErotWall)/(SQRT(0.5)*EXP(-0.5)) - CALL RANDOM_NUMBER(RanNum) - END DO - ErotWall = ErotWall*BoltzmannConst*WallTemp - END IF - ErotNew = PartStateIntEn(2,PartID) + RotACC *(ErotWall - PartStateIntEn(2,PartID)) +IF ((SpecDSMC(SpecID)%InterID.EQ.2).OR.(SpecDSMC(SpecID)%InterID.EQ.20)) THEN + !---- Rotational energy accommodation + IF (SpecDSMC(SpecID)%Xi_Rot.EQ.2) THEN + CALL RANDOM_NUMBER(RanNum) + ErotWall = - BoltzmannConst * WallTemp * LOG(RanNum) + ELSE IF (SpecDSMC(SpecID)%Xi_Rot.EQ.3) THEN + CALL RANDOM_NUMBER(RanNum) + ErotWall = RanNum*10. !the distribution function has only non-negligible values betwenn 0 and 10 + NormProb = SQRT(ErotWall)*EXP(-ErotWall)/(SQRT(0.5)*EXP(-0.5)) + CALL RANDOM_NUMBER(RanNum) + DO WHILE (RanNum.GE.NormProb) + CALL RANDOM_NUMBER(RanNum) + ErotWall = RanNum*10. !the distribution function has only non-negligible values betwenn 0 and 10 + NormProb = SQRT(ErotWall)*EXP(-ErotWall)/(SQRT(0.5)*EXP(-0.5)) + CALL RANDOM_NUMBER(RanNum) + END DO + ErotWall = ErotWall*BoltzmannConst*WallTemp + END IF + ErotNew = PartStateIntEn(2,PartID) + RotACC *(ErotWall - PartStateIntEn(2,PartID)) - PartStateIntEn(2,PartID) = ErotNew + PartStateIntEn(2,PartID) = ErotNew #if (PP_TimeDiscMethod==400) - IF (BGKDoVibRelaxation) THEN + IF (BGKDoVibRelaxation) THEN #elif (PP_TimeDiscMethod==300) - IF (FPDoVibRelaxation) THEN + IF (FPDoVibRelaxation) THEN #endif - !---- Vibrational energy accommodation - IF(SpecDSMC(SpecID)%PolyatomicMol) THEN - EvibNew = 0.0 - iPolyatMole = SpecDSMC(SpecID)%SpecToPolyArray - ALLOCATE(RanNumPoly(PolyatomMolDSMC(iPolyatMole)%VibDOF),VibQuantWallPoly(PolyatomMolDSMC(iPolyatMole)%VibDOF), & - VibQuantNewRPoly(PolyatomMolDSMC(iPolyatMole)%VibDOF), VibQuantNewPoly(PolyatomMolDSMC(iPolyatMole)%VibDOF), & - VibQuantTemp(PolyatomMolDSMC(iPolyatMole)%VibDOF)) - CALL RANDOM_NUMBER(RanNumPoly) - VibQuantWallPoly(:) = INT(-LOG(RanNumPoly(:)) * WallTemp / PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(:)) - DO WHILE (ALL(VibQuantWallPoly.GE.PolyatomMolDSMC(iPolyatMole)%MaxVibQuantDOF)) - CALL RANDOM_NUMBER(RanNumPoly) - VibQuantWallPoly(:) = INT(-LOG(RanNumPoly(:)) * WallTemp / PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(:)) - END DO - VibQuantNewRPoly(:) = VibQuantsPar(PartID)%Quants(:) + VibACC*(VibQuantWallPoly(:) - VibQuantsPar(PartID)%Quants(:)) - VibQuantNewPoly = INT(VibQuantNewRPoly) - DO iDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF - CALL RANDOM_NUMBER(RanNum) - IF (RanNum.LT.(VibQuantNewRPoly(iDOF) - VibQuantNewPoly(iDOF))) THEN - EvibNew = EvibNew + (VibQuantNewPoly(iDOF) + DSMC%GammaQuant + 1.0d0) & - * BoltzmannConst*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF) - VibQuantTemp(iDOF) = VibQuantNewPoly(iDOF) + 1 - ELSE - EvibNew = EvibNew + (VibQuantNewPoly(iDOF) + DSMC%GammaQuant) & - * BoltzmannConst*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF) - VibQuantTemp(iDOF) = VibQuantNewPoly(iDOF) - END IF - END DO + !---- Vibrational energy accommodation + IF(SpecDSMC(SpecID)%PolyatomicMol) THEN + EvibNew = 0.0 + iPolyatMole = SpecDSMC(SpecID)%SpecToPolyArray + VibDOF = PolyatomMolDSMC(iPolyatMole)%VibDOF + ALLOCATE(RanNumPoly(VibDOF),VibQuantWallPoly(VibDOF),VibQuantNewRPoly(VibDOF),VibQuantNewPoly(VibDOF),VibQuantTemp(VibDOF)) + CALL RANDOM_NUMBER(RanNumPoly) + VibQuantWallPoly(:) = INT(-LOG(RanNumPoly(:)) * WallTemp / PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(:)) + DO WHILE (ALL(VibQuantWallPoly.GE.PolyatomMolDSMC(iPolyatMole)%MaxVibQuantDOF)) + CALL RANDOM_NUMBER(RanNumPoly) + VibQuantWallPoly(:) = INT(-LOG(RanNumPoly(:)) * WallTemp / PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(:)) + END DO + VibQuantNewRPoly(:) = VibQuantsPar(PartID)%Quants(:) + VibACC*(VibQuantWallPoly(:) - VibQuantsPar(PartID)%Quants(:)) + VibQuantNewPoly = INT(VibQuantNewRPoly) + DO iDOF = 1, VibDOF + EvibNew = EvibNew + (VibQuantNewPoly(iDOF) + DSMC%GammaQuant)*BoltzmannConst*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF) + CALL RANDOM_NUMBER(RanNum) + IF (RanNum.LT.(VibQuantNewRPoly(iDOF) - VibQuantNewPoly(iDOF))) THEN + EvibNew = EvibNew + BoltzmannConst*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF) + VibQuantTemp(iDOF) = VibQuantNewPoly(iDOF) + 1 ELSE - VibQuant = NINT(PartStateIntEn(1,PartID)/(BoltzmannConst*SpecDSMC(SpecID)%CharaTVib) - DSMC%GammaQuant) - CALL RANDOM_NUMBER(RanNum) - VibQuantWall = INT(-LOG(RanNum) * WallTemp / SpecDSMC(SpecID)%CharaTVib) - DO WHILE (VibQuantWall.GE.SpecDSMC(SpecID)%MaxVibQuant) - CALL RANDOM_NUMBER(RanNum) - VibQuantWall = INT(-LOG(RanNum) * WallTemp / SpecDSMC(SpecID)%CharaTVib) - END DO - VibQuantNewR = VibQuant + VibACC*(VibQuantWall - VibQuant) - VibQuantNew = INT(VibQuantNewR) - CALL RANDOM_NUMBER(RanNum) - IF (RanNum.LT.(VibQuantNewR - VibQuantNew)) THEN - EvibNew = (VibQuantNew + DSMC%GammaQuant + 1.0d0)*BoltzmannConst*SpecDSMC(SpecID)%CharaTVib - ELSE - EvibNew = (VibQuantNew + DSMC%GammaQuant)*BoltzmannConst*SpecDSMC(SpecID)%CharaTVib - END IF + VibQuantTemp(iDOF) = VibQuantNewPoly(iDOF) END IF + END DO + ELSE + VibQuant = NINT(PartStateIntEn(1,PartID)/(BoltzmannConst*SpecDSMC(SpecID)%CharaTVib) - DSMC%GammaQuant) + CALL RANDOM_NUMBER(RanNum) + VibQuantWall = INT(-LOG(RanNum) * WallTemp / SpecDSMC(SpecID)%CharaTVib) + DO WHILE (VibQuantWall.GE.SpecDSMC(SpecID)%MaxVibQuant) + CALL RANDOM_NUMBER(RanNum) + VibQuantWall = INT(-LOG(RanNum) * WallTemp / SpecDSMC(SpecID)%CharaTVib) + END DO + VibQuantNewR = VibQuant + VibACC*(VibQuantWall - VibQuant) + VibQuantNew = INT(VibQuantNewR) + CALL RANDOM_NUMBER(RanNum) + IF (RanNum.LT.(VibQuantNewR - VibQuantNew)) THEN + EvibNew = (VibQuantNew + DSMC%GammaQuant + 1.0d0)*BoltzmannConst*SpecDSMC(SpecID)%CharaTVib + ELSE + EvibNew = (VibQuantNew + DSMC%GammaQuant)*BoltzmannConst*SpecDSMC(SpecID)%CharaTVib + END IF + END IF - IF(SpecDSMC(SpecID)%PolyatomicMol) VibQuantsPar(PartID)%Quants(:) = VibQuantTemp(:) - PartStateIntEn(1,PartID) = EvibNew + IF(SpecDSMC(SpecID)%PolyatomicMol) VibQuantsPar(PartID)%Quants(:) = VibQuantTemp(:) + PartStateIntEn(1,PartID) = EvibNew #if (PP_TimeDiscMethod==400) || (PP_TimeDiscMethod==300) - END IF ! FPDoVibRelaxation || BGKDoVibRelaxation + END IF ! FPDoVibRelaxation || BGKDoVibRelaxation #endif - END IF +END IF - IF (DSMC%ElectronicModel.GT.0) THEN - IF((SpecDSMC(SpecID)%InterID.NE.4).AND.(.NOT.SpecDSMC(SpecID)%FullyIonized)) THEN - CALL RANDOM_NUMBER(RanNum) - IF (RanNum.LT.ElecACC) THEN - PartStateIntEn(3,PartID) = RelaxElectronicShellWall(PartID, WallTemp) - END IF - END IF +IF (DSMC%ElectronicModel.GT.0) THEN + IF((SpecDSMC(SpecID)%InterID.NE.4).AND.(.NOT.SpecDSMC(SpecID)%FullyIonized)) THEN + CALL RANDOM_NUMBER(RanNum) + IF (RanNum.LT.ElecACC) THEN + PartStateIntEn(3,PartID) = RelaxElectronicShellWall(PartID, WallTemp) END IF - END IF ! CollisMode > 1 -END IF ! useDSMC + END IF +END IF -END SUBROUTINE SurfaceModel_EnergyAccommodation +END SUBROUTINE SurfaceModelEnergyAccommodation REAL FUNCTION GetWallTemperature(PartID,locBCID, SideID) diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90 index ebd6ee88b..12baa9c2b 100644 --- a/src/particles/surfacemodel/surfacemodel_vars.f90 +++ b/src/particles/surfacemodel/surfacemodel_vars.f90 @@ -70,19 +70,22 @@ MODULE MOD_SurfaceModel_Vars TYPE(tCollCaseInfo), ALLOCATABLE :: CollCaseInfo(:) ! Information of collision cases (nCase) TYPE(tSurfaceFlux), POINTER :: SurfaceFlux(:) ! Surface flux data (using the regular surface flux type) TYPE(tSFAux), ALLOCATABLE :: SFAux(:) ! Additional surface flux data, where variables differ from the regular surface flux type + ! Event probability + TYPE(tCollCaseInfo), ALLOCATABLE :: EventProbInfo(:) ! Number of reaction paths and their probability per species END TYPE TYPE(tSurfChemistry) :: SurfChem TYPE tSurfReactions CHARACTER(LEN=64) :: CatName CHARACTER(LEN=255) :: ReactType ! Type of Reaction (reaction num) + ! P (event probability) ! A (adsorption) ! D (desorption) ! LH (Langmuir-Hinshelwood) ! LHD (LH with instant desorption) ! ER (Eley-Rideal) - INTEGER :: Reactants(2) ! Reactants: indices of the species starting the reaction [NumOfReact,3] - INTEGER :: Products(2) ! Products: indices of the species resulting from the reaction [NumOfReact,4] + INTEGER :: Reactants(2) ! Reactants: indices of the species starting the reaction [NumOfReact,2] + INTEGER :: Products(3) ! Products: indices of the species resulting from the reaction [NumOfReact,3] INTEGER :: Inhibition ! Reaction number of inhibiting reactions INTEGER :: Promotion ! Reaction number of promoting reactions INTEGER :: NumOfBounds ! Number of catalytic boundaries diff --git a/src/timedisc/timedisc_TimeStep_DSMC.f90 b/src/timedisc/timedisc_TimeStep_DSMC.f90 index a2b1d1ed9..555d533fb 100644 --- a/src/timedisc/timedisc_TimeStep_DSMC.f90 +++ b/src/timedisc/timedisc_TimeStep_DSMC.f90 @@ -105,16 +105,16 @@ SUBROUTINE TimeStep_DSMC() CALL ParticleSurfaceflux() END IF - IF (DoChemSurface) THEN - CALL ExchangeChemSurfData() - - IF (time.GT.0.0) THEN - CALL ParticleSurfChemFlux() - CALL ParticleSurfDiffusion() - END IF +IF (DoChemSurface) THEN + CALL ExchangeChemSurfData() + IF (time.GT.0.0) THEN + CALL ParticleSurfChemFlux() + CALL ParticleSurfDiffusion() END IF +END IF + #if USE_LOADBALANCE CALL LBStartTime(tLBStart) #endif /*USE_LOADBALANCE*/ From ec05e27f05bfea65d87b6db4403c569aa5bfc415 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Tue, 28 Nov 2023 01:03:38 +0100 Subject: [PATCH 108/222] Missing deallocate for loadbalance, changed the parameter read-in flag to DB and added to the skip during loadbalance in PrintOption --- .../parameter.ini | 2 +- src/particles/dsmc/dsmc_chemical_init.f90 | 12 +++--- src/particles/dsmc/dsmc_init.f90 | 37 ++++++++++--------- src/particles/dsmc/dsmc_polyatomic_model.f90 | 22 +++++------ src/particles/particle_init.f90 | 8 ++-- src/readintools/readintools.f90 | 2 +- 6 files changed, 42 insertions(+), 41 deletions(-) diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini index ed72407b1..fd9aab040 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini +++ b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/parameter.ini @@ -10,7 +10,7 @@ NAnalyze = 1 ! Number of analyze points ! =============================================================================== ! ! MESH ! =============================================================================== ! -MeshFile = cube_mesh.h5 +MeshFile = cube_mesh.h5 useCurveds = F ! if boundaries have to be changed (else they are used from Mesh directly): TrackingMethod = triatracking diff --git a/src/particles/dsmc/dsmc_chemical_init.f90 b/src/particles/dsmc/dsmc_chemical_init.f90 index aefe78ae5..cd7408b3d 100644 --- a/src/particles/dsmc/dsmc_chemical_init.f90 +++ b/src/particles/dsmc/dsmc_chemical_init.f90 @@ -717,17 +717,17 @@ SUBROUTINE DSMC_BackwardRate_init() WRITE(UNIT=hilf,FMT='(I0)') iSpec IF(SpeciesDatabase.NE.'none') THEN ! Initialize FORTRAN interface. - CALL H5OPEN_F(err) + CALL H5OPEN_F(err) CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) CALL ReadAttribute(file_id_specdb,'SymmetryFactor',1,DatasetName = dsetname,IntScalar=SpecDSMC(iSpec)%SymmetryFactor) - CALL PrintOption('SymmetryFactor '//TRIM(Species(iSpec)%Name),'READIN',IntOpt=SpecDSMC(iSpec)%SymmetryFactor) + CALL PrintOption('SymmetryFactor '//TRIM(Species(iSpec)%Name),'DB',IntOpt=SpecDSMC(iSpec)%SymmetryFactor) ! Close the file. CALL H5FCLOSE_F(file_id_specdb, err) ! Close FORTRAN interface. CALL H5CLOSE_F(err) END IF - + IF(Species(iSpec)%DoOverwriteParameters) THEN WRITE(UNIT=hilf,FMT='(I0)') iSpec SpecDSMC(iSpec)%SymmetryFactor = GETINT('Part-Species'//TRIM(hilf)//'-SymmetryFactor') @@ -1216,12 +1216,12 @@ SUBROUTINE ReadArrheniusFromDatabase(file_id_specdb,dsetname2,iReac) IF(.NOT.ReactionFound) CALL abort(__STAMP__,'ERROR in parameter.ini: Defined reaction has not been found in the database!') CALL ReadAttribute(file_id_specdb,'Arrhenius-Prefactor',1,DatasetName = dsetname2,RealScalar=ChemReac%Arrhenius_Prefactor(iReac)) -CALL PrintOption('Arrhenius-Prefactor','READIN',RealOpt=ChemReac%Arrhenius_Prefactor(iReac)) +CALL PrintOption('Arrhenius-Prefactor','DB',RealOpt=ChemReac%Arrhenius_Prefactor(iReac)) CALL ReadAttribute(file_id_specdb,'Arrhenius-Powerfactor',1,DatasetName = dsetname2,RealScalar=ChemReac%Arrhenius_Powerfactor(iReac)) -CALL PrintOption('Arrhenius-Powerfactor','READIN',RealOpt=ChemReac%Arrhenius_Powerfactor(iReac)) +CALL PrintOption('Arrhenius-Powerfactor','DB',RealOpt=ChemReac%Arrhenius_Powerfactor(iReac)) CALL ReadAttribute(file_id_specdb,'Activation-Energy_K',1,DatasetName = dsetname2,RealScalar=ChemReac%EActiv(iReac)) ChemReac%EActiv(iReac) = ChemReac%EActiv(iReac)*BoltzmannConst -CALL PrintOption('Activation-Energy_K','READIN',RealOpt=ChemReac%EActiv(iReac)) +CALL PrintOption('Activation-Energy_K','DB',RealOpt=ChemReac%EActiv(iReac)) END SUBROUTINE ReadArrheniusFromDatabase END MODULE MOD_DSMC_ChemInit diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index a7836d550..400481942 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -371,7 +371,7 @@ SUBROUTINE InitDSMC() ELSEIF(DSMC%ElectronicModel.EQ.1.OR.DSMC%ElectronicModel.EQ.2.OR.DSMC%ElectronicModel.EQ.4) THEN CALL Abort(__STAMP__,'ERROR: Electronic models 1, 2 & 4 require an electronic levels database and CollisMode > 1!') END IF -ELSE +ELSE IF ((CollisMode .GT. 1).OR.(CollisMode .EQ. 0)) THEN DSMC%EpsElecBin = GETREAL('EpsMergeElectronicState','1E-4') END IF @@ -431,21 +431,21 @@ SUBROUTINE InitDSMC() dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) ! Reference temperature CALL ReadAttribute(file_id_specdb,'Tref',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%Tref) - CALL PrintOption('Tref','READ-IN',RealOpt=SpecDSMC(iSpec)%Tref) + CALL PrintOption('Tref','DB',RealOpt=SpecDSMC(iSpec)%Tref) ! Reference diameter CALL ReadAttribute(file_id_specdb,'dref',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%dref) - CALL PrintOption('dref','READIN',RealOpt=SpecDSMC(iSpec)%dref) + CALL PrintOption('dref','DB',RealOpt=SpecDSMC(iSpec)%dref) ! Viscosity exponent CALL ReadAttribute(file_id_specdb,'omega',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%omega) - CALL PrintOption('omega','READIN',RealOpt=SpecDSMC(iSpec)%omega) + CALL PrintOption('omega','DB',RealOpt=SpecDSMC(iSpec)%omega) ! Alpha parameter (VSS only) CALL AttributeExists(file_id_specdb,'alphaVSS',TRIM(dsetname), AttrExists=AttrExists) IF (AttrExists) THEN CALL ReadAttribute(file_id_specdb,'alphaVSS',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%alphaVSS) - ELSE + ELSE SpecDSMC(iSpec)%alphaVSS = 1.0 END IF - CALL PrintOption('alphaVSS','READIN',RealOpt=SpecDSMC(iSpec)%alphaVSS) + CALL PrintOption('alphaVSS','DB',RealOpt=SpecDSMC(iSpec)%alphaVSS) ! check for faulty parameters IF((Species(iSpec)%InterID * SpecDSMC(iSpec)%Tref * SpecDSMC(iSpec)%dref * SpecDSMC(iSpec)%alphaVSS) .EQ. 0) THEN CALL Abort(__STAMP__,'ERROR in species data: check collision parameters \n'//& @@ -701,8 +701,8 @@ SUBROUTINE InitDSMC() CALL ReadAttribute(file_id_specdb,'PolyatomicMol',1,DatasetName = dsetname,IntScalar=IntToLog) IF(IntToLog.EQ.1) SpecDSMC(iSpec)%PolyatomicMol = .TRUE. CALL PrintOption('Species Name','INFO',StrOpt=TRIM(Species(iSpec)%Name)) - CALL PrintOption('PolyatomicMol','READIN',LogOpt=SpecDSMC(iSpec)%PolyatomicMol) - ELSE + CALL PrintOption('PolyatomicMol','DB',LogOpt=SpecDSMC(iSpec)%PolyatomicMol) + ELSE SpecDSMC(iSpec)%PolyatomicMol = .FALSE. END IF IF(SpecDSMC(iSpec)%PolyatomicMol.AND.DSMC%DoTEVRRelaxation) THEN @@ -714,16 +714,16 @@ SUBROUTINE InitDSMC() ELSEIF ((Species(iSpec)%InterID.EQ.2).OR.(Species(iSpec)%InterID.EQ.20)) THEN SpecDSMC(iSpec)%Xi_Rot = 2 CALL ReadAttribute(file_id_specdb,'CharaTempVib',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%CharaTVib) - CALL PrintOption('CharaTempVib','READIN',RealOpt=SpecDSMC(iSpec)%CharaTVib) + CALL PrintOption('CharaTempVib','DB',RealOpt=SpecDSMC(iSpec)%CharaTVib) CALL AttributeExists(file_id_specdb,'CharaTempRot',TRIM(dsetname), AttrExists=AttrExists) IF (AttrExists) THEN CALL ReadAttribute(file_id_specdb,'CharaTempRot',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%CharaTRot) - ELSE + ELSE SpecDSMC(iSpec)%CharaTRot = 0.0 END IF - CALL PrintOption('CharaTempRot','READIN',RealOpt=SpecDSMC(iSpec)%CharaTRot) + CALL PrintOption('CharaTempRot','DB',RealOpt=SpecDSMC(iSpec)%CharaTRot) CALL ReadAttribute(file_id_specdb,'Ediss_eV',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%Ediss_eV) - CALL PrintOption('Ediss_eV','READIN',RealOpt=SpecDSMC(iSpec)%Ediss_eV) + CALL PrintOption('Ediss_eV','DB',RealOpt=SpecDSMC(iSpec)%Ediss_eV) ! Set the limit for the acceptance-rejection SpecDSMC(iSpec)%MaxVibQuant = 200 ! Calculation of the zero-point energy @@ -752,7 +752,7 @@ SUBROUTINE InitDSMC() hilf2=TRIM(hilf)//'-'//TRIM(hilf2) SpecDSMC(iSpec)%MW_ConstA(jSpec) = GETREAL('Part-Species'//TRIM(hilf)//'-MWConstA-'//TRIM(hilf2)) SpecDSMC(iSpec)%MW_ConstB(jSpec) = GETREAL('Part-Species'//TRIM(hilf)//'-MWConstB-'//TRIM(hilf2)) - + IF(SpecDSMC(iSpec)%MW_ConstA(jSpec).EQ.0) THEN CALL Abort(& __STAMP__& @@ -1025,7 +1025,7 @@ SUBROUTINE InitDSMC() CALL ReadAttribute(file_id_specdb,'HeatOfFormation_K',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%HeatOfFormation) SpecDSMC(iSpec)%HeatOfFormation = SpecDSMC(iSpec)%HeatOfFormation * BoltzmannConst ENDIF - CALL PrintOption('HeatOfFormation [J], '//TRIM(Species(iSpec)%Name),'READIN',RealOpt=SpecDSMC(iSpec)%HeatOfFormation) + CALL PrintOption('HeatOfFormation [J], '//TRIM(Species(iSpec)%Name),'DB',RealOpt=SpecDSMC(iSpec)%HeatOfFormation) END DO ! iSpec = nSpecies ! Close the file. CALL H5FCLOSE_F(file_id_specdb, err) @@ -1062,12 +1062,12 @@ SUBROUTINE InitDSMC() SpecDSMC(iSpec)%PreviousState=jSpec END IF END DO - ELSE + ELSE SpecDSMC(iSpec)%PreviousState = 0 END IF IF(SpecDSMC(iSpec)%PreviousState.GT.0) THEN CALL PrintOption('Previous species of '//TRIM(Species(iSpec)%Name)//' (ground state or previous ionized level)', & - 'READIN',StrOpt=TRIM(Species(SpecDSMC(iSpec)%PreviousState)%Name)) + 'DB',StrOpt=TRIM(Species(SpecDSMC(iSpec)%PreviousState)%Name)) END IF END DO ! Close the file. @@ -1087,7 +1087,7 @@ SUBROUTINE InitDSMC() END IF END DO - DO iSpec=1,nSpecies + DO iSpec=1,nSpecies WRITE(UNIT=hilf,FMT='(I0)') iSpec ! Read-in of species for field ionization (only required if it cannot be determined automatically) IF(Species(iSpec)%InterID.NE.4) THEN @@ -1383,7 +1383,7 @@ SUBROUTINE CalcHeatOfFormationIons() dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) CALL ReadAttribute(file_id_specdb,'HeatOfFormation_K',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%HeatOfFormation) SpecDSMC(iSpec)%HeatOfFormation = SpecDSMC(iSpec)%HeatOfFormation * BoltzmannConst - CALL PrintOption('HeatOfFormation [J], '//TRIM(Species(iSpec)%Name),'READIN',RealOpt=SpecDSMC(iSpec)%HeatOfFormation) + CALL PrintOption('HeatOfFormation [J], '//TRIM(Species(iSpec)%Name),'DB',RealOpt=SpecDSMC(iSpec)%HeatOfFormation) ! Close the file. CALL H5FCLOSE_F(file_id_specdb, err) ! Close FORTRAN interface. @@ -1721,6 +1721,7 @@ SUBROUTINE FinalizeDSMC() SDEALLOCATE(ChemReac%Hab) SDEALLOCATE(ChemReac%DeleteProductsList) SDEALLOCATE(ChemReac%CollCaseInfo) +SDEALLOCATE(ChemReac%totalReacToModel) SDEALLOCATE(CollInf%collidingSpecies) SDEALLOCATE(CollInf%Coll_Case) diff --git a/src/particles/dsmc/dsmc_polyatomic_model.f90 b/src/particles/dsmc/dsmc_polyatomic_model.f90 index 7d6d67479..f497cb9c8 100644 --- a/src/particles/dsmc/dsmc_polyatomic_model.f90 +++ b/src/particles/dsmc/dsmc_polyatomic_model.f90 @@ -77,24 +77,24 @@ SUBROUTINE InitPolyAtomicMolecs(iSpec) IF(SpeciesDatabase.NE.'none') THEN ! Initialize FORTRAN interface. - CALL H5OPEN_F(err) + CALL H5OPEN_F(err) CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) ! Linear molecule CALL ReadAttribute(file_id_specdb,'LinearMolec',1,DatasetName = dsetname,IntScalar=IntToLog) IF(IntToLog.EQ.1) THEN PolyatomMolDSMC(iPolyatMole)%LinearMolec = .TRUE. - ELSE + ELSE PolyatomMolDSMC(iPolyatMole)%LinearMolec = .FALSE. END IF - CALL PrintOption('LinearMolec, '//TRIM(Species(iSpec)%Name),'READIN',LogOpt=PolyatomMolDSMC(iPolyatMole)%LinearMolec) + CALL PrintOption('LinearMolec, '//TRIM(Species(iSpec)%Name),'DB',LogOpt=PolyatomMolDSMC(iPolyatMole)%LinearMolec) ! Number of atoms CALL ReadAttribute(file_id_specdb,'NumOfAtoms',1,DatasetName = dsetname,IntScalar=PolyatomMolDSMC(iPolyatMole)%NumOfAtoms) - CALL PrintOption('NumOfAtoms, '//TRIM(Species(iSpec)%Name),'READIN',IntOpt=PolyatomMolDSMC(iPolyatMole)%NumOfAtoms) + CALL PrintOption('NumOfAtoms, '//TRIM(Species(iSpec)%Name),'DB',IntOpt=PolyatomMolDSMC(iPolyatMole)%NumOfAtoms) ! Dissociation energy ! TSHO not implemented with polyatomic molecules, but Ediss_eV required for the calculation of polyatomic temp. (upper bound) CALL ReadAttribute(file_id_specdb,'Ediss_eV',1,DatasetName = dsetname,RealScalar=SpecDSMC(iSpec)%Ediss_eV) - CALL PrintOption('Ediss_eV, '//TRIM(Species(iSpec)%Name),'READIN',RealOpt=SpecDSMC(iSpec)%Ediss_eV) + CALL PrintOption('Ediss_eV, '//TRIM(Species(iSpec)%Name),'DB',RealOpt=SpecDSMC(iSpec)%Ediss_eV) ! Close the file. CALL H5FCLOSE_F(file_id_specdb, err) ! Close FORTRAN interface. @@ -130,17 +130,17 @@ SUBROUTINE InitPolyAtomicMolecs(iSpec) IF(SpeciesDatabase.NE.'none') THEN ! Initialize FORTRAN interface. - CALL H5OPEN_F(err) + CALL H5OPEN_F(err) CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) dsetname = TRIM('/Species/'//TRIM(Species(iSpec)%Name)) IF(PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN CALL AttributeExists(file_id_specdb,'CharaTempRot',TRIM(dsetname), AttrExists=AttrExists) IF (AttrExists) THEN CALL ReadAttribute(file_id_specdb,'CharaTempRot',1,DatasetName = dsetname,RealScalar=PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1)) - ELSE + ELSE PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1) = 0 END IF - CALL PrintOption('CharaTempRot, '//TRIM(Species(iSpec)%Name),'READIN',RealOpt=PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1)) + CALL PrintOption('CharaTempRot, '//TRIM(Species(iSpec)%Name),'DB',RealOpt=PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1)) PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(2:3) = 1 ELSE DO iVibDOF = 1,3 @@ -148,10 +148,10 @@ SUBROUTINE InitPolyAtomicMolecs(iSpec) CALL AttributeExists(file_id_specdb,TRIM('CharaTempRot'//TRIM(hilf2)),TRIM(dsetname), AttrExists=AttrExists) IF (AttrExists) THEN CALL ReadAttribute(file_id_specdb,TRIM('CharaTempRot'//TRIM(hilf2)),1,DatasetName = dsetname,RealScalar=PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF)) - ELSE + ELSE PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF) = 0 END IF - CALL PrintOption('CharaTempRot'//TRIM(hilf2)//' '//TRIM(Species(iSpec)%Name),'READIN',RealOpt=PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF)) + CALL PrintOption('CharaTempRot'//TRIM(hilf2)//' '//TRIM(Species(iSpec)%Name),'DB',RealOpt=PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF)) END DO END IF ! Read-in of characteristic vibrational temperature and calculation of zero-point energy @@ -160,7 +160,7 @@ SUBROUTINE InitPolyAtomicMolecs(iSpec) CALL ReadAttribute(file_id_specdb,TRIM('CharaTempVib'//TRIM(hilf2)),1,DatasetName = dsetname,RealScalar=PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF)) SpecDSMC(iSpec)%EZeroPoint = SpecDSMC(iSpec)%EZeroPoint & + DSMC%GammaQuant*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF)*BoltzmannConst - CALL PrintOption('CharaTempVib'//TRIM(hilf2)//' '//TRIM(Species(iSpec)%Name),'READIN',RealOpt=PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF)) + CALL PrintOption('CharaTempVib'//TRIM(hilf2)//' '//TRIM(Species(iSpec)%Name),'DB',RealOpt=PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF)) END DO ! Close the file. CALL H5FCLOSE_F(file_id_specdb, err) diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 800ffaa37..97d33873c 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -1587,14 +1587,14 @@ SUBROUTINE InitializeSpeciesParameter() CALL AttributeExists(file_id_specdb,'ChargeIC',TRIM(dsetname), AttrExists=AttrExists) IF (AttrExists) THEN CALL ReadAttribute(file_id_specdb,'ChargeIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%ChargeIC) - ELSE + ELSE Species(iSpec)%ChargeIC = 0.0 END IF - CALL PrintOption('ChargeIC','READIN',RealOpt=Species(iSpec)%ChargeIC) + CALL PrintOption('ChargeIC','DB',RealOpt=Species(iSpec)%ChargeIC) CALL ReadAttribute(file_id_specdb,'MassIC',1,DatasetName = dsetname,RealScalar=Species(iSpec)%MassIC) - CALL PrintOption('MassIC','READIN',RealOpt=Species(iSpec)%MassIC) + CALL PrintOption('MassIC','DB',RealOpt=Species(iSpec)%MassIC) CALL ReadAttribute(file_id_specdb,'InteractionID',1,DatasetName = dsetname,IntScalar=Species(iSpec)%InterID) - CALL PrintOption('InteractionID','READIN',IntOpt=Species(iSpec)%InterID) + CALL PrintOption('InteractionID','DB',IntOpt=Species(iSpec)%InterID) ELSE Species(iSpec)%DoOverwriteParameters = .TRUE. SWRITE(*,*) 'WARNING: DataSet not found: ['//TRIM(dsetname)//'] ['//TRIM(SpeciesDatabase)//']' diff --git a/src/readintools/readintools.f90 b/src/readintools/readintools.f90 index fc97fa141..04c1046c3 100644 --- a/src/readintools/readintools.f90 +++ b/src/readintools/readintools.f90 @@ -2200,7 +2200,7 @@ SUBROUTINE PrintOption(NameOpt,InfoOpt,IntOpt,IntArrayOpt,RealOpt,LogOpt,LogArra #if USE_LOADBALANCE IF (PerformLoadBalance) THEN SELECT CASE(TRIM(InfoOpt)) - CASE("INFO","PARAM","CALCUL.","OUTPUT","HDF5") + CASE("INFO","PARAM","CALCUL.","OUTPUT","HDF5","DB") RETURN END SELECT END IF From bfbd250a458eda6215e8541f9b1bfccf3d4a314d Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Tue, 28 Nov 2023 11:19:49 +0100 Subject: [PATCH 109/222] Bug fix and remove the dependency between DoSample and DoChemSurface --- src/particles/surfacemodel/surfacemodel_chemistry.f90 | 4 ++-- src/particles/surfacemodel/surfacemodel_init.f90 | 3 +++ src/particles/surfacemodel/surfacemodel_main.f90 | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index f567778b0..1840d97df 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -172,9 +172,9 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() IF(SurfChemReac(iReac)%Reactants(2).NE.0) CALL abort(__STAMP__,' ERROR: Probability based model only supports one reactant!') SpecID = SurfChemReac(iReac)%Reactants(1) SurfChem%EventProbInfo(SpecID)%NumOfReactionPaths = SurfChem%EventProbInfo(SpecID)%NumOfReactionPaths + 1 - CASE('A','D','LH','LHD') - SurfChemReac(iReac)%CatName = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-SurfName')) + CASE('A','D','LH','LHD','ER') PartBound%SurfaceModel(SurfChemReac(iReac)%Boundaries) = 20 + PartBound%Reactive(iPartBound) = .TRUE. DO iReac2 = 1, SurfChemReac(iReac)%NumOfBounds SurfChem%BoundisChemSurf(SurfChemReac(iReac)%Boundaries(iReac2)) = .TRUE. END DO diff --git a/src/particles/surfacemodel/surfacemodel_init.f90 b/src/particles/surfacemodel/surfacemodel_init.f90 index a87278ca3..a231afb26 100644 --- a/src/particles/surfacemodel/surfacemodel_init.f90 +++ b/src/particles/surfacemodel/surfacemodel_init.f90 @@ -197,6 +197,9 @@ SUBROUTINE FinalizeSurfaceModel() SDEALLOCATE(SurfModResultSpec) SDEALLOCATE(SurfModEnergyDistribution) SDEALLOCATE(SurfChemReac) +SDEALLOCATE(SurfChem%BoundisChemSurf) +SDEALLOCATE(SurfChem%PSMap) +SDEALLOCATE(SurfChem%EventProbInfo) #if USE_MPI CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR) IF(DoChemSurface) THEN diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index b9e7c6eba..084448679 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -52,7 +52,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) USE MOD_Particle_Vars ,ONLY: PartSpecies,WriteMacroSurfaceValues,Species,usevMPF,PartMPF USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod, TrackInfo USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, dXiEQ_SurfSample -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfChem, SurfModEnergyDistribution +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, SurfModEnergyDistribution USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared USE MOD_Particle_Vars ,ONLY: PDM, LastPartPos USE MOD_Particle_Vars ,ONLY: UseCircularInflow @@ -131,7 +131,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) ! Counter for surface analyze IF(CalcSurfCollCounter) SurfAnalyzeCount(PartSpecImpact) = SurfAnalyzeCount(PartSpecImpact) + 1 ! Sampling -DoSample = (DSMC%CalcSurfaceVal.AND.SamplingActive).OR.(DSMC%CalcSurfaceVal.AND.WriteMacroSurfaceValues).OR.(SurfChem%NumOfReact.GT.0) +DoSample = (DSMC%CalcSurfaceVal.AND.SamplingActive).OR.(DSMC%CalcSurfaceVal.AND.WriteMacroSurfaceValues) IF(DoSample) THEN IF (TrackingMethod.EQ.TRIATRACKING) THEN TrackInfo%p = 1 ; TrackInfo%q = 1 From bde48a3f6bb3b7276ba42a06c6565bd16ee59fe6 Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Tue, 28 Nov 2023 13:36:15 +0100 Subject: [PATCH 110/222] Warning for an overwrite of the surface model + clean-up --- src/io_hdf5/hdf5_input.f90 | 8 +-- .../boundary/particle_boundary_init.f90 | 5 +- .../boundary/particle_boundary_sampling.f90 | 4 +- .../emission/particle_surface_chemflux.f90 | 53 +++++++++---------- .../emission/particle_surface_flux.f90 | 1 - .../surfacemodel/surfacemodel_chemistry.f90 | 28 ++++++---- 6 files changed, 51 insertions(+), 48 deletions(-) diff --git a/src/io_hdf5/hdf5_input.f90 b/src/io_hdf5/hdf5_input.f90 index 0cd366bcf..ac070bff2 100644 --- a/src/io_hdf5/hdf5_input.f90 +++ b/src/io_hdf5/hdf5_input.f90 @@ -620,7 +620,7 @@ SUBROUTINE ReadAttribute(File_ID_in,AttribName,nVal,DatasetName,RealScalar,IntSc INTEGER ,INTENT(OUT),OPTIONAL,TARGET :: IntScalar !< Scalar integer attribute CHARACTER(LEN=255),INTENT(OUT),OPTIONAL,TARGET :: StrScalar !< Scalar string attribute CHARACTER(LEN=255),INTENT(OUT),OPTIONAL,TARGET :: StrArray(nVal) !< Array for character array attributes -LOGICAL ,INTENT(OUT),OPTIONAL :: LogicalScalar !< Scalar logical attribute +LOGICAL ,INTENT(OUT),OPTIONAL :: LogicalScalar !< Scalar logical attribute !---------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER(HID_T) :: Attr_ID,Type_ID,Loc_ID @@ -698,11 +698,11 @@ SUBROUTINE AttributeExists(File_ID_in,AttribName,DatasetName,AttrExists) ! INPUT/OUTPUT VARIABLES INTEGER(HID_T) ,INTENT(IN) :: File_ID_in !< HDF5 file id of opened file CHARACTER(LEN=*) ,INTENT(IN) :: AttribName !< name of attribute to be read -CHARACTER(LEN=*) ,INTENT(IN) :: DatasetName !< dataset name +CHARACTER(LEN=*) ,INTENT(IN) :: DatasetName !< dataset name LOGICAL ,INTENT(OUT) :: AttrExists !---------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -INTEGER(HID_T) :: Attr_ID,Type_ID,Loc_ID +INTEGER(HID_T) :: Attr_ID,Loc_ID !================================================================================================================================== CALL H5DOPEN_F(File_ID_in, TRIM(DatasetName),Loc_ID, iError) @@ -711,7 +711,7 @@ SUBROUTINE AttributeExists(File_ID_in,AttribName,DatasetName,AttrExists) IF(iError.NE.0) THEN AttrExists = .FALSE. -ELSE +ELSE AttrExists = .TRUE. END IF diff --git a/src/particles/boundary/particle_boundary_init.f90 b/src/particles/boundary/particle_boundary_init.f90 index 9ba3dd190..7df97265a 100644 --- a/src/particles/boundary/particle_boundary_init.f90 +++ b/src/particles/boundary/particle_boundary_init.f90 @@ -140,8 +140,8 @@ SUBROUTINE DefineParametersParticleBoundary() 'by A.I. Morozov, "Structure of Steady-State Debye Layers in a Low-Density Plasma near a Dielectric Surface", 2004\n'//& '9: SEE-I when Ar+ ion bombards surface with 0.01 probability and fixed SEE electron energy of 6.8 eV\n'//& '10: SEE-I when Ar+ bombards copper by J.G. Theis "Computing the Paschen curve for argon with speed-limited particle-in-cell simulation", 2021 (originates from Phelps1999)\n'// & - '11: SEE-E when e- bombard quartz (SiO2) by A. Dunaevsky, "Secondary electron emission from dielectric materials of a Hall thruster with segmented electrodes", 2003'& - , '0', numberedmulti=.TRUE.) + '11: SEE-E when e- bombard quartz (SiO2) by A. Dunaevsky, "Secondary electron emission from dielectric materials of a Hall thruster with segmented electrodes", 2003\n'//& + '20: Catalytic reaction model', '0', numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Part-Boundary[$]-LatticeVector' & , 'Lattice vector for the respective crystal structure [m]'& , numberedmulti=.TRUE.) @@ -445,7 +445,6 @@ SUBROUTINE InitializeVariablesPartBoundary() IF (PartBound%CoverageIni(iPartBound, iSpec).GT.PartBound%MaxCoverage(iPartBound, iSpec)) THEN CALL abort(__STAMP__,'ERROR: Surface coverage can not be larger than the maximum value', iPartBound) END IF - PartBound%TotalCoverage(iPartBound) = PartBound%TotalCoverage(iPartBound) + PartBound%CoverageIni(iPartBound, iSpec) END DO PartBound%TotalCoverage(iPartBound) = SUM(PartBound%CoverageIni(iPartBound,:)) PartBound%MaxTotalCoverage(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf)//'-MaxTotalCoverage', '1.') diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index 6f2066f2b..462340c9e 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -928,10 +928,10 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) CHARACTER(LEN=255) :: FileName,FileString,Statedummy CHARACTER(LEN=255) :: H5_Name CHARACTER(LEN=255) :: NodeTypeTemp -CHARACTER(LEN=255) :: SpecID, ReacID +CHARACTER(LEN=255) :: SpecID CHARACTER(LEN=255),ALLOCATABLE :: Str2DVarNames(:) INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, nVar2D_Heat -INTEGER :: iSpec, iSurfSide, nReac, iReac +INTEGER :: iSpec, iSurfSide, nReac INTEGER :: p,q,OutputCounter REAL :: tstart,tend, tout REAL, ALLOCATABLE :: MacroSurfaceSpecChemVal(:,:,:,:,:) diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index 48029f412..721ab26b9 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -29,7 +29,7 @@ MODULE MOD_Particle_SurfChemFlux CONTAINS !=================================================================================================================================== -!> Particle insertion by pure surface reactions +!> Particle insertion by pure surface reactions (independent of gas-collisions on the surface) !> 1.) Determine the surface parameters !> 2.) Calculate the number of newly created products and update the surface properties !> a) Langmuir-Hinshelwood reaction with instantaneous desorption (Arrhenius model) @@ -54,8 +54,8 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Particle_Analyze_Tools ,ONLY: CalcEkinPart USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID USE MOD_Timedisc_Vars ,ONLY: dt -USE MOD_Particle_Surfaces_Vars -USE MOD_Particle_Boundary_Vars +USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, SurfFluxSideSize +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, SurfSideArea_Shared USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win, SurfChem, SurfChemReac, ChemWallProp, ChemDesorpWall USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle USE MOD_Particle_SurfFlux ,ONLY: SetSurfacefluxVelocities, CalcPartPosTriaSurface, DefineSideDirectVec2D @@ -89,8 +89,7 @@ SUBROUTINE ParticleSurfChemFlux() REAL :: nu, E_act, Coverage, Rate, DissOrder, AdCount REAL :: BetaCoeff REAL :: WallTemp -REAL :: SurfMol, SurfMolAbs -REAL :: MPF +REAL :: SurfMol, SurfMolDens INTEGER :: iReac, ReactantCount, BoundID, nSF INTEGER :: iVal, iReactant, iValReac, SurfSideID, iBias INTEGER :: SubP, SubQ @@ -129,14 +128,16 @@ SUBROUTINE ParticleSurfChemFlux() Area = SurfSideArea_Shared(SubP, SubQ,SurfSideID) IF(PartBound%LatticeVec(BoundID).GT.0.) THEN - ! Number of surface molecules in dependence of the occupancy of the unit cell + ! Absolute number of surface molecules in dependence of the occupancy of the unit cell SurfMol = PartBound%MolPerUnitCell(BoundID) * Area & /(PartBound%LatticeVec(BoundID)*PartBound%LatticeVec(BoundID)) - SurfMolAbs = PartBound%MolPerUnitCell(BoundID) /(PartBound%LatticeVec(BoundID)*PartBound%LatticeVec(BoundID)) + ! Number of surface molecules per m^3 surface + SurfMolDens = PartBound%MolPerUnitCell(BoundID) /(PartBound%LatticeVec(BoundID)*PartBound%LatticeVec(BoundID)) ELSE ! Alternative calculation by the average number of surface molecules per area for a monolayer SurfMol = 10.**19 * Area - SurfMolAbs = 10.**19 + ! Number of surface molecules per m^3 surface + SurfMolDens = 10.**19 END IF ! Randomize the order in which the reactions are called to remove biases @@ -160,16 +161,16 @@ SUBROUTINE ParticleSurfChemFlux() iSpec = SurfChemReac(iReac)%Reactants(iVal) ! Test for multiples of the same reactant ReactantCount = COUNT(SurfChemReac(iReac)%Reactants(:).EQ.iSpec) - IF(iSpec.NE.SurfChem%SurfSpecies) THEN + IF(iSpec.NE.SurfChem%SurfSpecies) THEN ! Coverage set to 1 for surface species Coverage = Coverage * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) - ! Get the particle density per surface area from the coverage - AdsDens = AdsDens * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) * SurfMolAbs + ! Particle density of the adsorbate on the surface + AdsDens = AdsDens * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) * SurfMolDens END IF END IF END DO ! Determine the reaction energy in dependence of the surface coverage [J] - BetaCoeff = SurfChemReac(iReac)%HeatAccommodation + BetaCoeff = SurfChemReac(iReac)%HeatAccommodation !! Incomplete energy accomodation ReacHeat = (SurfChemReac(iReac)%EReact - Coverage*SurfChemReac(iReac)%EScale) * BoltzmannConst nu = SurfChemReac(iReac)%Prefactor @@ -198,6 +199,7 @@ SUBROUTINE ParticleSurfChemFlux() Coverage = 1. END IF + ! Number of available adsorbates AdCount = Coverage * SurfMol ! Check if enough adsorbate reactants are available @@ -235,10 +237,10 @@ SUBROUTINE ParticleSurfChemFlux() iSpec = SurfChemReac(iReac)%Reactants(iVal) ! Test for multiples of the same reactant ReactantCount = COUNT(SurfChemReac(iReac)%Reactants(:).EQ.iSpec) - IF(iSpec.NE.SurfChem%SurfSpecies) THEN + IF(iSpec.NE.SurfChem%SurfSpecies) THEN ! Coverage set to 1 for surface species Coverage = Coverage * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) - ! Calculate the absolute particle density per unit element - AdsDens = AdsDens * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) * SurfMolAbs + ! Calculate the adsorbate particle density per unit element + AdsDens = AdsDens * ChemWallProp(iSpec,1,SubP,SubQ,SurfSideID) * SurfMolDens END IF END IF END DO @@ -288,7 +290,7 @@ SUBROUTINE ParticleSurfChemFlux() IF(ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID).GT.PartBound%MaxCoverage(BoundID, iSpec)) THEN ChemWallProp(iSpec,1, SubP, SubQ, SurfSideID) = PartBound%MaxCoverage(BoundID, iSpec) END IF - ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) = ChemWallProp(iSpec,2, SubP, SubQ, SurfSideID) + DesCount*ReacHeat*SurfMol + ChemWallProp(iSpec,2,SubP,SubQ,SurfSideID) = ChemWallProp(iSpec,2,SubP,SubQ,SurfSideID) + DesCount*ReacHeat*SurfMol DO iValReac=1, SIZE(SurfChemReac(iReac)%Reactants(:)) IF(SurfChemReac(iReac)%Reactants(iValReac).NE.0) THEN iReactant = SurfChemReac(iReac)%Reactants(iValReac) @@ -315,6 +317,7 @@ SUBROUTINE ParticleSurfChemFlux() IF(iReactant.NE.SurfChem%SurfSpecies) THEN Coverage = ChemWallProp(iReactant,1,SubP, SubQ, SurfSideID) ELSE + ! Coverage set to 1 for surface species Coverage = 1. END IF AdCount = Coverage * SurfMol @@ -325,7 +328,7 @@ SUBROUTINE ParticleSurfChemFlux() AdCount = Coverage * SurfMol END IF ! Absolute particle density of the surface element - AdsDens = Coverage * SurfMolAbs + AdsDens = Coverage * SurfMolDens ! Calculate the desorption energy in dependence of the coverage [J] DesHeat = (SurfChemReac(iReac)%EReact - Coverage*SurfChemReac(iReac)%EScale) * BoltzmannConst @@ -344,6 +347,7 @@ SUBROUTINE ParticleSurfChemFlux() END IF E_act = SurfChemReac(iReac)%E_initial + Coverage * SurfChemReac(iReac)%W_interact + ! Reaction rate according to the Polanyi-Wigner equation Rate = nu * AdsDens**DissOrder * exp(-E_act/WallTemp) ! Energy in K ! Randomize the desorption process CALL RANDOM_NUMBER(RanNum) @@ -391,7 +395,7 @@ SUBROUTINE ParticleSurfChemFlux() NbrOfParticle = 0 iPartTotal = 0 - ! 3.) Insert the product species into the gas phase + ! 3.) Insert the product species into the gas phase by a surface flux from the boundary DO iSpec = 1, nSpecies #if USE_LOADBALANCE @@ -510,7 +514,7 @@ SUBROUTINE ParticleSurfChemFlux() END SUBROUTINE ParticleSurfChemFlux !=================================================================================================================================== -!> Bias treatment for multiple reactions on the same surface element +!> Bias treatment for multiple reactions on the same surface element by randomization of the reaction order !=================================================================================================================================== FUNCTION RemoveBias(SurfNumOfReac) ! MODULES @@ -545,7 +549,7 @@ FUNCTION RemoveBias(SurfNumOfReac) END FUNCTION RemoveBias !=================================================================================================================================== -!> (Instantaneous) Diffusion of particles along the surface +!> (Instantaneous) Diffusion of particles along the surface corresponding to an averaging over the surface elements !=================================================================================================================================== SUBROUTINE ParticleSurfDiffusion() ! Modules @@ -554,10 +558,8 @@ SUBROUTINE ParticleSurfDiffusion() USE MOD_MPI_Shared_Vars ,ONLY: myComputeNodeRank, nComputeNodeProcessors USE MOD_Mesh_Vars ,ONLY: SideToElem, offsetElem USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID -USE MOD_Particle_Surfaces_Vars -USE MOD_Particle_Boundary_Vars -USE MOD_SurfaceModel -USE MOD_SurfaceModel_Chemistry +USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF +USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide, nComputeNodeSurfTotalSides USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win, SurfChem, ChemWallProp USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC @@ -584,9 +586,6 @@ SUBROUTINE ParticleSurfDiffusion() INTEGER :: SurfSideID INTEGER :: SubP, SubQ REAL :: Coverage_Sum -#if USE_LOADBALANCE -REAL :: tLBStart -#endif /*USE_LOADBALANCE*/ !=================================================================================================================================== CatBoundNum = SurfChem%CatBoundNum diff --git a/src/particles/emission/particle_surface_flux.f90 b/src/particles/emission/particle_surface_flux.f90 index c7a763c61..35b0b76e6 100644 --- a/src/particles/emission/particle_surface_flux.f90 +++ b/src/particles/emission/particle_surface_flux.f90 @@ -525,7 +525,6 @@ END SUBROUTINE AnalyzePartPos SUBROUTINE SetInnerEnergies(iSpec, iSF, NbrOfParticle) ! MODULES USE MOD_Globals -USE MOD_DSMC_Vars ,ONLY: SpecDSMC USE MOD_Particle_Vars ,ONLY: PDM USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr ! IMPLICIT VARIABLE HANDLING diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index 1840d97df..3ef4eee91 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -57,7 +57,7 @@ SUBROUTINE DefineParametersSurfaceChemistry() ,'Products of Reaction[$] (Product1, Product2, Product3)', '0 , 0, 0' & , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-ReactHeat', & - 'Heat flux to or from the surface due to the reaction', '0.' , numberedmulti=.TRUE.) + 'Heat flux to or from the surface due to the reaction [K]', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-HeatScaling', & 'Linear dependence of the heat flux on the coverage', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-EnergyAccommodation', & @@ -66,8 +66,8 @@ SUBROUTINE DefineParametersSurfaceChemistry() '0', numberedmulti=.TRUE.) CALL prms%CreateIntOption( 'Surface-Reaction[$]-Promotion','Promotion/Coadsorption behaviour due to other reactions', & '0', numberedmulti=.TRUE.) -CALL prms%CreateRealOption( 'Surface-Reaction[$]-StickingCoefficient', & - 'Ratio of adsorbed to impinging particles on a reactive surface', '0.' , numberedmulti=.TRUE.) +CALL prms%CreateRealOption( 'Surface-Reaction[$]-StickingCoefficient','Ratio of adsorbed to impinging particles on a\n' //& + 'reactive surface, Langmuir or Kisluik model', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-DissOrder', & 'Associative = 1, dissociative = 2', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-EqConstant', & @@ -87,7 +87,7 @@ SUBROUTINE DefineParametersSurfaceChemistry() CALL prms%CreateRealOption( 'Surface-Reaction[$]-Prefactor', & 'Arrhenius prefactor for the reaction/desorption', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-Energy', & - 'Arrhenius energy for the reaction/desorption', '0.' , numberedmulti=.TRUE.) + 'Arrhenius energy for the reaction/desorption [K]', '0.' , numberedmulti=.TRUE.) CALL prms%CreateLogicalOption( 'Surface-Diffusion', 'Diffusion along the surface', '.FALSE.') CALL prms%CreateLogicalOption( 'Surface-TotalDiffusion', 'Diffusion along all possible surface', '.FALSE.') CALL prms%CreateIntOption( 'Surface-Reaction[$]-NumOfBoundaries', 'Num of boundaries for surface reaction.', & @@ -173,8 +173,15 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() SpecID = SurfChemReac(iReac)%Reactants(1) SurfChem%EventProbInfo(SpecID)%NumOfReactionPaths = SurfChem%EventProbInfo(SpecID)%NumOfReactionPaths + 1 CASE('A','D','LH','LHD','ER') - PartBound%SurfaceModel(SurfChemReac(iReac)%Boundaries) = 20 - PartBound%Reactive(iPartBound) = .TRUE. + ! Check if a surface model is already defined, if not set the boundary to reactive + IF (ANY(PartBound%SurfaceModel(SurfChemReac(iReac)%Boundaries).GT.0)) THEN + IF (ANY(PartBound%SurfaceModel(SurfChemReac(iReac)%Boundaries).NE.20)) THEN + SWRITE(*,*) 'WARNING: The surface model for boundary ', SurfChemReac(iReac)%Boundaries, ' is set to catalytic.' + END IF + ELSE + PartBound%SurfaceModel(SurfChemReac(iReac)%Boundaries) = 20 + PartBound%Reactive(SurfChemReac(iReac)%Boundaries) = .TRUE. + END IF DO iReac2 = 1, SurfChemReac(iReac)%NumOfBounds SurfChem%BoundisChemSurf(SurfChemReac(iReac)%Boundaries(iReac2)) = .TRUE. END DO @@ -548,7 +555,8 @@ END SUBROUTINE InitSurfaceModelChemistry !> 2.) Calculate the reaction probability by the Arrhenius equation (bias-free for multiple channels) !> 3.) Choose the occuring pathway by comparison with a random number !> 4.) Perform the chosen process -!> a.) Adsorption: delete the incoming particle and update the surface values +!> a.) Adsorption: delete the incoming particle and update the surface values, for the special case of dissociative adsorption, +!> the dissociated half is inserted in the gas phase !> b.) ER: delete the incoming particle, update the surface values and create the gas phase products !=================================================================================================================================== SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) @@ -562,7 +570,6 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) USE MOD_Particle_Boundary_Tools ,ONLY: CalcWallSample ! VARIABLES USE MOD_Globals_Vars ,ONLY: PI, BoltzmannConst -USE MOD_TimeDisc_Vars ,ONLY: dt USE MOD_Particle_Vars ,ONLY: PartSpecies,Species,usevMPF, WriteMacroSurfaceValues USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, SurfSideArea_Shared @@ -582,7 +589,6 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: ProductSpecNbr !< number of emitted particles for ProductSpec(2) -REAL :: TempErgy !< temperature, energy or velocity used for VeloFromDistribution INTEGER :: locBCID, SurfSideID CHARACTER(LEN=5) :: InteractionType REAL :: RanNum, RanNum2 @@ -603,7 +609,7 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) INTEGER :: iReac_Ads, iReac_ER, iReac_ER_new INTEGER :: iReac, iValProd, iProd, iReactant, iValReac INTEGER :: iCoadsReac, iCoadsSpec -INTEGER :: NewPartID, iNewPart +INTEGER :: NewPartID INTEGER :: SubP, SubQ !=================================================================================================================================== ! 0.) Determine the surface parameters: Coverage and number of surface molecules @@ -860,7 +866,7 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) CALL RemoveParticle(PartID) ! Heat flux on the surface created by the reaction - ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) = ChemSampWall(speciesID, 2,SubP,SubQ, SurfSideID) + ReacHeat * partWeight * BetaCoeff + ChemSampWall(speciesID,2,SubP,SubQ,SurfSideID) = ChemSampWall(speciesID,2,SubP,SubQ,SurfSideID) + ReacHeat*partWeight*BetaCoeff ! Create the Eley-Rideal reaction product ! Incomplete energy accomodation: remaining energy is added to the product From 529e41c7df81fca01140cf79d308e9f7f3ce6e44 Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Wed, 29 Nov 2023 13:26:38 +0100 Subject: [PATCH 111/222] Update of the regressioncheck and reduce max warnings --- .../PartAnalyze_ref.csv | 10 +++++----- ...ge_DSMCSurfChemState_000.0000000100_ref.h5 | Bin 8576 -> 8664 bytes src/particles/dsmc/dsmc_polyatomic_model.f90 | 5 +---- src/particles/emission/particle_emission.f90 | 2 +- .../emission/particle_surface_chemflux.f90 | 2 +- .../surfacemodel/surfacemodel_chemistry.f90 | 4 ++-- 6 files changed, 10 insertions(+), 13 deletions(-) diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/PartAnalyze_ref.csv b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/PartAnalyze_ref.csv index 86e820b34..abcffdabc 100644 --- a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/PartAnalyze_ref.csv +++ b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/PartAnalyze_ref.csv @@ -1,7 +1,7 @@ 001-TIME,002-NumDens-Spec-001,003-NumDens-Spec-002,004-NumDens-Spec-003,005-TempTra-001,006-TempTra-002,007-TempTra-003,008-TempVib001,009-TempVib002,010-XiVibMean001,011-XiVibMean002,012-TempRot001,013-TempRot002,014-TempTotal001,015-TempTotal002,016-TempTotal003 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.2000000000000000E-008,0.6409624999999758E+024,0.6631524999999750E+025,0.7272487499999725E+025,0.6815872170430431E+003,0.8824253619469796E+003,0.8647244419449872E+003,0.7225821814892017E+003,0.7257629927273007E+003,0.1165677072977680E+000,0.2858522406907835E+000,0.7080556000304019E+003,0.7219936106474395E+003,0.6928673286906699E+003,0.8132509364763449E+003,0.8026408971733794E+003 -0.4000000000000000E-008,0.9575249999999638E+024,0.1175958749999956E+026,0.1271711249999952E+026,0.8149782996257045E+003,0.8826386756932485E+003,0.8775442408052915E+003,0.7202142379403197E+003,0.7270335272970252E+003,0.1152801118442669E+000,0.2869904946671936E+000,0.7714351986371928E+003,0.8036052433284530E+003,0.7958179386163454E+003,0.8442947324905765E+003,0.8406447103605983E+003 -0.6000000000000001E-008,0.1111299999999958E+025,0.1499172499999943E+026,0.1610302499999939E+026,0.8083163249007499E+003,0.8509890487971761E+003,0.8480441239730454E+003,0.7271171674117081E+003,0.7299620269191739E+003,0.1190472570419864E+000,0.2896143507007087E+000,0.7915451609800861E+003,0.8292297647041139E+003,0.7998755228051884E+003,0.8361354648994852E+003,0.8336330981920255E+003 -0.8000000000000000E-008,0.1168799999999956E+025,0.1683772499999936E+026,0.1800652499999932E+026,0.7976507726711646E+003,0.8293348066204077E+003,0.8272782022017386E+003,0.7289417960659334E+003,0.7324402728806613E+003,0.1200498621959230E+000,0.2918349982670587E+000,0.7878141232266238E+003,0.8228387801239928E+003,0.7921973488152126E+003,0.8215361377102148E+003,0.8196317626872452E+003 -0.1000000000000000E-007,0.1186424999999955E+025,0.1792024999999932E+026,0.1910667499999928E+026,0.7921101853410606E+003,0.8114448112392162E+003,0.8102442316757275E+003,0.7273262887523593E+003,0.7340617774491647E+003,0.1191620223723783E+000,0.2932880233662640E+000,0.7861961400645225E+003,0.8080993190533446E+003,0.7882916168717842E+003,0.8058931576612528E+003,0.8048001936562050E+003 +0.2000000000000000E-008,0.6440999999999956E+024,0.7155987499999952E+025,0.7800087499999948E+025,0.6823840009025148E+003,0.8258129909322150E+003,0.8139691991185808E+003,0.7290665105582908E+003,0.7234170619948153E+003,0.1201184939201303E+000,0.2837507746645393E+000,0.7117876161721475E+003,0.7276847064334395E+003,0.6949646986672283E+003,0.7831706516613326E+003,0.7758869571741229E+003 +0.4000000000000000E-008,0.9956499999999964E+024,0.1295489999999995E+026,0.1395054999999995E+026,0.7920738766606559E+003,0.8333772989307823E+003,0.8304294759142525E+003,0.7248876066343813E+003,0.7264284779784058E+003,0.1178260055449590E+000,0.2864484300557467E+000,0.7642124808596395E+003,0.7841657324250993E+003,0.7796390886554085E+003,0.8089642252808561E+003,0.8068712918638132E+003 +0.6000000000000001E-008,0.1146174999999993E+025,0.1647068749999989E+026,0.1761686249999988E+026,0.7809467382529920E+003,0.8011378883773077E+003,0.7998242270205402E+003,0.7206494017806439E+003,0.7281870764086437E+003,0.1155163677538223E+000,0.2880240048697624E+000,0.7764602467054859E+003,0.7887781833588566E+003,0.7778310581840167E+003,0.7924898574650985E+003,0.7915361377396937E+003 +0.8000000000000000E-008,0.1193962499999992E+025,0.1801336249999988E+026,0.1920732499999987E+026,0.7663148074312944E+003,0.7795096006129373E+003,0.7786893881026509E+003,0.7196175570814660E+003,0.7287959499754151E+003,0.1149564378844760E+000,0.2885695398791336E+000,0.7644674740623997E+003,0.7748594939429184E+003,0.7645429807486896E+003,0.7749838724383117E+003,0.7743348474885089E+003 +0.1000000000000000E-007,0.1214187499999992E+025,0.1901323749999988E+026,0.2022742499999987E+026,0.7592429786752078E+003,0.7649017116530091E+003,0.7645620360468712E+003,0.7268497636145009E+003,0.7275762154595045E+003,0.1189005607778561E+000,0.2874767035711678E+000,0.7566155325471688E+003,0.7623736555425392E+003,0.7574639904756773E+003,0.7619161055291761E+003,0.7616488593301904E+003 diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/coverage_DSMCSurfChemState_000.0000000100_ref.h5 b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/coverage_DSMCSurfChemState_000.0000000100_ref.h5 index 390d175c28a4375a10845334d7df3e4591990bda..0057c9f8f3b8ec618d2a1e8b95ee857ed5404a00 100644 GIT binary patch literal 8664 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 aR)?pm4xX}rb=ViHOHSiIOq>Jj(tiQ%WEkWC diff --git a/src/particles/dsmc/dsmc_polyatomic_model.f90 b/src/particles/dsmc/dsmc_polyatomic_model.f90 index 98b10c67c..711c06eb8 100644 --- a/src/particles/dsmc/dsmc_polyatomic_model.f90 +++ b/src/particles/dsmc/dsmc_polyatomic_model.f90 @@ -176,7 +176,7 @@ SUBROUTINE DSMC_FindFirstVibPick(iInitTmp, iSpec, init_or_sf) END SUBROUTINE DSMC_FindFirstVibPick -SUBROUTINE DSMC_SetInternalEnr(iSpec, iInit, iPart, init_or_sf, iReac) +SUBROUTINE DSMC_SetInternalEnr(iSpec, iInit, iPart, init_or_sf) !=================================================================================================================================== !> Energy distribution according to dissertation of Laux (diatomic) !=================================================================================================================================== @@ -195,13 +195,10 @@ SUBROUTINE DSMC_SetInternalEnr(iSpec, iInit, iPart, init_or_sf, iReac) !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES INTEGER, INTENT(IN) :: iSpec, iInit, iPart, init_or_sf -INTEGER, INTENT(IN), OPTIONAL :: iReac !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -REAL :: iRan -INTEGER :: iQuant REAL :: TVib ! vibrational temperature REAL :: TRot ! rotational temperature INTEGER :: ElemID diff --git a/src/particles/emission/particle_emission.f90 b/src/particles/emission/particle_emission.f90 index 9551dd8c2..f65cc41e7 100644 --- a/src/particles/emission/particle_emission.f90 +++ b/src/particles/emission/particle_emission.f90 @@ -43,7 +43,7 @@ SUBROUTINE ParticleInserting() USE MOD_Particle_Vars USE MOD_PIC_Vars USE MOD_part_tools ,ONLY: UpdateNextFreePosition -USE MOD_DSMC_Vars ,ONLY: useDSMC, CollisMode, SpecDSMC +USE MOD_DSMC_Vars ,ONLY: useDSMC, CollisMode USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr USE MOD_Particle_Analyze_Vars ,ONLY: CalcPartBalance,nPartIn,PartEkinIn USE MOD_Particle_Analyze_Tools ,ONLY: CalcEkinPart diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index 721ab26b9..0c894c75f 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -472,7 +472,7 @@ SUBROUTINE ParticleSurfChemFlux() IF (useDSMC.AND.(CollisMode.GT.1)) THEN DO iPart = 1,NbrOfParticle PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) - IF (PositionNbr .NE. 0) CALL DSMC_SetInternalEnr(iSpec, BoundID, PositionNbr, 3, iReac) + IF (PositionNbr .NE. 0) CALL DSMC_SetInternalEnr(iSpec, BoundID, PositionNbr, 3) END DO END IF diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index 3ef4eee91..659006be9 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -838,7 +838,7 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) CALL CreateParticle(iProd,NewPos(1:3),GlobalElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID, NewMPF=partWeight) - CALL DSMC_SetInternalEnr(iProd,locBCID,NewPartID,4,iReac) + CALL DSMC_SetInternalEnr(iProd,locBCID,NewPartID,4) IF((DSMC%CalcSurfaceVal.AND.SamplingActive).OR.(DSMC%CalcSurfaceVal.AND.WriteMacroSurfaceValues)) & CALL CalcWallSample(NewPartID,SurfSideID,'new',SurfaceNormal_opt=n_loc) @@ -888,7 +888,7 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) CALL CreateParticle(iProd,NewPos(1:3),GlobalElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID, NewMPF=partWeight) - CALL DSMC_SetInternalEnr(iProd,locBCID,NewPartID,4,iReac) + CALL DSMC_SetInternalEnr(iProd,locBCID,NewPartID,4) ! Sampling of newly created particles IF((DSMC%CalcSurfaceVal.AND.SamplingActive).OR.(DSMC%CalcSurfaceVal.AND.WriteMacroSurfaceValues)) & From 336d405b63c3209689c1ffa7824cb8eee52be6ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Wed, 29 Nov 2023 15:33:51 +0100 Subject: [PATCH 112/222] Ad two columns to RegCheck DSMC_QualityFactors --- .../CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv index 26a3769b9..b0f43d8b6 100644 --- a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-NumDens-Spec-001,003-TempTra-001,004-TempVib001,005-XiVibMean001,006-TempRot001,007-TempTotal001,008-Pmean,009-Pmax,010-MeanFreePath -0.0000000000000000E+000,0.1000000000000000E+023,0.5000769421287198E+004,0.4948975354726982E+004,0.1575887951139208E+001,0.4996259759961257E+004,0.4986985584220915E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-007,0.1000000000000000E+023,0.5003185373708683E+004,0.4949437828908193E+004,0.1575924331939683E+001,0.4992329660714551E+004,0.4987003087500717E+004,0.6100164229169058E-001,0.1040428012026279E+000,0.2977138906706071E-003 +001-TIME,002-NumDens-Spec-001,003-TempTra-001,004-TempVib001,005-XiVibMean001,006-TempRot001,007-TempTotal001,008-Pmean,009-Pmax,010-MeanFreePath,011-MaxMCSoverMFP,012-ResolvedCellPercentage +0,1E+022,5000.7694212872,4948.97535472698,1.57588795113921,4996.25975996126,4986.98558422092,0,0,0,0,0 +0.00000001,1E+022,5003.18537370868,4949.43782890819,1.57592433193968,4992.32966071455,4987.00308750072,0.0610016422916906,0.104042801202628,0.000297713890670607,0.000123887444083463,0 From 2938a8262534f7cb542e2414656623b5da4483e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Wed, 29 Nov 2023 16:15:52 +0100 Subject: [PATCH 113/222] Fixed calcualtion 0/0 ResolvedCellPercentage --- src/particles/analyze/particle_analyze.f90 | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/particles/analyze/particle_analyze.f90 b/src/particles/analyze/particle_analyze.f90 index 81d05a53b..ffafafde4 100644 --- a/src/particles/analyze/particle_analyze.f90 +++ b/src/particles/analyze/particle_analyze.f90 @@ -1398,15 +1398,15 @@ SUBROUTINE AnalyzeParticles(Time) MaxCollProb = DSMC%CollProbMax ! ResolvedCellPercentage: #if USE_MPI - IF(MPIRoot)THEN - CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%ResolvedCellCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) - CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%ParticlePairingCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) - ELSE - CALL MPI_REDUCE(DSMC%ResolvedCellCounter,DSMC%ResolvedCellCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) - CALL MPI_REDUCE(DSMC%ParticlePairingCounter,DSMC%ParticlePairingCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) - END IF + IF(MPIRoot)THEN + CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%ResolvedCellCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) + CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%ParticlePairingCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) + ELSE + CALL MPI_REDUCE(DSMC%ResolvedCellCounter,DSMC%ResolvedCellCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) + CALL MPI_REDUCE(DSMC%ParticlePairingCounter,DSMC%ParticlePairingCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) + END IF #endif /*USE_MPI*/ - ResolvedCellPercentage = REAL(DSMC%ResolvedCellCounter) / REAL(DSMC%ParticlePairingCounter) * 100 + IF(DSMC%ParticlePairingCounter.GT.0) ResolvedCellPercentage = REAL(DSMC%ResolvedCellCounter) / REAL(DSMC%ParticlePairingCounter) * 100 ! MeanCollProb: IF(DSMC%CollProbMeanCount.GT.0) MeanCollProb = DSMC%CollProbMean / DSMC%CollProbMeanCount ! MeanFreePath: From 2be094bd44f47351947f9acab883170e89ba81ed Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Wed, 29 Nov 2023 18:16:39 +0100 Subject: [PATCH 114/222] Moved read-in of SurfName to SurfaceModel = 20 --- src/particles/surfacemodel/surfacemodel_chemistry.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index 659006be9..ea3d1ac4d 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -154,13 +154,12 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() ! Get the reaction names, reactive species and boundaries DO iReac = 1, ReadInNumOfReact WRITE(UNIT=hilf,FMT='(I0)') iReac - SurfChemReac(iReac)%CatName = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-SurfName')) SurfChemReac(iReac)%Reactants(:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Reactants',2,'0,0') SurfChemReac(iReac)%Products(:) = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Products',3,'0,0,0') SurfChemReac(iReac)%ReactType = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-Type')) SurfChemReac(iReac)%NumOfBounds = GETINT('Surface-Reaction'//TRIM(hilf)//'-NumOfBoundaries') IF (SurfChemReac(iReac)%NumOfBounds.EQ.0) THEN - CALL abort(__STAMP__,'ERROR: At least one boundary must be defined for each surface reaction!',iReac) + CALL abort(__STAMP__,'ERROR: At least one boundary must be defined for each surface reaction!',iReac) END IF SurfChemReac(iReac)%Boundaries = GETINTARRAY('Surface-Reaction'//TRIM(hilf)//'-Boundaries',SurfChemReac(iReac)%NumOfBounds) @@ -173,6 +172,7 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() SpecID = SurfChemReac(iReac)%Reactants(1) SurfChem%EventProbInfo(SpecID)%NumOfReactionPaths = SurfChem%EventProbInfo(SpecID)%NumOfReactionPaths + 1 CASE('A','D','LH','LHD','ER') + SurfChemReac(iReac)%CatName = TRIM(GETSTR('Surface-Reaction'//TRIM(hilf)//'-SurfName')) ! Check if a surface model is already defined, if not set the boundary to reactive IF (ANY(PartBound%SurfaceModel(SurfChemReac(iReac)%Boundaries).GT.0)) THEN IF (ANY(PartBound%SurfaceModel(SurfChemReac(iReac)%Boundaries).NE.20)) THEN From c966df194bea24187f4efb90083272ce4a9f603f Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Thu, 30 Nov 2023 13:12:10 +0100 Subject: [PATCH 115/222] Regressiontest for the Eley-Rideal and Langmuir-Hinshelwood reaction rates --- .../NIG_Reservoir/CAT_RATES_ER/DSMC.ini | 23 ++++ .../NIG_Reservoir/CAT_RATES_ER/analyze.ini | 6 ++ .../CAT_RATES_ER/command_line.ini | 2 + .../NIG_Reservoir/CAT_RATES_ER/externals.ini | 5 + .../NIG_Reservoir/CAT_RATES_ER/hopr.ini | 41 +++++++ .../NIG_Reservoir/CAT_RATES_ER/parameter.ini | 99 +++++++++++++++++ .../NIG_Reservoir/CAT_RATES_ER/readme.md | 3 + .../NIG_Reservoir/CAT_RATES_LH/DSMC.ini | 23 ++++ .../NIG_Reservoir/CAT_RATES_LH/analyze.ini | 6 ++ .../CAT_RATES_LH/command_line.ini | 2 + .../NIG_Reservoir/CAT_RATES_LH/externals.ini | 5 + .../NIG_Reservoir/CAT_RATES_LH/hopr.ini | 41 +++++++ .../NIG_Reservoir/CAT_RATES_LH/parameter.ini | 100 ++++++++++++++++++ .../NIG_Reservoir/CAT_RATES_LH/readme.md | 3 + 14 files changed, 359 insertions(+) create mode 100755 regressioncheck/NIG_Reservoir/CAT_RATES_ER/DSMC.ini create mode 100644 regressioncheck/NIG_Reservoir/CAT_RATES_ER/analyze.ini create mode 100644 regressioncheck/NIG_Reservoir/CAT_RATES_ER/command_line.ini create mode 100644 regressioncheck/NIG_Reservoir/CAT_RATES_ER/externals.ini create mode 100755 regressioncheck/NIG_Reservoir/CAT_RATES_ER/hopr.ini create mode 100755 regressioncheck/NIG_Reservoir/CAT_RATES_ER/parameter.ini create mode 100644 regressioncheck/NIG_Reservoir/CAT_RATES_ER/readme.md create mode 100755 regressioncheck/NIG_Reservoir/CAT_RATES_LH/DSMC.ini create mode 100644 regressioncheck/NIG_Reservoir/CAT_RATES_LH/analyze.ini create mode 100644 regressioncheck/NIG_Reservoir/CAT_RATES_LH/command_line.ini create mode 100644 regressioncheck/NIG_Reservoir/CAT_RATES_LH/externals.ini create mode 100755 regressioncheck/NIG_Reservoir/CAT_RATES_LH/hopr.ini create mode 100755 regressioncheck/NIG_Reservoir/CAT_RATES_LH/parameter.ini create mode 100644 regressioncheck/NIG_Reservoir/CAT_RATES_LH/readme.md diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/DSMC.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/DSMC.ini new file mode 100755 index 000000000..fc3586485 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/DSMC.ini @@ -0,0 +1,23 @@ +! =============================================================================== ! +! Species1, O +! =============================================================================== ! +Part-Species1-SpeciesName = O +Part-Species1-InteractionID = 1 +Part-Species1-MassIC = 2.657E-26 +Part-Species1-ChargeIC = 0 +Part-Species1-Tref = 273 +Part-Species1-dref = 3E-10 +Part-Species1-omega = 0.24 +! =============================================================================== ! +! Species2, O2 +! =============================================================================== ! +Part-Species2-SpeciesName = O2 +Part-Species2-InteractionID = 2 +Part-Species2-MassIC = 5.314E-26 +Part-Species2-ChargeIC = 0 +Part-Species2-Tref =273 +Part-Species2-dref = 3.96E-10 +Part-Species2-omega=0.24 +Part-Species2-CharaTempVib=2272.8 +Part-Species2-Ediss_eV=5.115 +Part-Species2-CharaTempRot = 2.1 diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/analyze.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/analyze.ini new file mode 100644 index 000000000..688fa4207 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/analyze.ini @@ -0,0 +1,6 @@ +! PartAnalyze diff +compare_data_file_name = PartAnalyze.csv +compare_data_file_reference = PartAnalyze_ref.csv +compare_data_file_tolerance = 5E-2 +compare_data_file_tolerance_type = relative +!compare_data_file_max_differences = 2 diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/command_line.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/command_line.ini new file mode 100644 index 000000000..2df6de114 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/command_line.ini @@ -0,0 +1,2 @@ +MPI=1 +cmd_suffix=DSMC.ini diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/externals.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/externals.ini new file mode 100644 index 000000000..6706ecfad --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/externals.ini @@ -0,0 +1,5 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre \ No newline at end of file diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/hopr.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/hopr.ini new file mode 100755 index 000000000..8f12aeff3 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/hopr.ini @@ -0,0 +1,41 @@ +ProjectName = elem_cube +Debugvisu = T +DebugVisuLevel=1 +NVisu =1 +Mode =1 + +! Units in [nm] analogous to J. A. H. Dreyer et al., “Simulation of gas diffusion in highly porous nanostructures +! by direct simulation Monte Carlo,” Chem. Eng. Sci., vol. 105, pp. 69–76, 2014. +DEFVAR = (REAL): minus_x = 0.0 +DEFVAR = (REAL): plus_x = 1.0 + +DEFVAR = (REAL): minus_y = 0.0 +DEFVAR = (REAL): plus_y = 1.0 + +DEFVAR = (REAL): minus_z = 0.0 +DEFVAR = (REAL): plus_z = 1.0 + +Corner =(/minus_x,minus_y,minus_z ,, plus_x,minus_y,minus_z ,, plus_x,plus_y,minus_z ,, minus_x,plus_y,minus_z ,, minus_x,minus_y,plus_z ,, plus_x,minus_y,plus_z ,, plus_x,plus_y,plus_z ,, minus_x,plus_y,plus_z /) +nElems =(/1,1,1/) +elemtype =108 + +BCIndex =(/6 ,4 ,1 ,3 ,2 ,5/) +! =(/z-,y-,x+,y+,x-,z+/) +nZones = 1 +nUserDefinedBoundaries=6 +BoundaryName=BC_Xplus +BoundaryType=(/3,0,0,0/) +BoundaryName=BC_Xminus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Yplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Yminus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zminus +BoundaryType=(/4,0,0,0/) + +postscalemesh=true +meshscale=1e-5 +jacobiantolerance=1e-20 diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/parameter.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/parameter.ini new file mode 100755 index 000000000..461ae2fe6 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/parameter.ini @@ -0,0 +1,99 @@ +! =============================================================================== ! +! EQUATION (linearscalaradvection) +! =============================================================================== ! +IniExactFunc = 0 +! =============================================================================== ! +! DISCRETIZATION +! =============================================================================== ! +N = 1 +NAnalyze = 1 +! =============================================================================== ! +! MESH +! =============================================================================== ! +MeshFile = elem_cube_mesh.h5 +useCurveds = F +! =============================================================================== ! +! OUTPUT / VISUALIZATION +! =============================================================================== ! +ProjectName = ER +IterDisplayStep = 100 +Part-AnalyzeStep = 100 +CalcTemp = T +CalcNumSpec = T +CalcReacRates = T +! =============================================================================== ! +! CALCULATION +! =============================================================================== ! +TrackingMethod = triatracking +tend = 1E-7 +Analyze_dt = 1E-7 +CFLscale = 0.2 +! =============================================================================== ! +! BOUNDARY CONDITIONS +! =============================================================================== ! +Part-maxParticleNumber = 5000000 +Part-nBounds=6 +Part-Boundary1-SourceName = BC_Xplus +Part-Boundary1-Condition = reflective +Part-Boundary1-WallTemp = 1000 +Part-Boundary1-Species1-Coverage = 1.0 +Part-Boundary1-Species1-MaxCoverage = 1.0 +Part-Boundary2-SourceName = BC_Xminus +Part-Boundary2-Condition = symmetric +Part-Boundary3-SourceName = BC_Yplus +Part-Boundary3-Condition = symmetric +Part-Boundary4-SourceName = BC_Yminus +Part-Boundary4-Condition = symmetric +Part-Boundary5-SourceName = BC_Zplus +Part-Boundary5-Condition = symmetric +Part-Boundary6-SourceName = BC_Zminus +Part-Boundary6-Condition = symmetric +Part-FIBGMdeltas = (/10e-6,10e-6,10e-6/) + +Part-nSpecies = 2 +Part-Species1-MacroParticleFactor = 100.0 +Part-Species2-MacroParticleFactor = 100.0 +! =============================================================================== ! +! Species1 - O +! =============================================================================== ! +Part-Species1-nInits = 1 +Part-Species1-Init1-SpaceIC = cell_local +Part-Species1-Init1-velocityDistribution = maxwell_lpn +Part-Species1-Init1-PartDensity = 4.141E+20 +Part-Species1-Init1-VeloIC = 0.0 +Part-Species1-Init1-VeloVecIC = (/1.,0.,0./) +Part-Species1-Init1-MWTemperatureIC = 1000 +! =============================================================================== ! +! Species2 - O2 +! =============================================================================== ! + +! =============================================================================== ! +! Surface Chemistry ! Oxygen on RCG +! =============================================================================== ! +Surface-NumOfReactions = 1 +! Eley-Rideal formation of O2 +Surface-Reaction1-SurfName = ER +Surface-Reaction1-Type = ER +Surface-Reaction1-Reactants = (/1,1/) +Surface-Reaction1-Products = (/2,0,0/) +Surface-Reaction1-NumOfBoundaries = 1 +Surface-Reaction1-Boundaries = 1 +Surface-Reaction1-Energy = 7246.38 +Surface-Reaction1-Prefactor = 1E-16 +! =============================================================================== ! +! DSMC +! =============================================================================== ! +UseDSMC = T +VisuDSMC = T +Particles-DSMCReservoirSim = F +Particles-DSMCReservoirSimRate = F +Particles-DSMCReservoirStatistic = F +Particles-DSMC-CollisMode = 2 +Part-NumberOfRandomSeeds = 2 +Particles-RandomSeed1 = 1 +Particles-RandomSeed2 = 2 +Part-TimeFracForSampling = 1.0 +ManualTimeStep = 1.0E-10 +Particles-DSMC-CalcSurfaceVal = T +Particles-NumberForDSMCOutputs = 1 +Particles-DSMC-CalcQualityFactors = T diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/readme.md b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/readme.md new file mode 100644 index 000000000..1d6227440 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/readme.md @@ -0,0 +1,3 @@ +# Eley-Rideal rate +* Catalytic recombination of O on a SiO2 surface +* Comparison of the changes in the product and reactant number (PartAnalyze) diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/DSMC.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/DSMC.ini new file mode 100755 index 000000000..fc3586485 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/DSMC.ini @@ -0,0 +1,23 @@ +! =============================================================================== ! +! Species1, O +! =============================================================================== ! +Part-Species1-SpeciesName = O +Part-Species1-InteractionID = 1 +Part-Species1-MassIC = 2.657E-26 +Part-Species1-ChargeIC = 0 +Part-Species1-Tref = 273 +Part-Species1-dref = 3E-10 +Part-Species1-omega = 0.24 +! =============================================================================== ! +! Species2, O2 +! =============================================================================== ! +Part-Species2-SpeciesName = O2 +Part-Species2-InteractionID = 2 +Part-Species2-MassIC = 5.314E-26 +Part-Species2-ChargeIC = 0 +Part-Species2-Tref =273 +Part-Species2-dref = 3.96E-10 +Part-Species2-omega=0.24 +Part-Species2-CharaTempVib=2272.8 +Part-Species2-Ediss_eV=5.115 +Part-Species2-CharaTempRot = 2.1 diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/analyze.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/analyze.ini new file mode 100644 index 000000000..688fa4207 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/analyze.ini @@ -0,0 +1,6 @@ +! PartAnalyze diff +compare_data_file_name = PartAnalyze.csv +compare_data_file_reference = PartAnalyze_ref.csv +compare_data_file_tolerance = 5E-2 +compare_data_file_tolerance_type = relative +!compare_data_file_max_differences = 2 diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/command_line.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/command_line.ini new file mode 100644 index 000000000..2df6de114 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/command_line.ini @@ -0,0 +1,2 @@ +MPI=1 +cmd_suffix=DSMC.ini diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/externals.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/externals.ini new file mode 100644 index 000000000..6706ecfad --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/externals.ini @@ -0,0 +1,5 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre \ No newline at end of file diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/hopr.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/hopr.ini new file mode 100755 index 000000000..8f12aeff3 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/hopr.ini @@ -0,0 +1,41 @@ +ProjectName = elem_cube +Debugvisu = T +DebugVisuLevel=1 +NVisu =1 +Mode =1 + +! Units in [nm] analogous to J. A. H. Dreyer et al., “Simulation of gas diffusion in highly porous nanostructures +! by direct simulation Monte Carlo,” Chem. Eng. Sci., vol. 105, pp. 69–76, 2014. +DEFVAR = (REAL): minus_x = 0.0 +DEFVAR = (REAL): plus_x = 1.0 + +DEFVAR = (REAL): minus_y = 0.0 +DEFVAR = (REAL): plus_y = 1.0 + +DEFVAR = (REAL): minus_z = 0.0 +DEFVAR = (REAL): plus_z = 1.0 + +Corner =(/minus_x,minus_y,minus_z ,, plus_x,minus_y,minus_z ,, plus_x,plus_y,minus_z ,, minus_x,plus_y,minus_z ,, minus_x,minus_y,plus_z ,, plus_x,minus_y,plus_z ,, plus_x,plus_y,plus_z ,, minus_x,plus_y,plus_z /) +nElems =(/1,1,1/) +elemtype =108 + +BCIndex =(/6 ,4 ,1 ,3 ,2 ,5/) +! =(/z-,y-,x+,y+,x-,z+/) +nZones = 1 +nUserDefinedBoundaries=6 +BoundaryName=BC_Xplus +BoundaryType=(/3,0,0,0/) +BoundaryName=BC_Xminus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Yplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Yminus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zminus +BoundaryType=(/4,0,0,0/) + +postscalemesh=true +meshscale=1e-5 +jacobiantolerance=1e-20 diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/parameter.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/parameter.ini new file mode 100755 index 000000000..92224809d --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/parameter.ini @@ -0,0 +1,100 @@ +! =============================================================================== ! +! EQUATION (linearscalaradvection) +! =============================================================================== ! +IniExactFunc = 0 +! =============================================================================== ! +! DISCRETIZATION +! =============================================================================== ! +N = 1 +NAnalyze = 1 +! =============================================================================== ! +! MESH +! =============================================================================== ! +MeshFile = elem_cube_mesh.h5 +useCurveds = F +! =============================================================================== ! +! OUTPUT / VISUALIZATION +! =============================================================================== ! +ProjectName = LH +IterDisplayStep = 100 +Part-AnalyzeStep = 100 +CalcTemp = T +CalcNumSpec = T +CalcReacRates = T +! =============================================================================== ! +! CALCULATION +! =============================================================================== ! +TrackingMethod = triatracking +tend = 1E-7 +Analyze_dt = 1E-7 +CFLscale = 0.2 +! =============================================================================== ! +! BOUNDARY CONDITIONS +! =============================================================================== ! +Part-maxParticleNumber = 5000000 +Part-nBounds=6 +Part-Boundary1-SourceName = BC_Xplus +Part-Boundary1-Condition = reflective +Part-Boundary1-WallTemp = 1000 +Part-Boundary1-LatticeVector = 2.72E-10 +Part-Boundary1-Species1-Coverage = 1.0 +Part-Boundary1-Species1-MaxCoverage = 1.0 +Part-Boundary2-SourceName = BC_Xminus +Part-Boundary2-Condition = symmetric +Part-Boundary3-SourceName = BC_Yplus +Part-Boundary3-Condition = symmetric +Part-Boundary4-SourceName = BC_Yminus +Part-Boundary4-Condition = symmetric +Part-Boundary5-SourceName = BC_Zplus +Part-Boundary5-Condition = symmetric +Part-Boundary6-SourceName = BC_Zminus +Part-Boundary6-Condition = symmetric +Part-FIBGMdeltas = (/10e-6,10e-6,10e-6/) + +Part-nSpecies = 2 +Part-Species1-MacroParticleFactor = 100.0 +Part-Species2-MacroParticleFactor = 100.0 +! =============================================================================== ! +! Species1 - O +! =============================================================================== ! +Part-Species1-nInits = 1 +Part-Species1-Init1-SpaceIC = cell_local +Part-Species1-Init1-velocityDistribution = maxwell_lpn +Part-Species1-Init1-PartDensity = 4.141E+20 +Part-Species1-Init1-VeloIC = 0.0 +Part-Species1-Init1-VeloVecIC = (/1.,0.,0./) +Part-Species1-Init1-MWTemperatureIC = 1000 +! =============================================================================== ! +! Species2 - O2 +! =============================================================================== ! + +! =============================================================================== ! +! Surface Chemistry ! Oxygen on RCG +! =============================================================================== ! +Surface-NumOfReactions = 1 +! Langmuir-Hinshlewood formation of O2 +Surface-Reaction1-SurfName = LH +Surface-Reaction1-Type = LHD +Surface-Reaction1-Reactants = (/1,1/) +Surface-Reaction1-Products = (/2,0,0/) +Surface-Reaction1-NumOfBoundaries = 1 +Surface-Reaction1-Boundaries = 1 +Surface-Reaction1-Energy = 19275.36 +Surface-Reaction1-Prefactor = 33E-10 +! =============================================================================== ! +! DSMC +! =============================================================================== ! +UseDSMC = T +VisuDSMC = T +Particles-DSMCReservoirSim = F +Particles-DSMCReservoirSimRate = F +Particles-DSMCReservoirStatistic = F +Particles-DSMC-CollisMode = 2 +Part-NumberOfRandomSeeds = 2 +Particles-RandomSeed1 = 1 +Particles-RandomSeed2 = 2 +Part-TimeFracForSampling = 1.0 +ManualTimeStep = 1.0E-10 +Particles-DSMC-CalcSurfaceVal = T +Particles-NumberForDSMCOutputs = 1 +Particles-DSMC-CalcQualityFactors = T diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/readme.md b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/readme.md new file mode 100644 index 000000000..3acfa2bfd --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/readme.md @@ -0,0 +1,3 @@ +# Langmuir-Hinshelwood rate +* Catalytic recombination of O on a SiO2 surface +* Comparison of the changes in the product and reactant number (PartAnalyze) From eb19933975e7f091d90330e158c867b7aaacae70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Fri, 1 Dec 2023 13:08:56 +0100 Subject: [PATCH 116/222] Updated Reference PartAnalyze nightly reggie --- .../DSMC_QualityFactors/PartAnalyze_ref.csv | 4 +- .../Database_Ttrans_10000_ref.csv | 6 +- .../Database_Ttrans_15000_ref.csv | 6 +- .../Database_Ttrans_20000_ref.csv | 6 +- .../Database_Ttrans_25000_ref.csv | 6 +- .../Database_Ttrans_30000_ref.csv | 6 +- .../PartAnalyze_T-15000_ref.csv | 6 +- .../PartAnalyze_T-25000_ref.csv | 6 +- .../PartAnalyze_T-35000_ref.csv | 6 +- .../PartAnalyze_T-45000_ref.csv | 6 +- .../Database_Tvib_10000_ref.csv | 6 +- .../Database_Tvib_15000_ref.csv | 6 +- .../Database_Tvib_20000_ref.csv | 6 +- .../Database_Tvib_25000_ref.csv | 6 +- .../Database_Tvib_30000_ref.csv | 6 +- .../Database_Tvib_00500_ref.csv | 6 +- .../Database_Tvib_01000_ref.csv | 6 +- .../Database_Tvib_01500_ref.csv | 6 +- .../Database_Tvib_02000_ref.csv | 6 +- .../PartAnalyze_00593158_ref.csv | 6 +- .../PartAnalyze_01875731_ref.csv | 6 +- .../PartAnalyze_04194262_ref.csv | 6 +- .../PartAnalyze_05931582_ref.csv | 6 +- .../PartAnalyze_07264675_ref.csv | 6 +- .../PartAnalyze_08388524_ref.csv | 6 +- .../PartAnalyze_18755393_ref.csv | 6 +- .../PartAnalyze_59309762_ref.csv | 6 +- .../PartAnalyze_001_ref.csv | 6 +- .../PartAnalyze_010_ref.csv | 6 +- .../PartAnalyze_050_ref.csv | 6 +- .../PartAnalyze_100_ref.csv | 6 +- .../PartAnalyze_150_ref.csv | 6 +- .../PartAnalyze_200_ref.csv | 6 +- .../Database_Tvib_07500_ref.csv | 6 +- .../Database_Tvib_10000_ref.csv | 6 +- .../Database_Tvib_12500_ref.csv | 6 +- .../Database_Tvib_15000_ref.csv | 6 +- .../Database_Tvib_00773000_ref.csv | 6 +- .../Database_Tvib_00859000_ref.csv | 6 +- .../Database_Tvib_00938000_ref.csv | 6 +- .../Database_Tvib_01030000_ref.csv | 6 +- .../Database_Tvib_01130000_ref.csv | 6 +- .../Database_Tvib_01260000_ref.csv | 6 +- .../Database_Tvib_01450000_ref.csv | 6 +- .../Database_Tvib_01680000_ref.csv | 6 +- .../Database_Tvib_02050000_ref.csv | 6 +- .../Database_Tvib_02450000_ref.csv | 6 +- .../Database_Tvib_02970000_ref.csv | 6 +- .../Database_Tvib_04190000_ref.csv | 6 +- .../RELAX_N2Ion/PartAnalyze_ref.csv | 64 +++++++++---------- 50 files changed, 178 insertions(+), 178 deletions(-) diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv index b0f43d8b6..a57d6a4b3 100644 --- a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-NumDens-Spec-001,003-TempTra-001,004-TempVib001,005-XiVibMean001,006-TempRot001,007-TempTotal001,008-Pmean,009-Pmax,010-MeanFreePath,011-MaxMCSoverMFP,012-ResolvedCellPercentage -0,1E+022,5000.7694212872,4948.97535472698,1.57588795113921,4996.25975996126,4986.98558422092,0,0,0,0,0 -0.00000001,1E+022,5003.18537370868,4949.43782890819,1.57592433193968,4992.32966071455,4987.00308750072,0.0610016422916906,0.104042801202628,0.000297713890670607,0.000123887444083463,0 +0.0000000000000000E+000,0.1000000000000000E+023,0.5000769421287198E+004,0.4948975354726982E+004,0.1575887951139208E+001,0.4996259759961257E+004,0.4986985584220915E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +0.1000000000000000E-007,0.1000000000000000E+023,0.5003185373708683E+004,0.4949437828908193E+004,0.1575924331939683E+001,0.4992329660714551E+004,0.4987003087500717E+004,0.6100164229169058E-001,0.1040428012026279E+000,0.2977138906706071E-003,0.1238874440834628E-003,0.0000000000000000E+000 diff --git a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_10000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_10000_ref.csv index f5791d0ab..5a8d5c359 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_10000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_10000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002,007-Reaction003,008-Reaction004,009-Reaction005 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-007,3.73688135572668E-001,7.27526232996863E-001,1.32474544582370E-005,2.48777888932569E-019,4.40906095483012E-017,2.28631616080479E-018,2.42390240084106E-019,4.42149510308084E-017 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004,011-Reaction005 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-007,3.73688135572668E-001,7.27526232996863E-001,1.32474544582370E-005,0.0000000000000000E+000,0.0000000000000000E+000,2.48777888932569E-019,4.40906095483012E-017,2.28631616080479E-018,2.42390240084106E-019,4.42149510308084E-017 diff --git a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_15000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_15000_ref.csv index e9aefe2aa..36309a6f1 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_15000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_15000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002,007-Reaction003,008-Reaction004,009-Reaction005 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-007,4.15119539713157E-001,7.81552614396978E-001,1.46013945833773E-005,5.65915325730076E-018,1.71194379397845E-016,5.46193901126186E-018,5.64365826162393E-018,1.71913416028807E-016 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004,011-Reaction005 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-007,4.15119539713157E-001,7.81552614396978E-001,1.46013945833773E-005,0.0000000000000000E+000,0.0000000000000000E+000,5.65915325730076E-018,1.71194379397845E-016,5.46193901126186E-018,5.64365826162393E-018,1.71913416028807E-016 diff --git a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_20000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_20000_ref.csv index f275dc378..c676e24a9 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_20000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_20000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002,007-Reaction003,008-Reaction004,009-Reaction005 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-007,4.47559993591972E-001,8.92300196007909E-001,1.56451464977998E-005,2.30501939606140E-017,2.98606402841324E-016,7.74403936513887E-018,2.29962815955325E-017,2.99179879671808E-016 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004,011-Reaction005 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-007,4.47559993591972E-001,8.92300196007909E-001,1.56451464977998E-005,0.0000000000000000E+000,0.0000000000000000E+000,2.30501939606140E-017,2.98606402841324E-016,7.74403936513887E-018,2.29962815955325E-017,2.99179879671808E-016 diff --git a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_25000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_25000_ref.csv index dee00ac73..fd42db7ab 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_25000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_25000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002,007-Reaction003,008-Reaction004,009-Reaction005 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-007,4.74050019404016E-001,9.37805694448479E-001,1.65058554426589E-005,4.97833540255880E-017,3.87994790203365E-016,9.10294567339719E-018,4.97938048700443E-017,3.87300727417732E-016 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004,011-Reaction005 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-007,4.74050019404016E-001,9.37805694448479E-001,1.65058554426589E-005,0.0000000000000000E+000,0.0000000000000000E+000,4.97833540255880E-017,3.87994790203365E-016,9.10294567339719E-018,4.97938048700443E-017,3.87300727417732E-016 diff --git a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_30000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_30000_ref.csv index d8f205036..1b76361b3 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_30000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_30000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002,007-Reaction003,008-Reaction004,009-Reaction005 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-007,4.96981553163028E-001,9.56127086192396E-001,1.72441398496055E-005,7.85646412162534E-017,4.39062831301584E-016,9.80866304821267E-018,7.85559016425114E-017,4.38869012436839E-016 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004,011-Reaction005 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-007,4.96981553163028E-001,9.56127086192396E-001,1.72441398496055E-005,0.0000000000000000E+000,0.0000000000000000E+000,7.85646412162534E-017,4.39062831301584E-016,9.80866304821267E-018,7.85559016425114E-017,4.38869012436839E-016 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-15000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-15000_ref.csv index 27b68e1ad..4bafcc696 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-15000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-15000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-010,1.18883827509440E-001,2.18864022733051E-001,9.32408088387504E-006,8.95913832108752E-017,4.80490099901900E-017 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-010,1.18883827509440E-001,2.18864022733051E-001,9.32408088387504E-006,0.0000000000000000E+000,0.0000000000000000E+000,8.95913832108752E-017,4.80490099901900E-017 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-25000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-25000_ref.csv index d5fc3ebb3..454c4cc31 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-25000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-25000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-010,1.35776328243403E-001,2.50022420054576E-001,1.05402213689990E-005,5.02512562814071E-016,2.65670984404092E-015 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-010,1.35776328243403E-001,2.50022420054576E-001,1.05402213689990E-005,0.0000000000000000E+000,0.0000000000000000E+000,5.02512562814071E-016,2.65670984404092E-015 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-35000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-35000_ref.csv index 1d32cedc7..a67d13995 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-35000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-35000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-010,1.48196947039560E-001,2.72845160534894E-001,1.14266904041243E-005,1.16919257642796E-015,1.24341828665239E-014 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-010,1.48196947039560E-001,2.72845160534894E-001,1.14266904041243E-005,0.0000000000000000E+000,0.0000000000000000E+000,1.16919257642796E-015,1.24341828665239E-014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-45000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-45000_ref.csv index 9e568e90c..0c0931dfc 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-45000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-45000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-010,1.58212426667140E-001,2.91362997624375E-001,1.21371056784876E-005,1.97551502532583E-015,2.57182325972492E-014 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-010,1.58212426667140E-001,2.91362997624375E-001,1.21371056784876E-005,0.0000000000000000E+000,0.0000000000000000E+000,1.97551502532583E-015,2.57182325972492E-014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_10000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_10000_ref.csv index 4c56fdaf7..f6dc4223b 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_10000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_10000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002 -0,0,0,0,0,0 -1E-08,0.181298879727166,0.670144326764107,8.72458344199456E-005,1.62674621356066E-17,1.001075e-19 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002 +0,0,0,0,0,0,0,0 +1E-08,0.181298879727166,0.670144326764107,8.72458344199456E-005,0.0000000000000000E+000,0.0000000000000000E+000,1.62674621356066E-17,1.001075e-19 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_15000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_15000_ref.csv index 32e0300a2..de4de2c9e 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_15000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_15000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-008,2.01142542418521E-001,7.14646744669035E-001,9.61847669045529E-005,4.51684856343735E-016,2.31748800000000E-017 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-008,2.01142542418521E-001,7.14646744669035E-001,9.61847669045529E-005,0.0000000000000000E+000,0.0000000000000000E+000,4.51684856343735E-016,2.31748800000000E-017 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_20000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_20000_ref.csv index 4fbcc0e96..9daca0184 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_20000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_20000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-008,2.16903026535711E-001,7.90496216094982E-001,1.03046916335051E-004,2.05145210962411E-015,2.72192181825934E-016 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-008,2.16903026535711E-001,7.90496216094982E-001,1.03046916335051E-004,0.0000000000000000E+000,0.0000000000000000E+000,2.05145210962411E-015,2.72192181825934E-016 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_25000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_25000_ref.csv index 62726ce4c..76d07c30c 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_25000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_25000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-008,2.29606703511907E-001,8.38585295512184E-001,1.08665204605351E-004,4.79780014795168E-015,1.24043152813724E-015 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-008,2.29606703511907E-001,8.38585295512184E-001,1.08665204605351E-004,0.0000000000000000E+000,0.0000000000000000E+000,4.79780014795168E-015,1.24043152813724E-015 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_30000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_30000_ref.csv index 18d302fcf..c32655cfe 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_30000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_30000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-008,2.41354438603174E-001,8.77408970222360E-001,1.13529120729100E-004,8.09669130786375E-015,2.88699901863851E-015 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-008,2.41354438603174E-001,8.77408970222360E-001,1.13529120729100E-004,0.0000000000000000E+000,0.0000000000000000E+000,8.09669130786375E-015,2.88699901863851E-015 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_00500_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_00500_ref.csv index 118d3680a..a005a5f33 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_00500_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_00500_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002,007-Reaction003,008-Reaction004 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-006,3.53696704727658E-001,7.59175266061906E-001,1.02611582619153E-005,0.00000000000000E+000,0.00000000000000E+000,3.02820900161511E-043,3.04092205385157E-043 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-006,3.53696704727658E-001,7.59175266061906E-001,1.02611582619153E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,3.02820900161511E-043,3.04092205385157E-043 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_01000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_01000_ref.csv index 413c202fb..4d301e2c4 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_01000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_01000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002,007-Reaction003,008-Reaction004 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-006,4.23534952829844E-001,9.42073997624852E-001,1.21183487150917E-005,0.00000000000000E+000,0.00000000000000E+000,4.24235554158370E-044,4.24836170799462E-044 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-006,4.23534952829844E-001,9.42073997624852E-001,1.21183487150917E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,4.24235554158370E-044,4.24836170799462E-044 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_01500_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_01500_ref.csv index adbc7aafc..8ad2fbd19 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_01500_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_01500_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002,007-Reaction003,008-Reaction004 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-006,4.70664632636717E-001,1.01870116820428E+000,1.33569982320102E-005,0.00000000000000E+000,0.00000000000000E+000,1.87592597567906E-044,1.86091055965174E-044 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-006,4.70664632636717E-001,1.01870116820428E+000,1.33569982320102E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.87592597567906E-044,1.86091055965174E-044 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_02000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_02000_ref.csv index f00b49d22..a425838fe 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_02000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_02000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002,007-Reaction003,008-Reaction004 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-006,5.07189286586427E-001,1.10005256303409E+000,1.43117213112965E-005,0.00000000000000E+000,0.00000000000000E+000,1.10313256413998E-044,1.16519628371954E-044 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-006,5.07189286586427E-001,1.10005256303409E+000,1.43117213112965E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.10313256413998E-044,1.16519628371954E-044 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_00593158_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_00593158_ref.csv index 9739d1f64..e1145cc6c 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_00593158_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_00593158_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate002+002,011-CollRate002+003,012-CollRate002+004,013-CollRate002+005,014-CollRate003+003,015-CollRate003+004,016-CollRate003+005,017-CollRate004+004,018-CollRate004+005,019-CollRate005+005,020-TotalCollRate -0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-008,0.1007433335411879E-001,0.3736542506402513E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1009099999999857E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1009099999999857E+015 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate002+002,013-CollRate002+003,014-CollRate002+004,015-CollRate002+005,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate004+004,020-CollRate004+005,021-CollRate005+005,022-TotalCollRate +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +0.1000000000000000E-008,0.1007433335411879E-001,0.3736542506402513E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1009099999999857E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1009099999999857E+015 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_01875731_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_01875731_ref.csv index b8f002427..4dc9d4cdf 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_01875731_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_01875731_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate002+002,011-CollRate002+003,012-CollRate002+004,013-CollRate002+005,014-CollRate003+003,015-CollRate003+004,016-CollRate003+005,017-CollRate004+004,018-CollRate004+005,019-CollRate005+005,020-TotalCollRate -0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-008,0.1136013213168554E-001,0.4182033822785572E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1140299999999839E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1140299999999839E+015 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate002+002,013-CollRate002+003,014-CollRate002+004,015-CollRate002+005,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate004+004,020-CollRate004+005,021-CollRate005+005,022-TotalCollRate +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +0.1000000000000000E-008,0.1136013213168554E-001,0.4182033822785572E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1140299999999839E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1140299999999839E+015 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_04194262_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_04194262_ref.csv index fdb591f90..bf62aa4ad 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_04194262_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_04194262_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate002+002,011-CollRate002+003,012-CollRate002+004,013-CollRate002+005,014-CollRate003+003,015-CollRate003+004,016-CollRate003+005,017-CollRate004+004,018-CollRate004+005,019-CollRate005+005,020-TotalCollRate -0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-008,0.1170861504594123E-001,0.4305352058791854E+000,0.1881045468448140E-007,0.0000000000000000E+000,0.0000000000000000E+000,0.1172099999999834E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1172099999999834E+015 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate002+002,013-CollRate002+003,014-CollRate002+004,015-CollRate002+005,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate004+004,020-CollRate004+005,021-CollRate005+005,022-TotalCollRate +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +0.1000000000000000E-008,0.1170861504594123E-001,0.4305352058791854E+000,0.1881045468448140E-007,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1172099999999834E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1172099999999834E+015 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_05931582_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_05931582_ref.csv index f715f7b9b..b375cf026 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_05931582_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_05931582_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate002+002,011-CollRate002+003,012-CollRate002+004,013-CollRate002+005,014-CollRate003+003,015-CollRate003+004,016-CollRate003+005,017-CollRate004+004,018-CollRate004+005,019-CollRate005+005,020-TotalCollRate -0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-008,0.1344932273304725E-001,0.4942986551805167E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1342499999999810E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1342499999999810E+015 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate002+002,013-CollRate002+003,014-CollRate002+004,015-CollRate002+005,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate004+004,020-CollRate004+005,021-CollRate005+005,022-TotalCollRate +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +0.1000000000000000E-008,0.1344932273304725E-001,0.4942986551805167E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1342499999999810E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1342499999999810E+015 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_07264675_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_07264675_ref.csv index 692495a6e..97267c8ec 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_07264675_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_07264675_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate002+002,011-CollRate002+003,012-CollRate002+004,013-CollRate002+005,014-CollRate003+003,015-CollRate003+004,016-CollRate003+005,017-CollRate004+004,018-CollRate004+005,019-CollRate005+005,020-TotalCollRate -0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-008,0.1287530216589833E-001,0.4732471558546913E+000,0.4798579394700828E-007,0.0000000000000000E+000,0.0000000000000000E+000,0.1280699999999819E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1280699999999819E+015 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate002+002,013-CollRate002+003,014-CollRate002+004,015-CollRate002+005,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate004+004,020-CollRate004+005,021-CollRate005+005,022-TotalCollRate +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +0.1000000000000000E-008,0.1287530216589833E-001,0.4732471558546913E+000,0.4798579394700828E-007,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1280699999999819E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1280699999999819E+015 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_08388524_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_08388524_ref.csv index d6933da16..1db85c675 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_08388524_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_08388524_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate002+002,011-CollRate002+003,012-CollRate002+004,013-CollRate002+005,014-CollRate003+003,015-CollRate003+004,016-CollRate003+005,017-CollRate004+004,018-CollRate004+005,019-CollRate005+005,020-TotalCollRate -0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-008,0.1268015715578277E-001,0.4660508870105510E+000,0.3307026765279518E-007,0.0000000000000000E+000,0.0000000000000000E+000,0.1268549999999821E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1268549999999821E+015 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate002+002,013-CollRate002+003,014-CollRate002+004,015-CollRate002+005,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate004+004,020-CollRate004+005,021-CollRate005+005,022-TotalCollRate +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +0.1000000000000000E-008,0.1268015715578277E-001,0.4660508870105510E+000,0.3307026765279518E-007,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1268549999999821E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1268549999999821E+015 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_18755393_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_18755393_ref.csv index 5aea792da..707d1b0ee 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_18755393_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_18755393_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate002+002,011-CollRate002+003,012-CollRate002+004,013-CollRate002+005,014-CollRate003+003,015-CollRate003+004,016-CollRate003+005,017-CollRate004+004,018-CollRate004+005,019-CollRate005+005,020-TotalCollRate -0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-008,0.9294693312867404E-002,0.3416592982377114E+000,0.9298518735566164E-007,0.0000000000000000E+000,0.0000000000000000E+000,0.9222999999998695E+014,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.9222999999998695E+014 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate002+002,013-CollRate002+003,014-CollRate002+004,015-CollRate002+005,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate004+004,020-CollRate004+005,021-CollRate005+005,022-TotalCollRate +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +0.1000000000000000E-008,0.9294693312867404E-002,0.3416592982377114E+000,0.9298518735566164E-007,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.9222999999998695E+014,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.9222999999998695E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_59309762_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_59309762_ref.csv index 508f988cd..7509b5ca8 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_59309762_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_59309762_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate002+002,011-CollRate002+003,012-CollRate002+004,013-CollRate002+005,014-CollRate003+003,015-CollRate003+004,016-CollRate003+005,017-CollRate004+004,018-CollRate004+005,019-CollRate005+005,020-TotalCollRate -0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-008,0.2455899424573178E-002,0.9026176294227477E-001,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2404999999999660E+014,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2404999999999660E+014 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate002+002,013-CollRate002+003,014-CollRate002+004,015-CollRate002+005,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate004+004,020-CollRate004+005,021-CollRate005+005,022-TotalCollRate +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +0.1000000000000000E-008,0.2455899424573178E-002,0.9026176294227477E-001,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2404999999999660E+014,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2404999999999660E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_001_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_001_ref.csv index 68b179263..f2dca9ee6 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_001_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_001_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate001+006,011-CollRate002+002,012-CollRate002+003,013-CollRate002+004,014-CollRate002+005,015-CollRate002+006,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate003+006,020-CollRate004+004,021-CollRate004+005,022-CollRate004+006,023-CollRate005+005,024-CollRate005+006,025-CollRate006+006,026-TotalCollRate -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-009,7.28671535893542E-004,3.91095315500101E-001,5.88191818557925E-005,0.00000000000000E+000,0.00000000000000E+000,1.02477999999986E+014,4.84799999999932E+012,4.71399999999933E+012,3.20199999999955E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.15241999999984E+014 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate001+006,013-CollRate002+002,014-CollRate002+003,015-CollRate002+004,016-CollRate002+005,017-CollRate002+006,018-CollRate003+003,019-CollRate003+004,020-CollRate003+005,021-CollRate003+006,022-CollRate004+004,023-CollRate004+005,024-CollRate004+006,025-CollRate005+005,026-CollRate005+006,027-CollRate006+006,028-TotalCollRate +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-009,7.28671535893542E-004,3.91095315500101E-001,5.88191818557925E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.02477999999986E+014,4.84799999999932E+012,4.71399999999933E+012,3.20199999999955E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.15241999999984E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_010_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_010_ref.csv index 280686aff..1b3bbda73 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_010_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_010_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate001+006,011-CollRate002+002,012-CollRate002+003,013-CollRate002+004,014-CollRate002+005,015-CollRate002+006,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate003+006,020-CollRate004+004,021-CollRate004+005,022-CollRate004+006,023-CollRate005+005,024-CollRate005+006,025-CollRate006+006,026-TotalCollRate -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-009,1.00394992012240E-003,4.24685438364297E-001,5.88191818591117E-005,0.00000000000000E+000,0.00000000000000E+000,1.11731999999984E+014,7.43599999999895E+012,4.96999999999930E+012,3.13599999999956E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.27273999999982E+014 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate001+006,013-CollRate002+002,014-CollRate002+003,015-CollRate002+004,016-CollRate002+005,017-CollRate002+006,018-CollRate003+003,019-CollRate003+004,020-CollRate003+005,021-CollRate003+006,022-CollRate004+004,023-CollRate004+005,024-CollRate004+006,025-CollRate005+005,026-CollRate005+006,027-CollRate006+006,028-TotalCollRate +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-009,1.00394992012240E-003,4.24685438364297E-001,5.88191818591117E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.11731999999984E+014,7.43599999999895E+012,4.96999999999930E+012,3.13599999999956E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.27273999999982E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_050_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_050_ref.csv index b56163106..642244e29 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_050_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_050_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate001+006,011-CollRate002+002,012-CollRate002+003,013-CollRate002+004,014-CollRate002+005,015-CollRate002+006,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate003+006,020-CollRate004+004,021-CollRate004+005,022-CollRate004+006,023-CollRate005+005,024-CollRate005+006,025-CollRate006+006,026-TotalCollRate -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-009,1.60901711016375E-003,4.57083630796254E-001,5.88191819002675E-005,0.00000000000000E+000,0.00000000000000E+000,1.20868999999983E+014,1.34099999999981E+013,1.26259999999982E+013,1.83999999999974E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.48744999999979E+014 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate001+006,013-CollRate002+002,014-CollRate002+003,015-CollRate002+004,016-CollRate002+005,017-CollRate002+006,018-CollRate003+003,019-CollRate003+004,020-CollRate003+005,021-CollRate003+006,022-CollRate004+004,023-CollRate004+005,024-CollRate004+006,025-CollRate005+005,026-CollRate005+006,027-CollRate006+006,028-TotalCollRate +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-009,1.60901711016375E-003,4.57083630796254E-001,5.88191819002675E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.20868999999983E+014,1.34099999999981E+013,1.26259999999982E+013,1.83999999999974E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.48744999999979E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_100_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_100_ref.csv index 93153b607..d6d056da4 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_100_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_100_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate001+006,011-CollRate002+002,012-CollRate002+003,013-CollRate002+004,014-CollRate002+005,015-CollRate002+006,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate003+006,020-CollRate004+004,021-CollRate004+005,022-CollRate004+006,023-CollRate005+005,024-CollRate005+006,025-CollRate006+006,026-TotalCollRate -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-009,1.93874473680545E-003,5.12120879655489E-001,5.88191820195864E-005,0.00000000000000E+000,0.00000000000000E+000,1.35061999999981E+014,1.66679999999976E+013,1.54259999999978E+013,1.73199999999976E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.68887999999976E+014 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate001+006,013-CollRate002+002,014-CollRate002+003,015-CollRate002+004,016-CollRate002+005,017-CollRate002+006,018-CollRate003+003,019-CollRate003+004,020-CollRate003+005,021-CollRate003+006,022-CollRate004+004,023-CollRate004+005,024-CollRate004+006,025-CollRate005+005,026-CollRate005+006,027-CollRate006+006,028-TotalCollRate +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-009,1.93874473680545E-003,5.12120879655489E-001,5.88191820195864E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.35061999999981E+014,1.66679999999976E+013,1.54259999999978E+013,1.73199999999976E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.68887999999976E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_150_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_150_ref.csv index a06c5bc22..625989985 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_150_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_150_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate001+006,011-CollRate002+002,012-CollRate002+003,013-CollRate002+004,014-CollRate002+005,015-CollRate002+006,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate003+006,020-CollRate004+004,021-CollRate004+005,022-CollRate004+006,023-CollRate005+005,024-CollRate005+006,025-CollRate006+006,026-TotalCollRate -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-009,2.14174542721335E-003,5.18064450636107E-001,5.88191818249936E-005,0.00000000000000E+000,0.00000000000000E+000,1.36544999999981E+014,1.87039999999974E+013,1.66429999999976E+013,2.01799999999972E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.73909999999975E+014 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate001+006,013-CollRate002+002,014-CollRate002+003,015-CollRate002+004,016-CollRate002+005,017-CollRate002+006,018-CollRate003+003,019-CollRate003+004,020-CollRate003+005,021-CollRate003+006,022-CollRate004+004,023-CollRate004+005,024-CollRate004+006,025-CollRate005+005,026-CollRate005+006,027-CollRate006+006,028-TotalCollRate +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-009,2.14174542721335E-003,5.18064450636107E-001,5.88191818249936E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.36544999999981E+014,1.87039999999974E+013,1.66429999999976E+013,2.01799999999972E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.73909999999975E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_200_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_200_ref.csv index 749e53cf1..d172f1284 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_200_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_200_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate001+006,011-CollRate002+002,012-CollRate002+003,013-CollRate002+004,014-CollRate002+005,015-CollRate002+006,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate003+006,020-CollRate004+004,021-CollRate004+005,022-CollRate004+006,023-CollRate005+005,024-CollRate005+006,025-CollRate006+006,026-TotalCollRate -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-009,2.25654789673067E-003,5.10124845460034E-001,5.88191820336924E-005,0.00000000000000E+000,0.00000000000000E+000,1.34603999999981E+014,1.99589999999972E+013,1.74839999999975E+013,2.58199999999963E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.74628999999975E+014 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate001+006,013-CollRate002+002,014-CollRate002+003,015-CollRate002+004,016-CollRate002+005,017-CollRate002+006,018-CollRate003+003,019-CollRate003+004,020-CollRate003+005,021-CollRate003+006,022-CollRate004+004,023-CollRate004+005,024-CollRate004+006,025-CollRate005+005,026-CollRate005+006,027-CollRate006+006,028-TotalCollRate +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-009,2.25654789673067E-003,5.10124845460034E-001,5.88191820336924E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.34603999999981E+014,1.99589999999972E+013,1.74839999999975E+013,2.58199999999963E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.74628999999975E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_07500_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_07500_ref.csv index bb82a9136..89d640fe7 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_07500_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_07500_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002,007-Reaction003,008-Reaction004,009-Reaction005,010-Reaction006 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -2.00000000000000E-006,2.67352703496838E-001,5.25596772392851E-001,8.99064735506277E-005,3.87721645313516E-018,3.88852963783802E-018,3.83657179826993E-018,3.47915291769440E-046,3.48124071513895E-046,3.47930977882192E-046 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004,011-Reaction005,012-Reaction006 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +2.00000000000000E-006,2.67352703496838E-001,5.25596772392851E-001,8.99064735506277E-005,0.0000000000000000E+000,0.0000000000000000E+000,3.87721645313516E-018,3.88852963783802E-018,3.83657179826993E-018,3.47915291769440E-046,3.48124071513895E-046,3.47930977882192E-046 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_10000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_10000_ref.csv index a361729b1..6bc4fcd1f 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_10000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_10000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002,007-Reaction003,008-Reaction004,009-Reaction005,010-Reaction006 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -2.00000000000000E-006,2.88345377143152E-001,5.26816660115779E-001,9.63285269416815E-005,2.11560134887055E-017,2.05405522014654E-017,2.05400010417580E-017,3.13855717228863E-046,3.13519278636495E-046,3.13428953623618E-046 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004,011-Reaction005,012-Reaction006 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +2.00000000000000E-006,2.88345377143152E-001,5.26816660115779E-001,9.63285269416815E-005,0.0000000000000000E+000,0.0000000000000000E+000,2.11560134887055E-017,2.05405522014654E-017,2.05400010417580E-017,3.13855717228863E-046,3.13519278636495E-046,3.13428953623618E-046 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_12500_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_12500_ref.csv index a18de00bc..521876d25 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_12500_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_12500_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002,007-Reaction003,008-Reaction004,009-Reaction005,010-Reaction006 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -2.00000000000000E-006,3.04859505227313E-001,5.85880332203581E-001,1.01594779577752E-004,5.30027840956021E-017,5.17040217393362E-017,5.19509575909158E-017,2.87336920697584E-046,2.87271845277791E-046,2.87364891734210E-046 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004,011-Reaction005,012-Reaction006 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +2.00000000000000E-006,3.04859505227313E-001,5.85880332203581E-001,1.01594779577752E-004,0.0000000000000000E+000,0.0000000000000000E+000,5.30027840956021E-017,5.17040217393362E-017,5.19509575909158E-017,2.87336920697584E-046,2.87271845277791E-046,2.87364891734210E-046 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_15000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_15000_ref.csv index 83f67cb70..7e46da0d1 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_15000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_15000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-Reaction001,006-Reaction002,007-Reaction003,008-Reaction004,009-Reaction005,010-Reaction006 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -2.00000000000000E-006,3.20356067937429E-001,6.19158042957102E-001,1.06089226776644E-004,9.21017186424224E-017,9.14468407820260E-017,9.12978212240774E-017,2.60944201077233E-046,2.61715287269015E-046,2.61248580460074E-046 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004,011-Reaction005,012-Reaction006 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +2.00000000000000E-006,3.20356067937429E-001,6.19158042957102E-001,1.06089226776644E-004,0.0000000000000000E+000,0.0000000000000000E+000,9.21017186424224E-017,9.14468407820260E-017,9.12978212240774E-017,2.60944201077233E-046,2.61715287269015E-046,2.61248580460074E-046 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00773000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00773000_ref.csv index df9585e0a..13d13db21 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00773000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00773000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-RotRelaxPmean,006-RotRelaxPmax,007-VibRelaxPmean,008-VibRelaxPmax,009-VibRelaxRate001+004,010-VibRelaxRate002+004 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-012,3.18644504323726E-003,3.82598867520345E-001,2.97809522194158E-006,2.00000000000000E-001,2.00000000000000E-001,8.21628071365694E-002,0.00000000000000E+000,9.22946943564097E-015,2.27233141202874E-015 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-012,3.18644504323726E-003,3.82598867520345E-001,2.97809522194158E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,8.21628071365694E-002,0.00000000000000E+000,9.22946943564097E-015,2.27233141202874E-015 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00859000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00859000_ref.csv index 41d5f31f7..f4589b91e 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00859000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00859000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-RotRelaxPmean,006-RotRelaxPmax,007-VibRelaxPmean,008-VibRelaxPmax,009-VibRelaxRate001+004,010-VibRelaxRate002+004 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-012,5.41488583400513E-003,4.25291054075299E-001,3.27096839210622E-006,2.00000000000000E-001,2.00000000000000E-001,2.95684045737927E-001,0.00000000000000E+000,1.23526738433633E-014,6.92510515789200E-014 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-012,5.41488583400513E-003,4.25291054075299E-001,3.27096839210622E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,2.95684045737927E-001,0.00000000000000E+000,1.23526738433633E-014,6.92510515789200E-014 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00938000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00938000_ref.csv index 26d1cf1c6..a0cb93c0f 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00938000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00938000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-RotRelaxPmean,006-RotRelaxPmax,007-VibRelaxPmean,008-VibRelaxPmax,009-VibRelaxRate001+004,010-VibRelaxRate002+004 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-012,6.63670707960183E-003,5.03195783170117E-001,3.47824674728444E-006,2.00000000000000E-001,2.00000000000000E-001,3.17377387177713E-001,0.00000000000000E+000,1.89944883450420E-014,8.81554474891239E-014 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-012,6.63670707960183E-003,5.03195783170117E-001,3.47824674728444E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,3.17377387177713E-001,0.00000000000000E+000,1.89944883450420E-014,8.81554474891239E-014 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01030000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01030000_ref.csv index fe3095b40..398df8c76 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01030000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01030000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-RotRelaxPmean,006-RotRelaxPmax,007-VibRelaxPmean,008-VibRelaxPmax,009-VibRelaxRate001+004,010-VibRelaxRate002+004 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-012,6.50156914149986E-003,5.01069511864197E-001,3.63288164307219E-006,2.00000000000000E-001,2.00000000000000E-001,2.50505744656203E-001,0.00000000000000E+000,4.42504009113350E-014,3.42751663206450E-014 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-012,6.50156914149986E-003,5.01069511864197E-001,3.63288164307219E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,2.50505744656203E-001,0.00000000000000E+000,4.42504009113350E-014,3.42751663206450E-014 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01130000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01130000_ref.csv index 67a7c2680..e700deb50 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01130000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01130000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-RotRelaxPmean,006-RotRelaxPmax,007-VibRelaxPmean,008-VibRelaxPmax,009-VibRelaxRate001+004,010-VibRelaxRate002+004 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-012,7.13039570078954E-003,5.35804451332749E-001,3.81185943832952E-006,2.00000000000000E-001,2.00000000000000E-001,2.23135315171175E-001,0.00000000000000E+000,6.56373439148567E-014,6.20636773329436E-015 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-012,7.13039570078954E-003,5.35804451332749E-001,3.81185943832952E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,2.23135315171175E-001,0.00000000000000E+000,6.56373439148567E-014,6.20636773329436E-015 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01260000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01260000_ref.csv index d450653b8..b07f4d7ce 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01260000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01260000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-RotRelaxPmean,006-RotRelaxPmax,007-VibRelaxPmean,008-VibRelaxPmax,009-VibRelaxRate001+004,010-VibRelaxRate002+004 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-012,7.41141210419671E-003,5.75456152724456E-001,3.92916834833356E-006,2.00000000000000E-001,2.00000000000000E-001,1.06767525015844E-001,0.00000000000000E+000,3.44953922724716E-014,5.85600826447936E-016 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-012,7.41141210419671E-003,5.75456152724456E-001,3.92916834833356E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,1.06767525015844E-001,0.00000000000000E+000,3.44953922724716E-014,5.85600826447936E-016 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01450000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01450000_ref.csv index 4b017d8c0..a6dcfbfa2 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01450000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01450000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-RotRelaxPmean,006-RotRelaxPmax,007-VibRelaxPmean,008-VibRelaxPmax,009-VibRelaxRate001+004,010-VibRelaxRate002+004 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-012,6.65027675850004E-003,6.12456655940543E-001,4.07119425011616E-006,2.00000000000000E-001,2.00000000000000E-001,5.87308821125883E-002,0.00000000000000E+000,1.68372750441953E-014,6.10626502791865E-016 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-012,6.65027675850004E-003,6.12456655940543E-001,4.07119425011616E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,5.87308821125883E-002,0.00000000000000E+000,1.68372750441953E-014,6.10626502791865E-016 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01680000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01680000_ref.csv index 06fc05e13..562e76706 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01680000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01680000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-RotRelaxPmean,006-RotRelaxPmax,007-VibRelaxPmean,008-VibRelaxPmax,009-VibRelaxRate001+004,010-VibRelaxRate002+004 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-012,7.77275763175020E-003,6.30202231057627E-001,4.44879885789475E-006,2.00000000000000E-001,2.00000000000000E-001,6.02831753347437E-002,0.00000000000000E+000,1.92697707848252E-014,1.39643273999123E-015 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-012,7.77275763175020E-003,6.30202231057627E-001,4.44879885789475E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,6.02831753347437E-002,0.00000000000000E+000,1.92697707848252E-014,1.39643273999123E-015 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02050000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02050000_ref.csv index ac589cdc2..d08ab0301 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02050000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02050000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-RotRelaxPmean,006-RotRelaxPmax,007-VibRelaxPmean,008-VibRelaxPmax,009-VibRelaxRate001+004,010-VibRelaxRate002+004 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-012,1.06319524888115E-002,6.07432039676916E-001,5.12255083718190E-006,2.00000000000000E-001,2.00000000000000E-001,4.40589093002749E-002,0.00000000000000E+000,1.16019035530454E-014,9.66491620402533E-015 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-012,1.06319524888115E-002,6.07432039676916E-001,5.12255083718190E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,4.40589093002749E-002,0.00000000000000E+000,1.16019035530454E-014,9.66491620402533E-015 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02450000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02450000_ref.csv index 88a1b857d..4b794248c 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02450000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02450000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-RotRelaxPmean,006-RotRelaxPmax,007-VibRelaxPmean,008-VibRelaxPmax,009-VibRelaxRate001+004,010-VibRelaxRate002+004 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-012,1.34641353177094E-002,5.41785962977047E-001,5.79453776989234E-006,2.00000000000000E-001,2.00000000000000E-001,3.44164212462233E-002,0.00000000000000E+000,7.69289290812374E-015,1.37641219891609E-014 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-012,1.34641353177094E-002,5.41785962977047E-001,5.79453776989234E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,3.44164212462233E-002,0.00000000000000E+000,7.69289290812374E-015,1.37641219891609E-014 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02970000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02970000_ref.csv index e07bdefd3..34b03d2f3 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02970000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02970000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-RotRelaxPmean,006-RotRelaxPmax,007-VibRelaxPmean,008-VibRelaxPmax,009-VibRelaxRate001+004,010-VibRelaxRate002+004 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-012,1.60805126110273E-002,5.84406124811465E-001,6.52721823304018E-006,2.00000000000000E-001,2.00000000000000E-001,1.76642476353337E-002,0.00000000000000E+000,3.86396442750262E-015,9.04427943069590E-015 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-012,1.60805126110273E-002,5.84406124811465E-001,6.52721823304018E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,1.76642476353337E-002,0.00000000000000E+000,3.86396442750262E-015,9.04427943069590E-015 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_04190000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_04190000_ref.csv index 08cf44165..7d915fca1 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_04190000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_04190000_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-RotRelaxPmean,006-RotRelaxPmax,007-VibRelaxPmean,008-VibRelaxPmax,009-VibRelaxRate001+004,010-VibRelaxRate002+004 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-012,1.84178061838665E-002,6.46459908519344E-001,7.90007461546092E-006,2.00000000000000E-001,2.00000000000000E-001,7.68774501587622E-003,0.00000000000000E+000,2.90798359116454E-015,3.72882577524540E-015 +001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +1.00000000000000E-012,1.84178061838665E-002,6.46459908519344E-001,7.90007461546092E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,7.68774501587622E-003,0.00000000000000E+000,2.90798359116454E-015,3.72882577524540E-015 diff --git a/regressioncheck/NIG_Reservoir/RELAX_N2Ion/PartAnalyze_ref.csv b/regressioncheck/NIG_Reservoir/RELAX_N2Ion/PartAnalyze_ref.csv index 6e8a951f3..bf7c05584 100644 --- a/regressioncheck/NIG_Reservoir/RELAX_N2Ion/PartAnalyze_ref.csv +++ b/regressioncheck/NIG_Reservoir/RELAX_N2Ion/PartAnalyze_ref.csv @@ -1,32 +1,32 @@ -001-TIME,002-TempTra-001,003-TempVib001,004-XiVibMean001,005-TempRot001,006-TempElec001,007-XiElecMean001,008-TempTotal001,009-Pmean,010-Pmax,011-MeanFreePath -0.00000000000000E+000,1.19989459269791E+004,1.49224026057082E+004,1.79479063831722E+000,9.02846984091153E+003,7.99538000223593E+003,6.07050073459475E-001,1.15768449112992E+004,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -2.00000000000000E-007,1.10620424966161E+004,1.40942438607584E+004,1.78320098412490E+000,1.10400915477564E+004,8.41970400148507E+003,6.28381327931031E-001,1.15616289857855E+004,3.50295156594974E-001,6.05575496880284E-001,3.33888939756425E-005 -4.00000000000000E-007,1.12214297367351E+004,1.35969318598786E+004,1.77559124820753E+000,1.11005418605492E+004,8.80019566952623E+003,6.45663446795183E-001,1.15465557152132E+004,3.52371490739197E-001,6.52345461975280E-001,3.33784415518489E-005 -5.99999999999999E-007,1.13191676825505E+004,1.30997738255577E+004,1.76743147007350E+000,1.12661466415723E+004,9.15655059130747E+003,6.60420916251511E-001,1.15362990424938E+004,3.51845611546445E-001,6.55097874341715E-001,3.33713232239882E-005 -7.99999999999998E-007,1.14002797881253E+004,1.26535479135592E+004,1.75958625529683E+000,1.14346545226965E+004,9.45777718463110E+003,6.71911417502580E-001,1.15306428995324E+004,3.54198673646520E-001,6.08769197819326E-001,3.33673956943485E-005 -9.99999999999998E-007,1.13801960841996E+004,1.24060892180104E+004,1.75500358614321E+000,1.15714303126550E+004,9.73197062214363E+003,6.81647902974265E-001,1.15226533658753E+004,3.52763617836066E-001,6.47526153049008E-001,3.33618454022084E-005 -1.20000000000000E-006,1.14597239577930E+004,1.21945325811577E+004,1.75094525639444E+000,1.15720703519370E+004,9.91029290351181E+003,6.87633732270350E-001,1.15196630138486E+004,3.53428225078326E-001,6.39393524178442E-001,3.33597672662352E-005 -1.40000000000001E-006,1.15143421960608E+004,1.21192635067520E+004,1.74946880437878E+000,1.14667653792402E+004,1.01045454374115E+004,6.93860571566418E-001,1.15123182286302E+004,3.54806509728534E-001,6.22475265888892E-001,3.33546612895410E-005 -1.60000000000001E-006,1.15421066457483E+004,1.19469713475320E+004,1.74602252305702E+000,1.15535083677439E+004,1.01895067842464E+004,6.96491493343828E-001,1.15135722063277E+004,3.54173190706720E-001,6.14517346957743E-001,3.33555332099185E-005 -1.80000000000002E-006,1.15031477156403E+004,1.18766396928797E+004,1.74458836553097E+000,1.15711585529757E+004,1.04094408161667E+004,7.03051403462513E-001,1.15056557937308E+004,3.53951282281732E-001,6.45104718014630E-001,3.33500275299441E-005 -2.00000000000002E-006,1.15436342193899E+004,1.17855208515193E+004,1.74270612076026E+000,1.15121902978973E+004,1.05864114397443E+004,7.08078041580060E-001,1.15008012835731E+004,3.53918724238798E-001,6.46159818337577E-001,3.33466499073762E-005 -2.20000000000001E-006,1.15443977399036E+004,1.17599421116987E+004,1.74217275380026E+000,1.14892769370729E+004,1.06806412971430E+004,7.10666728462121E-001,1.14976277752372E+004,3.54310105963646E-001,6.18637946374859E-001,3.33444412897225E-005 -2.40000000000000E-006,1.15264339955997E+004,1.17142184297887E+004,1.74121380773915E+000,1.14919271035404E+004,1.08201516905252E+004,7.14391246342048E-001,1.14933578295699E+004,3.53053188187655E-001,6.28817487950188E-001,3.33414688703111E-005 -2.60000000000000E-006,1.15015129694199E+004,1.16469079132382E+004,1.73978910734463E+000,1.15302490374946E+004,1.09524210600295E+004,7.17806982547282E-001,1.14902877260648E+004,3.54611876529472E-001,6.22018808953562E-001,3.33393311733100E-005 -2.79999999999999E-006,1.14936081788626E+004,1.16158891011923E+004,1.73912727894516E+000,1.15296127447198E+004,1.10395064405352E+004,7.19996410128193E-001,1.14879398988128E+004,3.53517886072671E-001,6.33765105009052E-001,3.33376961005468E-005 -2.99999999999998E-006,1.14961918775913E+004,1.14814089335017E+004,1.73621868308926E+000,1.16270838343482E+004,1.11044825614669E+004,7.21599977034699E-001,1.14899514545070E+004,3.53273104205770E-001,6.51399070691700E-001,3.33390970028082E-005 -3.19999999999998E-006,1.14947839462852E+004,1.15578459735352E+004,1.73787978401859E+000,1.15390463232692E+004,1.11330604690386E+004,7.22297267454223E-001,1.14863186106117E+004,3.52620893623727E-001,6.43946219479876E-001,3.33365668555254E-005 -3.39999999999997E-006,1.15348734260212E+004,1.15755950845536E+004,1.73826251931340E+000,1.14552234673610E+004,1.11452253891536E+004,7.22592618865092E-001,1.14852716346567E+004,3.54714892437842E-001,6.54500529157322E-001,3.33358375609114E-005 -3.59999999999997E-006,1.14588535675422E+004,1.16154094207756E+004,1.73911701793932E+000,1.15100914566993E+004,1.11847131060348E+004,7.23545339256125E-001,1.14824901284989E+004,3.52565855534715E-001,6.20357961047059E-001,3.33338997948782E-005 -3.79999999999996E-006,1.14660905638821E+004,1.15733564767493E+004,1.73821430826296E+000,1.15542363619436E+004,1.11580661381639E+004,7.22903431992467E-001,1.14848640011933E+004,3.53421093821022E-001,6.22613175950687E-001,3.33355536010026E-005 -3.99999999999997E-006,1.14396806840396E+004,1.15245854551015E+004,1.73715955110718E+000,1.16161940305800E+004,1.12107807919955E+004,7.24169281760960E-001,1.14845463593298E+004,3.52757921266571E-001,6.37704245356829E-001,3.33353323244705E-005 -4.19999999999999E-006,1.14498926434249E+004,1.15252250918572E+004,1.73717343922432E+000,1.15648417369740E+004,1.12822255609249E+004,7.25859234143595E-001,1.14819253338867E+004,3.54037527612684E-001,6.04324450877202E-001,3.33335062810942E-005 -4.40000000000000E-006,1.14362688641992E+004,1.15578459735351E+004,1.73787978401859E+000,1.15291295399624E+004,1.13301128655045E+004,7.26975670238512E-001,1.14791142917764E+004,3.53347580034793E-001,6.36726494593885E-001,3.33315475028082E-005 -4.60000000000002E-006,1.14898976507351E+004,1.15773539868827E+004,1.73830038691590E+000,1.14517074421532E+004,1.12849288765060E+004,7.25922604674396E-001,1.14800980371989E+004,3.52778215066936E-001,6.53801352474305E-001,3.33322330335281E-005 -4.80000000000003E-006,1.14006646609161E+004,1.15714376657433E+004,1.73817297030696E+000,1.15562407971109E+004,1.13559874574951E+004,7.27573534441274E-001,1.14777472865143E+004,3.52422639774287E-001,6.38035268305511E-001,3.33305948203262E-005 -5.00000000000005E-006,1.14829227269937E+004,1.15477720015858E+004,1.73766205539366E+000,1.14325494222931E+004,1.14041644030299E+004,7.28676788047437E-001,1.14768354264956E+004,3.52715733320417E-001,6.66773257456942E-001,3.33299592861160E-005 -5.20000000000006E-006,1.15397590500250E+004,1.14770911680712E+004,1.73612422407439E+000,1.13995536468336E+004,1.14405626163898E+004,7.29501819209125E-001,1.14779324851215E+004,3.55218418595250E-001,6.05809549848937E-001,3.33307238925228E-005 -5.40000000000008E-006,1.14937884956755E+004,1.14946819349676E+004,1.73650863225748E+000,1.14590254831245E+004,1.14244392698882E+004,7.29137250542961E-001,1.14779104771172E+004,3.53906639442327E-001,6.49888010646296E-001,3.33307085543615E-005 -5.60000000000009E-006,1.14631607567901E+004,1.14163204120801E+004,1.73478755678303E+000,1.15874830208812E+004,1.14149776653543E+004,7.28922649120477E-001,1.14808818004431E+004,3.52345286485169E-001,6.50562707365760E-001,3.33327791731437E-005 -5.80000000000011E-006,1.15111957438952E+004,1.13609834191408E+004,1.73355860055752E+000,1.15659699516542E+004,1.14239565349630E+004,7.29126313377930E-001,1.14824578489909E+004,3.53730215526555E-001,6.35601725338407E-001,3.33338773049195E-005 -6.00000000000000E-006,1.15442302119966E+004,1.13014842452330E+004,1.73222446876191E+000,1.15797946775515E+004,1.14153638532945E+004,7.28931417981426E-001,1.14848163200314E+004,3.54410919700254E-001,6.53336080195601E-001,3.33355203855196E-005 +001-TIME,002-TempTra-001,003-TempVib001,004-XiVibMean001,005-TempRot001,006-TempElec001,007-XiElecMean001,008-TempTotal001,009-Pmean,010-Pmax,011-MeanFreePath,012-MaxMCSoverMFP,013-ResolvedCellPercentage +0.0000000000000000E+000,0.1199999999999996E+005,0.1498939235726383E+005,0.1795674261359305E+001,0.9120452603291011E+004,0.8021351141211584E+004,0.6084224543803108E+000,0.1162023467654341E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +2.00000000000000E-007,1.10620424966161E+004,1.40942438607584E+004,1.78320098412490E+000,1.10400915477564E+004,8.41970400148507E+003,6.28381327931031E-001,1.15616289857855E+004,3.50295156594974E-001,6.05575496880284E-001,3.33888939756425E-005,0.0000000000000000E+000,0.0000000000000000E+000 +4.00000000000000E-007,1.12214297367351E+004,1.35969318598786E+004,1.77559124820753E+000,1.11005418605492E+004,8.80019566952623E+003,6.45663446795183E-001,1.15465557152132E+004,3.52371490739197E-001,6.52345461975280E-001,3.33784415518489E-005,0.0000000000000000E+000,0.0000000000000000E+000 +5.99999999999999E-007,1.13191676825505E+004,1.30997738255577E+004,1.76743147007350E+000,1.12661466415723E+004,9.15655059130747E+003,6.60420916251511E-001,1.15362990424938E+004,3.51845611546445E-001,6.55097874341715E-001,3.33713232239882E-005,0.0000000000000000E+000,0.0000000000000000E+000 +7.99999999999998E-007,1.14002797881253E+004,1.26535479135592E+004,1.75958625529683E+000,1.14346545226965E+004,9.45777718463110E+003,6.71911417502580E-001,1.15306428995324E+004,3.54198673646520E-001,6.08769197819326E-001,3.33673956943485E-005,0.0000000000000000E+000,0.0000000000000000E+000 +9.99999999999998E-007,1.13801960841996E+004,1.24060892180104E+004,1.75500358614321E+000,1.15714303126550E+004,9.73197062214363E+003,6.81647902974265E-001,1.15226533658753E+004,3.52763617836066E-001,6.47526153049008E-001,3.33618454022084E-005,0.0000000000000000E+000,0.0000000000000000E+000 +1.20000000000000E-006,1.14597239577930E+004,1.21945325811577E+004,1.75094525639444E+000,1.15720703519370E+004,9.91029290351181E+003,6.87633732270350E-001,1.15196630138486E+004,3.53428225078326E-001,6.39393524178442E-001,3.33597672662352E-005,0.0000000000000000E+000,0.0000000000000000E+000 +1.40000000000001E-006,1.15143421960608E+004,1.21192635067520E+004,1.74946880437878E+000,1.14667653792402E+004,1.01045454374115E+004,6.93860571566418E-001,1.15123182286302E+004,3.54806509728534E-001,6.22475265888892E-001,3.33546612895410E-005,0.0000000000000000E+000,0.0000000000000000E+000 +1.60000000000001E-006,1.15421066457483E+004,1.19469713475320E+004,1.74602252305702E+000,1.15535083677439E+004,1.01895067842464E+004,6.96491493343828E-001,1.15135722063277E+004,3.54173190706720E-001,6.14517346957743E-001,3.33555332099185E-005,0.0000000000000000E+000,0.0000000000000000E+000 +1.80000000000002E-006,1.15031477156403E+004,1.18766396928797E+004,1.74458836553097E+000,1.15711585529757E+004,1.04094408161667E+004,7.03051403462513E-001,1.15056557937308E+004,3.53951282281732E-001,6.45104718014630E-001,3.33500275299441E-005,0.0000000000000000E+000,0.0000000000000000E+000 +2.00000000000002E-006,1.15436342193899E+004,1.17855208515193E+004,1.74270612076026E+000,1.15121902978973E+004,1.05864114397443E+004,7.08078041580060E-001,1.15008012835731E+004,3.53918724238798E-001,6.46159818337577E-001,3.33466499073762E-005,0.0000000000000000E+000,0.0000000000000000E+000 +2.20000000000001E-006,1.15443977399036E+004,1.17599421116987E+004,1.74217275380026E+000,1.14892769370729E+004,1.06806412971430E+004,7.10666728462121E-001,1.14976277752372E+004,3.54310105963646E-001,6.18637946374859E-001,3.33444412897225E-005,0.0000000000000000E+000,0.0000000000000000E+000 +2.40000000000000E-006,1.15264339955997E+004,1.17142184297887E+004,1.74121380773915E+000,1.14919271035404E+004,1.08201516905252E+004,7.14391246342048E-001,1.14933578295699E+004,3.53053188187655E-001,6.28817487950188E-001,3.33414688703111E-005,0.0000000000000000E+000,0.0000000000000000E+000 +2.60000000000000E-006,1.15015129694199E+004,1.16469079132382E+004,1.73978910734463E+000,1.15302490374946E+004,1.09524210600295E+004,7.17806982547282E-001,1.14902877260648E+004,3.54611876529472E-001,6.22018808953562E-001,3.33393311733100E-005,0.0000000000000000E+000,0.0000000000000000E+000 +2.79999999999999E-006,1.14936081788626E+004,1.16158891011923E+004,1.73912727894516E+000,1.15296127447198E+004,1.10395064405352E+004,7.19996410128193E-001,1.14879398988128E+004,3.53517886072671E-001,6.33765105009052E-001,3.33376961005468E-005,0.0000000000000000E+000,0.0000000000000000E+000 +2.99999999999998E-006,1.14961918775913E+004,1.14814089335017E+004,1.73621868308926E+000,1.16270838343482E+004,1.11044825614669E+004,7.21599977034699E-001,1.14899514545070E+004,3.53273104205770E-001,6.51399070691700E-001,3.33390970028082E-005,0.0000000000000000E+000,0.0000000000000000E+000 +3.19999999999998E-006,1.14947839462852E+004,1.15578459735352E+004,1.73787978401859E+000,1.15390463232692E+004,1.11330604690386E+004,7.22297267454223E-001,1.14863186106117E+004,3.52620893623727E-001,6.43946219479876E-001,3.33365668555254E-005,0.0000000000000000E+000,0.0000000000000000E+000 +3.39999999999997E-006,1.15348734260212E+004,1.15755950845536E+004,1.73826251931340E+000,1.14552234673610E+004,1.11452253891536E+004,7.22592618865092E-001,1.14852716346567E+004,3.54714892437842E-001,6.54500529157322E-001,3.33358375609114E-005,0.0000000000000000E+000,0.0000000000000000E+000 +3.59999999999997E-006,1.14588535675422E+004,1.16154094207756E+004,1.73911701793932E+000,1.15100914566993E+004,1.11847131060348E+004,7.23545339256125E-001,1.14824901284989E+004,3.52565855534715E-001,6.20357961047059E-001,3.33338997948782E-005,0.0000000000000000E+000,0.0000000000000000E+000 +3.79999999999996E-006,1.14660905638821E+004,1.15733564767493E+004,1.73821430826296E+000,1.15542363619436E+004,1.11580661381639E+004,7.22903431992467E-001,1.14848640011933E+004,3.53421093821022E-001,6.22613175950687E-001,3.33355536010026E-005,0.0000000000000000E+000,0.0000000000000000E+000 +3.99999999999997E-006,1.14396806840396E+004,1.15245854551015E+004,1.73715955110718E+000,1.16161940305800E+004,1.12107807919955E+004,7.24169281760960E-001,1.14845463593298E+004,3.52757921266571E-001,6.37704245356829E-001,3.33353323244705E-005,0.0000000000000000E+000,0.0000000000000000E+000 +4.19999999999999E-006,1.14498926434249E+004,1.15252250918572E+004,1.73717343922432E+000,1.15648417369740E+004,1.12822255609249E+004,7.25859234143595E-001,1.14819253338867E+004,3.54037527612684E-001,6.04324450877202E-001,3.33335062810942E-005,0.0000000000000000E+000,0.0000000000000000E+000 +4.40000000000000E-006,1.14362688641992E+004,1.15578459735351E+004,1.73787978401859E+000,1.15291295399624E+004,1.13301128655045E+004,7.26975670238512E-001,1.14791142917764E+004,3.53347580034793E-001,6.36726494593885E-001,3.33315475028082E-005,0.0000000000000000E+000,0.0000000000000000E+000 +4.60000000000002E-006,1.14898976507351E+004,1.15773539868827E+004,1.73830038691590E+000,1.14517074421532E+004,1.12849288765060E+004,7.25922604674396E-001,1.14800980371989E+004,3.52778215066936E-001,6.53801352474305E-001,3.33322330335281E-005,0.0000000000000000E+000,0.0000000000000000E+000 +4.80000000000003E-006,1.14006646609161E+004,1.15714376657433E+004,1.73817297030696E+000,1.15562407971109E+004,1.13559874574951E+004,7.27573534441274E-001,1.14777472865143E+004,3.52422639774287E-001,6.38035268305511E-001,3.33305948203262E-005,0.0000000000000000E+000,0.0000000000000000E+000 +5.00000000000005E-006,1.14829227269937E+004,1.15477720015858E+004,1.73766205539366E+000,1.14325494222931E+004,1.14041644030299E+004,7.28676788047437E-001,1.14768354264956E+004,3.52715733320417E-001,6.66773257456942E-001,3.33299592861160E-005,0.0000000000000000E+000,0.0000000000000000E+000 +5.20000000000006E-006,1.15397590500250E+004,1.14770911680712E+004,1.73612422407439E+000,1.13995536468336E+004,1.14405626163898E+004,7.29501819209125E-001,1.14779324851215E+004,3.55218418595250E-001,6.05809549848937E-001,3.33307238925228E-005,0.0000000000000000E+000,0.0000000000000000E+000 +5.40000000000008E-006,1.14937884956755E+004,1.14946819349676E+004,1.73650863225748E+000,1.14590254831245E+004,1.14244392698882E+004,7.29137250542961E-001,1.14779104771172E+004,3.53906639442327E-001,6.49888010646296E-001,3.33307085543615E-005,0.0000000000000000E+000,0.0000000000000000E+000 +5.60000000000009E-006,1.14631607567901E+004,1.14163204120801E+004,1.73478755678303E+000,1.15874830208812E+004,1.14149776653543E+004,7.28922649120477E-001,1.14808818004431E+004,3.52345286485169E-001,6.50562707365760E-001,3.33327791731437E-005,0.0000000000000000E+000,0.0000000000000000E+000 +5.80000000000011E-006,1.15111957438952E+004,1.13609834191408E+004,1.73355860055752E+000,1.15659699516542E+004,1.14239565349630E+004,7.29126313377930E-001,1.14824578489909E+004,3.53730215526555E-001,6.35601725338407E-001,3.33338773049195E-005,0.0000000000000000E+000,0.0000000000000000E+000 +6.00000000000000E-006,1.15442302119966E+004,1.13014842452330E+004,1.73222446876191E+000,1.15797946775515E+004,1.14153638532945E+004,7.28931417981426E-001,1.14848163200314E+004,3.54410919700254E-001,6.53336080195601E-001,3.33355203855196E-005,0.0000000000000000E+000,0.0000000000000000E+000 From c7467c1d425ed9e818eed482504f4bd4ea14cfa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Mon, 4 Dec 2023 17:06:18 +0100 Subject: [PATCH 117/222] CollProbMaxProcMac and MPI --- src/particles/analyze/particle_analyze.f90 | 9 ++++++++- src/particles/dsmc/dsmc_main.f90 | 1 + src/particles/dsmc/dsmc_particle_pairing.f90 | 6 ++++-- src/particles/dsmc/dsmc_vars.f90 | 1 + 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/particles/analyze/particle_analyze.f90 b/src/particles/analyze/particle_analyze.f90 index ffafafde4..b62ee261f 100644 --- a/src/particles/analyze/particle_analyze.f90 +++ b/src/particles/analyze/particle_analyze.f90 @@ -1395,7 +1395,14 @@ SUBROUTINE AnalyzeParticles(Time) #endif /*USE_MPI*/ MaxMCSoverMFP = DSMC%MaxMCSoverMFP ! MaxCollProb - MaxCollProb = DSMC%CollProbMax +#if USE_MPI + IF(MPIRoot)THEN + CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%CollProMaxProcMax,1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR) + ELSE + CALL MPI_REDUCE(DSMC%CollProMaxProcMax,DSMC%CollProMaxProcMax,1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR) + END IF +#endif /*USE_MPI*/ + MaxCollProb = DSMC%CollProMaxProcMax ! ResolvedCellPercentage: #if USE_MPI IF(MPIRoot)THEN diff --git a/src/particles/dsmc/dsmc_main.f90 b/src/particles/dsmc/dsmc_main.f90 index b39752ae0..757558bc6 100644 --- a/src/particles/dsmc/dsmc_main.f90 +++ b/src/particles/dsmc/dsmc_main.f90 @@ -74,6 +74,7 @@ SUBROUTINE DSMC_main(DoElement) DSMC%MaxMCSoverMFP = 0.0 DSMC%ParticlePairingCounter = 0 ! Counts ParticleParing Calls DSMC%ResolvedCellCounter = 0 ! Counts resolved cells +DSMC%CollProMaxProcMax = 0.0 ! Maximum CollProbMax of every Cell in Process ! Insert background gas particles for every simulation particle IF((BGGas%NumberOfSpecies.GT.0).AND.(.NOT.UseMCC)) CALL BGGas_InsertParticles() diff --git a/src/particles/dsmc/dsmc_particle_pairing.f90 b/src/particles/dsmc/dsmc_particle_pairing.f90 index 38a93a4cf..cfed99328 100644 --- a/src/particles/dsmc/dsmc_particle_pairing.f90 +++ b/src/particles/dsmc/dsmc_particle_pairing.f90 @@ -618,10 +618,12 @@ SUBROUTINE PerformPairingAndCollision(iPartIndx_Node, PartNum, iElem, NodeVolume DSMC%InstantTransTemp(nSpecies+1)) IF((DSMC%CollSepCount.GT.0).AND.(DSMC%MeanFreePath.GT.0.0)) DSMC%MCSoverMFP = & MAX(DSMC%MCSoverMFP,(DSMC%CollSepDist/DSMC%CollSepCount)/DSMC%MeanFreePath) - ! Calculation of the maximum MCS/MFP for the cell and number of resolved Cells + ! Calculation of the maximum MCS/MFP of all cells for this processor and number of resolved Cells for this processor IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & - DSMC%ResolvedCellCounter + 1 + DSMC%ResolvedCellCounter + 1 + ! Calculation of the maximum CollProbMax of all cells for this processor + IF(DSMC%CollProbMax .GE. DSMC%CollProMaxProcMax) DSMC%CollProMaxProcMax = DSMC%CollProbMax END IF END IF diff --git a/src/particles/dsmc/dsmc_vars.f90 b/src/particles/dsmc/dsmc_vars.f90 index e4a0158c3..d512801b6 100644 --- a/src/particles/dsmc/dsmc_vars.f90 +++ b/src/particles/dsmc/dsmc_vars.f90 @@ -206,6 +206,7 @@ MODULE MOD_DSMC_Vars ! 2: Max Prob ! 3: Sample size REAL :: MeanFreePath + real :: CollProMaxProcMax ! Maximum CollProbMax of every Cell in Process REAL :: MaxMCSoverMFP ! Maximum MCSoverMFP after each time step REAL :: MCSoverMFP ! Subcell local mean collision distance over mean free path INTEGER :: ParticlePairingCounter ! Counts Calls of ParticlePairing. Used for ResolvedCellPercentage From 1741e55019f03d9493a56d97db634f8c2eb28b1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Wed, 6 Dec 2023 09:31:12 +0100 Subject: [PATCH 118/222] Moved CollProbMaxProcMax Calculation --- src/particles/analyze/particle_analyze.f90 | 6 +++--- src/particles/dsmc/dsmc_collision_prob.f90 | 2 ++ src/particles/dsmc/dsmc_main.f90 | 4 ++-- src/particles/dsmc/dsmc_particle_pairing.f90 | 3 +-- src/particles/dsmc/dsmc_vars.f90 | 2 +- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/particles/analyze/particle_analyze.f90 b/src/particles/analyze/particle_analyze.f90 index b62ee261f..a699bd804 100644 --- a/src/particles/analyze/particle_analyze.f90 +++ b/src/particles/analyze/particle_analyze.f90 @@ -1397,12 +1397,12 @@ SUBROUTINE AnalyzeParticles(Time) ! MaxCollProb #if USE_MPI IF(MPIRoot)THEN - CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%CollProMaxProcMax,1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR) + CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%CollProbMaxProcMax,1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR) ELSE - CALL MPI_REDUCE(DSMC%CollProMaxProcMax,DSMC%CollProMaxProcMax,1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR) + CALL MPI_REDUCE(DSMC%CollProbMaxProcMax,DSMC%CollProbMaxProcMax,1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR) END IF #endif /*USE_MPI*/ - MaxCollProb = DSMC%CollProMaxProcMax + MaxCollProb = DSMC%CollProbMaxProcMax ! ResolvedCellPercentage: #if USE_MPI IF(MPIRoot)THEN diff --git a/src/particles/dsmc/dsmc_collision_prob.f90 b/src/particles/dsmc/dsmc_collision_prob.f90 index e9a506178..b4008bcba 100644 --- a/src/particles/dsmc/dsmc_collision_prob.f90 +++ b/src/particles/dsmc/dsmc_collision_prob.f90 @@ -218,6 +218,8 @@ SUBROUTINE DSMC_prob_calc(iElem, iPair, NodeVolume) IF(DSMC%CalcQualityFactors) THEN CollProb = Coll_pData(iPair)%Prob DSMC%CollProbMax = MAX(CollProb, DSMC%CollProbMax) + ! Calculation of the maximum CollProbMax of all cells for this processor + IF(DSMC%CollProbMax .GE. DSMC%CollProbMaxProcMax) DSMC%CollProbMaxProcMax = DSMC%CollProbMax ! Remove the correction factor for the mean collision probability IF(SpecDSMC(iSpec_p1)%UseCollXSec) THEN IF(BGGas%BackgroundSpecies(iSpec_p2)) THEN diff --git a/src/particles/dsmc/dsmc_main.f90 b/src/particles/dsmc/dsmc_main.f90 index 757558bc6..301d9938e 100644 --- a/src/particles/dsmc/dsmc_main.f90 +++ b/src/particles/dsmc/dsmc_main.f90 @@ -71,10 +71,11 @@ SUBROUTINE DSMC_main(DoElement) ! Reset the number of particles created during the DSMC loop DSMCSumOfFormedParticles = 0 + DSMC%MaxMCSoverMFP = 0.0 DSMC%ParticlePairingCounter = 0 ! Counts ParticleParing Calls DSMC%ResolvedCellCounter = 0 ! Counts resolved cells -DSMC%CollProMaxProcMax = 0.0 ! Maximum CollProbMax of every Cell in Process +DSMC%CollProbMaxProcMax = 0.0 ! Maximum CollProbMax of every Cell in Process ! Insert background gas particles for every simulation particle IF((BGGas%NumberOfSpecies.GT.0).AND.(.NOT.UseMCC)) CALL BGGas_InsertParticles() @@ -85,7 +86,6 @@ SUBROUTINE DSMC_main(DoElement) #if USE_LOADBALANCE CALL LBStartTime(tLBStart) #endif /*USE_LOADBALANCE*/ - IF (CollisMode.NE.0) THEN DO iElem = 1, nElems ! element/cell main loop IF(PRESENT(DoElement)) THEN diff --git a/src/particles/dsmc/dsmc_particle_pairing.f90 b/src/particles/dsmc/dsmc_particle_pairing.f90 index cfed99328..88516536c 100644 --- a/src/particles/dsmc/dsmc_particle_pairing.f90 +++ b/src/particles/dsmc/dsmc_particle_pairing.f90 @@ -620,10 +620,9 @@ SUBROUTINE PerformPairingAndCollision(iPartIndx_Node, PartNum, iElem, NodeVolume MAX(DSMC%MCSoverMFP,(DSMC%CollSepDist/DSMC%CollSepCount)/DSMC%MeanFreePath) ! Calculation of the maximum MCS/MFP of all cells for this processor and number of resolved Cells for this processor IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP + ! Calculate number of resolved Cells for this processor IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & DSMC%ResolvedCellCounter + 1 - ! Calculation of the maximum CollProbMax of all cells for this processor - IF(DSMC%CollProbMax .GE. DSMC%CollProMaxProcMax) DSMC%CollProMaxProcMax = DSMC%CollProbMax END IF END IF diff --git a/src/particles/dsmc/dsmc_vars.f90 b/src/particles/dsmc/dsmc_vars.f90 index d512801b6..7d04ec892 100644 --- a/src/particles/dsmc/dsmc_vars.f90 +++ b/src/particles/dsmc/dsmc_vars.f90 @@ -206,7 +206,7 @@ MODULE MOD_DSMC_Vars ! 2: Max Prob ! 3: Sample size REAL :: MeanFreePath - real :: CollProMaxProcMax ! Maximum CollProbMax of every Cell in Process + real :: CollProbMaxProcMax ! Maximum CollProbMax of every cell in Process REAL :: MaxMCSoverMFP ! Maximum MCSoverMFP after each time step REAL :: MCSoverMFP ! Subcell local mean collision distance over mean free path INTEGER :: ParticlePairingCounter ! Counts Calls of ParticlePairing. Used for ResolvedCellPercentage From 0ad3bee78682bb343db37aa6b952c16c5488652b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Thu, 7 Dec 2023 11:49:59 +0100 Subject: [PATCH 119/222] MaxMCSoverMFP etc. for MCC and DSMC_pairing_bggas --- src/particles/analyze/particle_analyze.f90 | 10 +++++----- src/particles/dsmc/dsmc_bg_gas.f90 | 6 ++++++ src/particles/dsmc/dsmc_main.f90 | 2 +- src/particles/dsmc/dsmc_particle_pairing.f90 | 2 +- src/particles/dsmc/dsmc_vars.f90 | 2 +- src/particles/mcc/mcc.f90 | 8 ++++++++ 6 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/particles/analyze/particle_analyze.f90 b/src/particles/analyze/particle_analyze.f90 index a699bd804..be2845f27 100644 --- a/src/particles/analyze/particle_analyze.f90 +++ b/src/particles/analyze/particle_analyze.f90 @@ -1385,7 +1385,7 @@ SUBROUTINE AnalyzeParticles(Time) END IF IF(DSMC%CalcQualityFactors) THEN IF(iter.GT.0) THEN - ! MaxMCSoverMFP: + ! MaxMCSoverMFP for all processes: #if USE_MPI IF(MPIRoot)THEN CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%MaxMCSoverMFP,1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR) @@ -1394,7 +1394,7 @@ SUBROUTINE AnalyzeParticles(Time) END IF #endif /*USE_MPI*/ MaxMCSoverMFP = DSMC%MaxMCSoverMFP - ! MaxCollProb + ! Maximum MaxCollProb for all processes: #if USE_MPI IF(MPIRoot)THEN CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%CollProbMaxProcMax,1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR) @@ -1407,13 +1407,13 @@ SUBROUTINE AnalyzeParticles(Time) #if USE_MPI IF(MPIRoot)THEN CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%ResolvedCellCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) - CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%ParticlePairingCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) + CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%ParticleCalcCollCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) ELSE CALL MPI_REDUCE(DSMC%ResolvedCellCounter,DSMC%ResolvedCellCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) - CALL MPI_REDUCE(DSMC%ParticlePairingCounter,DSMC%ParticlePairingCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) + CALL MPI_REDUCE(DSMC%ParticleCalcCollCounter,DSMC%ParticleCalcCollCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) END IF #endif /*USE_MPI*/ - IF(DSMC%ParticlePairingCounter.GT.0) ResolvedCellPercentage = REAL(DSMC%ResolvedCellCounter) / REAL(DSMC%ParticlePairingCounter) * 100 + IF(DSMC%ParticleCalcCollCounter.GT.0) ResolvedCellPercentage = REAL(DSMC%ResolvedCellCounter) / REAL(DSMC%ParticleCalcCollCounter) * 100 ! MeanCollProb: IF(DSMC%CollProbMeanCount.GT.0) MeanCollProb = DSMC%CollProbMean / DSMC%CollProbMeanCount ! MeanFreePath: diff --git a/src/particles/dsmc/dsmc_bg_gas.f90 b/src/particles/dsmc/dsmc_bg_gas.f90 index 644042a53..8df58b90d 100644 --- a/src/particles/dsmc/dsmc_bg_gas.f90 +++ b/src/particles/dsmc/dsmc_bg_gas.f90 @@ -512,6 +512,12 @@ SUBROUTINE DSMC_pairing_bggas(iElem) ! Determination of the MCS/MFP for the case without octree IF((DSMC%CollSepCount.GT.0.0).AND.(DSMC%MeanFreePath.GT.0.0)) DSMC%MCSoverMFP = (DSMC%CollSepDist/DSMC%CollSepCount) & / DSMC%MeanFreePath + ! Calculation of the maximum MCS/MFP of all cells for this processor and number of resolved Cells for this processor + IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP + ! Calculate number of resolved Cells for this processor + DSMC%ParticleCalcCollCounter = DSMC%ParticleCalcCollCounter + 1 ! Counts Particle Collision Calculation + IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & + DSMC%ResolvedCellCounter + 1 END IF END IF DEALLOCATE(Coll_pData) diff --git a/src/particles/dsmc/dsmc_main.f90 b/src/particles/dsmc/dsmc_main.f90 index 301d9938e..54d41983f 100644 --- a/src/particles/dsmc/dsmc_main.f90 +++ b/src/particles/dsmc/dsmc_main.f90 @@ -73,7 +73,7 @@ SUBROUTINE DSMC_main(DoElement) DSMCSumOfFormedParticles = 0 DSMC%MaxMCSoverMFP = 0.0 -DSMC%ParticlePairingCounter = 0 ! Counts ParticleParing Calls +DSMC%ParticleCalcCollCounter = 0 ! Counts Particle Collison Calculations DSMC%ResolvedCellCounter = 0 ! Counts resolved cells DSMC%CollProbMaxProcMax = 0.0 ! Maximum CollProbMax of every Cell in Process ! Insert background gas particles for every simulation particle diff --git a/src/particles/dsmc/dsmc_particle_pairing.f90 b/src/particles/dsmc/dsmc_particle_pairing.f90 index 88516536c..31525fbc0 100644 --- a/src/particles/dsmc/dsmc_particle_pairing.f90 +++ b/src/particles/dsmc/dsmc_particle_pairing.f90 @@ -609,7 +609,6 @@ SUBROUTINE PerformPairingAndCollision(iPartIndx_Node, PartNum, iElem, NodeVolume END IF END DO -DSMC%ParticlePairingCounter = DSMC%ParticlePairingCounter + 1 ! Counts Particle Pairing Calls ! 6.) Calculate the mean free path and the mean collision separation distance within a cell IF(DSMC%CalcQualityFactors) THEN IF((Time.GE.(1-DSMC%TimeFracSamp)*TEnd).OR.WriteMacroVolumeValues) THEN @@ -621,6 +620,7 @@ SUBROUTINE PerformPairingAndCollision(iPartIndx_Node, PartNum, iElem, NodeVolume ! Calculation of the maximum MCS/MFP of all cells for this processor and number of resolved Cells for this processor IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP ! Calculate number of resolved Cells for this processor + DSMC%ParticleCalcCollCounter = DSMC%ParticleCalcCollCounter + 1 ! Counts Particle Collision Calculation IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & DSMC%ResolvedCellCounter + 1 END IF diff --git a/src/particles/dsmc/dsmc_vars.f90 b/src/particles/dsmc/dsmc_vars.f90 index 7d04ec892..6a491edfc 100644 --- a/src/particles/dsmc/dsmc_vars.f90 +++ b/src/particles/dsmc/dsmc_vars.f90 @@ -209,7 +209,7 @@ MODULE MOD_DSMC_Vars real :: CollProbMaxProcMax ! Maximum CollProbMax of every cell in Process REAL :: MaxMCSoverMFP ! Maximum MCSoverMFP after each time step REAL :: MCSoverMFP ! Subcell local mean collision distance over mean free path - INTEGER :: ParticlePairingCounter ! Counts Calls of ParticlePairing. Used for ResolvedCellPercentage + INTEGER :: ParticleCalcCollCounter ! Counts Calculation/Calls of Collison. Used for ResolvedCellPercentage INTEGER :: ResolvedCellCounter ! Counts resolved Cells. Used for ResolvedCellPercentage INTEGER :: CollProbMeanCount ! counter of possible collision pairs INTEGER :: CollSepCount ! counter of actual collision pairs diff --git a/src/particles/mcc/mcc.f90 b/src/particles/mcc/mcc.f90 index 71197edb5..55e68628f 100644 --- a/src/particles/mcc/mcc.f90 +++ b/src/particles/mcc/mcc.f90 @@ -536,6 +536,8 @@ SUBROUTINE MonteCarloCollision(iElem) ! Determine collision probabilities IF(DSMC%CalcQualityFactors) THEN DSMC%CollProbMax = MAX(CollProb, DSMC%CollProbMax) + ! Calculation of the maximum CollProbMax of all cells for this processor + IF(DSMC%CollProbMax .GE. DSMC%CollProbMaxProcMax) DSMC%CollProbMaxProcMax = DSMC%CollProbMax ! Remove the correction factor for the mean collision probability IF(SpecXSec(iSpec)%UseCollXSec) THEN IF(XSec_NullCollision) THEN @@ -580,6 +582,12 @@ SUBROUTINE MonteCarloCollision(iElem) ! Determination of the MCS/MFP for the case without octree IF((DSMC%CollSepCount.GT.0.0).AND.(DSMC%MeanFreePath.GT.0.0)) DSMC%MCSoverMFP = (DSMC%CollSepDist/DSMC%CollSepCount) & / DSMC%MeanFreePath + ! Calculation of the maximum MCS/MFP of all cells for this processor + IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP + ! Calculate number of resolved Cells for this processor + DSMC%ParticleCalcCollCounter = DSMC%ParticleCalcCollCounter + 1 ! Counts Particle Collision Calculation + IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & + DSMC%ResolvedCellCounter + 1 END IF END IF From d6b2a306837f9c8b1d514c0dc339028fbb44369e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Fri, 8 Dec 2023 09:40:27 +0100 Subject: [PATCH 120/222] ResolvedTimestep and new CollProbMean variable --- src/particles/analyze/particle_analyze.f90 | 41 ++++++++++++++++---- src/particles/dsmc/dsmc_analyze.f90 | 2 +- src/particles/dsmc/dsmc_bg_gas.f90 | 8 ++++ src/particles/dsmc/dsmc_collision_prob.f90 | 2 +- src/particles/dsmc/dsmc_main.f90 | 3 +- src/particles/dsmc/dsmc_particle_pairing.f90 | 8 ++++ src/particles/dsmc/dsmc_vars.f90 | 4 +- src/particles/mcc/mcc.f90 | 10 ++++- 8 files changed, 66 insertions(+), 12 deletions(-) diff --git a/src/particles/analyze/particle_analyze.f90 b/src/particles/analyze/particle_analyze.f90 index be2845f27..a604c3fab 100644 --- a/src/particles/analyze/particle_analyze.f90 +++ b/src/particles/analyze/particle_analyze.f90 @@ -889,7 +889,7 @@ SUBROUTINE AnalyzeParticles(Time) #if (PP_TimeDiscMethod==2 || PP_TimeDiscMethod==4 || PP_TimeDiscMethod==300 || PP_TimeDiscMethod==400 || (PP_TimeDiscMethod>=501 && PP_TimeDiscMethod<=509) || PP_TimeDiscMethod==120) REAL :: ETotal REAL :: IntEn(nSpecAnalyze,3),IntTemp(nSpecies,3),TempTotal(nSpecAnalyze), Xi_Vib(nSpecies), Xi_Elec(nSpecies) -REAL :: MaxCollProb, MeanCollProb, MeanFreePath, MaxMCSoverMFP, ResolvedCellPercentage +REAL :: MaxCollProb, MeanCollProb, MeanFreePath, MaxMCSoverMFP, ResolvedCellPercentage, ResolvedTimestep REAL :: NumSpecTmp(nSpecAnalyze), RotRelaxProb(2), VibRelaxProb(2) INTEGER :: bgSpec #endif @@ -1163,9 +1163,17 @@ SUBROUTINE AnalyzeParticles(Time) END IF END IF IF(DSMC%CalcQualityFactors) THEN ! calculates maximum collision probability, mean collision probability & mean free path - WRITE(unit_index,'(A1)',ADVANCE='NO') ',' - WRITE(unit_index,'(I3.3,A)',ADVANCE='NO') OutputCounter,'-Pmean' - OutputCounter = OutputCounter + 1 + IF (DSMC%ReservoirSimu) THEN + ! In case of a reservoir simulation, MeanCollProb is the ouput in PartAnalyze + ! Otherwise its the ResolvedTimestep + WRITE(unit_index,'(A1)',ADVANCE='NO') ',' + WRITE(unit_index,'(I3.3,A)',ADVANCE='NO') OutputCounter,'-Pmean' + OutputCounter = OutputCounter + 1 + ELSE + WRITE(unit_index,'(A1)',ADVANCE='NO') ',' + WRITE(unit_index,'(I3.3,A)',ADVANCE='NO') OutputCounter,'-ResolvedTimestep' + OutputCounter = OutputCounter + 1 + END IF WRITE(unit_index,'(A1)',ADVANCE='NO') ',' WRITE(unit_index,'(I3.3,A)',ADVANCE='NO') OutputCounter,'-Pmax' OutputCounter = OutputCounter + 1 @@ -1363,6 +1371,7 @@ SUBROUTINE AnalyzeParticles(Time) MeanFreePath = 0.0 MaxMCSoverMFP = 0.0 ResolvedCellPercentage = 0.0 + ResolvedTimestep = 0.0 IF(DSMC%CalcQualityFactors.OR.CalcReacRates) THEN NumSpecTmp = NumSpec IF(BGGas%NumberOfSpecies.GT.0) THEN @@ -1414,8 +1423,20 @@ SUBROUTINE AnalyzeParticles(Time) END IF #endif /*USE_MPI*/ IF(DSMC%ParticleCalcCollCounter.GT.0) ResolvedCellPercentage = REAL(DSMC%ResolvedCellCounter) / REAL(DSMC%ParticleCalcCollCounter) * 100 - ! MeanCollProb: - IF(DSMC%CollProbMeanCount.GT.0) MeanCollProb = DSMC%CollProbMean / DSMC%CollProbMeanCount + IF (DSMC%ReservoirSimu) THEN + ! In case of a reservoir simulation, MeanCollProb is the ouput in PartAnalyze + ! Otherwise its the ResolvedTimestep + MeanCollProb = DSMC%CollProbMean + ELSE +#if USE_MPI + IF(MPIRoot)THEN + CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%ResolvedTimestepCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) + ELSE + CALL MPI_REDUCE(DSMC%ResolvedTimestepCounter,DSMC%ResolvedTimestepCounter,1,MPI_REAL,MPI_SUM,0,MPI_COMM_PICLAS, IERROR) + END IF +#endif /*USE_MPI*/ + IF(DSMC%ParticleCalcCollCounter.GT.0) ResolvedTimestep = REAL(DSMC%ResolvedTimestepCounter) / REAL(DSMC%ParticleCalcCollCounter) * 100 + END IF ! MeanFreePath: IF (MPIRoot) THEN IF(TempTotal(nSpecAnalyze).GT.0.0) MeanFreePath = CalcMeanFreePath(NumSpecTmp(1:nSpecies), NumSpecTmp(nSpecAnalyze), & @@ -1684,7 +1705,13 @@ SUBROUTINE AnalyzeParticles(Time) END IF END IF IF(DSMC%CalcQualityFactors) THEN - WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', MeanCollProb + IF (DSMC%ReservoirSimu) THEN + ! In case of a reservoir simulation, MeanCollProb is the ouput in PartAnalyze + ! Otherwise its the ResolvedTimestep + WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', MeanCollProb + ELSE + WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', ResolvedTimestep + END IF WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', MaxCollProb WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', MeanFreePath WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', MaxMCSoverMFP diff --git a/src/particles/dsmc/dsmc_analyze.f90 b/src/particles/dsmc/dsmc_analyze.f90 index 8becef91c..a3270eca0 100644 --- a/src/particles/dsmc/dsmc_analyze.f90 +++ b/src/particles/dsmc/dsmc_analyze.f90 @@ -1177,7 +1177,7 @@ SUBROUTINE SummarizeQualityFactors(iElem) ! mean collision probability of all collision pairs IF(DSMC%CollProbMeanCount.GT.0) THEN DSMC%QualityFacSamp(iElem,1) = DSMC%QualityFacSamp(iElem,1) + DSMC%CollProbMax - DSMC%QualityFacSamp(iElem,2) = DSMC%QualityFacSamp(iElem,2) + DSMC%CollProbMean / REAL(DSMC%CollProbMeanCount) + DSMC%QualityFacSamp(iElem,2) = DSMC%QualityFacSamp(iElem,2) + DSMC%CollProbMean END IF ! mean collision separation distance of actual collisions IF(DSMC%CollSepCount.GT.0) DSMC%QualityFacSamp(iElem,3) = DSMC%QualityFacSamp(iElem,3) + DSMC%MCSoverMFP diff --git a/src/particles/dsmc/dsmc_bg_gas.f90 b/src/particles/dsmc/dsmc_bg_gas.f90 index 8df58b90d..d63f173c1 100644 --- a/src/particles/dsmc/dsmc_bg_gas.f90 +++ b/src/particles/dsmc/dsmc_bg_gas.f90 @@ -514,10 +514,18 @@ SUBROUTINE DSMC_pairing_bggas(iElem) / DSMC%MeanFreePath ! Calculation of the maximum MCS/MFP of all cells for this processor and number of resolved Cells for this processor IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP + ! Calculation of Mean Collision Probability + IF(DSMC%CollProbMeanCount.GT.0) DSMC%CollProbMean = DSMC%CollProbSum / DSMC%CollProbMeanCount ! Calculate number of resolved Cells for this processor DSMC%ParticleCalcCollCounter = DSMC%ParticleCalcCollCounter + 1 ! Counts Particle Collision Calculation IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & DSMC%ResolvedCellCounter + 1 + ! Calculation of ResolvedTimestep. Number of Cells with ResolvedTimestep + IF (.NOT.DSMC%ReservoirSimu) THEN + ! In case of a reservoir simulation, MeanCollProb is the ouput in PartAnalyze + ! Otherwise its the ResolvedTimestep + IF ( DSMC%CollProbMean .LE. 1) DSMC%ResolvedTimestepCounter = DSMC%ResolvedTimestepCounter + 1 + END IF END IF END IF DEALLOCATE(Coll_pData) diff --git a/src/particles/dsmc/dsmc_collision_prob.f90 b/src/particles/dsmc/dsmc_collision_prob.f90 index b4008bcba..a9e56af98 100644 --- a/src/particles/dsmc/dsmc_collision_prob.f90 +++ b/src/particles/dsmc/dsmc_collision_prob.f90 @@ -238,7 +238,7 @@ SUBROUTINE DSMC_prob_calc(iElem, iPair, NodeVolume) END IF END IF END IF - DSMC%CollProbMean = DSMC%CollProbMean + CollProb + DSMC%CollProbSum = DSMC%CollProbSum + CollProb DSMC%CollProbMeanCount = DSMC%CollProbMeanCount + 1 END IF diff --git a/src/particles/dsmc/dsmc_main.f90 b/src/particles/dsmc/dsmc_main.f90 index 54d41983f..9d85b93b2 100644 --- a/src/particles/dsmc/dsmc_main.f90 +++ b/src/particles/dsmc/dsmc_main.f90 @@ -75,6 +75,7 @@ SUBROUTINE DSMC_main(DoElement) DSMC%MaxMCSoverMFP = 0.0 DSMC%ParticleCalcCollCounter = 0 ! Counts Particle Collison Calculations DSMC%ResolvedCellCounter = 0 ! Counts resolved cells +DSMC%ResolvedTimestepCounter = 0 ! Counts cells with MeanCollProb below 1 DSMC%CollProbMaxProcMax = 0.0 ! Maximum CollProbMax of every Cell in Process ! Insert background gas particles for every simulation particle IF((BGGas%NumberOfSpecies.GT.0).AND.(.NOT.UseMCC)) CALL BGGas_InsertParticles() @@ -94,7 +95,7 @@ SUBROUTINE DSMC_main(DoElement) nPart = PEM%pNumber(iElem) IF (nPart.LT.1) CYCLE IF(DSMC%CalcQualityFactors) THEN - DSMC%CollProbMax = 0.0; DSMC%CollProbMean = 0.0; DSMC%CollProbMeanCount = 0; DSMC%CollSepDist = 0.0; DSMC%CollSepCount = 0 + DSMC%CollProbMax = 0.0; DSMC%CollProbSum = 0.0;DSMC%CollProbMean = 0.0; DSMC%CollProbMeanCount = 0; DSMC%CollSepDist = 0.0; DSMC%CollSepCount = 0 DSMC%MeanFreePath = 0.0; DSMC%MCSoverMFP = 0.0 IF(DSMC%RotRelaxProb.GT.2) DSMC%CalcRotProb = 0. DSMC%CalcVibProb = 0. diff --git a/src/particles/dsmc/dsmc_particle_pairing.f90 b/src/particles/dsmc/dsmc_particle_pairing.f90 index 31525fbc0..90e01cb42 100644 --- a/src/particles/dsmc/dsmc_particle_pairing.f90 +++ b/src/particles/dsmc/dsmc_particle_pairing.f90 @@ -619,10 +619,18 @@ SUBROUTINE PerformPairingAndCollision(iPartIndx_Node, PartNum, iElem, NodeVolume MAX(DSMC%MCSoverMFP,(DSMC%CollSepDist/DSMC%CollSepCount)/DSMC%MeanFreePath) ! Calculation of the maximum MCS/MFP of all cells for this processor and number of resolved Cells for this processor IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP + ! Calculation of Mean Collision Probability + IF(DSMC%CollProbMeanCount.GT.0) DSMC%CollProbMean = DSMC%CollProbSum / DSMC%CollProbMeanCount ! Calculate number of resolved Cells for this processor DSMC%ParticleCalcCollCounter = DSMC%ParticleCalcCollCounter + 1 ! Counts Particle Collision Calculation IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & DSMC%ResolvedCellCounter + 1 + ! Calculation of ResolvedTimestep. Number of Cells with ResolvedTimestep + IF (.NOT.DSMC%ReservoirSimu) THEN + ! In case of a reservoir simulation, MeanCollProb is the ouput in PartAnalyze + ! Otherwise its the ResolvedTimestep + IF ( DSMC%CollProbMean .LE. 1) DSMC%ResolvedTimestepCounter = DSMC%ResolvedTimestepCounter + 1 + END IF END IF END IF diff --git a/src/particles/dsmc/dsmc_vars.f90 b/src/particles/dsmc/dsmc_vars.f90 index 6a491edfc..b5e3b9c3f 100644 --- a/src/particles/dsmc/dsmc_vars.f90 +++ b/src/particles/dsmc/dsmc_vars.f90 @@ -195,7 +195,8 @@ MODULE MOD_DSMC_Vars LOGICAL :: CalcSurfaceVal ! Flag for calculation of surfacevalues like heatflux or force at walls LOGICAL :: CalcSurfaceTime ! Flag for sampling in time-domain or iterations REAL :: CalcSurfaceSumTime ! Flag for sampling in time-domain or iterations - REAL :: CollProbMean ! Summation of collision probability + REAL :: CollProbSum ! Summation of collision probability + REAL :: CollProbMean ! Mean of collision probability REAL :: CollProbMax ! Maximal collision probability per cell REAL, ALLOCATABLE :: CalcRotProb(:,:) ! Summation of rotation relaxation probability (nSpecies + 1,3) ! 1: Mean Prob @@ -211,6 +212,7 @@ MODULE MOD_DSMC_Vars REAL :: MCSoverMFP ! Subcell local mean collision distance over mean free path INTEGER :: ParticleCalcCollCounter ! Counts Calculation/Calls of Collison. Used for ResolvedCellPercentage INTEGER :: ResolvedCellCounter ! Counts resolved Cells. Used for ResolvedCellPercentage + INTEGER :: ResolvedTimestepCounter ! Counts Cells with MeanCollProb below 1 INTEGER :: CollProbMeanCount ! counter of possible collision pairs INTEGER :: CollSepCount ! counter of actual collision pairs REAL :: CollSepDist ! Summation of mean collision separation distance diff --git a/src/particles/mcc/mcc.f90 b/src/particles/mcc/mcc.f90 index 55e68628f..43508c847 100644 --- a/src/particles/mcc/mcc.f90 +++ b/src/particles/mcc/mcc.f90 @@ -546,7 +546,7 @@ SUBROUTINE MonteCarloCollision(iElem) CollProb = CollProb * BGGasFraction END IF END IF - DSMC%CollProbMean = DSMC%CollProbMean + CollProb + DSMC%CollProbSum = DSMC%CollProbSum + CollProb DSMC%CollProbMeanCount = DSMC%CollProbMeanCount + 1 END IF ! DSMC%CalcQualityFactors ! Reservoir simulation: determination of the reaction probabilities @@ -584,10 +584,18 @@ SUBROUTINE MonteCarloCollision(iElem) / DSMC%MeanFreePath ! Calculation of the maximum MCS/MFP of all cells for this processor IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP + ! Calculation of Mean Collision Probability + IF(DSMC%CollProbMeanCount.GT.0) DSMC%CollProbMean = DSMC%CollProbSum / DSMC%CollProbMeanCount ! Calculate number of resolved Cells for this processor DSMC%ParticleCalcCollCounter = DSMC%ParticleCalcCollCounter + 1 ! Counts Particle Collision Calculation IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & DSMC%ResolvedCellCounter + 1 + ! Calculation of ResolvedTimestep. Number of Cells with ResolvedTimestep + IF (.NOT.DSMC%ReservoirSimu) THEN + ! In case of a reservoir simulation, MeanCollProb is the ouput in PartAnalyze + ! Otherwise its the ResolvedTimestep + IF ( DSMC%CollProbMean .LE. 1) DSMC%ResolvedTimestepCounter = DSMC%ResolvedTimestepCounter + 1 + END IF END IF END IF From eb0e5a6af5b6025c447fab7e2d4276716db7d6ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Fri, 8 Dec 2023 17:52:29 +0100 Subject: [PATCH 121/222] Moved DSMC%CollProbMean calculation and changed PartAnalyze_ref file in DSMC QualityFactor reggie --- .../CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv | 4 ++-- src/particles/dsmc/dsmc_bg_gas.f90 | 6 +++--- src/particles/dsmc/dsmc_particle_pairing.f90 | 4 ++-- src/particles/mcc/mcc.f90 | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv index a57d6a4b3..66064a0fb 100644 --- a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-NumDens-Spec-001,003-TempTra-001,004-TempVib001,005-XiVibMean001,006-TempRot001,007-TempTotal001,008-Pmean,009-Pmax,010-MeanFreePath,011-MaxMCSoverMFP,012-ResolvedCellPercentage +001-TIME,002-NumDens-Spec-001,003-TempTra-001,004-TempVib001,005-XiVibMean001,006-TempRot001,007-TempTotal001,008-ResolvedTimestep,009-Pmax,010-MeanFreePath,011-MaxMCSoverMFP,012-ResolvedCellPercentage 0.0000000000000000E+000,0.1000000000000000E+023,0.5000769421287198E+004,0.4948975354726982E+004,0.1575887951139208E+001,0.4996259759961257E+004,0.4986985584220915E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-007,0.1000000000000000E+023,0.5003185373708683E+004,0.4949437828908193E+004,0.1575924331939683E+001,0.4992329660714551E+004,0.4987003087500717E+004,0.6100164229169058E-001,0.1040428012026279E+000,0.2977138906706071E-003,0.1238874440834628E-003,0.0000000000000000E+000 +0.1000000000000000E-007,0.1000000000000000E+023,0.5003185373708683E+004,0.4949437828908193E+004,0.1575924331939683E+001,0.4992329660714551E+004,0.4987003087500717E+004,0.1000000000000000E+003,0.1040428012026279E+000,0.2977138906706071E-003,0.1238874440834628E-003,0.1000000000000000E+003 diff --git a/src/particles/dsmc/dsmc_bg_gas.f90 b/src/particles/dsmc/dsmc_bg_gas.f90 index d63f173c1..57610001c 100644 --- a/src/particles/dsmc/dsmc_bg_gas.f90 +++ b/src/particles/dsmc/dsmc_bg_gas.f90 @@ -505,6 +505,8 @@ SUBROUTINE DSMC_pairing_bggas(iElem) END IF END DO IF(DSMC%CalcQualityFactors) THEN + ! Calculation of Mean Collision Probability + IF(DSMC%CollProbMeanCount.GT.0) DSMC%CollProbMean = DSMC%CollProbSum / DSMC%CollProbMeanCount IF((Time.GE.(1-DSMC%TimeFracSamp)*TEnd).OR.WriteMacroVolumeValues) THEN ! Calculation of the mean free path DSMC%MeanFreePath = CalcMeanFreePath(REAL(CollInf%Coll_SpecPartNum),SUM(CollInf%Coll_SpecPartNum), & @@ -514,8 +516,6 @@ SUBROUTINE DSMC_pairing_bggas(iElem) / DSMC%MeanFreePath ! Calculation of the maximum MCS/MFP of all cells for this processor and number of resolved Cells for this processor IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP - ! Calculation of Mean Collision Probability - IF(DSMC%CollProbMeanCount.GT.0) DSMC%CollProbMean = DSMC%CollProbSum / DSMC%CollProbMeanCount ! Calculate number of resolved Cells for this processor DSMC%ParticleCalcCollCounter = DSMC%ParticleCalcCollCounter + 1 ! Counts Particle Collision Calculation IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & @@ -523,7 +523,7 @@ SUBROUTINE DSMC_pairing_bggas(iElem) ! Calculation of ResolvedTimestep. Number of Cells with ResolvedTimestep IF (.NOT.DSMC%ReservoirSimu) THEN ! In case of a reservoir simulation, MeanCollProb is the ouput in PartAnalyze - ! Otherwise its the ResolvedTimestep + ! Otherwise it is the ResolvedTimestep IF ( DSMC%CollProbMean .LE. 1) DSMC%ResolvedTimestepCounter = DSMC%ResolvedTimestepCounter + 1 END IF END IF diff --git a/src/particles/dsmc/dsmc_particle_pairing.f90 b/src/particles/dsmc/dsmc_particle_pairing.f90 index 90e01cb42..42664ecdb 100644 --- a/src/particles/dsmc/dsmc_particle_pairing.f90 +++ b/src/particles/dsmc/dsmc_particle_pairing.f90 @@ -611,6 +611,8 @@ SUBROUTINE PerformPairingAndCollision(iPartIndx_Node, PartNum, iElem, NodeVolume ! 6.) Calculate the mean free path and the mean collision separation distance within a cell IF(DSMC%CalcQualityFactors) THEN + ! Calculation of Mean Collision Probability + IF(DSMC%CollProbMeanCount.GT.0) DSMC%CollProbMean = DSMC%CollProbSum / DSMC%CollProbMeanCount IF((Time.GE.(1-DSMC%TimeFracSamp)*TEnd).OR.WriteMacroVolumeValues) THEN ! Calculation of the mean free path with VHS model and the current translational temperature in the cell DSMC%MeanFreePath = CalcMeanFreePath(REAL(CollInf%Coll_SpecPartNum), REAL(SUM(CollInf%Coll_SpecPartNum)), NodeVolume, & @@ -619,8 +621,6 @@ SUBROUTINE PerformPairingAndCollision(iPartIndx_Node, PartNum, iElem, NodeVolume MAX(DSMC%MCSoverMFP,(DSMC%CollSepDist/DSMC%CollSepCount)/DSMC%MeanFreePath) ! Calculation of the maximum MCS/MFP of all cells for this processor and number of resolved Cells for this processor IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP - ! Calculation of Mean Collision Probability - IF(DSMC%CollProbMeanCount.GT.0) DSMC%CollProbMean = DSMC%CollProbSum / DSMC%CollProbMeanCount ! Calculate number of resolved Cells for this processor DSMC%ParticleCalcCollCounter = DSMC%ParticleCalcCollCounter + 1 ! Counts Particle Collision Calculation IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & diff --git a/src/particles/mcc/mcc.f90 b/src/particles/mcc/mcc.f90 index 43508c847..62783ae19 100644 --- a/src/particles/mcc/mcc.f90 +++ b/src/particles/mcc/mcc.f90 @@ -575,6 +575,8 @@ SUBROUTINE MonteCarloCollision(iElem) PDM%ParticleInside(bggPartIndex) = .FALSE. END IF IF(DSMC%CalcQualityFactors) THEN + ! Calculation of Mean Collision Probability + IF(DSMC%CollProbMeanCount.GT.0) DSMC%CollProbMean = DSMC%CollProbSum / DSMC%CollProbMeanCount IF((Time.GE.(1-DSMC%TimeFracSamp)*TEnd).OR.WriteMacroVolumeValues) THEN ! Calculation of the mean free path DSMC%MeanFreePath = CalcMeanFreePath(REAL(CollInf%Coll_SpecPartNum),SUM(CollInf%Coll_SpecPartNum), & @@ -584,8 +586,6 @@ SUBROUTINE MonteCarloCollision(iElem) / DSMC%MeanFreePath ! Calculation of the maximum MCS/MFP of all cells for this processor IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP - ! Calculation of Mean Collision Probability - IF(DSMC%CollProbMeanCount.GT.0) DSMC%CollProbMean = DSMC%CollProbSum / DSMC%CollProbMeanCount ! Calculate number of resolved Cells for this processor DSMC%ParticleCalcCollCounter = DSMC%ParticleCalcCollCounter + 1 ! Counts Particle Collision Calculation IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & From 706812a801b9eae7347e9ae31e62d67db2fd5814 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Tue, 12 Dec 2023 10:49:40 +0100 Subject: [PATCH 122/222] Changed PartAnalyze_ref in regressioncheck/WEK_Reservoir/CHEM_EQUI_ioization_H --- .../PartAnalyze_ref.csv | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_ionization_H/PartAnalyze_ref.csv b/regressioncheck/WEK_Reservoir/CHEM_EQUI_ionization_H/PartAnalyze_ref.csv index 4782d43a1..fd7b483d4 100644 --- a/regressioncheck/WEK_Reservoir/CHEM_EQUI_ionization_H/PartAnalyze_ref.csv +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_ionization_H/PartAnalyze_ref.csv @@ -1,12 +1,12 @@ -001-TIME,002-nPart-Spec-001,003-nPart-Spec-002,004-nPart-Spec-003,005-nPart-Spec-004,006-Ekin-001,007-Ekin-002,008-Ekin-003,009-Ekin-004,010-E-kin+pot,011-Pmean,012-Pmax,013-MeanFreePath,014-CollRate001+001,015-CollRate001+002,016-CollRate001+003,017-CollRate002+002,018-CollRate002+003,019-CollRate003+003,020-TotalCollRate +001-TIME,002-nPart-Spec-001,003-nPart-Spec-002,004-nPart-Spec-003,005-nPart-Spec-004,006-Ekin-001,007-Ekin-002,008-Ekin-003,009-Ekin-004,010-E-kin+pot,011-Pmean,012-Pmax,013-MeanFreePath,014-MaxMCSoverMFP,015-ResolvedCellPercentage,016-CollRate001+001,017-CollRate001+002,018-CollRate001+003,019-CollRate002+002,020-CollRate002+003,021-CollRate003+003,022-TotalCollRate 0,49948,49948,49948,149844,1.03438052902619E-16,3.10318003822374E-15,1.03439513327792E-16,3.31005760445414E-15,3.31005760445414E-15,0,0,0,0,0,0,0,0,0,0 -0.0002,47841,52055,52055,151951,3.75576171071022E-16,2.06834764519594E-15,4.07043212928597E-16,2.85096702919551E-15,2.85096702919551E-15,0.149443104413418,0.467207788995417,2.62E-01,89224500.0001041,2583960499.7574,193477999.998587,0,2802220499.70659,104939499.999875,5773822999.46256 -0.0004,47837,52059,52059,151955,5.3541689465759E-16,1.72784832418965E-15,5.8661857321245E-16,2.84988379205964E-15,2.84988379205964E-15,0.14475291855362,0.484424079428058,2.62E-01,105243499.999871,2454600999.78752,227728499.998089,0,2674257999.73638,124082999.999597,5585913999.52146 -0.0006,47837,52059,52059,151955,6.4579500166806E-16,1.50229479257861E-15,7.01994230874746E-16,2.85008402512143E-15,2.85008402512143E-15,0.140875513365371,0.470876392246102,2.62E-01,112056999.999772,2361235499.80926,244364499.997847,0,2569591499.76075,132584999.999473,5419833499.5671 -0.0008,47838,52058,52058,151954,7.17380587053016E-16,1.3499520317481E-15,7.82773337039872E-16,2.85010595584096E-15,2.85010595584096E-15,0.137612409366529,0.472207560148792,2.62E-01,116001999.999714,2290508499.82573,253059999.99772,0,2490619499.77914,137765999.999398,5287955999.6017 -0.001,47842,52054,52054,151950,7.69215382080704E-16,1.24739062769021E-15,8.34400517357867E-16,2.85100652712877E-15,2.85100652712877E-15,0.135521933396005,0.460675561474249,2.62E-01,118773499.999674,2234355999.8388,259234999.99763,0,2431937999.7928,140783999.999354,5185086499.62826 -0.0012,47845,52051,52051,151947,8.04305348287102E-16,1.16964203147255E-15,8.77284297905665E-16,2.8512316776653E-15,2.8512316776653E-15,0.133352324728565,0.459250118903661,2.62E-01,121271999.999638,2192844499.84847,262757499.997579,0,2386210499.80345,142425999.99933,5105510499.64846 -0.0014,47844,52052,52052,151948,8.29819712773863E-16,1.1179146130805E-15,9.03706735105675E-16,2.85144106096005E-15,2.85144106096005E-15,0.13199333360919,0.453731031171096,2.62E-01,121875999.999629,2157814999.85662,265262999.997542,0,2348139999.81231,144701999.999297,5037795999.6654 -0.0016,47847,52049,52049,151945,8.48991797927101E-16,1.08033911097692E-15,9.22763495351452E-16,2.85209440425546E-15,2.85209440425546E-15,0.130858918950888,0.4719042396542,2.62E-01,122611499.999618,2135087499.86192,267527999.997509,0,2322010999.8184,145216499.999289,4992454499.67673 -0.0018,47854,52042,52042,151938,8.61961644945353E-16,1.04899486149741E-15,9.42192780351723E-16,2.85314928679452E-15,2.85314928679452E-15,0.129824974984239,0.45750958818327,2.62E-01,123610499.999604,2114089499.86681,268306999.997498,0,2300533999.8234,145339499.999288,4951880499.68659 -0.002,47853,52043,52043,151939,8.75299807662746E-16,1.03086347681736E-15,9.47238069980003E-16,2.85340135446014E-15,2.85340135446014E-15,0.129324326510397,0.455645355052123,2.62E-01,123988999.716151,2100104995.06909,269352499.381726,0,2284757994.60396,146673499.663963,4924877988.43489 +0.0002,47841,52055,52055,151951,3.75576171071022E-16,2.06834764519594E-15,4.07043212928597E-16,2.85096702919551E-15,2.85096702919551E-15,0.149443104413418,0.467207788995417,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,89224500.0001041,2583960499.7574,193477999.998587,0,2802220499.70659,104939499.999875,5773822999.46256 +0.0004,47837,52059,52059,151955,5.3541689465759E-16,1.72784832418965E-15,5.8661857321245E-16,2.84988379205964E-15,2.84988379205964E-15,0.14475291855362,0.484424079428058,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,105243499.999871,2454600999.78752,227728499.998089,0,2674257999.73638,124082999.999597,5585913999.52146 +0.0006,47837,52059,52059,151955,6.4579500166806E-16,1.50229479257861E-15,7.01994230874746E-16,2.85008402512143E-15,2.85008402512143E-15,0.140875513365371,0.470876392246102,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,112056999.999772,2361235499.80926,244364499.997847,0,2569591499.76075,132584999.999473,5419833499.5671 +0.0008,47838,52058,52058,151954,7.17380587053016E-16,1.3499520317481E-15,7.82773337039872E-16,2.85010595584096E-15,2.85010595584096E-15,0.137612409366529,0.472207560148792,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,116001999.999714,2290508499.82573,253059999.99772,0,2490619499.77914,137765999.999398,5287955999.6017 +0.001,47842,52054,52054,151950,7.69215382080704E-16,1.24739062769021E-15,8.34400517357867E-16,2.85100652712877E-15,2.85100652712877E-15,0.135521933396005,0.460675561474249,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,118773499.999674,2234355999.8388,259234999.99763,0,2431937999.7928,140783999.999354,5185086499.62826 +0.0012,47845,52051,52051,151947,8.04305348287102E-16,1.16964203147255E-15,8.77284297905665E-16,2.8512316776653E-15,2.8512316776653E-15,0.133352324728565,0.459250118903661,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,121271999.999638,2192844499.84847,262757499.997579,0,2386210499.80345,142425999.99933,5105510499.64846 +0.0014,47844,52052,52052,151948,8.29819712773863E-16,1.1179146130805E-15,9.03706735105675E-16,2.85144106096005E-15,2.85144106096005E-15,0.13199333360919,0.453731031171096,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,121875999.999629,2157814999.85662,265262999.997542,0,2348139999.81231,144701999.999297,5037795999.6654 +0.0016,47847,52049,52049,151945,8.48991797927101E-16,1.08033911097692E-15,9.22763495351452E-16,2.85209440425546E-15,2.85209440425546E-15,0.130858918950888,0.4719042396542,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,122611499.999618,2135087499.86192,267527999.997509,0,2322010999.8184,145216499.999289,4992454499.67673 +0.0018,47854,52042,52042,151938,8.61961644945353E-16,1.04899486149741E-15,9.42192780351723E-16,2.85314928679452E-15,2.85314928679452E-15,0.129824974984239,0.45750958818327,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,123610499.999604,2114089499.86681,268306999.997498,0,2300533999.8234,145339499.999288,4951880499.68659 +0.002,47853,52043,52043,151939,8.75299807662746E-16,1.03086347681736E-15,9.47238069980003E-16,2.85340135446014E-15,2.85340135446014E-15,0.129324326510397,0.455645355052123,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,123988999.716151,2100104995.06909,269352499.381726,0,2284757994.60396,146673499.663963,4924877988.43489 From c5f76f199ef28010178167ac8faddeb86b9a78fd Mon Sep 17 00:00:00 2001 From: Asim Date: Tue, 12 Dec 2023 13:44:10 +0100 Subject: [PATCH 123/222] Subcycling in tracking for all particles --- .../boundary/particle_boundary_condition.f90 | 5 ++-- src/particles/particle_init.f90 | 2 ++ src/particles/particle_vars.f90 | 1 + .../surfacemodel/surfacemodel_main.f90 | 10 ++++--- .../tracking/particle_triatracking.f90 | 28 +++++++++++-------- 5 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/particles/boundary/particle_boundary_condition.f90 b/src/particles/boundary/particle_boundary_condition.f90 index b919db94d..37086cb0d 100644 --- a/src/particles/boundary/particle_boundary_condition.f90 +++ b/src/particles/boundary/particle_boundary_condition.f90 @@ -465,7 +465,7 @@ SUBROUTINE RotPeriodicInterPlaneBoundary(PartID,SideID,ElemID,IsInterPlanePart) USE MOD_Globals_Vars ,ONLY: PI USE MOD_Mesh_Tools ,ONLY: GetCNElemID USE MOD_Particle_Vars ,ONLY: PartState,LastPartPos,Species,PartSpecies -USE MOD_Particle_Vars ,ONLY: RotRefSubTimeStep, NewPosSubCycling, GlobalElemIDSubCycling, LastPartPosSubCycling +USE MOD_Particle_Vars ,ONLY: RotRefSubTimeStep, NewPosSubCycling, GlobalElemIDSubCycling, LastPartPosSubCycling,nSubCyclingSteps USE MOD_Particle_Vars ,ONLY: InRotRefFrameSubCycling, PartVeloRotRefSubCycling, LastVeloRotRefSubCycling USE MOD_Particle_Mesh_Vars ,ONLY: ElemInfo_Shared, SideInfo_Shared, ElemSideNodeID_Shared, NodeCoords_Shared USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, InterPlaneSideMapping @@ -639,7 +639,8 @@ SUBROUTINE RotPeriodicInterPlaneBoundary(PartID,SideID,ElemID,IsInterPlanePart) ! Species-specific time step IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(PartSpecies(PartID))%TimeStepFactor -IF(RotRefSubTimeStep) dtVar = 0.1 * dtVar +!IF(RotRefSubTimeStep) dtVar = 0.1 * dtVar +IF(RotRefSubTimeStep) dtVar = dtVar / REAL(nSubCyclingSteps) ! (2) Calculate the POI and a new random POI on corresponding inter plane using a random angle within the periodic segment POI(1:3) = LastPartPos(1:3,PartID) + TrackInfo%PartTrajectory(1:3)*TrackInfo%alpha diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 7a56ea9a5..7182ac7e0 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -197,6 +197,7 @@ SUBROUTINE DefineParametersParticles() ! === Rotational frame of reference CALL prms%CreateLogicalOption( 'Part-UseRotationalReferenceFrame', 'Activate rotational frame of reference', '.FALSE.') CALL prms%CreateLogicalOption( 'Part-UseRotationalReferenceSubCycling', 'Activate sub cycling in rot ref frame', '.FALSE.') +CALL prms%CreateIntOption( 'Part-NumberSubCyclingSteps','Number of subcyling steps)','10') CALL prms%CreateIntOption( 'Part-RotRefFrame-Axis','Axis of rotational frame of reference (x=1, y=2, z=3)') CALL prms%CreateRealOption( 'Part-RotRefFrame-Frequency','Frequency of rotational frame of reference [1/s], sign according '//& 'to right-hand rule, e.g. positive: counter-clockwise, negative: clockwise') @@ -1538,6 +1539,7 @@ SUBROUTINE InitializeVariablesRotationalRefFrame() UseRotRefFrame = GETLOGICAL('Part-UseRotationalReferenceFrame') UseRotSubCycling = GETLOGICAL('Part-UseRotationalReferenceSubCycling') +nSubCyclingSteps = GETINT('Part-NumberSubCyclingSteps') IF(UseRotRefFrame) THEN ! Abort for other timedisc except DSMC/BGK diff --git a/src/particles/particle_vars.f90 b/src/particles/particle_vars.f90 index ef2a1d157..d5ca6a218 100644 --- a/src/particles/particle_vars.f90 +++ b/src/particles/particle_vars.f90 @@ -75,6 +75,7 @@ MODULE MOD_Particle_Vars REAL , ALLOCATABLE :: LastPartVeloRotRef(:,:) ! (1:3,1:NParts) Last Velocity in the rotational reference frame ! Rot Ref Sub Cycling LOGICAL :: UseRotSubCycling ! Flag if sub cycling is active +INTEGER :: nSubCyclingSteps ! Number of subcyling steps REAL :: LastPartPosSubCycling(3) ! Last position befor SubCycling REAL :: NewPosSubCycling(3) ! New particle position befor SubCycling REAL :: PartVeloRotRefSubCycling(3) ! Velocity in the rotational reference frame befor SubCycling diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index d15f5eff8..005914729 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -316,7 +316,7 @@ SUBROUTINE PerfectReflection(PartID,SideID,n_Loc,opt_Symmetry) !----------------------------------------------------------------------------------------------------------------------------------! USE MOD_Globals USE MOD_Particle_Boundary_Vars ,ONLY: PartBound -USE MOD_Particle_Vars ,ONLY: PartState,LastPartPos,PartSpecies,Species,PartLorentzType,RotRefSubTimeStep +USE MOD_Particle_Vars ,ONLY: PartState,LastPartPos,PartSpecies,Species,PartLorentzType,RotRefSubTimeStep,nSubCyclingSteps USE MOD_DSMC_Vars ,ONLY: DSMC, AmbipolElecVelo USE MOD_Globals_Vars ,ONLY: c2_inv #if defined(LSERK) @@ -376,7 +376,8 @@ SUBROUTINE PerfectReflection(PartID,SideID,n_Loc,opt_Symmetry) ! Species-specific time step IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(SpecID)%TimeStepFactor -IF(RotRefSubTimeStep) dtVar = 0.1 * dtVar +!IF(RotRefSubTimeStep) dtVar = 0.1 * dtVar +IF(RotRefSubTimeStep) dtVar = dtVar / REAL(nSubCyclingSteps) IF(PDM%InRotRefFrame(PartID)) THEN ! In case of RotRefFrame utilize the respective velocity @@ -525,7 +526,7 @@ SUBROUTINE DiffuseReflection(PartID,SideID,n_loc) USE MOD_Particle_Vars ,ONLY: UseVarTimeStep, PartTimeStep, VarTimeStep USE MOD_TimeDisc_Vars ,ONLY: dt,RKdtFrac USE MOD_Mesh_Tools ,ONLY: GetCNElemID -USE MOD_Particle_Vars ,ONLY: PDM, RotRefFrameOmega,RotRefSubTimeStep +USE MOD_Particle_Vars ,ONLY: PDM, RotRefFrameOmega,RotRefSubTimeStep,nSubCyclingSteps USE MOD_SurfaceModel_Tools ,ONLY: CalcPostWallCollVelo, SurfaceModel_EnergyAccommodation USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame @@ -575,7 +576,8 @@ SUBROUTINE DiffuseReflection(PartID,SideID,n_loc) ! Species-specific time step IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(SpecID)%TimeStepFactor -IF(RotRefSubTimeStep) dtVar = 0.1 * dtVar +!IF(RotRefSubTimeStep) dtVar = 0.1 * dtVar +IF(RotRefSubTimeStep) dtVar = dtVar / REAL(nSubCyclingSteps) IF(PDM%InRotRefFrame(PartID)) THEN ! In case of RotRefFrame utilize the respective velocity diff --git a/src/particles/tracking/particle_triatracking.f90 b/src/particles/tracking/particle_triatracking.f90 index 70c29a56b..2491feda9 100644 --- a/src/particles/tracking/particle_triatracking.f90 +++ b/src/particles/tracking/particle_triatracking.f90 @@ -40,7 +40,7 @@ SUBROUTINE ParticleTriaTracking() ! MODULES USE MOD_Preproc USE MOD_Globals -USE MOD_Particle_Vars ,ONLY: PEM,PDM,InterPlanePartNumber, InterPlanePartIndx, UseRotSubCycling +USE MOD_Particle_Vars ,ONLY: PEM,PDM,InterPlanePartNumber, InterPlanePartIndx, UseRotSubCycling,nSubCyclingSteps USE MOD_Particle_Vars ,ONLY: RotRefSubTimeStep, NewPosSubCycling, GlobalElemIDSubCycling, LastPartPosSubCycling USE MOD_Particle_Vars ,ONLY: InRotRefFrameSubCycling, PartVeloRotRefSubCycling, LastVeloRotRefSubCycling USE MOD_DSMC_Vars ,ONLY: RadialWeighting @@ -95,14 +95,15 @@ SUBROUTINE ParticleTriaTracking() !--- it must be stored before first call of "SingleParticleTriaTracking" !--- because particle informations like LastPartPos & PartState can be changed within "SingleParticleTriaTracking" !--- e.g. in RotPeriodicInterPlaneBoundary - RotRefSubTimeStep=.FALSE. +! RotRefSubTimeStep=.FALSE. + RotRefSubTimeStep=.TRUE. LastPartPosSubCycling(1:3) = LastPartPos(1:3,i) NewPosSubCycling(1:3) = PartState(1:3,i) PartVeloRotRefSubCycling(1:3) = PartVeloRotRef(1:3,i) LastVeloRotRefSubCycling(1:3) = LastPartVeloRotRef(1:3,i) GlobalElemIDSubCycling = PEM%LastGlobalElemID(i) InRotRefFrameSubCycling = PDM%InRotRefFrame(i) - CALL SingleParticleTriaTracking(i=i) +! CALL SingleParticleTriaTracking(i=i) IF(RotRefSubTimeStep) THEN !--- split time step in 10 sub-steps IF (UseVarTimeStep) THEN @@ -111,7 +112,8 @@ SUBROUTINE ParticleTriaTracking() dtVar = dt END IF IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(PartSpecies(i))%TimeStepFactor - dtVar = 0.1 * dtVar + !dtVar = 0.1 * dtVar + dtVar = dtVar / REAL(nSubCyclingSteps) !--- Reset Particle Push PartState(1:3,i) = LastPartPosSubCycling(1:3) LastPartPos(1:3,i) = LastPartPosSubCycling(1:3) @@ -119,9 +121,11 @@ SUBROUTINE ParticleTriaTracking() PEM%GlobalElemID(i) = GlobalElemIDSubCycling PEM%LastGlobalElemID(i)= GlobalElemIDSubCycling LastPartVeloRotRef(1:3,i) = LastVeloRotRefSubCycling(1:3) + PDM%ParticleInside(i) = .TRUE. PDM%InRotRefFrame(i) = InRotRefFrameSubCycling !--- 10 sub-steps - DO iStep = 1, 10 + !DO iStep = 1, 10 + DO iStep = 1, nSubCyclingSteps IF (PDM%ParticleInside(i)) THEN IF(iStep.GT.1) THEN LastPartPos(1:3,i)=PartState(1:3,i) @@ -174,7 +178,8 @@ SUBROUTINE ParticleTriaTracking() dtVar = dt END IF IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(PartSpecies(InterPartID))%TimeStepFactor - dtVar = 0.1 * dtVar + !dtVar = 0.1 * dtVar + dtVar = dtVar / REAL(nSubCyclingSteps) !--- Reset Particle Push PartState(1:3,InterPartID) = LastPartPosSubCycling(1:3) LastPartPos(1:3,InterPartID) = LastPartPosSubCycling(1:3) @@ -184,7 +189,8 @@ SUBROUTINE ParticleTriaTracking() LastPartVeloRotRef(1:3,InterPartID) = LastVeloRotRefSubCycling(1:3) PDM%InRotRefFrame(InterPartID) = InRotRefFrameSubCycling !--- 10 sub-steps - DO iStep = 1, 10 + !DO iStep = 1, 10 + DO iStep = 1, nSubCyclingSteps IF (PDM%ParticleInside(InterPartID)) THEN IF(iStep.GT.1) THEN LastPartPos(1:3,InterPartID)=PartState(1:3,InterPartID) @@ -498,14 +504,14 @@ SUBROUTINE SingleParticleTriaTracking(i,IsInterPlanePart) ! Calculate the intersection with the wall and determine alpha (= fraction of trajectory to the intersection) IF(BCType.NE.1) CALL IntersectionWithWall(i,LocalSide,ElemID,TriNum) IF((UseRotRefFrame).AND.(UseRotSubCycling)) THEN - IF((BCType.EQ.2).OR.(BCType.EQ.6).OR.(BCType.EQ.7)) THEN - IF(PDM%InRotRefFrame(i)) THEN +! IF((BCType.EQ.2).OR.(BCType.EQ.6).OR.(BCType.EQ.7)) THEN +! IF(PDM%InRotRefFrame(i)) THEN IF(.NOT.RotRefSubTimeStep) THEN RotRefSubTimeStep=.TRUE. EXIT END IF - END IF - END IF +! END IF +! END IF END IF IF(PRESENT(IsInterPlanePart)) THEN CALL GetBoundaryInteraction(i,SideID,flip,ElemID,crossedBC,TriNum=TriNum,IsInterPlanePart=IsInterPlanePart) From dba5a17882a194b1f4ef981e261dffa9c8c324d4 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Thu, 14 Dec 2023 10:47:22 +0100 Subject: [PATCH 124/222] Interplane boundary: Pass the time step of the original particle, since time step factor is only defined locally, not be available in halo elements --- .../boundary/particle_boundary_condition.f90 | 69 ++++++++++++------- src/particles/particle_operations.f90 | 9 ++- 2 files changed, 51 insertions(+), 27 deletions(-) diff --git a/src/particles/boundary/particle_boundary_condition.f90 b/src/particles/boundary/particle_boundary_condition.f90 index 37086cb0d..b6345f233 100644 --- a/src/particles/boundary/particle_boundary_condition.f90 +++ b/src/particles/boundary/particle_boundary_condition.f90 @@ -483,6 +483,7 @@ SUBROUTINE RotPeriodicInterPlaneBoundary(PartID,SideID,ElemID,IsInterPlanePart) USE MOD_Part_Tools ,ONLY: InRotRefFrameCheck USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame USE MOD_part_tools ,ONLY: RotateVectorAroundAxis +USE MOD_Particle_Vars ,ONLY: UseVarTimeStep, PartTimeStep #ifdef CODE_ANALYZE USE MOD_Particle_Tracking_Vars ,ONLY: PartOut,MPIRankOut #endif /*CODE_ANALYZE*/ @@ -568,39 +569,57 @@ SUBROUTINE RotPeriodicInterPlaneBoundary(PartID,SideID,ElemID,IsInterPlanePart) ! - ParticleInside for InterParticles must be .FALSE. in order to avoid error looping over the original PDM%ParticleVecLength ! in ParticleTriaTracking() routine. The inside flag is set to .TRUE. ! when we loop over all inter particle in SingleParticleTriaTracking routine - ! in case of sub cycling step particle information befor sub cycling must be used => interplane particle can act like origin particle + ! in case of sub cycling step particle information before sub cycling must be used => interplane particle can act like origin particle IF(RotRefSubTimeStep) THEN IF (usevMPF) THEN - CALL CreateParticle( PartSpecies(PartID), NewPosSubCycling(1:3), GlobalElemIDSubCycling, PartState(4:6,PartID) & - , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & - , NewPartID=NewPartID, NewMPF=PartMPF(PartID) ) - LastPartPos(1:3,NewPartID) = LastPartPosSubCycling(1:3) - PDM%ParticleInside(NewPartID) = .FALSE. - InterPlanePartIndx(InterPlanePartNumber) = NewPartID + IF(UseVarTimeStep) THEN + CALL CreateParticle( PartSpecies(PartID), NewPosSubCycling(1:3), GlobalElemIDSubCycling, PartState(4:6,PartID) & + , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & + , NewPartID=NewPartID, NewMPF=PartMPF(PartID), NewTimestep = PartTimeStep(PartID) ) + ELSE + CALL CreateParticle( PartSpecies(PartID), NewPosSubCycling(1:3), GlobalElemIDSubCycling, PartState(4:6,PartID) & + , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & + , NewPartID=NewPartID, NewMPF=PartMPF(PartID) ) + END IF ELSE - CALL CreateParticle( PartSpecies(PartID), NewPosSubCycling(1:3), GlobalElemIDSubCycling,PartState(4:6,PartID) & - , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & - , NewPartID=NewPartID ) - LastPartPos(1:3,NewPartID) = LastPartPosSubCycling(1:3) - PDM%ParticleInside(NewPartID) = .FALSE. - InterPlanePartIndx(InterPlanePartNumber) = NewPartID + IF(UseVarTimeStep) THEN + CALL CreateParticle( PartSpecies(PartID), NewPosSubCycling(1:3), GlobalElemIDSubCycling,PartState(4:6,PartID) & + , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & + , NewPartID=NewPartID, NewTimestep = PartTimeStep(PartID) ) + ELSE + CALL CreateParticle( PartSpecies(PartID), NewPosSubCycling(1:3), GlobalElemIDSubCycling,PartState(4:6,PartID) & + , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & + , NewPartID=NewPartID ) + END IF END IF + LastPartPos(1:3,NewPartID) = LastPartPosSubCycling(1:3) + PDM%ParticleInside(NewPartID) = .FALSE. + InterPlanePartIndx(InterPlanePartNumber) = NewPartID ELSE IF (usevMPF) THEN - CALL CreateParticle( PartSpecies(PartID), PartState(1:3,PartID), ElemID, PartState(4:6,PartID) & - , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & - , NewPartID=NewPartID, NewMPF=PartMPF(PartID) ) - LastPartPos(1:3,NewPartID) = LastPartPos(1:3,PartID) - PDM%ParticleInside(NewPartID) = .FALSE. - InterPlanePartIndx(InterPlanePartNumber) = NewPartID + IF(UseVarTimeStep) THEN + CALL CreateParticle( PartSpecies(PartID), PartState(1:3,PartID), ElemID, PartState(4:6,PartID) & + , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & + , NewPartID=NewPartID, NewMPF=PartMPF(PartID), NewTimestep = PartTimeStep(PartID) ) + ELSE + CALL CreateParticle( PartSpecies(PartID), PartState(1:3,PartID), ElemID, PartState(4:6,PartID) & + , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & + , NewPartID=NewPartID, NewMPF=PartMPF(PartID) ) + END IF ELSE - CALL CreateParticle( PartSpecies(PartID), PartState(1:3,PartID), ElemID,PartState(4:6,PartID) & - , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & - , NewPartID=NewPartID ) - LastPartPos(1:3,NewPartID) = LastPartPos(1:3,PartID) - PDM%ParticleInside(NewPartID) = .FALSE. - InterPlanePartIndx(InterPlanePartNumber) = NewPartID + IF(UseVarTimeStep) THEN + CALL CreateParticle( PartSpecies(PartID), PartState(1:3,PartID), ElemID,PartState(4:6,PartID) & + , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & + , NewPartID=NewPartID, NewTimestep = PartTimeStep(PartID) ) + ELSE + CALL CreateParticle( PartSpecies(PartID), PartState(1:3,PartID), ElemID,PartState(4:6,PartID) & + , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & + , NewPartID=NewPartID ) + END IF END IF + LastPartPos(1:3,NewPartID) = LastPartPos(1:3,PartID) + PDM%ParticleInside(NewPartID) = .FALSE. + InterPlanePartIndx(InterPlanePartNumber) = NewPartID END IF ! Treatment for the rotational frame of reference: stored here, will be rotated together with the regular velocity later IF(UseRotRefFrame) THEN diff --git a/src/particles/particle_operations.f90 b/src/particles/particle_operations.f90 index 41ab0bda3..aefee245d 100644 --- a/src/particles/particle_operations.f90 +++ b/src/particles/particle_operations.f90 @@ -31,7 +31,7 @@ MODULE MOD_part_operations CONTAINS -SUBROUTINE CreateParticle(SpecID,Pos,GlobElemID,Velocity,RotEnergy,VibEnergy,ElecEnergy,NewPartID,NewMPF) +SUBROUTINE CreateParticle(SpecID,Pos,GlobElemID,Velocity,RotEnergy,VibEnergy,ElecEnergy,NewPartID,NewMPF,NewTimestep) !=================================================================================================================================== !> creates a single particle at correct array position and assign properties !=================================================================================================================================== @@ -59,6 +59,7 @@ SUBROUTINE CreateParticle(SpecID,Pos,GlobElemID,Velocity,RotEnergy,VibEnergy,Ele REAL, INTENT(IN) :: ElecEnergy !< Electronic energy INTEGER, INTENT(OUT),OPTIONAL :: NewPartID !< ID of newly created particle REAL, INTENT(IN),OPTIONAL :: NewMPF !< MPF of newly created particle +REAL, INTENT(IN),OPTIONAL :: NewTimestep !< Timestep of the newly created particle !----------------------------------------------------------------------------------------------------------------------------------! ! LOCAL VARIABLES INTEGER :: newParticleID @@ -104,7 +105,11 @@ SUBROUTINE CreateParticle(SpecID,Pos,GlobElemID,Velocity,RotEnergy,VibEnergy,Ele ! Set particle time step and weight (if required) IF (UseVarTimeStep) THEN - PartTimeStep(newParticleID) = GetParticleTimeStep(PartState(1,newParticleID),PartState(2,newParticleID),PEM%LocalElemID(newParticleID)) + IF(PRESENT(NewTimestep)) THEN + PartTimeStep(newParticleID) = NewTimestep + ELSE + PartTimeStep(newParticleID) = GetParticleTimeStep(PartState(1,newParticleID),PartState(2,newParticleID),PEM%LocalElemID(newParticleID)) + END IF END IF ! Set new particle MPF From 80ae069c38e72b3b9e3863033eef4bd595e0c7d5 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Thu, 14 Dec 2023 11:21:04 +0100 Subject: [PATCH 125/222] Reaction-specific accommodation coefficient for probability based model --- src/particles/particle_init.f90 | 4 +- src/particles/particle_tools.f90 | 4 - .../surfacemodel/surfacemodel_chemistry.f90 | 121 +++++++++++++----- .../surfacemodel/surfacemodel_vars.f90 | 6 +- 4 files changed, 95 insertions(+), 40 deletions(-) diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 8cfe3244a..904376579 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -271,7 +271,7 @@ SUBROUTINE InitParticles() USE MOD_Mesh_Vars ,ONLY: nElems USE MOD_SurfaceModel_Porous ,ONLY: InitPorousBoundaryCondition USE MOD_Particle_Boundary_Sampling ,ONLY: InitParticleBoundarySampling -USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC,BulkElectronTempSEE +USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC,BulkElectronTempSEE,DoChemSurface USE MOD_Particle_Boundary_Vars ,ONLY: PartBound USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod USE MOD_Particle_Vars ,ONLY: ParticlesInitIsDone,WriteMacroVolumeValues,WriteMacroSurfaceValues,nSpecies @@ -359,7 +359,7 @@ SUBROUTINE InitParticles() END IF ! Initialize arrays for surface chemistry -CALL InitSurfaceModelChemistry() +IF(DoChemSurface) CALL InitSurfaceModelChemistry() ! Initialize porous boundary condition (requires BCdata_auxSF and InitParticleBoundarySurfSides) IF(nPorousBC.GT.0) CALL InitPorousBoundaryCondition() diff --git a/src/particles/particle_tools.f90 b/src/particles/particle_tools.f90 index 1382f1b72..6b5b0f597 100644 --- a/src/particles/particle_tools.f90 +++ b/src/particles/particle_tools.f90 @@ -25,10 +25,6 @@ MODULE MOD_part_tools MODULE PROCEDURE UpdateNextFreePosition END INTERFACE -INTERFACE VeloFromDistribution - MODULE PROCEDURE VeloFromDistribution -END INTERFACE - INTERFACE DiceUnitVector MODULE PROCEDURE DiceUnitVector END INTERFACE diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index ea3d1ac4d..7879fbb91 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -96,6 +96,9 @@ SUBROUTINE DefineParametersSurfaceChemistry() numberedmulti=.TRUE., no=0) CALL prms%CreateRealOption( 'Surface-Reaction[$]-EventProbability', & 'Simple probability-based surface chemistry (Type = P)',numberedmulti=.TRUE.) + CALL prms%CreateRealOption( 'Surface-Reaction[$]-ProductAccommodation', & + 'Reaction-specific translation thermal accommodation of the product species (Type = P), default is to ' //& + 'utilizethe surface-specific accommodation coefficient (TransACC)', '-1.',numberedmulti=.TRUE.) END SUBROUTINE DefineParametersSurfaceChemistry @@ -127,7 +130,7 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() CHARACTER(LEN=32) :: hilf INTEGER :: iReac, iReac2, iBound, iVal, err INTEGER :: ReadInNumOfReact -INTEGER :: iSpec, SpecID, ReactionPathPerSpecies(nSpecies) +INTEGER :: iSpec, SpecID, ReactionPathPerSpecies(nSpecies), BCID !=================================================================================================================================== IF(SurfChem%NumOfReact.LE.0) RETURN @@ -211,6 +214,8 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() SurfChem%EventProbInfo(iSpec)%ReactionIndex = 0 ALLOCATE(SurfChem%EventProbInfo(iSpec)%ReactionProb(SurfChem%EventProbInfo(iSpec)%NumOfReactionPaths)) SurfChem%EventProbInfo(iSpec)%ReactionProb = 0. + ALLOCATE(SurfChem%EventProbInfo(iSpec)%ProdAcc(SurfChem%EventProbInfo(iSpec)%NumOfReactionPaths)) + SurfChem%EventProbInfo(iSpec)%ProdAcc = -1. END IF END DO @@ -451,10 +456,29 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() SurfChemReac(iReac)%Prefactor = GETREAL('Surface-Reaction'//TRIM(hilf)//'-Prefactor','1.') CASE('P') - SpecID = SurfChemReac(Ireac)%Reactants(1) + SpecID = SurfChemReac(iReac)%Reactants(1) ReactionPathPerSpecies(SpecID) = ReactionPathPerSpecies(SpecID) + 1 SurfChem%EventProbInfo(SpecID)%ReactionIndex(ReactionPathPerSpecies(SpecID)) = iReac SurfChem%EventProbInfo(SpecID)%ReactionProb(ReactionPathPerSpecies(SpecID)) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EventProbability') + SurfChem%EventProbInfo(SpecID)%ProdAcc(ReactionPathPerSpecies(SpecID)) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-ProductAccommodation') + ! Sanity checks + IF(SurfChem%EventProbInfo(SpecID)%ProdAcc(ReactionPathPerSpecies(SpecID)).NE.-1.) THEN + ! If a reaction-specific accommodation coefficient is used, check if it is between 0 and 1 + IF ((SurfChem%EventProbInfo(SpecID)%ProdAcc(ReactionPathPerSpecies(SpecID)).LT.0.).OR. & + (SurfChem%EventProbInfo(SpecID)%ProdAcc(ReactionPathPerSpecies(SpecID)).GT.1.)) THEN + CALL abort(__STAMP__,'Reaction-specific thermal accommodation must be between 0 and 1 for reaction: ', IntInfoOpt=iReac) + END IF + ! If the reaction-specific accommodation coefficient is greater than 0, check if a wall temperature has been defined + IF(SurfChem%EventProbInfo(SpecID)%ProdAcc(ReactionPathPerSpecies(SpecID)).GT.0.) THEN + DO iVal = 1, SurfChemReac(iReac)%NumOfBounds + BCID = SurfChemReac(iReac)%Boundaries(iVal) + IF(PartBound%WallTemp(BCID).EQ.0.) THEN + CALL abort(__STAMP__,'Reaction-specific thermal accommodation requires a wall temperature for boundary '//& + TRIM(PartBound%SourceBoundName(BCID))//' used for reaction: ', IntInfoOpt=iReac) + END IF + END DO + END IF + END IF END SELECT END DO END IF @@ -869,7 +893,7 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) ChemSampWall(speciesID,2,SubP,SubQ,SurfSideID) = ChemSampWall(speciesID,2,SubP,SubQ,SurfSideID) + ReacHeat*partWeight*BetaCoeff ! Create the Eley-Rideal reaction product - ! Incomplete energy accomodation: remaining energy is added to the product + ! Incomplete energy accommodation: remaining energy is added to the product WallVelo = PartBound%WallVelo(1:3,locBCID) CALL OrthoNormVec(n_loc,tang1,tang2) @@ -924,14 +948,18 @@ SUBROUTINE SurfaceModelEventProbability(PartID,SideID,GlobalElemID,n_loc,PartPos ! MODULES ! ROUTINES / FUNCTIONS USE MOD_Globals -USE MOD_SurfaceModel_Tools ,ONLY: SurfaceModelParticleEmission, MaxwellScattering -USE MOD_part_operations ,ONLY: RemoveParticle +USE MOD_SurfaceModel_Tools ,ONLY: SurfaceModelParticleEmission, MaxwellScattering, CalcPostWallCollVelo, CalcRotWallVelo +USE MOD_SurfaceModel_Tools ,ONLY: SurfaceModelEnergyAccommodation, DiffuseReflection +USE MOD_part_operations ,ONLY: CreateParticle, RemoveParticle +USE MOD_Particle_Boundary_Tools ,ONLY: CalcWallSample +USE MOD_Mesh_Tools ,ONLY: GetCNElemID ! VARIABLES USE MOD_Globals_Vars ,ONLY: BoltzmannConst -USE MOD_Particle_Vars ,ONLY: PartSpecies,Species +USE MOD_Particle_Vars ,ONLY: PartSpecies, PartState, usevMPF, PartMPF, WriteMacroSurfaceValues USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide USE MOD_SurfaceModel_Vars ,ONLY: SurfChem, SurfChemReac -USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared +USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared, ElemMidPoint_Shared +USE MOD_DSMC_Vars ,ONLY: DSMC, SamplingActive, BGGas ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -944,52 +972,79 @@ SUBROUTINE SurfaceModelEventProbability(PartID,SideID,GlobalElemID,n_loc,PartPos ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -INTEGER :: locBCID, SurfSideID -INTEGER :: SpecID, ProdSpecID -INTEGER :: iPath, iProd, ReacTodo +INTEGER :: locBCID, SurfSideID, CNElemID +INTEGER :: SpecID, ProdSpecID, NewPartID +INTEGER :: iPath, iProd, ReacTodo, PathTodo INTEGER :: NumProd, NumReac -REAL :: TempErgy !< temperature, energy or velocity used for SurfaceModelParticleEmission -REAL :: RanNum -REAL :: WallTemp -REAL :: TotalProb +REAL :: RanNum, WallTemp, TransACC, VeloSquare, TotalProb, OldMPF +REAL :: tang1(1:3), tang2(1:3), WallVelo(3), NewVelo(3), NewPos(1:3) +REAL,PARAMETER :: eps=1e-6, eps2=1.0-eps !=================================================================================================================================== locBCID = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) +CNElemID = GetCNElemID(GlobalElemID) WallTemp = PartBound%WallTemp(locBCID) +WallVelo = PartBound%WallVelo(1:3,locBCID) SpecID = PartSpecies(PartID) NumReac = 0 ReacTodo = 0 +PathTodo = 0 TotalProb = 0. +IF(PartBound%RotVelo(locBCID)) THEN + WallVelo(1:3) = CalcRotWallVelo(locBCID,PartPosImpact) +END IF ! ---------------------------------------------------------------------------------------------------------------------------------- ! 1.) Check whether species has any reactions to perform at the boundary IF(SurfChem%EventProbInfo(SpecID)%NumOfReactionPaths.EQ.0) THEN - ReacTodo = 0 + PathTodo = 0 ELSE - IF(SurfChem%EventProbInfo(SpecID)%NumOfReactionPaths.GT.1) THEN - ! 2a.) Determine which reaction path to follow - CALL RANDOM_NUMBER(RanNum) - DO iPath = 1, SurfChem%EventProbInfo(SpecID)%NumOfReactionPaths - TotalProb = TotalProb + SurfChem%EventProbInfo(SpecID)%ReactionProb(iPath) - IF(TotalProb.GT.RanNum) THEN - ReacTodo = SurfChem%EventProbInfo(SpecID)%ReactionIndex(iPath) - EXIT - END IF - END DO - ELSE - ! 2b.) Only one available reaction - ReacTodo = SurfChem%EventProbInfo(SpecID)%ReactionIndex(1) - END IF +! 2a.) Determine which reaction path to follow + CALL RANDOM_NUMBER(RanNum) + DO iPath = 1, SurfChem%EventProbInfo(SpecID)%NumOfReactionPaths + TotalProb = TotalProb + SurfChem%EventProbInfo(SpecID)%ReactionProb(iPath) + IF(TotalProb.GT.RanNum) THEN + PathTodo = iPath + EXIT + END IF + END DO END IF -IF(ReacTodo.GT.0) THEN +IF(PathTodo.GT.0) THEN + ReacTodo = SurfChem%EventProbInfo(SpecID)%ReactionIndex(PathTodo) NumProd = COUNT(SurfChemReac(ReacTodo)%Products(:).GT.0) ! Create products if any have been defined IF(NumProd.GT.0) THEN + CALL OrthoNormVec(n_loc,tang1,tang2) + VeloSquare = DOTPRODUCT(PartState(4:6,PartID)) / NumProd + IF(SurfChem%EventProbInfo(SpecID)%ProdAcc(PathTodo).EQ.-1) THEN + TransACC = PartBound%TransACC(locBCID) + ELSE + TransACC = SurfChem%EventProbInfo(SpecID)%ProdAcc(PathTodo) + END IF DO iProd = 1, NumProd ProdSpecID = SurfChemReac(ReacTodo)%Products(iProd) - TempErgy = SQRT(2*BoltzmannConst*WallTemp/Species(ProdSpecID)%MassIC) - CALL SurfaceModelParticleEmission(n_loc, PartID, SideID, ProdSpecID, 1, TempErgy, GlobalElemID, PartPosImpact(1:3), & - EnergyDistribution = 'deltadistribution') + ! Do not emit background gas species (but consider them in the energy distribution in VeloSquare) + IF(BGGas%BackgroundSpecies(ProdSpecID)) CYCLE + ! Calculate the velocity based on the accommodation coefficient + NewVelo(1:3) = CalcPostWallCollVelo(ProdSpecID,VeloSquare,WallTemp,TransACC) + ! Perform vector transformation from the local to the global coordinate system and add wall velocity + NewVelo(1:3) = tang1(1:3)*NewVelo(1) + tang2(1:3)*NewVelo(2) - n_loc(1:3)*NewVelo(3) + WallVelo(1:3) + ! Create new position by using POI and moving the particle by eps in the direction of the element center + NewPos(1:3) = eps*ElemMidPoint_Shared(1:3,CNElemID) + eps2*PartPosImpact(1:3) + IF(usevMPF)THEN + ! Get MPF of old particle + OldMPF = PartMPF(PartID) + ! New particle acquires the MPF of the impacting particle (not necessarily the MPF of the newly created particle species) + CALL CreateParticle(ProdSpecID,NewPos(1:3),GlobalElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID, NewMPF=OldMPF) + ELSE + ! New particle acquires the MPF of the new particle species + CALL CreateParticle(ProdSpecID,NewPos(1:3),GlobalElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID) + END IF ! usevMPF + ! Adding the energy that is transferred from the surface onto the internal energies of the particle + CALL SurfaceModelEnergyAccommodation(NewPartID,locBCID,WallTemp) + ! Sampling of newly created particles + IF((DSMC%CalcSurfaceVal.AND.SamplingActive).OR.(DSMC%CalcSurfaceVal.AND.WriteMacroSurfaceValues)) & + CALL CalcWallSample(NewPartID,SurfSideID,'new',SurfaceNormal_opt=n_loc) END DO END IF ! Remove original reactant diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90 index 12baa9c2b..f9312b068 100644 --- a/src/particles/surfacemodel/surfacemodel_vars.f90 +++ b/src/particles/surfacemodel/surfacemodel_vars.f90 @@ -56,6 +56,10 @@ MODULE MOD_SurfaceModel_Vars LOGICAL, ALLOCATABLE :: PureSurfReac(:) ! List of boundaries on which LH/D reactions occur END TYPE +TYPE, EXTENDS(tCollCaseInfo) :: tEventProbInfo + REAL, ALLOCATABLE :: ProdAcc(:) ! Reaction-specific thermal accommodation +END TYPE + LOGICAL :: DoChemSurface ! Call the surface catalysis routines TYPE tSurfChemistry ! General surface chemistry parameter @@ -71,7 +75,7 @@ MODULE MOD_SurfaceModel_Vars TYPE(tSurfaceFlux), POINTER :: SurfaceFlux(:) ! Surface flux data (using the regular surface flux type) TYPE(tSFAux), ALLOCATABLE :: SFAux(:) ! Additional surface flux data, where variables differ from the regular surface flux type ! Event probability - TYPE(tCollCaseInfo), ALLOCATABLE :: EventProbInfo(:) ! Number of reaction paths and their probability per species + TYPE(tEventProbInfo), ALLOCATABLE :: EventProbInfo(:) ! Number of reaction paths and their probability per species END TYPE TYPE(tSurfChemistry) :: SurfChem From ec38eae3c5f3b3d3213aeefb8893723042cffd0a Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Thu, 14 Dec 2023 12:05:32 +0100 Subject: [PATCH 126/222] Regression test for probability-based chemistry modelling --- REGGIE.md | 1 + .../SURF_PROB_H2_Plasma/PartAnalyze_ref.csv | 102 ++++++ .../NIG_DSMC/SURF_PROB_H2_Plasma/analyze.ini | 6 + .../SURF_PROB_H2_Plasma/command_line.ini | 1 + .../SURF_PROB_H2_Plasma/externals.ini | 5 + .../NIG_DSMC/SURF_PROB_H2_Plasma/hopr.ini | 39 +++ .../SURF_PROB_H2_Plasma/parameter.ini | 292 ++++++++++++++++++ .../NIG_DSMC/SURF_PROB_H2_Plasma/readme.md | 5 + .../surfacemodel/surfacemodel_chemistry.f90 | 7 +- 9 files changed, 456 insertions(+), 2 deletions(-) create mode 100644 regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/PartAnalyze_ref.csv create mode 100644 regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/analyze.ini create mode 100644 regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/command_line.ini create mode 100644 regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/externals.ini create mode 100644 regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/hopr.ini create mode 100644 regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/parameter.ini create mode 100644 regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/readme.md diff --git a/REGGIE.md b/REGGIE.md index 403874867..f03cfa0e5 100644 --- a/REGGIE.md +++ b/REGGIE.md @@ -204,6 +204,7 @@ Testing more complex DSMC routines: [Link CMAKE-CONFIG](regressioncheck/NIG_DSMC | 4 | RotPeriodicBC | Release | One rot-periodic BC angle | nProcs=1,2,7,15,25 | h5 bounds check PartData and PartAnalyze.csv | [Link](regressioncheck/NIG_DSMC/RotPeriodicBC/readme.md) | | 5 | RotPeriodicBCMulti | Release | Multiple rot-periodic BC angles and interplane | nProcs=1,2,7,15,25 | h5 bounds check PartData, PartAnalyze.csv, and min/max of rot BCs | [Link](regressioncheck/NIG_DSMC/RotPeriodicBCMulti/readme.md) | | 5 | RotPeriodicBCMultiInterPlane | Release | (same as RotPeriodicBCMulti) | nProcs=1,2,7,15,25 | position of interplanes | [Link](regressioncheck/NIG_DSMC/RotPeriodicBCMultiInterPlane/readme.md) | +| 5 | SURF_PROB_H2_Plasma | Release | Probability-based surface chemistry model | nProcs=3,6 | Number density of product species | [Link](regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/readme.md) | | 6 | VirtualCellMerge | Release | Merge cells for collision operator | nProcs=4 | DSMCState: Number density with absolute value | [Link](regressioncheck/NIG_DSMC/VirtualCellMerge/readme.md) | | 7 | VSS_VHS_SelfDiffusion | Release + Debug | Testing the VHS/VSS collision model | nProcs=6 | Number Density | [Link](regressioncheck/NIG_DSMC/VSS_VHS_SelfDiffusion/readme.md) | diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/PartAnalyze_ref.csv b/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/PartAnalyze_ref.csv new file mode 100644 index 000000000..81721f5fb --- /dev/null +++ b/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/PartAnalyze_ref.csv @@ -0,0 +1,102 @@ +001-TIME,002-NumDens-Spec-001,003-NumDens-Spec-002,004-NumDens-Spec-003,005-NumDens-Spec-004,006-NumDens-Spec-005,007-NumDens-Spec-006,008-NumDens-Spec-007,009-TempTra-001,010-TempTra-002,011-TempTra-003,012-TempTra-004,013-TempTra-005,014-TempTra-006,015-TempTra-007 +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1000000000000000E+022,0.1000000000000000E+022,0.1000000000000000E+022,0.3000000000000001E+022,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.5002123174168338E+005,0.4989034755847335E+005,0.5003667777988960E+005,0.4998275236001545E+005 +0.1000000000000000E-007,0.1271200000000000E+021,0.1020840000000000E+022,0.0000000000000000E+000,0.6946800000000001E+021,0.5859400000000001E+021,0.7460900000000001E+021,0.3174670000000000E+022,0.3981961042197449E+003,0.3998464871100009E+003,0.0000000000000000E+000,0.4338196197139670E+005,0.4026706373701260E+005,0.4487672125390718E+005,0.2761595239988800E+005 +0.2000000000000000E-007,0.2305500000000000E+021,0.1809880000000000E+022,0.0000000000000000E+000,0.4601900000000001E+021,0.3084200000000001E+021,0.5384600000000001E+021,0.3347500000000000E+022,0.3969110100298585E+003,0.3996856200856541E+003,0.0000000000000000E+000,0.3517980263319832E+005,0.2721057570927298E+005,0.3868514668578549E+005,0.1380940225896836E+005 +0.3000000000000001E-007,0.3111100000000001E+021,0.2385580000000000E+022,0.0000000000000000E+000,0.2876300000000000E+021,0.1564700000000000E+021,0.3750900000000001E+021,0.3515880000000000E+022,0.3993829044084167E+003,0.3994661178479716E+003,0.0000000000000000E+000,0.2569203427916445E+005,0.1649687561368292E+005,0.3086128261611458E+005,0.6434814282704109E+004 +0.4000000000000000E-007,0.3727400000000001E+021,0.2773730000000000E+022,0.0000000000000000E+000,0.1773900000000000E+021,0.8329000000000002E+020,0.2533000000000000E+021,0.3660450000000000E+022,0.3996581709700998E+003,0.3995840817080892E+003,0.0000000000000000E+000,0.1803496807466042E+005,0.1047188280442825E+005,0.2366119827831781E+005,0.3093093628118487E+004 +0.4999999999999999E-007,0.4144800000000001E+021,0.3024490000000000E+022,0.0000000000000000E+000,0.1116900000000000E+021,0.4848000000000001E+020,0.1692800000000000E+021,0.3768420000000000E+022,0.4008137803202740E+003,0.3996390165361670E+003,0.0000000000000000E+000,0.1293797913788182E+005,0.7093724463995345E+004,0.1765563242217509E+005,0.1632653900876477E+004 +0.5999999999999998E-007,0.4413000000000001E+021,0.3181200000000001E+022,0.0000000000000000E+000,0.7286000000000001E+020,0.2980000000000000E+020,0.1152300000000000E+021,0.3840390000000001E+022,0.4012685232040021E+003,0.3996704242383378E+003,0.0000000000000000E+000,0.9553096663372226E+004,0.4972355642108432E+004,0.1339255835668297E+005,0.9988440427523342E+003 +0.7000000000000000E-007,0.4582100000000001E+021,0.3276580000000000E+022,0.0000000000000000E+000,0.4903000000000001E+020,0.1959000000000000E+020,0.8187000000000002E+020,0.3885280000000001E+022,0.4013090258068119E+003,0.3997452673798477E+003,0.0000000000000000E+000,0.7307552325392694E+004,0.3756131268710152E+004,0.1061737403319223E+005,0.7193297448502771E+003 +0.8000000000000003E-007,0.4701800000000001E+021,0.3340280000000000E+022,0.0000000000000000E+000,0.3444000000000000E+020,0.1368000000000000E+020,0.5842000000000001E+020,0.3917000000000000E+022,0.4012115020412264E+003,0.3997241200761860E+003,0.0000000000000000E+000,0.5789105587663402E+004,0.2963954255860763E+004,0.8468111153983240E+004,0.5765797426890044E+003 +0.9000000000000005E-007,0.4777500000000001E+021,0.3383930000000000E+022,0.0000000000000000E+000,0.2502000000000000E+020,0.1000000000000000E+020,0.4244000000000001E+020,0.3939140000000001E+022,0.4011973152817063E+003,0.3998271710226177E+003,0.0000000000000000E+000,0.4668129550495668E+004,0.2379000061585255E+004,0.6774704139475412E+004,0.5008108932058755E+003 +0.1000000000000001E-006,0.4828500000000001E+021,0.3411860000000000E+022,0.0000000000000000E+000,0.1887000000000000E+020,0.7430000000000001E+019,0.3212000000000000E+020,0.3953130000000001E+022,0.4014039772681572E+003,0.3997579664690588E+003,0.0000000000000000E+000,0.3844259373103487E+004,0.1909394712226439E+004,0.5568723334498319E+004,0.4612374236332840E+003 +0.1100000000000001E-006,0.4864500000000001E+021,0.3431410000000001E+022,0.0000000000000000E+000,0.1456000000000000E+020,0.5770000000000001E+019,0.2499000000000000E+020,0.3963180000000001E+022,0.4014418999192146E+003,0.3997468561266348E+003,0.0000000000000000E+000,0.3281605418005850E+004,0.1557341648248126E+004,0.4717312558009070E+004,0.4394522703532016E+003 +0.1200000000000001E-006,0.4891500000000001E+021,0.3446050000000001E+022,0.0000000000000000E+000,0.1131000000000000E+020,0.4590000000000001E+019,0.1965000000000000E+020,0.3970750000000001E+022,0.4015044925421046E+003,0.3997424842338584E+003,0.0000000000000000E+000,0.2791144410925649E+004,0.1310038800782844E+004,0.3982664357026727E+004,0.4255540606484406E+003 +0.1300000000000001E-006,0.4909800000000001E+021,0.3457050000000000E+022,0.0000000000000000E+000,0.9040000000000001E+019,0.3720000000000001E+019,0.1560000000000000E+020,0.3976390000000001E+022,0.4013998363649783E+003,0.3997328023865982E+003,0.0000000000000000E+000,0.2406115122853009E+004,0.1172538847965839E+004,0.3361094594899634E+004,0.4168408473652044E+003 +0.1400000000000000E-006,0.4925300000000001E+021,0.3465500000000001E+022,0.0000000000000000E+000,0.7230000000000001E+019,0.2920000000000001E+019,0.1246000000000000E+020,0.3980640000000001E+022,0.4014633267082527E+003,0.3997225197740063E+003,0.0000000000000000E+000,0.2071506777953164E+004,0.1034840516964444E+004,0.2914787722093286E+004,0.4113127808372158E+003 +0.1500000000000000E-006,0.4936500000000001E+021,0.3471840000000001E+022,0.0000000000000000E+000,0.5950000000000001E+019,0.2370000000000001E+019,0.1014000000000000E+020,0.3983950000000001E+022,0.4015983010951889E+003,0.3997148615165656E+003,0.0000000000000000E+000,0.1818325851000656E+004,0.8968741377496308E+003,0.2586393675676215E+004,0.4079282391934112E+003 +0.1600000000000000E-006,0.4946100000000001E+021,0.3475880000000000E+022,0.0000000000000000E+000,0.4910000000000001E+019,0.1970000000000000E+019,0.8540000000000001E+019,0.3985910000000001E+022,0.4016037299395559E+003,0.3997219372347915E+003,0.0000000000000000E+000,0.1612615304909478E+004,0.8239138672983810E+003,0.2312970423978682E+004,0.4057584157563849E+003 +0.1699999999999999E-006,0.4953800000000001E+021,0.3479870000000000E+022,0.0000000000000000E+000,0.3960000000000001E+019,0.1590000000000000E+019,0.7110000000000001E+019,0.3987910000000001E+022,0.4016627963130689E+003,0.3997254404579911E+003,0.0000000000000000E+000,0.1407659938593872E+004,0.6915251646376840E+003,0.2055312914029701E+004,0.4040350503676046E+003 +0.1799999999999999E-006,0.4959700000000001E+021,0.3482570000000000E+022,0.0000000000000000E+000,0.3440000000000001E+019,0.1390000000000000E+019,0.6010000000000001E+019,0.3989380000000000E+022,0.4016423200790057E+003,0.3997366086052155E+003,0.0000000000000000E+000,0.1304670947487135E+004,0.6001176661822700E+003,0.1850417698917263E+004,0.4030091153276177E+003 +0.1899999999999998E-006,0.4963600000000001E+021,0.3484810000000000E+022,0.0000000000000000E+000,0.2980000000000001E+019,0.1200000000000000E+019,0.5150000000000001E+019,0.3990500000000000E+022,0.4016506307394643E+003,0.3997369644474283E+003,0.0000000000000000E+000,0.1210557021790411E+004,0.5132324592434318E+003,0.1700653061976056E+004,0.4022935422365837E+003 +0.1999999999999998E-006,0.4967300000000001E+021,0.3486770000000001E+022,0.0000000000000000E+000,0.2590000000000001E+019,0.1020000000000000E+019,0.4450000000000001E+019,0.3991560000000001E+022,0.4016539328489787E+003,0.3997342558392211E+003,0.0000000000000000E+000,0.1122547413120556E+004,0.4825622010191489E+003,0.1570732339463027E+004,0.4017688170670680E+003 +0.2099999999999997E-006,0.4969600000000001E+021,0.3488430000000000E+022,0.0000000000000000E+000,0.2170000000000000E+019,0.8900000000000001E+018,0.3920000000000001E+019,0.3992370000000000E+022,0.4016282693963792E+003,0.3997399853202542E+003,0.0000000000000000E+000,0.1022297163899212E+004,0.4427656324753746E+003,0.1415896484578646E+004,0.4013207448778725E+003 +0.2199999999999997E-006,0.4972200000000001E+021,0.3489700000000000E+022,0.0000000000000000E+000,0.1850000000000000E+019,0.8200000000000001E+018,0.3410000000000001E+019,0.3993000000000000E+022,0.4015934405168448E+003,0.3997285282075679E+003,0.0000000000000000E+000,0.9346359146385577E+003,0.4056374795857135E+003,0.1280615874548878E+004,0.4009620672895788E+003 +0.2299999999999997E-006,0.4973900000000001E+021,0.3490730000000000E+022,0.0000000000000000E+000,0.1570000000000000E+019,0.6900000000000001E+018,0.3100000000000001E+019,0.3993480000000001E+022,0.4015538417241563E+003,0.3997269429238104E+003,0.0000000000000000E+000,0.8683521547369409E+003,0.3773490445072500E+003,0.1178101778787267E+004,0.4007390787096713E+003 +0.2399999999999996E-006,0.4976200000000001E+021,0.3492090000000000E+022,0.0000000000000000E+000,0.1340000000000000E+019,0.6000000000000001E+018,0.2580000000000001E+019,0.3994230000000001E+022,0.4015266256725524E+003,0.3997232973796433E+003,0.0000000000000000E+000,0.8046264521519979E+003,0.3401990644613629E+003,0.1042963588276034E+004,0.4004903508200496E+003 +0.2499999999999996E-006,0.4977900000000001E+021,0.3492990000000000E+022,0.0000000000000000E+000,0.1130000000000000E+019,0.5500000000000001E+018,0.2260000000000000E+019,0.3994720000000001E+022,0.4015253605063295E+003,0.3997083872743041E+003,0.0000000000000000E+000,0.7216263436366525E+003,0.3057106583906267E+003,0.9468376312635909E+003,0.4003224607854361E+003 +0.2599999999999995E-006,0.4978800000000001E+021,0.3493600000000001E+022,0.0000000000000000E+000,0.9700000000000001E+018,0.4800000000000001E+018,0.2070000000000000E+019,0.3995000000000001E+022,0.4015198903267919E+003,0.3997043426434321E+003,0.0000000000000000E+000,0.6661184831055268E+003,0.2712932163385871E+003,0.8977573752775776E+003,0.4002379293853008E+003 +0.2699999999999995E-006,0.4979300000000001E+021,0.3494310000000001E+022,0.0000000000000000E+000,0.8400000000000001E+018,0.4400000000000001E+018,0.1850000000000000E+019,0.3995370000000001E+022,0.4015095898131556E+003,0.3997138417706876E+003,0.0000000000000000E+000,0.5975823785581400E+003,0.2627482605492787E+003,0.8654467083680170E+003,0.4001798079618426E+003 +0.2799999999999994E-006,0.4980300000000001E+021,0.3494870000000001E+022,0.0000000000000000E+000,0.7500000000000001E+018,0.3700000000000001E+018,0.1650000000000000E+019,0.3995670000000001E+022,0.4015118408563771E+003,0.3997195471112609E+003,0.0000000000000000E+000,0.5698610465280060E+003,0.2475596710604808E+003,0.8228029819762952E+003,0.4001355000532785E+003 +0.2899999999999994E-006,0.4981000000000001E+021,0.3495220000000000E+022,0.0000000000000000E+000,0.6800000000000001E+018,0.3600000000000001E+018,0.1520000000000000E+019,0.3995880000000001E+022,0.4015123830342681E+003,0.3997106332742601E+003,0.0000000000000000E+000,0.5540675804592660E+003,0.2474901526633084E+003,0.7865856176106428E+003,0.4000949453363634E+003 +0.2999999999999994E-006,0.4981800000000001E+021,0.3495720000000000E+022,0.0000000000000000E+000,0.5800000000000001E+018,0.3300000000000001E+018,0.1340000000000000E+019,0.3996150000000000E+022,0.4015267101371418E+003,0.3997124607019480E+003,0.0000000000000000E+000,0.4955308267814526E+003,0.2441385659867143E+003,0.7172502171567306E+003,0.4000461715597346E+003 +0.3099999999999993E-006,0.4982600000000001E+021,0.3496000000000001E+022,0.0000000000000000E+000,0.5200000000000001E+018,0.2900000000000001E+018,0.1220000000000000E+019,0.3996290000000001E+022,0.4015496752789309E+003,0.3997078422888529E+003,0.0000000000000000E+000,0.4668827075468439E+003,0.2399179251512622E+003,0.6502295947999883E+003,0.4000111085927659E+003 +0.3199999999999993E-006,0.4983100000000001E+021,0.3496340000000000E+022,0.0000000000000000E+000,0.4900000000000001E+018,0.2600000000000000E+018,0.1090000000000000E+019,0.3996490000000000E+022,0.4015531675010409E+003,0.3997084882283141E+003,0.0000000000000000E+000,0.4544399551903209E+003,0.2323394642604113E+003,0.6123883305987425E+003,0.3999923237012306E+003 +0.3299999999999992E-006,0.4983500000000001E+021,0.3496770000000001E+022,0.0000000000000000E+000,0.4200000000000001E+018,0.2200000000000000E+018,0.9600000000000001E+018,0.3996720000000001E+022,0.4015695506132210E+003,0.3997041202957406E+003,0.0000000000000000E+000,0.4301802244634544E+003,0.2028154120828253E+003,0.5412512513085421E+003,0.3999630843693890E+003 +0.3399999999999992E-006,0.4983800000000001E+021,0.3496990000000000E+022,0.0000000000000000E+000,0.3400000000000001E+018,0.2100000000000000E+018,0.8900000000000001E+018,0.3996810000000000E+022,0.4015626243396336E+003,0.3997024654131671E+003,0.0000000000000000E+000,0.3735023718485538E+003,0.1978990961208493E+003,0.5119168778071867E+003,0.3999465726120181E+003 +0.3499999999999991E-006,0.4983900000000001E+021,0.3497150000000000E+022,0.0000000000000000E+000,0.3000000000000001E+018,0.1800000000000000E+018,0.8400000000000001E+018,0.3996860000000001E+022,0.4015603241517221E+003,0.3997010610554253E+003,0.0000000000000000E+000,0.3300184849204210E+003,0.1785058103573893E+003,0.4892612759916303E+003,0.3999365331002664E+003 +0.3599999999999991E-006,0.4984100000000001E+021,0.3497250000000001E+022,0.0000000000000000E+000,0.2700000000000000E+018,0.1700000000000000E+018,0.8000000000000001E+018,0.3996900000000000E+022,0.4015560369269594E+003,0.3997019424134826E+003,0.0000000000000000E+000,0.3009674978230011E+003,0.1846083893142447E+003,0.4835441538791861E+003,0.3999341095459023E+003 +0.3699999999999991E-006,0.4984400000000001E+021,0.3497440000000001E+022,0.0000000000000000E+000,0.2500000000000000E+018,0.1200000000000000E+018,0.7200000000000001E+018,0.3996970000000001E+022,0.4015398976026440E+003,0.3996981948110238E+003,0.0000000000000000E+000,0.2939800642910531E+003,0.1460994409416712E+003,0.4371540730878398E+003,0.3999203844168301E+003 +0.3799999999999990E-006,0.4984500000000001E+021,0.3497600000000001E+022,0.0000000000000000E+000,0.2000000000000000E+018,0.1200000000000000E+018,0.6800000000000001E+018,0.3997050000000002E+022,0.4015360373955564E+003,0.3996962767012394E+003,0.0000000000000000E+000,0.2324017857171806E+003,0.1460994409416712E+003,0.4190770160011865E+003,0.3999130158219205E+003 +0.3899999999999990E-006,0.4985100000000001E+021,0.3497710000000000E+022,0.0000000000000000E+000,0.1600000000000000E+018,0.1200000000000000E+018,0.6100000000000001E+018,0.3997110000000001E+022,0.4015253243169682E+003,0.3996959292875655E+003,0.0000000000000000E+000,0.2083433752764439E+003,0.1460994409416712E+003,0.3887642197211841E+003,0.3999071457379582E+003 +0.3999999999999989E-006,0.4985200000000001E+021,0.3497820000000001E+022,0.0000000000000000E+000,0.1600000000000000E+018,0.1000000000000000E+018,0.5700000000000001E+018,0.3997170000000001E+022,0.4015279045988814E+003,0.3996957335572856E+003,0.0000000000000000E+000,0.2083433752764439E+003,0.1340112181140142E+003,0.3606036861186287E+003,0.3999043578118826E+003 +0.4099999999999989E-006,0.4985200000000001E+021,0.3497910000000001E+022,0.0000000000000000E+000,0.1500000000000000E+018,0.8000000000000002E+017,0.5400000000000001E+018,0.3997200000000001E+022,0.4015296502687572E+003,0.3996945942879203E+003,0.0000000000000000E+000,0.1904862166247247E+003,0.1101201764018029E+003,0.3679262397235936E+003,0.3999055194320266E+003 +0.4199999999999988E-006,0.4985300000000001E+021,0.3498000000000001E+022,0.0000000000000000E+000,0.1400000000000000E+018,0.8000000000000002E+017,0.5100000000000001E+018,0.3997260000000001E+022,0.4015376447288084E+003,0.3996965789257155E+003,0.0000000000000000E+000,0.1891213386299289E+003,0.1101201764018029E+003,0.3529751556614469E+003,0.3999070610967797E+003 +0.4299999999999988E-006,0.4985800000000001E+021,0.3498050000000001E+022,0.0000000000000000E+000,0.1400000000000000E+018,0.8000000000000002E+017,0.4600000000000001E+018,0.3997310000000001E+022,0.4015594562628517E+003,0.3996963504713378E+003,0.0000000000000000E+000,0.1891213386299289E+003,0.1101201764018029E+003,0.3293808956352235E+003,0.3999074713453068E+003 +0.4399999999999988E-006,0.4985900000000001E+021,0.3498220000000001E+022,0.0000000000000000E+000,0.1000000000000000E+018,0.8000000000000002E+017,0.4100000000000001E+018,0.3997400000000001E+022,0.4015628435091231E+003,0.3996999209928456E+003,0.0000000000000000E+000,0.1320110568174006E+003,0.1101201764018029E+003,0.2895785799059902E+003,0.3999084939456550E+003 +0.4499999999999987E-006,0.4986100000000001E+021,0.3498290000000001E+022,0.0000000000000000E+000,0.9000000000000002E+017,0.8000000000000002E+017,0.3800000000000001E+018,0.3997450000000001E+022,0.4015632417755527E+003,0.3997027556650541E+003,0.0000000000000000E+000,0.1188187903399465E+003,0.1101201764018029E+003,0.2891762745781014E+003,0.3999121918690146E+003 +0.4599999999999987E-006,0.4986200000000001E+021,0.3498300000000001E+022,0.0000000000000000E+000,0.9000000000000002E+017,0.8000000000000002E+017,0.3700000000000001E+018,0.3997460000000001E+022,0.4015707837169014E+003,0.3997021703249511E+003,0.0000000000000000E+000,0.1188187903399465E+003,0.1101201764018029E+003,0.2840540463797116E+003,0.3999124268728395E+003 +0.4699999999999986E-006,0.4986200000000001E+021,0.3498320000000001E+022,0.0000000000000000E+000,0.9000000000000002E+017,0.6000000000000001E+017,0.3700000000000001E+018,0.3997460000000001E+022,0.4015706025647703E+003,0.3997022827373117E+003,0.0000000000000000E+000,0.1188187903399465E+003,0.9668064037436430E+002,0.2840540463797116E+003,0.3999137497618867E+003 +0.4799999999999987E-006,0.4986600000000001E+021,0.3498400000000001E+022,0.0000000000000000E+000,0.9000000000000002E+017,0.5000000000000001E+017,0.3200000000000001E+018,0.3997520000000001E+022,0.4015823430692815E+003,0.3997036428006425E+003,0.0000000000000000E+000,0.1188187903399465E+003,0.8711831959454027E+002,0.2582180836578897E+003,0.3999164368314796E+003 +0.4899999999999989E-006,0.4986800000000001E+021,0.3498460000000001E+022,0.0000000000000000E+000,0.8000000000000002E+017,0.2000000000000000E+017,0.2900000000000001E+018,0.3997530000000001E+022,0.4015783318770102E+003,0.3997030079259412E+003,0.0000000000000000E+000,0.8171372387689790E+002,0.3397193740725112E+001,0.2195893984258321E+003,0.3999155362477190E+003 +0.4999999999999991E-006,0.4986900000000001E+021,0.3498530000000001E+022,0.0000000000000000E+000,0.8000000000000002E+017,0.2000000000000000E+017,0.2600000000000000E+018,0.3997580000000001E+022,0.4015799656381352E+003,0.3997011839503625E+003,0.0000000000000000E+000,0.8171372387689790E+002,0.3397193740725112E+001,0.2229706566362423E+003,0.3999157173996402E+003 +0.5099999999999994E-006,0.4986900000000001E+021,0.3498550000000001E+022,0.0000000000000000E+000,0.7000000000000001E+017,0.2000000000000000E+017,0.2600000000000000E+018,0.3997590000000001E+022,0.4015808520870898E+003,0.3996998772521074E+003,0.0000000000000000E+000,0.7119778951242949E+002,0.3397193740725112E+001,0.2229706566362423E+003,0.3999152951772285E+003 +0.5199999999999996E-006,0.4986900000000001E+021,0.3498610000000001E+022,0.0000000000000000E+000,0.7000000000000001E+017,0.2000000000000000E+017,0.2400000000000000E+018,0.3997630000000001E+022,0.4015815342375770E+003,0.3996986599073548E+003,0.0000000000000000E+000,0.7119778951242949E+002,0.3397193740725112E+001,0.1959141525828005E+003,0.3999135725500279E+003 +0.5299999999999998E-006,0.4986900000000001E+021,0.3498610000000001E+022,0.0000000000000000E+000,0.7000000000000001E+017,0.2000000000000000E+017,0.2400000000000000E+018,0.3997630000000001E+022,0.4015826106547927E+003,0.3996989675389743E+003,0.0000000000000000E+000,0.7119778951242949E+002,0.3397193740725112E+001,0.1959141525828005E+003,0.3999139760594977E+003 +0.5400000000000000E-006,0.4987000000000001E+021,0.3498620000000001E+022,0.0000000000000000E+000,0.7000000000000001E+017,0.2000000000000000E+017,0.2300000000000000E+018,0.3997640000000001E+022,0.4015869502893740E+003,0.3996989698749806E+003,0.0000000000000000E+000,0.7119778951242949E+002,0.3397193740725112E+001,0.1882386427615083E+003,0.3999145918017358E+003 +0.5500000000000002E-006,0.4987000000000001E+021,0.3498680000000000E+022,0.0000000000000000E+000,0.6000000000000001E+017,0.2000000000000000E+017,0.2100000000000000E+018,0.3997670000000001E+022,0.4015858804477839E+003,0.3997011637394583E+003,0.0000000000000000E+000,0.8097062914555873E+002,0.3397193740725112E+001,0.1809143175614412E+003,0.3999180183255720E+003 +0.5600000000000005E-006,0.4987100000000001E+021,0.3498690000000001E+022,0.0000000000000000E+000,0.5000000000000001E+017,0.2000000000000000E+017,0.2000000000000000E+018,0.3997670000000001E+022,0.4015880543702724E+003,0.3997029076293898E+003,0.0000000000000000E+000,0.7607447229993774E+002,0.3397193740725112E+001,0.1747549881394962E+003,0.3999207956519638E+003 +0.5700000000000007E-006,0.4987100000000001E+021,0.3498710000000001E+022,0.0000000000000000E+000,0.4000000000000001E+017,0.2000000000000000E+017,0.2000000000000000E+018,0.3997680000000001E+022,0.4015880995479430E+003,0.3997013516416554E+003,0.0000000000000000E+000,0.7308275453298151E+002,0.3397193740725112E+001,0.1747549881394962E+003,0.3999202185716254E+003 +0.5800000000000009E-006,0.4987400000000001E+021,0.3498740000000000E+022,0.0000000000000000E+000,0.3000000000000000E+017,0.1000000000000000E+017,0.1700000000000000E+018,0.3997690000000000E+022,0.4015743726943461E+003,0.3997023285069961E+003,0.0000000000000000E+000,0.7996275355716811E+002,0.0000000000000000E+000,0.1647074701531250E+003,0.3999224868938508E+003 +0.5900000000000011E-006,0.4987500000000001E+021,0.3498750000000000E+022,0.0000000000000000E+000,0.3000000000000000E+017,0.1000000000000000E+017,0.1600000000000000E+018,0.3997700000000000E+022,0.4015797820231904E+003,0.3997024153713987E+003,0.0000000000000000E+000,0.7996275355716811E+002,0.0000000000000000E+000,0.1579195263093848E+003,0.3999235580637775E+003 +0.6000000000000013E-006,0.4987700000000001E+021,0.3498770000000001E+022,0.0000000000000000E+000,0.3000000000000000E+017,0.1000000000000000E+017,0.1400000000000000E+018,0.3997720000000001E+022,0.4015742418923126E+003,0.3997017096163358E+003,0.0000000000000000E+000,0.7996275355716811E+002,0.0000000000000000E+000,0.1247308611160521E+003,0.3999223048102766E+003 +0.6100000000000016E-006,0.4987800000000001E+021,0.3498780000000001E+022,0.0000000000000000E+000,0.2000000000000000E+017,0.1000000000000000E+017,0.1300000000000000E+018,0.3997720000000001E+022,0.4015691830691047E+003,0.3997027397631568E+003,0.0000000000000000E+000,0.5484644944583644E+002,0.0000000000000000E+000,0.1210934277158481E+003,0.3999238235880296E+003 +0.6200000000000018E-006,0.4987800000000001E+021,0.3498780000000001E+022,0.0000000000000000E+000,0.2000000000000000E+017,0.1000000000000000E+017,0.1300000000000000E+018,0.3997720000000001E+022,0.4015706595927224E+003,0.3997028609605015E+003,0.0000000000000000E+000,0.5484644944583644E+002,0.0000000000000000E+000,0.1210934277158481E+003,0.3999241138793196E+003 +0.6300000000000020E-006,0.4987900000000001E+021,0.3498790000000001E+022,0.0000000000000000E+000,0.2000000000000000E+017,0.1000000000000000E+017,0.1200000000000000E+018,0.3997730000000001E+022,0.4015700847679662E+003,0.3997026301600868E+003,0.0000000000000000E+000,0.5484644944583644E+002,0.0000000000000000E+000,0.1038156029768982E+003,0.3999240225729528E+003 +0.6400000000000022E-006,0.4987900000000001E+021,0.3498820000000000E+022,0.0000000000000000E+000,0.2000000000000000E+017,0.1000000000000000E+017,0.1100000000000000E+018,0.3997750000000000E+022,0.4015683230003954E+003,0.3997017998203984E+003,0.0000000000000000E+000,0.5484644944583644E+002,0.0000000000000000E+000,0.9865342774325059E+002,0.3999236730368369E+003 +0.6500000000000025E-006,0.4987900000000001E+021,0.3498840000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.1100000000000000E+018,0.3997760000000000E+022,0.4015686229469309E+003,0.3997033943621479E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.9865342774325059E+002,0.3999258308769935E+003 +0.6600000000000027E-006,0.4987900000000001E+021,0.3498840000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.1100000000000000E+018,0.3997760000000000E+022,0.4015674324827239E+003,0.3997033433904665E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.9865342774325059E+002,0.3999256377354843E+003 +0.6700000000000029E-006,0.4987900000000001E+021,0.3498840000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.1100000000000000E+018,0.3997760000000000E+022,0.4015645450274034E+003,0.3997037276924250E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.9865342774325059E+002,0.3999256138163959E+003 +0.6800000000000031E-006,0.4987900000000001E+021,0.3498840000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.1100000000000000E+018,0.3997760000000000E+022,0.4015632903787516E+003,0.3997028606972908E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.9865342774325059E+002,0.3999246984829450E+003 +0.6900000000000033E-006,0.4987900000000001E+021,0.3498900000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.9000000000000002E+017,0.3997800000000000E+022,0.4015638381851721E+003,0.3997007500641221E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.8629469168964103E+002,0.3999241452223700E+003 +0.7000000000000036E-006,0.4988000000000001E+021,0.3498910000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.8000000000000002E+017,0.3997810000000000E+022,0.4015627854079762E+003,0.3997009799986742E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.7342703744443673E+002,0.3999247456611633E+003 +0.7100000000000038E-006,0.4988000000000001E+021,0.3498910000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.8000000000000002E+017,0.3997810000000000E+022,0.4015565244970903E+003,0.3997009939654252E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.7342703744443673E+002,0.3999239767216826E+003 +0.7200000000000040E-006,0.4988000000000001E+021,0.3498910000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.8000000000000002E+017,0.3997810000000000E+022,0.4015584012713742E+003,0.3997010130546682E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.7342703744443673E+002,0.3999242275906724E+003 +0.7300000000000042E-006,0.4988000000000001E+021,0.3498910000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.8000000000000002E+017,0.3997810000000000E+022,0.4015610119649302E+003,0.3997012143363181E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.7342703744443673E+002,0.3999247294855406E+003 +0.7400000000000045E-006,0.4988100000000001E+021,0.3498920000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.7000000000000001E+017,0.3997820000000000E+022,0.4015553583631056E+003,0.3997025057517753E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.8009719426911023E+002,0.3999260913532128E+003 +0.7500000000000047E-006,0.4988100000000001E+021,0.3498950000000001E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.6000000000000001E+017,0.3997840000000001E+022,0.4015560361924525E+003,0.3997042853566588E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.5486907498263967E+002,0.3999281531542876E+003 +0.7600000000000049E-006,0.4988100000000001E+021,0.3498980000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.5000000000000001E+017,0.3997860000000000E+022,0.4015516389643415E+003,0.3997046231959403E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.5206110801134380E+002,0.3999287265080155E+003 +0.7700000000000051E-006,0.4988100000000001E+021,0.3498980000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.5000000000000001E+017,0.3997860000000000E+022,0.4015545802017618E+003,0.3997046886263278E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.5206110801134380E+002,0.3999291507495485E+003 +0.7800000000000053E-006,0.4988100000000001E+021,0.3498980000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.5000000000000001E+017,0.3997860000000000E+022,0.4015572197522027E+003,0.3997044318408649E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.5206110801134380E+002,0.3999292553422446E+003 +0.7900000000000056E-006,0.4988100000000001E+021,0.3498980000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.5000000000000001E+017,0.3997860000000000E+022,0.4015532378763298E+003,0.3997045729497456E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.5206110801134381E+002,0.3999288820269327E+003 +0.8000000000000058E-006,0.4988100000000001E+021,0.3498980000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.5000000000000001E+017,0.3997860000000000E+022,0.4015551995958488E+003,0.3997044806298508E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.5206110801134381E+002,0.3999290459896148E+003 +0.8100000000000060E-006,0.4988100000000001E+021,0.3498980000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.5000000000000001E+017,0.3997860000000000E+022,0.4015560605203196E+003,0.3997046148494298E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.5206110801134381E+002,0.3999292708772690E+003 +0.8200000000000062E-006,0.4988100000000001E+021,0.3498980000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.5000000000000001E+017,0.3997860000000000E+022,0.4015549855244485E+003,0.3997045794382282E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.5206110801134381E+002,0.3999291057584865E+003 +0.8300000000000065E-006,0.4988100000000001E+021,0.3498980000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.5000000000000001E+017,0.3997860000000000E+022,0.4015553925055403E+003,0.3997046041680842E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.5206110801134381E+002,0.3999291781811099E+003 +0.8400000000000067E-006,0.4988100000000001E+021,0.3498980000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.5000000000000001E+017,0.3997860000000000E+022,0.4015546956727492E+003,0.3997046809053775E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.5206110801134381E+002,0.3999291583992992E+003 +0.8500000000000069E-006,0.4988100000000001E+021,0.3498980000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.5000000000000001E+017,0.3997860000000000E+022,0.4015550006818137E+003,0.3997046536046784E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.5206110801134381E+002,0.3999291725611187E+003 +0.8600000000000071E-006,0.4988100000000001E+021,0.3498980000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.5000000000000001E+017,0.3997860000000000E+022,0.4015516363679578E+003,0.3997044213815432E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.5206110801134381E+002,0.3999285495534346E+003 +0.8700000000000073E-006,0.4988100000000001E+021,0.3498980000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.5000000000000001E+017,0.3997860000000000E+022,0.4015539259205214E+003,0.3997041960716193E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.5206110801134381E+002,0.3999286380249659E+003 +0.8800000000000076E-006,0.4988100000000001E+021,0.3498980000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.5000000000000001E+017,0.3997860000000000E+022,0.4015539623679396E+003,0.3997045070187453E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.5206110801134381E+002,0.3999289147175243E+003 +0.8900000000000078E-006,0.4988100000000001E+021,0.3498980000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.5000000000000001E+017,0.3997860000000000E+022,0.4015562719126685E+003,0.3997044048798965E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.5206110801134381E+002,0.3999291134844188E+003 +0.9000000000000080E-006,0.4988100000000001E+021,0.3498980000000000E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.5000000000000001E+017,0.3997860000000000E+022,0.4015605951150608E+003,0.3997045152291509E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.5206110801134381E+002,0.3999297494662740E+003 +0.9100000000000082E-006,0.4988100000000001E+021,0.3499010000000001E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.4000000000000001E+017,0.3997880000000001E+022,0.4015624706767683E+003,0.3997043708307917E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2939775127899108E+002,0.3999304987866015E+003 +0.9200000000000084E-006,0.4988100000000001E+021,0.3499010000000001E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.4000000000000001E+017,0.3997880000000001E+022,0.4015620735191411E+003,0.3997037023308313E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2939775127899108E+002,0.3999298641516843E+003 +0.9300000000000087E-006,0.4988100000000001E+021,0.3499010000000001E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.4000000000000001E+017,0.3997880000000001E+022,0.4015618591868827E+003,0.3997034812771522E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2939775127899108E+002,0.3999296439399453E+003 +0.9400000000000089E-006,0.4988100000000001E+021,0.3499010000000001E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.4000000000000001E+017,0.3997880000000001E+022,0.4015576524690753E+003,0.3997039724194947E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2939775127899108E+002,0.3999295489293543E+003 +0.9500000000000091E-006,0.4988100000000001E+021,0.3499010000000001E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.4000000000000001E+017,0.3997880000000001E+022,0.4015557597485524E+003,0.3997036786558844E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2939775127899108E+002,0.3999290556704935E+003 +0.9600000000000090E-006,0.4988100000000001E+021,0.3499010000000001E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.4000000000000001E+017,0.3997880000000001E+022,0.4015561658482008E+003,0.3997038685981813E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2939775127899108E+002,0.3999292725795958E+003 +0.9700000000000087E-006,0.4988100000000001E+021,0.3499010000000001E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.4000000000000001E+017,0.3997880000000001E+022,0.4015542292620985E+003,0.3997041846842100E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2939775127899108E+002,0.3999293075980710E+003 +0.9800000000000084E-006,0.4988100000000001E+021,0.3499010000000001E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.4000000000000001E+017,0.3997880000000001E+022,0.4015564449045320E+003,0.3997043149741930E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2939775127899108E+002,0.3999296980726614E+003 +0.9900000000000081E-006,0.4988100000000001E+021,0.3499010000000001E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.4000000000000001E+017,0.3997880000000001E+022,0.4015570039869594E+003,0.3997046916928407E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2939775127899108E+002,0.3999300975389339E+003 +0.1000000000000000E-005,0.4988100000000001E+021,0.3499040000000001E+022,0.0000000000000000E+000,0.1000000000000000E+017,0.1000000000000000E+017,0.3000000000000000E+017,0.3997900000000000E+022,0.4015551349158889E+003,0.3997044663625852E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1714082320157654E+002,0.3999305002760026E+003 diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/analyze.ini b/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/analyze.ini new file mode 100644 index 000000000..2b5ab1fe9 --- /dev/null +++ b/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/analyze.ini @@ -0,0 +1,6 @@ +! compare columns in a data file +compare_column_file = PartAnalyze.csv ! data file name +compare_column_reference_file = PartAnalyze_ref.csv ! reference data file name +compare_column_index = 1,2 ! Comparison of number density of H2 and H +compare_column_tolerance_value = 5e-2 ! tolerance +compare_column_tolerance_type = relative ! absolute or relative comparison \ No newline at end of file diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/command_line.ini b/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/command_line.ini new file mode 100644 index 000000000..38746030f --- /dev/null +++ b/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/command_line.ini @@ -0,0 +1 @@ +MPI=3,6 \ No newline at end of file diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/externals.ini b/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/externals.ini new file mode 100644 index 000000000..6706ecfad --- /dev/null +++ b/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/externals.ini @@ -0,0 +1,5 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre \ No newline at end of file diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/hopr.ini b/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/hopr.ini new file mode 100644 index 000000000..9616d3f61 --- /dev/null +++ b/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/hopr.ini @@ -0,0 +1,39 @@ +ProjectName = cube +Debugvisu = T +DebugVisuLevel=2 +NVisu =1 +Mode =1 + +DEFVAR = (REAL): minus_x = 0.0 +DEFVAR = (REAL): plus_x = 1.0 + +DEFVAR = (REAL): minus_y = 0.0 +DEFVAR = (REAL): plus_y = 1.0 + +DEFVAR = (REAL): minus_z = 0.0 +DEFVAR = (REAL): plus_z = 1.0 + +Corner =(/minus_x,minus_y,minus_z ,, plus_x,minus_y,minus_z ,, plus_x,plus_y,minus_z ,, minus_x,plus_y,minus_z ,, minus_x,minus_y,plus_z ,, plus_x,minus_y,plus_z ,, plus_x,plus_y,plus_z ,, minus_x,plus_y,plus_z /) +nElems =(/5,5,5/) +elemtype =108 + +BCIndex =(/6 ,4 ,1 ,3 ,2 ,5/) +! =(/z-,y-,x+,y+,x-,z+/) +nZones = 1 +nUserDefinedBoundaries=6 +BoundaryName=BC_Xplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Xminus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Yplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Yminus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zminus +BoundaryType=(/4,0,0,0/) + +postscalemesh=true +meshscale=1e-3 +jacobiantolerance=1e-16 \ No newline at end of file diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/parameter.ini b/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/parameter.ini new file mode 100644 index 000000000..c124e0e52 --- /dev/null +++ b/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/parameter.ini @@ -0,0 +1,292 @@ +! =============================================================================== ! +! POSTI +! =============================================================================== ! +VisuParticles = T +NVisu = 1 +TimeStampLength = 16 +! =============================================================================== ! +! VARIABLES +! =============================================================================== ! +CFLscale = 0.2 +IniExactFunc = 0 +N = 1 +NAnalyze = 1 +! =============================================================================== ! +! MESH +! =============================================================================== ! +ProjectName = H2_Plasma_SurfProb_Test +MeshFile = cube_mesh.h5 +Logging = F +useCurveds = F +TrackingMethod = triatracking +! =============================================================================== ! +! PART ANALYZE +! =============================================================================== ! +Part-AnalyzeStep = 5 +CalcNumDens = T +CalcNumSpec = F +CalcTemp = T +CalcKineticEnergy = F +! =============================================================================== ! +! CALCULATION +! =============================================================================== ! +tend = 1.0E-6 +Analyze_dt = 1.0E-6 +ManualTimeStep = 2.0E-9 +IterDisplayStep = 50 + +! =============================================================================== ! +! LOAD BALANCE +! =============================================================================== ! +DoLoadBalance = T +PartWeightLoadBalance = T + +! Initial load balance +DoInitialAutoRestart = T +InitialAutoRestart-PartWeightLoadBalance = T +LoadBalanceMaxSteps = 1 +Load-DeviationThreshold = 1E-9 +! =============================================================================== ! +! DSMC +! =============================================================================== ! +UseDSMC = T +! Collisions are disabled +Particles-DSMC-CollisMode = 0 + +Part-NumberOfRandomSeeds = 2 +Particles-RandomSeed1 = 1 +Particles-RandomSeed2 = 2 +Particles-HaloEpsVelo = 3E5 +! =============================================================================== ! +! BOUNDARIES +! =============================================================================== ! +Part-nBounds = 6 +Part-Boundary1-SourceName = BC_Xplus +Part-Boundary1-Condition = reflective +Part-Boundary1-WallTemp = 300. +Part-Boundary1-MomentumACC = 0. +Part-Boundary1-TransACC = 1. +Part-Boundary2-SourceName = BC_Xminus +Part-Boundary2-Condition = reflective +Part-Boundary2-WallTemp = 300. +Part-Boundary2-MomentumACC = 0. +Part-Boundary2-TransACC = 1. +Part-Boundary3-SourceName = BC_Yplus +Part-Boundary3-Condition = reflective +Part-Boundary3-WallTemp = 300. +Part-Boundary3-MomentumACC = 0. +Part-Boundary3-TransACC = 1. +Part-Boundary4-SourceName = BC_Yminus +Part-Boundary4-Condition = reflective +Part-Boundary4-WallTemp = 300. +Part-Boundary4-MomentumACC = 0. +Part-Boundary4-TransACC = 1. +Part-Boundary5-SourceName = BC_Zplus +Part-Boundary5-Condition = reflective +Part-Boundary5-WallTemp = 300. +Part-Boundary5-MomentumACC = 0. +Part-Boundary5-TransACC = 1. +Part-Boundary6-SourceName = BC_Zminus +Part-Boundary6-Condition = reflective +Part-Boundary6-WallTemp = 300. +Part-Boundary6-MomentumACC = 0. +Part-Boundary6-TransACC = 1. +Part-FIBGMdeltas = (/2E-4,2E-4,2E-4/) +! =============================================================================== ! +! SURFACE CHEMISTRY +! =============================================================================== ! +Surface-NumOfReactions = 7 + +! H -> H2 (recombination at the wall) +Surface-Reaction1-Type = P +Surface-Reaction1-Reactants = (/2,0/) +Surface-Reaction1-Products = (/0,0,0/) +Surface-Reaction1-NumOfBoundaries = 6 +Surface-Reaction1-Boundaries = (/1,2,3,4,5,6/) +Surface-Reaction1-EventProbability = 0.0 + +! HIon -> H +Surface-Reaction2-Type = P +Surface-Reaction2-Reactants = (/5,0/) +Surface-Reaction2-Products = (/2,0,0/) +Surface-Reaction2-NumOfBoundaries = 6 +Surface-Reaction2-Boundaries = (/1,2,3,4,5,6/) +Surface-Reaction2-EventProbability = 0.5 +! HIon -> 0.5H2 +Surface-Reaction3-Type = P +Surface-Reaction3-Reactants = (/5,0/) +Surface-Reaction3-Products = (/0,0,0/) +Surface-Reaction3-NumOfBoundaries = 6 +Surface-Reaction3-Boundaries = (/1,2,3,4,5,6/) +Surface-Reaction3-EventProbability = 0.5 + +! H2Ion -> H2 +Surface-Reaction4-Type = P +Surface-Reaction4-Reactants = (/4,0/) +Surface-Reaction4-Products = (/0,0,0/) +Surface-Reaction4-NumOfBoundaries = 6 +Surface-Reaction4-Boundaries = (/1,2,3,4,5,6/) +Surface-Reaction4-EventProbability = 0.5 +Surface-Reaction4-ProductAccommodation = 1. +! H2Ion -> H + H +Surface-Reaction5-Type = P +Surface-Reaction5-Reactants = (/4,0/) +Surface-Reaction5-Products = (/2,2,0/) +Surface-Reaction5-NumOfBoundaries = 6 +Surface-Reaction5-Boundaries = (/1,2,3,4,5,6/) +Surface-Reaction5-EventProbability = 0.5 +Surface-Reaction5-ProductAccommodation = 1. + +! H3Ion -> H2 + H +Surface-Reaction6-Type = P +Surface-Reaction6-Reactants = (/6,0/) +Surface-Reaction6-Products = (/2,1,0/) +Surface-Reaction6-NumOfBoundaries = 6 +Surface-Reaction6-Boundaries = (/1,2,3,4,5,6/) +Surface-Reaction6-EventProbability = 0.5 +Surface-Reaction6-ProductAccommodation = 1. +! H3Ion -> 3H +Surface-Reaction7-Type = P +Surface-Reaction7-Reactants = (/6,0/) +Surface-Reaction7-Products = (/2,2,2/) +Surface-Reaction7-NumOfBoundaries = 6 +Surface-Reaction7-Boundaries = (/1,2,3,4,5,6/) +Surface-Reaction7-EventProbability = 0.5 +Surface-Reaction7-ProductAccommodation = 1. +! =============================================================================== ! +! SPECIES +! =============================================================================== ! +Part-nSpecies=6 +! =============================================================================== ! +! Weighting Factor +! =============================================================================== ! +Part-Species$-MacroParticleFactor = 1E8 +! =============================================================================== ! +! Species1 | H2 +! =============================================================================== ! +Part-Species1-MassIC = 3.34800E-27 +Part-Species1-ChargeIC = 0.0 +! =============================================================================== ! +! Species2 | H +! =============================================================================== ! +Part-Species2-MassIC = 1.67400E-27 +Part-Species2-ChargeIC = 0.0 + +Part-Species2-nInits = 0 +Part-Species2-Init1-velocityDistribution = maxwell_lpn +Part-Species2-Init1-SpaceIC = cell_local +Part-Species2-Init1-VeloIC = 0. +Part-Species2-Init1-PartDensity = 1E21 +Part-Species2-Init1-VeloVecIC = (/0.,1.,0./) +Part-Species2-Init1-MWTemperatureIC = 50000. +! =============================================================================== ! +! Species3 | e +! =============================================================================== ! +Part-Species3-MassIC = 9.11E-31 +Part-Species3-ChargeIC = -1.60217653E-19 +! =============================================================================== ! +! Species4 | H2Ion +! =============================================================================== ! +Part-Species4-MassIC = 3.3470890E-27 +Part-Species4-ChargeIC = 1.60217653E-19 + +Part-Species4-nInits = 1 +Part-Species4-Init1-velocityDistribution = maxwell_lpn +Part-Species4-Init1-SpaceIC = cell_local +Part-Species4-Init1-VeloIC = 0. +Part-Species4-Init1-PartDensity = 1E21 +Part-Species4-Init1-VeloVecIC = (/0.,1.,0./) +Part-Species4-Init1-MWTemperatureIC = 50000. +Part-Species4-Init1-TempVib = 50000. +Part-Species4-Init1-TempRot = 50000. +! =============================================================================== ! +! Species5 | HIon +! =============================================================================== ! +Part-Species5-MassIC = 1.6730890E-27 +Part-Species5-ChargeIC = 1.60217653E-19 + +Part-Species5-nInits = 1 +Part-Species5-Init1-velocityDistribution = maxwell_lpn +Part-Species5-Init1-SpaceIC = cell_local +Part-Species5-Init1-VeloIC = 0. +Part-Species5-Init1-PartDensity = 1E21 +Part-Species5-Init1-VeloVecIC = (/0.,1.,0./) +Part-Species5-Init1-MWTemperatureIC = 50000. +! =============================================================================== ! +! Species6 | H3Ion +! =============================================================================== ! +Part-Species6-MassIC = 5.0210890E-27 +Part-Species6-ChargeIC = 1.60217653E-19 + +Part-Species6-nInits = 1 +Part-Species6-Init1-velocityDistribution = maxwell_lpn +Part-Species6-Init1-SpaceIC = cell_local +Part-Species6-Init1-VeloIC = 0. +Part-Species6-Init1-PartDensity = 1E21 +Part-Species6-Init1-VeloVecIC = (/0.,1.,0./) +Part-Species6-Init1-MWTemperatureIC = 50000. +Part-Species6-Init1-TempVib = 50000. +Part-Species6-Init1-TempRot = 50000. + +! =============================================================================== ! +! Species1, H2 +! =============================================================================== ! +Part-Species1-SpeciesName = H2 +Part-Species1-InteractionID = 2 +Part-Species1-Tref = 1000 +Part-Species1-dref = 2.68E-10 +Part-Species1-omega = 0.407 +Part-Species1-HeatOfFormation_K = 0.0 +Part-Species1-CharaTempVib = 6332.37 +Part-Species1-Ediss_eV = 4.47 +! =============================================================================== ! +! Species2, H +! =============================================================================== ! +Part-Species2-SpeciesName = H +Part-Species2-InteractionID = 1 +Part-Species2-Tref = 1000 +Part-Species2-dref = 2.581E-10 +Part-Species2-omega = 0.407 +Part-Species2-HeatOfFormation_K = 26159.76 +! =============================================================================== ! +! Species3, e +! =============================================================================== ! +Part-Species3-SpeciesName = electron +Part-Species3-InteractionID = 4 +Part-Species3-Tref = 1000 +Part-Species3-dref = 2.817920E-15 +Part-Species3-omega = 0.407 +! =============================================================================== ! +! Species4, H2Ion +! =============================================================================== ! +Part-Species4-SpeciesName = H2Ion1 +Part-Species4-InteractionID = 20 +Part-Species4-Tref = 1000 +Part-Species4-dref = 3.883E-10 +Part-Species4-omega = 0.407 +Part-Species4-CharaTempVib = 3341.01 +Part-Species4-Ediss_eV = 2.65 +! =============================================================================== ! +! Species5, HIon +! =============================================================================== ! +Part-Species5-SpeciesName = HIon1 +Part-Species5-InteractionID = 10 +Part-Species5-Tref = 1000 +Part-Species5-dref = 3.912E-10 +Part-Species5-omega = 0.407 +! =============================================================================== ! +! Species6, H3Ion +! =============================================================================== ! +Part-Species6-SpeciesName = H3Ion1 +Part-Species6-InteractionID = 20 +Part-Species6-PolyatomicMol = T +Part-Species6-NumOfAtoms = 3 +Part-Species6-LinearMolec = F +Part-Species6-Tref = 1000 +Part-Species6-dref = 4.5E-10 ! Guess +Part-Species6-omega = 0.407 +Part-Species6-CharaTempVib1 = 4572.92 +Part-Species6-CharaTempVib2 = 3627.94 +Part-Species6-CharaTempVib3 = 3627.94 +Part-Species6-Ediss_eV = 4.51 +Part-Species6-HeatOfFormation_K = 132803.52 diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/readme.md b/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/readme.md new file mode 100644 index 000000000..444786a14 --- /dev/null +++ b/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/readme.md @@ -0,0 +1,5 @@ +# Probability-based surface reaction modelling +* Initial insertion of H+, H2+, and H3+, surface chemistry leads to either H2 or H +* No collisions between species, specular reflection at the wall (unless ProductAccommodation has been defined or greater 0 per reaction) +* Target number density of H2 and H should not exceed 0.5E21 and 3.5E21 respectively as a result of the surface reactions, while every other species drops to zero +* Comparing number density of H2 and H with reference file (generated at MPF=1E7) diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index 7879fbb91..eb49b1229 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -114,7 +114,10 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() USE MOD_SurfaceModel_Vars ,ONLY: SurfChem, SurfChemReac, DoChemSurface ! USE MOD_Particle_Surfaces_Vars USE MOD_io_hdf5 -USE MOD_HDF5_input, ONLY:ReadAttribute, DatasetExists, AttributeExists +USE MOD_HDF5_input ,ONLY:ReadAttribute, DatasetExists, AttributeExists +#if USE_LOADBALANCE +USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance +#endif /*USE_LOADBALANCE*/ ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -136,7 +139,7 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() IF(SurfChem%NumOfReact.LE.0) RETURN ReadInNumOfReact = SurfChem%NumOfReact -SWRITE(*,*) '| Number of considered reaction paths on Surfaces: ', SurfChem%NumOfReact +LBWRITE(*,*) '| Number of considered reaction paths on Surfaces: ', SurfChem%NumOfReact !---------------------------------------------------------------------------------------------------------------------------------- ALLOCATE(SurfChemReac(ReadInNumOfReact)) ! Surface map From 7c0ea8672f80838f464f030f31309b628eb210ff Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Sun, 17 Dec 2023 11:57:53 +0100 Subject: [PATCH 127/222] Add probability model to CalcBoundaryParticleOutput --- src/particles/surfacemodel/surfacemodel_analyze.f90 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/particles/surfacemodel/surfacemodel_analyze.f90 b/src/particles/surfacemodel/surfacemodel_analyze.f90 index 5210b01c6..f4f622641 100644 --- a/src/particles/surfacemodel/surfacemodel_analyze.f90 +++ b/src/particles/surfacemodel/surfacemodel_analyze.f90 @@ -860,6 +860,8 @@ SUBROUTINE InitBoundaryParticleOutput() ELSE ! Check the surface model SELECT CASE(PartBound%SurfaceModel(iPartBound)) + CASE(2) + ! Event probability model CASE(SEE_MODELS_ID) ! all secondary electron models CASE DEFAULT From 0ae7ce4ffb2ec0390da7d546ab432ea21a92c5b6 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Thu, 21 Dec 2023 18:06:30 +0100 Subject: [PATCH 128/222] Additional regression test for probability based surface chemistry, testing different probabilities --- REGGIE.md | 27 +-- .../PartAnalyze_000_ref.csv | 22 +++ .../PartAnalyze_025_ref.csv | 22 +++ .../PartAnalyze_050_ref.csv | 22 +++ .../PartAnalyze_075_ref.csv | 22 +++ .../PartAnalyze_100_ref.csv | 22 +++ .../SURF_PROB_DifferentProbs/analyze.ini | 4 + .../command_line.ini | 0 .../externals.ini | 0 .../hopr.ini | 0 .../SURF_PROB_DifferentProbs/parameter.ini | 154 ++++++++++++++++++ .../SURF_PROB_DifferentProbs/readme.md | 4 + .../PartAnalyze_ref.csv | 0 .../analyze.ini | 0 .../SURF_PROB_MultiReac/command_line.ini | 1 + .../SURF_PROB_MultiReac/externals.ini | 5 + .../NIG_DSMC/SURF_PROB_MultiReac/hopr.ini | 39 +++++ .../parameter.ini | 0 .../readme.md | 0 19 files changed, 331 insertions(+), 13 deletions(-) create mode 100644 regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_000_ref.csv create mode 100644 regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_025_ref.csv create mode 100644 regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_050_ref.csv create mode 100644 regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_075_ref.csv create mode 100644 regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_100_ref.csv create mode 100644 regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/analyze.ini rename regressioncheck/NIG_DSMC/{SURF_PROB_H2_Plasma => SURF_PROB_DifferentProbs}/command_line.ini (100%) rename regressioncheck/NIG_DSMC/{SURF_PROB_H2_Plasma => SURF_PROB_DifferentProbs}/externals.ini (100%) rename regressioncheck/NIG_DSMC/{SURF_PROB_H2_Plasma => SURF_PROB_DifferentProbs}/hopr.ini (100%) create mode 100644 regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/parameter.ini create mode 100644 regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/readme.md rename regressioncheck/NIG_DSMC/{SURF_PROB_H2_Plasma => SURF_PROB_MultiReac}/PartAnalyze_ref.csv (100%) rename regressioncheck/NIG_DSMC/{SURF_PROB_H2_Plasma => SURF_PROB_MultiReac}/analyze.ini (100%) create mode 100644 regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/command_line.ini create mode 100644 regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/externals.ini create mode 100644 regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/hopr.ini rename regressioncheck/NIG_DSMC/{SURF_PROB_H2_Plasma => SURF_PROB_MultiReac}/parameter.ini (100%) rename regressioncheck/NIG_DSMC/{SURF_PROB_H2_Plasma => SURF_PROB_MultiReac}/readme.md (100%) diff --git a/REGGIE.md b/REGGIE.md index 88559fab8..3f42faa5f 100644 --- a/REGGIE.md +++ b/REGGIE.md @@ -197,18 +197,19 @@ Convergence tests (temporally by varying the time step) for integrating the path Testing more complex DSMC routines: [Link CMAKE-CONFIG](regressioncheck/NIG_DSMC/builds.ini). -| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | -| :-----: | :--------------------------: | :--------------: | :-----------------------------------------------: | :----------------: | :---------------------------------------------------------------: | :---------------------------------------------------------------------: | -| 1 | 2D_VTS_Distribution | Release | | nProcs=1,2,4 | h5diff ElemTimeStep | [Link](regressioncheck/NIG_DSMC/2D_VTS_Distribution/readme.md) | -| 2 | Ambipolar_Diffusion | Release | | nProcs=6 | PartAnalyze.csv | [Link](regressioncheck/NIG_DSMC/Ambipolar_Diffusion/readme.md) | -| 3 | Macroscopic_Restart | Release | | nProcs=6 | PartAnalyze.csv | [Link](regressioncheck/NIG_DSMC/Macroscopic_Restart/readme.md) | -| | MCC_BGG_Elec_XSec_Sampling | Release | Cell-local sampling of electronic excitation rate | nProcs=2,5 | ExcitationData in DSMCState | [Link](regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/readme.md) | -| 4 | RotPeriodicBC | Release | One rot-periodic BC angle | nProcs=1,2,7,15,25 | h5 bounds check PartData and PartAnalyze.csv | [Link](regressioncheck/NIG_DSMC/RotPeriodicBC/readme.md) | -| 5 | RotPeriodicBCMulti | Release | Multiple rot-periodic BC angles and interplane | nProcs=1,2,7,15,25 | h5 bounds check PartData, PartAnalyze.csv, and min/max of rot BCs | [Link](regressioncheck/NIG_DSMC/RotPeriodicBCMulti/readme.md) | -| 5 | RotPeriodicBCMultiInterPlane | Release | (same as RotPeriodicBCMulti) | nProcs=1,2,7,15,25 | position of interplanes | [Link](regressioncheck/NIG_DSMC/RotPeriodicBCMultiInterPlane/readme.md) | -| 5 | SURF_PROB_H2_Plasma | Release | Probability-based surface chemistry model | nProcs=3,6 | Number density of product species | [Link](regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/readme.md) | -| 6 | VirtualCellMerge | Release | Merge cells for collision operator | nProcs=4 | DSMCState: Number density with absolute value | [Link](regressioncheck/NIG_DSMC/VirtualCellMerge/readme.md) | -| 7 | VSS_VHS_SelfDiffusion | Release + Debug | Testing the VHS/VSS collision model | nProcs=6 | Number Density | [Link](regressioncheck/NIG_DSMC/VSS_VHS_SelfDiffusion/readme.md) | +| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | +| :-----: | :--------------------------: | :--------------: | :----------------------------------------------------------------: | :----------------: | :---------------------------------------------------------------: | :---------------------------------------------------------------------: | +| 1 | 2D_VTS_Distribution | Release | | nProcs=1,2,4 | h5diff ElemTimeStep | [Link](regressioncheck/NIG_DSMC/2D_VTS_Distribution/readme.md) | +| 2 | Ambipolar_Diffusion | Release | | nProcs=6 | PartAnalyze.csv | [Link](regressioncheck/NIG_DSMC/Ambipolar_Diffusion/readme.md) | +| 3 | Macroscopic_Restart | Release | | nProcs=6 | PartAnalyze.csv | [Link](regressioncheck/NIG_DSMC/Macroscopic_Restart/readme.md) | +| | MCC_BGG_Elec_XSec_Sampling | Release | Cell-local sampling of electronic excitation rate | nProcs=2,5 | ExcitationData in DSMCState | [Link](regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/readme.md) | +| 4 | RotPeriodicBC | Release | One rot-periodic BC angle | nProcs=1,2,7,15,25 | h5 bounds check PartData and PartAnalyze.csv | [Link](regressioncheck/NIG_DSMC/RotPeriodicBC/readme.md) | +| 5 | RotPeriodicBCMulti | Release | Multiple rot-periodic BC angles and interplane | nProcs=1,2,7,15,25 | h5 bounds check PartData, PartAnalyze.csv, and min/max of rot BCs | [Link](regressioncheck/NIG_DSMC/RotPeriodicBCMulti/readme.md) | +| 5 | RotPeriodicBCMultiInterPlane | Release | (same as RotPeriodicBCMulti) | nProcs=1,2,7,15,25 | position of interplanes | [Link](regressioncheck/NIG_DSMC/RotPeriodicBCMultiInterPlane/readme.md) | +| 5 | SURF_PROB_DifferentProbs | Release | Probability-based surface chemistry model: Different probabilities | nProcs=3,6 | Number density of product species | [Link](regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/readme.md) | +| 5 | SURF_PROB_MultiReac | Release | Probability-based surface chemistry model: Multiple reactions | nProcs=3,6 | Number density of product species | [Link](regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/readme.md) | +| 6 | VirtualCellMerge | Release | Merge cells for collision operator | nProcs=4 | DSMCState: Number density with absolute value | [Link](regressioncheck/NIG_DSMC/VirtualCellMerge/readme.md) | +| 7 | VSS_VHS_SelfDiffusion | Release + Debug | Testing the VHS/VSS collision model | nProcs=6 | Number Density | [Link](regressioncheck/NIG_DSMC/VSS_VHS_SelfDiffusion/readme.md) | ### NIG_Dielectric @@ -437,7 +438,7 @@ Overview of the test cases performed every week. | ** | BGG_MultiSpec_XSec_Elec | ** | Background gas reservoir with VHS: Electronic excitation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/BGG_MultiSpec_XSec_Elec/readme.md) | | ** | MCC_N2_XSec_Elec | ** | Regular reservoir with MCC/VHS: Electronic excitation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/MCC_N2_XSec_Elec/readme.md) | | ** | 1D_Sod_Shocktube | [DSMC](regressioncheck/WEK_DSMC/builds.ini) | 1D test case shock tube | nProcs=6 | DSMCState | [Link](regressioncheck/WEK_Reservoir/1D_Sod_Shocktube/readme.md) | -| 4 | 2DAxi_ChannelFlow_ConstPressure_TruncAverage | ** | 2D axisymmetric: Pressure gradient driven pipe flow with adaptive surface flux, using a truncated running average | nProcs=6 | PartAnalyze: Average pressure and mass flow rate at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/readme.md) | +| 4 | 2DAxi_ChannelFlow_ConstPressure_TruncAverage | ** | 2D axisymmetric: Pressure gradient driven pipe flow with adaptive surface flux, using a truncated running average | nProcs=6 | PartAnalyze: Average pressure and mass flow rate at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/readme.md) | | 4 | ChannelFlow_AdaptiveBoundary_ConstMassflow | ** | Constant massflow driven channel flow with adaptive surface flux | nProcs=6 | PartAnalyze: Average pressure and mass flow rate at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/readme.md) | | 4 | ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage | ** | Pressure gradient driven channel flow with adaptive surface flux, using a fixed average for the sampling | nProcs=6 | PartAnalyze: Average pressure at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/readme.md) | | 4 | ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation | ** | Pressure gradient driven channel flow with adaptive surface flux, using a relaxation factor for the sampling | nProcs=6 | PartAnalyze: Average pressure at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/readme.md) | diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_000_ref.csv b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_000_ref.csv new file mode 100644 index 000000000..472cf84fc --- /dev/null +++ b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_000_ref.csv @@ -0,0 +1,22 @@ +001-TIME,002-NumDens-Spec-001,003-NumDens-Spec-002,004-NumDens-Spec-003 +0.0000000000000000E+000,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.5000000000000000E-008,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.1000000000000000E-007,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.1500000000000001E-007,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.2000000000000000E-007,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.2500000000000000E-007,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.2999999999999999E-007,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.3500000000000000E-007,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.4000000000000001E-007,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.4500000000000003E-007,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.5000000000000004E-007,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.5500000000000005E-007,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.6000000000000006E-007,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.6500000000000004E-007,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.7000000000000002E-007,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.7500000000000000E-007,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.7999999999999998E-007,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.8499999999999995E-007,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.8999999999999993E-007,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.9499999999999991E-007,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.1000000000000000E-006,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_025_ref.csv b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_025_ref.csv new file mode 100644 index 000000000..7652f6dfc --- /dev/null +++ b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_025_ref.csv @@ -0,0 +1,22 @@ +001-TIME,002-NumDens-Spec-001,003-NumDens-Spec-002,004-NumDens-Spec-003 +0.0000000000000000E+000,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.5000000000000000E-008,0.6130000000000016E+020,0.9387000000000025E+021,0.1000000000000003E+022 +0.1000000000000000E-007,0.1193900000000003E+021,0.8806100000000023E+021,0.1000000000000003E+022 +0.1500000000000001E-007,0.1735700000000005E+021,0.8264300000000022E+021,0.1000000000000003E+022 +0.2000000000000000E-007,0.2245300000000006E+021,0.7754700000000020E+021,0.1000000000000003E+022 +0.2500000000000000E-007,0.2726500000000007E+021,0.7273500000000019E+021,0.1000000000000003E+022 +0.2999999999999999E-007,0.3191100000000009E+021,0.6808900000000018E+021,0.1000000000000003E+022 +0.3500000000000000E-007,0.3616900000000009E+021,0.6383100000000016E+021,0.1000000000000003E+022 +0.4000000000000001E-007,0.4013600000000010E+021,0.5986400000000016E+021,0.1000000000000003E+022 +0.4500000000000003E-007,0.4373700000000012E+021,0.5626300000000015E+021,0.1000000000000003E+022 +0.5000000000000004E-007,0.4710600000000012E+021,0.5289400000000014E+021,0.1000000000000003E+022 +0.5500000000000005E-007,0.5025500000000013E+021,0.4974500000000013E+021,0.1000000000000003E+022 +0.6000000000000006E-007,0.5319900000000014E+021,0.4680100000000012E+021,0.1000000000000003E+022 +0.6500000000000004E-007,0.5592700000000014E+021,0.4407300000000012E+021,0.1000000000000003E+022 +0.7000000000000002E-007,0.5841600000000015E+021,0.4158400000000011E+021,0.1000000000000003E+022 +0.7500000000000000E-007,0.6076400000000016E+021,0.3923600000000010E+021,0.1000000000000003E+022 +0.7999999999999998E-007,0.6290300000000016E+021,0.3709700000000010E+021,0.1000000000000003E+022 +0.8499999999999995E-007,0.6501100000000018E+021,0.3498900000000009E+021,0.1000000000000003E+022 +0.8999999999999993E-007,0.6687600000000017E+021,0.3312400000000009E+021,0.1000000000000003E+022 +0.9499999999999991E-007,0.6862500000000018E+021,0.3137500000000009E+021,0.1000000000000003E+022 +0.1000000000000000E-006,0.7033300000000019E+021,0.2966700000000008E+021,0.1000000000000003E+022 diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_050_ref.csv b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_050_ref.csv new file mode 100644 index 000000000..57065d4dd --- /dev/null +++ b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_050_ref.csv @@ -0,0 +1,22 @@ +001-TIME,002-NumDens-Spec-001,003-NumDens-Spec-002,004-NumDens-Spec-003 +0.0000000000000000E+000,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.5000000000000000E-008,0.1175900000000003E+021,0.8824100000000023E+021,0.1000000000000003E+022 +0.1000000000000000E-007,0.2249000000000006E+021,0.7751000000000021E+021,0.1000000000000003E+022 +0.1500000000000001E-007,0.3213200000000009E+021,0.6786800000000018E+021,0.1000000000000003E+022 +0.2000000000000000E-007,0.4098200000000010E+021,0.5901800000000016E+021,0.1000000000000003E+022 +0.2500000000000000E-007,0.4861900000000012E+021,0.5138100000000014E+021,0.1000000000000003E+022 +0.2999999999999999E-007,0.5531000000000014E+021,0.4469000000000012E+021,0.1000000000000003E+022 +0.3500000000000000E-007,0.6107500000000016E+021,0.3892500000000010E+021,0.1000000000000003E+022 +0.4000000000000001E-007,0.6595700000000018E+021,0.3404300000000009E+021,0.1000000000000003E+022 +0.4500000000000003E-007,0.7014600000000018E+021,0.2985400000000008E+021,0.1000000000000003E+022 +0.5000000000000004E-007,0.7374700000000019E+021,0.2625300000000007E+021,0.1000000000000003E+022 +0.5500000000000005E-007,0.7676600000000020E+021,0.2323400000000006E+021,0.1000000000000003E+022 +0.6000000000000006E-007,0.7938300000000020E+021,0.2061700000000006E+021,0.1000000000000003E+022 +0.6500000000000004E-007,0.8168500000000022E+021,0.1831500000000005E+021,0.1000000000000003E+022 +0.7000000000000002E-007,0.8355900000000022E+021,0.1644100000000004E+021,0.1000000000000003E+022 +0.7500000000000000E-007,0.8529800000000022E+021,0.1470200000000004E+021,0.1000000000000003E+022 +0.7999999999999998E-007,0.8678300000000023E+021,0.1321700000000003E+021,0.1000000000000003E+022 +0.8499999999999995E-007,0.8799900000000023E+021,0.1200100000000003E+021,0.1000000000000003E+022 +0.8999999999999993E-007,0.8915200000000024E+021,0.1084800000000003E+021,0.1000000000000003E+022 +0.9499999999999991E-007,0.9019900000000024E+021,0.9801000000000026E+020,0.1000000000000003E+022 +0.1000000000000000E-006,0.9116100000000024E+021,0.8839000000000023E+020,0.1000000000000003E+022 diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_075_ref.csv b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_075_ref.csv new file mode 100644 index 000000000..4863f00a8 --- /dev/null +++ b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_075_ref.csv @@ -0,0 +1,22 @@ +001-TIME,002-NumDens-Spec-001,003-NumDens-Spec-002,004-NumDens-Spec-003 +0.0000000000000000E+000,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.5000000000000000E-008,0.1734600000000005E+021,0.8265400000000022E+021,0.1000000000000003E+022 +0.1000000000000000E-007,0.3242900000000009E+021,0.6757100000000018E+021,0.1000000000000003E+022 +0.1500000000000001E-007,0.4548700000000012E+021,0.5451300000000014E+021,0.1000000000000003E+022 +0.2000000000000000E-007,0.5643300000000015E+021,0.4356700000000011E+021,0.1000000000000003E+022 +0.2500000000000000E-007,0.6554300000000018E+021,0.3445700000000009E+021,0.1000000000000003E+022 +0.2999999999999999E-007,0.7261600000000020E+021,0.2738400000000007E+021,0.1000000000000003E+022 +0.3500000000000000E-007,0.7811200000000021E+021,0.2188800000000006E+021,0.1000000000000003E+022 +0.4000000000000001E-007,0.8230300000000022E+021,0.1769700000000005E+021,0.1000000000000003E+022 +0.4500000000000003E-007,0.8562500000000023E+021,0.1437500000000004E+021,0.1000000000000003E+022 +0.5000000000000004E-007,0.8815400000000024E+021,0.1184600000000003E+021,0.1000000000000003E+022 +0.5500000000000005E-007,0.9011100000000024E+021,0.9889000000000026E+020,0.1000000000000003E+022 +0.6000000000000006E-007,0.9171100000000024E+021,0.8289000000000021E+020,0.1000000000000003E+022 +0.6500000000000004E-007,0.9294300000000024E+021,0.7057000000000019E+020,0.1000000000000003E+022 +0.7000000000000002E-007,0.9400100000000024E+021,0.5999000000000016E+020,0.1000000000000003E+022 +0.7500000000000000E-007,0.9490500000000026E+021,0.5095000000000013E+020,0.1000000000000003E+022 +0.7999999999999998E-007,0.9560700000000026E+021,0.4393000000000011E+020,0.1000000000000003E+022 +0.8499999999999995E-007,0.9620300000000026E+021,0.3797000000000010E+020,0.1000000000000003E+022 +0.8999999999999993E-007,0.9670400000000025E+021,0.3296000000000009E+020,0.1000000000000003E+022 +0.9499999999999991E-007,0.9713000000000025E+021,0.2870000000000007E+020,0.1000000000000003E+022 +0.1000000000000000E-006,0.9749900000000026E+021,0.2501000000000007E+020,0.1000000000000003E+022 diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_100_ref.csv b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_100_ref.csv new file mode 100644 index 000000000..ea8c50be7 --- /dev/null +++ b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/PartAnalyze_100_ref.csv @@ -0,0 +1,22 @@ +001-TIME,002-NumDens-Spec-001,003-NumDens-Spec-002,004-NumDens-Spec-003 +0.0000000000000000E+000,0.0000000000000000E+000,0.1000000000000003E+022,0.1000000000000003E+022 +0.5000000000000000E-008,0.2256300000000006E+021,0.7743700000000020E+021,0.1000000000000003E+022 +0.1000000000000000E-007,0.4141600000000011E+021,0.5858400000000015E+021,0.1000000000000003E+022 +0.1500000000000001E-007,0.5669900000000015E+021,0.4330100000000011E+021,0.1000000000000003E+022 +0.2000000000000000E-007,0.6877700000000018E+021,0.3122300000000009E+021,0.1000000000000003E+022 +0.2500000000000000E-007,0.7790400000000021E+021,0.2209600000000006E+021,0.1000000000000003E+022 +0.2999999999999999E-007,0.8433900000000022E+021,0.1566100000000004E+021,0.1000000000000003E+022 +0.3500000000000000E-007,0.8867500000000023E+021,0.1132500000000003E+021,0.1000000000000003E+022 +0.4000000000000001E-007,0.9165000000000024E+021,0.8350000000000021E+020,0.1000000000000003E+022 +0.4500000000000003E-007,0.9372200000000025E+021,0.6278000000000016E+020,0.1000000000000003E+022 +0.5000000000000004E-007,0.9521400000000025E+021,0.4786000000000012E+020,0.1000000000000003E+022 +0.5500000000000005E-007,0.9630400000000025E+021,0.3696000000000010E+020,0.1000000000000003E+022 +0.6000000000000006E-007,0.9707600000000025E+021,0.2924000000000008E+020,0.1000000000000003E+022 +0.6500000000000004E-007,0.9762600000000026E+021,0.2374000000000006E+020,0.1000000000000003E+022 +0.7000000000000002E-007,0.9804300000000026E+021,0.1957000000000005E+020,0.1000000000000003E+022 +0.7500000000000000E-007,0.9838200000000026E+021,0.1618000000000004E+020,0.1000000000000003E+022 +0.7999999999999998E-007,0.9865400000000026E+021,0.1346000000000003E+020,0.1000000000000003E+022 +0.8499999999999995E-007,0.9887800000000026E+021,0.1122000000000003E+020,0.1000000000000003E+022 +0.8999999999999993E-007,0.9906100000000026E+021,0.9390000000000025E+019,0.1000000000000003E+022 +0.9499999999999991E-007,0.9920900000000026E+021,0.7910000000000020E+019,0.1000000000000003E+022 +0.1000000000000000E-006,0.9931500000000026E+021,0.6850000000000018E+019,0.1000000000000003E+022 diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/analyze.ini b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/analyze.ini new file mode 100644 index 000000000..fbf3d948c --- /dev/null +++ b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/analyze.ini @@ -0,0 +1,4 @@ +compare_data_file_name = PartAnalyze.csv +compare_data_file_reference = PartAnalyze_000_ref.csv, PartAnalyze_025_ref.csv,PartAnalyze_050_ref.csv, PartAnalyze_075_ref.csv, PartAnalyze_100_ref.csv +compare_data_file_tolerance = 0.1 +compare_data_file_tolerance_type = relative \ No newline at end of file diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/command_line.ini b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/command_line.ini similarity index 100% rename from regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/command_line.ini rename to regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/command_line.ini diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/externals.ini b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/externals.ini similarity index 100% rename from regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/externals.ini rename to regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/externals.ini diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/hopr.ini b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/hopr.ini similarity index 100% rename from regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/hopr.ini rename to regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/hopr.ini diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/parameter.ini b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/parameter.ini new file mode 100644 index 000000000..34aa44ea0 --- /dev/null +++ b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/parameter.ini @@ -0,0 +1,154 @@ +! =============================================================================== ! +! POSTI +! =============================================================================== ! +VisuParticles = T +NVisu = 1 +TimeStampLength = 16 +! =============================================================================== ! +! VARIABLES +! =============================================================================== ! +CFLscale = 0.2 +IniExactFunc = 0 +N = 1 +NAnalyze = 1 +! =============================================================================== ! +! MESH +! =============================================================================== ! +ProjectName = H2_Plasma_SurfProb_Test +MeshFile = cube_mesh.h5 +Logging = F +useCurveds = F +TrackingMethod = triatracking +! =============================================================================== ! +! PART ANALYZE +! =============================================================================== ! +Part-AnalyzeStep = 5 +CalcNumDens = T +CalcNumSpec = F +CalcTemp = F +CalcKineticEnergy = F +! =============================================================================== ! +! CALCULATION +! =============================================================================== ! +tend = 1.0E-7 +Analyze_dt = 1.0E-7 +ManualTimeStep = 1.0E-9 +IterDisplayStep = 10 + +! =============================================================================== ! +! LOAD BALANCE +! =============================================================================== ! +DoLoadBalance = T +PartWeightLoadBalance = T + +! Initial load balance +DoInitialAutoRestart = T +InitialAutoRestart-PartWeightLoadBalance = T +LoadBalanceMaxSteps = 1 +Load-DeviationThreshold = 1E-9 +! =============================================================================== ! +! DSMC +! =============================================================================== ! +UseDSMC = T +! Collisions are disabled +Particles-DSMC-CollisMode = 0 + +Part-NumberOfRandomSeeds = 2 +Particles-RandomSeed1 = 1 +Particles-RandomSeed2 = 2 +Particles-HaloEpsVelo = 3E5 +! =============================================================================== ! +! BOUNDARIES +! =============================================================================== ! +Part-nBounds = 6 +Part-Boundary1-SourceName = BC_Xplus +Part-Boundary1-Condition = reflective +Part-Boundary1-WallTemp = 300. +Part-Boundary1-MomentumACC = 0. +Part-Boundary1-TransACC = 1. +Part-Boundary2-SourceName = BC_Xminus +Part-Boundary2-Condition = reflective +Part-Boundary2-WallTemp = 300. +Part-Boundary2-MomentumACC = 0. +Part-Boundary2-TransACC = 1. +Part-Boundary3-SourceName = BC_Yplus +Part-Boundary3-Condition = reflective +Part-Boundary3-WallTemp = 300. +Part-Boundary3-MomentumACC = 0. +Part-Boundary3-TransACC = 1. +Part-Boundary4-SourceName = BC_Yminus +Part-Boundary4-Condition = reflective +Part-Boundary4-WallTemp = 300. +Part-Boundary4-MomentumACC = 0. +Part-Boundary4-TransACC = 1. +Part-Boundary5-SourceName = BC_Zplus +Part-Boundary5-Condition = reflective +Part-Boundary5-WallTemp = 300. +Part-Boundary5-MomentumACC = 0. +Part-Boundary5-TransACC = 1. +Part-Boundary6-SourceName = BC_Zminus +Part-Boundary6-Condition = reflective +Part-Boundary6-WallTemp = 300. +Part-Boundary6-MomentumACC = 0. +Part-Boundary6-TransACC = 1. +Part-FIBGMdeltas = (/2E-4,2E-4,2E-4/) +! =============================================================================== ! +! SURFACE CHEMISTRY +! =============================================================================== ! +Surface-NumOfReactions = 1 + +! H -> H2 (recombination at the wall) +Surface-Reaction1-Type = P +Surface-Reaction1-Reactants = (/2,0/) +Surface-Reaction1-Products = (/1,0,0/) +Surface-Reaction1-NumOfBoundaries = 6 +Surface-Reaction1-Boundaries = (/1,2,3,4,5,6/) +Surface-Reaction1-EventProbability = 0.0,0.25,0.5,0.75,1.0 + +! =============================================================================== ! +! SPECIES +! =============================================================================== ! +Part-nSpecies=2 +! =============================================================================== ! +! Weighting Factor +! =============================================================================== ! +Part-Species$-MacroParticleFactor = 1E7 +! =============================================================================== ! +! Species1 | H2 +! =============================================================================== ! +Part-Species1-MassIC = 3.34800E-27 +Part-Species1-ChargeIC = 0.0 +! =============================================================================== ! +! Species2 | H +! =============================================================================== ! +Part-Species2-MassIC = 1.67400E-27 +Part-Species2-ChargeIC = 0.0 + +Part-Species2-nInits = 1 +Part-Species2-Init1-velocityDistribution = maxwell_lpn +Part-Species2-Init1-SpaceIC = cell_local +Part-Species2-Init1-VeloIC = 0. +Part-Species2-Init1-PartDensity = 1E21 +Part-Species2-Init1-VeloVecIC = (/0.,1.,0./) +Part-Species2-Init1-MWTemperatureIC = 50000. + +! =============================================================================== ! +! Species1, H2 +! =============================================================================== ! +Part-Species1-SpeciesName = H2 +Part-Species1-InteractionID = 2 +Part-Species1-Tref = 1000 +Part-Species1-dref = 2.68E-10 +Part-Species1-omega = 0.407 +Part-Species1-HeatOfFormation_K = 0.0 +Part-Species1-CharaTempVib = 6332.37 +Part-Species1-Ediss_eV = 4.47 +! =============================================================================== ! +! Species2, H +! =============================================================================== ! +Part-Species2-SpeciesName = H +Part-Species2-InteractionID = 1 +Part-Species2-Tref = 1000 +Part-Species2-dref = 2.581E-10 +Part-Species2-omega = 0.407 +Part-Species2-HeatOfFormation_K = 26159.76 \ No newline at end of file diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/readme.md b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/readme.md new file mode 100644 index 000000000..8826bc5cd --- /dev/null +++ b/regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs/readme.md @@ -0,0 +1,4 @@ +# Probability-based surface reaction modelling +* Initial insertion of H, recombination to H2 at the surface +* No collisions between species, specular reflection at the wall +* Comparing number density of H2 and H with reference file (generated at MPF=1E7) diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/PartAnalyze_ref.csv b/regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/PartAnalyze_ref.csv similarity index 100% rename from regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/PartAnalyze_ref.csv rename to regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/PartAnalyze_ref.csv diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/analyze.ini b/regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/analyze.ini similarity index 100% rename from regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/analyze.ini rename to regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/analyze.ini diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/command_line.ini b/regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/command_line.ini new file mode 100644 index 000000000..38746030f --- /dev/null +++ b/regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/command_line.ini @@ -0,0 +1 @@ +MPI=3,6 \ No newline at end of file diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/externals.ini b/regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/externals.ini new file mode 100644 index 000000000..6706ecfad --- /dev/null +++ b/regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/externals.ini @@ -0,0 +1,5 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre \ No newline at end of file diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/hopr.ini b/regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/hopr.ini new file mode 100644 index 000000000..9616d3f61 --- /dev/null +++ b/regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/hopr.ini @@ -0,0 +1,39 @@ +ProjectName = cube +Debugvisu = T +DebugVisuLevel=2 +NVisu =1 +Mode =1 + +DEFVAR = (REAL): minus_x = 0.0 +DEFVAR = (REAL): plus_x = 1.0 + +DEFVAR = (REAL): minus_y = 0.0 +DEFVAR = (REAL): plus_y = 1.0 + +DEFVAR = (REAL): minus_z = 0.0 +DEFVAR = (REAL): plus_z = 1.0 + +Corner =(/minus_x,minus_y,minus_z ,, plus_x,minus_y,minus_z ,, plus_x,plus_y,minus_z ,, minus_x,plus_y,minus_z ,, minus_x,minus_y,plus_z ,, plus_x,minus_y,plus_z ,, plus_x,plus_y,plus_z ,, minus_x,plus_y,plus_z /) +nElems =(/5,5,5/) +elemtype =108 + +BCIndex =(/6 ,4 ,1 ,3 ,2 ,5/) +! =(/z-,y-,x+,y+,x-,z+/) +nZones = 1 +nUserDefinedBoundaries=6 +BoundaryName=BC_Xplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Xminus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Yplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Yminus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zminus +BoundaryType=(/4,0,0,0/) + +postscalemesh=true +meshscale=1e-3 +jacobiantolerance=1e-16 \ No newline at end of file diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/parameter.ini b/regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/parameter.ini similarity index 100% rename from regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/parameter.ini rename to regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/parameter.ini diff --git a/regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/readme.md b/regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/readme.md similarity index 100% rename from regressioncheck/NIG_DSMC/SURF_PROB_H2_Plasma/readme.md rename to regressioncheck/NIG_DSMC/SURF_PROB_MultiReac/readme.md From d14d7c88db9f7eb14a32d0c9123da31f4a32d06a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Sat, 23 Dec 2023 17:09:26 +0100 Subject: [PATCH 129/222] DSMC_QualityFactor now Reservoir simulation and calculate MaxMCSoverMFP not only in macroscopic Output Case --- .../DSMC_QualityFactors/PartAnalyze_ref.csv | 6 ++-- .../DSMC_QualityFactors/parameter.ini | 7 ++-- .../CHE_DSMC/DSMC_QualityFactors/readme.md | 2 +- src/particles/dsmc/dsmc_bg_gas.f90 | 33 +++++++++---------- src/particles/dsmc/dsmc_particle_pairing.f90 | 32 +++++++++--------- src/particles/mcc/mcc.f90 | 33 +++++++++---------- 6 files changed, 53 insertions(+), 60 deletions(-) diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv index 66064a0fb..d8993b8a4 100644 --- a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-NumDens-Spec-001,003-TempTra-001,004-TempVib001,005-XiVibMean001,006-TempRot001,007-TempTotal001,008-ResolvedTimestep,009-Pmax,010-MeanFreePath,011-MaxMCSoverMFP,012-ResolvedCellPercentage -0.0000000000000000E+000,0.1000000000000000E+023,0.5000769421287198E+004,0.4948975354726982E+004,0.1575887951139208E+001,0.4996259759961257E+004,0.4986985584220915E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-007,0.1000000000000000E+023,0.5003185373708683E+004,0.4949437828908193E+004,0.1575924331939683E+001,0.4992329660714551E+004,0.4987003087500717E+004,0.1000000000000000E+003,0.1040428012026279E+000,0.2977138906706071E-003,0.1238874440834628E-003,0.1000000000000000E+003 +001-TIME,002-NumDens-Spec-001,003-TempTra-001,004-TempVib001,005-XiVibMean001,006-TempRot001,007-TempTotal001,008-Pmean,009-Pmax,010-MeanFreePath,011-MaxMCSoverMFP,012-ResolvedCellPercentage +0,1E+022,5000.7694212872,4948.97535472698,1.57588795113921,4996.25975996126,4986.98558422092,0,0,0,0,0 +0.00000001,1E+022,5003.18537370868,4949.43782890819,1.57592433193968,4992.32966071455,4987.00308750072,0.6100164229169058E-001,0.104042801202628,0.000297713890670607,0.000123887444083463,0.1000000000000000E+003 diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/parameter.ini b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/parameter.ini index 5f0881bba..0c1de9f1c 100644 --- a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/parameter.ini +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/parameter.ini @@ -18,8 +18,8 @@ TrackingMethod = triatracking ! OUTPUT / VISUALIZATION ! =============================================================================== ! ProjectName = DSMC_QualityFactors -IterDisplayStep = 100 -Part-AnalyzeStep = 100 +IterDisplayStep = 1 +Part-AnalyzeStep = 1 CalcNumDens = T CalcTemp = T ! =============================================================================== ! @@ -71,12 +71,13 @@ Particles-NumberForDSMCOutputs=1 Part-TimeFracForSampling=1 Particles-DSMC-CalcSurfaceVal=F UseDSMC=true +Particles-DSMCReservoirSim=true Particles-DSMC-CollisMode=2 !(1:elast coll, 2: elast + rela, 3:chem) Part-NumberOfRandomSeeds=2 Particles-RandomSeed1=1 Particles-RandomSeed2=2 Particles-DSMC-UseOctree = F -Particles-DSMC-UseNearestNeighbour = T +Particles-DSMC-UseNearestNeighbour = F Particles-OctreePartNumNode=80 Particles-OctreePartNumNodeMin=50 Particles-DSMC-CalcQualityFactors=T \ No newline at end of file diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md index 118d57386..919309782 100644 --- a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md @@ -3,5 +3,5 @@ * Comparing with the theoretical values from gas kinetic theory * Mean collision probability is expected to be 0.06105 (chosen time step divided by the mean collision time, which is mean free path over average thermal velocity) * Mean free path is expected to be 2.98E-04 meters (Variable hard sphere model) - * Mean collision separation distance over mean free path (only in DSMCState) is 0.0001199, compared to the approximated value of 0.0001558, which assumes that the particles are distributed equidistantly in the cell. The difference is due to a 20% lower mean collision separation distance compared to the equidistant distribution (most likely due to nearest neighbour routine) + * Mean collision separation distance over mean free path (only in DSMCState) is 0.0001199, compared to the approximated value of 0.0001558, which assumes that the particles are distributed equidistantly in the cell. The difference is due to a 20% lower mean collision separation distance compared to the equidistant distribution. diff --git a/src/particles/dsmc/dsmc_bg_gas.f90 b/src/particles/dsmc/dsmc_bg_gas.f90 index 57610001c..7dc75e473 100644 --- a/src/particles/dsmc/dsmc_bg_gas.f90 +++ b/src/particles/dsmc/dsmc_bg_gas.f90 @@ -372,12 +372,11 @@ SUBROUTINE DSMC_pairing_bggas(iElem) USE MOD_DSMC_Analyze ,ONLY: CalcGammaVib, CalcMeanFreePath USE MOD_part_tools ,ONLY: GetParticleWeight USE MOD_DSMC_Vars ,ONLY: Coll_pData, CollInf, BGGas, CollisMode, ChemReac, PartStateIntEn, DSMC, SelectionProc -USE MOD_Particle_Vars ,ONLY: PEM,PartSpecies,nSpecies,PartState,Species,usevMPF,Species, WriteMacroVolumeValues +USE MOD_Particle_Vars ,ONLY: PEM,PartSpecies,nSpecies,PartState,Species,usevMPF,Species USE MOD_Particle_Mesh_Vars ,ONLY: ElemVolume_Shared USE MOD_Mesh_Vars ,ONLY: offsetElem USE MOD_DSMC_Collis ,ONLY: DSMC_perform_collision USE MOD_DSMC_Relaxation ,ONLY: FinalizeCalcVibRelaxProb, SumVibRelaxProb, InitCalcVibRelaxProb -USE MOD_TimeDisc_Vars ,ONLY: TEnd, time USE MOD_DSMC_CollisionProb ,ONLY: DSMC_prob_calc USE MOD_DSMC_Relaxation ,ONLY: CalcMeanVibQuaDiatomic USE MOD_Mesh_Tools ,ONLY: GetCNElemID @@ -507,25 +506,23 @@ SUBROUTINE DSMC_pairing_bggas(iElem) IF(DSMC%CalcQualityFactors) THEN ! Calculation of Mean Collision Probability IF(DSMC%CollProbMeanCount.GT.0) DSMC%CollProbMean = DSMC%CollProbSum / DSMC%CollProbMeanCount - IF((Time.GE.(1-DSMC%TimeFracSamp)*TEnd).OR.WriteMacroVolumeValues) THEN - ! Calculation of the mean free path - DSMC%MeanFreePath = CalcMeanFreePath(REAL(CollInf%Coll_SpecPartNum),SUM(CollInf%Coll_SpecPartNum), & + ! Calculation of the mean free path + DSMC%MeanFreePath = CalcMeanFreePath(REAL(CollInf%Coll_SpecPartNum),SUM(CollInf%Coll_SpecPartNum), & ElemVolume_Shared(GetCNElemID(iElem+offSetElem)), DSMC%InstantTransTemp(nSpecies+1)) - ! Determination of the MCS/MFP for the case without octree - IF((DSMC%CollSepCount.GT.0.0).AND.(DSMC%MeanFreePath.GT.0.0)) DSMC%MCSoverMFP = (DSMC%CollSepDist/DSMC%CollSepCount) & + ! Determination of the MCS/MFP for the case without octree + IF((DSMC%CollSepCount.GT.0.0).AND.(DSMC%MeanFreePath.GT.0.0)) DSMC%MCSoverMFP = (DSMC%CollSepDist/DSMC%CollSepCount) & / DSMC%MeanFreePath - ! Calculation of the maximum MCS/MFP of all cells for this processor and number of resolved Cells for this processor - IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP - ! Calculate number of resolved Cells for this processor - DSMC%ParticleCalcCollCounter = DSMC%ParticleCalcCollCounter + 1 ! Counts Particle Collision Calculation - IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & + ! Calculation of the maximum MCS/MFP of all cells for this processor and number of resolved Cells for this processor + IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP + ! Calculate number of resolved Cells for this processor + DSMC%ParticleCalcCollCounter = DSMC%ParticleCalcCollCounter + 1 ! Counts Particle Collision Calculation + IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & DSMC%ResolvedCellCounter + 1 - ! Calculation of ResolvedTimestep. Number of Cells with ResolvedTimestep - IF (.NOT.DSMC%ReservoirSimu) THEN - ! In case of a reservoir simulation, MeanCollProb is the ouput in PartAnalyze - ! Otherwise it is the ResolvedTimestep - IF ( DSMC%CollProbMean .LE. 1) DSMC%ResolvedTimestepCounter = DSMC%ResolvedTimestepCounter + 1 - END IF + ! Calculation of ResolvedTimestep. Number of Cells with ResolvedTimestep + IF ((.NOT.DSMC%ReservoirSimu) .AND. (DSMC%CollProbMean .LE. 1)) THEN + ! In case of a reservoir simulation, MeanCollProb is the ouput in PartAnalyze + ! Otherwise it is the ResolvedTimestep + DSMC%ResolvedTimestepCounter = DSMC%ResolvedTimestepCounter + 1 END IF END IF DEALLOCATE(Coll_pData) diff --git a/src/particles/dsmc/dsmc_particle_pairing.f90 b/src/particles/dsmc/dsmc_particle_pairing.f90 index 42664ecdb..747d05385 100644 --- a/src/particles/dsmc/dsmc_particle_pairing.f90 +++ b/src/particles/dsmc/dsmc_particle_pairing.f90 @@ -442,8 +442,7 @@ SUBROUTINE PerformPairingAndCollision(iPartIndx_Node, PartNum, iElem, NodeVolume USE MOD_DSMC_Vars ,ONLY: Coll_pData,CollInf,CollisMode,PartStateIntEn,ChemReac,DSMC,RadialWeighting USE MOD_DSMC_Vars ,ONLY: SelectionProc, useRelaxProbCorrFactor, iPartIndx_NodeNewElecRelax, newElecRelaxParts USE MOD_DSMC_Vars ,ONLY: iPartIndx_NodeElecRelaxChem,nElecRelaxChemParts -USE MOD_Particle_Vars ,ONLY: PartSpecies, nSpecies, PartState, WriteMacroVolumeValues, UseVarTimeStep, Symmetry, usevMPF -USE MOD_TimeDisc_Vars ,ONLY: TEnd, time +USE MOD_Particle_Vars ,ONLY: PartSpecies, nSpecies, PartState, UseVarTimeStep, Symmetry, usevMPF USE MOD_DSMC_Analyze ,ONLY: CalcGammaVib, CalcInstantTransTemp, CalcMeanFreePath, CalcInstantElecTempXi USE MOD_part_tools ,ONLY: GetParticleWeight USE MOD_DSMC_Relaxation ,ONLY: CalcMeanVibQuaDiatomic,SumVibRelaxProb @@ -613,24 +612,23 @@ SUBROUTINE PerformPairingAndCollision(iPartIndx_Node, PartNum, iElem, NodeVolume IF(DSMC%CalcQualityFactors) THEN ! Calculation of Mean Collision Probability IF(DSMC%CollProbMeanCount.GT.0) DSMC%CollProbMean = DSMC%CollProbSum / DSMC%CollProbMeanCount - IF((Time.GE.(1-DSMC%TimeFracSamp)*TEnd).OR.WriteMacroVolumeValues) THEN - ! Calculation of the mean free path with VHS model and the current translational temperature in the cell - DSMC%MeanFreePath = CalcMeanFreePath(REAL(CollInf%Coll_SpecPartNum), REAL(SUM(CollInf%Coll_SpecPartNum)), NodeVolume, & + ! Calculation of the mean free path with VHS model and the current translational temperature in the cell + DSMC%MeanFreePath = CalcMeanFreePath(REAL(CollInf%Coll_SpecPartNum), REAL(SUM(CollInf%Coll_SpecPartNum)), NodeVolume, & DSMC%InstantTransTemp(nSpecies+1)) - IF((DSMC%CollSepCount.GT.0).AND.(DSMC%MeanFreePath.GT.0.0)) DSMC%MCSoverMFP = & + IF((DSMC%CollSepCount.GT.0).AND.(DSMC%MeanFreePath.GT.0.0)) DSMC%MCSoverMFP = & MAX(DSMC%MCSoverMFP,(DSMC%CollSepDist/DSMC%CollSepCount)/DSMC%MeanFreePath) - ! Calculation of the maximum MCS/MFP of all cells for this processor and number of resolved Cells for this processor - IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP - ! Calculate number of resolved Cells for this processor - DSMC%ParticleCalcCollCounter = DSMC%ParticleCalcCollCounter + 1 ! Counts Particle Collision Calculation - IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & + ! Calculation of the maximum MCS/MFP of all cells for this processor and number of resolved Cells for this processor + WRITE(*,*) "DSMC%MCSoverMFP:", DSMC%MCSoverMFP + IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP + ! Calculate number of resolved Cells for this processor + DSMC%ParticleCalcCollCounter = DSMC%ParticleCalcCollCounter + 1 ! Counts Particle Collision Calculation + IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & DSMC%ResolvedCellCounter + 1 - ! Calculation of ResolvedTimestep. Number of Cells with ResolvedTimestep - IF (.NOT.DSMC%ReservoirSimu) THEN - ! In case of a reservoir simulation, MeanCollProb is the ouput in PartAnalyze - ! Otherwise its the ResolvedTimestep - IF ( DSMC%CollProbMean .LE. 1) DSMC%ResolvedTimestepCounter = DSMC%ResolvedTimestepCounter + 1 - END IF + ! Calculation of ResolvedTimestep. Number of Cells with ResolvedTimestep + IF ((.NOT.DSMC%ReservoirSimu) .AND. (DSMC%CollProbMean .LE. 1)) THEN + ! In case of a reservoir simulation, MeanCollProb is the ouput in PartAnalyze + ! Otherwise its the ResolvedTimestep + DSMC%ResolvedTimestepCounter = DSMC%ResolvedTimestepCounter + 1 END IF END IF diff --git a/src/particles/mcc/mcc.f90 b/src/particles/mcc/mcc.f90 index 62783ae19..5c779b02f 100644 --- a/src/particles/mcc/mcc.f90 +++ b/src/particles/mcc/mcc.f90 @@ -57,8 +57,7 @@ SUBROUTINE MonteCarloCollision(iElem) USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod USE MOD_Mesh_Vars ,ONLY: offSetElem USE MOD_Particle_Mesh_Vars ,ONLY: ElemVolume_Shared -USE MOD_Particle_Vars ,ONLY: WriteMacroVolumeValues -USE MOD_TimeDisc_Vars ,ONLY: dt, TEnd, time +USE MOD_TimeDisc_Vars ,ONLY: dt USE MOD_DSMC_Vars ,ONLY: newAmbiParts, iPartIndx_NodeNewAmbi ! ROUTINES USE MOD_DSMC_Analyze ,ONLY: CalcMeanFreePath @@ -577,25 +576,23 @@ SUBROUTINE MonteCarloCollision(iElem) IF(DSMC%CalcQualityFactors) THEN ! Calculation of Mean Collision Probability IF(DSMC%CollProbMeanCount.GT.0) DSMC%CollProbMean = DSMC%CollProbSum / DSMC%CollProbMeanCount - IF((Time.GE.(1-DSMC%TimeFracSamp)*TEnd).OR.WriteMacroVolumeValues) THEN - ! Calculation of the mean free path - DSMC%MeanFreePath = CalcMeanFreePath(REAL(CollInf%Coll_SpecPartNum),SUM(CollInf%Coll_SpecPartNum), & + ! Calculation of the mean free path + DSMC%MeanFreePath = CalcMeanFreePath(REAL(CollInf%Coll_SpecPartNum),SUM(CollInf%Coll_SpecPartNum), & ElemVolume_Shared(CNElemID), DSMC%InstantTransTemp(nSpecies+1)) - ! Determination of the MCS/MFP for the case without octree - IF((DSMC%CollSepCount.GT.0.0).AND.(DSMC%MeanFreePath.GT.0.0)) DSMC%MCSoverMFP = (DSMC%CollSepDist/DSMC%CollSepCount) & + ! Determination of the MCS/MFP for the case without octree + IF((DSMC%CollSepCount.GT.0.0).AND.(DSMC%MeanFreePath.GT.0.0)) DSMC%MCSoverMFP = (DSMC%CollSepDist/DSMC%CollSepCount) & / DSMC%MeanFreePath - ! Calculation of the maximum MCS/MFP of all cells for this processor - IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP - ! Calculate number of resolved Cells for this processor - DSMC%ParticleCalcCollCounter = DSMC%ParticleCalcCollCounter + 1 ! Counts Particle Collision Calculation - IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & + ! Calculation of the maximum MCS/MFP of all cells for this processor + IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP + ! Calculate number of resolved Cells for this processor + DSMC%ParticleCalcCollCounter = DSMC%ParticleCalcCollCounter + 1 ! Counts Particle Collision Calculation + IF( (DSMC%MCSoverMFP .LE. 1) .AND. (DSMC%CollProbMax .LE. 1) .AND. (DSMC%CollProbMean .LE. 1)) DSMC%ResolvedCellCounter = & DSMC%ResolvedCellCounter + 1 - ! Calculation of ResolvedTimestep. Number of Cells with ResolvedTimestep - IF (.NOT.DSMC%ReservoirSimu) THEN - ! In case of a reservoir simulation, MeanCollProb is the ouput in PartAnalyze - ! Otherwise its the ResolvedTimestep - IF ( DSMC%CollProbMean .LE. 1) DSMC%ResolvedTimestepCounter = DSMC%ResolvedTimestepCounter + 1 - END IF + ! Calculation of ResolvedTimestep. Number of Cells with ResolvedTimestep + IF ((.NOT.DSMC%ReservoirSimu) .AND. (DSMC%CollProbMean .LE. 1)) THEN + ! In case of a reservoir simulation, MeanCollProb is the ouput in PartAnalyze + ! Otherwise its the ResolvedTimestep + DSMC%ResolvedTimestepCounter = DSMC%ResolvedTimestepCounter + 1 END IF END IF From 87a36788af0da417928a377632602ff42409d19b Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Wed, 10 Jan 2024 17:03:55 +0100 Subject: [PATCH 130/222] First version documentation and PartAnalyze_ref --- .../features-and-models/BC-particle-solver.md | 85 +++++++++++++++++++ .../CAT_RATES_ER/PartAnalyze_ref.csv | 12 +++ .../CAT_RATES_LH/PartAnalyze_ref.csv | 12 +++ 3 files changed, 109 insertions(+) create mode 100644 regressioncheck/NIG_Reservoir/CAT_RATES_ER/PartAnalyze_ref.csv create mode 100644 regressioncheck/NIG_Reservoir/CAT_RATES_LH/PartAnalyze_ref.csv diff --git a/docs/documentation/userguide/features-and-models/BC-particle-solver.md b/docs/documentation/userguide/features-and-models/BC-particle-solver.md index 48c620cac..e28d0d154 100644 --- a/docs/documentation/userguide/features-and-models/BC-particle-solver.md +++ b/docs/documentation/userguide/features-and-models/BC-particle-solver.md @@ -216,6 +216,8 @@ Modelling of reactive surfaces is enabled by setting `Part-BoundaryX-Condition=r appropriate particle boundary surface model `Part-BoundaryX-SurfaceModel`. The available conditions (`Part-BoundaryX-SurfaceModel=`) are described in the table below. +TODO: Update to fit and include the catalytic model! + | Model | Description | | :---------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 0 (default) | Standard extended Maxwellian scattering | @@ -339,6 +341,89 @@ An energy-dependent model (linear and power fit of measured SEE yields) of secon quartz (SiO$_{2}$) surface as described in Ref. {cite}`Zeng2020` originating from {cite}`Dunaevsky2003` is activated via `Part-BoundaryX-SurfaceModel=11`. For more details, see the original publications. +(sec:catalytic-surface)=, General information +## Catalytic Surfaces + +Catalytic reactions can be modeled in PICLas using a finite-rate reaction model with an implicit treatment of the reactive surface. For a better resolution of the parameters, the catalytic boundaries are discretized into a certain number of subsides. The catalytic activity can be defined for all reflective boundaries in the simulation and requires the definition of the boundary temperature in the parameter input file. Different surface crystal structures can be defined by the lattice constant of the unit cell `Part-BoundaryX-LatticeVec` and the number of particles in the unit cell `Part-BoundaryX-NbrOfMol-UnitCell`. These parameters are used in the calculation of the number of active surface sites. +By default, the simulation is started with a clean surface, but an initial species-specific coverage can be specified by `Part-BoundaryX-SpeciesX-Coverage`, which represents the relative number of surface active sites that are occupied by adsorbate particles. Maximum values for the coverage values can be specified by: + + Part-Boundary1-Species1-MaxCoverage + Part-Boundary1-MaxTotalCoverage + +Multi-layer adsorption is enabled by a maximum total coverage greater than 1. +The reaction paths are defined in the input parameter file. First, the number of gas-surface reactions to be read in must be defined: + + DSMC-NumOfReactions = 2 + +A catalytic reaction and the boundary on which it takes place is then defined by + + Surface-Reaction1-SurfName = Adsorption + Surface-Reaction1-Type = A + Surface-Reaction1-Reactants = (/1,0/) + Surface-Reaction1-Products = (/2,1,0/) + Surface-Reaction1-NumOfBoundaries = 2 + Surface-Reaction1-Boundaries = (/1,3/) + +All reactants and products are defined by their respective species index. In the case of multiple reacting, the order does not addect the input. For the catalytic reaction type, the following options are available: + +| Model | Description | +| ----: | ------------------------------------------------- | +| A | Adsorption: Kisliuk or Langmuir model | +| D | Desorption: Polanyi-Wigner model | +| ER | Eley-Rideal reaction: Arrhenius based chemistry | +| LH | Langmuir-Hinshelwood reaction: Arrhenius based chemistry | +| LHD | Langmuir-Hisnhelwood reaction with instantaneous desorption | + +For the treatment of multiple possible reaction paths of the same species, a possible bias in the reaction rate is avoided by a randomized treatment. Bulk species can participate in the reaction. In this case, the bulk species is defined by `Surface-Species` and the corresponding species index. All reaction types allow for the definition of a reaction enthalpy. In addition, this value can be linearly increased (negative factor) or decreased (positive factor) by a scaling factor for the heat of reaction. Both values are given in [K]. + + Surface-Reaction1-ReactHeat = 17101.4 + Surface-Reaction1-HeatScaling = 1202.9 + +Depending on the reaction type, different additional parameters have to be defined. More details on the specific cases are given in the following subsections. An example input file for CO and O2 on a palladium surface can be found in the regression tests `regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2`. + +### Adsorption + +For the modelling of adsorption of a gas particle on the surface, two models are available: the simple Langmuir model, with a linear dependence of the adsorption probability on the surface coverage, and the precursor-based Kisliuk model: + +$$S = S_0 (1 + K(1/{\theta^{\alpha} - 1))^{-1}$$ + +where $S_0$ is the binding coefficient for a clean surface, $\alpha$ is the dissociation constant (2 for dissociative adsorption) and $K$ is the equilibrium constant between adsorption and desorption from the precursor state. For $K = 1$, the model simplifies to the Langmuir case. The parameters can be defined in PICLas as follows: + + Surface-Reaction1-StickingCoefficient = 0.2 + Surface-Reaction1-DissOrder = 1 + Surface-Reaction1-EqConstant = 0.6 + +A special case of adsorption is the dissociative adsorption (`Surface-ReactionX-DissociativeAdsorption = true`), where only half of the molecule binds to the surface, while the other half remains in the gas phase. The adsorbate half (`Surface-ReactionX-AdsorptionProduct`) and the gas phase product (`Surface-ReactionX-GasPhaseProduct`) are specified by their respective species indices. The adsorption probability is calculated analogously to the general case. +Lateral interactions between multiple adsorbate species, which can disfavor further adsorption can be taken into account by the command `Surface-ReactionX-Inhibition` and the species index of the inhibiting species. + +### Desorption + +The desorption of an adsorbate particle into the gas phase is modelled by the Polanyi-Wigner equation. + +$$k(T) = A T^b \theta^{\alpha} e^{-E_\mathrm{a}/T}$$ + +where $A$ is the prefactor ([1/s, m$^2$/s] depending on the dissociation constant), $\alpha$ the dissociation constant and $E_\mathrm{a}$ the +activation energy [K]. These parameters can be defined in PICLas as follows: + + Surface-Reaction[$]-Prefactor + Surface-Reaction[$]-Energy + +### Catalytic Reaction + +The Eley-Rideal and the Langmuir-Hinshelwood reaction types use Arrhenius-type reaction rates along with the coverage of the adsorbate reactants $\theta$, to reproduce of the catalytic reaction. + +$$k(T) = A T^b \theta e^{-E_\mathrm{a}/T}$$ + +The Arrhenius prefactor ([m$^3$/s] for the Eley-Rideal reaction and [m$^2$/s] for the Langmuir-Hinshelwood case) and the activation energy are read in analogously to the desorption case. For the reactions, an energy accommodation coefficient (`Surface-ReactionX-EnergyAccommodation`) with values between 0 and 1 can be specified, which defines the amount of the reaction energy that is transferred to the surface. + +### Diffusion + +With `Surface-Diffusion = true` an instantaneous diffusion over all catalytic boundaries is enabled. This is equivalent to an averaging of the coverage values for all surface subsides. + +### Parameter Read-In from the Species Database + +All information about a catalytic reaction can be retrieved from the species database. Here the catalytic reaction parameters are stored in containers and accessed via the reaction name, e.g. (`Adsorption_CO_Pt`). + ## Deposition of Charges on Dielectric Surfaces Charged particles can be absorbed (or reflected and leave their charge behind) at dielectric surfaces diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/PartAnalyze_ref.csv b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/PartAnalyze_ref.csv new file mode 100644 index 000000000..23ace7305 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/PartAnalyze_ref.csv @@ -0,0 +1,12 @@ +001-TIME,002-nPart-Spec-001,003-nPart-Spec-002,004-nPart-Spec-003,005-TempTra-001,006-TempTra-002,007-TempTra-003,008-TempVib001,009-TempVib002,010-XiVibMean001,011-XiVibMean002,012-TempRot001,013-TempRot002,014-TempTotal001,015-TempTotal002,016-TempTotal003,017-Pmean,018-Pmax,019-MeanFreePath +0.0000000000000000E+000,0.4141000000000000E+004,0.0000000000000000E+000,0.4141000000000000E+004,0.9899934937100466E+003,0.0000000000000000E+000,0.9899934937100466E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.9899934937100466E+003,0.0000000000000000E+000,0.9899934937100466E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +0.9999999999999985E-008,0.4136000000000000E+004,0.5000000000000000E+001,0.4141000000000000E+004,0.9894726160421980E+003,0.9449503197104581E+003,0.9894188581379094E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.8267624318585453E+003,0.9894726160421980E+003,0.8976751645696929E+003,0.9893617763277903E+003,0.1398706973342752E-004,0.2496071378517757E-004,0.8220546685687283E-002 +0.1999999999999999E-007,0.4136000000000000E+004,0.5000000000000000E+001,0.4141000000000000E+004,0.9898208965108893E+003,0.9370590434290933E+003,0.9897571898541858E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.8267624318585453E+003,0.9898208965108893E+003,0.8929403988008740E+003,0.9897039193342289E+003,0.1396927259814213E-004,0.2380511836471437E-004,0.8221228878936917E-002 +0.3000000000000008E-007,0.4133000000000000E+004,0.8000000000000000E+001,0.4141000000000000E+004,0.9888492921870990E+003,0.1177361616502254E+004,0.9892134792420426E+003,0.0000000000000000E+000,0.1034395857138738E+004,0.0000000000000000E+000,0.5493061443340548E+000,0.0000000000000000E+000,0.9046471326897755E+003,0.9888492921870990E+003,0.1064922165254859E+004,0.9889962574091570E+003,0.1394230657390832E-004,0.2464808513181676E-004,0.8216492352644135E-002 +0.4000000000000017E-007,0.4132000000000000E+004,0.9000000000000000E+001,0.4141000000000000E+004,0.9889337455061565E+003,0.1181213233424669E+004,0.9893516434514031E+003,0.0000000000000000E+000,0.9870644984697105E+003,0.0000000000000000E+000,0.5116855762208988E+000,0.0000000000000000E+000,0.8641730506303542E+003,0.9889337455061565E+003,0.1048146231912313E+004,0.9890624372177372E+003,0.1388277932206090E-004,0.2420085080079060E-004,0.8215516145702467E-002 +0.5000000000000026E-007,0.4131000000000000E+004,0.1000000000000000E+002,0.4141000000000000E+004,0.9881643035436668E+003,0.9936746742969386E+003,0.9881776104037327E+003,0.0000000000000000E+000,0.9478312192290271E+003,0.0000000000000000E+000,0.4795790545596740E+000,0.0000000000000000E+000,0.8252921731326156E+003,0.9881643035436668E+003,0.9282042139575918E+003,0.9880195073843187E+003,0.1390508487174102E-004,0.2362554011599877E-004,0.8212328474456146E-002 +0.6000000000000033E-007,0.4130000000000000E+004,0.1100000000000000E+002,0.4141000000000000E+004,0.9881636002046406E+003,0.1221534096326477E+004,0.9887835170018732E+003,0.0000000000000000E+000,0.9146420048390563E+003,0.0000000000000000E+000,0.4518012090523634E+000,0.0000000000000000E+000,0.7842103169277323E+003,0.9881636002046406E+003,0.1035668592812227E+004,0.9882897907186912E+003,0.1391105777274065E-004,0.2465480287932244E-004,0.8211759946287983E-002 +0.6999999999999975E-007,0.4127000000000000E+004,0.1400000000000000E+002,0.4141000000000000E+004,0.9878741787780538E+003,0.1439486248139481E+004,0.9894010005532433E+003,0.0000000000000000E+000,0.8392754311108937E+003,0.0000000000000000E+000,0.3868643144431727E+000,0.0000000000000000E+000,0.8276177882066480E+003,0.9878741787780538E+003,0.1169210818663158E+004,0.9884872463845236E+003,0.1394679805390927E-004,0.2385601626155452E-004,0.8208831478309628E-002 +0.7999999999999918E-007,0.4123000000000000E+004,0.1800000000000000E+002,0.4141000000000000E+004,0.9866117537901586E+003,0.1497459247598471E+004,0.9888322934879488E+003,0.0000000000000000E+000,0.7718957723632029E+003,0.0000000000000000E+000,0.3271598865740490E+000,0.0000000000000000E+000,0.7422157723511598E+003,0.9866117537901586E+003,0.1169355295028928E+004,0.9874060990551424E+003,0.1375839275352820E-004,0.2393709152213229E-004,0.8202249465185543E-002 +0.8999999999999861E-007,0.4117000000000000E+004,0.2400000000000000E+002,0.4141000000000000E+004,0.9862474790277143E+003,0.1272288131360001E+004,0.9879052852716108E+003,0.0000000000000000E+000,0.7060850196335427E+003,0.0000000000000000E+000,0.2682396520723499E+000,0.0000000000000000E+000,0.1090648220513395E+004,0.9862474790277143E+003,0.1174502536662851E+004,0.9873385491516563E+003,0.1389060123215629E-004,0.2460412851944469E-004,0.8195479951364321E-002 +0.1000000000000000E-006,0.4115000000000000E+004,0.2600000000000000E+002,0.4141000000000000E+004,0.9852498440632004E+003,0.1198068630765925E+004,0.9865860644095590E+003,0.0000000000000000E+000,0.6895972380924925E+003,0.0000000000000000E+000,0.2535259127695642E+000,0.0000000000000000E+000,0.1047093232723262E+004,0.9852498440632004E+003,0.1116054859979568E+004,0.9860711264620957E+003,0.1398499190478650E-004,0.2391676969803836E-004,0.8190744112954361E-002 diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/PartAnalyze_ref.csv b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/PartAnalyze_ref.csv new file mode 100644 index 000000000..b8f4572a1 --- /dev/null +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/PartAnalyze_ref.csv @@ -0,0 +1,12 @@ +001-TIME,002-nPart-Spec-001,003-nPart-Spec-002,004-nPart-Spec-003,005-TempTra-001,006-TempTra-002,007-TempTra-003,008-TempVib001,009-TempVib002,010-XiVibMean001,011-XiVibMean002,012-TempRot001,013-TempRot002,014-TempTotal001,015-TempTotal002,016-TempTotal003,017-Pmean,018-Pmax,019-MeanFreePath +0.0000000000000000E+000,0.4141000000000000E+004,0.0000000000000000E+000,0.4141000000000000E+004,0.9899934937100466E+003,0.0000000000000000E+000,0.9899934937100466E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.9899934937100466E+003,0.0000000000000000E+000,0.9899934937100466E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +0.9999999999999985E-008,0.4141000000000000E+004,0.1200000000000000E+002,0.4153000000000000E+004,0.9894945817728972E+003,0.5541807375880298E+003,0.9882367522207135E+003,0.0000000000000000E+000,0.1167988152537970E+004,0.0000000000000000E+000,0.6486367163517712E+000,0.0000000000000000E+000,0.1429167829842992E+004,0.9894945817728972E+003,0.9344693485367619E+003,0.9893355876002910E+003,0.1396988223237172E-004,0.2405862598119430E-004,0.8189044609934687E-002 +0.1999999999999999E-007,0.4141000000000000E+004,0.2300000000000000E+002,0.4164000000000000E+004,0.9899319860759842E+003,0.1080713124613210E+004,0.9904334188777028E+003,0.0000000000000000E+000,0.1052473524954192E+004,0.0000000000000000E+000,0.5633437172226190E+000,0.0000000000000000E+000,0.1140773304425466E+004,0.9899319860759842E+003,0.1099444981546139E+004,0.9905368849462565E+003,0.1407681675226083E-004,0.2405110131303647E-004,0.8157780435805078E-002 +0.3000000000000008E-007,0.4141000000000000E+004,0.3500000000000000E+002,0.4176000000000000E+004,0.9899059557694612E+003,0.1105077095808921E+004,0.9908712311289875E+003,0.0000000000000000E+000,0.1092985762977481E+004,0.0000000000000000E+000,0.5941261547656689E+000,0.0000000000000000E+000,0.1378118497230075E+004,0.9899059557694612E+003,0.1201410108481880E+004,0.9916786198846276E+003,0.1397950729061824E-004,0.2763574444666942E-004,0.8123611823726676E-002 +0.4000000000000017E-007,0.4141000000000000E+004,0.4700000000000000E+002,0.4188000000000000E+004,0.9899567354920788E+003,0.1162117359913186E+004,0.9918888150880177E+003,0.0000000000000000E+000,0.1043271127736263E+004,0.0000000000000000E+000,0.5562210496146575E+000,0.0000000000000000E+000,0.1255063337960280E+004,0.9899567354920788E+003,0.1183676469786668E+004,0.9921307630737039E+003,0.1416673397816718E-004,0.2412845500940044E-004,0.8088375891741124E-002 +0.5000000000000026E-007,0.4141000000000000E+004,0.5900000000000000E+002,0.4200000000000000E+004,0.9897861194807703E+003,0.1257013807687416E+004,0.9935400322436732E+003,0.0000000000000000E+000,0.1069426583915809E+004,0.0000000000000000E+000,0.5763392753114951E+000,0.0000000000000000E+000,0.1202477741270706E+004,0.9897861194807703E+003,0.1218066030890333E+004,0.9929929087124760E+003,0.1428542474513852E-004,0.2581445914664975E-004,0.8054230046743162E-002 +0.6000000000000033E-007,0.4141000000000000E+004,0.6900000000000000E+002,0.4210000000000000E+004,0.9898533779944972E+003,0.1294370698612590E+004,0.9948442794488080E+003,0.0000000000000000E+000,0.1052473524954194E+004,0.0000000000000000E+000,0.5633437172226210E+000,0.0000000000000000E+000,0.1192661676331265E+004,0.9898533779944972E+003,0.1233312221045326E+004,0.9938435585575631E+003,0.1417263475526505E-004,0.2586664416634831E-004,0.8026245841074264E-002 +0.6999999999999975E-007,0.4141000000000000E+004,0.8100000000000000E+002,0.4222000000000000E+004,0.9899906053094475E+003,0.1318768690855853E+004,0.9962982853021663E+003,0.0000000000000000E+000,0.1029219913105938E+004,0.0000000000000000E+000,0.5452529416105713E+000,0.0000000000000000E+000,0.1247946787685591E+004,0.9899906053094475E+003,0.1264754720293598E+004,0.9952620153790155E+003,0.1426573783782728E-004,0.2699718188818483E-004,0.7993683037732770E-002 +0.7999999999999918E-007,0.4141000000000000E+004,0.9300000000000000E+002,0.4234000000000000E+004,0.9889916048618496E+003,0.1314033929203326E+004,0.9961311741022267E+003,0.0000000000000000E+000,0.1047830212600458E+004,0.0000000000000000E+000,0.5597557936437502E+000,0.0000000000000000E+000,0.1237680004097218E+004,0.9889916048618496E+003,0.1259765912033379E+004,0.9949391746698213E+003,0.1429380445452691E-004,0.2563555317515254E-004,0.7958043021189428E-002 +0.8999999999999861E-007,0.4141000000000000E+004,0.1060000000000000E+003,0.4247000000000000E+004,0.9897759606225814E+003,0.1300795510946644E+004,0.9975386336469163E+003,0.0000000000000000E+000,0.1088641126274868E+004,0.0000000000000000E+000,0.5908699088192092E+000,0.0000000000000000E+000,0.1184370007166909E+004,0.9897759606225814E+003,0.1236725579911220E+004,0.9959395254082173E+003,0.1439921885809115E-004,0.2457992150203433E-004,0.7922341332455023E-002 +0.1000000000000000E-006,0.4141000000000000E+004,0.1170000000000000E+003,0.4258000000000000E+004,0.9897899226199446E+003,0.1250683464814554E+004,0.9969586742490591E+003,0.0000000000000000E+000,0.1100828672184723E+004,0.0000000000000000E+000,0.5999769188070079E+000,0.0000000000000000E+000,0.1142186285662527E+004,0.9897899226199446E+003,0.1195878993384707E+004,0.9954527740242369E+003,0.1446658775903148E-004,0.2649822115294406E-004,0.7889842023967544E-002 From 4df1e366a2aea9187278b54afeafcc1d916aa542 Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Thu, 11 Jan 2024 09:53:59 +0100 Subject: [PATCH 131/222] Update of the documentation --- .../features-and-models/BC-particle-solver.md | 56 ++++++++++--------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/docs/documentation/userguide/features-and-models/BC-particle-solver.md b/docs/documentation/userguide/features-and-models/BC-particle-solver.md index e28d0d154..ff1122a88 100644 --- a/docs/documentation/userguide/features-and-models/BC-particle-solver.md +++ b/docs/documentation/userguide/features-and-models/BC-particle-solver.md @@ -216,8 +216,6 @@ Modelling of reactive surfaces is enabled by setting `Part-BoundaryX-Condition=r appropriate particle boundary surface model `Part-BoundaryX-SurfaceModel`. The available conditions (`Part-BoundaryX-SurfaceModel=`) are described in the table below. -TODO: Update to fit and include the catalytic model! - | Model | Description | | :---------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 0 (default) | Standard extended Maxwellian scattering | @@ -228,6 +226,7 @@ TODO: Update to fit and include the catalytic model! | 9 | Secondary electron emission due to ion impact (SEE-I with $Ar^{+}$) with a constant yield of 1 \%. Emitted electrons have an energy of 6.8 eV upon emission. | | 10 | Secondary electron emission due to ion impact (SEE-I with $Ar^{+}$ on copper) as used in Ref. {cite}`Theis2021` originating from {cite}`Phelps1999` | | 11 | Secondary electron emission due to electron impact (SEE-E with $e^{-}$ on quartz (SiO$_{2}$)) as described in Ref. {cite}`Zeng2020` originating from {cite}`Dunaevsky2003` | +| 20 | Finite-rate catalysis model, Section {ref}`sec:catalytic-surface` | For surface sampling output, where the surface is split into, e.g., $3\times3$ sub-surfaces, the following parameters mus be set @@ -341,19 +340,21 @@ An energy-dependent model (linear and power fit of measured SEE yields) of secon quartz (SiO$_{2}$) surface as described in Ref. {cite}`Zeng2020` originating from {cite}`Dunaevsky2003` is activated via `Part-BoundaryX-SurfaceModel=11`. For more details, see the original publications. -(sec:catalytic-surface)=, General information +(sec:catalytic-surface)= ## Catalytic Surfaces -Catalytic reactions can be modeled in PICLas using a finite-rate reaction model with an implicit treatment of the reactive surface. For a better resolution of the parameters, the catalytic boundaries are discretized into a certain number of subsides. The catalytic activity can be defined for all reflective boundaries in the simulation and requires the definition of the boundary temperature in the parameter input file. Different surface crystal structures can be defined by the lattice constant of the unit cell `Part-BoundaryX-LatticeVec` and the number of particles in the unit cell `Part-BoundaryX-NbrOfMol-UnitCell`. These parameters are used in the calculation of the number of active surface sites. -By default, the simulation is started with a clean surface, but an initial species-specific coverage can be specified by `Part-BoundaryX-SpeciesX-Coverage`, which represents the relative number of surface active sites that are occupied by adsorbate particles. Maximum values for the coverage values can be specified by: +Catalytic reactions can be modeled in PICLas using a finite-rate reaction model with an implicit treatment of the reactive surface. For a better resolution of the parameters, the catalytic boundaries are discretized into a certain number of subsides. A definition of the boundary temperature in the parameter input file is required in all cases. Different types of surfaces can be defined by the lattice constant of the unit cell `Part-BoundaryX-LatticeVec` and the number of particles in the unit cell `Part-BoundaryX-NbrOfMol-UnitCell`. These parameters are used in the calculation of the number of active sites. + +By default, the simulation is started with a clean surface, but an initial species-specific coverage can be specified by `Part-BoundaryX-SpeciesX-Coverage`, which represents the relative number of active sites that are occupied by adsorbate particles. Maximum values for the coverage values can be specified by: Part-Boundary1-Species1-MaxCoverage Part-Boundary1-MaxTotalCoverage -Multi-layer adsorption is enabled by a maximum total coverage greater than 1. +Multi-layer adsorption is enabled by a maximal total coverage greater than 1. + The reaction paths are defined in the input parameter file. First, the number of gas-surface reactions to be read in must be defined: - DSMC-NumOfReactions = 2 + Surface-NumOfReactions = 2 A catalytic reaction and the boundary on which it takes place is then defined by @@ -364,7 +365,7 @@ A catalytic reaction and the boundary on which it takes place is then defined by Surface-Reaction1-NumOfBoundaries = 2 Surface-Reaction1-Boundaries = (/1,3/) -All reactants and products are defined by their respective species index. In the case of multiple reacting, the order does not addect the input. For the catalytic reaction type, the following options are available: +All reactants and products are defined by their respective species index. In the case of multiple reacting, the order does not influence the input. The following optiona are available for the catalytic reaction type: | Model | Description | | ----: | ------------------------------------------------- | @@ -374,47 +375,52 @@ All reactants and products are defined by their respective species index. In the | LH | Langmuir-Hinshelwood reaction: Arrhenius based chemistry | | LHD | Langmuir-Hisnhelwood reaction with instantaneous desorption | -For the treatment of multiple possible reaction paths of the same species, a possible bias in the reaction rate is avoided by a randomized treatment. Bulk species can participate in the reaction. In this case, the bulk species is defined by `Surface-Species` and the corresponding species index. All reaction types allow for the definition of a reaction enthalpy. In addition, this value can be linearly increased (negative factor) or decreased (positive factor) by a scaling factor for the heat of reaction. Both values are given in [K]. +For the treatment of multiple reaction paths of the same species, a possible bias in the reaction rate is avoided by a randomized treatment. Bulk species can participate in the reaction. In this case, the bulk species is defined by `Surface-Species` and the corresponding species index. All reaction types allow for the definition of a reaction enthalpy. In addition, this value can be linearly increased (negative factor) or decreased (positive factor) by a scaling factor for the heat of reaction. Both values are given in [K]. - Surface-Reaction1-ReactHeat = 17101.4 - Surface-Reaction1-HeatScaling = 1202.9 + Surface-Reaction1-ReactHeat = 17101.4 + Surface-Reaction1-HeatScaling = 1202.9 Depending on the reaction type, different additional parameters have to be defined. More details on the specific cases are given in the following subsections. An example input file for CO and O2 on a palladium surface can be found in the regression tests `regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2`. ### Adsorption -For the modelling of adsorption of a gas particle on the surface, two models are available: the simple Langmuir model, with a linear dependence of the adsorption probability on the surface coverage, and the precursor-based Kisliuk model: +For the modelling of the adsorption of a gas particle on the surface, two models are available: the simple Langmuir model, with a linear dependence of the adsorption probability on the surface coverage, and the precursor-based Kisliuk model: -$$S = S_0 (1 + K(1/{\theta^{\alpha} - 1))^{-1}$$ +$$ S = S_0 (1 + K (1/\theta^{\alpha} - 1))^{-1}$$ -where $S_0$ is the binding coefficient for a clean surface, $\alpha$ is the dissociation constant (2 for dissociative adsorption) and $K$ is the equilibrium constant between adsorption and desorption from the precursor state. For $K = 1$, the model simplifies to the Langmuir case. The parameters can be defined in PICLas as follows: +here $S_0$ is the binding coefficient for a clean surface, $\alpha$ is the dissociation constant (2 for dissociative adsorption) and $K$ is the equilibrium constant between adsorption and desorption from the precursor state. For $K = 1$, the model simplifies to the Langmuir case. The parameters can be defined in PICLas as follows: - Surface-Reaction1-StickingCoefficient = 0.2 - Surface-Reaction1-DissOrder = 1 - Surface-Reaction1-EqConstant = 0.6 + Surface-Reaction1-StickingCoefficient = 0.2 + Surface-Reaction1-DissOrder = 1 + Surface-Reaction1-EqConstant = 0.6 -A special case of adsorption is the dissociative adsorption (`Surface-ReactionX-DissociativeAdsorption = true`), where only half of the molecule binds to the surface, while the other half remains in the gas phase. The adsorbate half (`Surface-ReactionX-AdsorptionProduct`) and the gas phase product (`Surface-ReactionX-GasPhaseProduct`) are specified by their respective species indices. The adsorption probability is calculated analogously to the general case. +A special case of adsorption is the dissociative adsorption (`Surface-ReactionX-DissociativeAdsorption = true`), where only half of the molecule binds to the surface, while the other half remains in the gas phase. The adsorbate half `Surface-ReactionX-AdsorptionProduct` and the gas phase product `Surface-ReactionX-GasPhaseProduct` are specified by their respective species indices. The adsorption probability is calculated analogously to the general case. + Lateral interactions between multiple adsorbate species, which can disfavor further adsorption can be taken into account by the command `Surface-ReactionX-Inhibition` and the species index of the inhibiting species. ### Desorption The desorption of an adsorbate particle into the gas phase is modelled by the Polanyi-Wigner equation. -$$k(T) = A T^b \theta^{\alpha} e^{-E_\mathrm{a}/T}$$ +$$k(T) = A T^b \theta^{\alpha}_{A} e^{-E_\mathrm{a}/T}$$ where $A$ is the prefactor ([1/s, m$^2$/s] depending on the dissociation constant), $\alpha$ the dissociation constant and $E_\mathrm{a}$ the activation energy [K]. These parameters can be defined in PICLas as follows: - Surface-Reaction[$]-Prefactor - Surface-Reaction[$]-Energy + Surface-ReactionX-Prefactor + Surface-ReactionX-Energy ### Catalytic Reaction -The Eley-Rideal and the Langmuir-Hinshelwood reaction types use Arrhenius-type reaction rates along with the coverage of the adsorbate reactants $\theta$, to reproduce of the catalytic reaction. +The Eley-Rideal and the Langmuir-Hinshelwood reaction use Arrhenius-type reaction rates along with the coverage of all surface-bound reactants $\theta_{AB}$, to reproduce of the catalytic reaction. + +$$k(T) = A T^b \theta_{AB} e^{-E_\mathrm{a}/T}$$ + +The Arrhenius prefactor ([m$^3$/s] for the Eley-Rideal reaction and [m$^2$/s] for the Langmuir-Hinshelwood case) and the activation energy are read in analogously to the desorption case. For the reactions, an energy accommodation coefficient `Surface-ReactionX-EnergyAccommodation` with values between 0 and 1 can be specified, which defines the amount of the reaction energy that is transferred to the surface. -$$k(T) = A T^b \theta e^{-E_\mathrm{a}/T}$$ +In the general Langmuir-Hinshelwood case with the reaction type `LH`, the product species stays adsorbed on the surface, until a desorption takes place in a later step. For reactions in combination with very high desorption rates, the reaction type `LHD` is more fitting. The product species are inserted directly into the gas phase without an intermediate desorption step. -The Arrhenius prefactor ([m$^3$/s] for the Eley-Rideal reaction and [m$^2$/s] for the Langmuir-Hinshelwood case) and the activation energy are read in analogously to the desorption case. For the reactions, an energy accommodation coefficient (`Surface-ReactionX-EnergyAccommodation`) with values between 0 and 1 can be specified, which defines the amount of the reaction energy that is transferred to the surface. +Example inputs for both catalytic reactions can be found in the regression tests: `regressioncheck/NIG_Reservoir/CAT_RATES_ER` and `regressioncheck/NIG_Reservoir/CAT_RATES_LH`. ### Diffusion @@ -422,7 +428,7 @@ With `Surface-Diffusion = true` an instantaneous diffusion over all catalytic bo ### Parameter Read-In from the Species Database -All information about a catalytic reaction can be retrieved from the species database. Here the catalytic reaction parameters are stored in containers and accessed via the reaction name, e.g. (`Adsorption_CO_Pt`). +All information about a catalytic reaction can be retrieved from the species database. Here the catalytic reaction parameters are stored in containers and accessed via the reaction name, e.g. `Adsorption_CO_Pt`. ## Deposition of Charges on Dielectric Surfaces From c117bc56803f9e19c7e0642130de1cbe49a09f46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Mon, 22 Jan 2024 09:48:04 +0100 Subject: [PATCH 132/222] No h5diff comparison --- regressioncheck/CHE_DSMC/DSMC_QualityFactors/analyze.ini | 8 -------- 1 file changed, 8 deletions(-) diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/analyze.ini b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/analyze.ini index 9c81c1c9f..17f048342 100644 --- a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/analyze.ini +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/analyze.ini @@ -2,11 +2,3 @@ compare_data_file_name = PartAnalyze.csv compare_data_file_reference = PartAnalyze_ref.csv compare_data_file_tolerance = 5E-2 compare_data_file_tolerance_type = relative - -! Compare cell-local values (ignore differences in the velocity vector) -h5diff_file = DSMC_QualityFactors_DSMCState_000.00000001000000000.h5 -h5diff_reference_file = DSMC_QualityFactors_DSMCState_000.00000001000000000_ref.h5 -h5diff_data_set = ElemData -h5diff_tolerance_value = 5E-2 -h5diff_tolerance_type = relative -h5diff_max_differences = 3 \ No newline at end of file From 7a570ad4d88aa979fe58c608316eb3cd881b7867 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Mon, 22 Jan 2024 15:44:21 +0100 Subject: [PATCH 133/222] Reggies PartAnalyze Ref --- .../DSMC_QualityFactors/PartAnalyze_ref.csv | 2 +- .../CHE_DSMC/DSMC_QualityFactors/readme.md | 2 +- .../Database_Ttrans_10000_ref.csv | 2 +- .../PartAnalyze_T-15000_ref.csv | 2 +- .../Database_Tvib_10000_ref.csv | 2 +- .../Database_Tvib_15000_ref.csv | 2 +- .../Database_Tvib_20000_ref.csv | 2 +- .../Database_Tvib_25000_ref.csv | 2 +- .../Database_Tvib_30000_ref.csv | 2 +- .../Database_Tvib_00500_ref.csv | 2 +- .../Database_Tvib_01000_ref.csv | 2 +- .../Database_Tvib_01500_ref.csv | 2 +- .../Database_Tvib_02000_ref.csv | 2 +- .../PartAnalyze_00593158_ref.csv | 2 +- .../PartAnalyze_01875731_ref.csv | 2 +- .../PartAnalyze_04194262_ref.csv | 2 +- .../PartAnalyze_05931582_ref.csv | 2 +- .../PartAnalyze_07264675_ref.csv | 2 +- .../PartAnalyze_08388524_ref.csv | 2 +- .../PartAnalyze_18755393_ref.csv | 2 +- .../PartAnalyze_59309762_ref.csv | 2 +- .../PartAnalyze_001_ref.csv | 2 +- .../PartAnalyze_010_ref.csv | 2 +- .../PartAnalyze_050_ref.csv | 2 +- .../PartAnalyze_100_ref.csv | 2 +- .../PartAnalyze_150_ref.csv | 2 +- .../PartAnalyze_200_ref.csv | 2 +- .../Database_Tvib_07500_ref.csv | 2 +- .../Database_Tvib_10000_ref.csv | 2 +- .../Database_Tvib_12500_ref.csv | 2 +- .../Database_Tvib_15000_ref.csv | 2 +- .../Database_Tvib_00773000_ref.csv | 2 +- .../Database_Tvib_00859000_ref.csv | 2 +- .../Database_Tvib_00938000_ref.csv | 2 +- .../Database_Tvib_01030000_ref.csv | 2 +- .../Database_Tvib_01130000_ref.csv | 2 +- .../Database_Tvib_01260000_ref.csv | 2 +- .../Database_Tvib_01450000_ref.csv | 2 +- .../Database_Tvib_01680000_ref.csv | 2 +- .../Database_Tvib_02050000_ref.csv | 2 +- .../Database_Tvib_02450000_ref.csv | 2 +- .../Database_Tvib_02970000_ref.csv | 2 +- .../Database_Tvib_04190000_ref.csv | 2 +- .../RELAX_N2Ion/PartAnalyze_ref.csv | 60 +++++++++---------- .../PartAnalyze_ref.csv | 20 +++---- src/particles/dsmc/dsmc_collis_mode.f90 | 21 +++---- src/particles/dsmc/dsmc_particle_pairing.f90 | 1 - 47 files changed, 92 insertions(+), 96 deletions(-) diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv index d8993b8a4..1f0928516 100644 --- a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/PartAnalyze_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-NumDens-Spec-001,003-TempTra-001,004-TempVib001,005-XiVibMean001,006-TempRot001,007-TempTotal001,008-Pmean,009-Pmax,010-MeanFreePath,011-MaxMCSoverMFP,012-ResolvedCellPercentage 0,1E+022,5000.7694212872,4948.97535472698,1.57588795113921,4996.25975996126,4986.98558422092,0,0,0,0,0 -0.00000001,1E+022,5003.18537370868,4949.43782890819,1.57592433193968,4992.32966071455,4987.00308750072,0.6100164229169058E-001,0.104042801202628,0.000297713890670607,0.000123887444083463,0.1000000000000000E+003 +0.00000001,1E+022,5003.18537370868,4949.43782890819,1.57592433193968,4992.32966071455,4987.00308750072,0.6100164229169058E-001,0.9655792264656192E-001,0.000297713890670607,0.0001198721096,0.1000000000000000E+003 diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md index 919309782..118d57386 100644 --- a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md @@ -3,5 +3,5 @@ * Comparing with the theoretical values from gas kinetic theory * Mean collision probability is expected to be 0.06105 (chosen time step divided by the mean collision time, which is mean free path over average thermal velocity) * Mean free path is expected to be 2.98E-04 meters (Variable hard sphere model) - * Mean collision separation distance over mean free path (only in DSMCState) is 0.0001199, compared to the approximated value of 0.0001558, which assumes that the particles are distributed equidistantly in the cell. The difference is due to a 20% lower mean collision separation distance compared to the equidistant distribution. + * Mean collision separation distance over mean free path (only in DSMCState) is 0.0001199, compared to the approximated value of 0.0001558, which assumes that the particles are distributed equidistantly in the cell. The difference is due to a 20% lower mean collision separation distance compared to the equidistant distribution (most likely due to nearest neighbour routine) diff --git a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_10000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_10000_ref.csv index 5a8d5c359..8b554b710 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_10000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_10000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004,011-Reaction005 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-007,3.73688135572668E-001,7.27526232996863E-001,1.32474544582370E-005,0.0000000000000000E+000,0.0000000000000000E+000,2.48777888932569E-019,4.40906095483012E-017,2.28631616080479E-018,2.42390240084106E-019,4.42149510308084E-017 +1.00000000000000E-007,3.73688135572668E-001,7.27526232996863E-001,1.32474544582370E-005,0.0000000000000000E+000,0.1000000000000000E+003,2.48777888932569E-019,4.40906095483012E-017,2.28631616080479E-018,2.42390240084106E-019,4.42149510308084E-017 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-15000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-15000_ref.csv index 4bafcc696..9196ea6c0 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-15000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-15000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-010,1.18883827509440E-001,2.18864022733051E-001,9.32408088387504E-006,0.0000000000000000E+000,0.0000000000000000E+000,8.95913832108752E-017,4.80490099901900E-017 +1.00000000000000E-010,1.18883827509440E-001,2.18864022733051E-001,9.32408088387504E-006,0.0000000000000000E+000,0.1000000000000000E+003,8.95913832108752E-017,4.80490099901900E-017 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_10000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_10000_ref.csv index f6dc4223b..d22bd7995 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_10000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_10000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002 0,0,0,0,0,0,0,0 -1E-08,0.181298879727166,0.670144326764107,8.72458344199456E-005,0.0000000000000000E+000,0.0000000000000000E+000,1.62674621356066E-17,1.001075e-19 +1E-08,0.181298879727166,0.670144326764107,8.72458344199456E-005,0.3524568660068796E-001,0.1000000000000000E+003,1.62674621356066E-17,1.001075e-19 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_15000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_15000_ref.csv index de4de2c9e..8149804b5 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_15000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_15000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-008,2.01142542418521E-001,7.14646744669035E-001,9.61847669045529E-005,0.0000000000000000E+000,0.0000000000000000E+000,4.51684856343735E-016,2.31748800000000E-017 +1.00000000000000E-008,2.01142542418521E-001,7.14646744669035E-001,9.61847669045529E-005,0.3163178511474580E-001,0.1000000000000000E+003,4.51684856343735E-016,2.31748800000000E-017 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_20000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_20000_ref.csv index 9daca0184..fe0742c83 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_20000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_20000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-008,2.16903026535711E-001,7.90496216094982E-001,1.03046916335051E-004,0.0000000000000000E+000,0.0000000000000000E+000,2.05145210962411E-015,2.72192181825934E-016 +1.00000000000000E-008,2.16903026535711E-001,7.90496216094982E-001,1.03046916335051E-004,0.2967937162607743E-001,0.1000000000000000E+003,2.05145210962411E-015,2.72192181825934E-016 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_25000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_25000_ref.csv index 76d07c30c..1f9527b36 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_25000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_25000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-008,2.29606703511907E-001,8.38585295512184E-001,1.08665204605351E-004,0.0000000000000000E+000,0.0000000000000000E+000,4.79780014795168E-015,1.24043152813724E-015 +1.00000000000000E-008,2.29606703511907E-001,8.38585295512184E-001,1.08665204605351E-004,0.2841330550655378E-001,0.1000000000000000E+003,4.79780014795168E-015,1.24043152813724E-015 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_30000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_30000_ref.csv index c32655cfe..320b90ef5 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_30000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/Database_Tvib_30000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-008,2.41354438603174E-001,8.77408970222360E-001,1.13529120729100E-004,0.0000000000000000E+000,0.0000000000000000E+000,8.09669130786375E-015,2.88699901863851E-015 +1.00000000000000E-008,2.41354438603174E-001,8.77408970222360E-001,1.13529120729100E-004,0.2714688639156418E-001,0.1000000000000000E+003,8.09669130786375E-015,2.88699901863851E-015 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_00500_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_00500_ref.csv index a005a5f33..4114cbfd1 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_00500_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_00500_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-006,3.53696704727658E-001,7.59175266061906E-001,1.02611582619153E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,3.02820900161511E-043,3.04092205385157E-043 +1.00000000000000E-006,3.53696704727658E-001,7.59175266061906E-001,1.02611582619153E-005,0.2880354164189668E+000,0.1000000000000000E+003,0.00000000000000E+000,0.00000000000000E+000,3.02820900161511E-043,3.04092205385157E-043 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_01000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_01000_ref.csv index 4d301e2c4..3e63c3906 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_01000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_01000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-006,4.23534952829844E-001,9.42073997624852E-001,1.21183487150917E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,4.24235554158370E-044,4.24836170799462E-044 +1.00000000000000E-006,4.23534952829844E-001,9.42073997624852E-001,1.21183487150917E-005,0.2444299931380187E+000,0.1000000000000000E+003,0.00000000000000E+000,0.00000000000000E+000,4.24235554158370E-044,4.24836170799462E-044 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_01500_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_01500_ref.csv index 8ad2fbd19..d72c887a6 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_01500_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_01500_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-006,4.70664632636717E-001,1.01870116820428E+000,1.33569982320102E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.87592597567906E-044,1.86091055965174E-044 +1.00000000000000E-006,4.70664632636717E-001,1.01870116820428E+000,1.33569982320102E-005,0.2214737779049080E+000,0.1000000000000000E+003,0.00000000000000E+000,0.00000000000000E+000,1.87592597567906E-044,1.86091055965174E-044 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_02000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_02000_ref.csv index a425838fe..7771001ae 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_02000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/Database_Tvib_02000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-006,5.07189286586427E-001,1.10005256303409E+000,1.43117213112965E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.10313256413998E-044,1.16519628371954E-044 +1.00000000000000E-006,5.07189286586427E-001,1.10005256303409E+000,1.43117213112965E-005,0.2069536586499326E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.10313256413998E-044,1.16519628371954E-044 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_00593158_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_00593158_ref.csv index e1145cc6c..ab56d903b 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_00593158_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_00593158_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate002+002,013-CollRate002+003,014-CollRate002+004,015-CollRate002+005,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate004+004,020-CollRate004+005,021-CollRate005+005,022-TotalCollRate 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-008,0.1007433335411879E-001,0.3736542506402513E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1009099999999857E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1009099999999857E+015 +0.1000000000000000E-008,0.1007433335411879E-001,0.3736542506402513E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1000000000000000E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.1009099999999857E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1009099999999857E+015 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_01875731_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_01875731_ref.csv index 4dc9d4cdf..bb74f97c7 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_01875731_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_01875731_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate002+002,013-CollRate002+003,014-CollRate002+004,015-CollRate002+005,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate004+004,020-CollRate004+005,021-CollRate005+005,022-TotalCollRate 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-008,0.1136013213168554E-001,0.4182033822785572E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1140299999999839E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1140299999999839E+015 +0.1000000000000000E-008,0.1136013213168554E-001,0.4182033822785572E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1000000000000000E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.1140299999999839E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1140299999999839E+015 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_04194262_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_04194262_ref.csv index bf62aa4ad..5c557df4d 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_04194262_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_04194262_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate002+002,013-CollRate002+003,014-CollRate002+004,015-CollRate002+005,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate004+004,020-CollRate004+005,021-CollRate005+005,022-TotalCollRate 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-008,0.1170861504594123E-001,0.4305352058791854E+000,0.1881045468448140E-007,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1172099999999834E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1172099999999834E+015 +0.1000000000000000E-008,0.1170861504594123E-001,0.4305352058791854E+000,0.1881045468448140E-007,0.0000000000000000E+000,0.1000000000000000E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.1172099999999834E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1172099999999834E+015 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_05931582_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_05931582_ref.csv index b375cf026..73d204c8a 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_05931582_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_05931582_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate002+002,013-CollRate002+003,014-CollRate002+004,015-CollRate002+005,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate004+004,020-CollRate004+005,021-CollRate005+005,022-TotalCollRate 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-008,0.1344932273304725E-001,0.4942986551805167E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1342499999999810E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1342499999999810E+015 +0.1000000000000000E-008,0.1344932273304725E-001,0.4942986551805167E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1000000000000000E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.1342499999999810E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1342499999999810E+015 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_07264675_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_07264675_ref.csv index 97267c8ec..0795d3d63 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_07264675_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_07264675_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate002+002,013-CollRate002+003,014-CollRate002+004,015-CollRate002+005,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate004+004,020-CollRate004+005,021-CollRate005+005,022-TotalCollRate 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-008,0.1287530216589833E-001,0.4732471558546913E+000,0.4798579394700828E-007,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1280699999999819E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1280699999999819E+015 +0.1000000000000000E-008,0.1287530216589833E-001,0.4732471558546913E+000,0.4798579394700828E-007,0.0000000000000000E+000,0.1000000000000000E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.1280699999999819E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1280699999999819E+015 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_08388524_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_08388524_ref.csv index 1db85c675..7df7db3da 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_08388524_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_08388524_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate002+002,013-CollRate002+003,014-CollRate002+004,015-CollRate002+005,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate004+004,020-CollRate004+005,021-CollRate005+005,022-TotalCollRate 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-008,0.1268015715578277E-001,0.4660508870105510E+000,0.3307026765279518E-007,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1268549999999821E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1268549999999821E+015 +0.1000000000000000E-008,0.1268015715578277E-001,0.4660508870105510E+000,0.3307026765279518E-007,0.0000000000000000E+000,0.1000000000000000E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.1268549999999821E+015,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.1268549999999821E+015 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_18755393_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_18755393_ref.csv index 707d1b0ee..4d63ec254 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_18755393_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_18755393_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate002+002,013-CollRate002+003,014-CollRate002+004,015-CollRate002+005,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate004+004,020-CollRate004+005,021-CollRate005+005,022-TotalCollRate 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-008,0.9294693312867404E-002,0.3416592982377114E+000,0.9298518735566164E-007,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.9222999999998695E+014,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.9222999999998695E+014 +0.1000000000000000E-008,0.9294693312867404E-002,0.3416592982377114E+000,0.9298518735566164E-007,0.0000000000000000E+000,0.1000000000000000E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.9222999999998695E+014,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.9222999999998695E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_59309762_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_59309762_ref.csv index 7509b5ca8..19be62e0b 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_59309762_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/PartAnalyze_59309762_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate002+002,013-CollRate002+003,014-CollRate002+004,015-CollRate002+005,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate004+004,020-CollRate004+005,021-CollRate005+005,022-TotalCollRate 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.1000000000000000E-008,0.2455899424573178E-002,0.9026176294227477E-001,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2404999999999660E+014,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2404999999999660E+014 +0.1000000000000000E-008,0.2455899424573178E-002,0.9026176294227477E-001,0.0000000000000000E+000,0.0000000000000000E+000,0.1000000000000000E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.2404999999999660E+014,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2404999999999660E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_001_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_001_ref.csv index f2dca9ee6..d5b883418 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_001_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_001_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate001+006,013-CollRate002+002,014-CollRate002+003,015-CollRate002+004,016-CollRate002+005,017-CollRate002+006,018-CollRate003+003,019-CollRate003+004,020-CollRate003+005,021-CollRate003+006,022-CollRate004+004,023-CollRate004+005,024-CollRate004+006,025-CollRate005+005,026-CollRate005+006,027-CollRate006+006,028-TotalCollRate 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-009,7.28671535893542E-004,3.91095315500101E-001,5.88191818557925E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.02477999999986E+014,4.84799999999932E+012,4.71399999999933E+012,3.20199999999955E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.15241999999984E+014 +1.00000000000000E-009,7.28671535893542E-004,3.91095315500101E-001,5.88191818557925E-005,0.0000000000000000E+000,0.1000000000000000E+003,0.00000000000000E+000,0.00000000000000E+000,1.02477999999986E+014,4.84799999999932E+012,4.71399999999933E+012,3.20199999999955E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.15241999999984E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_010_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_010_ref.csv index 1b3bbda73..918daee37 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_010_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_010_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate001+006,013-CollRate002+002,014-CollRate002+003,015-CollRate002+004,016-CollRate002+005,017-CollRate002+006,018-CollRate003+003,019-CollRate003+004,020-CollRate003+005,021-CollRate003+006,022-CollRate004+004,023-CollRate004+005,024-CollRate004+006,025-CollRate005+005,026-CollRate005+006,027-CollRate006+006,028-TotalCollRate 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-009,1.00394992012240E-003,4.24685438364297E-001,5.88191818591117E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.11731999999984E+014,7.43599999999895E+012,4.96999999999930E+012,3.13599999999956E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.27273999999982E+014 +1.00000000000000E-009,1.00394992012240E-003,4.24685438364297E-001,5.88191818591117E-005,0.0000000000000000E+000,0.1000000000000000E+003,0.00000000000000E+000,0.00000000000000E+000,1.11731999999984E+014,7.43599999999895E+012,4.96999999999930E+012,3.13599999999956E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.27273999999982E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_050_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_050_ref.csv index 642244e29..94ef4e473 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_050_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_050_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate001+006,013-CollRate002+002,014-CollRate002+003,015-CollRate002+004,016-CollRate002+005,017-CollRate002+006,018-CollRate003+003,019-CollRate003+004,020-CollRate003+005,021-CollRate003+006,022-CollRate004+004,023-CollRate004+005,024-CollRate004+006,025-CollRate005+005,026-CollRate005+006,027-CollRate006+006,028-TotalCollRate 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-009,1.60901711016375E-003,4.57083630796254E-001,5.88191819002675E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.20868999999983E+014,1.34099999999981E+013,1.26259999999982E+013,1.83999999999974E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.48744999999979E+014 +1.00000000000000E-009,1.60901711016375E-003,4.57083630796254E-001,5.88191819002675E-005,0.0000000000000000E+000,0.1000000000000000E+003,0.00000000000000E+000,0.00000000000000E+000,1.20868999999983E+014,1.34099999999981E+013,1.26259999999982E+013,1.83999999999974E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.48744999999979E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_100_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_100_ref.csv index d6d056da4..139a99916 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_100_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_100_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate001+006,013-CollRate002+002,014-CollRate002+003,015-CollRate002+004,016-CollRate002+005,017-CollRate002+006,018-CollRate003+003,019-CollRate003+004,020-CollRate003+005,021-CollRate003+006,022-CollRate004+004,023-CollRate004+005,024-CollRate004+006,025-CollRate005+005,026-CollRate005+006,027-CollRate006+006,028-TotalCollRate 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-009,1.93874473680545E-003,5.12120879655489E-001,5.88191820195864E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.35061999999981E+014,1.66679999999976E+013,1.54259999999978E+013,1.73199999999976E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.68887999999976E+014 +1.00000000000000E-009,1.93874473680545E-003,5.12120879655489E-001,5.88191820195864E-005,0.0000000000000000E+000,0.1000000000000000E+003,0.00000000000000E+000,0.00000000000000E+000,1.35061999999981E+014,1.66679999999976E+013,1.54259999999978E+013,1.73199999999976E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.68887999999976E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_150_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_150_ref.csv index 625989985..8a2464aaa 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_150_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_150_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate001+006,013-CollRate002+002,014-CollRate002+003,015-CollRate002+004,016-CollRate002+005,017-CollRate002+006,018-CollRate003+003,019-CollRate003+004,020-CollRate003+005,021-CollRate003+006,022-CollRate004+004,023-CollRate004+005,024-CollRate004+006,025-CollRate005+005,026-CollRate005+006,027-CollRate006+006,028-TotalCollRate 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-009,2.14174542721335E-003,5.18064450636107E-001,5.88191818249936E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.36544999999981E+014,1.87039999999974E+013,1.66429999999976E+013,2.01799999999972E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.73909999999975E+014 +1.00000000000000E-009,2.14174542721335E-003,5.18064450636107E-001,5.88191818249936E-005,0.0000000000000000E+000,0.1000000000000000E+003,0.00000000000000E+000,0.00000000000000E+000,1.36544999999981E+014,1.87039999999974E+013,1.66429999999976E+013,2.01799999999972E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.73909999999975E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_200_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_200_ref.csv index d172f1284..92f968934 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_200_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/PartAnalyze_200_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-CollRate001+001,008-CollRate001+002,009-CollRate001+003,010-CollRate001+004,011-CollRate001+005,012-CollRate001+006,013-CollRate002+002,014-CollRate002+003,015-CollRate002+004,016-CollRate002+005,017-CollRate002+006,018-CollRate003+003,019-CollRate003+004,020-CollRate003+005,021-CollRate003+006,022-CollRate004+004,023-CollRate004+005,024-CollRate004+006,025-CollRate005+005,026-CollRate005+006,027-CollRate006+006,028-TotalCollRate 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-009,2.25654789673067E-003,5.10124845460034E-001,5.88191820336924E-005,0.0000000000000000E+000,0.0000000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.34603999999981E+014,1.99589999999972E+013,1.74839999999975E+013,2.58199999999963E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.74628999999975E+014 +1.00000000000000E-009,2.25654789673067E-003,5.10124845460034E-001,5.88191820336924E-005,0.0000000000000000E+000,0.1000000000000000E+003,0.00000000000000E+000,0.00000000000000E+000,1.34603999999981E+014,1.99589999999972E+013,1.74839999999975E+013,2.58199999999963E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.74628999999975E+014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_07500_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_07500_ref.csv index 89d640fe7..adf0c900f 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_07500_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_07500_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004,011-Reaction005,012-Reaction006 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -2.00000000000000E-006,2.67352703496838E-001,5.25596772392851E-001,8.99064735506277E-005,0.0000000000000000E+000,0.0000000000000000E+000,3.87721645313516E-018,3.88852963783802E-018,3.83657179826993E-018,3.47915291769440E-046,3.48124071513895E-046,3.47930977882192E-046 +2.00000000000000E-006,2.67352703496838E-001,5.25596772392851E-001,8.99064735506277E-005,0.3282581960763531E-001,0.1000000000000000E+003,3.87721645313516E-018,3.88852963783802E-018,3.83657179826993E-018,3.47915291769440E-046,3.48124071513895E-046,3.47930977882192E-046 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_10000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_10000_ref.csv index 6bc4fcd1f..ab6d4c0b5 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_10000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_10000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004,011-Reaction005,012-Reaction006 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -2.00000000000000E-006,2.88345377143152E-001,5.26816660115779E-001,9.63285269416815E-005,0.0000000000000000E+000,0.0000000000000000E+000,2.11560134887055E-017,2.05405522014654E-017,2.05400010417580E-017,3.13855717228863E-046,3.13519278636495E-046,3.13428953623618E-046 +2.00000000000000E-006,2.88345377143152E-001,5.26816660115779E-001,9.63285269416815E-005,0.3070679240514181E-001,0.1000000000000000E+003,2.11560134887055E-017,2.05405522014654E-017,2.05400010417580E-017,3.13855717228863E-046,3.13519278636495E-046,3.13428953623618E-046 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_12500_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_12500_ref.csv index 521876d25..346f988d2 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_12500_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_12500_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004,011-Reaction005,012-Reaction006 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -2.00000000000000E-006,3.04859505227313E-001,5.85880332203581E-001,1.01594779577752E-004,0.0000000000000000E+000,0.0000000000000000E+000,5.30027840956021E-017,5.17040217393362E-017,5.19509575909158E-017,2.87336920697584E-046,2.87271845277791E-046,2.87364891734210E-046 +2.00000000000000E-006,3.04859505227313E-001,5.85880332203581E-001,1.01594779577752E-004,0.2872954214382071E-001,0.1000000000000000E+003,5.30027840956021E-017,5.17040217393362E-017,5.19509575909158E-017,2.87336920697584E-046,2.87271845277791E-046,2.87364891734210E-046 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_15000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_15000_ref.csv index 7e46da0d1..8e1af5da3 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_15000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/Database_Tvib_15000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004,011-Reaction005,012-Reaction006 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -2.00000000000000E-006,3.20356067937429E-001,6.19158042957102E-001,1.06089226776644E-004,0.0000000000000000E+000,0.0000000000000000E+000,9.21017186424224E-017,9.14468407820260E-017,9.12978212240774E-017,2.60944201077233E-046,2.61715287269015E-046,2.61248580460074E-046 +2.00000000000000E-006,3.20356067937429E-001,6.19158042957102E-001,1.06089226776644E-004,0.2761918677178727E-001,0.1000000000000000E+003,9.21017186424224E-017,9.14468407820260E-017,9.12978212240774E-017,2.60944201077233E-046,2.61715287269015E-046,2.61248580460074E-046 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00773000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00773000_ref.csv index 13d13db21..a2e38c2e7 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00773000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00773000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-012,3.18644504323726E-003,3.82598867520345E-001,2.97809522194158E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,8.21628071365694E-002,0.00000000000000E+000,9.22946943564097E-015,2.27233141202874E-015 +1.00000000000000E-012,3.18644504323726E-003,3.82598867520345E-001,2.97809522194158E-006,0.0000000000000000E+000,0.1000000000000000E+003,2.00000000000000E-001,2.00000000000000E-001,8.21628071365694E-002,0.00000000000000E+000,9.22946943564097E-015,2.27233141202874E-015 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00859000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00859000_ref.csv index f4589b91e..7fa12dd03 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00859000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00859000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-012,5.41488583400513E-003,4.25291054075299E-001,3.27096839210622E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,2.95684045737927E-001,0.00000000000000E+000,1.23526738433633E-014,6.92510515789200E-014 +1.00000000000000E-012,5.41488583400513E-003,4.25291054075299E-001,3.27096839210622E-006,0.0000000000000000E+000,0.1000000000000000E+003,2.00000000000000E-001,2.00000000000000E-001,2.95684045737927E-001,0.00000000000000E+000,1.23526738433633E-014,6.92510515789200E-014 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00938000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00938000_ref.csv index a0cb93c0f..6fb7f5258 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00938000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_00938000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-012,6.63670707960183E-003,5.03195783170117E-001,3.47824674728444E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,3.17377387177713E-001,0.00000000000000E+000,1.89944883450420E-014,8.81554474891239E-014 +1.00000000000000E-012,6.63670707960183E-003,5.03195783170117E-001,3.47824674728444E-006,0.0000000000000000E+000,0.1000000000000000E+003,2.00000000000000E-001,2.00000000000000E-001,3.17377387177713E-001,0.00000000000000E+000,1.89944883450420E-014,8.81554474891239E-014 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01030000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01030000_ref.csv index 398df8c76..5ba596aee 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01030000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01030000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-012,6.50156914149986E-003,5.01069511864197E-001,3.63288164307219E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,2.50505744656203E-001,0.00000000000000E+000,4.42504009113350E-014,3.42751663206450E-014 +1.00000000000000E-012,6.50156914149986E-003,5.01069511864197E-001,3.63288164307219E-006,0.0000000000000000E+000,0.1000000000000000E+003,2.00000000000000E-001,2.00000000000000E-001,2.50505744656203E-001,0.00000000000000E+000,4.42504009113350E-014,3.42751663206450E-014 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01130000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01130000_ref.csv index e700deb50..4bbe1f73e 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01130000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01130000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-012,7.13039570078954E-003,5.35804451332749E-001,3.81185943832952E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,2.23135315171175E-001,0.00000000000000E+000,6.56373439148567E-014,6.20636773329436E-015 +1.00000000000000E-012,7.13039570078954E-003,5.35804451332749E-001,3.81185943832952E-006,0.0000000000000000E+000,0.1000000000000000E+003,2.00000000000000E-001,2.00000000000000E-001,2.23135315171175E-001,0.00000000000000E+000,6.56373439148567E-014,6.20636773329436E-015 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01260000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01260000_ref.csv index b07f4d7ce..649e897ae 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01260000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01260000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-012,7.41141210419671E-003,5.75456152724456E-001,3.92916834833356E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,1.06767525015844E-001,0.00000000000000E+000,3.44953922724716E-014,5.85600826447936E-016 +1.00000000000000E-012,7.41141210419671E-003,5.75456152724456E-001,3.92916834833356E-006,0.0000000000000000E+000,0.1000000000000000E+003,2.00000000000000E-001,2.00000000000000E-001,1.06767525015844E-001,0.00000000000000E+000,3.44953922724716E-014,5.85600826447936E-016 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01450000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01450000_ref.csv index a6dcfbfa2..993e7239e 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01450000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01450000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-012,6.65027675850004E-003,6.12456655940543E-001,4.07119425011616E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,5.87308821125883E-002,0.00000000000000E+000,1.68372750441953E-014,6.10626502791865E-016 +1.00000000000000E-012,6.65027675850004E-003,6.12456655940543E-001,4.07119425011616E-006,0.0000000000000000E+000,0.1000000000000000E+003,2.00000000000000E-001,2.00000000000000E-001,5.87308821125883E-002,0.00000000000000E+000,1.68372750441953E-014,6.10626502791865E-016 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01680000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01680000_ref.csv index 562e76706..c8ee9e051 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01680000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_01680000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-012,7.77275763175020E-003,6.30202231057627E-001,4.44879885789475E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,6.02831753347437E-002,0.00000000000000E+000,1.92697707848252E-014,1.39643273999123E-015 +1.00000000000000E-012,7.77275763175020E-003,6.30202231057627E-001,4.44879885789475E-006,0.0000000000000000E+000,0.1000000000000000E+003,2.00000000000000E-001,2.00000000000000E-001,6.02831753347437E-002,0.00000000000000E+000,1.92697707848252E-014,1.39643273999123E-015 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02050000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02050000_ref.csv index d08ab0301..8ae34b3f6 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02050000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02050000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-012,1.06319524888115E-002,6.07432039676916E-001,5.12255083718190E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,4.40589093002749E-002,0.00000000000000E+000,1.16019035530454E-014,9.66491620402533E-015 +1.00000000000000E-012,1.06319524888115E-002,6.07432039676916E-001,5.12255083718190E-006,0.0000000000000000E+000,0.1000000000000000E+003,2.00000000000000E-001,2.00000000000000E-001,4.40589093002749E-002,0.00000000000000E+000,1.16019035530454E-014,9.66491620402533E-015 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02450000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02450000_ref.csv index 4b794248c..cc4c2ecab 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02450000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02450000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-012,1.34641353177094E-002,5.41785962977047E-001,5.79453776989234E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,3.44164212462233E-002,0.00000000000000E+000,7.69289290812374E-015,1.37641219891609E-014 +1.00000000000000E-012,1.34641353177094E-002,5.41785962977047E-001,5.79453776989234E-006,0.0000000000000000E+000,0.1000000000000000E+003,2.00000000000000E-001,2.00000000000000E-001,3.44164212462233E-002,0.00000000000000E+000,7.69289290812374E-015,1.37641219891609E-014 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02970000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02970000_ref.csv index 34b03d2f3..eaeba441e 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02970000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_02970000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-012,1.60805126110273E-002,5.84406124811465E-001,6.52721823304018E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,1.76642476353337E-002,0.00000000000000E+000,3.86396442750262E-015,9.04427943069590E-015 +1.00000000000000E-012,1.60805126110273E-002,5.84406124811465E-001,6.52721823304018E-006,0.0000000000000000E+000,0.1000000000000000E+003,2.00000000000000E-001,2.00000000000000E-001,1.76642476353337E-002,0.00000000000000E+000,3.86396442750262E-015,9.04427943069590E-015 diff --git a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_04190000_ref.csv b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_04190000_ref.csv index 7d915fca1..caf01019f 100644 --- a/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_04190000_ref.csv +++ b/regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/Database_Tvib_04190000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-RotRelaxPmean,008-RotRelaxPmax,009-VibRelaxPmean,010-VibRelaxPmax,011-VibRelaxRate001+004,012-VibRelaxRate002+004 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2000000000000000E+000,0.2000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-012,1.84178061838665E-002,6.46459908519344E-001,7.90007461546092E-006,0.0000000000000000E+000,0.0000000000000000E+000,2.00000000000000E-001,2.00000000000000E-001,7.68774501587622E-003,0.00000000000000E+000,2.90798359116454E-015,3.72882577524540E-015 +1.00000000000000E-012,1.84178061838665E-002,6.46459908519344E-001,7.90007461546092E-006,0.0000000000000000E+000,0.1000000000000000E+003,2.00000000000000E-001,2.00000000000000E-001,7.68774501587622E-003,0.00000000000000E+000,2.90798359116454E-015,3.72882577524540E-015 diff --git a/regressioncheck/NIG_Reservoir/RELAX_N2Ion/PartAnalyze_ref.csv b/regressioncheck/NIG_Reservoir/RELAX_N2Ion/PartAnalyze_ref.csv index bf7c05584..ba9f5efa5 100644 --- a/regressioncheck/NIG_Reservoir/RELAX_N2Ion/PartAnalyze_ref.csv +++ b/regressioncheck/NIG_Reservoir/RELAX_N2Ion/PartAnalyze_ref.csv @@ -1,32 +1,32 @@ 001-TIME,002-TempTra-001,003-TempVib001,004-XiVibMean001,005-TempRot001,006-TempElec001,007-XiElecMean001,008-TempTotal001,009-Pmean,010-Pmax,011-MeanFreePath,012-MaxMCSoverMFP,013-ResolvedCellPercentage 0.0000000000000000E+000,0.1199999999999996E+005,0.1498939235726383E+005,0.1795674261359305E+001,0.9120452603291011E+004,0.8021351141211584E+004,0.6084224543803108E+000,0.1162023467654341E+005,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -2.00000000000000E-007,1.10620424966161E+004,1.40942438607584E+004,1.78320098412490E+000,1.10400915477564E+004,8.41970400148507E+003,6.28381327931031E-001,1.15616289857855E+004,3.50295156594974E-001,6.05575496880284E-001,3.33888939756425E-005,0.0000000000000000E+000,0.0000000000000000E+000 -4.00000000000000E-007,1.12214297367351E+004,1.35969318598786E+004,1.77559124820753E+000,1.11005418605492E+004,8.80019566952623E+003,6.45663446795183E-001,1.15465557152132E+004,3.52371490739197E-001,6.52345461975280E-001,3.33784415518489E-005,0.0000000000000000E+000,0.0000000000000000E+000 -5.99999999999999E-007,1.13191676825505E+004,1.30997738255577E+004,1.76743147007350E+000,1.12661466415723E+004,9.15655059130747E+003,6.60420916251511E-001,1.15362990424938E+004,3.51845611546445E-001,6.55097874341715E-001,3.33713232239882E-005,0.0000000000000000E+000,0.0000000000000000E+000 -7.99999999999998E-007,1.14002797881253E+004,1.26535479135592E+004,1.75958625529683E+000,1.14346545226965E+004,9.45777718463110E+003,6.71911417502580E-001,1.15306428995324E+004,3.54198673646520E-001,6.08769197819326E-001,3.33673956943485E-005,0.0000000000000000E+000,0.0000000000000000E+000 -9.99999999999998E-007,1.13801960841996E+004,1.24060892180104E+004,1.75500358614321E+000,1.15714303126550E+004,9.73197062214363E+003,6.81647902974265E-001,1.15226533658753E+004,3.52763617836066E-001,6.47526153049008E-001,3.33618454022084E-005,0.0000000000000000E+000,0.0000000000000000E+000 -1.20000000000000E-006,1.14597239577930E+004,1.21945325811577E+004,1.75094525639444E+000,1.15720703519370E+004,9.91029290351181E+003,6.87633732270350E-001,1.15196630138486E+004,3.53428225078326E-001,6.39393524178442E-001,3.33597672662352E-005,0.0000000000000000E+000,0.0000000000000000E+000 -1.40000000000001E-006,1.15143421960608E+004,1.21192635067520E+004,1.74946880437878E+000,1.14667653792402E+004,1.01045454374115E+004,6.93860571566418E-001,1.15123182286302E+004,3.54806509728534E-001,6.22475265888892E-001,3.33546612895410E-005,0.0000000000000000E+000,0.0000000000000000E+000 -1.60000000000001E-006,1.15421066457483E+004,1.19469713475320E+004,1.74602252305702E+000,1.15535083677439E+004,1.01895067842464E+004,6.96491493343828E-001,1.15135722063277E+004,3.54173190706720E-001,6.14517346957743E-001,3.33555332099185E-005,0.0000000000000000E+000,0.0000000000000000E+000 -1.80000000000002E-006,1.15031477156403E+004,1.18766396928797E+004,1.74458836553097E+000,1.15711585529757E+004,1.04094408161667E+004,7.03051403462513E-001,1.15056557937308E+004,3.53951282281732E-001,6.45104718014630E-001,3.33500275299441E-005,0.0000000000000000E+000,0.0000000000000000E+000 -2.00000000000002E-006,1.15436342193899E+004,1.17855208515193E+004,1.74270612076026E+000,1.15121902978973E+004,1.05864114397443E+004,7.08078041580060E-001,1.15008012835731E+004,3.53918724238798E-001,6.46159818337577E-001,3.33466499073762E-005,0.0000000000000000E+000,0.0000000000000000E+000 -2.20000000000001E-006,1.15443977399036E+004,1.17599421116987E+004,1.74217275380026E+000,1.14892769370729E+004,1.06806412971430E+004,7.10666728462121E-001,1.14976277752372E+004,3.54310105963646E-001,6.18637946374859E-001,3.33444412897225E-005,0.0000000000000000E+000,0.0000000000000000E+000 -2.40000000000000E-006,1.15264339955997E+004,1.17142184297887E+004,1.74121380773915E+000,1.14919271035404E+004,1.08201516905252E+004,7.14391246342048E-001,1.14933578295699E+004,3.53053188187655E-001,6.28817487950188E-001,3.33414688703111E-005,0.0000000000000000E+000,0.0000000000000000E+000 -2.60000000000000E-006,1.15015129694199E+004,1.16469079132382E+004,1.73978910734463E+000,1.15302490374946E+004,1.09524210600295E+004,7.17806982547282E-001,1.14902877260648E+004,3.54611876529472E-001,6.22018808953562E-001,3.33393311733100E-005,0.0000000000000000E+000,0.0000000000000000E+000 -2.79999999999999E-006,1.14936081788626E+004,1.16158891011923E+004,1.73912727894516E+000,1.15296127447198E+004,1.10395064405352E+004,7.19996410128193E-001,1.14879398988128E+004,3.53517886072671E-001,6.33765105009052E-001,3.33376961005468E-005,0.0000000000000000E+000,0.0000000000000000E+000 -2.99999999999998E-006,1.14961918775913E+004,1.14814089335017E+004,1.73621868308926E+000,1.16270838343482E+004,1.11044825614669E+004,7.21599977034699E-001,1.14899514545070E+004,3.53273104205770E-001,6.51399070691700E-001,3.33390970028082E-005,0.0000000000000000E+000,0.0000000000000000E+000 -3.19999999999998E-006,1.14947839462852E+004,1.15578459735352E+004,1.73787978401859E+000,1.15390463232692E+004,1.11330604690386E+004,7.22297267454223E-001,1.14863186106117E+004,3.52620893623727E-001,6.43946219479876E-001,3.33365668555254E-005,0.0000000000000000E+000,0.0000000000000000E+000 -3.39999999999997E-006,1.15348734260212E+004,1.15755950845536E+004,1.73826251931340E+000,1.14552234673610E+004,1.11452253891536E+004,7.22592618865092E-001,1.14852716346567E+004,3.54714892437842E-001,6.54500529157322E-001,3.33358375609114E-005,0.0000000000000000E+000,0.0000000000000000E+000 -3.59999999999997E-006,1.14588535675422E+004,1.16154094207756E+004,1.73911701793932E+000,1.15100914566993E+004,1.11847131060348E+004,7.23545339256125E-001,1.14824901284989E+004,3.52565855534715E-001,6.20357961047059E-001,3.33338997948782E-005,0.0000000000000000E+000,0.0000000000000000E+000 -3.79999999999996E-006,1.14660905638821E+004,1.15733564767493E+004,1.73821430826296E+000,1.15542363619436E+004,1.11580661381639E+004,7.22903431992467E-001,1.14848640011933E+004,3.53421093821022E-001,6.22613175950687E-001,3.33355536010026E-005,0.0000000000000000E+000,0.0000000000000000E+000 -3.99999999999997E-006,1.14396806840396E+004,1.15245854551015E+004,1.73715955110718E+000,1.16161940305800E+004,1.12107807919955E+004,7.24169281760960E-001,1.14845463593298E+004,3.52757921266571E-001,6.37704245356829E-001,3.33353323244705E-005,0.0000000000000000E+000,0.0000000000000000E+000 -4.19999999999999E-006,1.14498926434249E+004,1.15252250918572E+004,1.73717343922432E+000,1.15648417369740E+004,1.12822255609249E+004,7.25859234143595E-001,1.14819253338867E+004,3.54037527612684E-001,6.04324450877202E-001,3.33335062810942E-005,0.0000000000000000E+000,0.0000000000000000E+000 -4.40000000000000E-006,1.14362688641992E+004,1.15578459735351E+004,1.73787978401859E+000,1.15291295399624E+004,1.13301128655045E+004,7.26975670238512E-001,1.14791142917764E+004,3.53347580034793E-001,6.36726494593885E-001,3.33315475028082E-005,0.0000000000000000E+000,0.0000000000000000E+000 -4.60000000000002E-006,1.14898976507351E+004,1.15773539868827E+004,1.73830038691590E+000,1.14517074421532E+004,1.12849288765060E+004,7.25922604674396E-001,1.14800980371989E+004,3.52778215066936E-001,6.53801352474305E-001,3.33322330335281E-005,0.0000000000000000E+000,0.0000000000000000E+000 -4.80000000000003E-006,1.14006646609161E+004,1.15714376657433E+004,1.73817297030696E+000,1.15562407971109E+004,1.13559874574951E+004,7.27573534441274E-001,1.14777472865143E+004,3.52422639774287E-001,6.38035268305511E-001,3.33305948203262E-005,0.0000000000000000E+000,0.0000000000000000E+000 -5.00000000000005E-006,1.14829227269937E+004,1.15477720015858E+004,1.73766205539366E+000,1.14325494222931E+004,1.14041644030299E+004,7.28676788047437E-001,1.14768354264956E+004,3.52715733320417E-001,6.66773257456942E-001,3.33299592861160E-005,0.0000000000000000E+000,0.0000000000000000E+000 -5.20000000000006E-006,1.15397590500250E+004,1.14770911680712E+004,1.73612422407439E+000,1.13995536468336E+004,1.14405626163898E+004,7.29501819209125E-001,1.14779324851215E+004,3.55218418595250E-001,6.05809549848937E-001,3.33307238925228E-005,0.0000000000000000E+000,0.0000000000000000E+000 -5.40000000000008E-006,1.14937884956755E+004,1.14946819349676E+004,1.73650863225748E+000,1.14590254831245E+004,1.14244392698882E+004,7.29137250542961E-001,1.14779104771172E+004,3.53906639442327E-001,6.49888010646296E-001,3.33307085543615E-005,0.0000000000000000E+000,0.0000000000000000E+000 -5.60000000000009E-006,1.14631607567901E+004,1.14163204120801E+004,1.73478755678303E+000,1.15874830208812E+004,1.14149776653543E+004,7.28922649120477E-001,1.14808818004431E+004,3.52345286485169E-001,6.50562707365760E-001,3.33327791731437E-005,0.0000000000000000E+000,0.0000000000000000E+000 -5.80000000000011E-006,1.15111957438952E+004,1.13609834191408E+004,1.73355860055752E+000,1.15659699516542E+004,1.14239565349630E+004,7.29126313377930E-001,1.14824578489909E+004,3.53730215526555E-001,6.35601725338407E-001,3.33338773049195E-005,0.0000000000000000E+000,0.0000000000000000E+000 -6.00000000000000E-006,1.15442302119966E+004,1.13014842452330E+004,1.73222446876191E+000,1.15797946775515E+004,1.14153638532945E+004,7.28931417981426E-001,1.14848163200314E+004,3.54410919700254E-001,6.53336080195601E-001,3.33355203855196E-005,0.0000000000000000E+000,0.0000000000000000E+000 +2.00000000000000E-007,1.10620424966161E+004,1.40942438607584E+004,1.78320098412490E+000,1.10400915477564E+004,8.41970400148507E+003,6.28381327931031E-001,1.15616289857855E+004,3.50295156594974E-001,6.05575496880284E-001,3.33888939756425E-005,0.9219423632212573E-001,0.1000000000000000E+003 +4.00000000000000E-007,1.12214297367351E+004,1.35969318598786E+004,1.77559124820753E+000,1.11005418605492E+004,8.80019566952623E+003,6.45663446795183E-001,1.15465557152132E+004,3.52371490739197E-001,6.52345461975280E-001,3.33784415518489E-005,0.9147609852052571E-001,0.1000000000000000E+003 +5.99999999999999E-007,1.13191676825505E+004,1.30997738255577E+004,1.76743147007350E+000,1.12661466415723E+004,9.15655059130747E+003,6.60420916251511E-001,1.15362990424938E+004,3.51845611546445E-001,6.55097874341715E-001,3.33713232239882E-005,0.9263859812991927E-001,0.1000000000000000E+003 +7.99999999999998E-007,1.14002797881253E+004,1.26535479135592E+004,1.75958625529683E+000,1.14346545226965E+004,9.45777718463110E+003,6.71911417502580E-001,1.15306428995324E+004,3.54198673646520E-001,6.08769197819326E-001,3.33673956943485E-005,0.9201138551599330E-001,0.1000000000000000E+003 +9.99999999999998E-007,1.13801960841996E+004,1.24060892180104E+004,1.75500358614321E+000,1.15714303126550E+004,9.73197062214363E+003,6.81647902974265E-001,1.15226533658753E+004,3.52763617836066E-001,6.47526153049008E-001,3.33618454022084E-005,0.9202782292762501E-001,0.1000000000000000E+003 +1.20000000000000E-006,1.14597239577930E+004,1.21945325811577E+004,1.75094525639444E+000,1.15720703519370E+004,9.91029290351181E+003,6.87633732270350E-001,1.15196630138486E+004,3.53428225078326E-001,6.39393524178442E-001,3.33597672662352E-005,0.9071000105302542E-001,0.1000000000000000E+003 +1.40000000000001E-006,1.15143421960608E+004,1.21192635067520E+004,1.74946880437878E+000,1.14667653792402E+004,1.01045454374115E+004,6.93860571566418E-001,1.15123182286302E+004,3.54806509728534E-001,6.22475265888892E-001,3.33546612895410E-005,0.9175135095790973E-001,0.1000000000000000E+003 +1.60000000000001E-006,1.15421066457483E+004,1.19469713475320E+004,1.74602252305702E+000,1.15535083677439E+004,1.01895067842464E+004,6.96491493343828E-001,1.15135722063277E+004,3.54173190706720E-001,6.14517346957743E-001,3.33555332099185E-005,0.9277778164824561E-001,0.1000000000000000E+003 +1.80000000000002E-006,1.15031477156403E+004,1.18766396928797E+004,1.74458836553097E+000,1.15711585529757E+004,1.04094408161667E+004,7.03051403462513E-001,1.15056557937308E+004,3.53951282281732E-001,6.45104718014630E-001,3.33500275299441E-005,0.9130298514029211E-001,0.1000000000000000E+003 +2.00000000000002E-006,1.15436342193899E+004,1.17855208515193E+004,1.74270612076026E+000,1.15121902978973E+004,1.05864114397443E+004,7.08078041580060E-001,1.15008012835731E+004,3.53918724238798E-001,6.46159818337577E-001,3.33466499073762E-005,0.9125662785005534E-001,0.1000000000000000E+003 +2.20000000000001E-006,1.15443977399036E+004,1.17599421116987E+004,1.74217275380026E+000,1.14892769370729E+004,1.06806412971430E+004,7.10666728462121E-001,1.14976277752372E+004,3.54310105963646E-001,6.18637946374859E-001,3.33444412897225E-005,0.9148581336088540E-001,0.1000000000000000E+003 +2.40000000000000E-006,1.15264339955997E+004,1.17142184297887E+004,1.74121380773915E+000,1.14919271035404E+004,1.08201516905252E+004,7.14391246342048E-001,1.14933578295699E+004,3.53053188187655E-001,6.28817487950188E-001,3.33414688703111E-005,0.9249291961421477E-001,0.1000000000000000E+003 +2.60000000000000E-006,1.15015129694199E+004,1.16469079132382E+004,1.73978910734463E+000,1.15302490374946E+004,1.09524210600295E+004,7.17806982547282E-001,1.14902877260648E+004,3.54611876529472E-001,6.22018808953562E-001,3.33393311733100E-005,0.9170980523871246E-001,0.1000000000000000E+003 +2.79999999999999E-006,1.14936081788626E+004,1.16158891011923E+004,1.73912727894516E+000,1.15296127447198E+004,1.10395064405352E+004,7.19996410128193E-001,1.14879398988128E+004,3.53517886072671E-001,6.33765105009052E-001,3.33376961005468E-005,0.9166248930489168E-001,0.1000000000000000E+003 +2.99999999999998E-006,1.14961918775913E+004,1.14814089335017E+004,1.73621868308926E+000,1.16270838343482E+004,1.11044825614669E+004,7.21599977034699E-001,1.14899514545070E+004,3.53273104205770E-001,6.51399070691700E-001,3.33390970028082E-005,0.9079531686630903E-001,0.1000000000000000E+003 +3.19999999999998E-006,1.14947839462852E+004,1.15578459735352E+004,1.73787978401859E+000,1.15390463232692E+004,1.11330604690386E+004,7.22297267454223E-001,1.14863186106117E+004,3.52620893623727E-001,6.43946219479876E-001,3.33365668555254E-005,0.9131189946110138E-001,0.1000000000000000E+003 +3.39999999999997E-006,1.15348734260212E+004,1.15755950845536E+004,1.73826251931340E+000,1.14552234673610E+004,1.11452253891536E+004,7.22592618865092E-001,1.14852716346567E+004,3.54714892437842E-001,6.54500529157322E-001,3.33358375609114E-005,0.9203584635074112E-001,0.1000000000000000E+003 +3.59999999999997E-006,1.14588535675422E+004,1.16154094207756E+004,1.73911701793932E+000,1.15100914566993E+004,1.11847131060348E+004,7.23545339256125E-001,1.14824901284989E+004,3.52565855534715E-001,6.20357961047059E-001,3.33338997948782E-005,0.9082709212574368E-001,0.1000000000000000E+003 +3.79999999999996E-006,1.14660905638821E+004,1.15733564767493E+004,1.73821430826296E+000,1.15542363619436E+004,1.11580661381639E+004,7.22903431992467E-001,1.14848640011933E+004,3.53421093821022E-001,6.22613175950687E-001,3.33355536010026E-005,0.9115433289309556E-001,0.1000000000000000E+003 +3.99999999999997E-006,1.14396806840396E+004,1.15245854551015E+004,1.73715955110718E+000,1.16161940305800E+004,1.12107807919955E+004,7.24169281760960E-001,1.14845463593298E+004,3.52757921266571E-001,6.37704245356829E-001,3.33353323244705E-005,0.9239306117699495E-001,0.1000000000000000E+003 +4.19999999999999E-006,1.14498926434249E+004,1.15252250918572E+004,1.73717343922432E+000,1.15648417369740E+004,1.12822255609249E+004,7.25859234143595E-001,1.14819253338867E+004,3.54037527612684E-001,6.04324450877202E-001,3.33335062810942E-005,0.9202343931982973E-001,0.1000000000000000E+003 +4.40000000000000E-006,1.14362688641992E+004,1.15578459735351E+004,1.73787978401859E+000,1.15291295399624E+004,1.13301128655045E+004,7.26975670238512E-001,1.14791142917764E+004,3.53347580034793E-001,6.36726494593885E-001,3.33315475028082E-005,0.9117874755418223E-001,0.1000000000000000E+003 +4.60000000000002E-006,1.14898976507351E+004,1.15773539868827E+004,1.73830038691590E+000,1.14517074421532E+004,1.12849288765060E+004,7.25922604674396E-001,1.14800980371989E+004,3.52778215066936E-001,6.53801352474305E-001,3.33322330335281E-005,0.9152911894320387E-001,0.1000000000000000E+003 +4.80000000000003E-006,1.14006646609161E+004,1.15714376657433E+004,1.73817297030696E+000,1.15562407971109E+004,1.13559874574951E+004,7.27573534441274E-001,1.14777472865143E+004,3.52422639774287E-001,6.38035268305511E-001,3.33305948203262E-005,0.9138904209173171E-001,0.1000000000000000E+003 +5.00000000000005E-006,1.14829227269937E+004,1.15477720015858E+004,1.73766205539366E+000,1.14325494222931E+004,1.14041644030299E+004,7.28676788047437E-001,1.14768354264956E+004,3.52715733320417E-001,6.66773257456942E-001,3.33299592861160E-005,0.9120021036442594E-001,0.1000000000000000E+003 +5.20000000000006E-006,1.15397590500250E+004,1.14770911680712E+004,1.73612422407439E+000,1.13995536468336E+004,1.14405626163898E+004,7.29501819209125E-001,1.14779324851215E+004,3.55218418595250E-001,6.05809549848937E-001,3.33307238925228E-005,0.9183247214207704E-001,0.1000000000000000E+003 +5.40000000000008E-006,1.14937884956755E+004,1.14946819349676E+004,1.73650863225748E+000,1.14590254831245E+004,1.14244392698882E+004,7.29137250542961E-001,1.14779104771172E+004,3.53906639442327E-001,6.49888010646296E-001,3.33307085543615E-005,0.9194684487766863E-001,0.1000000000000000E+003 +5.60000000000009E-006,1.14631607567901E+004,1.14163204120801E+004,1.73478755678303E+000,1.15874830208812E+004,1.14149776653543E+004,7.28922649120477E-001,1.14808818004431E+004,3.52345286485169E-001,6.50562707365760E-001,3.33327791731437E-005,0.9129140350437603E-001,0.1000000000000000E+003 +5.80000000000011E-006,1.15111957438952E+004,1.13609834191408E+004,1.73355860055752E+000,1.15659699516542E+004,1.14239565349630E+004,7.29126313377930E-001,1.14824578489909E+004,3.53730215526555E-001,6.35601725338407E-001,3.33338773049195E-005,0.9161641795054992E-001,0.1000000000000000E+003 +6.00000000000000E-006,1.15442302119966E+004,1.13014842452330E+004,1.73222446876191E+000,1.15797946775515E+004,1.14153638532945E+004,7.28931417981426E-001,1.14848163200314E+004,3.54410919700254E-001,6.53336080195601E-001,3.33355203855196E-005,0.9277220432190136E-001,0.1000000000000000E+003 diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_ionization_H/PartAnalyze_ref.csv b/regressioncheck/WEK_Reservoir/CHEM_EQUI_ionization_H/PartAnalyze_ref.csv index fd7b483d4..6ad97a3e3 100644 --- a/regressioncheck/WEK_Reservoir/CHEM_EQUI_ionization_H/PartAnalyze_ref.csv +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_ionization_H/PartAnalyze_ref.csv @@ -1,12 +1,12 @@ 001-TIME,002-nPart-Spec-001,003-nPart-Spec-002,004-nPart-Spec-003,005-nPart-Spec-004,006-Ekin-001,007-Ekin-002,008-Ekin-003,009-Ekin-004,010-E-kin+pot,011-Pmean,012-Pmax,013-MeanFreePath,014-MaxMCSoverMFP,015-ResolvedCellPercentage,016-CollRate001+001,017-CollRate001+002,018-CollRate001+003,019-CollRate002+002,020-CollRate002+003,021-CollRate003+003,022-TotalCollRate 0,49948,49948,49948,149844,1.03438052902619E-16,3.10318003822374E-15,1.03439513327792E-16,3.31005760445414E-15,3.31005760445414E-15,0,0,0,0,0,0,0,0,0,0 -0.0002,47841,52055,52055,151951,3.75576171071022E-16,2.06834764519594E-15,4.07043212928597E-16,2.85096702919551E-15,2.85096702919551E-15,0.149443104413418,0.467207788995417,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,89224500.0001041,2583960499.7574,193477999.998587,0,2802220499.70659,104939499.999875,5773822999.46256 -0.0004,47837,52059,52059,151955,5.3541689465759E-16,1.72784832418965E-15,5.8661857321245E-16,2.84988379205964E-15,2.84988379205964E-15,0.14475291855362,0.484424079428058,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,105243499.999871,2454600999.78752,227728499.998089,0,2674257999.73638,124082999.999597,5585913999.52146 -0.0006,47837,52059,52059,151955,6.4579500166806E-16,1.50229479257861E-15,7.01994230874746E-16,2.85008402512143E-15,2.85008402512143E-15,0.140875513365371,0.470876392246102,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,112056999.999772,2361235499.80926,244364499.997847,0,2569591499.76075,132584999.999473,5419833499.5671 -0.0008,47838,52058,52058,151954,7.17380587053016E-16,1.3499520317481E-15,7.82773337039872E-16,2.85010595584096E-15,2.85010595584096E-15,0.137612409366529,0.472207560148792,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,116001999.999714,2290508499.82573,253059999.99772,0,2490619499.77914,137765999.999398,5287955999.6017 -0.001,47842,52054,52054,151950,7.69215382080704E-16,1.24739062769021E-15,8.34400517357867E-16,2.85100652712877E-15,2.85100652712877E-15,0.135521933396005,0.460675561474249,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,118773499.999674,2234355999.8388,259234999.99763,0,2431937999.7928,140783999.999354,5185086499.62826 -0.0012,47845,52051,52051,151947,8.04305348287102E-16,1.16964203147255E-15,8.77284297905665E-16,2.8512316776653E-15,2.8512316776653E-15,0.133352324728565,0.459250118903661,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,121271999.999638,2192844499.84847,262757499.997579,0,2386210499.80345,142425999.99933,5105510499.64846 -0.0014,47844,52052,52052,151948,8.29819712773863E-16,1.1179146130805E-15,9.03706735105675E-16,2.85144106096005E-15,2.85144106096005E-15,0.13199333360919,0.453731031171096,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,121875999.999629,2157814999.85662,265262999.997542,0,2348139999.81231,144701999.999297,5037795999.6654 -0.0016,47847,52049,52049,151945,8.48991797927101E-16,1.08033911097692E-15,9.22763495351452E-16,2.85209440425546E-15,2.85209440425546E-15,0.130858918950888,0.4719042396542,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,122611499.999618,2135087499.86192,267527999.997509,0,2322010999.8184,145216499.999289,4992454499.67673 -0.0018,47854,52042,52042,151938,8.61961644945353E-16,1.04899486149741E-15,9.42192780351723E-16,2.85314928679452E-15,2.85314928679452E-15,0.129824974984239,0.45750958818327,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,123610499.999604,2114089499.86681,268306999.997498,0,2300533999.8234,145339499.999288,4951880499.68659 -0.002,47853,52043,52043,151939,8.75299807662746E-16,1.03086347681736E-15,9.47238069980003E-16,2.85340135446014E-15,2.85340135446014E-15,0.129324326510397,0.455645355052123,2.62E-01,0.0000000000000000E+000,0.0000000000000000E+000,123988999.716151,2100104995.06909,269352499.381726,0,2284757994.60396,146673499.663963,4924877988.43489 +0.0002,47841,52055,52055,151951,3.75576171071022E-16,2.06834764519594E-15,4.07043212928597E-16,2.85096702919551E-15,2.85096702919551E-15,0.149443104413418,0.467207788995417,2.62E-01,0.1012156840957960E-004,0.0000000000000000E+000,89224500.0001041,2583960499.7574,193477999.998587,0,2802220499.70659,104939499.999875,5773822999.46256 +0.0004,47837,52059,52059,151955,5.3541689465759E-16,1.72784832418965E-15,5.8661857321245E-16,2.84988379205964E-15,2.84988379205964E-15,0.14475291855362,0.484424079428058,2.62E-01,0.1009731828658396E-004,0.1000000000000000E+003,105243499.999871,2454600999.78752,227728499.998089,0,2674257999.73638,124082999.999597,5585913999.52146 +0.0006,47837,52059,52059,151955,6.4579500166806E-16,1.50229479257861E-15,7.01994230874746E-16,2.85008402512143E-15,2.85008402512143E-15,0.140875513365371,0.470876392246102,2.62E-01,0.1010841800464995E-004,0.1000000000000000E+003,112056999.999772,2361235499.80926,244364499.997847,0,2569591499.76075,132584999.999473,5419833499.5671 +0.0008,47838,52058,52058,151954,7.17380587053016E-16,1.3499520317481E-15,7.82773337039872E-16,2.85010595584096E-15,2.85010595584096E-15,0.137612409366529,0.472207560148792,2.62E-01,0.1015720239371662E-004,0.1000000000000000E+003,116001999.999714,2290508499.82573,253059999.99772,0,2490619499.77914,137765999.999398,5287955999.6017 +0.001,47842,52054,52054,151950,7.69215382080704E-16,1.24739062769021E-15,8.34400517357867E-16,2.85100652712877E-15,2.85100652712877E-15,0.135521933396005,0.460675561474249,2.62E-01,0.1001275386419783E-004,0.1000000000000000E+003,118773499.999674,2234355999.8388,259234999.99763,0,2431937999.7928,140783999.999354,5185086499.62826 +0.0012,47845,52051,52051,151947,8.04305348287102E-16,1.16964203147255E-15,8.77284297905665E-16,2.8512316776653E-15,2.8512316776653E-15,0.133352324728565,0.459250118903661,2.62E-01,0.1005891410479841E-004,0.1000000000000000E+003,121271999.999638,2192844499.84847,262757499.997579,0,2386210499.80345,142425999.99933,5105510499.64846 +0.0014,47844,52052,52052,151948,8.29819712773863E-16,1.1179146130805E-15,9.03706735105675E-16,2.85144106096005E-15,2.85144106096005E-15,0.13199333360919,0.453731031171096,2.62E-01,0.1017841156866363E-004,0.1000000000000000E+003,121875999.999629,2157814999.85662,265262999.997542,0,2348139999.81231,144701999.999297,5037795999.6654 +0.0016,47847,52049,52049,151945,8.48991797927101E-16,1.08033911097692E-15,9.22763495351452E-16,2.85209440425546E-15,2.85209440425546E-15,0.130858918950888,0.4719042396542,2.62E-01,0.1008578982088936E-004,0.1000000000000000E+003,122611499.999618,2135087499.86192,267527999.997509,0,2322010999.8184,145216499.999289,4992454499.67673 +0.0018,47854,52042,52042,151938,8.61961644945353E-16,1.04899486149741E-15,9.42192780351723E-16,2.85314928679452E-15,2.85314928679452E-15,0.129824974984239,0.45750958818327,2.62E-01,0.1013215127721179E-004,0.1000000000000000E+003,123610499.999604,2114089499.86681,268306999.997498,0,2300533999.8234,145339499.999288,4951880499.68659 +0.002,47853,52043,52043,151939,8.75299807662746E-16,1.03086347681736E-15,9.47238069980003E-16,2.85340135446014E-15,2.85340135446014E-15,0.129324326510397,0.455645355052123,2.62E-01,0.1010700328946614E-004,0.1000000000000000E+003,123988999.716151,2100104995.06909,269352499.381726,0,2284757994.60396,146673499.663963,4924877988.43489 diff --git a/src/particles/dsmc/dsmc_collis_mode.f90 b/src/particles/dsmc/dsmc_collis_mode.f90 index de1b4165c..01997950d 100644 --- a/src/particles/dsmc/dsmc_collis_mode.f90 +++ b/src/particles/dsmc/dsmc_collis_mode.f90 @@ -922,9 +922,8 @@ SUBROUTINE DSMC_perform_collision(iPair, iElem, NodeVolume, NodePartNum) USE MOD_Globals ,ONLY: Abort, CROSS USE MOD_DSMC_Vars ,ONLY: CollisMode, Coll_pData, SelectionProc USE MOD_DSMC_Vars ,ONLY: DSMC -USE MOD_Particle_Vars ,ONLY: PartState, WriteMacroVolumeValues, Symmetry +USE MOD_Particle_Vars ,ONLY: PartState, Symmetry USE MOD_Particle_Vars ,ONLY: UseRotRefFrame, PDM, PartVeloRotRef, RotRefFrameOmega -USE MOD_TimeDisc_Vars ,ONLY: TEnd, Time USE MOD_DSMC_Vars ,ONLY: RadialWeighting USE MOD_Particle_Vars ,ONLY: usevMPF, Species, PartSpecies USE MOD_Particle_Analyze_Vars ,ONLY: CalcCollRates @@ -964,18 +963,16 @@ SUBROUTINE DSMC_perform_collision(iPair, iElem, NodeVolume, NodePartNum) iPart2 = Coll_pData(iPair)%iPart_p2 IF(DSMC%CalcQualityFactors) THEN - IF((Time.GE.(1-DSMC%TimeFracSamp)*TEnd).OR.WriteMacroVolumeValues) THEN - IF(Symmetry%Order.EQ.3) THEN - Distance = SQRT((PartState(1,iPart1) - PartState(1,iPart2))**2 + (PartState(2,iPart1) - PartState(2,iPart2))**2 & + IF(Symmetry%Order.EQ.3) THEN + Distance = SQRT((PartState(1,iPart1) - PartState(1,iPart2))**2 + (PartState(2,iPart1) - PartState(2,iPart2))**2 & + (PartState(3,iPart1) - PartState(3,iPart2))**2) - ELSE IF(Symmetry%Order.EQ.2) THEN - Distance = SQRT((PartState(1,iPart1) - PartState(1,iPart2))**2 + (PartState(2,iPart1) - PartState(2,iPart2))**2) - ELSE - Distance = ABS(PartState(1,iPart1) - PartState(1,iPart2)) - END IF - DSMC%CollSepDist = DSMC%CollSepDist + Distance - DSMC%CollSepCount = DSMC%CollSepCount + 1 + ELSE IF(Symmetry%Order.EQ.2) THEN + Distance = SQRT((PartState(1,iPart1) - PartState(1,iPart2))**2 + (PartState(2,iPart1) - PartState(2,iPart2))**2) + ELSE + Distance = ABS(PartState(1,iPart1) - PartState(1,iPart2)) END IF + DSMC%CollSepDist = DSMC%CollSepDist + Distance + DSMC%CollSepCount = DSMC%CollSepCount + 1 END IF SELECT CASE(CollisMode) diff --git a/src/particles/dsmc/dsmc_particle_pairing.f90 b/src/particles/dsmc/dsmc_particle_pairing.f90 index 747d05385..0a9392e38 100644 --- a/src/particles/dsmc/dsmc_particle_pairing.f90 +++ b/src/particles/dsmc/dsmc_particle_pairing.f90 @@ -618,7 +618,6 @@ SUBROUTINE PerformPairingAndCollision(iPartIndx_Node, PartNum, iElem, NodeVolume IF((DSMC%CollSepCount.GT.0).AND.(DSMC%MeanFreePath.GT.0.0)) DSMC%MCSoverMFP = & MAX(DSMC%MCSoverMFP,(DSMC%CollSepDist/DSMC%CollSepCount)/DSMC%MeanFreePath) ! Calculation of the maximum MCS/MFP of all cells for this processor and number of resolved Cells for this processor - WRITE(*,*) "DSMC%MCSoverMFP:", DSMC%MCSoverMFP IF(DSMC%MCSoverMFP .GE. DSMC%MaxMCSoverMFP) DSMC%MaxMCSoverMFP = DSMC%MCSoverMFP ! Calculate number of resolved Cells for this processor DSMC%ParticleCalcCollCounter = DSMC%ParticleCalcCollCounter + 1 ! Counts Particle Collision Calculation From 1db6c20a8b8caaf996816661bd8d060d26d9c4c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Tue, 23 Jan 2024 13:51:35 +0100 Subject: [PATCH 134/222] Reggie DSMC_QualityFactors: delete h5_ref and updated readme --- ...actors_DSMCState_000.00000001000000000_ref.h5 | Bin 8488 -> 0 bytes .../CHE_DSMC/DSMC_QualityFactors/readme.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 regressioncheck/CHE_DSMC/DSMC_QualityFactors/DSMC_QualityFactors_DSMCState_000.00000001000000000_ref.h5 diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/DSMC_QualityFactors_DSMCState_000.00000001000000000_ref.h5 b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/DSMC_QualityFactors_DSMCState_000.00000001000000000_ref.h5 deleted file mode 100644 index c8fb19103455fb760293660ff8e235aeb1d054d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8488 zcmeHMO-vI(6rOFNRw#ce33740K@`IQ62-(W=}!uwwbGTK9@e3Zbj`Ng>~0Oj3r9#A zG-6^5(SwP`i;<)^E}9tBn9#yv#dyVd>J^)YeZSJ-}W<#uUCBiI>0juYDcuK&#&+H=U0Qg;$bh>`g9_J zpr@E$Xnz=bf12mQqN1s#Vjz_m&r-m%K5F4lpM5_QWF#z7jAIXrvhYhyR2)+G`2M=z zuOn!fO|76X{Pm%%V=p+kh)%+Oc3=%f;VX;vh0adIrm(BZDky?3`nWIT_r;Ux)C!yCm-!8C+x({tth~wFW&Srq9M`l<)CGIgDDX-}LnG~IWXJzbH9F6Cm;|)CUw3i4n0X7k#_r4q*@Z31 z5-A-U?2=;W71YY?qMO{G4{MLH>hSlqrNou`e8-tR(!?!LTMM44Jt9zOWY>IUju=H4 zbfGXx$H0BxMYRGsdf(4rhaNe1e14u*|8wuN&QLG3ZhP1Qcd+bP84X;Ae?xBgH|2$| zlVVwSaLJYJ1aRlyg)iF)*au&>6TsnTD#bbC#7W78A6_!u0d?!om~%1#=UD6Tr)^JW z_z;-qrNhsypEHYD?09emNJc>2`Pp|rO>jvj2IyObk;aQL+p^$&NVeOL!v~woiJ!xd z50yeHZ}ezJNBujP2PIdX+NuJ3+qq4U!yf`{cAe(<>zvI==@r5`Fc(J7<@Ue sFW0ocwz~2`)5%8i+e%IAe^aeiUu;F+O-@!eF29W)tF8{-x6VZW0EPKI^8f$< diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md index 118d57386..ac1be6163 100644 --- a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md @@ -3,5 +3,5 @@ * Comparing with the theoretical values from gas kinetic theory * Mean collision probability is expected to be 0.06105 (chosen time step divided by the mean collision time, which is mean free path over average thermal velocity) * Mean free path is expected to be 2.98E-04 meters (Variable hard sphere model) - * Mean collision separation distance over mean free path (only in DSMCState) is 0.0001199, compared to the approximated value of 0.0001558, which assumes that the particles are distributed equidistantly in the cell. The difference is due to a 20% lower mean collision separation distance compared to the equidistant distribution (most likely due to nearest neighbour routine) + * Mean collision separation distance over mean free path (MaxMCSoverMFP in PartAnalyze, because it is only one cell) is 0.0001199, compared to the approximated value of 0.0001558, which assumes that the particles are distributed equidistantly in the cell. The difference is due to a 20% lower mean collision separation distance compared to the equidistant distribution (most likely due to nearest neighbour routine) From bc66988efd9a4e6ab963c5193e5f0903fa60c16c Mon Sep 17 00:00:00 2001 From: Patrick Kopper Date: Thu, 25 Jan 2024 10:57:44 +0100 Subject: [PATCH 135/222] Prevent userblock from including complete HDF5 files --- tools/userblock/generateuserblock.sh | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tools/userblock/generateuserblock.sh b/tools/userblock/generateuserblock.sh index 5b6864e77..229256659 100644 --- a/tools/userblock/generateuserblock.sh +++ b/tools/userblock/generateuserblock.sh @@ -101,7 +101,14 @@ if [ $INSIDEGITREPO ]; then git diff -p $PARENTCOMMIT..HEAD | head -n 1000 >> userblock.txt fi # uncommited changes - git diff -p | head -n 1000 >> userblock.txt + ## exclude any files not wanted such as HDF5, regressionchecks, and tutorials files + ## these can still normally committed as they are only excluded from the userblock + GITROOT=$(git rev-parse --show-toplevel) + PWD=$(pwd) + ## this only works from the root of the git directory + cd $GITROOT + git diff -p HEAD ':!regressioncheck' ':!tutorials' ':!*.h5'| head -n 1000 >> userblock.txt + cd $PWD else echo "not a git repo" >> userblock.txt fi @@ -157,4 +164,4 @@ elf_arch=$( objdump -i | head -4 | tail -1 | xargs) # Build the module objcopy -I binary -O $elf_format -B $elf_arch --add-section ".note.GNU-stack"=/dev/null --redefine-sym _binary_userblock_tar_xz_start=userblock_start --redefine-sym _binary_userblock_tar_xz_end=userblock_end --redefine-sym _binary_userblock_tar_xz_size=userblock_size userblock.tar.xz userblock.o -rm userblock.tar.xz +rm userblock.tar.xz \ No newline at end of file From 5d9f1720e29eec95e9d791650bf28fee005c18c7 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Thu, 25 Jan 2024 19:13:00 +0100 Subject: [PATCH 136/222] Added LastPartVeloRotRef to the GetNextFreePosition routines; Fix using arrays as input for CreateParticle, which might be resized; Addition of OldPartID as optional for CreateParticle --- .../boundary/particle_boundary_condition.f90 | 78 ++++++------------- .../boundary/particle_boundary_init.f90 | 12 +-- .../boundary/particle_boundary_vars.f90 | 2 +- src/particles/particle_operations.f90 | 9 ++- src/particles/particle_tools.f90 | 6 ++ .../surfacemodel/surfacemodel_tools.f90 | 15 +--- 6 files changed, 45 insertions(+), 77 deletions(-) diff --git a/src/particles/boundary/particle_boundary_condition.f90 b/src/particles/boundary/particle_boundary_condition.f90 index 8c9e57c26..1ab62c25d 100644 --- a/src/particles/boundary/particle_boundary_condition.f90 +++ b/src/particles/boundary/particle_boundary_condition.f90 @@ -478,7 +478,7 @@ SUBROUTINE RotPeriodicInterPlaneBoundary(PartID,SideID,ElemID,IsInterPlanePart) USE MOD_DSMC_Vars ,ONLY: DSMC, AmbipolElecVelo USE MOD_part_operations ,ONLY: CreateParticle, RemoveParticle USE MOD_DSMC_Vars ,ONLY: CollisMode, useDSMC, PartStateIntEn -USE MOD_Particle_Vars ,ONLY: usevMPF,PartMPF,PDM,InterPlanePartNumber, InterPlanePartIndx +USE MOD_Particle_Vars ,ONLY: PDM,InterPlanePartNumber, InterPlanePartIndx USE MOD_Particle_Vars ,ONLY: UseRotRefFrame, RotRefFrameOmega, PartVeloRotRef, LastPartVeloRotRef USE MOD_Part_Tools ,ONLY: InRotRefFrameCheck USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame @@ -498,11 +498,11 @@ SUBROUTINE RotPeriodicInterPlaneBoundary(PartID,SideID,ElemID,IsInterPlanePart) LOGICAL,INTENT(IN),OPTIONAL :: IsInterPlanePart !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -INTEGER :: iSide, InterSideID, NumInterPlaneSides,NewElemID, neighPartBound +INTEGER :: iSide, InterSideID, NumInterPlaneSides,NewElemID, neighPartBound, SpecID INTEGER :: BCType, nLocSides, newSideID, iLocSide, locSideID, TriNum, NodeNum REAL :: dtVar LOGICAL :: ParticleFound, DoCreateParticles, ThroughSide -REAL :: Velo_old(1:3), Velo_oldAmbi(1:3) +REAL :: Velo_old(1:3), Velo_oldAmbi(1:3), NewPos(1:3), NewVelo(1:3) REAL :: POI(1:3), POI_rotated(1:3), LastPartPos_rotated(1:3), PartState_rotated(1:3) REAL :: RanNum, RadiusPOI, RanAlpha, RotAlpha, RotDir REAL :: RadiusInterPlane(1:2) @@ -551,6 +551,17 @@ SUBROUTINE RotPeriodicInterPlaneBoundary(PartID,SideID,ElemID,IsInterPlanePart) ! (1.c.II) Create inter particles DO iNewPart = 1,NewPartNumber InterPlanePartNumber = InterPlanePartNumber + 1 + ! In case of sub cycling step particle information before sub cycling must be used => interplane particle can act like origin particle + IF(RotRefSubTimeStep) THEN + NewPos(1:3) = NewPosSubCycling(1:3) + NewElemID = GlobalElemIDSubCycling + ELSE + NewPos(1:3) = PartState(1:3,PartID) + NewElemID = ElemID + END IF + ! Store the values in a separate variable to avoid memory leaks, as these arrays might be resized during CreateParticle + SpecID = PartSpecies(PartID) + NewVelo(1:3) = PartState(4:6,PartID) IF (useDSMC.AND.(CollisMode.GT.1)) THEN VibEnergy = PartStateIntEn(1,PartID) RotEnergy = PartStateIntEn(2,PartID) @@ -564,63 +575,20 @@ SUBROUTINE RotPeriodicInterPlaneBoundary(PartID,SideID,ElemID,IsInterPlanePart) RotEnergy = 0.0 ElecEnergy = 0.0 END IF - ! For creating inter particles: - ! - LastPartPos(1:3,NewPartID) must be redefined as long as LastPartPos is set to PartState in CreateParticle routine - ! - ParticleInside for InterParticles must be .FALSE. in order to avoid error looping over the original PDM%ParticleVecLength - ! in ParticleTriaTracking() routine. The inside flag is set to .TRUE. - ! when we loop over all inter particle in SingleParticleTriaTracking routine - ! in case of sub cycling step particle information before sub cycling must be used => interplane particle can act like origin particle + ! === Creating inter particles: + CALL CreateParticle(SpecID,NewPos(1:3),NewElemID,NewVelo(1:3),RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy, & + OldPartID=PartID,NewPartID=NewPartID ) + ! LastPartPos(1:3,NewPartID) must be redefined as long as LastPartPos is set to PartState in CreateParticle routine IF(RotRefSubTimeStep) THEN - IF (usevMPF) THEN - IF(UseVarTimeStep) THEN - CALL CreateParticle( PartSpecies(PartID), NewPosSubCycling(1:3), GlobalElemIDSubCycling, PartState(4:6,PartID) & - , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & - , NewPartID=NewPartID, NewMPF=PartMPF(PartID), NewTimestep = PartTimeStep(PartID) ) - ELSE - CALL CreateParticle( PartSpecies(PartID), NewPosSubCycling(1:3), GlobalElemIDSubCycling, PartState(4:6,PartID) & - , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & - , NewPartID=NewPartID, NewMPF=PartMPF(PartID) ) - END IF - ELSE - IF(UseVarTimeStep) THEN - CALL CreateParticle( PartSpecies(PartID), NewPosSubCycling(1:3), GlobalElemIDSubCycling,PartState(4:6,PartID) & - , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & - , NewPartID=NewPartID, NewTimestep = PartTimeStep(PartID) ) - ELSE - CALL CreateParticle( PartSpecies(PartID), NewPosSubCycling(1:3), GlobalElemIDSubCycling,PartState(4:6,PartID) & - , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & - , NewPartID=NewPartID ) - END IF - END IF LastPartPos(1:3,NewPartID) = LastPartPosSubCycling(1:3) - PDM%ParticleInside(NewPartID) = .FALSE. - InterPlanePartIndx(InterPlanePartNumber) = NewPartID ELSE - IF (usevMPF) THEN - IF(UseVarTimeStep) THEN - CALL CreateParticle( PartSpecies(PartID), PartState(1:3,PartID), ElemID, PartState(4:6,PartID) & - , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & - , NewPartID=NewPartID, NewMPF=PartMPF(PartID), NewTimestep = PartTimeStep(PartID) ) - ELSE - CALL CreateParticle( PartSpecies(PartID), PartState(1:3,PartID), ElemID, PartState(4:6,PartID) & - , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & - , NewPartID=NewPartID, NewMPF=PartMPF(PartID) ) - END IF - ELSE - IF(UseVarTimeStep) THEN - CALL CreateParticle( PartSpecies(PartID), PartState(1:3,PartID), ElemID,PartState(4:6,PartID) & - , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & - , NewPartID=NewPartID, NewTimestep = PartTimeStep(PartID) ) - ELSE - CALL CreateParticle( PartSpecies(PartID), PartState(1:3,PartID), ElemID,PartState(4:6,PartID) & - , RotEnergy=RotEnergy,VibEnergy=VibEnergy,ElecEnergy=ElecEnergy & - , NewPartID=NewPartID ) - END IF - END IF LastPartPos(1:3,NewPartID) = LastPartPos(1:3,PartID) - PDM%ParticleInside(NewPartID) = .FALSE. - InterPlanePartIndx(InterPlanePartNumber) = NewPartID END IF + ! ParticleInside for InterParticles must be .FALSE. in order to avoid error looping over the original PDM%ParticleVecLength + ! in ParticleTriaTracking() routine. The inside flag is set to .TRUE. when we loop over all inter particle in SingleParticleTriaTracking routine + PDM%ParticleInside(NewPartID) = .FALSE. + ! Storing the new particle index + InterPlanePartIndx(InterPlanePartNumber) = NewPartID ! Treatment for the rotational frame of reference: stored here, will be rotated together with the regular velocity later IF(UseRotRefFrame) THEN IF(RotRefSubTimeStep) THEN diff --git a/src/particles/boundary/particle_boundary_init.f90 b/src/particles/boundary/particle_boundary_init.f90 index 2327afbbc..81232af8a 100644 --- a/src/particles/boundary/particle_boundary_init.f90 +++ b/src/particles/boundary/particle_boundary_init.f90 @@ -2191,17 +2191,13 @@ SUBROUTINE FinalizeParticleBoundary() IF(nRotPeriodicSides .GT.0) CALL UNLOCK_AND_FREE(NumRotPeriodicNeigh_Shared_Win) IF(MaxNumRotPeriodicNeigh.GT.0) CALL UNLOCK_AND_FREE(RotPeriodicSideMapping_Shared_Win) ADEALLOCATE(SurfSide2RotPeriodicSide_Shared) - ADEALLOCATE(SurfSide2RotPeriodicSide) ADEALLOCATE(NumRotPeriodicNeigh_Shared) - ADEALLOCATE(NumRotPeriodicNeigh) ADEALLOCATE(RotPeriodicSideMapping_Shared) - ADEALLOCATE(RotPeriodicSideMapping) - ADEALLOCATE(InterPlaneSideMapping) -#else - SDEALLOCATE(SurfSide2RotPeriodicSide) - SDEALLOCATE(NumRotPeriodicNeigh) - SDEALLOCATE(RotPeriodicSideMapping) #endif + ADEALLOCATE(SurfSide2RotPeriodicSide) + ADEALLOCATE(NumRotPeriodicNeigh) + ADEALLOCATE(RotPeriodicSideMapping) + SDEALLOCATE(InterPlaneSideMapping) END IF ! PartBound%UseRotPeriodicBC ! Adaptive wall temperature (e.g. calculate from sampled heat flux) diff --git a/src/particles/boundary/particle_boundary_vars.f90 b/src/particles/boundary/particle_boundary_vars.f90 index be50982e1..5cb60d7bb 100644 --- a/src/particles/boundary/particle_boundary_vars.f90 +++ b/src/particles/boundary/particle_boundary_vars.f90 @@ -132,7 +132,7 @@ MODULE MOD_Particle_Boundary_Vars INTEGER,ALLOCPOINT,DIMENSION(:) :: SurfSide2RotPeriodicSide ! Mapping between surf side and periodic sides. ! ==================================================================== ! Intermediate plane for multi rotational periodic sides -INTEGER,ALLOCPOINT,DIMENSION(:,:) :: InterPlaneSideMapping ! Mapping between inter plane BC_ID and SideID. +INTEGER,ALLOCATABLE :: InterPlaneSideMapping(:,:)! Mapping between inter plane BC_ID and SideID. ! ==================================================================== #if USE_MPI INTEGER,POINTER,DIMENSION(:) :: SurfSide2RotPeriodicSide_Shared diff --git a/src/particles/particle_operations.f90 b/src/particles/particle_operations.f90 index 2ade4dc9a..7f5cf552a 100644 --- a/src/particles/particle_operations.f90 +++ b/src/particles/particle_operations.f90 @@ -31,9 +31,10 @@ MODULE MOD_part_operations CONTAINS -SUBROUTINE CreateParticle(SpecID,Pos,GlobElemID,Velocity,RotEnergy,VibEnergy,ElecEnergy,NewPartID,NewMPF,NewTimestep) +SUBROUTINE CreateParticle(SpecID,Pos,GlobElemID,Velocity,RotEnergy,VibEnergy,ElecEnergy,OldPartID,NewPartID,NewMPF,NewTimestep) !=================================================================================================================================== !> creates a single particle at correct array position and assign properties +!> OldPartID can be supplied to get the MPF and Timestep, however, NewMPF and NewTimestep have priority !=================================================================================================================================== ! MODULES USE MOD_Globals @@ -57,6 +58,7 @@ SUBROUTINE CreateParticle(SpecID,Pos,GlobElemID,Velocity,RotEnergy,VibEnergy,Ele REAL, INTENT(IN) :: RotEnergy !< Rotational energy REAL, INTENT(IN) :: VibEnergy !< Vibrational energy REAL, INTENT(IN) :: ElecEnergy !< Electronic energy +INTEGER, INTENT(IN),OPTIONAL :: OldPartID !< ID of old particle (if available) INTEGER, INTENT(OUT),OPTIONAL :: NewPartID !< ID of newly created particle REAL, INTENT(IN),OPTIONAL :: NewMPF !< MPF of newly created particle REAL, INTENT(IN),OPTIONAL :: NewTimestep !< Timestep of the newly created particle @@ -99,6 +101,8 @@ SUBROUTINE CreateParticle(SpecID,Pos,GlobElemID,Velocity,RotEnergy,VibEnergy,Ele IF (UseVarTimeStep) THEN IF(PRESENT(NewTimestep)) THEN PartTimeStep(newParticleID) = NewTimestep + ELSE IF(PRESENT(OldPartID)) THEN + PartTimeStep(newParticleID) = PartTimeStep(OldPartID) ELSE PartTimeStep(newParticleID) = GetParticleTimeStep(PartState(1,newParticleID),PartState(2,newParticleID),PEM%LocalElemID(newParticleID)) END IF @@ -109,6 +113,9 @@ SUBROUTINE CreateParticle(SpecID,Pos,GlobElemID,Velocity,RotEnergy,VibEnergy,Ele IF(PRESENT(NewMPF))THEN ! MPF is already defined via input PartMPF(newParticleID) = NewMPF + ELSE IF(PRESENT(OldPartID)) THEN + ! MPF is available from the "original" particle + PartMPF(newParticleID) = PartMPF(OldPartID) ELSE ! Check if vMPF (and radial weighting is used) to determine the MPF of the new particle IF (RadialWeighting%DoRadialWeighting) THEN diff --git a/src/particles/particle_tools.f90 b/src/particles/particle_tools.f90 index 41b5f27db..855d87837 100644 --- a/src/particles/particle_tools.f90 +++ b/src/particles/particle_tools.f90 @@ -1872,6 +1872,7 @@ SUBROUTINE IncreaseMaxParticleNumber(Amount) IF(ALLOCATED(PartTimeStep)) CALL ChangeSizeArray(PartTimeStep,PDM%maxParticleNumber,NewSize) IF(ALLOCATED(PartMPF)) CALL ChangeSizeArray(PartMPF,PDM%maxParticleNumber,NewSize) IF(ALLOCATED(PartVeloRotRef)) CALL ChangeSizeArray(PartVeloRotRef,PDM%maxParticleNumber,NewSize,0.) +IF(ALLOCATED(LastPartVeloRotRef)) CALL ChangeSizeArray(LastPartVeloRotRef,PDM%maxParticleNumber,NewSize,0.) IF(ALLOCATED(PartStateIntEn)) CALL ChangeSizeArray(PartStateIntEn,PDM%maxParticleNumber,NewSize) IF(ALLOCATED(Pt_temp)) CALL ChangeSizeArray(Pt_temp,PDM%maxParticleNumber,NewSize,0.) @@ -2077,6 +2078,7 @@ SUBROUTINE ReduceMaxParticleNumber() IF(ALLOCATED(PartTimeStep)) CALL ChangeSizeArray(PartTimeStep,PDM%maxParticleNumber,NewSize) IF(ALLOCATED(PartMPF)) CALL ChangeSizeArray(PartMPF,PDM%maxParticleNumber,NewSize) IF(ALLOCATED(PartVeloRotRef)) CALL ChangeSizeArray(PartVeloRotRef,PDM%maxParticleNumber,NewSize,0.) +IF(ALLOCATED(LastPartVeloRotRef)) CALL ChangeSizeArray(LastPartVeloRotRef,PDM%maxParticleNumber,NewSize,0.) IF(ALLOCATED(PartStateIntEn)) CALL ChangeSizeArray(PartStateIntEn,PDM%maxParticleNumber,NewSize) IF(ALLOCATED(Pt_temp)) CALL ChangeSizeArray(Pt_temp,PDM%maxParticleNumber,NewSize,0.) @@ -2270,6 +2272,10 @@ SUBROUTINE ChangePartID(OldID,NewID) PartVeloRotRef(:,NewID)=PartVeloRotRef(:,OldID) PartVeloRotRef(:,OldID) = 0.0 END IF +IF(ALLOCATED(LastPartVeloRotRef)) THEN + LastPartVeloRotRef(:,NewID)=LastPartVeloRotRef(:,OldID) + LastPartVeloRotRef(:,OldID) = 0.0 +END IF IF(ALLOCATED(PartStateIntEn)) PartStateIntEn(:,NewID)=PartStateIntEn(:,OldID) IF(ALLOCATED(Pt_temp)) THEN diff --git a/src/particles/surfacemodel/surfacemodel_tools.f90 b/src/particles/surfacemodel/surfacemodel_tools.f90 index 58b1307e0..f752d0d4d 100644 --- a/src/particles/surfacemodel/surfacemodel_tools.f90 +++ b/src/particles/surfacemodel/surfacemodel_tools.f90 @@ -45,8 +45,6 @@ SUBROUTINE SurfaceModel_ParticleEmission(n_loc, PartID, SideID, ProductSpec, Pro USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared USE MOD_SurfaceModel_Vars ,ONLY: SurfModEnergyDistribution USE MOD_DSMC_Vars ,ONLY: DSMC, SamplingActive -USE MOD_Particle_Vars ,ONLY: usevMPF,PartMPF -USE MOD_part_tools ,ONLY: CalcRadWeightMPF USE MOD_Particle_Mesh_Vars ,ONLY: BoundsOfElem_Shared ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -68,7 +66,7 @@ SUBROUTINE SurfaceModel_ParticleEmission(n_loc, PartID, SideID, ProductSpec, Pro !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: iNewPart, NewPartID, locBCID, SurfSideID -REAL :: tang1(1:3), tang2(1:3), WallVelo(1:3), WallTemp, NewVelo(3), OldMPF, BoundsOfElemCenter(1:3),NewPos(1:3) +REAL :: tang1(1:3), tang2(1:3), WallVelo(1:3), WallTemp, NewVelo(3), BoundsOfElemCenter(1:3),NewPos(1:3) REAL,PARAMETER :: eps=1e-6 REAL,PARAMETER :: eps2=1.0-eps !=================================================================================================================================== @@ -97,15 +95,8 @@ SUBROUTINE SurfaceModel_ParticleEmission(n_loc, PartID, SideID, ProductSpec, Pro NewVelo(1:3) = tang1(1:3)*NewVelo(1) + tang2(1:3)*NewVelo(2) - n_Loc(1:3)*NewVelo(3) + WallVelo(1:3) ! Create new position by using POI and moving the particle by eps in the direction of the element center NewPos(1:3) = eps*BoundsOfElemCenter(1:3) + eps2*POI_vec(1:3) - IF(usevMPF)THEN - ! Get MPF of old particle - OldMPF = PartMPF(PartID) - ! New particle acquires the MPF of the impacting particle (not necessarily the MPF of the newly created particle species) - CALL CreateParticle(ProductSpec(2),NewPos(1:3),GlobElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID, NewMPF=OldMPF) - ELSE - ! New particle acquires the MPF of the new particle species - CALL CreateParticle(ProductSpec(2),NewPos(1:3),GlobElemID,NewVelo(1:3),0.,0.,0.,NewPartID=NewPartID) - END IF ! usevMPF + ! Create new particle: in case of vMPF oder VarTimeStep, new particle inherits the values of the old particle + CALL CreateParticle(ProductSpec(2),NewPos(1:3),GlobElemID,NewVelo(1:3),0.,0.,0.,OldPartID=PartID,NewPartID=NewPartID) ! Adding the energy that is transferred from the surface onto the internal energies of the particle CALL SurfaceModel_EnergyAccommodation(NewPartID,locBCID,WallTemp) ! Sampling of newly created particles From 46406e99a6321eb3fe168e6bb2c47567a7fced6a Mon Sep 17 00:00:00 2001 From: Patrick Kopper Date: Mon, 29 Jan 2024 14:48:24 +0100 Subject: [PATCH 137/222] Check if GCC contains the parse_associate bug and warn in CMake --- .gitignore | 2 +- CMakeListsMachine.txt | 30 +++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 5930d3be9..ab50ee355 100644 --- a/.gitignore +++ b/.gitignore @@ -33,7 +33,7 @@ _build/ doxygen/ # regression test -regressioncheck/reggie/* +regressioncheck/* output_dir_gitlab_tool/ output_dir/ reggie_run/ diff --git a/CMakeListsMachine.txt b/CMakeListsMachine.txt index 4bac8bc4f..3c54c071f 100644 --- a/CMakeListsMachine.txt +++ b/CMakeListsMachine.txt @@ -198,6 +198,34 @@ IF(NOT Fortran2003Check) MESSAGE(FATAL_ERROR "Failed to compile basic Fortran2003 programm! Please ensure your compiler is up-to-date!") ENDIF() +# ========================================================================= +# CHECK IF GCC CONTAINS THE PARSE_ASSOCIATE BUG (GC C13.1-13.2) +# ========================================================================= +INCLUDE(CheckFortranSourceCompiles) +CHECK_FORTRAN_SOURCE_COMPILES( +"MODULE GCC13MOD +IMPLICIT NONE +PRIVATE +CONTAINS +! Check for MOVE_ALLOC feature +SUBROUTINE GCC_PARSE_ASSOCAIATE() +REAL::x1(3),x2(3) +ASSOCIATE(v1 => x1, v2 => x2) +v1 = 0 +v2 = 1 +v1 = 0 + v1 +END SUBROUTINE GCC_PARSE_ASSOCIATE +END MODULE GCC13MOD + +PROGRAM GCC13PROG +END" +GCC13Check +SRC_EXT F90) + +IF(NOT GCC13Check) + MESSAGE(WARNING "The requested compiler ${CMAKE_Fortran_COMPILER_ID} (v${CMAKE_Fortran_COMPILER_VERSION}) contains a bug in parse_associate. Ensure ASSOCIATE is only use with explicit array bounds or use a different compiler version. Please see the upstream issue, https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109948") +ENDIF() + # ========================================================================= # COMPILER FLAGS # ========================================================================= @@ -304,4 +332,4 @@ SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}" CACHE STRIN SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE}" CACHE STRING "Release compiler flags" FORCE) SET(CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE}" CACHE STRING "Profile compiler flags" FORCE) SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG}" CACHE STRING "Debug compiler flags" FORCE) -SET(CMAKE_Fortran_FLAGS_SANITIZE "${CMAKE_Fortran_FLAGS_SANITIZE}" CACHE STRING "Sanitize compiler flags" FORCE) +SET(CMAKE_Fortran_FLAGS_SANITIZE "${CMAKE_Fortran_FLAGS_SANITIZE}" CACHE STRING "Sanitize compiler flags" FORCE) \ No newline at end of file From 2d74c0044629d540f81dec0768a3213c1c0fe705 Mon Sep 17 00:00:00 2001 From: Patrick Kopper Date: Mon, 29 Jan 2024 16:05:24 +0100 Subject: [PATCH 138/222] Allow negative LoadBalanceMaxSteps for unlimited LB steps --- src/loadbalance/loadbalance.f90 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/loadbalance/loadbalance.f90 b/src/loadbalance/loadbalance.f90 index 0294162e8..97e34bada 100644 --- a/src/loadbalance/loadbalance.f90 +++ b/src/loadbalance/loadbalance.f90 @@ -123,6 +123,7 @@ SUBROUTINE InitLoadBalance() END IF LoadBalanceSample = GETINT('LoadBalanceSample') LoadBalanceMaxSteps = GETINT('LoadBalanceMaxSteps') +IF (LoadBalanceMaxSteps.LE.0) LoadBalanceMaxSteps = HUGE(1) PerformPartWeightLB = GETLOGICAL('PartWeightLoadBalance','F') IF (PerformPartWeightLB) THEN LoadBalanceSample = 0 ! deactivate loadbalance sampling of elemtimes if balancing with partweight is enabled @@ -404,7 +405,11 @@ SUBROUTINE LoadBalance() SWRITE(UNIT_StdOut,'(132("="))') nLoadBalanceSteps=nLoadBalanceSteps+1 CALL set_formatting("green") -SWRITE(UNIT_stdOut,'(A,I0,A,I0,A)',ADVANCE='NO') ' PERFORMING LOAD BALANCE ',nLoadBalanceSteps,' of ',LoadBalanceMaxSteps,' ...' +IF (LoadBalanceMaxSteps.LT.HUGE(1)) THEN + SWRITE(UNIT_stdOut,'(A,I0,A,I0,A)',ADVANCE='NO') ' PERFORMING LOAD BALANCE ',nLoadBalanceSteps,' of ',LoadBalanceMaxSteps,' ...' +ELSE + SWRITE(UNIT_stdOut,'(A,I0,A )',ADVANCE='NO') ' PERFORMING LOAD BALANCE ',nLoadBalanceSteps,' ...' +END IF CALL clear_formatting() SWRITE(UNIT_StdOut,'(1X)') ! Measure init duration From 467446d267b15c3f55226f80b28bfa11fe60e436 Mon Sep 17 00:00:00 2001 From: Patrick Kopper Date: Mon, 29 Jan 2024 16:05:43 +0100 Subject: [PATCH 139/222] Only enable writePartitionInfo if required --- src/mesh/prepare_mesh.f90 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/mesh/prepare_mesh.f90 b/src/mesh/prepare_mesh.f90 index 7209f6129..8d0471767 100644 --- a/src/mesh/prepare_mesh.f90 +++ b/src/mesh/prepare_mesh.f90 @@ -630,9 +630,8 @@ SUBROUTINE setLocalSideIDs() END DO #endif /*USE_HDG*/ -writePartitionInfo = GETLOGICAL('writePartitionInfo','.FALSE.') +writePartitionInfo = GETLOGICAL('writePartitionInfo') IF(DoLoadBalance)THEN - writePartitionInfo=.TRUE. WRITE( hilf,'(I4.4)') nLoadBalanceSteps filename='partitionInfo-'//TRIM(hilf)//'.out' ELSE From 83e9d48a7d9b67cb9e65160890e3b9ef59830356 Mon Sep 17 00:00:00 2001 From: Patrick Kopper Date: Mon, 29 Jan 2024 16:06:08 +0100 Subject: [PATCH 140/222] Introduce parameter split at comma Check if parameter strings (either direct or INTFROMSTR) contain a comma and split on it. This might happen when trying to directly run a reggie parameter file. In the case of INTFROMSTR, additionally check if the split string is a valid entry. --- src/readintools/readintools.f90 | 55 ++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 4 deletions(-) diff --git a/src/readintools/readintools.f90 b/src/readintools/readintools.f90 index 6b19805fd..ba075ca2a 100644 --- a/src/readintools/readintools.f90 +++ b/src/readintools/readintools.f90 @@ -1215,12 +1215,13 @@ SUBROUTINE GetGeneralOption(value, name, proposal) CLASS(link),POINTER :: current CLASS(Option),POINTER :: opt CHARACTER(LEN=255) :: proposal_loc +CHARACTER(LEN=20) :: fmtName +INTEGER :: ind,mode CLASS(link),POINTER :: check CLASS(Option),POINTER :: multi CLASS(OPTION),ALLOCATABLE :: newopt CHARACTER(LEN=:),ALLOCATABLE :: testname INTEGER :: i,k -CHARACTER(LEN=20) :: fmtName ! Temporary arrays to create new options CHARACTER(LEN=255) :: tmpValue CLASS(LogicalOption),ALLOCATABLE,TARGET :: logicalopt @@ -1269,11 +1270,31 @@ SUBROUTINE GetGeneralOption(value, name, proposal) CLASS IS (StringOption) SELECT TYPE(value) TYPE IS (STR255) + ! If the string contains a comma, strip it and provide the first part of this string. This might occur when directly running a regressioncheck file + ind = INDEX(opt%value,",") + IF (ind.GT.0) THEN + opt%value = opt%value(1:ind-1) + ! Print option and value to stdout. Custom print, so do it here + WRITE(fmtName,*) prms%maxNameLen + SWRITE(UNIT_stdOut,'(A3)', ADVANCE='NO') " | " + CALL set_formatting("blue") + SWRITE(UNIT_stdOut,"(A"//fmtName//")", ADVANCE='NO') TRIM(name) + CALL clear_formatting() + SWRITE(UNIT_stdOut,'(A3)', ADVANCE='NO') " | " + CALL opt%printValue(prms%maxValueLen) + SWRITE(UNIT_stdOut,"(A3)", ADVANCE='NO') ' | ' + CALL set_formatting("cyan") + SWRITE(UNIT_stdOut,'(A7)', ADVANCE='NO') "*SPLIT" + CALL clear_formatting() + SWRITE(UNIT_stdOut,"(A3)") ' | ' + ! Set mode to indicate print already occured + mode = 1 + END IF value%chars = opt%value END SELECT END SELECT ! print option and value to stdout - CALL opt%print(prms%maxNameLen, prms%maxValueLen, mode=0) + IF (mode.EQ.0) CALL opt%print(prms%maxNameLen, prms%maxValueLen, mode=0) ! remove the option from the linked list of all parameters IF(prms%removeAfterRead) current%opt%isRemoved = .TRUE. RETURN @@ -1818,6 +1839,7 @@ FUNCTION GETINTFROMSTR(name) result(value) CHARACTER(LEN=:),ALLOCATABLE :: testname INTEGER :: iChar,kChar CHARACTER(LEN=20) :: fmtName +INTEGER :: ind !================================================================================================================================== ! iterate over all options and compare names current => prms%firstLink @@ -1864,8 +1886,33 @@ FUNCTION GETINTFROMSTR(name) result(value) RETURN END IF END DO - CALL Abort(__STAMP__,& - "Unknown value for option: "//TRIM(name)) + ! If a string contains a comma, check if the first part of this string exists in the list and set its integer representation + ! according to the mapping. This might occur when directly running a regressioncheck file + DO i=1,listSize + ind = INDEX(opt%value,",") + IF (STRICMP(opt%strList(i), opt%value(1:ind-1))) THEN + value = opt%intList(i) + opt%listIndex = i ! Store index of the mapping + ! print option and value to stdout. Custom print, so do it here + WRITE(fmtName,*) prms%maxNameLen + SWRITE(UNIT_stdOut,'(A3)', ADVANCE='NO') " | " + CALL set_formatting("blue") + SWRITE(UNIT_stdOut,"(A"//fmtName//")", ADVANCE='NO') TRIM(name) + CALL clear_formatting() + SWRITE(UNIT_stdOut,'(A3)', ADVANCE='NO') " | " + CALL opt%printValue(prms%maxValueLen) + SWRITE(UNIT_stdOut,"(A3)", ADVANCE='NO') ' | ' + CALL set_formatting("cyan") + SWRITE(UNIT_stdOut,'(A7)', ADVANCE='NO') "*SPLIT" + CALL clear_formatting() + SWRITE(UNIT_stdOut,"(A3)") ' | ' + ! CALL opt%print(prms%maxNameLen, prms%maxValueLen, mode=0) + ! remove the option from the linked list of all parameters + IF(prms%removeAfterRead) current%opt%isRemoved = .TRUE. + RETURN + END IF + END DO + CALL Abort(__STAMP__,"Unknown value for option: "//TRIM(name)) END SELECT END IF current => current%next From 011f783f13f5d29f2e3cdfc14bd9fd81ba2b7418 Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Mon, 29 Jan 2024 18:13:24 +0100 Subject: [PATCH 141/222] Bug fix --- src/particles/dsmc/dsmc_polyatomic_model.f90 | 71 ++++++++++++-- .../emission/particle_emission_init.f90 | 5 +- .../emission/particle_emission_tools.f90 | 97 ++++++++++++++++++- .../particle_mpi_boundary_sampling.f90 | 4 +- .../surfacemodel/surfacemodel_main.f90 | 2 +- src/posti/piclas2vtk/piclas2vtk.f90 | 12 +-- 6 files changed, 169 insertions(+), 22 deletions(-) diff --git a/src/particles/dsmc/dsmc_polyatomic_model.f90 b/src/particles/dsmc/dsmc_polyatomic_model.f90 index 7593a8eb7..e47da684e 100644 --- a/src/particles/dsmc/dsmc_polyatomic_model.f90 +++ b/src/particles/dsmc/dsmc_polyatomic_model.f90 @@ -248,7 +248,7 @@ SUBROUTINE DSMC_SetInternalEnr(iSpec, iInit, iPart, init_or_sf) END IF END IF IF(SpecDSMC(iSpec)%PolyatomicMol) THEN - CALL DSMC_SetInternalEnr_Poly(iSpec, iPart, TRot, TVib) + CALL DSMC_SetInternalEnr_Poly(iSpec, iPart, iPart, init_or_sf) ELSE CALL DSMC_SetInternalEnr_Diatomic(iSpec, iPart, TRot, TVib) END IF @@ -267,30 +267,83 @@ SUBROUTINE DSMC_SetInternalEnr(iSpec, iInit, iPart, init_or_sf) END SUBROUTINE DSMC_SetInternalEnr -SUBROUTINE DSMC_SetInternalEnr_Poly_ARM_SingleMode(iSpec, iPart, TRot, TVib) +SUBROUTINE DSMC_SetInternalEnr_Poly_ARM_SingleMode(iSpecies, iInit, iPart, init_or_sf) !=================================================================================================================================== ! Initialization of polyatomic molecules by treating every mode separately in a loop !=================================================================================================================================== ! MODULES +USE MOD_Globals ,ONLY: Abort USE MOD_Globals_Vars ,ONLY: BoltzmannConst -USE MOD_DSMC_Vars ,ONLY: PartStateIntEn, SpecDSMC, DSMC,PolyatomMolDSMC,VibQuantsPar -USE MOD_SurfaceModel_Vars +USE MOD_DSMC_Vars ,ONLY: PartStateIntEn, SpecDSMC, DSMC,PolyatomMolDSMC,VibQuantsPar,BGGas +USE MOD_Particle_Vars ,ONLY: PEM, Species +USE MOD_Particle_Sampling_Vars,ONLY: AdaptBCMacroVal, AdaptBCMapElemToSample +USE MOD_DSMC_ElectronicModel ,ONLY: InitElectronShell +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES -INTEGER, INTENT(IN) :: iSpec, iPart -REAL, INTENT(IN) :: TRot, TVib +INTEGER, INTENT(IN) :: iSpecies, iInit, iPart, init_or_sf !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES REAL :: iRan, iRan2, NormProb INTEGER :: iQuant, iDOF, iPolyatMole +REAL :: TVib ! vibrational temperature +REAL :: TRot ! rotational temperature +INTEGER :: ElemID !=================================================================================================================================== +ElemID = PEM%LocalElemID(iPart) +SELECT CASE (init_or_sf) + CASE(1) !iInit + TVib=SpecDSMC(iSpecies)%Init(iInit)%TVib + TRot=SpecDSMC(iSpecies)%Init(iInit)%TRot + CASE(2) !SurfaceFlux + IF(Species(iSpecies)%Surfaceflux(iInit)%Adaptive) THEN + SELECT CASE(Species(iSpecies)%Surfaceflux(iInit)%AdaptiveType) + CASE(1,3,4) ! Pressure and massflow inlet (pressure/massflow, temperature const) + TVib=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TVib + TRot=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TRot + CASE(2) ! adaptive Outlet/freestream + TVib = Species(iSpecies)%Surfaceflux(iInit)%AdaptivePressure & + / (BoltzmannConst * AdaptBCMacroVal(4,AdaptBCMapElemToSample(ElemID),iSpecies)) + TRot = TVib + CASE DEFAULT + CALL abort(& + __STAMP__& + ,'Wrong adaptive type for Surfaceflux in vib/rot poly!') + END SELECT + ELSE + TVib=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TVib + TRot=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TRot + END IF + CASE(3) !reactive surface + TVib=PartBound%WallTemp(iInit) + TRot=PartBound%WallTemp(iInit) + CASE(4) !reactive surface + TVib=PartBound%WallTemp(iInit) + TRot=PartBound%WallTemp(iInit) + CASE DEFAULT + CALL abort(& + __STAMP__& + ,'Neither iInit nor SurfaceFlux defined as reference!') +END SELECT + +! Background gas distribution +IF(BGGas%NumberOfSpecies.GT.0) THEN + IF(BGGas%BackgroundSpecies(iSpecies).AND.BGGas%UseDistribution) THEN + TVib = BGGas%Distribution(BGGas%MapSpecToBGSpec(iSpecies),DSMC_TVIB,ElemID) + TRot = BGGas%Distribution(BGGas%MapSpecToBGSpec(iSpecies),DSMC_TROT,ElemID) + END IF +END IF + +IF (DSMC%ElectronicModel.GT.0) THEN + CALL InitElectronShell(iSpecies,iPart,iInit,init_or_sf) +ENDIF ! Set vibrational energy -iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray +iPolyatMole = SpecDSMC(iSpecies)%SpecToPolyArray IF(ALLOCATED(VibQuantsPar(iPart)%Quants)) DEALLOCATE(VibQuantsPar(iPart)%Quants) ALLOCATE(VibQuantsPar(iPart)%Quants(PolyatomMolDSMC(iPolyatMole)%VibDOF)) PartStateIntEn( 1,iPart) = 0.0 @@ -307,10 +360,10 @@ SUBROUTINE DSMC_SetInternalEnr_Poly_ARM_SingleMode(iSpec, iPart, TRot, TVib) END DO ! Set rotational energy -IF (SpecDSMC(iSpec)%Xi_Rot.EQ.2) THEN +IF (SpecDSMC(iSpecies)%Xi_Rot.EQ.2) THEN CALL RANDOM_NUMBER(iRan2) PartStateIntEn( 2,iPart) = -BoltzmannConst*TRot*LOG(iRan2) -ELSE IF (SpecDSMC(iSpec)%Xi_Rot.EQ.3) THEN +ELSE IF (SpecDSMC(iSpecies)%Xi_Rot.EQ.3) THEN CALL RANDOM_NUMBER(iRan2) PartStateIntEn( 2,iPart) = iRan2*10 !the distribution function has only non-negligible values betwenn 0 and 10 NormProb = SQRT(PartStateIntEn( 2,iPart))*EXP(-PartStateIntEn( 2,iPart))/(SQRT(0.5)*EXP(-0.5)) diff --git a/src/particles/emission/particle_emission_init.f90 b/src/particles/emission/particle_emission_init.f90 index a84165f06..0341dbcbb 100644 --- a/src/particles/emission/particle_emission_init.f90 +++ b/src/particles/emission/particle_emission_init.f90 @@ -452,9 +452,10 @@ SUBROUTINE InitialParticleInserting() USE MOD_TimeDisc_Vars ,ONLY: ManualTimeStep, RKdtFrac USE MOD_Mesh_Vars ,ONLY: SideToElem USE MOD_Dielectric_Vars ,ONLY: DoDielectric,isDielectricElem,DielectricNoParticles -USE MOD_DSMC_Vars ,ONLY: useDSMC, DSMC, CollisMode +USE MOD_DSMC_Vars ,ONLY: useDSMC, DSMC, SpecDSMC, CollisMode USE MOD_Part_Emission_Tools ,ONLY: SetParticleChargeAndMass,SetParticleMPF,SetParticleTimeStep -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr +USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly USE MOD_Part_Pos_and_Velo ,ONLY: SetParticlePosition,SetParticleVelocity,ParticleEmissionFromDistribution USE MOD_Part_Pos_and_Velo ,ONLY: ParticleEmissionCellLocal USE MOD_DSMC_AmbipolarDiffusion ,ONLY: AD_SetInitElectronVelo diff --git a/src/particles/emission/particle_emission_tools.f90 b/src/particles/emission/particle_emission_tools.f90 index dcdbd9a51..fc8dee8d6 100644 --- a/src/particles/emission/particle_emission_tools.f90 +++ b/src/particles/emission/particle_emission_tools.f90 @@ -70,6 +70,10 @@ MODULE MOD_part_emission_tools MODULE PROCEDURE CalcIntensity_Gaussian END INTERFACE +INTERFACE DSMC_SetInternalEnr_LauxVFD + MODULE PROCEDURE DSMC_SetInternalEnr_LauxVFD +END INTERFACE + #ifdef CODE_ANALYZE INTERFACE CalcVectorAdditionCoeffs MODULE PROCEDURE CalcVectorAdditionCoeffs @@ -89,7 +93,7 @@ MODULE MOD_part_emission_tools PUBLIC :: SetParticlePositionSphere, SetParticlePositionSinDeviation, SetParticleTimeStep PUBLIC :: CalcNbrOfPhotons, CalcPhotonEnergy PUBLIC :: CalcIntensity_Gaussian -PUBLIC :: CalcVelocity_FromWorkFuncSEE +PUBLIC :: CalcVelocity_FromWorkFuncSEE, DSMC_SetInternalEnr_LauxVFD PUBLIC :: SetParticlePositionPhotonSEEDisc, SetParticlePositionPhotonCylinder PUBLIC :: SetParticlePositionPhotonSEERectangle, SetParticlePositionPhotonRectangle PUBLIC :: SetParticlePositionPhotonHoneycomb, SetParticlePositionPhotonSEEHoneycomb @@ -358,6 +362,97 @@ SUBROUTINE CalcVelocity_maxwell_lpn(FractNbr, Vec3D, iInit, Temperature) END SUBROUTINE CalcVelocity_maxwell_lpn +SUBROUTINE DSMC_SetInternalEnr_LauxVFD(iSpecies, iInit, iPart, init_or_sf) +!=================================================================================================================================== +!> Energy distribution according to dissertation of Laux (diatomic) +!=================================================================================================================================== +! MODULES +USE MOD_Globals ,ONLY: abort +USE MOD_Globals_Vars ,ONLY: BoltzmannConst +USE MOD_DSMC_Vars ,ONLY: PartStateIntEn, SpecDSMC, DSMC, BGGas +USE MOD_Particle_Vars ,ONLY: Species, PEM +USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCMacroVal, AdaptBCMapElemToSample +USE MOD_DSMC_ElectronicModel ,ONLY: InitElectronShell +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER, INTENT(IN) :: iSpecies, iInit, iPart, init_or_sf +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +REAL :: iRan +INTEGER :: iQuant +REAL :: TVib ! vibrational temperature +REAL :: TRot ! rotational temperature +INTEGER :: ElemID +!=================================================================================================================================== +!----------------------------------------------------------------------------------------------------------------------------------- +! Set internal energies (vibrational and rotational) +!----------------------------------------------------------------------------------------------------------------------------------- +ElemID = PEM%LocalElemID(iPart) +IF ((SpecDSMC(iSpecies)%InterID.EQ.2).OR.(SpecDSMC(iSpecies)%InterID.EQ.20)) THEN + SELECT CASE (init_or_sf) + CASE(1) !iInit + TVib=SpecDSMC(iSpecies)%Init(iInit)%TVib + TRot=SpecDSMC(iSpecies)%Init(iInit)%TRot + CASE(2) !SurfaceFlux + IF(Species(iSpecies)%Surfaceflux(iInit)%Adaptive) THEN + SELECT CASE(Species(iSpecies)%Surfaceflux(iInit)%AdaptiveType) + CASE(1,3,4) ! Pressure and massflow inlet (pressure/massflow, temperature const) + TVib=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TVib + TRot=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TRot + CASE(2) ! adaptive Outlet/freestream + TVib = Species(iSpecies)%Surfaceflux(iInit)%AdaptivePressure & + / (BoltzmannConst * AdaptBCMacroVal(4,AdaptBCMapElemToSample(ElemID),iSpecies)) + TRot = TVib + CASE DEFAULT + CALL abort(__STAMP__,'Wrong adaptive type for Surfaceflux in int_energy -> lauxVDF!') + END SELECT + ELSE + TVib=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TVib + TRot=SpecDSMC(iSpecies)%Surfaceflux(iInit)%TRot + END IF + CASE DEFAULT + CALL abort(__STAMP__,'neither iInit nor Surfaceflux defined as reference!') + END SELECT + ! Background gas distribution + IF(BGGas%NumberOfSpecies.GT.0) THEN + IF(BGGas%BackgroundSpecies(iSpecies).AND.BGGas%UseDistribution) THEN + TVib = BGGas%Distribution(BGGas%MapSpecToBGSpec(iSpecies),DSMC_TVIB,ElemID) + TRot = BGGas%Distribution(BGGas%MapSpecToBGSpec(iSpecies),DSMC_TROT,ElemID) + END IF + END IF + ! Set vibrational energy + CALL RANDOM_NUMBER(iRan) + iQuant = INT(-LOG(iRan)*TVib/SpecDSMC(iSpecies)%CharaTVib) + DO WHILE (iQuant.GE.SpecDSMC(iSpecies)%MaxVibQuant) + CALL RANDOM_NUMBER(iRan) + iQuant = INT(-LOG(iRan)*TVib/SpecDSMC(iSpecies)%CharaTVib) + END DO + PartStateIntEn( 1,iPart) = (iQuant + DSMC%GammaQuant)*SpecDSMC(iSpecies)%CharaTVib*BoltzmannConst + ! Set rotational energy + CALL RANDOM_NUMBER(iRan) + PartStateIntEn( 2,iPart) = -BoltzmannConst*TRot*LOG(iRan) +ELSE + ! Nullify energy for atomic species + PartStateIntEn( 1,iPart) = 0 + PartStateIntEn( 2,iPart) = 0 +END IF +!----------------------------------------------------------------------------------------------------------------------------------- +! Set electronic energy +!----------------------------------------------------------------------------------------------------------------------------------- +IF (DSMC%ElectronicModel.GT.0) THEN + IF((SpecDSMC(iSpecies)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpecies)%FullyIonized)) THEN + CALL InitElectronShell(iSpecies,iPart,iInit,init_or_sf) + ELSE + PartStateIntEn( 3,iPart) = 0. + END IF +ENDIF + +END SUBROUTINE DSMC_SetInternalEnr_LauxVFD + SUBROUTINE CalcVelocity_taylorgreenvortex(FractNbr, Vec3D, iInit, Element) !=================================================================================================================================== !> diff --git a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 index 0782e16bf..71bd252de 100644 --- a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 +++ b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 @@ -403,7 +403,7 @@ SUBROUTINE ExchangeChemSurfData() USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED,MPI_COMM_LEADERS_SURF, nComputeNodeProcessors USE MOD_MPI_Shared_Vars ,ONLY: nSurfLeaders,myComputeNodeRank,mySurfRank -USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode, PartBound +USE MOD_Particle_Boundary_Vars ,ONLY: SurfTotalSideOnNode, PartBound USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfTotalSides USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide @@ -429,7 +429,7 @@ SUBROUTINE ExchangeChemSurfData() INTEGER :: RecvRequest(0:nSurfLeaders-1),SendRequest(0:nSurfLeaders-1) !=================================================================================================================================== ! nodes without sampling surfaces do not take part in this routine -IF (.NOT.SurfOnNode) RETURN +IF (.NOT.SurfTotalSideOnNode) RETURN #if USE_MPI SurfChemVarNum = 2 diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index 009c8f157..ad39f88da 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -123,7 +123,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) !=================================================================================================================================== ! 1.) Species Swap !=================================================================================================================================== -IF (PartBound%NbrOfSpeciesSwaps(iBC).GT.0) CALL SpeciesSwap(PartID,SideID) +IF (PartBound%NbrOfSpeciesSwaps(locBCID).GT.0) CALL SpeciesSwap(PartID,SideID) !=================================================================================================================================== ! 2.) Count and sample the properties BEFORE the surface interaction diff --git a/src/posti/piclas2vtk/piclas2vtk.f90 b/src/posti/piclas2vtk/piclas2vtk.f90 index d37bfe4f8..31dfbb09c 100644 --- a/src/posti/piclas2vtk/piclas2vtk.f90 +++ b/src/posti/piclas2vtk/piclas2vtk.f90 @@ -1205,13 +1205,11 @@ SUBROUTINE ConvertSurfaceData(InputStateFile) END IF IF(TRIM(File_Type).NE.'RadiationSurfState') THEN - FileString=TRIM(TIMESTAMP(TRIM(ProjectName)//'_visuSurf',OutputTime))//'.vtu' -IF (FileTypeExists) THEN - SELECT CASE(TRIM(File_Type)) - CASE('DSMCSurfChemState') - FileString=TRIM(TIMESTAMP(TRIM(ProjectName)//'_visuSurfChem',OutputTime))//'.vtu' - END SELECT -END IF + IF(TRIM(File_Type).NE.'DSMCSurfChemState') THEN + FileString=TRIM(TIMESTAMP(TRIM(ProjectName)//'_visuSurf',OutputTime))//'.vtu' + ELSE + FileString=TRIM(TIMESTAMP(TRIM(ProjectName)//'_visuSurfChem',OutputTime))//'.vtu' + END IF ELSE FileString=TRIM(TRIM(ProjectName)//'_RadSurfVisu')//'.vtu' END IF From ff63cd9b6ad6a314cd531d4b68690f183bf2b24f Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Tue, 30 Jan 2024 09:38:55 +0100 Subject: [PATCH 142/222] Update Reggie --- REGGIE.md | 2 ++ src/particles/dsmc/dsmc_bg_gas.f90 | 24 +++++++++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/REGGIE.md b/REGGIE.md index 06503fabb..d8716eb4d 100644 --- a/REGGIE.md +++ b/REGGIE.md @@ -237,6 +237,8 @@ Testing more complex DSMC routines with reservoir (heat bath) simulations: [Link | **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | | :-----: | :--------------------------------: | :--------------: | :--------------------------------------------------------------------------------------------------------- | :-----------: | :-----------: | :--------------------------------------------------------------------------------: | | | BGG_MultiSpec_vMPF | | Multi-species background gas (VHS): Basic variable weighting and trace background species | nProcs=1,4 | | [Link](regressioncheck/NIG_Reservoir/BGG_MultiSpec_vMPF/readme.md) | +| | CAT_RATES_ER | | Eley-Rideal reaction rates for the recombination of atomic oxygen on a SiO2-surface | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CAT_RATES_ER/readme.md) | +| | CAT_RATES_LH | | Langmuir-Hinshelwood reaction rates for the recombination of atomic oxygen on a SiO2-surface | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CAT_RATES_LH/readme.md) | | 1 | CHEM_BGG_MultiSpec_TCE_Air_5Spec | | Multi-species background gas: TCE rates for N2/O2 + N/O dissociation and N2 + O exchange | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/readme.md) | | 2 | CHEM_DeleteProduct | | Reaction products are deleted after the chemical reaction | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_DeleteProduct/readme.md) | | 3 | CHEM_EQUI_TCE_Air_5Spec | | Reservoir of high-temperature air (N2, O2) dissociating | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec/readme.md) | diff --git a/src/particles/dsmc/dsmc_bg_gas.f90 b/src/particles/dsmc/dsmc_bg_gas.f90 index 5efad01a1..a608a202e 100644 --- a/src/particles/dsmc/dsmc_bg_gas.f90 +++ b/src/particles/dsmc/dsmc_bg_gas.f90 @@ -287,10 +287,10 @@ SUBROUTINE BGGas_AssignParticleProperties(SpecID,PartIndex,bggPartIndex,GetVeloc USE MOD_Globals USE MOD_Particle_Vars ,ONLY: PDM, PEM, PartState,PartSpecies,PartPosRef, usevMPF, PartMPF USE MOD_Particle_Vars ,ONLY: UseVarTimeStep, PartTimeStep -USE MOD_DSMC_Vars ,ONLY: CollisMode, BGGas +USE MOD_DSMC_Vars ,ONLY: CollisMode, SpecDSMC, BGGas USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod -USE MOD_part_emission_tools ,ONLY: CalcVelocity_maxwell_lpn -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr +USE MOD_part_emission_tools ,ONLY: CalcVelocity_maxwell_lpn, DSMC_SetInternalEnr_LauxVFD +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly USE MOD_part_tools ,ONLY: CalcVelocity_maxwell_particle !----------------------------------------------------------------------------------------------------------------------------------! IMPLICIT NONE @@ -340,7 +340,11 @@ SUBROUTINE BGGas_AssignParticleProperties(SpecID,PartIndex,bggPartIndex,GetVeloc ! Internal energy IF(CollisMode.GT.1) THEN IF(GetInternalEnergy) THEN - CALL DSMC_SetInternalEnr(SpecID,1,bggPartIndex,1) + IF(SpecDSMC(SpecID)%PolyatomicMol) THEN + CALL DSMC_SetInternalEnr_Poly(SpecID,1,bggPartIndex,1) + ELSE + CALL DSMC_SetInternalEnr_LauxVFD(SpecID,1,bggPartIndex,1) + END IF END IF END IF ! Simulation flags @@ -571,10 +575,12 @@ SUBROUTINE BGGas_PhotoIonization(iSpec,iInit,TotalNbrOfReactions) USE MOD_Globals USE MOD_DSMC_Analyze ,ONLY: CalcGammaVib, CalcMeanFreePath USE MOD_DSMC_Vars ,ONLY: Coll_pData, CollisMode, ChemReac, PartStateIntEn, DSMC -USE MOD_DSMC_Vars ,ONLY: DSMCSumOfFormedParticles +USE MOD_DSMC_Vars ,ONLY: SpecDSMC, DSMCSumOfFormedParticles USE MOD_DSMC_Vars ,ONLY: newAmbiParts, iPartIndx_NodeNewAmbi, BGGas USE MOD_Particle_Vars ,ONLY: PEM, PDM, PartSpecies, PartState, Species, usevMPF, PartMPF, Species, PartPosRef -USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr +USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD +USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly +USE MOD_part_pos_and_velo ,ONLY: SetParticleVelocity USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod USE MOD_part_emission_tools ,ONLY: CalcVelocity_maxwell_lpn USE MOD_DSMC_ChemReact ,ONLY: PhotoIonization_InsertProducts @@ -744,7 +750,11 @@ SUBROUTINE BGGas_PhotoIonization(iSpec,iInit,TotalNbrOfReactions) ! Particle element PEM%GlobalElemID(NewParticleIndex) = PEM%GlobalElemID(ParticleIndex) IF(CollisMode.GT.1) THEN - CALL DSMC_SetInternalEnr(bgSpec,1,NewParticleIndex,1) + IF(SpecDSMC(bgSpec)%PolyatomicMol) THEN + CALL DSMC_SetInternalEnr_Poly(bgSpec,1,NewParticleIndex,1) + ELSE + CALL DSMC_SetInternalEnr_LauxVFD(bgSpec,1,NewParticleIndex,1) + END IF END IF IF(BGGas%UseDistribution) THEN iBGGSpec = BGGas%MapSpecToBGSpec(bgSpec) From 504d6564e168adcfe81e05682d41aedd69608dcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Tue, 30 Jan 2024 09:43:56 +0100 Subject: [PATCH 143/222] Allow NearestNeighbour for one timestep for Reservoir simulation --- regressioncheck/CHE_DSMC/DSMC_QualityFactors/parameter.ini | 2 +- src/particles/dsmc/dsmc_init.f90 | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/parameter.ini b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/parameter.ini index 0c1de9f1c..890f4bbed 100644 --- a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/parameter.ini +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/parameter.ini @@ -77,7 +77,7 @@ Part-NumberOfRandomSeeds=2 Particles-RandomSeed1=1 Particles-RandomSeed2=2 Particles-DSMC-UseOctree = F -Particles-DSMC-UseNearestNeighbour = F +Particles-DSMC-UseNearestNeighbour = T Particles-OctreePartNumNode=80 Particles-OctreePartNumNodeMin=50 Particles-DSMC-CalcQualityFactors=T \ No newline at end of file diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index fb41970ac..e2f9c1a49 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -299,6 +299,8 @@ SUBROUTINE InitDSMC() USE MOD_DSMC_PolyAtomicModel ,ONLY: InitPolyAtomicMolecs USE MOD_DSMC_CollisVec ,ONLY: DiceDeflectedVelocityVector4Coll, DiceVelocityVector4Coll, PostCollVec USE MOD_DSMC_BGGas ,ONLY: BGGas_RegionsSetInternalTemp +USE MOD_TimeDisc_Vars ,ONLY: ManualTimeStep, TEnd +USE MOD_Restart_Vars ,ONLY: DoRestart #if USE_LOADBALANCE USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance #endif /*USE_LOADBALANCE*/ @@ -867,8 +869,8 @@ SUBROUTINE InitDSMC() DSMC%UseOctree = GETLOGICAL('Particles-DSMC-UseOctree') IF(DSMC%ReservoirSimu.AND.DSMC%UseOctree) CALL abort(__STAMP__,'Particles-DSMC-UseOctree = T not allowed for RESERVOIR simulations!') DSMC%UseNearestNeighbour = GETLOGICAL('Particles-DSMC-UseNearestNeighbour') - IF(DSMC%ReservoirSimu.AND.DSMC%UseNearestNeighbour) THEN - CALL abort(__STAMP__,'Particles-DSMC-UseNearestNeighbour = T not allowed for RESERVOIR simulations!') + IF(DSMC%ReservoirSimu.AND.DSMC%UseNearestNeighbour.AND.(DoRestart.OR.((TEnd/ManualTimeStep).GT.1))) THEN + CALL abort(__STAMP__,'Particles-DSMC-UseNearestNeighbour = T not allowed for RESERVOIR simulations, if you simulate more than one time step!') END IF IF(DSMC%UseOctree) THEN DO iSpec = 1, nSpecies From e2ec370827fbe4e8b9068a2138ba4858abb967ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Tue, 30 Jan 2024 15:09:12 +0100 Subject: [PATCH 144/222] Add new Reggie --- REGGIE.md | 3 +- .../CHE_DSMC/DSMC_QualityFactors/readme.md | 2 +- .../CHE_DSMC/DSMC_QualityFactors_MPI/DSMC.ini | 19 +++ .../DSMC_QualityFactors_MPI/analyze.ini | 4 + .../DSMC_QualityFactors_MPI/command_line.ini | 2 + .../DSMC_QualityFactors_MPI/excludeBuild.ini | 2 + .../CHE_DSMC/DSMC_QualityFactors_MPI/hopr.ini | 44 +++++ .../DSMC_QualityFactors_MPI/parameter.ini | 156 ++++++++++++++++++ .../DSMC_QualityFactors_MPI/readme.md | 4 + 9 files changed, 234 insertions(+), 2 deletions(-) create mode 100644 regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/DSMC.ini create mode 100644 regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/analyze.ini create mode 100644 regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/command_line.ini create mode 100644 regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/excludeBuild.ini create mode 100644 regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/hopr.ini create mode 100644 regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/parameter.ini create mode 100644 regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/readme.md diff --git a/REGGIE.md b/REGGIE.md index bfb980390..b51c8d803 100644 --- a/REGGIE.md +++ b/REGGIE.md @@ -57,7 +57,8 @@ Small test cases to check features with DSMC timedisc: [Link to build](regressio | | Rotational_Reference_Frame_Regions | | Rotational reference frame with several regions, switching between stationary and rotating frame | nProcs=1,2,3,4 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Regions/readme.md) | | | Rotational_Reference_Frame_RotBC | | Rotational reference frame in combination with the rotationally periodic BC | nProcs=1,2,3,4 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_RotBC/readme.md) | | | Rotational_Reference_Frame_Temperature | | Rotational reference frame: Many particles, multiple revolutions | nProcs=1,2,4 | Temperature | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Temperature/readme.md) | -| | DSMC_QualityFactors | | Quality factors: mean/max collision probability, MCS over MFP, mean free path | nProcs=1 | PartAnalyze, DSMCState | [Link](regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md) | +| | DSMC_QualityFactors | | Quality factors: mean/max collision probability, MCS over MFP, mean free path, ResolvedCellPercentage | nProcs=1 | PartAnalyze | [Link](regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md) | +| | DSMC_QualityFactors_MPI | | Quality factors: ResolvedTimestep, max collision probability, MCS over MFP, ResolvedCellPercentage | nProcs=4 | PartAnalyze | [Link](regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/readme.md) | | | MCC_SpeciesTimeStep | | Species-specific time step with MCC | nProcs=4 | PartAnalyze: Number density | [Link](regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/readme.md) | | | SurfFlux_RefMapping_Tracing_TriaTracking | | Surface flux emission (collisionless) with ARM (with all three trackings) and TriaSurfaceFlux (only TriaTracking) | nProcs=1 | PartAnalyze: nPart, TransTemp | [Link](regressioncheck/CHE_DSMC/SurfFlux_RefMapping_Tracing_TriaTracking/readme.md) | | | SurfFlux_Tria_Adaptive_ConstPressure | | TriaSurfaceFlux with AdaptiveType=1/2 | nProcs=4 | Integrated mass flux | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstMassflow/readme.md) | diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md index ac1be6163..5a3d6038c 100644 --- a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md @@ -3,5 +3,5 @@ * Comparing with the theoretical values from gas kinetic theory * Mean collision probability is expected to be 0.06105 (chosen time step divided by the mean collision time, which is mean free path over average thermal velocity) * Mean free path is expected to be 2.98E-04 meters (Variable hard sphere model) - * Mean collision separation distance over mean free path (MaxMCSoverMFP in PartAnalyze, because it is only one cell) is 0.0001199, compared to the approximated value of 0.0001558, which assumes that the particles are distributed equidistantly in the cell. The difference is due to a 20% lower mean collision separation distance compared to the equidistant distribution (most likely due to nearest neighbour routine) + * Mean collision separation distance over mean free path (MCSoverMFP=MaxMCSoverMFP, because it is only one cell) is 0.0001199, compared to the approximated value of 0.0001558, which assumes that the particles are distributed equidistantly in the cell. The difference is due to a 20% lower mean collision separation distance compared to the equidistant distribution (most likely due to nearest neighbour routine) diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/DSMC.ini b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/DSMC.ini new file mode 100644 index 000000000..bdebff804 --- /dev/null +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/DSMC.ini @@ -0,0 +1,19 @@ +! =============================================================================== ! +! aus piclas/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_AIR_5Spec +! ======================================================================= +! Data for air taken from +! Species: Boyd und Schwartzentruber: Nonequilibrium gas dynamics and molecular simulation page 294 und Bird: Molecular Gas Dynamics and the direct simulation of gas flows appendix A +! Reactions: MONACO-Manual (Dietrich, Boyd) = Parks model (1985) +! ======================================================================= + +! =============================================================================== ! +! Species1, O +! =============================================================================== ! +Part-Species1-SpeciesName = O ! Species name [$] +Part-Species1-InteractionID = 1 ! ID for identification of particles (1: Atom, 2: Molecule, ...) +Part-Species1-Tref = 273 ! Collision parameter: species-specific reference temperature [K] for VHS/VSS model +Part-Species1-dref = 3.0E-10 ! Collision parameter: species-specific reference diameter [m] for VHS/VSS model +Part-Species1-omega = 0.3 ! Collision parameter: species-specific temperature exponent for VHS/VSS model !CAUTION: omega = omega_bird1994 - 0.5! +Part-Species1-HeatOfFormation_K = 29969.88 ! Heat of formation of the respective species [K] + + diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/analyze.ini b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/analyze.ini new file mode 100644 index 000000000..17f048342 --- /dev/null +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/analyze.ini @@ -0,0 +1,4 @@ +compare_data_file_name = PartAnalyze.csv +compare_data_file_reference = PartAnalyze_ref.csv +compare_data_file_tolerance = 5E-2 +compare_data_file_tolerance_type = relative diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/command_line.ini b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/command_line.ini new file mode 100644 index 000000000..9b0bb4a7d --- /dev/null +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/command_line.ini @@ -0,0 +1,2 @@ +MPI=4 +cmd_suffix=DSMC.ini diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/excludeBuild.ini b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/excludeBuild.ini new file mode 100644 index 000000000..19aa341df --- /dev/null +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/excludeBuild.ini @@ -0,0 +1,2 @@ +! Skip N=1 hard coded +PICLAS_POLYNOMIAL_DEGREE=1 diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/hopr.ini b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/hopr.ini new file mode 100644 index 000000000..a834a4aa9 --- /dev/null +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/hopr.ini @@ -0,0 +1,44 @@ + +!================================================================================================================================= ! +! OUTPUT +!================================================================================================================================= ! +ProjectName = cube_8_cells +Debugvisu = T ! Visualize mesh and boundary conditions (tecplot ascii) +Logging = F ! Write log files + +!================================================================================================================================= ! +! MESH +!================================================================================================================================= ! +Mode = 1 ! Mode for Cartesian boxes +nZones = 1 ! number of boxes + +! --------------------------------------------------------------- +! Box 1 +! --------------------------------------------------------------- + +Corner =(/-0.5 , 0.0 , -0.5 ,, 0.5 , 0.0 , -0.5 ,, 0.5 , 1 , -0.5 ,, -0.5 , 1 , -0.5 ,, -0.5 , 0.0 , 0.5 ,, 0.5 , 0.0 , 0.5 ,, 0.5 , 1 , 0.5 ,, -0.5 , 1 , 0.5 /) + ! Corner node positions: (/ x_1,y_1,z_1, x_2,y_2,z_2,..... , x_8,y_8,z_8/) +nElems =(/2,2,2/) ! number of elements in each direction (/nElemX,nElemY,nElemZ/) +BCIndex =(/1 , 1 , 1 , 1 , 1 , 1/) +! =(/z- , y- , x+ , y+ , x- , z+/) ! Indices of Boundary Conditions for six Boundary Faces +elemtype =108 ! element type (108: Hexahedral) + + +useCurveds =F ! T if curved boundaries defined +SpaceQuandt =1. ! characteristic length of the mesh +ConformConnect=T + +!=============================================================================== ! +! BOUNDARY CONDITIONS +!=============================================================================== ! +nUserDefinedBoundaries=1 +BoundaryName=WALL ! Outflow: open (absorbing) [for MAXWELL] +BoundaryType=(/4,0,0,0/) ! (/ Type, curveIndex, State, alpha /) + +!=============================================================================== ! +! BASIS +!=============================================================================== ! +NVisu = 7 +meshscale = 0.1 +jacobianTolerance=1E-25 + diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/parameter.ini b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/parameter.ini new file mode 100644 index 000000000..ca1ebf4bb --- /dev/null +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/parameter.ini @@ -0,0 +1,156 @@ +! =============================================================================== ! +! EQUATION (linearscalaradvection) +! =============================================================================== ! +IniExactFunc = 0 + +! =============================================================================== ! +! DISCRETIZATION +! =============================================================================== ! +N = 1 +NAnalyze = 1 + +! =============================================================================== ! +! MESH +! =============================================================================== ! +MeshFile = cube_8_cells_mesh.h5 +TrackingMethod = triatracking + +! =============================================================================== ! +! OUTPUT / VISUALIZATION +! =============================================================================== ! +ProjectName = DSMC_QualityFactors_MPI +IterDisplayStep = 1 +CalcNumSpec = T + +! =============================================================================== ! +! CALCULATION +! =============================================================================== ! +TEnd = 4.0E-6 +Analyze_dt = 1E-4 +CFLscale = 0.2 + +! =============================================================================== ! +! DSMC +! =============================================================================== ! +ManualTimeStep = 4.0E-6 +Particles-HaloEpsVelo = 8.0E+4 +Particles-NumberForDSMCOutputs = 1 +Part-TimeFracForSampling = 1 +Particles-DSMC-CalcSurfaceVal = F +UseDSMC = T +Particles-DSMC-CollisMode = 2 +Part-NumberOfRandomSeeds = 2 +Particles-RandomSeed1 = 1 +Particles-RandomSeed2 = 2 +Particles-DSMC-UseOctree = F +Particles-DSMC-UseNearestNeighbour = T +Particles-DSMC-CalcQualityFactors = T + +! =============================================================================== ! +! Boundaries +! =============================================================================== ! +Part-nBounds = 1 +Part-Boundary1-SourceName = WALL +Part-Boundary1-Condition = reflective +Part-Boundary1-WallTemp = 300 +Part-Boundary1-TransACC = 1 +Part-Boundary1-MomentumACC = 1 +Part-Boundary1-VibACC = 1 +Part-Boundary1-RotACC = 1 + +! =============================================================================== ! +! PARTICLES +! =============================================================================== ! +Part-maxParticleNumber = 500000 +Part-nSpecies = 1 +Part-FIBGMdeltas = (/1.0,1.0,1.0/) + +! =============================================================================== ! +! Species1 - O +! =============================================================================== ! +Part-Species1-MassIC = 2.657E-26 +Part-Species1-MacroParticleFactor = 1E15 +Part-Species1-ChargeIC = 0 + +! Initialization: +Part-Species1-nInits = 8 + +Part-Species1-Init1-SpaceIC = sphere +Part-Species1-Init1-RadiusIC = 0.025 +Part-Species1-Init1-BasePointIC = (/ 0.025, 0.025, 0.025 /) +Part-Species1-Init1-NormalIC = (/ 0.0, 0.0, 1.0 /) +Part-Species1-Init1-velocityDistribution = maxwell_lpn +Part-Species1-Init1-MWTemperatureIC = 300 +Part-Species1-Init1-PartDensity = 1E+21 +Part-Species1-Init1-VeloIC = 0 +Part-Species1-Init1-VeloVecIC = (/1.,0.,0./) + +Part-Species1-Init2-SpaceIC = sphere +Part-Species1-Init2-RadiusIC = 0.025 +Part-Species1-Init2-BasePointIC = (/ -0.025, 0.075, 0.025 /) +Part-Species1-Init2-NormalIC = (/ 0.0, 0.0, 1.0 /) +Part-Species1-Init2-velocityDistribution = maxwell_lpn +Part-Species1-Init2-MWTemperatureIC = 300 +Part-Species1-Init2-PartDensity = 1E+21 +Part-Species1-Init2-VeloIC = 0 +Part-Species1-Init2-VeloVecIC = (/1.,0.,0./) + +Part-Species1-Init3-SpaceIC = sphere +Part-Species1-Init3-RadiusIC = 0.025 +Part-Species1-Init3-BasePointIC = (/ -0.025, 0.025, -0.025 /) +Part-Species1-Init3-NormalIC = (/ 0.0, 0.0, 1.0 /) +Part-Species1-Init3-velocityDistribution = maxwell_lpn +Part-Species1-Init3-MWTemperatureIC = 300 +Part-Species1-Init3-PartDensity = 1E+21 +Part-Species1-Init3-VeloIC = 0 +Part-Species1-Init3-VeloVecIC = (/1.,0.,0./) + +Part-Species1-Init4-SpaceIC = sphere +Part-Species1-Init4-RadiusIC = 0.025 +Part-Species1-Init4-BasePointIC = (/ 0.025, 0.075, -0.025 /) +Part-Species1-Init4-NormalIC = (/ 0.0, 0.0, 1.0 /) +Part-Species1-Init4-velocityDistribution = maxwell_lpn +Part-Species1-Init4-MWTemperatureIC = 300 +Part-Species1-Init4-PartDensity = 1E+21 +Part-Species1-Init4-VeloIC = 0 +Part-Species1-Init4-VeloVecIC = (/1.,0.,0./) + +Part-Species1-Init5-SpaceIC = sphere +Part-Species1-Init5-RadiusIC = 0.025 +Part-Species1-Init5-BasePointIC = (/ 0.025, 0.025, -0.025 /) +Part-Species1-Init5-NormalIC = (/ 0.0, 0.0, 1.0 /) +Part-Species1-Init5-velocityDistribution = maxwell_lpn +Part-Species1-Init5-MWTemperatureIC = 300 +Part-Species1-Init5-PartDensity = 2E+21 +Part-Species1-Init5-VeloIC = 0 +Part-Species1-Init5-VeloVecIC = (/1.,0.,0./) + +Part-Species1-Init6-SpaceIC = sphere +Part-Species1-Init6-RadiusIC = 0.025 +Part-Species1-Init6-BasePointIC = (/ 0.025, 0.075, 0.025 /) +Part-Species1-Init6-NormalIC = (/ 0.0, 0.0, 1.0 /) +Part-Species1-Init6-velocityDistribution = maxwell_lpn +Part-Species1-Init6-MWTemperatureIC = 300 +Part-Species1-Init6-PartDensity = 2E+21 +Part-Species1-Init6-VeloIC = 0 +Part-Species1-Init6-VeloVecIC = (/1.,0.,0./) + +Part-Species1-Init7-SpaceIC = sphere +Part-Species1-Init7-RadiusIC = 0.025 +Part-Species1-Init7-BasePointIC = (/ -0.025, 0.025, 0.025 /) +Part-Species1-Init7-NormalIC = (/ 0.0, 0.0, 1.0 /) +Part-Species1-Init7-velocityDistribution = maxwell_lpn +Part-Species1-Init7-MWTemperatureIC = 300 +Part-Species1-Init7-PartDensity = 1E+20 +Part-Species1-Init7-VeloIC = 0 +Part-Species1-Init7-VeloVecIC = (/1.,0.,0./) + +Part-Species1-Init8-SpaceIC = sphere +Part-Species1-Init8-RadiusIC = 0.025 +Part-Species1-Init8-BasePointIC = (/ -0.025, 0.075, -0.025 /) +Part-Species1-Init8-NormalIC = (/ 0.0, 0.0, 1.0 /) +Part-Species1-Init8-velocityDistribution = maxwell_lpn +Part-Species1-Init8-MWTemperatureIC = 300 +Part-Species1-Init8-PartDensity = 2E+21 +Part-Species1-Init8-VeloIC = 0 +Part-Species1-Init8-VeloVecIC = (/1.,0.,0./) diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/readme.md b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/readme.md new file mode 100644 index 000000000..8963f2c4a --- /dev/null +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/readme.md @@ -0,0 +1,4 @@ +# DSMC: Quality Factors +* Testing the calculation and MPI communication of the QualityFactors ResolvedTimestep, Pmax, MaxMCSoverMFP and ResolvedCellPercentage +* The values are not compared to the theoretical values from gas kinetic theory. This is done in the Reggie DSMC_QualityFactors + From 4a0f6271ad034a0b5ce122ef75feec2fa792b530 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Wed, 31 Jan 2024 08:29:41 +0100 Subject: [PATCH 145/222] Reggie DSMC_Qualityfactors_MPI PartAnalyze.csv + mesh file and Docu --- .../userguide/features-and-models/DSMC.md | 6 +++++- .../DSMC_QualityFactors_MPI/PartAnalyze_ref.csv | 3 +++ .../DSMC_QualityFactors_MPI/cube_8_cells_mesh.h5 | Bin 0 -> 9703 bytes .../DSMC_QualityFactors_MPI/excludeBuild.ini | 2 +- 4 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/PartAnalyze_ref.csv create mode 100644 regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/cube_8_cells_mesh.h5 diff --git a/docs/documentation/userguide/features-and-models/DSMC.md b/docs/documentation/userguide/features-and-models/DSMC.md index fff578345..fd55e68db 100644 --- a/docs/documentation/userguide/features-and-models/DSMC.md +++ b/docs/documentation/userguide/features-and-models/DSMC.md @@ -466,7 +466,11 @@ the mean collision separation distance to the mean free path is written out (`DS $$\frac{l_{\mathrm{mcs}}}{\lambda} < 1$$ The mean collision separation distance is determined during every collision and compared to the mean free path, where its ratio -should be less than unity. Values above unity indicate an insufficient particle discretization. In order to estimate the required +should be less than unity. Values above unity indicate an insufficient particle discretization. + +Additionaly, the above flag writes out the percentage of cells with a resolved timestep (`ResolvedTimestep`), the maximum collision probability of the entire computational domain (`Pmax`), the maximum of the `MCSoverMFP` of the entire domain (`MaxMCSoverMFP`), and the percentage of cells with a resolved time step and resolved weighting factor $w$ (`ResolvedCellPercentage`) to the file `PartAnalyze.csv`. In case of a reservoir simulation, the mean collision probability (`Pmean`) is the output instead of the `ResolvedTimestep`. + +In order to estimate the required weighting factor $w$, the following equation can be utilized for a 3D simulation $$w < \frac{1}{\left(\sqrt{2}\pi d_{\mathrm{ref}}^2 n^{2/3}\right)^3},$$ diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/PartAnalyze_ref.csv b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/PartAnalyze_ref.csv new file mode 100644 index 000000000..a5b0f4d7c --- /dev/null +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/PartAnalyze_ref.csv @@ -0,0 +1,3 @@ +001-TIME,002-nPart-Spec-001,003-ResolvedTimestep,004-Pmax,005-MeanFreePath,006-MaxMCSoverMFP,007-ResolvedCellPercentage +0.0000000000000000E+000,0.6560000000000000E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +0.4000000000000000E-005,0.6560000000000000E+003,0.7500000000000000E+002,0.1459098048714706E+001,0.3977357765940307E-002,0.2823015493546503E+001,0.1250000000000000E+002 diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/cube_8_cells_mesh.h5 b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/cube_8_cells_mesh.h5 new file mode 100644 index 0000000000000000000000000000000000000000..c992c9cc2f26675bcc144a7b795cf91600ac2deb GIT binary patch literal 9703 zcmeHMO>A355MJA9Yubb+EkC9FnbL}gLse)Gxgfi70*+KA6)m*4Hc-5~nLK+QGy6oR$91+c_|MLl>-ES1=jW=r z8#EaH|f^RHLu7i!Ih#ShE6-Xpb4#_bI556Tx#zIgJKv=5q!+Bqoon4PJ{ zqA|m=;0G+D;CLzazJAU&i;a@wiFeqWzFutt*r^?kuWe_awbPiaS8pur+z$6?!p?=- zwQ3i35F?a?o#|#*c1qTYAMYVIuh$y2cWzd7R6C#F@y_;ibUU~AxZ2B@z4p9x4_QBE z)V5@@?#(c+dK}8ybA@_N&Q~zQ_q|7$z_VFr2x}H4m*IiGX>~phsb%!}?CyHim=>FQ zDlbgWOk`v&SJdm0?!&Y}oY#i2p)`iWFKctN(jz*c&5-qVANEIdj0A+0qW_`)&ClHO(z+ z)nr`el-3)OjE6fPcz>027?jE(PME%2f=){eGj?&wJ~0n z+bntBGH#q~QikVzJl-Kcr{_2FiY@WiVSVXU0#>^u;VTv}tUTht4k?C{i#Rao z_!Q(r96C}cV59OO4h*?8uu~om?0Ln;Jlw}hf@42%{8F`bU~)`G1?|AN_Rv7=5BZ@1 z+(!UP0S`G4r2fQU>%R#PF<|hUp*`TJW1J|^(T|0^2MCBHh96-tM&Iwx;un5= zzlc2x`y$JkI=9nGM!TQxvhP7{hah%G`XUa#-;sOp@V;5t_jl=wy6^X{V3?a9 z=fmtMl6`*?9@d=i7wZmvUy=_B=JBw6!1L$(gY-qLe7}#1&O#qpi!8(*BOsC(5;gep z{W6IGoxE?wFW#~5_ea4HKYzY@P@!wo_era{2kl|*Sd+eA>=XF#=gV~>aAdClMGNg= z3>XXfnA0=Lfglg@MBVp$3R~%|O7bX)tBl4U;&J|Z%J|!OoWB;vgZ(2s&R>u4_&5@HINm63 z@qW>JQGVJu+jtlcj*pV|13j`&oYL`=W2o!*=SF z;>eAVGZ9A)gnN>C5AqstkjsFBoBGb*l%n4_y`-%7vA}b*s^s z@BQztDcnBXk3c^H{Rs3U&}{_n=+}zwCGUmL)n!fPg32#czO8am<(De!B5?)0tNK?e F{{(+ql#BoX literal 0 HcmV?d00001 diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/excludeBuild.ini b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/excludeBuild.ini index 19aa341df..edcafe61c 100644 --- a/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/excludeBuild.ini +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/excludeBuild.ini @@ -1,2 +1,2 @@ ! Skip N=1 hard coded -PICLAS_POLYNOMIAL_DEGREE=1 +PICLAS_POLYNOMIAL_DEGREE=1 \ No newline at end of file From 93e54b6a994fa5409f9adac7732f89147f8112bc Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Wed, 31 Jan 2024 08:55:44 +0100 Subject: [PATCH 146/222] Remove double call to SpeciesSwap in the Surfacemodel --- src/particles/boundary/particle_boundary_sampling.f90 | 5 +++++ src/particles/surfacemodel/surfacemodel_main.f90 | 7 +------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index ee21ad0e3..efa78f89f 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -34,9 +34,14 @@ MODULE MOD_Particle_Boundary_Sampling MODULE PROCEDURE FinalizeParticleBoundarySampling END INTERFACE +INTERFACE WriteSurfSampleToHDF5 + MODULE PROCEDURE WriteSurfSampleToHDF5 +END INTERFACE + PUBLIC::DefineParametersParticleBoundarySampling PUBLIC::InitParticleBoundarySampling PUBLIC::CalcSurfaceValues +PUBLIC::WriteSurfSampleToHDF5 PUBLIC::FinalizeParticleBoundarySampling !=================================================================================================================================== diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index ad39f88da..249546fa1 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -121,12 +121,7 @@ SUBROUTINE SurfaceModelling(PartID,SideID,GlobalElemID,n_Loc) ChargeImpact = Species(PartSpecies(PartID))%ChargeIC*MPF END IF !=================================================================================================================================== -! 1.) Species Swap -!=================================================================================================================================== -IF (PartBound%NbrOfSpeciesSwaps(locBCID).GT.0) CALL SpeciesSwap(PartID,SideID) - -!=================================================================================================================================== -! 2.) Count and sample the properties BEFORE the surface interaction +! 1.) Count and sample the properties BEFORE the surface interaction !=================================================================================================================================== ! Counter for surface analyze IF(CalcSurfCollCounter) SurfAnalyzeCount(PartSpecImpact) = SurfAnalyzeCount(PartSpecImpact) + 1 From c591b59304871a22214c83e00b02f7b481e18c67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miklas=20Sch=C3=BCtte?= Date: Thu, 1 Feb 2024 14:01:56 +0100 Subject: [PATCH 147/222] Changed PartAnalyze_ref files --- .../Database_Ttrans_15000_ref.csv | 2 +- .../Database_Ttrans_20000_ref.csv | 2 +- .../Database_Ttrans_25000_ref.csv | 2 +- .../Database_Ttrans_30000_ref.csv | 2 +- .../PartAnalyze_T-25000_ref.csv | 2 +- .../PartAnalyze_T-35000_ref.csv | 2 +- .../PartAnalyze_T-45000_ref.csv | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_15000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_15000_ref.csv index 36309a6f1..30fbd6ec3 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_15000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_15000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004,011-Reaction005 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-007,4.15119539713157E-001,7.81552614396978E-001,1.46013945833773E-005,0.0000000000000000E+000,0.0000000000000000E+000,5.65915325730076E-018,1.71194379397845E-016,5.46193901126186E-018,5.64365826162393E-018,1.71913416028807E-016 +1.00000000000000E-007,4.15119539713157E-001,7.81552614396978E-001,1.46013945833773E-005,0.0000000000000000E+000,0.1000000000000000E+003,5.65915325730076E-018,1.71194379397845E-016,5.46193901126186E-018,5.64365826162393E-018,1.71913416028807E-016 diff --git a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_20000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_20000_ref.csv index c676e24a9..17df90ed9 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_20000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_20000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004,011-Reaction005 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-007,4.47559993591972E-001,8.92300196007909E-001,1.56451464977998E-005,0.0000000000000000E+000,0.0000000000000000E+000,2.30501939606140E-017,2.98606402841324E-016,7.74403936513887E-018,2.29962815955325E-017,2.99179879671808E-016 +1.00000000000000E-007,4.47559993591972E-001,8.92300196007909E-001,1.56451464977998E-005,0.0000000000000000E+000,0.1000000000000000E+003,2.30501939606140E-017,2.98606402841324E-016,7.74403936513887E-018,2.29962815955325E-017,2.99179879671808E-016 diff --git a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_25000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_25000_ref.csv index fd42db7ab..b44f7f5fe 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_25000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_25000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004,011-Reaction005 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-007,4.74050019404016E-001,9.37805694448479E-001,1.65058554426589E-005,0.0000000000000000E+000,0.0000000000000000E+000,4.97833540255880E-017,3.87994790203365E-016,9.10294567339719E-018,4.97938048700443E-017,3.87300727417732E-016 +1.00000000000000E-007,4.74050019404016E-001,9.37805694448479E-001,1.65058554426589E-005,0.0000000000000000E+000,0.1000000000000000E+003,4.97833540255880E-017,3.87994790203365E-016,9.10294567339719E-018,4.97938048700443E-017,3.87300727417732E-016 diff --git a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_30000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_30000_ref.csv index 1b76361b3..2f829dc2d 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_30000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/Database_Ttrans_30000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002,009-Reaction003,010-Reaction004,011-Reaction005 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-007,4.96981553163028E-001,9.56127086192396E-001,1.72441398496055E-005,0.0000000000000000E+000,0.0000000000000000E+000,7.85646412162534E-017,4.39062831301584E-016,9.80866304821267E-018,7.85559016425114E-017,4.38869012436839E-016 +1.00000000000000E-007,4.96981553163028E-001,9.56127086192396E-001,1.72441398496055E-005,0.0000000000000000E+000,0.1000000000000000E+003,7.85646412162534E-017,4.39062831301584E-016,9.80866304821267E-018,7.85559016425114E-017,4.38869012436839E-016 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-25000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-25000_ref.csv index 454c4cc31..56e3e563e 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-25000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-25000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-010,1.35776328243403E-001,2.50022420054576E-001,1.05402213689990E-005,0.0000000000000000E+000,0.0000000000000000E+000,5.02512562814071E-016,2.65670984404092E-015 +1.00000000000000E-010,1.35776328243403E-001,2.50022420054576E-001,1.05402213689990E-005,0.0000000000000000E+000,0.1000000000000000E+003,5.02512562814071E-016,2.65670984404092E-015 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-35000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-35000_ref.csv index a67d13995..26c300fbe 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-35000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-35000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-010,1.48196947039560E-001,2.72845160534894E-001,1.14266904041243E-005,0.0000000000000000E+000,0.0000000000000000E+000,1.16919257642796E-015,1.24341828665239E-014 +1.00000000000000E-010,1.48196947039560E-001,2.72845160534894E-001,1.14266904041243E-005,0.0000000000000000E+000,0.1000000000000000E+003,1.16919257642796E-015,1.24341828665239E-014 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-45000_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-45000_ref.csv index 0c0931dfc..593b8f908 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-45000_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/PartAnalyze_T-45000_ref.csv @@ -1,3 +1,3 @@ 001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-MaxMCSoverMFP,006-ResolvedCellPercentage,007-Reaction001,008-Reaction002 0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -1.00000000000000E-010,1.58212426667140E-001,2.91362997624375E-001,1.21371056784876E-005,0.0000000000000000E+000,0.0000000000000000E+000,1.97551502532583E-015,2.57182325972492E-014 +1.00000000000000E-010,1.58212426667140E-001,2.91362997624375E-001,1.21371056784876E-005,0.0000000000000000E+000,0.1000000000000000E+003,1.97551502532583E-015,2.57182325972492E-014 From 7a8930ffa2efe84463b8aba07ac61485d4aebec7 Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Sat, 3 Feb 2024 20:28:55 +0100 Subject: [PATCH 148/222] Added more cases 1D+2D thin dielectric layer with electrons between two plates --- src/equations/poisson/equation.f90 | 46 ++++++++++--------- src/hdg/hdg.f90 | 10 +++- .../emission/particle_emission_tools.f90 | 7 +++ src/particles/particle_operations.f90 | 10 ++++ 4 files changed, 51 insertions(+), 22 deletions(-) diff --git a/src/equations/poisson/equation.f90 b/src/equations/poisson/equation.f90 index 53b432d58..8a47c2434 100644 --- a/src/equations/poisson/equation.f90 +++ b/src/equations/poisson/equation.f90 @@ -150,9 +150,9 @@ SUBROUTINE InitEquation() ! Sanity checks SELECT CASE (IniExactFunc) -CASE(800,801,900) ! Dielectric slab on electrode (left) with plasma between slab and other electrode opposite +CASE(800,801,900,901,1000,1100) ! Dielectric slab on electrode (left) with plasma between slab and other electrode opposite #if ! (defined(CODE_ANALYZE) && USE_PETSC && PARTICLES) - CALL abort(__STAMP__,'IniExactFunc=800,801,900 requires PICLAS_CODE_ANALYZE=ON, PICLAS_PETSC=ON and PICLAS_PARTICLES=ON') + CALL abort(__STAMP__,'IniExactFunc=800,801,900,901,1000,1100 requires PICLAS_CODE_ANALYZE=ON, PICLAS_PETSC=ON and PICLAS_PARTICLES=ON') #endif /*! (defined(CODE_ANALYZE) && USE_PETSC && PARTICLES)*/ END SELECT @@ -831,12 +831,11 @@ SUBROUTINE ExactFunc(ExactFunction,x,resu,t,ElemID,iRefState,iLinState,BCState) #else CALL abort(__STAMP__,'ExactFunc=700 requires PARTICLES=ON') #endif /*defined(PARTICLES)*/ -CASE(800,801,900) ! Dielectric slab on electrode (left) with plasma between slab and other electrode opposite +CASE(800,801,900,901,1000,1100) ! Dielectric slab on electrode (left) with plasma between slab and other electrode opposite resu = 0. - ASSOCIATE( x => x(1) , & - y => x(2) , & - z => x(3) , & - L => 1e-3 , & + xi = x(1) + IF((ExactFunction.GE.1000).AND.(x(1).GT.0.5e-6)) xi = x(1) - 1e-6 + ASSOCIATE( L => 1e-3 , & d => 1e-8 , & eps1 => 1e1 , & sigma => 1e-2 , & @@ -845,11 +844,11 @@ SUBROUTINE ExactFunc(ExactFunction,x,resu,t,ElemID,iRefState,iLinState,BCState) ASSOCIATE( PhiF => ((d/L)/((d/L)+eps1))*( L*(sigma + 0.5*rho0*L)/eps0 + Phi0 ) ) ASSOCIATE( a => 0.5*rho0*L/eps0 + (Phi0 - PhiF)/L ,& b => PhiF) - IF(x.GE.0.0)THEN - resu = -0.5*rho0*x**2/eps0 + a*x + b + IF(xi.GT.0.0)THEN + resu = -0.5*rho0*xi**2/eps0 + a*xi + b ELSE - resu = b * (x/d + 1.0) - END IF ! x.GE.0.0 + resu = b * (xi/d + 1.0) + END IF ! xi.GE.0.0 END ASSOCIATE END ASSOCIATE END ASSOCIATE @@ -996,7 +995,7 @@ PPURE SUBROUTINE CalcSourceHDG(i,j,k,iElem,resu, Phi, warning_linear, warning_li !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES REAL :: xvec(3) -REAL :: r1,r2 +REAL :: r1,r2,dx REAL,DIMENSION(3) :: dx1,dx2,dr1dx,dr2dx,dr1dx2,dr2dx2 #ifdef PARTICLES REAL :: source_e ! Electron charge density for Boltzmann relation (electrons as isothermal fluid!) @@ -1028,37 +1027,42 @@ PPURE SUBROUTINE CalcSourceHDG(i,j,k,iElem,resu, Phi, warning_linear, warning_li resu(1)=-3 * SIN(xvec(1) + 1) * SIN(xvec(2) + 2) * SIN(xvec(3) + 3) CASE DEFAULT resu=0. -END SELECT ! ExactFunction +END SELECT ! IniExactFunc #if defined(PARTICLES) #if defined(CODE_ANALYZE) ! Specific source terms after particle deposition SELECT CASE(IniExactFunc) -CASE(800) ! plasma between electrodes + particles +CASE(800,1000) ! plasma between electrodes + particles ! Check Dirichlet elements - IF(ElemHasDirichletBC(iElem))THEN + dx=1e-3 + IF(IniExactFunc.EQ.1000) dx=dx+1e-6 + !IF(ElemHasDirichletBC(iElem))THEN + IF(1.eq.2)THEN ! Get length on element in 1D ASSOCIATE( Bounds => BoundsOfElem_Shared(1:2,1:3,iElem + offsetElem) ) ! 1-2: Min, Max value; 1-3: x,y,z ElemCharLengthX = ABS(Bounds(2,1)-Bounds(1,1)) ! ABS(max - min) ! Add scaled value in BC elements - IF((x.GT.0.0).AND.(x.LT.1.0e-3))THEN + IF((x.GT.0.0).AND.(x.LT.dx))THEN IF(x.GT.0.5e-3)THEN ! Negative gradient - PartSource(4,i,j,k,iElem) = PartSource(4,i,j,k,iElem) - 1e-4*(1e-3-x)/ElemCharLengthX + PartSource(4,i,j,k,iElem) = PartSource(4,i,j,k,iElem) - 1e-4*(dx-x)/ElemCharLengthX ELSE ! Positive gradient PartSource(4,i,j,k,iElem) = PartSource(4,i,j,k,iElem) - 1e-4*x/ElemCharLengthX END IF ! x.GT.0.5e-3 - END IF ! (x.GT.0.0).AND.(x.LT.1.0e-3) + END IF ! (x.GT.0.0).AND.(x.LT.dx) !WRITE (*,*) "x,source =", x,PartSource(4,i,j,k,iElem),NINT(x*1e9), " nm", " TRUE" END ASSOCIATE ELSE ! Add constant value - IF((x.GT.0.0).AND.(x.LT.1.0e-3)) PartSource(4,i,j,k,iElem) = PartSource(4,i,j,k,iElem) - 1e-4 + IF((x.GT.0.0).AND.(x.LT.dx)) PartSource(4,i,j,k,iElem) = PartSource(4,i,j,k,iElem) - 1e-4 !WRITE (*,*) "x,source =", x,PartSource(4,i,j,k,iElem),NINT(x*1e9), " nm" END IF ! ElemHasDirichletBC(iElem) -CASE(801) ! plasma between electrodes + particles: Linear source - IF(x.GT.0.0)THEN +CASE(801,901) ! plasma between electrodes + particles: Linear source + dx=1e-3 + IF(IniExactFunc.EQ.901) dx=dx+1e-6 + IF((x.GT.0.0).AND.(x.LT.dx))THEN PartSource(4,i,j,k,iElem) = PartSource(4,i,j,k,iElem) - 1e-4*(1.0 - Elem_xGP(2,i,j,k,iElem)/1e-3) END IF ! x.GT.0.0 END SELECT diff --git a/src/hdg/hdg.f90 b/src/hdg/hdg.f90 index b39d1196d..f1ccfe2b1 100644 --- a/src/hdg/hdg.f90 +++ b/src/hdg/hdg.f90 @@ -657,7 +657,7 @@ SUBROUTINE InitFPC() ! Set initial value depending on IniExactFunc SELECT CASE (IniExactFunc) -CASE(800,900) ! Dielectric slab on electrode (left) with plasma between slab and other electrode opposite +CASE(800,900,901,1000,1100) ! Dielectric slab on electrode (left) with plasma between slab and other electrode opposite ! Set initial value FPC%Charge(1) = 1.0e-2*(GEO%ymaxglob-GEO%yminglob)*(GEO%zmaxglob-GEO%zminglob) ! C/m2 FPC%Voltage(1) = 1.1293922903231239 ! V @@ -1611,6 +1611,7 @@ SUBROUTINE HDG(t,U_out,iter) #if (USE_HDG && (PP_nVar==1)) INTEGER :: iDir,iElem #endif /*(USE_HDG && (PP_nVar==1))*/ +REAL :: maxphi !=================================================================================================================================== #ifdef EXTRAE CALL extrae_eventandcounters(int(9000001), int8(4)) @@ -1713,6 +1714,13 @@ SUBROUTINE HDG(t,U_out,iter) END IF #endif /*defined(PARTICLES)*/ +! Debugging +!maxphi = maxval(lambda) +!CALL MPI_ALLREDUCE(MPI_IN_PLACE,maxphi,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_PICLAS,iError) +!IF(myrank.eq.0)THEN +! IPWRITE(UNIT_StdOut,*) "iter,t,maxval(lambda) =", iter,t,maxphi +!END IF ! myrank.eq.0 + ! Calculate temporal derivate of D in last iteration before Analyze_dt is reached: Use E^n+1 here and calculate the derivative dD/dt #if (USE_HDG && (PP_nVar==1)) #if (PP_TimeDiscMethod==501) || (PP_TimeDiscMethod==502) || (PP_TimeDiscMethod==506) diff --git a/src/particles/emission/particle_emission_tools.f90 b/src/particles/emission/particle_emission_tools.f90 index 36a5eb133..92e8e50e4 100644 --- a/src/particles/emission/particle_emission_tools.f90 +++ b/src/particles/emission/particle_emission_tools.f90 @@ -1206,6 +1206,13 @@ SUBROUTINE SetParticlePositionCuboidCylinder(FractNbr,iInit,chunkSize,particle_p Particle_pos = Particle_pos + Species(FractNbr)%Init(iInit)%BaseVector2IC * RandVal(2) Particle_pos = Particle_pos + lineVector * Species(FractNbr)%Init(iInit)%CuboidHeightIC * RandVal(3) IF(Symmetry%Order.EQ.1) Particle_pos(2:3) = 0. + + ! Debugging: Get linear distribution in y for 2D cases + !CALL RANDOM_NUMBER(iRan) + !IF(Particle_pos(2)/1e-3.GT.iRan) THEN + ! i=i+1 + ! CYCLE + !END IF CASE ('cylinder') radius = Species(FractNbr)%Init(iInit)%RadiusIC + 1. DO WHILE((radius.GT.Species(FractNbr)%Init(iInit)%RadiusIC) .OR.(radius.LT.Species(FractNbr)%Init(iInit)%Radius2IC)) diff --git a/src/particles/particle_operations.f90 b/src/particles/particle_operations.f90 index ce4a39cde..b6252c0fb 100644 --- a/src/particles/particle_operations.f90 +++ b/src/particles/particle_operations.f90 @@ -159,6 +159,7 @@ SUBROUTINE RemoveParticle(PartID,BCID,alpha,crossedBC) USE MOD_HDG_Vars ,ONLY: UseFPC,FPC,UseEPC,EPC USE MOD_Mesh_Vars ,ONLY: BoundaryType #endif /*USE_HDG*/ +USE MOD_Particle_Vars ,ONLY: PartState, LastPartPos !----------------------------------------------------------------------------------------------------------------------------------! IMPLICIT NONE ! INPUT / OUTPUT VARIABLES @@ -298,6 +299,15 @@ SUBROUTINE RemoveParticle(PartID,BCID,alpha,crossedBC) END IF ! BCType.EQ.8 END IF ! UseEPC #endif /*USE_HDG*/ + + ! Debugging: Move particles that impact the left BC to a specific location + !IF(TRIM(BoundaryName(PartBound%MapToFieldBC(BCID))).EQ.'BC_LEFT')THEN + ! PartSpecies(PartID) = 3 + ! PDM%ParticleInside(PartID) = .TRUE. + ! PartState(1,PartID) = -9e-9 ! (/-9e-9, 0., 0./) + ! LastPartPos(1,PartID) = -9e-9 ! (/-9e-9, 0., 0./) + ! PartState(4:6,PartID) = (/0., 0., 0./) + !END IF ! TRIM(BoundaryName(PartBound%MapToFieldBC(BCID))).EQ.'BC_LEFT' END IF ! PRESENT(BCID) ! Tracking-relevant variables (not required if a particle is removed within the domain, e.g. removal due to radial weighting) From c6e89a90f59b17c91e4027173a36ef3c0c8bf14e Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Wed, 7 Feb 2024 14:38:14 +0100 Subject: [PATCH 149/222] up --- .../WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/parameter.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/parameter.ini b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/parameter.ini index e27641770..c4ccd779b 100644 --- a/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/parameter.ini +++ b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/parameter.ini @@ -144,6 +144,6 @@ Particles-Symmetry2D = T Particles-Symmetry2DAxisymmetric = T ! Radial Weighting Particles-RadialWeighting = T -Particles-RadialWeighting-PartScaleFactor = 10 !initially 60 +Particles-RadialWeighting-PartScaleFactor = 9 !initially 60 Particles-RadialWeighting-CloneMode = 2 Particles-RadialWeighting-CloneDelay = 5 From 8300f9c6946ef0110074860a7bb062d8552aed8c Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Sat, 10 Feb 2024 14:51:34 +0100 Subject: [PATCH 150/222] Perform arithmetic with 0-prefixed numbers: tell bash to use base-10 by specifying 10# --- .gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 654dbc524..231254439 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -40,7 +40,8 @@ before_script: else day=$(cat reggie/.day); fi - - if [ "$(($day % 2))" == "0" ]; then + - echo "Perform arithmetic with 0-prefixed numbers by telling bash to use base-10 by specifying 10#" + - if [ "$((10#$day % 2))" == "0" ]; then echo "Even day number ($day). Loading OpenMPI"; module purge; module load cmake/3.26.4 gcc/13.2.0 openmpi/4.1.5/gcc/13.2.0 hdf5/1.14.0/gcc/13.2.0/openmpi/4.1.5 hopr/master/gcc/13.2.0/openmpi/4.1.5/hdf5/1.14.0 petsc/3.19.3/gcc/13.2.0/openmpi/4.1.5; From 675add01cf66ddfdab38f571dd6e3af38edbf280 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 12 Feb 2024 19:09:25 +0100 Subject: [PATCH 151/222] Fixed NIG_DSMC and NIG_tracking_DSMC regression tests without SpeciesName --- .../NIG_DSMC/2D_VTS_Distribution/cube_mesh.h5 | Bin 27042 -> 0 bytes .../2D_VTS_Distribution/externals.ini | 8 +++ .../NIG_DSMC/VSS_VHS_SelfDiffusion/DSMC.ini | 2 +- .../VSS_VHS_SelfDiffusion/cube_mesh.h5 | Bin 167858 -> 0 bytes .../VSS_VHS_SelfDiffusion/externals.ini | 8 +++ .../NIG_tracking_DSMC/ANSA_box/parameter.ini | 2 + .../Semicircle/externals.ini | 8 +++ .../NIG_tracking_DSMC/Semicircle/hopr.ini | 62 ++++++++---------- .../Semicircle/parameter.ini | 1 + .../Semicircle/semicircle_mesh.h5 | Bin 10184 -> 0 bytes .../curved/Cylinder_Ngeo2_mesh.h5 | Bin 29955 -> 0 bytes .../NIG_tracking_DSMC/curved/externals.ini | 8 +++ .../NIG_tracking_DSMC/curved/parameter.ini | 1 + .../curved_planar/parameter.ini | 1 + .../NIG_tracking_DSMC/exchange_procs/DSMC.ini | 0 .../exchange_procs/parameter.ini | 1 + .../NIG_tracking_DSMC/mortar/parameter.ini | 1 + .../mortar_exchange_procs/DSMC.ini | 0 .../mortar_exchange_procs/parameter.ini | 1 + .../mortar_hexpress/parameter.ini | 1 + .../NIG_tracking_DSMC/periodic/externals.ini | 8 +++ .../NIG_tracking_DSMC/periodic/hopr.ini | 2 - .../periodic/periodic_mesh.h5 | Bin 57954 -> 0 bytes .../periodic_2cells/externals.ini | 8 +++ .../periodic_2cells/hopr.ini | 39 +++++------ .../periodic_2cells/periodic211_mesh.h5 | Bin 9160 -> 0 bytes .../sphere_soft/Sphere_Ngeo4_001_001_mesh.h5 | Bin 31612 -> 0 bytes .../sphere_soft/externals.ini | 8 +++ .../sphere_soft/parameter.ini | 2 +- 29 files changed, 110 insertions(+), 62 deletions(-) delete mode 100644 regressioncheck/NIG_DSMC/2D_VTS_Distribution/cube_mesh.h5 create mode 100644 regressioncheck/NIG_DSMC/2D_VTS_Distribution/externals.ini delete mode 100644 regressioncheck/NIG_DSMC/VSS_VHS_SelfDiffusion/cube_mesh.h5 create mode 100644 regressioncheck/NIG_DSMC/VSS_VHS_SelfDiffusion/externals.ini create mode 100644 regressioncheck/NIG_tracking_DSMC/Semicircle/externals.ini delete mode 100644 regressioncheck/NIG_tracking_DSMC/Semicircle/semicircle_mesh.h5 delete mode 100644 regressioncheck/NIG_tracking_DSMC/curved/Cylinder_Ngeo2_mesh.h5 create mode 100644 regressioncheck/NIG_tracking_DSMC/curved/externals.ini delete mode 100644 regressioncheck/NIG_tracking_DSMC/exchange_procs/DSMC.ini delete mode 100644 regressioncheck/NIG_tracking_DSMC/mortar_exchange_procs/DSMC.ini create mode 100644 regressioncheck/NIG_tracking_DSMC/periodic/externals.ini delete mode 100644 regressioncheck/NIG_tracking_DSMC/periodic/periodic_mesh.h5 create mode 100644 regressioncheck/NIG_tracking_DSMC/periodic_2cells/externals.ini delete mode 100644 regressioncheck/NIG_tracking_DSMC/periodic_2cells/periodic211_mesh.h5 delete mode 100644 regressioncheck/NIG_tracking_DSMC/sphere_soft/Sphere_Ngeo4_001_001_mesh.h5 create mode 100644 regressioncheck/NIG_tracking_DSMC/sphere_soft/externals.ini diff --git a/regressioncheck/NIG_DSMC/2D_VTS_Distribution/cube_mesh.h5 b/regressioncheck/NIG_DSMC/2D_VTS_Distribution/cube_mesh.h5 deleted file mode 100644 index 62d82973416061e20cfb53d4335c6e82b0f66a21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27042 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 diff --git a/regressioncheck/NIG_DSMC/VSS_VHS_SelfDiffusion/externals.ini b/regressioncheck/NIG_DSMC/VSS_VHS_SelfDiffusion/externals.ini new file mode 100644 index 000000000..5d0519c91 --- /dev/null +++ b/regressioncheck/NIG_DSMC/VSS_VHS_SelfDiffusion/externals.ini @@ -0,0 +1,8 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre +cmd_suffix = + +nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix diff --git a/regressioncheck/NIG_tracking_DSMC/ANSA_box/parameter.ini b/regressioncheck/NIG_tracking_DSMC/ANSA_box/parameter.ini index 4744331ee..d27a050fd 100644 --- a/regressioncheck/NIG_tracking_DSMC/ANSA_box/parameter.ini +++ b/regressioncheck/NIG_tracking_DSMC/ANSA_box/parameter.ini @@ -46,6 +46,7 @@ Part-FIBGMdeltas=(/1,1,1/) ! =============================================================================== ! ! Species1 ! =============================================================================== ! +Part-Species1-SpeciesName = N2 Part-Species1-MassIC=4.652E-26 Part-Species1-ChargeIC=0 Part-Species1-MacroParticleFactor=1E1 @@ -71,5 +72,6 @@ Part-NumberOfRandomSeeds =2 Particles-RandomSeed1= 1 Particles-RandomSeed2= 2 ManualTimeStep=1.0E-2 +IterDisplayStep = 10 Particles-HaloEpsVelo=2000 TrackingMethod = refmapping,tracing,triatracking diff --git a/regressioncheck/NIG_tracking_DSMC/Semicircle/externals.ini b/regressioncheck/NIG_tracking_DSMC/Semicircle/externals.ini new file mode 100644 index 000000000..5d0519c91 --- /dev/null +++ b/regressioncheck/NIG_tracking_DSMC/Semicircle/externals.ini @@ -0,0 +1,8 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre +cmd_suffix = + +nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix diff --git a/regressioncheck/NIG_tracking_DSMC/Semicircle/hopr.ini b/regressioncheck/NIG_tracking_DSMC/Semicircle/hopr.ini index 47720b5d2..6bc49105a 100644 --- a/regressioncheck/NIG_tracking_DSMC/Semicircle/hopr.ini +++ b/regressioncheck/NIG_tracking_DSMC/Semicircle/hopr.ini @@ -1,47 +1,39 @@ -!=============================================================================== ! -! MAKEFILE PARAMETER (put a "#" in front, NO blanks!) -!=============================================================================== ! -! This is only a dummy parameter needed for the regression check -#MPI= - !=============================================================================== ! ! OUTPUT !=============================================================================== ! - ProjectName =semicircle ! name of the project (used for filenames) - Debugvisu =F ! Write debug mesh to tecplot file - Debugvisulevel=2 - Logging =F ! Write log files - +ProjectName =semicircle ! name of the project (used for filenames) +Debugvisu =F ! Write debug mesh to tecplot file +Debugvisulevel=2 +Logging =F ! Write log files !=============================================================================== ! ! MESH !=============================================================================== ! - FileName =semicircle - Mode =11 ! 1 Strukti Curved mesh - nZones =1 ! number of zones - nElems =(/2,1,1/) ! Anzahl der Elemente in jede Richtung (30x20x60) - BoundaryOrder= 4 ! Ngeo+1 - BCIndex =(/1,1,1,1,1,1/) ! Indices of UserDefinedBoundaries +FileName =semicircle +Mode =11 ! 1 Strukti Curved mesh +nZones =1 ! number of zones +nElems =(/2,1,1/) ! Anzahl der Elemente in jede Richtung (30x20x60) +BoundaryOrder= 4 ! Ngeo+1 +BCIndex =(/1,1,1,1,1,1/) ! Indices of UserDefinedBoundaries - Meshtype = 3 ! Mesh Types: 1 - Cube (origin + dimensions) - ! 2 - Bilinear (8 points CGNS notation) - ! 3 - Curved (see Whichmapping) - WhichMapping = 3 - ! 1...Trilinear (equal to MeshType 2) - ! 2... quadratic bubble function on the side - ! 3...half cylinder - ! 4...full cylinder +Meshtype = 3 ! Mesh Types: 1 - Cube (origin + dimensions) + ! 2 - Bilinear (8 points CGNS notation) + ! 3 - Curved (see Whichmapping) +WhichMapping = 3 + ! 1...Trilinear (equal to MeshType 2) + ! 2... quadratic bubble function on the side + ! 3...half cylinder + ! 4...full cylinder - R_0=0.1 - R_INF=0.5 - Dz=0.25 +R_0=0.1 +R_INF=0.5 +Dz=0.25 - useCurveds =T ! T if curved boundaries defined - SpaceQuandt =1. ! characteristic length of the mesh - ConformConnect=T - checkElemJacobians=T +useCurveds =T ! T if curved boundaries defined +SpaceQuandt =1. ! characteristic length of the mesh +ConformConnect=T +checkElemJacobians=T !=============================================================================== ! ! BOUNDARY CONDITIONS !=============================================================================== ! -! 22-Exakte Dirichlet RB, 3-Neumann-Null RB - BoundaryName=BC_Wall - BoundaryType=(/4,0,1,0/) +BoundaryName=BC_Wall +BoundaryType=(/4,0,1,0/) diff --git a/regressioncheck/NIG_tracking_DSMC/Semicircle/parameter.ini b/regressioncheck/NIG_tracking_DSMC/Semicircle/parameter.ini index c4e0691ad..b875322f0 100644 --- a/regressioncheck/NIG_tracking_DSMC/Semicircle/parameter.ini +++ b/regressioncheck/NIG_tracking_DSMC/Semicircle/parameter.ini @@ -42,6 +42,7 @@ TrackingMethod = refmapping,tracing ! =============================================================================== ! Part-maxParticleNumber=10 Part-nSpecies=1 +Part-Species1-SpeciesName = custom Part-Species1-ChargeIC=-1. Part-Species1-MassIC=9. Part-Species1-MacroParticleFactor=1E0 diff --git a/regressioncheck/NIG_tracking_DSMC/Semicircle/semicircle_mesh.h5 b/regressioncheck/NIG_tracking_DSMC/Semicircle/semicircle_mesh.h5 deleted file mode 100644 index edd8f4cd4bae94fe1028c775bb7d0ee25c48734d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10184 zcmeHNTWnQD6rJ0G6ewCAK0w3@h~=RoprT%!(gzg9Qh8QIXn_k<%WdTiG4UoQ2EVL{ zCTa|z9|n9R{76C~IUgn>iOBsR!9)=-ewdgjpMI#g_w2pqa^`R^l!QlwN!FP&d-mC9 z_L@C==AQP=riNLA28TJI^7o0J)7xbF^? zSE>E#auL+1-op8fjmDH2*hj68nbw=+u0jR5adHE@(7RFpKN)ChoY}&j?Nj#eQnEs@PEb2l zbH-MZK9`i~YbwcJ^O{T-x2wolAHFfw?pn-_zJ{Ky6+P3>*~vC`X4Y-EcssfrlXez# ztjhGlPNf@#N!n@d>Xn_Gw*$ThiC>Gd9j|Q4=%_BF6%rUbosynVVdmlMByd zjq6F3$xMS+O=Fblq@Z0+d66~4`R+^6#PYH-F;t=&VP+<)C8>sJ^zk#ZhYx$+ z7>qEccG(*Xn&&leEX%AJ(=)X6D_gX?<<`=At=ipoTWP(m+TDF`X+0&;H1#d5ceQ#4 z>wdXI2Y`LGu+Al4Wb5i_btdDdSiX>`y!>9}=@obvV!f7Rkh6?)1=x9*;0 zSTExS#nLM7Wu73!#cIm@tIE{_#@cZIA8qa^a zm`h-vpCL38>Im%fJVFcMSpxe!pRjVF*yj$yON5sR>~kk!9U)6#pLt{NCNvQ0 z>X$ER@9eC;PD>x6fJ;g$Gu4%^qbX8zq`0DTJ1vk)?-|uQV|g05d?%Hg3clT-?IT+A z^l;fImHA$4o+>VzrE+PCL-amP&p%&UaysN z@rC%v>3Dgc>5d4kV0MeWxpi(kYVE7n$r=W z?tMJu_;|%7mdBHR=bX~jzFde8Y?P?W_4naW^6o4RzWDs-_-ILmwF)K4!;V7dHFU?H zG3I1f^U=u_{^5Uan}4|1cXh2_r91uX&aM^hoh+Txz@obP=Js{;0i&*d;kIr%ys^Ey z_VwFVX0jXU(~WB{$#kq)t0w~PukYH#o$h_$yGCAL^qQPMc>>=7U?)8IpxyiUeofbN zRcuVjdF2!5l`j|K1B(**E^J?VzI#h~nH+OE$;*|^cd@}-2aWgM=W-y5yPA(i4*24Y zcPH+Tq<^m-;PcUkPJeGSTKetZ?hgS+{qrA)J+FWA1eYVeANu1?A3pT@iNnzkuK%Fd zcg+(ABkd3D_oSu&h}Yk`h0AeoU;M~NyLXOSy>tGtXtV1-WF>C%k?0?ac1nL>-x#O9 z<+!&m_D&`2e>%7Ix9$6XjMN{mFL@##X}_1p`90<3!e@d1g^Rd+8C3`TLmu+qs``Ka z!DZQ3;2-i+jxg|_OG7?B;D4#w`9=TYM{!M_Fni2wLF3;c)n!9V07 z|2ltmRKP#vnvZ<`fgIyU{6qe8EdHUDPw)>vP6zQ1J5u+ge-eAh8+Mx`ERlaK;(w#W zJJ!1m`H$N-M(5M(OMiiX=zo6x{DbGh{G)PXz(4FrZA`$M&--IE&#Qi<>%#7meE>YD z{sFuGn+3o3pV7&m6shDRsgrqI*2O{0gSS&7>%wXt@_8G1N9^U&*hi$D%-i7oW6krT z=l2D>UFQY+g6Jdf_XOj|TMBvmFU>oj$vk-8bzZETm-1dN7EalIONUJz_sQGdezCm$ zj`9oskypp+e1Lz*bsc&Bb$xmM!5{KA_}6{F=TGpDe%L|Wiyyf(8gL@UQxIQoujtMflhGHzv&6 z$0W~K@DDrSAMp=4<}cvi+Yj?L_}``R4?7|Mkca$3F7GSkjkr8-5&w{f{6j8w3h^J8 zC-RRC`IqPO*q43&(e8qLJPk|9n#7iEFd#Kl)qzi2wiq diff --git a/regressioncheck/NIG_tracking_DSMC/curved/Cylinder_Ngeo2_mesh.h5 b/regressioncheck/NIG_tracking_DSMC/curved/Cylinder_Ngeo2_mesh.h5 deleted file mode 100644 index fe35d43b3423893a79f2b62fee25cc4728a055b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29955 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

    h9I)k;9_)OX-zb z)uXUQ?T@ANfp13s#>y`JX=~U|@(*j+W^fr6(!B5uPi^osu5BB*HQRMMMzo}a<9{=P4-N8QB7kljZ9QMS6$G-bj?_Owl z`K$Z1w(4lOeeJJyf7ahdwB6VFmw&onc|XLd|CP2oAJaPh;C}@$IrWO`G9Iu0{|eyt zRh7$gN9gU&%cUdE|F{mS|7Ficokuo~`Rv879{H$r`o2wH-LA^29u;^k`zjmb?`E%c zH*6a+upt8*GO!^7|HBzrlh#rH_u5v O={%%Or7 diff --git a/regressioncheck/NIG_tracking_DSMC/curved/externals.ini b/regressioncheck/NIG_tracking_DSMC/curved/externals.ini new file mode 100644 index 000000000..5d0519c91 --- /dev/null +++ b/regressioncheck/NIG_tracking_DSMC/curved/externals.ini @@ -0,0 +1,8 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre +cmd_suffix = + +nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix diff --git a/regressioncheck/NIG_tracking_DSMC/curved/parameter.ini b/regressioncheck/NIG_tracking_DSMC/curved/parameter.ini index ec94670d7..4685867ed 100644 --- a/regressioncheck/NIG_tracking_DSMC/curved/parameter.ini +++ b/regressioncheck/NIG_tracking_DSMC/curved/parameter.ini @@ -70,6 +70,7 @@ Part-FactorFIBGM = (/5 , 5 , 3/) ! =============================================================================== ! ! Species1 ! =============================================================================== ! +Part-Species1-SpeciesName = N2 Part-Species1-ChargeIC = 0 Part-Species1-MassIC = 4.652E-26 Part-Species1-MacroParticleFactor = 1E1 diff --git a/regressioncheck/NIG_tracking_DSMC/curved_planar/parameter.ini b/regressioncheck/NIG_tracking_DSMC/curved_planar/parameter.ini index 150cad7c1..f29df04e6 100644 --- a/regressioncheck/NIG_tracking_DSMC/curved_planar/parameter.ini +++ b/regressioncheck/NIG_tracking_DSMC/curved_planar/parameter.ini @@ -75,6 +75,7 @@ Part-nPeriodicVectors = 1 ! =============================================================================== ! ! Species1 ! =============================================================================== ! +Part-Species1-SpeciesName = N2 Part-Species1-ChargeIC = 0 Part-Species1-MassIC = 4.652E-26 Part-Species1-MacroParticleFactor = 1E1 diff --git a/regressioncheck/NIG_tracking_DSMC/exchange_procs/DSMC.ini b/regressioncheck/NIG_tracking_DSMC/exchange_procs/DSMC.ini deleted file mode 100644 index e69de29bb..000000000 diff --git a/regressioncheck/NIG_tracking_DSMC/exchange_procs/parameter.ini b/regressioncheck/NIG_tracking_DSMC/exchange_procs/parameter.ini index a86139aa6..933889985 100644 --- a/regressioncheck/NIG_tracking_DSMC/exchange_procs/parameter.ini +++ b/regressioncheck/NIG_tracking_DSMC/exchange_procs/parameter.ini @@ -50,6 +50,7 @@ Part-FactorFIBGM=(/2.0 , 10.0 , 3.0/) ! =============================================================================== ! ! Species1 ! =============================================================================== ! +Part-Species1-SpeciesName = N2 Part-Species1-ChargeIC = 0 Part-Species1-MassIC = 4.652E-26 Part-Species1-MacroParticleFactor = 1E1 diff --git a/regressioncheck/NIG_tracking_DSMC/mortar/parameter.ini b/regressioncheck/NIG_tracking_DSMC/mortar/parameter.ini index f2c2782c9..a35aeeef0 100644 --- a/regressioncheck/NIG_tracking_DSMC/mortar/parameter.ini +++ b/regressioncheck/NIG_tracking_DSMC/mortar/parameter.ini @@ -44,6 +44,7 @@ Part-FIBGMdeltas=(/1,1,1/) ! =============================================================================== ! ! Species1 ! =============================================================================== ! +Part-Species1-SpeciesName = N2 Part-Species1-ChargeIC=0 Part-Species1-MassIC=4.652E-26 Part-Species1-MacroParticleFactor=1E1 diff --git a/regressioncheck/NIG_tracking_DSMC/mortar_exchange_procs/DSMC.ini b/regressioncheck/NIG_tracking_DSMC/mortar_exchange_procs/DSMC.ini deleted file mode 100644 index e69de29bb..000000000 diff --git a/regressioncheck/NIG_tracking_DSMC/mortar_exchange_procs/parameter.ini b/regressioncheck/NIG_tracking_DSMC/mortar_exchange_procs/parameter.ini index a86139aa6..933889985 100644 --- a/regressioncheck/NIG_tracking_DSMC/mortar_exchange_procs/parameter.ini +++ b/regressioncheck/NIG_tracking_DSMC/mortar_exchange_procs/parameter.ini @@ -50,6 +50,7 @@ Part-FactorFIBGM=(/2.0 , 10.0 , 3.0/) ! =============================================================================== ! ! Species1 ! =============================================================================== ! +Part-Species1-SpeciesName = N2 Part-Species1-ChargeIC = 0 Part-Species1-MassIC = 4.652E-26 Part-Species1-MacroParticleFactor = 1E1 diff --git a/regressioncheck/NIG_tracking_DSMC/mortar_hexpress/parameter.ini b/regressioncheck/NIG_tracking_DSMC/mortar_hexpress/parameter.ini index d4d2da7b2..6ed003477 100644 --- a/regressioncheck/NIG_tracking_DSMC/mortar_hexpress/parameter.ini +++ b/regressioncheck/NIG_tracking_DSMC/mortar_hexpress/parameter.ini @@ -54,6 +54,7 @@ Part-FIBGMdeltas=(/0.1,0.1,0.1/) ! =============================================================================== ! ! Species1 - N2 ! =============================================================================== ! +Part-Species1-SpeciesName = N2 Part-Species1-MacroParticleFactor=2E14 Part-Species1-MassIC=4.65E-26 ! N2 Molecular Mass diff --git a/regressioncheck/NIG_tracking_DSMC/periodic/externals.ini b/regressioncheck/NIG_tracking_DSMC/periodic/externals.ini new file mode 100644 index 000000000..5d0519c91 --- /dev/null +++ b/regressioncheck/NIG_tracking_DSMC/periodic/externals.ini @@ -0,0 +1,8 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre +cmd_suffix = + +nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix diff --git a/regressioncheck/NIG_tracking_DSMC/periodic/hopr.ini b/regressioncheck/NIG_tracking_DSMC/periodic/hopr.ini index 8b27e621c..bfddcb705 100644 --- a/regressioncheck/NIG_tracking_DSMC/periodic/hopr.ini +++ b/regressioncheck/NIG_tracking_DSMC/periodic/hopr.ini @@ -21,7 +21,6 @@ ConformConnect=T !=============================================================================== ! ! BOUNDARY CONDITIONS !=============================================================================== ! -nUserDefinedBoundaries=6 BoundaryName=BC_periodicx+ ! Periodic (+vv1) BoundaryType=(/1,0,0,1/) ! Periodic (+vv1) BoundaryName=BC_periodicx- ! Periodic (-vv1) @@ -35,7 +34,6 @@ BoundaryType=(/1,0,0,3/) ! Periodic (+vv3) BoundaryName=BC_periodicz- ! Periodic (-vv3) BoundaryType=(/1,0,0,-3/) ! Periodic (-vv3) -nVV=3 ! Anzahl der Verschiebungsvektoren für periodische RB (=Anzahl periodische Ränder) VV=(/2.0 , 0. , 0./) ! Verschiebungsvektor 1 (x-Richtung) VV=(/0. , 1.0 , 0./) ! Verschiebungsvektor 2 (y-Richtung) VV=(/0. , 0. , 1.0/) ! Verschiebungsvektor 3 (z-Richtung) diff --git a/regressioncheck/NIG_tracking_DSMC/periodic/periodic_mesh.h5 b/regressioncheck/NIG_tracking_DSMC/periodic/periodic_mesh.h5 deleted file mode 100644 index 799af48fda86af3cffe88d63530405cf2692c9f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57954 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 s#-Bme*a diff --git a/regressioncheck/NIG_tracking_DSMC/periodic_2cells/externals.ini b/regressioncheck/NIG_tracking_DSMC/periodic_2cells/externals.ini new file mode 100644 index 000000000..5d0519c91 --- /dev/null +++ b/regressioncheck/NIG_tracking_DSMC/periodic_2cells/externals.ini @@ -0,0 +1,8 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre +cmd_suffix = + +nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix diff --git a/regressioncheck/NIG_tracking_DSMC/periodic_2cells/hopr.ini b/regressioncheck/NIG_tracking_DSMC/periodic_2cells/hopr.ini index b161246c3..33f4d4930 100644 --- a/regressioncheck/NIG_tracking_DSMC/periodic_2cells/hopr.ini +++ b/regressioncheck/NIG_tracking_DSMC/periodic_2cells/hopr.ini @@ -21,31 +21,24 @@ ConformConnect=T !=============================================================================== ! ! BOUNDARY CONDITIONS !=============================================================================== ! -nUserDefinedBoundaries=6 - BoundaryName=BC_periodicx+ ! Periodic (+vv1) - BoundaryType=(/1,0,0,1/) ! Periodic (+vv1) - BoundaryName=BC_periodicx- ! Periodic (-vv1) - BoundaryType=(/1,0,0,-1/) ! Periodic (-vv1) - BoundaryName=BC_periodicy+ ! Periodic (+vv2) - BoundaryType=(/1,0,0,2/) ! Periodic (+vv2) - BoundaryName=BC_periodicy- ! Periodic (-vv2) - BoundaryType=(/1,0,0,-2/) ! Periodic (-vv2) - BoundaryName=BC_periodicz+ ! Periodic (+vv3) - BoundaryType=(/1,0,0,3/) ! Periodic (+vv3) - BoundaryName=BC_periodicz- ! Periodic (-vv3) - BoundaryType=(/1,0,0,-3/) ! Periodic (-vv3) -nVV=3 ! Anzahl der Verschiebungsvektoren für periodische RB (=Anzahl periodische Ränder) - VV=(/1.0,0.,0./) ! Verschiebungsvektor 1 (x-Richtung) - VV=(/0.,1.0,0./) ! Verschiebungsvektor 2 (y-Richtung) - VV=(/0.,0.,1.0/) ! Verschiebungsvektor 3 (z-Richtung) +BoundaryName=BC_periodicx+ ! Periodic (+vv1) +BoundaryType=(/1,0,0,1/) ! Periodic (+vv1) +BoundaryName=BC_periodicx- ! Periodic (-vv1) +BoundaryType=(/1,0,0,-1/) ! Periodic (-vv1) +BoundaryName=BC_periodicy+ ! Periodic (+vv2) +BoundaryType=(/1,0,0,2/) ! Periodic (+vv2) +BoundaryName=BC_periodicy- ! Periodic (-vv2) +BoundaryType=(/1,0,0,-2/) ! Periodic (-vv2) +BoundaryName=BC_periodicz+ ! Periodic (+vv3) +BoundaryType=(/1,0,0,3/) ! Periodic (+vv3) +BoundaryName=BC_periodicz- ! Periodic (-vv3) +BoundaryType=(/1,0,0,-3/) ! Periodic (-vv3) + +VV=(/1.0,0.,0./) ! Verschiebungsvektor 1 (x-Richtung) +VV=(/0.,1.0,0./) ! Verschiebungsvektor 2 (y-Richtung) +VV=(/0.,0.,1.0/) ! Verschiebungsvektor 3 (z-Richtung) !=============================================================================== ! ! BASIS !=============================================================================== ! NVisu = 4 - -!=============================================================================== ! -! SEARCH -!=============================================================================== ! -! nElemsNodeSearch=50 -! RefineSideSearch=50 diff --git a/regressioncheck/NIG_tracking_DSMC/periodic_2cells/periodic211_mesh.h5 b/regressioncheck/NIG_tracking_DSMC/periodic_2cells/periodic211_mesh.h5 deleted file mode 100644 index 5ccffb91d9ef0429ba935e4e681df372c175dc6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9160 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 FzX5317nT43 diff --git a/regressioncheck/NIG_tracking_DSMC/sphere_soft/externals.ini b/regressioncheck/NIG_tracking_DSMC/sphere_soft/externals.ini new file mode 100644 index 000000000..5d0519c91 --- /dev/null +++ b/regressioncheck/NIG_tracking_DSMC/sphere_soft/externals.ini @@ -0,0 +1,8 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre +cmd_suffix = + +nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix diff --git a/regressioncheck/NIG_tracking_DSMC/sphere_soft/parameter.ini b/regressioncheck/NIG_tracking_DSMC/sphere_soft/parameter.ini index 44c32400d..7090fa514 100644 --- a/regressioncheck/NIG_tracking_DSMC/sphere_soft/parameter.ini +++ b/regressioncheck/NIG_tracking_DSMC/sphere_soft/parameter.ini @@ -26,7 +26,6 @@ IterDisplayStep = 500 ! CALCULATION ! =============================================================================== ! CFLscale = 0.9 ! Scaling of theoretical CFL number -c_corr = 1 BezierClipTolerance = 1e-12 ! =============================================================================== ! ! IMPLICIT @@ -46,6 +45,7 @@ Part-FIBGMdeltas=(/.5,.5,.5/) Part-maxParticleNumber=20000 Part-nSpecies=1 +Part-Species1-SpeciesName = electron Part-Species1-ChargeIC=-1.6022E-19 Part-Species1-MassIC=9.1093826E-31 Part-Species1-MacroParticleFactor=1000 From f7a21f3e3950872d5bfa1a274dba4a646f86d0d9 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 12 Feb 2024 23:06:38 +0100 Subject: [PATCH 152/222] Replaced SpecDSMC InterID occurences with Species --- .../exchange_procs/cube_nonconforming_mesh.h5 | Bin 35303 -> 0 bytes .../exchange_procs/externals.ini | 8 +++ .../NIG_tracking_DSMC/exchange_procs/hopr.ini | 18 +----- .../NIG_tracking_DSMC/mortar/hopr.ini | 61 +++++++----------- .../radiation_solver/radiation_atoms.f90 | 4 +- .../radiation_solver/radiation_continuum.f90 | 6 +- .../radiation_solver/radiation_excitation.f90 | 8 +-- .../radiation_solver/radiation_init.f90 | 22 +++---- .../radiation_solver/radiation_molecules.f90 | 4 +- 9 files changed, 50 insertions(+), 81 deletions(-) delete mode 100644 regressioncheck/NIG_tracking_DSMC/exchange_procs/cube_nonconforming_mesh.h5 create mode 100644 regressioncheck/NIG_tracking_DSMC/exchange_procs/externals.ini diff --git a/regressioncheck/NIG_tracking_DSMC/exchange_procs/cube_nonconforming_mesh.h5 b/regressioncheck/NIG_tracking_DSMC/exchange_procs/cube_nonconforming_mesh.h5 deleted file mode 100644 index 223ba2510ad6ac8eaebf250346e378ad42664ee5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35303 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 diff --git a/regressioncheck/NIG_tracking_DSMC/exchange_procs/externals.ini b/regressioncheck/NIG_tracking_DSMC/exchange_procs/externals.ini new file mode 100644 index 000000000..5d0519c91 --- /dev/null +++ b/regressioncheck/NIG_tracking_DSMC/exchange_procs/externals.ini @@ -0,0 +1,8 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre +cmd_suffix = + +nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix diff --git a/regressioncheck/NIG_tracking_DSMC/exchange_procs/hopr.ini b/regressioncheck/NIG_tracking_DSMC/exchange_procs/hopr.ini index 020dfe698..c65449fa5 100644 --- a/regressioncheck/NIG_tracking_DSMC/exchange_procs/hopr.ini +++ b/regressioncheck/NIG_tracking_DSMC/exchange_procs/hopr.ini @@ -61,26 +61,10 @@ BCIndex =(/1 , 0 , 1 , 1 , 1 , 1/) ! Indices of Boundary Conditions ! =(/z- , y- , x+ , y+ , x- , z+/) ! Indices of Boundary Conditions elemtype =108 ! Elementform (104: Tetrahedra, 105: pyramid, 106:prism, 108: Hexahedral) - -!useCurveds =T -!checkElemJacobians=T doHalo = T !================================================================================================================================= ! ! BOUNDARY CONDITIONS !================================================================================================================================= ! BoundaryName=BC_Wall -BoundaryType=(/4,0,0,0/) ! (/ Type, curveIndex, State, alpha /) -!BoundaryName=BC_1 -!BoundaryType=(/2,1,0,0/) ! (/ Type, curveIndex, State, alpha /) -!BoundaryName=BC_2 -!BoundaryType=(/2,2,0,0/) ! (/ Type, curveIndex, State, alpha /) -!BoundaryName=BC_3 -!BoundaryType=(/2,3,0,0/) ! (/ Type, curveIndex, State, alpha /) -!BoundaryName=BC_4 -!BoundaryType=(/2,4,0,0/) ! (/ Type, curveIndex, State, alpha /) -!BoundaryName=BC_5 -!BoundaryType=(/2,5,0,0/) ! (/ Type, curveIndex, State, alpha /) -!BoundaryName=BC_6 -!BoundaryType=(/2,6,0,0/) ! (/ Type, curveIndex, State, alpha /) -! +BoundaryType=(/4,0,0,0/) ! (/ Type, curveIndex, State, alpha /) \ No newline at end of file diff --git a/regressioncheck/NIG_tracking_DSMC/mortar/hopr.ini b/regressioncheck/NIG_tracking_DSMC/mortar/hopr.ini index 3e2d511c6..0e0bd879e 100644 --- a/regressioncheck/NIG_tracking_DSMC/mortar/hopr.ini +++ b/regressioncheck/NIG_tracking_DSMC/mortar/hopr.ini @@ -1,52 +1,39 @@ !================================================================================================================================= ! +! NOTE: Mesh build with hopr version 1.2.0 differs from the checked in mesh -> reggie would fail +!================================================================================================================================= ! ! OUTPUT !================================================================================================================================= ! - ProjectName = cube_nonconforming ! Name of output files - Debugvisu = T ! Write files for Visualization of the mesh and boundary conditions (tecplot ascii) +ProjectName = cube_nonconforming ! Name of output files +Debugvisu = T ! Write files for Visualization of the mesh and boundary conditions !================================================================================================================================= ! ! MESH !================================================================================================================================= ! - Mode =1 ! Mode for Cartesian boxes - nZones =3 ! number of boxes +Mode =1 ! Mode for Cartesian boxes +nZones =3 ! number of boxes - Corner =(/-1.,-1.,-1. ,,0.,-1.,-1. ,,0.,1.,-1. ,, -1.,1.,-1.,, -1.,-1.,1. ,,0.,-1.,1. ,,0.,1.,1. ,, -1.1,1.,1. /) - ! Corner node positions: (/ x_1,y_1,z_1, x_2,y_2,z_2,..... , x_8,y_8,z_8/) - nElems =(/2,2,2/) ! number of elements in each direction - BCIndex =(/1,1,0,1,1,1/) ! Indices of Boundary Conditions for six Boundary Faces (z-,y-,x+,y+,x-,z+) - elemtype =108 ! Elementform (104: Tetrahedra, 105: pyramid, 106:prism, 108: Hexahedral) +Corner =(/-1.,-1.,-1. ,,0.,-1.,-1. ,,0.,1.,-1. ,, -1.,1.,-1.,, -1.,-1.,1. ,,0.,-1.,1. ,,0.,1.,1. ,, -1.1,1.,1. /) + ! Corner node positions: (/ x_1,y_1,z_1, x_2,y_2,z_2,..... , x_8,y_8,z_8/) +nElems =(/2,2,2/) ! number of elements in each direction +BCIndex =(/1,1,0,1,1,1/) ! Indices of Boundary Conditions for six Boundary Faces (z-,y-,x+,y+,x-,z+) +elemtype =108 ! Elementform (104: Tetrahedra, 105: pyramid, 106:prism, 108: Hexahedral) - Corner =(/0.,-1.,-1. ,,1.,-1.,-1. ,,1.,0.,-1. ,, 0.,0.,-1.,, 0.,-1.,1. ,,1.,-1.,1. ,,1.,0.,1. ,, 0.,0.,1. /) - ! Corner node positions: (/ x_1,y_1,z_1, x_2,y_2,z_2,..... , x_8,y_8,z_8/) - nElems =(/4,2,4/) ! number of elements in each direction - BCIndex =(/1,1,1,0,0,1/) ! Indices of Boundary Conditions for six Boundary Faces (z-,y-,x+,y+,x-,z+) - elemtype =108 ! Elementform (104: Tetrahedra, 105: pyramid, 106:prism, 108: Hexahedral) +Corner =(/0.,-1.,-1. ,,1.,-1.,-1. ,,1.,0.,-1. ,, 0.,0.,-1.,, 0.,-1.,1. ,,1.,-1.,1. ,,1.,0.,1. ,, 0.,0.,1. /) + ! Corner node positions: (/ x_1,y_1,z_1, x_2,y_2,z_2,..... , x_8,y_8,z_8/) +nElems =(/4,2,4/) ! number of elements in each direction +BCIndex =(/1,1,1,0,0,1/) ! Indices of Boundary Conditions for six Boundary Faces (z-,y-,x+,y+,x-,z+) +elemtype =108 ! Elementform (104: Tetrahedra, 105: pyramid, 106:prism, 108: Hexahedral) - Corner =(/0.,0.,-1. ,,1.,0.,-1. ,,1.,1.,-1. ,, 0.,1.,-1.,, 0.,0.,1. ,,1.,0.,1. ,,1.,1.,1. ,, 0.,1.,1. /) - ! Corner node positions: (/ x_1,y_1,z_1, x_2,y_2,z_2,..... , x_8,y_8,z_8/) - nElems =(/2,2,2/) ! number of elements in each direction - BCIndex =(/1,0,1,1,0,1/) ! Indices of Boundary Conditions for six Boundary Faces (z-,y-,x+,y+,x-,z+) - elemtype =108 ! Elementform (104: Tetrahedra, 105: pyramid, 106:prism, 108: Hexahedral) +Corner =(/0.,0.,-1. ,,1.,0.,-1. ,,1.,1.,-1. ,, 0.,1.,-1.,, 0.,0.,1. ,,1.,0.,1. ,,1.,1.,1. ,, 0.,1.,1. /) + ! Corner node positions: (/ x_1,y_1,z_1, x_2,y_2,z_2,..... , x_8,y_8,z_8/) +nElems =(/2,2,2/) ! number of elements in each direction +BCIndex =(/1,0,1,1,0,1/) ! Indices of Boundary Conditions for six Boundary Faces (z-,y-,x+,y+,x-,z+) +elemtype =108 ! Elementform (104: Tetrahedra, 105: pyramid, 106:prism, 108: Hexahedral) - !useCurveds =T - !checkElemJacobians=T - doHalo = T +doHalo = T !================================================================================================================================= ! ! BOUNDARY CONDITIONS !================================================================================================================================= ! - BoundaryName=BC_Wall - BoundaryType=(/4,0,0,0/) ! (/ Type, curveIndex, State, alpha /) - !BoundaryName=BC_1 - !BoundaryType=(/2,1,0,0/) ! (/ Type, curveIndex, State, alpha /) - !BoundaryName=BC_2 - !BoundaryType=(/2,2,0,0/) ! (/ Type, curveIndex, State, alpha /) - !BoundaryName=BC_3 - !BoundaryType=(/2,3,0,0/) ! (/ Type, curveIndex, State, alpha /) - !BoundaryName=BC_4 - !BoundaryType=(/2,4,0,0/) ! (/ Type, curveIndex, State, alpha /) - !BoundaryName=BC_5 - !BoundaryType=(/2,5,0,0/) ! (/ Type, curveIndex, State, alpha /) - !BoundaryName=BC_6 - !BoundaryType=(/2,6,0,0/) ! (/ Type, curveIndex, State, alpha /) -! +BoundaryName=BC_Wall +BoundaryType=(/4,0,0,0/) ! (/ Type, curveIndex, State, alpha /) \ No newline at end of file diff --git a/src/radiation/radiation_solver/radiation_atoms.f90 b/src/radiation/radiation_solver/radiation_atoms.f90 index 21ccd75e4..46c5e5732 100644 --- a/src/radiation/radiation_solver/radiation_atoms.f90 +++ b/src/radiation/radiation_solver/radiation_atoms.f90 @@ -48,9 +48,7 @@ SUBROUTINE radiation_atoms(iElem, em_atom) NumDensElectrons, Radiation_ElemEnergy_Species, Radiation_Absorption_SpeciesWave USE MOD_Particle_Vars, ONLY : nSpecies, Species USE MOD_Globals_Vars, ONLY : c, Pi - USE MOD_DSMC_Vars, ONLY : SpecDSMC !USE MOD_Radiation_Excitation, ONLY : low_IonizationPot - ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -112,7 +110,7 @@ SUBROUTINE radiation_atoms(iElem, em_atom) DO iSpec = 1, nSpecies IF(.NOT.RadiationInput(iSpec)%DoRadiation) CYCLE - IF((SpecDSMC(iSpec)%InterID .NE. 1) .AND. (SpecDSMC(iSpec)%InterID .NE. 10)) CYCLE + IF((Species(iSpec)%InterID .NE. 1) .AND. (Species(iSpec)%InterID .NE. 10)) CYCLE IF((RadiationInput(iSpec)%Telec.LT.10.0).OR.(RadiationInput(iSpec)%NumDens.LT.10.0).OR.(RadiationInput(iSpec)%Ttrans(4).LT.10.0)) CYCLE ALLOCATE(lamnu(SpeciesRadiation(iSpec)%nLines)) diff --git a/src/radiation/radiation_solver/radiation_continuum.f90 b/src/radiation/radiation_solver/radiation_continuum.f90 index ba3b012ed..ecc313067 100644 --- a/src/radiation/radiation_solver/radiation_continuum.f90 +++ b/src/radiation/radiation_solver/radiation_continuum.f90 @@ -174,8 +174,6 @@ SUBROUTINE Radiation_continuum_bf(iElem) USE MOD_Radiation_Vars, ONLY : RadiationInput, SpeciesRadiation, RadiationParameter, & Radiation_Emission_spec, Radiation_Absorption_spec, NumDensElectrons USE MOD_Globals_Vars, ONLY : c - USE MOD_DSMC_Vars, ONLY : SpecDSMC - ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -203,13 +201,13 @@ SUBROUTINE Radiation_continuum_bf(iElem) ! --- loop over all atoms DO iAtom = 1, nSpecies - IF((SpecDSMC(iAtom)%InterID .NE. 1) .AND. (SpecDSMC(iAtom)%InterID .NE. 10)) CYCLE + IF((Species(iAtom)%InterID .NE. 1) .AND. (Species(iAtom)%InterID .NE. 10)) CYCLE ! IF (RadiationInput(iAtom)%NuclCharge .GT. 1) CYCLE !approach only for neutral atoms iIon = iAtom ! --- determine ionized species DO jAtom = 1, nSpecies ! TODO nAtoms instead of nSpecies - IF((SpecDSMC(jAtom)%InterID .NE. 1) .AND. (SpecDSMC(jAtom)%InterID .NE. 10)) CYCLE + IF((Species(jAtom)%InterID .NE. 1) .AND. (Species(jAtom)%InterID .NE. 10)) CYCLE IF((Species(iAtom)%MassIC .EQ. Species(jAtom)%MassIC) & .AND. (RadiationInput(iAtom)%NuclCharge+1 .EQ. RadiationInput(jAtom)%NuclCharge) ) THEN iIon = jAtom diff --git a/src/radiation/radiation_solver/radiation_excitation.f90 b/src/radiation/radiation_solver/radiation_excitation.f90 index 119c6243b..ce8223d26 100644 --- a/src/radiation/radiation_solver/radiation_excitation.f90 +++ b/src/radiation/radiation_solver/radiation_excitation.f90 @@ -44,9 +44,7 @@ SUBROUTINE radiation_excitation() USE MOD_Globals USE MOD_Globals_Vars, ONLY : ElementaryCharge, BoltzmannConst USE MOD_Radiation_Vars, ONLY : RadiationInput, SpeciesRadiation, NumDensElectrons -USE MOD_PARTICLE_Vars, ONLY : nSpecies -USE MOD_DSMC_Vars, ONLY : SpecDSMC - +USE MOD_PARTICLE_Vars, ONLY : nSpecies, Species ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -73,7 +71,7 @@ SUBROUTINE radiation_excitation() IF(.NOT.RadiationInput(iSpec)%DoRadiation) CYCLE ! --- atoms (1) and atomic ions (10) - IF((SpecDSMC(iSpec)%InterID .EQ. 1) .OR. (SpecDSMC(iSpec)%InterID .EQ. 10)) THEN + IF((Species(iSpec)%InterID .EQ. 1) .OR. (Species(iSpec)%InterID .EQ. 10)) THEN IF (RadiationInput(iSpec)%Telec.LE.0.0) CYCLE IF (SpeciesRadiation(iSpec)%nLevels.EQ.0) CYCLE low_IonizationPot = 2.9E-8*SQRT(NumDensElectrons/1.E6/MAX(1.,RadiationInput(iSpec)%Telec))*ElementaryCharge @@ -102,7 +100,7 @@ SUBROUTINE radiation_excitation() END DO ! --- diatomic molecules (2) and diatomic molecular ions (20) - ELSEIF((SpecDSMC(iSpec)%InterID .EQ. 2) .OR. (SpecDSMC(iSpec)%InterID .EQ. 20)) THEN + ELSEIF((Species(iSpec)%InterID .EQ. 2) .OR. (Species(iSpec)%InterID .EQ. 20)) THEN !! --- Initialization SpeciesRadiation(iSpec)%PartFunc = 0.0 diff --git a/src/radiation/radiation_solver/radiation_init.f90 b/src/radiation/radiation_solver/radiation_init.f90 index 27877c876..510721dbd 100644 --- a/src/radiation/radiation_solver/radiation_init.f90 +++ b/src/radiation/radiation_solver/radiation_init.f90 @@ -99,9 +99,8 @@ SUBROUTINE InitRadiation() USE MOD_Mesh_Vars, ONLY : nGlobalElems USE MOD_Particle_Mesh_Vars, ONLY : nComputeNodeElems USE MOD_ReadInTools -USE MOD_PARTICLE_Vars, ONLY : nSpecies +USE MOD_PARTICLE_Vars, ONLY : nSpecies, Species USE MOD_Radiation_Vars -USE MOD_DSMC_Vars, ONLY : SpecDSMC USE MOD_Radiation_ReadIn, ONLY : Radiation_readin_atoms, Radiation_readin_molecules USE MOD_Mesh_Tools, ONLY : GetGlobalElemID #if USE_MPI @@ -132,12 +131,12 @@ SUBROUTINE InitRadiation() IF (RadiationSwitches%RadType.NE.2) THEN DO iSpec = 1, nSpecies - IF(SpecDSMC(iSpec)%InterID.EQ.4) CYCLE + IF(Species(iSpec)%InterID.EQ.4) CYCLE WRITE(UNIT=hilf,FMT='(I0)') iSpec RadiationInput(iSpec)%Ttrans(4) = GETREAL('Part-Species'//TRIM(hilf)//'-RadiationTtrans') RadiationInput(iSpec)%Telec = GETREAL('Part-Species'//TRIM(hilf)//'-RadiationTelec') RadiationInput(iSpec)%NumDens = GETREAL('Part-Species'//TRIM(hilf)//'-RadiationNumDens') - IF((SpecDSMC(iSpec)%InterID.EQ.2) .OR. (SpecDSMC(iSpec)%InterID.EQ.20)) THEN + IF((Species(iSpec)%InterID.EQ.2) .OR. (Species(iSpec)%InterID.EQ.20)) THEN RadiationInput(iSpec)%Tvib = GETREAL('Part-Species'//TRIM(hilf)//'-RadiationTvib') RadiationInput(iSpec)%Trot = GETREAL('Part-Species'//TRIM(hilf)//'-RadiationTrot') END IF @@ -146,7 +145,7 @@ SUBROUTINE InitRadiation() RadiationInput(iSpec)%DoRadiation = GETLOGICAL('Part-Species'//TRIM(hilf)//'-DoRadiation') - IF((SpecDSMC(iSpec)%InterID .EQ. 1) .OR. (SpecDSMC(iSpec)%InterID .EQ. 10)) THEN !Only for atoms (1) and atomic ions (10) + IF((Species(iSpec)%InterID .EQ. 1) .OR. (Species(iSpec)%InterID .EQ. 10)) THEN !Only for atoms (1) and atomic ions (10) CALL Radiation_readin_atoms(iSpec) RadiationInput(iSpec)%Radius = GETREAL('Part-Species'//TRIM(hilf)//'-RadiationRadius_A') RadiationInput(iSpec)%Radius = RadiationInput(iSpec)%Radius *1.0E-10 @@ -154,7 +153,7 @@ SUBROUTINE InitRadiation() RadiationInput(iSpec)%NuclCharge = GETINT('Part-Species'//TRIM(hilf)//'-NuclCharge') END IF - IF((SpecDSMC(iSpec)%InterID .EQ. 2) .OR. (SpecDSMC(iSpec)%InterID .EQ. 20)) THEN !Only for molecules (2) and molecular ions (20) + IF((Species(iSpec)%InterID .EQ. 2) .OR. (Species(iSpec)%InterID .EQ. 20)) THEN !Only for molecules (2) and molecular ions (20) CALL Radiation_readin_molecules(iSpec) END IF END DO @@ -312,8 +311,7 @@ SUBROUTINE MacroscopicRadiationInput() USE MOD_io_hdf5 USE MOD_HDF5_Input ,ONLY: OpenDataFile,CloseDataFile,DatasetExists,ReadArray,GetDataProps USE MOD_Mesh_Vars ,ONLY: offsetElem, nElems -USE MOD_Particle_Vars ,ONLY: nSpecies -USE MOD_DSMC_Vars ,ONLY: SpecDSMC +USE MOD_Particle_Vars ,ONLY: nSpecies, Species USE MOD_Radiation_Vars ,ONLY: RadiationSwitches, MacroRadInputParameters USE MOD_Mesh_Tools ,ONLY: GetCNElemID USE MOD_ReadInTools @@ -409,7 +407,7 @@ SUBROUTINE MacroscopicRadiationInput() IF(.NOT.RadiationSwitches%UseElectronicExcitation) THEN iSpecElectrons = 0 DO iSpec = 1, nSpecies - IF (SpecDSMC(iSpec)%InterID .EQ. 4) iSpecElectrons = iSpec + IF (Species(iSpec)%InterID .EQ. 4) iSpecElectrons = iSpec END DO IF (iSpecElectrons .EQ. 0) THEN PRINT*, "unknown species number for electrons while reading flow field data" @@ -419,10 +417,10 @@ SUBROUTINE MacroscopicRadiationInput() DO iElem = 1, nElems DO iSpec = 1, nSpecies CNElemID = GetCNElemID(iElem+offsetElem) - IF((SpecDSMC(iSpec)%InterID .EQ. 1) .OR. (SpecDSMC(iSpec)%InterID .EQ. 10) .OR. & - (SpecDSMC(iSpec)%InterID .EQ. 2) .OR. (SpecDSMC(iSpec)%InterID .EQ. 20)) THEN + IF((Species(iSpec)%InterID .EQ. 1) .OR. (Species(iSpec)%InterID .EQ. 10) .OR. & + (Species(iSpec)%InterID .EQ. 2) .OR. (Species(iSpec)%InterID .EQ. 20)) THEN MacroRadInputParameters(CNElemID,iSpec,4) = MAX(0.,ElemData_HDF5(IndexElectronTemp,iElem)) - ELSE IF(SpecDSMC(iSpec)%InterID .EQ. 4) THEN + ELSE IF(Species(iSpec)%InterID .EQ. 4) THEN CYCLE ELSE PRINT*, "excitation temperature cannot be matched, unknown InterID for species", iSpec diff --git a/src/radiation/radiation_solver/radiation_molecules.f90 b/src/radiation/radiation_solver/radiation_molecules.f90 index bfb80b6e3..df0a6aecb 100644 --- a/src/radiation/radiation_solver/radiation_molecules.f90 +++ b/src/radiation/radiation_solver/radiation_molecules.f90 @@ -47,8 +47,6 @@ SUBROUTINE radiation_molecules(iElem, em_mol) Radiation_Emission_spec, Radiation_Absorption_spec, NumDensElectrons, TElectrons, & Radiation_ElemEnergy_Species, Radiation_Absorption_SpeciesWave USE MOD_Particle_Vars, ONLY : nSpecies, Species - USE MOD_DSMC_Vars, ONLY : SpecDSMC - ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -134,7 +132,7 @@ SUBROUTINE radiation_molecules(iElem, em_mol) DO iSpec = 1, nSpecies IF(.NOT.RadiationInput(iSpec)%DoRadiation) CYCLE - IF((SpecDSMC(iSpec)%InterID .NE. 2) .AND. (SpecDSMC(iSpec)%InterID .NE. 20)) CYCLE + IF((Species(iSpec)%InterID .NE. 2) .AND. (Species(iSpec)%InterID .NE. 20)) CYCLE Radiation_Profile = 0.0 IF ((RadiationInput(iSpec)%Telec.LT.10.0).OR.(RadiationInput(iSpec)%Tvib.LT.10.0).OR.(RadiationInput(iSpec)%NumDens.LT.10.0).OR.(RadiationInput(iSpec)%Ttrans(4).LT.10.0))CYCLE From 26ac7c94beca007680753192e5f9ab978a1349e3 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 12 Feb 2024 23:40:58 +0100 Subject: [PATCH 153/222] Do not abort when the SpeciesName is not set and the SpeciesDatabase is not provided --- src/particles/bgk/bgk_colloperator.f90 | 6 +++--- src/particles/particle_init.f90 | 10 ++++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/particles/bgk/bgk_colloperator.f90 b/src/particles/bgk/bgk_colloperator.f90 index f87e95dff..9d7c5bf7b 100644 --- a/src/particles/bgk/bgk_colloperator.f90 +++ b/src/particles/bgk/bgk_colloperator.f90 @@ -52,7 +52,7 @@ SUBROUTINE BGK_CollisionOperator(iPartIndx_Node, nPart, NodeVolume, AveragingVal USE MOD_Globals ,ONLY: DOTPRODUCT, CROSS USE MOD_Particle_Vars ,ONLY: PartState, Species, PartSpecies, nSpecies, usevMPF, UseVarTimeStep USE MOD_Particle_Vars ,ONLY: UseRotRefFrame, RotRefFrameOmega, PartVeloRotRef, PDM -USE MOD_DSMC_Vars ,ONLY: SpecDSMC, DSMC, PartStateIntEn, PolyatomMolDSMC, RadialWeighting, CollInf +USE MOD_DSMC_Vars ,ONLY: DSMC, PartStateIntEn, PolyatomMolDSMC, RadialWeighting, CollInf USE MOD_TimeDisc_Vars ,ONLY: dt USE MOD_BGK_Vars ,ONLY: SpecBGK, BGKDoVibRelaxation, BGKMovingAverage USE MOD_BGK_Vars ,ONLY: BGK_MeanRelaxFactor, BGK_MeanRelaxFactorCounter, BGK_MaxRelaxFactor, BGK_MaxRotRelaxFactor @@ -646,7 +646,7 @@ SUBROUTINE CalcGasProperties(nSpec, dens, InnerDOF, totalWeightSpec, totalWeight !=================================================================================================================================== ! MODULES USE MOD_Particle_Vars ,ONLY: Species, nSpecies -USE MOD_DSMC_Vars ,ONLY: SpecDSMC, CollInf, DSMC +USE MOD_DSMC_Vars ,ONLY: CollInf, DSMC USE MOD_BGK_Vars ,ONLY: BGK_ExpectedPrandtlNumber, BGKMixtureModel, BGKCollModel USE MOD_Globals_Vars ,ONLY: BoltzmannConst, Pi ! IMPLICIT VARIABLE HANDLING @@ -1640,7 +1640,7 @@ SUBROUTINE CalcViscosityThermalCondColIntVHS(CellTemp, Xi, dens, Xi_RotSpec, Xi_ !> Sphere model). Solving an equation system depending on the number of species. !=================================================================================================================================== ! MODULES -USE MOD_DSMC_Vars, ONLY : CollInf, SpecDSMC +USE MOD_DSMC_Vars, ONLY : CollInf USE MOD_Globals_Vars, ONLY : BoltzmannConst USE MOD_Particle_Vars, ONLY : Species, nSpecies IMPLICIT NONE diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 23e9b77c9..5681e7d5b 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -1603,7 +1603,7 @@ END SUBROUTINE InitRandomSeed SUBROUTINE InitializeSpeciesParameter() !=================================================================================================================================== !> Initialize the species parameter: read-in the species name, and then either read-in from the database or the parameter file. -!> Possbility to overwrite specific parameters with custom values. +!> Possbility to overwrite specific species with custom values or use species not defined in the database. !=================================================================================================================================== ! MODULES USE MOD_Globals @@ -1636,13 +1636,19 @@ SUBROUTINE InitializeSpeciesParameter() DO iSpec = 1, nSpecies WRITE(UNIT=hilf,FMT='(I0)') iSpec Species(iSpec)%Name = TRIM(GETSTR('Part-Species'//TRIM(hilf)//'-SpeciesName')) - IF(Species(iSpec)%Name.EQ.'none') CALL abort(__STAMP__,'ERROR: Please define a species name for species:', iSpec) Species(iSpec)%DoOverwriteParameters = GETLOGICAL('Part-Species'//TRIM(hilf)//'-DoOverwriteParameters') END DO ! iSpec ! If no database is used, use the overwrite per default IF(SpeciesDatabase.EQ.'none') Species(:)%DoOverwriteParameters = .TRUE. +! Check whether SpeciesName is provided and if not, whether DoOverwriteParameters is activated (regular parameter read-in from file) +! Abort when SpeciesName is not provided and DoOverwriteParameters is not activated +DO iSpec = 1, nSpecies + IF(Species(iSpec)%Name.EQ.'none'.AND..NOT.Species(iSpec)%DoOverwriteParameters) & + CALL abort(__STAMP__,'ERROR: Please define a species name for species:', iSpec) +END DO ! iSpec + ! Read-in the values from the database IF(SpeciesDatabase.NE.'none') THEN ! Initialize FORTRAN interface. From afac7c595f9e127be62ae19e45fffcfe9e409385 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Tue, 13 Feb 2024 12:10:39 +0100 Subject: [PATCH 154/222] Removed obsolete CalcTransTemp parameter from regression test parameter files --- .../NIG_PIC_poisson_plasma_wave/poisson/parameter.ini | 1 - .../NIG_PIC_poisson_powerdensity/poisson/parameter.ini | 1 - regressioncheck/NIG_dielectric/HDG_cylinder/parameter.ini | 1 - .../HDG_point_charge_CVWM_surf_charge/parameter.ini | 1 - regressioncheck/NIG_dielectric/HDG_point_charge_SF/parameter.ini | 1 - regressioncheck/NIG_dielectric/HDG_slab/parameter.ini | 1 - .../NIG_dielectric/HDG_sphere_in_box_analytical_BC/parameter.ini | 1 - .../NIG_dielectric/HDG_sphere_in_box_potential_BC/parameter.ini | 1 - .../HDG_sphere_in_sphere_analytical_BC/parameter.ini | 1 - regressioncheck/NIG_sanitize/poisson/parameter.ini | 1 - regressioncheck/NIG_tracking_DSMC/ANSA_box/parameter.ini | 1 - .../WEK_PIC_maxwell/1D_periodic_CVWM_split2hex/parameter.ini | 1 - .../1D_periodic_CVWM_split2hex/pre-piclas/parameter.ini | 1 - .../WEK_PIC_maxwell/2D_periodic_CVWM_split2hex/parameter.ini | 1 - .../2D_periodic_CVWM_split2hex/pre-piclas/parameter.ini | 1 - regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM/parameter.ini | 1 - .../WEK_PIC_maxwell/3D_periodic_CVWM/pre-piclas/parameter.ini | 1 - .../WEK_PIC_maxwell/3D_periodic_CVWM_split2hex/parameter.ini | 1 - .../3D_periodic_CVWM_split2hex/pre-piclas/parameter.ini | 1 - .../WEK_PIC_maxwell/3D_periodic_shape_function/parameter.ini | 1 - regressioncheck/WEK_PIC_maxwell/plasma_wave/parameter.ini | 1 - regressioncheck/run_basic/poisson/parameter.ini | 1 - 22 files changed, 22 deletions(-) diff --git a/regressioncheck/NIG_PIC_poisson_plasma_wave/poisson/parameter.ini b/regressioncheck/NIG_PIC_poisson_plasma_wave/poisson/parameter.ini index c6b16b375..3b536f9d9 100644 --- a/regressioncheck/NIG_PIC_poisson_plasma_wave/poisson/parameter.ini +++ b/regressioncheck/NIG_PIC_poisson_plasma_wave/poisson/parameter.ini @@ -155,6 +155,5 @@ Part-Species2-Init1-VeloVecIC = (/0.,0.,0./) CalcCharge = F CalcPotentialEnergy = T CalcKineticEnergy = F -CalcTransTemp = F PIC-OutputSource = T PIC-VerifyCharge = F diff --git a/regressioncheck/NIG_PIC_poisson_powerdensity/poisson/parameter.ini b/regressioncheck/NIG_PIC_poisson_powerdensity/poisson/parameter.ini index 15a718ffb..8b65e2b6c 100644 --- a/regressioncheck/NIG_PIC_poisson_powerdensity/poisson/parameter.ini +++ b/regressioncheck/NIG_PIC_poisson_powerdensity/poisson/parameter.ini @@ -151,6 +151,5 @@ Part-Species2-Init1-VeloVecIC = (/0.,0.,0./) CalcCharge = F CalcPotentialEnergy = F CalcKineticEnergy = F -CalcTransTemp = F PIC-OutputSource = F PIC-VerifyCharge = F diff --git a/regressioncheck/NIG_dielectric/HDG_cylinder/parameter.ini b/regressioncheck/NIG_dielectric/HDG_cylinder/parameter.ini index 7d6e6a64a..2ba79770f 100644 --- a/regressioncheck/NIG_dielectric/HDG_cylinder/parameter.ini +++ b/regressioncheck/NIG_dielectric/HDG_cylinder/parameter.ini @@ -33,7 +33,6 @@ CalcNumSpec = T! T CalcInternalEnergy = T CalcTemp = T -CalcTransTemp = T ! noch nicht im trunk CalcPartBalance = T! T -> defekt diff --git a/regressioncheck/NIG_dielectric/HDG_point_charge_CVWM_surf_charge/parameter.ini b/regressioncheck/NIG_dielectric/HDG_point_charge_CVWM_surf_charge/parameter.ini index 288d61436..48a8e8b4b 100644 --- a/regressioncheck/NIG_dielectric/HDG_point_charge_CVWM_surf_charge/parameter.ini +++ b/regressioncheck/NIG_dielectric/HDG_point_charge_CVWM_surf_charge/parameter.ini @@ -36,7 +36,6 @@ CalcNumSpec = T! T CalcInternalEnergy = T CalcTemp = T -!CalcTransTemp = T ! noch nicht im trunk CalcPartBalance = T! T -> defekt diff --git a/regressioncheck/NIG_dielectric/HDG_point_charge_SF/parameter.ini b/regressioncheck/NIG_dielectric/HDG_point_charge_SF/parameter.ini index 27381e666..7ebe0a47b 100644 --- a/regressioncheck/NIG_dielectric/HDG_point_charge_SF/parameter.ini +++ b/regressioncheck/NIG_dielectric/HDG_point_charge_SF/parameter.ini @@ -36,7 +36,6 @@ CalcNumSpec = T! T CalcInternalEnergy = T CalcTemp = T -!CalcTransTemp = T ! noch nicht im trunk CalcPartBalance = T! T -> defekt diff --git a/regressioncheck/NIG_dielectric/HDG_slab/parameter.ini b/regressioncheck/NIG_dielectric/HDG_slab/parameter.ini index a2fb4ea30..f9cb3bdc3 100644 --- a/regressioncheck/NIG_dielectric/HDG_slab/parameter.ini +++ b/regressioncheck/NIG_dielectric/HDG_slab/parameter.ini @@ -32,7 +32,6 @@ CalcNumSpec = T! T CalcInternalEnergy = T CalcTemp = T -CalcTransTemp = T ! noch nicht im trunk CalcPartBalance = T! T -> defekt diff --git a/regressioncheck/NIG_dielectric/HDG_sphere_in_box_analytical_BC/parameter.ini b/regressioncheck/NIG_dielectric/HDG_sphere_in_box_analytical_BC/parameter.ini index 0cc1a8e77..03096b321 100644 --- a/regressioncheck/NIG_dielectric/HDG_sphere_in_box_analytical_BC/parameter.ini +++ b/regressioncheck/NIG_dielectric/HDG_sphere_in_box_analytical_BC/parameter.ini @@ -42,7 +42,6 @@ CalcNumSpec = T! T CalcInternalEnergy = T CalcTemp = T -CalcTransTemp = T ! noch nicht im trunk CalcPartBalance = T! T -> defekt diff --git a/regressioncheck/NIG_dielectric/HDG_sphere_in_box_potential_BC/parameter.ini b/regressioncheck/NIG_dielectric/HDG_sphere_in_box_potential_BC/parameter.ini index 3f2e1095e..59140dac6 100644 --- a/regressioncheck/NIG_dielectric/HDG_sphere_in_box_potential_BC/parameter.ini +++ b/regressioncheck/NIG_dielectric/HDG_sphere_in_box_potential_BC/parameter.ini @@ -41,7 +41,6 @@ CalcNumSpec = T! T CalcInternalEnergy = T CalcTemp = T -CalcTransTemp = T ! noch nicht im trunk CalcPartBalance = T! T -> defekt diff --git a/regressioncheck/NIG_dielectric/HDG_sphere_in_sphere_analytical_BC/parameter.ini b/regressioncheck/NIG_dielectric/HDG_sphere_in_sphere_analytical_BC/parameter.ini index e40b6f32d..367334a3a 100644 --- a/regressioncheck/NIG_dielectric/HDG_sphere_in_sphere_analytical_BC/parameter.ini +++ b/regressioncheck/NIG_dielectric/HDG_sphere_in_sphere_analytical_BC/parameter.ini @@ -31,7 +31,6 @@ CalcNumSpec = T! T CalcInternalEnergy = T CalcTemp = T -CalcTransTemp = T ! noch nicht im trunk CalcPartBalance = T! T -> defekt diff --git a/regressioncheck/NIG_sanitize/poisson/parameter.ini b/regressioncheck/NIG_sanitize/poisson/parameter.ini index 0772af05f..a7fb132b1 100644 --- a/regressioncheck/NIG_sanitize/poisson/parameter.ini +++ b/regressioncheck/NIG_sanitize/poisson/parameter.ini @@ -52,7 +52,6 @@ CalcPotentialEnergy = T CalcNumSpec = T CalcInternalEnergy = T CalcTemp = T -CalcTransTemp = T ! noch nicht im trunk CalcPartBalance = T CalcVelos = T VelocityDirections = (/1,1,1,1/) ! x,y,z,abs diff --git a/regressioncheck/NIG_tracking_DSMC/ANSA_box/parameter.ini b/regressioncheck/NIG_tracking_DSMC/ANSA_box/parameter.ini index d27a050fd..9694e3f27 100644 --- a/regressioncheck/NIG_tracking_DSMC/ANSA_box/parameter.ini +++ b/regressioncheck/NIG_tracking_DSMC/ANSA_box/parameter.ini @@ -19,7 +19,6 @@ BoundaryType=(/4,0/) ProjectName = tildbox NVisu = 1 ! Number of visualization points CalcKineticEnergy = TRUE -CalcTransTemp = TRUE Logging = F printRandomSeeds = F DoCalcErrorNorms = T diff --git a/regressioncheck/WEK_PIC_maxwell/1D_periodic_CVWM_split2hex/parameter.ini b/regressioncheck/WEK_PIC_maxwell/1D_periodic_CVWM_split2hex/parameter.ini index 6ecaf48a3..7aa67a121 100644 --- a/regressioncheck/WEK_PIC_maxwell/1D_periodic_CVWM_split2hex/parameter.ini +++ b/regressioncheck/WEK_PIC_maxwell/1D_periodic_CVWM_split2hex/parameter.ini @@ -152,7 +152,6 @@ Part-Species2-Init1-VeloVecIC = (/0.,0.,0./) CalcCharge = T CalcPotentialEnergy = T CalcKineticEnergy = F -CalcTransTemp = F PIC-OutputSource = T PIC-VerifyCharge = T ! currently not supported for quasi neutral conditions, i.e., when the resulting net charge is 0 diff --git a/regressioncheck/WEK_PIC_maxwell/1D_periodic_CVWM_split2hex/pre-piclas/parameter.ini b/regressioncheck/WEK_PIC_maxwell/1D_periodic_CVWM_split2hex/pre-piclas/parameter.ini index 2dfb0b818..904f53bdb 100644 --- a/regressioncheck/WEK_PIC_maxwell/1D_periodic_CVWM_split2hex/pre-piclas/parameter.ini +++ b/regressioncheck/WEK_PIC_maxwell/1D_periodic_CVWM_split2hex/pre-piclas/parameter.ini @@ -152,7 +152,6 @@ Part-Species2-Init1-VeloVecIC = (/0.,0.,0./) CalcCharge = T CalcPotentialEnergy = T CalcKineticEnergy = F -CalcTransTemp = F PIC-OutputSource = T PIC-VerifyCharge = T ! currently not supported for quasi neutral conditions, i.e., when the resulting net charge is 0 diff --git a/regressioncheck/WEK_PIC_maxwell/2D_periodic_CVWM_split2hex/parameter.ini b/regressioncheck/WEK_PIC_maxwell/2D_periodic_CVWM_split2hex/parameter.ini index fde13e6aa..e6d6fd761 100644 --- a/regressioncheck/WEK_PIC_maxwell/2D_periodic_CVWM_split2hex/parameter.ini +++ b/regressioncheck/WEK_PIC_maxwell/2D_periodic_CVWM_split2hex/parameter.ini @@ -152,7 +152,6 @@ Part-Species2-Init1-VeloVecIC = (/0.,0.,0./) CalcCharge = T CalcPotentialEnergy = T CalcKineticEnergy = F -CalcTransTemp = F PIC-OutputSource = T PIC-VerifyCharge = T ! currently not supported for quasi neutral conditions, i.e., when the resulting net charge is 0 diff --git a/regressioncheck/WEK_PIC_maxwell/2D_periodic_CVWM_split2hex/pre-piclas/parameter.ini b/regressioncheck/WEK_PIC_maxwell/2D_periodic_CVWM_split2hex/pre-piclas/parameter.ini index edb963012..6dc844358 100644 --- a/regressioncheck/WEK_PIC_maxwell/2D_periodic_CVWM_split2hex/pre-piclas/parameter.ini +++ b/regressioncheck/WEK_PIC_maxwell/2D_periodic_CVWM_split2hex/pre-piclas/parameter.ini @@ -152,7 +152,6 @@ Part-Species2-Init1-VeloVecIC = (/0.,0.,0./) CalcCharge = T CalcPotentialEnergy = T CalcKineticEnergy = F -CalcTransTemp = F PIC-OutputSource = T PIC-VerifyCharge = T ! currently not supported for quasi neutral conditions, i.e., when the resulting net charge is 0 diff --git a/regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM/parameter.ini b/regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM/parameter.ini index 16697380f..a20ddce6e 100644 --- a/regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM/parameter.ini +++ b/regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM/parameter.ini @@ -152,7 +152,6 @@ Part-Species2-Init1-VeloVecIC = (/0.,0.,0./) CalcCharge = T CalcPotentialEnergy = T CalcKineticEnergy = F -CalcTransTemp = F PIC-OutputSource = T PIC-VerifyCharge = T ! currently not supported for quasi neutral conditions, i.e., when the resulting net charge is 0 diff --git a/regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM/pre-piclas/parameter.ini b/regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM/pre-piclas/parameter.ini index 5ed85aa82..167e0af3d 100644 --- a/regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM/pre-piclas/parameter.ini +++ b/regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM/pre-piclas/parameter.ini @@ -144,7 +144,6 @@ Part-Species2-Init1-VeloVecIC = (/0.,0.,0./) CalcCharge = T CalcPotentialEnergy = T CalcKineticEnergy = F -CalcTransTemp = F PIC-OutputSource = T PIC-VerifyCharge = T ! currently not supported for quasi neutral conditions, i.e., when the resulting net charge is 0 diff --git a/regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM_split2hex/parameter.ini b/regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM_split2hex/parameter.ini index 8360b2721..a77e8f8cb 100644 --- a/regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM_split2hex/parameter.ini +++ b/regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM_split2hex/parameter.ini @@ -152,7 +152,6 @@ Part-Species2-Init1-VeloVecIC = (/0.,0.,0./) CalcCharge = T CalcPotentialEnergy = T CalcKineticEnergy = F -CalcTransTemp = F PIC-OutputSource = T PIC-VerifyCharge = T ! currently not supported for quasi neutral conditions, i.e., when the resulting net charge is 0 diff --git a/regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM_split2hex/pre-piclas/parameter.ini b/regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM_split2hex/pre-piclas/parameter.ini index d5b610a0c..905268404 100644 --- a/regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM_split2hex/pre-piclas/parameter.ini +++ b/regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM_split2hex/pre-piclas/parameter.ini @@ -152,7 +152,6 @@ Part-Species2-Init1-VeloVecIC = (/0.,0.,0./) CalcCharge = T CalcPotentialEnergy = T CalcKineticEnergy = F -CalcTransTemp = F PIC-OutputSource = T PIC-VerifyCharge = T ! currently not supported for quasi neutral conditions, i.e., when the resulting net charge is 0 diff --git a/regressioncheck/WEK_PIC_maxwell/3D_periodic_shape_function/parameter.ini b/regressioncheck/WEK_PIC_maxwell/3D_periodic_shape_function/parameter.ini index b7eba7f5f..987979497 100644 --- a/regressioncheck/WEK_PIC_maxwell/3D_periodic_shape_function/parameter.ini +++ b/regressioncheck/WEK_PIC_maxwell/3D_periodic_shape_function/parameter.ini @@ -148,7 +148,6 @@ Part-Species2-Init1-VeloVecIC = (/0.,0.,0./) CalcCharge = T CalcPotentialEnergy = T CalcKineticEnergy = T -CalcTransTemp = F PIC-OutputSource = T PIC-VerifyCharge = T ! currently not supported for quasi neutral conditions, i.e., when the resulting net charge is 0 diff --git a/regressioncheck/WEK_PIC_maxwell/plasma_wave/parameter.ini b/regressioncheck/WEK_PIC_maxwell/plasma_wave/parameter.ini index c7b6d7068..08c5ba651 100644 --- a/regressioncheck/WEK_PIC_maxwell/plasma_wave/parameter.ini +++ b/regressioncheck/WEK_PIC_maxwell/plasma_wave/parameter.ini @@ -146,7 +146,6 @@ Part-Species2-Init1-VeloVecIC = (/0.,0.,0./) CalcCharge = T CalcPotentialEnergy = T CalcKineticEnergy = T -CalcTransTemp = F PIC-OutputSource = T PIC-VerifyCharge = F ! currently not supported for quasi neutral ocnditions, i.e., when the resulting net charge is 0 diff --git a/regressioncheck/run_basic/poisson/parameter.ini b/regressioncheck/run_basic/poisson/parameter.ini index ff9a0f5f2..8a1fa606c 100644 --- a/regressioncheck/run_basic/poisson/parameter.ini +++ b/regressioncheck/run_basic/poisson/parameter.ini @@ -52,7 +52,6 @@ CalcPotentialEnergy = T CalcNumSpec = T CalcInternalEnergy = T CalcTemp = T -CalcTransTemp = T ! noch nicht im trunk CalcPartBalance = T CalcVelos = T VelocityDirections = (/1,1,1,1/) ! x,y,z,abs From 0ded36a9eeff623542cffbab0cf1cfe163de9cc7 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Tue, 13 Feb 2024 12:49:11 +0100 Subject: [PATCH 155/222] Fix in ReadAttribute: Close dataset only if it has been opened --- src/io_hdf5/hdf5_input.f90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/io_hdf5/hdf5_input.f90 b/src/io_hdf5/hdf5_input.f90 index a06b4ac22..71d9581f7 100644 --- a/src/io_hdf5/hdf5_input.f90 +++ b/src/io_hdf5/hdf5_input.f90 @@ -630,7 +630,7 @@ SUBROUTINE ReadAttribute(File_ID_in,AttribName,nVal,DatasetName,RealScalar,IntSc INTEGER ,INTENT(OUT),OPTIONAL,TARGET :: IntScalar !< Scalar integer attribute CHARACTER(LEN=255),INTENT(OUT),OPTIONAL,TARGET :: StrScalar !< Scalar string attribute CHARACTER(LEN=255),INTENT(OUT),OPTIONAL,TARGET :: StrArray(nVal) !< Array for character array attributes -LOGICAL ,INTENT(OUT),OPTIONAL :: LogicalScalar !< Scalar logical attribute +LOGICAL ,INTENT(OUT),OPTIONAL :: LogicalScalar !< Scalar logical attribute !---------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER(HID_T) :: Attr_ID,Type_ID,Loc_ID,memtype @@ -714,8 +714,8 @@ SUBROUTINE ReadAttribute(File_ID_in,AttribName,nVal,DatasetName,RealScalar,IntSc ! Close the attribute. CALL H5ACLOSE_F(Attr_ID, iError) -! Close the dataset and property list. -CALL H5DCLOSE_F(Loc_ID, iError) +! Close the dataset and property list (in case it was opened). +IF(Loc_ID.NE.File_ID_in) CALL H5DCLOSE_F(Loc_ID, iError) LOGWRITE(*,*)'...DONE!' END SUBROUTINE ReadAttribute From f27cc1bde6cc9cac404f61201b4ef9510b6aa615 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Tue, 13 Feb 2024 13:16:25 +0100 Subject: [PATCH 156/222] Fix merge conflict: test case ChannelFlow_AdaptiveBoundary_ConstPressure does not exist anymore --- .../DSMC.ini | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/DSMC.ini diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/DSMC.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/DSMC.ini deleted file mode 100644 index e93c80486..000000000 --- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/DSMC.ini +++ /dev/null @@ -1,12 +0,0 @@ -! =============================================================================== ! -! Species1, O2 -! =============================================================================== ! -Part-Species1-SpeciesName = O2 -Part-Species1-InteractionID = 2 -Part-Species1-Tref = 273 -Part-Species1-dref = 4.07E-10 -Part-Species1-omega=0.27 -Part-Species1-SymmetryFactor=2 -Part-Species1-CharaTempRot=2.1 -Part-Species1-CharaTempVib=2272.18 -Part-Species1-Ediss_eV=5.17 From 5eb344d518c0ed2bb474924967d9a9d137b28aa9 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Tue, 13 Feb 2024 16:39:06 +0100 Subject: [PATCH 157/222] Increased piclas version number to 3.2.0 --- .github/workflows/cmake-ninja.yml | 2 +- src/globals/globals_vars.f90 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cmake-ninja.yml b/.github/workflows/cmake-ninja.yml index e728992ad..0dd049ed4 100644 --- a/.github/workflows/cmake-ninja.yml +++ b/.github/workflows/cmake-ninja.yml @@ -318,7 +318,7 @@ jobs: - name: Upload artifacts uses: actions/upload-artifact@v3 with: - name: piclas-binaries-v3.1.0 + name: piclas-binaries-v3.2.0 path: artifacts - name: Upload release asset diff --git a/src/globals/globals_vars.f90 b/src/globals/globals_vars.f90 index 32615b10e..de526fc26 100644 --- a/src/globals/globals_vars.f90 +++ b/src/globals/globals_vars.f90 @@ -23,7 +23,7 @@ MODULE MOD_Globals_Vars !----------------------------------------------------------------------------------------------------------------------------------- CHARACTER(LEN=6),PARAMETER :: ProgramName = 'PICLas' !> name of this program INTEGER,PARAMETER :: MajorVersion = 3 !> FileVersion number saved in each hdf5 file with hdf5 header -INTEGER,PARAMETER :: MinorVersion = 1 !> FileVersion number saved in each hdf5 file with hdf5 header +INTEGER,PARAMETER :: MinorVersion = 2 !> FileVersion number saved in each hdf5 file with hdf5 header INTEGER,PARAMETER :: PatchVersion = 0 !> FileVersion number saved in each hdf5 file with hdf5 header REAL,PARAMETER :: FileVersionReal = REAL(MajorVersion,8)+REAL(MinorVersion,8)/10.+REAL(PatchVersion,8)/100. !> OLD number saved in each hdf5 file with hdf5 header From 10278a78099985a90239bc2c26bc01cb66d00e10 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Tue, 13 Feb 2024 16:42:09 +0100 Subject: [PATCH 158/222] Heat of formation for CH4 in Species Database at wrong reference temperature --- SpeciesDatabase.h5 | Bin 2267624 -> 2271720 bytes .../CHEM_EQUI_Titan_Chemistry/parameter.ini | 8 +++----- .../command_line.ini | 2 +- .../parameter.ini | 10 ++++------ 4 files changed, 8 insertions(+), 12 deletions(-) mode change 100755 => 100644 regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry/parameter.ini diff --git a/SpeciesDatabase.h5 b/SpeciesDatabase.h5 index 74b4d72ccca983552052e9f41cbee86dba4760e1..a221d65085b640c4b7bff3da81c95f32dc27c3e1 100644 GIT binary patch delta 274 zcmaE{xr_0|K}5DNma5D*Ik zu?P^00-&{L|d>i*gf7GV}AS6dXg6Llg}442=yS3ZUeH O?Sm zv%n%tEVIHYYpk=uCR=Q?!!CO?*yn&lj%Y@XF@6>zb0shB?6*bV$M!gi?MZg?2Qm~r Ad;kCd diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry/parameter.ini b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry/parameter.ini old mode 100755 new mode 100644 index 9c5dfa8ab..823e59885 --- a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry/parameter.ini +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry/parameter.ini @@ -173,17 +173,15 @@ Part-Species18-ChargeIC = 1.60217653E-19 ! DSMC ! =============================================================================== ! UseDSMC=true -Particles-DSMCReservoirSim=true -Particles-DSMCReservoirSimRate=false -Particles-DSMCReservoirStatistic=false -Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem) +Particles-DSMCReservoirSim = T +Particles-DSMC-CollisMode=3 Part-NumberOfRandomSeeds=2 Particles-RandomSeed1=1 Particles-RandomSeed2=2 ManualTimeStep=1e-9 Particles-HaloEpsVelo=5000 Particles-DSMC-CalcQualityFactors=F -Particles-DSMC-BackwardReacRate = true +Particles-DSMC-BackwardReacRate = T Particles-DSMC-PartitionMaxTemp = 120000. Particles-DSMC-PartitionInterval= 20. Particles-DSMC-ElectronicModel = 1,4 diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/command_line.ini b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/command_line.ini index 347b9fc96..b2cc0fb56 100644 --- a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/command_line.ini +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/command_line.ini @@ -1,2 +1,2 @@ -MPI=1 +MPI=6 database = ../../../SpeciesDatabase.h5 diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini index 93ba732c4..a8ed424b2 100644 --- a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini @@ -88,20 +88,18 @@ Part-Species5-Init1-PartDensity=5E+021 ! DSMC ! =============================================================================== ! UseDSMC=true -Particles-DSMCReservoirSim=true -Particles-DSMCReservoirSimRate=false -Particles-DSMCReservoirStatistic=false -Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem) +Particles-DSMCReservoirSim = T +Particles-DSMC-CollisMode=3 Part-NumberOfRandomSeeds=2 Particles-RandomSeed1=1 Particles-RandomSeed2=2 ManualTimeStep=1e-9 Particles-HaloEpsVelo=5000 Particles-DSMC-CalcQualityFactors=F -Particles-DSMC-BackwardReacRate = true +Particles-DSMC-BackwardReacRate = T Particles-DSMC-PartitionMaxTemp = 120000. Particles-DSMC-PartitionInterval= 20. -Particles-DSMC-ElectronicModel = 1!,4 +Particles-DSMC-ElectronicModel = 1 EpsMergeElectronicState = 1E-2 Particles-DSMC-RotRelaxProb = 1 Particles-DSMC-VibRelaxProb = 1 From ceac36c22ad86604108585d7683d20a5369f5c2f Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Tue, 13 Feb 2024 17:16:15 +0100 Subject: [PATCH 159/222] Use NINT to compare with integer and let hopr build the meshes for the DSMC_QualityFactors reggies --- .../CHE_DSMC/DSMC_QualityFactors/cube_mesh.h5 | Bin 8280 -> 0 bytes .../CHE_DSMC/DSMC_QualityFactors/externals.ini | 6 ++++++ .../DSMC_QualityFactors_MPI/cube_8_cells_mesh.h5 | Bin 9703 -> 0 bytes .../DSMC_QualityFactors_MPI/externals.ini | 6 ++++++ src/particles/dsmc/dsmc_init.f90 | 2 +- 5 files changed, 13 insertions(+), 1 deletion(-) delete mode 100644 regressioncheck/CHE_DSMC/DSMC_QualityFactors/cube_mesh.h5 create mode 100644 regressioncheck/CHE_DSMC/DSMC_QualityFactors/externals.ini delete mode 100644 regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/cube_8_cells_mesh.h5 create mode 100644 regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/externals.ini diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/cube_mesh.h5 b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/cube_mesh.h5 deleted file mode 100644 index 7bda1a006e1d3ce501996ef564bb7f5d60f282eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8280 zcmeHLy;BoW5Z_Dqh!C8h&WKc3rnI220!)a8CNhE=Xe7!>!h|I9;YeqRg){yI4y7d) z_EZ**I&}8-&d@nygKuy5NA7ZoAq)s(?#<-(?e4q1x4+%D@8!MDPTd(A7#$#Pu^9DG z!tLU5s4Z`c1U&SM+Od>wD}5i4jzxpSx)GHp)V>`RK~l%f-Opr*A_V)O`Wof?q!&|x zJt`g8#ki3Ep9o|#w`bV1U3Cw6HW@!#f03{IvO;K4KNqL0+p{P}*GzUlbk^2O)d~&U z6Gp;qlEwyU>`?REvSfu|oq)PS>0lym#&ff%m*U1=ZrQ0apD@OHxI?!4Y-I=b>UR2F zJC#h?SzSK`JF}%Frvp2>T+JLNW!|Lo$yGbDBUqBL1H6aCuLqUV^G!!*b$tKo^J;2O zXLo#in4d*`Zk>|{$1y2>MMuW0u1 zJKsOND-hM(dHn0gZ0_C^=dz$obaU|UGjJET8FJ8OJ?CNOGCIxaOBE+>G}l9l_+@(` zxmdJaULl__{YJj?yc$Ue0zgo>i;`FE@IXAZ?CNSD0v|Q&hu21{I^BA`y;WTH1Q2}& zaVh%rXUzohka~c90(gLSo)0s_;)CsTCFu7npZ>gIsu$R>-&)Gua#8V>}J7w z3*0zIxPf9_wZj|ZK%-i}ubOl2p|RIGziNu}Z!Bf^`$3%HnXA4q4?bp0SDv|N7M>Ju z%wC>1)^xSHw&bEtbhli6QYf=@dWuDo$s3mL(})M81gUenQ6Lf AxBvhE diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors/externals.ini b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/externals.ini new file mode 100644 index 000000000..0bdc5a5c4 --- /dev/null +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors/externals.ini @@ -0,0 +1,6 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre +cmd_suffix = \ No newline at end of file diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/cube_8_cells_mesh.h5 b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/cube_8_cells_mesh.h5 deleted file mode 100644 index c992c9cc2f26675bcc144a7b795cf91600ac2deb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9703 zcmeHMO>A355MJA9Yubb+EkC9FnbL}gLse)Gxgfi70*+KA6)m*4Hc-5~nLK+QGy6oR$91+c_|MLl>-ES1=jW=r z8#EaH|f^RHLu7i!Ih#ShE6-Xpb4#_bI556Tx#zIgJKv=5q!+Bqoon4PJ{ zqA|m=;0G+D;CLzazJAU&i;a@wiFeqWzFutt*r^?kuWe_awbPiaS8pur+z$6?!p?=- zwQ3i35F?a?o#|#*c1qTYAMYVIuh$y2cWzd7R6C#F@y_;ibUU~AxZ2B@z4p9x4_QBE z)V5@@?#(c+dK}8ybA@_N&Q~zQ_q|7$z_VFr2x}H4m*IiGX>~phsb%!}?CyHim=>FQ zDlbgWOk`v&SJdm0?!&Y}oY#i2p)`iWFKctN(jz*c&5-qVANEIdj0A+0qW_`)&ClHO(z+ z)nr`el-3)OjE6fPcz>027?jE(PME%2f=){eGj?&wJ~0n z+bntBGH#q~QikVzJl-Kcr{_2FiY@WiVSVXU0#>^u;VTv}tUTht4k?C{i#Rao z_!Q(r96C}cV59OO4h*?8uu~om?0Ln;Jlw}hf@42%{8F`bU~)`G1?|AN_Rv7=5BZ@1 z+(!UP0S`G4r2fQU>%R#PF<|hUp*`TJW1J|^(T|0^2MCBHh96-tM&Iwx;un5= zzlc2x`y$JkI=9nGM!TQxvhP7{hah%G`XUa#-;sOp@V;5t_jl=wy6^X{V3?a9 z=fmtMl6`*?9@d=i7wZmvUy=_B=JBw6!1L$(gY-qLe7}#1&O#qpi!8(*BOsC(5;gep z{W6IGoxE?wFW#~5_ea4HKYzY@P@!wo_era{2kl|*Sd+eA>=XF#=gV~>aAdClMGNg= z3>XXfnA0=Lfglg@MBVp$3R~%|O7bX)tBl4U;&J|Z%J|!OoWB;vgZ(2s&R>u4_&5@HINm63 z@qW>JQGVJu+jtlcj*pV|13j`&oYL`=W2o!*=SF z;>eAVGZ9A)gnN>C5AqstkjsFBoBGb*l%n4_y`-%7vA}b*s^s z@BQztDcnBXk3c^H{Rs3U&}{_n=+}zwCGUmL)n!fPg32#czO8am<(De!B5?)0tNK?e F{{(+ql#BoX diff --git a/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/externals.ini b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/externals.ini new file mode 100644 index 000000000..0bdc5a5c4 --- /dev/null +++ b/regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/externals.ini @@ -0,0 +1,6 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre +cmd_suffix = \ No newline at end of file diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index e2f9c1a49..d7089c406 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -869,7 +869,7 @@ SUBROUTINE InitDSMC() DSMC%UseOctree = GETLOGICAL('Particles-DSMC-UseOctree') IF(DSMC%ReservoirSimu.AND.DSMC%UseOctree) CALL abort(__STAMP__,'Particles-DSMC-UseOctree = T not allowed for RESERVOIR simulations!') DSMC%UseNearestNeighbour = GETLOGICAL('Particles-DSMC-UseNearestNeighbour') - IF(DSMC%ReservoirSimu.AND.DSMC%UseNearestNeighbour.AND.(DoRestart.OR.((TEnd/ManualTimeStep).GT.1))) THEN + IF(DSMC%ReservoirSimu.AND.DSMC%UseNearestNeighbour.AND.(DoRestart.OR.(NINT(TEnd/ManualTimeStep).GT.1))) THEN CALL abort(__STAMP__,'Particles-DSMC-UseNearestNeighbour = T not allowed for RESERVOIR simulations, if you simulate more than one time step!') END IF IF(DSMC%UseOctree) THEN From bb5b144f5d9cdef8c40f2a60e850159f55514f82 Mon Sep 17 00:00:00 2001 From: kbpamirz Date: Wed, 14 Feb 2024 11:49:08 +0100 Subject: [PATCH 160/222] new specular reflection treatment in case of rotational frame of reference --- .../surfacemodel/surfacemodel_main.f90 | 26 ++++++++++++++----- .../tracking/particle_triatracking.f90 | 5 ++-- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index 005914729..0bd7b2828 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -332,7 +332,7 @@ SUBROUTINE PerfectReflection(PartID,SideID,n_Loc,opt_Symmetry) USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo USE MOD_Particle_Vars ,ONLY: UseVarTimeStep, PartTimeStep, VarTimeStep USE MOD_TimeDisc_Vars ,ONLY: dt,RKdtFrac -USE MOD_Particle_Vars ,ONLY: PDM, PartVeloRotRef +USE MOD_Particle_Vars ,ONLY: PDM, PartVeloRotRef, RotRefFrameOmega USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -423,26 +423,38 @@ SUBROUTINE PerfectReflection(PartID,SideID,n_Loc,opt_Symmetry) LastPartPos(1:3,PartID) = POI_vec(1:3) ! Determine the correct velocity in case of a rotational frame of reference -NewVeloPush(1:3) = PartState(4:6,PartID) +!NewVeloPush(1:3) = PartState(4:6,PartID) ! In case of RotRefFrame, the velocity in the rotational reference frame is mirrored as well -IF(PDM%InRotRefFrame(PartID)) THEN +!IF(PDM%InRotRefFrame(PartID)) THEN ! Mirror the velocity in the rotational frame - PartVeloRotRef(1:3,PartID) = PartVeloRotRef(1:3,PartID) - 2.*DOT_PRODUCT(PartVeloRotRef(1:3,PartID),n_loc)*n_loc +! PartVeloRotRef(1:3,PartID) = PartVeloRotRef(1:3,PartID) - 2.*DOT_PRODUCT(PartVeloRotRef(1:3,PartID),n_loc)*n_loc ! ALTERNATIVE: Transform the inertial velocity (which was mirrored) ! PartVeloRotRef(1:3,PartID) = PartState(4:6,PartID) - CROSS(RotRefFrameOmega(1:3),LastPartPos(1:3,PartID)) -END IF +!END IF TrackInfo%PartTrajectory(1:3) = TrackInfo%PartTrajectory(1:3)-2.*DOT_PRODUCT(TrackInfo%PartTrajectory(1:3),n_loc)*n_loc ! Check if rotational frame of reference is used, otherwise mirror the LastPartPos IF(PDM%InRotRefFrame(PartID)) THEN POI_fak = 1.- (TrackInfo%lengthPartTrajectory-TrackInfo%alpha) / VECNORM(OldVelo*dtVar) + + +! ! 6a.) Determine the correct velocity for the subsequent push in case of a rotational frame of reference + NewVeloPush(1:3) = PartState(4:6,PartID) + IF(PDM%InRotRefFrame(PartID)) THEN + NewVeloPush(1:3) = NewVeloPush(1:3) - CROSS(RotRefFrameOmega(1:3),LastPartPos(1:3,PartID)) + NewVeloPush(1:3) = NewVeloPush(1:3) + CalcPartRHSRotRefFrame(LastPartPos(1:3,PartID),NewVeloPush(1:3)) * (1.0 - POI_fak) * dtVar + ! Store the new rotational reference frame velocity + PartVeloRotRef(1:3,PartID) = NewVeloPush(1:3) + END IF + ! Add the acceleration due to new velocity vector at the POI - PartVeloRotRef(1:3,PartID) = PartVeloRotRef(1:3,PartID) + CalcPartRHSRotRefFrame(LastPartPos(1:3,PartID),PartVeloRotRef(1:3,PartID)) * dtVar * (1.0 - POI_fak) + !!PartVeloRotRef(1:3,PartID) = PartVeloRotRef(1:3,PartID) + CalcPartRHSRotRefFrame(LastPartPos(1:3,PartID),PartVeloRotRef(1:3,PartID)) * dtVar * (1.0 - POI_fak) ! IF(DOT_PRODUCT(PartVeloRotRef(1:3,PartID),n_loc).GT.0.) THEN ! PartVeloRotRef(1:3,PartID) = PartVeloRotRef(1:3,PartID) - 2.*DOT_PRODUCT(PartVeloRotRef(1:3,PartID),n_loc)*n_loc ! END IF - PartState(1:3,PartID) = LastPartPos(1:3,PartID) + (1.0 - POI_fak) * dtVar * PartVeloRotRef(1:3,PartID) + !!PartState(1:3,PartID) = LastPartPos(1:3,PartID) + (1.0 - POI_fak) * dtVar * PartVeloRotRef(1:3,PartID) + PartState(1:3,PartID) = LastPartPos(1:3,PartID) + (1.0 - POI_fak) * dtVar * NewVeloPush(1:3) ELSE PartState(1:3,PartID) = LastPartPos(1:3,PartID) + TrackInfo%PartTrajectory(1:3)*(TrackInfo%lengthPartTrajectory - TrackInfo%alpha) END IF diff --git a/src/particles/tracking/particle_triatracking.f90 b/src/particles/tracking/particle_triatracking.f90 index 2491feda9..9285cad58 100644 --- a/src/particles/tracking/particle_triatracking.f90 +++ b/src/particles/tracking/particle_triatracking.f90 @@ -162,14 +162,15 @@ SUBROUTINE ParticleTriaTracking() InterPartID = InterPlanePartIndx(i) PDM%ParticleInside(InterPartID) = .TRUE. IF(UseRotSubCycling) THEN - RotRefSubTimeStep=.FALSE. +! RotRefSubTimeStep=.FALSE. + RotRefSubTimeStep=.TRUE. LastPartPosSubCycling(1:3) = LastPartPos(1:3,InterPartID) NewPosSubCycling(1:3) = PartState(1:3,InterPartID) PartVeloRotRefSubCycling(1:3) = PartVeloRotRef(1:3,InterPartID) LastVeloRotRefSubCycling(1:3) = LastPartVeloRotRef(1:3,InterPartID) GlobalElemIDSubCycling = PEM%LastGlobalElemID(InterPartID) InRotRefFrameSubCycling = PDM%InRotRefFrame(InterPartID) - CALL SingleParticleTriaTracking(i=InterPartID,IsInterPlanePart=.TRUE.) +! CALL SingleParticleTriaTracking(i=InterPartID,IsInterPlanePart=.TRUE.) IF(RotRefSubTimeStep) THEN !--- split time step in 10 sub-steps IF (UseVarTimeStep) THEN From 497753b0d13efff3b7d97bf76a8c7e8c674aad1c Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Wed, 14 Feb 2024 12:46:23 +0100 Subject: [PATCH 161/222] up --- SpeciesDatabase.h5 | Bin 2271720 -> 2271720 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/SpeciesDatabase.h5 b/SpeciesDatabase.h5 index a221d65085b640c4b7bff3da81c95f32dc27c3e1..4e76383f10d43feac3768b180a9f7b727e563c74 100644 GIT binary patch delta 2793 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 From 3654e614a15e1d6626c04156d049b0030b2cb9b7 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Wed, 14 Feb 2024 12:48:36 +0100 Subject: [PATCH 162/222] updated HeatOfFormation from ATcT Database at 298.15K --- SpeciesDatabase.h5 | Bin 2271720 -> 2271720 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/SpeciesDatabase.h5 b/SpeciesDatabase.h5 index 4e76383f10d43feac3768b180a9f7b727e563c74..cc3e1d2dca57302f3d942e9c0c48f57c6fa31455 100644 GIT binary patch delta 155 zcmWN=w++HT002PQm|!v(lY?EnsFtKwJI~((ta0$lnz2vpOXVUuqhO~LzV|c`n snA$P3YtOy|bBB%`J8|mFxeJ#Tt}I= Date: Thu, 15 Feb 2024 09:24:34 +0000 Subject: [PATCH 163/222] Update generateuserblock.sh: Ignore .csv and .tmp files when storing the git diff output in the userblock --- tools/userblock/generateuserblock.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/userblock/generateuserblock.sh b/tools/userblock/generateuserblock.sh index 229256659..4019fd644 100644 --- a/tools/userblock/generateuserblock.sh +++ b/tools/userblock/generateuserblock.sh @@ -107,7 +107,7 @@ if [ $INSIDEGITREPO ]; then PWD=$(pwd) ## this only works from the root of the git directory cd $GITROOT - git diff -p HEAD ':!regressioncheck' ':!tutorials' ':!*.h5'| head -n 1000 >> userblock.txt + git diff -p HEAD ':!regressioncheck' ':!tutorials' ':!*.h5' ':!*.csv' ':!*.tmp' | head -n 1000 >> userblock.txt cd $PWD else echo "not a git repo" >> userblock.txt @@ -164,4 +164,4 @@ elf_arch=$( objdump -i | head -4 | tail -1 | xargs) # Build the module objcopy -I binary -O $elf_format -B $elf_arch --add-section ".note.GNU-stack"=/dev/null --redefine-sym _binary_userblock_tar_xz_start=userblock_start --redefine-sym _binary_userblock_tar_xz_end=userblock_end --redefine-sym _binary_userblock_tar_xz_size=userblock_size userblock.tar.xz userblock.o -rm userblock.tar.xz \ No newline at end of file +rm userblock.tar.xz From 046181b91145f8f2f1db61e01205df650a1bcd6c Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Thu, 15 Feb 2024 09:35:02 +0000 Subject: [PATCH 164/222] Update generateuserblock.sh: Fixed new output of git diff --- tools/userblock/generateuserblock.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tools/userblock/generateuserblock.sh b/tools/userblock/generateuserblock.sh index 4019fd644..b46d4f3f0 100644 --- a/tools/userblock/generateuserblock.sh +++ b/tools/userblock/generateuserblock.sh @@ -104,11 +104,10 @@ if [ $INSIDEGITREPO ]; then ## exclude any files not wanted such as HDF5, regressionchecks, and tutorials files ## these can still normally committed as they are only excluded from the userblock GITROOT=$(git rev-parse --show-toplevel) - PWD=$(pwd) ## this only works from the root of the git directory cd $GITROOT - git diff -p HEAD ':!regressioncheck' ':!tutorials' ':!*.h5' ':!*.csv' ':!*.tmp' | head -n 1000 >> userblock.txt - cd $PWD + git diff -p HEAD ':!regressioncheck' ':!tutorials' ':!*.h5' ':!*.csv' ':!*.tmp' | head -n 1000 >> $1/userblock.txt + cd "$1" else echo "not a git repo" >> userblock.txt fi From b0df5fd3ab053116500f4af20e13b1aabbbb6073 Mon Sep 17 00:00:00 2001 From: Patrick Kopper Date: Mon, 4 Sep 2023 15:55:27 +0200 Subject: [PATCH 165/222] Find MeshMinMax using MPI instead of every proc loading the complete shared array --- .../particle_mesh/particle_mesh_tools.f90 | 68 ++++++++++++------- 1 file changed, 42 insertions(+), 26 deletions(-) diff --git a/src/particles/particle_mesh/particle_mesh_tools.f90 b/src/particles/particle_mesh/particle_mesh_tools.f90 index a9589f075..c33519d3d 100644 --- a/src/particles/particle_mesh/particle_mesh_tools.f90 +++ b/src/particles/particle_mesh/particle_mesh_tools.f90 @@ -573,7 +573,7 @@ SUBROUTINE GetMeshMinMax() USE MOD_Particle_Surfaces_Vars ,ONLY: BezierControlPoints3D USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod #if USE_MPI -USE MOD_Particle_Mesh_Vars ,ONLY: offsetComputeNodeSide,nComputeNodeSides +USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED,MPI_COMM_LEADERS_SHARED,myComputeNodeRank USE MOD_Particle_Mesh_Vars ,ONLY: offsetComputeNodeNode,nComputeNodeNodes #endif /*USE_MPI*/ #if USE_LOADBALANCE @@ -608,20 +608,28 @@ SUBROUTINE GetMeshMinMax() #if USE_MPI ! compute-node local - GEO%CNxmin = MINVAL(BezierControlPoints3D(1,:,:,offsetComputeNodeSide+1:offsetComputeNodeSide+nComputeNodeSides)) - GEO%CNxmax = MAXVAL(BezierControlPoints3D(1,:,:,offsetComputeNodeSide+1:offsetComputeNodeSide+nComputeNodeSides)) - GEO%CNymin = MINVAL(BezierControlPoints3D(2,:,:,offsetComputeNodeSide+1:offsetComputeNodeSide+nComputeNodeSides)) - GEO%CNymax = MAXVAL(BezierControlPoints3D(2,:,:,offsetComputeNodeSide+1:offsetComputeNodeSide+nComputeNodeSides)) - GEO%CNzmin = MINVAL(BezierControlPoints3D(3,:,:,offsetComputeNodeSide+1:offsetComputeNodeSide+nComputeNodeSides)) - GEO%CNzmax = MAXVAL(BezierControlPoints3D(3,:,:,offsetComputeNodeSide+1:offsetComputeNodeSide+nComputeNodeSides)) + CALL MPI_ALLREDUCE(GEO%xmin,GEO%CNxmin,1,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%xmax,GEO%CNxmax,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%ymin,GEO%CNymin,1,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%ymax,GEO%CNymax,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%zmin,GEO%CNzmin,1,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%zmax,GEO%CNzmax,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_SHARED,iError) ! global - GEO%xminglob = MINVAL(BezierControlPoints3D(1,:,:,:)) - GEO%xmaxglob = MAXVAL(BezierControlPoints3D(1,:,:,:)) - GEO%yminglob = MINVAL(BezierControlPoints3D(2,:,:,:)) - GEO%ymaxglob = MAXVAL(BezierControlPoints3D(2,:,:,:)) - GEO%zminglob = MINVAL(BezierControlPoints3D(3,:,:,:)) - GEO%zmaxglob = MAXVAL(BezierControlPoints3D(3,:,:,:)) + IF (myComputeNodeRank.EQ.0) THEN + CALL MPI_ALLREDUCE(GEO%CNxmin,GEO%xminglob,1,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_LEADERS_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%CNxmax,GEO%xmaxglob,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_LEADERS_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%CNymin,GEO%yminglob,1,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_LEADERS_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%CNymax,GEO%ymaxglob,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_LEADERS_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%CNzmin,GEO%zminglob,1,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_LEADERS_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%CNzmax,GEO%zmaxglob,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_LEADERS_SHARED,iError) + END IF + CALL MPI_BCAST(GEO%xminglob,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_SHARED,iError) + CALL MPI_BCAST(GEO%xmaxglob,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_SHARED,iError) + CALL MPI_BCAST(GEO%yminglob,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_SHARED,iError) + CALL MPI_BCAST(GEO%ymaxglob,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_SHARED,iError) + CALL MPI_BCAST(GEO%zminglob,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_SHARED,iError) + CALL MPI_BCAST(GEO%zmaxglob,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_SHARED,iError) #endif /*USE_MPI*/ ! TriaTracking does not have curved elements, nodeCoords are sufficient CASE(TRIATRACKING) @@ -639,20 +647,28 @@ SUBROUTINE GetMeshMinMax() #if USE_MPI ! compute-node local - GEO%CNxmin = MINVAL(NodeCoords_Shared(1,offsetComputeNodeNode+1:offsetComputeNodeNode+nComputeNodeNodes)) - GEO%CNxmax = MAXVAL(NodeCoords_Shared(1,offsetComputeNodeNode+1:offsetComputeNodeNode+nComputeNodeNodes)) - GEO%CNymin = MINVAL(NodeCoords_Shared(2,offsetComputeNodeNode+1:offsetComputeNodeNode+nComputeNodeNodes)) - GEO%CNymax = MAXVAL(NodeCoords_Shared(2,offsetComputeNodeNode+1:offsetComputeNodeNode+nComputeNodeNodes)) - GEO%CNzmin = MINVAL(NodeCoords_Shared(3,offsetComputeNodeNode+1:offsetComputeNodeNode+nComputeNodeNodes)) - GEO%CNzmax = MAXVAL(NodeCoords_Shared(3,offsetComputeNodeNode+1:offsetComputeNodeNode+nComputeNodeNodes)) + CALL MPI_ALLREDUCE(GEO%xmin,GEO%CNxmin,1,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%xmax,GEO%CNxmax,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%ymin,GEO%CNymin,1,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%ymax,GEO%CNymax,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%zmin,GEO%CNzmin,1,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%zmax,GEO%CNzmax,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_SHARED,iError) ! global - GEO%xminglob = MINVAL(NodeCoords_Shared(1,:)) - GEO%xmaxglob = MAXVAL(NodeCoords_Shared(1,:)) - GEO%yminglob = MINVAL(NodeCoords_Shared(2,:)) - GEO%ymaxglob = MAXVAL(NodeCoords_Shared(2,:)) - GEO%zminglob = MINVAL(NodeCoords_Shared(3,:)) - GEO%zmaxglob = MAXVAL(NodeCoords_Shared(3,:)) + IF (myComputeNodeRank.EQ.0) THEN + CALL MPI_ALLREDUCE(GEO%CNxmin,GEO%xminglob,1,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_LEADERS_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%CNxmax,GEO%xmaxglob,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_LEADERS_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%CNymin,GEO%yminglob,1,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_LEADERS_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%CNymax,GEO%ymaxglob,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_LEADERS_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%CNzmin,GEO%zminglob,1,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_LEADERS_SHARED,iError) + CALL MPI_ALLREDUCE(GEO%CNzmax,GEO%zmaxglob,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_LEADERS_SHARED,iError) + END IF + CALL MPI_BCAST(GEO%xminglob,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_SHARED,iError) + CALL MPI_BCAST(GEO%xmaxglob,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_SHARED,iError) + CALL MPI_BCAST(GEO%yminglob,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_SHARED,iError) + CALL MPI_BCAST(GEO%ymaxglob,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_SHARED,iError) + CALL MPI_BCAST(GEO%zminglob,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_SHARED,iError) + CALL MPI_BCAST(GEO%zmaxglob,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_SHARED,iError) #endif /*USE_MPI*/ END SELECT @@ -1906,4 +1922,4 @@ SUBROUTINE ComputePeriodicVec() END SUBROUTINE ComputePeriodicVec -END MODULE MOD_Particle_Mesh_Tools +END MODULE MOD_Particle_Mesh_Tools \ No newline at end of file From 7decf28a92630929794c9c99b4ae1d8e07a99684 Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Thu, 15 Feb 2024 13:08:30 +0100 Subject: [PATCH 166/222] Updated feature request gitlab template --- .gitlab/merge_request_templates/Feature.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.gitlab/merge_request_templates/Feature.md b/.gitlab/merge_request_templates/Feature.md index bd674f1a0..077866f2d 100644 --- a/.gitlab/merge_request_templates/Feature.md +++ b/.gitlab/merge_request_templates/Feature.md @@ -12,12 +12,13 @@ * [ ] Workflow * [ ] Short summary in the header * [ ] Inside the routine at the appropriate positions -* [ ] Reggie - * [ ] Add small test setup - * [ ] Add entry in REGGIE.md table +* [ ] Reggie: The new feature must be tested with at least one new or old regression test(s) + * [ ] Add small test setup if the new feature is not covered by any old regression tests + * [ ] Add entry in REGGIE.md table to indicate where the new feature is used * [ ] Check correct allocation and deallocation for the test case * [ ] Either check automatic restart functionality of reggie example via Load Balance - * [ ] And compile PICLas with Sanitzer and MPI=OFF as well as MPI=ON and run with one processor to find possible memory leaks + * [ ] And/or compile PICLas with Sanitzer and MPI=OFF as well as MPI=ON and run with one process find possible memory + leaks. When using MPICH, the test should also be performed with multiple processes * [ ] Test the three shared memory modes * [ ] `PICLAS_SHARED_MEMORY = MPI_COMM_TYPE_SHARED` (default) for splitting shared memory domains on the physical node * [ ] `PICLAS_SHARED_MEMORY = OMPI_COMM_TYPE_CORE` for splitting at process level, .i.e, each process yields a logical node From 777a2b966ea4068b60ae0da5e87bf9dfda48a839 Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Thu, 15 Feb 2024 16:18:30 +0100 Subject: [PATCH 167/222] prevent lost particles when doing a virtual shift --- src/particles/particle_operations.f90 | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/particles/particle_operations.f90 b/src/particles/particle_operations.f90 index b6252c0fb..868f01312 100644 --- a/src/particles/particle_operations.f90 +++ b/src/particles/particle_operations.f90 @@ -160,6 +160,7 @@ SUBROUTINE RemoveParticle(PartID,BCID,alpha,crossedBC) USE MOD_Mesh_Vars ,ONLY: BoundaryType #endif /*USE_HDG*/ USE MOD_Particle_Vars ,ONLY: PartState, LastPartPos +!USE MOD_Particle_Mesh_Vars ,ONLY: GEO !----------------------------------------------------------------------------------------------------------------------------------! IMPLICIT NONE ! INPUT / OUTPUT VARIABLES @@ -170,7 +171,7 @@ SUBROUTINE RemoveParticle(PartID,BCID,alpha,crossedBC) !----------------------------------------------------------------------------------------------------------------------------------! ! LOCAL VARIABLES INTEGER :: iSpec, iSF -REAL :: MPF +REAL :: MPF!,RandVal(2) #if USE_HDG INTEGER :: iBC,iUniqueFPCBC,iUniqueEPCBC,BCState #endif /*USE_HDG*/ @@ -300,14 +301,18 @@ SUBROUTINE RemoveParticle(PartID,BCID,alpha,crossedBC) END IF ! UseEPC #endif /*USE_HDG*/ - ! Debugging: Move particles that impact the left BC to a specific location - !IF(TRIM(BoundaryName(PartBound%MapToFieldBC(BCID))).EQ.'BC_LEFT')THEN - ! PartSpecies(PartID) = 3 - ! PDM%ParticleInside(PartID) = .TRUE. - ! PartState(1,PartID) = -9e-9 ! (/-9e-9, 0., 0./) - ! LastPartPos(1,PartID) = -9e-9 ! (/-9e-9, 0., 0./) - ! PartState(4:6,PartID) = (/0., 0., 0./) - !END IF ! TRIM(BoundaryName(PartBound%MapToFieldBC(BCID))).EQ.'BC_LEFT' + ! ! Debugging: Move particles that impact the left BC to a specific location + ! IF(TRIM(BoundaryName(PartBound%MapToFieldBC(BCID))).EQ.'BC_LEFT')THEN + ! PartSpecies(PartID) = 3 + ! PDM%ParticleInside(PartID) = .TRUE. + ! PartState(1,PartID) = -9e-9 + ! LastPartPos(1,PartID) = PartState(1,PartID) + ! CALL RANDOM_NUMBER(RandVal) + ! PartState(2,PartID) = RandVal(1)*(GEO%zmaxglob-GEO%zminglob) + GEO%zminglob + ! PartState(3,PartID) = RandVal(2)*(GEO%ymaxglob-GEO%yminglob) + GEO%yminglob + ! LastPartPos(2:3,PartID) = PartState(2:3,PartID) + ! PartState(4:6,PartID) = (/0., 0., 0./) + ! END IF ! TRIM(BoundaryName(PartBound%MapToFieldBC(BCID))).EQ.'BC_LEFT' END IF ! PRESENT(BCID) ! Tracking-relevant variables (not required if a particle is removed within the domain, e.g. removal due to radial weighting) From 320f6ba10bfd123bc3b8be665e5db38625bfa433 Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Thu, 15 Feb 2024 16:21:37 +0100 Subject: [PATCH 168/222] use domain boundary --- src/particles/emission/particle_emission_tools.f90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/particles/emission/particle_emission_tools.f90 b/src/particles/emission/particle_emission_tools.f90 index 92e8e50e4..bf71e0240 100644 --- a/src/particles/emission/particle_emission_tools.f90 +++ b/src/particles/emission/particle_emission_tools.f90 @@ -1172,6 +1172,7 @@ SUBROUTINE SetParticlePositionCuboidCylinder(FractNbr,iInit,chunkSize,particle_p USE MOD_Particle_Vars ,ONLY: Species, Symmetry USE MOD_Part_Tools ,ONLY: CalcPartSymmetryPos, CalcRadWeightMPF USE MOD_DSMC_Vars ,ONLY: RadialWeighting +!USE MOD_Particle_Mesh_Vars ,ONLY: GEO !---------------------------------------------------------------------------------------------------------------------------------- ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -1209,7 +1210,7 @@ SUBROUTINE SetParticlePositionCuboidCylinder(FractNbr,iInit,chunkSize,particle_p ! Debugging: Get linear distribution in y for 2D cases !CALL RANDOM_NUMBER(iRan) - !IF(Particle_pos(2)/1e-3.GT.iRan) THEN + !IF(Particle_pos(2)/GEO%ymaxglob.GT.iRan) THEN ! i=i+1 ! CYCLE !END IF From 2d7375c573cd19ffa5ca743e9cc9001d1700cf82 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Thu, 15 Feb 2024 23:21:38 +0100 Subject: [PATCH 169/222] Species Database: updated documentation, added regression tests to the table, reduced size of reference file --- REGGIE.md | 245 ++++----- .../userguide/features-and-models/BGG.md | 1 + .../userguide/features-and-models/DSMC.md | 12 +- .../features-and-models/SpeciesDatabase.md | 146 ++--- docs/documentation/userguide/tools.md | 5 +- .../PartAnalyze_ref.csv | 503 +----------------- .../PartAnalyze_001_ref.csv | 6 +- .../PartAnalyze_010_ref.csv | 6 +- .../PartAnalyze_050_ref.csv | 6 +- .../PartAnalyze_100_ref.csv | 6 +- .../PartAnalyze_150_ref.csv | 6 +- .../PartAnalyze_200_ref.csv | 6 +- .../get_values.py | 8 +- .../parameter.ini | 11 +- .../parameter.ini | 8 +- .../readme.md | 4 +- src/particles/dsmc/dsmc_chemical_init.f90 | 14 +- src/particles/particle_init.f90 | 6 +- src/particles/particle_vars.f90 | 5 - 19 files changed, 226 insertions(+), 778 deletions(-) mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/get_values.py diff --git a/REGGIE.md b/REGGIE.md index a2aed1995..04eea9c5b 100644 --- a/REGGIE.md +++ b/REGGIE.md @@ -39,37 +39,37 @@ Regression testing for PIC, solving the complete Maxwell equations with RK4: [Li Small test cases to check features with DSMC timedisc: [Link to build](regressioncheck/CHE_DSMC/builds.ini). -| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | -| :-----: | :---------------------------------------: | :--------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------: | :------------------------------------: | :----------------------------------------------------------------------------------: | -| | 1D_Two_Hot_Plates | | 1D problem: heating of cold gas between 2 hot walls | nProcs=1 | Temperature | [Link](regressioncheck/CHE_DSMC/1D_Two_Hot_Plates/readme.md) | -| | 2D_VTS_Insert_CellLocal | | 2D/Axisymmetric, linear time step scaling: Initial particle insertion by cell_local | nProcs=2 | PartAnalyze: NumDens, Temp | [Link](regressioncheck/CHE_DSMC/2D_VTS_Insert_CellLocal/readme.md) | -| | 2D_VTS_SurfFlux_Tria | | 2D/Axisymmetric, linear time step scaling: Particle emission through surface flux | nProcs=2 | PartAnalyze: NumDens, Temp | [Link](regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/readme.md) | -| | BackgroundGas_RegionsDefinition | | Reservoir simulation setting different background gas regions | nProcs=1,6 | DSMCState: NumDens, Temp, Velo | [Link](regressioncheck/CHE_DSMC/BackgroundGas_RegionsDefinition/readme.md) | -| | BackgroundGas_VHS_MCC | | Reservoir simulation of an ionization using a background gas with DSMC and MCC-based collision probabilities, hard compiled N=1 | nProcs=1 | PartAnalyze: NumDens, Temp | [Link](regressioncheck/CHE_DSMC/BackgroundGas_VHS_MCC/readme.md) | -| | BC_DiffuseWall_EnergyAccommodation | | Reservoir relaxing towards wall temperature, hard compiled N=1 | nProcs=1,4 | Temperature | [Link](regressioncheck/CHE_DSMC/BC_DiffuseWall_EnergyAccommodation/readme.md) | -| | BC_DiffuseWall_TempGrad | | Reservoir with a boundary temperature gradient along the x-axis, hard compiled N=1 | nProcs=1,4 | Temperature | [Link](regressioncheck/CHE_DSMC/BC_DiffuseWall_TempGrad/readme.md) | -| | BC_InnerReflective_8elems | | Inner reflective BC (dielectric surfaces) low error tolerance, runs piclas2vtk after piclas execution and converts PartData to .vtk, hard compiled N=1 | nProcs=1,2,4,8 | h5diff: DSMCSurfState | [Link](regressioncheck/CHE_DSMC/BC_InnerReflective_8elems/readme.md) | -| | BC_InnerReflective_36elems | | Inner reflective BC (dielectric surfaces) high error tolerance, hard compiled N=1 | nProcs=1,2,4,8,12 | h5diff: DSMCSurfState | [Link](regressioncheck/CHE_DSMC/BC_InnerReflective_36elems/readme.md) | -| | BC_PorousBC | | PorousBC as a pump with 2 species, hard compiled N=1 | nProcs=3 | Total # of removed part through BC | | -| | BC_PorousBC_2DAxi | | PorousBC as a pump with 2 species (axisymmetric, with/without radial weighting), hard compiled N=1 | nProcs=1,2 | Total number density | [Link](regressioncheck/CHE_DSMC/BC_PorousBC_2DAxi/readme.md) | -| | BC_RotationalPeriodic | | Rotationally periodic BC with "worst-case" mesh based on tetrahedrons | nProcs=1,5 | Particle number | [Link](regressioncheck/CHE_DSMC/BC_RotationalPeriodic/readme.md) | -| | cube | | Collismode=2,3, hard compiled N=1 | nProcs=2 | | | -| | Rotational_Reference_Frame_Regions | | Rotational reference frame with several regions, switching between stationary and rotating frame | nProcs=1,2,3,4 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Regions/readme.md) | -| | Rotational_Reference_Frame_RotBC | | Rotational reference frame in combination with the rotationally periodic BC | nProcs=1,2,3,4 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_RotBC/readme.md) | -| | Rotational_Reference_Frame_Temperature | | Rotational reference frame: Many particles, multiple revolutions | nProcs=1,2,4 | Temperature | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Temperature/readme.md) | +| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | +| :-----: | :---------------------------------------: | :--------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------: | :----------------------------------------: | :----------------------------------------------------------------------------------: | +| | 1D_Two_Hot_Plates | | 1D problem: heating of cold gas between 2 hot walls | nProcs=1 | Temperature | [Link](regressioncheck/CHE_DSMC/1D_Two_Hot_Plates/readme.md) | +| | 2D_VTS_Insert_CellLocal | | 2D/Axisymmetric, linear time step scaling: Initial particle insertion by cell_local | nProcs=2 | PartAnalyze: NumDens, Temp | [Link](regressioncheck/CHE_DSMC/2D_VTS_Insert_CellLocal/readme.md) | +| | 2D_VTS_SurfFlux_Tria | | 2D/Axisymmetric, linear time step scaling: Particle emission through surface flux | nProcs=2 | PartAnalyze: NumDens, Temp | [Link](regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/readme.md) | +| | BackgroundGas_RegionsDefinition | | Reservoir simulation setting different background gas regions | nProcs=1,6 | DSMCState: NumDens, Temp, Velo | [Link](regressioncheck/CHE_DSMC/BackgroundGas_RegionsDefinition/readme.md) | +| | BackgroundGas_VHS_MCC | | Reservoir simulation of an ionization using a background gas with DSMC and MCC-based collision probabilities, hard compiled N=1 | nProcs=1 | PartAnalyze: NumDens, Temp | [Link](regressioncheck/CHE_DSMC/BackgroundGas_VHS_MCC/readme.md) | +| | BC_DiffuseWall_EnergyAccommodation | | Reservoir relaxing towards wall temperature, hard compiled N=1 | nProcs=1,4 | Temperature | [Link](regressioncheck/CHE_DSMC/BC_DiffuseWall_EnergyAccommodation/readme.md) | +| | BC_DiffuseWall_TempGrad | | Reservoir with a boundary temperature gradient along the x-axis, hard compiled N=1 | nProcs=1,4 | Temperature | [Link](regressioncheck/CHE_DSMC/BC_DiffuseWall_TempGrad/readme.md) | +| | BC_InnerReflective_8elems | | Inner reflective BC (dielectric surfaces) low error tolerance, runs piclas2vtk after piclas execution and converts PartData to .vtk, hard compiled N=1 | nProcs=1,2,4,8 | h5diff: DSMCSurfState | [Link](regressioncheck/CHE_DSMC/BC_InnerReflective_8elems/readme.md) | +| | BC_InnerReflective_36elems | | Inner reflective BC (dielectric surfaces) high error tolerance, hard compiled N=1 | nProcs=1,2,4,8,12 | h5diff: DSMCSurfState | [Link](regressioncheck/CHE_DSMC/BC_InnerReflective_36elems/readme.md) | +| | BC_PorousBC | | PorousBC as a pump with 2 species, hard compiled N=1 | nProcs=3 | Total # of removed part through BC | | +| | BC_PorousBC_2DAxi | | PorousBC as a pump with 2 species (axisymmetric, with/without radial weighting), hard compiled N=1 | nProcs=1,2 | Total number density | [Link](regressioncheck/CHE_DSMC/BC_PorousBC_2DAxi/readme.md) | +| | BC_RotationalPeriodic | | Rotationally periodic BC with "worst-case" mesh based on tetrahedrons | nProcs=1,5 | Particle number | [Link](regressioncheck/CHE_DSMC/BC_RotationalPeriodic/readme.md) | +| | cube | | Collismode=2,3, hard compiled N=1 | nProcs=2 | | | +| | Rotational_Reference_Frame_Regions | | Rotational reference frame with several regions, switching between stationary and rotating frame | nProcs=1,2,3,4 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Regions/readme.md) | +| | Rotational_Reference_Frame_RotBC | | Rotational reference frame in combination with the rotationally periodic BC | nProcs=1,2,3,4 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_RotBC/readme.md) | +| | Rotational_Reference_Frame_Temperature | | Rotational reference frame: Many particles, multiple revolutions | nProcs=1,2,4 | Temperature | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Temperature/readme.md) | | | SurfaceOutput | | Test of CalcSurfaceImpact and CalcBoundaryParticleOutput through defined electron flux | nProcs=1,4 | PartAnalyze, SurfaceAnalyze, DSMCSurfState | [Link](regressioncheck/CHE_DSMC/SurfaceOutput/readme.md) | -| | DSMC_QualityFactors | | Quality factors: mean/max collision probability, MCS over MFP, mean free path, ResolvedCellPercentage | nProcs=1 | PartAnalyze | [Link](regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md) | -| | DSMC_QualityFactors_MPI | | Quality factors: ResolvedTimestep, max collision probability, MCS over MFP, ResolvedCellPercentage | nProcs=4 | PartAnalyze | [Link](regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/readme.md) -| | MCC_SpeciesTimeStep | | Species-specific time step with MCC | nProcs=4 | PartAnalyze: Number density | [Link](regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/readme.md) | -| | SurfFlux_RefMapping_Tracing_TriaTracking | | Surface flux emission (collisionless) with ARM (with all three trackings) and TriaSurfaceFlux (only TriaTracking) | nProcs=1 | PartAnalyze: nPart, TransTemp | [Link](regressioncheck/CHE_DSMC/SurfFlux_RefMapping_Tracing_TriaTracking/readme.md) | -| | SurfFlux_Tria_Adaptive_ConstPressure | | TriaSurfaceFlux with AdaptiveType=1/2 | nProcs=4 | Integrated mass flux | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstMassflow/readme.md) | -| | SurfFlux_Tria_Adaptive_ConstMassflow | | TriaSurfaceFlux with AdaptiveType=3,4, hard compiled N=1 | nProcs=1 | Integrated mass flux | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstPressure/readme.md) | -| | SurfFlux_Tria_CurrentMassflow | | Surface flux with an emission current or mass flow at fixed velocity | nProcs=4 | # of particles per time step | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_CurrentMassflow/readme.md) | -| | vMPF_BGG_CellLocalInsertion | | Variable weighting factor: Cell local particle insertion at constant density and constant particle number per cell | nProcs=6 | PartAnalyze: nPart, DSMCState: NumDens | [Link](regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/readme.md) | -| | vMPF_BGG_CellLocalInsertion_LimitLocation | | Variable weighting factor: Limited cell local particle insertion at constant density and constant particle number per cell | nProcs=6 | PartAnalyze: nPart, DSMCState: NumDens | [Link](regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/readme.md) | -| | vMPF_BGG_ChannelFlow_Merge | | Variable weighting factor: Flow through channel, merging particle in large cells after mortar interface | nProcs=1,4 | PartAnalyze: nPart, NumDens | [Link](regressioncheck/CHE_DSMC/vMPF_BGG_ChannelFlow_Merge/readme.md) | -| | vMPF_BGG_MultiSpec_Merge_TraceSpec | | Variable weighting factor: Multi-species background gas with trace species split and merging | nProcs=1 | PartAnalyze: nPart, NumDens | [Link](regressioncheck/CHE_DSMC/vMPF_BGG_MultiSpec_Merge_TraceSpec/readme.md) | -| | Symmetry_Initial_Particle_Emission(2) | | Initial Particle Insertion with Symmerty-Order.NE.3, Axisymmetric and RadialWeighting | nProcs=1,4 | PartAnalyze: NumDens, Temp | [Link](regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission) | +| | DSMC_QualityFactors | | Quality factors: mean/max collision probability, MCS over MFP, mean free path, ResolvedCellPercentage | nProcs=1 | PartAnalyze | [Link](regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md) | +| | DSMC_QualityFactors_MPI | | Quality factors: ResolvedTimestep, max collision probability, MCS over MFP, ResolvedCellPercentage | nProcs=4 | PartAnalyze | [Link](regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/readme.md) | +| | MCC_SpeciesTimeStep | | Species-specific time step with MCC | nProcs=4 | PartAnalyze: Number density | [Link](regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/readme.md) | +| | SurfFlux_RefMapping_Tracing_TriaTracking | | Surface flux emission (collisionless) with ARM (with all three trackings) and TriaSurfaceFlux (only TriaTracking) | nProcs=1 | PartAnalyze: nPart, TransTemp | [Link](regressioncheck/CHE_DSMC/SurfFlux_RefMapping_Tracing_TriaTracking/readme.md) | +| | SurfFlux_Tria_Adaptive_ConstPressure | | TriaSurfaceFlux with AdaptiveType=1/2 | nProcs=4 | Integrated mass flux | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstMassflow/readme.md) | +| | SurfFlux_Tria_Adaptive_ConstMassflow | | TriaSurfaceFlux with AdaptiveType=3,4, hard compiled N=1 | nProcs=1 | Integrated mass flux | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstPressure/readme.md) | +| | SurfFlux_Tria_CurrentMassflow | | Surface flux with an emission current or mass flow at fixed velocity | nProcs=4 | # of particles per time step | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_CurrentMassflow/readme.md) | +| | vMPF_BGG_CellLocalInsertion | | Variable weighting factor: Cell local particle insertion at constant density and constant particle number per cell | nProcs=6 | PartAnalyze: nPart, DSMCState: NumDens | [Link](regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/readme.md) | +| | vMPF_BGG_CellLocalInsertion_LimitLocation | | Variable weighting factor: Limited cell local particle insertion at constant density and constant particle number per cell | nProcs=6 | PartAnalyze: nPart, DSMCState: NumDens | [Link](regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/readme.md) | +| | vMPF_BGG_ChannelFlow_Merge | | Variable weighting factor: Flow through channel, merging particle in large cells after mortar interface | nProcs=1,4 | PartAnalyze: nPart, NumDens | [Link](regressioncheck/CHE_DSMC/vMPF_BGG_ChannelFlow_Merge/readme.md) | +| | vMPF_BGG_MultiSpec_Merge_TraceSpec | | Variable weighting factor: Multi-species background gas with trace species split and merging | nProcs=1 | PartAnalyze: nPart, NumDens | [Link](regressioncheck/CHE_DSMC/vMPF_BGG_MultiSpec_Merge_TraceSpec/readme.md) | +| | Symmetry_Initial_Particle_Emission(2) | | Initial Particle Insertion with Symmerty-Order.NE.3, Axisymmetric and RadialWeighting | nProcs=1,4 | PartAnalyze: NumDens, Temp | [Link](regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission) | #### CHE_BGK/FPFlow @@ -106,7 +106,7 @@ Overview of the test cases performed during the nightly regression testing. | - | [NIG_poisson](#nig_poisson) | Poisson, Code Analyze=ON, PARTICLES=OFF | Poisson solver without particles | | | | | - | [NIG_poisson_PETSC](#NIG_poisson_PETSC) | Poisson, PETSC, Code Analyze=ON, PARTICLES=OFF | Poisson solver without particles, with PETSC library | | | | | - | [NIG_Photoionization](#nig_photoionization) | Poisson, Code Analyze=ON | Photoionization of H2 and secondary electron emission and initial load balance | | | | -| - | [NIG_Radiation](#nig_radiation) | Radiation | Radiation timedisc, cell-local emission and radiative transfer (2D rot sym and 3D) | | | | +| - | [NIG_Radiation](#nig_radiation) | Radiation | Radiation timedisc, cell-local emission and radiative transfer (2D rot sym and 3D) | | | | | 1 | NIG_PIC_maxwell_bgfield | maxwell,PIC,RK4 | External Background-field,h5 | nProcs=2 | DG_Solution | | | 2 | NIG_PIC_poisson_powerdensity | Poisson, Crank-Nicolson | Implicit, CalcTimeAvg | DoRefMapping=T/F, nProcs=2 | Final TimeAvg, h5diff | | | 3 | feature_emission_gyrotron | maxwell,RK4 | Part-Inflow,TimeDep | N=1,3,6,9,10, nProcs=1,2,10,25, gyro-circle | LineIntegration of nPartIn | | @@ -157,11 +157,11 @@ Convergence tests (spatially by varying either the polynomial degree of the solu Convergence tests (spatially by varying either the number of mesh cells) for Poisson's equations on conforming, non-conforming (hanging nodes/Mortars) Cartesian meshes with exact Dirichlet boundaries: [Link CMAKE-CONFIG](regressioncheck/NIG_convtest_poisson/builds.ini). -| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | -| :-----: | :----------------------------------------: | :--------------: | :--------------------------------------: | :-----------: | :-----------: | :-----------------------------------------------------------------------------------: | -| | Dielectric_slab_FPC | | h-convergence (N=1) | nProcs=1,2,7 | analytical solution | [Link](regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/readme.md) | -| | Dielectric_sphere_in_sphere_curved_mortar | | h-convergence (N=2) | nProcs=1,2,7 | analytical solution | [Link](regressioncheck/NIG_convtest_poisson/Dielectric_sphere_in_sphere_curved_mortar/readme.md) | -| 23-x | h_N1_mortar | | h-convergence (N=1, non-conforming mesh) | nProcs=1,3,7 | analytical solution | [Link](regressioncheck/NIG_convtest_poisson/h_N1/readme.md) | +| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | +| :-----: | :---------------------------------------: | :--------------: | :--------------------------------------: | :-----------: | :-----------------: | :----------------------------------------------------------------------------------------------: | +| | Dielectric_slab_FPC | | h-convergence (N=1) | nProcs=1,2,7 | analytical solution | [Link](regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/readme.md) | +| | Dielectric_sphere_in_sphere_curved_mortar | | h-convergence (N=2) | nProcs=1,2,7 | analytical solution | [Link](regressioncheck/NIG_convtest_poisson/Dielectric_sphere_in_sphere_curved_mortar/readme.md) | +| 23-x | h_N1_mortar | | h-convergence (N=1, non-conforming mesh) | nProcs=1,3,7 | analytical solution | [Link](regressioncheck/NIG_convtest_poisson/h_N1/readme.md) | #### NIG_convtest_t_Maxwell @@ -233,43 +233,45 @@ Different dielectric regions in combination with the HDG solver (Poisson's equat Testing more complex DSMC routines with reservoir (heat bath) simulations: [Link CMAKE-CONFIG](regressioncheck/NIG_Reservoir/builds.ini). -| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | -| :-----: | :--------------------------------: | :--------------: | :--------------------------------------------------------------------------------------------------------- | :-----------: | :-----------: | :--------------------------------------------------------------------------------: | -| | BGG_MultiSpec_vMPF | | Multi-species background gas (VHS): Basic variable weighting and trace background species | nProcs=1,4 | | [Link](regressioncheck/NIG_Reservoir/BGG_MultiSpec_vMPF/readme.md) | -| 1 | CHEM_BGG_MultiSpec_TCE_Air_5Spec | | Multi-species background gas: TCE rates for N2/O2 + N/O dissociation and N2 + O exchange | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/readme.md) | -| 2 | CHEM_DeleteProduct | | Reaction products are deleted after the chemical reaction | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_DeleteProduct/readme.md) | -| 3 | CHEM_EQUI_TCE_Air_5Spec | | Reservoir of high-temperature air (N2, O2) dissociating | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec/readme.md) | -| 4 | CHEM_QK_multi-ionization_C_to_C6+ | | QK impact ionization, from neutral to fully ionized | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_QK_multi-ionization_C_to_C6+/readme.md) | -| 5 | CHEM_RATES_BGG_diss_CO2 | | Background gas: TCE rates for a dissociation: CO2 + CO/O <-> CO + O + CO/O | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_diss_CO2/readme.md) | -| 6 | CHEM_RATES_BGG_TCE_diss_QK_ion_CO2 | | Background gas: TCE rates for a CO2 + e dissociation/ionization | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/readme.md) | -| 7 | CHEM_RATES_diss_recomb_CH4 | | TCE rates for a (non-linear) polyatomic dissociation + recombination: CH4 + M <-> CH3 + H + M | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CH4/readme.md) | -| 8 | CHEM_RATES_diss_recomb_CO2 | | TCE rates for a (linear) polyatomic dissociation + recombination: CO2 + M <-> CO + O + M | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/readme.md) | -| 9 | CHEM_RATES_diss_recomb_N2 | | TCE rates for a diatomic dissociation + recombination: N2 + M <-> N + N + M | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_N2/readme.md) | -| 10 | CHEM_RATES_exchange_CH4_H | | TCE rates for an exchange: CH4 + H <-> CH3 + H2 | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_exchange_CH3/readme.md) | -| 11 | CHEM_RATES_QK_diss_ion_N2 | | QK rates for a dissociation and ionization : N2 + M -> N + N + M and N2 + M -> N2+ e- + M | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/readme.md) | -| 12 | CHEM_RATES_QK_diss_N2 | | QK rates for a dissociation : N2 + M -> N + N + M | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/readme.md) | -| 13 | CHEM_RATES_QK_ionization-recomb_H | | QK rates for ionization and recombination: H + e <-> HIon + e + e | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_QK_ionization-recomb_H/readme.md) | -| 14 | CHEM_RATES_QK_recomb_N2 | | QK rates for a recombination: N + N + M -> N2 + M | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/readme.md) | -| 15 | CHEM_RATES_XSec_Chem_H2_Plasma | | Testing total collision rates through cross-section data (H2+e/H/HIon1/H2Ion1/H3Ion1) | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/readme.md) | -| 16 | CHEM_RATES_XSec_Chem_Ar-e_100keV | | Testing reaction rates through cross-section data (Ar+e: 1 reaction path, relativistic velocity) | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_Ar-e_100keV/readme.md) | -| 16 | CHEM_RATES_XSec_Chem_H2-e | | Testing reaction rates through cross-section data (H2+e: EFFECTIVE, 3 reaction paths, vib. relax.) | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e/readme.md) | -| 16 | CHEM_RATES_XSec_Chem_H2-e_ELASTIC | | Testing reaction rates through cross-section data (H2+e: ELASTIC, 3 reaction paths, vib. relax.) | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/readme.md) | -| 17 | CHEM_RATES_XSec_Chem_H2-H2Ion1 | | Testing reaction rates through cross-section data (H2+H2Ion: 3 reaction paths) | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H2Ion1/readme.md) | -| 18 | CHEM_RATES_XSec_Chem_H2-H3Ion1 | | Testing reaction rates through cross-section data (H2+H3Ion: 4 reaction paths) | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion1/readme.md) | -| 19 | MCC_BGG_MultiSpec_XSec | | Multi-species background gas: Collision rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec/readme.md) | -| 20 | MCC_BGG_MultiSpec_XSec_Elec | | Multi-species background gas: Electronic relaxation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Elec/readme.md) | -| 21 | MCC_BGG_MultiSpec_XSec_Vib | | Multi-species background gas: Vibrational relaxation probabilities through cross-section data | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/readme.md) | -| 22 | MCC_BGG_MultiSpec_XSec_TCE_QK_Chem | | Multi-species background gas: QK ionization and TCE dissociation | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_TCE_QK_Chem/readme.md) | -| 23 | MCC_BGG_MultiSpec_XSec_vMPF | | Multi-species background gas (MCC/XSec): Basic variable weighting and trace background species | nProcs=1,4 | | [Link](regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_vMPF/readme.md) | -| 24 | RELAX_CH4 | | Rotational, vibrational relaxation towards equilibrium temperature | nProcs=2 | | [Link](regressioncheck/NIG_Reservoir/RELAX_CH4/readme.md) | -| 25 | RELAX_CH4_PDR | | Relaxation towards equilibrium with prohibiting double relaxation (single/multi mode for CH4) | nProcs=2 | | [Link](regressioncheck/NIG_Reservoir/RELAX_CH4_PDR/readme.md) | -| 26 | RELAX_CO2 | | Rotational, vibrational relaxation towards equilibrium temperature | nProcs=2 | | [Link](regressioncheck/NIG_Reservoir/RELAX_CO2/readme.md) | -| 27 | RELAX_N2 | | Rotational, vibrational, electronic relaxation of N2 | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/RELAX_N2/readme.md) | -| 27 | RELAX_N2_XSec_Elec | | Electronic excitation of N2 to 13 eV level using cross-section data | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/RELAX_N2_XSec_Elec/readme.md) | -| 28 | RELAX_N2Ion | | Rotational, vibrational, electronic relaxation of N2Ion | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/RELAX_N2Ion/readme.md) | -| 29 | VarRelaxProb_cold | | Relaxation of a cold reservoir of N2 with variable relaxation probabilities | nProcs=1,2,3 | | [Link](regressioncheck/NIG_Reservoir/VarRelaxProb_cold/readme.md) | -| 30 | VarRelaxProb_hot | | Relaxation of a hot reservoir of N2 and O2 with variable relaxation probabilities | nProcs=2,3 | | [Link](regressioncheck/NIG_Reservoir/VarRelaxProb_hot/readme.md) | -| 31 | VarRelaxProb_Restart | | Initial Autorestart with variable relaxation probabilities | nProcs=1,2 | | [Link](regressioncheck/NIG_Reservoir/VarRelaxProb_Restart/readme.md) | +| **No.** | **Case** | **Feature** | **Execution** | **Comparing** | **Readme** | +| :-----: | :-------------------------------------: | :-------------------------------------------------------------------------------------------------------------- | :-----------: | :-----------: | :--------------------------------------------------------------------------------: | +| | BGG_MultiSpec_vMPF | Multi-species background gas (VHS): Basic variable weighting and trace background species | nProcs=1,4 | | [Link](regressioncheck/NIG_Reservoir/BGG_MultiSpec_vMPF/readme.md) | +| 1 | CHEM_BGG_MultiSpec_TCE_Air_5Spec | Multi-species background gas: TCE rates for N2/O2 + N/O dissociation and N2 + O exchange | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_BGG_MultiSpec_TCE_Air_5Spec/readme.md) | +| 2 | CHEM_DeleteProduct | Reaction products are deleted after the chemical reaction | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_DeleteProduct/readme.md) | +| 3 | CHEM_EQUI_TCE_Air_5Spec | Reservoir of high-temperature air (N2, O2) | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec/readme.md) | +| 3 | CHEM_EQUI_TCE_Air_5Spec_Database | Reservoir of high-temperature air (N2, O2), using species/reaction data from the species database | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/readme.md) | +| 4 | CHEM_QK_multi-ionization_C_to_C6+ | QK impact ionization, from neutral to fully ionized | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_QK_multi-ionization_C_to_C6+/readme.md) | +| 5 | CHEM_RATES_BGG_diss_CO2 | Background gas: TCE rates for a dissociation: CO2 + CO/O <-> CO + O + CO/O | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_diss_CO2/readme.md) | +| 6 | CHEM_RATES_BGG_TCE_diss_QK_ion_CO2 | Background gas: TCE rates for a CO2 + e dissociation/ionization | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_BGG_TCE_diss_QK_ion_CO2/readme.md) | +| 7 | CHEM_RATES_diss_recomb_CH4 | TCE rates for a (non-linear) polyatomic dissociation + recombination: CH4 + M <-> CH3 + H + M | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CH4/readme.md) | +| 8 | CHEM_RATES_diss_recomb_CO2 | TCE rates for a (linear) polyatomic dissociation + recombination: CO2 + M <-> CO + O + M | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_CO2/readme.md) | +| 9 | CHEM_RATES_diss_recomb_N2 | TCE rates for a diatomic dissociation + recombination: N2 + M <-> N + N + M | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_diss_recomb_N2/readme.md) | +| 10 | CHEM_RATES_exchange_CH4_H | TCE rates for an exchange: CH4 + H <-> CH3 + H2 | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_exchange_CH3/readme.md) | +| 11 | CHEM_RATES_QK_diss_ion_N2 | QK rates for a dissociation and ionization : N2 + M -> N + N + M and N2 + M -> N2+ e- + M | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_ion_N2/readme.md) | +| 12 | CHEM_RATES_QK_diss_N2 | QK rates for a dissociation : N2 + M -> N + N + M | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/readme.md) | +| 13 | CHEM_RATES_QK_ionization-recomb_H | QK rates for ionization and recombination: H + e <-> HIon + e + e | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_QK_ionization-recomb_H/readme.md) | +| 14 | CHEM_RATES_QK_recomb_N2 | QK rates for a recombination: N + N + M -> N2 + M | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_QK_recomb_N2/readme.md) | +| 15 | CHEM_RATES_XSec_Chem_H2_Plasma | Testing total collision rates through cross-section data (H2+e/H/HIon1/H2Ion1/H3Ion1) | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/readme.md) | +| 15 | CHEM_RATES_XSec_Chem_H2_Plasma_Database | Testing total collision rates through cross-section data (H2+e/H/HIon1/H2Ion1/H3Ion1) from the species database | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/readme.md) | +| 16 | CHEM_RATES_XSec_Chem_Ar-e_100keV | Testing reaction rates through cross-section data (Ar+e: 1 reaction path, relativistic velocity) | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_Ar-e_100keV/readme.md) | +| 16 | CHEM_RATES_XSec_Chem_H2-e | Testing reaction rates through cross-section data (H2+e: EFFECTIVE, 3 reaction paths, vib. relax.) | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e/readme.md) | +| 16 | CHEM_RATES_XSec_Chem_H2-e_ELASTIC | Testing reaction rates through cross-section data (H2+e: ELASTIC, 3 reaction paths, vib. relax.) | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/readme.md) | +| 17 | CHEM_RATES_XSec_Chem_H2-H2Ion1 | Testing reaction rates through cross-section data (H2+H2Ion: 3 reaction paths) | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H2Ion1/readme.md) | +| 18 | CHEM_RATES_XSec_Chem_H2-H3Ion1 | Testing reaction rates through cross-section data (H2+H3Ion: 4 reaction paths) | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion1/readme.md) | +| 19 | MCC_BGG_MultiSpec_XSec | Multi-species background gas: Collision rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec/readme.md) | +| 20 | MCC_BGG_MultiSpec_XSec_Elec | Multi-species background gas: Electronic relaxation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Elec/readme.md) | +| 21 | MCC_BGG_MultiSpec_XSec_Vib | Multi-species background gas: Vibrational relaxation probabilities through cross-section data | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_Vib/readme.md) | +| 22 | MCC_BGG_MultiSpec_XSec_TCE_QK_Chem | Multi-species background gas: QK ionization and TCE dissociation | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_TCE_QK_Chem/readme.md) | +| 23 | MCC_BGG_MultiSpec_XSec_vMPF | Multi-species background gas (MCC/XSec): Basic variable weighting and trace background species | nProcs=1,4 | | [Link](regressioncheck/NIG_Reservoir/MCC_BGG_MultiSpec_XSec_vMPF/readme.md) | +| 24 | RELAX_CH4 | Rotational, vibrational relaxation towards equilibrium temperature | nProcs=2 | | [Link](regressioncheck/NIG_Reservoir/RELAX_CH4/readme.md) | +| 25 | RELAX_CH4_PDR | Relaxation towards equilibrium with prohibiting double relaxation (single/multi mode for CH4) | nProcs=2 | | [Link](regressioncheck/NIG_Reservoir/RELAX_CH4_PDR/readme.md) | +| 26 | RELAX_CO2 | Rotational, vibrational relaxation towards equilibrium temperature | nProcs=2 | | [Link](regressioncheck/NIG_Reservoir/RELAX_CO2/readme.md) | +| 27 | RELAX_N2 | Rotational, vibrational, electronic relaxation of N2 | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/RELAX_N2/readme.md) | +| 27 | RELAX_N2_XSec_Elec | Electronic excitation of N2 to 13 eV level using cross-section data | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/RELAX_N2_XSec_Elec/readme.md) | +| 28 | RELAX_N2Ion | Rotational, vibrational, electronic relaxation of N2Ion | nProcs=1 | | [Link](regressioncheck/NIG_Reservoir/RELAX_N2Ion/readme.md) | +| 29 | VarRelaxProb_cold | Relaxation of a cold reservoir of N2 with variable relaxation probabilities | nProcs=1,2,3 | | [Link](regressioncheck/NIG_Reservoir/VarRelaxProb_cold/readme.md) | +| 30 | VarRelaxProb_hot | Relaxation of a hot reservoir of N2 and O2 with variable relaxation probabilities | nProcs=2,3 | | [Link](regressioncheck/NIG_Reservoir/VarRelaxProb_hot/readme.md) | +| 31 | VarRelaxProb_Restart | Initial Autorestart with variable relaxation probabilities | nProcs=1,2 | | [Link](regressioncheck/NIG_Reservoir/VarRelaxProb_Restart/readme.md) | ### NIG_tracking_DSMC @@ -412,65 +414,66 @@ Pure Poisson solver without particles: [Link to build](regressioncheck/NIG_poiss Test all features of photoionization within the HDG solver (without interpolation and deposition): [Link to build](regressioncheck/NIG_Photoionization/builds.ini). -| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | -| :-----: | :---------------------------: | :--------------: | :--------------------------------------------------------------------------------------------------------------------------: | :------------: | :--------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------: | -| 1 | surface_emission/ | | Photoionization: Surface Emission via SEE | nProcs= 1,2,5,8 | the total number of real electrons in the system with an analytical expression | [Link](regressioncheck/NIG_Photoionizationsurface_emission/readme.md) | -| 2 | surface_emission_rectangle/ | | Secondary electron emission from a surface (rectangle), PartBCIndex=1 (BoundaryParticleOutput), emission-specific MPF (vMPF) | nProcs= 1,2,5,8 | the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionizationsurface_emission_rectangle/readme.md) | -| 3 | surface_emission_rectangle_ray_trace/ | | Photoionization: Surface Emission via SEE for ray tracing | nProcs= 1,2,5,8,11,25 | RadiationSurfState.h5 and RadiationVolState.h5 with reference files, the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionizationsurface_emission_rectangle_ray_trace/readme.md) | +| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | +| :-----: | :--------------------------------------------------------: | :--------------: | :--------------------------------------------------------------------------------------------------------------------------: | :-------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------: | +| 1 | surface_emission/ | | Photoionization: Surface Emission via SEE | nProcs= 1,2,5,8 | the total number of real electrons in the system with an analytical expression | [Link](regressioncheck/NIG_Photoionizationsurface_emission/readme.md) | +| 2 | surface_emission_rectangle/ | | Secondary electron emission from a surface (rectangle), PartBCIndex=1 (BoundaryParticleOutput), emission-specific MPF (vMPF) | nProcs= 1,2,5,8 | the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionizationsurface_emission_rectangle/readme.md) | +| 3 | surface_emission_rectangle_ray_trace/ | | Photoionization: Surface Emission via SEE for ray tracing | nProcs= 1,2,5,8,11,25 | RadiationSurfState.h5 and RadiationVolState.h5 with reference files, the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionizationsurface_emission_rectangle_ray_trace/readme.md) | | 4 | surface_emission_rectangle_ray_trace_high-order/ | | Photoionization: Surface Emission via SEE for ray tracing with high-order refinement | nProcs= 1,2,5,8,11,25 | RadiationSurfState.h5 and RadiationVolState.h5 with reference files, the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionizationsurface_emission_rectangle_ray_trace_high-order/readme.md) | | 5 | volume_emission/ | | Photoionization in the volume (circle and honeycomb) | nProcs= 1,2,5,8 | the total number of real electrons in the system with an analytical expression | [Link](regressioncheck/NIG_Photoionizationvolume_emission/readme.md) | | 6 | volume_emission_polychromatic/ | | Photoionization in the volume with polychromatic photon spectrum and energy-dependent cross-section data | nProcs= 1,2,5,8 | the total number of real electrons in the system with a reference solution and particle numbers for different MPFs | [Link](regressioncheck/NIG_Photoionizationvolume_emission_polychromatic/readme.md) | -| 7 | volume_emission_rectangle/ | | Photoionization in the volume (rectangle) | nProcs= 1,2,5,8 | the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionizationvolume_emission_rectangle/readme.md) | -| 8 | volume_emission_rectangle_ray_trace_high-order/ | | Photoionization in the volume (rectangle) for ray tracing with high-order refinement | nProcs= 1,2,5,8 | the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionizationvolume_emission_rectangle_ray_trace_high-order/readme.md) | -| 9 | volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/ | | Photoionization in the volume (rectangle) for ray tracing with high-order refinement and bilinear tracking | nProcs= 1,2,5,8 | the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionizationvolume_emission_rectangle_ray_trace_high-order_Cubit_3to1/readme.md) | -| 10 | volume_emission_vMPF/ | | Photoionization in the volume with vMPF | nProcs= 1,2,5,8 | the total number of real electrons in the system with an analytical expression and particle numbers for different MPFs | [Link](regressioncheck/NIG_Photoionizationvolume_emission_vMPF/readme.md) | +| 7 | volume_emission_rectangle/ | | Photoionization in the volume (rectangle) | nProcs= 1,2,5,8 | the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionizationvolume_emission_rectangle/readme.md) | +| 8 | volume_emission_rectangle_ray_trace_high-order/ | | Photoionization in the volume (rectangle) for ray tracing with high-order refinement | nProcs= 1,2,5,8 | the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionizationvolume_emission_rectangle_ray_trace_high-order/readme.md) | +| 9 | volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/ | | Photoionization in the volume (rectangle) for ray tracing with high-order refinement and bilinear tracking | nProcs= 1,2,5,8 | the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionizationvolume_emission_rectangle_ray_trace_high-order_Cubit_3to1/readme.md) | +| 10 | volume_emission_vMPF/ | | Photoionization in the volume with vMPF | nProcs= 1,2,5,8 | the total number of real electrons in the system with an analytical expression and particle numbers for different MPFs | [Link](regressioncheck/NIG_Photoionizationvolume_emission_vMPF/readme.md) | ### NIG_Radiation Test all features of radiation timedisc (cell-local emission using the radiation solver and radiative transfer using the radiative transfer solver): [Link to build](regressioncheck/NIG_Radiation/builds.ini). -| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | -| :-----: | :---------------------------: | :--------------: | :--------------------------------------------------------------------------------------------------------------------------: | :------------: | :--------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------: | -| 1 | Rad_Emission_SingleCell_N/ | | Radiation: Cell-local emission of atomic nitrogen | nProcs= 1 | emission spectrum of N | [Link](regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/readme.md) | -| 2 | Rad_Emission_SingleCell_O/ | | Radiation: Cell-local emission of atomic oxygen | nProcs= 1 | emission spectrum of O | [Link](regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/readme.md) | -| 3 | RadTrans_Cylinder_2D / | | Radiation: two-dimensional rotationally symmetric radiative transfer (semi-infinite cylinder with with a homogeneous medium emitting blackbody radiation) | nProcs= 1,2,3,6 | divergence of the heatflux | [Link](regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/readme.md) | -| 4 | RadTrans_Cylinder_3D / | | Radiation: three-dimensional radiative transfer (semi-infinite cylinder with with a homogeneous medium emitting blackbody radiation) | nProcs= 1,2,3,6 | divergence of the heatflux | [Link](regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/readme.md) | +| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | +| :-----: | :-----------------------: | :--------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------: | :------------------------: | :-----------------------------------------------------------------------: | +| 1 | Rad_Emission_SingleCell_N | | Radiation: Cell-local emission of atomic nitrogen | nProcs= 1 | emission spectrum of N | [Link](regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/readme.md) | +| 2 | Rad_Emission_SingleCell_O | | Radiation: Cell-local emission of atomic oxygen | nProcs= 1 | emission spectrum of O | [Link](regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/readme.md) | +| 3 | RadTrans_Cylinder_2D | | Radiation: two-dimensional rotationally symmetric radiative transfer (semi-infinite cylinder with with a homogeneous medium emitting blackbody radiation) | nProcs= 1,2,3,6 | divergence of the heatflux | [Link](regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/readme.md) | +| 4 | RadTrans_Cylinder_3D | | Radiation: three-dimensional radiative transfer (semi-infinite cylinder with with a homogeneous medium emitting blackbody radiation) | nProcs= 1,2,3,6 | divergence of the heatflux | [Link](regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/readme.md) | ## Weekly Overview of the test cases performed every week. -| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | -| :-----: | :-----------------------------------------------------: | :-------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------- | :---------------------------: | :-------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------: | -| 1 | plasma_wave | [PIC-Maxwell](regressioncheck/WEK_PIC_maxwell/builds.ini) | Maxwell-PIC,SF1D, FastPeriodic | nProcs=6, IMEX for ImplicitO4 | W_el LineIntegration (FieldAnalyze.csv) | [Link](regressioncheck/WEK_PIC_maxwell/plasma_wave/readme.md) | -| ** | 3D_periodic_shape_function | ** | Maxwell-PIC,shape function deposition over periodic sides 3D | nProcs= 1,2,6,10,20 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_shape_function/readme.md) | -| ** | 3D_periodic_CVWM | ** | Maxwell-PIC,CVWM over periodic sides 3D with 1000 elements | nProcs= 1,2,6,10,15,20,30 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM/readme.md) | -| ** | 3D_periodic_CVWM_split2hex | ** | Maxwell-PIC,CVWM over periodic sides 3D and split2hex grid with 768 hex elements | nProcs= 1,2,6,10,15,20,30 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM_split2hex/readme.md) | -| 2 | HEMPT-90deg-symmetry | [PIC-HDG](regressioncheck/WEK_PIC_poisson/builds.ini) | create mesh (hopr) and external magnetic field (superB) and use both in simulation | nProcs=1,10,20 | | [Link](regressioncheck/WEK_PIC_poisson/HEMPT-90deg-symmetry/readme.md) | -| 3 | CHEM_EQUI_diss_CH4 | [Reservoir](regressioncheck/WEK_Reservoir/builds.ini) | Relaxation into equilibrium with dissociation and recombination of CH4 | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4/readme.md) | -| ** | CHEM_EQUI_exch_CH3-H | ** | Relaxation into equilibrium with exchange/radical reaction of CH3+H <-> CH2+H2 | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_exch_CH3-H/readme.md) | -| ** | CHEM_EQUI_ionization_H | ** | Relaxation into equilibrium with ionization and recombination of H | nProcs=1 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_ionization_H/readme.md) | -| ** | CHEM_EQUI_diss_CH4_2DAxi_RadWeight | ** | Analogous to CHEM_EQUI_diss_CH4 with 2D axisymmetric mesh with radial weighting | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4_2DAxi_RadWeight/readme.md) | -| ** | CHEM_EQUI_Titan_Chemistry | ** | Reservoir simulation of conditions similar to Titan's atmosphere (18 species, 28 reactions) | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry/readme.md) | -| ** | MCC_MultiSpec_XSec | ** | Multi-species reservoir: Collision rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/MCC_MultiSpec_XSec/readme.md) | -| ** | MCC_MultiSpec_XSec_TCE_QK_Chem | ** | Multi-species reservoir: QK ionization and TCE dissociation | nProcs=2 | | [Link](regressioncheck/WEK_Reservoir/MCC_MultiSpec_XSec_Chem/readme.md) | -| ** | BGG_MultiSpec_XSec_Elec | ** | Background gas reservoir with VHS: Electronic excitation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/BGG_MultiSpec_XSec_Elec/readme.md) | -| ** | MCC_N2_XSec_Elec | ** | Regular reservoir with MCC/VHS: Electronic excitation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/MCC_N2_XSec_Elec/readme.md) | -| ** | 1D_Sod_Shocktube | [DSMC](regressioncheck/WEK_DSMC/builds.ini) | 1D test case shock tube | nProcs=6 | DSMCState | [Link](regressioncheck/WEK_Reservoir/1D_Sod_Shocktube/readme.md) | -| 4 | 2DAxi_ChannelFlow_ConstPressure_TruncAverage | ** | 2D axisymmetric: Pressure gradient driven pipe flow with adaptive surface flux, using a truncated running average | nProcs=6 | PartAnalyze: Average pressure and mass flow rate at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/readme.md) | -| 4 | ChannelFlow_AdaptiveBoundary_ConstMassflow | ** | Constant massflow driven channel flow with adaptive surface flux | nProcs=6 | PartAnalyze: Average pressure and mass flow rate at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/readme.md) | -| 4 | ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage | ** | Pressure gradient driven channel flow with adaptive surface flux, using a fixed average for the sampling | nProcs=6 | PartAnalyze: Average pressure at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/readme.md) | -| 4 | ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation | ** | Pressure gradient driven channel flow with adaptive surface flux, using a relaxation factor for the sampling | nProcs=6 | PartAnalyze: Average pressure at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/readme.md) | -| 4 | ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage | ** | Pressure gradient driven channel flow with adaptive surface flux, using a truncated running average for the sampling | nProcs=6 | PartAnalyze: Average pressure at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/readme.md) | -| ** | Flow_Argon_Cylinder_Curved | ** | Hypersonic Argon flow around a cylinder (pseudo 2D) with DSMC on a curved mesh | nProcs=2 | | [Link](regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_Curved/readme.md) | -| ** | Flow_Argon_Cylinder_LinearMesh | ** | Hypersonic Argon flow around a cylinder (2D) with DSMC on a linear mesh | nProcs=4 | | [Link](regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/readme.md) | -| ** | Flow_N2_70degCone | ** | 2D axisymmetric 70 degree cone | nProcs=6 | Surface Sampling, includes CalcSurfaceImpact and adaptive wall temperature | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) | -| ** | fully_periodic_3D | ** | Periodic boundary conditions in all three directions | nProcs=10,20,30 | Check whether particles end up outside of the domain | [Link](regressioncheck/WEK_DSMC/fully_periodic_3D/readme.md) | -| ** | Surface_Sticking_Coefficient | ** | Channel flow with a sticking coefficient model | nProcs=5 | Surface sampling | [Link](regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/readme.md) | -| 5 | Flow_N2_70degCone | [BGK](regressioncheck/WEK_BGKFlow/builds.ini) | 2D axisymmetric 70 degree cone | nProcs=6 | | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) | -| ** | MultiSpec_Supersonic_Couette_Ar-He | ** | Supersonic Couette flow with an Ar-He mixture | nProcs=5 | Temperature | [Link](regressioncheck/WEK_DSMC/MultiSpec_Supersonic_Couette_Ar-He/readme.md) | -| ** | MultiSpec_Supersonic_Couette_CO2-N2 | ** | Supersonic Couette flow with a CO2-N2 mixture | nProcs=5 | Temperature | [Link](regressioncheck/WEK_DSMC/MultiSpec_Supersonic_Couette_CO2-N2/readme.md) | -| 6 | Flow_N2_70degCone | [FP](regressioncheck/WEK_FPFlow/builds.ini) | 2D axisymmetric 70 degree cone | nProcs=6 | Surface Sampling, includes CalcSurfaceImpact | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) | -| 7 | Flow_N2-N_70degConeHot | [DSMC](regressioncheck/WEK_DSMC/builds.ini) | 2D axisymmetric 70 degree cone (hotter and with N to get some radiation in the next step) | nProcs=6 | Surface Sampling | [Link](regressioncheck/WEK_DSMC/Flow_N2-N_70degConeHot/readme.md) | -| ** | Flow_N2-N_70degConeHot | [Radiation](regressioncheck/WEK_Radiation/builds.ini) | using previously simulated WEK_DSMC/Flow_N2_70degCone results to check radiation tool chain (write out DSMC results, readin those results, radiation solver, radiative transfer, piclas2vtk) | nProcs=6 | Surface heat flux | [Link](regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/readme.md) | +| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | +| :-----: | :-----------------------------------------------------: | :-------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------: | :-------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------: | +| 1 | plasma_wave | [PIC-Maxwell](regressioncheck/WEK_PIC_maxwell/builds.ini) | Maxwell-PIC,SF1D, FastPeriodic | nProcs=6, IMEX for ImplicitO4 | W_el LineIntegration (FieldAnalyze.csv) | [Link](regressioncheck/WEK_PIC_maxwell/plasma_wave/readme.md) | +| ** | 3D_periodic_shape_function | ** | Maxwell-PIC,shape function deposition over periodic sides 3D | nProcs= 1,2,6,10,20 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_shape_function/readme.md) | +| ** | 3D_periodic_CVWM | ** | Maxwell-PIC,CVWM over periodic sides 3D with 1000 elements | nProcs= 1,2,6,10,15,20,30 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM/readme.md) | +| ** | 3D_periodic_CVWM_split2hex | ** | Maxwell-PIC,CVWM over periodic sides 3D and split2hex grid with 768 hex elements | nProcs= 1,2,6,10,15,20,30 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM_split2hex/readme.md) | +| 2 | HEMPT-90deg-symmetry | [PIC-HDG](regressioncheck/WEK_PIC_poisson/builds.ini) | create mesh (hopr) and external magnetic field (superB) and use both in simulation | nProcs=1,10,20 | | [Link](regressioncheck/WEK_PIC_poisson/HEMPT-90deg-symmetry/readme.md) | +| 3 | CHEM_EQUI_diss_CH4 | [Reservoir](regressioncheck/WEK_Reservoir/builds.ini) | Relaxation into equilibrium with dissociation and recombination of CH4 | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4/readme.md) | +| ** | CHEM_EQUI_exch_CH3-H | ** | Relaxation into equilibrium with exchange/radical reaction of CH3+H <-> CH2+H2 | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_exch_CH3-H/readme.md) | +| ** | CHEM_EQUI_ionization_H | ** | Relaxation into equilibrium with ionization and recombination of H | nProcs=1 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_ionization_H/readme.md) | +| ** | CHEM_EQUI_diss_CH4_2DAxi_RadWeight | ** | Analogous to CHEM_EQUI_diss_CH4 with 2D axisymmetric mesh with radial weighting | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4_2DAxi_RadWeight/readme.md) | +| ** | CHEM_EQUI_Titan_Chemistry | ** | Reservoir simulation with Titan's atmosphere (18 species, 28 reactions) | nProcs=6 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry/readme.md) | +| ** | CHEM_EQUI_Titan_Chemistry_Database | ** | Reservoir simulation with Titan's atmosphere (18 species, 28 reactions) using species/reaction data from the species database | nProcs=6 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/readme.md) | +| ** | MCC_MultiSpec_XSec | ** | Multi-species reservoir: Collision rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/MCC_MultiSpec_XSec/readme.md) | +| ** | MCC_MultiSpec_XSec_TCE_QK_Chem | ** | Multi-species reservoir: QK ionization and TCE dissociation | nProcs=2 | | [Link](regressioncheck/WEK_Reservoir/MCC_MultiSpec_XSec_Chem/readme.md) | +| ** | BGG_MultiSpec_XSec_Elec | ** | Background gas reservoir with VHS: Electronic excitation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/BGG_MultiSpec_XSec_Elec/readme.md) | +| ** | MCC_N2_XSec_Elec | ** | Regular reservoir with MCC/VHS: Electronic excitation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/MCC_N2_XSec_Elec/readme.md) | +| ** | 1D_Sod_Shocktube | [DSMC](regressioncheck/WEK_DSMC/builds.ini) | 1D test case shock tube | nProcs=6 | DSMCState | [Link](regressioncheck/WEK_Reservoir/1D_Sod_Shocktube/readme.md) | +| 4 | 2DAxi_ChannelFlow_ConstPressure_TruncAverage | ** | 2D axisymmetric: Pressure gradient driven pipe flow with adaptive surface flux, using a truncated running average | nProcs=6 | PartAnalyze: Average pressure and mass flow rate at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/readme.md) | +| 4 | ChannelFlow_AdaptiveBoundary_ConstMassflow | ** | Constant massflow driven channel flow with adaptive surface flux | nProcs=6 | PartAnalyze: Average pressure and mass flow rate at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/readme.md) | +| 4 | ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage | ** | Pressure gradient driven channel flow with adaptive surface flux, using a fixed average for the sampling | nProcs=6 | PartAnalyze: Average pressure at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/readme.md) | +| 4 | ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation | ** | Pressure gradient driven channel flow with adaptive surface flux, using a relaxation factor for the sampling | nProcs=6 | PartAnalyze: Average pressure at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/readme.md) | +| 4 | ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage | ** | Pressure gradient driven channel flow with adaptive surface flux, using a truncated running average for the sampling | nProcs=6 | PartAnalyze: Average pressure at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/readme.md) | +| ** | Flow_Argon_Cylinder_Curved | ** | Hypersonic Argon flow around a cylinder (pseudo 2D) with DSMC on a curved mesh | nProcs=2 | | [Link](regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_Curved/readme.md) | +| ** | Flow_Argon_Cylinder_LinearMesh | ** | Hypersonic Argon flow around a cylinder (2D) with DSMC on a linear mesh | nProcs=4 | | [Link](regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/readme.md) | +| ** | Flow_N2_70degCone | ** | 2D axisymmetric 70 degree cone | nProcs=6 | Surface Sampling, includes CalcSurfaceImpact and adaptive wall temperature | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) | +| ** | fully_periodic_3D | ** | Periodic boundary conditions in all three directions | nProcs=10,20,30 | Check whether particles end up outside of the domain | [Link](regressioncheck/WEK_DSMC/fully_periodic_3D/readme.md) | +| ** | Surface_Sticking_Coefficient | ** | Channel flow with a sticking coefficient model | nProcs=5 | Surface sampling | [Link](regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/readme.md) | +| 5 | Flow_N2_70degCone | [BGK](regressioncheck/WEK_BGKFlow/builds.ini) | 2D axisymmetric 70 degree cone | nProcs=6 | | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) | +| ** | MultiSpec_Supersonic_Couette_Ar-He | ** | Supersonic Couette flow with an Ar-He mixture | nProcs=5 | Temperature | [Link](regressioncheck/WEK_DSMC/MultiSpec_Supersonic_Couette_Ar-He/readme.md) | +| ** | MultiSpec_Supersonic_Couette_CO2-N2 | ** | Supersonic Couette flow with a CO2-N2 mixture | nProcs=5 | Temperature | [Link](regressioncheck/WEK_DSMC/MultiSpec_Supersonic_Couette_CO2-N2/readme.md) | +| 6 | Flow_N2_70degCone | [FP](regressioncheck/WEK_FPFlow/builds.ini) | 2D axisymmetric 70 degree cone | nProcs=6 | Surface Sampling, includes CalcSurfaceImpact | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) | +| 7 | Flow_N2-N_70degConeHot | [DSMC](regressioncheck/WEK_DSMC/builds.ini) | 2D axisymmetric 70 degree cone (hotter and with N to get some radiation in the next step) | nProcs=6 | Surface Sampling | [Link](regressioncheck/WEK_DSMC/Flow_N2-N_70degConeHot/readme.md) | +| ** | Flow_N2-N_70degConeHot | [Radiation](regressioncheck/WEK_Radiation/builds.ini) | using previously simulated WEK_DSMC/Flow_N2_70degCone results to check radiation tool chain (write out DSMC results, readin those results, radiation solver, radiative transfer, piclas2vtk) | nProcs=6 | Surface heat flux | [Link](regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/readme.md) | diff --git a/docs/documentation/userguide/features-and-models/BGG.md b/docs/documentation/userguide/features-and-models/BGG.md index e40c272dc..86fd673bf 100644 --- a/docs/documentation/userguide/features-and-models/BGG.md +++ b/docs/documentation/userguide/features-and-models/BGG.md @@ -77,6 +77,7 @@ The first flag enables the variables weighting factor feature in general (detail Using the values above, each collision with the first background species will result in 100 collision tests using the simulation particle (ie. not the background species) and randomly generated background particles. Consequently, the number of samples for the trace species will be increased and simulation particles with the weighting factor of the trace background species will be introduced into the simulation. +(sec:background-gas-collision-xsec)= ## Cross-section based collision probability For modelling of particle collisions with the Particle-in-Cell method, often the Monte Carlo Collision (MCC) algorithm is utilized. diff --git a/docs/documentation/userguide/features-and-models/DSMC.md b/docs/documentation/userguide/features-and-models/DSMC.md index 4477736a1..1ec6de4b2 100644 --- a/docs/documentation/userguide/features-and-models/DSMC.md +++ b/docs/documentation/userguide/features-and-models/DSMC.md @@ -23,7 +23,7 @@ exchange (by default including the rotational and vibrational energy treatment). the parameters for the internal energy exchange (Section {ref}`sec:DSMC-relaxation`) and chemical reactions (Section {ref}`sec:DSMC-chemistry`). -Additionally, species parameter can be read from a database instead of using the `DSMC.ini` file. The procedure is described in Section {ref}`sec:SpeciesDatabase` + A fixed ("manual") simulation time step $\Delta t$ is defined by @@ -33,14 +33,16 @@ A fixed ("manual") simulation time step $\Delta t$ is defined by ## Species Definition For the DSMC simulation, additional species-specific parameters (collision model parameters, characteristic vibrational -temperature, etc.) are required. This file is also utilized for the definition of chemical reactions paths. To define a species, -its name as well as an `InteractionID` have to be defined +temperature, etc.) are required. This file is also utilized for the definition of chemical reactions paths. To avoid the manual input, +species parameter can be read from a database instead. The procedure is described in Section {ref}`sec:unified-species-database`. + +To define a species, its name as well as an `InteractionID` have to be defined Part-Species1-SpeciesName = CH4 Part-Species1-InteractionID = 2 -The name is at the moment only utilized to retrieve the electronic energy levels from an additional database. The interaction ID -determines the type of a species as follows +During the file-based parameter read-in, name is only utilized to retrieve the electronic energy levels from an additional database. +The interaction ID determines the type of a species as follows | ID | Type | | ---: | ---------------------------------- | diff --git a/docs/documentation/userguide/features-and-models/SpeciesDatabase.md b/docs/documentation/userguide/features-and-models/SpeciesDatabase.md index 3bad607f7..5127f85bd 100644 --- a/docs/documentation/userguide/features-and-models/SpeciesDatabase.md +++ b/docs/documentation/userguide/features-and-models/SpeciesDatabase.md @@ -1,129 +1,83 @@ -(sec:SpeciesDatabase)= +(sec:unified-species-database)= # Unified Species Database -A unified database of species data, electronic states, cross-sections, and chemistry models can be used as a more convenient alternative input for the simulations. The use of the database allows to reduce the length of the input files and ensures a meaningful storage of the parameters, together with the reference from which they are taken. - -An predefined database (`SpeciesDatabase.h5`) is provided at the top level of the PICLas directory. This database contains over 40 of the most common species in PICLas simulations and the most common complex chemical reaction models with 300 single reactions. In addition, several cross-section models are included. +A unified database of species data, electronic states, cross-sections, and chemistry models can be used as a more convenient alternative input for the simulations. The use of the database allows to reduce the length of the input files and ensures a consistent storage of the parameters, together with the respective reference. The database (`SpeciesDatabase.h5`) is provided at the top level of the PICLas directory. It contains over 40 of the most common species in PICLas simulations and the most common complex chemical reaction models with 300 single reactions. In addition, several cross-section models are included. This feature is still under development and the provided species & reaction data should be treated carefully as we are in process of verifying the data. To read in data from a given species database, the database name must be specified in the `parameter.ini` file of the simulation Particles-Species-Database = SpeciesDatabase.h5 -When reading the database, all available parameters are taken directly from the database by default. Missing parameters can be added as usual in the `parameter.ini` or the `DSMC.ini` files. If no database is specified or the specified database is not available, the parameters are read from the `parameter.ini` and the `DSMC.ini` files as described in the sections above. - -All data available in the database and how to choose between different input forms is described in the following sections for the different data types available. An example where the given database is used can be found in `regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database`. +When reading the database, all available parameters are taken directly from the database by default. Missing parameters can be added as usual in the `parameter.ini` or the `DSMC.ini` files. If no database is specified or the specified database is not available, the parameters are read from the regular parameter files as described in the sections above. All data available in the database and how to choose between different input forms is described in the following sections for the different data types available. An example where the given database is used can be found in `regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database`. For instructions on extending the existing database or creating a new one, please refer to Chapter {ref}`sec:tools-usd` for instructions. -(ssec:Species)= -## Species-specific data +(ssec:usd-species)= +## Species data To include a species in a simulation, it has to be selected by its name with the following command: Part-Species1-SpeciesName = CH4 -The database follows the standard nomenclature for atoms and molecules. Cations are given by +The database follows the PICLas nomenclature for atoms and molecules. Cations are given by Part-Species4-SpeciesName = CH3Ion1 -where the number after 'Ion' refers to the degree of ionization. The database contains general species data such as the mass, charge and number of atoms, as well as with VHS and VSS parameters. For molecules, rotational and vibrational frequencies can be given as well. A complete list of available parameters and the corresponding variable names in the `DSMC.ini` input are given below. - - Part-Species1-SpeciesName - Part-Species1-MassIC - Part-Species1-ChargeIC - Part-Species1-PolyatomicMol - Part-Species1-InteractionID - Part-Species1-NumOfAtoms - Part-Species1-LinearMolec - Part-Species1-SymmetryFactor - Part-Species1-Tref - Part-Species1-dref - Part-Species1-omega - Part-Species1-alphaVSS - Part-Species1-CharaTempVibX - Part-Species1-CharaTempRotX - Part-Species1-Ediss_eV - Part-Species1-HeatOfFormation_K - Part-Species1-PreviousState - -Per default, all available parameters are read from the database. Species for which the parameters should be taken from the input files can be specified by an overwrite command. - - Part-Species1-DoOverwriteParameters = true - -If this flag is set, all parameters for this species need to be set manually. - -(ssec:Reaction)= -## Reaction data - -The database contains different chemistry models including various reactions. - -| Name | Description | Species | React. | Reference | -| :----------------------------------------: | :------------: | :---------: | :------: | :----: | -| Air_5Spec_8Reac_Laux1995 | Air without ions | 5 | 8 | M. Laux. Direkte Simulation verdünnter, reagierender Strömungen. PhD Thesis, University of Stuttgart, 1995. | -| Air_5Spec_8Reac_Park1993 | Air without ions | 8 | 8 | C. Park. Review of chemical-kinetic problems of future NASA missions. I - Earth entries. Journal of Thermophysics and Heat Transfer, 7(3):385–398, 1993. doi:10.2514/3.431. | -| Air_11Spec_27Reac_Park1993 | Air with ions | 11 | 27 | C. Park. Review of chemical-kinetic problems of future NASA missions. I - Earth entries. Journal of Thermophysics and Heat Transfer, 7(3):385–398, 1993. doi:10.2514/3.431. | -| Air_11Spec_43Reac_Farbar2008 | Air with ions and backward reaction rates| 11 | 43 | E. Farbar and I. Boyd. Simulation of Fire II Reentry Flow Using the Direct Simulation Monte Carlo Method. 2008. doi:10.2514/6.2008-4103. | -| Air_11Spec_51Reac_Park1993 | Air with ions | 11 | 51 | C. Park. Review of chemical-kinetic problems of future NASA missions. I - Earth entries. Journal of Thermophysics and Heat Transfer, 7(3):385–398, 1993. doi:10.2514/3.431. | -| Fe-in-Air_3Spec_7Reac_Voronov1997Plane2015 | Outgassing of iron into air | 3 | 7 | Voronov. G. A practical fit formula for ionization rate coefficients of atoms and ions by electron impact: Z= 1–28. Atomic Data and Nuclear Data Tables, 65(1):1–35, 1997. + J. M. Plane, W. Feng, and E. C. Dawkins. The mesosphere and metals: Chemistry and changes. Chemical reviews, 115(10):4497–4541, 2015. | -| CH4_7Spec_7Reac | | 7 | 7 | - | -| CH4-Ar_8Spec_7Reac | | 8 | 7 | - | -| CO2_6Spec_10Reac_Johnston2014 | | 6 | 10 | C. Johnston and A. Brandis. Modeling of nonequilibrium CO Fourth-Positive and CN Violet emission in CO2–N2 gases. Journal of Quantitative Spectroscopy and Radiative Transfer, 149:303–317, 2014. doi:10.1016/j.jqsrt.2014.08.025. | -| Mars_11Spec_27Reac_Johnston2014 | Mars without ions | 11 | 27 | C. Johnston and A. Brandis. Modeling of nonequilibrium CO Fourth-Positive and CN Violet emission in CO2–N2 gases. Journal of Quantitative Spectroscopy and Radiative Transfer, 149:303–317, 2014. doi:10.1016/j.jqsrt.2014.08.025. | -| Mars_16Spec_31Reac_Park1994 | Mars with ions | 16 | 31 | C. Park, J. T. Howe, R. L. Jaffe, and G. V. Candler. Review of chemical-kinetic problems of future NASA missions. II - Mars entries. Journal of Thermophysics and Heat Transfer, 8(1):9–23, 1994. doi:10.2514/3.496. | -| Mars_17Spec_42Reac_Johnston2014 | Mars with ions and O2+ | 17 | 42 | C. Johnston and A. Brandis. Modeling of nonequilibrium CO Fourth-Positive and CN Violet emission in CO2–N2 gases. Journal of Quantitative Spectroscopy and Radiative Transfer, 149:303–317, 2014. doi:10.1016/j.jqsrt.2014.08.025. | -| Titan_14Spec_24Reac_Savajano2011 | Titan without ions but with Argon | 14 | 24 | R. Savajano, R. Sobbia, M. Gaffuri, and P. Leyland. Reduced Chemical Kinetic Model for Titan Entries, International Journal of Chemical Engineering, vol. 2011, Article ID 970247, 2011. doi:10.1155/2011/970247. | -| Titan_18Spec_30Reac_Savajano2011 | Titan with ions but without Argon | 18 | 30 | R. Savajano, R. Sobbia, M. Gaffuri, and P. Leyland. Reduced Chemical Kinetic Model for Titan Entries, International Journal of Chemical Engineering, vol. 2011, Article ID 970247, 2011. doi:10.1155/2011/970247. | - -he database contains data for the TCE and QK model. Reactions to be included in the simulation are specified by their reaction equation or their chemical model: - - ! Reaction1: CH4 + M -> CH3 + H + M - DSMC-Reaction1-Reactants = (/1,0,0/) - DSMC-Reaction1-Products = (/2,0,3,0/) - DSMC-Reaction1-ReactionName = CH4+M_CH3_M+H - -The reaction name is generated automatically and follows a set convention, that is enforced inside the database. To ensure a correct read-in, all species in the chosen reactions must have a defined species name in the parameter.ini Reactants are ordered according to a predefined list, with nonreacting partners listed always at the end. The same general order is used for the products, however the nonreacting partners are given always at the second position. If one reaction appears in multiple models or with multiple parameter sets in the database an additional enumerator in the form of f.e. '#5' is given at the end of the reaction name. In these cases, the correct number needs to be supplied in the parameter.ini as well. - -If a chemistry model is defined, all reactions with this model are read-in from te database and no additional reaction names need to be supplied. The use of a set of reaction equations from the database can be initialized with the following command: - - ! Reaction set 1 - DSMC-ChemistryModel = Titan_14Spec_24Reac_Savajano2011 - -If the reaction parameters should be given manually in the parameter.ini, the following command can be set: - - DSMC-OverwriteReacDatabase = true +where the number after 'Ion' refers to the degree of ionization. The database contains general species data such as the mass, charge and number of atoms, as well as the VHS and VSS parameters. For molecules, rotational and vibrational frequencies can be given as well. Additionally, each species contains a dataset with the electronic energy levels. A complete list of the parameter and models is available in Section {ref}`sec:DSMC-species`. Per default, all available parameters are read from the database. While we are in the process of verifying the database, the table gives an overview over the already verified parameters and the respective data sources. In general, the source/reference will also be provided with the parameter in the database itself. -(sssec:Arrh-rates)= -### Arrhenius rates +| Parameter | Unit | Source (unless otherwise noted) | +| -------------------------------------------: | :--------: | :----------------------------------------------------------------------------------------------- | +| Heat of formation (at 298.15K) | Kelvin | [Active Thermochemical Tables (ATcT)](https://atct.anl.gov/) | -Arrhenius-type reaction rates needed for the Total-Collision-Energy model ({ref}`ssec:TCE`) can be taken directly from the database. Here, the Arrhenius prefactor and powerfactor, together with the activation energy is stored. + -(sssec:QK-model)= -### QK model -The dissociation energy used in the Quantum-Kinetic model ({ref}`ssec:QK`) is deposited in the species database. - -(ssec:El-states)= -## Electronic states - -The modelling of electronic relaxation follows the principle as described in {ref} `sec:DSMC-electronic-relaxation`. As for the species data, the electronic levels can be given separately by specifiying +It possible to revert to the regular parameter read-in from parameter files per species Part-Species1-DoOverwriteParameters = true - -In this case, the electronic relaxation data is taken from an additional Electronic-Database: + +If this flag is set, all parameters for this species need to be set manually and a separate electronic state database has to be provided: Particles-DSMCElectronicDatabase = DSMCSpecies_electronic_state_full_Data.h5 - -(ssec:Xsec-data)= -## Cross-section data -The use of the unififed species database for the cross-section data, follows the description given in Section {ref} `ssec:xsec-chemistry`. All reaction paths are again stored by their reaction names and can be called in the `parameter.ini`. +(ssec:usd-reaction)= +## Reaction data -(ssec:Overview)= -## Overview +The database contains different chemistry models including various reactions, utilizing the {ref}`ssec:TCE` model or {ref}`ssec:QK` model. For the TCE model, the Arrhenius prefactor, powerfactor and the activation energy are stored. For the QK model only dissociation energy of the molecule is required, which has been provided as a species parameter. +To utilize the read-in of reaction from the database, a chemistry model has to be defined. All reactions with this model are then read-in from te database and no additional parameter input is required: + + DSMC-ChemistryModel = Titan_14Spec_24Reac_Gokcen2007 + +| Name | Description | Species | React. | Reference | +| :----------------------------------------: | :---------------------------------------: | :-----: | :----: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Air_5Spec_8Reac_Laux1995 | Air without ions | 5 | 8 | M. Laux. *Direkte Simulation verdünnter, reagierender Strömungen.* PhD Thesis, University of Stuttgart, 1995. | +| Air_5Spec_8Reac_Park1993 | Air without ions | 8 | 8 | C. Park. *Review of chemical-kinetic problems of future NASA missions. I - Earth entries.* [Journal of Thermophysics and Heat Transfer, 7(3):385–398, 1993.](https://doi.org/10.2514/3.431) | +| Air_11Spec_27Reac_Park1993 | Air with ions | 11 | 27 | C. Park. *Review of chemical-kinetic problems of future NASA missions. I - Earth entries.* [Journal of Thermophysics and Heat Transfer, 7(3):385–398, 1993.](https://doi.org/10.2514/3.431) | +| Air_11Spec_43Reac_Farbar2008 | Air with ions and backward reaction rates | 11 | 43 | E. Farbar and I. Boyd. *Simulation of Fire II Reentry Flow Using the Direct Simulation Monte Carlo Method.* [40th Thermophysics Conference, 2008.](https://doi.org/10.2514/6.2008-4103) | +| Air_11Spec_51Reac_Park1993 | Air with ions | 11 | 51 | C. Park. *Review of chemical-kinetic problems of future NASA missions. I - Earth entries.* [Journal of Thermophysics and Heat Transfer, 7(3):385–398, 1993.](https://doi.org/10.2514/3.431) | +| Fe-in-Air_3Spec_7Reac_Voronov1997Plane2015 | Outgassing of iron into air | 3 | 7 | Voronov. G. *A practical fit formula for ionization rate coefficients of atoms and ions by electron impact: Z= 1–28.* [Atomic Data and Nuclear Data Tables, 65(1):1–35, 1997.](https://doi.org/10.1006/adnd.1997.0732) | +| | | | | J. M. Plane, W. Feng, and E. C. Dawkins. *The Mesosphere and Metals: Chemistry and Changes.* [Chemical Reviews, 115(10):4497–4541, 2015.](https://doi.org/10.1021/cr500501m) | +| CH4_7Spec_7Reac | | 7 | 7 | - | +| CH4-Ar_8Spec_7Reac | | 8 | 7 | - | +| CO2_6Spec_10Reac_Johnston2014 | | 6 | 10 | C. Johnston and A. Brandis. *Modeling of nonequilibrium CO Fourth-Positive and CN Violet emission in CO2–N2 gases.* [Journal of Quantitative Spectroscopy and Radiative Transfer, 149:303–317, 2014.](https://doi.org/10.1016/j.jqsrt.2014.08.025) | +| Mars_11Spec_27Reac_Johnston2014 | Mars without ions | 11 | 27 | C. Johnston and A. Brandis. *Modeling of nonequilibrium CO Fourth-Positive and CN Violet emission in CO2–N2 gases.* [Journal of Quantitative Spectroscopy and Radiative Transfer, 149:303–317, 2014.](https://doi.org/10.1016/j.jqsrt.2014.08.025) | +| Mars_16Spec_31Reac_Park1994 | Mars with ions | 16 | 31 | C. Park, J. T. Howe, R. L. Jaffe, and G. V. Candler. *Review of chemical-kinetic problems of future NASA missions. II - Mars entries.* [Journal of Thermophysics and Heat Transfer, 8(1):9–23, 1994.](https://doi.org/10.2514/3.496) | +| Mars_17Spec_42Reac_Johnston2014 | Mars with ions and O2+ | 17 | 42 | C. Johnston and A. Brandis. *Modeling of nonequilibrium CO Fourth-Positive and CN Violet emission in CO2–N2 gases.* [Journal of Quantitative Spectroscopy and Radiative Transfer, 149:303–317, 2014.](https://doi.org/10.1016/j.jqsrt.2014.08.025) | +| Titan_14Spec_24Reac_Gokcen2007 | Titan without ions but with Argon | 14 | 24 | R. Savajano, R. Sobbia, M. Gaffuri, and P. Leyland. *Reduced Chemical Kinetic Model for Titan Entries.* [International Journal of Chemical Engineering, vol. 2011, Article ID 970247, 2011.](https://doi.org/10.1155/2011/970247) | +| | | | | T. Gokcen. *N2-CH4-Ar Chemical Kinetic Model for Simulations of Atmospheric Entry to Titan.* [Journal of Thermophysics and Heat Transfer, 21(1):9–18, 2007.](https://doi.org/10.2514/1.22095) | +| Titan_18Spec_30Reac_Gokcen2007 | Titan with ions but without Argon | 18 | 30 | T. Gokcen. *N2-CH4-Ar Chemical Kinetic Model for Simulations of Atmospheric Entry to Titan.* [Journal of Thermophysics and Heat Transfer, 21(1):9–18, 2007.](https://doi.org/10.2514/1.22095) | + +Currently, these reactions cannot be utilized separately, but only as part of a chemistry model. + + +(ssec:usd-xsec-data)= +## Cross-section data +The use of the unififed species database for the cross-section data follows the description given in Section {ref}`sec:background-gas-collision-xsec` for collision and {ref}`sec:xsec-chemistry` for chemistry modelling, respectively. An example for is located in `regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database`. diff --git a/docs/documentation/userguide/tools.md b/docs/documentation/userguide/tools.md index 2cdba6992..e6ee0748f 100644 --- a/docs/documentation/userguide/tools.md +++ b/docs/documentation/userguide/tools.md @@ -116,8 +116,9 @@ Finally, the utilized cross-section data should be properly referenced by adding Users of cross-section data are encouraged to download the data directly from the [LXCat project website](https://fr.lxcat.net/home/) and to consider the guidelines regarding referencing and publication. -Chemical reaction can be added to the database manually using [HDF View](https://www.hdfgroup.org/downloads/hdfview/). -Make sure to re-open the file as `Read/Write` to be able to modify and create the dataset. +Reactions can be defined in a separate group as shown above, named by the product species, and added manually using h5py or +[HDF View](https://www.hdfgroup.org/downloads/hdfview/) (Make sure to re-open the file as `Read/Write` to be able to modify and create the dataset.). The ionization process from the LXCat database is not added as a reaction, +however, the cross-section can be used. An additional source for cross-sectional data for reactions is the [NIFS database](https://dbshino.nifs.ac.jp/nifsdb/). ## Userblock diff --git a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/PartAnalyze_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/PartAnalyze_ref.csv index d617e7eb9..94b3673e0 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/PartAnalyze_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec_Database/PartAnalyze_ref.csv @@ -1,502 +1,3 @@ 001-TIME,002-NumDens-Spe001,003-NumDens-Spe002,004-NumDens-Spe003,005-NumDens-Spe004,006-NumDens-Spe005,007-NumDens-Spe006,008-TempTra-001,009-TempTra-002,010-TempTra-003,011-TempTra-004,012-TempTra-005,013-TempTra-006,014-TempVib001,015-TempVib002,016-TempVib003,017-TempVib004,018-TempVib005,019-XiVibMean001,020-XiVibMean002,021-XiVibMean003,022-XiVibMean004,023-XiVibMean005,024-TempRot001,025-TempRot002,026-TempRot003,027-TempRot004,028-TempRot005,029-TempTotal001,030-TempTotal002,031-TempTotal003,032-TempTotal004,033-TempTotal005,034-TempTotal006 -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.93553694480606E+023,5.14528194062896E+022,0.00000000000000E+000,2.45006513886895E+023,0.00000000000000E+000,0.00000000000000E+000,3.00793987717752E+004,2.96144940204329E+004,0.00000000000000E+000,2.99817660197620E+004,0.00000000000000E+000,0.00000000000000E+000,2.96446452581148E+004,2.97769121171040E+004,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.88771739608870E+000,1.92464329725261E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.98996825890104E+004,2.96301612221258E+004,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.99080612925477E+004,2.96641617491133E+004,0.00000000000000E+000,2.98568409434945E+004 -2.00000000000000E-010,2.30236351428923E+020,9.81007062610192E+020,1.93438576304891E+023,5.09623158749845E+022,0.00000000000000E+000,2.45612135593915E+023,2.38401293156852E+004,3.04458934648506E+004,3.00408640736518E+004,2.95925903729921E+004,0.00000000000000E+000,2.99436564836146E+004,0.00000000000000E+000,0.00000000000000E+000,2.96679950537786E+004,2.96410320352895E+004,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.88780405039268E+000,1.92430231818178E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.98482790504293E+004,2.94740303706137E+004,0.00000000000000E+000,2.38401293156852E+004,3.04458934648506E+004,2.98827478316014E+004,2.95718079757066E+004,0.00000000000000E+000,2.98148155378221E+004 -4.00000000000000E-010,3.70380217516093E+020,1.91196274447497E+021,1.93368504371848E+023,5.04968380340522E+022,0.00000000000000E+000,2.46147685367891E+023,2.74555330859691E+004,2.80680282208478E+004,2.99938509294075E+004,2.95693350077252E+004,0.00000000000000E+000,2.98879837721058E+004,0.00000000000000E+000,0.00000000000000E+000,2.96471154451514E+004,2.96813684332063E+004,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.88772656962094E+000,1.92440386037421E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,2.98609591386653E+004,2.93202121001582E+004,0.00000000000000E+000,2.74555330859691E+004,2.80680282208478E+004,2.98602327669496E+004,2.95285158607854E+004,0.00000000000000E+000,2.97746421331568E+004 -6.00000000000000E-010,5.15529221677805E+020,2.96804687820328E+021,1.93293427300730E+023,4.99662933981507E+022,5.00513807454179E+018,2.46748301936836E+023,2.85214754514311E+004,2.89892282836771E+004,2.99511552857361E+004,2.93577070856354E+004,0.00000000000000E+000,2.98158173626130E+004,0.00000000000000E+000,0.00000000000000E+000,2.96781393919327E+004,2.96118893799376E+004,2.05105327381797E+004,0.00000000000000E+000,0.00000000000000E+000,1.88784165578012E+000,1.92422878505940E+000,1.86943949674332E+000,0.00000000000000E+000,0.00000000000000E+000,2.98007977679524E+004,2.94015331379726E+004,5.25265152401878E+004,2.85214754514311E+004,2.89892282836771E+004,2.98326673974591E+004,2.94410025702196E+004,2.08745168435296E+004,2.97402890472735E+004 -8.00000000000000E-010,7.25745020808560E+020,3.90901283621714E+021,1.93183314263090E+023,4.94908052810693E+022,1.50154142236254E+019,2.47323892815408E+023,2.94411392365477E+004,2.95943570668110E+004,2.99181407220195E+004,2.93527253505987E+004,2.71172550010618E+004,2.97983109146798E+004,0.00000000000000E+000,0.00000000000000E+000,2.96372686594057E+004,2.95348145993597E+004,2.05105327381797E+004,0.00000000000000E+000,0.00000000000000E+000,1.88768999269681E+000,1.92403361877962E+000,1.86943949674332E+000,0.00000000000000E+000,0.00000000000000E+000,2.97513251473665E+004,2.93223011721182E+004,2.88988663932434E+004,2.94411392365477E+004,2.95943570668110E+004,2.97927241408368E+004,2.93945358753900E+004,2.58380174792745E+004,2.97086375624449E+004 -1.00000000000000E-009,9.55981372237483E+020,5.14027680255442E+021,1.93068196087375E+023,4.88751732979006E+022,1.50154142236254E+019,2.48054642974291E+023,2.86367519768083E+004,2.88729957214178E+004,2.98255240715941E+004,2.93383050586245E+004,2.71172550010618E+004,2.97050414131076E+004,0.00000000000000E+000,0.00000000000000E+000,2.97142020157192E+004,2.94699994234608E+004,2.05105327381797E+004,0.00000000000000E+000,0.00000000000000E+000,1.88797513730629E+000,1.92386871608761E+000,1.86943949674332E+000,0.00000000000000E+000,0.00000000000000E+000,2.96687959591485E+004,2.93082704643405E+004,2.88988663932434E+004,2.86367519768083E+004,2.88729957214178E+004,2.97495032544195E+004,2.93662220350941E+004,2.58380174792745E+004,2.96512953388736E+004 -1.20000000000000E-009,1.01604302913198E+021,6.33149966429537E+021,1.93028154982779E+023,4.82695515908811E+022,3.50359665217926E+019,2.48680285233609E+023,2.86488503610051E+004,2.89706283152839E+004,2.97596292740443E+004,2.92320060506608E+004,5.73793472200044E+004,2.96364807448531E+004,0.00000000000000E+000,0.00000000000000E+000,2.98015029304215E+004,2.94922129109855E+004,2.09023606792952E+004,0.00000000000000E+000,0.00000000000000E+000,1.88829696003029E+000,1.92392531217716E+000,1.87183232009149E+000,0.00000000000000E+000,0.00000000000000E+000,2.95768781461610E+004,2.92050603603683E+004,3.22758305920694E+004,2.86488503610051E+004,2.89706283152839E+004,2.97180468104272E+004,2.92965254040990E+004,4.01370994346664E+004,2.96142981871033E+004 -1.40000000000000E-009,1.20623827596457E+021,7.23242451771289E+021,1.92933057359363E+023,4.78190891641723E+022,3.50359665217926E+019,2.49225845283734E+023,2.84840515907102E+004,2.95571224737320E+004,2.97185366401227E+004,2.91845834812080E+004,5.70006899465647E+004,2.96092630775555E+004,0.00000000000000E+000,0.00000000000000E+000,2.97433882732237E+004,2.93216638010649E+004,4.12624806804298E+004,0.00000000000000E+000,0.00000000000000E+000,1.88808293446916E+000,1.92348861369476E+000,1.93435915210772E+000,0.00000000000000E+000,0.00000000000000E+000,2.95928819428820E+004,2.91148921697456E+004,3.03068636019016E+004,2.84840515907102E+004,2.95571224737320E+004,2.96888640226362E+004,2.92025353864420E+004,4.49114687247911E+004,2.95880375798611E+004 -1.60000000000000E-009,1.38141810857354E+021,8.29851892759030E+021,1.92832954597872E+023,4.72735291140472E+022,6.00616568945015E+019,2.49846482404977E+023,2.86867642676164E+004,2.94984554167954E+004,2.97242860979045E+004,2.91822092795121E+004,3.98847236388649E+004,2.96109247133606E+004,0.00000000000000E+000,0.00000000000000E+000,2.96674280502538E+004,2.92375017245207E+004,3.07912018951504E+004,0.00000000000000E+000,0.00000000000000E+000,1.88780194774853E+000,1.92327126055668E+000,1.91237094935467E+000,0.00000000000000E+000,0.00000000000000E+000,2.95174045386992E+004,2.91091889663655E+004,3.08814249327492E+004,2.86867642676164E+004,2.94984554167954E+004,2.96486306340187E+004,2.91764752479556E+004,3.47639359262870E+004,2.95502174446853E+004 -1.80000000000000E-009,1.60164418385337E+021,9.35960819939316E+021,1.92712831284083E+023,4.67329742019967E+022,8.00822091926687E+019,2.50487140078519E+023,2.79422947108478E+004,2.91348730966301E+004,2.96844662563647E+004,2.91686905296689E+004,3.57096095983991E+004,2.95584895595267E+004,0.00000000000000E+000,0.00000000000000E+000,2.96564931431577E+004,2.91388725030794E+004,2.11962177785985E+004,0.00000000000000E+000,0.00000000000000E+000,1.88776138193528E+000,1.92301496868420E+000,1.87357010646009E+000,0.00000000000000E+000,0.00000000000000E+000,2.94909522667653E+004,2.90366784859245E+004,3.31791891759074E+004,2.79422947108478E+004,2.91348730966301E+004,2.96206088551491E+004,2.91222707832996E+004,3.10173321643490E+004,2.94992001232121E+004 -2.00000000000000E-009,1.75179832608963E+021,1.03506255381524E+022,1.92627743936816E+023,4.62274552564680E+022,1.00102761490836E+020,2.51057725819016E+023,2.78875347624931E+004,2.90006805369060E+004,2.95970534757809E+004,2.91480966288306E+004,3.66197230676188E+004,2.94806710428893E+004,0.00000000000000E+000,0.00000000000000E+000,2.96555431636337E+004,2.92110220211138E+004,2.40754820286195E+004,0.00000000000000E+000,0.00000000000000E+000,1.88775785636071E+000,1.92320261970810E+000,1.88839749692052E+000,0.00000000000000E+000,0.00000000000000E+000,2.95099528517909E+004,2.88548144205871E+004,3.52402640471131E+004,2.78875347624931E+004,2.90006805369060E+004,2.95877925694671E+004,2.90808522965794E+004,3.27803059271810E+004,2.94596528563688E+004 -2.20000000000000E-009,1.92697815869859E+021,1.12765760819427E+022,1.92532646313399E+023,4.57569722774611E+022,1.15118175714461E+020,2.51608291007216E+023,2.74249762855216E+004,2.87724064528462E+004,2.95387116306815E+004,2.91740708320671E+004,4.03532666251462E+004,2.94268141751492E+004,0.00000000000000E+000,0.00000000000000E+000,2.96937573510003E+004,2.90251504279921E+004,2.24183763809179E+004,0.00000000000000E+000,0.00000000000000E+000,1.88789950281864E+000,1.92271732439977E+000,1.88031923595085E+000,0.00000000000000E+000,0.00000000000000E+000,2.95061830126065E+004,2.86909743858509E+004,3.28336517801555E+004,2.74249762855216E+004,2.87724064528462E+004,2.95717628536357E+004,2.89931411949593E+004,3.32660157086366E+004,2.94159591100977E+004 -2.40000000000000E-009,2.07212716286030E+021,1.21524752449875E+022,1.92452564104207E+023,4.53115149888269E+022,1.30133589938087E+020,2.52118815090819E+023,2.76491463921926E+004,2.86680723966045E+004,2.94975156246623E+004,2.91829759030631E+004,3.78656578331978E+004,2.93901331617428E+004,0.00000000000000E+000,0.00000000000000E+000,2.96410291010076E+004,2.89740771045963E+004,2.49401570077066E+004,0.00000000000000E+000,0.00000000000000E+000,1.88770396406514E+000,1.92258290032029E+000,1.89219461427802E+000,0.00000000000000E+000,0.00000000000000E+000,2.94770380401974E+004,2.87825640372393E+004,3.11339026611421E+004,2.76491463921926E+004,2.86680723966045E+004,2.95309020463877E+004,2.90092764318120E+004,3.23636261125041E+004,2.93815606842511E+004 -2.60000000000000E-009,2.31237379043831E+021,1.30333795461068E+022,1.92312420238119E+023,4.48510422859690E+022,1.70174694534421E+020,2.52679390555168E+023,2.75811380070012E+004,2.86291998134674E+004,2.94747750888819E+004,2.90790743113865E+004,3.40622902308556E+004,2.93466822772719E+004,0.00000000000000E+000,0.00000000000000E+000,2.95550804282082E+004,2.88254821384774E+004,2.41399937218230E+004,0.00000000000000E+000,0.00000000000000E+000,1.88738376403324E+000,1.92218912847699E+000,1.88868999848436E+000,0.00000000000000E+000,0.00000000000000E+000,2.95171179928280E+004,2.87784648731874E+004,2.98363182669950E+004,2.75811380070012E+004,2.86291998134674E+004,2.95090773449484E+004,2.89218016662702E+004,3.01149379603499E+004,2.93422148308485E+004 -2.80000000000000E-009,2.63270262720898E+021,1.39743455041207E+022,1.92142245543585E+023,4.43705490308130E+022,1.90195246832588E+020,2.53310037952560E+023,2.72483182956324E+004,2.84666399883897E+004,2.94738020485124E+004,2.90143345033771E+004,3.13025097764919E+004,2.93160014197861E+004,0.00000000000000E+000,0.00000000000000E+000,2.95322907485839E+004,2.87080456552794E+004,2.47681150039894E+004,0.00000000000000E+000,0.00000000000000E+000,1.88729855514935E+000,1.92187508080356E+000,1.89145983573220E+000,0.00000000000000E+000,0.00000000000000E+000,2.94383035146994E+004,2.87496547195329E+004,2.85716127935273E+004,2.72483182956324E+004,2.84666399883897E+004,2.94795210646399E+004,2.88528163512400E+004,2.87165062803194E+004,2.92901057619826E+004 -3.00000000000000E-009,2.83791328826520E+021,1.49803782571036E+022,1.92027127367870E+023,4.38550198091352E+022,2.15220937205297E+020,2.53915659659580E+023,2.71775976748123E+004,2.82952095246701E+004,2.94427190805389E+004,2.89541517438164E+004,3.11237911455365E+004,2.92667446104254E+004,0.00000000000000E+000,0.00000000000000E+000,2.94904003439200E+004,2.84680292707821E+004,2.58670531537132E+004,0.00000000000000E+000,0.00000000000000E+000,1.88714159342464E+000,1.92122528178548E+000,1.89598821386953E+000,0.00000000000000E+000,0.00000000000000E+000,2.94413077532883E+004,2.88163908013408E+004,2.82296893508112E+004,2.71775976748123E+004,2.82952095246701E+004,2.94553743511864E+004,2.87794033978304E+004,2.88391415236504E+004,2.92441971970566E+004 -3.20000000000000E-009,3.11820102043954E+021,1.59113339389684E+022,1.91876973225634E+023,4.33795316920537E+022,2.35241489503464E+020,2.54521281366599E+023,2.72517489115275E+004,2.83346089054933E+004,2.93958588195378E+004,2.89766300667652E+004,3.10562961524823E+004,2.92333301285312E+004,0.00000000000000E+000,0.00000000000000E+000,2.94486647872758E+004,2.85213065136278E+004,2.61112097168411E+004,0.00000000000000E+000,0.00000000000000E+000,1.88698477668614E+000,1.92137045135774E+000,1.89694349280782E+000,0.00000000000000E+000,0.00000000000000E+000,2.93714680228534E+004,2.87338100821200E+004,2.76365257388331E+004,2.72517489115275E+004,2.83346089054933E+004,2.94032441217448E+004,2.87800670884277E+004,2.87045166461438E+004,2.92032227183085E+004 -3.40000000000000E-009,3.25834488652671E+021,1.69223718300258E+022,1.91796891016442E+023,4.28640024703759E+022,2.55262041801632E+020,2.55096872245172E+023,2.73587760715648E+004,2.83608538987922E+004,2.93453188222199E+004,2.88703399249753E+004,2.97205956485477E+004,2.91752029551952E+004,0.00000000000000E+000,0.00000000000000E+000,2.93648913783440E+004,2.85655778856763E+004,2.63708143014940E+004,0.00000000000000E+000,0.00000000000000E+000,1.88666868891475E+000,1.92149067544437E+000,1.89794015758341E+000,0.00000000000000E+000,0.00000000000000E+000,2.94341003385693E+004,2.85857097927000E+004,2.71908824032390E+004,2.73587760715648E+004,2.83608538987922E+004,2.93764644996423E+004,2.87034889191088E+004,2.80654477685298E+004,2.91689278713705E+004 -3.60000000000000E-009,3.48858123795563E+021,1.80034816541268E+022,1.91661752288429E+023,4.23034270060272E+022,2.95303146397966E+020,2.55752545332937E+023,2.67810675394705E+004,2.81076708852188E+004,2.93328281001648E+004,2.88143030114512E+004,2.84316663462273E+004,2.91249684930127E+004,0.00000000000000E+000,0.00000000000000E+000,2.93084177941753E+004,2.84919685359603E+004,2.48793923103366E+004,0.00000000000000E+000,0.00000000000000E+000,1.88645460766110E+000,1.92129057762851E+000,1.89193623146725E+000,0.00000000000000E+000,0.00000000000000E+000,2.94122532806804E+004,2.86132300951579E+004,2.67850789625224E+004,2.67810675394705E+004,2.81076708852188E+004,2.93492082889919E+004,2.86667230172672E+004,2.69786855896309E+004,2.91111553221504E+004 -3.80000000000000E-009,3.67377134671368E+021,1.87692677795317E+022,1.91536623836565E+023,4.18880005458403E+022,3.60369941367009E+020,2.56228033450018E+023,2.63411533107321E+004,2.79148766459955E+004,2.93044669235728E+004,2.88311999129120E+004,2.85523992956149E+004,2.90817615495143E+004,0.00000000000000E+000,0.00000000000000E+000,2.92316900255346E+004,2.83869616865553E+004,2.45095849250159E+004,0.00000000000000E+000,0.00000000000000E+000,1.88616244767186E+000,1.92100335814643E+000,1.89033665027016E+000,0.00000000000000E+000,0.00000000000000E+000,2.94758290156835E+004,2.85471329877032E+004,2.51462178449951E+004,2.63411533107321E+004,2.79148766459955E+004,2.93343028639307E+004,2.86258081652845E+004,2.64545855297730E+004,2.90675368632991E+004 -4.00000000000000E-009,3.89900256006806E+021,1.95951155618311E+022,1.91406490246627E+023,4.14575586714297E+022,3.95405907888802E+020,2.56753572947845E+023,2.62234562664012E+004,2.78929397207128E+004,2.92315391571112E+004,2.88229710036491E+004,2.75026427831676E+004,2.90150654896382E+004,0.00000000000000E+000,0.00000000000000E+000,2.92683979444078E+004,2.82257244310605E+004,2.59251566203940E+004,0.00000000000000E+000,0.00000000000000E+000,1.88630240945081E+000,1.92055823200433E+000,1.89621714931539E+000,0.00000000000000E+000,0.00000000000000E+000,2.94724177801524E+004,2.84205415269503E+004,2.59220434108165E+004,2.62234562664012E+004,2.78929397207128E+004,2.93115943206215E+004,2.85409264474900E+004,2.66104935184113E+004,2.90278304066403E+004 -4.20000000000000E-009,4.09920808304973E+021,2.05761226244413E+022,1.91296377208987E+023,4.09570448639755E+022,4.15426460186969E+020,2.57344179240641E+023,2.59584251688575E+004,2.79792164143216E+004,2.91829986173141E+004,2.88624553081434E+004,2.65184157408449E+004,2.89800687789665E+004,0.00000000000000E+000,0.00000000000000E+000,2.92468856268271E+004,2.82350514972446E+004,2.45082085940749E+004,0.00000000000000E+000,0.00000000000000E+000,1.88622042797649E+000,1.92058411777338E+000,1.89033060860557E+000,0.00000000000000E+000,0.00000000000000E+000,2.94184298700445E+004,2.83002080195412E+004,2.58836543110358E+004,2.59584251688575E+004,2.79792164143216E+004,2.92688755499612E+004,2.85258541871680E+004,2.57826776105926E+004,2.89891465588020E+004 -4.40000000000000E-009,4.36948553907499E+021,2.16071810677969E+022,1.91131207652528E+023,4.04114848138504E+022,4.75488117081470E+020,2.57994847190331E+023,2.55472595392559E+004,2.78393577709467E+004,2.91531338383059E+004,2.88305178678445E+004,2.64964518722967E+004,2.89266044145264E+004,0.00000000000000E+000,0.00000000000000E+000,2.92445056235412E+004,2.82052927658044E+004,2.52731347992532E+004,0.00000000000000E+000,0.00000000000000E+000,1.88621135074052E+000,1.92050146820740E+000,1.89358885219113E+000,0.00000000000000E+000,0.00000000000000E+000,2.93348306421869E+004,2.83107770187332E+004,2.61041646388728E+004,2.55472595392559E+004,2.78393577709467E+004,2.92309328019047E+004,2.85068090390924E+004,2.60466086766045E+004,2.89327067083225E+004 -4.60000000000000E-009,4.62975271895116E+021,2.24080031597236E+022,1.90971043234142E+023,3.99810429394399E+022,5.35549773975972E+020,2.58525391826233E+023,2.51989450030068E+004,2.76410534988905E+004,2.91376347563642E+004,2.86298087088614E+004,2.55614057909202E+004,2.88514376434098E+004,0.00000000000000E+000,0.00000000000000E+000,2.92813743046510E+004,2.82616115477084E+004,2.71217920793808E+004,0.00000000000000E+000,0.00000000000000E+000,1.88635180409518E+000,1.92065773859907E+000,1.90071772828127E+000,0.00000000000000E+000,0.00000000000000E+000,2.92726773032468E+004,2.82671310893270E+004,2.72721909794898E+004,2.51989450030068E+004,2.76410534988905E+004,2.92162291217688E+004,2.84228145155237E+004,2.64870231701684E+004,2.88794005384615E+004 -4.80000000000000E-009,4.95508669379638E+021,2.32538714943212E+022,1.90795863401533E+023,3.95455959269547E+022,5.60575464348681E+020,2.59110992980954E+023,2.48329786820119E+004,2.76070341157134E+004,2.90767459796200E+004,2.85893539954330E+004,2.79131580683246E+004,2.87867883436319E+004,0.00000000000000E+000,0.00000000000000E+000,2.93003434182654E+004,2.83640454775269E+004,2.76098995230972E+004,0.00000000000000E+000,0.00000000000000E+000,1.88642393306870E+000,1.92094039787559E+000,1.90244341108994E+000,0.00000000000000E+000,0.00000000000000E+000,2.92072537379358E+004,2.81052962433567E+004,2.71875440218162E+004,2.48329786820119E+004,2.76070341157134E+004,2.91758997759738E+004,2.83869364542252E+004,2.76193258420461E+004,2.88282713260071E+004 -5.00000000000000E-009,5.16530249292713E+021,2.42548991092295E+022,1.90665729811595E+023,3.90200564291278E+022,6.10626845094099E+020,2.59716614687974E+023,2.49735786262029E+004,2.76724550192168E+004,2.90492231384212E+004,2.84177554785796E+004,2.91143993650548E+004,2.87448705884357E+004,0.00000000000000E+000,0.00000000000000E+000,2.93727327647007E+004,2.83096679700882E+004,2.71404806240749E+004,0.00000000000000E+000,0.00000000000000E+000,1.88669835042224E+000,1.92079059815674E+000,1.90078492374529E+000,0.00000000000000E+000,0.00000000000000E+000,2.90551304938335E+004,2.81109141390674E+004,2.64265580668281E+004,2.49735786262029E+004,2.76724550192168E+004,2.91395682874916E+004,2.82990846219102E+004,2.77916980084891E+004,2.87902566077957E+004 -5.20000000000000E-009,5.36550801590880E+021,2.51958650672434E+022,1.90535596221657E+023,3.85195426216737E+022,6.70688501988600E+020,2.60287200428471E+023,2.46737704974925E+004,2.75598073328012E+004,2.90677993363649E+004,2.83182654848479E+004,2.85068992786969E+004,2.87188799495828E+004,0.00000000000000E+000,0.00000000000000E+000,2.93074386427919E+004,2.84048878462081E+004,2.72219696954037E+004,0.00000000000000E+000,0.00000000000000E+000,1.88645088874285E+000,1.92105253884911E+000,1.90107686164811E+000,0.00000000000000E+000,0.00000000000000E+000,2.90067175181777E+004,2.79918915209719E+004,2.66942726598523E+004,2.46737704974925E+004,2.75598073328012E+004,2.91157056020949E+004,2.82479955630679E+004,2.76276157612132E+004,2.87412835034335E+004 -5.40000000000000E-009,5.53568271044322E+021,2.62369337867481E+022,1.90425483184017E+023,3.79739825715486E+022,7.20739882734018E+020,2.60892822135491E+023,2.51741096488217E+004,2.73654535524687E+004,2.90781792231051E+004,2.82193582090845E+004,2.90786579006676E+004,2.86980964409768E+004,0.00000000000000E+000,0.00000000000000E+000,2.93104050956510E+004,2.84356041010156E+004,2.67369833640607E+004,0.00000000000000E+000,0.00000000000000E+000,1.88646215488910E+000,1.92113666719737E+000,1.89931362020917E+000,0.00000000000000E+000,0.00000000000000E+000,2.89241052643327E+004,2.77252764886743E+004,2.64021844424970E+004,2.51741096488217E+004,2.73654535524687E+004,2.90970477508740E+004,2.81366079967653E+004,2.76581511956081E+004,2.86958996674727E+004 -5.60000000000000E-009,5.77592933802123E+021,2.73680949915945E+022,1.90285339317930E+023,3.73883814168272E+022,7.60780987330353E+020,2.61578526051703E+023,2.48633034930897E+004,2.73440510832349E+004,2.90525502374771E+004,2.80932413913267E+004,2.99371366252274E+004,2.86467478558571E+004,0.00000000000000E+000,0.00000000000000E+000,2.92077473008789E+004,2.83866222017765E+004,2.69143184658607E+004,0.00000000000000E+000,0.00000000000000E+000,1.88607097190730E+000,1.92100242617347E+000,1.89996558940297E+000,0.00000000000000E+000,0.00000000000000E+000,2.89675808582951E+004,2.75744754019239E+004,2.67911981615618E+004,2.48633034930897E+004,2.73440510832349E+004,2.90703795509338E+004,2.80247618993464E+004,2.81929065624523E+004,2.86448568081430E+004 -5.80000000000000E-009,6.08624789864282E+021,2.82790301211611E+022,1.90110159485321E+023,3.69128932997457E+022,8.00822091926687E+020,2.62189152896797E+023,2.44312927104599E+004,2.74782200803855E+004,2.90092823545246E+004,2.80145856027173E+004,2.93720828282191E+004,2.85989437449328E+004,0.00000000000000E+000,0.00000000000000E+000,2.91663464851547E+004,2.82927805142985E+004,2.72281065099947E+004,0.00000000000000E+000,0.00000000000000E+000,1.88591244838523E+000,1.92074396084936E+000,1.90109877750769E+000,0.00000000000000E+000,0.00000000000000E+000,2.89318843275528E+004,2.75201601647967E+004,2.90375062990596E+004,2.44312927104599E+004,2.74782200803855E+004,2.90298189422705E+004,2.79489120736785E+004,2.86845019126458E+004,2.86024884530345E+004 -6.00000000000000E-009,6.36153049274262E+021,2.92149909411005E+022,1.89944989928861E+023,3.64173846303661E+022,8.55878610746647E+020,2.62794774603817E+023,2.46499690791709E+004,2.73789768793042E+004,2.89997172638086E+004,2.80349714678551E+004,2.86302054376030E+004,2.85793483751186E+004,0.00000000000000E+000,0.00000000000000E+000,2.91097243120239E+004,2.80394854157186E+004,2.72769975793308E+004,0.00000000000000E+000,0.00000000000000E+000,1.88569492703069E+000,1.92003780060321E+000,1.90127303168949E+000,0.00000000000000E+000,0.00000000000000E+000,2.89125345803427E+004,2.74381121278535E+004,2.66033107732602E+004,2.46499690791709E+004,2.73789768793042E+004,2.90045206084493E+004,2.78637221533828E+004,2.76700047752816E+004,2.85559616996355E+004 -6.20000000000000E-009,6.65683363914059E+021,3.04312394932141E+022,1.89769810096252E+023,3.57817320948993E+022,9.10935129566607E+020,2.63550550453073E+023,2.48570951809896E+004,2.71906431785230E+004,2.89671641407381E+004,2.79555443146866E+004,2.77226330081588E+004,2.85165751486137E+004,0.00000000000000E+000,0.00000000000000E+000,2.90466546059191E+004,2.79609654072043E+004,2.71392461054983E+004,0.00000000000000E+000,0.00000000000000E+000,1.88545165844579E+000,1.91981633340225E+000,1.90078048778586E+000,0.00000000000000E+000,0.00000000000000E+000,2.88773943411023E+004,2.75318215148647E+004,2.59024076029573E+004,2.48570951809896E+004,2.71906431785230E+004,2.89628559019563E+004,2.78345818415003E+004,2.70344005306563E+004,2.84946713597743E+004 -6.40000000000000E-009,6.96214706168764E+021,3.12971283801098E+022,1.89599635401718E+023,3.53312696681905E+022,9.45971096088399E+020,2.64136151607794E+023,2.48679202514270E+004,2.71754298172532E+004,2.89717735347929E+004,2.79353629969300E+004,2.69138045307183E+004,2.85047548829921E+004,0.00000000000000E+000,0.00000000000000E+000,2.89808627249297E+004,2.80121317980768E+004,2.64296835036746E+004,0.00000000000000E+000,0.00000000000000E+000,1.88519678456954E+000,1.91996078816204E+000,1.89816349145783E+000,0.00000000000000E+000,0.00000000000000E+000,2.88111961673207E+004,2.73215456265760E+004,2.64741743931164E+004,2.48679202514270E+004,2.71754298172532E+004,2.89276179598055E+004,2.77792578272880E+004,2.66531262883989E+004,2.84512450973745E+004 -6.60000000000000E-009,7.25244507001106E+021,3.22681251665709E+022,1.89429460707183E+023,3.48207455845873E+022,9.96022476833817E+020,2.64766799005186E+023,2.51748019881191E+004,2.71429363709946E+004,2.89143993141875E+004,2.77986241471708E+004,2.73623280380007E+004,2.84434904474578E+004,0.00000000000000E+000,0.00000000000000E+000,2.89566014707729E+004,2.80212298902899E+004,2.65180190221446E+004,0.00000000000000E+000,0.00000000000000E+000,1.88510251153798E+000,1.91998641974170E+000,1.89849678542372E+000,0.00000000000000E+000,0.00000000000000E+000,2.87889067204560E+004,2.71766639879561E+004,2.64815167298155E+004,2.51748019881191E+004,2.71429363709946E+004,2.88895006586041E+004,2.76806296504829E+004,2.68746072093143E+004,2.84083237415421E+004 -6.80000000000000E-009,7.47767628336544E+021,3.30839626727213E+022,1.89279306564947E+023,3.43752882959530E+022,1.07109954795194E+021,2.65287333364939E+023,2.50586148425951E+004,2.71535263452060E+004,2.88810282319268E+004,2.77734244328905E+004,2.81879214909196E+004,2.84115298863757E+004,0.00000000000000E+000,0.00000000000000E+000,2.88896131207528E+004,2.79266580456031E+004,2.66350421404110E+004,0.00000000000000E+000,0.00000000000000E+000,1.88484140648810E+000,1.91971918333106E+000,1.89893497511590E+000,0.00000000000000E+000,0.00000000000000E+000,2.87871441392071E+004,2.70937791398954E+004,2.70046052671240E+004,2.50586148425951E+004,2.71535263452060E+004,2.88561057941567E+004,2.76194983772348E+004,2.74174475876896E+004,2.83706918697600E+004 -7.00000000000000E-009,7.72292804901799E+021,3.39098104550207E+022,1.89139162698860E+023,3.39448464215424E+022,1.10613551447374E+021,2.65822883138915E+023,2.51773489909771E+004,2.71317383636398E+004,2.88413651701422E+004,2.76933033539704E+004,2.79262554781864E+004,2.83664133144144E+004,0.00000000000000E+000,0.00000000000000E+000,2.88067849056143E+004,2.79482163295867E+004,2.65155257997990E+004,0.00000000000000E+000,0.00000000000000E+000,1.88451691654207E+000,1.91978025858774E+000,1.89848740829364E+000,0.00000000000000E+000,0.00000000000000E+000,2.88053187740027E+004,2.70456310236655E+004,2.63549039362159E+004,2.51773489909771E+004,2.71317383636398E+004,2.88214276948735E+004,2.75768303256017E+004,2.70824537474088E+004,2.83338428471987E+004 -7.20000000000000E-009,8.03324660963958E+021,3.48407661368854E+022,1.88943962313953E+023,3.34393274760137E+022,1.18621772366641E+021,2.66443520260158E+023,2.54731002987129E+004,2.70999676333624E+004,2.88193949358025E+004,2.76518038067684E+004,2.88099320643863E+004,2.83470904804090E+004,0.00000000000000E+000,0.00000000000000E+000,2.87423468797727E+004,2.78890464249006E+004,2.66191519760887E+004,0.00000000000000E+000,0.00000000000000E+000,1.88426320548688E+000,1.91961240558164E+000,1.89887569690042E+000,0.00000000000000E+000,0.00000000000000E+000,2.87158268490944E+004,2.70433272792489E+004,2.68441484657071E+004,2.54731002987129E+004,2.70999676333624E+004,2.87682180734526E+004,2.75417486277348E+004,2.76370472901447E+004,2.82917653330159E+004 -7.40000000000000E-009,8.32354461796300E+021,3.57717218187502E+022,1.88753767067120E+023,3.29288033924105E+022,1.27631020900816E+021,2.67054147105252E+023,2.57659904791063E+004,2.68897953782278E+004,2.88033741193323E+004,2.76006004657209E+004,2.86402559742985E+004,2.83032961665160E+004,0.00000000000000E+000,0.00000000000000E+000,2.86913814648289E+004,2.77204748517914E+004,2.59730569867689E+004,0.00000000000000E+000,0.00000000000000E+000,1.88406174939232E+000,1.91913032865418E+000,1.89640512691533E+000,0.00000000000000E+000,0.00000000000000E+000,2.86969486586150E+004,2.70310779647135E+004,2.71815688239988E+004,2.57659904791063E+004,2.68897953782278E+004,2.87418040734165E+004,2.74692269564933E+004,2.74837890921649E+004,2.82380526148306E+004 -7.60000000000000E-009,8.67390428318093E+021,3.66626363960186E+022,1.88543551267989E+023,3.24483101372545E+022,1.34638214205174E+021,2.67674784226495E+023,2.59593467606774E+004,2.68434264485045E+004,2.87504800273178E+004,2.76034933437663E+004,2.78090616369530E+004,2.82550544919332E+004,0.00000000000000E+000,0.00000000000000E+000,2.85804120050421E+004,2.75698275396876E+004,2.53321373936348E+004,0.00000000000000E+000,0.00000000000000E+000,1.88362067512173E+000,1.91869459325904E+000,1.89383215523424E+000,0.00000000000000E+000,0.00000000000000E+000,2.87583424390700E+004,2.68826278970414E+004,2.73315336032559E+004,2.59593467606774E+004,2.68434264485045E+004,2.87062273245894E+004,2.73857752078652E+004,2.69900781284580E+004,2.81933721330961E+004 -7.80000000000000E-009,9.02926908647340E+021,3.76686691490015E+022,1.88338340606933E+023,3.19177655013530E+022,1.40143866087170E+021,2.68355483004633E+023,2.59390358774844E+004,2.67353610841750E+004,2.86785369699061E+004,2.76290482066530E+004,2.77529775910222E+004,2.81839430398088E+004,0.00000000000000E+000,0.00000000000000E+000,2.84995384416588E+004,2.74017020079852E+004,2.53973253709167E+004,0.00000000000000E+000,0.00000000000000E+000,1.88329710489631E+000,1.91820272668787E+000,1.89409967434494E+000,0.00000000000000E+000,0.00000000000000E+000,2.88079493860743E+004,2.67953805135631E+004,2.75465902974181E+004,2.59390358774844E+004,2.67353610841750E+004,2.86671641384709E+004,2.73250051527754E+004,2.70459070639859E+004,2.81361063758238E+004 -8.00000000000000E-009,9.33958764709499E+021,3.83894090317356E+022,1.88148145360101E+023,3.15223595934642E+022,1.47151059391529E+021,2.68871012226311E+023,2.60144544186523E+004,2.67466309309895E+004,2.86659503706601E+004,2.75438647700483E+004,2.76392401872696E+004,2.81626346079823E+004,0.00000000000000E+000,0.00000000000000E+000,2.84185191306970E+004,2.72975287354094E+004,2.63768474914363E+004,0.00000000000000E+000,0.00000000000000E+000,1.88297114313743E+000,1.91789496150277E+000,1.89796309090580E+000,0.00000000000000E+000,0.00000000000000E+000,2.87496290581371E+004,2.69299291601802E+004,2.69993805656612E+004,2.60144544186523E+004,2.67466309309895E+004,2.86225754234754E+004,2.72980793296985E+004,2.71063736094557E+004,2.81005499244100E+004 -8.20000000000000E-009,9.65991648386566E+021,3.92202619521095E+022,1.87952944975193E+023,3.10718971667555E+022,1.54158252695887E+021,2.69446603104883E+023,2.59398720499941E+004,2.67293738052485E+004,2.86793291987538E+004,2.73731604381279E+004,2.74926435388923E+004,2.81398709082716E+004,0.00000000000000E+000,0.00000000000000E+000,2.84768277652721E+004,2.71079838253769E+004,2.68756741858818E+004,0.00000000000000E+000,0.00000000000000E+000,1.88320591716448E+000,1.91732899755358E+000,1.89982423472299E+000,0.00000000000000E+000,0.00000000000000E+000,2.85976008270961E+004,2.67913743799663E+004,2.68981733210757E+004,2.59398720499941E+004,2.67293738052485E+004,2.86001787784934E+004,2.71314482214594E+004,2.71504502185636E+004,2.80548279695088E+004 -8.40000000000000E-009,9.90016311144367E+021,4.00310943201853E+022,1.87812801109106E+023,3.06464604304194E+022,1.58162363155521E+021,2.69972142602710E+023,2.58576063334799E+004,2.67106081206868E+004,2.86887885106962E+004,2.73093959667936E+004,2.72512560034975E+004,2.81266378233565E+004,0.00000000000000E+000,0.00000000000000E+000,2.83455713226092E+004,2.71989414754947E+004,2.69661375231614E+004,0.00000000000000E+000,0.00000000000000E+000,1.88267609404471E+000,1.91760155920256E+000,1.90015451060023E+000,0.00000000000000E+000,0.00000000000000E+000,2.85868515558441E+004,2.67126477517024E+004,2.66534696942598E+004,2.58576063334799E+004,2.67106081206868E+004,2.85652841218268E+004,2.71062469240378E+004,2.69994729771504E+004,2.80161829815341E+004 -8.60000000000000E-009,1.01303994628726E+022,4.07818650313665E+022,1.87677662381094E+023,3.02510545225306E+022,1.62166473615154E+021,2.70462646134015E+023,2.62863412398158E+004,2.66566718113387E+004,2.86501263259125E+004,2.72327771408804E+004,2.70281526505397E+004,2.80927499663040E+004,0.00000000000000E+000,0.00000000000000E+000,2.83572873213527E+004,2.70802138279937E+004,2.65614273801052E+004,0.00000000000000E+000,0.00000000000000E+000,1.88272358147879E+000,1.91724542301114E+000,1.89865976924193E+000,0.00000000000000E+000,0.00000000000000E+000,2.85428255463058E+004,2.65376012362358E+004,2.61917527331391E+004,2.62863412398158E+004,2.66566718113387E+004,2.85388424061665E+004,2.69894934318707E+004,2.66572179451534E+004,2.79860933658171E+004 -8.80000000000000E-009,1.04257026092706E+022,4.14175175668334E+022,1.87477456858112E+023,2.98806743050145E+022,1.72677263571692E+021,2.70928123974947E+023,2.64834527338811E+004,2.66232466881054E+004,2.86017621334469E+004,2.71680765215271E+004,2.70630548132839E+004,2.80498572578121E+004,0.00000000000000E+000,0.00000000000000E+000,2.84080495382375E+004,2.70155403421740E+004,2.58118008347267E+004,0.00000000000000E+000,0.00000000000000E+000,1.88292888839775E+000,1.91705013002382E+000,1.89576957376925E+000,0.00000000000000E+000,0.00000000000000E+000,2.84349696516622E+004,2.65865034444365E+004,2.56134060848931E+004,2.64834527338811E+004,2.66232466881054E+004,2.85003035804880E+004,2.69576449604884E+004,2.62986170486521E+004,2.79515690541102E+004 -9.00000000000000E-009,1.07910776887121E+022,4.22333550729837E+022,1.87267241058981E+023,2.94452272925294E+022,1.78182915453688E+021,2.71518730267743E+023,2.64646351823239E+004,2.65271984776857E+004,2.85897559521653E+004,2.70858445600237E+004,2.67023570199831E+004,2.80089963833469E+004,0.00000000000000E+000,0.00000000000000E+000,2.82984547456570E+004,2.69854780817158E+004,2.62178668649430E+004,0.00000000000000E+000,0.00000000000000E+000,1.88248473175795E+000,1.91695903764180E+000,1.89735531288702E+000,0.00000000000000E+000,0.00000000000000E+000,2.84237093004084E+004,2.65781094143839E+004,2.66315224034333E+004,2.64646351823239E+004,2.65271984776857E+004,2.84618278257075E+004,2.69112203194615E+004,2.65485416581988E+004,2.79008172149454E+004 -9.20000000000000E-009,1.11364322158555E+022,4.28890281607486E+022,1.87062030397925E+023,2.90848573511624E+022,1.84689594950592E+021,2.72019244075197E+023,2.62645177064547E+004,2.65918630986142E+004,2.85223494699426E+004,2.70511547848270E+004,2.60656671845577E+004,2.79515530934764E+004,0.00000000000000E+000,0.00000000000000E+000,2.82658963149322E+004,2.68920927500321E+004,2.65071557655543E+004,0.00000000000000E+000,0.00000000000000E+000,1.88235213187701E+000,1.91667478833896E+000,1.89845591551773E+000,0.00000000000000E+000,0.00000000000000E+000,2.84306857577520E+004,2.64791229171445E+004,2.64958109574941E+004,2.62645177064547E+004,2.65918630986142E+004,2.84255711367974E+004,2.68416706075919E+004,2.63118721578009E+004,2.78642737760819E+004 -9.40000000000000E-009,1.14067096718807E+022,4.36598194242281E+022,1.86886850565316E+023,2.86594206148263E+022,1.92697815869859E+021,2.72539778434950E+023,2.63511438486238E+004,2.65867930907391E+004,2.84816891031212E+004,2.70483287436162E+004,2.65128020754701E+004,2.79243150218170E+004,0.00000000000000E+000,0.00000000000000E+000,2.82188008906171E+004,2.66942376374862E+004,2.60728812919083E+004,0.00000000000000E+000,0.00000000000000E+000,1.88215979743309E+000,1.91606607583733E+000,1.89679469267139E+000,0.00000000000000E+000,0.00000000000000E+000,2.84079080519139E+004,2.64020672398063E+004,2.66041752589322E+004,2.63511438486238E+004,2.65867930907391E+004,2.83883521644107E+004,2.67633423160404E+004,2.64183099135932E+004,2.78296753442820E+004 -9.60000000000000E-009,1.18071207178441E+022,4.44005798592603E+022,1.86656614213887E+023,2.82590095688630E+022,1.98703981559309E+021,2.73110364175448E+023,2.63665543233473E+004,2.65596022074180E+004,2.84315837985353E+004,2.69016929928848E+004,2.58814873709077E+004,2.78611204147937E+004,0.00000000000000E+000,0.00000000000000E+000,2.81993964410785E+004,2.68034648104174E+004,2.53454605665791E+004,0.00000000000000E+000,0.00000000000000E+000,1.88208036802758E+000,1.91640321445249E+000,1.89388694080841E+000,0.00000000000000E+000,0.00000000000000E+000,2.83742880359000E+004,2.62324062024222E+004,2.68106546986573E+004,2.63665543233473E+004,2.65596022074180E+004,2.83514355347913E+004,2.66809397576823E+004,2.60037929001538E+004,2.77843915603670E+004 -9.80000000000001E-009,1.21424649688384E+022,4.51463454323670E+022,1.86456408690905E+023,2.78535933848251E+022,2.05210661056214E+021,2.73650919087498E+023,2.60468367416214E+004,2.64789415606213E+004,2.83987501602492E+004,2.69344043786636E+004,2.50442887944472E+004,2.78034611937068E+004,0.00000000000000E+000,0.00000000000000E+000,2.81691928934561E+004,2.66940747743889E+004,2.57070488767197E+004,0.00000000000000E+000,0.00000000000000E+000,1.88195652084027E+000,1.91606557111712E+000,1.89535252504710E+000,0.00000000000000E+000,0.00000000000000E+000,2.83532974158162E+004,2.62473407047857E+004,2.67861380492067E+004,2.60468367416214E+004,2.64789415606213E+004,2.83227656226500E+004,2.66691358369817E+004,2.57316883853655E+004,2.77298423331631E+004 -1.00000000000000E-008,1.23376653537455E+022,4.60322548715609E+022,1.86321269962893E+023,2.73731001296691E+022,2.12718368168026E+021,2.74191473999549E+023,2.61463376027814E+004,2.63805608994757E+004,2.83733595207594E+004,2.69385595551357E+004,2.58118207509038E+004,2.77754815145357E+004,0.00000000000000E+000,0.00000000000000E+000,2.81695496628557E+004,2.66388536246975E+004,2.49882891650294E+004,0.00000000000000E+000,0.00000000000000E+000,1.88195798526177E+000,1.91589408764779E+000,1.89239840614673E+000,0.00000000000000E+000,0.00000000000000E+000,2.82801593331994E+004,2.61285818509074E+004,2.65291533608329E+004,2.61463376027814E+004,2.63805608994757E+004,2.82905397816826E+004,2.66212961325314E+004,2.57938611621848E+004,2.76873906436237E+004 -1.02000000000000E-008,1.26379736382180E+022,4.70132619341711E+022,1.86131074716060E+023,2.68425554937676E+022,2.20726589087293E+021,2.74832131673090E+023,2.60352160967666E+004,2.63105138389974E+004,2.83583987430532E+004,2.66978606294857E+004,2.61260499746551E+004,2.77211423089684E+004,0.00000000000000E+000,0.00000000000000E+000,2.81337227459567E+004,2.65324804483301E+004,2.58950984640452E+004,0.00000000000000E+000,0.00000000000000E+000,1.88181074597667E+000,1.91556177462613E+000,1.89609884207723E+000,0.00000000000000E+000,0.00000000000000E+000,2.82515864478562E+004,2.59820352562077E+004,2.65670840671893E+004,2.60352160967666E+004,2.63105138389974E+004,2.82659198418475E+004,2.64450327672181E+004,2.61904575916856E+004,2.76343344880930E+004 -1.04000000000000E-008,1.30684155126286E+022,4.76739401600106E+022,1.85850786983886E+023,2.64471495858788E+022,2.33739948081102E+021,2.75377691723215E+023,2.58761359781581E+004,2.62909452673572E+004,2.83344761797486E+004,2.66012992806847E+004,2.60799458597500E+004,2.76784422532691E+004,0.00000000000000E+000,0.00000000000000E+000,2.80663686487982E+004,2.64426589515761E+004,2.59945576661247E+004,0.00000000000000E+000,0.00000000000000E+000,1.88153294190083E+000,1.91527911824462E+000,1.89648928184087E+000,0.00000000000000E+000,0.00000000000000E+000,2.82094314988476E+004,2.60474925262909E+004,2.64634013348998E+004,2.58761359781581E+004,2.62909452673572E+004,2.82248287335142E+004,2.63971926937623E+004,2.61676677616583E+004,2.75855841124327E+004 -1.06000000000000E-008,1.32736261736848E+022,4.84797673900118E+022,1.85715648255873E+023,2.60117025733937E+022,2.40246627578006E+021,2.75883210668744E+023,2.57317158957470E+004,2.63975990662887E+004,2.82780771529942E+004,2.64662753928586E+004,2.63736499294913E+004,2.76377048812824E+004,0.00000000000000E+000,0.00000000000000E+000,2.80027407943042E+004,2.62625057312956E+004,2.65199704877607E+004,0.00000000000000E+000,0.00000000000000E+000,1.88126930509030E+000,1.91470645849616E+000,1.89850412377230E+000,0.00000000000000E+000,0.00000000000000E+000,2.82060104096112E+004,2.60725097644943E+004,2.71736436304785E+004,2.57317158957470E+004,2.63975990662887E+004,2.81818572119355E+004,2.62959586410431E+004,2.66458506198947E+004,2.75592447807603E+004 -1.08000000000000E-008,1.35689293200828E+022,4.93756871053548E+022,1.85550478699413E+023,2.55462247324613E+022,2.43750224230185E+021,2.76478822099614E+023,2.56780273975902E+004,2.63178784959992E+004,2.82609400460874E+004,2.64970894298131E+004,2.61101225150505E+004,2.76052308539446E+004,0.00000000000000E+000,0.00000000000000E+000,2.79382374707565E+004,2.60155652542767E+004,2.63322950787777E+004,0.00000000000000E+000,0.00000000000000E+000,1.88100084092722E+000,1.91390880609644E+000,1.89779349527711E+000,0.00000000000000E+000,0.00000000000000E+000,2.81955068639896E+004,2.59483025839360E+004,2.73353733813491E+004,2.56780273975902E+004,2.63178784959992E+004,2.81537070727424E+004,2.62050452174449E+004,2.65265077519867E+004,2.75099511631938E+004 -1.10000000000000E-008,1.38792478807044E+022,5.01464783688342E+022,1.85370293728730E+023,2.51358034103489E+022,2.48755362304727E+021,2.77019377011665E+023,2.58136168525323E+004,2.62056363619275E+004,2.82086012020214E+004,2.62887553583090E+004,2.58292523379719E+004,2.75304614917103E+004,0.00000000000000E+000,0.00000000000000E+000,2.78917982352221E+004,2.59690153740135E+004,2.62868901311137E+004,0.00000000000000E+000,0.00000000000000E+000,1.88080680729656E+000,1.91375676962527E+000,1.89762007348491E+000,0.00000000000000E+000,0.00000000000000E+000,2.82547539754942E+004,2.57527093861818E+004,2.73516279219444E+004,2.58136168525323E+004,2.62056363619275E+004,2.81354208841191E+004,2.60451835116513E+004,2.63965746591358E+004,2.74644856506687E+004 -1.12000000000000E-008,1.41945715794005E+022,5.08121617327483E+022,1.85160077929599E+023,2.47504077786092E+022,2.59266152261265E+021,2.77509880542970E+023,2.59554929963602E+004,2.62112873411039E+004,2.81641518795688E+004,2.61818226926281E+004,2.54208984793760E+004,2.74911811792713E+004,0.00000000000000E+000,0.00000000000000E+000,2.78389587737569E+004,2.57955661203722E+004,2.77514491140170E+004,0.00000000000000E+000,0.00000000000000E+000,1.88058526139535E+000,1.91318550893454E+000,1.90293269196045E+000,0.00000000000000E+000,0.00000000000000E+000,2.82047336609825E+004,2.58547817419836E+004,2.74567599487963E+004,2.59554929963602E+004,2.62112873411039E+004,2.80870668963995E+004,2.59803146647791E+004,2.66532158597375E+004,2.74332895991098E+004 -1.14000000000000E-008,1.44248079308295E+022,5.15228913393332E+022,1.85009923787363E+023,2.43600070087949E+022,2.66273345565623E+021,2.77980363521977E+023,2.60649904100682E+004,2.61407115071218E+004,2.81540940892657E+004,2.61140817809817E+004,2.53595688522795E+004,2.74669736075406E+004,0.00000000000000E+000,0.00000000000000E+000,2.78265896937839E+004,2.55464312677446E+004,2.71848257677521E+004,0.00000000000000E+000,0.00000000000000E+000,1.88053328121430E+000,1.91235160934988E+000,1.90094400532258E+000,0.00000000000000E+000,0.00000000000000E+000,2.81579752725842E+004,2.58003243734110E+004,2.74057418298307E+004,2.60649904100682E+004,2.61407115071218E+004,2.80657113253205E+004,2.58662555295854E+004,2.64553692443579E+004,2.73969294035861E+004 -1.16000000000000E-008,1.47501419056747E+022,5.21485335986510E+022,1.84834743954754E+023,2.40346730339497E+022,2.68775914602894E+021,2.78455851639058E+023,2.60564108725537E+004,2.62263745780660E+004,2.80699568772609E+004,2.59250147460539E+004,2.50644231694249E+004,2.74038859895601E+004,0.00000000000000E+000,0.00000000000000E+000,2.78892304052604E+004,2.54609844791555E+004,2.72605199755999E+004,0.00000000000000E+000,0.00000000000000E+000,1.88079605986700E+000,1.91206190261464E+000,1.90121437197018E+000,0.00000000000000E+000,0.00000000000000E+000,2.80969208697174E+004,2.57039615777083E+004,2.67770508071580E+004,2.60564108725537E+004,2.62263745780660E+004,2.80283945857686E+004,2.57326899447982E+004,2.61657519611335E+004,2.73703276619726E+004 -1.18000000000000E-008,1.50504501901472E+022,5.28692734813850E+022,1.84664569260219E+023,2.36542825402845E+022,2.72780025062528E+021,2.78966375722661E+023,2.58789240977741E+004,2.62355744801394E+004,2.80463510575746E+004,2.58652287864771E+004,2.51708493646271E+004,2.73731807882436E+004,0.00000000000000E+000,0.00000000000000E+000,2.78654528083623E+004,2.52723175556633E+004,2.73324695363142E+004,0.00000000000000E+000,0.00000000000000E+000,1.88069644869466E+000,1.91141539767023E+000,1.90146999913922E+000,0.00000000000000E+000,0.00000000000000E+000,2.80440173901779E+004,2.55962414331011E+004,2.69909226320394E+004,2.58789240977741E+004,2.62355744801394E+004,2.79962279294533E+004,2.56234151684815E+004,2.62938568459012E+004,2.73304783177867E+004 -1.20000000000000E-008,1.53657738888433E+022,5.35249465691500E+022,1.84459358599163E+023,2.32788971846939E+022,2.82289787404157E+021,2.79451874115892E+023,2.58318054850317E+004,2.61939283413099E+004,2.80323108749044E+004,2.58231242569709E+004,2.49858131986279E+004,2.73443957349227E+004,0.00000000000000E+000,0.00000000000000E+000,2.78358239265008E+004,2.50542335811758E+004,2.76519038565891E+004,0.00000000000000E+000,0.00000000000000E+000,1.88057209170007E+000,1.91065614582816E+000,1.90258911720400E+000,0.00000000000000E+000,0.00000000000000E+000,2.79962300927463E+004,2.55166701350563E+004,2.66994204383386E+004,2.58318054850317E+004,2.61939283413099E+004,2.79681200736191E+004,2.55218512815728E+004,2.62171902089664E+004,2.72893671359702E+004 -1.22000000000000E-008,1.56760924494649E+022,5.41555939665422E+022,1.84259153076182E+023,2.29185272433269E+022,2.91299035938332E+021,2.79922357094899E+023,2.61240910723196E+004,2.61834070508879E+004,2.79990586173657E+004,2.58496720567405E+004,2.51284475679197E+004,2.73369368337504E+004,0.00000000000000E+000,0.00000000000000E+000,2.78077251383194E+004,2.47776909305483E+004,2.79209052148502E+004,0.00000000000000E+000,0.00000000000000E+000,1.88045391709929E+000,1.90967445536770E+000,1.90351202030121E+000,0.00000000000000E+000,0.00000000000000E+000,2.79024198564385E+004,2.54253677806368E+004,2.68830931796182E+004,2.61240910723196E+004,2.61834070508879E+004,2.79186756486455E+004,2.54305866795295E+004,2.64067487998956E+004,2.72630147704231E+004 -1.24000000000000E-008,1.60214469766083E+022,5.48212773304563E+022,1.84058947553200E+023,2.25581573019599E+022,2.96804687820328E+021,2.80427876040428E+023,2.60753905158308E+004,2.61581862442230E+004,2.80217195486658E+004,2.57579479967640E+004,2.52469856836479E+004,2.73347466943065E+004,0.00000000000000E+000,0.00000000000000E+000,2.77650600342784E+004,2.47007249143138E+004,2.77834839403702E+004,0.00000000000000E+000,0.00000000000000E+000,1.88027403356191E+000,1.90939738758348E+000,1.90304274358443E+000,0.00000000000000E+000,0.00000000000000E+000,2.78023122288397E+004,2.52142866531636E+004,2.67222152060458E+004,2.60753905158308E+004,2.61581862442230E+004,2.78877997577495E+004,2.53084179575010E+004,2.63736661831413E+004,2.72226121054953E+004 -1.26000000000000E-008,1.63367706753044E+022,5.53768476567304E+022,1.83858742030218E+023,2.22378284651892E+022,3.05313422547049E+021,2.80863323052913E+023,2.61602472607387E+004,2.60690432435920E+004,2.79489007391531E+004,2.57120153537658E+004,2.57143160001695E+004,2.72728161496050E+004,0.00000000000000E+000,0.00000000000000E+000,2.77723389913304E+004,2.45533158948062E+004,2.73337063052779E+004,0.00000000000000E+000,0.00000000000000E+000,1.88030476119140E+000,1.90886196187488E+000,1.90147438165186E+000,0.00000000000000E+000,0.00000000000000E+000,2.77965774777301E+004,2.52026186486373E+004,2.66475890768935E+004,2.61602472607387E+004,2.60690432435920E+004,2.78563704748671E+004,2.52444143580392E+004,2.64309419063173E+004,2.71830109968020E+004 -1.28000000000000E-008,1.66220635455533E+022,5.60225104683463E+022,1.83678557059535E+023,2.18774585238222E+022,3.12821129658862E+021,2.81328800893845E+023,2.61083412471138E+004,2.60222672100580E+004,2.79026018020222E+004,2.55183510365557E+004,2.60125998152726E+004,2.72157220744340E+004,0.00000000000000E+000,0.00000000000000E+000,2.77649331997042E+004,2.43755548011474E+004,2.69200027737297E+004,0.00000000000000E+000,0.00000000000000E+000,1.88027349799846E+000,1.90820781470138E+000,1.89998634806654E+000,0.00000000000000E+000,0.00000000000000E+000,2.77695344622752E+004,2.53516046286449E+004,2.69053351704075E+004,2.61083412471138E+004,2.60222672100580E+004,2.78262982504131E+004,2.51544092458226E+004,2.65212274800964E+004,2.71432575673580E+004 -1.30000000000000E-008,1.69824334869203E+022,5.64729728950551E+022,1.83473346398479E+023,2.16272016200951E+022,3.17826267733404E+021,2.81734217077883E+023,2.59711939268675E+004,2.60342973516065E+004,2.78773701915719E+004,2.54593454303131E+004,2.61826673000456E+004,2.71882929606922E+004,0.00000000000000E+000,0.00000000000000E+000,2.77515302156070E+004,2.42758775546439E+004,2.67068553635762E+004,0.00000000000000E+000,0.00000000000000E+000,1.88021687642096E+000,1.90783688548404E+000,1.89920200994546E+000,0.00000000000000E+000,0.00000000000000E+000,2.77172000472705E+004,2.52377701316143E+004,2.66515663267449E+004,2.59711939268675E+004,2.60342973516065E+004,2.77964211829659E+004,2.50683381861988E+004,2.64628934877204E+004,2.71087224143845E+004 -1.32000000000000E-008,1.72477058048710E+022,5.71086254305219E+022,1.83288156289721E+023,2.12568214025790E+022,3.28337057689942E+021,2.82184679504592E+023,2.60932337658868E+004,2.59551824912943E+004,2.77797076593394E+004,2.53313769726114E+004,2.59838586887158E+004,2.71020518201884E+004,0.00000000000000E+000,0.00000000000000E+000,2.77896132097709E+004,2.44558061566895E+004,2.69180572163172E+004,0.00000000000000E+000,0.00000000000000E+000,1.88037762008265E+000,1.90850429221186E+000,1.89997924400717E+000,0.00000000000000E+000,0.00000000000000E+000,2.77074358066660E+004,2.51106908944315E+004,2.63711140689056E+004,2.60932337658868E+004,2.59551824912943E+004,2.77614066972478E+004,2.50256084983754E+004,2.63533479991103E+004,2.70714305790480E+004 -1.34000000000000E-008,1.76080757462380E+022,5.77592933802123E+022,1.83087950766739E+023,2.09114668754356E+022,3.32341168149575E+021,2.82690198450121E+023,2.61165929790451E+004,2.59399263938980E+004,2.77418691401158E+004,2.54078737485871E+004,2.60492055412892E+004,2.70799091153030E+004,0.00000000000000E+000,0.00000000000000E+000,2.77497669807642E+004,2.42791465389509E+004,2.62174957682126E+004,0.00000000000000E+000,0.00000000000000E+000,1.88020942356236E+000,1.90784909789197E+000,1.89735388572815E+000,0.00000000000000E+000,0.00000000000000E+000,2.76852968689157E+004,2.47288988722667E+004,2.63237875772027E+004,2.61165929790451E+004,2.59399263938980E+004,2.77275825185995E+004,2.48995547492067E+004,2.61751190730868E+004,2.70345345613128E+004 -1.36000000000000E-008,1.79133891687851E+022,5.82848328780392E+022,1.82912770934130E+023,2.06261740051867E+022,3.36845792416663E+021,2.83105624910308E+023,2.62510898086946E+004,2.59395694508274E+004,2.77128324517384E+004,2.53090161080822E+004,2.58321798538727E+004,2.70577570329022E+004,0.00000000000000E+000,0.00000000000000E+000,2.76738189668498E+004,2.43182478354792E+004,2.51839457644288E+004,0.00000000000000E+000,0.00000000000000E+000,1.87988752346185E+000,1.90799492372275E+000,1.89321894886402E+000,0.00000000000000E+000,0.00000000000000E+000,2.76712161558453E+004,2.46564113692984E+004,2.65605232937409E+004,2.62510898086946E+004,2.59395694508274E+004,2.76900742954835E+004,2.48464230767374E+004,2.58654644223745E+004,2.70097461037099E+004 -1.38000000000000E-008,1.82337180055558E+022,5.88754391708351E+022,1.82717570549223E+023,2.02958348922670E+022,3.43852985721021E+021,2.83561092475091E+023,2.62660843465654E+004,2.59352248559383E+004,2.76324525381875E+004,2.53285793027553E+004,2.61462342067458E+004,2.70092766545472E+004,0.00000000000000E+000,0.00000000000000E+000,2.76359363698529E+004,2.43702395373571E+004,2.45060930108299E+004,0.00000000000000E+000,0.00000000000000E+000,1.87972631358757E+000,1.90818811035505E+000,1.89032132055568E+000,0.00000000000000E+000,0.00000000000000E+000,2.76632006704725E+004,2.46440991749117E+004,2.62571703224379E+004,2.62660843465654E+004,2.59352248559383E+004,2.76423431808558E+004,2.48657006505502E+004,2.57284711582520E+004,2.69774535114725E+004 -1.40000000000000E-008,1.85740673946246E+022,5.94560351874820E+022,1.82502349612017E+023,1.99604906412727E+022,3.52862234255197E+021,2.84021565177949E+023,2.63019214033910E+004,2.60189212420899E+004,2.75390511588175E+004,2.53265542658494E+004,2.59214246145301E+004,2.69643414678071E+004,0.00000000000000E+000,0.00000000000000E+000,2.76189912328953E+004,2.43145943525406E+004,2.46802077274815E+004,0.00000000000000E+000,0.00000000000000E+000,1.87965406324351E+000,1.90798131783261E+000,1.89108051170032E+000,0.00000000000000E+000,0.00000000000000E+000,2.76369350662530E+004,2.43993042317478E+004,2.61988459537702E+004,2.63019214033910E+004,2.60189212420899E+004,2.75893483825945E+004,2.47785937976558E+004,2.56613205010508E+004,2.69549196217461E+004 -1.42000000000000E-008,1.88743756790971E+022,6.00966928610233E+022,1.82307149227110E+023,1.95951155618311E+022,3.61871482789372E+021,2.84492048156956E+023,2.62832016355250E+004,2.59783761706952E+004,2.75598908025342E+004,2.51943283721006E+004,2.58786904411430E+004,2.69567886595061E+004,0.00000000000000E+000,0.00000000000000E+000,2.75157624697541E+004,2.44122116797836E+004,2.48646101932484E+004,0.00000000000000E+000,0.00000000000000E+000,1.87921203727992E+000,1.90834347642472E+000,1.89187318780907E+000,0.00000000000000E+000,0.00000000000000E+000,2.75946608891020E+004,2.41755919874933E+004,2.59897204585206E+004,2.62832016355250E+004,2.59783761706952E+004,2.75579448934770E+004,2.46833491382442E+004,2.56325380308630E+004,2.69172156530902E+004 -1.44000000000000E-008,1.92948072773586E+022,6.06772888776702E+022,1.82061897461458E+023,1.92697815869859E+022,3.68878676093730E+021,2.84992561964410E+023,2.62275017680356E+004,2.58724449540694E+004,2.75474171287240E+004,2.51193622108214E+004,2.61744637691403E+004,2.69194958177172E+004,0.00000000000000E+000,0.00000000000000E+000,2.74379874086791E+004,2.45204222841005E+004,2.49381539938623E+004,0.00000000000000E+000,0.00000000000000E+000,1.87887685435175E+000,1.90874161966626E+000,1.89218611677826E+000,0.00000000000000E+000,0.00000000000000E+000,2.75363943006363E+004,2.42265088584007E+004,2.61957562560122E+004,2.62275017680356E+004,2.58724449540694E+004,2.75143229726334E+004,2.46954169496010E+004,2.58412250579158E+004,2.68653759351449E+004 -1.46000000000000E-008,1.95951155618311E+022,6.11978232374225E+022,1.81856686800402E+023,1.89544578882898E+022,3.79889979857722E+021,2.85402983286522E+023,2.63769262434793E+004,2.58970236262202E+004,2.75011519609838E+004,2.52426966936569E+004,2.60714469163876E+004,2.69109773431276E+004,0.00000000000000E+000,0.00000000000000E+000,2.73637811181400E+004,2.46325342726676E+004,2.47448263747243E+004,0.00000000000000E+000,0.00000000000000E+000,1.87855531356744E+000,1.90915048637981E+000,1.89135960160513E+000,0.00000000000000E+000,0.00000000000000E+000,2.74357966479596E+004,2.43168048589384E+004,2.69882879497968E+004,2.63769262434793E+004,2.58970236262202E+004,2.74446329195457E+004,2.48060763655592E+004,2.59734351347668E+004,2.68446619740355E+004 -1.48000000000000E-008,1.99154443986018E+022,6.16182548356840E+022,1.81666491553569E+023,1.87142112607118E+022,3.85896145547172E+021,2.85773363504038E+023,2.63813191027514E+004,2.58932824970641E+004,2.74576943723001E+004,2.53152946931436E+004,2.61483973211943E+004,2.68873869563632E+004,0.00000000000000E+000,0.00000000000000E+000,2.73870736598563E+004,2.45203592422670E+004,2.48851781126609E+004,0.00000000000000E+000,0.00000000000000E+000,1.87865642529195E+000,1.90874138872086E+000,1.89196088709663E+000,0.00000000000000E+000,0.00000000000000E+000,2.73367437276826E+004,2.41919821325281E+004,2.70818831374380E+004,2.63813191027514E+004,2.58932824970641E+004,2.74032399379939E+004,2.47704847044783E+004,2.60725133006006E+004,2.68160679624744E+004 -1.50000000000000E-008,2.02708092018943E+022,6.21237737812128E+022,1.81446265478289E+023,1.84189081143138E+022,3.94404880273893E+021,2.86203805378449E+023,2.62342536711415E+004,2.58677966294638E+004,2.73593010646954E+004,2.53835289538337E+004,2.61746946874541E+004,2.68123928385539E+004,0.00000000000000E+000,0.00000000000000E+000,2.73621972194214E+004,2.44137351101371E+004,2.49647785097298E+004,0.00000000000000E+000,0.00000000000000E+000,1.87854843182821E+000,1.90834910574057E+000,1.89229895819306E+000,0.00000000000000E+000,0.00000000000000E+000,2.73830736152136E+004,2.40664559797162E+004,2.72347413934610E+004,2.62342536711415E+004,2.58677966294638E+004,2.73670040951357E+004,2.47343360578233E+004,2.61501122206136E+004,2.67751582090959E+004 -1.52000000000000E-008,2.06612099717085E+022,6.25141745510270E+022,1.81231044541084E+023,1.82036871771085E+022,3.98408990733527E+021,2.86594206148263E+023,2.63039241794352E+004,2.58430343830659E+004,2.73008006220626E+004,2.54060929895339E+004,2.55927481521169E+004,2.67668630093169E+004,0.00000000000000E+000,0.00000000000000E+000,2.73300756591171E+004,2.44735988107787E+004,2.52885424807380E+004,0.00000000000000E+000,0.00000000000000E+000,1.87840870133808E+000,1.90856976557724E+000,1.89365249477167E+000,0.00000000000000E+000,0.00000000000000E+000,2.73817221597975E+004,2.38905895245181E+004,2.64224691649457E+004,2.63039241794352E+004,2.58430343830659E+004,2.73323244190947E+004,2.47097495654361E+004,2.57499046374415E+004,2.67447522984474E+004 -1.54000000000000E-008,2.10416004653737E+022,6.29245958731394E+022,1.80990797913506E+023,1.79484251353069E+022,4.08419266882610E+021,2.86989612056152E+023,2.61066087026652E+004,2.58078358841429E+004,2.72597102010120E+004,2.55348524163754E+004,2.61500936398274E+004,2.67331682358510E+004,0.00000000000000E+000,0.00000000000000E+000,2.73292389235559E+004,2.44533436604172E+004,2.50269932393419E+004,0.00000000000000E+000,0.00000000000000E+000,1.87840505719909E+000,1.90849522333814E+000,1.89256172160976E+000,0.00000000000000E+000,0.00000000000000E+000,2.73266864586530E+004,2.38024039232615E+004,2.57010261824767E+004,2.61066087026652E+004,2.58078358841429E+004,2.72981719689842E+004,2.47345404667782E+004,2.57114074351461E+004,2.67011294733573E+004 -1.56000000000000E-008,2.14620320636352E+022,6.34351199567427E+022,1.80765566700151E+023,1.76781476792816E+022,4.11422349727336E+021,2.87455089897084E+023,2.58341665215221E+004,2.58402074903012E+004,2.72115268018629E+004,2.54486260845497E+004,2.61866709394520E+004,2.66829848968398E+004,0.00000000000000E+000,0.00000000000000E+000,2.73093314259519E+004,2.44149712198463E+004,2.46538375858146E+004,0.00000000000000E+000,0.00000000000000E+000,1.87831829190689E+000,1.90835367285324E+000,1.89096620598539E+000,0.00000000000000E+000,0.00000000000000E+000,2.73026788751412E+004,2.37391680870711E+004,2.53247869972410E+004,2.58341665215221E+004,2.58402074903012E+004,2.72647392798965E+004,2.46681948403210E+004,2.55158936032429E+004,2.66588513081032E+004 -1.58000000000000E-008,2.17873660384804E+022,6.39406389022714E+022,1.80570366315244E+023,1.73928548090327E+022,4.17929029224240E+021,2.87870516357271E+023,2.58295913951772E+004,2.58303943034075E+004,2.71672783816677E+004,2.53703185945289E+004,2.59215331097901E+004,2.66424365471151E+004,0.00000000000000E+000,0.00000000000000E+000,2.72967846491259E+004,2.44465515690865E+004,2.47206792377282E+004,0.00000000000000E+000,0.00000000000000E+000,1.87826354413499E+000,1.90847020012692E+000,1.89125547685786E+000,0.00000000000000E+000,0.00000000000000E+000,2.72504739959219E+004,2.36795145702748E+004,2.52579608867585E+004,2.58295913951772E+004,2.58303943034075E+004,2.72268338387658E+004,2.46256399986322E+004,2.53993835652564E+004,2.66272201554834E+004 -1.60000000000000E-008,2.21777668082947E+022,6.43710807766820E+022,1.80330119687666E+023,1.71325876291566E+022,4.26938277758415E+021,2.88280937679384E+023,2.57251060676634E+004,2.57568588171817E+004,2.71355940649809E+004,2.54322898466885E+004,2.61279761506746E+004,2.66030716287746E+004,0.00000000000000E+000,0.00000000000000E+000,2.72864701067777E+004,2.43221128747619E+004,2.47475619287370E+004,0.00000000000000E+000,0.00000000000000E+000,1.87821849980810E+000,1.90800931308925E+000,1.89137138500517E+000,0.00000000000000E+000,0.00000000000000E+000,2.71856289553402E+004,2.36621956393999E+004,2.56147326543746E+004,2.57251060676634E+004,2.57568588171817E+004,2.71913422145359E+004,2.46131802943217E+004,2.56001620555960E+004,2.65814474584091E+004 -1.62000000000000E-008,2.25481470258108E+022,6.48816048602853E+022,1.80099883336237E+023,1.68322793446841E+022,4.35947526292590E+021,2.88721389829943E+023,2.56898132912663E+004,2.56725888612546E+004,2.71059389624369E+004,2.53029324078857E+004,2.67439596780597E+004,2.65626615331243E+004,0.00000000000000E+000,0.00000000000000E+000,2.72733805448388E+004,2.43326298688074E+004,2.46159506457460E+004,0.00000000000000E+000,0.00000000000000E+000,1.87816128878302E+000,1.90804844461158E+000,1.89080155836293E+000,0.00000000000000E+000,0.00000000000000E+000,2.71265588046423E+004,2.36438699414460E+004,2.53259634923999E+004,2.56898132912663E+004,2.56725888612546E+004,2.71576565607419E+004,2.45546010629596E+004,2.57484825760521E+004,2.65362639509274E+004 -1.64000000000000E-008,2.28935015529542E+022,6.54672060150067E+022,1.79889667537107E+023,1.65019402317643E+022,4.43455233404403E+021,2.89186867670876E+023,2.56685827819341E+004,2.56346235154169E+004,2.70863043277839E+004,2.52379212569050E+004,2.67046635619720E+004,2.65341063271665E+004,0.00000000000000E+000,0.00000000000000E+000,2.71793185439624E+004,2.43768568582110E+004,2.43948331663009E+004,0.00000000000000E+000,0.00000000000000E+000,1.87774858290181E+000,1.90821264030013E+000,1.88983063012797E+000,0.00000000000000E+000,0.00000000000000E+000,2.71169398273186E+004,2.35628365117649E+004,2.52474754096735E+004,2.56685827819341E+004,2.56346235154169E+004,2.71206074589386E+004,2.45151201909894E+004,2.56480970181001E+004,2.64979973542812E+004 -1.66000000000000E-008,2.31387533186067E+022,6.58826324751936E+022,1.79744518532945E+023,1.62717038803354E+022,4.47959857671491E+021,2.89517206783796E+023,2.55412758368046E+004,2.57035801063533E+004,2.70555621230541E+004,2.52800442343855E+004,2.68173046353609E+004,2.65234043557021E+004,0.00000000000000E+000,0.00000000000000E+000,2.71543487680390E+004,2.42416412104361E+004,2.44599338765892E+004,0.00000000000000E+000,0.00000000000000E+000,1.87763855583234E+000,1.90770878922801E+000,1.89011827578741E+000,0.00000000000000E+000,0.00000000000000E+000,2.70647371946454E+004,2.34976563884346E+004,2.47920344072340E+004,2.55412758368046E+004,2.57035801063533E+004,2.70851995858188E+004,2.44772098305816E+004,2.55827467265211E+004,2.64775810479714E+004 -1.68000000000000E-008,2.35591849168682E+022,6.64231873872442E+022,1.79509277043441E+023,1.59764007339374E+022,4.52964995746032E+021,2.89997700038952E+023,2.54679190935207E+004,2.56387779945533E+004,2.70574984846792E+004,2.51049724703544E+004,2.69144527381598E+004,2.64936063677139E+004,0.00000000000000E+000,0.00000000000000E+000,2.70946741339403E+004,2.41734169193637E+004,2.45465693866023E+004,0.00000000000000E+000,0.00000000000000E+000,1.87737480132815E+000,1.90745246163720E+000,1.89049875172613E+000,0.00000000000000E+000,0.00000000000000E+000,2.70056002936618E+004,2.34458873992865E+004,2.48623833445850E+004,2.54679190935207E+004,2.56387779945533E+004,2.70525541918536E+004,2.43673534857400E+004,2.56691699775537E+004,2.64304584947518E+004 -1.70000000000000E-008,2.39145497201607E+022,6.68986755043256E+022,1.79309071520460E+023,1.57161335540612E+022,4.57469620013120E+021,2.90413126499139E+023,2.53480549095414E+004,2.56901603821100E+004,2.70484933132095E+004,2.51502903196324E+004,2.68404410021435E+004,2.64895651319375E+004,0.00000000000000E+000,0.00000000000000E+000,2.70627887113352E+004,2.38869156386402E+004,2.50587525108570E+004,0.00000000000000E+000,0.00000000000000E+000,1.87723340528431E+000,1.90636031517672E+000,1.89269536311372E+000,0.00000000000000E+000,0.00000000000000E+000,2.69086555568286E+004,2.33483215985081E+004,2.44649085222260E+004,2.53480549095414E+004,2.56901603821100E+004,2.70117285709129E+004,2.42797326708983E+004,2.56619095165830E+004,2.64011893897731E+004 -1.72000000000000E-008,2.42448888330805E+022,6.74091995879289E+022,1.79118876273627E+023,1.54358458218869E+022,4.62474758087662E+021,2.90833558097400E+023,2.53496952953227E+004,2.57009337476223E+004,2.69797118772106E+004,2.51735058816119E+004,2.67633868754019E+004,2.64481303506465E+004,0.00000000000000E+000,0.00000000000000E+000,2.70025430577851E+004,2.39938549048275E+004,2.46445897009447E+004,0.00000000000000E+000,0.00000000000000E+000,1.87696535403336E+000,1.90677097005421E+000,1.89092606268510E+000,0.00000000000000E+000,0.00000000000000E+000,2.69125867248712E+004,2.32004243427479E+004,2.45432482549517E+004,2.53496952953227E+004,2.57009337476223E+004,2.69664215718152E+004,2.42764894115539E+004,2.55376059044864E+004,2.63728444028267E+004 -1.74000000000000E-008,2.45752279460002E+022,6.78496517384886E+022,1.78923675888720E+023,1.51855889181598E+022,4.68480923777112E+021,2.91218953729140E+023,2.53533247540589E+004,2.56191674463291E+004,2.69947499008733E+004,2.51334174201946E+004,2.67535158462025E+004,2.64348043652241E+004,0.00000000000000E+000,0.00000000000000E+000,2.70182501589443E+004,2.38471006617157E+004,2.43191909385734E+004,0.00000000000000E+000,0.00000000000000E+000,1.87703535239864E+000,1.90620649717595E+000,1.88949451048117E+000,0.00000000000000E+000,0.00000000000000E+000,2.68041376894430E+004,2.29890562814876E+004,2.47592357104689E+004,2.53533247540589E+004,2.56191674463291E+004,2.69457297067931E+004,2.41573812065932E+004,2.55069506870178E+004,2.63337378734216E+004 -1.76000000000000E-008,2.49305927492927E+022,6.83051193032719E+022,1.78713460089589E+023,1.49253217382836E+022,4.74987603274016E+021,2.91624369913178E+023,2.52859609479109E+004,2.56403909020508E+004,2.69332554166444E+004,2.50033237853950E+004,2.67672090873534E+004,2.63881334760230E+004,0.00000000000000E+000,0.00000000000000E+000,2.69704660530073E+004,2.39256768040395E+004,2.41572432292767E+004,0.00000000000000E+000,0.00000000000000E+000,1.87682215580346E+000,1.90650957820555E+000,1.88876794971866E+000,0.00000000000000E+000,0.00000000000000E+000,2.68037760428507E+004,2.28946181913416E+004,2.46988665082972E+004,2.52859609479109E+004,2.56403909020508E+004,2.69057541963794E+004,2.40952014684757E+004,2.54511094470573E+004,2.63033663280186E+004 -1.78000000000000E-008,2.52158856195416E+022,6.85703916212226E+022,1.78563305947353E+023,1.47851778721965E+022,4.76489144696379E+021,2.91899652507277E+023,2.52519195931447E+004,2.55772480504791E+004,2.69416389237419E+004,2.49112259319017E+004,2.71434689626957E+004,2.63756125394473E+004,0.00000000000000E+000,0.00000000000000E+000,2.68914889230229E+004,2.39325885136125E+004,2.44049486154603E+004,0.00000000000000E+000,0.00000000000000E+000,1.87646816183633E+000,1.90653614412598E+000,1.88987542370092E+000,0.00000000000000E+000,0.00000000000000E+000,2.67917143190568E+004,2.29216908257444E+004,2.44580955503881E+004,2.52519195931447E+004,2.55772480504791E+004,2.68843487451555E+004,2.40649438448604E+004,2.56127868418141E+004,2.62727145443264E+004 -1.80000000000000E-008,2.55262041801632E+022,6.90909259809749E+022,1.78373110700520E+023,1.44898747257985E+022,4.83496338000737E+021,2.92315078967464E+023,2.52826947196975E+004,2.55334286194058E+004,2.69302325958118E+004,2.46763179401089E+004,2.70310863538329E+004,2.63461601430867E+004,0.00000000000000E+000,0.00000000000000E+000,2.68357655362940E+004,2.38109956953932E+004,2.44705603237546E+004,0.00000000000000E+000,0.00000000000000E+000,1.87621717043769E+000,1.90606657469440E+000,1.89016508595694E+000,0.00000000000000E+000,0.00000000000000E+000,2.67932820066152E+004,2.27357793552475E+004,2.38263499497639E+004,2.52826947196975E+004,2.55334286194058E+004,2.68646235717919E+004,2.38755091270315E+004,2.53984274013205E+004,2.62394247962722E+004 -1.82000000000000E-008,2.59015895357538E+022,6.95163627173110E+022,1.78172905177539E+023,1.42646435124441E+022,4.85998907038008E+021,2.92715490013428E+023,2.51008724196264E+004,2.55346815200233E+004,2.68675472019679E+004,2.45535433875680E+004,2.67523730405011E+004,2.62800011041793E+004,0.00000000000000E+000,0.00000000000000E+000,2.68484374155058E+004,2.37697353520472E+004,2.45207614066746E+004,0.00000000000000E+000,0.00000000000000E+000,1.87627433711209E+000,1.90590616099266E+000,1.89038568691636E+000,0.00000000000000E+000,0.00000000000000E+000,2.67779571403547E+004,2.28647889121748E+004,2.33766123034819E+004,2.51008724196264E+004,2.55346815200233E+004,2.68362751330232E+004,2.38481510174491E+004,2.51602810062031E+004,2.62001571712341E+004 -1.84000000000000E-008,2.63620622386116E+022,6.99668251440197E+022,1.77932658549961E+023,1.40294020229407E+022,4.88000962267825E+021,2.93170957578211E+023,2.51023327339981E+004,2.54829485550066E+004,2.68431457231176E+004,2.44419284565834E+004,2.64998660649372E+004,2.62413707394808E+004,0.00000000000000E+000,0.00000000000000E+000,2.68127187272691E+004,2.37619589673927E+004,2.44902527541274E+004,0.00000000000000E+000,0.00000000000000E+000,1.87611306386078E+000,1.90587586627152E+000,1.89025172703866E+000,0.00000000000000E+000,0.00000000000000E+000,2.67097102595926E+004,2.28494685232771E+004,2.35667566984030E+004,2.51023327339981E+004,2.54829485550066E+004,2.67960325636266E+004,2.37930813888643E+004,2.50971751114877E+004,2.61583780323013E+004 -1.86000000000000E-008,2.66723807992332E+022,7.02971642569395E+022,1.77732453026979E+023,1.38191862238099E+022,4.97010210802000E+021,2.93491286414982E+023,2.50522709354280E+004,2.54449092562352E+004,2.68112683036368E+004,2.42644087483206E+004,2.66803813656107E+004,2.62020036670935E+004,0.00000000000000E+000,0.00000000000000E+000,2.67916186911131E+004,2.36288653861141E+004,2.48543570671857E+004,0.00000000000000E+000,0.00000000000000E+000,1.87601759760749E+000,1.90535432914324E+000,1.89182941645538E+000,0.00000000000000E+000,0.00000000000000E+000,2.66722948520224E+004,2.29245270217027E+004,2.39488616760465E+004,2.50522709354280E+004,2.54449092562352E+004,2.67654845461579E+004,2.37009765818706E+004,2.53864483148653E+004,2.61258364554042E+004 -1.88000000000000E-008,2.70727918451966E+022,7.07776575120955E+022,1.77522237227848E+023,1.35689293200828E+022,4.99012266031817E+021,2.93931738565541E+023,2.51480747700738E+004,2.53872634081805E+004,2.67393144371933E+004,2.41562746114092E+004,2.66088534215199E+004,2.61457262554502E+004,0.00000000000000E+000,0.00000000000000E+000,2.67478429163343E+004,2.37364419840161E+004,2.45041997014301E+004,0.00000000000000E+000,0.00000000000000E+000,1.87581906609622E+000,1.90577632177292E+000,1.89031300702155E+000,0.00000000000000E+000,0.00000000000000E+000,2.66497814735450E+004,2.31796478305437E+004,2.40405866900187E+004,2.51480747700738E+004,2.53872634081805E+004,2.67155982745149E+004,2.37575706114775E+004,2.52859835089229E+004,2.60905385582709E+004 -1.90000000000000E-008,2.74031309581163E+022,7.11680582819098E+022,1.77342052257165E+023,1.33587135209520E+022,5.02015348876542E+021,2.94292108506908E+023,2.51221078716743E+004,2.54062078252444E+004,2.67104172038453E+004,2.40874620977450E+004,2.61386130809078E+004,2.61183097603702E+004,0.00000000000000E+000,0.00000000000000E+000,2.66074620260685E+004,2.36810233662854E+004,2.42753030670911E+004,0.00000000000000E+000,0.00000000000000E+000,1.87517810310438E+000,1.90555940108274E+000,1.88929855122711E+000,0.00000000000000E+000,0.00000000000000E+000,2.67146181433793E+004,2.31436213389940E+004,2.42294297544042E+004,2.51221078716743E+004,2.54062078252444E+004,2.66835586391462E+004,2.37019502936207E+004,2.50733790069264E+004,2.60664540264025E+004 -1.92000000000000E-008,2.77635008994833E+022,7.14683665663823E+022,1.77126831319960E+023,1.31735234121940E+022,5.09022542180900E+021,2.94622447619828E+023,2.50652556477469E+004,2.53444132798072E+004,2.66578674269114E+004,2.41408082064921E+004,2.62338833037936E+004,2.60693053001976E+004,0.00000000000000E+000,0.00000000000000E+000,2.65539933380691E+004,2.37919075674221E+004,2.42288790656608E+004,0.00000000000000E+000,0.00000000000000E+000,1.87493222858801E+000,1.90599243108923E+000,1.88909051062651E+000,0.00000000000000E+000,0.00000000000000E+000,2.67147624982421E+004,2.33681325366566E+004,2.43259895121771E+004,2.50652556477469E+004,2.53444132798072E+004,2.66460903312932E+004,2.38207451107102E+004,2.51301930486682E+004,2.60288452788876E+004 -1.94000000000000E-008,2.80788245981795E+022,7.19538649596128E+022,1.76966666901574E+023,1.29282716465415E+022,5.09523055988355E+021,2.95022858665792E+023,2.49388258298910E+004,2.53488338060014E+004,2.66081057415168E+004,2.41437336030336E+004,2.64036558819605E+004,2.60305820437711E+004,0.00000000000000E+000,0.00000000000000E+000,2.65532008785117E+004,2.37177867436830E+004,2.42144542048406E+004,0.00000000000000E+000,0.00000000000000E+000,1.87492857719988E+000,1.90570341236757E+000,1.88902570901017E+000,0.00000000000000E+000,0.00000000000000E+000,2.66617534236069E+004,2.33939502155911E+004,2.41608466929934E+004,2.49388258298910E+004,2.53488338060014E+004,2.66087388633676E+004,2.38090399418351E+004,2.51522341291071E+004,2.59946822781970E+004 -1.96000000000000E-008,2.85292870248882E+022,7.22942143486817E+022,1.76696389445549E+023,1.27130507093362E+022,5.18532304522530E+021,2.95418264573680E+023,2.48951367800387E+004,2.53051182313490E+004,2.65838318621519E+004,2.43180011448883E+004,2.63013759378013E+004,2.60053601475518E+004,0.00000000000000E+000,0.00000000000000E+000,2.65623576274368E+004,2.37156102533117E+004,2.49016840046723E+004,0.00000000000000E+000,0.00000000000000E+000,1.87497075544020E+000,1.90569489874308E+000,1.89203116356798E+000,0.00000000000000E+000,0.00000000000000E+000,2.65214542793708E+004,2.33829903730115E+004,2.39445214943368E+004,2.48951367800387E+004,2.53051182313490E+004,2.65598290360282E+004,2.38809712967510E+004,2.52331901636684E+004,2.59534470281422E+004 -1.98000000000000E-008,2.89246929327770E+022,7.26695997042723E+022,1.76451137679896E+023,1.24778092198327E+022,5.28042066864159E+021,2.95803660205420E+023,2.48221411944165E+004,2.52908442932320E+004,2.65343853187227E+004,2.43628011862509E+004,2.62274676680969E+004,2.59643753642874E+004,0.00000000000000E+000,0.00000000000000E+000,2.64941742560033E+004,2.38317531691333E+004,2.49109723723671E+004,0.00000000000000E+000,0.00000000000000E+000,1.87465600189854E+000,1.90614706990857E+000,1.89207067010587E+000,0.00000000000000E+000,0.00000000000000E+000,2.65346960340942E+004,2.32024304713221E+004,2.35987218726095E+004,2.48221411944165E+004,2.52908442932320E+004,2.65235105230520E+004,2.38801880854976E+004,2.51032200945824E+004,2.59174613931062E+004 -2.00000000000000E-008,2.92250012172495E+022,7.31300724071302E+022,1.76260942433064E+023,1.22075317638074E+022,5.36050287783426E+021,2.96184050699085E+023,2.48700871105200E+004,2.53381238139920E+004,2.65492223497100E+004,2.40594616192224E+004,2.58173049095982E+004,2.59686450655572E+004,0.00000000000000E+000,0.00000000000000E+000,2.64009756506624E+004,2.36766236064937E+004,2.49655581448520E+004,0.00000000000000E+000,0.00000000000000E+000,1.87422319989319E+000,1.90554213666114E+000,1.89230225892509E+000,0.00000000000000E+000,0.00000000000000E+000,2.64752055707853E+004,2.31306480396157E+004,2.35929234950901E+004,2.48700871105200E+004,2.53381238139920E+004,2.64872690281305E+004,2.36848145498419E+004,2.49379869504751E+004,2.59004204152060E+004 -2.02000000000000E-008,2.96304174012874E+022,7.34854372104226E+022,1.76000675253188E+023,1.19722902743040E+022,5.47562105354872E+021,2.96564441192750E+023,2.47936679955308E+004,2.54141714277152E+004,2.65276910005237E+004,2.39978234592912E+004,2.58743534138898E+004,2.59643293412390E+004,0.00000000000000E+000,0.00000000000000E+000,2.63836913936443E+004,2.35781986208606E+004,2.44884920695424E+004,0.00000000000000E+000,0.00000000000000E+000,1.87414260548562E+000,1.90515426593600E+000,1.89024398609095E+000,0.00000000000000E+000,0.00000000000000E+000,2.63582120418855E+004,2.29930433167494E+004,2.36809540985737E+004,2.47936679955308E+004,2.54141714277152E+004,2.64391223235782E+004,2.35910243889258E+004,2.48574932393467E+004,2.58765696476696E+004 -2.04000000000000E-008,3.00158130330271E+022,7.37406992522243E+022,1.75770438901759E+023,1.18071207178441E+022,5.55069812466685E+021,2.96884770029521E+023,2.48334703755990E+004,2.53867043480069E+004,2.65218025247189E+004,2.39449108725839E+004,2.57004710789071E+004,2.59513312637343E+004,0.00000000000000E+000,0.00000000000000E+000,2.62870435867784E+004,2.35223802192104E+004,2.43011986309280E+004,0.00000000000000E+000,0.00000000000000E+000,1.87369003902261E+000,1.90493287975253E+000,1.88941425880298E+000,0.00000000000000E+000,0.00000000000000E+000,2.63582012244196E+004,2.29229341567116E+004,2.34298846782501E+004,2.48334703755990E+004,2.53867043480069E+004,2.64102077219515E+004,2.35323296041384E+004,2.46575699197417E+004,2.58493546826877E+004 -2.06000000000000E-008,3.05563679450777E+022,7.40510178128459E+022,1.75470130617286E+023,1.16219306090860E+022,5.61075978156135E+021,2.97310206765857E+023,2.47331076531715E+004,2.53731366927743E+004,2.64932312079620E+004,2.38588065045754E+004,2.57114736896450E+004,2.59156174136909E+004,0.00000000000000E+000,0.00000000000000E+000,2.62413382703552E+004,2.33036693029024E+004,2.45687915590035E+004,0.00000000000000E+000,0.00000000000000E+000,1.87347488276505E+000,1.90405538397585E+000,1.89059592045179E+000,0.00000000000000E+000,0.00000000000000E+000,2.63050206442936E+004,2.30089334740208E+004,2.30229403129975E+004,2.47331076531715E+004,2.53731366927743E+004,2.63698094695315E+004,2.34595110346697E+004,2.46176035781373E+004,2.58065230923492E+004 -2.08000000000000E-008,3.09167378864447E+022,7.44013774780638E+022,1.75269925094305E+023,1.14267302241789E+022,5.65080088615769E+021,2.97665571569150E+023,2.47805763641432E+004,2.53564051302551E+004,2.64891957184034E+004,2.38366009420066E+004,2.51416555383904E+004,2.59011825259458E+004,0.00000000000000E+000,0.00000000000000E+000,2.62069641328697E+004,2.31050961692449E+004,2.44866163908695E+004,0.00000000000000E+000,0.00000000000000E+000,1.87331258433605E+000,1.90324453845585E+000,1.89023573836438E+000,0.00000000000000E+000,0.00000000000000E+000,2.62266206449562E+004,2.29910235049431E+004,2.32843945359291E+004,2.47805763641432E+004,2.53564051302551E+004,2.63358696307505E+004,2.33899432406078E+004,2.44228556889138E+004,2.57801101305365E+004 -2.10000000000000E-008,3.12170461709172E+022,7.47717576955799E+022,1.75084734985546E+023,1.12065041488991E+022,5.72087281920127E+021,2.98000915820144E+023,2.48259666412329E+004,2.53781932053566E+004,2.64578507155522E+004,2.38766933929234E+004,2.50635816754078E+004,2.58921723320625E+004,0.00000000000000E+000,0.00000000000000E+000,2.62119819465392E+004,2.31027199162598E+004,2.41812657723435E+004,0.00000000000000E+000,0.00000000000000E+000,1.87333630201682E+000,1.90323475239112E+000,1.88887632692416E+000,0.00000000000000E+000,0.00000000000000E+000,2.60981956283782E+004,2.29374069222367E+004,2.37208732909917E+004,2.48259666412329E+004,2.53781932053566E+004,2.62861866192492E+004,2.33911780831003E+004,2.44318382408523E+004,2.57609283864610E+004 -2.12000000000000E-008,3.15323698696133E+022,7.51071019465742E+022,1.74904550014863E+023,1.10163089020665E+022,5.76591906187215E+021,2.98326249794989E+023,2.48321552091075E+004,2.53462550891761E+004,2.64144408648908E+004,2.39945874718032E+004,2.50897449021624E+004,2.58633076783755E+004,0.00000000000000E+000,0.00000000000000E+000,2.61475579755287E+004,2.30340741773411E+004,2.40121739673154E+004,0.00000000000000E+000,0.00000000000000E+000,1.87303111325071E+000,1.90295119345638E+000,1.88810895490581E+000,0.00000000000000E+000,0.00000000000000E+000,2.61059410747561E+004,2.30609848745837E+004,2.34018160882205E+004,2.48321552091075E+004,2.53462550891761E+004,2.62519391218846E+004,2.34593069793134E+004,2.43042711248260E+004,2.57330875326669E+004 -2.14000000000000E-008,3.19177655013530E+022,7.55825900636556E+022,1.74679318801509E+023,1.07460314460412E+022,5.83098585684119E+021,2.98756691669400E+023,2.47863075813271E+004,2.52679136757538E+004,2.63619459574962E+004,2.39055034016802E+004,2.50188974952996E+004,2.58022632462009E+004,0.00000000000000E+000,0.00000000000000E+000,2.61049837693638E+004,2.28727356243451E+004,2.37448190742339E+004,0.00000000000000E+000,0.00000000000000E+000,1.87282862306916E+000,1.90227815644405E+000,1.88687378910437E+000,0.00000000000000E+000,0.00000000000000E+000,2.61514149472246E+004,2.29019317487991E+004,2.32817594687187E+004,2.47863075813271E+004,2.52679136757538E+004,2.62306596689810E+004,2.33300767383027E+004,2.41653460275155E+004,2.56881449688442E+004 -2.16000000000000E-008,3.22831405807946E+022,7.57978110008609E+022,1.74454087588154E+023,1.05958773038050E+022,5.91607320410840E+021,2.99046989677723E+023,2.48516354658771E+004,2.52527953842523E+004,2.63035371819776E+004,2.37882911712234E+004,2.51041905332538E+004,2.57676262996525E+004,0.00000000000000E+000,0.00000000000000E+000,2.61111429795140E+004,2.28664594080652E+004,2.37145479700731E+004,0.00000000000000E+000,0.00000000000000E+000,1.87285795725338E+000,1.90225178606096E+000,1.88673221806764E+000,0.00000000000000E+000,0.00000000000000E+000,2.60958922504685E+004,2.27979639917744E+004,2.34073911401712E+004,2.48516354658771E+004,2.52527953842523E+004,2.61906850204961E+004,2.32472778044907E+004,2.42307019190262E+004,2.56653425256713E+004 -2.18000000000000E-008,3.26785464886834E+022,7.60530730426626E+022,1.74218846098651E+023,1.04307077473451E+022,5.99115027522653E+021,2.99372323652568E+023,2.47911998219941E+004,2.51926334375048E+004,2.62989988674289E+004,2.38036967257153E+004,2.50964664731347E+004,2.57423425616987E+004,0.00000000000000E+000,0.00000000000000E+000,2.60688396666959E+004,2.26217266226334E+004,2.41187728110693E+004,0.00000000000000E+000,0.00000000000000E+000,1.87265620820942E+000,1.90121229541488E+000,1.88859395035834E+000,0.00000000000000E+000,0.00000000000000E+000,2.60384277569484E+004,2.27544447155885E+004,2.37506890492738E+004,2.47911998219941E+004,2.51926334375048E+004,2.61604569051592E+004,2.31739986484756E+004,2.44376932581790E+004,2.56265949657922E+004 -2.20000000000000E-008,3.31039832250194E+022,7.64084378459550E+022,1.73973594332998E+023,1.02204919482143E+022,6.05621707019557E+021,2.99762724422383E+023,2.47748099155579E+004,2.51190293243255E+004,2.62755302561503E+004,2.38351568487960E+004,2.52919621492211E+004,2.57119352675023E+004,0.00000000000000E+000,0.00000000000000E+000,2.60697655815912E+004,2.24082759145672E+004,2.37763774414418E+004,0.00000000000000E+000,0.00000000000000E+000,1.87266063084703E+000,1.90028745996478E+000,1.88702100422422E+000,0.00000000000000E+000,0.00000000000000E+000,2.59758843201654E+004,2.26427655141396E+004,2.35013530847164E+004,2.47748099155579E+004,2.51190293243255E+004,2.61322641573099E+004,2.30965982532217E+004,2.43567017075411E+004,2.55847110081613E+004 -2.22000000000000E-008,3.34993891329082E+022,7.67137512685021E+022,1.73763378533867E+023,1.00553223917545E+022,6.08124276056828E+021,3.00113084087601E+023,2.47432112431409E+004,2.50916852489279E+004,2.62486055775616E+004,2.37902040818509E+004,2.55145027354523E+004,2.56875978272690E+004,0.00000000000000E+000,0.00000000000000E+000,2.60000875727193E+004,2.24786317462172E+004,2.33251403736974E+004,0.00000000000000E+000,0.00000000000000E+000,1.87232695336051E+000,1.90059420319580E+000,1.88487894622953E+000,0.00000000000000E+000,0.00000000000000E+000,2.59792389573604E+004,2.24100832271398E+004,2.32832967274586E+004,2.47432112431409E+004,2.50916852489279E+004,2.61025065624713E+004,2.30289640591921E+004,2.42669724441564E+004,2.55522231668008E+004 -2.24000000000000E-008,3.38047025554553E+022,7.70591057956455E+022,1.73618229529706E+023,9.89015283529459E+021,6.06622734634466E+021,3.00438418062446E+023,2.46810177272187E+004,2.50852209010300E+004,2.62394501081947E+004,2.35675384806149E+004,2.52482297356146E+004,2.56600808075203E+004,0.00000000000000E+000,0.00000000000000E+000,2.59520877027291E+004,2.25386741797835E+004,2.35651236621841E+004,0.00000000000000E+000,0.00000000000000E+000,1.87209607061711E+000,1.90085449300300E+000,1.88602817306810E+000,0.00000000000000E+000,0.00000000000000E+000,2.59293826917924E+004,2.26242783644146E+004,2.34148023273182E+004,2.46810177272187E+004,2.50852209010300E+004,2.60709273094708E+004,2.30107608286267E+004,2.42547339035613E+004,2.55243058361593E+004 -2.26000000000000E-008,3.40950005637787E+022,7.74695271177579E+022,1.73443049697097E+023,9.65491134579112E+021,6.12628900323916E+021,3.00788777727664E+023,2.46449591626105E+004,2.50860810995599E+004,2.61459989885334E+004,2.35318994487373E+004,2.51572715614776E+004,2.55988195961828E+004,0.00000000000000E+000,0.00000000000000E+000,2.59763641145606E+004,2.23252087061847E+004,2.36315058675002E+004,0.00000000000000E+000,0.00000000000000E+000,1.87221294608226E+000,1.89992285141616E+000,1.88634202425859E+000,0.00000000000000E+000,0.00000000000000E+000,2.59348309068287E+004,2.26227204717337E+004,2.30565153164865E+004,2.46449591626105E+004,2.50860810995599E+004,2.60383293373783E+004,2.29360989798188E+004,2.41292034793573E+004,2.54966708531960E+004 -2.27999999999999E-008,3.44904064716675E+022,7.77047686072614E+022,1.73202803069519E+023,9.49474692740578E+021,6.21137635050637E+021,3.01104101426360E+023,2.46802067952177E+004,2.49570211199725E+004,2.61166235127937E+004,2.34581771144453E+004,2.53100848495504E+004,2.55523660941512E+004,0.00000000000000E+000,0.00000000000000E+000,2.59504371218114E+004,2.23834870255249E+004,2.39334224268383E+004,0.00000000000000E+000,0.00000000000000E+000,1.87208811636226E+000,1.90017893193587E+000,1.88774793716120E+000,0.00000000000000E+000,0.00000000000000E+000,2.59208835645357E+004,2.27300768115153E+004,2.26740689098442E+004,2.46802067952177E+004,2.49570211199725E+004,2.60143845059186E+004,2.29511896717001E+004,2.41673566893648E+004,2.54539957479255E+004 -2.29999999999999E-008,3.48407661368854E+022,7.79950666155848E+022,1.72997592408463E+023,9.31956709479682E+021,6.27143800740087E+021,3.01424430263130E+023,2.46515060152321E+004,2.49288803750904E+004,2.61178978221008E+004,2.31143319974136E+004,2.53268265615871E+004,2.55314131883335E+004,0.00000000000000E+000,0.00000000000000E+000,2.58894324849100E+004,2.24476133825886E+004,2.38481306653652E+004,0.00000000000000E+000,0.00000000000000E+000,1.87179343586742E+000,1.90045919959877E+000,1.88735430121569E+000,0.00000000000000E+000,0.00000000000000E+000,2.59105426674739E+004,2.23833766339882E+004,2.25063931168637E+004,2.46515060152321E+004,2.49288803750904E+004,2.59953169797643E+004,2.27188536425677E+004,2.41025988566347E+004,2.54233610779181E+004 -2.31999999999999E-008,3.51911258021034E+022,7.83854673853990E+022,1.72807397161630E+023,9.10935129566607E+021,6.30146883584812E+021,3.01794810480647E+023,2.45403043138175E+004,2.49401475202735E+004,2.60906518755755E+004,2.30518962241713E+004,2.50676662424841E+004,2.54979687136815E+004,0.00000000000000E+000,0.00000000000000E+000,2.58709622372551E+004,2.21878563805041E+004,2.37233383777131E+004,0.00000000000000E+000,0.00000000000000E+000,1.87170394823712E+000,1.89931408465838E+000,1.88677336527593E+000,0.00000000000000E+000,0.00000000000000E+000,2.58806264494021E+004,2.22046018720377E+004,2.25008905652188E+004,2.45403043138175E+004,2.49401475202735E+004,2.59696855443657E+004,2.25684174742376E+004,2.39539380918451E+004,2.53908556132307E+004 -2.33999999999999E-008,3.54313724296814E+022,7.86957859460206E+022,1.72677263571692E+023,8.94418173920619E+021,6.32148938814629E+021,3.02070093074746E+023,2.45991621374502E+004,2.48788966310673E+004,2.60591545823869E+004,2.30441173377485E+004,2.45736722965378E+004,2.54600606340587E+004,0.00000000000000E+000,0.00000000000000E+000,2.58217636793858E+004,2.21635923899042E+004,2.37609246652024E+004,0.00000000000000E+000,0.00000000000000E+000,1.87146497276040E+000,1.89920577256677E+000,1.88694896719206E+000,0.00000000000000E+000,0.00000000000000E+000,2.58780270366354E+004,2.26189086438055E+004,2.27569376624239E+004,2.45991621374502E+004,2.48788966310673E+004,2.59417816707125E+004,2.26784643140697E+004,2.38234006455674E+004,2.53664368850321E+004 -2.35999999999999E-008,3.57366858522284E+022,7.90411404731640E+022,1.72497078601008E+023,8.74397621622452E+021,6.37654590696625E+021,3.02395427049592E+023,2.45112076449095E+004,2.48255676182837E+004,2.60292847861354E+004,2.28439979421451E+004,2.47191292312117E+004,2.54155170287742E+004,0.00000000000000E+000,0.00000000000000E+000,2.58259385320323E+004,2.22474593018028E+004,2.39825116164835E+004,0.00000000000000E+000,0.00000000000000E+000,1.87148528609890E+000,1.89957916097813E+000,1.88797324773309E+000,0.00000000000000E+000,0.00000000000000E+000,2.58301549905753E+004,2.28271306144911E+004,2.25578822886564E+004,2.45112076449095E+004,2.48255676182837E+004,2.59159440626628E+004,2.26748706666991E+004,2.38896823053825E+004,2.53284826605092E+004 -2.37999999999999E-008,3.60419992747755E+022,7.92663716865184E+022,1.72316893630325E+023,8.60383235013735E+021,6.43160242578621E+021,3.02660699367542E+023,2.44753231988244E+004,2.47671062598234E+004,2.60210481219797E+004,2.25900906484268E+004,2.48997589224083E+004,2.53872112613695E+004,0.00000000000000E+000,0.00000000000000E+000,2.57520468716818E+004,2.24357897246386E+004,2.40914844774378E+004,0.00000000000000E+000,0.00000000000000E+000,1.87112480471361E+000,1.90040764203614E+000,1.88847019662170E+000,0.00000000000000E+000,0.00000000000000E+000,2.58408742916182E+004,2.25865663179455E+004,2.28371817544815E+004,2.44753231988244E+004,2.47671062598234E+004,2.58953507147572E+004,2.25465738982172E+004,2.40793218188780E+004,2.52969751557386E+004 -2.39999999999999E-008,3.63873538019188E+022,7.94715823475746E+022,1.72106677831194E+023,8.46368848405017E+021,6.50667949690433E+021,3.02935981961642E+023,2.44338349349502E+004,2.48151028728295E+004,2.60028256855151E+004,2.25752436268761E+004,2.51186144498016E+004,2.53880261573199E+004,0.00000000000000E+000,0.00000000000000E+000,2.57207391727966E+004,2.23263384382037E+004,2.41366440853416E+004,0.00000000000000E+000,0.00000000000000E+000,1.87097145936010E+000,1.89992782805069E+000,1.88867484867417E+000,0.00000000000000E+000,0.00000000000000E+000,2.57470191527853E+004,2.27158014153012E+004,2.24345651896195E+004,2.44338349349502E+004,2.48151028728295E+004,2.58515532073839E+004,2.25474482176437E+004,2.40701223365102E+004,2.52787870459228E+004 -2.41999999999999E-008,3.68228008144040E+022,7.96667827324817E+022,1.71851415789393E+023,8.32854975603755E+021,6.58175656802246E+021,3.03251305660338E+023,2.44789223363801E+004,2.48179689660615E+004,2.59874652214156E+004,2.25929513309422E+004,2.51182294230908E+004,2.53849574956246E+004,0.00000000000000E+000,0.00000000000000E+000,2.56530053639780E+004,2.21253229903943E+004,2.42996156532658E+004,0.00000000000000E+000,0.00000000000000E+000,1.87063844725312E+000,1.89903446741910E+000,1.88940719261893E+000,0.00000000000000E+000,0.00000000000000E+000,2.56770154937234E+004,2.25743669388610E+004,2.23254683893153E+004,2.44789223363801E+004,2.48179689660615E+004,2.58060333307201E+004,2.24588439967675E+004,2.40829855170728E+004,2.52559886518353E+004 -2.43999999999999E-008,3.70680525800565E+022,7.98019214604944E+022,1.71706266785231E+023,8.23845727069579E+021,6.62680281069334E+021,3.03441500907171E+023,2.44373677298499E+004,2.47927577869682E+004,2.59402866434304E+004,2.27307723089849E+004,2.52527098244567E+004,2.53527494504071E+004,0.00000000000000E+000,0.00000000000000E+000,2.56810440716859E+004,2.20221978839277E+004,2.42821471526466E+004,0.00000000000000E+000,0.00000000000000E+000,1.87077650725492E+000,1.89856993783862E+000,1.88932915576455E+000,0.00000000000000E+000,0.00000000000000E+000,2.56660699695728E+004,2.23822337207846E+004,2.20078156111455E+004,2.44373677298499E+004,2.47927577869682E+004,2.57898788606239E+004,2.24347174313887E+004,2.40445369252122E+004,2.52332163021855E+004 -2.45999999999999E-008,3.73633557264545E+022,8.00271526738488E+022,1.71546102366845E+023,8.11332881883225E+021,6.65182850106604E+021,3.03701768087047E+023,2.44683510065284E+004,2.48150035196094E+004,2.59507669891311E+004,2.25987993821842E+004,2.53310806154765E+004,2.53659906269280E+004,0.00000000000000E+000,0.00000000000000E+000,2.55537884607612E+004,2.22059661853464E+004,2.39151841412746E+004,0.00000000000000E+000,0.00000000000000E+000,1.87014753576914E+000,1.89939477352460E+000,1.88766399570654E+000,0.00000000000000E+000,0.00000000000000E+000,2.56553147037218E+004,2.19629250495402E+004,2.21460556469169E+004,2.44683510065284E+004,2.48150035196094E+004,2.57566935750652E+004,2.23063253243187E+004,2.40181845829820E+004,2.52197990670764E+004 -2.47999999999999E-008,3.76636640109270E+022,8.03274609583213E+022,1.71365917396162E+023,7.93314384814874E+021,6.71189015796055E+021,3.04002076371520E+023,2.44348378045401E+004,2.47495235097794E+004,2.59539666297231E+004,2.27517493669212E+004,2.49716829252440E+004,2.53422522359214E+004,0.00000000000000E+000,0.00000000000000E+000,2.55544338173920E+004,2.17438795723363E+004,2.42813673309478E+004,0.00000000000000E+000,0.00000000000000E+000,1.87015074093654E+000,1.89729464951262E+000,1.88932566950800E+000,0.00000000000000E+000,0.00000000000000E+000,2.55919035859150E+004,2.16702229428411E+004,2.23308217661794E+004,2.44348378045401E+004,2.47495235097794E+004,2.57398064565178E+004,2.21608975875037E+004,2.40157180592421E+004,2.51850052905843E+004 -2.49999999999999E-008,3.80640750568903E+022,8.05576973097502E+022,1.71150696458957E+023,7.80301025821066E+021,6.74192098640780E+021,3.04317400070216E+023,2.44667159192355E+004,2.47109986390925E+004,2.59487291814385E+004,2.26889753702915E+004,2.47706399397145E+004,2.53260284637152E+004,0.00000000000000E+000,0.00000000000000E+000,2.54771957906955E+004,2.18620269794197E+004,2.42197947018349E+004,0.00000000000000E+000,0.00000000000000E+000,1.86976601133684E+000,1.89783991046518E+000,1.88904970924891E+000,0.00000000000000E+000,0.00000000000000E+000,2.55605256955490E+004,2.14994863115694E+004,2.23655653422464E+004,2.44667159192355E+004,2.47109986390925E+004,2.57073724778383E+004,2.21165651913389E+004,2.39213612324439E+004,2.51567950898022E+004 -2.51999999999999E-008,3.84744963790028E+022,8.07278720042846E+022,1.70940480659826E+023,7.71291777286890E+021,6.75193126255688E+021,3.04607698078539E+023,2.43239880054624E+004,2.46727986605685E+004,2.59215432552418E+004,2.28295095946347E+004,2.43733182466894E+004,2.52762025795805E+004,0.00000000000000E+000,0.00000000000000E+000,2.55103108305547E+004,2.19407054965528E+004,2.39582099082345E+004,0.00000000000000E+000,0.00000000000000E+000,1.86993123903840E+000,1.89819981974752E+000,1.88786182037142E+000,0.00000000000000E+000,0.00000000000000E+000,2.55075835887847E+004,2.15870307278871E+004,2.24887990911890E+004,2.43239880054624E+004,2.46727986605685E+004,2.56890961411764E+004,2.22247017286286E+004,2.37123430974751E+004,2.51157919470614E+004 -2.53999999999999E-008,3.88448765965189E+022,8.10482008410553E+022,1.70745280274919E+023,7.54274307833448E+021,6.77195181485505E+021,3.04953052605682E+023,2.42474104889845E+004,2.46557670974372E+004,2.58569159420561E+004,2.27552855911405E+004,2.42757858452748E+004,2.52208372750725E+004,0.00000000000000E+000,0.00000000000000E+000,2.55395110933670E+004,2.16637310598930E+004,2.39439661791955E+004,0.00000000000000E+000,0.00000000000000E+000,1.87007658666848E+000,1.89692143239503E+000,1.88779640745601E+000,0.00000000000000E+000,0.00000000000000E+000,2.54733371247124E+004,2.16660123429350E+004,2.25330080781341E+004,2.42474104889845E+004,2.46557670974372E+004,2.56588498807029E+004,2.21391933646285E+004,2.36787932420414E+004,2.50814431115593E+004 -2.55999999999999E-008,3.92502927805568E+022,8.12434012259624E+022,1.70485013095043E+023,7.38758379802369E+021,6.88706999056951E+021,3.05253360890155E+023,2.42815063772356E+004,2.45874378034084E+004,2.58143924615067E+004,2.26517343597624E+004,2.41479628501513E+004,2.51765963182244E+004,0.00000000000000E+000,0.00000000000000E+000,2.55523762669408E+004,2.19415456136283E+004,2.38826010826891E+004,0.00000000000000E+000,0.00000000000000E+000,1.87014052154872E+000,1.89820364912447E+000,1.88751371985093E+000,0.00000000000000E+000,0.00000000000000E+000,2.54039849487094E+004,2.14736755292295E+004,2.29550496599115E+004,2.42815063772356E+004,2.45874378034084E+004,2.56235925609453E+004,2.21147539052908E+004,2.37288420360659E+004,2.50475820924110E+004 -2.57999999999999E-008,3.95756267554020E+022,8.14686324393168E+022,1.70289812710135E+023,7.24243479386198E+021,6.95213678553855E+021,3.05528643484255E+023,2.43189999587148E+004,2.44898958423084E+004,2.58305710344482E+004,2.24695435461366E+004,2.43868462033041E+004,2.51647632732908E+004,0.00000000000000E+000,0.00000000000000E+000,2.54596462964159E+004,2.15810813147856E+004,2.40839698194208E+004,0.00000000000000E+000,0.00000000000000E+000,1.86967827781646E+000,1.89653371760893E+000,1.88843606905460E+000,0.00000000000000E+000,0.00000000000000E+000,2.53965515013713E+004,2.13748485905361E+004,2.31298250464065E+004,2.43189999587148E+004,2.44898958423084E+004,2.56032606818513E+004,2.19077557483205E+004,2.39388482875727E+004,2.50145583984519E+004 -2.59999999999999E-008,3.98509093495018E+022,8.16738431003730E+022,1.70139658567899E+023,7.12731661814752E+021,6.97716247591126E+021,3.05768890111833E+023,2.43463743673550E+004,2.44672841144803E+004,2.57699890256475E+004,2.24000300367193E+004,2.43919657935043E+004,2.51264876156920E+004,0.00000000000000E+000,0.00000000000000E+000,2.54461922010607E+004,2.12201832494486E+004,2.38705369058224E+004,0.00000000000000E+000,0.00000000000000E+000,1.86961093798843E+000,1.89480599033584E+000,1.88745797683035E+000,0.00000000000000E+000,0.00000000000000E+000,2.54211878290915E+004,2.12292183289198E+004,2.32494887874389E+004,2.43463743673550E+004,2.44672841144803E+004,2.55803164969108E+004,2.17361673867457E+004,2.39173162005001E+004,2.49946426595519E+004 -2.61999999999999E-008,4.01962638766452E+022,8.19391154183237E+022,1.69944458182992E+023,6.97215733783672E+021,7.02220871858214E+021,3.06074203534380E+023,2.42564611670598E+004,2.44046322546706E+004,2.57140658515187E+004,2.25044704851904E+004,2.45737720777583E+004,2.50728184819352E+004,0.00000000000000E+000,0.00000000000000E+000,2.55000777532336E+004,2.07665030157660E+004,2.38724378786276E+004,0.00000000000000E+000,0.00000000000000E+000,1.86988022578861E+000,1.89255050199206E+000,1.88746676401778E+000,0.00000000000000E+000,0.00000000000000E+000,2.53807862633238E+004,2.13665780470115E+004,2.31840035097091E+004,2.42564611670598E+004,2.44046322546706E+004,2.55587951255571E+004,2.16970805238903E+004,2.39780113622419E+004,2.49545458378800E+004 -2.63999999999999E-008,4.04665413326704E+022,8.21793620459017E+022,1.69804314316905E+023,6.84702888597317E+021,7.03221899473122E+021,3.06329465576181E+023,2.42930441613592E+004,2.43503271098416E+004,2.56962511927954E+004,2.23128835000054E+004,2.44207185283931E+004,2.50449068671185E+004,0.00000000000000E+000,0.00000000000000E+000,2.54526705327293E+004,2.06603195672078E+004,2.37505646493699E+004,0.00000000000000E+000,0.00000000000000E+000,1.86964337172076E+000,1.89200857359582E+000,1.88690061991142E+000,0.00000000000000E+000,0.00000000000000E+000,2.53961170386804E+004,2.12640715963595E+004,2.32295796149555E+004,2.42930441613592E+004,2.43503271098416E+004,2.55425784011119E+004,2.15548622525312E+004,2.38911927231134E+004,2.49306239078908E+004 -2.65999999999999E-008,4.08469318263356E+022,8.24496395019270E+022,1.69609113931998E+023,6.70688501988600E+021,7.04222927088030E+021,3.06654799551027E+023,2.42196052596176E+004,2.44088043353526E+004,2.56525079859408E+004,2.23093886016136E+004,2.44371219561163E+004,2.50262222004635E+004,0.00000000000000E+000,0.00000000000000E+000,2.54635480186610E+004,2.05818516913524E+004,2.38531384794319E+004,0.00000000000000E+000,0.00000000000000E+000,1.86969779353788E+000,1.89160457280322E+000,1.88737748937044E+000,0.00000000000000E+000,0.00000000000000E+000,2.52871053715942E+004,2.12789855545584E+004,2.30000581925811E+004,2.42196052596176E+004,2.44088043353526E+004,2.54946985312654E+004,2.15361836452127E+004,2.38597868526948E+004,2.49087694662029E+004 -2.67999999999999E-008,4.11672606631063E+022,8.25697628157160E+022,1.69423923823240E+023,6.62179767261879E+021,7.09228065162572E+021,3.06875025626307E+023,2.41511100456413E+004,2.43369522621512E+004,2.56317270166822E+004,2.25214196471389E+004,2.44805217237344E+004,2.49910014121949E+004,0.00000000000000E+000,0.00000000000000E+000,2.54310767614238E+004,2.07256206923563E+004,2.39069508617190E+004,0.00000000000000E+000,0.00000000000000E+000,1.86953519985802E+000,1.89234249585494E+000,1.88762606102557E+000,0.00000000000000E+000,0.00000000000000E+000,2.53053492254267E+004,2.13154975940366E+004,2.26379622022254E+004,2.41511100456413E+004,2.43369522621512E+004,2.54820985094146E+004,2.16784390805397E+004,2.37882939071021E+004,2.48742041281920E+004 -2.69999999999999E-008,4.15076100521751E+022,8.28700711001885E+022,1.69243738852556E+023,6.46163325423346E+021,7.11230120392389E+021,3.07195354463077E+023,2.41328461807555E+004,2.43059744315712E+004,2.56104586969969E+004,2.24312574418152E+004,2.46639290423067E+004,2.49701179442662E+004,0.00000000000000E+000,0.00000000000000E+000,2.53705953128466E+004,2.04967000660355E+004,2.40035131426798E+004,0.00000000000000E+000,0.00000000000000E+000,1.86923126670142E+000,1.89116272729942E+000,1.88806936505704E+000,0.00000000000000E+000,0.00000000000000E+000,2.52821748474941E+004,2.13476815734174E+004,2.24713576823918E+004,2.41328461807555E+004,2.43059744315712E+004,2.54496069519476E+004,2.15858682426001E+004,2.38462755824442E+004,2.48447868062033E+004 -2.71999999999999E-008,4.18629748554676E+022,8.30752817612447E+022,1.69038528191500E+023,6.33149966429537E+021,7.16735772274385E+021,3.07475642195251E+023,2.40294314530913E+004,2.43339925209614E+004,2.55908152616872E+004,2.20586592427228E+004,2.45089696144697E+004,2.49407055736342E+004,0.00000000000000E+000,0.00000000000000E+000,2.52811907991997E+004,2.03846784297823E+004,2.42351613100575E+004,0.00000000000000E+000,0.00000000000000E+000,1.86877938709744E+000,1.89057594121233E+000,1.88911870906528E+000,0.00000000000000E+000,0.00000000000000E+000,2.53043644708931E+004,2.14316653029365E+004,2.23613110836727E+004,2.40294314530913E+004,2.43339925209614E+004,2.54231695520304E+004,2.14173811016402E+004,2.38103935475740E+004,2.48190511210932E+004 -2.73999999999999E-008,4.21933139683873E+022,8.34156311503135E+022,1.68878363773115E+023,6.16633010783549E+021,7.15734744659477E+021,3.07810986446246E+023,2.40954523688422E+004,2.43284873151229E+004,2.55317527580319E+004,2.18447177714726E+004,2.44821160187681E+004,2.49105224649705E+004,0.00000000000000E+000,0.00000000000000E+000,2.53661748074754E+004,2.01294266588935E+004,2.38185593543294E+004,0.00000000000000E+000,0.00000000000000E+000,1.86920899713457E+000,1.88921497517730E+000,1.88721717954885E+000,0.00000000000000E+000,0.00000000000000E+000,2.51639617283962E+004,2.14625917544352E+004,2.26031436633814E+004,2.40954523688422E+004,2.43284873151229E+004,2.53796127001861E+004,2.12634025265314E+004,2.37546494503573E+004,2.47984911267964E+004 -2.75999999999999E-008,4.26137455666488E+022,8.35057236356553E+022,1.68653132559760E+023,6.10626845094099E+021,7.18737827504202E+021,3.08066248488047E+023,2.41358433959036E+004,2.42980954399239E+004,2.54642989849095E+004,2.18478939767379E+004,2.41418228059914E+004,2.48618863003891E+004,0.00000000000000E+000,0.00000000000000E+000,2.53343446592184E+004,2.01581332291009E+004,2.38371988151382E+004,0.00000000000000E+000,0.00000000000000E+000,1.86904841951368E+000,1.88936972112057E+000,1.88730364926131E+000,0.00000000000000E+000,0.00000000000000E+000,2.51857751530084E+004,2.13668081984765E+004,2.26577848142690E+004,2.41358433959036E+004,2.42980954399239E+004,2.53478434670576E+004,2.12448265674930E+004,2.36273988552753E+004,2.47741764683494E+004 -2.77999999999999E-008,4.29641052318668E+022,8.37259497109351E+022,1.68467942451002E+023,5.98614513715199E+021,7.20739882734018E+021,3.08351541358296E+023,2.40949112736067E+004,2.43102202244287E+004,2.54134247291007E+004,2.18850397869892E+004,2.39797285198289E+004,2.48281504033223E+004,0.00000000000000E+000,0.00000000000000E+000,2.52920558783262E+004,2.01982508662645E+004,2.35575827235646E+004,0.00000000000000E+000,0.00000000000000E+000,1.86883446930043E+000,1.88958525713743E+000,1.88599241032398E+000,0.00000000000000E+000,0.00000000000000E+000,2.51920789818996E+004,2.12078812125756E+004,2.27191750127022E+004,2.40949112736067E+004,2.43102202244287E+004,2.53159540753499E+004,2.12258348485458E+004,2.34979866612284E+004,2.47508396737402E+004 -2.79999999999999E-008,4.33645162778301E+022,8.39061346816186E+022,1.68267736928021E+023,5.89605265181023E+021,7.20739882734018E+021,3.08641839366620E+023,2.41339040311268E+004,2.42754819436169E+004,2.53873096398521E+004,2.17297172603889E+004,2.41626757827826E+004,2.48104783373163E+004,0.00000000000000E+000,0.00000000000000E+000,2.52817035244326E+004,2.02004406568657E+004,2.36108970432492E+004,0.00000000000000E+000,0.00000000000000E+000,1.86878198747699E+000,1.88959699784572E+000,1.88624477204456E+000,0.00000000000000E+000,0.00000000000000E+000,2.50929600235917E+004,2.13605705558794E+004,2.27388607162293E+004,2.41339040311268E+004,2.42754819436169E+004,2.52728710042661E+004,2.12031247922015E+004,2.35980110018177E+004,2.47248421465780E+004 -2.81999999999999E-008,4.37198810811226E+022,8.41013350665258E+022,1.68052515990815E+023,5.76091392379761E+021,7.28247589845831E+021,3.08917121960720E+023,2.40801397645423E+004,2.42304723024846E+004,2.53323181109438E+004,2.15215880752929E+004,2.42496885918570E+004,2.47585418763900E+004,0.00000000000000E+000,0.00000000000000E+000,2.52816378681585E+004,2.04548931918964E+004,2.33490339497478E+004,0.00000000000000E+000,0.00000000000000E+000,1.86878165449497E+000,1.89094447392163E+000,1.88499440470388E+000,0.00000000000000E+000,0.00000000000000E+000,2.51040453349607E+004,2.13149650286945E+004,2.25599789183218E+004,2.40801397645423E+004,2.42304723024846E+004,2.52520628505996E+004,2.11689068285475E+004,2.35122663065828E+004,2.46909213941898E+004 -2.83999999999999E-008,4.41152869890114E+022,8.42765148991347E+022,1.67842300191685E+023,5.66081116230677E+021,7.30750158883102E+021,3.09202414830968E+023,2.40505254358937E+004,2.41576707086579E+004,2.52673063348688E+004,2.14673720870196E+004,2.43085305152671E+004,2.46990318986119E+004,0.00000000000000E+000,0.00000000000000E+000,2.52159061637819E+004,2.05377361821537E+004,2.31233372140478E+004,0.00000000000000E+000,0.00000000000000E+000,1.86844744044066E+000,1.89137610931682E+000,1.88389447076969E+000,0.00000000000000E+000,0.00000000000000E+000,2.51992765440005E+004,2.09646012779811E+004,2.26869378021183E+004,2.40505254358937E+004,2.41576707086579E+004,2.52335144041807E+004,2.10663153582820E+004,2.35130557216732E+004,2.46545466215259E+004 -2.85999999999999E-008,4.44005798592603E+022,8.44116536271474E+022,1.67662115221001E+023,5.55570326274139E+021,7.38257865994915E+021,3.09412630630099E+023,2.40727984830122E+004,2.41816492143515E+004,2.52149634225030E+004,2.14189464323183E+004,2.44383733159433E+004,2.46824727875044E+004,0.00000000000000E+000,0.00000000000000E+000,2.51642593254850E+004,2.03378028079376E+004,2.32901033531956E+004,0.00000000000000E+000,0.00000000000000E+000,1.86818364501970E+000,1.89032851836111E+000,1.88470922076652E+000,0.00000000000000E+000,0.00000000000000E+000,2.51568684717579E+004,2.14141788770170E+004,2.29678269922637E+004,2.40727984830122E+004,2.41816492143515E+004,2.51842545077191E+004,2.11209560345104E+004,2.36968390738463E+004,2.46427888784135E+004 -2.87999999999999E-008,4.48610525621181E+022,8.45918385978309E+022,1.67416863455348E+023,5.45059536317601E+021,7.41260948839640E+021,3.09732959466870E+023,2.40967621477471E+004,2.41279806223101E+004,2.51783041423502E+004,2.11399216412864E+004,2.44158188288876E+004,2.46454854683570E+004,0.00000000000000E+000,0.00000000000000E+000,2.51000908510960E+004,2.00507615652049E+004,2.30899970369970E+004,0.00000000000000E+000,0.00000000000000E+000,1.86785441643114E+000,1.88878869600417E+000,1.88373020190784E+000,0.00000000000000E+000,0.00000000000000E+000,2.51680915161240E+004,2.14282736277997E+004,2.30455947346888E+004,2.40967621477471E+004,2.41279806223101E+004,2.51540583904969E+004,2.09250087832866E+004,2.36549030773264E+004,2.46103877438743E+004 -2.89999999999999E-008,4.51513505704415E+022,8.46819310831726E+022,1.67236678484665E+023,5.37051315398335E+021,7.48268142143998E+021,3.09923154713702E+023,2.41566729357109E+004,2.40292892279296E+004,2.51571600330641E+004,2.12035736547973E+004,2.42786262086006E+004,2.46135085011323E+004,0.00000000000000E+000,0.00000000000000E+000,2.51045352022221E+004,2.01319825274856E+004,2.33537987612511E+004,0.00000000000000E+000,0.00000000000000E+000,1.86787727199215E+000,1.88922877041703E+000,1.88501740153292E+000,0.00000000000000E+000,0.00000000000000E+000,2.51396448656905E+004,2.14567607619910E+004,2.28326542367094E+004,2.41566729357109E+004,2.40292892279296E+004,2.51377468934666E+004,2.09832142177624E+004,2.36053875651631E+004,2.45829600816745E+004 -2.91999999999999E-008,4.56218335494485E+022,8.48020543969616E+022,1.66971406166714E+023,5.28042066864159E+021,7.54274307833448E+021,3.10218457860100E+023,2.40947335153180E+004,2.40260992362371E+004,2.51158543341373E+004,2.08986710454113E+004,2.44051773637502E+004,2.45787237202095E+004,0.00000000000000E+000,0.00000000000000E+000,2.50670668780759E+004,2.01268271823574E+004,2.33220644878947E+004,0.00000000000000E+000,0.00000000000000E+000,1.86768433918190E+000,1.88920094104108E+000,1.88486406610419E+000,0.00000000000000E+000,0.00000000000000E+000,2.50976866475906E+004,2.17144646936692E+004,2.29217636118601E+004,2.40947335153180E+004,2.40260992362371E+004,2.50972956854818E+004,2.09238436518691E+004,2.36777340918239E+004,2.45514759559287E+004 -2.93999999999999E-008,4.60773011142318E+022,8.49472034011233E+022,1.66766195505658E+023,5.23036928789617E+021,7.49769683566361E+021,3.10518766144573E+023,2.40228537406246E+004,2.39768081611539E+004,2.51092139461028E+004,2.05517639359737E+004,2.44037488189167E+004,2.45444243739736E+004,0.00000000000000E+000,0.00000000000000E+000,2.50096251055042E+004,2.02022667151723E+004,2.34451163759783E+004,0.00000000000000E+000,0.00000000000000E+000,1.86738746266443E+000,1.88960678647075E+000,1.88545636610810E+000,0.00000000000000E+000,0.00000000000000E+000,2.50795383676599E+004,2.19250572918000E+004,2.28914899978900E+004,2.40228537406246E+004,2.39768081611539E+004,2.50734911751692E+004,2.08545641473690E+004,2.37019830930988E+004,2.45133949439107E+004 -2.95999999999999E-008,4.63726042606297E+022,8.51624243383286E+022,1.66596020811124E+023,5.10023569795809E+021,7.54274307833448E+021,3.10774028186375E+023,2.40315070101940E+004,2.39623948692500E+004,2.50778902350149E+004,2.02488604345714E+004,2.44911593233137E+004,2.45225782078767E+004,0.00000000000000E+000,0.00000000000000E+000,2.49966553573190E+004,2.01628586811268E+004,2.34239545832073E+004,0.00000000000000E+000,0.00000000000000E+000,1.86732024671739E+000,1.88939515277919E+000,1.88535493968576E+000,0.00000000000000E+000,0.00000000000000E+000,2.50180238955893E+004,2.19824573643107E+004,2.30862201252816E+004,2.40315070101940E+004,2.39623948692500E+004,2.50383661992978E+004,2.07285400711875E+004,2.37908413053293E+004,2.44922655501286E+004 -2.97999999999999E-008,4.67179587877731E+022,8.52475116855958E+022,1.66420840978515E+023,5.05518945528721E+021,7.54774821640903E+021,3.10989249123580E+023,2.39756652508387E+004,2.39335246091000E+004,2.50538204623690E+004,2.01836895146652E+004,2.47762276421822E+004,2.44988614713605E+004,0.00000000000000E+000,0.00000000000000E+000,2.49470545193673E+004,1.99453077783316E+004,2.29128998243367E+004,0.00000000000000E+000,0.00000000000000E+000,1.86706256005210E+000,1.88821208013766E+000,1.88284978644613E+000,0.00000000000000E+000,0.00000000000000E+000,2.50566114371637E+004,2.18564626008031E+004,2.29180453811381E+004,2.39756652508387E+004,2.39335246091000E+004,2.50256050873694E+004,2.06040352973387E+004,2.37265561935586E+004,2.44651196146836E+004 -2.99999999999999E-008,4.70482979006929E+022,8.53876555516830E+022,1.66260676560129E+023,4.99012266031817E+021,7.53773794025994E+021,3.11224490613083E+023,2.40189956300768E+004,2.38942460920081E+004,2.50421485300275E+004,2.04649548234651E+004,2.44192277649448E+004,2.44840611134564E+004,0.00000000000000E+000,0.00000000000000E+000,2.49230752623059E+004,2.03850752995930E+004,2.30508249289994E+004,0.00000000000000E+000,0.00000000000000E+000,1.86693762376382E+000,1.89057803123982E+000,1.88353660416460E+000,0.00000000000000E+000,0.00000000000000E+000,2.49942374989565E+004,2.15784196038531E+004,2.27876589395023E+004,2.40189956300768E+004,2.38942460920081E+004,2.49958215582293E+004,2.07662228852135E+004,2.35707432115109E+004,2.44435930793447E+004 -3.01999999999999E-008,4.73686267374635E+022,8.55678405223665E+022,1.66090501865595E+023,4.89001989882733E+021,7.55775849255811E+021,3.11474747516810E+023,2.40385396283288E+004,2.38595503918697E+004,2.50063533114900E+004,2.03811266744823E+004,2.42666509774412E+004,2.44535592320114E+004,0.00000000000000E+000,0.00000000000000E+000,2.49219598069131E+004,2.00510588129251E+004,2.31984478710876E+004,0.00000000000000E+000,0.00000000000000E+000,1.86693180632529E+000,1.88879031293531E+000,1.88426285037855E+000,0.00000000000000E+000,0.00000000000000E+000,2.49678289441780E+004,2.14361603260186E+004,2.26541630719520E+004,2.40385396283288E+004,2.38595503918697E+004,2.49721887589383E+004,2.05969320998210E+004,2.35058213352884E+004,2.44202683099473E+004 -3.03999999999999E-008,4.76839504361597E+022,8.57129895265282E+022,1.65930337447210E+023,4.81494282770921E+021,7.56276363063265E+021,3.11704983868239E+023,2.39614574380779E+004,2.38692255662222E+004,2.49558726804233E+004,2.05113471034681E+004,2.40547276973382E+004,2.44144225540686E+004,0.00000000000000E+000,0.00000000000000E+000,2.49819698415957E+004,2.00580936165691E+004,2.32438508400822E+004,0.00000000000000E+000,0.00000000000000E+000,1.86724405651685E+000,1.88882856627034E+000,1.88448439790905E+000,0.00000000000000E+000,0.00000000000000E+000,2.49073632052026E+004,2.08309810342630E+004,2.28070859188335E+004,2.39614574380779E+004,2.38692255662222E+004,2.49488408666487E+004,2.04798685625028E+004,2.34703167072638E+004,2.43960137345579E+004 -3.05999999999999E-008,4.80242998252285E+022,8.59332156018081E+022,1.65735137062302E+023,4.67980409969658E+021,7.61281501137807E+021,3.11985271600414E+023,2.39827765796056E+004,2.38326929515672E+004,2.49173314302045E+004,2.03132006847330E+004,2.38655220276834E+004,2.43799936447703E+004,0.00000000000000E+000,0.00000000000000E+000,2.48768785930621E+004,2.00192501336117E+004,2.34566317864966E+004,0.00000000000000E+000,0.00000000000000E+000,1.86669626788007E+000,1.88861701703346E+000,1.88551148302192E+000,0.00000000000000E+000,0.00000000000000E+000,2.49586611287133E+004,2.07452670077497E+004,2.28248265803540E+004,2.39827765796056E+004,2.38326929515672E+004,2.49183721398296E+004,2.03580533209378E+004,2.34512669434031E+004,2.43711109702556E+004 -3.07999999999999E-008,4.83596440762228E+022,8.60583440536716E+022,1.65559957229693E+023,4.60973216665299E+021,7.62783042560169E+021,3.12215507951843E+023,2.39224934721723E+004,2.38608931977735E+004,2.49165205527607E+004,2.02087999306279E+004,2.40255612530970E+004,2.43803083810368E+004,0.00000000000000E+000,0.00000000000000E+000,2.48148712321337E+004,1.99931800668990E+004,2.31323776480381E+004,0.00000000000000E+000,0.00000000000000E+000,1.86637092961758E+000,1.88847458240826E+000,1.88393893354653E+000,0.00000000000000E+000,0.00000000000000E+000,2.49213881706703E+004,2.05758929736399E+004,2.27082878674542E+004,2.39224934721723E+004,2.38608931977735E+004,2.48903087295051E+004,2.02562695772090E+004,2.33984130198925E+004,2.43517877402354E+004 -3.09999999999999E-008,4.86149061180244E+022,8.61934827816842E+022,1.65414808225532E+023,4.52464481938578E+021,7.66286639212349E+021,3.12410708336750E+023,2.39096321553894E+004,2.39001120510100E+004,2.48975753881936E+004,2.03384678570767E+004,2.37843140238288E+004,2.43753054483231E+004,0.00000000000000E+000,0.00000000000000E+000,2.47448305319884E+004,1.99433590643265E+004,2.32654609471494E+004,0.00000000000000E+000,0.00000000000000E+000,1.86600152809812E+000,1.88820136841767E+000,1.88458954867260E+000,0.00000000000000E+000,0.00000000000000E+000,2.48848869448879E+004,2.07559730164240E+004,2.28777511897510E+004,2.39096321553894E+004,2.39001120510100E+004,2.48523672680921E+004,2.03513834718782E+004,2.33789230075553E+004,2.43416122654052E+004 -3.11999999999999E-008,4.90553582685841E+022,8.63736677523677E+022,1.65189577012177E+023,4.42954719596949E+021,7.67287666827257E+021,3.12721026897371E+023,2.39873131120966E+004,2.38841025290850E+004,2.49129785913270E+004,2.01521730990669E+004,2.37448036095558E+004,2.43875002514462E+004,0.00000000000000E+000,0.00000000000000E+000,2.46606127656365E+004,2.03711537921378E+004,2.31670696560044E+004,0.00000000000000E+000,0.00000000000000E+000,1.86555464356533E+000,1.89050466894987E+000,1.88410924073242E+000,0.00000000000000E+000,0.00000000000000E+000,2.47614857572394E+004,2.09267551754666E+004,2.27875210259783E+004,2.39873131120966E+004,2.38841025290850E+004,2.48002727800209E+004,2.04370793969040E+004,2.33085701125687E+004,2.43212975229948E+004 -3.13999999999999E-008,4.94207333480257E+022,8.65088064803804E+022,1.64999381765345E+023,4.35447012485136E+021,7.68789208249620E+021,3.12971283801098E+023,2.39762386541925E+004,2.38831088664297E+004,2.49091731975467E+004,2.01040068902976E+004,2.36146411352390E+004,2.43795843999277E+004,0.00000000000000E+000,0.00000000000000E+000,2.45770632873905E+004,1.99477158720067E+004,2.31511709737285E+004,0.00000000000000E+000,0.00000000000000E+000,1.86510835170490E+000,1.88822531414853E+000,1.88403125427203E+000,0.00000000000000E+000,0.00000000000000E+000,2.47364245053877E+004,2.09962376771700E+004,2.29146516754485E+004,2.39762386541925E+004,2.38831088664297E+004,2.47686192103406E+004,2.03202235279233E+004,2.32844318283189E+004,2.43003808854078E+004 -3.15999999999999E-008,4.98661906366599E+022,8.66039041037967E+022,1.64764140275841E+023,4.29440846795686E+021,7.71291777286890E+021,3.13241561257124E+023,2.39619424783810E+004,2.38913262766016E+004,2.48373261781205E+004,2.03758462518352E+004,2.34643088153782E+004,2.43414509763241E+004,0.00000000000000E+000,0.00000000000000E+000,2.45396323599938E+004,1.97685426623732E+004,2.28614609702656E+004,0.00000000000000E+000,0.00000000000000E+000,1.86490744693267E+000,1.88723201353821E+000,1.88259156169787E+000,0.00000000000000E+000,0.00000000000000E+000,2.47444644198064E+004,2.08218330813992E+004,2.30533015637244E+004,2.39619424783810E+004,2.38913262766016E+004,2.47294012074365E+004,2.03389447627694E+004,2.31799783052845E+004,2.42771758116875E+004 -3.17999999999999E-008,5.02515862683996E+022,8.66689708987657E+022,1.64553924476711E+023,4.24435708721144E+021,7.74795373939070E+021,3.13466792470478E+023,2.38464903070153E+004,2.38623196925852E+004,2.47932311693608E+004,2.05747554778423E+004,2.34041364995630E+004,2.42926239853877E+004,0.00000000000000E+000,0.00000000000000E+000,2.45412056465088E+004,1.97338618870403E+004,2.25762653159157E+004,0.00000000000000E+000,0.00000000000000E+000,1.86491590334794E+000,1.88703770820902E+000,1.88113897104675E+000,0.00000000000000E+000,0.00000000000000E+000,2.47664020973364E+004,2.07431222604349E+004,2.30534202259523E+004,2.38464903070153E+004,2.38623196925852E+004,2.47169498926434E+004,2.03932457486652E+004,2.30758807699097E+004,2.42420091000393E+004 -3.19999999999999E-008,5.07971463185247E+022,8.67140171414366E+022,1.64238600778014E+023,4.17929029224240E+021,7.83304108665791E+021,3.13762095616876E+023,2.39382596442628E+004,2.37680975479835E+004,2.47209981054043E+004,2.03381811013633E+004,2.31588917206793E+004,2.42335465438629E+004,0.00000000000000E+000,0.00000000000000E+000,2.45214080545119E+004,1.98115187364743E+004,2.27465669738552E+004,0.00000000000000E+000,0.00000000000000E+000,1.86480941411087E+000,1.88747186971249E+000,1.88201066045488E+000,0.00000000000000E+000,0.00000000000000E+000,2.47732303692034E+004,2.07770681295823E+004,2.28567968548170E+004,2.39382596442628E+004,2.37680975479835E+004,2.46819973317312E+004,2.03212973529682E+004,2.29583414209322E+004,2.42079000000854E+004 -3.21999999999999E-008,5.11525111218171E+022,8.67790839364056E+022,1.64043400393107E+023,4.12923891149698E+021,7.86807705317970E+021,3.13972311416007E+023,2.39316156137374E+004,2.37479348790525E+004,2.47155470961588E+004,2.02537809035356E+004,2.30333164939498E+004,2.42195537279757E+004,0.00000000000000E+000,0.00000000000000E+000,2.45525984207393E+004,1.95088677255476E+004,2.27401000771687E+004,0.00000000000000E+000,0.00000000000000E+000,1.86497710795216E+000,1.88576069700976E+000,1.88197779312971E+000,0.00000000000000E+000,0.00000000000000E+000,2.46703699554572E+004,2.06196919936351E+004,2.28802084365290E+004,2.39316156137374E+004,2.37479348790525E+004,2.46581179416792E+004,2.01560566515401E+004,2.29086367978512E+004,2.41851386231099E+004 -3.23999999999999E-008,5.14077731636188E+022,8.68741815598219E+022,1.63903256527020E+023,4.06917725460248E+021,7.89310274355241E+021,3.14147491248616E+023,2.39603936077557E+004,2.37034696105194E+004,2.46618058934473E+004,2.01776615243167E+004,2.32532507409133E+004,2.41885333801554E+004,0.00000000000000E+000,0.00000000000000E+000,2.45100373795907E+004,1.97722807221778E+004,2.26791285077598E+004,0.00000000000000E+000,0.00000000000000E+000,1.86474817650631E+000,1.88725291681143E+000,1.88166700934558E+000,0.00000000000000E+000,0.00000000000000E+000,2.47022922284375E+004,2.05164010856002E+004,2.29386985198850E+004,2.39603936077557E+004,2.37034696105194E+004,2.46323747498292E+004,2.01649457173401E+004,2.30048499820286E+004,2.41667720863149E+004 -3.25999999999999E-008,5.17831585192094E+022,8.70093202878345E+022,1.63708056142113E+023,3.99410018348435E+021,7.90811815777603E+021,3.14402753290417E+023,2.38619390033012E+004,2.37108317637903E+004,2.46418832027867E+004,2.03246300333583E+004,2.33251454834503E+004,2.41677951594674E+004,0.00000000000000E+000,0.00000000000000E+000,2.45030389098057E+004,1.96443624923856E+004,2.26142678353028E+004,0.00000000000000E+000,0.00000000000000E+000,1.86471045816031E+000,1.88653316531641E+000,1.88133460109400E+000,0.00000000000000E+000,0.00000000000000E+000,2.46641867851997E+004,2.02532527340768E+004,2.24912755965647E+004,2.38619390033012E+004,2.37108317637903E+004,2.46106659735011E+004,2.01175444299550E+004,2.28884368121560E+004,2.41379252672802E+004 -3.27999999999999E-008,5.21235079082782E+022,8.70994127731763E+022,1.63517860895280E+023,3.92903338851531E+021,7.94815926237237E+021,3.14617974227623E+023,2.37289881539661E+004,2.37229003546333E+004,2.45879858901474E+004,2.06850401485016E+004,2.35167242898670E+004,2.41303776440403E+004,0.00000000000000E+000,0.00000000000000E+000,2.45260129576014E+004,1.96820068202517E+004,2.26278461111552E+004,0.00000000000000E+000,0.00000000000000E+000,1.86483419839021E+000,1.88674592896839E+000,1.88140434359373E+000,0.00000000000000E+000,0.00000000000000E+000,2.46373064655146E+004,1.99118157587097E+004,2.24142363115887E+004,2.37289881539661E+004,2.37229003546333E+004,2.45855199757840E+004,2.01856870630606E+004,2.29532760416151E+004,2.41086256369682E+004 -3.29999999999999E-008,5.24338264688998E+022,8.71995155346672E+022,1.63362701614970E+023,3.87898200776989E+021,7.94815926237237E+021,3.14823184888679E+023,2.37608452071653E+004,2.36523100378365E+004,2.45260977362290E+004,2.06670007250007E+004,2.34948215849669E+004,2.40830392070116E+004,0.00000000000000E+000,0.00000000000000E+000,2.44925784839791E+004,1.98690052115978E+004,2.21305164599049E+004,0.00000000000000E+000,0.00000000000000E+000,1.86465404234052E+000,1.88779112056445E+000,1.87879525519568E+000,0.00000000000000E+000,0.00000000000000E+000,2.47109848888112E+004,1.97758852399972E+004,2.25531753119145E+004,2.37608452071653E+004,2.36523100378365E+004,2.45708592776068E+004,2.01895356339586E+004,2.28484086046777E+004,2.40840635741145E+004 -3.31999999999999E-008,5.28442477910123E+022,8.72695874677107E+022,1.63127460125466E+023,3.81391521280085E+021,8.00822091926687E+021,3.15063431516257E+023,2.36879165288673E+004,2.36046398374574E+004,2.45272705304167E+004,2.07098007615078E+004,2.32218165620834E+004,2.40515361683395E+004,0.00000000000000E+000,0.00000000000000E+000,2.44580910499482E+004,1.98250252324136E+004,2.19435443179260E+004,0.00000000000000E+000,0.00000000000000E+000,1.86446770901360E+000,1.88754704106773E+000,1.87778443641572E+000,0.00000000000000E+000,0.00000000000000E+000,2.46903227331507E+004,1.98784641951152E+004,2.27753524094157E+004,2.36879165288673E+004,2.36046398374574E+004,2.45559867406699E+004,2.02259233309996E+004,2.27429925946616E+004,2.40483761914482E+004 -3.33999999999999E-008,5.31896023181556E+022,8.73847056434252E+022,1.62942270016708E+023,3.74384327975726E+021,8.03324660963958E+021,3.15293667867686E+023,2.36098471193152E+004,2.36017034345714E+004,2.44778014074808E+004,2.11882611809079E+004,2.31052100997664E+004,2.40145330030658E+004,0.00000000000000E+000,0.00000000000000E+000,2.44811232259468E+004,1.98470844758269E+004,2.17306244826691E+004,0.00000000000000E+000,0.00000000000000E+000,1.86459220715965E+000,1.88766959769558E+000,1.87661261850404E+000,0.00000000000000E+000,0.00000000000000E+000,2.46582559820083E+004,1.95619719555465E+004,2.28875195411185E+004,2.36098471193152E+004,2.36017034345714E+004,2.45312791633040E+004,2.03484594366464E+004,2.26667753646990E+004,2.40210274134276E+004 -3.35999999999999E-008,5.35499722595227E+022,8.74948186810651E+022,1.62762085046025E+023,3.68878676093730E+021,8.03324660963958E+021,3.15528909357189E+023,2.35643270851378E+004,2.35902286404573E+004,2.44615281896899E+004,2.14432444168082E+004,2.30727611899010E+004,2.39970084610528E+004,0.00000000000000E+000,0.00000000000000E+000,2.44471702146155E+004,1.97997317682797E+004,2.18844040235641E+004,0.00000000000000E+000,0.00000000000000E+000,1.86440859751971E+000,1.88740618637168E+000,1.87746119145378E+000,0.00000000000000E+000,0.00000000000000E+000,2.46081486223852E+004,2.01153632201381E+004,2.25993680882388E+004,2.35643270851378E+004,2.35902286404573E+004,2.45003475183230E+004,2.06072637620087E+004,2.26106894200658E+004,2.39954955220868E+004 -3.37999999999999E-008,5.39503833054860E+022,8.76549830994505E+022,1.62556874384968E+023,3.60369941367009E+021,8.04325688578866E+021,3.15809197089364E+023,2.34243804815633E+004,2.36194822579796E+004,2.44256255684393E+004,2.17406967542740E+004,2.30905633630968E+004,2.39661900596560E+004,0.00000000000000E+000,0.00000000000000E+000,2.44493008730915E+004,1.95145561531368E+004,2.20140953024506E+004,0.00000000000000E+000,0.00000000000000E+000,1.86442013423707E+000,1.88579333863479E+000,1.87816782646626E+000,0.00000000000000E+000,0.00000000000000E+000,2.45560689802103E+004,2.02537236349921E+004,2.22885891298153E+004,2.34243804815633E+004,2.36194822579796E+004,2.44700615924959E+004,2.06991337850788E+004,2.25634264516745E+004,2.39637518904060E+004 -3.39999999999999E-008,5.42707121422567E+022,8.77751064132395E+022,1.62381694552359E+023,3.52862234255197E+021,8.07328771423591E+021,3.16029423164643E+023,2.34332739127094E+004,2.35689429121784E+004,2.44229307504884E+004,2.15816065253292E+004,2.28945894667825E+004,2.39450228636663E+004,0.00000000000000E+000,0.00000000000000E+000,2.44068816502944E+004,1.98580738697460E+004,2.17874809788335E+004,0.00000000000000E+000,0.00000000000000E+000,1.86419008009145E+000,1.88773055291474E+000,1.87692772432492E+000,0.00000000000000E+000,0.00000000000000E+000,2.45473773069996E+004,2.03567666961704E+004,2.21363984256359E+004,2.34332739127094E+004,2.35689429121784E+004,2.44548317522223E+004,2.07535769055011E+004,2.23719222465867E+004,2.39388167708121E+004 -3.41999999999999E-008,5.46010512551764E+022,8.78752091747303E+022,1.62226535272049E+023,3.48858123795563E+021,8.05326716193775E+021,3.16244644101849E+023,2.34449618681133E+004,2.35527444611737E+004,2.43906337687715E+004,2.15673354574137E+004,2.28006877772750E+004,2.39229011250467E+004,0.00000000000000E+000,0.00000000000000E+000,2.44032987188353E+004,1.98024956681348E+004,2.18537184305546E+004,0.00000000000000E+000,0.00000000000000E+000,1.86417061287098E+000,1.88742159519016E+000,1.87729279786655E+000,0.00000000000000E+000,0.00000000000000E+000,2.45113769052806E+004,2.00473703084035E+004,2.19440171157958E+004,2.34449618681133E+004,2.35527444611737E+004,2.44292540064800E+004,2.06423264478294E+004,2.22930636059673E+004,2.39195816228514E+004 -3.43999999999999E-008,5.49464057823198E+022,8.79803170742957E+022,1.62036340025216E+023,3.41850930491205E+021,8.08830312845954E+021,3.16469875315203E+023,2.34263816539354E+004,2.35068297919880E+004,2.43447909886912E+004,2.13290911542397E+004,2.24690955278070E+004,2.38718620091989E+004,0.00000000000000E+000,0.00000000000000E+000,2.44496725223469E+004,1.93731216782641E+004,2.19310543648847E+004,0.00000000000000E+000,0.00000000000000E+000,1.86442214637757E+000,1.88497618092121E+000,1.87771631175144E+000,0.00000000000000E+000,0.00000000000000E+000,2.44916931748862E+004,2.02555707332301E+004,2.18654140304699E+004,2.34263816539354E+004,2.35068297919880E+004,2.44160785371620E+004,2.04817393898271E+004,2.21466554092901E+004,2.38909680935522E+004 -3.45999999999999E-008,5.53468168282832E+022,8.81304712165319E+022,1.61851149916458E+023,3.35844764801754E+021,8.05827230001229E+021,3.16745157909303E+023,2.34463975136130E+004,2.34845604579629E+004,2.42841276784033E+004,2.11337733319380E+004,2.26064908205162E+004,2.38391924200846E+004,0.00000000000000E+000,0.00000000000000E+000,2.44304934340531E+004,1.95203067455240E+004,2.21083822388524E+004,0.00000000000000E+000,0.00000000000000E+000,1.86431823117032E+000,1.88582631802967E+000,1.87867646499766E+000,0.00000000000000E+000,0.00000000000000E+000,2.44601138472294E+004,2.00432785282371E+004,2.16771265971163E+004,2.34463975136130E+004,2.34845604579629E+004,2.43751556091149E+004,2.03751559753478E+004,2.22002334059678E+004,2.38673269171411E+004 -3.47999999999999E-008,5.57021816315756E+022,8.82355791160973E+022,1.61675970083849E+023,3.30839626727213E+021,8.05326716193775E+021,3.16975394260732E+023,2.33384395000276E+004,2.35174805898066E+004,2.42923571260866E+004,2.12926337903789E+004,2.28336757785058E+004,2.38406551975906E+004,0.00000000000000E+000,0.00000000000000E+000,2.43619846932390E+004,1.89935599544497E+004,2.22508353622614E+004,0.00000000000000E+000,0.00000000000000E+000,1.86394573683284E+000,1.88272430231750E+000,1.87943693836770E+000,0.00000000000000E+000,0.00000000000000E+000,2.43958364971551E+004,2.03508495001137E+004,2.16291550406062E+004,2.33384395000276E+004,2.35174805898066E+004,2.43414164808670E+004,2.03900710127059E+004,2.23242658784430E+004,2.38433155600235E+004 -3.49999999999999E-008,5.59824693637500E+022,8.83356818775881E+022,1.61525815941613E+023,3.24833461037762E+021,8.07328771423591E+021,3.17165589507564E+023,2.33180428262232E+004,2.35221346749352E+004,2.42488065577309E+004,2.10240735135558E+004,2.29421534049877E+004,2.38158418487702E+004,0.00000000000000E+000,0.00000000000000E+000,2.43294133690267E+004,1.89564028061251E+004,2.24046280025607E+004,0.00000000000000E+000,0.00000000000000E+000,1.86376792281687E+000,1.88249910951600E+000,1.88024732125337E+000,0.00000000000000E+000,0.00000000000000E+000,2.43944112908855E+004,2.01120705333453E+004,2.16030578472609E+004,2.33180428262232E+004,2.35221346749352E+004,2.43131213569093E+004,2.01935039580831E+004,2.24059994498708E+004,2.38264420133324E+004 -3.51999999999999E-008,5.63078033385952E+022,8.84207692248553E+022,1.61360646385153E+023,3.20328836770675E+021,8.07829285231046E+021,3.17370800168621E+023,2.33566628086377E+004,2.35286049463246E+004,2.42648016046365E+004,2.10358947884000E+004,2.31950734411134E+004,2.38387539893288E+004,0.00000000000000E+000,0.00000000000000E+000,2.42782279855380E+004,1.84076080917335E+004,2.20670429470043E+004,0.00000000000000E+000,0.00000000000000E+000,1.86348755006011E+000,1.87906950363275E+000,1.87845398038975E+000,0.00000000000000E+000,0.00000000000000E+000,2.42777737474516E+004,2.00694718945266E+004,2.18484537417904E+004,2.33566628086377E+004,2.35286049463246E+004,2.42722270102937E+004,2.00369836474924E+004,2.24954696080390E+004,2.38146394935352E+004 -3.53999999999999E-008,5.66982041084094E+022,8.85108617101971E+022,1.61170451138320E+023,3.16324726311041E+021,8.06828257616137E+021,3.17611046796199E+023,2.32474768378505E+004,2.35749602854492E+004,2.42138042909951E+004,2.07173682298882E+004,2.28256676319421E+004,2.37931840494409E+004,0.00000000000000E+000,0.00000000000000E+000,2.42625350686164E+004,1.84575686527409E+004,2.20502608119624E+004,0.00000000000000E+000,0.00000000000000E+000,1.86340135946916E+000,1.87938998211998E+000,1.87836342740562E+000,0.00000000000000E+000,0.00000000000000E+000,2.42898608155146E+004,2.00509642745616E+004,2.18705906658655E+004,2.32474768378505E+004,2.35749602854492E+004,2.42491975360618E+004,1.99062712268043E+004,2.23362125777427E+004,2.37906324480584E+004 -3.55999999999999E-008,5.71686870874164E+022,8.85208719863462E+022,1.60940214786891E+023,3.16324726311041E+021,8.05827230001229E+021,3.17851293423777E+023,2.31752921984952E+004,2.35986084682737E+004,2.41804320230708E+004,2.07951368739633E+004,2.27764764035486E+004,2.37683272510354E+004,0.00000000000000E+000,0.00000000000000E+000,2.41944039391644E+004,1.86556071815075E+004,2.18528842251702E+004,0.00000000000000E+000,0.00000000000000E+000,1.86302589647649E+000,1.88064379558291E+000,1.87728821353138E+000,0.00000000000000E+000,0.00000000000000E+000,2.42970824893388E+004,2.02956967386979E+004,2.15941418345225E+004,2.31752921984952E+004,2.35986084682737E+004,2.42182187046240E+004,2.00651799598534E+004,2.21805267034084E+004,2.37650868598599E+004 -3.57999999999999E-008,5.75140416145598E+022,8.86359901620606E+022,1.60750019540059E+023,3.08817019199229E+021,8.09330826653408E+021,3.18081529775206E+023,2.30775266808596E+004,2.35602415014837E+004,2.41978322229983E+004,2.08104049486249E+004,2.27322910622754E+004,2.37474168438981E+004,0.00000000000000E+000,0.00000000000000E+000,2.41503145293645E+004,1.86584666944957E+004,2.17741465062784E+004,0.00000000000000E+000,0.00000000000000E+000,1.86278182334637E+000,1.88066170880623E+000,1.87685396749481E+000,0.00000000000000E+000,0.00000000000000E+000,2.42879847698565E+004,2.00698920096920E+004,2.14442302826156E+004,2.30775266808596E+004,2.35602415014837E+004,2.42112072653777E+004,2.00069802220398E+004,2.20961834771277E+004,2.37301907926104E+004 -3.60000000000000E-008,5.79494886270449E+022,8.86810364047315E+022,1.60499762636332E+023,3.03311367317233E+021,8.15837506150312E+021,3.18321776402784E+023,2.30342783037741E+004,2.35090449626340E+004,2.41944554808749E+004,2.07811386995439E+004,2.29598297664561E+004,2.37281345512588E+004,0.00000000000000E+000,0.00000000000000E+000,2.41090234802183E+004,1.84854120138148E+004,2.19642802145027E+004,0.00000000000000E+000,0.00000000000000E+000,1.86255245194496E+000,1.87956785126823E+000,1.87789737001466E+000,0.00000000000000E+000,0.00000000000000E+000,2.42406784288295E+004,1.99881522639606E+004,2.13003546003072E+004,2.30342783037741E+004,2.35090449626340E+004,2.41847396081212E+004,1.99233890454179E+004,2.22054581993184E+004,2.36957286826692E+004 -3.62000000000000E-008,5.82598071876665E+022,8.87210775093279E+022,1.60319577665648E+023,2.98806743050145E+021,8.20842644224854E+021,3.18496956235393E+023,2.30989242942829E+004,2.34939072779720E+004,2.41587734308089E+004,2.08108802039995E+004,2.28646847930219E+004,2.37149374469524E+004,0.00000000000000E+000,0.00000000000000E+000,2.40501515537716E+004,1.83550159490615E+004,2.19487280403652E+004,0.00000000000000E+000,0.00000000000000E+000,1.86222409045421E+000,1.87873030014331E+000,1.87781268801553E+000,0.00000000000000E+000,0.00000000000000E+000,2.42346790054930E+004,2.02672962118927E+004,2.11843168832979E+004,2.30989242942829E+004,2.34939072779720E+004,2.41514190911464E+004,1.99820826898876E+004,2.21259715913505E+004,2.36844215494700E+004 -3.64000000000000E-008,5.86151719909590E+022,8.88562162373405E+022,1.60124377280741E+023,2.90298008323424E+021,8.24346240877034E+021,3.18742208001045E+023,2.31186732910048E+004,2.34536481971002E+004,2.41156132062006E+004,2.03670889454203E+004,2.28831688855779E+004,2.36817296262697E+004,0.00000000000000E+000,0.00000000000000E+000,2.39964318606309E+004,1.80723774905010E+004,2.22623020396892E+004,0.00000000000000E+000,0.00000000000000E+000,1.86192309468801E+000,1.87687429102693E+000,1.87949773801734E+000,0.00000000000000E+000,0.00000000000000E+000,2.42302036546468E+004,2.07217889451015E+004,2.11744814645926E+004,2.31186732910048E+004,2.34536481971002E+004,2.41166733167585E+004,1.98439610266222E+004,2.22167986287647E+004,2.36602637570597E+004 -3.66000000000000E-008,5.89204854135060E+022,8.89413035846077E+022,1.59959207724281E+023,2.84792356441428E+021,8.26848809914304E+021,3.18937408385952E+023,2.31223191856125E+004,2.34432599009464E+004,2.41025352252034E+004,1.99583309424680E+004,2.30325776873329E+004,2.36728555569640E+004,0.00000000000000E+000,0.00000000000000E+000,2.39666798970289E+004,1.83686758096544E+004,2.22984996034077E+004,0.00000000000000E+000,0.00000000000000E+000,1.86175582579310E+000,1.87881858485383E+000,1.87968926648279E+000,0.00000000000000E+000,0.00000000000000E+000,2.41629903006837E+004,2.06729294970063E+004,2.12520411274310E+004,2.31223191856125E+004,2.34432599009464E+004,2.40832953540851E+004,1.97319146649126E+004,2.23143894634854E+004,2.36425651572780E+004 -3.68000000000000E-008,5.92558296645003E+022,8.89863498272786E+022,1.59774017615523E+023,2.80788245981795E+021,8.30352406566484E+021,3.19127603632785E+023,2.30659334250169E+004,2.34470830467458E+004,2.40570503193226E+004,1.98774138699521E+004,2.30779364912584E+004,2.36406832092272E+004,0.00000000000000E+000,0.00000000000000E+000,2.39768234878080E+004,1.82378040982054E+004,2.23884798888495E+004,0.00000000000000E+000,0.00000000000000E+000,1.86181289969045E+000,1.87796743262570E+000,1.88016274367640E+000,0.00000000000000E+000,0.00000000000000E+000,2.41392553281970E+004,2.06312054732469E+004,2.10806722055217E+004,2.30659334250169E+004,2.34470830467458E+004,2.40592425487164E+004,1.96489233220744E+004,2.23089402645968E+004,2.36197615092479E+004 -3.70000000000000E-008,5.95311122586001E+022,8.90514166222476E+022,1.59628868611361E+023,2.76784135522161E+021,8.31853947988846E+021,3.19297778327319E+023,2.29984113152690E+004,2.34455428295226E+004,2.40465692369510E+004,1.97638103244613E+004,2.29511325966401E+004,2.36178575471956E+004,0.00000000000000E+000,0.00000000000000E+000,2.39847903124050E+004,1.81401813501750E+004,2.26688775836589E+004,0.00000000000000E+000,0.00000000000000E+000,1.86185769279041E+000,1.87732469873667E+000,1.88161459769305E+000,0.00000000000000E+000,0.00000000000000E+000,2.40997082547860E+004,2.04029182011945E+004,2.09186324622118E+004,2.29984113152690E+004,2.34455428295226E+004,2.40452947234534E+004,1.95064627221486E+004,2.22832522095148E+004,2.35975895206342E+004 -3.72000000000000E-008,5.98314205430726E+022,8.91515193837384E+022,1.59478714469125E+023,2.71778997447619E+021,8.31853947988846E+021,3.19497983850301E+023,2.30361412649165E+004,2.34491704018473E+004,2.40116847766369E+004,2.00350261737922E+004,2.29389518048851E+004,2.36102786137260E+004,0.00000000000000E+000,0.00000000000000E+000,2.39737390514433E+004,1.84164483832420E+004,2.28223169910690E+004,0.00000000000000E+000,0.00000000000000E+000,1.86179554979403E+000,1.87912633473138E+000,1.88239429391810E+000,0.00000000000000E+000,0.00000000000000E+000,2.40146402046729E+004,1.99855506186815E+004,2.09350620648647E+004,2.30361412649165E+004,2.34491704018473E+004,2.40022504637435E+004,1.95785055186328E+004,2.23247277416436E+004,2.35856939625905E+004 -3.74000000000000E-008,6.01817802082905E+022,8.92115810406329E+022,1.59283514084218E+023,2.66773859373078E+021,8.35858058448480E+021,3.19703194511357E+023,2.30983267492238E+004,2.34452347999377E+004,2.39591985198690E+004,2.03124052981568E+004,2.30156201998210E+004,2.35986266514393E+004,0.00000000000000E+000,0.00000000000000E+000,2.39894923449411E+004,1.84682492900898E+004,2.26568975265894E+004,0.00000000000000E+000,0.00000000000000E+000,1.86188411613255E+000,1.87945827429285E+000,1.88155328636548E+000,0.00000000000000E+000,0.00000000000000E+000,2.39129283041186E+004,1.98223328833834E+004,2.10687601897903E+004,2.30983267492238E+004,2.34452347999377E+004,2.39539322053743E+004,1.96661103544677E+004,2.23517183662297E+004,2.35732523037357E+004 -3.76000000000000E-008,6.05721809781048E+022,8.92616324213784E+022,1.59098323975460E+023,2.65272317950715E+021,8.33856003218663E+021,3.19923420586637E+023,2.30010437415477E+004,2.34433181851535E+004,2.38957936941401E+004,2.00213734165455E+004,2.27681570195747E+004,2.35386260663535E+004,0.00000000000000E+000,0.00000000000000E+000,2.39989570329118E+004,1.84721482739451E+004,2.30109829311559E+004,0.00000000000000E+000,0.00000000000000E+000,1.86193727286880E+000,1.87948318520382E+000,1.88333903347798E+000,0.00000000000000E+000,0.00000000000000E+000,2.39391752882848E+004,1.98691227484787E+004,2.09670758588660E+004,2.30010437415477E+004,2.34433181851535E+004,2.39364304477060E+004,1.95538609806312E+004,2.23112800898606E+004,2.35430501332140E+004 -3.78000000000000E-008,6.08524687102791E+022,8.93016735259747E+022,1.58958180109373E+023,2.63270262720898E+021,8.33856003218663E+021,3.20083585005022E+023,2.31080968151263E+004,2.33890603454678E+004,2.38440516859762E+004,2.02285500799233E+004,2.28638487845786E+004,2.35219227639006E+004,0.00000000000000E+000,0.00000000000000E+000,2.40041325247141E+004,1.80418822785809E+004,2.29698358648216E+004,0.00000000000000E+000,0.00000000000000E+000,1.86196632280710E+000,1.87667063777652E+000,1.88313428658128E+000,0.00000000000000E+000,0.00000000000000E+000,2.38959940089378E+004,2.02545411722944E+004,2.08608939692545E+004,2.31080968151263E+004,2.33890603454678E+004,2.39026281577440E+004,1.96393589893466E+004,2.23108562716578E+004,2.35317604541120E+004 -3.80000000000000E-008,6.11627872709007E+022,8.93216940782729E+022,1.58783000276764E+023,2.60267179876173E+021,8.37860113678296E+021,3.20248754561482E+023,2.30811220280692E+004,2.33790151005902E+004,2.38534862911632E+004,2.01869053980188E+004,2.28215425569313E+004,2.35168427546929E+004,0.00000000000000E+000,0.00000000000000E+000,2.39840436327466E+004,1.75678497987701E+004,2.28254038491722E+004,0.00000000000000E+000,0.00000000000000E+000,1.86185349585144E+000,1.87341608020785E+000,1.88240987433641E+000,0.00000000000000E+000,0.00000000000000E+000,2.38394420137083E+004,2.01994041877967E+004,2.09316916204384E+004,2.30811220280692E+004,2.33790151005902E+004,2.38848174887844E+004,1.94766932941580E+004,2.22734157514629E+004,2.35122646780953E+004 -3.82000000000000E-008,6.15531880407150E+022,8.94217968397637E+022,1.58602815306080E+023,2.56763583223994E+021,8.34857030833571E+021,3.20494006327135E+023,2.31288764412808E+004,2.33380059066667E+004,2.38627405103877E+004,2.01309590232407E+004,2.27844079501757E+004,2.35174024602371E+004,0.00000000000000E+000,0.00000000000000E+000,2.39612902755649E+004,1.77039749335047E+004,2.22731305263637E+004,0.00000000000000E+000,0.00000000000000E+000,1.86172548139246E+000,1.87436811261358E+000,1.87955509754826E+000,0.00000000000000E+000,0.00000000000000E+000,2.37413773199698E+004,2.00066831170694E+004,2.11137395680029E+004,2.31288764412808E+004,2.33380059066667E+004,2.38541051063657E+004,1.94330602023787E+004,2.21590316298282E+004,2.34912473764507E+004 -3.84000000000000E-008,6.19786247770510E+022,8.94568328062855E+022,1.58377584092726E+023,2.53760500379269E+021,8.37359599870842E+021,3.20724242678564E+023,2.30875131973064E+004,2.33311445242733E+004,2.38095388027225E+004,1.98344400636917E+004,2.28071326597357E+004,2.34789533605574E+004,0.00000000000000E+000,0.00000000000000E+000,2.39568638387819E+004,1.77883728413109E+004,2.19465891043178E+004,0.00000000000000E+000,0.00000000000000E+000,1.86170054991140E+000,1.87495122001776E+000,1.87780103226737E+000,0.00000000000000E+000,0.00000000000000E+000,2.37082572735024E+004,2.02216060796059E+004,2.15445431902023E+004,2.30875131973064E+004,2.33311445242733E+004,2.38199898624395E+004,1.93890632013661E+004,2.22050349112964E+004,2.34648705452870E+004 -3.86000000000000E-008,6.23139690280453E+022,8.94918687728073E+022,1.58212414536266E+023,2.52258958956906E+021,8.36859086063388E+021,3.20909432787322E+023,2.29981141079640E+004,2.33962106612755E+004,2.38287079534125E+004,1.97636214003073E+004,2.25960901420300E+004,2.34827149787628E+004,0.00000000000000E+000,0.00000000000000E+000,2.39258816825501E+004,1.76710180108304E+004,2.19622093842121E+004,0.00000000000000E+000,0.00000000000000E+000,1.86152579402537E+000,1.87413893397908E+000,1.87788610106067E+000,0.00000000000000E+000,0.00000000000000E+000,2.36086487059443E+004,2.02763148983278E+004,2.16501755778395E+004,2.29981141079640E+004,2.33962106612755E+004,2.37909281505776E+004,1.93422679017277E+004,2.21479604481199E+004,2.34490906949785E+004 -3.88000000000000E-008,6.27494160405305E+022,8.95068841870309E+022,1.57982178184837E+023,2.50256903727090E+021,8.39361655100659E+021,3.21134664000676E+023,2.30424076455291E+004,2.33564981198060E+004,2.37989650781155E+004,2.00216698959861E+004,2.25687656611114E+004,2.34662194980721E+004,0.00000000000000E+000,0.00000000000000E+000,2.38697649026735E+004,1.76124937034521E+004,2.17371168430973E+004,0.00000000000000E+000,0.00000000000000E+000,1.86120813913118E+000,1.87372989626856E+000,1.87664868152186E+000,0.00000000000000E+000,0.00000000000000E+000,2.35947079387387E+004,2.04676855736600E+004,2.13778282983601E+004,2.30424076455291E+004,2.33564981198060E+004,2.37586309178007E+004,1.94947195856534E+004,2.19954358945476E+004,2.34272853073663E+004 -3.90000000000000E-008,6.31498270864938E+022,8.95669458439254E+022,1.57781972661856E+023,2.47253820882365E+021,8.39361655100659E+021,3.21364900352105E+023,2.30008905685964E+004,2.33883242668143E+004,2.37232160725950E+004,2.02690793132249E+004,2.25516180085157E+004,2.34307622395085E+004,0.00000000000000E+000,0.00000000000000E+000,2.38209045376522E+004,1.77901447918768E+004,2.18172469441500E+004,0.00000000000000E+000,0.00000000000000E+000,1.86093037137849E+000,1.87496340448981E+000,1.87709205033438E+000,0.00000000000000E+000,0.00000000000000E+000,2.36127018534321E+004,2.02260155186500E+004,2.13207309312534E+004,2.30008905685964E+004,2.33883242668143E+004,2.37174971679212E+004,1.95804881425850E+004,2.19932052065154E+004,2.34080714883725E+004 -3.92000000000000E-008,6.34901764755627E+022,8.96370177769690E+022,1.57601787691172E+023,2.42749196615277E+021,8.41363710330476E+021,3.21570111013161E+023,2.29551179275397E+004,2.34018469248053E+004,2.36762208242535E+004,1.97575698342472E+004,2.24441836449349E+004,2.33955497895346E+004,0.00000000000000E+000,0.00000000000000E+000,2.38130402065659E+004,1.78278846677319E+004,2.17684582347599E+004,0.00000000000000E+000,0.00000000000000E+000,1.86088555935823E+000,1.87522235296716E+000,1.87682247712330E+000,0.00000000000000E+000,0.00000000000000E+000,2.36068623984809E+004,2.01059291173020E+004,2.13669544751818E+004,2.29551179275397E+004,2.34018469248053E+004,2.36931119908875E+004,1.93325842785338E+004,2.19464719490067E+004,2.33875977552237E+004 -3.94000000000000E-008,6.38105053123333E+022,8.96770588815653E+022,1.57451633548936E+023,2.41748169000369E+021,8.39361655100659E+021,3.21750295983845E+023,2.29688250883765E+004,2.33756286253033E+004,2.36233213488525E+004,1.99154459208479E+004,2.24263291699383E+004,2.33653980231664E+004,0.00000000000000E+000,0.00000000000000E+000,2.37752101936972E+004,1.81893265068940E+004,2.17191283459808E+004,0.00000000000000E+000,0.00000000000000E+000,1.86066959486986E+000,1.87764910690139E+000,1.87654870935432E+000,0.00000000000000E+000,0.00000000000000E+000,2.36342153201783E+004,2.00107787059544E+004,2.12112106718027E+004,2.29688250883765E+004,2.33756286253033E+004,2.36676906183304E+004,1.94719250377104E+004,2.18799309768139E+004,2.33695240595489E+004 -3.96000000000000E-008,6.40307313876132E+022,8.97671513669071E+022,1.57356535925519E+023,2.38745086155644E+021,8.36358572255934E+021,3.21905455264156E+023,2.30140748817953E+004,2.33489581921745E+004,2.36231270390836E+004,2.02453503191282E+004,2.21517190739375E+004,2.33622431904840E+004,0.00000000000000E+000,0.00000000000000E+000,2.36935657625447E+004,1.82278794955837E+004,2.18596853735185E+004,0.00000000000000E+000,0.00000000000000E+000,1.86020121054992E+000,1.87790239806257E+000,1.87732557893156E+000,0.00000000000000E+000,0.00000000000000E+000,2.36337787917787E+004,2.01434439069439E+004,2.11365387200869E+004,2.30140748817953E+004,2.33489581921745E+004,2.36453324670830E+004,1.96648788481971E+004,2.17767763707292E+004,2.33590511249033E+004 -3.98000000000000E-008,6.44661784000983E+022,8.98522387141743E+022,1.57146320126389E+023,2.35241489503464E+021,8.34857030833571E+021,3.22165722444032E+023,2.29649426955510E+004,2.33293215848047E+004,2.36021504877240E+004,2.03470003499829E+004,2.22612601015346E+004,2.33400350161734E+004,0.00000000000000E+000,0.00000000000000E+000,2.36414659880229E+004,1.83330123196463E+004,2.15563006387672E+004,0.00000000000000E+000,0.00000000000000E+000,1.85990067189255E+000,1.87858781833217E+000,1.87563636138248E+000,0.00000000000000E+000,0.00000000000000E+000,2.36289277706801E+004,1.98568195377310E+004,2.09321277714091E+004,2.29649426955510E+004,2.33293215848047E+004,2.36206168617129E+004,1.96544432248322E+004,2.16823300865217E+004,2.33289832603088E+004 -4.00000000000000E-008,6.47114301657509E+022,8.99773671660378E+022,1.57046217364898E+023,2.31237379043831E+021,8.30352406566484E+021,3.22350912552790E+023,2.30020116765589E+004,2.32922518547141E+004,2.35730826516630E+004,2.01732365502534E+004,2.24076699226548E+004,2.33256442861865E+004,0.00000000000000E+000,0.00000000000000E+000,2.36638452792279E+004,1.82227367745816E+004,2.15008087490335E+004,0.00000000000000E+000,0.00000000000000E+000,1.86002992538559E+000,1.87786867125463E+000,1.87532234471714E+000,0.00000000000000E+000,0.00000000000000E+000,2.35808577106589E+004,1.98575647856705E+004,2.04819310105098E+004,2.30020116765589E+004,2.32922518547141E+004,2.35999588203349E+004,1.95488969246459E+004,2.16001245352004E+004,2.33134576337985E+004 -4.02000000000000E-008,6.50617898309688E+022,9.00174082706342E+022,1.56866032394214E+023,2.28734810006560E+021,8.31353434181392E+021,3.22546112937697E+023,2.29605489044333E+004,2.32234489776823E+004,2.35652159960699E+004,2.00186525734175E+004,2.24195693438150E+004,2.32931857379591E+004,0.00000000000000E+000,0.00000000000000E+000,2.36669344434103E+004,1.84002164562985E+004,2.15194298235815E+004,0.00000000000000E+000,0.00000000000000E+000,1.86004774839614E+000,1.87902194441019E+000,1.87542789392184E+000,0.00000000000000E+000,0.00000000000000E+000,2.35530973092404E+004,1.97807819052592E+004,2.05029646974442E+004,2.29605489044333E+004,2.32234489776823E+004,2.35892630291719E+004,1.95074144432837E+004,2.16165129897094E+004,2.32805566802617E+004 -4.04000000000000E-008,6.54321700484849E+022,9.01675624128704E+022,1.56685847423531E+023,2.21727616702201E+021,8.30352406566484E+021,3.22806380117573E+023,2.30275002326079E+004,2.31977080527750E+004,2.35080833384488E+004,2.00938066543619E+004,2.20412108501369E+004,2.32627908391352E+004,0.00000000000000E+000,0.00000000000000E+000,2.35901149308596E+004,1.82331889325269E+004,2.14677465305451E+004,0.00000000000000E+000,0.00000000000000E+000,1.85960318583880E+000,1.87793719869237E+000,1.87513449809258E+000,0.00000000000000E+000,0.00000000000000E+000,2.35633775140266E+004,1.98324226739369E+004,2.08484655340722E+004,2.30275002326079E+004,2.31977080527750E+004,2.35464433652045E+004,1.95097810843125E+004,2.15378296636043E+004,2.32644503153984E+004 -4.06000000000000E-008,6.56223652953175E+022,9.02076035174668E+022,1.56580739523965E+023,2.18724533857476E+021,8.32354461796300E+021,3.22921498293288E+023,2.29583686493833E+004,2.31916758913356E+004,2.35591855163519E+004,2.04589237301784E+004,2.19213456937177E+004,2.32712119595136E+004,0.00000000000000E+000,0.00000000000000E+000,2.35437999269799E+004,1.83539866482344E+004,2.13120729081563E+004,0.00000000000000E+000,0.00000000000000E+000,1.85933378955594E+000,1.87872364248465E+000,1.87424236346753E+000,0.00000000000000E+000,0.00000000000000E+000,2.35276047937113E+004,1.99471242899674E+004,2.06856081526965E+004,2.29583686493833E+004,2.31916758913356E+004,2.35458069005434E+004,1.97352147689016E+004,2.13957023200053E+004,2.32462740760778E+004 -4.08000000000000E-008,6.59476992701627E+022,9.03427422454794E+022,1.56425580243655E+023,2.12718368168026E+021,8.30852920373938E+021,3.23151734644716E+023,2.29142030350972E+004,2.31447145224779E+004,2.35338495597613E+004,2.04154082929080E+004,2.20866265793874E+004,2.32408677476404E+004,0.00000000000000E+000,0.00000000000000E+000,2.35776208768772E+004,1.79632491456143E+004,2.11516088880953E+004,0.00000000000000E+000,0.00000000000000E+000,1.85953061443293E+000,1.87614238956869E+000,1.87330934094216E+000,0.00000000000000E+000,0.00000000000000E+000,2.34747715467467E+004,1.96709872079245E+004,2.07159753002443E+004,2.29142030350972E+004,2.31447145224779E+004,2.35284903123310E+004,1.95298184451161E+004,2.14329560241329E+004,2.32156375672462E+004 -4.10000000000000E-008,6.63381000399769E+022,9.03927936262248E+022,1.56205354168375E+023,2.07713230093484E+021,8.35858058448480E+021,3.23371960719996E+023,2.29132965029168E+004,2.31234890435078E+004,2.35394830385011E+004,2.01960166259475E+004,2.19203404468415E+004,2.32314122952263E+004,0.00000000000000E+000,0.00000000000000E+000,2.34681868219377E+004,1.77391781776765E+004,2.11559817383662E+004,0.00000000000000E+000,0.00000000000000E+000,1.85889175035832E+000,1.87461199225262E+000,1.87333495037611E+000,0.00000000000000E+000,0.00000000000000E+000,2.34728416141520E+004,2.00446286059225E+004,2.07029406187749E+004,2.29132965029168E+004,2.31234890435078E+004,2.35007282648183E+004,1.94820279872086E+004,2.13577751757961E+004,2.31935642420505E+004 -4.12000000000000E-008,6.66334031863749E+022,9.04578604211938E+022,1.56050194888064E+023,2.03709119633851E+021,8.37359599870842E+021,3.23552145690680E+023,2.28798764211699E+004,2.30846257117279E+004,2.35250383776243E+004,2.00556026431394E+004,2.18303819792834E+004,2.32033404669848E+004,0.00000000000000E+000,0.00000000000000E+000,2.34521894599086E+004,1.76190922940731E+004,2.10728565826199E+004,0.00000000000000E+000,0.00000000000000E+000,1.85879787264027E+000,1.87377614796538E+000,1.87284635281448E+000,0.00000000000000E+000,0.00000000000000E+000,2.34644830467466E+004,1.94867783183505E+004,2.09976400829355E+004,2.28798764211699E+004,2.30846257117279E+004,2.34876379351863E+004,1.92259096907994E+004,2.13816286810610E+004,2.31684645265439E+004 -4.14000000000000E-008,6.69036806424002E+022,9.05079118019393E+022,1.55930071574275E+023,2.02708092018943E+021,8.34356517026117E+021,3.23712310109065E+023,2.29263604612733E+004,2.30428422395404E+004,2.34908308810649E+004,1.99495451556562E+004,2.18502789511957E+004,2.31844533145499E+004,0.00000000000000E+000,0.00000000000000E+000,2.33612083713798E+004,1.71837000366741E+004,2.09794544871142E+004,0.00000000000000E+000,0.00000000000000E+000,1.85826158317810E+000,1.87064993795300E+000,1.87229283429010E+000,0.00000000000000E+000,0.00000000000000E+000,2.35528526413363E+004,1.91957250299032E+004,2.06438001771860E+004,2.29263604612733E+004,2.30428422395404E+004,2.34737960963599E+004,1.89770653594132E+004,2.12619169518541E+004,2.31549933069260E+004 -4.16000000000000E-008,6.72340197553199E+022,9.06080145634301E+022,1.55779917432039E+023,1.99204495366763E+021,8.31353434181392E+021,3.23927531046270E+023,2.29048729662327E+004,2.30073540591883E+004,2.34661521799610E+004,2.00019572489100E+004,2.19176604710755E+004,2.31602747657646E+004,0.00000000000000E+000,0.00000000000000E+000,2.32955575144103E+004,1.69578068468022E+004,2.10108703703207E+004,0.00000000000000E+000,0.00000000000000E+000,1.85787206746753E+000,1.86896620096675E+000,1.87247954757398E+000,0.00000000000000E+000,0.00000000000000E+000,2.35686981028387E+004,1.92078263443977E+004,2.06719631594107E+004,2.29048729662327E+004,2.30073540591883E+004,2.34498422784158E+004,1.89424563271848E+004,2.13080783672750E+004,2.31302708006701E+004 -4.18000000000000E-008,6.75393331778670E+022,9.06430505299519E+022,1.55634768427877E+023,1.98203467751855E+021,8.29851892759030E+021,3.24097705740805E+023,2.29051346980484E+004,2.29740709101299E+004,2.35008239915568E+004,2.03778856504735E+004,2.18704492111197E+004,2.31685216333606E+004,0.00000000000000E+000,0.00000000000000E+000,2.32413282097829E+004,1.68022912194759E+004,2.10498223831153E+004,0.00000000000000E+000,0.00000000000000E+000,1.85754870016841E+000,1.86778134307238E+000,1.87271029378032E+000,0.00000000000000E+000,0.00000000000000E+000,2.35010580989175E+004,1.92488270803364E+004,2.04751978401246E+004,2.29051346980484E+004,2.29740709101299E+004,2.34306009631152E+004,1.90766581852311E+004,2.12408141959406E+004,2.31107203577318E+004 -4.20000000000000E-008,6.78246260481159E+022,9.06780864964737E+022,1.55484614285641E+023,1.95700898714584E+021,8.31353434181392E+021,3.24257870159190E+023,2.29290368823763E+004,2.29616362636152E+004,2.34085499925213E+004,2.05679122865789E+004,2.19966002310891E+004,2.31299275324005E+004,0.00000000000000E+000,0.00000000000000E+000,2.32913184269508E+004,1.68227845876632E+004,2.08721663928048E+004,0.00000000000000E+000,0.00000000000000E+000,1.85784684282034E+000,1.86793870366901E+000,1.87165105078961E+000,0.00000000000000E+000,0.00000000000000E+000,2.34873816990319E+004,1.89667837422732E+004,2.04005684423647E+004,2.29290368823763E+004,2.29616362636152E+004,2.33997812226244E+004,1.90830524898322E+004,2.12258085664267E+004,2.30969991234728E+004 -4.22000000000000E-008,6.81249343325884E+022,9.07181276010700E+022,1.55324449867256E+023,1.92697815869859E+021,8.33355489411209E+021,3.24428044853725E+023,2.29865036739598E+004,2.29241170103927E+004,2.34138229297412E+004,2.05417312270830E+004,2.20956912674613E+004,2.31362406359407E+004,0.00000000000000E+000,0.00000000000000E+000,2.31483728891735E+004,1.69202091691501E+004,2.07675178200144E+004,0.00000000000000E+000,0.00000000000000E+000,1.85699097706033E+000,1.86868169765028E+000,1.87101881473429E+000,0.00000000000000E+000,0.00000000000000E+000,2.35117979803634E+004,1.93035241396006E+004,2.02513861844330E+004,2.29865036739598E+004,2.29241170103927E+004,2.33705111870331E+004,1.91959291402833E+004,2.11971858431680E+004,2.30844311565238E+004 -4.24000000000000E-008,6.84702888597318E+022,9.07431532914427E+022,1.55129249482348E+023,1.89194219217680E+021,8.37860113678296E+021,3.24613234962483E+023,2.29907939759930E+004,2.29030273844262E+004,2.34097761341880E+004,2.04625900293408E+004,2.19436407787225E+004,2.31247234375991E+004,0.00000000000000E+000,0.00000000000000E+000,2.30051337969749E+004,1.70508247774839E+004,2.08415047016506E+004,0.00000000000000E+000,0.00000000000000E+000,1.85612295993077E+000,1.86966480508465E+000,1.87146645025560E+000,0.00000000000000E+000,0.00000000000000E+000,2.35695299250387E+004,1.89360484514713E+004,2.02455100197911E+004,2.29907939759930E+004,2.29030273844262E+004,2.33468311792212E+004,1.90896059263369E+004,2.11492146908943E+004,2.30661355938190E+004 -4.26000000000000E-008,6.87806074203533E+022,9.08332457767845E+022,1.54974090202038E+023,1.84689594950592E+021,8.37860113678296E+021,3.24813440485464E+023,2.29753733781035E+004,2.29026672921484E+004,2.33690213569848E+004,2.00993947377572E+004,2.19268361140828E+004,2.30994575254150E+004,0.00000000000000E+000,0.00000000000000E+000,2.30320377619105E+004,1.68911765415420E+004,2.09889625439477E+004,0.00000000000000E+000,0.00000000000000E+000,1.85628679802746E+000,1.86846116014793E+000,1.87234940094603E+000,0.00000000000000E+000,0.00000000000000E+000,2.35125206167784E+004,1.83942580474180E+004,2.00811583954800E+004,2.29753733781035E+004,2.29026672921484E+004,2.33196448228528E+004,1.87301354154284E+004,2.11341839748215E+004,2.30476669374375E+004 -4.28000000000000E-008,6.91059413951986E+022,9.08883022956044E+022,1.54813925783652E+023,1.82187025913321E+021,8.37359599870842E+021,3.25003635732297E+023,2.29768662198106E+004,2.28331450927912E+004,2.33563066436534E+004,2.02259444299042E+004,2.19792564440437E+004,2.30762949184577E+004,0.00000000000000E+000,0.00000000000000E+000,2.30591392607933E+004,1.69331706434291E+004,2.10302329744780E+004,0.00000000000000E+000,0.00000000000000E+000,1.85645146246924E+000,1.86877991707056E+000,1.87259435332112E+000,0.00000000000000E+000,0.00000000000000E+000,2.34331702964461E+004,1.82909442986202E+004,2.02051928536532E+004,2.29768662198106E+004,2.28331450927912E+004,2.32982664870065E+004,1.87666649207037E+004,2.12044015788667E+004,2.30205036532341E+004 -4.30000000000000E-008,6.94512959223419E+022,9.09633793667226E+022,1.54643751089118E+023,1.78683429261142E+021,8.36859086063388E+021,3.25213851531428E+023,2.29540150371765E+004,2.28165792889023E+004,2.33266440713430E+004,2.02909722164414E+004,2.18717421119234E+004,2.30502828185339E+004,0.00000000000000E+000,0.00000000000000E+000,2.30456572238488E+004,1.73331250458141E+004,2.07582398704149E+004,0.00000000000000E+000,0.00000000000000E+000,1.85636959489786E+000,1.87174013898826E+000,1.87096246128080E+000,0.00000000000000E+000,0.00000000000000E+000,2.33998593699706E+004,1.79299081343667E+004,2.04967459323800E+004,2.29540150371765E+004,2.28165792889023E+004,2.32719234443689E+004,1.87981262660828E+004,2.11683016142147E+004,2.29979588569471E+004 -4.32000000000000E-008,6.97716247591126E+022,9.09934101951698E+022,1.54483586670732E+023,1.77181887838780E+021,8.36859086063388E+021,3.25389031364037E+023,2.29537411841989E+004,2.27285404387373E+004,2.33431045729352E+004,2.06118727004151E+004,2.17104496658272E+004,2.30308934596427E+004,0.00000000000000E+000,0.00000000000000E+000,2.29832876177886E+004,1.77793949510614E+004,2.10502280186083E+004,0.00000000000000E+000,0.00000000000000E+000,1.85598964752292E+000,1.87488944881165E+000,1.87271269231644E+000,0.00000000000000E+000,0.00000000000000E+000,2.33995901362753E+004,1.79444605239486E+004,2.03309056478606E+004,2.29537411841989E+004,2.27285404387373E+004,2.32621760060032E+004,1.90634249648620E+004,2.11290935589600E+004,2.29690879478458E+004 -4.34000000000000E-008,7.00819433197342E+022,9.10534718520643E+022,1.54333432528496E+023,1.74679318801509E+021,8.35858058448480E+021,3.25574221472795E+023,2.29510685615631E+004,2.27102086961978E+004,2.33285037576634E+004,2.03831584026926E+004,2.17941567912423E+004,2.30191451865038E+004,0.00000000000000E+000,0.00000000000000E+000,2.29253594720373E+004,1.81358773556496E+004,2.08570786666059E+004,0.00000000000000E+000,0.00000000000000E+000,1.85563495312539E+000,1.87729620607385E+000,1.87156028051518E+000,0.00000000000000E+000,0.00000000000000E+000,2.33983277437714E+004,1.70719760587727E+004,2.03251736918087E+004,2.29510685615631E+004,2.27102086961978E+004,2.32397533122992E+004,1.88067864468271E+004,2.11113767230851E+004,2.29510874981933E+004 -4.36000000000000E-008,7.03972670184303E+022,9.11585797516297E+022,1.54178273248185E+023,1.69674180726967E+021,8.35357544641025E+021,3.25784437271925E+023,2.28949224661324E+004,2.27105623728339E+004,2.33103170016208E+004,2.07732869808865E+004,2.19029467414473E+004,2.30034371531495E+004,0.00000000000000E+000,0.00000000000000E+000,2.29261673316126E+004,1.79069513485559E+004,2.08556429563499E+004,0.00000000000000E+000,0.00000000000000E+000,1.85563991165976E+000,1.87576140057485E+000,1.87155163635618E+000,0.00000000000000E+000,0.00000000000000E+000,2.33389210937457E+004,1.67985586991775E+004,2.01427881002694E+004,2.28949224661324E+004,2.27105623728339E+004,2.32146825628351E+004,1.88351716904807E+004,2.11053975582146E+004,2.29276335900427E+004 -4.38000000000000E-008,7.06725496125301E+022,9.12036259943006E+022,1.54033124244024E+023,1.66671097882242E+021,8.36859086063388E+021,3.25944601690311E+023,2.29094787737928E+004,2.26619880496424E+004,2.33168982680247E+004,2.06306975243058E+004,2.19569562795345E+004,2.29966552608945E+004,0.00000000000000E+000,0.00000000000000E+000,2.29057084858841E+004,1.76358683410873E+004,2.07057463701079E+004,0.00000000000000E+000,0.00000000000000E+000,1.85551423305327E+000,1.87389358444842E+000,1.87064269105341E+000,0.00000000000000E+000,0.00000000000000E+000,2.32799917473067E+004,1.75088831553549E+004,2.01990748031608E+004,2.29094787737928E+004,2.26619880496424E+004,2.31948386374503E+004,1.89059661496922E+004,2.11045862920200E+004,2.29082691041764E+004 -4.40000000000000E-008,7.10179041396735E+022,9.12586825131205E+022,1.53847934135266E+023,1.62666987422608E+021,8.39361655100659E+021,3.26144807213292E+023,2.29142730132933E+004,2.25801898153357E+004,2.33038600924811E+004,2.03485836107761E+004,2.19512577784184E+004,2.29669872192263E+004,0.00000000000000E+000,0.00000000000000E+000,2.29425056369624E+004,1.78330825515978E+004,2.05579644700521E+004,0.00000000000000E+000,0.00000000000000E+000,1.85574012099251E+000,1.87525793377013E+000,1.86973389382286E+000,0.00000000000000E+000,0.00000000000000E+000,2.32255376125687E+004,1.74863135277956E+004,2.00333183343658E+004,2.29142730132933E+004,2.25801898153357E+004,2.31831984416263E+004,1.88298400835982E+004,2.10136717364633E+004,2.28783646897971E+004 -4.42000000000000E-008,7.13282227002951E+022,9.13187441700150E+022,1.53717800545328E+023,1.62166473615154E+021,8.34356517026117E+021,3.26329997322050E+023,2.28840074485525E+004,2.25647085123157E+004,2.32614466188246E+004,2.06750371421291E+004,2.18705571864846E+004,2.29355599990457E+004,0.00000000000000E+000,0.00000000000000E+000,2.29926598139582E+004,1.82640591546504E+004,2.05747028107737E+004,0.00000000000000E+000,0.00000000000000E+000,1.85604686990364E+000,1.87813914497262E+000,1.86983746806846E+000,0.00000000000000E+000,0.00000000000000E+000,2.31689820372799E+004,1.67787737448443E+004,1.99882122745613E+004,2.28840074485525E+004,2.25647085123157E+004,2.31617083755032E+004,1.88837562926386E+004,2.09698478294623E+004,2.28566474632357E+004 -4.44000000000000E-008,7.16085104324695E+022,9.13687955507604E+022,1.53567646403091E+023,1.58662876962975E+021,8.36358572255934E+021,3.26495166878510E+023,2.28474737694725E+004,2.25450082021141E+004,2.32499416784794E+004,2.02959444690640E+004,2.17803992885441E+004,2.29123973530843E+004,0.00000000000000E+000,0.00000000000000E+000,2.30151122547348E+004,1.83561222422846E+004,2.03053477339939E+004,0.00000000000000E+000,0.00000000000000E+000,1.85618376965948E+000,1.87873745498472E+000,1.86815049212642E+000,0.00000000000000E+000,0.00000000000000E+000,2.31111859350437E+004,1.69616194647621E+004,2.02953219809484E+004,2.28474737694725E+004,2.25450082021141E+004,2.31458899091815E+004,1.87966770890315E+004,2.09467290145307E+004,2.28348150748628E+004 -4.46000000000000E-008,7.19088187169420E+022,9.14588880361022E+022,1.53427502537004E+023,1.55159280310796E+021,8.34356517026117E+021,3.26690367263418E+023,2.28274030223243E+004,2.25632882937376E+004,2.32090775543606E+004,2.01988269767861E+004,2.16937949599749E+004,2.28912767098046E+004,0.00000000000000E+000,0.00000000000000E+000,2.30278936591667E+004,1.82321117942495E+004,2.02999190475499E+004,0.00000000000000E+000,0.00000000000000E+000,1.85626158582760E+000,1.87793014020809E+000,1.86811604274300E+000,0.00000000000000E+000,0.00000000000000E+000,2.30451937174740E+004,1.71927995168045E+004,2.03780189826023E+004,2.28274030223243E+004,2.25632882937376E+004,2.31122183009498E+004,1.87877325863799E+004,2.09315082024774E+004,2.28196170931321E+004 -4.48000000000000E-008,7.22741937963835E+022,9.15239548310713E+022,1.53247317566321E+023,1.52156197466071E+021,8.33856003218663E+021,3.26905588200623E+023,2.28332894928983E+004,2.25094894938916E+004,2.31610374310268E+004,1.97864932999795E+004,2.18136051657485E+004,2.28560864346888E+004,0.00000000000000E+000,0.00000000000000E+000,2.30514035086706E+004,1.85180230807875E+004,2.04347987616091E+004,0.00000000000000E+000,0.00000000000000E+000,1.85640449972658E+000,1.87977551188521E+000,1.86896666752836E+000,0.00000000000000E+000,0.00000000000000E+000,2.30090378659591E+004,1.68307918281033E+004,2.01032013673263E+004,2.28332894928983E+004,2.25094894938916E+004,2.30870155385115E+004,1.85806629374897E+004,2.09404387788000E+004,2.27935015380987E+004 -4.50000000000000E-008,7.26746048423469E+022,9.16540884210093E+022,1.53082148009861E+023,1.49153114621345E+021,8.26848809914304E+021,3.27170860518573E+023,2.28133713788300E+004,2.24981804439513E+004,2.31313392585180E+004,1.97438657476388E+004,2.17555905905250E+004,2.28331230067215E+004,0.00000000000000E+000,0.00000000000000E+000,2.30585258776393E+004,1.82732514642181E+004,1.99426744514681E+004,0.00000000000000E+000,0.00000000000000E+000,1.85644773982068E+000,1.87819915007096E+000,1.86580879730877E+000,0.00000000000000E+000,0.00000000000000E+000,2.29502019918288E+004,1.75713699847175E+004,1.99859100585583E+004,2.28133713788300E+004,2.24981804439513E+004,2.30587872915789E+004,1.87105868518144E+004,2.07474186257476E+004,2.27689863765319E+004 -4.52000000000000E-008,7.29298668841485E+022,9.16590935590839E+022,1.52942004143774E+023,1.47651573198983E+021,8.29351378951575E+021,3.27300994108512E+023,2.27912932336580E+004,2.24705858648493E+004,2.31039674775054E+004,1.96617335925000E+004,2.16440911973769E+004,2.28044007368463E+004,0.00000000000000E+000,0.00000000000000E+000,2.30482478119369E+004,1.85251281538864E+004,1.99030012627866E+004,0.00000000000000E+000,0.00000000000000E+000,1.85638533308316E+000,1.87982066060698E+000,1.86554758279704E+000,0.00000000000000E+000,0.00000000000000E+000,2.29710728858116E+004,1.71449985706308E+004,1.99397532765083E+004,2.27912932336580E+004,2.24705858648493E+004,2.30501160185549E+004,1.86195429913325E+004,2.06745018266289E+004,2.27499668548433E+004 -4.54000000000000E-008,7.31901340640247E+022,9.17091449398293E+022,1.52811870553836E+023,1.45149004161712E+021,8.29351378951575E+021,3.27456153388822E+023,2.28425465976197E+004,2.25177672166183E+004,2.30382484767268E+004,1.93661884111473E+004,2.17508554955773E+004,2.27998553137295E+004,0.00000000000000E+000,0.00000000000000E+000,2.30469025781997E+004,1.83862734771104E+004,2.00056399731324E+004,0.00000000000000E+000,0.00000000000000E+000,1.85637716103012E+000,1.87893213070109E+000,1.86622129599536E+000,0.00000000000000E+000,0.00000000000000E+000,2.28894315277874E+004,1.69545412595475E+004,1.99210911750166E+004,2.28425465976197E+004,2.25177672166183E+004,2.29971818004133E+004,1.83973624609142E+004,2.07435347703855E+004,2.27508840392471E+004 -4.56000000000000E-008,7.35605142815408E+022,9.17091449398293E+022,1.52631685583152E+023,1.45649517969166E+021,8.28350351336667E+021,3.27641343497580E+023,2.28254606193384E+004,2.24147497397969E+004,2.30982265764000E+004,1.90697997072643E+004,2.16652768921134E+004,2.27915402854111E+004,0.00000000000000E+000,0.00000000000000E+000,2.29807918349154E+004,1.81391489833469E+004,1.99586210264607E+004,0.00000000000000E+000,0.00000000000000E+000,1.85597440173802E+000,1.87731786562156E+000,1.86591350647088E+000,0.00000000000000E+000,0.00000000000000E+000,2.28689319323371E+004,1.74694028104554E+004,1.97548218013961E+004,2.28254606193384E+004,2.24147497397969E+004,2.29995469252589E+004,1.83503446637487E+004,2.06449636584190E+004,2.27165763254811E+004 -4.58000000000000E-008,7.38958585325350E+022,9.17141500779038E+022,1.52461510888618E+023,1.45149004161712E+021,8.28850865144121E+021,3.27811518192115E+023,2.28428815948556E+004,2.24078781434534E+004,2.30810357044294E+004,1.94074970249852E+004,2.15004691620152E+004,2.27827871231278E+004,0.00000000000000E+000,0.00000000000000E+000,2.29203798260011E+004,1.83705790077365E+004,1.99788318277782E+004,0.00000000000000E+000,0.00000000000000E+000,1.85560438120410E+000,1.87883087516986E+000,1.86604598116414E+000,0.00000000000000E+000,0.00000000000000E+000,2.28421676650001E+004,1.77967440045713E+004,1.96746310775281E+004,2.28428815948556E+004,2.24078781434534E+004,2.29678655464688E+004,1.86559594860532E+004,2.05550747648434E+004,2.27029215579756E+004 -4.60000000000000E-008,7.42011719550821E+022,9.17291654921275E+022,1.52306351608307E+023,1.44147976546804E+021,8.29351378951575E+021,3.27971682610500E+023,2.28057024213972E+004,2.24392609819946E+004,2.30866907160785E+004,1.89872541510131E+004,2.16162340972885E+004,2.27868405695239E+004,0.00000000000000E+000,0.00000000000000E+000,2.28705852269720E+004,1.87355212474561E+004,1.97672507217741E+004,0.00000000000000E+000,0.00000000000000E+000,1.85529796026154E+000,1.88114239619134E+000,1.86464603946475E+000,0.00000000000000E+000,0.00000000000000E+000,2.27657195901579E+004,1.78147869337322E+004,1.99379756052819E+004,2.28057024213972E+004,2.24392609819946E+004,2.29345627807171E+004,1.85776593904804E+004,2.06250371043067E+004,2.26893291653478E+004 -4.62000000000000E-008,7.45365162060764E+022,9.17441809063511E+022,1.52131171775698E+023,1.42646435124441E+021,8.30852920373938E+021,3.28146862443109E+023,2.28367199314818E+004,2.24423146192954E+004,2.30724100277066E+004,1.92075775501183E+004,2.14849192670963E+004,2.27857156366282E+004,0.00000000000000E+000,0.00000000000000E+000,2.28053602163120E+004,1.88174453261142E+004,1.94694805742037E+004,0.00000000000000E+000,0.00000000000000E+000,1.85489461356417E+000,1.88164923374639E+000,1.86262554201254E+000,0.00000000000000E+000,0.00000000000000E+000,2.27182982066293E+004,1.78272810082169E+004,2.02102259650058E+004,2.28367199314818E+004,2.24423146192954E+004,2.28968314131963E+004,1.86997508699930E+004,2.05664086834524E+004,2.26788523597189E+004 -4.64000000000000E-008,7.48768655951452E+022,9.17842220109474E+022,1.51971007357312E+023,1.41645407509533E+021,8.28850865144121E+021,3.28337057689942E+023,2.27761985469497E+004,2.24295094668818E+004,2.30073971782445E+004,1.89362038786635E+004,2.16119581941143E+004,2.27403387782957E+004,0.00000000000000E+000,0.00000000000000E+000,2.28215344268579E+004,1.91517688693915E+004,1.90809663446966E+004,0.00000000000000E+000,0.00000000000000E+000,1.85499484308265E+000,1.88367355576368E+000,1.85989686410526E+000,0.00000000000000E+000,0.00000000000000E+000,2.27420610263381E+004,1.82523688678335E+004,2.01979467494297E+004,2.27761985469497E+004,2.24295094668818E+004,2.28796878554520E+004,1.87965087084485E+004,2.05134858930792E+004,2.26528960643989E+004 -4.66000000000000E-008,7.51571533273196E+022,9.17642014586493E+022,1.51810842938927E+023,1.40644379894624E+021,8.32854975603755E+021,3.28467191279880E+023,2.27974891787500E+004,2.23608369970207E+004,2.29254290910479E+004,1.89037476269662E+004,2.14929037495768E+004,2.26848812619165E+004,0.00000000000000E+000,0.00000000000000E+000,2.28803335904704E+004,1.91426410082775E+004,1.91471943734262E+004,0.00000000000000E+000,0.00000000000000E+000,1.85535805102071E+000,1.88361920634429E+000,1.86036964162502E+000,0.00000000000000E+000,0.00000000000000E+000,2.27568596031695E+004,1.87023635165394E+004,2.03083102835954E+004,2.27974891787500E+004,2.23608369970207E+004,2.28640453861143E+004,1.89106068007580E+004,2.05114590468634E+004,2.26316550145173E+004 -4.68000000000000E-008,7.54274307833448E+022,9.18142528393947E+022,1.51680709348989E+023,1.38642324664808E+021,8.31853947988846E+021,3.28627355698265E+023,2.26987572577315E+004,2.23371550194391E+004,2.29194797184826E+004,1.86855206751477E+004,2.14374202703609E+004,2.26507471768189E+004,0.00000000000000E+000,0.00000000000000E+000,2.29004843552528E+004,1.88693295763257E+004,1.91703141259533E+004,0.00000000000000E+000,0.00000000000000E+000,1.85548210618177E+000,1.88196799597932E+000,1.86053393499930E+000,0.00000000000000E+000,0.00000000000000E+000,2.27563478836156E+004,1.84971464915433E+004,2.02144710323343E+004,2.26987572577315E+004,2.23371550194391E+004,2.28667468514562E+004,1.86810414480090E+004,2.04660780315342E+004,2.26018014111531E+004 -4.70000000000001E-008,7.57327442058919E+022,9.18392785297674E+022,1.51525550068678E+023,1.37140783242445E+021,8.32354461796300E+021,3.28792525254725E+023,2.26503120537808E+004,2.23295970903706E+004,2.29101146974926E+004,1.80939821431517E+004,2.15370967223876E+004,2.26332740254435E+004,0.00000000000000E+000,0.00000000000000E+000,2.28545674524629E+004,1.90473587502164E+004,1.94185706717604E+004,0.00000000000000E+000,0.00000000000000E+000,1.85519911524149E+000,1.88304882790825E+000,1.86227404640996E+000,0.00000000000000E+000,0.00000000000000E+000,2.27322944753167E+004,1.86185014989468E+004,2.02650917166983E+004,2.26503120537808E+004,2.23295970903706E+004,2.28432031991577E+004,1.85072137626262E+004,2.05914501264898E+004,2.25802216510569E+004 -4.72000000000001E-008,7.60280473522899E+022,9.18843247724383E+022,1.51390411340666E+023,1.36139755627537E+021,8.29851892759030E+021,3.28962699949259E+023,2.25759066353304E+004,2.22561843749492E+004,2.29376019976831E+004,1.83787154872067E+004,2.17447728261198E+004,2.26147211278530E+004,0.00000000000000E+000,0.00000000000000E+000,2.28463273234687E+004,1.91793785673689E+004,1.94549878944779E+004,0.00000000000000E+000,0.00000000000000E+000,1.85514821316000E+000,1.88383764193430E+000,1.86252566336996E+000,0.00000000000000E+000,0.00000000000000E+000,2.27105088581741E+004,1.85073008306421E+004,1.99312036001429E+004,2.25759066353304E+004,2.22561843749492E+004,2.28466463671985E+004,1.86351843389752E+004,2.05947703288091E+004,2.25449139073413E+004 -4.74000000000001E-008,7.63633916032842E+022,9.19193607389601E+022,1.51210226369982E+023,1.33136672782812E+021,8.32354461796300E+021,3.29147890058017E+023,2.24528171132346E+004,2.22978903865770E+004,2.29472404913866E+004,1.84794243485397E+004,2.17213581862220E+004,2.26021200035246E+004,0.00000000000000E+000,0.00000000000000E+000,2.28409063876661E+004,1.89543201756413E+004,1.95241463697053E+004,0.00000000000000E+000,0.00000000000000E+000,1.85511470668655E+000,1.88248646204017E+000,1.86300097835639E+000,0.00000000000000E+000,0.00000000000000E+000,2.26324302227981E+004,1.87712269523956E+004,1.99139009610840E+004,2.24528171132346E+004,2.22978903865770E+004,2.28266177837892E+004,1.86941127727392E+004,2.05981873986304E+004,2.25191715147598E+004 -4.76000000000001E-008,7.66787153019803E+022,9.19644069816309E+022,1.51050061951597E+023,1.30634103745541E+021,8.32854975603755E+021,3.29328075028701E+023,2.24514426029528E+004,2.23504003076241E+004,2.29003656747153E+004,1.85594025500612E+004,2.14110809357789E+004,2.25873815977607E+004,0.00000000000000E+000,0.00000000000000E+000,2.28104686379521E+004,1.85118280114673E+004,1.95049557950135E+004,0.00000000000000E+000,0.00000000000000E+000,1.85492628475842E+000,1.87973611804207E+000,1.86286941425483E+000,0.00000000000000E+000,0.00000000000000E+000,2.26099185510674E+004,1.86981424067760E+004,1.97553855430580E+004,2.24514426029528E+004,2.23504003076241E+004,2.27912986194835E+004,1.85867367576106E+004,2.04111707530698E+004,2.25121779293255E+004 -4.78000000000001E-008,7.69690133103037E+022,9.20244686385254E+022,1.50919928361659E+023,1.29132562323178E+021,8.29851892759030E+021,3.29503254861310E+023,2.24442890178317E+004,2.24214192900588E+004,2.28291672912979E+004,1.77921747231569E+004,2.12546530698104E+004,2.25659922650656E+004,0.00000000000000E+000,0.00000000000000E+000,2.28143131542423E+004,1.86085473402472E+004,1.93027627511040E+004,0.00000000000000E+000,0.00000000000000E+000,1.85495011088169E+000,1.88034821834429E+000,1.86146774264277E+000,0.00000000000000E+000,0.00000000000000E+000,2.25714432825762E+004,1.90549056975928E+004,1.98385243506259E+004,2.24442890178317E+004,2.24214192900588E+004,2.27499542128891E+004,1.83823376939927E+004,2.03123418112972E+004,2.25082916897705E+004 -4.80000000000001E-008,7.71992496617326E+022,9.20945405715690E+022,1.50809815324019E+023,1.26129479478453E+021,8.28850865144121E+021,3.29653409003546E+023,2.24102333279646E+004,2.24230022894046E+004,2.28126612968316E+004,1.83243470193361E+004,2.12234650714233E+004,2.25524311391457E+004,0.00000000000000E+000,0.00000000000000E+000,2.27804862564853E+004,1.83754368233358E+004,1.92781109180087E+004,0.00000000000000E+000,0.00000000000000E+000,1.85474020230215E+000,1.87886223427731E+000,1.86129488661894E+000,0.00000000000000E+000,0.00000000000000E+000,2.25534976634766E+004,1.94332053155022E+004,1.99467811574727E+004,2.24102333279646E+004,2.24230022894046E+004,2.27283395588091E+004,1.86606973076286E+004,2.03235991323633E+004,2.24925171356720E+004 -4.82000000000001E-008,7.74845425319815E+022,9.21896381949853E+022,1.50689692010230E+023,1.23626910441182E+021,8.24346240877034E+021,3.29843604250379E+023,2.23461406479198E+004,2.24800100124688E+004,2.27942251879902E+004,1.80672591149855E+004,2.12689449284203E+004,2.25453060017820E+004,0.00000000000000E+000,0.00000000000000E+000,2.27777106243449E+004,1.85318428320717E+004,1.95228913873086E+004,0.00000000000000E+000,0.00000000000000E+000,1.85472295150806E+000,1.87986329744814E+000,1.86299238233147E+000,0.00000000000000E+000,0.00000000000000E+000,2.24834989268747E+004,1.98751651564196E+004,1.93268102695821E+004,2.23461406479198E+004,2.24800100124688E+004,2.26990962576058E+004,1.87197671325323E+004,2.02289971379660E+004,2.24783013851962E+004 -4.84000000000001E-008,7.78599278875721E+022,9.22346844376562E+022,1.50494491625323E+023,1.20623827596457E+021,8.25847782299396E+021,3.30053820049510E+023,2.23443132952048E+004,2.24492739404672E+004,2.27290940045838E+004,1.76012555577536E+004,2.13272783867396E+004,2.25063110300184E+004,0.00000000000000E+000,0.00000000000000E+000,2.27229622579260E+004,1.88149605426347E+004,1.95113864069381E+004,0.00000000000000E+000,0.00000000000000E+000,1.85438184678339E+000,1.88163392474672E+000,1.86291352848431E+000,0.00000000000000E+000,0.00000000000000E+000,2.25342738812410E+004,1.95618617751224E+004,1.92478471542685E+004,2.23443132952048E+004,2.24492739404672E+004,2.26705896995508E+004,1.85029252740997E+004,2.02283701505977E+004,2.24554337021484E+004 -4.86000000000001E-008,7.80901642390011E+022,9.22947460945507E+022,1.50379373449608E+023,1.17620744751732E+021,8.25847782299396E+021,3.30198969053671E+023,2.23099055446004E+004,2.24306415851425E+004,2.26468044196795E+004,1.75300247443394E+004,2.13794043410407E+004,2.24567845283422E+004,0.00000000000000E+000,0.00000000000000E+000,2.27556405005270E+004,1.86089977364315E+004,1.92736289295630E+004,0.00000000000000E+000,0.00000000000000E+000,1.85458563791869E+000,1.88035105416421E+000,1.86126341306758E+000,0.00000000000000E+000,0.00000000000000E+000,2.25977364093694E+004,1.93813429875988E+004,1.91294721400851E+004,2.23099055446004E+004,2.24306415851425E+004,2.26619344096286E+004,1.83630468451732E+004,2.01523319165369E+004,2.24359525275128E+004 -4.88000000000001E-008,7.84205033519208E+022,9.23347871991470E+022,1.50214203893148E+023,1.15618689521915E+021,8.25847782299396E+021,3.30384159162429E+023,2.22787922863354E+004,2.24225899967847E+004,2.26040531264120E+004,1.80894680686432E+004,2.13839333516184E+004,2.24298361948657E+004,0.00000000000000E+000,0.00000000000000E+000,2.27305172634035E+004,1.84099170289395E+004,1.92370499893288E+004,0.00000000000000E+000,0.00000000000000E+000,1.85442901273476E+000,1.87908435212431E+000,1.86100601271135E+000,0.00000000000000E+000,0.00000000000000E+000,2.25991173683440E+004,1.92329621490449E+004,1.90851923939947E+004,2.22787922863354E+004,2.24225899967847E+004,2.26368271544389E+004,1.85094569276050E+004,2.01315157403908E+004,2.24149009965903E+004 -4.90000000000001E-008,7.86857756698715E+022,9.23297820610725E+022,1.50079065165136E+023,1.15618689521915E+021,8.26348296106850E+021,3.30514292752367E+023,2.22631412758672E+004,2.24046629932696E+004,2.25865861244224E+004,1.81779954094947E+004,2.12935050006121E+004,2.24110114465232E+004,0.00000000000000E+000,0.00000000000000E+000,2.26969235055516E+004,1.80454035174599E+004,1.93225663163656E+004,0.00000000000000E+000,0.00000000000000E+000,1.85421905236196E+000,1.87669418771029E+000,1.86160629155951E+000,0.00000000000000E+000,0.00000000000000E+000,2.25940621796823E+004,1.93500182676265E+004,1.92139366572926E+004,2.22631412758672E+004,2.24046629932696E+004,2.26186162919907E+004,1.84826783321247E+004,2.01526280384436E+004,2.23980973625545E+004 -4.92000000000001E-008,7.91012021300585E+022,9.23548077514452E+022,1.49863844227930E+023,1.13616634292099E+021,8.27849837529213E+021,3.30734518827647E+023,2.22294662744921E+004,2.23579094889545E+004,2.25536086397766E+004,1.85189685739072E+004,2.13108144053894E+004,2.23764686765424E+004,0.00000000000000E+000,0.00000000000000E+000,2.26497645222189E+004,1.80534326548096E+004,1.92716445773159E+004,0.00000000000000E+000,0.00000000000000E+000,1.85392328628855E+000,1.87674785272133E+000,1.86124947393119E+000,0.00000000000000E+000,0.00000000000000E+000,2.26111113741207E+004,1.92979233868393E+004,1.92141779547153E+004,2.22294662744921E+004,2.23579094889545E+004,2.25963974318321E+004,1.86184656187294E+004,2.01464963461993E+004,2.23670554858313E+004 -4.94000000000001E-008,7.95066183140964E+022,9.23798334418179E+022,1.49648623290725E+023,1.11114065254828E+021,8.30352406566484E+021,3.30949739764853E+023,2.22329162276238E+004,2.22818055681371E+004,2.25927603674980E+004,1.92849226132342E+004,2.12626313595281E+004,2.23750349372422E+004,0.00000000000000E+000,0.00000000000000E+000,2.26362399382719E+004,1.72872900984208E+004,1.93018371883098E+004,0.00000000000000E+000,0.00000000000000E+000,1.85383824299409E+000,1.87140768642061E+000,1.86146126047516E+000,0.00000000000000E+000,0.00000000000000E+000,2.25002576977012E+004,1.87339686754581E+004,1.90890337465069E+004,2.22329162276238E+004,2.22818055681371E+004,2.25775278445229E+004,1.85805119685299E+004,2.00971161271391E+004,2.23365393361096E+004 -4.96000000000001E-008,7.97869060462707E+022,9.24098642702651E+022,1.49498469148489E+023,1.08611496217557E+021,8.32354461796300E+021,3.31104899045163E+023,2.22410851153961E+004,2.22531075412535E+004,2.25681423768833E+004,1.90841191233691E+004,2.12179805670412E+004,2.23560361970973E+004,0.00000000000000E+000,0.00000000000000E+000,2.25659563656330E+004,1.70626737326341E+004,1.91414253316720E+004,0.00000000000000E+000,0.00000000000000E+000,1.85339469804121E+000,1.86975326151454E+000,1.86032858538705E+000,0.00000000000000E+000,0.00000000000000E+000,2.25411816450141E+004,1.88255527947737E+004,1.90812030552620E+004,2.22410851153961E+004,2.22531075412535E+004,2.25596833565067E+004,1.84586619044669E+004,2.00319396965817E+004,2.23203496422366E+004 -4.98000000000001E-008,8.00772040545942E+022,9.24098642702651E+022,1.49323289315880E+023,1.05608413372832E+021,8.38360627485751E+021,3.31250048049325E+023,2.22729311182718E+004,2.22210934482299E+004,2.25440788999908E+004,1.91264792485753E+004,2.10767101725903E+004,2.23403931561265E+004,0.00000000000000E+000,0.00000000000000E+000,2.25516772139024E+004,1.72580385529796E+004,1.93166597584686E+004,0.00000000000000E+000,0.00000000000000E+000,1.85330425629710E+000,1.87119461554282E+000,1.86156499732709E+000,0.00000000000000E+000,0.00000000000000E+000,2.24959658985451E+004,1.91146659010318E+004,1.89994459949141E+004,2.22729311182718E+004,2.22210934482299E+004,2.25320928546751E+004,1.86142185630484E+004,1.99937244976448E+004,2.23059475412142E+004 -5.00000000000001E-008,8.03825174771412E+022,9.24549105129360E+022,1.49168130035569E+023,1.03105844335561E+021,8.38861141293205E+021,3.31425227881934E+023,2.23622542401043E+004,2.21363949257098E+004,2.25172207045075E+004,1.94299709489947E+004,2.09544247156016E+004,2.23242401295599E+004,0.00000000000000E+000,0.00000000000000E+000,2.25419710823181E+004,1.77278372155521E+004,1.91487722667543E+004,0.00000000000000E+000,0.00000000000000E+000,1.85324271560358E+000,1.87453352818276E+000,1.86038086673521E+000,0.00000000000000E+000,0.00000000000000E+000,2.24643524872037E+004,1.85017559552368E+004,1.88988829498186E+004,2.23622542401043E+004,2.21363949257098E+004,2.25084849892109E+004,1.86957921542279E+004,1.98655223726432E+004,2.22904634305022E+004 -5.02000000000001E-008,8.06227641047192E+022,9.24649207890851E+022,1.49048006721780E+023,1.02605330528107E+021,8.38861141293205E+021,3.31550356333798E+023,2.23602100106604E+004,2.21086584652842E+004,2.25000779672076E+004,1.90438361466712E+004,2.11644167125324E+004,2.23124149322956E+004,0.00000000000000E+000,0.00000000000000E+000,2.25009555284618E+004,1.76757760610466E+004,1.89539757869080E+004,0.00000000000000E+000,0.00000000000000E+000,1.85298209011380E+000,1.87417207251589E+000,1.85898131714646E+000,0.00000000000000E+000,0.00000000000000E+000,2.24861085343985E+004,1.79451761042529E+004,1.87114849481744E+004,2.23602100106604E+004,2.21086584652842E+004,2.24962383598680E+004,1.83511999949120E+004,1.98500769446763E+004,2.22752909999113E+004 -5.04000000000001E-008,8.09330826653408E+022,9.25049618936815E+022,1.48892847441469E+023,1.00603275298290E+021,8.38861141293205E+021,3.31725536166407E+023,2.23559592332590E+004,2.20982264550213E+004,2.25176209517784E+004,1.88822174582729E+004,2.10566639751680E+004,2.23132574610876E+004,0.00000000000000E+000,0.00000000000000E+000,2.24164358391065E+004,1.78473318151724E+004,1.88573934502797E+004,0.00000000000000E+000,0.00000000000000E+000,1.85244209799010E+000,1.87535536957884E+000,1.85827695424955E+000,0.00000000000000E+000,0.00000000000000E+000,2.24404039522621E+004,1.78690802247126E+004,1.90266106926499E+004,2.23559592332590E+004,2.20982264550213E+004,2.24677301892521E+004,1.83052214192955E+004,1.98687620645360E+004,2.22590750115246E+004 -5.06000000000001E-008,8.12984577447824E+022,9.25399978602032E+022,1.48712662470786E+023,9.91017338759275E+020,8.38360627485751E+021,3.31925741689388E+023,2.23224057904020E+004,2.21485050258434E+004,2.24884245125719E+004,1.85592030985218E+004,2.09580961622177E+004,2.23026094226077E+004,0.00000000000000E+000,0.00000000000000E+000,2.23495282967527E+004,1.72046474130022E+004,1.88547683802819E+004,0.00000000000000E+000,0.00000000000000E+000,1.85201180972339E+000,1.87080388452463E+000,1.85825771176855E+000,0.00000000000000E+000,0.00000000000000E+000,2.24052877394685E+004,1.77895166798300E+004,1.92210003665752E+004,2.23224057904020E+004,2.21485050258434E+004,2.24266162451622E+004,1.79663349357682E+004,1.98816249981529E+004,2.22459584230554E+004 -5.08000000000001E-008,8.15787454769567E+022,9.25900492409487E+022,1.48572518604699E+023,9.65991648386566E+020,8.38360627485751E+021,3.32090911245848E+023,2.22292682958098E+004,2.20843009177692E+004,2.25029429410175E+004,1.78952404487338E+004,2.10133346204576E+004,2.22679849553617E+004,0.00000000000000E+000,0.00000000000000E+000,2.23771048367654E+004,1.59002003255146E+004,1.87630406263274E+004,0.00000000000000E+000,0.00000000000000E+000,1.85218946030347E+000,1.86046262888527E+000,1.85758202728991E+000,0.00000000000000E+000,0.00000000000000E+000,2.23993521151044E+004,1.80229233972107E+004,1.92100237669877E+004,2.22292682958098E+004,2.20843009177692E+004,2.24386922858398E+004,1.73914359850421E+004,1.98778429332175E+004,2.22091093067421E+004 -5.10000000000001E-008,8.18890640375783E+022,9.26401006216941E+022,1.48422364462462E+023,9.45971096088399E+020,8.37359599870842E+021,3.32271096216532E+023,2.22255366889960E+004,2.20830673808014E+004,2.24471704068240E+004,1.81799385190217E+004,2.09013825998650E+004,2.22399287897078E+004,0.00000000000000E+000,0.00000000000000E+000,2.23764414595414E+004,1.60210321210239E+004,1.86018718914609E+004,0.00000000000000E+000,0.00000000000000E+000,1.85218519177050E+000,1.86148956582194E+000,1.85637910215578E+000,0.00000000000000E+000,0.00000000000000E+000,2.23983735628704E+004,1.76912970358721E+004,1.90498788692072E+004,2.22255366889960E+004,2.20830673808014E+004,2.24138092540974E+004,1.74518073090517E+004,1.97387031495595E+004,2.21936529010868E+004 -5.12000000000001E-008,8.22043877362744E+022,9.26551160359177E+022,1.48272210320226E+023,9.45971096088399E+020,8.35858058448480E+021,3.32436265772991E+023,2.21791754677028E+004,2.20143007301901E+004,2.25088513899812E+004,1.80858390087705E+004,2.11355196458493E+004,2.22423744403990E+004,0.00000000000000E+000,0.00000000000000E+000,2.23180494901789E+004,1.56114644479864E+004,1.84538595439983E+004,0.00000000000000E+000,0.00000000000000E+000,1.85180849807864E+000,1.85794594988161E+000,1.85525634452630E+000,0.00000000000000E+000,0.00000000000000E+000,2.23472453724655E+004,1.80025418987551E+004,1.90261901654257E+004,2.21791754677028E+004,2.20143007301901E+004,2.24101124052702E+004,1.73911924705002E+004,1.97943844035457E+004,2.21626378027884E+004 -5.14000000000001E-008,8.24396292257779E+022,9.26801417262904E+022,1.48157092144512E+023,9.35960819939316E+020,8.35357544641025E+021,3.32566399362930E+023,2.21505324092940E+004,2.19805156874792E+004,2.25333224889210E+004,1.77426939184510E+004,2.10321669433835E+004,2.22331865104123E+004,0.00000000000000E+000,0.00000000000000E+000,2.22512105193854E+004,1.58155442519604E+004,1.86696300580241E+004,0.00000000000000E+000,0.00000000000000E+000,1.85137494983044E+000,1.85973403215050E+000,1.85688729845025E+000,0.00000000000000E+000,0.00000000000000E+000,2.23447635716692E+004,1.89182124785594E+004,1.89266400570626E+004,2.21505324092940E+004,2.19805156874792E+004,2.24020476901346E+004,1.75629568187581E+004,1.97782425119393E+004,2.21427015072879E+004 -5.16000000000001E-008,8.27849837529213E+022,9.26551160359177E+022,1.47971902035754E+023,9.35960819939316E+020,8.37860113678296E+021,3.32726563781315E+023,2.21586184947841E+004,2.19645395666625E+004,2.25106512381532E+004,1.72133020880152E+004,2.11768034418586E+004,2.22224958409476E+004,0.00000000000000E+000,0.00000000000000E+000,2.22347186633042E+004,1.54746329621441E+004,1.84636920907044E+004,0.00000000000000E+000,0.00000000000000E+000,1.85126758588431E+000,1.85672134219340E+000,1.85533147367635E+000,0.00000000000000E+000,0.00000000000000E+000,2.23090779395682E+004,1.89087570219506E+004,1.86575157352818E+004,2.21586184947841E+004,2.19645395666625E+004,2.23772494088683E+004,1.72370285582528E+004,1.97075387778208E+004,2.21262369261554E+004 -5.18000000000001E-008,8.30152201043502E+022,9.26851468643649E+022,1.47871799274263E+023,9.35960819939316E+020,8.34857030833571E+021,3.32856697371253E+023,2.21714839018305E+004,2.19023425834924E+004,2.24629767869783E+004,1.72634381984682E+004,2.09649379605022E+004,2.21819734089077E+004,0.00000000000000E+000,0.00000000000000E+000,2.23016142119892E+004,1.53285199613901E+004,1.86241133664484E+004,0.00000000000000E+000,0.00000000000000E+000,1.85170212583883E+000,1.85539015497742E+000,1.85654631372019E+000,0.00000000000000E+000,0.00000000000000E+000,2.22730029695067E+004,1.91129814480970E+004,1.88730283120945E+004,2.21714839018305E+004,2.19023425834924E+004,2.23639148246198E+004,1.72793465930353E+004,1.97209197365017E+004,2.21068078653418E+004 -5.20000000000001E-008,8.33305438030463E+022,9.27602239354831E+022,1.47726650270101E+023,9.10935129566607E+020,8.32354461796300E+021,3.33051897756160E+023,2.21697640782547E+004,2.19011486238293E+004,2.23756960225455E+004,1.72379562011672E+004,2.07579912467142E+004,2.21375207412104E+004,0.00000000000000E+000,0.00000000000000E+000,2.22853104290962E+004,1.50192839572011E+004,1.87504290196635E+004,0.00000000000000E+000,0.00000000000000E+000,1.85159645377615E+000,1.85248965337846E+000,1.85748862398790E+000,0.00000000000000E+000,0.00000000000000E+000,2.22991369023921E+004,1.95016880454874E+004,1.90575022787699E+004,2.21697640782547E+004,2.19011486238293E+004,2.23289221229482E+004,1.72988678308914E+004,1.97182517260912E+004,2.20909556762469E+004 -5.22000000000001E-008,8.35457647402516E+022,9.27852496258558E+022,1.47631552646685E+023,9.10935129566607E+020,8.29851892759030E+021,3.33172021069949E+023,2.21624740816569E+004,2.18772172814377E+004,2.23606138135748E+004,1.72430959227149E+004,2.08899362906566E+004,2.21256841962466E+004,0.00000000000000E+000,0.00000000000000E+000,2.22800684491259E+004,1.53821086934017E+004,1.89354200902530E+004,0.00000000000000E+000,0.00000000000000E+000,1.85156244619498E+000,1.85588124502154E+000,1.85884653630522E+000,0.00000000000000E+000,0.00000000000000E+000,2.22792089515524E+004,1.92338646202085E+004,1.86201170561993E+004,2.21624740816569E+004,2.18772172814377E+004,2.23150848559796E+004,1.73200759753177E+004,1.96983679861426E+004,2.20760412552176E+004 -5.24000000000001E-008,8.38160421962769E+022,9.28353010066012E+022,1.47496413918672E+023,8.85909439193898E+020,8.29851892759030E+021,3.33332185488334E+023,2.20714190362426E+004,2.19230446839525E+004,2.23545511361031E+004,1.66412871961934E+004,2.08623578624626E+004,2.21108468809631E+004,0.00000000000000E+000,0.00000000000000E+000,2.22400486741566E+004,1.61590438883697E+004,1.88841225493178E+004,0.00000000000000E+000,0.00000000000000E+000,1.85130230183868E+000,1.86264418615791E+000,1.85847258901210E+000,0.00000000000000E+000,0.00000000000000E+000,2.22795074898737E+004,1.79589997517200E+004,1.84728058988639E+004,2.20714190362426E+004,2.19230446839525E+004,2.23017048380016E+004,1.68944224849099E+004,1.96294886016246E+004,2.20574425768231E+004 -5.26000000000001E-008,8.41263607568985E+022,9.28353010066012E+022,1.47351264914510E+023,8.95919715342981E+020,8.27849837529213E+021,3.33487344768645E+023,2.20563789530387E+004,2.19029846939597E+004,2.23101012341528E+004,1.72039858345386E+004,2.07385718409381E+004,2.20800352574553E+004,0.00000000000000E+000,0.00000000000000E+000,2.22438524896401E+004,1.66392211387732E+004,1.89448803786757E+004,0.00000000000000E+000,0.00000000000000E+000,1.85132706732481E+000,1.86651570639894E+000,1.85891528405149E+000,0.00000000000000E+000,0.00000000000000E+000,2.22639773822023E+004,1.78856016802792E+004,1.85366990493045E+004,2.20563789530387E+004,2.19029846939597E+004,2.22787356613693E+004,1.72489998605208E+004,1.96103954840538E+004,2.20382914425041E+004 -5.28000000000001E-008,8.43816227987001E+022,9.28202855923776E+022,1.47221131324572E+023,9.00924853417523E+020,8.28350351336667E+021,3.33607468082434E+023,2.20283582794090E+004,2.18643059914821E+004,2.22572087039761E+004,1.69053206086504E+004,2.09607338336548E+004,2.20433612270656E+004,0.00000000000000E+000,0.00000000000000E+000,2.22823159293655E+004,1.67551561830009E+004,1.89607462287557E+004,0.00000000000000E+000,0.00000000000000E+000,1.85157702873147E+000,1.86741798514206E+000,1.85903043078282E+000,0.00000000000000E+000,0.00000000000000E+000,2.22695789114987E+004,1.78706427504143E+004,1.83815907822642E+004,2.20283582794090E+004,2.18643059914821E+004,2.22676046137838E+004,1.71456182777178E+004,1.96666261589548E+004,2.20164650734024E+004 -5.30000000000001E-008,8.46969464973962E+022,9.28252907304521E+022,1.47055961768112E+023,8.90914577268439E+020,8.29851892759030E+021,3.33767632500820E+023,2.20251325374375E+004,2.18586627735278E+004,2.22643345821774E+004,1.67183484579678E+004,2.11391235133018E+004,2.20480317877467E+004,0.00000000000000E+000,0.00000000000000E+000,2.21974506661226E+004,1.67777484995624E+004,1.87997287562373E+004,0.00000000000000E+000,0.00000000000000E+000,1.85102439492471E+000,1.86759239515572E+000,1.85785305025550E+000,0.00000000000000E+000,0.00000000000000E+000,2.22371171415706E+004,1.83897971698052E+004,1.83059856058889E+004,2.20251325374375E+004,2.18586627735278E+004,2.22383182332076E+004,1.72212659712531E+004,1.96791144657739E+004,2.20016111229418E+004 -5.32000000000001E-008,8.50222804722415E+022,9.28603266969739E+022,1.46880781935503E+023,8.60883748821189E+020,8.32354461796300E+021,3.33947817471503E+023,2.20378891254879E+004,2.18100245716429E+004,2.22639009943263E+004,1.74255782167179E+004,2.10243000415073E+004,2.20367808853907E+004,0.00000000000000E+000,0.00000000000000E+000,2.21962805236680E+004,1.59486880691621E+004,1.88411690780007E+004,0.00000000000000E+000,0.00000000000000E+000,1.85101674633378E+000,1.86087654396284E+000,1.85815794150307E+000,0.00000000000000E+000,0.00000000000000E+000,2.21551235582522E+004,1.83710796397893E+004,1.83655471145004E+004,2.20378891254879E+004,2.18100245716429E+004,2.22138760843865E+004,1.73006222607318E+004,1.96574449659678E+004,2.19803877944277E+004 -5.34000000000001E-008,8.53476144470867E+022,9.27852496258558E+022,1.46695591826745E+023,8.75899163044814E+020,8.36859086063388E+021,3.34072945923367E+023,2.19605039695030E+004,2.17772012060343E+004,2.22686969431879E+004,1.77018152363289E+004,2.12187536346152E+004,2.20151781694298E+004,0.00000000000000E+000,0.00000000000000E+000,2.22378087492727E+004,1.59930862977063E+004,1.87418542208628E+004,0.00000000000000E+000,0.00000000000000E+000,1.85128771451125E+000,1.86125340235195E+000,1.85742504788738E+000,0.00000000000000E+000,0.00000000000000E+000,2.20976733266620E+004,1.82843062099512E+004,1.82438088214877E+004,2.19605039695030E+004,2.17772012060343E+004,2.22104261211752E+004,1.74080794587270E+004,1.96801958574935E+004,2.19502794206388E+004 -5.36000000000001E-008,8.56329073173356E+022,9.27602239354831E+022,1.46535427408360E+023,8.70894024970272E+020,8.40362682715567E+021,3.34203079513305E+023,2.19484243696400E+004,2.17704722954804E+004,2.22549911277264E+004,1.81858171383765E+004,2.10513133723430E+004,2.20010875542592E+004,0.00000000000000E+000,0.00000000000000E+000,2.22273707799061E+004,1.67852449535822E+004,1.88603476605120E+004,0.00000000000000E+000,0.00000000000000E+000,1.85121970035528E+000,1.86765016560280E+000,1.85829860317501E+000,0.00000000000000E+000,0.00000000000000E+000,2.20617557020865E+004,1.79203609779889E+004,1.80776121432737E+004,2.19484243696400E+004,2.17704722954804E+004,2.21911189702954E+004,1.77276267649930E+004,1.95904742401127E+004,2.19351548402310E+004 -5.38000000000001E-008,8.58381179783918E+022,9.28052701781539E+022,1.46445334923018E+023,8.60883748821189E+020,8.37860113678296E+021,3.34328207965168E+023,2.19459170081157E+004,2.17302638718245E+004,2.22804329559443E+004,1.82593055967830E+004,2.09861860065207E+004,2.19990372800588E+004,0.00000000000000E+000,0.00000000000000E+000,2.21882270023715E+004,1.75897341051550E+004,1.88783634817586E+004,0.00000000000000E+000,0.00000000000000E+000,1.85096408350627E+000,1.87357010646009E+000,1.85843048306465E+000,0.00000000000000E+000,0.00000000000000E+000,2.20271029639922E+004,1.78000748395634E+004,1.79923025754926E+004,2.19459170081157E+004,2.17302638718245E+004,2.21815665943641E+004,1.79431742979622E+004,1.95419767928497E+004,2.19187236180597E+004 -5.40000000000001E-008,8.60533389155971E+022,9.28102753162285E+022,1.46335221885378E+023,8.55878610746647E+020,8.38360627485751E+021,3.34438321002808E+023,2.19429310739077E+004,2.17333257395109E+004,2.23027776801630E+004,1.79830496389030E+004,2.09219517003404E+004,2.20064884952288E+004,0.00000000000000E+000,0.00000000000000E+000,2.21803350530232E+004,1.77394668156925E+004,1.87925247197293E+004,0.00000000000000E+000,0.00000000000000E+000,1.85091244110939E+000,1.87461398795602E+000,1.85779991388369E+000,0.00000000000000E+000,0.00000000000000E+000,2.19220942316788E+004,1.77927978289374E+004,1.82849411335286E+004,2.19429310739077E+004,2.17333257395109E+004,2.21585636813188E+004,1.78612788181683E+004,1.95760287351430E+004,2.19093360616207E+004 -5.42000000000001E-008,8.63936883046659E+022,9.28202855923776E+022,1.46160042052769E+023,8.45868334597563E+020,8.39361655100659E+021,3.34613500835417E+023,2.19172363802689E+004,2.17783534160908E+004,2.22620202364265E+004,1.81187166932604E+004,2.08345794995348E+004,2.19925531628209E+004,0.00000000000000E+000,0.00000000000000E+000,2.21473537482546E+004,1.76267689127910E+004,1.88092983276701E+004,0.00000000000000E+000,0.00000000000000E+000,1.85069623437539E+000,1.87382991331651E+000,1.85792357327233E+000,0.00000000000000E+000,0.00000000000000E+000,2.18763786348535E+004,1.77637719347937E+004,1.83464852868522E+004,2.19172363802689E+004,2.17783534160908E+004,2.21184587636407E+004,1.78813357856232E+004,1.95602862001554E+004,2.18972800398255E+004 -5.44000000000001E-008,8.66739760368403E+022,9.28403061446757E+022,1.46024903324757E+023,8.40863196523021E+020,8.38360627485751E+021,3.34763654977653E+023,2.18598484143005E+004,2.17521811232697E+004,2.22285204612854E+004,1.82349741889262E+004,2.06688933430800E+004,2.19518742766188E+004,0.00000000000000E+000,0.00000000000000E+000,2.21967727900885E+004,1.78335827445710E+004,1.87482985179991E+004,0.00000000000000E+000,0.00000000000000E+000,1.85101996410984E+000,1.87526135664520E+000,1.85747283310783E+000,0.00000000000000E+000,0.00000000000000E+000,2.18603144812384E+004,1.80611548037509E+004,1.84425313674896E+004,2.18598484143005E+004,2.17521811232697E+004,2.21124534322212E+004,1.80749289807867E+004,1.94993405271425E+004,2.18715539588356E+004 -5.46000000000001E-008,8.69142226644183E+022,9.28803472492721E+022,1.45909785149042E+023,8.25847782299396E+020,8.37359599870842E+021,3.34903798843741E+023,2.18418801357537E+004,2.17446601312634E+004,2.21722285625389E+004,1.82229321460906E+004,2.07439757437716E+004,2.19224678516826E+004,0.00000000000000E+000,0.00000000000000E+000,2.21580809141533E+004,1.84552336213224E+004,1.87478314929738E+004,0.00000000000000E+000,0.00000000000000E+000,1.85076662432386E+000,1.87937504158564E+000,1.85746937113830E+000,0.00000000000000E+000,0.00000000000000E+000,2.18909364978193E+004,1.81248473800787E+004,1.87024557448057E+004,2.18418801357537E+004,2.17446601312634E+004,2.20862866297348E+004,1.82578789343085E+004,1.96078690573965E+004,2.18567050663623E+004 -5.48000000000001E-008,8.71845001204435E+022,9.28403061446757E+022,1.45759631006806E+023,8.30852920373938E+020,8.40362682715567E+021,3.35018917019455E+023,2.18179753136657E+004,2.17303811402293E+004,2.21460251156464E+004,1.78016183330976E+004,2.09957344745346E+004,2.19058430119182E+004,0.00000000000000E+000,0.00000000000000E+000,2.21211044916505E+004,1.86522234347896E+004,1.86446450398085E+004,0.00000000000000E+000,0.00000000000000E+000,1.85052371077376E+000,1.88062259138812E+000,1.85670032596587E+000,0.00000000000000E+000,0.00000000000000E+000,2.19060804470738E+004,1.85868397093061E+004,1.85743212500572E+004,2.18179753136657E+004,2.17303811402293E+004,2.20692418557170E+004,1.82623484314141E+004,1.96528006242808E+004,2.18398926595776E+004 -5.50000000000001E-008,8.75448700618105E+022,9.28403061446757E+022,1.45574440898048E+023,8.25847782299396E+020,8.41363710330476E+021,3.35199101990139E+023,2.18011582356752E+004,2.16854491047496E+004,2.21540718799401E+004,1.79547375214364E+004,2.09887983827599E+004,2.18925107366578E+004,0.00000000000000E+000,0.00000000000000E+000,2.21201900936459E+004,1.84414416448085E+004,1.86468653758666E+004,0.00000000000000E+000,0.00000000000000E+000,1.85051769369846E+000,1.87928671907235E+000,1.85671696135701E+000,0.00000000000000E+000,0.00000000000000E+000,2.18234521230158E+004,1.84502490396453E+004,1.86581473315180E+004,2.18011582356752E+004,2.16854491047496E+004,2.20483954345605E+004,1.82317545595990E+004,1.96748154825584E+004,2.18143172371161E+004 -5.52000000000001E-008,8.78702040366557E+022,9.28653318350484E+022,1.45424286755812E+023,8.25847782299396E+020,8.38861141293205E+021,3.35374281822747E+023,2.18318299560362E+004,2.16537733544557E+004,2.20894113062003E+004,1.81909100206466E+004,2.09958787430030E+004,2.18643428342995E+004,0.00000000000000E+000,0.00000000000000E+000,2.21027481603628E+004,1.94895615190738E+004,1.86085630846375E+004,0.00000000000000E+000,0.00000000000000E+000,1.85040282660421E+000,1.88564977394492E+000,1.85642944754788E+000,0.00000000000000E+000,0.00000000000000E+000,2.18318649474017E+004,1.74101570119889E+004,1.85169905350105E+004,2.18318299560362E+004,2.16537733544557E+004,2.20178222073735E+004,1.83197716264873E+004,1.96264109206330E+004,2.17993637701598E+004 -5.54000000000001E-008,8.82606048064700E+022,9.28353010066012E+022,1.45219076094756E+023,8.30852920373938E+020,8.40863196523021E+021,3.35554466793431E+023,2.18304438817092E+004,2.16057059604370E+004,2.20565114653153E+004,1.84178532965842E+004,2.08321276337115E+004,2.18326369035943E+004,0.00000000000000E+000,0.00000000000000E+000,2.21320538413233E+004,1.97351226454271E+004,1.82880787808674E+004,0.00000000000000E+000,0.00000000000000E+000,1.85059572393850E+000,1.88704478355969E+000,1.85397779127206E+000,0.00000000000000E+000,0.00000000000000E+000,2.17919615924670E+004,1.70499035207595E+004,1.86119586960197E+004,2.18304438817092E+004,2.16057059604370E+004,2.19996840938913E+004,1.83815309977995E+004,1.94961227286288E+004,2.17744747500692E+004 -5.56000000000001E-008,8.86109644716879E+022,9.28853523873466E+022,1.45063916814445E+023,8.25847782299396E+020,8.36859086063388E+021,3.35754672316413E+023,2.18734229844235E+004,2.15486927640189E+004,2.20201717234311E+004,1.83111832570572E+004,2.10079880378751E+004,2.18166581069115E+004,0.00000000000000E+000,0.00000000000000E+000,2.21283101283390E+004,2.01100971560181E+004,1.81986691593148E+004,0.00000000000000E+000,0.00000000000000E+000,1.85057110958257E+000,1.88911053332567E+000,1.85327882158397E+000,0.00000000000000E+000,0.00000000000000E+000,2.17551695478306E+004,1.72003158807365E+004,1.80222561095362E+004,2.18734229844235E+004,2.15486927640189E+004,2.19720171188054E+004,1.84819763422806E+004,1.93769563334323E+004,2.17556198394682E+004 -5.58000000000001E-008,8.88812419277132E+022,9.29053729396448E+022,1.44923772948358E+023,8.10832368075771E+020,8.37860113678296E+021,3.35899821320574E+023,2.18499424471428E+004,2.15673991568198E+004,2.20103358993599E+004,1.79300404113087E+004,2.09895754515368E+004,2.18100733552431E+004,0.00000000000000E+000,0.00000000000000E+000,2.20600817212772E+004,1.96476362051751E+004,1.86718514221015E+004,0.00000000000000E+000,0.00000000000000E+000,1.85012109385075E+000,1.88655169987922E+000,1.85690389817027E+000,0.00000000000000E+000,0.00000000000000E+000,2.17179425437952E+004,1.76589923293796E+004,1.80385987967101E+004,2.18499424471428E+004,2.15673991568198E+004,2.19384027306001E+004,1.83218529204362E+004,1.95011859033738E+004,2.17428576174567E+004 -5.60000000000001E-008,8.91665347979621E+022,9.29804500107629E+022,1.44803649634569E+023,7.95816953852145E+020,8.33355489411209E+021,3.36080006291258E+023,2.18315260810566E+004,2.15552616604830E+004,2.19976554576781E+004,1.83048040667786E+004,2.08681195302301E+004,2.17944328996284E+004,0.00000000000000E+000,0.00000000000000E+000,2.20356764880448E+004,1.98975327110243E+004,1.85432623163970E+004,0.00000000000000E+000,0.00000000000000E+000,1.84995946524533E+000,1.88794887657044E+000,1.85593660339085E+000,0.00000000000000E+000,0.00000000000000E+000,2.16860361220238E+004,1.75521063100680E+004,1.81202246341836E+004,2.18315260810566E+004,2.15552616604830E+004,2.19169394608742E+004,1.85228072442226E+004,1.94371586038920E+004,2.17246891740611E+004 -5.62000000000001E-008,8.95168944631800E+022,9.29704397346138E+022,1.44623464663885E+023,7.95816953852145E+020,8.34356517026117E+021,3.36250180985792E+023,2.18260733419250E+004,2.15679405318884E+004,2.19758921701868E+004,1.83476535674275E+004,2.05342319853845E+004,2.17788521009595E+004,0.00000000000000E+000,0.00000000000000E+000,2.19433349095922E+004,2.01694166061970E+004,1.85522067335989E+004,0.00000000000000E+000,0.00000000000000E+000,1.84934474891722E+000,1.88943042716732E+000,1.85600430931547E+000,0.00000000000000E+000,0.00000000000000E+000,2.16804280603491E+004,1.77124342392096E+004,1.85718091422203E+004,2.18260733419250E+004,2.15679405318884E+004,2.18808264606241E+004,1.86628691549948E+004,1.94252051015356E+004,2.17111908244860E+004 -5.64000000000001E-008,8.97471308146089E+022,9.29704397346138E+022,1.44493331073947E+023,7.80801539628520E+020,8.37359599870842E+021,3.36365299161507E+023,2.18072858056446E+004,2.15418928770201E+004,2.19807511326541E+004,1.85108085479918E+004,2.06362310197147E+004,2.17716431618612E+004,0.00000000000000E+000,0.00000000000000E+000,2.18577664326297E+004,1.99820157022220E+004,1.84952695742730E+004,0.00000000000000E+000,0.00000000000000E+000,1.84877061071925E+000,1.88841347412772E+000,1.85557222670914E+000,0.00000000000000E+000,0.00000000000000E+000,2.17202479806985E+004,1.78732721591463E+004,1.84413275585390E+004,2.18072858056446E+004,2.15418928770201E+004,2.18714794333344E+004,1.87290263772839E+004,1.94164181080532E+004,2.16948431245494E+004 -5.66000000000001E-008,8.99773671660378E+022,9.29704397346138E+022,1.44363197484009E+023,7.65786125404895E+020,8.40362682715567E+021,3.36480417337221E+023,2.17332647751482E+004,2.15061586750000E+004,2.19459892842104E+004,1.79245706731509E+004,2.06726466202086E+004,2.17266247216709E+004,0.00000000000000E+000,0.00000000000000E+000,2.18565656550151E+004,1.99657148672619E+004,1.87459610056756E+004,0.00000000000000E+000,0.00000000000000E+000,1.84876252275564E+000,1.88832413099772E+000,1.85745550387954E+000,0.00000000000000E+000,0.00000000000000E+000,2.17874798654476E+004,1.82659273042529E+004,1.83055167821271E+004,2.17332647751482E+004,2.15061586750000E+004,2.18755616864907E+004,1.85832294430501E+004,1.94603904895753E+004,2.16676313640531E+004 -5.68000000000001E-008,9.02276240697649E+022,9.29604294584648E+022,1.44238069032145E+023,7.70791263479436E+020,8.40362682715567E+021,3.36600540651010E+023,2.17161565824451E+004,2.14914031628885E+004,2.19233532473916E+004,1.87022150391750E+004,2.05586882107319E+004,2.17070728786375E+004,0.00000000000000E+000,0.00000000000000E+000,2.18506487320572E+004,1.98579481288172E+004,1.89796340049088E+004,0.00000000000000E+000,0.00000000000000E+000,1.84872265607155E+000,1.88772985583754E+000,1.85916726452877E+000,0.00000000000000E+000,0.00000000000000E+000,2.17516740065024E+004,1.79720831735205E+004,1.85027785176100E+004,2.17161565824451E+004,2.14914031628885E+004,2.18535929445631E+004,1.88069590030772E+004,1.95312245255887E+004,2.16517676286958E+004 -5.70000000000001E-008,9.04828861115666E+022,9.29954654249865E+022,1.44102930304133E+023,7.45765573106727E+020,8.41864224137930E+021,3.36745689655172E+023,2.16568741689849E+004,2.14390732295516E+004,2.19237392017918E+004,1.82886865479918E+004,2.04342938821617E+004,2.16729016616559E+004,0.00000000000000E+000,0.00000000000000E+000,2.18501423025519E+004,1.85176211636964E+004,1.88192497723289E+004,0.00000000000000E+000,0.00000000000000E+000,1.84871924290582E+000,1.87977295691605E+000,1.85799683636946E+000,0.00000000000000E+000,0.00000000000000E+000,2.17809000826186E+004,1.86888775865046E+004,1.86227540912006E+004,2.16568741689849E+004,2.14390732295516E+004,2.18621600616297E+004,1.84675772154944E+004,1.94684394808501E+004,2.16228000353487E+004 -5.72000000000001E-008,9.08132252244863E+022,9.29954654249865E+022,1.43917740195375E+023,7.25745020808560E+020,8.45868334597563E+021,3.36910859211632E+023,2.15784687346334E+004,2.13970145552672E+004,2.19470758764877E+004,1.85485081979116E+004,2.03644782789041E+004,2.16488343840064E+004,0.00000000000000E+000,0.00000000000000E+000,2.18142216458626E+004,1.82136324185604E+004,1.87168611492130E+004,0.00000000000000E+000,0.00000000000000E+000,1.84847675643574E+000,1.87780891770153E+000,1.85723941800755E+000,0.00000000000000E+000,0.00000000000000E+000,2.17861205837655E+004,1.85776851525692E+004,1.86718591422460E+004,2.15784687346334E+004,2.13970145552672E+004,2.18642124072913E+004,1.84655633498795E+004,1.94245580924458E+004,2.15896608467796E+004 -5.74000000000001E-008,9.10935129566607E+022,9.29954654249865E+022,1.43772591191213E+023,7.20739882734018E+020,8.46869362212472E+021,3.37051003077719E+023,2.15646366405012E+004,2.14149189335830E+004,2.19199469958056E+004,1.85509386721529E+004,2.03479100448623E+004,2.16378737628236E+004,0.00000000000000E+000,0.00000000000000E+000,2.18322498719215E+004,1.68310318973221E+004,1.88697851261279E+004,0.00000000000000E+000,0.00000000000000E+000,1.84859855504332E+000,1.86800192595454E+000,1.85836771816928E+000,0.00000000000000E+000,0.00000000000000E+000,2.16948758937314E+004,1.80753396281866E+004,1.88424343948733E+004,2.15646366405012E+004,2.14149189335830E+004,2.18305478324992E+004,1.79446506569963E+004,1.95083734132638E+004,2.15773490836412E+004 -5.76000000000001E-008,9.13637904126859E+022,9.30655373580301E+022,1.43652467877424E+023,7.00719330435851E+020,8.43866279367747E+021,3.37221177772253E+023,2.15291728252780E+004,2.14159937808431E+004,2.18754013537012E+004,1.81693359212970E+004,2.01367115685411E+004,2.16036008326493E+004,0.00000000000000E+000,0.00000000000000E+000,2.19108791668087E+004,1.71182663752850E+004,1.88606907586350E+004,0.00000000000000E+000,0.00000000000000E+000,1.84912749439711E+000,1.87016668199489E+000,1.85830111702457E+000,0.00000000000000E+000,0.00000000000000E+000,2.16225454157020E+004,1.78418973930027E+004,1.89147488570215E+004,2.15291728252780E+004,2.14159937808431E+004,2.18111436980071E+004,1.77878965147586E+004,1.94346198643023E+004,2.15578659590858E+004 -5.78000000000001E-008,9.15740062118167E+022,9.30955681864774E+022,1.43557370254008E+023,6.95714192361309E+020,8.41864224137930E+021,3.37341301086042E+023,2.14394820754285E+004,2.14386768048822E+004,2.18931213735265E+004,1.84612884713882E+004,2.01012060501921E+004,2.15927685504575E+004,0.00000000000000E+000,0.00000000000000E+000,2.19098632444361E+004,1.69060877864437E+004,1.85093172604691E+004,0.00000000000000E+000,0.00000000000000E+000,1.84912068383793E+000,1.86857452126903E+000,1.85567907189873E+000,0.00000000000000E+000,0.00000000000000E+000,2.15963773658821E+004,1.83979608391708E+004,1.89996624091942E+004,2.14394820754285E+004,2.14386768048822E+004,2.18109896223908E+004,1.80197611020059E+004,1.93489651795519E+004,2.15381335509050E+004 -5.80000000000001E-008,9.18492888059165E+022,9.30705424961047E+022,1.43402210973697E+023,6.90709054286768E+020,8.45367820790109E+021,3.37466429537906E+023,2.13862946582464E+004,2.14518623725435E+004,2.18640519811912E+004,1.88310744614059E+004,2.01600241109202E+004,2.15714463158972E+004,0.00000000000000E+000,0.00000000000000E+000,2.18749806055429E+004,1.73340952325858E+004,1.86589430576009E+004,0.00000000000000E+000,0.00000000000000E+000,1.84888646363367E+000,1.87174715743274E+000,1.85680738323324E+000,0.00000000000000E+000,0.00000000000000E+000,2.15945714015437E+004,1.85736853327286E+004,1.90667420675570E+004,2.13862946582464E+004,2.14518623725435E+004,2.17883089569172E+004,1.83484104754286E+004,1.94346453462311E+004,2.15201013088953E+004 -5.82000000000002E-008,9.21295765380908E+022,9.30705424961047E+022,1.43257061969535E+023,6.85703916212226E+020,8.46368848405017E+021,3.37606573403993E+023,2.13675608020302E+004,2.14691387170669E+004,2.18329506210164E+004,1.86222267641477E+004,2.03026322352972E+004,2.15607696580996E+004,0.00000000000000E+000,0.00000000000000E+000,2.18950357578385E+004,1.74526763865903E+004,1.85800055771665E+004,0.00000000000000E+000,0.00000000000000E+000,1.84902121308632E+000,1.87259924433423E+000,1.85621433085766E+000,0.00000000000000E+000,0.00000000000000E+000,2.15258083383959E+004,1.88336496510594E+004,1.88703198910134E+004,2.13675608020302E+004,2.14691387170669E+004,2.17600222689644E+004,1.83650819319565E+004,1.94184432812234E+004,2.15071352565136E+004 -5.84000000000002E-008,9.24048591321906E+022,9.30254962534338E+022,1.43096897551150E+023,6.85703916212226E+020,8.50873472672105E+021,3.37721691579708E+023,2.13164060245704E+004,2.14536297222796E+004,2.18652884577962E+004,1.90383988375163E+004,2.04202896653827E+004,2.15595702130298E+004,0.00000000000000E+000,0.00000000000000E+000,2.18752810163649E+004,1.79344420526547E+004,1.86515584270959E+004,0.00000000000000E+000,0.00000000000000E+000,1.84888848385048E+000,1.87594773306197E+000,1.85675211033722E+000,0.00000000000000E+000,0.00000000000000E+000,2.14443447960026E+004,1.89339112216556E+004,1.89934083468867E+004,2.13164060245704E+004,2.14536297222796E+004,2.17450627891980E+004,1.87068168435581E+004,1.95251343502231E+004,2.14854028527606E+004 -5.86000000000002E-008,9.27101725547377E+022,9.31105836007010E+022,1.42966763961212E+023,6.65683363914059E+020,8.46368848405017E+021,3.37916891964615E+023,2.12919628607397E+004,2.14674408715467E+004,2.18240907894950E+004,1.92931184947933E+004,2.03073825937989E+004,2.15368505589940E+004,0.00000000000000E+000,0.00000000000000E+000,2.19005101211612E+004,1.84239164640509E+004,1.87503724316472E+004,0.00000000000000E+000,0.00000000000000E+000,1.84905795331682E+000,1.87917430278706E+000,1.85748820461331E+000,0.00000000000000E+000,0.00000000000000E+000,2.13810425016266E+004,1.83939764227977E+004,1.88215074086306E+004,2.12919628607397E+004,2.14674408715467E+004,2.17153469581814E+004,1.87942699247400E+004,1.94522767290813E+004,2.14684426780405E+004 -5.88000000000002E-008,9.29354037680920E+022,9.31356092910737E+022,1.42866661199721E+023,6.65683363914059E+020,8.43866279367747E+021,3.38042020416478E+023,2.13135152080150E+004,2.14489041595699E+004,2.18240609909395E+004,1.92401889464924E+004,2.03032207811962E+004,2.15372855872319E+004,0.00000000000000E+000,0.00000000000000E+000,2.17848860473902E+004,1.92622800056273E+004,1.84050288966937E+004,0.00000000000000E+000,0.00000000000000E+000,1.84827814614474E+000,1.88432756154403E+000,1.85488207793567E+000,0.00000000000000E+000,0.00000000000000E+000,2.14216884742779E+004,1.90203180864020E+004,1.88838672794028E+004,2.13135152080150E+004,2.14489041595699E+004,2.16959775213953E+004,1.91823597794416E+004,1.93754689922773E+004,2.14598800089734E+004 -5.90000000000002E-008,9.31306041529992E+022,9.30905630484028E+022,1.42746537885932E+023,6.65683363914059E+020,8.48370903634834E+021,3.38117097487596E+023,2.13126268998965E+004,2.14739498007662E+004,2.17901447339808E+004,1.93574581365632E+004,2.04447575089913E+004,2.15330161765974E+004,0.00000000000000E+000,0.00000000000000E+000,2.17203147710846E+004,1.96386598930076E+004,1.86476925494230E+004,0.00000000000000E+000,0.00000000000000E+000,1.84783914206859E+000,1.88650086482590E+000,1.85672315779046E+000,0.00000000000000E+000,0.00000000000000E+000,2.14417690474819E+004,1.87436424368226E+004,1.85467807586346E+004,2.13126268998965E+004,2.14739498007662E+004,2.16695540053444E+004,1.92562247153465E+004,1.94045221862200E+004,2.14558051972649E+004 -5.92000000000002E-008,9.34259072993971E+022,9.30955681864774E+022,1.42586373467547E+023,6.50667949690433E+020,8.50873472672105E+021,3.38267251629833E+023,2.12754846411669E+004,2.14956965035228E+004,2.17479692114136E+004,1.95782183538885E+004,2.03422632486724E+004,2.15085125781404E+004,0.00000000000000E+000,0.00000000000000E+000,2.16704532533633E+004,2.06966513973695E+004,1.87048186933928E+004,0.00000000000000E+000,0.00000000000000E+000,1.84749840504727E+000,1.89219461427802E+000,1.85714980307249E+000,0.00000000000000E+000,0.00000000000000E+000,2.14670245338588E+004,1.87771024201477E+004,1.84685819107987E+004,2.12754846411669E+004,2.14956965035228E+004,2.16449973051400E+004,1.96528043373950E+004,1.93522976355418E+004,2.14403498616633E+004 -5.94000000000002E-008,9.37362258600187E+022,9.30955681864774E+022,1.42426209049161E+023,6.45662811615891E+020,8.51874500287013E+021,3.38422410910143E+023,2.12167826939086E+004,2.14744898278539E+004,2.17441464956646E+004,2.03710054719176E+004,2.03553492331111E+004,2.14863198087831E+004,0.00000000000000E+000,0.00000000000000E+000,2.16841681041755E+004,2.14305682773846E+004,1.86859843110527E+004,0.00000000000000E+000,0.00000000000000E+000,1.84759227971827E+000,1.89582011077402E+000,1.85700941978964E+000,0.00000000000000E+000,0.00000000000000E+000,2.14193914288634E+004,1.86622248222760E+004,1.84384656834611E+004,2.12167826939086E+004,2.14744898278539E+004,2.16331110082102E+004,2.01667047794083E+004,1.93441513390820E+004,2.14137465715432E+004 -5.96000000000002E-008,9.39514467972240E+022,9.31606349814464E+022,1.42341121701894E+023,6.35652535466808E+020,8.47369876019926E+021,3.38562554776231E+023,2.12245500428012E+004,2.14816638643077E+004,2.17339869373942E+004,2.11944444818519E+004,2.02143350016248E+004,2.14841396224189E+004,0.00000000000000E+000,0.00000000000000E+000,2.16200054224877E+004,2.03176931380392E+004,1.84882879624552E+004,0.00000000000000E+000,0.00000000000000E+000,1.84715210589726E+000,1.89022203063003E+000,1.85551906648647E+000,0.00000000000000E+000,0.00000000000000E+000,2.14111367945170E+004,2.03458468640564E+004,1.84871457677993E+004,2.12245500428012E+004,2.14816638643077E+004,2.16089361910686E+004,2.07076024140436E+004,1.92432791860227E+004,2.14063467301288E+004 -5.98000000000002E-008,9.41566574582802E+022,9.32056812241173E+022,1.42271049768851E+023,6.45662811615891E+020,8.40863196523021E+021,3.38687683228094E+023,2.12930354746480E+004,2.14847136195904E+004,2.17036562503459E+004,2.10689713995148E+004,2.00672734651441E+004,2.14874130463610E+004,0.00000000000000E+000,0.00000000000000E+000,2.16027058604784E+004,2.03724092993566E+004,1.83207444169808E+004,0.00000000000000E+000,0.00000000000000E+000,1.84703299089414E+000,1.89051128914135E+000,1.85423150148228E+000,0.00000000000000E+000,0.00000000000000E+000,2.13367647715583E+004,1.97239375763270E+004,1.87038662448541E+004,2.12930354746480E+004,2.14847136195904E+004,2.15692561884026E+004,2.04874577799628E+004,1.91969667621026E+004,2.14082404348050E+004 -6.00000000000002E-008,9.44119195000819E+022,9.32106863621918E+022,1.42150926455062E+023,6.50667949690433E+020,8.39361655100659E+021,3.38817816818032E+023,2.12788674639691E+004,2.15167067883276E+004,2.16387711141153E+004,2.11532925181477E+004,2.01988561755128E+004,2.14682993431849E+004,0.00000000000000E+000,0.00000000000000E+000,2.15933799236206E+004,2.07141520359804E+004,1.83233710986786E+004,0.00000000000000E+000,0.00000000000000E+000,1.84696870077107E+000,1.89228399953102E+000,1.85425186434831E+000,0.00000000000000E+000,0.00000000000000E+000,2.13117746925945E+004,2.00762189308226E+004,1.88142212888032E+004,2.12788674639691E+004,2.15167067883276E+004,2.15310111719539E+004,2.07201812762422E+004,1.92874669243840E+004,2.13996788693922E+004 -6.02000000000002E-008,9.46972123703307E+022,9.32657428810118E+022,1.42035808279347E+023,6.50667949690433E+020,8.33856003218663E+021,3.38987991512567E+023,2.12241553183715E+004,2.14747372332427E+004,2.16180931810302E+004,2.09793994967665E+004,2.03142183612497E+004,2.14353048996505E+004,0.00000000000000E+000,0.00000000000000E+000,2.16438439013255E+004,2.12391577317651E+004,1.84159813552667E+004,0.00000000000000E+000,0.00000000000000E+000,1.84731594079069E+000,1.89489826221930E+000,1.85496619214127E+000,0.00000000000000E+000,0.00000000000000E+000,2.12624401961889E+004,1.99666677459072E+004,1.88054652578722E+004,2.12241553183715E+004,2.14747372332427E+004,2.15211593956852E+004,2.07570252114164E+004,1.93603592911610E+004,2.13707994539208E+004 -6.04000000000002E-008,9.50225463451760E+022,9.33007788475336E+022,1.41880648999036E+023,6.40657673541350E+020,8.32354461796300E+021,3.39168176483250E+023,2.12158107225421E+004,2.14337065236519E+004,2.16005130824753E+004,2.03906530168569E+004,2.01887656925991E+004,2.14099161082099E+004,0.00000000000000E+000,0.00000000000000E+000,2.16006175664465E+004,2.08251710243602E+004,1.82406051852531E+004,0.00000000000000E+000,0.00000000000000E+000,1.84701859953194E+000,1.89284760033374E+000,1.85360749196412E+000,0.00000000000000E+000,0.00000000000000E+000,2.12832184627108E+004,2.09362643980472E+004,1.87416283318654E+004,2.12158107225421E+004,2.14337065236519E+004,2.15078601640600E+004,2.06682885081874E+004,1.92395721998203E+004,2.13483878083173E+004 -6.06000000000002E-008,9.53228546296485E+022,9.33107891236827E+022,1.41735499994875E+023,6.40657673541350E+020,8.31353434181392E+021,3.39323335763561E+023,2.11782203850667E+004,2.14065877750105E+004,2.15792883558713E+004,2.02173539184163E+004,2.03137859230829E+004,2.13855524818125E+004,0.00000000000000E+000,0.00000000000000E+000,2.16106418779659E+004,2.03274902524097E+004,1.83782883119814E+004,0.00000000000000E+000,0.00000000000000E+000,1.84708765684740E+000,1.89027393558559E+000,1.85467630168205E+000,0.00000000000000E+000,0.00000000000000E+000,2.12616339323135E+004,2.05677183812423E+004,1.84847498596560E+004,2.11782203850667E+004,2.14065877750105E+004,2.14949610955246E+004,2.03492669273413E+004,1.92564356764568E+004,2.13246725754329E+004 -6.08000000000002E-008,9.55781166714501E+022,9.33958764709499E+022,1.41645407509533E+023,6.35652535466808E+020,8.23845727069579E+021,3.39493510458095E+023,2.12131297933038E+004,2.13450965491507E+004,2.15956270553147E+004,1.98124259610471E+004,2.02967400074134E+004,2.13841614347070E+004,0.00000000000000E+000,0.00000000000000E+000,2.15461047659668E+004,1.94039969309499E+004,1.85688910718311E+004,0.00000000000000E+000,0.00000000000000E+000,1.84664196798426E+000,1.88515556285005E+000,1.85613043376060E+000,0.00000000000000E+000,0.00000000000000E+000,2.12167300144213E+004,2.09712033594054E+004,1.85085648457799E+004,2.12131297933038E+004,2.13450965491507E+004,2.14715890197903E+004,2.00371997551135E+004,1.93073388600636E+004,2.13088207335021E+004 -6.10000000000002E-008,9.59334814747426E+022,9.33908713328753E+022,1.41470227676924E+023,6.40657673541350E+020,8.23345213262125E+021,3.39668690290704E+023,2.11657694192866E+004,2.13672308164266E+004,2.15423419456447E+004,1.99467309465618E+004,2.03810514922118E+004,2.13566805467209E+004,0.00000000000000E+000,0.00000000000000E+000,2.15360229237052E+004,1.90653955809939E+004,1.86060731288320E+004,0.00000000000000E+000,0.00000000000000E+000,1.84657210890464E+000,1.88315722836570E+000,1.85641071692376E+000,0.00000000000000E+000,0.00000000000000E+000,2.11911844507593E+004,2.18697007838179E+004,1.85419730909275E+004,2.11657694192866E+004,2.13672308164266E+004,2.14380585892318E+004,2.02643535923469E+004,1.93640112438144E+004,2.12891934463589E+004 -6.12000000000002E-008,9.61687229642460E+022,9.33658456425026E+022,1.41335088948911E+023,6.35652535466808E+020,8.26848809914304E+021,3.39773798190270E+023,2.11718085727467E+004,2.13090991686696E+004,2.15359942252553E+004,1.96543170456541E+004,2.03533963063296E+004,2.13382688326542E+004,0.00000000000000E+000,0.00000000000000E+000,2.14936617791210E+004,1.90456585676257E+004,1.87387073999746E+004,0.00000000000000E+000,0.00000000000000E+000,1.84627788380282E+000,1.88303859952538E+000,1.85740170220274E+000,0.00000000000000E+000,0.00000000000000E+000,2.11913921376388E+004,2.11040965133025E+004,1.89068735963916E+004,2.11718085727467E+004,2.13090991686696E+004,2.14239097251339E+004,1.99090637686148E+004,1.94941537536912E+004,2.12712119279246E+004 -6.14000000000002E-008,9.64039644537495E+022,9.34108918851735E+022,1.41239991325495E+023,6.35652535466808E+020,8.22344185647217E+021,3.39913942056357E+023,2.11269603515486E+004,2.13556069896967E+004,2.15058374421026E+004,1.94995301105506E+004,2.05344860028074E+004,2.13298470717717E+004,0.00000000000000E+000,0.00000000000000E+000,2.14336649483552E+004,1.92427465907539E+004,1.87674083182033E+004,0.00000000000000E+000,0.00000000000000E+000,1.84585923286525E+000,1.88421249799490E+000,1.85761434650049E+000,0.00000000000000E+000,0.00000000000000E+000,2.11940286874327E+004,2.11963755283627E+004,1.87985563403710E+004,2.11269603515486E+004,2.13556069896967E+004,2.13952833469134E+004,1.99222155112688E+004,1.95495358668142E+004,2.12608717939944E+004 -6.16000000000002E-008,9.66742419097748E+022,9.33908713328753E+022,1.41084832045184E+023,6.25642259317724E+020,8.26348296106850E+021,3.40039070508220E+023,2.11281714466144E+004,2.13261066784095E+004,2.14852739290062E+004,1.96361033837548E+004,2.05312075272769E+004,2.13134459958363E+004,0.00000000000000E+000,0.00000000000000E+000,2.14758523407460E+004,1.86957615543436E+004,1.87741941612738E+004,0.00000000000000E+000,0.00000000000000E+000,1.84615384895662E+000,1.88089484869528E+000,1.85766453001356E+000,0.00000000000000E+000,0.00000000000000E+000,2.11327098593208E+004,2.08806622273627E+004,1.85467131202856E+004,2.11281714466144E+004,2.13261066784095E+004,2.13797370309549E+004,1.97408039496122E+004,1.94764854435252E+004,2.12442191614902E+004 -6.18000000000002E-008,9.68594320185328E+022,9.34058867470990E+022,1.40989734421768E+023,6.15631983168641E+020,8.26848809914304E+021,3.40139173269711E+023,2.11584858147627E+004,2.12745567327954E+004,2.14537256445225E+004,2.02197451451429E+004,2.07366370571632E+004,2.13007849846457E+004,0.00000000000000E+000,0.00000000000000E+000,2.14587109581713E+004,1.86674922535893E+004,1.86822391267708E+004,0.00000000000000E+000,0.00000000000000E+000,1.84603427777534E+000,1.88071821356596E+000,1.85698147194359E+000,0.00000000000000E+000,0.00000000000000E+000,2.11402406909312E+004,2.04791754444306E+004,1.84109580484753E+004,2.11584858147627E+004,2.12745567327954E+004,2.13634884616169E+004,1.98708731797284E+004,1.95019338652769E+004,2.12327351284109E+004 -6.20000000000002E-008,9.70996786461108E+022,9.34959792324407E+022,1.40914657350650E+023,6.15631983168641E+020,8.17839561380129E+021,3.40304342826171E+023,2.11434557075238E+004,2.13096807875111E+004,2.14471364703372E+004,1.99905143616476E+004,2.06309080767216E+004,2.13004705782587E+004,0.00000000000000E+000,0.00000000000000E+000,2.14592611359861E+004,1.88524988696750E+004,1.86184376583896E+004,0.00000000000000E+000,0.00000000000000E+000,1.84603811847264E+000,1.88186478109828E+000,1.85650368069635E+000,0.00000000000000E+000,0.00000000000000E+000,2.10633504575019E+004,1.97760520814291E+004,1.81209129868088E+004,2.11434557075238E+004,2.13096807875111E+004,2.13382867359634E+004,1.96169941143180E+004,1.93538506540875E+004,2.12240308988811E+004 -6.22000000000002E-008,9.74200074828815E+022,9.35059895085898E+022,1.40754492932264E+023,6.10626845094099E+020,8.17839561380129E+021,3.40469512382631E+023,2.11374561985491E+004,2.13163170134961E+004,2.13839133645975E+004,1.95795488757105E+004,2.06774636805510E+004,2.12746232822351E+004,0.00000000000000E+000,0.00000000000000E+000,2.14354153751853E+004,1.90167264644559E+004,1.83396899866702E+004,0.00000000000000E+000,0.00000000000000E+000,1.84587147940876E+000,1.88286426799182E+000,1.85437824624851E+000,0.00000000000000E+000,0.00000000000000E+000,2.10768043075588E+004,1.91242255174140E+004,1.81763888108379E+004,2.11374561985491E+004,2.13163170134961E+004,2.13080790426762E+004,1.92932778049395E+004,1.93152297788662E+004,2.12100368411694E+004 -6.24000000000002E-008,9.76452386962359E+022,9.35710563035588E+022,1.40664400446923E+023,6.00616568945015E+020,8.13334937113042E+021,3.40614661386793E+023,2.11023761277921E+004,2.12719666646939E+004,2.14851245286547E+004,1.98139528709678E+004,2.06597118529095E+004,2.12941871560747E+004,0.00000000000000E+000,0.00000000000000E+000,2.12717020835169E+004,1.92775351216349E+004,1.83766323053722E+004,0.00000000000000E+000,0.00000000000000E+000,1.84471761223414E+000,1.88441726448890E+000,1.85466353907123E+000,0.00000000000000E+000,0.00000000000000E+000,2.10656989070130E+004,1.93526935072748E+004,1.82901903079738E+004,2.11023761277921E+004,2.12719666646939E+004,2.13050505714074E+004,1.95331224795300E+004,1.93506195200269E+004,2.11880673203234E+004 -6.26000000000002E-008,9.79305315664848E+022,9.35860717177825E+022,1.40504236028537E+023,5.75590878572306E+020,8.16838533765221E+021,3.40764815529029E+023,2.10665354368549E+004,2.12178226031128E+004,2.15086109174601E+004,1.92877120892856E+004,2.06800461078483E+004,2.12780918467712E+004,0.00000000000000E+000,0.00000000000000E+000,2.12311246914437E+004,1.89996966385998E+004,1.85925814592014E+004,0.00000000000000E+000,0.00000000000000E+000,1.84442894414693E+000,1.88276141101641E+000,1.85630914121869E+000,0.00000000000000E+000,0.00000000000000E+000,2.10367570502774E+004,1.94160604066211E+004,1.84097761667970E+004,2.10665354368549E+004,2.12178226031128E+004,2.12959545551675E+004,1.92462218029596E+004,1.94526336009115E+004,2.11609172511082E+004 -6.28000000000002E-008,9.82708809555536E+022,9.35760614416334E+022,1.40334061334003E+023,5.80596016646848E+020,8.16838533765221E+021,3.40929985085489E+023,2.10549700381929E+004,2.12350484668262E+004,2.14712699978460E+004,1.82996097983471E+004,2.07468512309401E+004,2.12636800753240E+004,0.00000000000000E+000,0.00000000000000E+000,2.11577702120986E+004,1.95318829497246E+004,1.85875377875435E+004,0.00000000000000E+000,0.00000000000000E+000,1.84390436850394E+000,1.88589264934531E+000,1.85627113167427E+000,0.00000000000000E+000,0.00000000000000E+000,2.10250531233372E+004,2.06659698286984E+004,1.85230297811169E+004,2.10549700381929E+004,2.12350484668262E+004,2.12564076481835E+004,1.93244086585997E+004,1.95135403034018E+004,2.11474342986227E+004 -6.30000000000002E-008,9.84410556500880E+022,9.35860717177825E+022,1.40248973986736E+023,5.75590878572306E+020,8.16838533765221E+021,3.41020077570831E+023,2.10736215730751E+004,2.12120604996984E+004,2.14783453918129E+004,1.80979906282547E+004,2.08833722051673E+004,2.12684818872761E+004,0.00000000000000E+000,0.00000000000000E+000,2.10661104787917E+004,1.91382048416916E+004,1.85909002358652E+004,0.00000000000000E+000,0.00000000000000E+000,1.84324389830316E+000,1.88359277403574E+000,1.85629647360719E+000,0.00000000000000E+000,0.00000000000000E+000,2.10366172246983E+004,2.08077517717833E+004,1.85012829531471E+004,2.10736215730751E+004,2.12120604996984E+004,2.12382098878408E+004,1.91699399002640E+004,1.95678389327629E+004,2.11400216017933E+004 -6.32000000000002E-008,9.86312508969206E+022,9.36261128223788E+022,1.40183907191767E+023,5.85601154721390E+020,8.10832368075771E+021,3.41135195746545E+023,2.10749256463618E+004,2.12144001723051E+004,2.14990904221260E+004,1.84551754745423E+004,2.06670289584163E+004,2.12733163342929E+004,0.00000000000000E+000,0.00000000000000E+000,2.10177110939519E+004,1.94715282101478E+004,1.81718720295445E+004,0.00000000000000E+000,0.00000000000000E+000,1.84289288996937E+000,1.88554596959305E+000,1.85306802771781E+000,0.00000000000000E+000,0.00000000000000E+000,2.10197181089183E+004,2.06480092499095E+004,1.84176054384519E+004,2.10749256463618E+004,2.12144001723051E+004,2.12293397191168E+004,1.93704329403802E+004,1.93358671295736E+004,2.11323979439720E+004 -6.34000000000002E-008,9.88664923864241E+022,9.36311179604533E+022,1.40053773601828E+023,5.70585740497765E+020,8.13334937113042E+021,3.41255319060334E+023,2.10858732446840E+004,2.12388252108829E+004,2.14277009293401E+004,1.82527410636068E+004,2.05147256372957E+004,2.12497781855485E+004,0.00000000000000E+000,0.00000000000000E+000,2.09462978842429E+004,1.90170536871534E+004,1.86518563881430E+004,0.00000000000000E+000,0.00000000000000E+000,1.84237209962576E+000,1.88286624258947E+000,1.85675434135835E+000,0.00000000000000E+000,0.00000000000000E+000,2.10645496256810E+004,2.11201406059636E+004,1.83529800897614E+004,2.10858732446840E+004,2.12388252108829E+004,2.11919309181815E+004,1.92950245062203E+004,1.93797306712555E+004,2.11277080639662E+004 -6.36000000000002E-008,9.91517852566729E+022,9.36361230985279E+022,1.39913629735741E+023,5.70585740497765E+020,8.12834423305587E+021,3.41400468064496E+023,2.10205311207257E+004,2.12426106487067E+004,2.13795630330625E+004,1.84970796616873E+004,2.06676113518529E+004,2.12159603351510E+004,0.00000000000000E+000,0.00000000000000E+000,2.09339155595255E+004,1.91567765633734E+004,1.83854555293345E+004,0.00000000000000E+000,0.00000000000000E+000,1.84228144871026E+000,1.88370335119531E+000,1.85473151260434E+000,0.00000000000000E+000,0.00000000000000E+000,2.10954249309147E+004,2.21839603541894E+004,1.85239571428639E+004,2.10205311207257E+004,2.12426106487067E+004,2.11765190209342E+004,1.97487946485028E+004,1.94246604466264E+004,2.11052471101602E+004 -6.38000000000002E-008,9.92919291227601E+022,9.36861744792733E+022,1.39858573216921E+023,5.60575464348681E+020,8.09831340460862E+021,3.41495565687912E+023,2.10292407359464E+004,2.12458687293101E+004,2.13338620182305E+004,1.87592012012025E+004,2.06315677117055E+004,2.12002705896675E+004,0.00000000000000E+000,0.00000000000000E+000,2.09552754936230E+004,1.87885729802157E+004,1.84861063536966E+004,0.00000000000000E+000,0.00000000000000E+000,1.84243775955530E+000,1.88147110374379E+000,1.85550244699986E+000,0.00000000000000E+000,0.00000000000000E+000,2.10618669674069E+004,2.21147953282051E+004,1.86349459196015E+004,2.10292407359464E+004,2.12458687293101E+004,2.11524190510498E+004,1.97424866507051E+004,1.94683922266720E+004,2.10999913712065E+004 -6.40000000000002E-008,9.94921346457418E+022,9.37362258600187E+022,1.39768480731580E+023,5.45560050125056E+020,8.07829285231046E+021,3.41620694139776E+023,2.09861525508669E+004,2.12304570721217E+004,2.13327395016731E+004,1.82857692038498E+004,2.04569004593320E+004,2.11781591880568E+004,0.00000000000000E+000,0.00000000000000E+000,2.09528887811906E+004,1.83779222958237E+004,1.83671863210114E+004,0.00000000000000E+000,0.00000000000000E+000,1.84242030908809E+000,1.87887827270493E+000,1.85459069733883E+000,0.00000000000000E+000,0.00000000000000E+000,2.10838177755168E+004,2.28599594556691E+004,1.83673804164078E+004,2.09861525508669E+004,2.12304570721217E+004,2.11577008340601E+004,1.96408629526225E+004,1.92818332901133E+004,2.10809222790757E+004 -6.42000000000002E-008,9.97023504448725E+022,9.37462361361678E+022,1.39658367693940E+023,5.35549773975972E+020,8.08830312845954E+021,3.41730807177416E+023,2.09889472101878E+004,2.12371714978944E+004,2.13356497112465E+004,1.91738634490275E+004,2.03318143286088E+004,2.11803342290042E+004,0.00000000000000E+000,0.00000000000000E+000,2.09108584721698E+004,1.84245561053010E+004,1.82849415746560E+004,0.00000000000000E+000,0.00000000000000E+000,1.84211237000585E+000,1.87917840948263E+000,1.85395337849520E+000,0.00000000000000E+000,0.00000000000000E+000,2.10219560684287E+004,2.32264632132501E+004,1.86882032752213E+004,2.09889472101878E+004,2.12371714978944E+004,2.11295875471713E+004,2.01473979247166E+004,1.92985378568814E+004,2.10731902962372E+004 -6.44000000000002E-008,9.99175713820778E+022,9.38113029311368E+022,1.39568275208598E+023,5.20534359752347E+020,8.05326716193775E+021,3.41870951043503E+023,2.09855559093307E+004,2.12080973297652E+004,2.12998386530657E+004,1.85825578724804E+004,2.03912578103562E+004,2.11572695822513E+004,0.00000000000000E+000,0.00000000000000E+000,2.09003905120915E+004,1.74146575092709E+004,1.82530873288406E+004,0.00000000000000E+000,0.00000000000000E+000,1.84203548834643E+000,1.87232728775632E+000,1.85370503581044E+000,0.00000000000000E+000,0.00000000000000E+000,2.10495319864155E+004,2.26112603991483E+004,1.84325230826174E+004,2.09855559093307E+004,2.12080973297652E+004,2.11191305893857E+004,1.94368119101741E+004,1.92413678160675E+004,2.10577091621206E+004 -6.46000000000002E-008,1.00177838561954E+023,9.38113029311368E+022,1.39443146756734E+023,5.25539497826888E+020,8.04325688578866E+021,3.42001084633441E+023,2.10127523673042E+004,2.11785044352276E+004,2.12653075661263E+004,2.00197798845848E+004,2.03230774094358E+004,2.11434461925683E+004,0.00000000000000E+000,0.00000000000000E+000,2.08733919714063E+004,1.66955388120149E+004,1.81853920035178E+004,0.00000000000000E+000,0.00000000000000E+000,1.84183685251815E+000,1.86695553359424E+000,1.85317445528969E+000,0.00000000000000E+000,0.00000000000000E+000,2.10466066630178E+004,2.22409408462625E+004,1.82961025427773E+004,2.10127523673042E+004,2.11785044352276E+004,2.10958726005407E+004,1.97629137474078E+004,1.91534801996606E+004,2.10464613864549E+004 -6.48000000000002E-008,1.00433100603756E+023,9.38463388976586E+022,1.39323023442945E+023,5.15529221677805E+020,8.02824147156504E+021,3.42146233637603E+023,2.09478804594974E+004,2.11671225141367E+004,2.12398793792138E+004,2.02585663534002E+004,2.03355256393609E+004,2.11115114951955E+004,0.00000000000000E+000,0.00000000000000E+000,2.08854817914530E+004,1.67776243434702E+004,1.81416957503829E+004,0.00000000000000E+000,0.00000000000000E+000,1.84192586239272E+000,1.86759143793862E+000,1.85282992673221E+000,0.00000000000000E+000,0.00000000000000E+000,2.10538403178320E+004,2.24121273377742E+004,1.82839326189774E+004,2.09478804594974E+004,2.11671225141367E+004,2.10900893601692E+004,1.99391158524810E+004,1.91436122545908E+004,2.10220677139685E+004 -6.50000000000002E-008,1.00723398612079E+023,9.38463388976586E+022,1.39177874438784E+023,5.15529221677805E+020,8.02824147156504E+021,3.42291382641764E+023,2.09988542633793E+004,2.10999068427085E+004,2.12374423796875E+004,2.03752491712897E+004,2.02310770355387E+004,2.11046244221010E+004,0.00000000000000E+000,0.00000000000000E+000,2.08602129055606E+004,1.69765188429807E+004,1.82049922207024E+004,0.00000000000000E+000,0.00000000000000E+000,1.84173970902399E+000,1.86910733677594E+000,1.85332847248195E+000,0.00000000000000E+000,0.00000000000000E+000,2.09939694979438E+004,2.13662771024710E+004,1.83384749189592E+004,2.09988542633793E+004,2.10999068427085E+004,2.10647225283546E+004,1.97389895067182E+004,1.91308518036044E+004,2.10076320122705E+004 -6.52000000000002E-008,1.00978660653881E+023,9.38813748641804E+022,1.39062756263069E+023,5.10524083603263E+020,8.00321578119233E+021,3.42436531645926E+023,2.09838837877595E+004,2.10890213874714E+004,2.11822605090818E+004,2.05365343949683E+004,2.03451510426615E+004,2.10776733647000E+004,0.00000000000000E+000,0.00000000000000E+000,2.09007523655849E+004,1.71322929958143E+004,1.81136938857800E+004,0.00000000000000E+000,0.00000000000000E+000,1.84203814721834E+000,1.87027057833065E+000,1.85260829175896E+000,0.00000000000000E+000,0.00000000000000E+000,2.09686644540767E+004,2.03935926941940E+004,1.82132558558892E+004,2.09838837877595E+004,2.10890213874714E+004,2.10440354906392E+004,1.95681975796899E+004,1.91196605363404E+004,2.09914554132088E+004 -6.54000000000002E-008,1.01168855900713E+023,9.39013954164786E+022,1.38972663777727E+023,5.05518945528721E+020,7.99320550504325E+021,3.42541639545491E+023,2.09803846479092E+004,2.11130688458059E+004,2.11594209493073E+004,1.99632258729502E+004,2.03845340729054E+004,2.10739891333823E+004,0.00000000000000E+000,0.00000000000000E+000,2.08509168645640E+004,1.78319732125912E+004,1.79216817414408E+004,0.00000000000000E+000,0.00000000000000E+000,1.84167111573609E+000,1.87525034177230E+000,1.85107035597930E+000,0.00000000000000E+000,0.00000000000000E+000,2.09649030922995E+004,1.96431371749109E+004,1.82975263787855E+004,2.09803846479092E+004,2.11130688458059E+004,2.10195137892317E+004,1.92888053871029E+004,1.91098532016826E+004,2.09864873941866E+004 -6.56000000000002E-008,1.01419112804440E+023,9.39314262449259E+022,1.38872561016237E+023,5.15529221677805E+020,7.94315412429783E+021,3.42681783411579E+023,2.09773238468752E+004,2.11380152652609E+004,2.11145418309054E+004,2.02451624559423E+004,2.02701541116683E+004,2.10594851392058E+004,0.00000000000000E+000,0.00000000000000E+000,2.09149176964386E+004,1.96278636995950E+004,1.76235063540416E+004,0.00000000000000E+000,0.00000000000000E+000,1.84214216275530E+000,1.88643966298219E+000,1.84861747774064E+000,0.00000000000000E+000,0.00000000000000E+000,2.08649724077900E+004,1.98875477728380E+004,1.83395841595940E+004,2.09773238468752E+004,2.11380152652609E+004,2.09878454161839E+004,1.99722019253802E+004,1.89919721669515E+004,2.09781030166373E+004 -6.58000000000002E-008,1.01649349155869E+023,9.39114056926277E+022,1.38752437702448E+023,5.20534359752347E+020,7.95316440044691E+021,3.42786891311144E+023,2.09585675050423E+004,2.10888917877228E+004,2.11396632235641E+004,2.01803942256690E+004,2.01476278339325E+004,2.10475785124794E+004,0.00000000000000E+000,0.00000000000000E+000,2.09389923446638E+004,1.92746178981644E+004,1.74613392605452E+004,0.00000000000000E+000,0.00000000000000E+000,1.84231862841813E+000,1.88440012142349E+000,1.84724924061212E+000,0.00000000000000E+000,0.00000000000000E+000,2.08256628108045E+004,2.03819897927133E+004,1.80706031921346E+004,2.09585675050423E+004,2.10888917877228E+004,2.09938500017485E+004,1.99910307568917E+004,1.88162473787301E+004,2.09573790369696E+004 -6.60000000000002E-008,1.01869575231149E+023,9.38913851403295E+022,1.38632314388659E+023,5.20534359752347E+020,7.97318495274508E+021,3.42886994072635E+023,2.09144980950698E+004,2.10721174767714E+004,2.11346530949006E+004,2.01072458147421E+004,2.00888091631395E+004,2.10262437336313E+004,0.00000000000000E+000,0.00000000000000E+000,2.09335189100856E+004,1.95371639693607E+004,1.77549728329132E+004,0.00000000000000E+000,0.00000000000000E+000,1.84227854312020E+000,1.88592288385192E+000,1.84970883952700E+000,0.00000000000000E+000,0.00000000000000E+000,2.08136612965441E+004,2.11908006739844E+004,1.79945688333911E+004,2.09144980950698E+004,2.10721174767714E+004,2.09866718656500E+004,2.02658272190114E+004,1.88470923911149E+004,2.09377805628667E+004 -6.62000000000002E-008,1.02064775616056E+023,9.38763697261059E+022,1.38527206489093E+023,5.20534359752347E+020,7.98820036696870E+021,3.42977086557976E+023,2.08634775998596E+004,2.10861314933048E+004,2.11002214015780E+004,2.01843165506993E+004,1.99394060093926E+004,2.09974871382488E+004,0.00000000000000E+000,0.00000000000000E+000,2.09608375354152E+004,1.83118753520605E+004,1.80283791196595E+004,0.00000000000000E+000,0.00000000000000E+000,1.84247841148572E+000,1.87845063298136E+000,1.85192889326741E+000,0.00000000000000E+000,0.00000000000000E+000,2.08088986803397E+004,2.10717434579148E+004,1.80352414296890E+004,2.08634775998596E+004,2.10861314933048E+004,2.09775381929059E+004,1.99309986694867E+004,1.88670926233716E+004,2.09225763700598E+004 -6.64000000000002E-008,1.02315032519783E+023,9.39064005545532E+022,1.38417093451453E+023,5.20534359752347E+020,7.95816953852145E+021,3.43117230424064E+023,2.08646975010109E+004,2.10589737070010E+004,2.10925703384660E+004,1.99161026070235E+004,1.98151544701315E+004,2.09840125741446E+004,0.00000000000000E+000,0.00000000000000E+000,2.09106895621765E+004,1.90558231894001E+004,1.79240884496034E+004,0.00000000000000E+000,0.00000000000000E+000,1.84211113004440E+000,1.88309972379341E+000,1.85108983114672E+000,0.00000000000000E+000,0.00000000000000E+000,2.08168707190756E+004,2.09614520486831E+004,1.80298610002940E+004,2.08646975010109E+004,2.10589737070010E+004,2.09630132727773E+004,1.99844885041477E+004,1.87830383842856E+004,2.09079130147553E+004 -6.66000000000002E-008,1.02430150695498E+023,9.39314262449259E+022,1.38367042070708E+023,5.15529221677805E+020,7.94315412429783E+021,3.43187302357107E+023,2.09079295009701E+004,2.10383129927596E+004,2.10659092416203E+004,1.90374957758605E+004,1.97470907967503E+004,2.09776328746543E+004,0.00000000000000E+000,0.00000000000000E+000,2.08764615440599E+004,1.94290452506496E+004,1.78569486891316E+004,0.00000000000000E+000,0.00000000000000E+000,1.84185946137063E+000,1.88530068052546E+000,1.85054461725396E+000,0.00000000000000E+000,0.00000000000000E+000,2.08276265400620E+004,2.05592518565502E+004,1.80880719856140E+004,2.09079295009701E+004,2.10383129927596E+004,2.09452546970533E+004,1.95867384056494E+004,1.87521582320890E+004,2.09067842029346E+004 -6.68000000000002E-008,1.02695423013449E+023,9.39564519352986E+022,1.38241913618844E+023,5.10524083603263E+020,7.92813871007420E+021,3.43332451361269E+023,2.09050351122237E+004,2.09918970212555E+004,2.10934234836098E+004,1.90148399488310E+004,1.96503699751283E+004,2.09728768098475E+004,0.00000000000000E+000,0.00000000000000E+000,2.08543779818138E+004,1.93411131799803E+004,1.80494149728975E+004,0.00000000000000E+000,0.00000000000000E+000,1.84169666144293E+000,1.88478962263132E+000,1.85209699161517E+000,0.00000000000000E+000,0.00000000000000E+000,2.07659599743049E+004,1.93067837129327E+004,1.79716336623188E+004,2.09050351122237E+004,2.09918970212555E+004,2.09333496926491E+004,1.91889692968760E+004,1.87276456504874E+004,2.08873751443996E+004 -6.70000000000002E-008,1.02880613122207E+023,9.39814776256713E+022,1.38156826271577E+023,5.05518945528721E+020,7.91312329585058E+021,3.43437559260834E+023,2.08809717307528E+004,2.09744505704246E+004,2.10695495867555E+004,1.91822305346511E+004,1.95533399382702E+004,2.09493222562354E+004,0.00000000000000E+000,0.00000000000000E+000,2.08594549820135E+004,1.89360251607234E+004,1.80690428724011E+004,0.00000000000000E+000,0.00000000000000E+000,1.84173411870906E+000,1.88237524232004E+000,1.85225349533909E+000,0.00000000000000E+000,0.00000000000000E+000,2.07679760236788E+004,1.99963951461110E+004,1.80662271830509E+004,2.08809717307528E+004,2.09744505704246E+004,2.09248369290163E+004,1.93514858108455E+004,1.87180643690418E+004,2.08721113699590E+004 -6.72000000000002E-008,1.03135875164008E+023,9.40065033160440E+022,1.38031697819714E+023,4.95508669379638E+020,7.90811815777603E+021,3.43577703126921E+023,2.09145616169336E+004,2.09755388221016E+004,2.10644738793441E+004,1.88442316973483E+004,1.94937073017555E+004,2.09557829988289E+004,0.00000000000000E+000,0.00000000000000E+000,2.07947781168670E+004,1.83081178504944E+004,1.78486629523631E+004,0.00000000000000E+000,0.00000000000000E+000,1.84125561510706E+000,1.87842621320683E+000,1.85047705556287E+000,0.00000000000000E+000,0.00000000000000E+000,2.07283966574126E+004,1.99320721208947E+004,1.79707527995683E+004,2.09145616169336E+004,2.09755388221016E+004,2.08936378009035E+004,1.90141296518623E+004,1.86047143485767E+004,2.08669330266567E+004 -6.74000000000002E-008,1.03296039582394E+023,9.39964930398949E+022,1.37951615610521E+023,5.00513807454179E+020,7.90811815777603E+021,3.43652780198040E+023,2.08545172260893E+004,2.09982471221136E+004,2.10369833356288E+004,1.87110710484063E+004,1.94855161589047E+004,2.09324521526047E+004,0.00000000000000E+000,0.00000000000000E+000,2.07403965582517E+004,1.71345245005188E+004,1.79163984918958E+004,0.00000000000000E+000,0.00000000000000E+000,1.84085103687213E+000,1.87028709194876E+000,1.85102758587907E+000,0.00000000000000E+000,0.00000000000000E+000,2.08004734206066E+004,1.99539986723237E+004,1.81735968492425E+004,2.08545172260893E+004,2.09982471221136E+004,2.08880264439776E+004,1.86437173258701E+004,1.86785833831788E+004,2.08539895979063E+004 -6.76000000000002E-008,1.03501250243450E+023,9.40115084541185E+022,1.37866528263254E+023,5.10524083603263E+020,7.87308219125424E+021,3.43762893235680E+023,2.07846893975498E+004,2.09689289079788E+004,2.11004188617309E+004,1.83972176799467E+004,1.94528963205548E+004,2.09276512534939E+004,0.00000000000000E+000,0.00000000000000E+000,2.07113372710925E+004,1.71546080045609E+004,1.78926397695464E+004,0.00000000000000E+000,0.00000000000000E+000,1.84063400087098E+000,1.87043552535641E+000,1.85083494533557E+000,0.00000000000000E+000,0.00000000000000E+000,2.07737792544691E+004,1.99511741506293E+004,1.81215606737236E+004,2.07846893975498E+004,2.09689289079788E+004,2.09002274731562E+004,1.85112849261176E+004,1.86427106006760E+004,2.08289782521755E+004 -6.78000000000002E-008,1.03761517423326E+023,9.40014981779694E+022,1.37736394673316E+023,5.15529221677805E+020,7.87308219125424E+021,3.43888021687543E+023,2.07607419264245E+004,2.09804229880884E+004,2.10755094033931E+004,1.90102477182645E+004,1.93829178112254E+004,2.09126958464204E+004,0.00000000000000E+000,0.00000000000000E+000,2.07203648417546E+004,1.77941256577089E+004,1.78420480091454E+004,0.00000000000000E+000,0.00000000000000E+000,1.84070148867546E+000,1.87499076948291E+000,1.85042307364633E+000,0.00000000000000E+000,0.00000000000000E+000,2.07249568980777E+004,2.12899123223681E+004,1.80337130218678E+004,2.07607419264245E+004,2.09804229880884E+004,2.08774565960638E+004,1.93417553008227E+004,1.85727969538263E+004,2.08153201782559E+004 -6.80000000000002E-008,1.03971733222457E+023,9.40415392825658E+022,1.37626281635676E+023,4.90503531305096E+020,7.88309246740333E+021,3.44013150139407E+023,2.07276951225769E+004,2.09929453417699E+004,2.10748921177668E+004,1.98670222359968E+004,1.95122683511581E+004,2.09100267735879E+004,0.00000000000000E+000,0.00000000000000E+000,2.07124043708467E+004,1.76942417939691E+004,1.76485490868308E+004,0.00000000000000E+000,0.00000000000000E+000,1.84064198121291E+000,1.87430051633610E+000,1.84882658813003E+000,0.00000000000000E+000,0.00000000000000E+000,2.06638053333420E+004,2.12775548867559E+004,1.80874083098957E+004,2.07276951225769E+004,2.09929453417699E+004,2.08571663929596E+004,1.96849850672863E+004,1.85930723793789E+004,2.08016001665765E+004 -6.82000000000002E-008,1.04131897640842E+023,9.41016009394603E+022,1.37566219978781E+023,4.80493255156012E+020,7.84305136280699E+021,3.44123263177047E+023,2.07165427041914E+004,2.09312406384486E+004,2.10595404019533E+004,2.05846318552770E+004,1.94391499392453E+004,2.08830710469902E+004,0.00000000000000E+000,0.00000000000000E+000,2.07042885761243E+004,1.78268092948342E+004,1.78213203993257E+004,0.00000000000000E+000,0.00000000000000E+000,1.84058126689744E+000,1.87521498924022E+000,1.85025367134839E+000,0.00000000000000E+000,0.00000000000000E+000,2.06821066457886E+004,2.14076420354233E+004,1.82467205499622E+004,2.07165427041914E+004,2.09312406384486E+004,2.08536021471447E+004,2.00718493680047E+004,1.86540324702510E+004,2.07821355504939E+004 -6.84000000000002E-008,1.04362133992271E+023,9.41316317679075E+022,1.37461112079216E+023,4.75488117081470E+020,7.82303081050882E+021,3.44253396766985E+023,2.07133647841857E+004,2.09427446533357E+004,2.10260294598304E+004,2.05418970262727E+004,1.93424366943585E+004,2.08695427401265E+004,0.00000000000000E+000,0.00000000000000E+000,2.06424862715401E+004,1.77155098165906E+004,1.78091692579060E+004,0.00000000000000E+000,0.00000000000000E+000,1.84011740269378E+000,1.87444812790136E+000,1.85015418428268E+000,0.00000000000000E+000,0.00000000000000E+000,2.07089385457680E+004,2.13322682637744E+004,1.81573266537700E+004,2.07133647841857E+004,2.09427446533357E+004,2.08301342368837E+004,2.00011738046045E+004,1.85823076367818E+004,2.07733008554790E+004 -6.86000000000002E-008,1.04557334377178E+023,9.41666677344293E+022,1.37381029870023E+023,4.75488117081470E+020,7.78799484398703E+021,3.44368514942699E+023,2.07268434548383E+004,2.09171278902693E+004,2.09922102952449E+004,1.94730425915069E+004,1.95057869067345E+004,2.08553949036532E+004,0.00000000000000E+000,0.00000000000000E+000,2.06016657907189E+004,1.83383639370506E+004,1.79539738506200E+004,0.00000000000000E+000,0.00000000000000E+000,1.83980953796642E+000,1.87862250286628E+000,1.85133124152795E+000,0.00000000000000E+000,0.00000000000000E+000,2.07225121822628E+004,2.08623257358126E+004,1.80374051818624E+004,2.07268434548383E+004,2.09171278902693E+004,2.08082981960250E+004,1.95670924444474E+004,1.86578227320752E+004,2.07629786308290E+004 -6.88000000000002E-008,1.04772555314383E+023,9.41416420440566E+022,1.37265911694309E+023,4.80493255156012E+020,7.80301025821066E+021,3.44463612566115E+023,2.07124917074971E+004,2.09623834254445E+004,2.09698405456123E+004,2.01788275998779E+004,1.93532410236573E+004,2.08518032886448E+004,0.00000000000000E+000,0.00000000000000E+000,2.06226798745232E+004,1.78268092948342E+004,1.80169800495838E+004,0.00000000000000E+000,0.00000000000000E+000,1.83996817227658E+000,1.87521498924022E+000,1.85183764322181E+000,0.00000000000000E+000,0.00000000000000E+000,2.06308499669056E+004,2.05983515393832E+004,1.81420766917227E+004,2.07124917074971E+004,2.09623834254445E+004,2.07773329622846E+004,1.96593540841894E+004,1.86385616497712E+004,2.07581766129574E+004 -6.90000000000002E-008,1.05022812218110E+023,9.41416420440566E+022,1.37125767828222E+023,4.65477840932387E+020,7.83304108665791E+021,3.44588741017979E+023,2.06478984502865E+004,2.09726909903204E+004,2.09906634624130E+004,2.04413312456473E+004,1.92986782286983E+004,2.08420828813570E+004,0.00000000000000E+000,0.00000000000000E+000,2.05579488933533E+004,1.71675650674333E+004,1.80510897722465E+004,0.00000000000000E+000,0.00000000000000E+000,1.83947851224235E+000,1.87053110851731E+000,1.85211035861337E+000,0.00000000000000E+000,0.00000000000000E+000,2.06335057803688E+004,2.14748999879953E+004,1.81352250686117E+004,2.06478984502865E+004,2.09726909903204E+004,2.07698447972027E+004,1.98509046935229E+004,1.86218680810298E+004,2.07380277079839E+004 -6.92000000000002E-008,1.05278074259912E+023,9.41266266298330E+022,1.36995634238283E+023,4.70482979006929E+020,7.83804622473245E+021,3.44708864331768E+023,2.06285909290363E+004,2.09889141374800E+004,2.09659532263633E+004,1.99962258276644E+004,1.94091752438295E+004,2.08324667899294E+004,0.00000000000000E+000,0.00000000000000E+000,2.06249069449036E+004,1.71902168853787E+004,1.81613002449911E+004,0.00000000000000E+000,0.00000000000000E+000,1.83998496592749E+000,1.87069787089257E+000,1.85298470045031E+000,0.00000000000000E+000,0.00000000000000E+000,2.05117647075398E+004,2.10816131466988E+004,1.79952375676909E+004,2.06285909290363E+004,2.09889141374800E+004,2.07414063778148E+004,1.95481752258453E+004,1.86591124817076E+004,2.07255598649003E+004 -6.94000000000003E-008,1.05563367130161E+023,9.41416420440566E+022,1.36865500648345E+023,4.75488117081470E+020,7.81302053435974E+021,3.44859018474004E+023,2.06390638415462E+004,2.10167379788403E+004,2.09059688909384E+004,2.01487919902559E+004,1.92554732397202E+004,2.08160689745438E+004,0.00000000000000E+000,0.00000000000000E+000,2.05612760788665E+004,1.75717659433843E+004,1.80236914020339E+004,0.00000000000000E+000,0.00000000000000E+000,1.83950375384863E+000,1.87344367039015E+000,1.85189138148762E+000,0.00000000000000E+000,0.00000000000000E+000,2.05396103743708E+004,2.08259797926531E+004,1.79095659984436E+004,2.06390638415462E+004,2.10167379788403E+004,2.07061326449100E+004,1.96434357674194E+004,1.85296968993256E+004,2.07196194621105E+004 -6.96000000000003E-008,1.05708516134323E+023,9.41566574582802E+022,1.36795428715302E+023,4.70482979006929E+020,7.80801539628520E+021,3.44939100683197E+023,2.06439297499978E+004,2.09944951412160E+004,2.08846850656100E+004,2.03056126882205E+004,1.94027098072313E+004,2.08065429623557E+004,0.00000000000000E+000,0.00000000000000E+000,2.05474664142393E+004,1.69238571570875E+004,1.82402106661079E+004,0.00000000000000E+000,0.00000000000000E+000,1.83939893529219E+000,1.86870935621915E+000,1.85360440680750E+000,0.00000000000000E+000,0.00000000000000E+000,2.05310917086783E+004,2.11955822823478E+004,1.77319076203995E+004,2.06439297499978E+004,2.09944951412160E+004,2.06905939832335E+004,1.96447055544648E+004,1.86007350245753E+004,2.07105157222851E+004 -6.98000000000003E-008,1.05918731933453E+023,9.41566574582802E+022,1.36685315677662E+023,4.65477840932387E+020,7.81802567243428E+021,3.45044208582762E+023,2.06297200577180E+004,2.09654399417689E+004,2.08702602184353E+004,1.97085585084268E+004,1.94287167621214E+004,2.07881644357967E+004,0.00000000000000E+000,0.00000000000000E+000,2.05442930922358E+004,1.65801484783761E+004,1.80779866349372E+004,0.00000000000000E+000,0.00000000000000E+000,1.83937482970989E+000,1.86605122939425E+000,1.85232469901564E+000,0.00000000000000E+000,0.00000000000000E+000,2.05303672887351E+004,2.14009995021996E+004,1.77644921313466E+004,2.06297200577180E+004,2.09654399417689E+004,2.06832019538280E+004,1.93513092958694E+004,1.85778463941899E+004,2.06943024461881E+004 -7.00000000000003E-008,1.06133952870659E+023,9.41816831486529E+022,1.36570197501947E+023,4.45457288634220E+020,7.83304108665791E+021,3.45164331896551E+023,2.06022015514185E+004,2.09418477993648E+004,2.08343701832159E+004,1.94848837978646E+004,1.92344800469095E+004,2.07542585001759E+004,0.00000000000000E+000,0.00000000000000E+000,2.05542729013236E+004,1.59720374947573E+004,1.80090081820145E+004,0.00000000000000E+000,0.00000000000000E+000,1.83945061519858E+000,1.86107499186117E+000,1.85177376126667E+000,0.00000000000000E+000,0.00000000000000E+000,2.05564474803471E+004,2.11699145921784E+004,1.79768078462396E+004,2.06022015514185E+004,2.09418477993648E+004,2.06777683472659E+004,1.90232055885323E+004,1.85361731248435E+004,2.06758533293659E+004 -7.02000000000003E-008,1.06374199498237E+023,9.41616625963548E+022,1.36440063912009E+023,4.45457288634220E+020,7.85306163895607E+021,3.45274444934191E+023,2.05834837256480E+004,2.09987380199853E+004,2.08017645427505E+004,1.96458545945299E+004,1.92740221335041E+004,2.07519941031680E+004,0.00000000000000E+000,0.00000000000000E+000,2.05764614828698E+004,1.56139008487986E+004,1.82252545913133E+004,0.00000000000000E+000,0.00000000000000E+000,1.83961885687864E+000,1.85796756552011E+000,1.85348735374380E+000,0.00000000000000E+000,0.00000000000000E+000,2.04387428875335E+004,2.02190223994887E+004,1.81057884957028E+004,2.05834837256480E+004,2.09987380199853E+004,2.06350132819319E+004,1.87206674141138E+004,1.86494722611341E+004,2.06707013428363E+004 -7.04000000000003E-008,1.06599430711591E+023,9.41766780105784E+022,1.36339961150518E+023,4.50462426708762E+020,7.82803594858337E+021,3.45394568247980E+023,2.04968205318065E+004,2.10256189137367E+004,2.07901938820854E+004,1.97820001365448E+004,1.94488800495510E+004,2.07321272740128E+004,0.00000000000000E+000,0.00000000000000E+000,2.05198467253059E+004,1.48199247869531E+004,1.81547865107378E+004,0.00000000000000E+000,0.00000000000000E+000,1.83918888449924E+000,1.85055730000357E+000,1.85293331187100E+000,0.00000000000000E+000,0.00000000000000E+000,2.04946408684389E+004,2.05171773146822E+004,1.80274396220133E+004,2.04968205318065E+004,2.10256189137367E+004,2.06310630945933E+004,1.86562157561885E+004,1.86841345539628E+004,2.06505120235981E+004 -7.06000000000003E-008,1.06809646510722E+023,9.41966985628766E+022,1.36239858389028E+023,4.45457288634220E+020,7.81802567243428E+021,3.45509686423695E+023,2.04958196364662E+004,2.09635890689512E+004,2.08089481733370E+004,2.00745799011968E+004,1.94299543051599E+004,2.07221586364670E+004,0.00000000000000E+000,0.00000000000000E+000,2.05080041434796E+004,1.54859879765223E+004,1.81992007936662E+004,0.00000000000000E+000,0.00000000000000E+000,1.83909865209197E+000,1.85682376903505E+000,1.85328299745700E+000,0.00000000000000E+000,0.00000000000000E+000,2.04572907787848E+004,1.95299746266334E+004,1.80731940354572E+004,2.04958196364662E+004,2.09635890689512E+004,2.06251841113307E+004,1.86731413598331E+004,1.87011860493954E+004,2.06314005449791E+004 -7.08000000000003E-008,1.07009852033704E+023,9.41766780105784E+022,1.36119735075239E+023,4.35447012485136E+020,7.85806677703062E+021,3.45599778909036E+023,2.05245892436010E+004,2.09618468329987E+004,2.07908755026827E+004,1.93761571966129E+004,1.94409744487596E+004,2.07225381072790E+004,0.00000000000000E+000,0.00000000000000E+000,2.04802888098954E+004,1.51628070810335E+004,1.80029941022099E+004,0.00000000000000E+000,0.00000000000000E+000,1.83888708413391E+000,1.85385016531365E+000,1.85172553145280E+000,0.00000000000000E+000,0.00000000000000E+000,2.04236979140255E+004,1.89952661744009E+004,1.80699504162560E+004,2.05245892436010E+004,2.09618468329987E+004,2.05999834731574E+004,1.81253709019109E+004,1.86521522810253E+004,2.06278405903570E+004 -7.10000000000003E-008,1.07195042142462E+023,9.41916934248020E+022,1.36029642589897E+023,4.30441874410594E+020,7.85306163895607E+021,3.45699881670527E+023,2.05497128949317E+004,2.09239216026735E+004,2.07544252070844E+004,1.89926416845504E+004,1.93808503490288E+004,2.07037335327296E+004,0.00000000000000E+000,0.00000000000000E+000,2.04921630750549E+004,1.53265377735333E+004,1.80206338513712E+004,0.00000000000000E+000,0.00000000000000E+000,1.83897779563391E+000,1.85537192594679E+000,1.85186690429858E+000,0.00000000000000E+000,0.00000000000000E+000,2.04069443457335E+004,1.84855400579105E+004,1.81431727470668E+004,2.05497128949317E+004,2.09239216026735E+004,2.05822860372670E+004,1.78524862543539E+004,1.86519548248785E+004,2.06180208569752E+004 -7.12000000000003E-008,1.07425278493891E+023,9.41916934248020E+022,1.35924534690332E+023,4.40452150559678E+020,7.83304108665791E+021,3.45814999846242E+023,2.05218024301554E+004,2.09243835969185E+004,2.07281920452834E+004,1.82976190099569E+004,1.93497929251091E+004,2.06831984635453E+004,0.00000000000000E+000,0.00000000000000E+000,2.04894841050120E+004,1.66068505954508E+004,1.81527854004200E+004,0.00000000000000E+000,0.00000000000000E+000,1.83895733899889E+000,1.86626158250724E+000,1.85291751737063E+000,0.00000000000000E+000,0.00000000000000E+000,2.03973803305592E+004,1.91759109809565E+004,1.79665532622521E+004,2.05218024301554E+004,2.09243835969185E+004,2.05672614979013E+004,1.80938935651714E+004,1.86224478893633E+004,2.06032092651527E+004 -7.14000000000003E-008,1.07550406945754E+023,9.42067088390256E+022,1.35864473033437E+023,4.35447012485136E+020,7.82803594858337E+021,3.45885071779285E+023,2.04877172342815E+004,2.09562609133217E+004,2.07000316458014E+004,1.87806185463789E+004,1.92115024680942E+004,2.06676970673993E+004,0.00000000000000E+000,0.00000000000000E+000,2.04721466256640E+004,1.63404371584297E+004,1.82056660018339E+004,0.00000000000000E+000,0.00000000000000E+000,1.83882482421065E+000,1.86413279719827E+000,1.85333376126815E+000,0.00000000000000E+000,0.00000000000000E+000,2.04255201742956E+004,1.81158239408996E+004,1.79533033994827E+004,2.04877172342815E+004,2.09562609133217E+004,2.05584775630474E+004,1.79242232024912E+004,1.85723173691261E+004,2.05965501703707E+004 -7.16000000000003E-008,1.07815679263705E+023,9.42217242532493E+022,1.35739344581573E+023,4.35447012485136E+020,7.81302053435974E+021,3.46025215645372E+023,2.04506889130346E+004,2.09536238121101E+004,2.06912710856189E+004,1.82231089212255E+004,1.92787532316236E+004,2.06527479134919E+004,0.00000000000000E+000,0.00000000000000E+000,2.04659605843187E+004,1.70468795857665E+004,1.83752574614634E+004,0.00000000000000E+000,0.00000000000000E+000,1.83877748995461E+000,1.86963532624901E+000,1.85465294163983E+000,0.00000000000000E+000,0.00000000000000E+000,2.03814967519332E+004,1.93552552481170E+004,1.77415386401124E+004,2.04506889130346E+004,2.09536238121101E+004,2.05400972030161E+004,1.82325959948973E+004,1.85857786475927E+004,2.05778102034440E+004 -7.18000000000003E-008,1.08125997824326E+023,9.42417448055474E+022,1.35579180163188E+023,4.20431598261511E+020,7.82303081050882E+021,3.46190385201832E+023,2.04142088403062E+004,2.09756332511915E+004,2.06703783978419E+004,1.84094417562319E+004,1.91816544906237E+004,2.06370795492204E+004,0.00000000000000E+000,0.00000000000000E+000,2.03700898393476E+004,1.63432406878630E+004,1.82182356576686E+004,0.00000000000000E+000,0.00000000000000E+000,1.83804034002705E+000,1.86415555146098E+000,1.85343235584988E+000,0.00000000000000E+000,0.00000000000000E+000,2.04229835277934E+004,1.93939491034430E+004,1.77741149045352E+004,2.04142088403062E+004,2.09756332511915E+004,2.05173035149502E+004,1.81351610404909E+004,1.85103542471065E+004,2.05616277544555E+004 -7.20000000000003E-008,1.08356234175755E+023,9.42517550816965E+022,1.35464061987474E+023,4.15426460186969E+020,7.82303081050882E+021,3.46310508515621E+023,2.04056902165232E+004,2.09284753631393E+004,2.06674809988593E+004,1.80217185477397E+004,1.92063274637055E+004,2.06204213374593E+004,0.00000000000000E+000,0.00000000000000E+000,2.03394132293149E+004,1.64173591413549E+004,1.83674571540892E+004,0.00000000000000E+000,0.00000000000000E+000,1.83780304317760E+000,1.86475436792742E+000,1.85459278685618E+000,0.00000000000000E+000,0.00000000000000E+000,2.04192942645310E+004,1.93258459822535E+004,1.77483637483389E+004,2.04056902165232E+004,2.09284753631393E+004,2.05067133653150E+004,1.79658561932838E+004,1.85539633634441E+004,2.05427312091767E+004 -7.22000000000003E-008,1.08621506493706E+023,9.42467499436220E+022,1.35343938673685E+023,4.30441874410594E+020,7.79800512013612E+021,3.46440642105559E+023,2.03550012364955E+004,2.08914064806154E+004,2.06169175894486E+004,1.80410891548877E+004,1.89245534717688E+004,2.05681765661186E+004,0.00000000000000E+000,0.00000000000000E+000,2.03839624249105E+004,1.85291645877184E+004,1.81439510981531E+004,0.00000000000000E+000,0.00000000000000E+000,1.83814742282080E+000,1.87984629476692E+000,1.85284774884510E+000,0.00000000000000E+000,0.00000000000000E+000,2.04733309462803E+004,2.01794773802480E+004,1.78396865644655E+004,2.03550012364955E+004,2.08914064806154E+004,2.05123016492778E+004,1.87960890519995E+004,1.83968792408751E+004,2.05163669514467E+004 -7.24000000000003E-008,1.08886778811657E+023,9.42517550816965E+022,1.35203794807597E+023,4.20431598261511E+020,7.81302053435974E+021,3.46575780833572E+023,2.03377560846173E+004,2.08718135589061E+004,2.05959967866587E+004,1.83163030983435E+004,1.89780510523277E+004,2.05506321572926E+004,0.00000000000000E+000,0.00000000000000E+000,2.03074838923034E+004,1.62890388432289E+004,1.80869751957309E+004,0.00000000000000E+000,0.00000000000000E+000,1.83755531689564E+000,1.86371427914752E+000,1.85239619027600E+000,0.00000000000000E+000,0.00000000000000E+000,2.05252571966605E+004,2.01656064208964E+004,1.78058148592183E+004,2.03377560846173E+004,2.08718135589061E+004,2.04977690500067E+004,1.83047008241931E+004,1.83950290265588E+004,2.04991548044037E+004 -7.26000000000003E-008,1.09016912401595E+023,9.42517550816965E+022,1.35138728012628E+023,4.20431598261511E+020,7.81302053435974E+021,3.46640847628541E+023,2.03530575069651E+004,2.08869855397908E+004,2.05352574110762E+004,1.93086881668677E+004,1.90419337300812E+004,2.05384453371751E+004,0.00000000000000E+000,0.00000000000000E+000,2.02849956498780E+004,1.59096092142948E+004,1.83014307028034E+004,0.00000000000000E+000,0.00000000000000E+000,1.83738038581033E+000,1.86054314012428E+000,1.85408160067493E+000,0.00000000000000E+000,0.00000000000000E+000,2.05335840408920E+004,2.01052031370688E+004,1.78235986330351E+004,2.03530575069651E+004,2.08869855397908E+004,2.04675161467941E+004,1.86190775936351E+004,1.84861155396708E+004,2.04986721211970E+004 -7.28000000000003E-008,1.09192092234204E+023,9.42667704959201E+022,1.35053640665361E+023,4.15426460186969E+020,7.80801539628520E+021,3.46735945251957E+023,2.03323824926849E+004,2.08805701391313E+004,2.05385734793216E+004,1.94119476573165E+004,1.90700571315406E+004,2.05322005230398E+004,0.00000000000000E+000,0.00000000000000E+000,2.02700412605177E+004,1.55396193719836E+004,1.81944779582885E+004,0.00000000000000E+000,0.00000000000000E+000,1.83726385036189E+000,1.85730557459998E+000,1.85324589228464E+000,0.00000000000000E+000,0.00000000000000E+000,2.05054634977594E+004,2.00143726036836E+004,1.79177482344593E+004,2.03323824926849E+004,2.08805701391313E+004,2.04567301405771E+004,1.85388281859496E+004,1.84970029376464E+004,2.04863720648734E+004 -7.30000000000003E-008,1.09437343999856E+023,9.42517550816965E+022,1.34918501937349E+023,4.10421322112427E+020,7.83304108665791E+021,3.46851063427672E+023,2.03176566761299E+004,2.08468351772128E+004,2.05143644026443E+004,1.93823475388226E+004,1.88958157578132E+004,2.05047522683230E+004,0.00000000000000E+000,0.00000000000000E+000,2.02551728051021E+004,1.56603853372111E+004,1.80738838096905E+004,0.00000000000000E+000,0.00000000000000E+000,1.83714781900754E+000,1.85837871818620E+000,1.85229204384721E+000,0.00000000000000E+000,0.00000000000000E+000,2.05261820941107E+004,2.02245066535469E+004,1.81367856895645E+004,2.03176566761299E+004,2.08468351772128E+004,2.04481762921666E+004,1.86194125463229E+004,1.84520929676675E+004,2.04680828569029E+004 -7.32000000000003E-008,1.09712626593956E+023,9.42467499436220E+022,1.34783363209336E+023,4.15426460186969E+020,7.82803594858337E+021,3.46986202155684E+023,2.03216496634157E+004,2.07911550078636E+004,2.05078862914981E+004,1.89319178994321E+004,1.87904397608298E+004,2.04853082008985E+004,0.00000000000000E+000,0.00000000000000E+000,2.02943324955322E+004,1.64447859626521E+004,1.82460183202285E+004,0.00000000000000E+000,0.00000000000000E+000,1.83745306075754E+000,1.86497461890886E+000,1.85364980979167E+000,0.00000000000000E+000,0.00000000000000E+000,2.04534445891873E+004,1.92366749541103E+004,1.80380371004351E+004,2.03216496634157E+004,2.07911550078636E+004,2.04345726648887E+004,1.83450368036858E+004,1.84236319882741E+004,2.04478523958875E+004 -7.34000000000003E-008,1.09837755045820E+023,9.42917961862929E+022,1.34738316966665E+023,4.10421322112427E+020,7.79299998206157E+021,3.47071289502952E+023,2.03236593108958E+004,2.07744149932015E+004,2.05087904783941E+004,1.88419310293966E+004,1.87633771400705E+004,2.04812045031856E+004,0.00000000000000E+000,0.00000000000000E+000,2.02463781230337E+004,1.68264053592704E+004,1.82094002759120E+004,0.00000000000000E+000,0.00000000000000E+000,1.83707910868563E+000,1.86796646725814E+000,1.85336306621780E+000,0.00000000000000E+000,0.00000000000000E+000,2.04646747989742E+004,1.80630291789802E+004,1.80780104592960E+004,2.03236593108958E+004,2.07744149932015E+004,2.04253771368680E+004,1.80669217028511E+004,1.84135556585650E+004,2.04400509625923E+004 -7.36000000000003E-008,1.10007929740354E+023,9.43118167385910E+022,1.34663239895547E+023,4.10421322112427E+020,7.77297942976341E+021,3.47166387126368E+023,2.03096732398558E+004,2.07815184066651E+004,2.04663535239679E+004,1.86388721927859E+004,1.87750514864656E+004,2.04622955439034E+004,0.00000000000000E+000,0.00000000000000E+000,2.02307286790641E+004,1.66043269254951E+004,1.80462168536040E+004,0.00000000000000E+000,0.00000000000000E+000,1.83695670071346E+000,1.86624172987693E+000,1.85207145990510E+000,0.00000000000000E+000,0.00000000000000E+000,2.04935708903222E+004,1.80735899081608E+004,1.81088436729008E+004,2.03096732398558E+004,2.07815184066651E+004,2.04110075679298E+004,1.79212280954406E+004,1.83835976808043E+004,2.04312142959091E+004 -7.38000000000003E-008,1.10183109572963E+023,9.43468527051128E+022,1.34588162824429E+023,4.05416184037885E+020,7.74795373939070E+021,3.47271495025933E+023,2.02680413836884E+004,2.07458810004325E+004,2.04857833298705E+004,1.91705003746807E+004,1.88291782866757E+004,2.04488651706759E+004,0.00000000000000E+000,0.00000000000000E+000,2.01831865037140E+004,1.65148760685063E+004,1.79567126241213E+004,0.00000000000000E+000,0.00000000000000E+000,1.83658370199930E+000,1.86553423343087E+000,1.85135332586356E+000,0.00000000000000E+000,0.00000000000000E+000,2.05173356422485E+004,1.77229243659300E+004,1.82742441671316E+004,2.02680413836884E+004,2.07458810004325E+004,2.04137239803601E+004,1.80272084173586E+004,1.84314305256789E+004,2.04107290841576E+004 -7.40000000000003E-008,1.10318248300976E+023,9.43918989477837E+022,1.34528101167534E+023,3.90400769814260E+020,7.73293832516707E+021,3.47361587511275E+023,2.02375246467662E+004,2.07533848901145E+004,2.04830499804430E+004,1.74615507492834E+004,1.88936045048559E+004,2.04397545233474E+004,0.00000000000000E+000,0.00000000000000E+000,2.01751563334745E+004,1.52695113500074E+004,1.80263492929914E+004,0.00000000000000E+000,0.00000000000000E+000,1.83652053178786E+000,1.85484551313889E+000,1.85191265263838E+000,0.00000000000000E+000,0.00000000000000E+000,2.04994361513051E+004,1.74901751798655E+004,1.83076015717620E+004,2.02375246467662E+004,2.07533848901145E+004,2.04051330547110E+004,1.68767606799050E+004,1.84881576016417E+004,2.03998951521467E+004 -7.42000000000003E-008,1.10468402443212E+023,9.44319400523800E+022,1.34448018958342E+023,3.65375079441551E+020,7.74294860131616E+021,3.47456685134691E+023,2.02170777022219E+004,2.07489300466887E+004,2.04781469870629E+004,1.69668632693039E+004,1.89243220671674E+004,2.04304188530635E+004,0.00000000000000E+000,0.00000000000000E+000,2.01759608260786E+004,1.48064067922495E+004,1.81980697800251E+004,0.00000000000000E+000,0.00000000000000E+000,1.83652686261620E+000,1.85042443928010E+000,1.85327411330418E+000,0.00000000000000E+000,0.00000000000000E+000,2.04584311378305E+004,1.61848795218474E+004,1.83970433100977E+004,2.02170777022219E+004,2.07489300466887E+004,2.03912015668856E+004,1.61549823399757E+004,1.85740512275744E+004,2.03881159983603E+004 -7.44000000000003E-008,1.10658597690045E+023,9.44319400523800E+022,1.34347916196851E+023,3.60369941367009E+020,7.75295887746524E+021,3.47551782758108E+023,2.02083032797857E+004,2.07081402693959E+004,2.04782286615512E+004,1.71830867531299E+004,1.89476193537167E+004,2.04171937676805E+004,0.00000000000000E+000,0.00000000000000E+000,2.01476013037170E+004,1.46174963516106E+004,1.83905973294724E+004,0.00000000000000E+000,0.00000000000000E+000,1.83630339563311E+000,1.84854273376914E+000,1.85477109539624E+000,0.00000000000000E+000,0.00000000000000E+000,2.04499057035533E+004,1.54611342532176E+004,1.84830793903964E+004,2.02083032797857E+004,2.07081402693959E+004,2.03811326116158E+004,1.59877217225498E+004,1.86613620521380E+004,2.03720357006762E+004 -7.46000000000003E-008,1.10838782660728E+023,9.44219297762310E+022,1.34257823711509E+023,3.65375079441551E+020,7.75295887746524E+021,3.47636870105375E+023,2.01568084108681E+004,2.06459078870803E+004,2.05219435789207E+004,1.70885119759603E+004,1.91971249693415E+004,2.04060411924264E+004,0.00000000000000E+000,0.00000000000000E+000,2.01452081607166E+004,1.51807338136985E+004,1.80947681542606E+004,0.00000000000000E+000,0.00000000000000E+000,1.83628451024394E+000,1.85401833992453E+000,1.85245811625517E+000,0.00000000000000E+000,0.00000000000000E+000,2.04382924021141E+004,1.63878182273597E+004,1.85494320475206E+004,2.01568084108681E+004,2.06459078870803E+004,2.03962765202671E+004,1.63679940325262E+004,1.87100799387661E+004,2.03458890998274E+004 -7.48000000000003E-008,1.11038988183710E+023,9.44719811569764E+022,1.34187751778466E+023,3.70380217516093E+020,7.69289722057074E+021,3.47761998557238E+023,2.01338516546902E+004,2.06063894958818E+004,2.04699241146318E+004,1.72556375758697E+004,1.90820599752358E+004,2.03655648244830E+004,0.00000000000000E+000,0.00000000000000E+000,2.01679569336126E+004,1.56979064736800E+004,1.79937773548939E+004,0.00000000000000E+000,0.00000000000000E+000,1.83646385542211E+000,1.85870885947493E+000,1.85165155700345E+000,0.00000000000000E+000,0.00000000000000E+000,2.04968844394024E+004,1.63201575804308E+004,1.85047526343411E+004,2.01338516546902E+004,2.06063894958818E+004,2.03966945657727E+004,1.65607066947298E+004,1.86194364947750E+004,2.03263345114537E+004 -7.50000000000003E-008,1.11279234811288E+023,9.44319400523800E+022,1.34057618188527E+023,3.80390493665176E+020,7.71291777286890E+021,3.47862101318729E+023,2.01329559177664E+004,2.06260292969574E+004,2.04219077931024E+004,1.72821413140571E+004,1.89404192681016E+004,2.03486037730085E+004,0.00000000000000E+000,0.00000000000000E+000,2.01688324619529E+004,1.54331386619021E+004,1.79059326224259E+004,0.00000000000000E+000,0.00000000000000E+000,1.83647075000545E+000,1.85634579801878E+000,1.85094278779395E+000,0.00000000000000E+000,0.00000000000000E+000,2.04870424788972E+004,1.68809151445287E+004,1.83923054348257E+004,2.01329559177664E+004,2.06260292969574E+004,2.03729796130741E+004,1.66644885923794E+004,1.85009172381330E+004,2.03193278401600E+004 -7.52000000000003E-008,1.11534496853089E+023,9.44569657427528E+022,1.33932489736664E+023,3.70380217516093E+020,7.70791263479436E+021,3.48002245184816E+023,2.01480398112895E+004,2.05958919006677E+004,2.04255824715924E+004,1.66439063410702E+004,1.88154168474303E+004,2.03431682244214E+004,0.00000000000000E+000,0.00000000000000E+000,2.01202057673229E+004,1.47132409094560E+004,1.77991068762690E+004,0.00000000000000E+000,0.00000000000000E+000,1.83608694421657E+000,1.84950230479024E+000,1.85007169882260E+000,0.00000000000000E+000,0.00000000000000E+000,2.04565131439541E+004,1.85299544174343E+004,1.83892709915899E+004,2.01480398112895E+004,2.05958919006677E+004,2.03526113641263E+004,1.66732991317023E+004,1.84165103619657E+004,2.03062803821428E+004 -7.54000000000003E-008,1.11774743480667E+023,9.45170273996472E+022,1.33837392113248E+023,3.65375079441551E+020,7.65786125404895E+021,3.48152399327053E+023,2.01699244726803E+004,2.05382147493579E+004,2.04355002388223E+004,1.67551288282424E+004,1.87075896273524E+004,2.03362528726864E+004,0.00000000000000E+000,0.00000000000000E+000,2.01669423271305E+004,1.50247685608356E+004,1.77186037930230E+004,0.00000000000000E+000,0.00000000000000E+000,1.83645586490389E+000,1.85254210909510E+000,1.84940850043114E+000,0.00000000000000E+000,0.00000000000000E+000,2.03437848544714E+004,1.83079453660231E+004,1.82927960073503E+004,2.01699244726803E+004,2.05382147493579E+004,2.03365270962956E+004,1.67405456002777E+004,1.83194355190595E+004,2.02896524012521E+004 -7.56000000000003E-008,1.11984959279798E+023,9.45770890565417E+022,1.33762315042129E+023,3.65375079441551E+020,7.59779959715444E+021,3.48287538055065E+023,2.01629459535654E+004,2.04976382041794E+004,2.04522038534903E+004,1.68336535440578E+004,1.87103431762811E+004,2.03297420444642E+004,0.00000000000000E+000,0.00000000000000E+000,2.01064701360126E+004,1.51807338136985E+004,1.76947193525760E+004,0.00000000000000E+000,0.00000000000000E+000,1.83597820394402E+000,1.85401833992453E+000,1.84921060696756E+000,0.00000000000000E+000,0.00000000000000E+000,2.03463529256891E+004,1.82520896975993E+004,1.81871954612322E+004,2.01629459535654E+004,2.04976382041794E+004,2.03283793765820E+004,1.68004363601906E+004,1.82833745888928E+004,2.02728373177167E+004 -7.58000000000003E-008,1.12250231597749E+023,9.46121250230635E+022,1.33637186590266E+023,3.55364803292467E+020,7.58278418293082E+021,3.48437692197302E+023,2.01044203977160E+004,2.04953291392345E+004,2.04371176252160E+004,1.66341421839653E+004,1.86146689476531E+004,2.03022053999447E+004,0.00000000000000E+000,0.00000000000000E+000,2.01000986333315E+004,1.52892469412237E+004,1.75659648209149E+004,0.00000000000000E+000,0.00000000000000E+000,1.83592771398832E+000,1.85502812582093E+000,1.84813480056818E+000,0.00000000000000E+000,0.00000000000000E+000,2.03724057598116E+004,1.84762568011437E+004,1.79269763783721E+004,2.01044203977160E+004,2.04953291392345E+004,2.03276714359857E+004,1.68076514257886E+004,1.81308099368154E+004,2.02498763305110E+004 -7.60000000000003E-008,1.12515503915700E+023,9.46271404372872E+022,1.33507053000328E+023,3.50359665217926E+020,7.57777904485628E+021,3.48577836063389E+023,2.00566161315880E+004,2.05126641035243E+004,2.04381830445147E+004,1.64027312097275E+004,1.85033977068382E+004,2.02891216475439E+004,0.00000000000000E+000,0.00000000000000E+000,2.00839519582934E+004,1.48090806851514E+004,1.75712699608958E+004,0.00000000000000E+000,0.00000000000000E+000,1.83579962304834E+000,1.85045073818734E+000,1.84817943049368E+000,0.00000000000000E+000,0.00000000000000E+000,2.03263786716946E+004,1.85735940424392E+004,1.80880787693213E+004,2.00566161315880E+004,2.05126641035243E+004,2.03103404966947E+004,1.66060395654894E+004,1.81305428148785E+004,2.02322561193997E+004 -7.62000000000003E-008,1.12750745405203E+023,9.46421558515108E+022,1.33391934824613E+023,3.45354527143384E+020,7.57277390678173E+021,3.48702964515252E+023,2.00429520979874E+004,2.04279097606716E+004,2.04199300921318E+004,1.61956635464928E+004,1.83017206839331E+004,2.02500177789376E+004,0.00000000000000E+000,0.00000000000000E+000,2.00824145617418E+004,1.48430273350243E+004,1.75675128774564E+004,0.00000000000000E+000,0.00000000000000E+000,1.83578741652175E+000,1.85078381670741E+000,1.84814782642994E+000,0.00000000000000E+000,0.00000000000000E+000,2.03811223141443E+004,1.84336875738073E+004,1.82149764870470E+004,2.00429520979874E+004,2.04279097606716E+004,2.03179341877740E+004,1.64836029848590E+004,1.80782423078453E+004,2.02064324280812E+004 -7.64000000000003E-008,1.13011012585079E+023,9.46021147469145E+022,1.33236775544303E+023,3.40349389068842E+020,7.62282528752715E+021,3.48813077552892E+023,2.00145897181748E+004,2.04059632775415E+004,2.04297700963692E+004,1.64078675071869E+004,1.83841353062227E+004,2.02401714164339E+004,0.00000000000000E+000,0.00000000000000E+000,2.01206706232081E+004,1.52128435580089E+004,1.73237524157168E+004,0.00000000000000E+000,0.00000000000000E+000,1.83609062180069E+000,1.85431860361690E+000,1.84606886278251E+000,0.00000000000000E+000,0.00000000000000E+000,2.02933448967201E+004,1.90552654015867E+004,1.82679286978606E+004,2.00145897181748E+004,2.04059632775415E+004,2.03068365237081E+004,1.68570501066719E+004,1.80642505522992E+004,2.01866618991691E+004 -7.66000000000003E-008,1.13236243798434E+023,9.46271404372872E+022,1.33131667644737E+023,3.35344250994300E+020,7.60780987330353E+021,3.48938206004756E+023,2.00242018474189E+004,2.03255920619704E+004,2.03830837200098E+004,1.66907262616636E+004,1.83437464438807E+004,2.02030180050833E+004,0.00000000000000E+000,0.00000000000000E+000,2.01603520188778E+004,1.66470031538049E+004,1.69743820581833E+004,0.00000000000000E+000,0.00000000000000E+000,1.83640394403124E+000,1.86657665500498E+000,1.84298801124824E+000,0.00000000000000E+000,0.00000000000000E+000,2.03149430972914E+004,1.86111969192291E+004,1.84464706105010E+004,2.00242018474189E+004,2.03255920619704E+004,2.03033185943208E+004,1.72382085037758E+004,1.80049655182354E+004,2.01657247255641E+004 -7.68000000000003E-008,1.13481495564086E+023,9.46721866799580E+022,1.33041575159395E+023,3.45354527143384E+020,7.54274307833448E+021,3.49083355008917E+023,1.99742193199579E+004,2.03869001724348E+004,2.03470007527102E+004,1.69651610567194E+004,1.81165752244211E+004,2.01850970447618E+004,0.00000000000000E+000,0.00000000000000E+000,2.01516755660722E+004,1.66248454248225E+004,1.70750009611524E+004,0.00000000000000E+000,0.00000000000000E+000,1.83633553749349E+000,1.86640296957206E+000,1.84388786071863E+000,0.00000000000000E+000,0.00000000000000E+000,2.03000446928308E+004,1.95492252184099E+004,1.81823306221667E+004,1.99742193199579E+004,2.03869001724348E+004,2.02807964684313E+004,1.76253265374674E+004,1.78551689329979E+004,2.01548703053050E+004 -7.70000000000003E-008,1.13621639430173E+023,9.47222380607035E+022,1.32996528916725E+023,3.45354527143384E+020,7.49269169758907E+021,3.49178452632334E+023,1.99422186922267E+004,2.03792482788704E+004,2.03459088303832E+004,1.76822694366717E+004,1.82352565516673E+004,2.01756683289344E+004,0.00000000000000E+000,0.00000000000000E+000,2.01815099235583E+004,1.76804421648366E+004,1.72225515595395E+004,0.00000000000000E+000,0.00000000000000E+000,1.83657051702763E+000,1.87420455373535E+000,1.84518894390214E+000,0.00000000000000E+000,0.00000000000000E+000,2.02416290202790E+004,1.89907735037616E+004,1.80865131193163E+004,1.99422186922267E+004,2.03792482788704E+004,2.02712383791323E+004,1.80624710196411E+004,1.79188125590526E+004,2.01408133037300E+004 -7.72000000000003E-008,1.13846870643528E+023,9.47372534749271E+022,1.32886415879085E+023,3.40349389068842E+020,7.48768655951452E+021,3.49298575946123E+023,2.00070469968730E+004,2.02796503084424E+004,2.03066182110563E+004,1.69492834531705E+004,1.84198969493764E+004,2.01579489689302E+004,0.00000000000000E+000,0.00000000000000E+000,2.01441213428430E+004,1.83595005381828E+004,1.70478958583012E+004,0.00000000000000E+000,0.00000000000000E+000,1.83627593222787E+000,1.87875929855526E+000,1.84364647164500E+000,0.00000000000000E+000,0.00000000000000E+000,2.02735977648009E+004,1.88271565039660E+004,1.79640992342832E+004,2.00070469968730E+004,2.02796503084424E+004,2.02533099502011E+004,1.78804404082314E+004,1.79170830744783E+004,2.01277972922865E+004 -7.74000000000003E-008,1.14097127547255E+023,9.48073254079707E+022,1.32796323393743E+023,3.40349389068842E+020,7.41761462647094E+021,3.49458740364508E+023,2.00092108230573E+004,2.02490616508140E+004,2.02988754200574E+004,1.69020395199970E+004,1.84275788256994E+004,2.01477580759688E+004,0.00000000000000E+000,0.00000000000000E+000,2.01504169135076E+004,1.85268297880256E+004,1.68781202612267E+004,0.00000000000000E+000,0.00000000000000E+000,1.83632560932828E+000,1.87983146849919E+000,1.84211737215400E+000,0.00000000000000E+000,0.00000000000000E+000,2.02123222944742E+004,1.83060182600749E+004,1.79342783020221E+004,2.00092108230573E+004,2.02490616508140E+004,2.02336760082479E+004,1.77541373341003E+004,1.78662196180900E+004,2.01118963960999E+004 -7.76000000000003E-008,1.14287322794087E+023,9.47873048556725E+022,1.32686210356103E+023,3.35344250994300E+020,7.44764545491819E+021,3.49543827711775E+023,2.00152217907999E+004,2.02165253955003E+004,2.03047901593865E+004,1.68669794754815E+004,1.83763155668231E+004,2.01417896619949E+004,0.00000000000000E+000,0.00000000000000E+000,2.00724013752562E+004,1.80398158282435E+004,1.70514074131975E+004,0.00000000000000E+000,0.00000000000000E+000,1.83570787005227E+000,1.87665681323524E+000,1.84367778644107E+000,0.00000000000000E+000,0.00000000000000E+000,2.02283929853137E+004,1.91957131825822E+004,1.79666621983211E+004,2.00152217907999E+004,2.02165253955003E+004,2.02200305003871E+004,1.78643360300825E+004,1.78996697382628E+004,2.01004161112436E+004 -7.78000000000003E-008,1.14447487212473E+023,9.48073254079707E+022,1.32616138423059E+023,3.35344250994300E+020,7.42762490262002E+021,3.49633920197117E+023,2.00247999942702E+004,2.01863257229390E+004,2.03243636784837E+004,1.66624051873557E+004,1.82890627819474E+004,2.01421250999064E+004,0.00000000000000E+000,0.00000000000000E+000,1.99930671521570E+004,1.81756836154107E+004,1.70716725731666E+004,0.00000000000000E+000,0.00000000000000E+000,1.83507489305689E+000,1.87755922198850E+000,1.84385825931728E+000,0.00000000000000E+000,0.00000000000000E+000,2.02439730047287E+004,1.86701243367855E+004,1.78830736434028E+004,2.00247999942702E+004,2.01863257229390E+004,2.02118944960450E+004,1.76593734351854E+004,1.78424326571636E+004,2.00909335504043E+004 -7.80000000000003E-008,1.14617661907007E+023,9.47873048556725E+022,1.32526045937718E+023,3.40349389068842E+020,7.43763517876911E+021,3.49708997268235E+023,2.00224409358283E+004,2.01397571755881E+004,2.03367989484245E+004,1.63634473318960E+004,1.82321438673641E+004,2.01317312377789E+004,0.00000000000000E+000,0.00000000000000E+000,1.99769204428559E+004,1.89618683516504E+004,1.71871224225241E+004,0.00000000000000E+000,0.00000000000000E+000,1.83494546740392E+000,1.88253228794607E+000,1.84487851509803E+000,0.00000000000000E+000,0.00000000000000E+000,2.02482563146978E+004,1.87891631981868E+004,1.75366676339441E+004,2.00224409358283E+004,2.01397571755881E+004,2.02142752642113E+004,1.77790662919423E+004,1.77472718464916E+004,2.00763649883968E+004 -7.82000000000003E-008,1.14792841739616E+023,9.48223408221943E+022,1.32450968866600E+023,3.35344250994300E+020,7.41260948839640E+021,3.49814105167801E+023,2.00217457288417E+004,2.00979721130800E+004,2.03436830757382E+004,1.63674979862121E+004,1.82468266726800E+004,2.01231900798939E+004,0.00000000000000E+000,0.00000000000000E+000,2.00079002063040E+004,1.90587622618048E+004,1.72982086116121E+004,0.00000000000000E+000,0.00000000000000E+000,1.83519361037236E+000,1.88311738580686E+000,1.84584770949390E+000,0.00000000000000E+000,0.00000000000000E+000,2.01736463579563E+004,1.82101034984734E+004,1.74960412297309E+004,2.00217457288417E+004,2.00979721130800E+004,2.02037748205323E+004,1.76391859556402E+004,1.77717101496241E+004,2.00613675757916E+004 -7.84000000000003E-008,1.15008062676821E+023,9.47973151318216E+022,1.32340855828960E+023,3.45354527143384E+020,7.41761462647094E+021,3.49909202791217E+023,2.00022318790273E+004,2.01175292589155E+004,2.02845489554667E+004,1.59674383995805E+004,1.83706896117937E+004,2.01016759042468E+004,0.00000000000000E+000,0.00000000000000E+000,2.00760840452594E+004,1.93624512456257E+004,1.72874135179887E+004,0.00000000000000E+000,0.00000000000000E+000,1.83573713476442E+000,1.88491405652910E+000,1.84575405667405E+000,0.00000000000000E+000,0.00000000000000E+000,2.01190922258292E+004,1.87541287113175E+004,1.73593295929116E+004,2.00022318790273E+004,2.01175292589155E+004,2.01801563753880E+004,1.77064126207224E+004,1.77831456759315E+004,2.00514542606829E+004 -7.86000000000003E-008,1.15233293890176E+023,9.47923099937470E+022,1.32225737653245E+023,3.45354527143384E+020,7.42261976454548E+021,3.50019315828857E+023,2.00410658076320E+004,2.00959480473124E+004,2.02410281550814E+004,1.62905969564060E+004,1.83527432391644E+004,2.00919646137930E+004,0.00000000000000E+000,0.00000000000000E+000,2.00734962151189E+004,1.84720238184499E+004,1.70378897974297E+004,0.00000000000000E+000,0.00000000000000E+000,1.83571657139694E+000,1.87948239020700E+000,1.84355717236192E+000,0.00000000000000E+000,0.00000000000000E+000,2.00799448922771E+004,1.94740514046487E+004,1.74952967225463E+004,2.00410658076320E+004,2.00959480473124E+004,2.01489079395255E+004,1.78120576820154E+004,1.77479553456598E+004,2.00458405002176E+004 -7.88000000000003E-008,1.15508576484276E+023,9.47572740272252E+022,1.32075583511009E+023,3.50359665217926E+020,7.44764545491819E+021,3.50139439142646E+023,2.00222963909436E+004,2.01168845051753E+004,2.01850005908283E+004,1.64363925354967E+004,1.83245180102806E+004,2.00695671483466E+004,0.00000000000000E+000,0.00000000000000E+000,2.00357146000048E+004,1.86788570749150E+004,1.70348064113676E+004,0.00000000000000E+000,0.00000000000000E+000,1.83541576497013E+000,1.88078928731104E+000,1.84352963407621E+000,0.00000000000000E+000,0.00000000000000E+000,2.00892670042084E+004,2.01894689733843E+004,1.77217907771259E+004,2.00222963909436E+004,2.01168845051753E+004,2.01169039233700E+004,1.81402313930981E+004,1.78009466648047E+004,2.00344487839043E+004 -7.90000000000003E-008,1.15738812835704E+023,9.47973151318216E+022,1.31975480749518E+023,3.45354527143384E+020,7.41761462647094E+021,3.50274577870658E+023,2.00044226616601E+004,2.01008439199249E+004,2.01942972626494E+004,1.67715359855368E+004,1.82097635335336E+004,2.00608660565115E+004,0.00000000000000E+000,0.00000000000000E+000,2.00392455296358E+004,1.80432617835756E+004,1.71059221363669E+004,0.00000000000000E+000,0.00000000000000E+000,1.83544392383922E+000,1.87667986493328E+000,1.84416232662053E+000,0.00000000000000E+000,0.00000000000000E+000,2.00218490542040E+004,1.94353130273898E+004,1.77605118388440E+004,2.00044226616601E+004,2.01008439199249E+004,2.01022059244503E+004,1.78933238881465E+004,1.77810527624308E+004,2.00181955450568E+004 -7.92000000000003E-008,1.15929008082537E+023,9.47672843033743E+022,1.31865367711878E+023,3.45354527143384E+020,7.44764545491819E+021,3.50354660079851E+023,1.99989444688692E+004,2.01261637785462E+004,2.01576942767662E+004,1.65641587047822E+004,1.83269845797655E+004,2.00541783481471E+004,0.00000000000000E+000,0.00000000000000E+000,2.00452143381683E+004,1.76804421648366E+004,1.71436339417776E+004,0.00000000000000E+000,0.00000000000000E+000,1.83549150270289E+000,1.87420455373535E+000,1.84449576574283E+000,0.00000000000000E+000,0.00000000000000E+000,1.99840883984188E+004,1.91615776865535E+004,1.75330093082336E+004,1.99989444688692E+004,2.01261637785462E+004,2.00766953130491E+004,1.76242059365272E+004,1.77760841316867E+004,2.00130263987501E+004 -7.94000000000003E-008,1.16144229019742E+023,9.48023202698961E+022,1.31770270088462E+023,3.40349389068842E+020,7.42261976454548E+021,3.50479788531715E+023,1.99654053581000E+004,2.00921087611919E+004,2.01071335984567E+004,1.82932311702960E+004,1.80647491045742E+004,2.00110866598406E+004,0.00000000000000E+000,0.00000000000000E+000,2.00779022862185E+004,1.72884962857187E+004,1.72766329546892E+004,0.00000000000000E+000,0.00000000000000E+000,1.83575157976049E+000,1.87141645727248E+000,1.84566041636218E+000,0.00000000000000E+000,0.00000000000000E+000,2.00176268953307E+004,1.81248628754431E+004,1.77334792349937E+004,1.99654053581000E+004,2.00921087611919E+004,2.00730956684417E+004,1.79705882331832E+004,1.77554824463218E+004,1.99914262754379E+004 -7.96000000000003E-008,1.16379470509246E+023,9.48073254079707E+022,1.31650146774673E+023,3.35344250994300E+020,7.42762490262002E+021,3.50599911845504E+023,1.99587593178273E+004,2.00968138060940E+004,2.00662250675383E+004,1.82350596564542E+004,1.80065846785287E+004,1.99934381764580E+004,0.00000000000000E+000,0.00000000000000E+000,2.00537647171226E+004,1.63751952349436E+004,1.72621680394576E+004,0.00000000000000E+000,0.00000000000000E+000,1.83555961203309E+000,1.86441436671130E+000,1.84553459502111E+000,0.00000000000000E+000,0.00000000000000E+000,2.00233947987924E+004,1.84727093096098E+004,1.76895650774326E+004,1.99587593178273E+004,2.00968138060940E+004,2.00503474716096E+004,1.77991508547071E+004,1.77132714485922E+004,1.99808452240732E+004 -7.98000000000003E-008,1.16574670894153E+023,9.48423613744925E+022,1.31570064565480E+023,3.35344250994300E+020,7.39258893609823E+021,3.50715030021218E+023,1.99434299405326E+004,2.00453386270616E+004,2.00642900896976E+004,1.83080763364999E+004,1.78631949426858E+004,1.99709169559719E+004,0.00000000000000E+000,0.00000000000000E+000,2.00943663813033E+004,1.67829019014498E+004,1.74604552286163E+004,0.00000000000000E+000,0.00000000000000E+000,1.83588226312483E+000,1.86763211459018E+000,1.84724171411678E+000,0.00000000000000E+000,0.00000000000000E+000,1.99858870809762E+004,1.87302848059310E+004,1.75565953679141E+004,1.99434299405326E+004,2.00453386270616E+004,2.00494288789229E+004,1.80162657410937E+004,1.76649900587387E+004,1.99608848946182E+004 -8.00000000000003E-008,1.16744845588687E+023,9.48623819267906E+022,1.31494987494362E+023,3.35344250994300E+020,7.37256838380006E+021,3.50810127644634E+023,1.99179220065240E+004,2.00256830081643E+004,2.00820588373835E+004,1.78994126657177E+004,1.76999448614627E+004,1.99600432310057E+004,0.00000000000000E+000,0.00000000000000E+000,2.00620689780674E+004,1.60693939745987E+004,1.77223189117242E+004,0.00000000000000E+000,0.00000000000000E+000,1.83562570695541E+000,1.86189636746422E+000,1.84943923524273E+000,0.00000000000000E+000,0.00000000000000E+000,1.99813260810079E+004,1.92484976937875E+004,1.74824683153160E+004,1.99179220065240E+004,2.00256830081643E+004,2.00472179285040E+004,1.77960687707838E+004,1.76424841508306E+004,1.99456773581878E+004 -8.02000000000003E-008,1.16874979178625E+023,9.48824024790888E+022,1.31439930975542E+023,3.35344250994300E+020,7.35254783150190E+021,3.50885204715753E+023,1.98947588920669E+004,2.00197474474592E+004,2.00595512688269E+004,1.76416735458800E+004,1.78983225853014E+004,1.99463001373109E+004,0.00000000000000E+000,0.00000000000000E+000,2.00947979365922E+004,1.61033728303786E+004,1.76175817040247E+004,0.00000000000000E+000,0.00000000000000E+000,1.83588568579023E+000,1.86218075931309E+000,1.84856792147946E+000,0.00000000000000E+000,0.00000000000000E+000,1.99608866534270E+004,1.89225737520757E+004,1.73854877755631E+004,1.98947588920669E+004,2.00197474474592E+004,2.00401506550552E+004,1.75975485668576E+004,1.76727808042222E+004,1.99342645226150E+004 -8.04000000000003E-008,1.17070179563533E+023,9.48773973410143E+022,1.31339828214051E+023,3.35344250994300E+020,7.35755296957644E+021,3.50980302339169E+023,1.99184226665568E+004,1.99448698295486E+004,2.01147002714825E+004,1.86629120450514E+004,1.76907723603245E+004,1.99511231384455E+004,0.00000000000000E+000,0.00000000000000E+000,2.00107666538085E+004,1.58315351924657E+004,1.75187373706736E+004,0.00000000000000E+000,0.00000000000000E+000,1.83521653248585E+000,1.85987224093300E+000,1.84773633705104E+000,0.00000000000000E+000,0.00000000000000E+000,1.99501533515845E+004,1.77596997542919E+004,1.75555180336882E+004,1.99184226665568E+004,1.99448698295486E+004,2.00386478844423E+004,1.76319272766964E+004,1.76048484979072E+004,1.99198774202099E+004 -8.06000000000004E-008,1.17230343981918E+023,9.48974178933124E+022,1.31264751142933E+023,3.30339112919758E+020,7.34754269342735E+021,3.51070394824511E+023,1.98882308293499E+004,1.99178700413672E+004,2.01309738132992E+004,1.84394503756335E+004,1.79120345052546E+004,1.99442808599048E+004,0.00000000000000E+000,0.00000000000000E+000,1.99775859509620E+004,1.55720388659221E+004,1.75183990855157E+004,0.00000000000000E+000,0.00000000000000E+000,1.83495080586454E+000,1.85759525156647E+000,1.84773347536256E+000,0.00000000000000E+000,0.00000000000000E+000,1.99426493185172E+004,1.78440364863886E+004,1.75560769980818E+004,1.98882308293499E+004,1.99178700413672E+004,2.00346880915929E+004,1.74890708994275E+004,1.77018557122768E+004,1.99029866730982E+004 -8.08000000000004E-008,1.17490611161794E+023,9.49274487217597E+022,1.31149632967219E+023,3.30339112919758E+020,7.31751186498010E+021,3.51215543828672E+023,1.98620568248456E+004,1.98761124455236E+004,2.01141257441333E+004,1.70807892052202E+004,1.82638101455054E+004,1.99240673489337E+004,0.00000000000000E+000,0.00000000000000E+000,1.99445142073395E+004,1.60204845947102E+004,1.74779584847325E+004,0.00000000000000E+000,0.00000000000000E+000,1.83468509840368E+000,1.86148494652514E+000,1.84739059601703E+000,0.00000000000000E+000,0.00000000000000E+000,1.99475453415848E+004,1.84429333537074E+004,1.76081282219069E+004,1.98620568248456E+004,1.98761124455236E+004,2.00198500672158E+004,1.71901747437192E+004,1.78602784969997E+004,1.98805586432455E+004 -8.10000000000004E-008,1.17750878341670E+023,9.49274487217597E+022,1.31024504515355E+023,3.35344250994300E+020,7.30750158883102E+021,3.51345677418610E+023,1.98340763301131E+004,1.98690408111541E+004,2.01120351762322E+004,1.70758314148569E+004,1.81339565392291E+004,1.99091873137323E+004,0.00000000000000E+000,0.00000000000000E+000,1.99453970882270E+004,1.64091720021971E+004,1.73741759481013E+004,0.00000000000000E+000,0.00000000000000E+000,1.83469220281538E+000,1.86468848189012E+000,1.84650356391292E+000,0.00000000000000E+000,0.00000000000000E+000,1.99163779352496E+004,1.81788131072482E+004,1.74718295323040E+004,1.98340763301131E+004,1.98690408111541E+004,2.00100490059650E+004,1.72160928788974E+004,1.77356230602933E+004,1.98630035262996E+004 -8.12000000000004E-008,1.17886017069683E+023,9.49324538598342E+022,1.30959437720386E+023,3.35344250994300E+020,7.30249645075648E+021,3.51415749351654E+023,1.97994580509011E+004,1.98698341376638E+004,2.00945676224626E+004,1.64632886135224E+004,1.81076720138024E+004,1.98901066102024E+004,0.00000000000000E+000,0.00000000000000E+000,1.99872699595760E+004,1.73264640578063E+004,1.76823904675605E+004,0.00000000000000E+000,0.00000000000000E+000,1.83502844838959E+000,1.87169193188402E+000,1.84910825301930E+000,0.00000000000000E+000,0.00000000000000E+000,1.98729377986968E+004,1.78060235053864E+004,1.75346320286026E+004,1.97994580509011E+004,1.98698341376638E+004,2.00009097955482E+004,1.70891997197287E+004,1.78255226425232E+004,1.98499380193862E+004 -8.14000000000004E-008,1.18096232868814E+023,9.49524744121324E+022,1.30864340096970E+023,3.35344250994300E+020,7.28247589845831E+021,3.51530867527368E+023,1.97693839096705E+004,1.98560384032148E+004,2.01111616410855E+004,1.56201922066768E+004,1.80992912858027E+004,1.98814672646094E+004,0.00000000000000E+000,0.00000000000000E+000,1.99644620414217E+004,1.75302870059388E+004,1.76387771913947E+004,0.00000000000000E+000,0.00000000000000E+000,1.83484546697388E+000,1.87315082922868E+000,1.84874506012932E+000,0.00000000000000E+000,0.00000000000000E+000,1.98511398355608E+004,1.80582190868058E+004,1.74468516340003E+004,1.97693839096705E+004,1.98560384032148E+004,1.99956923579374E+004,1.68501884089207E+004,1.77844522252404E+004,1.98331325411883E+004 -8.16000000000004E-008,1.18321464082168E+023,9.49474692740578E+022,1.30764237335479E+023,3.50359665217926E+020,7.25745020808560E+021,3.51640980565008E+023,1.97821536957273E+004,1.98549773920744E+004,2.00654840715083E+004,1.76479334066463E+004,1.83088151489003E+004,1.98746442816449E+004,0.00000000000000E+000,0.00000000000000E+000,1.99705750912283E+004,1.71832986053913E+004,1.76231938968126E+004,0.00000000000000E+000,0.00000000000000E+000,1.83489454999893E+000,1.87064698417104E+000,1.84861486502675E+000,0.00000000000000E+000,0.00000000000000E+000,1.98058793927246E+004,1.85938357988188E+004,1.70992284764856E+004,1.97821536957273E+004,1.98549773920744E+004,1.99640403223536E+004,1.77967748617513E+004,1.77705131628968E+004,1.98259589256857E+004 -8.18000000000004E-008,1.18521669605150E+023,9.49274487217597E+022,1.30639108883615E+023,3.35344250994300E+020,7.30750158883102E+021,3.51731073050350E+023,1.97756289086354E+004,1.98658116294291E+004,2.00459913873332E+004,1.70505421683531E+004,1.83478703875272E+004,1.98681244018000E+004,0.00000000000000E+000,0.00000000000000E+000,1.99624934724202E+004,1.63072410201872E+004,1.76880873689307E+004,0.00000000000000E+000,0.00000000000000E+000,1.83482965469189E+000,1.86386278732658E+000,1.84915556573580E+000,0.00000000000000E+000,0.00000000000000E+000,1.97494618654638E+004,1.88947837944601E+004,1.73125041921413E+004,1.97756289086354E+004,1.98658116294291E+004,1.99368060042544E+004,1.73860779990843E+004,1.78674062193237E+004,1.98179088957998E+004 -8.20000000000004E-008,1.18776931646951E+023,9.49124333075361E+022,1.30518985569826E+023,3.50359665217926E+020,7.29248617460739E+021,3.51851196364139E+023,1.98021352147610E+004,1.98465156803441E+004,2.00068559418941E+004,1.67335371720473E+004,1.83582379485282E+004,1.98570660661424E+004,0.00000000000000E+000,0.00000000000000E+000,1.99641278500848E+004,1.69231652974879E+004,1.75579605989962E+004,0.00000000000000E+000,0.00000000000000E+000,1.83484278283733E+000,1.86870411152475E+000,1.84806741474814E+000,0.00000000000000E+000,0.00000000000000E+000,1.97161449568456E+004,1.99296344788220E+004,1.69994169435776E+004,1.98021352147610E+004,1.98465156803441E+004,1.99103180518589E+004,1.77157535205287E+004,1.77454214781041E+004,1.98095321816583E+004 -8.22000000000004E-008,1.18927085789188E+023,9.49324538598342E+022,1.30453918774857E+023,3.50359665217926E+020,7.27246562230923E+021,3.51936283711406E+023,1.97771483662885E+004,1.98565368438668E+004,2.00247623322075E+004,1.64432062506626E+004,1.82733555018191E+004,1.98559535242459E+004,0.00000000000000E+000,0.00000000000000E+000,1.99110340049601E+004,1.69556826069626E+004,1.75252761074134E+004,0.00000000000000E+000,0.00000000000000E+000,1.83441523717797E+000,1.86895015959268E+000,1.84779162971119E+000,0.00000000000000E+000,0.00000000000000E+000,1.97118791266667E+004,1.98386138021149E+004,1.70232253537453E+004,1.97771483662885E+004,1.98565368438668E+004,1.99026756051757E+004,1.75712691555853E+004,1.77063763427798E+004,1.98001059132369E+004 -8.24000000000004E-008,1.19092255345647E+023,9.49474692740578E+022,1.30388851979888E+023,3.60369941367009E+020,7.23742965578743E+021,3.52026376196748E+023,1.97716093014942E+004,1.98402313492714E+004,2.00303898670254E+004,1.73946576314994E+004,1.83400132541206E+004,1.98541029297234E+004,0.00000000000000E+000,0.00000000000000E+000,1.98396061811988E+004,1.82851307389302E+004,1.75639616981315E+004,0.00000000000000E+000,0.00000000000000E+000,1.83383655326510E+000,1.87827660757228E+000,1.84811794231331E+000,0.00000000000000E+000,0.00000000000000E+000,1.97358862975437E+004,1.89710095598741E+004,1.67394617077306E+004,1.97716093014942E+004,1.98402313492714E+004,1.98930039011070E+004,1.80961790938373E+004,1.76631356161169E+004,1.97900178300205E+004 -8.26000000000004E-008,1.19302471144778E+023,9.50075309309523E+022,1.30298759494547E+023,3.45354527143384E+020,7.20739882734018E+021,3.52161514924761E+023,1.97962645389414E+004,1.97620107250475E+004,2.00112210287725E+004,1.74861523387540E+004,1.83157712658344E+004,1.98339912067832E+004,0.00000000000000E+000,0.00000000000000E+000,1.98740356549582E+004,1.63609150769040E+004,1.76012314220356E+004,0.00000000000000E+000,0.00000000000000E+000,1.83411599279784E+000,1.86429882676101E+000,1.84843099250064E+000,0.00000000000000E+000,0.00000000000000E+000,1.96839839249570E+004,2.01795806848259E+004,1.68321713590092E+004,1.97962645389414E+004,1.97620107250475E+004,1.98786379563347E+004,1.79653095357319E+004,1.76896457473032E+004,1.97725913485560E+004 -8.28000000000004E-008,1.19472645839313E+023,9.49975206548033E+022,1.30213672147279E+023,3.50359665217926E+020,7.20739882734018E+021,3.52241597133953E+023,1.97869858772900E+004,1.96988571879376E+004,2.00586139966252E+004,1.87151823313097E+004,1.83166804535923E+004,1.98324804858266E+004,0.00000000000000E+000,0.00000000000000E+000,1.98517178997079E+004,1.66630199694122E+004,1.75288109860335E+004,0.00000000000000E+000,0.00000000000000E+000,1.83393496264846E+000,1.86670192352105E+000,1.84782150453311E+000,0.00000000000000E+000,0.00000000000000E+000,1.96551801546043E+004,1.95937520295674E+004,1.67618958501656E+004,1.97869858772900E+004,1.96988571879376E+004,1.98850241576382E+004,1.84131980519698E+004,1.76499850164009E+004,1.97543672997945E+004 -8.30000000000004E-008,1.19657835948071E+023,9.49925155167287E+022,1.30113569385788E+023,3.45354527143384E+020,7.22241424156381E+021,3.52331689619295E+023,1.97743811590200E+004,1.97260819697184E+004,1.99971514581949E+004,1.86150393020173E+004,1.82775097587073E+004,1.98118060299580E+004,0.00000000000000E+000,0.00000000000000E+000,1.98526718111813E+004,1.67897952258841E+004,1.75939688296527E+004,0.00000000000000E+000,0.00000000000000E+000,1.83394270836344E+000,1.86768520711734E+000,1.84837009094597E+000,0.00000000000000E+000,0.00000000000000E+000,1.96578878963232E+004,1.91678533301327E+004,1.68255128331048E+004,1.97743811590200E+004,1.97260819697184E+004,1.98590914013354E+004,1.82796492492300E+004,1.76689809547636E+004,1.97480185165925E+004 -8.32000000000004E-008,1.19843026056829E+023,9.50075309309523E+022,1.30008461486223E+023,3.25333974845217E+020,7.24743993193652E+021,3.52431792380786E+023,1.97575389883997E+004,1.97128783454438E+004,1.99677751706811E+004,1.79570393146797E+004,1.81757346337681E+004,1.97888630337014E+004,0.00000000000000E+000,0.00000000000000E+000,1.99082830681338E+004,1.66004831797232E+004,1.75547658176247E+004,0.00000000000000E+000,0.00000000000000E+000,1.83439302459845E+000,1.86621148145454E+000,1.84804050188314E+000,0.00000000000000E+000,0.00000000000000E+000,1.96163293244061E+004,1.94822115556216E+004,1.68864248127719E+004,1.97575389883997E+004,1.97128783454438E+004,1.98489608754600E+004,1.80325866305454E+004,1.76316088851533E+004,1.97339139493314E+004 -8.34000000000004E-008,1.20003190475214E+023,9.50375617593996E+022,1.29943394691254E+023,3.25333974845217E+020,7.21740910348927E+021,3.52526890004202E+023,1.97458332140577E+004,1.97187874188140E+004,1.99264927506199E+004,1.75197775271978E+004,1.80682820528529E+004,1.97687346229717E+004,0.00000000000000E+000,0.00000000000000E+000,1.98626821704469E+004,1.76159951728622E+004,1.77213576769838E+004,0.00000000000000E+000,0.00000000000000E+000,1.83402394847791E+000,1.87375444344006E+000,1.84943128424456E+000,0.00000000000000E+000,0.00000000000000E+000,1.96821281384788E+004,1.78808874837774E+004,1.66210845229484E+004,1.97458332140577E+004,1.97187874188140E+004,1.98378539982461E+004,1.76510752279938E+004,1.75520336656412E+004,1.97256137121353E+004 -8.36000000000004E-008,1.20113303512854E+023,9.50976234162941E+022,1.29918369000881E+023,3.25333974845217E+020,7.15734744659477E+021,3.52611977351469E+023,1.97186247602959E+004,1.97194579480378E+004,1.98767462154326E+004,1.78207942193982E+004,1.80178098369268E+004,1.97408343394656E+004,0.00000000000000E+000,0.00000000000000E+000,1.99229417424291E+004,1.66004831797232E+004,1.76691594721654E+004,0.00000000000000E+000,0.00000000000000E+000,1.83451131818966E+000,1.86621148145453E+000,1.84899825520457E+000,0.00000000000000E+000,0.00000000000000E+000,1.96947470506380E+004,1.82214290438533E+004,1.65000126320887E+004,1.97186247602959E+004,1.97194579480378E+004,1.98358870962559E+004,1.76058155767706E+004,1.74804687267871E+004,1.97146746296609E+004 -8.38000000000004E-008,1.20278473069314E+023,9.51326593828159E+022,1.29843291929763E+023,3.15323698696133E+020,7.14233203237114E+021,3.52712080112960E+023,1.97435292934654E+004,1.97128045460325E+004,1.98823410495632E+004,1.81166144705926E+004,1.80439293499870E+004,1.97504718867540E+004,0.00000000000000E+000,0.00000000000000E+000,1.98620730566924E+004,1.66955388120149E+004,1.76593381159410E+004,0.00000000000000E+000,0.00000000000000E+000,1.83401900742109E+000,1.86695553359424E+000,1.84891650023478E+000,0.00000000000000E+000,0.00000000000000E+000,1.96462367626034E+004,1.90202363018421E+004,1.64343896187699E+004,1.97435292934654E+004,1.97128045460325E+004,1.98078050470245E+004,1.79934388656538E+004,1.74700931029292E+004,1.97113029160498E+004 -8.40000000000004E-008,1.20498699144594E+023,9.51426696589650E+022,1.29743189168272E+023,3.20328836770675E+020,7.12231148007297E+021,3.52827198288675E+023,1.97210315745098E+004,1.97191367029100E+004,1.98493358607960E+004,1.75925843947167E+004,1.80345030661424E+004,1.97317238901717E+004,0.00000000000000E+000,0.00000000000000E+000,1.98751101697482E+004,1.65227801925193E+004,1.77921017781474E+004,0.00000000000000E+000,0.00000000000000E+000,1.83412469875934E+000,1.86559705091011E+000,1.85001422156769E+000,0.00000000000000E+000,0.00000000000000E+000,1.96193448822913E+004,2.00954084924671E+004,1.62840437451105E+004,1.97210315745098E+004,1.97191367029100E+004,1.97889464651443E+004,1.80309766581297E+004,1.74579547051556E+004,1.96982768085195E+004 -8.42000000000004E-008,1.20673878977203E+023,9.52077364539340E+022,1.29683127511378E+023,3.15323698696133E+020,7.06725496125301E+021,3.52947321602464E+023,1.96594623091997E+004,1.97458550720203E+004,1.98509196097255E+004,1.90757323566945E+004,1.79533489592770E+004,1.97184298596329E+004,0.00000000000000E+000,0.00000000000000E+000,1.98054580795487E+004,1.60812596339091E+004,1.76309842428794E+004,0.00000000000000E+000,0.00000000000000E+000,1.83355846673325E+000,1.86199581232427E+000,1.84867997969153E+000,0.00000000000000E+000,0.00000000000000E+000,1.96717768058654E+004,2.00629609884140E+004,1.63111330924431E+004,1.96594623091997E+004,1.97458550720203E+004,1.97862912051488E+004,1.85509231750802E+004,1.73867608076131E+004,1.96828695350137E+004 -8.44000000000004E-008,1.20844053671737E+023,9.51877159016358E+022,1.29583024749887E+023,3.10318560621591E+020,7.09728578970026E+021,3.53022398673582E+023,1.96559070415738E+004,1.96912356000469E+004,1.98355199989075E+004,1.80372620359866E+004,1.80549795120055E+004,1.96977545258807E+004,0.00000000000000E+000,0.00000000000000E+000,1.97793143698706E+004,1.59559466968813E+004,1.77225199306401E+004,0.00000000000000E+000,0.00000000000000E+000,1.83334493495671E+000,1.86093829605661E+000,1.84944089789492E+000,0.00000000000000E+000,0.00000000000000E+000,1.97082040752343E+004,2.00226066170330E+004,1.63833040542787E+004,1.96559070415738E+004,1.96912356000469E+004,1.97831772361666E+004,1.80514714250198E+004,1.74770907001838E+004,1.96669356141753E+004 -8.46000000000004E-008,1.21024238642421E+023,9.51977261777849E+022,1.29487927126471E+023,3.00308284472508E+020,7.10729606584935E+021,3.53117496296998E+023,1.96483260734906E+004,1.96888532123035E+004,1.98133953175323E+004,1.73646029961243E+004,1.83702858119246E+004,1.96921169770463E+004,0.00000000000000E+000,0.00000000000000E+000,1.97315223238547E+004,1.63378205295599E+004,1.78462656486988E+004,0.00000000000000E+000,0.00000000000000E+000,1.83295316955204E+000,1.86411155300042E+000,1.85045749662176E+000,0.00000000000000E+000,0.00000000000000E+000,1.96974886653598E+004,2.02003166222474E+004,1.63529456406424E+004,1.96483260734906E+004,1.96888532123035E+004,1.97575069398234E+004,1.79119994311754E+004,1.76397714799322E+004,1.96573850131474E+004 -8.48000000000004E-008,1.21224444165402E+023,9.52077364539340E+022,1.29397834641129E+023,3.05313422547049E+020,7.08727551355118E+021,3.53222604196564E+023,1.95988230698452E+004,1.96939812343280E+004,1.98311462341824E+004,1.78551650348102E+004,1.83629396779834E+004,1.96832754780154E+004,0.00000000000000E+000,0.00000000000000E+000,1.97242757021760E+004,1.66102430679318E+004,1.76546253796630E+004,0.00000000000000E+000,0.00000000000000E+000,1.83289360613964E+000,1.86628826035621E+000,1.84887723904067E+000,0.00000000000000E+000,0.00000000000000E+000,1.96501360126990E+004,2.07995397023283E+004,1.66718446184838E+004,1.95988230698452E+004,1.96939812343280E+004,1.97494966739924E+004,1.83744217202274E+004,1.76778965476282E+004,1.96400680799771E+004 -8.50000000000004E-008,1.21394618859937E+023,9.52177467300831E+022,1.29307742155787E+023,2.95303146397966E+020,7.09728578970026E+021,3.53312696681905E+023,1.96248304554109E+004,1.96764901602056E+004,1.98218589207666E+004,1.78913771150340E+004,1.83086861566851E+004,1.96829752105292E+004,0.00000000000000E+000,0.00000000000000E+000,1.96773862286796E+004,1.68278168458654E+004,1.74380216389358E+004,0.00000000000000E+000,0.00000000000000E+000,1.83250717127692E+000,1.86797728718685E+000,1.84705047004666E+000,0.00000000000000E+000,0.00000000000000E+000,1.96362343730063E+004,2.02547435128772E+004,1.67363189669481E+004,1.96248304554109E+004,1.96764901602056E+004,1.97287750316640E+004,1.82903339337231E+004,1.76145338779735E+004,1.96352971859666E+004 -8.52000000000004E-008,1.21549778140247E+023,9.52127415920085E+022,1.29232665084669E+023,3.00308284472508E+020,7.09228065162572E+021,3.53387773753023E+023,1.95792428568891E+004,1.97039978842418E+004,1.98025786412836E+004,1.78150284537616E+004,1.82129413869134E+004,1.96656084512699E+004,0.00000000000000E+000,0.00000000000000E+000,1.97083070691794E+004,1.71345245005188E+004,1.73196434538125E+004,0.00000000000000E+000,0.00000000000000E+000,1.83276220247224E+000,1.87028709194876E+000,1.84603333099477E+000,0.00000000000000E+000,0.00000000000000E+000,1.96118722763457E+004,1.99582480382126E+004,1.68998176001044E+004,1.95792428568891E+004,1.97039978842418E+004,1.97214708714573E+004,1.82536857280207E+004,1.75884475923426E+004,1.96237871795842E+004 -8.54000000000004E-008,1.21770004215527E+023,9.52728032489031E+022,1.29152582875476E+023,3.00308284472508E+020,7.03221899473122E+021,3.53527917619111E+023,1.95699897913131E+004,1.97137839875665E+004,1.97718464709355E+004,1.76931205002301E+004,1.81005348447033E+004,1.96516603409034E+004,0.00000000000000E+000,0.00000000000000E+000,1.96459726822080E+004,1.74759348784176E+004,1.73841902703409E+004,0.00000000000000E+000,0.00000000000000E+000,1.83224727925789E+000,1.87276504677405E+000,1.84658960550777E+000,0.00000000000000E+000,0.00000000000000E+000,1.96405658325776E+004,1.92172312071389E+004,1.67361995003891E+004,1.95699897913131E+004,1.97137839875665E+004,1.96996603858184E+004,1.80774612647766E+004,1.75087854677071E+004,1.96138446291373E+004 -8.56000000000004E-008,1.21950189186211E+023,9.53028340773503E+022,1.29072500666284E+023,2.95303146397966E+020,7.01219844243305E+021,3.53633025518676E+023,1.95578210673049E+004,1.96829245355669E+004,1.97852082752734E+004,1.84221188072807E+004,1.80501484719781E+004,1.96436859966631E+004,0.00000000000000E+000,0.00000000000000E+000,1.96005768303937E+004,1.56702680534972E+004,1.74438237696947E+004,0.00000000000000E+000,0.00000000000000E+000,1.83187028133638E+000,1.85846582379420E+000,1.84709997848137E+000,0.00000000000000E+000,0.00000000000000E+000,1.96559635440465E+004,2.02354418727528E+004,1.64401878671828E+004,1.95578210673049E+004,1.96829245355669E+004,1.96978661134998E+004,1.82052227134074E+004,1.74163234120593E+004,1.95990577315075E+004 -8.58000000000004E-008,1.22090333052298E+023,9.53128443534994E+022,1.29002428733240E+023,2.90298008323424E+020,7.01219844243305E+021,3.53708102589794E+023,1.95605646306163E+004,1.97125955591189E+004,1.97444078129970E+004,1.77669311747275E+004,1.81754510788835E+004,1.96396505710957E+004,0.00000000000000E+000,0.00000000000000E+000,1.96066573112862E+004,1.52151529190479E+004,1.72831902052092E+004,0.00000000000000E+000,0.00000000000000E+000,1.83192087593670E+000,1.85434015127090E+000,1.84571738637719E+000,0.00000000000000E+000,0.00000000000000E+000,1.96203544824128E+004,1.81384096901879E+004,1.64761699716821E+004,1.95605646306163E+004,1.97125955591189E+004,1.96711554012652E+004,1.71849775865348E+004,1.74384321022942E+004,1.95978454719109E+004 -8.60000000000004E-008,1.22295543713354E+023,9.53378700438721E+022,1.28922346524048E+023,3.00308284472508E+020,6.96715219976218E+021,3.53823220765509E+023,1.95400454821846E+004,1.97260020722568E+004,1.96936820038998E+004,1.80829764837526E+004,1.81454543795944E+004,1.96174343762507E+004,0.00000000000000E+000,0.00000000000000E+000,1.96039736382534E+004,1.59583947021432E+004,1.70848636274839E+004,0.00000000000000E+000,0.00000000000000E+000,1.83189854932170E+000,1.86095910987911E+000,1.84397550965891E+000,0.00000000000000E+000,0.00000000000000E+000,1.96350322261625E+004,1.72909715591479E+004,1.65698455002763E+004,1.95400454821846E+004,1.97260020722568E+004,1.96524582974394E+004,1.72758342778758E+004,1.73992621812016E+004,1.95870353451932E+004 -8.62000000000004E-008,1.22505759512485E+023,9.52778083869776E+022,1.28797218072184E+023,3.10318560621591E+020,7.00719330435851E+021,3.53898297836627E+023,1.95148117077172E+004,1.96980468792755E+004,1.96835766681253E+004,1.84012562971967E+004,1.80917590898674E+004,1.95964101258586E+004,0.00000000000000E+000,0.00000000000000E+000,1.96687873728684E+004,1.58090640364493E+004,1.71397341200966E+004,0.00000000000000E+000,0.00000000000000E+000,1.83243611083066E+000,1.85967794640792E+000,1.84446135052875E+000,0.00000000000000E+000,0.00000000000000E+000,1.95686753527309E+004,1.84017267127293E+004,1.67383025000023E+004,1.95148117077172E+004,1.96980468792755E+004,1.96459761600043E+004,1.76986428528411E+004,1.74397156035138E+004,1.95691992869046E+004 -8.64000000000004E-008,1.22695954759318E+023,9.52978289392758E+022,1.28697115310693E+023,2.95303146397966E+020,7.01720358050760E+021,3.54003405736192E+023,1.95471164672445E+004,1.96640486710607E+004,1.96463079429801E+004,1.82014098096043E+004,1.80173987404605E+004,1.95832102155549E+004,0.00000000000000E+000,0.00000000000000E+000,1.97127377624810E+004,1.59017998141416E+004,1.72698322066912E+004,0.00000000000000E+000,0.00000000000000E+000,1.83279868272563E+000,1.86047632215746E+000,1.84560128638813E+000,0.00000000000000E+000,0.00000000000000E+000,1.95091488573079E+004,1.66535735292966E+004,1.64555754832160E+004,1.95471164672445E+004,1.96640486710607E+004,1.96239795102611E+004,1.71265511319999E+004,1.73595520324104E+004,1.95611560257409E+004 -8.66000000000004E-008,1.22871134591927E+023,9.53328649057976E+022,1.28617033101500E+023,2.85292870248882E+020,7.00218816628397E+021,3.54108513635757E+023,1.95248309266607E+004,1.96176223448231E+004,1.96842103975528E+004,1.84120630139216E+004,1.80267244044210E+004,1.95771806928710E+004,0.00000000000000E+000,0.00000000000000E+000,1.96936990692685E+004,1.65415004387158E+004,1.71804844075349E+004,0.00000000000000E+000,0.00000000000000E+000,1.83264181429967E+000,1.86574559504370E+000,1.84482021462642E+000,0.00000000000000E+000,0.00000000000000E+000,1.94721890837330E+004,1.54044357277321E+004,1.66253804084629E+004,1.95248309266607E+004,1.96176223448231E+004,1.96246941369111E+004,1.70276178250138E+004,1.73891841173478E+004,1.95418413723563E+004 -8.68000000000004E-008,1.23046314424535E+023,9.53078392154248E+022,1.28531945754233E+023,3.00308284472508E+020,6.99718302820943E+021,3.54183590706876E+023,1.95650617393003E+004,1.95862346022954E+004,1.96780994048797E+004,1.80960490833040E+004,1.79622883942189E+004,1.95788704981812E+004,0.00000000000000E+000,0.00000000000000E+000,1.96651404067600E+004,1.67172179316954E+004,1.72075500404501E+004,0.00000000000000E+000,0.00000000000000E+000,1.83240595431730E+000,1.86712407097480E+000,1.84505765281979E+000,0.00000000000000E+000,0.00000000000000E+000,1.94207588295799E+004,1.42302784360789E+004,1.67776365176241E+004,1.95650617393003E+004,1.95862346022954E+004,1.95992944715200E+004,1.65952767045161E+004,1.74127182197241E+004,1.95381427816114E+004 -8.70000000000004E-008,1.23206478842921E+023,9.53679008723194E+022,1.28471884097339E+023,2.90298008323424E+020,6.95714192361309E+021,3.54293703744515E+023,1.96230836657159E+004,1.95745360653112E+004,1.96085440861871E+004,1.79412534971670E+004,1.78602451385979E+004,1.95687491983364E+004,0.00000000000000E+000,0.00000000000000E+000,1.96867047546490E+004,1.51366339087919E+004,1.68410007625829E+004,0.00000000000000E+000,0.00000000000000E+000,1.83258411107868E+000,1.85360393248557E+000,1.84177906213520E+000,0.00000000000000E+000,0.00000000000000E+000,1.93885961500303E+004,1.41670480714345E+004,1.67818163532284E+004,1.96230836657159E+004,1.95745360653112E+004,1.95651256857172E+004,1.60813466692887E+004,1.72706206439970E+004,1.95399028707183E+004 -8.72000000000004E-008,1.23281555914039E+023,9.54129471149902E+022,1.28456868683115E+023,2.90298008323424E+020,6.91209568094222E+021,3.54353765401410E+023,1.96237593529612E+004,1.95882165965557E+004,1.96165320736209E+004,1.73642769696444E+004,1.80579534395463E+004,1.95791752173319E+004,0.00000000000000E+000,0.00000000000000E+000,1.96737086510457E+004,1.49795912741806E+004,1.68886293491243E+004,0.00000000000000E+000,0.00000000000000E+000,1.83247678735947E+000,1.85210891104745E+000,1.84221289038595E+000,0.00000000000000E+000,0.00000000000000E+000,1.93233925943048E+004,1.39648497936974E+004,1.67286784028615E+004,1.96237593529612E+004,1.95882165965557E+004,1.95460592095767E+004,1.57274740343572E+004,1.73545707674657E+004,1.95385668372069E+004 -8.74000000000004E-008,1.23491771713170E+023,9.54529882195866E+022,1.28371781335848E+023,2.90298008323424E+020,6.87205457634588E+021,3.54478893853273E+023,1.95831964474242E+004,1.95811014765013E+004,1.95752920137028E+004,1.72731891623904E+004,1.81507605251383E+004,1.95501083115024E+004,0.00000000000000E+000,0.00000000000000E+000,1.97027954567647E+004,1.50188525171515E+004,1.69754697193499E+004,0.00000000000000E+000,0.00000000000000E+000,1.83271680023297E+000,1.85248552542738E+000,1.84299779377628E+000,0.00000000000000E+000,0.00000000000000E+000,1.93297238737924E+004,1.42480019411606E+004,1.65150096985436E+004,1.95831964474242E+004,1.95811014765013E+004,1.95376117490056E+004,1.57808108991663E+004,1.73561438703955E+004,1.95198358006630E+004 -8.76000000000004E-008,1.23706992650375E+023,9.54179522530648E+022,1.28246652883984E+023,2.90298008323424E+020,6.90709054286768E+021,3.54568986338615E+023,1.95943687789184E+004,1.95373703321033E+004,1.95252934891844E+004,1.76501518252062E+004,1.82312905301908E+004,1.95259007010328E+004,0.00000000000000E+000,0.00000000000000E+000,1.97054530572727E+004,1.55292141252896E+004,1.71067756641255E+004,0.00000000000000E+000,0.00000000000000E+000,1.83273869545171E+000,1.85721235106765E+000,1.84416988911995E+000,0.00000000000000E+000,0.00000000000000E+000,1.93294720252445E+004,1.44864175776196E+004,1.66436513283023E+004,1.95943687789184E+004,1.95373703321033E+004,1.95162989236335E+004,1.61529690544692E+004,1.74643494774874E+004,1.95064813957357E+004 -8.78000000000004E-008,1.23817105688015E+023,9.54379728053629E+022,1.28206611779388E+023,2.95303146397966E+020,6.87705971442043E+021,3.54634053133584E+023,1.95937043165586E+004,1.95462244143257E+004,1.95148299275622E+004,1.76366523344824E+004,1.81246055581510E+004,1.95222937820663E+004,0.00000000000000E+000,0.00000000000000E+000,1.96733910959007E+004,1.57474466134242E+004,1.70319791595772E+004,0.00000000000000E+000,0.00000000000000E+000,1.83247416322205E+000,1.85914240456953E+000,1.84350437485728E+000,0.00000000000000E+000,0.00000000000000E+000,1.93196712584765E+004,1.52347471276924E+004,1.68701989932551E+004,1.95937043165586E+004,1.95462244143257E+004,1.95002293463500E+004,1.64242394131506E+004,1.74636759484229E+004,1.95031890944851E+004 -8.80000000000004E-008,1.24062357453667E+023,9.54229573911393E+022,1.28076478189450E+023,2.95303146397966E+020,6.89207512864405E+021,3.54749171309299E+023,1.95758274853545E+004,1.95630812673834E+004,1.94796233820476E+004,1.78518368289861E+004,1.80646143372726E+004,1.95068709917279E+004,0.00000000000000E+000,0.00000000000000E+000,1.96594478778287E+004,1.56702680534972E+004,1.68761107907073E+004,0.00000000000000E+000,0.00000000000000E+000,1.83235886150351E+000,1.85846582379420E+000,1.84209909469805E+000,0.00000000000000E+000,0.00000000000000E+000,1.93018220856361E+004,1.53787545906291E+004,1.70064317481506E+004,1.95758274853545E+004,1.95630812673834E+004,1.94758033859098E+004,1.65395119272579E+004,1.74353182066811E+004,1.94921734477828E+004 -8.82000000000004E-008,1.24182480767456E+023,9.54129471149902E+022,1.28016416532555E+023,3.00308284472508E+020,6.89207512864405E+021,3.54804227828119E+023,1.95493531288008E+004,1.95277958071610E+004,1.94951212726136E+004,1.68924592886148E+004,1.80521111457939E+004,1.94926559268889E+004,0.00000000000000E+000,0.00000000000000E+000,1.96653924014247E+004,1.61101685729318E+004,1.68860774313745E+004,0.00000000000000E+000,0.00000000000000E+000,1.83240803839273E+000,1.86223749703075E+000,1.84218970634906E+000,0.00000000000000E+000,0.00000000000000E+000,1.92938817676336E+004,1.62985926296865E+004,1.72163047973540E+004,1.95493531288008E+004,1.95277958071610E+004,1.94818795539821E+004,1.65070828828398E+004,1.74938588659288E+004,1.94767079609263E+004 -8.84000000000004E-008,1.24317619495469E+023,9.54479830815120E+022,1.27961360013736E+023,2.95303146397966E+020,6.86704943827134E+021,3.54889315175386E+023,1.95277515222826E+004,1.95230976171664E+004,1.94884767635333E+004,1.77154658426027E+004,1.83523190720073E+004,1.94880862429704E+004,0.00000000000000E+000,0.00000000000000E+000,1.95729710686722E+004,1.67120737416526E+004,1.66647958751120E+004,0.00000000000000E+000,0.00000000000000E+000,1.83164019545520E+000,1.86708411774526E+000,1.84015315316178E+000,0.00000000000000E+000,0.00000000000000E+000,1.93433481816191E+004,1.51934056856909E+004,1.74754504194376E+004,1.95277515222826E+004,1.95230976171664E+004,1.94686434593234E+004,1.67081186700957E+004,1.76419492413707E+004,1.94663512574794E+004 -8.86000000000004E-008,1.24492799328078E+023,9.54329676672884E+022,1.27871267528394E+023,3.00308284472508E+020,6.87205457634588E+021,3.54969397384579E+023,1.95247534586078E+004,1.94520299082300E+004,1.95156811125969E+004,1.81194677302984E+004,1.81645199772655E+004,1.94744112758337E+004,0.00000000000000E+000,0.00000000000000E+000,1.95265116618688E+004,1.67930941709484E+004,1.67095820080539E+004,0.00000000000000E+000,0.00000000000000E+000,1.83125154624441E+000,1.86771060060272E+000,1.84056956828299E+000,0.00000000000000E+000,0.00000000000000E+000,1.93898192718206E+004,1.48885927922508E+004,1.72454072070319E+004,1.95247534586078E+004,1.94520299082300E+004,1.94817356166827E+004,1.68178648595444E+004,1.75043205530426E+004,1.94483006807868E+004 -8.88000000000004E-008,1.24612922641867E+023,9.54629984957356E+022,1.27826221285723E+023,3.00308284472508E+020,6.84202374789863E+021,3.55044474455697E+023,1.95407553390154E+004,1.94567075098302E+004,1.94695600628338E+004,1.81520906607335E+004,1.81357836260011E+004,1.94642748972533E+004,0.00000000000000E+000,0.00000000000000E+000,1.94880720320639E+004,1.74380013407520E+004,1.68234103807263E+004,0.00000000000000E+000,0.00000000000000E+000,1.83092862742673E+000,1.87249440815744E+000,1.84161823557004E+000,0.00000000000000E+000,0.00000000000000E+000,1.94116658803677E+004,1.45736471262782E+004,1.72189901210261E+004,1.95407553390154E+004,1.94567075098302E+004,1.94575713165029E+004,1.69161470828939E+004,1.75145157674375E+004,1.94469408162525E+004 -8.90000000000004E-008,1.24808123026774E+023,9.54780139099593E+022,1.27736128800381E+023,3.00308284472508E+020,6.82700833367501E+021,3.55149582355262E+023,1.95400532175305E+004,1.94450881619665E+004,1.94558318623357E+004,1.90437795141233E+004,1.80604545288000E+004,1.94553693154560E+004,0.00000000000000E+000,0.00000000000000E+000,1.94606975765368E+004,1.81966296623455E+004,1.67790749803377E+004,0.00000000000000E+000,0.00000000000000E+000,1.83069790974043E+000,1.87769716887209E+000,1.84121142969046E+000,0.00000000000000E+000,0.00000000000000E+000,1.93845768476631E+004,1.50004832216130E+004,1.73912960831946E+004,1.95400532175305E+004,1.94450881619665E+004,1.94362727516426E+004,1.76367266553390E+004,1.75199643539804E+004,1.94367549457113E+004 -8.92000000000004E-008,1.24928246340563E+023,9.55180550145556E+022,1.27696087695785E+023,3.00308284472508E+020,6.78696722907867E+021,3.55229664564455E+023,1.95549827379457E+004,1.94437040198571E+004,1.94454769310549E+004,1.92566625088148E+004,1.79487024327586E+004,1.94547547637190E+004,0.00000000000000E+000,0.00000000000000E+000,1.94253618151897E+004,1.74000675695204E+004,1.71517628332546E+004,0.00000000000000E+000,0.00000000000000E+000,1.83039916068119E+000,1.87222261464459E+000,1.84456745282680E+000,0.00000000000000E+000,0.00000000000000E+000,1.93494189156023E+004,1.35418366727747E+004,1.74595683711104E+004,1.95549827379457E+004,1.94437040198571E+004,1.94119598968792E+004,1.70876974534777E+004,1.75910060571609E+004,1.94340385155464E+004 -8.94000000000004E-008,1.25073395344725E+023,9.55130498764811E+022,1.27611000348518E+023,2.90298008323424E+020,6.81199291945138E+021,3.55299736497498E+023,1.95480163908658E+004,1.94260711974491E+004,1.94473223632467E+004,1.94711689905335E+004,1.79570769292174E+004,1.94485037926341E+004,0.00000000000000E+000,0.00000000000000E+000,1.94840794698078E+004,1.74916314467312E+004,1.72911513573703E+004,0.00000000000000E+000,0.00000000000000E+000,1.83089501641108E+000,1.87287669908226E+000,1.84578649716162E+000,0.00000000000000E+000,0.00000000000000E+000,1.92569290781398E+004,1.28745466531788E+004,1.73316993829133E+004,1.95480163908658E+004,1.94260711974491E+004,1.94014296703799E+004,1.70121296165677E+004,1.75948232243631E+004,1.94230662945947E+004 -8.96000000000004E-008,1.25218544348887E+023,9.55380755668538E+022,1.27535923277399E+023,2.75282594099799E+020,6.81699805752592E+021,3.55384823844766E+023,1.95025070212535E+004,1.94479530811445E+004,1.94304481177518E+004,1.92848869611099E+004,1.79963161280793E+004,1.94329213693362E+004,0.00000000000000E+000,0.00000000000000E+000,1.94440067411140E+004,1.62757346648933E+004,1.71887307253120E+004,0.00000000000000E+000,0.00000000000000E+000,1.83055692686791E+000,1.86360552782506E+000,1.84489263394015E+000,0.00000000000000E+000,0.00000000000000E+000,1.93101122063527E+004,1.29448564510120E+004,1.72154440121694E+004,1.95025070212535E+004,1.94479530811445E+004,1.93988471819577E+004,1.66204078037118E+004,1.75504869886227E+004,1.94109650135454E+004 -8.98000000000004E-008,1.25423755009943E+023,9.55530909810774E+022,1.27440825653983E+023,2.75282594099799E+020,6.80198264330230E+021,3.55494936882406E+023,1.94599011925655E+004,1.94011477393334E+004,1.94359282950852E+004,1.95106268619462E+004,1.80864273875752E+004,1.94092743646368E+004,0.00000000000000E+000,0.00000000000000E+000,1.94407531774778E+004,1.58204142260887E+004,1.73449777321835E+004,0.00000000000000E+000,0.00000000000000E+000,1.83052941758955E+000,1.85977615190315E+000,1.84625214567174E+000,0.00000000000000E+000,0.00000000000000E+000,1.93223137163996E+004,1.23958783655397E+004,1.71922761791704E+004,1.94599011925655E+004,1.94011477393334E+004,1.94039546287904E+004,1.64358229643612E+004,1.76252691703775E+004,1.93866074296730E+004 -9.00000000000004E-008,1.25553888599881E+023,9.55330704287792E+022,1.27375758859014E+023,2.85292870248882E+020,6.80198264330230E+021,3.55549993401225E+023,1.94540399613815E+004,1.93956934574746E+004,1.94382640317577E+004,1.86137447400415E+004,1.80535941695347E+004,1.94052450515204E+004,0.00000000000000E+000,0.00000000000000E+000,1.93445276140693E+004,1.71405143247245E+004,1.71894736077279E+004,0.00000000000000E+000,0.00000000000000E+000,1.82971176422876E+000,1.87033139717518E+000,1.84489915463085E+000,0.00000000000000E+000,0.00000000000000E+000,1.93844564403785E+004,1.28200919712643E+004,1.73357859989471E+004,1.94540399613815E+004,1.93956934574746E+004,1.93973946922343E+004,1.65261111443037E+004,1.76109533699107E+004,1.93804603930582E+004 -9.02000000000004E-008,1.25699037604043E+023,9.55580961191519E+022,1.27335717754418E+023,3.05313422547049E+020,6.73691584833326E+021,3.55635080748493E+023,1.94546388979059E+004,1.94142643425067E+004,1.93925257954424E+004,1.91877688590561E+004,1.78924437635416E+004,1.93917283766871E+004,0.00000000000000E+000,0.00000000000000E+000,1.94046648313991E+004,1.63863351834970E+004,1.71308785774974E+004,0.00000000000000E+000,0.00000000000000E+000,1.83022368665798E+000,1.86450436296414E+000,1.84438314542802E+000,0.00000000000000E+000,0.00000000000000E+000,1.93179833473383E+004,1.34286182641803E+004,1.74742836133932E+004,1.94546388979059E+004,1.94142643425067E+004,1.93739513312832E+004,1.67489057430660E+004,1.75650310156041E+004,1.93767817001950E+004 -9.04000000000004E-008,1.25869212298577E+023,9.55981372237483E+022,1.27270650959449E+023,3.05313422547049E+020,6.69687474373692E+021,3.55740188648058E+023,1.94185070394337E+004,1.94208994901669E+004,1.93528588818358E+004,1.92566512397345E+004,1.78485961703931E+004,1.93659707117664E+004,0.00000000000000E+000,0.00000000000000E+000,1.94041337136534E+004,1.66848769180124E+004,1.71988695894079E+004,0.00000000000000E+000,0.00000000000000E+000,1.83021917893934E+000,1.86687248925949E+000,1.84498158111001E+000,0.00000000000000E+000,0.00000000000000E+000,1.93447630825259E+004,1.32007778819577E+004,1.75089258896152E+004,1.94185070394337E+004,1.94208994901669E+004,1.93642278555005E+004,1.67936782528596E+004,1.75742237540503E+004,1.93627591552005E+004 -9.06000000000004E-008,1.26054402407335E+023,9.55931320856737E+022,1.27170548197958E+023,3.00308284472508E+020,6.71189015796055E+021,3.55830281133400E+023,1.93860366856036E+004,1.94598000729070E+004,1.93160311749515E+004,1.93267586593194E+004,1.79408635481388E+004,1.93535239636836E+004,0.00000000000000E+000,0.00000000000000E+000,1.93706145801527E+004,1.63757615162481E+004,1.73024732207192E+004,0.00000000000000E+000,0.00000000000000E+000,1.82993420971245E+000,1.86441894440797E+000,1.84588467579701E+000,0.00000000000000E+000,0.00000000000000E+000,1.93602418371441E+004,1.29729334718929E+004,1.73189932544933E+004,1.93860366856036E+004,1.94598000729070E+004,1.93436017721291E+004,1.66740147780441E+004,1.75870545629517E+004,1.93544648615368E+004 -9.08000000000004E-008,1.26234587378019E+023,9.55931320856737E+022,1.27080455712616E+023,3.00308284472508E+020,6.71189015796055E+021,3.55920373618742E+023,1.93536564482476E+004,1.94670839233942E+004,1.92961554579747E+004,1.92461824515156E+004,1.79803699091219E+004,1.93376023288571E+004,0.00000000000000E+000,0.00000000000000E+000,1.93473024501441E+004,1.57307247041756E+004,1.73372656894618E+004,0.00000000000000E+000,0.00000000000000E+000,1.82973545308838E+000,1.85899636221067E+000,1.84618560182088E+000,0.00000000000000E+000,0.00000000000000E+000,1.93809172554120E+004,1.26062486709811E+004,1.72546786713185E+004,1.93536564482476E+004,1.94670839233942E+004,1.93346795064643E+004,1.63572626039925E+004,1.75949476638191E+004,1.93416514797529E+004 -9.10000000000004E-008,1.26344700415659E+023,9.56331731902701E+022,1.27045419746094E+023,3.00308284472508E+020,6.67184905336421E+021,3.55995450689860E+023,1.93494793414104E+004,1.94156000605777E+004,1.92967967633108E+004,1.90120239775349E+004,1.78593639081972E+004,1.93202292149717E+004,0.00000000000000E+000,0.00000000000000E+000,1.94106315010898E+004,1.60722255550391E+004,1.72152689042344E+004,0.00000000000000E+000,0.00000000000000E+000,1.83027431072879E+000,1.86192011165608E+000,1.84512523495682E+000,0.00000000000000E+000,0.00000000000000E+000,1.93361481158391E+004,1.19369582008706E+004,1.74473049450804E+004,1.93494793414104E+004,1.94156000605777E+004,1.93388231136773E+004,1.61522119947265E+004,1.75653511907268E+004,1.93273046470218E+004 -9.12000000000004E-008,1.26474834005597E+023,9.56131526379719E+022,1.26970342674976E+023,3.00308284472508E+020,6.69186960566238E+021,3.56050507208680E+023,1.93239626509305E+004,1.94179900284594E+004,1.93049842284242E+004,1.90655646921046E+004,1.78870237660286E+004,1.93152199320100E+004,0.00000000000000E+000,0.00000000000000E+000,1.94151270181472E+004,1.56168854379645E+004,1.73749815672351E+004,0.00000000000000E+000,0.00000000000000E+000,1.83031243291938E+000,1.85799403570332E+000,1.84651048924197E+000,0.00000000000000E+000,0.00000000000000E+000,1.92987672178664E+004,1.17946588356598E+004,1.73783904363264E+004,1.93239626509305E+004,1.94179900284594E+004,1.93326786711263E+004,1.60108176204287E+004,1.76003437187994E+004,1.93171314067000E+004 -9.14000000000004E-008,1.26634998423982E+023,9.56431834664191E+022,1.26905275880007E+023,3.00308284472508E+020,6.66183877721513E+021,3.56145604832096E+023,1.93056737741323E+004,1.94407597089536E+004,1.92756964678282E+004,1.87392098597415E+004,1.77593068279289E+004,1.93018663690912E+004,0.00000000000000E+000,0.00000000000000E+000,1.93854841642601E+004,1.61101685729318E+004,1.72433082844186E+004,0.00000000000000E+000,0.00000000000000E+000,1.83006074414375E+000,1.86223749703075E+000,1.84537023748424E+000,0.00000000000000E+000,0.00000000000000E+000,1.93322333268296E+004,1.22753355868128E+004,1.71268468413202E+004,1.93056737741323E+004,1.94407597089536E+004,1.93216685145193E+004,1.61418576376552E+004,1.74354195506775E+004,1.93099990092693E+004 -9.16000000000004E-008,1.26775142290069E+023,9.56331731902701E+022,1.26830198808889E+023,3.00308284472508E+020,6.67184905336421E+021,3.56210671627065E+023,1.92822366030266E+004,1.94482282064779E+004,1.92847489594637E+004,1.89509443016339E+004,1.76233593282440E+004,1.92963453264018E+004,0.00000000000000E+000,0.00000000000000E+000,1.93210974158586E+004,1.66413406317925E+004,1.72749780435595E+004,0.00000000000000E+000,0.00000000000000E+000,1.82951147703335E+000,1.86653231174526E+000,1.84564603169237E+000,0.00000000000000E+000,0.00000000000000E+000,1.93539951749233E+004,1.19833390758551E+004,1.72629214596243E+004,1.92822366030266E+004,1.94482282064779E+004,1.93147646274592E+004,1.62936844941716E+004,1.74241284205226E+004,1.93010606749182E+004 -9.18000000000005E-008,1.26980352951125E+023,9.56682091567919E+022,1.26740106323547E+023,2.95303146397966E+020,6.64682336299150E+021,3.56330794940854E+023,1.92638923174105E+004,1.94194751011529E+004,1.92636114228163E+004,1.94870730632275E+004,1.74975206379508E+004,1.92727994092485E+004,0.00000000000000E+000,0.00000000000000E+000,1.93569357839589E+004,1.53615402895700E+004,1.71945909697404E+004,0.00000000000000E+000,0.00000000000000E+000,1.82981764206425E+000,1.85569314973581E+000,1.84494405767268E+000,0.00000000000000E+000,0.00000000000000E+000,1.93413894018205E+004,1.24199882129793E+004,1.71132701678765E+004,1.92638923174105E+004,1.94194751011529E+004,1.93113905199406E+004,1.63087084352215E+004,1.73035980550601E+004,1.92835421732035E+004 -9.20000000000005E-008,1.27185563612182E+023,9.56632040187173E+022,1.26634998423982E+023,2.95303146397966E+020,6.65182850106604E+021,3.56430897702345E+023,1.92306475605087E+004,1.94040522077035E+004,1.92504755678185E+004,1.93148148481356E+004,1.74352890526576E+004,1.92507967727005E+004,0.00000000000000E+000,0.00000000000000E+000,1.93786646563562E+004,1.50913849722362E+004,1.71661094131628E+004,0.00000000000000E+000,0.00000000000000E+000,1.83000273612110E+000,1.85317627650615E+000,1.84469381146278E+000,0.00000000000000E+000,0.00000000000000E+000,1.93270163892850E+004,1.20882960380282E+004,1.72171082221796E+004,1.92306475605087E+004,1.94040522077035E+004,1.93072351388869E+004,1.60637971050056E+004,1.72989914034419E+004,1.92657255677934E+004 -9.22000000000005E-008,1.27375758859014E+023,9.56632040187173E+022,1.26534895662491E+023,2.90298008323424E+020,6.66183877721513E+021,3.56525995325761E+023,1.92337090536885E+004,1.93884784141280E+004,1.92556378902201E+004,2.01223687468697E+004,1.74547801613914E+004,1.92505031575883E+004,0.00000000000000E+000,0.00000000000000E+000,1.93162937034809E+004,1.47047513450157E+004,1.71896951385756E+004,0.00000000000000E+000,0.00000000000000E+000,1.82947035553819E+000,1.84941771187617E+000,1.84490109902384E+000,0.00000000000000E+000,0.00000000000000E+000,1.93133369739389E+004,1.17749253329502E+004,1.71768896958078E+004,1.92337090536885E+004,1.93884784141280E+004,1.92887833858303E+004,1.62221358320809E+004,1.73021356503927E+004,1.92562388932313E+004 -9.24000000000005E-008,1.27535923277399E+023,9.56932348471646E+022,1.26459818591373E+023,2.80287732174340E+020,6.65182850106604E+021,3.56621092949177E+023,1.92383932469092E+004,1.93901076289115E+004,1.92020341125185E+004,2.05591871341391E+004,1.72795844474013E+004,1.92307117398865E+004,0.00000000000000E+000,0.00000000000000E+000,1.92915326153654E+004,1.47033490490130E+004,1.71805655970277E+004,0.00000000000000E+000,0.00000000000000E+000,1.82925807701561E+000,1.84940372977501E+000,1.84482092796340E+000,0.00000000000000E+000,0.00000000000000E+000,1.93415463300527E+004,1.20860185745319E+004,1.73329035026977E+004,1.92383932469092E+004,1.93901076289115E+004,1.92668640383009E+004,1.65039223241441E+004,1.72684762040098E+004,1.92503063451551E+004 -9.26000000000005E-008,1.27696087695785E+023,9.57032451233136E+022,1.26379736382180E+023,2.75282594099799E+020,6.65182850106604E+021,3.56706180296445E+023,1.92202498510566E+004,1.93842170201570E+004,1.91840680241840E+004,1.92208459541343E+004,1.73380000573284E+004,1.92163230946111E+004,0.00000000000000E+000,0.00000000000000E+000,1.92413027236594E+004,1.53650486841966E+004,1.72879527879792E+004,0.00000000000000E+000,0.00000000000000E+000,1.82882582659790E+000,1.85572526823399E+000,1.84575873780835E+000,0.00000000000000E+000,0.00000000000000E+000,1.93824606618256E+004,1.19465290061870E+004,1.72314716995730E+004,1.92202498510566E+004,1.93842170201570E+004,1.92575004977299E+004,1.60550343923042E+004,1.72933838340705E+004,1.92390647929950E+004 -9.28000000000005E-008,1.27821216147648E+023,9.57282708136864E+022,1.26329685001435E+023,2.75282594099799E+020,6.62680281069334E+021,3.56781257367563E+023,1.92090500154795E+004,1.94066551735475E+004,1.91715797617250E+004,1.85000957107637E+004,1.74738317560157E+004,1.92160253894979E+004,0.00000000000000E+000,0.00000000000000E+000,1.92553007492204E+004,1.56548321822680E+004,1.71037232421212E+004,0.00000000000000E+000,0.00000000000000E+000,1.82894650540707E+000,1.85832972600957E+000,1.84414284041101E+000,0.00000000000000E+000,0.00000000000000E+000,1.93335557361776E+004,1.26391150359551E+004,1.70156181776927E+004,1.92090500154795E+004,1.94066551735475E+004,1.92414401942290E+004,1.60199876053681E+004,1.72402071575811E+004,1.92345087923047E+004 -9.30000000000005E-008,1.27981380566034E+023,9.57482913659845E+022,1.26249602792242E+023,2.65272317950715E+020,6.62680281069334E+021,3.56871349852904E+023,1.91780079258817E+004,1.93698991476820E+004,1.91725930906344E+004,1.82325732786108E+004,1.73382171150350E+004,1.91927104433624E+004,0.00000000000000E+000,0.00000000000000E+000,1.91755923089829E+004,1.69348224677025E+004,1.69834871965299E+004,0.00000000000000E+000,0.00000000000000E+000,1.82825704727141E+000,1.86879242371071E+000,1.84306986616481E+000,0.00000000000000E+000,0.00000000000000E+000,1.94297329728115E+004,1.26129056881309E+004,1.73001336513211E+004,1.91780079258817E+004,1.93698991476820E+004,1.92487125311941E+004,1.62432043733750E+004,1.72315458453961E+004,1.92161795034836E+004 -9.32000000000005E-008,1.28136539846344E+023,9.57432862279100E+022,1.26164515444975E+023,2.60267179876173E+020,6.64181822491696E+021,3.56946426924023E+023,1.91514082007271E+004,1.93542209678938E+004,1.91791250345017E+004,1.78940106813905E+004,1.74995010739019E+004,1.91839506627803E+004,0.00000000000000E+000,0.00000000000000E+000,1.91663898166907E+004,1.78523399536839E+004,1.70183526828513E+004,0.00000000000000E+000,0.00000000000000E+000,1.82817709029482E+000,1.87538957887610E+000,1.84338251888100E+000,0.00000000000000E+000,0.00000000000000E+000,1.94096414735357E+004,1.23613093421295E+004,1.72637240658749E+004,1.91514082007271E+004,1.93542209678938E+004,1.92432344796490E+004,1.62732223029043E+004,1.73009889279921E+004,1.92017348931146E+004 -9.34000000000005E-008,1.28281688850506E+023,9.57683119182827E+022,1.26109458926155E+023,2.65272317950715E+020,6.60678225839517E+021,3.57031514271290E+023,1.91736259681730E+004,1.93265775494199E+004,1.91371360682793E+004,1.81003328317244E+004,1.74805877074581E+004,1.91696373653872E+004,0.00000000000000E+000,0.00000000000000E+000,1.92063300965980E+004,1.71066095783412E+004,1.70372546442950E+004,0.00000000000000E+000,0.00000000000000E+000,1.82852357823150E+000,1.87008021250309E+000,1.84355150048507E+000,0.00000000000000E+000,0.00000000000000E+000,1.93892705809334E+004,1.34777226806856E+004,1.68110860750509E+004,1.91736259681730E+004,1.93265775494199E+004,1.92295121039384E+004,1.64841126200992E+004,1.71655012207895E+004,1.91952346732370E+004 -9.36000000000005E-008,1.28451863545041E+023,9.57382810898354E+022,1.26009356164664E+023,2.65272317950715E+020,6.63681308684242E+021,3.57101586204333E+023,1.90928436713923E+004,1.93475322262063E+004,1.91428499109689E+004,1.77176293525698E+004,1.76140058857110E+004,1.91502646491678E+004,0.00000000000000E+000,0.00000000000000E+000,1.91845053079606E+004,1.78795908985514E+004,1.69370602294518E+004,0.00000000000000E+000,0.00000000000000E+000,1.82833441810720E+000,1.87557539459328E+000,1.84265159555478E+000,0.00000000000000E+000,0.00000000000000E+000,1.94295175004247E+004,1.32789898155690E+004,1.68457718687228E+004,1.90928436713923E+004,1.93475322262063E+004,1.92379675685355E+004,1.64706780079260E+004,1.72071690054883E+004,1.91753410787648E+004 -9.38000000000005E-008,1.28652069068022E+023,9.57482913659845E+022,1.25919263679322E+023,2.70277456025257E+020,6.61679253454425E+021,3.57206694103899E+023,1.90844987678880E+004,1.93027337094250E+004,1.91151052365867E+004,1.77779045770142E+004,1.77871687913638E+004,1.91287651849916E+004,0.00000000000000E+000,0.00000000000000E+000,1.92016838355837E+004,1.68099554148576E+004,1.69906064967558E+004,0.00000000000000E+000,0.00000000000000E+000,1.82848334299389E+000,1.86784023730125E+000,1.84313380907158E+000,0.00000000000000E+000,0.00000000000000E+000,1.94304958061599E+004,1.47516795913461E+004,1.65838138449488E+004,1.90844987678880E+004,1.93027337094250E+004,1.92306636447480E+004,1.66333781913563E+004,1.72209251817595E+004,1.91581458591845E+004 -9.40000000000005E-008,1.28782202657960E+023,9.57783221944318E+022,1.25864207160503E+023,2.65272317950715E+020,6.59677198224609E+021,3.57286776313091E+023,1.90452664724849E+004,1.93306081478113E+004,1.90977031232710E+004,1.75390343498383E+004,1.78105425088856E+004,1.91163149745279E+004,0.00000000000000E+000,0.00000000000000E+000,1.92795976217903E+004,1.54744032286505E+004,1.69486821684297E+004,0.00000000000000E+000,0.00000000000000E+000,1.82915556878751E+000,1.85671926839243E+000,1.84275650903460E+000,0.00000000000000E+000,0.00000000000000E+000,1.93658250406423E+004,1.48349744589948E+004,1.63220074302844E+004,1.90452664724849E+004,1.93306081478113E+004,1.92249453805147E+004,1.61912235667543E+004,1.71433744014966E+004,1.91478206271373E+004 -9.42000000000005E-008,1.28962387628644E+023,9.57382810898354E+022,1.25764104399012E+023,2.75282594099799E+020,6.61679253454425E+021,3.57356848246135E+023,1.90458405423077E+004,1.93081806877582E+004,1.91273968613329E+004,1.79328357986902E+004,1.79283924716142E+004,1.91232772536997E+004,0.00000000000000E+000,0.00000000000000E+000,1.92332823132949E+004,1.66896263097582E+004,1.67809046929762E+004,0.00000000000000E+000,0.00000000000000E+000,1.82875660489843E+000,1.86690949455016E+000,1.84122825978920E+000,0.00000000000000E+000,0.00000000000000E+000,1.93325385624648E+004,1.39017989727913E+004,1.61809612852134E+004,1.90458405423077E+004,1.93081806877582E+004,1.92158349411831E+004,1.64207970484139E+004,1.71087078936923E+004,1.91380591592029E+004 -9.44000000000005E-008,1.29122552047029E+023,9.57182605375373E+022,1.25669006775595E+023,2.70277456025257E+020,6.64682336299150E+021,3.57426920179179E+023,1.90549557566525E+004,1.92766042291017E+004,1.91250813685048E+004,1.83172224022429E+004,1.79657274481399E+004,1.91181550292490E+004,0.00000000000000E+000,0.00000000000000E+000,1.92360561851642E+004,1.68942608647979E+004,1.68060298651571E+004,0.00000000000000E+000,0.00000000000000E+000,1.82878055166123E+000,1.86848462441120E+000,1.84145900659160E+000,0.00000000000000E+000,0.00000000000000E+000,1.92773437827230E+004,1.29763191138188E+004,1.64059679715939E+004,1.90549557566525E+004,1.92766042291017E+004,1.91993952831237E+004,1.63749324998561E+004,1.71976084683821E+004,1.91285304298596E+004 -9.46000000000005E-008,1.29257690775042E+023,9.57332759517609E+022,1.25603939980626E+023,2.65272317950715E+020,6.64181822491696E+021,3.57501997250297E+023,1.90675856635968E+004,1.92736612508346E+004,1.91237222620561E+004,1.82624583273413E+004,1.78766517862405E+004,1.91197692173140E+004,0.00000000000000E+000,0.00000000000000E+000,1.91546305214134E+004,1.61187594036888E+004,1.72148422188454E+004,0.00000000000000E+000,0.00000000000000E+000,1.82807480990919E+000,1.86230915517465E+000,1.84512150067190E+000,0.00000000000000E+000,0.00000000000000E+000,1.92704914392397E+004,1.44197418637665E+004,1.64228512043018E+004,1.90675856635968E+004,1.92736612508346E+004,1.91749872195238E+004,1.65607478980174E+004,1.72734893404573E+004,1.91253120357068E+004 -9.48000000000005E-008,1.29387824364980E+023,9.57432862279100E+022,1.25543878323732E+023,2.65272317950715E+020,6.63180794876788E+021,3.57572069183340E+023,1.90398175483938E+004,1.92549355435246E+004,1.91716677096379E+004,1.84541176878582E+004,1.78153162188392E+004,1.91205650654929E+004,0.00000000000000E+000,0.00000000000000E+000,1.91532626383129E+004,1.68918748790317E+004,1.70855808964549E+004,0.00000000000000E+000,0.00000000000000E+000,1.82806290439125E+000,1.86846647354527E+000,1.84398188015034E+000,0.00000000000000E+000,0.00000000000000E+000,1.92180585543293E+004,1.45491162125644E+004,1.64263168906449E+004,1.90398175483938E+004,1.92549355435246E+004,1.91803284472540E+004,1.68920512056615E+004,1.72127989357162E+004,1.91112722554528E+004 -9.50000000000005E-008,1.29578019611813E+023,9.57633067802081E+022,1.25453785838390E+023,2.60267179876173E+020,6.62179767261879E+021,3.57677177082906E+023,1.90101240079200E+004,1.92844740618651E+004,1.91424981644610E+004,1.88410190345843E+004,1.77353175771812E+004,1.91062833016614E+004,0.00000000000000E+000,0.00000000000000E+000,1.91013934322183E+004,1.68893971235063E+004,1.71965764512927E+004,0.00000000000000E+000,0.00000000000000E+000,1.82761023640746E+000,1.86844761926011E+000,1.84496147257640E+000,0.00000000000000E+000,0.00000000000000E+000,1.92433669594782E+004,1.39519283089900E+004,1.64271258170503E+004,1.90101240079200E+004,1.92844740618651E+004,1.91610425974674E+004,1.68864747898275E+004,1.72078726593854E+004,1.91016006771384E+004 -9.52000000000005E-008,1.29723168615974E+023,9.57683119182827E+022,1.25378708767272E+023,2.55262041801632E+020,6.62680281069334E+021,3.57752254154024E+023,1.89999639436726E+004,1.92811756115828E+004,1.91116885418626E+004,1.84556554155377E+004,1.78936874986154E+004,1.90935176111497E+004,0.00000000000000E+000,0.00000000000000E+000,1.91469136965194E+004,1.71546080045609E+004,1.72757789077242E+004,0.00000000000000E+000,0.00000000000000E+000,1.82800762411816E+000,1.87043552535641E+000,1.84565299322645E+000,0.00000000000000E+000,0.00000000000000E+000,1.91972739425386E+004,1.38445571830614E+004,1.62271442108095E+004,1.89999639436726E+004,1.92811756115828E+004,1.91461880130983E+004,1.67591513555550E+004,1.72402025176564E+004,1.90922931044218E+004 -9.54000000000005E-008,1.29858307343987E+023,9.57933376086554E+022,1.25318647110377E+023,2.50256903727090E+020,6.61178739646971E+021,3.57832336363216E+023,1.90338549983407E+004,1.92583412261387E+004,1.90814558827038E+004,1.71664011130838E+004,1.79853213093075E+004,1.90899414286071E+004,0.00000000000000E+000,0.00000000000000E+000,1.91614377131017E+004,1.72483301180606E+004,1.72559645432975E+004,0.00000000000000E+000,0.00000000000000E+000,1.82813403254849E+000,1.87112374236195E+000,1.84548057181835E+000,0.00000000000000E+000,0.00000000000000E+000,1.91414101408019E+004,1.39073640309398E+004,1.61780903159409E+004,1.90338549983407E+004,1.92583412261387E+004,1.91204308092450E+004,1.62400934090546E+004,1.72606861757640E+004,1.90895539195380E+004 -9.56000000000005E-008,1.30038492314670E+023,9.57833273325063E+022,1.25218544348887E+023,2.45251765652548E+020,6.63180794876788E+021,3.57917423710484E+023,1.90482915086800E+004,1.92351429711403E+004,1.90563563092275E+004,1.67465355495969E+004,1.80229992722246E+004,1.90805421500155E+004,0.00000000000000E+000,0.00000000000000E+000,1.91475983246263E+004,1.73458760595524E+004,1.73590029188264E+004,0.00000000000000E+000,0.00000000000000E+000,1.82801358688731E+000,1.87183232009149E+000,1.84637301554210E+000,0.00000000000000E+000,0.00000000000000E+000,1.91180289049368E+004,1.40062433823920E+004,1.61328341485744E+004,1.90482915086800E+004,1.92351429711403E+004,1.90988484383908E+004,1.61122477506366E+004,1.72917631585527E+004,1.90814245459691E+004 -9.58000000000005E-008,1.30178636180758E+023,9.57733170563572E+022,1.25143467277768E+023,2.45251765652548E+020,6.64181822491696E+021,3.57982490505453E+023,1.90345482177535E+004,1.92339443352415E+004,1.90690181291538E+004,1.57197660196354E+004,1.81035343197548E+004,1.90803994283084E+004,0.00000000000000E+000,0.00000000000000E+000,1.91416605636031E+004,1.76710180108305E+004,1.71817499155448E+004,0.00000000000000E+000,0.00000000000000E+000,1.82796185820386E+000,1.87413893397908E+000,1.84483133272998E+000,0.00000000000000E+000,0.00000000000000E+000,1.90741413678698E+004,1.60357171348532E+004,1.60832110114632E+004,1.90345482177535E+004,1.92339443352415E+004,1.90899664120913E+004,1.63436724606209E+004,1.72647724732738E+004,1.90725880160860E+004 -9.60000000000005E-008,1.30298759494547E+023,9.58033478848045E+022,1.25103426173172E+023,2.50256903727090E+020,6.60177712032063E+021,3.58057567576571E+023,1.90299001296770E+004,1.92459391841909E+004,1.90386248086877E+004,1.61858191655866E+004,1.80522628283830E+004,1.90707395331508E+004,0.00000000000000E+000,0.00000000000000E+000,1.91441441520874E+004,1.79311196527055E+004,1.70595911179489E+004,0.00000000000000E+000,0.00000000000000E+000,1.82798349855227E+000,1.87592524345933E+000,1.84375071718522E+000,0.00000000000000E+000,0.00000000000000E+000,1.90499053825537E+004,1.84076189569221E+004,1.62636386144796E+004,1.90299001296770E+004,1.92459391841909E+004,1.90701785999777E+004,1.73082357932573E+004,1.72621277359007E+004,1.90679804352964E+004 -9.62000000000005E-008,1.30448913636783E+023,9.58333787132517E+022,1.25038359378203E+023,2.45251765652548E+020,6.58175656802246E+021,3.58147660061913E+023,1.90290554303446E+004,1.92243408492263E+004,1.90354574183704E+004,1.55166883583029E+004,1.79536831119441E+004,1.90613775807577E+004,0.00000000000000E+000,0.00000000000000E+000,1.90898103355169E+004,1.83212533095235E+004,1.71638856219084E+004,0.00000000000000E+000,0.00000000000000E+000,1.82750882405661E+000,1.87851153700254E+000,1.84467423869172E+000,0.00000000000000E+000,0.00000000000000E+000,1.90541619991251E+004,1.90599055844274E+004,1.65331574576781E+004,1.90290554303446E+004,1.92243408492263E+004,1.90554851621246E+004,1.73128388776307E+004,1.73257539742960E+004,1.90580601462157E+004 -9.64000000000005E-008,1.30579047226721E+023,9.58634095416990E+022,1.24988307997458E+023,2.45251765652548E+020,6.55172573957521E+021,3.58227742271105E+023,1.90204379684150E+004,1.92244807488038E+004,1.90329477568748E+004,1.56317861139702E+004,1.79374753709462E+004,1.90572789653028E+004,0.00000000000000E+000,0.00000000000000E+000,1.90652056194307E+004,1.82283663278418E+004,1.71233795153110E+004,0.00000000000000E+000,0.00000000000000E+000,1.82729300876079E+000,1.87790558982370E+000,1.84431685820612E+000,0.00000000000000E+000,0.00000000000000E+000,1.90355437248275E+004,1.93933107141192E+004,1.66003628096230E+004,1.90204379684150E+004,1.92244807488038E+004,1.90423418904720E+004,1.74345415511339E+004,1.73273814901546E+004,1.90506326850626E+004 -9.66000000000005E-008,1.30719191092808E+023,9.58834300939972E+022,1.24933251478638E+023,2.50256903727090E+020,6.52169491112796E+021,3.58307824480298E+023,1.90124479055721E+004,1.91826330071474E+004,1.90320191751358E+004,1.62561694837409E+004,1.78625665880610E+004,1.90419590690723E+004,0.00000000000000E+000,0.00000000000000E+000,1.90284671067981E+004,1.76124937034521E+004,1.70698613829993E+004,0.00000000000000E+000,0.00000000000000E+000,1.82696975819673E+000,1.87372989626856E+000,1.84384214657590E+000,0.00000000000000E+000,0.00000000000000E+000,1.90914834509332E+004,1.94279812455716E+004,1.64040257807110E+004,1.90124479055721E+004,1.91826330071474E+004,1.90484890049645E+004,1.75487731934081E+004,1.72227644436189E+004,1.90369592285072E+004 -9.68000000000005E-008,1.30879355511193E+023,9.59034506462953E+022,1.24858174407520E+023,2.45251765652548E+020,6.51168463497887E+021,3.58397916965640E+023,1.90182130460296E+004,1.91352352938716E+004,1.90208624445538E+004,1.64008865012701E+004,1.77551853990667E+004,1.90257111218486E+004,0.00000000000000E+000,0.00000000000000E+000,1.90629506301690E+004,1.76245701918391E+004,1.72860797427153E+004,0.00000000000000E+000,0.00000000000000E+000,1.82727320258530E+000,1.87381451863694E+000,1.84574247761530E+000,0.00000000000000E+000,0.00000000000000E+000,1.90436417021366E+004,1.95038771131212E+004,1.64366939226068E+004,1.90182130460296E+004,1.91352352938716E+004,1.90388000786943E+004,1.76373087914361E+004,1.72435051538937E+004,1.90235096431250E+004 -9.70000000000005E-008,1.31099581586473E+023,9.58834300939972E+022,1.24743056231805E+023,2.50256903727090E+020,6.52169491112796E+021,3.58498019727131E+023,1.90029271299543E+004,1.91019869555228E+004,1.90251073939201E+004,1.74662081253004E+004,1.77904290636695E+004,1.90140092351484E+004,0.00000000000000E+000,0.00000000000000E+000,1.90574971211167E+004,1.79311196527055E+004,1.73689636359686E+004,0.00000000000000E+000,0.00000000000000E+000,1.82722528418711E+000,1.87592524345933E+000,1.84645874231443E+000,0.00000000000000E+000,0.00000000000000E+000,1.89972971298996E+004,1.91479361215032E+004,1.66243818383759E+004,1.90029271299543E+004,1.91019869555228E+004,1.90256292458134E+004,1.80822118066478E+004,1.73361339176365E+004,1.90063564236487E+004 -9.72000000000005E-008,1.31249735728709E+023,9.58734198178481E+022,1.24667979160687E+023,2.55262041801632E+020,6.52169491112796E+021,3.58568091660174E+023,1.90103754073135E+004,1.91169268705988E+004,1.89783265311291E+004,1.81395793965577E+004,1.77995947972530E+004,1.90050803506380E+004,0.00000000000000E+000,0.00000000000000E+000,1.90738836301309E+004,1.91180301251720E+004,1.74068764591183E+004,0.00000000000000E+000,0.00000000000000E+000,1.82736918773952E+000,1.88347241411292E+000,1.84678416586968E+000,0.00000000000000E+000,0.00000000000000E+000,1.89640242113437E+004,1.84879997833431E+004,1.64656339986679E+004,1.90103754073135E+004,1.91169268705988E+004,1.89997130205366E+004,1.85085393598863E+004,1.73040062810268E+004,1.90037648816214E+004 -9.74000000000005E-008,1.31479972080138E+023,9.59034506462953E+022,1.24567876399196E+023,2.55262041801632E+020,6.49166408268071E+021,3.58698225250112E+023,1.89983332608660E+004,1.90731154489470E+004,1.89910731098212E+004,1.81261616648578E+004,1.80720671100642E+004,1.89984220465891E+004,0.00000000000000E+000,0.00000000000000E+000,1.90344743508999E+004,1.94749601576711E+004,1.72824803190172E+004,0.00000000000000E+000,0.00000000000000E+000,1.82702269668863E+000,1.88556573927543E+000,1.84571122084726E+000,0.00000000000000E+000,0.00000000000000E+000,1.89343982385888E+004,1.87625737614512E+004,1.65104577534120E+004,1.89983332608660E+004,1.90731154489470E+004,1.89860848899979E+004,1.86803750098347E+004,1.74029521319998E+004,1.89849746090187E+004 -9.76000000000005E-008,1.31630126222375E+023,9.59535020270407E+022,1.24517825018451E+023,2.55262041801632E+020,6.44161270193529E+021,3.58798328011603E+023,1.89814613621282E+004,1.90507609971680E+004,1.89654335714626E+004,1.86406335768610E+004,1.79863863915422E+004,1.89763245184345E+004,0.00000000000000E+000,0.00000000000000E+000,1.90712955981863E+004,1.88949409391873E+004,1.73640146174902E+004,0.00000000000000E+000,0.00000000000000E+000,1.82734647600764E+000,1.88212471309515E+000,1.84641616060971E+000,0.00000000000000E+000,0.00000000000000E+000,1.89263478999696E+004,1.88815767677305E+004,1.63840705701016E+004,1.89814613621282E+004,1.90507609971680E+004,1.89823179142883E+004,1.87802016017280E+004,1.73504640575411E+004,1.89708664737149E+004 -9.78000000000005E-008,1.31835336883431E+023,9.59585071651153E+022,1.24427732533109E+023,2.65272317950715E+020,6.41658701156258E+021,3.58903435911168E+023,1.90024987507888E+004,1.90110942753963E+004,1.89430121118905E+004,1.89370849186742E+004,1.77667941573247E+004,1.89620329013298E+004,0.00000000000000E+000,0.00000000000000E+000,1.90791555237368E+004,2.00263208061268E+004,1.73795689431323E+004,0.00000000000000E+000,0.00000000000000E+000,1.82741543371326E+000,1.88865558520056E+000,1.84654991171927E+000,0.00000000000000E+000,0.00000000000000E+000,1.88935182401927E+004,1.86692316806913E+004,1.63712273860627E+004,1.90024987507888E+004,1.90110942753963E+004,1.89649534790250E+004,1.91579531196830E+004,1.72546874360102E+004,1.89606473683259E+004 -9.80000000000005E-008,1.31935439644922E+023,9.59785277174135E+022,1.24392696566587E+023,2.70277456025257E+020,6.38655618311533E+021,3.58963497568063E+023,1.90200436266083E+004,1.90293949875790E+004,1.89161604127849E+004,1.90921221120867E+004,1.75994163764004E+004,1.89613239575077E+004,0.00000000000000E+000,0.00000000000000E+000,1.90974942017724E+004,2.00970740008646E+004,1.73885011296471E+004,0.00000000000000E+000,0.00000000000000E+000,1.82757611116209E+000,1.88904005509183E+000,1.84662661411167E+000,0.00000000000000E+000,0.00000000000000E+000,1.88242884683124E+004,1.88251331342626E+004,1.65435171006844E+004,1.90200436266083E+004,1.90293949875790E+004,1.89377870354034E+004,1.92901782134858E+004,1.72340860611393E+004,1.89624675874961E+004 -9.82000000000005E-008,1.32100609201382E+023,9.59635123031898E+022,1.24297598943171E+023,2.65272317950715E+020,6.41158187348804E+021,3.59038574639181E+023,1.90003294267691E+004,1.90165517146215E+004,1.89092795564031E+004,1.86280772353354E+004,1.75689692375711E+004,1.89473084837828E+004,0.00000000000000E+000,0.00000000000000E+000,1.91075928328060E+004,1.83948610025131E+004,1.75099536230126E+004,0.00000000000000E+000,0.00000000000000E+000,1.82766446448277E+000,1.87898746301073E+000,1.84766199698556E+000,0.00000000000000E+000,0.00000000000000E+000,1.87958983348662E+004,1.84129289212653E+004,1.67198515353757E+004,1.90003294267691E+004,1.90165517146215E+004,1.89291527774363E+004,1.85018221708432E+004,1.73050431977878E+004,1.89493821280206E+004 -9.84000000000005E-008,1.32200711962872E+023,9.59835328554880E+022,1.24257557838575E+023,2.65272317950715E+020,6.39156132118987E+021,3.59098636296076E+023,1.89756407269559E+004,1.89946419804035E+004,1.89531446025074E+004,1.87965899621763E+004,1.76714484326196E+004,1.89495898669972E+004,0.00000000000000E+000,0.00000000000000E+000,1.90482755324411E+004,1.82660470426362E+004,1.77627336711807E+004,0.00000000000000E+000,0.00000000000000E+000,1.82714419630818E+000,1.87815212641588E+000,1.84977277436827E+000,0.00000000000000E+000,0.00000000000000E+000,1.88061316187539E+004,1.84277177254882E+004,1.63733563838933E+004,1.89756407269559E+004,1.89946419804035E+004,1.89355372343997E+004,1.85444605015316E+004,1.73170823494783E+004,1.89370036758475E+004 -9.86000000000005E-008,1.32285799310140E+023,9.60085585458607E+022,1.24222521872053E+023,2.60267179876173E+020,6.37654590696625E+021,3.59153692814896E+023,1.89972943218912E+004,1.89812072911120E+004,1.89318163430191E+004,1.91529876929068E+004,1.76856153173833E+004,1.89471715132665E+004,0.00000000000000E+000,0.00000000000000E+000,1.89817753284556E+004,1.82462293035814E+004,1.77950338382645E+004,0.00000000000000E+000,0.00000000000000E+000,1.82655718330575E+000,1.87802258752195E+000,1.85003828465672E+000,0.00000000000000E+000,0.00000000000000E+000,1.88354720466473E+004,1.85300594910752E+004,1.64658880095694E+004,1.89972943218912E+004,1.89812072911120E+004,1.89169573670668E+004,1.87242643058113E+004,1.73590439801168E+004,1.89359234061276E+004 -9.88000000000005E-008,1.32435953452376E+023,9.60185688220098E+022,1.24157455077084E+023,2.65272317950715E+020,6.35652535466808E+021,3.59233775024088E+023,1.89799722748549E+004,1.89228875053332E+004,1.89388816060453E+004,1.96466053741691E+004,1.77502733047737E+004,1.89292457413850E+004,0.00000000000000E+000,0.00000000000000E+000,1.89714081062683E+004,1.94252939150122E+004,1.75898417153039E+004,0.00000000000000E+000,0.00000000000000E+000,1.82646531031043E+000,1.88527897047186E+000,1.84833546061359E+000,0.00000000000000E+000,0.00000000000000E+000,1.88730737628840E+004,1.66126939674230E+004,1.64304178309598E+004,1.89799722748549E+004,1.89228875053332E+004,1.89283040730590E+004,1.87047326220008E+004,1.73215206012395E+004,1.89173078054953E+004 -9.90000000000005E-008,1.32556076766165E+023,9.60485996504570E+022,1.24102398558264E+023,2.55262041801632E+020,6.34651507851900E+021,3.59308852095206E+023,1.89596147726172E+004,1.89030714302979E+004,1.89259277484887E+004,1.94667468938791E+004,1.77092781385197E+004,1.89111401025299E+004,0.00000000000000E+000,0.00000000000000E+000,1.89793892122576E+004,1.98318753398060E+004,1.75722477615545E+004,0.00000000000000E+000,0.00000000000000E+000,1.82653604646072E+000,1.88758512746594E+000,1.84818765346123E+000,0.00000000000000E+000,0.00000000000000E+000,1.88808546309326E+004,1.63023776521016E+004,1.65443325984027E+004,1.89596147726172E+004,1.89030714302979E+004,1.89270268499228E+004,1.86479508492510E+004,1.73320763061802E+004,1.89042754691424E+004 -9.92000000000005E-008,1.32741266874923E+023,9.60135636839352E+022,1.23992285520624E+023,2.55262041801632E+020,6.38155104504079E+021,3.59383929166324E+023,1.90069755830829E+004,1.88844736473718E+004,1.88773341901812E+004,1.96022217513362E+004,1.74983122003602E+004,1.89031533316799E+004,0.00000000000000E+000,0.00000000000000E+000,1.89272511499948E+004,2.06794938796681E+004,1.74893716061638E+004,0.00000000000000E+000,0.00000000000000E+000,1.82607290545453E+000,1.89210683744906E+000,1.84748751940969E+000,0.00000000000000E+000,0.00000000000000E+000,1.88869356382288E+004,1.62248392575180E+004,1.67662219831496E+004,1.90069755830829E+004,1.88844736473718E+004,1.88935008654368E+004,1.89178952980376E+004,1.72820725845277E+004,1.89044052415834E+004 -9.94000000000005E-008,1.32896426155234E+023,9.60485996504570E+022,1.23917208449506E+023,2.40246627578006E+020,6.37654590696625E+021,3.59479026789741E+023,1.90181842690493E+004,1.88647185514840E+004,1.88302860902141E+004,2.01059545753647E+004,1.73387994327396E+004,1.88833465655819E+004,0.00000000000000E+000,0.00000000000000E+000,1.89086149267506E+004,2.08607187271218E+004,1.77497993702284E+004,0.00000000000000E+000,0.00000000000000E+000,1.82590676039938E+000,1.89302681832614E+000,1.84966618962063E+000,0.00000000000000E+000,0.00000000000000E+000,1.89086773658332E+004,1.63208362938400E+004,1.67000263342249E+004,1.90181842690493E+004,1.88647185514840E+004,1.88742075374193E+004,1.92149892644603E+004,1.72632726122496E+004,1.88965517072610E+004 -9.96000000000005E-008,1.33026559745172E+023,9.60786304789043E+022,1.23862151930686E+023,2.35241489503464E+020,6.35652535466808E+021,3.59559108998933E+023,1.89695590069317E+004,1.88854239777081E+004,1.88382774054569E+004,2.08780182202921E+004,1.74355565919804E+004,1.88759822467681E+004,0.00000000000000E+000,0.00000000000000E+000,1.88686001976769E+004,2.10392117760409E+004,1.77389409946798E+004,0.00000000000000E+000,0.00000000000000E+000,1.82554894873346E+000,1.89391772821020E+000,1.84957659471218E+000,0.00000000000000E+000,0.00000000000000E+000,1.89201303283603E+004,1.49367216964808E+004,1.67815555131738E+004,1.89695590069317E+004,1.88854239777081E+004,1.88703717599055E+004,1.91986674982285E+004,1.73265178131811E+004,1.88840118447041E+004 -9.98000000000005E-008,1.33191729301632E+023,9.60536047885316E+022,1.23772059445344E+023,2.40246627578006E+020,6.37154076889170E+021,3.59629180931977E+023,1.89074234961722E+004,1.89355495391621E+004,1.88460153221323E+004,2.17032690151156E+004,1.75971468945669E+004,1.88724547079165E+004,0.00000000000000E+000,0.00000000000000E+000,1.89024965515207E+004,2.11450960866026E+004,1.77476301077275E+004,0.00000000000000E+000,0.00000000000000E+000,1.82585214489041E+000,1.89443925134871E+000,1.84964829907214E+000,0.00000000000000E+000,0.00000000000000E+000,1.88501556047057E+004,1.53985716409471E+004,1.64962439647534E+004,1.89074234961722E+004,1.89355495391621E+004,1.88623366453322E+004,1.97209730001817E+004,1.73163346898547E+004,1.88717725537120E+004 -1.00000000000000E-007,1.33411955376912E+023,9.60636150646807E+022,1.23671956683853E+023,2.45251765652548E+020,6.35152021659354E+021,3.59744299107691E+023,1.89028483593757E+004,1.89023320897377E+004,1.88418292240665E+004,2.09630308313559E+004,1.76205137093402E+004,1.88604975516222E+004,0.00000000000000E+000,0.00000000000000E+000,1.89093415614882E+004,1.97608576474700E+004,1.73539723577937E+004,0.00000000000000E+000,0.00000000000000E+000,1.82591324441094E+000,1.88718901449919E+000,1.84632968372399E+000,0.00000000000000E+000,0.00000000000000E+000,1.88042902363952E+004,1.60587798382066E+004,1.68753762944142E+004,1.89028483593757E+004,1.89023320897377E+004,1.88488896266809E+004,1.92094518331568E+004,1.73309573878173E+004,1.88566169692956E+004 +0,0,0,1.93553694480606E+023,5.14528194062896E+022,0,2.45006513886895E+023,0,0,30079.3987717752,29614.4940204329,0,29981.766019762,0,0,29644.6452581148,29776.912117104,0,0,0,1.8877173960887,1.92464329725261,0,0,0,29899.6825890104,29630.1612221258,0,0,0,29908.0612925477,29664.1617491133,0,29856.8409434945 +0.0000001,1.33411955376912E+023,9.60636150646807E+022,1.23671956683853E+023,2.45251765652548E+020,6.35152021659354E+021,3.59744299107691E+023,18902.8483593757,18902.3320897377,18841.8292240665,20963.0308313559,17620.5137093402,18860.4975516222,0,0,18909.3415614882,19760.85764747,17353.9723577937,0,0,1.82591324441094,1.88718901449919,1.84632968372399,0,0,18804.2902363952,16058.7798382066,16875.3762944142,18902.8483593757,18902.3320897377,18848.8896266809,19209.4518331568,17330.9573878173,18856.6169692956 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_001_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_001_ref.csv index 68b179263..497d2079d 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_001_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_001_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate001+006,011-CollRate002+002,012-CollRate002+003,013-CollRate002+004,014-CollRate002+005,015-CollRate002+006,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate003+006,020-CollRate004+004,021-CollRate004+005,022-CollRate004+006,023-CollRate005+005,024-CollRate005+006,025-CollRate006+006,026-TotalCollRate -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-009,7.28671535893542E-004,3.91095315500101E-001,5.88191818557925E-005,0.00000000000000E+000,0.00000000000000E+000,1.02477999999986E+014,4.84799999999932E+012,4.71399999999933E+012,3.20199999999955E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.15241999999984E+014 +001-TIME,002-CollRate001+001,003-CollRate001+002,004-CollRate001+003,005-CollRate001+004,006-CollRate001+005,007-CollRate001+006,008-CollRate002+002,009-CollRate002+003,010-CollRate002+004,011-CollRate002+005,012-CollRate002+006,013-CollRate003+003,014-CollRate003+004,015-CollRate003+005,016-CollRate003+006,017-CollRate004+004,018-CollRate004+005,019-CollRate004+006,020-CollRate005+005,021-CollRate005+006,022-CollRate006+006,023-TotalCollRate +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.000000001,0,0,102477999999986,4847999999999.32,4713999999999.33,3201999999999.55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,115241999999984 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_010_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_010_ref.csv index 280686aff..1ddce588d 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_010_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_010_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate001+006,011-CollRate002+002,012-CollRate002+003,013-CollRate002+004,014-CollRate002+005,015-CollRate002+006,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate003+006,020-CollRate004+004,021-CollRate004+005,022-CollRate004+006,023-CollRate005+005,024-CollRate005+006,025-CollRate006+006,026-TotalCollRate -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-009,1.00394992012240E-003,4.24685438364297E-001,5.88191818591117E-005,0.00000000000000E+000,0.00000000000000E+000,1.11731999999984E+014,7.43599999999895E+012,4.96999999999930E+012,3.13599999999956E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.27273999999982E+014 +001-TIME,002-CollRate001+001,003-CollRate001+002,004-CollRate001+003,005-CollRate001+004,006-CollRate001+005,007-CollRate001+006,008-CollRate002+002,009-CollRate002+003,010-CollRate002+004,011-CollRate002+005,012-CollRate002+006,013-CollRate003+003,014-CollRate003+004,015-CollRate003+005,016-CollRate003+006,017-CollRate004+004,018-CollRate004+005,019-CollRate004+006,020-CollRate005+005,021-CollRate005+006,022-CollRate006+006,023-TotalCollRate +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.000000001,0,0,111731999999984,7435999999998.95,4969999999999.3,3135999999999.56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127273999999982 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_050_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_050_ref.csv index b56163106..230f69428 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_050_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_050_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate001+006,011-CollRate002+002,012-CollRate002+003,013-CollRate002+004,014-CollRate002+005,015-CollRate002+006,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate003+006,020-CollRate004+004,021-CollRate004+005,022-CollRate004+006,023-CollRate005+005,024-CollRate005+006,025-CollRate006+006,026-TotalCollRate -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-009,1.60901711016375E-003,4.57083630796254E-001,5.88191819002675E-005,0.00000000000000E+000,0.00000000000000E+000,1.20868999999983E+014,1.34099999999981E+013,1.26259999999982E+013,1.83999999999974E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.48744999999979E+014 +001-TIME,002-CollRate001+001,003-CollRate001+002,004-CollRate001+003,005-CollRate001+004,006-CollRate001+005,007-CollRate001+006,008-CollRate002+002,009-CollRate002+003,010-CollRate002+004,011-CollRate002+005,012-CollRate002+006,013-CollRate003+003,014-CollRate003+004,015-CollRate003+005,016-CollRate003+006,017-CollRate004+004,018-CollRate004+005,019-CollRate004+006,020-CollRate005+005,021-CollRate005+006,022-CollRate006+006,023-TotalCollRate +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.000000001,0,0,120868999999983,13409999999998.1,12625999999998.2,1839999999999.74,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148744999999979 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_100_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_100_ref.csv index 93153b607..56520d2ca 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_100_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_100_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate001+006,011-CollRate002+002,012-CollRate002+003,013-CollRate002+004,014-CollRate002+005,015-CollRate002+006,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate003+006,020-CollRate004+004,021-CollRate004+005,022-CollRate004+006,023-CollRate005+005,024-CollRate005+006,025-CollRate006+006,026-TotalCollRate -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-009,1.93874473680545E-003,5.12120879655489E-001,5.88191820195864E-005,0.00000000000000E+000,0.00000000000000E+000,1.35061999999981E+014,1.66679999999976E+013,1.54259999999978E+013,1.73199999999976E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.68887999999976E+014 +001-TIME,002-CollRate001+001,003-CollRate001+002,004-CollRate001+003,005-CollRate001+004,006-CollRate001+005,007-CollRate001+006,008-CollRate002+002,009-CollRate002+003,010-CollRate002+004,011-CollRate002+005,012-CollRate002+006,013-CollRate003+003,014-CollRate003+004,015-CollRate003+005,016-CollRate003+006,017-CollRate004+004,018-CollRate004+005,019-CollRate004+006,020-CollRate005+005,021-CollRate005+006,022-CollRate006+006,023-TotalCollRate +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.000000001,0,0,135061999999981,16667999999997.6,15425999999997.8,1731999999999.76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168887999999976 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_150_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_150_ref.csv index a06c5bc22..9ebe4d00d 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_150_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_150_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate001+006,011-CollRate002+002,012-CollRate002+003,013-CollRate002+004,014-CollRate002+005,015-CollRate002+006,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate003+006,020-CollRate004+004,021-CollRate004+005,022-CollRate004+006,023-CollRate005+005,024-CollRate005+006,025-CollRate006+006,026-TotalCollRate -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-009,2.14174542721335E-003,5.18064450636107E-001,5.88191818249936E-005,0.00000000000000E+000,0.00000000000000E+000,1.36544999999981E+014,1.87039999999974E+013,1.66429999999976E+013,2.01799999999972E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.73909999999975E+014 +001-TIME,002-CollRate001+001,003-CollRate001+002,004-CollRate001+003,005-CollRate001+004,006-CollRate001+005,007-CollRate001+006,008-CollRate002+002,009-CollRate002+003,010-CollRate002+004,011-CollRate002+005,012-CollRate002+006,013-CollRate003+003,014-CollRate003+004,015-CollRate003+005,016-CollRate003+006,017-CollRate004+004,018-CollRate004+005,019-CollRate004+006,020-CollRate005+005,021-CollRate005+006,022-CollRate006+006,023-TotalCollRate +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.000000001,0,0,136544999999981,18703999999997.4,16642999999997.6,2017999999999.72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,173909999999975 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_200_ref.csv b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_200_ref.csv index 749e53cf1..65905a2f6 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_200_ref.csv +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/PartAnalyze_200_ref.csv @@ -1,3 +1,3 @@ -001-TIME,002-Pmean,003-Pmax,004-MeanFreePath,005-CollRate001+001,006-CollRate001+002,007-CollRate001+003,008-CollRate001+004,009-CollRate001+005,010-CollRate001+006,011-CollRate002+002,012-CollRate002+003,013-CollRate002+004,014-CollRate002+005,015-CollRate002+006,016-CollRate003+003,017-CollRate003+004,018-CollRate003+005,019-CollRate003+006,020-CollRate004+004,021-CollRate004+005,022-CollRate004+006,023-CollRate005+005,024-CollRate005+006,025-CollRate006+006,026-TotalCollRate -0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000 -1.00000000000000E-009,2.25654789673067E-003,5.10124845460034E-001,5.88191820336924E-005,0.00000000000000E+000,0.00000000000000E+000,1.34603999999981E+014,1.99589999999972E+013,1.74839999999975E+013,2.58199999999963E+012,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,0.00000000000000E+000,1.74628999999975E+014 +001-TIME,002-CollRate001+001,003-CollRate001+002,004-CollRate001+003,005-CollRate001+004,006-CollRate001+005,007-CollRate001+006,008-CollRate002+002,009-CollRate002+003,010-CollRate002+004,011-CollRate002+005,012-CollRate002+006,013-CollRate003+003,014-CollRate003+004,015-CollRate003+005,016-CollRate003+006,017-CollRate004+004,018-CollRate004+005,019-CollRate004+006,020-CollRate005+005,021-CollRate005+006,022-CollRate006+006,023-TotalCollRate +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.000000001,0,0,134603999999981,19958999999997.2,17483999999997.5,2581999999999.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,174628999999975 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/get_values.py b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/get_values.py old mode 100755 new mode 100644 index 473266564..c7f571de7 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/get_values.py +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/get_values.py @@ -7,10 +7,10 @@ def get_numbers_from_filename(filename): directory = os.getcwd() -varName_01 = '007-CollRate001+003 ' -varName_02 = '008-CollRate001+004 ' -varName_03 = '009-CollRate001+005 ' -varName_04 = '010-CollRate001+006 ' +varName_01 = '004-CollRate001+003' +varName_02 = '005-CollRate001+004' +varName_03 = '006-CollRate001+005' +varName_04 = '007-CollRate001+006' for filename in sorted(os.listdir(directory)): if filename.startswith("PartAnalyze"): diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter.ini index ee3d6b2a4..21946819c 100644 --- a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter.ini +++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/parameter.ini @@ -47,7 +47,7 @@ Part-NumberOfRandomSeeds = 2 Particles-RandomSeed1 = 1 Particles-RandomSeed2 = 2 Particles-HaloEpsVelo = 3E5 -Particles-DSMC-CalcQualityFactors = T +Particles-DSMC-CalcQualityFactors = F Particles-CollXSec-NullCollision = T Particles-DSMC-ElectronicModel = 1 @@ -75,17 +75,12 @@ Particles-Species-Database = SpeciesDatabase.h5 ! =============================================================================== ! ! Weighting Factor ! =============================================================================== ! -Part-Species1-MacroParticleFactor = 5 -Part-Species2-MacroParticleFactor = 5 -Part-Species3-MacroParticleFactor = 5 -Part-Species4-MacroParticleFactor = 5 -Part-Species5-MacroParticleFactor = 5 -Part-Species6-MacroParticleFactor = 5 +Part-Species$-MacroParticleFactor = 5 ! =============================================================================== ! ! Species1 | H2 ! =============================================================================== ! -Part-Species1-nInits = 1 Part-Species1-SpeciesName = H2 +Part-Species1-nInits = 1 Part-Species1-Init1-velocityDistribution = maxwell_lpn Part-Species1-Init1-SpaceIC = background Part-Species1-Init1-VeloIC = 0. diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini index a8ed424b2..d712c0c51 100644 --- a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/parameter.ini @@ -22,7 +22,13 @@ CalcNumDens = T ! CALCULATION ! =============================================================================== ! tend = 5.0E-6 ! End time: 1e-4 -Analyze_dt = 5.0E-6 ! Timestep of analyze outputs +Analyze_dt = 2.5E-6 ! Timestep of analyze outputs +! =============================================================================== ! +! Load Balance +! =============================================================================== ! +DoLoadBalance = T +Load-DeviationThreshold = 1e-9 +LoadBalanceMaxSteps = 1 ! =============================================================================== ! ! BOUNDARIES ! =============================================================================== ! diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/readme.md b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/readme.md index 2a38a168f..5ce2c3906 100644 --- a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/readme.md +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/readme.md @@ -2,6 +2,4 @@ * Reservoir with CH4 and N2, representative for the atmosphere of Titan * Initial temperature at T = 25000K * 18 species and 28 reactions based on the chemistry model by Goecken -* Testing two different models of electronic excitation - * Liechty: Each simulation particle has a single energy level - * BGK-LT: Each simulation particle has a single energy level, relaxation with BGK type equation +* Species and reaction parameter are read-in from the species database, which is located in the top folder piclas/ diff --git a/src/particles/dsmc/dsmc_chemical_init.f90 b/src/particles/dsmc/dsmc_chemical_init.f90 index f2b46a6af..488a56c39 100644 --- a/src/particles/dsmc/dsmc_chemical_init.f90 +++ b/src/particles/dsmc/dsmc_chemical_init.f90 @@ -43,10 +43,12 @@ SUBROUTINE DefineParametersChemistry() IMPLICIT NONE !=================================================================================================================================== CALL prms%SetSection("Chemistry") -CALL prms%CreateStringOption( 'DSMC-ChemistryModel', 'Name of available chemistry reaction sets:\n'//& - 'Air_5Spec_11Reac_Park', 'none') +CALL prms%CreateStringOption( 'DSMC-ChemistryModel', 'Name of available chemistry reaction model, e.g.:\n'//& + 'Air_5Spec_8Reac_Park1993\n'//& + 'Mars_11Spec_27Reac_Johnston2014\n'//& + 'Titan_14Spec_24Reac_Savajano2011\n'//& + 'A complete list can be found in the documentation.', 'none') CALL prms%CreateIntOption( 'DSMC-NumOfReactions','Number of chemical reactions') -CALL prms%CreateLogicalOption( 'DSMC-OverwriteReacDatabase','Flag to set reac parameters manually', '.FALSE.') CALL prms%CreateIntOption( 'DSMC-Reaction[$]-NumberOfNonReactives', & 'Number of non-reactive collision partners (Length of the read-in vector)', & '0', numberedmulti=.TRUE.) @@ -60,7 +62,6 @@ SUBROUTINE DefineParametersChemistry() 'phIonXSec: photon-ionization with cross-section-based data for the reaction\n'//& 'QK: quantum kinetic\n'//& 'XSec: cross-section-based data for the reaction', 'TCE', numberedmulti=.TRUE.) -CALL prms%CreateStringOption( 'DSMC-Reaction[$]-ReactionName', 'name to identify reaction', numberedmulti=.TRUE.) CALL prms%CreateIntArrayOption( 'DSMC-Reaction[$]-Reactants' & ,'Reactants of Reaction[$]\n'//& '(SpecNumOfReactant1,\n'//& @@ -307,11 +308,6 @@ SUBROUTINE DSMC_chemical_init() END DO END IF -! ChemReac%DoOverwriteReacParameters = GETLOGICAL('DSMC-OverwriteReacDatabase') -! IF(SpeciesDatabase.EQ.'none') THEN -! ChemReac%DoOverwriteReacParameters = .TRUE. -! END IF - DoScat = .false. IF(SpeciesDatabase.EQ.'none') THEN DO iReac = 1, ReadInNumOfReact diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 5681e7d5b..7f62520fb 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -89,11 +89,7 @@ SUBROUTINE DefineParametersParticles() ' 2: Molecule\n'//& ' 4: Electron\n'//& ' 10: Atomic Ion\n'//& - ' 20: Molecular Ion\n'//& - ' 40: Excited Atom\n'//& - '100: Excited Atomic Ion\n'//& - '200: Excited Molecule\n'//& - '400: Excited Molecular Ion)', '0', numberedmulti=.TRUE.) + ' 20: Molecular Ion', '0', numberedmulti=.TRUE.) ! Ionization CALL prms%CreateLogicalOption( 'Part-DoInitialIonization' , 'When restarting from a state, ionize the species to a '//& 'specific degree', '.FALSE.') diff --git a/src/particles/particle_vars.f90 b/src/particles/particle_vars.f90 index 8e2c26378..23daae984 100644 --- a/src/particles/particle_vars.f90 +++ b/src/particles/particle_vars.f90 @@ -143,12 +143,7 @@ MODULE MOD_Particle_Vars ! 2 : Molecule ! 4 : Electron ! 10 : Atomic ion - ! 15 : Atomic CEX/MEX ion ! 20 : Molecular ion - ! 40 : Excited atom - ! 100 : Excited atomic ion - ! 200 : Excited molecule - ! 400 : Excited molecular ion REAL :: MacroParticleFactor ! Number of Microparticle per Macroparticle REAL :: TimeStepFactor ! Species-specific time step factor INTEGER :: NumberOfInits ! Number of different initial particle placements From 5f821a3d1679fade0061c0febc352a29a9979d58 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Thu, 15 Feb 2024 23:35:51 +0100 Subject: [PATCH 170/222] Added link to leak detection to merge request template --- .gitlab/merge_request_templates/Feature.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitlab/merge_request_templates/Feature.md b/.gitlab/merge_request_templates/Feature.md index 077866f2d..447884e0b 100644 --- a/.gitlab/merge_request_templates/Feature.md +++ b/.gitlab/merge_request_templates/Feature.md @@ -17,8 +17,9 @@ * [ ] Add entry in REGGIE.md table to indicate where the new feature is used * [ ] Check correct allocation and deallocation for the test case * [ ] Either check automatic restart functionality of reggie example via Load Balance - * [ ] And/or compile PICLas with Sanitzer and MPI=OFF as well as MPI=ON and run with one process find possible memory - leaks. When using MPICH, the test should also be performed with multiple processes + * [ ] And/or compile PICLas with Sanitizer and MPI=OFF as well as MPI=ON and run with one process to find possible memory + leaks. When using MPICH, the test should also be performed with multiple processes. Leaks can be identified using + [this approach](https://piclas.readthedocs.io/en/latest/developerguide/troubleshooting.html#possible-memory-leak-detection-when-using-mpich). * [ ] Test the three shared memory modes * [ ] `PICLAS_SHARED_MEMORY = MPI_COMM_TYPE_SHARED` (default) for splitting shared memory domains on the physical node * [ ] `PICLAS_SHARED_MEMORY = OMPI_COMM_TYPE_CORE` for splitting at process level, .i.e, each process yields a logical node From ed02709f4cb695ca3c69ccdecd3ccdd19381b707 Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Mon, 19 Feb 2024 12:36:27 +0100 Subject: [PATCH 171/222] Removed deprecated link in developer guide documentation --- docs/documentation/developerguide/examples.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/documentation/developerguide/examples.md b/docs/documentation/developerguide/examples.md index 8c1b31935..7ec02ab75 100644 --- a/docs/documentation/developerguide/examples.md +++ b/docs/documentation/developerguide/examples.md @@ -26,7 +26,7 @@ As (@gleichung1) shows, blabla. ## Bibtex, cite Hindenlang [@Hindenlang2015]. Only works with pandoc! -[bibshow file=https://www.flexi-project.org/wp-content/uploads/2016/07/userguide-1.bib] +[bibshow file=references.bib] Hindenlang [bibcite key=Hindenlang2015], Gassner [bibcite key=gassner2011disp] @@ -34,7 +34,7 @@ Hindenlang [bibcite key=Hindenlang2015], Gassner [bibcite key=gassner2011disp] ## section references ## Figures, caption -```{figure} https://www.flexi-project.org/wp-content/uploads/2016/01/M7_ROE_N7M10_q_0000060p2000000.jpg +```{figure} https://github.com/piclas-framework/piclas/blob/master/docs/logo.png?raw=true --- name: fig:mylabel width: 400px From a404ca53c116d56e36faf58de5bed24056c689ba Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Tue, 20 Feb 2024 09:38:56 +0100 Subject: [PATCH 172/222] Use dummyInt and logical variable for MPI_FETCH_AND_OP --- src/particles/particle_mesh/particle_bgm.f90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/particles/particle_mesh/particle_bgm.f90 b/src/particles/particle_mesh/particle_bgm.f90 index bfa64e20d..0ba6baab3 100644 --- a/src/particles/particle_mesh/particle_bgm.f90 +++ b/src/particles/particle_mesh/particle_bgm.f90 @@ -147,6 +147,7 @@ SUBROUTINE BuildBGMAndIdentifyHaloRegion() ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES +LOGICAL,PARAMETER :: trueFlag=.TRUE. INTEGER :: iElem,iLocSide,SideID INTEGER :: FirstElem,LastElem INTEGER :: firstNodeID,lastNodeID @@ -788,7 +789,7 @@ SUBROUTINE BuildBGMAndIdentifyHaloRegion() ! Mortar sides: Only multi-node DO iElem = firstElem, lastElem ASSOCIATE(posElem => (iElem-1)*ELEMINFOSIZE + (ELEM_HALOFLAG-1)) - CALL MPI_FETCH_AND_OP(ElemDone,ElemDone,MPI_INTEGER,0,INT(posElem*SIZE_INT,MPI_ADDRESS_KIND),MPI_NO_OP,ElemInfo_Shared_Win,iError) + CALL MPI_FETCH_AND_OP(dummyInt,ElemDone,MPI_INTEGER,0,INT(posElem*SIZE_INT,MPI_ADDRESS_KIND),MPI_NO_OP,ElemInfo_Shared_Win,iError) CALL MPI_WIN_FLUSH(0,ElemInfo_Shared_Win,iError) END ASSOCIATE IF (ElemDone.LT.1) CYCLE @@ -1257,7 +1258,7 @@ SUBROUTINE BuildBGMAndIdentifyHaloRegion() ! Increment number of elements on FIBGM cell CALL MPI_FETCH_AND_OP(increment,dummyInt,MPI_INTEGER,0,INT(posElem*SIZE_INT,MPI_ADDRESS_KIND),MPI_SUM,FIBGM_nTotalElems_Shared_Win,IERROR) ! Perform logical OR and place data on CN root - CALL MPI_FETCH_AND_OP(.TRUE. ,dummyLog,MPI_LOGICAL,0,INT(posRank*SIZE_INT,MPI_ADDRESS_KIND),MPI_LOR,FIBGMToProcFlag_Shared_Win ,IERROR) + CALL MPI_FETCH_AND_OP(trueFlag ,dummyLog,MPI_LOGICAL,0,INT(posRank*SIZE_INT,MPI_ADDRESS_KIND),MPI_LOR,FIBGMToProcFlag_Shared_Win ,IERROR) ! MPI_FETCH_AND_OP does guarantee completion before MPI_WIN_FLUSH, so ensure it before leaving the scope CALL MPI_WIN_FLUSH(0,FIBGM_nTotalElems_Shared_Win,iError) CALL MPI_WIN_FLUSH(0,FIBGMToProcFlag_Shared_Win ,iError) From 77f87646e18437ffe59cd01e8d00f8c7f46a6b21 Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Tue, 31 Oct 2023 18:03:01 +0100 Subject: [PATCH 173/222] Added reggie table script for automatically creating the reggie markdown table entry after adding new reggies --- .gitlab/merge_request_templates/Feature.md | 2 +- tools/reggietable.sh | 49 ++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100755 tools/reggietable.sh diff --git a/.gitlab/merge_request_templates/Feature.md b/.gitlab/merge_request_templates/Feature.md index 447884e0b..2902b6280 100644 --- a/.gitlab/merge_request_templates/Feature.md +++ b/.gitlab/merge_request_templates/Feature.md @@ -14,7 +14,7 @@ * [ ] Inside the routine at the appropriate positions * [ ] Reggie: The new feature must be tested with at least one new or old regression test(s) * [ ] Add small test setup if the new feature is not covered by any old regression tests - * [ ] Add entry in REGGIE.md table to indicate where the new feature is used + * [ ] Add entry in REGGIE.md table by running the reggie table script within the reggie folder where the builds.ini file is via `./../../tools/reggietable.sh` and adjusting the output * [ ] Check correct allocation and deallocation for the test case * [ ] Either check automatic restart functionality of reggie example via Load Balance * [ ] And/or compile PICLas with Sanitizer and MPI=OFF as well as MPI=ON and run with one process to find possible memory diff --git a/tools/reggietable.sh b/tools/reggietable.sh new file mode 100755 index 000000000..11262b753 --- /dev/null +++ b/tools/reggietable.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# Script for automatically creating the reggie table for the content of the current folder that can be copied into REGGIE.md + +if test -t 1; then # if terminal + NbrOfColors=$(which tput > /dev/null && tput colors) # supports color + if test -n "$NbrOfColors" && test $NbrOfColors -ge 8; then + NC="$(tput sgr0)" + RED="$(tput setaf 1)" + GREEN="$(tput setaf 2)" + YELLOW="$(tput setaf 3)" + fi +fi + +nDIRECTORY=0 +nprocs=0 +nfeature=0 +ncomparing=0 +nlink=0 + +# find max length of each element +for DIRECTORY in $(ls -d */) ; do + procs=$(grep -in MPI ${DIRECTORY}command_line.ini | cut -d "=" -f2) + feature=$(head -n1 ${DIRECTORY}readme.md | cut -d "#" -f2) + comparing=$(grep "**Comparing**" ${DIRECTORY}readme.md | cut -d ":" -f2) + string="$(pwd -P)${DIRECTORY}" + link="[Link](regressioncheck${string#*regressioncheck}readme.md)" + + nDIRECTORY=$(( nDIRECTORY > ${#DIRECTORY} ? nDIRECTORY : ${#DIRECTORY} )) + nprocs=$(( nprocs > ${#procs} ? nprocs : ${#procs} )) + nfeature=$(( nfeature > ${#feature} ? nfeature : ${#feature} )) + ncomparing=$(( ncomparing > ${#comparing} ? ncomparing : ${#comparing} )) + nlink=$(( nlink > ${#link} ? nlink : ${#link} )) +done + +count=0 +# Display the lines +for DIRECTORY in $(ls -d */) ; do + count=$((count + 1)) # must be placed after echo on HLRS, ForHLR1 (but not on local PC with zsh) + procs=$(grep -in MPI ${DIRECTORY}command_line.ini | cut -d "=" -f2) + feature=$(head -n1 ${DIRECTORY}readme.md | cut -d "#" -f2) + comparing=$(grep "**Comparing**" ${DIRECTORY}readme.md | cut -d ":" -f2) + string="$(pwd -P)${DIRECTORY}" + link="[Link](regressioncheck${string#*regressioncheck}readme.md)" + + output="| %-4s | %-${nDIRECTORY}s | | %-${nfeature}s | nProcs=%-${nprocs}s | %-${ncomparing}s | %-${nlink}s |\n" + printf "${output}" "${count}" "${DIRECTORY}" "${feature}" "${procs}" "${comparing}" "${link}" +done + From d128fff01befc9c3931e83ca927133333b2fdc3c Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Tue, 20 Feb 2024 12:07:09 +0100 Subject: [PATCH 174/222] Updated reggie table script --- REGGIE.md | 4 +-- tools/reggietable.sh | 58 +++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 57 insertions(+), 5 deletions(-) diff --git a/REGGIE.md b/REGGIE.md index a2aed1995..6e0232a41 100644 --- a/REGGIE.md +++ b/REGGIE.md @@ -31,8 +31,8 @@ Regression testing for PIC, solving the complete Maxwell equations with RK4: [Li | 02 | 2D_variable_particle_init_n_T_v | particle emission from a distribution in 2D | nProcs=1,2,5 | PartAnalyze.csv | [Link](regressioncheck/CHE_PIC_maxwell_RK4/2D_variable_particle_init_n_T_v/readme.md) | | 03 | 3D_variable_B | external magnetic field from .h5 (equidistant) | nProcs=1,2,3,4,5,10,15,25,32 | PartAnalyze.csv, PIC-EMField.h5 | [Link](regressioncheck/CHE_PIC_maxwell_RK4/3D_variable_B/readme.md) | | 04 | gyrotron_variable_Bz | variable Bz | nProcs=1,2 | Database.csv, relative | [Link](regressioncheck/CHE_PIC_maxwell_RK4/gyrotron_variable_Bz/readme.md) | -| 05 | IMD_coupling | mapping from IMP to PICLas | nProcs=1 | PartPata in Box | [Link](regressioncheck/CHE_PIC_maxwell_RK4/IMD_coupling/readme.md) | -| 06 | initialIonization | | nProcs=2 | PartPata | [Link](regressioncheck/CHE_PIC_maxwell_RK4/initialIonization/readme.md) | +| 05 | IMD_coupling | mapping from IMP to PICLas | nProcs=1 | PartData in Box | [Link](regressioncheck/CHE_PIC_maxwell_RK4/IMD_coupling/readme.md) | +| 06 | initialIonization | | nProcs=2 | PartData | [Link](regressioncheck/CHE_PIC_maxwell_RK4/initialIonization/readme.md) | | 06 | single_particle_PML | PML | particle | nProcs=1,2,5,8,10 | [Link](regressioncheck/CHE_PIC_maxwell_RK4/single_particle_PML/readme.md) | #### CHE_DSMC diff --git a/tools/reggietable.sh b/tools/reggietable.sh index 11262b753..103ba12a1 100755 --- a/tools/reggietable.sh +++ b/tools/reggietable.sh @@ -22,7 +22,33 @@ nlink=0 for DIRECTORY in $(ls -d */) ; do procs=$(grep -in MPI ${DIRECTORY}command_line.ini | cut -d "=" -f2) feature=$(head -n1 ${DIRECTORY}readme.md | cut -d "#" -f2) - comparing=$(grep "**Comparing**" ${DIRECTORY}readme.md | cut -d ":" -f2) + comparing=$(grep "\*\*Comparing\*\*" ${DIRECTORY}readme.md | cut -d ":" -f2) + if [[ -z "${comparing}" ]]; then + found=$(cat ${DIRECTORY}analyze.ini | grep "PartAnalyze.csv") + if [[ -n "${found}" ]]; then + if [[ -n ${comparing} ]]; then + comparing="${comparing}, PartAnalyze" + else + comparing="PartAnalyze" + fi + fi + found=$(cat ${DIRECTORY}analyze.ini | grep "FieldAnalyze.csv") + if [[ -n "${found}" ]]; then + if [[ -n ${comparing} ]]; then + comparing="${comparing}, FieldAnalyze" + else + comparing="FieldAnalyze" + fi + fi + found=$(cat ${DIRECTORY}analyze.ini | grep "SurfaceAnalyze.csv") + if [[ -n "${found}" ]]; then + if [[ -n ${comparing} ]]; then + comparing="${comparing}, SurfaceAnalyze" + else + comparing="SurfaceAnalyze" + fi + fi + fi string="$(pwd -P)${DIRECTORY}" link="[Link](regressioncheck${string#*regressioncheck}readme.md)" @@ -39,11 +65,37 @@ for DIRECTORY in $(ls -d */) ; do count=$((count + 1)) # must be placed after echo on HLRS, ForHLR1 (but not on local PC with zsh) procs=$(grep -in MPI ${DIRECTORY}command_line.ini | cut -d "=" -f2) feature=$(head -n1 ${DIRECTORY}readme.md | cut -d "#" -f2) - comparing=$(grep "**Comparing**" ${DIRECTORY}readme.md | cut -d ":" -f2) + comparing=$(grep "\*\*Comparing\*\*" ${DIRECTORY}readme.md | cut -d ":" -f2) + if [[ -z "${comparing}" ]]; then + found=$(cat ${DIRECTORY}analyze.ini | grep "PartAnalyze.csv") + if [[ -n "${found}" ]]; then + if [[ -n ${comparing} ]]; then + comparing="${comparing}, PartAnalyze" + else + comparing="PartAnalyze" + fi + fi + found=$(cat ${DIRECTORY}analyze.ini | grep "FieldAnalyze.csv") + if [[ -n "${found}" ]]; then + if [[ -n ${comparing} ]]; then + comparing="${comparing}, FieldAnalyze" + else + comparing="FieldAnalyze" + fi + fi + found=$(cat ${DIRECTORY}analyze.ini | grep "SurfaceAnalyze.csv") + if [[ -n "${found}" ]]; then + if [[ -n ${comparing} ]]; then + comparing="${comparing}, SurfaceAnalyze" + else + comparing="SurfaceAnalyze" + fi + fi + fi string="$(pwd -P)${DIRECTORY}" link="[Link](regressioncheck${string#*regressioncheck}readme.md)" - output="| %-4s | %-${nDIRECTORY}s | | %-${nfeature}s | nProcs=%-${nprocs}s | %-${ncomparing}s | %-${nlink}s |\n" + output="| %-4s | %-${nDIRECTORY}s | | %-${nfeature}s | %-${nprocs}s | %-${ncomparing}s | %-${nlink}s |\n" printf "${output}" "${count}" "${DIRECTORY}" "${feature}" "${procs}" "${comparing}" "${link}" done From 37b63e23ad858edd6d45cbe7a1c500629678cf2d Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Tue, 20 Feb 2024 20:40:41 +0100 Subject: [PATCH 175/222] Fix dollarmath setting in MyST RTD, which is now disabled by default --- docs/documentation/conf.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/documentation/conf.py b/docs/documentation/conf.py index f42592400..cf855f101 100644 --- a/docs/documentation/conf.py +++ b/docs/documentation/conf.py @@ -96,3 +96,14 @@ # -- Table and Figure labelling ---------------------------------------------- # Activate using: {numref}`tab:some-name` -> Table 1 numfig = True + +# -- MyST-Parser Syntax Extensions ------------------------------------------- +# https://myst-parser.readthedocs.io/en/latest/syntax/optional.html#math-shortcuts +# +# "dollarmath" for parsing of dollar $ and $$ encapsulated math. +# "amsmath" for direct parsing of amsmath LaTeX environments. +# +myst_enable_extensions = [ + "amsmath", + "dollarmath", +] From 94b7cae925c82fbb4ae5e7afd4a50d1bde1a59ea Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Wed, 21 Feb 2024 22:34:55 +0100 Subject: [PATCH 176/222] Do not perform CalcWallSample for a particle that has been deleted due to PorousBC or CircularInflow --- src/particles/surfacemodel/surfacemodel_main.f90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index 62892b840..662ff93cb 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -133,8 +133,9 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc) TrackInfo%q = INT((Etatild+1.0)/dXiEQ_SurfSample)+1 END IF SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) - ! Sample momentum, heatflux and collision counter on surface - CALL CalcWallSample(PartID,SurfSideID,'old',SurfaceNormal_opt=n_loc) + ! Sample momentum, heatflux and collision counter on surface (Check if particle is still inside is required, since particles can + ! be removed in the case of UseCircularInflow and nPorousBC. These particles shall not be sampled.) + IF(PDM%ParticleInside(PartID)) CALL CalcWallSample(PartID,SurfSideID,'old',SurfaceNormal_opt=n_loc) END IF !=================================================================================================================================== ! 2.) Species Swap From 6a8716b700a5f1a5f9a1cecf2251c63d7c40124b Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Wed, 21 Feb 2024 23:06:37 +0100 Subject: [PATCH 177/222] Restore executable mode for setup scripts and remove them from the pre-commit hook check --- .githooks/pre-commit | 2 +- docs/documentation/buildHTML.sh | 0 docs/documentation/buildPDF.sh | 0 tools/Setup_ModuleEnv/InstallAOTUS.sh | 0 tools/Setup_ModuleEnv/InstallCMake.sh | 0 tools/Setup_ModuleEnv/InstallGCC.sh | 0 tools/Setup_ModuleEnv/InstallHDF5.sh | 0 tools/Setup_ModuleEnv/InstallHOPR.sh | 0 tools/Setup_ModuleEnv/InstallMPIallCOMPILERS.sh | 0 tools/Setup_ModuleEnv/InstallModules.sh | 0 tools/Setup_ModuleEnv/InstallPETSc.sh | 0 tools/Setup_ModuleEnv/InstallPackagesParaView.sh | 0 tools/Setup_ModuleEnv/InstallPackagesReggie.sh | 0 tools/Setup_ModuleEnv/InstallPackagesServer.sh | 0 tools/Setup_ModuleEnv/InstallPackagesUbuntu16.sh | 0 tools/Setup_ModuleEnv/InstallPackagesUbuntu20.sh | 0 tools/Setup_ModuleEnv/InstallPackagesUbuntu21.sh | 0 tools/Setup_ModuleEnv/InstallPackagesUbuntu22.sh | 0 tools/Setup_ModuleEnv/InstallParaview.sh | 0 19 files changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 docs/documentation/buildHTML.sh mode change 100644 => 100755 docs/documentation/buildPDF.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallAOTUS.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallCMake.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallGCC.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallHDF5.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallHOPR.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallMPIallCOMPILERS.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallModules.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallPETSc.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallPackagesParaView.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallPackagesReggie.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallPackagesServer.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallPackagesUbuntu16.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallPackagesUbuntu20.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallPackagesUbuntu21.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallPackagesUbuntu22.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallParaview.sh diff --git a/.githooks/pre-commit b/.githooks/pre-commit index 20ef94a42..e9ff1f5ed 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -126,7 +126,7 @@ if [ -n "$CHANGED" ]; then # Check if file is executable if [ -x "$file" ]; then - if [ "$file" != ".githooks/pre-commit" ] && [ "$file" != "docs/documentation/buildPDF.sh" ] && [ "$file" != "docs/documentation/buildHTML.sh" ] ; then + if [ "$file" != ".githooks/pre-commit" ] && [ "$file" != "docs/documentation/buildPDF.sh" ] && [ "$file" != "docs/documentation/buildHTML.sh" ] && [ "$file" != "tools/Setup_ModuleEnv/Install"* ] ; then # Error header ERROR=1 EXEERR=1 diff --git a/docs/documentation/buildHTML.sh b/docs/documentation/buildHTML.sh old mode 100644 new mode 100755 diff --git a/docs/documentation/buildPDF.sh b/docs/documentation/buildPDF.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallAOTUS.sh b/tools/Setup_ModuleEnv/InstallAOTUS.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallCMake.sh b/tools/Setup_ModuleEnv/InstallCMake.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallGCC.sh b/tools/Setup_ModuleEnv/InstallGCC.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallHDF5.sh b/tools/Setup_ModuleEnv/InstallHDF5.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallHOPR.sh b/tools/Setup_ModuleEnv/InstallHOPR.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallMPIallCOMPILERS.sh b/tools/Setup_ModuleEnv/InstallMPIallCOMPILERS.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallModules.sh b/tools/Setup_ModuleEnv/InstallModules.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallPETSc.sh b/tools/Setup_ModuleEnv/InstallPETSc.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallPackagesParaView.sh b/tools/Setup_ModuleEnv/InstallPackagesParaView.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallPackagesReggie.sh b/tools/Setup_ModuleEnv/InstallPackagesReggie.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallPackagesServer.sh b/tools/Setup_ModuleEnv/InstallPackagesServer.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallPackagesUbuntu16.sh b/tools/Setup_ModuleEnv/InstallPackagesUbuntu16.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallPackagesUbuntu20.sh b/tools/Setup_ModuleEnv/InstallPackagesUbuntu20.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallPackagesUbuntu21.sh b/tools/Setup_ModuleEnv/InstallPackagesUbuntu21.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallPackagesUbuntu22.sh b/tools/Setup_ModuleEnv/InstallPackagesUbuntu22.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallParaview.sh b/tools/Setup_ModuleEnv/InstallParaview.sh old mode 100644 new mode 100755 From 883531b7751532af565360baa8d4fae1b3fc7549 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Thu, 22 Feb 2024 00:33:10 +0100 Subject: [PATCH 178/222] Calculate the correct surface area for the circular inflow when only the minimum radius is used to exclude a circle area --- .../emission/particle_surface_flux_init.f90 | 83 +++++++++++-------- 1 file changed, 50 insertions(+), 33 deletions(-) diff --git a/src/particles/emission/particle_surface_flux_init.f90 b/src/particles/emission/particle_surface_flux_init.f90 index 0ae442262..ac850bfb7 100644 --- a/src/particles/emission/particle_surface_flux_init.f90 +++ b/src/particles/emission/particle_surface_flux_init.f90 @@ -161,7 +161,7 @@ SUBROUTINE InitializeParticleSurfaceflux() REAL :: tmp_SubSideDmax(SurfFluxSideSize(1),SurfFluxSideSize(2)) REAL :: tmp_SubSideAreas(SurfFluxSideSize(1),SurfFluxSideSize(2)) REAL :: tmp_BezierControlPoints2D(2,0:NGeo,0:NGeo,SurfFluxSideSize(1),SurfFluxSideSize(2)) -REAL :: VFR_total, RestartTimeVar +REAL :: VFR_total, RestartTimeVar, excludeCircleArea TYPE(tBCdata_auxSFRadWeight),ALLOCATABLE :: BCdata_auxSFTemp(:) #if USE_MPI REAL :: totalAreaSF_global @@ -198,10 +198,18 @@ SUBROUTINE InitializeParticleSurfaceflux() !-- 3.: initialize Surfaceflux-specific data DO iSpec=1,nSpecies DO iSF=1,Species(iSpec)%nSurfacefluxBCs - currentBC = Species(iSpec)%Surfaceflux(iSF)%BC + ASSOCIATE(SF => Species(iSpec)%Surfaceflux(iSF)) + currentBC = SF%BC IF (BCdata_auxSF(currentBC)%SideNumber.EQ.-1) THEN CALL abort(__STAMP__,'ERROR in ParticleSurfaceflux: Someting is wrong with SideNumber of BC ',currentBC) END IF + ! Circular inflow: a circle to be excluded from the surface flux has been defined (only rmin defined, rmax undefined) + ! SF%totalAreaSF has been initialized with the negative circle area, which is substracted from the total area after the MPI communication + excludeCircleArea = 0. + IF(SF%CircularInflow.AND.(SF%totalAreaSF.LT.0.)) THEN + excludeCircleArea = SF%totalAreaSF + SF%totalAreaSF = 0. + END IF ! Loop over sides on the surface flux DO iSide=1,BCdata_auxSF(currentBC)%SideNumber BCSideID=BCdata_auxSF(currentBC)%SideList(iSide) @@ -209,37 +217,34 @@ SUBROUTINE InitializeParticleSurfaceflux() iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) SideID=GetGlobalNonUniqueSideID(offsetElem+ElemID,iLocSide) ! Calculate the total area of the surface flux - IF (Species(iSpec)%Surfaceflux(iSF)%AcceptReject) THEN - CALL GetBezierSampledAreas(SideID=SideID,BezierSampleN=BezierSampleN & - ,BezierSurfFluxProjection_opt=.NOT.Species(iSpec)%Surfaceflux(iSF)%VeloIsNormal & - ,SurfMeshSubSideAreas=tmp_SubSideAreas,DmaxSampleN_opt=Species(iSpec)%Surfaceflux(iSF)%ARM_DmaxSampleN & + IF (SF%AcceptReject) THEN + CALL GetBezierSampledAreas(SideID=SideID,BezierSampleN=BezierSampleN,BezierSurfFluxProjection_opt=.NOT.SF%VeloIsNormal & + ,SurfMeshSubSideAreas=tmp_SubSideAreas,DmaxSampleN_opt=SF%ARM_DmaxSampleN & ,Dmax_opt=tmp_SubSideDmax,BezierControlPoints2D_opt=tmp_BezierControlPoints2D) ELSE IF (.NOT.TriaSurfaceFlux) THEN CALL GetBezierSampledAreas(SideID=SideID,BezierSampleN=BezierSampleN & - ,BezierSurfFluxProjection_opt=.NOT.Species(iSpec)%Surfaceflux(iSF)%VeloIsNormal,SurfMeshSubSideAreas=tmp_SubSideAreas) + ,BezierSurfFluxProjection_opt=.NOT.SF%VeloIsNormal,SurfMeshSubSideAreas=tmp_SubSideAreas) ELSE ! TriaSurfaceFlux DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) tmp_SubSideAreas(iSample,jSample)=SurfMeshSubSideData(iSample,jSample,BCSideID)%area - IF(.NOT.Species(iSpec)%Surfaceflux(iSF)%CircularInflow) THEN - Species(iSpec)%Surfaceflux(iSF)%totalAreaSF = Species(iSpec)%Surfaceflux(iSF)%totalAreaSF & - + SurfMeshSubSideData(iSample,jSample,BCSideID)%area + ! Do not calculate the area if the circular inflow has been activated, unless only the inner radius has been defined + IF(.NOT.SF%CircularInflow.OR.excludeCircleArea.LT.0.) THEN + SF%totalAreaSF = SF%totalAreaSF + SurfMeshSubSideData(iSample,jSample,BCSideID)%area END IF END DO; END DO END IF ! Initialize circular inflow (determine if elements are (partially) inside/outside) - IF (Species(iSpec)%Surfaceflux(iSF)%CircularInflow) CALL DefineCircInflowRejectType(iSpec, iSF, iSide) + IF (SF%CircularInflow) CALL DefineCircInflowRejectType(iSpec, iSF, iSide) ! Initialize the volume flow rate CALL InitVolumeFlowRate(iSpec, iSF, iSide, tmp_SubSideAreas, BCdata_auxSFTemp) ! Initialize acceptance-rejection on SF - IF (Species(iSpec)%Surfaceflux(iSF)%AcceptReject) THEN + IF (SF%AcceptReject) THEN DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - Species(iSpec)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Dmax = tmp_SubSideDmax(iSample,jSample) - IF (.NOT.Species(iSpec)%Surfaceflux(iSF)%VeloIsNormal) THEN - ALLOCATE(Species(iSpec)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample & - ,iSide)%BezierControlPoints2D(1:2,0:NGeo,0:NGeo)) + SF%SurfFluxSubSideData(iSample,jSample,iSide)%Dmax = tmp_SubSideDmax(iSample,jSample) + IF (.NOT.SF%VeloIsNormal) THEN + ALLOCATE(SF%SurfFluxSubSideData(iSample,jSample,iSide)%BezierControlPoints2D(1:2,0:NGeo,0:NGeo)) DO iCopy1=0,NGeo; DO iCopy2=0,NGeo; DO iCopy3=1,2 - Species(iSpec)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample & - ,iSide)%BezierControlPoints2D(iCopy3,iCopy2,iCopy1) & + SF%SurfFluxSubSideData(iSample,jSample,iSide)%BezierControlPoints2D(iCopy3,iCopy2,iCopy1) & = tmp_BezierControlPoints2D(iCopy3,iCopy2,iCopy1,iSample,jSample) END DO; END DO; END DO END IF !.NOT.VeloIsNormal @@ -247,40 +252,43 @@ SUBROUTINE InitializeParticleSurfaceflux() END IF END DO ! iSide !--- 3b: ReduceNoise initialization - IF (Species(iSpec)%Surfaceflux(iSF)%ReduceNoise) CALL InitReduceNoiseSF(iSpec, iSF) + IF (SF%ReduceNoise) CALL InitReduceNoiseSF(iSpec, iSF) ! Calculate the total area per surface flux #if USE_MPI - IF(.NOT.Species(iSpec)%Surfaceflux(iSF)%CircularInflow) THEN + IF(.NOT.SF%CircularInflow.OR.excludeCircleArea.LT.0.) THEN totalAreaSF_global = 0.0 - CALL MPI_ALLREDUCE(Species(iSpec)%Surfaceflux(iSF)%totalAreaSF,totalAreaSF_global,1, & - MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_PICLAS,IERROR) - Species(iSpec)%Surfaceflux(iSF)%totalAreaSF = totalAreaSF_global + CALL MPI_ALLREDUCE(SF%totalAreaSF,totalAreaSF_global,1,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_PICLAS,IERROR) + IF(SF%CircularInflow.AND.(excludeCircleArea.LT.0.)) THEN + ! Circular inflow with rmax undefined: Substract circle area from total BC area (excludeCircleArea is negative) + SF%totalAreaSF = totalAreaSF_global + excludeCircleArea + ELSE + SF%totalAreaSF = totalAreaSF_global + END IF END IF #endif ! Inserting particles through a rate instead of particle density. This assumes that the volume flow rate (VFR) has been replaced ! by the local area (in InitVolumeFlowRate). - IF(Species(iSpec)%Surfaceflux(iSF)%UseEmissionCurrent) THEN + IF(SF%UseEmissionCurrent) THEN ! Store the current as particles per second per square meter in the particle density variable. - IF(Species(iSpec)%Surfaceflux(iSF)%ThermionicEmission) THEN + IF(SF%ThermionicEmission) THEN ! Thermionic emission: Richardson-Dushman equation gives directly the current density [A/m2] - Species(iSpec)%Surfaceflux(iSF)%PartDensity = Species(iSpec)%Surfaceflux(iSF)%EmissionCurrent / ABS(Species(iSpec)%ChargeIC) + SF%PartDensity = SF%EmissionCurrent / ABS(Species(iSpec)%ChargeIC) ELSE - Species(iSpec)%Surfaceflux(iSF)%PartDensity = Species(iSpec)%Surfaceflux(iSF)%EmissionCurrent & - / (ABS(Species(iSpec)%ChargeIC) * Species(iSpec)%Surfaceflux(iSF)%totalAreaSF) + SF%PartDensity = SF%EmissionCurrent / (ABS(Species(iSpec)%ChargeIC) * SF%totalAreaSF) END IF END IF - IF(Species(iSpec)%Surfaceflux(iSF)%UseMassflow) THEN + IF(SF%UseMassflow) THEN ! Store the mass flow as particles per second per square meter in the particle density variable. - Species(iSpec)%Surfaceflux(iSF)%PartDensity = Species(iSpec)%Surfaceflux(iSF)%Massflow & - / (Species(iSpec)%MassIC * Species(iSpec)%Surfaceflux(iSF)%totalAreaSF) + SF%PartDensity = SF%Massflow / (Species(iSpec)%MassIC * SF%totalAreaSF) END IF ! Output of the number of sides for circular inflow (only if code was compiled with CODE_ANALYZE = TRUE #ifdef CODE_ANALYZE - IF (BCdata_auxSF(currentBC)%SideNumber.GT.0 .AND. Species(iSpec)%Surfaceflux(iSF)%CircularInflow) THEN + IF (BCdata_auxSF(currentBC)%SideNumber.GT.0 .AND. SF%CircularInflow) THEN IPWRITE(*,'(I4,A,2(1X,I0),A,3(1X,I0))') ' For Surfaceflux/Spec',iSF,iSpec,' are nType0,1,2: ', & CountCircInflowType(1,iSF,iSpec),CountCircInflowType(2, iSF,iSpec), CountCircInflowType(3, iSF,iSpec) END IF #endif /*CODE_ANALYZE*/ + END ASSOCIATE END DO !iSF END DO !iSpec @@ -481,7 +489,16 @@ SUBROUTINE ReadInAndPrepareSurfaceFlux(MaxSurfacefluxBCs, nDataBC) SF%rmax = GETREAL('Part-Species'//TRIM(hilf2)//'-rmax',TRIM(hilf3)) SF%rmin = GETREAL('Part-Species'//TRIM(hilf2)//'-rmin') ! Total area of surface flux - SF%totalAreaSF = Pi*(SF%rmax*SF%rmax - SF%rmin*SF%rmin) + IF(SF%rmax.NE.HUGE(SF%rmax)) THEN + ! rmax has been defined and a regular circular/ring-shaped inflow is performed + SF%totalAreaSF = Pi*(SF%rmax*SF%rmax - SF%rmin*SF%rmin) + ELSE IF (SF%rmin.GT.0.) THEN + ! rmax has NOT been defined to exclude a circle from the inflow + SF%totalAreaSF = -Pi*SF%rmin*SF%rmin + ELSE + ! Neither rmin nor rmax have been defined + CALL abort(__STAMP__,'ERROR in Surface Flux with CircularInflow: A maximum (=rmax) and/or a minimum radius(=rmin) have to be defined!') + END IF END IF END IF !.NOT.VeloIsNormal IF (.NOT.SF%VeloIsNormal) THEN From a1af27b04bb64d7ec491557e5aabe3552d457665 Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Thu, 22 Feb 2024 18:14:43 +0100 Subject: [PATCH 179/222] Testing custom pipeline naming --- .gitlab-ci.yml | 60 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 9 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 231254439..5bf476c02 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,3 +1,43 @@ + +# # ---------------------------------------------------------------------------------------------------------------------------------------------------- +# # Use pipeline name to indicate whether MPICH or OpenMPI is used in the complete pipeline execution +# # ---------------------------------------------------------------------------------------------------------------------------------------------------- +# workflow: +# name: $PIPELINE_NAME +# rules: +# - if: '$CI_PIPELINE_CREATED_AT =~ /^\d\d\d\d-\d\d-\d[1,3,5,7,9]T.*/ || $CI_COMMIT_REF_NAME !~ /^gitlab.custom.*/' +# variables: +# PIPELINE_NAME: '🔵 MPICH: on ${CI_PIPELINE_CREATED_AT} 123 ${CI_COMMIT_REF_NAME} 123' +# +# - if: '$CI_PIPELINE_CREATED_AT =~ /^\d\d\d\d-\d\d-\d[0,2,4,6,8]T.*/|| $CI_COMMIT_REF_NAME =~ /^gitlab.custom.*/' +# variables: +# PIPELINE_NAME: '🟠 OpenMPI: $(date +%d) ${CI_COMMIT_REF_NAME}' +# +# - when: never + +# ---------------------------------------------------------------------------------------------------------------------------------------------------- +# Use pipeline name to indicate whether default shared memory, node split or core split is used +# ---------------------------------------------------------------------------------------------------------------------------------------------------- +workflow: + name: $PIPELINE_NAME + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' + when: never + - if: '$DO_NODE_SPLIT' + variables: + PIPELINE_NAME: '🔵 Node Splitting ${CI_COMMIT_REF_NAME}' + + - if: '$DO_CORE_SPLIT' + variables: + PIPELINE_NAME: '🟠 Core Splitting ${CI_COMMIT_REF_NAME}' + + - if: '$DO_CORE_SPLIT == null && $DO_NODE_SPLIT == null' + variables: + PIPELINE_NAME: '🟢 ${CI_COMMIT_REF_NAME}' + + - when: never + +# ---------------------------------------------------------------------------------------------------------------------------------------------------- # Settings # ---------------------------------------------------------------------------------------------------------------------------------------------------- # Load modules on new boltzplatz reggie @@ -33,6 +73,7 @@ before_script: echo $day > reggie/.day; ls -la reggie; cat reggie/.day; + echo "CI_PIPELINE_CREATED_AT $(date -d $CI_PIPELINE_CREATED_AT +%d)"; fi - if [ ! -f "reggie/.day" ]; then echo "reggie/.day does not exist! Setting even day number."; @@ -42,25 +83,26 @@ before_script: fi - echo "Perform arithmetic with 0-prefixed numbers by telling bash to use base-10 by specifying 10#" - if [ "$((10#$day % 2))" == "0" ]; then - echo "Even day number ($day). Loading OpenMPI"; - module purge; - module load cmake/3.26.4 gcc/13.2.0 openmpi/4.1.5/gcc/13.2.0 hdf5/1.14.0/gcc/13.2.0/openmpi/4.1.5 hopr/master/gcc/13.2.0/openmpi/4.1.5/hdf5/1.14.0 petsc/3.19.3/gcc/13.2.0/openmpi/4.1.5; - else - echo "Odd day number ($day). Loading MPICH"; - module purge; - module load cmake/3.26.4 gcc/13.2.0 mpich/4.1.2/gcc/13.2.0 hdf5/1.14.0/gcc/13.2.0/mpich/4.1.2 hopr/master/gcc/13.2.0/mpich/4.1.2/hdf5/1.14.0 petsc/3.19.3/gcc/13.2.0/mpich/4.1.2; + echo "Even day number ($day). Loading OpenMPI"; + module purge; + module load cmake/3.26.4 gcc/13.2.0 openmpi/4.1.5/gcc/13.2.0 hdf5/1.14.0/gcc/13.2.0/openmpi/4.1.5 hopr/master/gcc/13.2.0/openmpi/4.1.5/hdf5/1.14.0 petsc/3.19.3/gcc/13.2.0/openmpi/4.1.5; + else + echo "Odd day number ($day). Loading MPICH"; + module purge; + module load cmake/3.26.4 gcc/13.2.0 mpich/4.1.2/gcc/13.2.0 hdf5/1.14.0/gcc/13.2.0/mpich/4.1.2 hopr/master/gcc/13.2.0/mpich/4.1.2/hdf5/1.14.0 petsc/3.19.3/gcc/13.2.0/mpich/4.1.2; fi - if [ -n "${DO_MPICH}" ]; then echo "DO_MPICH activated. Loading MPICH."; module purge; - module load cmake/3.26.4 gcc/13.2.0 mpich/4.1.2/gcc/13.2.0 hdf5/1.14.0/gcc/13.2.0/mpich/4.1.2 hopr/master/gcc/13.2.0/mpich/4.1.2/hdf5/1.14.0 petsc/3.19.3/gcc/13.2.0/mpich/4.1.2; + module load cmake/3.26.4 gcc/13.2.0 mpich/4.1.2/gcc/13.2.0 hdf5/1.14.0/gcc/13.2.0/mpich/4.1.2 hopr/master/gcc/13.2.0/mpich/4.1.2/hdf5/1.14.0 petsc/3.19.3/gcc/13.2.0/mpich/4.1.2; fi - if [ -n "${DO_MPICH_DEBUG}" ]; then echo "DO_MPICH_DEBUG activated. Loading MPICH with --with-device=ch3:sock which allows over-subscription without performance loss but cannot be used for shared memory arrays safely!"; module purge; - module load cmake/3.26.4 gcc/13.2.0 mpich-debug/4.1.2/gcc/13.2.0 hdf5/1.14.0/gcc/13.2.0/mpich-debug/4.1.2 hopr/master/gcc/13.2.0/mpich-debug/4.1.2/hdf5/1.14.0 petsc/3.19.3/gcc/13.2.0/mpich-debug/4.1.2; + module load cmake/3.26.4 gcc/13.2.0 mpich-debug/4.1.2/gcc/13.2.0 hdf5/1.14.0/gcc/13.2.0/mpich-debug/4.1.2 hopr/master/gcc/13.2.0/mpich-debug/4.1.2/hdf5/1.14.0 petsc/3.19.3/gcc/13.2.0/mpich-debug/4.1.2; fi - module list + # ---------------------------------------------------------------------------------------------------------------------------------------------------- # Stages # ---------------------------------------------------------------------------------------------------------------------------------------------------- From 2153a651c4d695c1eeb800cbd192b7eeac51d3a2 Mon Sep 17 00:00:00 2001 From: Patrick Kopper Date: Tue, 20 Feb 2024 11:04:55 +0100 Subject: [PATCH 180/222] Detect libraries present on the system, set CMake defaults accordingly --- CMakeListsLib.txt | 118 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 87 insertions(+), 31 deletions(-) diff --git a/CMakeListsLib.txt b/CMakeListsLib.txt index 41f876014..cae9ae80d 100644 --- a/CMakeListsLib.txt +++ b/CMakeListsLib.txt @@ -44,8 +44,19 @@ ENDIF() # ========================================================================= # MPI # ========================================================================= -OPTION(LIBS_USE_MPI "Compile SINGLE or MPI version" ON) +# Try to find system MPI +SET(MPI_DETERMINE_LIBRARY_VERSION TRUE) +FIND_PACKAGE(MPI QUIET) +IF (MPI_FOUND) + MESSAGE (STATUS "[MPI] found in system libraries") + OPTION(LIBS_USE_MPI "Compile SINGLE or MPI version" ON) +ELSE() + MESSAGE (STATUS "[MPI] not found in system libraries") + OPTION(LIBS_USE_MPI "Compile SINGLE or MPI version" OFF) +ENDIF() + IF(LIBS_USE_MPI) + # If library is specifically requested, it is required SET(MPI_DETERMINE_LIBRARY_VERSION TRUE) FIND_PACKAGE(MPI REQUIRED) @@ -97,7 +108,28 @@ ENDIF() # ========================================================================= # HDF5 library # ========================================================================= -SET(LIBS_BUILD_HDF5 OFF CACHE BOOL "Compile and build HDF5 library") +# Try to find system HDF5 using CMake +SET(LIBS_HDF5_CMAKE TRUE) +FIND_PACKAGE(HDF5 NAMES hdf5 COMPONENTS C Fortran ${SEARCH_TYPE} QUIET PATH_SUFFIXES share/cmake) +# Try to find the configure version +SET(LIBS_HDF5_CMAKE FALSE) +FIND_PACKAGE(HDF5 COMPONENTS C Fortran QUIET) +# Hide all the HDF5 libs paths +MARK_AS_ADVANCED(FORCE HDF5_DIR) +# CMake version found +IF (HDF5_FOUND) + IF(${CMAKE_VERSION} VERSION_LESS "3.10.0") + MESSAGE (WARNING "HDF5 built with CMake was found! This feature is only supported for CMake 3.10+ and HDF5 1.10.2+!") + ENDIF() + MESSAGE (STATUS "HDF5 C libs:${HDF5_FOUND} static:${HDF5_static_C_FOUND} and shared:${HDF5_shared_C_FOUND}") + MESSAGE (STATUS "HDF5 Fortran libs: static:${HDF5_static_Fortran_FOUND} and shared:${HDF5_shared_Fortran_FOUND}") + MESSAGE (STATUS "h5diff found:${HDF5_DIFF_EXECUTABLE}") + MESSAGE (STATUS "[HDF5] found in system libraries") + SET(LIBS_BUILD_HDF5 OFF CACHE BOOL "Compile and build HDF5 library") +ELSE() + MESSAGE (STATUS "[HDF5] not found in system libraries") + SET(LIBS_BUILD_HDF5 ON CACHE BOOL "Compile and build HDF5 library") +ENDIF() # Set type of library to look up, STATIC/SHARED SET(LIB_TYPE STATIC) @@ -134,7 +166,7 @@ IF(NOT LIBS_BUILD_HDF5) # In case CMake did not find HDF5 here, it will generate an error by itself ENDIF() # Hide all the HDF5 libs paths - MARK_AS_ADVANCED(FORCE HDF5_DIR) + # MARK_AS_ADVANCED(FORCE HDF5_DIR) MARK_AS_ADVANCED(FORCE HDF5_C_LIBRARY_dl) MARK_AS_ADVANCED(FORCE HDF5_C_LIBRARY_hdf5) MARK_AS_ADVANCED(FORCE HDF5_C_LIBRARY_m) @@ -147,6 +179,7 @@ IF(NOT LIBS_BUILD_HDF5) MARK_AS_ADVANCED(FORCE HDF5_Fortran_LIBRARY_sz) MARK_AS_ADVANCED(FORCE HDF5_Fortran_LIBRARY_z) + SET(HDF5_BUILD_STATUS "system") # Build HDF5 in PICLas ELSE() # Origin pointing to Github @@ -179,11 +212,11 @@ ELSE() SET (HDF5_TAG "hdf5-1_10_6" CACHE STRING "HDF5 version tag") SET (HDF5_VERSION "1.10" CACHE INTERNAL "HDF5 version number") ENDIF() - MESSAGE (STATUS "Setting HDF5 to tag ${HDF5_TAG} to be compatible with detected [${LIBS_MPI_NAME}] (v${MPI_C_LIBRARY_VERSION})") + MESSAGE (STATUS "Setting [HDF5] to tag ${HDF5_TAG} to be compatible with detected [${LIBS_MPI_NAME}] (v${MPI_C_LIBRARY_VERSION})") ELSE() SET (HDF5_TAG "hdf5-1_12_0" CACHE STRING "HDF5 version tag") SET (HDF5_VERSION "1.12" CACHE INTERNAL "HDF5 version number") - MESSAGE (STATUS "Setting HDF5 to tag ${HDF5_TAG} as no MPI support was requested") + MESSAGE (STATUS "Setting [HDF5] to tag ${HDF5_TAG} as no MPI support was requested") ENDIF() MARK_AS_ADVANCED(FORCE HDF5_TAG) @@ -269,6 +302,8 @@ ELSE() # Add ZLIB to include paths for HDF5 data compression FIND_LIBRARY(HDF5_z_LIBRARY_RELEASE z) LIST(APPEND HDF5_LIBRARIES ${HDF5_hdf5_fortran_LIBRARY_RELEASE} ${HDF5_hdf5_LIBRARY_RELEASE} ${HDF5_z_LIBRARY_RELEASE} -ldl) + + SET(HDF5_BUILD_STATUS "self-built") ENDIF() # HDF5 1.14 references build directory @@ -286,9 +321,9 @@ IF(LIBS_HDF5_CMAKE) ELSE() INCLUDE_DIRECTORIES (${HDF5_INCLUDE_DIR_FORTRAN} ${HDF5_INCLUDE_DIR}) IF(${HDF5_IS_PARALLEL}) - MESSAGE(STATUS "Compiling with [HDF5] (v${HDF5_VERSION}) with parallel support") + MESSAGE(STATUS "Compiling with ${HDF5_BUILD_STATUS} [HDF5] (v${HDF5_VERSION}) with parallel support") ELSE() - MESSAGE(STATUS "Compiling with [HDF5] (v${HDF5_VERSION}) without parallel support") + MESSAGE(STATUS "Compiling with ${HDF5_BUILD_STATUS} [HDF5] (v${HDF5_VERSION}) without parallel support") ENDIF() LIST(APPEND linkedlibs ${HDF5_LIBRARIES} ) ENDIF() @@ -297,19 +332,29 @@ ENDIF() # ========================================================================= # Math libary # ========================================================================= -SET(LIBS_BUILD_MATH_LIB OFF CACHE BOOL "Compile and build math library") +# Try to find system LAPACK/OpenBLAS +FIND_PACKAGE(LAPACK QUIET) +IF (LAPACK_FOUND) + LIST(APPEND linkedlibs ${LAPACK_LIBRARIES}) + MESSAGE (STATUS "[BLAS/Lapack] found in system libraries") + SET(LIBS_BUILD_MATH_LIB OFF CACHE BOOL "Compile and build math library") +ELSE() + MESSAGE (STATUS "[BLAS/Lapack] not found in system libraries") + SET(LIBS_BUILD_MATH_LIB ON CACHE BOOL "Compile and build math library") +ENDIF() # Check if Intel MKL is requested instead of BLAS/LAPACK -CMAKE_DEPENDENT_OPTION(LIBS_USE_MKL "Use system MKL libraries instead of system BLAS/LAPACK" OFF - "NOT LIBS_BUILD_MATH_LIB" OFF) +# CMAKE_DEPENDENT_OPTION(LIBS_USE_MKL "Use system MKL libraries instead of system BLAS/LAPACK" OFF +# "NOT LIBS_BUILD_MATH_LIB" OFF) # Use system LAPACK/MKL IF(NOT LIBS_BUILD_MATH_LIB) - IF (LIBS_USE_MKL) - SET(BLA_VENDOR "Intel10_64lp") #search only for Intel BLAS (=MKL) - ENDIF() + # IF (LIBS_USE_MKL) + # SET(BLA_VENDOR "Intel10_64lp") #search only for Intel BLAS (=MKL) + # ENDIF() # Use Lapack/Blas for GNU + # If library is specifically requested, it is required FIND_PACKAGE(LAPACK REQUIRED) IF (LAPACK_FOUND) LIST(APPEND linkedlibs ${LAPACK_LIBRARIES}) @@ -554,24 +599,35 @@ ENDIF() # ENDIF() -# # ========================================================================= -# # OPENMP library -# # ========================================================================= -# OPTION(LIBS_USE_OPENMP "Enable OpenMP" OFF) -# IF(LIBS_USE_OPENMP) -# IF ("${CMAKE_VERSION}" VERSION_LESS 3.1.0) -# MESSAGE(WARNING "For finding OpenMP Fortran flags at least CMake version 3.1.0 is required. Please specify flags manually or use newer CMake version.") -# ENDIF() -# FIND_PACKAGE(OpenMP REQUIRED) -# SET (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} ${OpenMP_Fortran_FLAGS}") -# SET (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} ${OpenMP_Fortran_FLAGS}") -# SET (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${OpenMP_CXX_FLAGS}") -# SET (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${OpenMP_CXX_FLAGS}") -# SET (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") -# ADD_DEFINITIONS(-DUSE_OPENMP=1) -# ELSE() -# ADD_DEFINITIONS(-DUSE_OPENMP=0) -# ENDIF() +# # ========================================================================= +# # OPENMP library +# # ========================================================================= +# # Try to find system OpenMP +# FIND_PACKAGE(OpenMP QUIET) +# IF (OpenMP_FOUND) +# MESSAGE (STATUS "[OpenMP] found in system libraries") +# OPTION(LIBS_USE_OPENMP "Enable OpenMP" ON) +# ELSE() +# MESSAGE (STATUS "[OpenMP] not found in system libraries") +# OPTION(LIBS_USE_OPENMP "Enable OpenMP" OFF) +# ENDIF() +# +# IF(LIBS_USE_OPENMP) +# IF ("${CMAKE_VERSION}" VERSION_LESS 3.1.0) +# MESSAGE(WARNING "For finding OpenMP Fortran flags at least CMake version 3.1.0 is # required. Please specify flags manually or use newer CMake version.") +# ENDIF() +# # If library is specifically requested, it is required +# FIND_PACKAGE(OpenMP REQUIRED) +# SET (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} ${OpenMP_Fortran_FLAGS}") +# SET (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} ${OpenMP_Fortran_FLAGS}") +# SET (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${OpenMP_CXX_FLAGS}") +# SET (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${OpenMP_CXX_FLAGS}") +# SET (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") +# ADD_DEFINITIONS(-DUSE_OPENMP=1) +# MESSAGE(STATUS "Compiling with [OpenMP] (v${OpenMP_Fortran_VERSION})") +# ELSE() +# ADD_DEFINITIONS(-DUSE_OPENMP=0) +# # ENDIF() #========================================================================= # PETSc From 5a4acd11df720cb14ad93ab13a1032ad4feb4d71 Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Fri, 1 Mar 2024 08:15:26 +0100 Subject: [PATCH 181/222] Removed executable permission from ini files (as this produces git hook errors when merging changes into other branches) --- regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/DSMC.ini | 0 regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/analyze.ini | 0 .../CHE_BGK/MultiSpec_Reservoir_Ar-He/command_line.ini | 0 regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/hopr.ini | 0 regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/parameter.ini | 0 regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/DSMC.ini | 0 regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/analyze.ini | 0 .../CHE_BGK/MultiSpec_Reservoir_N2-O2/command_line.ini | 0 regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/hopr.ini | 0 regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/parameter.ini | 0 regressioncheck/CHE_DSMC/1D_Two_Hot_Plates/DSMC.ini | 0 regressioncheck/CHE_DSMC/1D_Two_Hot_Plates/parameter.ini | 0 regressioncheck/CHE_DSMC/BC_RotationalPeriodic/DSMC.ini | 0 regressioncheck/CHE_DSMC/BC_RotationalPeriodic/parameter.ini | 0 regressioncheck/CHE_DSMC/BackgroundGas_RegionsDefinition/DSMC.ini | 0 .../CHE_DSMC/BackgroundGas_RegionsDefinition/parameter.ini | 0 regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/DSMC.ini | 0 regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/analyze.ini | 0 regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/command_line.ini | 0 regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/hopr.ini | 0 regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/parameter.ini | 0 regressioncheck/CHE_DSMC/vMPF_BGG_ChannelFlow_Merge/DSMC.ini | 0 regressioncheck/CHE_DSMC/vMPF_BGG_ChannelFlow_Merge/hopr.ini | 0 regressioncheck/CHE_DSMC/vMPF_BGG_ChannelFlow_Merge/parameter.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_Ar-e_100keV/DSMC.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_Ar-e_100keV/hopr.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_Ar-e_100keV/parameter.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H2Ion1/DSMC.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H2Ion1/hopr.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H2Ion1/parameter.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/DSMC.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/analyze.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/command_line.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/hopr.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/parameter.ini | 0 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e/DSMC.ini | 0 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e/hopr.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e/parameter.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/DSMC.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/analyze.ini | 0 .../CHEM_RATES_XSec_Chem_H2-e_ELASTIC/command_line.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/hopr.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/parameter.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/DSMC.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/analyze.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/command_line.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/hopr.ini | 0 .../NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/parameter.ini | 0 .../CHEM_RATES_XSec_Chem_H2_Plasma_Database/analyze.ini | 0 .../CHEM_RATES_XSec_Chem_H2_Plasma_Database/command_line.ini | 0 .../CHEM_RATES_XSec_Chem_H2_Plasma_Database/hopr.ini | 0 .../NIG_code_analyze/CHEM_CONS_XSec_diss_ion_H2/DSMC.ini | 0 .../NIG_code_analyze/CHEM_CONS_XSec_diss_ion_H2/hopr.ini | 0 regressioncheck/NIG_tracking_DSMC/curved_planar/hopr.ini | 0 .../WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/DSMC.ini | 0 .../WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/analyze.ini | 0 .../MultiSpec_Supersonic_Couette_Ar-He/command_line.ini | 0 .../WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/hopr.ini | 0 regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry/DSMC.ini | 0 tools/species_database/Air_11Spec_27Reac_Park1993.ini | 0 tools/species_database/Air_11Spec_43Reac_Farbar2008.ini | 0 tools/species_database/Air_11Spec_51Reac_Park1993.ini | 0 tools/species_database/Air_5Spec_8Reac_Park1993.ini | 0 tools/species_database/CH4-Ar_8Spec_7Reac.ini | 0 tools/species_database/CH4_7Spec_7Reac.ini | 0 tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini | 0 tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini | 0 tools/species_database/Mars_16Spec_31Reac_Park1994.ini | 0 tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini | 0 tools/species_database/Titan_14Spec_24Reac_Savajano2011.ini | 0 tools/species_database/Titan_18Spec_30Reac_Savajano2011.ini | 0 tools/species_database/XSec_H2-Plasma_6Spec_11Reac.ini | 0 72 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/DSMC.ini mode change 100755 => 100644 regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/analyze.ini mode change 100755 => 100644 regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/command_line.ini mode change 100755 => 100644 regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/hopr.ini mode change 100755 => 100644 regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/parameter.ini mode change 100755 => 100644 regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/DSMC.ini mode change 100755 => 100644 regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/analyze.ini mode change 100755 => 100644 regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/command_line.ini mode change 100755 => 100644 regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/hopr.ini mode change 100755 => 100644 regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/parameter.ini mode change 100755 => 100644 regressioncheck/CHE_DSMC/1D_Two_Hot_Plates/DSMC.ini mode change 100755 => 100644 regressioncheck/CHE_DSMC/1D_Two_Hot_Plates/parameter.ini mode change 100755 => 100644 regressioncheck/CHE_DSMC/BC_RotationalPeriodic/DSMC.ini mode change 100755 => 100644 regressioncheck/CHE_DSMC/BC_RotationalPeriodic/parameter.ini mode change 100755 => 100644 regressioncheck/CHE_DSMC/BackgroundGas_RegionsDefinition/DSMC.ini mode change 100755 => 100644 regressioncheck/CHE_DSMC/BackgroundGas_RegionsDefinition/parameter.ini mode change 100755 => 100644 regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/DSMC.ini mode change 100755 => 100644 regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/analyze.ini mode change 100755 => 100644 regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/command_line.ini mode change 100755 => 100644 regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/hopr.ini mode change 100755 => 100644 regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/parameter.ini mode change 100755 => 100644 regressioncheck/CHE_DSMC/vMPF_BGG_ChannelFlow_Merge/DSMC.ini mode change 100755 => 100644 regressioncheck/CHE_DSMC/vMPF_BGG_ChannelFlow_Merge/hopr.ini mode change 100755 => 100644 regressioncheck/CHE_DSMC/vMPF_BGG_ChannelFlow_Merge/parameter.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_Ar-e_100keV/DSMC.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_Ar-e_100keV/hopr.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_Ar-e_100keV/parameter.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H2Ion1/DSMC.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H2Ion1/hopr.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H2Ion1/parameter.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/DSMC.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/analyze.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/command_line.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/hopr.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/parameter.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e/DSMC.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e/hopr.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e/parameter.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/DSMC.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/analyze.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/command_line.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/hopr.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/parameter.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/DSMC.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/analyze.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/command_line.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/hopr.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/parameter.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/analyze.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/command_line.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/hopr.ini mode change 100755 => 100644 regressioncheck/NIG_code_analyze/CHEM_CONS_XSec_diss_ion_H2/DSMC.ini mode change 100755 => 100644 regressioncheck/NIG_code_analyze/CHEM_CONS_XSec_diss_ion_H2/hopr.ini mode change 100755 => 100644 regressioncheck/NIG_tracking_DSMC/curved_planar/hopr.ini mode change 100755 => 100644 regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/DSMC.ini mode change 100755 => 100644 regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/analyze.ini mode change 100755 => 100644 regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/command_line.ini mode change 100755 => 100644 regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/hopr.ini mode change 100755 => 100644 regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry/DSMC.ini mode change 100755 => 100644 tools/species_database/Air_11Spec_27Reac_Park1993.ini mode change 100755 => 100644 tools/species_database/Air_11Spec_43Reac_Farbar2008.ini mode change 100755 => 100644 tools/species_database/Air_11Spec_51Reac_Park1993.ini mode change 100755 => 100644 tools/species_database/Air_5Spec_8Reac_Park1993.ini mode change 100755 => 100644 tools/species_database/CH4-Ar_8Spec_7Reac.ini mode change 100755 => 100644 tools/species_database/CH4_7Spec_7Reac.ini mode change 100755 => 100644 tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini mode change 100755 => 100644 tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini mode change 100755 => 100644 tools/species_database/Mars_16Spec_31Reac_Park1994.ini mode change 100755 => 100644 tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini mode change 100755 => 100644 tools/species_database/Titan_14Spec_24Reac_Savajano2011.ini mode change 100755 => 100644 tools/species_database/Titan_18Spec_30Reac_Savajano2011.ini mode change 100755 => 100644 tools/species_database/XSec_H2-Plasma_6Spec_11Reac.ini diff --git a/regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/DSMC.ini b/regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/DSMC.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/analyze.ini b/regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/analyze.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/command_line.ini b/regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/command_line.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/hopr.ini b/regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/hopr.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/parameter.ini b/regressioncheck/CHE_BGK/MultiSpec_Reservoir_Ar-He/parameter.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/DSMC.ini b/regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/DSMC.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/analyze.ini b/regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/analyze.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/command_line.ini b/regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/command_line.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/hopr.ini b/regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/hopr.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/parameter.ini b/regressioncheck/CHE_BGK/MultiSpec_Reservoir_N2-O2/parameter.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_DSMC/1D_Two_Hot_Plates/DSMC.ini b/regressioncheck/CHE_DSMC/1D_Two_Hot_Plates/DSMC.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_DSMC/1D_Two_Hot_Plates/parameter.ini b/regressioncheck/CHE_DSMC/1D_Two_Hot_Plates/parameter.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_DSMC/BC_RotationalPeriodic/DSMC.ini b/regressioncheck/CHE_DSMC/BC_RotationalPeriodic/DSMC.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_DSMC/BC_RotationalPeriodic/parameter.ini b/regressioncheck/CHE_DSMC/BC_RotationalPeriodic/parameter.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_DSMC/BackgroundGas_RegionsDefinition/DSMC.ini b/regressioncheck/CHE_DSMC/BackgroundGas_RegionsDefinition/DSMC.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_DSMC/BackgroundGas_RegionsDefinition/parameter.ini b/regressioncheck/CHE_DSMC/BackgroundGas_RegionsDefinition/parameter.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/DSMC.ini b/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/DSMC.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/analyze.ini b/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/analyze.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/command_line.ini b/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/command_line.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/hopr.ini b/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/hopr.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/parameter.ini b/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/parameter.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_ChannelFlow_Merge/DSMC.ini b/regressioncheck/CHE_DSMC/vMPF_BGG_ChannelFlow_Merge/DSMC.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_ChannelFlow_Merge/hopr.ini b/regressioncheck/CHE_DSMC/vMPF_BGG_ChannelFlow_Merge/hopr.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_ChannelFlow_Merge/parameter.ini b/regressioncheck/CHE_DSMC/vMPF_BGG_ChannelFlow_Merge/parameter.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_Ar-e_100keV/DSMC.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_Ar-e_100keV/DSMC.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_Ar-e_100keV/hopr.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_Ar-e_100keV/hopr.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_Ar-e_100keV/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_Ar-e_100keV/parameter.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H2Ion1/DSMC.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H2Ion1/DSMC.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H2Ion1/hopr.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H2Ion1/hopr.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H2Ion1/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H2Ion1/parameter.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/DSMC.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/DSMC.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/analyze.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/analyze.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/command_line.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/command_line.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/hopr.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/hopr.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-H3Ion/parameter.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e/DSMC.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e/DSMC.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e/hopr.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e/hopr.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e/parameter.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/DSMC.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/DSMC.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/analyze.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/analyze.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/command_line.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/command_line.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/hopr.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/hopr.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2-e_ELASTIC/parameter.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/DSMC.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/DSMC.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/analyze.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/analyze.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/command_line.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/command_line.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/hopr.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/hopr.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma/parameter.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/analyze.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/analyze.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/command_line.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/command_line.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/hopr.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database/hopr.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_code_analyze/CHEM_CONS_XSec_diss_ion_H2/DSMC.ini b/regressioncheck/NIG_code_analyze/CHEM_CONS_XSec_diss_ion_H2/DSMC.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_code_analyze/CHEM_CONS_XSec_diss_ion_H2/hopr.ini b/regressioncheck/NIG_code_analyze/CHEM_CONS_XSec_diss_ion_H2/hopr.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_tracking_DSMC/curved_planar/hopr.ini b/regressioncheck/NIG_tracking_DSMC/curved_planar/hopr.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/DSMC.ini b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/DSMC.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/analyze.ini b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/analyze.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/command_line.ini b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/command_line.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/hopr.ini b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/hopr.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry/DSMC.ini b/regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry/DSMC.ini old mode 100755 new mode 100644 diff --git a/tools/species_database/Air_11Spec_27Reac_Park1993.ini b/tools/species_database/Air_11Spec_27Reac_Park1993.ini old mode 100755 new mode 100644 diff --git a/tools/species_database/Air_11Spec_43Reac_Farbar2008.ini b/tools/species_database/Air_11Spec_43Reac_Farbar2008.ini old mode 100755 new mode 100644 diff --git a/tools/species_database/Air_11Spec_51Reac_Park1993.ini b/tools/species_database/Air_11Spec_51Reac_Park1993.ini old mode 100755 new mode 100644 diff --git a/tools/species_database/Air_5Spec_8Reac_Park1993.ini b/tools/species_database/Air_5Spec_8Reac_Park1993.ini old mode 100755 new mode 100644 diff --git a/tools/species_database/CH4-Ar_8Spec_7Reac.ini b/tools/species_database/CH4-Ar_8Spec_7Reac.ini old mode 100755 new mode 100644 diff --git a/tools/species_database/CH4_7Spec_7Reac.ini b/tools/species_database/CH4_7Spec_7Reac.ini old mode 100755 new mode 100644 diff --git a/tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini b/tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini old mode 100755 new mode 100644 diff --git a/tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini b/tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini old mode 100755 new mode 100644 diff --git a/tools/species_database/Mars_16Spec_31Reac_Park1994.ini b/tools/species_database/Mars_16Spec_31Reac_Park1994.ini old mode 100755 new mode 100644 diff --git a/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini b/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini old mode 100755 new mode 100644 diff --git a/tools/species_database/Titan_14Spec_24Reac_Savajano2011.ini b/tools/species_database/Titan_14Spec_24Reac_Savajano2011.ini old mode 100755 new mode 100644 diff --git a/tools/species_database/Titan_18Spec_30Reac_Savajano2011.ini b/tools/species_database/Titan_18Spec_30Reac_Savajano2011.ini old mode 100755 new mode 100644 diff --git a/tools/species_database/XSec_H2-Plasma_6Spec_11Reac.ini b/tools/species_database/XSec_H2-Plasma_6Spec_11Reac.ini old mode 100755 new mode 100644 From 7a04e7354ce285ceec72d0efd222378c453500a3 Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Fri, 1 Mar 2024 11:28:11 +0100 Subject: [PATCH 182/222] allow all executable files in tools/Setup_ModuleEnv directory --- .githooks/pre-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.githooks/pre-commit b/.githooks/pre-commit index e9ff1f5ed..8850dd8a8 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -126,7 +126,7 @@ if [ -n "$CHANGED" ]; then # Check if file is executable if [ -x "$file" ]; then - if [ "$file" != ".githooks/pre-commit" ] && [ "$file" != "docs/documentation/buildPDF.sh" ] && [ "$file" != "docs/documentation/buildHTML.sh" ] && [ "$file" != "tools/Setup_ModuleEnv/Install"* ] ; then + if [ "$file" != ".githooks/pre-commit" ] && [ "$file" != "docs/documentation/buildPDF.sh" ] && [ "$file" != "docs/documentation/buildHTML.sh" ] && [ ! -f "tools/Setup_ModuleEnv/$(basename $file)" ] ; then # Error header ERROR=1 EXEERR=1 From ee65694efdc635cb3640495c740a9f8d5969da47 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Wed, 6 Mar 2024 15:08:05 +0100 Subject: [PATCH 183/222] Added CHECKEXP in electronic energy exchange to avoid floating point exceptions in case of large degrees of freedom --- src/particles/dsmc/dsmc_electronic_model.f90 | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/particles/dsmc/dsmc_electronic_model.f90 b/src/particles/dsmc/dsmc_electronic_model.f90 index e241d8137..df695ef2c 100644 --- a/src/particles/dsmc/dsmc_electronic_model.f90 +++ b/src/particles/dsmc/dsmc_electronic_model.f90 @@ -279,8 +279,14 @@ SUBROUTINE ElectronicEnergyExchange(iPair,iPart1,FakXi, NewPart, XSec_Level) PartStateTemp = CollisionEnergy / BoltzmannConst DO iQua = 0, MaxElecQuant IF (PartStateTemp - SpecDSMC(iSpec)%ElectronicState(2,iQua).GT.0.) THEN - gtemp = SpecDSMC(iSpec)%ElectronicState(1,iQua) * & - ( CollisionEnergy - BoltzmannConst * SpecDSMC(iSpec)%ElectronicState(2,iQua))**FakXi + ! gtemp = SpecDSMC(iSpec)%ElectronicState(1,iQua) * (CollisionEnergy - BoltzmannConst*SpecDSMC(iSpec)%ElectronicState(2,iQua))**FakXi + ! Above equation is replaced be the following to safely check for floating-point exceptions + gtemp = FakXi * LOG(CollisionEnergy - BoltzmannConst * SpecDSMC(iSpec)%ElectronicState(2,iQua)) + IF(CHECKEXP(gtemp)) THEN + gtemp = SpecDSMC(iSpec)%ElectronicState(1,iQua) * EXP(gtemp) + ELSE + gtemp = 0. + END IF ! maximal possible Quant before term goes negative iQuaMax = iQua IF ( gtemp .GT. gmax ) THEN @@ -296,14 +302,14 @@ SUBROUTINE ElectronicEnergyExchange(iPair,iPart1,FakXi, NewPart, XSec_Level) RETURN END IF CALL RANDOM_NUMBER(iRan) - iQua = int( ( iQuaMax +1 ) * iRan) + iQua = INT( ( iQuaMax +1 ) * iRan) gtemp = SpecDSMC(iSpec)%ElectronicState(1,iQua) * & ( CollisionEnergy - BoltzmannConst * SpecDSMC(iSpec)%ElectronicState(2,iQua))**FakXi CALL RANDOM_NUMBER(iRan2) ! acceptance-rejection for iQuaElec DO WHILE ( iRan2 .GE. gtemp / gmax ) CALL RANDOM_NUMBER(iRan) - iQua = int( ( iQuaMax +1 ) * iRan) + iQua = INT( ( iQuaMax +1 ) * iRan) gtemp = SpecDSMC(iSpec)%ElectronicState(1,iQua) * & ( CollisionEnergy - BoltzmannConst * SpecDSMC(iSpec)%ElectronicState(2,iQua))**FakXi CALL RANDOM_NUMBER(iRan2) From e41a022dd48d4734e8cd1dde2c1a863771ea33c2 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Thu, 7 Mar 2024 00:58:25 +0100 Subject: [PATCH 184/222] Fix of BoundaryParticleOutput in combination with species-specific time step, additional regression test --- REGGIE.md | 1 + .../BPO_SpeciesTimeStep/PartAnalyze_ref.csv | 3 + .../SurfaceAnalyze_ref.csv | 3 + .../CHE_DSMC/BPO_SpeciesTimeStep/analyze.ini | 6 + .../BPO_SpeciesTimeStep/command_line.ini | 2 + .../BPO_SpeciesTimeStep/externals.ini | 6 + .../CHE_DSMC/BPO_SpeciesTimeStep/hopr.ini | 39 +++++++ .../BPO_SpeciesTimeStep/parameter.ini | 109 ++++++++++++++++++ .../CHE_DSMC/BPO_SpeciesTimeStep/readme.md | 4 + .../analyze/particle_analyze_tools.f90 | 14 +-- .../emission/particle_surface_flux.f90 | 8 +- src/particles/particle_operations.f90 | 31 ++--- src/particles/particle_timestep.f90 | 2 +- .../surfacemodel/surfacemodel_analyze.f90 | 5 +- 14 files changed, 199 insertions(+), 34 deletions(-) create mode 100644 regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/PartAnalyze_ref.csv create mode 100644 regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/SurfaceAnalyze_ref.csv create mode 100644 regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/analyze.ini create mode 100644 regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/command_line.ini create mode 100644 regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/externals.ini create mode 100644 regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/hopr.ini create mode 100644 regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/parameter.ini create mode 100644 regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/readme.md diff --git a/REGGIE.md b/REGGIE.md index 3a91e50d5..3872508b4 100644 --- a/REGGIE.md +++ b/REGGIE.md @@ -53,6 +53,7 @@ Small test cases to check features with DSMC timedisc: [Link to build](regressio | | BC_PorousBC | | PorousBC as a pump with 2 species, hard compiled N=1 | nProcs=3 | Total # of removed part through BC | | | | BC_PorousBC_2DAxi | | PorousBC as a pump with 2 species (axisymmetric, with/without radial weighting), hard compiled N=1 | nProcs=1,2 | Total number density | [Link](regressioncheck/CHE_DSMC/BC_PorousBC_2DAxi/readme.md) | | | BC_RotationalPeriodic | | Rotationally periodic BC with "worst-case" mesh based on tetrahedrons | nProcs=1,5 | Particle number | [Link](regressioncheck/CHE_DSMC/BC_RotationalPeriodic/readme.md) | +| | BPO_SpeciesTimeStep | | Species-specific time step with BoundaryParticleOutput | nProcs=4 | PartAnalyze, SurfaceAnalyze | [Link](regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/readme.md) | | | cube | | Collismode=2,3, hard compiled N=1 | nProcs=2 | | | | | Rotational_Reference_Frame_Regions | | Rotational reference frame with several regions, switching between stationary and rotating frame | nProcs=1,2,3,4 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Regions/readme.md) | | | Rotational_Reference_Frame_RotBC | | Rotational reference frame in combination with the rotationally periodic BC | nProcs=1,2,3,4 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_RotBC/readme.md) | diff --git a/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/PartAnalyze_ref.csv b/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/PartAnalyze_ref.csv new file mode 100644 index 000000000..d2341d0a2 --- /dev/null +++ b/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/PartAnalyze_ref.csv @@ -0,0 +1,3 @@ +001-TIME,002-Current-Spec-001-SF-001 +0.0000000000000000E+000,0.0000000000000000E+000 +0.1000000000000000E-008,0.2000000166752067E+001 diff --git a/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/SurfaceAnalyze_ref.csv b/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/SurfaceAnalyze_ref.csv new file mode 100644 index 000000000..13f32dedf --- /dev/null +++ b/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/SurfaceAnalyze_ref.csv @@ -0,0 +1,3 @@ +001-TIME,002-Flux-Spec-001-BC_Xplus,003-TotalElectricCurrent-BC_Xplus +0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 +0.1000000000000000E-008,0.1248281052631579E+020,-.1999966605370011E+001 diff --git a/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/analyze.ini b/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/analyze.ini new file mode 100644 index 000000000..c50cda33f --- /dev/null +++ b/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/analyze.ini @@ -0,0 +1,6 @@ +! compare the last line of PartAnalyze.csv with a reference file +compare_data_file_name = PartAnalyze.csv, SurfaceAnalyze.csv +compare_data_file_reference = PartAnalyze_ref.csv, SurfaceAnalyze_ref.csv +compare_data_file_tolerance = 1e-3 +compare_data_file_tolerance_type = relative +compare_data_file_one_diff_per_run=F \ No newline at end of file diff --git a/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/command_line.ini b/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/command_line.ini new file mode 100644 index 000000000..f0056b1d6 --- /dev/null +++ b/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/command_line.ini @@ -0,0 +1,2 @@ +MPI=4 +database = ../../../SpeciesDatabase.h5 diff --git a/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/externals.ini b/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/externals.ini new file mode 100644 index 000000000..0bdc5a5c4 --- /dev/null +++ b/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/externals.ini @@ -0,0 +1,6 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre +cmd_suffix = \ No newline at end of file diff --git a/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/hopr.ini b/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/hopr.ini new file mode 100644 index 000000000..267b996a5 --- /dev/null +++ b/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/hopr.ini @@ -0,0 +1,39 @@ +ProjectName = channel +Debugvisu = T +DebugVisuLevel=1 +NVisu =1 +Mode =1 + +DEFVAR = (REAL): minus_x = 0.0 +DEFVAR = (REAL): plus_x = 10.0 + +DEFVAR = (REAL): minus_y = 0.0 +DEFVAR = (REAL): plus_y = 1.0 + +DEFVAR = (REAL): minus_z = 0.0 +DEFVAR = (REAL): plus_z = 1.0 + +Corner =(/minus_x,minus_y,minus_z ,, plus_x,minus_y,minus_z ,, plus_x,plus_y,minus_z ,, minus_x,plus_y,minus_z ,, minus_x,minus_y,plus_z ,, plus_x,minus_y,plus_z ,, plus_x,plus_y,plus_z ,, minus_x,plus_y,plus_z /) +nElems =(/2,2,2/) +elemtype =108 + +BCIndex =(/6 ,4 ,1 ,3 ,2 ,5/) +! =(/z-,y-,x+,y+,x-,z+/) +nZones = 1 +nUserDefinedBoundaries=6 +BoundaryName=BC_Xplus +BoundaryType=(/3,0,0,0/) +BoundaryName=BC_Xminus +BoundaryType=(/3,0,0,0/) +BoundaryName=BC_Yplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Yminus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zminus +BoundaryType=(/4,0,0,0/) + +postscalemesh=true +meshscale=1e-5 +jacobiantolerance=1e-20 diff --git a/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/parameter.ini b/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/parameter.ini new file mode 100644 index 000000000..8fcb2817a --- /dev/null +++ b/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/parameter.ini @@ -0,0 +1,109 @@ +IniExactFunc = 0 +N = 1 ! Polynomial degree +NAnalyze = 1 ! Number of analyze points +! =============================================================================== ! +! PICLAS2VTK +! =============================================================================== ! +NVisu = 1 +VisuParticles = T +TimeStampLength = 14 +! =============================================================================== ! +! MESH +! =============================================================================== ! +MeshFile = channel_mesh.h5 +useCurveds = F +! if boundaries have to be changed (else they are used from Mesh directly): +TrackingMethod = triatracking +! =============================================================================== ! +! OUTPUT / VISUALIZATION +! =============================================================================== ! +ProjectName = SurfFlux_Tria_EmissionCurrent +IterDisplayStep = 20 +Part-AnalyzeStep = 20 +Surface-AnalyzeStep = 20 +CalcSurfFluxInfo = T +! =============================================================================== ! +! CALCULATION +! =============================================================================== ! +tend = 1.0E-9 +Analyze_dt = 1.0E-9 +! =============================================================================== ! +! Load Balance +! =============================================================================== ! +DoLoadBalance = T +DoInitialAutoRestart = T +Load-DeviationThreshold = 1e-9 +! =============================================================================== ! +! PARTICLE BOUNDARY +! =============================================================================== ! +Part-nBounds=6 +Part-Boundary1-SourceName=BC_Xplus +Part-Boundary1-Condition=open +Part-Boundary2-SourceName=BC_Xminus +Part-Boundary2-Condition=reflective +Part-Boundary3-SourceName=BC_Yplus +Part-Boundary3-Condition=reflective +Part-Boundary4-SourceName=BC_Yminus +Part-Boundary4-Condition=reflective +Part-Boundary5-SourceName=BC_Zplus +Part-Boundary5-Condition=symmetric +Part-Boundary6-SourceName=BC_Zminus +Part-Boundary6-Condition=symmetric +Part-FIBGMdeltas=(/1e-5,5e-6,5e-6/) + +CalcBoundaryParticleOutput = T +BPO-NPartBoundaries = 1 +BPO-PartBoundaries = (/1/) +BPO-NSpecies = 1 +BPO-Species = (/1/) +! =============================================================================== ! +! DISCRETIZATION +! =============================================================================== ! +Part-maxParticleNumber=500000 +Part-Species$-MacroParticleFactor = 5E3,1E4 + +ManualTimeStep = 5.0000E-11 +Part-Species1-TimeStepFactor = 0.2,0.5 +! =============================================================================== ! +! SPECIES +! =============================================================================== ! +Part-nSpecies = 2 +Particles-Species-Database = SpeciesDatabase.h5 +! =============================================================================== ! +! Species1 - electron +! =============================================================================== ! +Part-Species1-SpeciesName = electron +Part-Species1-UseCollXSec = T + +Part-Species1-nSurfaceFluxBCs=1 +Part-Species1-Surfaceflux1-BC=2 +Part-Species1-Surfaceflux1-VeloIC = 1E7 +Part-Species1-Surfaceflux1-VeloVecIC = (/1,0,0/) +Part-Species1-Surfaceflux1-velocityDistribution = maxwell_lpn +Part-Species1-Surfaceflux1-MWTemperatureIC = 5. +Part-Species1-Surfaceflux1-EmissionCurrent = 2. +! =============================================================================== ! +! Species2 - Argon +! =============================================================================== ! +Part-Species2-SpeciesName = Ar + +Part-Species2-nInits = 1 +Part-Species2-Init1-SpaceIC = background +Part-Species2-Init1-velocityDistribution = maxwell_lpn +Part-Species2-Init1-MWTemperatureIC = 300 +Part-Species2-Init1-PartDensity = 1E10 +Part-Species2-Init1-VeloIC = 0 +Part-Species2-Init1-VeloVecIC = (/0.,0.,1./) +! =============================================================================== ! +! DSMC +! =============================================================================== ! +Particles-HaloEpsVelo=5.0E+07 +Particles-DSMC-CalcSurfaceVal=F +UseDSMC=true +Particles-DSMC-CollisMode = 2 +Part-NumberOfRandomSeeds=2 +Particles-RandomSeed1=1 +Particles-RandomSeed2=2 +Particles-DSMC-UseOctree=F +Particles-DSMC-UseNearestNeighbour = F +Particles-DSMC-CalcQualityFactors = F \ No newline at end of file diff --git a/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/readme.md b/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/readme.md new file mode 100644 index 000000000..5c543d0f7 --- /dev/null +++ b/regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/readme.md @@ -0,0 +1,4 @@ +# Boundary Particle Output with Species Time Step +* Particle emission using surface flux by defining an emission current of 2A +* Species specific time step for the electrons (factor 0.2) +* Check whether the resulting current at the oppsite boundary is determined correctly \ No newline at end of file diff --git a/src/particles/analyze/particle_analyze_tools.f90 b/src/particles/analyze/particle_analyze_tools.f90 index 0e88f9702..d1556008a 100644 --- a/src/particles/analyze/particle_analyze_tools.f90 +++ b/src/particles/analyze/particle_analyze_tools.f90 @@ -1284,8 +1284,7 @@ SUBROUTINE CalcSurfaceFluxInfo() USE MOD_Globals USE MOD_TimeDisc_Vars ,ONLY: dt, iter USE MOD_Particle_Analyze_Vars ,ONLY: FlowRateSurfFlux,PressureAdaptiveBC,PartAnalyzeStep -USE MOD_DSMC_Vars ,ONLY: RadialWeighting -USE MOD_Particle_Vars ,ONLY: Species,nSpecies,usevMPF,VarTimeStep +USE MOD_Particle_Vars ,ONLY: Species,nSpecies,VarTimeStep USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, SurfFluxSideSize, SurfMeshSubSideData USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptiveBC, AdaptBCMacroVal, AdaptBCMapElemToSample, AdaptBCAreaSurfaceFlux USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCAverageValBC, AdaptBCAverageMacroVal @@ -1302,7 +1301,7 @@ SUBROUTINE CalcSurfaceFluxInfo() !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: iSpec, iSF, ElemID, SampleElemID, SurfSideID, iSide, iSample, jSample, currentBC -REAL :: MacroParticleFactor, dtVar +REAL :: dtVar #if USE_MPI INTEGER :: MaxSurfaceFluxBCs #endif /*USE_MPI*/ @@ -1313,12 +1312,7 @@ SUBROUTINE CalcSurfaceFluxInfo() IF(UseAdaptiveBC) PressureAdaptiveBC = 0. ! 1) Calculate the processor-local mass flow rate and sum-up the area weighted pressure DO iSpec = 1, nSpecies - ! If usevMPF or DoRadialWeighting then the MacroParticleFactor is already included in the GetParticleWeight - IF(usevMPF.OR.RadialWeighting%DoRadialWeighting) THEN - MacroParticleFactor = 1. - ELSE - MacroParticleFactor = Species(iSpec)%MacroParticleFactor - END IF + ! Species-specific time step IF(VarTimeStep%UseSpeciesSpecific) THEN dtVar = dt * Species(iSpec)%TimeStepFactor ELSE @@ -1326,7 +1320,7 @@ SUBROUTINE CalcSurfaceFluxInfo() END IF DO iSF = 1, Species(iSpec)%nSurfacefluxBCs ! SampledMassFlow contains the weighted particle number balance (in - out) - FlowRateSurfFlux(iSpec,iSF) = Species(iSpec)%Surfaceflux(iSF)%SampledMassflow * MacroParticleFactor / dtVar + FlowRateSurfFlux(iSpec,iSF) = Species(iSpec)%Surfaceflux(iSF)%SampledMassflow / dtVar IF(Species(iSpec)%Surfaceflux(iSF)%UseEmissionCurrent) THEN FlowRateSurfFlux(iSpec,iSF) = FlowRateSurfFlux(iSpec,iSF) * ABS(Species(iSpec)%ChargeIC) ELSE diff --git a/src/particles/emission/particle_surface_flux.f90 b/src/particles/emission/particle_surface_flux.f90 index d9ca9af02..39b090fba 100644 --- a/src/particles/emission/particle_surface_flux.f90 +++ b/src/particles/emission/particle_surface_flux.f90 @@ -71,6 +71,7 @@ SUBROUTINE ParticleSurfaceflux() INTEGER :: PartInsSideRadWeight(1:RadialWeighting%nSubSides) REAL :: Particle_pos(3), RandVal1, xyzNod(3), RVec(2), minPos(2), xi(2), Vector1(3), Vector2(3) REAL :: ndist(3), midpoint(3) +REAL :: MPF LOGICAL :: AcceptPos REAL,ALLOCATABLE :: particle_positions(:), particle_xis(:) INTEGER,ALLOCATABLE :: PartInsSubSides(:,:,:) @@ -244,7 +245,12 @@ SUBROUTINE ParticleSurfaceflux() PartMPF(ParticleIndexNbr) = CalcRadWeightMPF(PartState(2,ParticleIndexNbr), iSpec,ParticleIndexNbr) END IF IF(CalcSurfFluxInfo) THEN - SF%SampledMassflow = SF%SampledMassflow + GetParticleWeight(ParticleIndexNbr) + IF(usevMPF.OR.RadialWeighting%DoRadialWeighting) THEN + MPF = GetParticleWeight(ParticleIndexNbr) + ELSE + MPF = GetParticleWeight(ParticleIndexNbr) * Species(iSpec)%MacroParticleFactor + END IF + SF%SampledMassflow = SF%SampledMassflow + MPF END IF #ifdef CODE_ANALYZE CALL AnalyzePartPos(ParticleIndexNbr) diff --git a/src/particles/particle_operations.f90 b/src/particles/particle_operations.f90 index 868f01312..eeb51a805 100644 --- a/src/particles/particle_operations.f90 +++ b/src/particles/particle_operations.f90 @@ -137,7 +137,7 @@ SUBROUTINE RemoveParticle(PartID,BCID,alpha,crossedBC) !=================================================================================================================================== ! MODULES USE MOD_Globals_Vars ,ONLY: ElementaryCharge -USE MOD_Particle_Vars ,ONLY: PDM, PartSpecies, Species, PartMPF, usevMPF, PartState, PartPosRef, Pt +USE MOD_Particle_Vars ,ONLY: PDM, PartSpecies, Species, usevMPF, PartState, PartPosRef, Pt USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptiveBC, AdaptBCPartNumOut USE MOD_Particle_Vars ,ONLY: UseNeutralization, NeutralizationSource, NeutralizationBalance,nNeutralizationElems USE MOD_Particle_Boundary_Vars ,ONLY: PartBound @@ -152,14 +152,14 @@ SUBROUTINE RemoveParticle(PartID,BCID,alpha,crossedBC) #endif USE MOD_Particle_Analyze_Tools ,ONLY: CalcEkinPart USE MOD_part_tools ,ONLY: GetParticleWeight -USE MOD_DSMC_Vars ,ONLY: CollInf, AmbipolElecVelo, ElectronicDistriPart, VibQuantsPar +USE MOD_DSMC_Vars ,ONLY: CollInf, AmbipolElecVelo, ElectronicDistriPart, VibQuantsPar, RadialWeighting USE MOD_Mesh_Vars ,ONLY: BoundaryName #if USE_HDG USE MOD_Globals ,ONLY: abort USE MOD_HDG_Vars ,ONLY: UseFPC,FPC,UseEPC,EPC USE MOD_Mesh_Vars ,ONLY: BoundaryType #endif /*USE_HDG*/ -USE MOD_Particle_Vars ,ONLY: PartState, LastPartPos +USE MOD_Particle_Vars ,ONLY: PartState!, LastPartPos !USE MOD_Particle_Mesh_Vars ,ONLY: GEO !----------------------------------------------------------------------------------------------------------------------------------! IMPLICIT NONE @@ -229,13 +229,17 @@ SUBROUTINE RemoveParticle(PartID,BCID,alpha,crossedBC) ! - the mass flow through the boundary shall be calculated or ! - the charges impinging on the boundary are to be summed (thruster neutralization) IF(PRESENT(BCID)) THEN - + ! Determine the particle weight + IF(usevMPF.OR.RadialWeighting%DoRadialWeighting) THEN + MPF = GetParticleWeight(PartID) + ELSE + MPF = GetParticleWeight(PartID) * Species(iSpec)%MacroParticleFactor + END IF ! Check if adaptive BC or surface flux info IF(UseAdaptiveBC.OR.CalcSurfFluxInfo) THEN DO iSF=1,Species(iSpec)%nSurfacefluxBCs IF(Species(iSpec)%Surfaceflux(iSF)%BC.EQ.BCID) THEN - Species(iSpec)%Surfaceflux(iSF)%SampledMassflow = Species(iSpec)%Surfaceflux(iSF)%SampledMassflow & - - GetParticleWeight(PartID) + Species(iSpec)%Surfaceflux(iSF)%SampledMassflow = Species(iSpec)%Surfaceflux(iSF)%SampledMassflow - MPF IF(Species(iSpec)%Surfaceflux(iSF)%AdaptiveType.EQ.4) AdaptBCPartNumOut(iSpec,iSF) = AdaptBCPartNumOut(iSpec,iSF) + 1 END IF END DO @@ -254,11 +258,6 @@ SUBROUTINE RemoveParticle(PartID,BCID,alpha,crossedBC) ! Check if BPO boundary is encountered IF(CalcBoundaryParticleOutput)THEN - IF(usevMPF)THEN - MPF = PartMPF(PartID) - ELSE - MPF = Species(iSpec)%MacroParticleFactor - END IF ASSOCIATE( iBPOBC => BPO%BCIDToBPOBCID(BCID),& iBPOSpec => BPO%SpecIDToBPOSpecID(iSpec)) IF(iBPOBC.GT.0.AND.iBPOSpec.GT.0)THEN! count this species on this BC @@ -273,11 +272,6 @@ SUBROUTINE RemoveParticle(PartID,BCID,alpha,crossedBC) iBC = PartBound%MapToFieldBC(BCID) IF(iBC.LE.0) CALL abort(__STAMP__,'iBC = PartBound%MapToFieldBC(BCID) must be >0',IntInfoOpt=iBC) IF(BoundaryType(iBC,BC_TYPE).EQ.20)THEN ! BCType = BoundaryType(iBC,BC_TYPE) - IF(usevMPF)THEN - MPF = PartMPF(PartID) - ELSE - MPF = Species(iSpec)%MacroParticleFactor - END IF BCState = BoundaryType(iBC,BC_STATE) ! State is iFPC iUniqueFPCBC = FPC%Group(BCState,2) FPC%ChargeProc(iUniqueFPCBC) = FPC%ChargeProc(iUniqueFPCBC) + Species(iSpec)%ChargeIC * MPF @@ -289,11 +283,6 @@ SUBROUTINE RemoveParticle(PartID,BCID,alpha,crossedBC) iBC = PartBound%MapToFieldBC(BCID) IF(iBC.LE.0) CALL abort(__STAMP__,'iBC = PartBound%MapToFieldBC(BCID) must be >0',IntInfoOpt=iBC) IF(BoundaryType(iBC,BC_TYPE).EQ.8)THEN ! BCType = BoundaryType(iBC,BC_TYPE) - IF(usevMPF)THEN - MPF = PartMPF(PartID) - ELSE - MPF = Species(iSpec)%MacroParticleFactor - END IF BCState = BoundaryType(iBC,BC_STATE) ! State is iEPC iUniqueEPCBC = EPC%Group(BCState,2) EPC%ChargeProc(iUniqueEPCBC) = EPC%ChargeProc(iUniqueEPCBC) + Species(iSpec)%ChargeIC * MPF diff --git a/src/particles/particle_timestep.f90 b/src/particles/particle_timestep.f90 index 6c95a5849..062c7fcd2 100644 --- a/src/particles/particle_timestep.f90 +++ b/src/particles/particle_timestep.f90 @@ -466,7 +466,7 @@ END FUNCTION GetParticleTimeStep PURE REAL FUNCTION GetSpeciesTimeStep(iCase) !=================================================================================================================================== -!> Determines the species-specific time step from the collision case +!> Determines the species-specific time step from the collision case (works only in combination with a background gas) !=================================================================================================================================== ! MODULES USE MOD_Globals diff --git a/src/particles/surfacemodel/surfacemodel_analyze.f90 b/src/particles/surfacemodel/surfacemodel_analyze.f90 index 50c9e6265..6c0833e76 100644 --- a/src/particles/surfacemodel/surfacemodel_analyze.f90 +++ b/src/particles/surfacemodel/surfacemodel_analyze.f90 @@ -151,7 +151,7 @@ SUBROUTINE AnalyzeSurface(Time) USE MOD_Restart_Vars ,ONLY: DoRestart USE MOD_Particle_Boundary_Vars ,ONLY: PartBound USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, PorousBC -USE MOD_Particle_Vars ,ONLY: nSpecies,UseNeutralization,NeutralizationBalanceGlobal,Species +USE MOD_Particle_Vars ,ONLY: nSpecies,UseNeutralization,NeutralizationBalanceGlobal,Species,VarTimeStep #if USE_MPI USE MOD_Particle_Boundary_Vars ,ONLY: SurfCOMM #endif /*USE_MPI*/ @@ -312,6 +312,9 @@ SUBROUTINE AnalyzeSurface(Time) IF(ABS(SurfModelAnalyzeSampleTime).LE.0.0)THEN CALL WriteDataInfo(unit_index,RealScalar=0.0) ELSE + ! Scaling the number of particles depending on the species-specific timestep factor + IF(VarTimeStep%UseSpeciesSpecific) BPO%RealPartOut(iBPO,iSpec) = BPO%RealPartOut(iBPO,iSpec) & + / Species(BPO%Species(iSpec))%TimeStepFactor CALL WriteDataInfo(unit_index,RealScalar=BPO%RealPartOut(iBPO,iSpec)/SurfModelAnalyzeSampleTime) END IF ! ABS(SurfModelAnalyzeSampleTime).LE.0.0 END DO From 5bad9894916f5d8c1c06f4b411eb53c910ddd981 Mon Sep 17 00:00:00 2001 From: Asim Date: Thu, 7 Mar 2024 11:33:28 +0100 Subject: [PATCH 185/222] Small clean up --- src/particles/particle_rhs.f90 | 1 - src/timedisc/timedisc_TimeStep_DSMC.f90 | 19 ------------------- src/timedisc/timedisc_init.f90 | 1 - 3 files changed, 21 deletions(-) diff --git a/src/particles/particle_rhs.f90 b/src/particles/particle_rhs.f90 index 473437c92..0d9be1049 100644 --- a/src/particles/particle_rhs.f90 +++ b/src/particles/particle_rhs.f90 @@ -817,7 +817,6 @@ SUBROUTINE CalcPartPosInRotRef(iPart, RotTimestep) ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -!INTEGER :: REAL :: Pt_local(1:3), Pt_local_old(1:3), VeloRotRef_half(1:3), PartState_half(1:3) !=================================================================================================================================== IF(PDM%InRotRefFrame(iPart)) THEN diff --git a/src/timedisc/timedisc_TimeStep_DSMC.f90 b/src/timedisc/timedisc_TimeStep_DSMC.f90 index 1e23ed263..9d4958077 100644 --- a/src/timedisc/timedisc_TimeStep_DSMC.f90 +++ b/src/timedisc/timedisc_TimeStep_DSMC.f90 @@ -72,8 +72,6 @@ SUBROUTINE TimeStep_DSMC() ! LOCAL VARIABLES INTEGER :: iPart REAL :: timeEnd, timeStart, dtVar, RandVal -! Rotational frame of reference -!REAL :: Pt_local(1:3), Pt_local_old(1:3), VeloRotRef_half(1:3), PartState_half(1:3) #if USE_LOADBALANCE REAL :: tLBStart #endif /*USE_LOADBALANCE*/ @@ -129,23 +127,6 @@ SUBROUTINE TimeStep_DSMC() IF(UseRotRefFrame) THEN LastPartVeloRotRef(1:3,iPart)=PartVeloRotRef(1:3,iPart) CALL CalcPartPosInRotRef(iPart, dtVar) -! IF(PDM%InRotRefFrame(iPart)) THEN -! ! Midpoint method -! ! calculate the acceleration (force / mass) at the current time step -! Pt_local_old(1:3) = CalcPartRHSRotRefFrame(PartState(1:3,iPart), PartVeloRotRef(1:3,iPart)) -! ! estimate the mid-point velocity in the rotational frame -! VeloRotRef_half(1:3) = PartVeloRotRef(1:3,iPart) + 0.5*Pt_local_old(1:3)*dtVar -! ! estimate the mid-point position -! PartState_half(1:3) = PartState(1:3,iPart) + 0.5*PartVeloRotRef(1:3,iPart)*dtVar -! ! calculate the acceleration (force / mass) at the mid-point -! Pt_local(1:3) = CalcPartRHSRotRefFrame(PartState_half(1:3), VeloRotRef_half(1:3)) -! ! update the position using the mid-point velocity in the rotational frame -! PartState(1:3,iPart) = PartState(1:3,iPart) + VeloRotRef_half(1:3)*dtVar -! ! update the velocity in the rotational frame using the mid-point acceleration -! PartVeloRotRef(1:3,iPart) = PartVeloRotRef(1:3,iPart) + Pt_local(1:3)*dtVar -! ELSE -! PartState(1:3,iPart) = PartState(1:3,iPart) + PartState(4:6,iPart) * dtVar -! END IF ELSE PartState(1:3,iPart) = PartState(1:3,iPart) + PartState(4:6,iPart) * dtVar END IF diff --git a/src/timedisc/timedisc_init.f90 b/src/timedisc/timedisc_init.f90 index 462bacf04..c9ec8e387 100644 --- a/src/timedisc/timedisc_init.f90 +++ b/src/timedisc/timedisc_init.f90 @@ -505,5 +505,4 @@ SUBROUTINE FinalizeTimeDisc() END SUBROUTINE FinalizeTimeDisc - END MODULE MOD_TimeDiscInit From 4010ab63f1522700ff3db299a5ab5965c86d8736 Mon Sep 17 00:00:00 2001 From: Asim Date: Fri, 8 Mar 2024 13:33:25 +0100 Subject: [PATCH 186/222] Clean up rot subcycling --- .../boundary/particle_boundary_condition.f90 | 1 - src/particles/particle_vars.f90 | 12 +-- .../surfacemodel/surfacemodel_main.f90 | 42 +++------- .../tracking/particle_triatracking.f90 | 78 +++++++------------ 4 files changed, 44 insertions(+), 89 deletions(-) diff --git a/src/particles/boundary/particle_boundary_condition.f90 b/src/particles/boundary/particle_boundary_condition.f90 index 1ab62c25d..88278efcc 100644 --- a/src/particles/boundary/particle_boundary_condition.f90 +++ b/src/particles/boundary/particle_boundary_condition.f90 @@ -626,7 +626,6 @@ SUBROUTINE RotPeriodicInterPlaneBoundary(PartID,SideID,ElemID,IsInterPlanePart) ! Species-specific time step IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(PartSpecies(PartID))%TimeStepFactor -!IF(RotRefSubTimeStep) dtVar = 0.1 * dtVar IF(RotRefSubTimeStep) dtVar = dtVar / REAL(nSubCyclingSteps) ! (2) Calculate the POI and a new random POI on corresponding inter plane using a random angle within the periodic segment diff --git a/src/particles/particle_vars.f90 b/src/particles/particle_vars.f90 index e23018717..2b55765da 100644 --- a/src/particles/particle_vars.f90 +++ b/src/particles/particle_vars.f90 @@ -76,13 +76,13 @@ MODULE MOD_Particle_Vars ! Rot Ref Sub Cycling LOGICAL :: UseRotSubCycling ! Flag if sub cycling is active INTEGER :: nSubCyclingSteps ! Number of subcyling steps -REAL :: LastPartPosSubCycling(3) ! Last position befor SubCycling -REAL :: NewPosSubCycling(3) ! New particle position befor SubCycling -REAL :: PartVeloRotRefSubCycling(3) ! Velocity in the rotational reference frame befor SubCycling -REAL :: LastVeloRotRefSubCycling(3) ! Last Velocity in the rotational reference frame befor SubCycling -INTEGER :: GlobalElemIDSubCycling ! Elemnt ID befor SubCycling +REAL :: LastPartPosSubCycling(3) ! Last position before SubCycling +REAL :: NewPosSubCycling(3) ! New particle position before SubCycling +REAL :: PartVeloRotRefSubCycling(3) ! Velocity in the rotational reference frame before SubCycling +REAL :: LastVeloRotRefSubCycling(3) ! Last Velocity in the rotational reference frame before SubCycling +INTEGER :: GlobalElemIDSubCycling ! Elemnt ID before SubCycling LOGICAL :: RotRefSubTimeStep ! Flag for loop, that defines the cureent time step is a sub cycling step -LOGICAL :: InRotRefFrameSubCycling ! Check for RotRefFrame befor SubCycling +LOGICAL :: InRotRefFrameSubCycling ! Check for RotRefFrame before SubCycling REAL , ALLOCATABLE :: Pt(:,:) ! Derivative of PartState (vx,xy,vz) only ! since temporal derivative of position ! is the velocity. Thus we can take diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index 52b4494d2..b9f722c98 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -371,8 +371,6 @@ SUBROUTINE PerfectReflection(PartID,SideID,n_Loc,opt_Symmetry) END IF ! Species-specific time step IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(SpecID)%TimeStepFactor - -!IF(RotRefSubTimeStep) dtVar = 0.1 * dtVar IF(RotRefSubTimeStep) dtVar = dtVar / REAL(nSubCyclingSteps) IF(PDM%InRotRefFrame(PartID)) THEN @@ -415,43 +413,22 @@ SUBROUTINE PerfectReflection(PartID,SideID,n_Loc,opt_Symmetry) END IF END IF -! set particle position on face +! Set particle position on face LastPartPos(1:3,PartID) = POI_vec(1:3) - -! Determine the correct velocity in case of a rotational frame of reference -!NewVeloPush(1:3) = PartState(4:6,PartID) -! In case of RotRefFrame, the velocity in the rotational reference frame is mirrored as well -!IF(PDM%InRotRefFrame(PartID)) THEN - ! Mirror the velocity in the rotational frame -! PartVeloRotRef(1:3,PartID) = PartVeloRotRef(1:3,PartID) - 2.*DOT_PRODUCT(PartVeloRotRef(1:3,PartID),n_loc)*n_loc - ! ALTERNATIVE: Transform the inertial velocity (which was mirrored) - ! PartVeloRotRef(1:3,PartID) = PartState(4:6,PartID) - CROSS(RotRefFrameOmega(1:3),LastPartPos(1:3,PartID)) -!END IF - TrackInfo%PartTrajectory(1:3) = TrackInfo%PartTrajectory(1:3)-2.*DOT_PRODUCT(TrackInfo%PartTrajectory(1:3),n_loc)*n_loc - -! Check if rotational frame of reference is used, otherwise mirror the LastPartPos +! Check if rotational frame of reference is used, otherwise mirror the LastPartPos for new particle position IF(PDM%InRotRefFrame(PartID)) THEN POI_fak = 1.- (TrackInfo%lengthPartTrajectory-TrackInfo%alpha) / VECNORM(OldVelo*dtVar) - - -! ! 6a.) Determine the correct velocity for the subsequent push in case of a rotational frame of reference + ! Determine the correct velocity for the subsequent push in case of a rotational frame of reference at POI NewVeloPush(1:3) = PartState(4:6,PartID) - IF(PDM%InRotRefFrame(PartID)) THEN - NewVeloPush(1:3) = NewVeloPush(1:3) - CROSS(RotRefFrameOmega(1:3),LastPartPos(1:3,PartID)) - NewVeloPush(1:3) = NewVeloPush(1:3) + CalcPartRHSRotRefFrame(LastPartPos(1:3,PartID),NewVeloPush(1:3)) * (1.0 - POI_fak) * dtVar - ! Store the new rotational reference frame velocity - PartVeloRotRef(1:3,PartID) = NewVeloPush(1:3) - END IF - - ! Add the acceleration due to new velocity vector at the POI - !!PartVeloRotRef(1:3,PartID) = PartVeloRotRef(1:3,PartID) + CalcPartRHSRotRefFrame(LastPartPos(1:3,PartID),PartVeloRotRef(1:3,PartID)) * dtVar * (1.0 - POI_fak) - ! IF(DOT_PRODUCT(PartVeloRotRef(1:3,PartID),n_loc).GT.0.) THEN - ! PartVeloRotRef(1:3,PartID) = PartVeloRotRef(1:3,PartID) - 2.*DOT_PRODUCT(PartVeloRotRef(1:3,PartID),n_loc)*n_loc - ! END IF - !!PartState(1:3,PartID) = LastPartPos(1:3,PartID) + (1.0 - POI_fak) * dtVar * PartVeloRotRef(1:3,PartID) + NewVeloPush(1:3) = NewVeloPush(1:3) - CROSS(RotRefFrameOmega(1:3),LastPartPos(1:3,PartID)) + NewVeloPush(1:3) = NewVeloPush(1:3) + CalcPartRHSRotRefFrame(LastPartPos(1:3,PartID),NewVeloPush(1:3)) * (1.0 - POI_fak) * dtVar + ! Store the new rotational reference frame velocity + PartVeloRotRef(1:3,PartID) = NewVeloPush(1:3) + ! Calc new particle position with NewVeloPush PartState(1:3,PartID) = LastPartPos(1:3,PartID) + (1.0 - POI_fak) * dtVar * NewVeloPush(1:3) ELSE + ! Mirror the LastPartPos for new particle position PartState(1:3,PartID) = LastPartPos(1:3,PartID) + TrackInfo%PartTrajectory(1:3)*(TrackInfo%lengthPartTrajectory - TrackInfo%alpha) END IF @@ -584,7 +561,6 @@ SUBROUTINE DiffuseReflection(PartID,SideID,n_loc) ! Species-specific time step IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(SpecID)%TimeStepFactor -!IF(RotRefSubTimeStep) dtVar = 0.1 * dtVar IF(RotRefSubTimeStep) dtVar = dtVar / REAL(nSubCyclingSteps) IF(PDM%InRotRefFrame(PartID)) THEN diff --git a/src/particles/tracking/particle_triatracking.f90 b/src/particles/tracking/particle_triatracking.f90 index 6468fd768..acd8ea48b 100644 --- a/src/particles/tracking/particle_triatracking.f90 +++ b/src/particles/tracking/particle_triatracking.f90 @@ -95,7 +95,6 @@ SUBROUTINE ParticleTriaTracking() !--- it must be stored before first call of "SingleParticleTriaTracking" !--- because particle informations like LastPartPos & PartState can be changed within "SingleParticleTriaTracking" !--- e.g. in RotPeriodicInterPlaneBoundary -! RotRefSubTimeStep=.FALSE. RotRefSubTimeStep=.TRUE. LastPartPosSubCycling(1:3) = LastPartPos(1:3,i) NewPosSubCycling(1:3) = PartState(1:3,i) @@ -103,7 +102,6 @@ SUBROUTINE ParticleTriaTracking() LastVeloRotRefSubCycling(1:3) = LastPartVeloRotRef(1:3,i) GlobalElemIDSubCycling = PEM%LastGlobalElemID(i) InRotRefFrameSubCycling = PDM%InRotRefFrame(i) -! CALL SingleParticleTriaTracking(i=i) IF(RotRefSubTimeStep) THEN !--- split time step in 10 sub-steps IF (UseVarTimeStep) THEN @@ -112,9 +110,8 @@ SUBROUTINE ParticleTriaTracking() dtVar = dt END IF IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(PartSpecies(i))%TimeStepFactor - !dtVar = 0.1 * dtVar dtVar = dtVar / REAL(nSubCyclingSteps) -!--- Reset Particle Push +!--- Reset Particle Push from timedisc PartState(1:3,i) = LastPartPosSubCycling(1:3) LastPartPos(1:3,i) = LastPartPosSubCycling(1:3) PartVeloRotRef(1:3,i)=LastVeloRotRefSubCycling(1:3) @@ -123,8 +120,7 @@ SUBROUTINE ParticleTriaTracking() LastPartVeloRotRef(1:3,i) = LastVeloRotRefSubCycling(1:3) PDM%ParticleInside(i) = .TRUE. PDM%InRotRefFrame(i) = InRotRefFrameSubCycling -!--- 10 sub-steps - !DO iStep = 1, 10 +!--- Loop over sub time steps DO iStep = 1, nSubCyclingSteps IF (PDM%ParticleInside(i)) THEN IF(iStep.GT.1) THEN @@ -162,7 +158,6 @@ SUBROUTINE ParticleTriaTracking() InterPartID = InterPlanePartIndx(i) PDM%ParticleInside(InterPartID) = .TRUE. IF(UseRotSubCycling) THEN -! RotRefSubTimeStep=.FALSE. RotRefSubTimeStep=.TRUE. LastPartPosSubCycling(1:3) = LastPartPos(1:3,InterPartID) NewPosSubCycling(1:3) = PartState(1:3,InterPartID) @@ -170,39 +165,34 @@ SUBROUTINE ParticleTriaTracking() LastVeloRotRefSubCycling(1:3) = LastPartVeloRotRef(1:3,InterPartID) GlobalElemIDSubCycling = PEM%LastGlobalElemID(InterPartID) InRotRefFrameSubCycling = PDM%InRotRefFrame(InterPartID) -! CALL SingleParticleTriaTracking(i=InterPartID,IsInterPlanePart=.TRUE.) - IF(RotRefSubTimeStep) THEN !--- split time step in 10 sub-steps - IF (UseVarTimeStep) THEN - dtVar = dt * PartTimeStep(InterPartID) - ELSE - dtVar = dt - END IF - IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(PartSpecies(InterPartID))%TimeStepFactor - !dtVar = 0.1 * dtVar - dtVar = dtVar / REAL(nSubCyclingSteps) - !--- Reset Particle Push - PartState(1:3,InterPartID) = LastPartPosSubCycling(1:3) - LastPartPos(1:3,InterPartID) = LastPartPosSubCycling(1:3) - PartVeloRotRef(1:3,InterPartID)=LastVeloRotRefSubCycling(1:3) - PEM%GlobalElemID(InterPartID) = GlobalElemIDSubCycling - PEM%LastGlobalElemID(InterPartID)= GlobalElemIDSubCycling - LastPartVeloRotRef(1:3,InterPartID) = LastVeloRotRefSubCycling(1:3) - PDM%InRotRefFrame(InterPartID) = InRotRefFrameSubCycling - !--- 10 sub-steps - !DO iStep = 1, 10 - DO iStep = 1, nSubCyclingSteps - IF (PDM%ParticleInside(InterPartID)) THEN - IF(iStep.GT.1) THEN - LastPartPos(1:3,InterPartID)=PartState(1:3,InterPartID) - PEM%LastGlobalElemID(InterPartID)=PEM%GlobalElemID(InterPartID) - LastPartVeloRotRef(1:3,InterPartID)=PartVeloRotRef(1:3,InterPartID) - END IF - CALL CalcPartPosInRotRef(InterPartID, dtVar) - CALL SingleParticleTriaTracking(i=InterPartID,IsInterPlanePart=.TRUE.) - END IF - END DO + IF (UseVarTimeStep) THEN + dtVar = dt * PartTimeStep(InterPartID) + ELSE + dtVar = dt END IF + IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(PartSpecies(InterPartID))%TimeStepFactor + dtVar = dtVar / REAL(nSubCyclingSteps) + !--- reset Particle Push + PartState(1:3,InterPartID) = LastPartPosSubCycling(1:3) + LastPartPos(1:3,InterPartID) = LastPartPosSubCycling(1:3) + PartVeloRotRef(1:3,InterPartID)=LastVeloRotRefSubCycling(1:3) + PEM%GlobalElemID(InterPartID) = GlobalElemIDSubCycling + PEM%LastGlobalElemID(InterPartID)= GlobalElemIDSubCycling + LastPartVeloRotRef(1:3,InterPartID) = LastVeloRotRefSubCycling(1:3) + PDM%InRotRefFrame(InterPartID) = InRotRefFrameSubCycling + !--- Loop over sub time steps + DO iStep = 1, nSubCyclingSteps + IF (PDM%ParticleInside(InterPartID)) THEN + IF(iStep.GT.1) THEN + LastPartPos(1:3,InterPartID)=PartState(1:3,InterPartID) + PEM%LastGlobalElemID(InterPartID)=PEM%GlobalElemID(InterPartID) + LastPartVeloRotRef(1:3,InterPartID)=PartVeloRotRef(1:3,InterPartID) + END IF + CALL CalcPartPosInRotRef(InterPartID, dtVar) + CALL SingleParticleTriaTracking(i=InterPartID,IsInterPlanePart=.TRUE.) + END IF + END DO !--- Reset stored particle informations RotRefSubTimeStep = .FALSE. LastPartPosSubCycling = 0.0 @@ -246,7 +236,7 @@ SUBROUTINE SingleParticleTriaTracking(i,IsInterPlanePart) USE MOD_Particle_Vars ,ONLY: PEM,PDM,PartSpecies USE MOD_Particle_Vars ,ONLY: PartState,LastPartPos USE MOD_Particle_Vars ,ONLY: Symmetry -USE MOD_Particle_Vars ,ONLY: UseRotRefFrame, RotRefFrameOmega, PartVeloRotRef, RotRefSubTimeStep, UseRotSubCycling +USE MOD_Particle_Vars ,ONLY: UseRotRefFrame, RotRefFrameOmega, PartVeloRotRef USE MOD_Particle_Mesh_Tools ,ONLY: ParticleInsideQuad3D USE MOD_Particle_Mesh_Vars USE MOD_Particle_Tracking_vars ,ONLY: ntracks,MeasureTrackTime,CountNbrOfLostParts, NbrOfLostParticles, TrackInfo @@ -505,16 +495,6 @@ SUBROUTINE SingleParticleTriaTracking(i,IsInterPlanePart) BCType = PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID))) ! Calculate the intersection with the wall and determine alpha (= fraction of trajectory to the intersection) IF(BCType.NE.1) CALL IntersectionWithWall(i,LocalSide,ElemID,TriNum) - IF((UseRotRefFrame).AND.(UseRotSubCycling)) THEN -! IF((BCType.EQ.2).OR.(BCType.EQ.6).OR.(BCType.EQ.7)) THEN -! IF(PDM%InRotRefFrame(i)) THEN - IF(.NOT.RotRefSubTimeStep) THEN - RotRefSubTimeStep=.TRUE. - EXIT - END IF -! END IF -! END IF - END IF IF(PRESENT(IsInterPlanePart)) THEN CALL GetBoundaryInteraction(i,SideID,flip,ElemID,crossedBC,TriNum=TriNum,IsInterPlanePart=IsInterPlanePart) ELSE From 104699d6b316770fb07b89403d23a3da7066a016 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 11 Mar 2024 23:13:42 +0100 Subject: [PATCH 187/222] Utilize ParticleAnalyzeSampleTime to calculate per second variables (collision/reaction rates, mass flow etc.) instead of using the time step and PartAnalyzeStep --- .../analyze/particle_analyze_tools.f90 | 89 ++++--------------- 1 file changed, 17 insertions(+), 72 deletions(-) diff --git a/src/particles/analyze/particle_analyze_tools.f90 b/src/particles/analyze/particle_analyze_tools.f90 index d1556008a..dea073b50 100644 --- a/src/particles/analyze/particle_analyze_tools.f90 +++ b/src/particles/analyze/particle_analyze_tools.f90 @@ -1282,8 +1282,8 @@ SUBROUTINE CalcSurfaceFluxInfo() !=================================================================================================================================== ! MODULES ! USE MOD_Globals -USE MOD_TimeDisc_Vars ,ONLY: dt, iter -USE MOD_Particle_Analyze_Vars ,ONLY: FlowRateSurfFlux,PressureAdaptiveBC,PartAnalyzeStep +USE MOD_TimeDisc_Vars ,ONLY: iter +USE MOD_Particle_Analyze_Vars ,ONLY: FlowRateSurfFlux,PressureAdaptiveBC,ParticleAnalyzeSampleTime USE MOD_Particle_Vars ,ONLY: Species,nSpecies,VarTimeStep USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, SurfFluxSideSize, SurfMeshSubSideData USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptiveBC, AdaptBCMacroVal, AdaptBCMapElemToSample, AdaptBCAreaSurfaceFlux @@ -1314,9 +1314,9 @@ SUBROUTINE CalcSurfaceFluxInfo() DO iSpec = 1, nSpecies ! Species-specific time step IF(VarTimeStep%UseSpeciesSpecific) THEN - dtVar = dt * Species(iSpec)%TimeStepFactor + dtVar = ParticleAnalyzeSampleTime * Species(iSpec)%TimeStepFactor ELSE - dtVar = dt + dtVar = ParticleAnalyzeSampleTime END IF DO iSF = 1, Species(iSpec)%nSurfacefluxBCs ! SampledMassFlow contains the weighted particle number balance (in - out) @@ -1371,15 +1371,8 @@ SUBROUTINE CalcSurfaceFluxInfo() END IF #endif /*USE_MPI*/ -! 3) Consider Part-AnalyzeStep for FlowRateSurfFlux and determine the average pressure (value does not depend on the Part-AnalyzeStep) +! 3) Determine the average pressure IF (MPIRoot) THEN - IF(PartAnalyzeStep.GT.1)THEN - IF(PartAnalyzeStep.EQ.HUGE(PartAnalyzeStep))THEN - FlowRateSurfFlux = FlowRateSurfFlux / iter - ELSE - FlowRateSurfFlux = FlowRateSurfFlux / MIN(PartAnalyzeStep,iter) - END IF - END IF IF(UseAdaptiveBC) THEN IF(AdaptBCAverageValBC) THEN PressureAdaptiveBC(:,:) = AdaptBCAverageMacroVal(3,:,:) @@ -2125,10 +2118,9 @@ SUBROUTINE CollRates(CRate) !=================================================================================================================================== ! MODULES USE MOD_Globals +USE MOD_Particle_Analyze_Vars ,ONLY: ParticleAnalyzeSampleTime USE MOD_DSMC_Vars ,ONLY: CollInf, DSMC -USE MOD_TimeDisc_Vars ,ONLY: dt, iter USE MOD_Particle_Vars ,ONLY: VarTimeStep -USE MOD_Particle_Analyze_Vars ,ONLY: PartAnalyzeStep USE MOD_Particle_TimeStep ,ONLY: GetSpeciesTimeStep ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -2156,26 +2148,14 @@ SUBROUTINE CollRates(CRate) DO iCase=1, CollInf%NumCase ! Species-specific time step IF(VarTimeStep%UseSpeciesSpecific.AND..NOT.VarTimeStep%DisableForMCC) THEN - dtVar = dt * GetSpeciesTimeStep(iCase) + dtVar = ParticleAnalyzeSampleTime * GetSpeciesTimeStep(iCase) ELSE - dtVar = dt + dtVar = ParticleAnalyzeSampleTime END IF CRate(iCase) = DSMC%NumColl(iCase) / dtVar END DO ! Total collision rate is the sum of the case-specific rates CRate(CollInf%NumCase + 1) = SUM(CRate(1:CollInf%NumCase)) - ! Consider Part-AnalyzeStep - IF(PartAnalyzeStep.GT.1)THEN - IF(PartAnalyzeStep.EQ.HUGE(PartAnalyzeStep))THEN - DO iCase=1, CollInf%NumCase + 1 - CRate(iCase) = CRate(iCase) / iter - END DO ! iCase=1, CollInf%NumCase + 1 - ELSE - DO iCase=1, CollInf%NumCase + 1 - CRate(iCase) = CRate(iCase) / MIN(PartAnalyzeStep,iter) - END DO ! iCase=1, CollInf%NumCase + 1 - END IF - END IF END IF DSMC%NumColl = 0. @@ -2194,8 +2174,7 @@ SUBROUTINE CalcRelaxRates(NumSpec,VibRelaxProbCase) USE MOD_DSMC_Vars ,ONLY: CollisMode, CollInf USE MOD_MCC_Vars ,ONLY: SpecXSec, XSec_Relaxation USE MOD_Particle_Mesh_Vars ,ONLY: MeshVolume -USE MOD_TimeDisc_Vars ,ONLY: dt, iter -USE MOD_Particle_Analyze_Vars ,ONLY: PartAnalyzeStep +USE MOD_Particle_Analyze_Vars ,ONLY: ParticleAnalyzeSampleTime USE MOD_Particle_TimeStep ,ONLY: GetSpeciesTimeStep ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -2231,27 +2210,15 @@ SUBROUTINE CalcRelaxRates(NumSpec,VibRelaxProbCase) iCase = CollInf%Coll_Case(iSpec,jSpec) ! Species-specific time step IF(VarTimeStep%UseSpeciesSpecific.AND..NOT.VarTimeStep%DisableForMCC) THEN - dtVar = dt * GetSpeciesTimeStep(iCase) + dtVar = ParticleAnalyzeSampleTime * GetSpeciesTimeStep(iCase) ELSE - dtVar = dt + dtVar = ParticleAnalyzeSampleTime END IF VibRelaxProbCase(iCase) = SpecXSec(iCase)%VibCount * MPF_1 * MeshVolume & / (dtVar * MPF_1*NumSpec(iSpec) * MPF_2*NumSpec(jSpec)) END DO END DO END IF - ! Consider Part-AnalyzeStep - IF(PartAnalyzeStep.GT.1) THEN - IF(PartAnalyzeStep.EQ.HUGE(PartAnalyzeStep))THEN - DO iCase = 1, CollInf%NumCase - VibRelaxProbCase(iCase) = VibRelaxProbCase(iCase) / iter - END DO - ELSE - DO iCase = 1, CollInf%NumCase - VibRelaxProbCase(iCase) = VibRelaxProbCase(iCase) / MIN(PartAnalyzeStep,iter) - END DO - END IF - END IF END IF SpecXSec(:)%VibCount = 0. @@ -2267,8 +2234,7 @@ SUBROUTINE CalcRelaxRatesElec(ElecRelaxRate) USE MOD_Particle_Vars ,ONLY: VarTimeStep USE MOD_DSMC_Vars ,ONLY: CollInf USE MOD_MCC_Vars ,ONLY: SpecXSec -USE MOD_TimeDisc_Vars ,ONLY: dt, iter -USE MOD_Particle_Analyze_Vars ,ONLY: PartAnalyzeStep +USE MOD_Particle_Analyze_Vars ,ONLY: ParticleAnalyzeSampleTime USE MOD_Particle_TimeStep ,ONLY: GetSpeciesTimeStep ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -2308,21 +2274,13 @@ SUBROUTINE CalcRelaxRatesElec(ElecRelaxRate) IF(SpecXSec(iCase)%UseElecXSec) THEN ! Species-specific time step IF(VarTimeStep%UseSpeciesSpecific.AND..NOT.VarTimeStep%DisableForMCC) THEN - dtVar = dt * GetSpeciesTimeStep(iCase) + dtVar = ParticleAnalyzeSampleTime * GetSpeciesTimeStep(iCase) ELSE - dtVar = dt + dtVar = ParticleAnalyzeSampleTime END IF ElecRelaxRate(iCase,:) = ElecRelaxRate(iCase,:) / dtVar END IF END DO - ! Consider Part-AnalyzeStep - IF(PartAnalyzeStep.GT.1)THEN - IF(PartAnalyzeStep.EQ.HUGE(PartAnalyzeStep))THEN - ElecRelaxRate = ElecRelaxRate / iter - ELSE - ElecRelaxRate = ElecRelaxRate / MIN(PartAnalyzeStep,iter) - END IF - END IF END IF DO iCase=1, CollInf%NumCase @@ -2342,11 +2300,10 @@ SUBROUTINE ReacRates(NumSpec, RRate) !=================================================================================================================================== ! MODULES USE MOD_Globals +USE MOD_Particle_Analyze_Vars ,ONLY: ParticleAnalyzeSampleTime USE MOD_DSMC_Vars ,ONLY: ChemReac, DSMC -USE MOD_TimeDisc_Vars ,ONLY: dt, iter USE MOD_Particle_Vars ,ONLY: Species, nSpecies, VarTimeStep USE MOD_Particle_Mesh_Vars ,ONLY: MeshVolume -USE MOD_Particle_Analyze_Vars ,ONLY: PartAnalyzeStep USE MOD_Particle_TimeStep ,ONLY: GetSpeciesTimeStep ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -2378,9 +2335,9 @@ SUBROUTINE ReacRates(NumSpec, RRate) iCase = ChemReac%ReactCase(iReac) ! Species-specific time step IF(VarTimeStep%UseSpeciesSpecific.AND..NOT.VarTimeStep%DisableForMCC) THEN - dtVar = dt * GetSpeciesTimeStep(iCase) + dtVar = ParticleAnalyzeSampleTime * GetSpeciesTimeStep(iCase) ELSE - dtVar = dt + dtVar = ParticleAnalyzeSampleTime END IF IF ((NumSpec(ChemReac%Reactants(iReac,1)).GT.0).AND.(NumSpec(ChemReac%Reactants(iReac,2)).GT.0)) THEN IF(ChemReac%Reactants(iReac,3).NE.0) THEN @@ -2420,18 +2377,6 @@ SUBROUTINE ReacRates(NumSpec, RRate) ChemReac%NumReac = 0. ChemReac%ReacCount = 0 ChemReac%ReacCollMean = 0.0 -! Consider Part-AnalyzeStep -IF(PartAnalyzeStep.GT.1)THEN - IF(PartAnalyzeStep.EQ.HUGE(PartAnalyzeStep))THEN - DO iReac=1, ChemReac%NumOfReact - RRate(iReac) = RRate(iReac) / iter - END DO ! iReac=1, ChemReac%NumOfReact - ELSE - DO iReac=1, ChemReac%NumOfReact - RRate(iReac) = RRate(iReac) / REAL(MIN(PartAnalyzeStep,iter)) - END DO ! iReac=1, ChemReac%NumOfReact - END IF -END IF END SUBROUTINE ReacRates #endif From ac25234f368caa262edc0abfa8e5e375118df6d4 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 12 Feb 2024 15:49:22 +0100 Subject: [PATCH 188/222] Update of setup installation scripts: new download links for PETSc and Modules --- tools/Setup_ModuleEnv/InstallCMake.sh | 10 +----- tools/Setup_ModuleEnv/InstallGCC.sh | 2 +- tools/Setup_ModuleEnv/InstallHDF5.sh | 1 + .../Setup_ModuleEnv/InstallMPIallCOMPILERS.sh | 12 +------ tools/Setup_ModuleEnv/InstallModules.sh | 26 +++++--------- tools/Setup_ModuleEnv/InstallPETSc.sh | 34 +++++------------- tools/Setup_ModuleEnv/README.md | 36 +++++++++---------- 7 files changed, 39 insertions(+), 82 deletions(-) diff --git a/tools/Setup_ModuleEnv/InstallCMake.sh b/tools/Setup_ModuleEnv/InstallCMake.sh index a9ba4938b..2b222b26e 100755 --- a/tools/Setup_ModuleEnv/InstallCMake.sh +++ b/tools/Setup_ModuleEnv/InstallCMake.sh @@ -59,15 +59,7 @@ fi # DOWNLOAD and INSTALL CMAKE (example cmake-3.4.3) # For current releases, see: https://github.com/Kitware/CMake/releases/ -#CMAKEVERSION='3.4.3' -#CMAKEVERSION='3.13.3' -#CMAKEVERSION='3.15.3' -#CMAKEVERSION='3.17.0' -#CMAKEVERSION='3.20.3' -#CMAKEVERSION='3.21.3' -#CMAKEVERSION='3.24.0' -#CMAKEVERSION='3.24.2' -CMAKEVERSION='3.26.4' +CMAKEVERSION='3.28.2' CMAKEDIR=${INSTALLDIR}/cmake/${CMAKEVERSION}/standard MODULEFILE=${INSTALLDIR}/modules/modulefiles/utilities/cmake/${CMAKEVERSION} diff --git a/tools/Setup_ModuleEnv/InstallGCC.sh b/tools/Setup_ModuleEnv/InstallGCC.sh index c186f1166..7b685498f 100755 --- a/tools/Setup_ModuleEnv/InstallGCC.sh +++ b/tools/Setup_ModuleEnv/InstallGCC.sh @@ -94,7 +94,7 @@ fi #GCCVERSION='12.2.0' # Check requirements and update the pre-requisites inquiry below if necessary -#GCCVERSION='13.1.0' +# sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev GCCVERSION='13.2.0' # -------------------------------------------------------------------------------------------------- diff --git a/tools/Setup_ModuleEnv/InstallHDF5.sh b/tools/Setup_ModuleEnv/InstallHDF5.sh index 780722d76..10c8f2866 100755 --- a/tools/Setup_ModuleEnv/InstallHDF5.sh +++ b/tools/Setup_ModuleEnv/InstallHDF5.sh @@ -115,6 +115,7 @@ fi #HDF5VERSION=1.12.1 #HDF5VERSION=1.12.2 HDF5VERSION=1.14.0 +#HDF5VERSION=1.14.3 # Error during mesh read-in in piclas/src/io_hdf5/hdf5_input.f90 COMPILERPREFIX=compilers/ # required for modules 5.0.0 MPIPREFIX=MPI/ # required for modules 5.0.0 diff --git a/tools/Setup_ModuleEnv/InstallMPIallCOMPILERS.sh b/tools/Setup_ModuleEnv/InstallMPIallCOMPILERS.sh index 66d20d13c..6859626c5 100755 --- a/tools/Setup_ModuleEnv/InstallMPIallCOMPILERS.sh +++ b/tools/Setup_ModuleEnv/InstallMPIallCOMPILERS.sh @@ -64,22 +64,12 @@ fi CONFIGSUFFIX='' if [ "${WHICHMPI}" == "openmpi" ]; then # DOWNLOAD and INSTALL OPENMPI (example OpenMPI-2.1.6) - #MPIVERSION=2.1.6 - #MPIVERSION=3.1.3 - #MPIVERSION=3.1.4 - #MPIVERSION=3.1.6 - #MPIVERSION=4.0.1 - #MPIVERSION=4.0.5 - #MPIVERSION=4.1.1 - #MPIVERSION=4.1.4 - MPIVERSION=4.1.5 + MPIVERSION=4.1.6 elif [ "${WHICHMPI}" == "mpich" ]; then # DOWNLOAD and INSTALL MPICH (example mpich-3.2.0) - #MPIVERSION=3.2 MPIVERSION=4.1.2 elif [ "${WHICHMPI}" == "mpich-debug" ]; then # DOWNLOAD and INSTALL MPICH (example mpich-3.2.0) - #MPIVERSION=3.2 MPIVERSION=4.1.2 CONFIGSUFFIX='--with-device=ch3:sock' else diff --git a/tools/Setup_ModuleEnv/InstallModules.sh b/tools/Setup_ModuleEnv/InstallModules.sh index 44b983425..09b30c3bd 100755 --- a/tools/Setup_ModuleEnv/InstallModules.sh +++ b/tools/Setup_ModuleEnv/InstallModules.sh @@ -52,7 +52,7 @@ calcTrue() { awk 'BEGIN{printf "%d\n" , ('"$*"'?1:0)}';} #MODULEVERSION='4.6.1' #MODULEVERSION='5.0.0' #MODULEVERSION='5.0.1' -MODULEVERSION='5.1.1' +MODULEVERSION='5.3.1' NBROFCORES=$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}') INSTALLDIR=/opt @@ -63,27 +63,17 @@ MODULESPATH=${INSTALLDIR}/modules/${MODULEVERSION}/init/.modulespath BUILDDIR=${SOURCESDIR}/modules-${MODULEVERSION} TARFILE=${SOURCESDIR}/modules-${MODULEVERSION}.tar.gz +if wget -q --method=HEAD https://github.com/cea-hpc/modules/releases/download/v${MODULEVERSION}/modules-${MODULEVERSION}.tar.gz; then + MODULEDLINK="https://github.com/cea-hpc/modules/releases/download/v${MODULEVERSION}/modules-${MODULEVERSION}.tar.gz" +else + echo "ERROR: Download URL not found. Check the requested version of modules. Exit." + exit +fi + echo "" echo -e "This will install Environment Modules version ${GREEN}${MODULEVERSION}${NC}.\nCompilation in parallel will be executed with ${GREEN}${NBROFCORES} threads${NC}." read -p "Press [Enter] to continue or [Crtl+c] to abort!" -#if [ "$MODULEVERSION" == "3.2.10" ]; then - #MODULEDLINK='https://downloads.sourceforge.net/project/modules/Modules/modules-3.2.10/modules-3.2.10.tar.gz?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fmodules%2Ffiles%2FModules%2Fmodules-3.2.10%2Fmodules-3.2.10.tar.gz%2Fdownload%3Fuse_mirror%3Dkent&ts=1548854959' -if [ "$MODULEVERSION" == "4.6.1" ]; then - MODULEDLINK='https://downloads.sourceforge.net/project/modules/Modules/modules-4.6.1/modules-4.6.1.tar.gz?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fmodules%2Ffiles%2FModules%2Fmodules-4.6.1%2Fmodules-4.6.1.tar.gz%2Fdownload%3Fuse_mirror%3Dkent&ts=1548854959' -elif [ "$MODULEVERSION" == "5.0.0" ]; then - MODULEDLINK='https://downloads.sourceforge.net/project/modules/Modules/modules-5.0.0/modules-5.0.0.tar.gz?ts=gAAAAABhXF_Jxr8Tp_QSaLtNFIwqXte_JnuzMdO606UAbI0okB5uzbQFQ0B5NmlIQ-bgM2uJr_EAVFEtCm9GR0NuyWLthCNrrQ%3D%3D&r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fmodules%2Ffiles%2FModules%2Fmodules-5.0.0%2Fmodules-5.0.0.tar.gz%2Fdownload' -elif [ "$MODULEVERSION" == "5.0.1" ]; then - MODULEDLINK='https://downloads.sourceforge.net/project/modules/Modules/modules-5.0.1/modules-5.0.1.tar.gz?ts=gAAAAABhcU8vH1TG6SQext57ioXX7Ja-U8fAP4QzR_dzW9vk8_M4sH1kCEgrNjgUH1OYjtNI2bWUJLtIw3O0V3ClRMUhmqAoqw%3D%3D&r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fmodules%2Ffiles%2FModules%2Fmodules-5.0.1%2Fmodules-5.0.1.tar.gz%2Fdownload' -elif [ "$MODULEVERSION" == "5.1.1" ]; then - MODULEDLINK='https://downloads.sourceforge.net/project/modules/Modules/modules-5.1.1/modules-5.1.1.tar.gz?ts=gAAAAABjLEKdzzvZbBrq1P1xVq0ZkSBd-sPTY61Zu6mneKWZNP111L-_WOIE-yEnfw_IVxvae25tU7tvcG4xoGEZIjp6Va7N6g%3D%3D&r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fmodules%2Ffiles%2Flatest%2Fdownload' -fi - -if [[ -z ${MODULEDLINK} ]]; then - echo "ERROR: MODULEDLINK not set correctly. Exit." - exit -fi - if [[ -n ${1} ]]; then # Remove INSTALL directory during re-run diff --git a/tools/Setup_ModuleEnv/InstallPETSc.sh b/tools/Setup_ModuleEnv/InstallPETSc.sh index 334a289fc..213c469f2 100755 --- a/tools/Setup_ModuleEnv/InstallPETSc.sh +++ b/tools/Setup_ModuleEnv/InstallPETSc.sh @@ -94,30 +94,13 @@ do if [ ${ARG} == "--modules" ] || [ ${ARG} == "-m" ]; then LOADMODULES=0 # Set desired versions - #CMAKEVERSION=3.15.3-d - #CMAKEVERSION=3.17.0-d - #CMAKEVERSION=3.20.3 - #CMAKEVERSION=3.21.3 - #CMAKEVERSION=3.24.2 - CMAKEVERSION=3.26.4 - - #GCCVERSION=9.2.0 - #GCCVERSION=9.3.0 - #GCCVERSION=10.1.0 - #GCCVERSION=10.2.0 - #GCCVERSION=11.2.0 - #GCCVERSION=12.2.0 - #GCCVERSION=13.1.0 - GCCVERSION=13.2.0 + CMAKEVERSION=3.28.2 - #OPENMPIVERSION=3.1.4 - #OPENMPIVERSION=4.0.1 - #OPENMPIVERSION=4.0.2 - #OPENMPIVERSION=3.1.6 - #OPENMPIVERSION=4.1.1 - #OPENMPIVERSION=4.1.4 - #OPENMPIVERSION=4.1.5 + GCCVERSION=13.2.0 + # OPENMPI + #OPENMPIVERSION=4.1.6 + # MPICH MPICHVERSION=4.1.2 # chose which mpi you want to have installed (openmpi or mpich), default is openmpi @@ -150,7 +133,8 @@ done # DOWNLOAD and INSTALL PETSc (example PETSc-3.17.0) #PETSCVERSION=3.17.0 #PETSCVERSION=3.18.4 -PETSCVERSION=3.19.3 +# PETSCVERSION=3.19.6 +PETSCVERSION=3.20.4 # Activate DEBUGGING MODE with ON/OFF DEBUG=OFF @@ -264,13 +248,13 @@ if [ ! -e "${MODULEFILE}" ]; then # Download tar.gz file if [ ! -f ${TARFILE} ]; then - wget --output-document=${TARFILE} "https://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-${PETSCVERSION}.tar.gz" + wget --output-document=${TARFILE} "https://web.cels.anl.gov/projects/petsc/download/release-snapshots/petsc-${PETSCVERSION}.tar.gz" fi # Check if tar.gz file was correctly downloaded if [ ! -f ${TARFILE} ]; then echo -e "$RED""no source-file downloaded for petsc-${PETSCVERSION}$NC" - echo -e "$RED""check https://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-${PETSCVERSION}.tar.gz$NC" + echo -e "$RED""check https://web.cels.anl.gov/projects/petsc/download/release-snapshots/petsc-${PETSCVERSION}.tar.gz$NC" exit fi diff --git a/tools/Setup_ModuleEnv/README.md b/tools/Setup_ModuleEnv/README.md index a97c0449d..e5b9648e7 100644 --- a/tools/Setup_ModuleEnv/README.md +++ b/tools/Setup_ModuleEnv/README.md @@ -17,56 +17,56 @@ This cleans the created module file and build directory of the version currently ## 1. Install the basic packages depending on the OS (Ubuntu is assumed here) - sudo ./InstallPackagesUbuntu16.sh - sudo ./InstallPackagesUbuntu20.sh - sudo ./InstallPackagesUbuntu21.sh - sudo ./InstallPackagesUbuntu22.sh - and if you have a server that has been setup with only basic packages, the following might be required + sudo ./InstallPackagesUbuntu16.sh + sudo ./InstallPackagesUbuntu20.sh + sudo ./InstallPackagesUbuntu21.sh + sudo ./InstallPackagesUbuntu22.sh - sudo ./InstallPackagesServer.sh +and if you have a server that has been setup with only basic packages, the following might be required -## 2. Module Environment from [https://sourceforge.net/projects/modules/files/](https://sourceforge.net/projects/modules/files/) + sudo ./InstallPackagesServer.sh - sudo ./InstallModules.sh +## 2. Module Environment from [https://github.com/cea-hpc/modules](https://github.com/cea-hpc/modules) + sudo ./InstallModules.sh - reboot and maybe second time `./InstallModules.sh` is needed if `module list` does not work and returns `command not found: module`. +Make sure to check for the newest version and change the version number within the script. Reboot and maybe second time `./InstallModules.sh` is needed if `module list` does not work and returns `command not found: module`. ## 3. CMake from [https://github.com/Kitware/CMake/releases/](https://github.com/Kitware/CMake/releases/) - When installing the module env on a new OS (e.g. Ubuntu 22 in combination with gcc 11.2, then it is advised to install gcc first and load the desired gcc version during the installtion of CMake to prevent GLIBCXX_3.4.XX version problems). If an older version of Ubuntu is used in combination with a new gcc version, then continue to install CMake first +When installing the module env on a new OS (e.g. Ubuntu 22 in combination with gcc 11.2, then it is advised to install gcc first and load the desired gcc version during the installation of CMake to prevent GLIBCXX_3.4.XX version problems). If an older version of Ubuntu is used in combination with a new gcc version, then continue to install CMake first - sudo ./InstallCMake.sh + sudo ./InstallCMake.sh ## 4. GCC Compiler from [ftp://ftp.fu-berlin.de/unix/languages/gcc/releases](ftp://ftp.fu-berlin.de/unix/languages/gcc/releases) - sudo ./InstallGCC.sh + sudo ./InstallGCC.sh ## 5. Open MPI from [https://www.open-mpi.org/software/ompi/v4.1/](https://www.open-mpi.org/software/ompi/v4.1/) - sudo ./InstallMPIallCOMPILERS.sh + sudo ./InstallMPIallCOMPILERS.sh ## 6. HDF5 from [https://support.hdfgroup.org/ftp/HDF5/releases/](https://support.hdfgroup.org/ftp/HDF5/releases/) - sudo ./InstallHDF5.sh + sudo ./InstallHDF5.sh ## 7. ParaView from [https://www.paraview.org/download/](https://www.paraview.org/download/) The installation of ParaView is not mandatory for piclas/hopr. The pre-requisites for Ubuntu are installed via - sudo ./InstallPackagesParaView.sh + sudo ./InstallPackagesParaView.sh and Paraview itself is installed via - sudo ./InstallParaview.sh + sudo ./InstallParaview.sh ## 8. HOPR from [https://github.com/hopr-framework/hopr](https://github.com/hopr-framework/hopr) This installation is optional and creates a module for HOPR by running - sudo ./InstallHOPR.sh + sudo ./InstallHOPR.sh and requires GCC, MPI and HDF5. ## 9. PETSc from [https://ftp.mcs.anl.gov/pub/petsc/release-snapshots/](https://ftp.mcs.anl.gov/pub/petsc/release-snapshots/) This installation is optional and creates a module for PETSc by running - sudo ./InstallPETSc.sh + sudo ./InstallPETSc.sh and requires GCC and MPI. From 552a6d4cd94d55858a4680150fe06c9953fb31d9 Mon Sep 17 00:00:00 2001 From: Patrick Kopper Date: Tue, 5 Mar 2024 12:39:52 +0200 Subject: [PATCH 189/222] Update CMake to be compatible with LUMI --- CMakeLists.txt | 6 +- CMakeListsLib.txt | 7 ++ CMakeListsMachine.txt | 149 ++++++++++++++++++++++-------------- src/CMakeLists.txt | 12 +-- src/readintools/options.f90 | 16 +++- 5 files changed, 120 insertions(+), 70 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 795a8f866..8703e3e17 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,11 +66,11 @@ OPTION(PICLAS_PERFORMANCE "Enable performance optimizations (e.g. PGO for GNU)" # Check gold support # ========================================================================= EXECUTE_PROCESS(COMMAND ld.gold --version COMMAND grep "^GNU gold" COMMAND sed "s/^.* //g" OUTPUT_VARIABLE GNU_GOLD_VERSION) +# Shift responsibility of driving the final stages of compilation from collect2 to gold via the linker plugin +# More information at: https://gcc.gnu.org/wiki/LinkTimeOptimization IF (DEFINED GNU_GOLD_VERSION AND NOT "${GNU_GOLD_VERSION}" STREQUAL "") STRING(STRIP "${GNU_GOLD_VERSION}" GNU_GOLD_VERSION) - MESSAGE(STATUS "Setting linker to [gold] (v${GNU_GOLD_VERSION})") - # Shift responsibility of driving the final stages of compilation from collect2 to gold via the linker plugin - # More information at: https://gcc.gnu.org/wiki/LinkTimeOptimization + MESSAGE(STATUS "Linking with [gold] (v${GNU_GOLD_VERSION})") IF(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13) ADD_LINK_OPTIONS("-fuse-ld=gold") # Make it abundantly clear we want to use gold diff --git a/CMakeListsLib.txt b/CMakeListsLib.txt index cae9ae80d..9bd026e36 100644 --- a/CMakeListsLib.txt +++ b/CMakeListsLib.txt @@ -100,6 +100,13 @@ IF(LIBS_USE_MPI) MESSAGE(STATUS "Compiling with [${LIBS_MPI_NAME}] (v${MPI_C_LIBRARY_VERSION})") ADD_DEFINITIONS(-DUSE_MPI=1) + + # LUMI needs even more help here + IF("${CMAKE_FQDN_HOST}" MATCHES ".can") + SET(MPI_C_COMPILER cc) + SET(MPI_CXX_COMPILER CC) + SET(MPI_Fortran_COMPILER ftn) + ENDIF() ELSE() ADD_DEFINITIONS(-DUSE_MPI=0) ENDIF() diff --git a/CMakeListsMachine.txt b/CMakeListsMachine.txt index 3c54c071f..3cde23882 100644 --- a/CMakeListsMachine.txt +++ b/CMakeListsMachine.txt @@ -29,9 +29,20 @@ ENDIF() # ========================================================================= # HLRS HAWK / SuperMUC IF ("${CMAKE_HOSTNAME}" MATCHES "login") - SET(CMAKE_C_COMPILER mpicc) - SET(CMAKE_CXX_COMPILER mpicxx) - SET(CMAKE_Fortran_COMPILER mpif90) # mpif08 wrapper seems to have issue + # HAWK and SuperMUC name their login nodes identically, so use the Fully Qualified Domain Name (FQDN) to identify + CMAKE_HOST_SYSTEM_INFORMATION(RESULT FQDN QUERY FQDN) + MARK_AS_ADVANCED(FORCE FQDN) + + IF (FQDN MATCHES "hawk.hww.hlrs.de") + SET(CMAKE_C_COMPILER mpicc) + SET(CMAKE_CXX_COMPILER mpicxx) + SET(CMAKE_Fortran_COMPILER mpif90) # mpif08 wrapper seems to have issue + ENDIF() +# LUMI +ELSEIF("${CMAKE_FQDN_HOST}" MATCHES ".can") + SET(CMAKE_C_COMPILER cc) + SET(CMAKE_CXX_COMPILER CC) + SET(CMAKE_Fortran_COMPILER ftn) # IAG Prandtl ELSEIF("${CMAKE_HOSTNAME}" MATCHES "^prandtl") SET(CMAKE_C_COMPILER gcc) @@ -122,50 +133,64 @@ IF("${PICLAS_INSTRUCTION}" STREQUAL "") SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qopt-zmm-usage=high") ENDIF() ENDIF() - # Set LUSTRE definition to account for filesystem and MPI implementation - ADD_DEFINITIONS(-DLUSTRE) + # Set LUSTRE definition to account for filesystem and MPI implementation + ADD_DEFINITIONS(-DLUSTRE) - # IAG Prandtl - ELSEIF("${CMAKE_HOSTNAME}" MATCHES "^prandtl") - MESSAGE(STATUS "Compiling on Prandtl") - MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH) +# LUMI +ELSEIF("${CMAKE_FQDN_HOST}" MATCHES ".can") + MESSAGE(STATUS "Compiling on LUMI") + IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU") + SET(FLEXI_INSTRUCTION "-march=znver3") + ELSE() + MESSAGE(FATAL_ERROR "LUMI currently only supported using the GNU Compiler Collection (GCC). Please load/swap the following modules: LUMI PrgEnv-gnu cray-hdf5-parallel") + ENDIF() + +# IAG Prandtl +ELSEIF("${CMAKE_HOSTNAME}" MATCHES "^prandtl") + MESSAGE(STATUS "Compiling on Prandtl") + MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH) SET(PICLAS_INSTRUCTION "-march=native") - # Set LUSTRE definition to account for filesystem - ADD_DEFINITIONS(-DLUSTRE) + # Set LUSTRE definition to account for filesystem + ADD_DEFINITIONS(-DLUSTRE) - # IAG Grafik01/Grafik02 - ELSEIF ("${CMAKE_HOSTNAME}" MATCHES "^grafik0") - MESSAGE(STATUS "Compiling on ${CMAKE_HOSTNAME}") - MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH) +# IAG Grafik01/Grafik02 +ELSEIF ("${CMAKE_HOSTNAME}" MATCHES "^grafik0") + MESSAGE(STATUS "Compiling on ${CMAKE_HOSTNAME}") + MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH) SET(PICLAS_INSTRUCTION "-march=native") - ELSEIF ("${CMAKE_HOSTNAME}" MATCHES "^ilahead1") - MESSAGE(STATUS "Compiling on ILA cluster") - MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH) - # Overwrite compiler target architecture - IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "Flang") +ELSEIF ("${CMAKE_HOSTNAME}" MATCHES "^ilahead1") + MESSAGE(STATUS "Compiling on ILA cluster") + MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH) + # Overwrite compiler target architecture + IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "Flang") SET(PICLAS_INSTRUCTION "-march=core-avx2") - ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") + ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") SET(PICLAS_INSTRUCTION "-xCORE-AVX2") - ENDIF() - # Work around MPI-IO issue 4446 on machines mounting storage via NFS - ADD_DEFINITIONS(-DNFS) + ENDIF() + # Work around MPI-IO issue 4446 on machines mounting storage via NFS + ADD_DEFINITIONS(-DNFS) - ELSEIF ("${CMAKE_HOSTNAME}" MATCHES "^xenon") - MESSAGE(STATUS "Compiling on ILA student cluster") - MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH) - SET(PICLAS_INSTRUCTION "-march=native") - # Work around MPI-IO issue 4446 on machines mountng storage via NFS - ADD_DEFINITIONS(-DNFS) +ELSEIF ("${CMAKE_HOSTNAME}" MATCHES "^xenon") + MESSAGE(STATUS "Compiling on ILA student cluster") + MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH) + SET(FLEXI_INSTRUCTION "-march=native") + # Work around MPI-IO issue 4446 on machines mountng storage via NFS + ADD_DEFINITIONS(-DNFS) - ELSE() - MESSAGE(STATUS "Compiling on a generic machine") - # Set compiler target architecture - IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "Flang" ) - SET(PICLAS_INSTRUCTION "-march=native") - #SET(PICLAS_INSTRUCTION "-mtune=generic") - ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") - SET(PICLAS_INSTRUCTION "-xHost") +ELSEIF ("${CMAKE_FQDN_HOST}" MATCHES "gitlab.ila.uni-stuttgart.de") + MESSAGE(STATUS "Compiling on ILA Gitlab") + ADD_DEFINITIONS(-DVDM_ANALYTICAL) + SET(PICLAS_INSTRUCTION "-march=native") + +ELSE() + MESSAGE(STATUS "Compiling on a generic machine") + # Set compiler target architecture + IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "Flang" OR CMAKE_Fortran_COMPILER_ID MATCHES "Cray") + SET(PICLAS_INSTRUCTION "-march=native") + # SET(PICLAS_INSTRUCTION "-mtune=generic") + ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") + SET(PICLAS_INSTRUCTION "-xHost") ENDIF() ENDIF() ENDIF() @@ -233,6 +258,9 @@ ENDIF() # FFLAGS depend on the compiler GET_FILENAME_COMPONENT (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME) +# CMake can always request position independent code +SET(CMAKE_POSITION_INDEPENDENT_CODE ON) + # GNU Compiler Collection (GCC) IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU") # set Flags (disable lto type warnings due to false positives with MATMUL, which is a known bug) @@ -242,18 +270,22 @@ IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU") IF(PICLAS_EXTRAE) SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -finstrument-functions") ENDIF(PICLAS_EXTRAE) + # LUMI has an issue with argument types in MPI(CH) calls + SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch") ENDIF() + # initialize all variables as signalling NaNs to force the user to correctly initialize these data types SET (CMAKE_Fortran_FLAGS_NITRO "${CMAKE_Fortran_FLAGS} -Ofast ${PICLAS_INSTRUCTION}") - SET (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS} -O3 ${PICLAS_INSTRUCTION} -fstack-arrays") - SET (CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS} -pg -O3 ${PICLAS_INSTRUCTION} -fstack-arrays") - SET (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS} -g -Og -ggdb3 -ffpe-trap=invalid -fbounds-check -fbacktrace -Wall") - SET (CMAKE_Fortran_FLAGS_SANITIZE "${CMAKE_Fortran_FLAGS} -g -Og -ggdb3 -ffpe-trap=invalid,zero,overflow,denorm -fbounds-check -fbacktrace -Wall -fsanitize=address,undefined,leak -fno-omit-frame-pointer -Wc-binding-type -Wuninitialized -pedantic") + SET (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS} -O3 ${PICLAS_INSTRUCTION} -finline-functions -fstack-arrays") + SET (CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS} -pg -O3 ${PICLAS_INSTRUCTION} -finline-functions -fstack-arrays") + SET (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS} -g -Og -ggdb3 -ffpe-trap=invalid -fbounds-check -fbacktrace -Wall") + SET (CMAKE_Fortran_FLAGS_SANITIZE "${CMAKE_Fortran_FLAGS} -g -Og -ggdb3 -ffpe-trap=invalid,zero,overflow,denorm -fbounds-check -fbacktrace -Wall -fsanitize=address,undefined,leak -fno-omit-frame-pointer -Wc-binding-type -Wuninitialized -pedantic") # Compile flags depend on the generator IF(NOT "${CMAKE_GENERATOR}" MATCHES "Ninja") - # add flags only for compiling not linking! - SET (PICLAS_COMPILE_FLAGS "-xf95-cpp-input -fPIC") + # add flags only for compiling not linking! + SET (PICLAS_COMPILE_FLAGS "-xf95-cpp-input") ELSE() - SET (PICLAS_COMPILE_FLAGS "${NINJA_COLOR_DIAGNOSTICS} -fPIC") + # Trailing white space required in case variable is unset! + SET (PICLAS_COMPILE_FLAGS "${NINJA_COLOR_DIAGNOSTICS} ") ENDIF() # AMD Optimized LLVM/CLANG @@ -265,13 +297,14 @@ ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Flang") ENDIF() SET (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS} -O3 ${PICLAS_INSTRUCTION} -finline-functions ") SET (CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS} -pg -O3 ${PICLAS_INSTRUCTION} -finline-functions ") - SET (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS} -g -O0 -ggdb3 -ffpe-trap=invalid -fbounds-check -finit-real=snan -fbacktrace -Wall") + SET (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS} -g -O0 -ggdb3 -ffpe-trap=invalid -fbounds-check -finit-real=snan -fbacktrace -Wall") # Compile flags depend on the generator IF(NOT "${CMAKE_GENERATOR}" MATCHES "Ninja") - # add flags only for compiling not linking! - SET (PICLAS_COMPILE_FLAGS "-xf95-cpp-input -fPIC") + # add flags only for compiling not linking! + SET (PICLAS_COMPILE_FLAGS "-xf95-cpp-input") ELSE() - SET (PICLAS_COMPILE_FLAGS "${NINJA_COLOR_DIAGNOSTICS} -fPIC") + # Trailing white space required in case variable is unset! + SET (PICLAS_COMPILE_FLAGS "${NINJA_COLOR_DIAGNOSTICS} ") ENDIF() # Intel Compiler @@ -297,11 +330,11 @@ ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Cray") # set Flags IF (NOT DEFINED C_FLAGS_INITIALIZED ) SET (C_FLAGS_INITIALIZED "yes" CACHE INTERNAL "Flag if compiler flags are already initialized" ) - SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -f free -s real64 -em -lstdc++ -DCRAY") + SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ffree -s real64 -s integer64 -em -lstdc++ -hfp0 -DCRAY") ENDIF() - SET (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS} -O2 -hfp3 -p . -rm") - SET (CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS} -O2 -hfp3 -h profile_generate -p . -rm") - SET (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS} -O0 -eD -rm") + SET (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS} -O2 -hfp3 -p . -rm") + SET (CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS} -O2 -hfp3 -h profile_generate -p . -rm") + SET (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS} -g -O0 -eD -rm") # add flags only for compiling not linking! SET (PICLAS_COMPILE_FLAGS "${NINJA_COLOR_DIAGNOSTICS} -F") ELSE() @@ -328,8 +361,8 @@ MARK_AS_ADVANCED(FORCE CMAKE_Fortran_FLAGS_RELEASE) MARK_AS_ADVANCED(FORCE CMAKE_Fortran_FLAGS_PROFILE) MARK_AS_ADVANCED(FORCE CMAKE_Fortran_FLAGS_DEBUG) MARK_AS_ADVANCED(FORCE CMAKE_Fortran_FLAGS_SANITIZE) -SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}" CACHE STRING "Default compiler flags" FORCE) -SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE}" CACHE STRING "Release compiler flags" FORCE) -SET(CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE}" CACHE STRING "Profile compiler flags" FORCE) -SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG}" CACHE STRING "Debug compiler flags" FORCE) -SET(CMAKE_Fortran_FLAGS_SANITIZE "${CMAKE_Fortran_FLAGS_SANITIZE}" CACHE STRING "Sanitize compiler flags" FORCE) \ No newline at end of file +SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}" CACHE STRING "Default compiler flags" FORCE) +SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE}" CACHE STRING "Release compiler flags" FORCE) +SET(CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE}" CACHE STRING "Profile compiler flags" FORCE) +SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG}" CACHE STRING "Debug compiler flags" FORCE) +SET(CMAKE_Fortran_FLAGS_SANITIZE "${CMAKE_Fortran_FLAGS_SANITIZE}" CACHE STRING "Sanitize compiler flags" FORCE) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8c5a8b5d8..f1e9ddeff 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -540,24 +540,24 @@ ENDIF() # define libs ADD_LIBRARY( libpiclasstaticF90 OBJECT ${piclasF90} ) SET_TARGET_PROPERTIES(libpiclasstaticF90 PROPERTIES COMPILE_FLAGS ${PICLAS_COMPILE_FLAGS}) -ADD_LIBRARY( libpiclasstatic STATIC $) -SET_TARGET_PROPERTIES(libpiclasstatic PROPERTIES PREFIX "" - OUTPUT_NAME "libpiclasf90") +ADD_LIBRARY( libpiclasstatic STATIC $) +SET_TARGET_PROPERTIES(libpiclasstatic PROPERTIES PREFIX "" + OUTPUT_NAME "libpiclasf90") IF(SELFBUILTEXTERNALS) ADD_DEPENDENCIES(libpiclasstaticF90 ${SELFBUILTEXTERNALS}) ENDIF() ADD_LIBRARY(userblocklib STATIC ./src/output/read_userblock.c) SET_TARGET_PROPERTIES(userblocklib PROPERTIES LANGUAGE C LINKER_LANGUAGE C - COMPILE_FLAGS "-fPIC") + CMAKE_POSITION_INDEPENDENT_CODE ON) ADD_LIBRARY(stacksizelib STATIC ./src/globals/stacksize.c) SET_TARGET_PROPERTIES(stacksizelib PROPERTIES LANGUAGE C LINKER_LANGUAGE C - COMPILE_FLAGS "-fPIC") + CMAKE_POSITION_INDEPENDENT_CODE ON) ADD_LIBRARY(memusagelib STATIC ./src/globals/processmemusage.cxx) SET_TARGET_PROPERTIES(memusagelib PROPERTIES LANGUAGE CXX LINKER_LANGUAGE CXX - COMPILE_FLAGS "-fPIC") + CMAKE_POSITION_INDEPENDENT_CODE ON) # we link the statically built libs ADD_LIB_SHARED(libpiclasshared ./src/piclaslib.f90) diff --git a/src/readintools/options.f90 b/src/readintools/options.f90 index e4425d009..bd3de0839 100644 --- a/src/readintools/options.f90 +++ b/src/readintools/options.f90 @@ -158,6 +158,7 @@ FUNCTION NAMEEQUALS(this, name) NAMEEQUALS = STRICMP(this%name, name) END FUNCTION NAMEEQUALS + !================================================================================================================================== !> Compares name, that contains numbers, with the name of the numberedmulti option, that contains "[$]" (case-insensitive) !================================================================================================================================== @@ -243,6 +244,7 @@ FUNCTION GETNAMELEN(this) GETNAMELEN = LEN_TRIM(this%name) END FUNCTION GETNAMELEN + !================================================================================================================================== !> return string-length required to print the value !================================================================================================================================== @@ -307,8 +309,10 @@ FUNCTION GETVALUELEN(this) STOP 'Unknown TYPE' END SELECT END IF + END FUNCTION GETVALUELEN + !=================================================================================================================================== !> Returns length of a real represented as string with a given number of digits !=================================================================================================================================== @@ -335,14 +339,16 @@ FUNCTION GETSTRLENREAL(value,digits) WRITE(tmp,'(E24.19)') value END IF GETSTRLENREAL = LEN(TRIM(ADJUSTL(tmp))) + END FUNCTION GETSTRLENREAL + !================================================================================================================================== !> print option !================================================================================================================================== SUBROUTINE print(this, maxNameLen, maxValueLen, mode) ! MODULES -USE MOD_StringTools +USE MOD_StringTools ,ONLY: set_formatting,clear_formatting USE MOD_ISO_VARYING_STRING #if USE_LOADBALANCE USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance @@ -367,7 +373,7 @@ SUBROUTINE print(this, maxNameLen, maxValueLen, mode) #endif /*USE_LOADBALANCE*/ IF(mode.EQ.1) commentLen=80 !--help IF(mode.EQ.2) commentLen=50 !--markdown -WRITE(fmtName,*) maxNameLen +WRITE(fmtName ,*) maxNameLen WRITE(fmtValue,*) maxValueLen ! print name IF (mode.EQ.0) THEN @@ -397,7 +403,6 @@ SUBROUTINE print(this, maxNameLen, maxValueLen, mode) SWRITE(UNIT_StdOut, "(A"//fmtValue//")", ADVANCE='NO') "" END IF - ! print DEFAULT/CUSTOM or print comment IF (mode.EQ.0) THEN ! print DEFAULT/CUSTOM @@ -458,8 +463,10 @@ SUBROUTINE print(this, maxNameLen, maxValueLen, mode) SWRITE(UNIT_StdOut,*) '' END IF END IF + END SUBROUTINE print + !================================================================================================================================== !> print value of an option !================================================================================================================================== @@ -585,8 +592,10 @@ SUBROUTINE printValue(this,maxValueLen) CLASS DEFAULT STOP END SELECT + END SUBROUTINE printValue + !================================================================================================================================== !> parse value from string 'rest_in'. This subroutine is used to readin values from the parameter file. !================================================================================================================================== @@ -752,6 +761,7 @@ SUBROUTINE parse(this, rest_in) END SUBROUTINE parse + !=================================================================================================================================== !> parse string to real and get the format of the number (floating,scientific) !=================================================================================================================================== From 46699d776f8027da0f8986b8d3201c942bb5d4c7 Mon Sep 17 00:00:00 2001 From: Patrick Kopper Date: Tue, 5 Mar 2024 14:21:37 +0200 Subject: [PATCH 190/222] Always use FQDN in CMake --- CMakeListsLib.txt | 13 ++--- CMakeListsMachine.txt | 118 ++++++++++++++++-------------------------- 2 files changed, 48 insertions(+), 83 deletions(-) diff --git a/CMakeListsLib.txt b/CMakeListsLib.txt index 9bd026e36..c766f74d5 100644 --- a/CMakeListsLib.txt +++ b/CMakeListsLib.txt @@ -369,16 +369,9 @@ IF(NOT LIBS_BUILD_MATH_LIB) ENDIF() # VDM inverse, replace lapack with analytical solution - # HLRS HAWK / SuperMUC + DEBUG - IF (CMAKE_BUILD_TYPE MATCHES "Debug" AND "${CMAKE_HOSTNAME}" MATCHES "login") - # HAWK and SuperMUC name their login nodes identically, so use the Fully Qualified Domain Name (FQDN) to identify - CMAKE_HOST_SYSTEM_INFORMATION(RESULT FQDN QUERY FQDN) - MARK_AS_ADVANCED(FORCE FQDN) - # HLRS HAWK - IF ("${FQDN}" MATCHES "hawk.hww.hlrs.de") - MESSAGE(STATUS "Compiling PICLas in debug mode on Hawk with system math lib. Setting VDM inverse to analytical solution") - ADD_DEFINITIONS(-DVDM_ANALYTICAL) - ENDIF() + IF (CMAKE_BUILD_TYPE MATCHES "Debug" AND "${CMAKE_HOSTNAME}" MATCHES "login" AND CMAKE_FQDN_HOST MATCHES "hawk.hww.hlrs.de") + MESSAGE(STATUS "Compiling PICLas in debug mode on Hawk with system math lib. Setting VDM inverse to analytical solution") + ADD_DEFINITIONS(-DVDM_ANALYTICAL) ENDIF() # Build LAPACK/OpenBLAS in FLEXI diff --git a/CMakeListsMachine.txt b/CMakeListsMachine.txt index 3cde23882..73d0c1575 100644 --- a/CMakeListsMachine.txt +++ b/CMakeListsMachine.txt @@ -27,37 +27,29 @@ ENDIF() # CMAKE_Fortran_COMPILER_ID that is used below # > This block must be called before ENABLE_LANGUAGE # ========================================================================= -# HLRS HAWK / SuperMUC -IF ("${CMAKE_HOSTNAME}" MATCHES "login") - # HAWK and SuperMUC name their login nodes identically, so use the Fully Qualified Domain Name (FQDN) to identify - CMAKE_HOST_SYSTEM_INFORMATION(RESULT FQDN QUERY FQDN) - MARK_AS_ADVANCED(FORCE FQDN) - - IF (FQDN MATCHES "hawk.hww.hlrs.de") - SET(CMAKE_C_COMPILER mpicc) - SET(CMAKE_CXX_COMPILER mpicxx) - SET(CMAKE_Fortran_COMPILER mpif90) # mpif08 wrapper seems to have issue - ENDIF() +# HLRS HAWK +IF (CMAKE_FQDN_HOST MATCHES "hawk\.hww\.hlrs\.de$") + SET(CMAKE_C_COMPILER mpicc) + SET(CMAKE_CXX_COMPILER mpicxx) + SET(CMAKE_Fortran_COMPILER mpif90) # mpif08 wrapper seems to have issue +# SuperMUC +# ELSEIF(CMAKE_FQDN_HOST MATCHES "sng\.lrz\.de$" # LUMI -ELSEIF("${CMAKE_FQDN_HOST}" MATCHES ".can") +ELSEIF(CMAKE_FQDN_HOST MATCHES "\.can$") SET(CMAKE_C_COMPILER cc) SET(CMAKE_CXX_COMPILER CC) SET(CMAKE_Fortran_COMPILER ftn) # IAG Prandtl -ELSEIF("${CMAKE_HOSTNAME}" MATCHES "^prandtl") +ELSEIF(CMAKE_FQDN_HOST MATCHES "^(prandtl|grafik.*)\.iag\.uni\-stuttgart\.de") SET(CMAKE_C_COMPILER gcc) SET(CMAKE_CXX_COMPILER c++) SET(CMAKE_Fortran_COMPILER gfortran) # IAG Grafik01/Grafik02 -ELSEIF ("${CMAKE_HOSTNAME}" MATCHES "^grafik0") - SET(CMAKE_C_COMPILER gcc) - SET(CMAKE_CXX_COMPILER c++) - SET(CMAKE_Fortran_COMPILER gfortran) -ELSEIF ("${CMAKE_HOSTNAME}" MATCHES "^ilahead1") +ELSEIF (CMAKE_FQDN_HOST MATCHES "^ila(head.*|cfd.*)\.ila.uni\-stuttgart\.de") SET(CMAKE_C_COMPILER mpicc) SET(CMAKE_CXX_COMPILER mpicxx) SET(CMAKE_Fortran_COMPILER mpif90) # mpif08 wrapper seems to have issue -ELSEIF ("${CMAKE_HOSTNAME}" MATCHES "^xenon") +ELSEIF (CMAKE_FQDN_HOST MATCHES "^(xenon.*|argon.*)\.ila.uni\-stuttgart\.de") SET(CMAKE_C_COMPILER mpicc) SET(CMAKE_CXX_COMPILER mpicxx) SET(CMAKE_Fortran_COMPILER mpif90) # mpif08 wrapper seems to have issue @@ -93,51 +85,41 @@ ENDIF() # ========================================================================= ENABLE_LANGUAGE(Fortran C CXX) INCLUDE(GNUInstallDirs) +MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH) # ========================================================================= # Set machine-specific definitions and settings # ========================================================================= -# Revert to default via -DPICLAS_INSTRUCTION= once this value has been changed via, e.g., -DPICLAS_INSTRUCTION=-mtune=generic -IF(NOT DEFINED PICLAS_INSTRUCTION) - SET(PICLAS_INSTRUCTION "") -ENDIF() - -# HLRS HAWK / SuperMUC -IF("${PICLAS_INSTRUCTION}" STREQUAL "") - IF ("${CMAKE_HOSTNAME}" MATCHES "login") - MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH) +# HLRS HAWK +IF (CMAKE_FQDN_HOST MATCHES "hawk\.hww\.hlrs\.de$") + MESSAGE(STATUS "Compiling on Hawk") + # Overwrite compiler target architecture + IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "Flang") + SET(PICLAS_INSTRUCTION "-march=znver2") + ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") + SET(PICLAS_INSTRUCTION "-xCORE-AVX2") + ENDIF() + # Use AMD Optimized Lapack/BLAS + # SET(BLA_VENDOR "FLAME") + # Set LUSTRE definition to account for filesystem and MPI implementation + ADD_DEFINITIONS(-DLUSTRE) - # HAWK and SuperMUC name their login nodes identically, so use the Fully Qualified Domain Name (FQDN) to identify - CMAKE_HOST_SYSTEM_INFORMATION(RESULT FQDN QUERY FQDN) - MARK_AS_ADVANCED(FORCE FQDN) - # HLRS HAWK - IF (FQDN MATCHES "hawk.hww.hlrs.de") - MESSAGE(STATUS "Compiling on Hawk") - # Overwrite compiler target architecture - IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "Flang") - SET(PICLAS_INSTRUCTION "-march=znver2") - ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") - SET(PICLAS_INSTRUCTION "-xCORE-AVX2") - ENDIF() - # Use AMD Optimized Lapack/BLAS - # SET(BLA_VENDOR "FLAME") - # SuperMUC - ELSEIF (FQDN MATCHES "sng.lrz.de") - MESSAGE(STATUS "Compiling on SuperMUC") - # Overwrite compiler target architecture - IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "Flang") - SET(PICLAS_INSTRUCTION "-march=skylake-avx512") - ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") - SET(PICLAS_INSTRUCTION "-xSKYLAKE-AVX512") - # Explicitely enable usage of AVX512 registers - SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qopt-zmm-usage=high") - ENDIF() - ENDIF() +# SuperMUC +ELSEIF (CMAKE_FQDN_HOST MATCHES "sng\.lrz\.de$") + MESSAGE(STATUS "Compiling on SuperMUC") + # Overwrite compiler target architecture + IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "Flang") + SET(PICLAS_INSTRUCTION "-march=skylake-avx512") + ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") + SET(PICLAS_INSTRUCTION "-xSKYLAKE-AVX512") + # Explicitely enable usage of AVX512 registers + SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qopt-zmm-usage=high") + ENDIF() # Set LUSTRE definition to account for filesystem and MPI implementation ADD_DEFINITIONS(-DLUSTRE) # LUMI -ELSEIF("${CMAKE_FQDN_HOST}" MATCHES ".can") +ELSEIF(CMAKE_FQDN_HOST MATCHES "\.can$") MESSAGE(STATUS "Compiling on LUMI") IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU") SET(FLEXI_INSTRUCTION "-march=znver3") @@ -146,22 +128,14 @@ ELSEIF("${CMAKE_FQDN_HOST}" MATCHES ".can") ENDIF() # IAG Prandtl -ELSEIF("${CMAKE_HOSTNAME}" MATCHES "^prandtl") - MESSAGE(STATUS "Compiling on Prandtl") - MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH) - SET(PICLAS_INSTRUCTION "-march=native") +ELSEIF(CMAKE_FQDN_HOST MATCHES "^(prandtl|grafik.*)\.iag\.uni\-stuttgart\.de") + MESSAGE(STATUS "Compiling on ${CMAKE_HOSTNAME}") + SET(PICLAS_INSTRUCTION "-march=native") # Set LUSTRE definition to account for filesystem ADD_DEFINITIONS(-DLUSTRE) -# IAG Grafik01/Grafik02 -ELSEIF ("${CMAKE_HOSTNAME}" MATCHES "^grafik0") - MESSAGE(STATUS "Compiling on ${CMAKE_HOSTNAME}") - MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH) - SET(PICLAS_INSTRUCTION "-march=native") - -ELSEIF ("${CMAKE_HOSTNAME}" MATCHES "^ilahead1") +ELSEIF (CMAKE_FQDN_HOST MATCHES "^ila(head.*|cfd.*)\.ila.uni\-stuttgart\.de") MESSAGE(STATUS "Compiling on ILA cluster") - MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH) # Overwrite compiler target architecture IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "Flang") SET(PICLAS_INSTRUCTION "-march=core-avx2") @@ -171,27 +145,25 @@ ELSEIF ("${CMAKE_HOSTNAME}" MATCHES "^ilahead1") # Work around MPI-IO issue 4446 on machines mounting storage via NFS ADD_DEFINITIONS(-DNFS) -ELSEIF ("${CMAKE_HOSTNAME}" MATCHES "^xenon") +ELSEIF (CMAKE_FQDN_HOST MATCHES "^(xenon.*|argon.*)\.ila.uni\-stuttgart\.de") MESSAGE(STATUS "Compiling on ILA student cluster") - MARK_AS_ADVANCED(FORCE C_PATH CXX_PATH Fortran_PATH) SET(FLEXI_INSTRUCTION "-march=native") # Work around MPI-IO issue 4446 on machines mountng storage via NFS ADD_DEFINITIONS(-DNFS) -ELSEIF ("${CMAKE_FQDN_HOST}" MATCHES "gitlab.ila.uni-stuttgart.de") +ELSEIF ("${CMAKE_FQDN_HOST}" MATCHES "gitlab\.ila\.uni\-stuttgart\.de") MESSAGE(STATUS "Compiling on ILA Gitlab") ADD_DEFINITIONS(-DVDM_ANALYTICAL) SET(PICLAS_INSTRUCTION "-march=native") ELSE() - MESSAGE(STATUS "Compiling on a generic machine") + MESSAGE(STATUS "Compiling on a generic machine [${CMAKE_HOSTNAME}]") # Set compiler target architecture IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "Flang" OR CMAKE_Fortran_COMPILER_ID MATCHES "Cray") SET(PICLAS_INSTRUCTION "-march=native") # SET(PICLAS_INSTRUCTION "-mtune=generic") ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") SET(PICLAS_INSTRUCTION "-xHost") - ENDIF() ENDIF() ENDIF() @@ -351,7 +323,7 @@ IF (USE_PGO) SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -fprofile-use") SET(CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE} -fprofile-generate") ELSE() - MESSAGE( SEND_ERROR "Profile-guided optimization (PGO) currently only supported for GNU compiler. Either set USE_PGO=OFF or use the GNU compiler." ) + MESSAGE(SEND_ERROR "Profile-guided optimization (PGO) currently only supported for GNU compiler. Either set USE_PGO=OFF or use the GNU compiler." ) ENDIF() ENDIF() From e53c556bc174b3601bd2e6b372f0bc4dca67debf Mon Sep 17 00:00:00 2001 From: Patrick Kopper Date: Tue, 5 Mar 2024 13:29:15 +0100 Subject: [PATCH 191/222] Merge fixes/optimizations from particle.dev --- CMakeLists.txt | 93 +++++++++++++++++++++++++++++++------------ CMakeListsLib.txt | 2 +- CMakeListsMachine.txt | 24 ++++++----- 3 files changed, 81 insertions(+), 38 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8703e3e17..e73e5b112 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,32 +63,72 @@ INCLUDE(CMakeDependentOption) OPTION(PICLAS_PERFORMANCE "Enable performance optimizations (e.g. PGO for GNU)" OFF) # ========================================================================= -# Check gold support -# ========================================================================= -EXECUTE_PROCESS(COMMAND ld.gold --version COMMAND grep "^GNU gold" COMMAND sed "s/^.* //g" OUTPUT_VARIABLE GNU_GOLD_VERSION) -# Shift responsibility of driving the final stages of compilation from collect2 to gold via the linker plugin -# More information at: https://gcc.gnu.org/wiki/LinkTimeOptimization -IF (DEFINED GNU_GOLD_VERSION AND NOT "${GNU_GOLD_VERSION}" STREQUAL "") - STRING(STRIP "${GNU_GOLD_VERSION}" GNU_GOLD_VERSION) - MESSAGE(STATUS "Linking with [gold] (v${GNU_GOLD_VERSION})") - IF(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13) - ADD_LINK_OPTIONS("-fuse-ld=gold") - # Make it abundantly clear we want to use gold - FIND_PROGRAM(CMAKE_GOLD_LINKER NAMES ${_CMAKE_TOOLCHAIN_PREFIX}ld.gold${_CMAKE_TOOLCHAIN_SUFFIX} HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) - SET (CMAKE_LINKER "${CMAKE_GOLD_LINKER}" CACHE FILEPATH "" FORCE) - MARK_AS_ADVANCED(FORCE CMAKE_GOLD_LINKER) +# Check lld / gold support +# ========================================================================= +# EXECUTE_PROCESS(COMMAND ld.lld --version COMMAND grep "^LLD" COMMAND grep -Eo "[0-9]+\.[0-9]+\.[0-9]+" OUTPUT_VARIABLE LLD_VERSION) +# # lld should be faster than gold +# IF (DEFINED LLD_VERSION AND NOT "${LLD_VERSION}" STREQUAL "") +# STRING(STRIP "${LLD_VERSION}" LLD_VERSION) +# MESSAGE(STATUS "Setting linker to [lld] (v${LLD_VERSION})") +# # Shift responsibility of driving the final stages of compilation from collect2 to gold via the linker plugin +# # More information at: https://gcc.gnu.org/wiki/LinkTimeOptimization +# IF(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13) +# ADD_LINK_OPTIONS("-fuse-ld=lld") +# # Make it abundantly clear we want to use lld +# FIND_PROGRAM(LLD_LINKER NAMES ${_CMAKE_TOOLCHAIN_PREFIX}ld.lld${_CMAKE_TOOLCHAIN_SUFFIX} HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) +# SET (CMAKE_LINKER "${LLD_LINKER}" CACHE FILEPATH "" FORCE) +# MARK_AS_ADVANCED(FORCE LLD_LINKER) +# ELSE() +# SET (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=lld") +# SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=lld") +# SET (CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} -fuse-ld=lld") +# SET (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fuse-ld=lld") +# # Make it abundantly clear we want to use lld +# FIND_PROGRAM(LLD_LINKER NAMES ${_CMAKE_TOOLCHAIN_PREFIX}ld.lld${_CMAKE_TOOLCHAIN_SUFFIX} HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) +# SET (CMAKE_LINKER "${LLD_LINKER}" CACHE FILEPATH "" FORCE) +# MARK_AS_ADVANCED(FORCE LLD_LINKER) +# ENDIF() +# # gold should be faster than GNU ld +# ELSE() + EXECUTE_PROCESS(COMMAND ld.gold --version COMMAND grep "^GNU gold" COMMAND sed "s/^.* //g" OUTPUT_VARIABLE GNU_GOLD_VERSION) + IF (DEFINED GNU_GOLD_VERSION AND NOT "${GNU_GOLD_VERSION}" STREQUAL "") + STRING(STRIP "${GNU_GOLD_VERSION}" GNU_GOLD_VERSION) + MESSAGE(STATUS "Linking with [gold] (v${GNU_GOLD_VERSION})") + # Shift responsibility of driving the final stages of compilation from collect2 to gold via the linker plugin + # More information at: https://gcc.gnu.org/wiki/LinkTimeOptimization + IF(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13) + ADD_LINK_OPTIONS("-fuse-ld=gold") + # Make it abundantly clear we want to use gold + FIND_PROGRAM(CMAKE_GOLD_LINKER NAMES ${_CMAKE_TOOLCHAIN_PREFIX}ld.gold${_CMAKE_TOOLCHAIN_SUFFIX} HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) + SET (CMAKE_LINKER "${CMAKE_GOLD_LINKER}" CACHE FILEPATH "" FORCE) + MARK_AS_ADVANCED(FORCE CMAKE_GOLD_LINKER) + ELSE() + SET (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") + SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=gold") + # This currently breaks ar (binutils archiver) + # SET (CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} -fuse-ld=gold") + SET (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fuse-ld=gold") + # Make it abundantly clear we want to use gold + FIND_PROGRAM(CMAKE_GOLD_LINKER NAMES ${_CMAKE_TOOLCHAIN_PREFIX}ld.gold${_CMAKE_TOOLCHAIN_SUFFIX} HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) + SET (CMAKE_LINKER "${CMAKE_GOLD_LINKER}" CACHE FILEPATH "" FORCE) + MARK_AS_ADVANCED(FORCE CMAKE_GOLD_LINKER) + ENDIF() +# Found neither lld nor gold, output GNU ld ELSE() - SET (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") - SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=gold") - # This currently breaks ar (binutils archiver) - # SET (CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} -fuse-ld=gold") - SET (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fuse-ld=gold") - # Make it abundantly clear we want to use gold - FIND_PROGRAM(CMAKE_GOLD_LINKER NAMES ${_CMAKE_TOOLCHAIN_PREFIX}ld.gold${_CMAKE_TOOLCHAIN_SUFFIX} HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) - SET (CMAKE_LINKER "${CMAKE_GOLD_LINKER}" CACHE FILEPATH "" FORCE) - MARK_AS_ADVANCED(FORCE CMAKE_GOLD_LINKER) + EXECUTE_PROCESS(COMMAND ld --version OUTPUT_VARIABLE GNU_LD_STRING) + # Check if we actually got GNU ld + IF (GNU_LD_STRING MATCHES "^GNU ld") + EXECUTE_PROCESS(COMMAND ld --version COMMAND grep "^GNU ld" COMMAND sed "s/^.* //g" OUTPUT_VARIABLE GNU_LD_VERSION) + STRING(STRIP "${GNU_LD_VERSION}" GNU_LD_VERSION) + MESSAGE(STATUS "Setting linker to [ld] (v${GNU_LD_VERSION})") + # ... or if we are running mold + ELSEIF (GNU_LD_STRING MATCHES "^mold") + EXECUTE_PROCESS(COMMAND ld --version COMMAND grep "^mold" COMMAND grep -Eo "[0-9]+\.[0-9]+\.[0-9]+ " OUTPUT_VARIABLE GNU_MOLD_VERSION) + STRING(STRIP "${GNU_MOLD_VERSION}" GNU_MOLD_VERSION) + MESSAGE(STATUS "Setting linker to [mold] (v${GNU_MOLD_VERSION})") + ENDIF() ENDIF() -ENDIF() +# ENDIF() # ========================================================================= # code development @@ -212,6 +252,7 @@ ELSE() ENDIF() ENDIF() ENDIF() +MESSAGE(STATUS "Compiling with [${BUILD_TYPE_LC}] build type") # ========================================================================= # Location of binary and filenames @@ -248,12 +289,12 @@ endfunction() # A function to get all user defined variables with a specified prefix SET(configuration ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/configuration.cmake) FILE(WRITE ${configuration} "") -GETLISTOFVARSSTARTINGWITH("PICLAS_" piclasVars) +GETLISTOFVARSSTARTINGWITH("PICLAS_" piclasVars1) GETLISTOFVARSSTARTINGWITH("HDF5_" piclasVars2) GETLISTOFVARSSTARTINGWITH("CMAKE_" piclasVars3) GETLISTOFVARSSTARTINGWITH("POSTI_" piclasVars4) GETLISTOFVARSSTARTINGWITH("LIBS_" piclasVars5) -FOREACH (_var IN LISTS piclasVars piclasVars2 piclasVars3 piclasVars4 piclasVars5) +FOREACH (_var IN LISTS piclasVars1 piclasVars2 piclasVars3 piclasVars4 piclasVars5) GET_PROPERTY(currentHelpString CACHE "${_var}" PROPERTY HELPSTRING) # Skip empty variables IF(NOT ${${_var}} STREQUAL "") diff --git a/CMakeListsLib.txt b/CMakeListsLib.txt index c766f74d5..462e1289d 100644 --- a/CMakeListsLib.txt +++ b/CMakeListsLib.txt @@ -369,7 +369,7 @@ IF(NOT LIBS_BUILD_MATH_LIB) ENDIF() # VDM inverse, replace lapack with analytical solution - IF (CMAKE_BUILD_TYPE MATCHES "Debug" AND "${CMAKE_HOSTNAME}" MATCHES "login" AND CMAKE_FQDN_HOST MATCHES "hawk.hww.hlrs.de") + IF (CMAKE_BUILD_TYPE MATCHES "Debug" AND CMAKE_FQDN_HOST MATCHES "hawk\.hww\.hlrs\.de$") MESSAGE(STATUS "Compiling PICLas in debug mode on Hawk with system math lib. Setting VDM inverse to analytical solution") ADD_DEFINITIONS(-DVDM_ANALYTICAL) ENDIF() diff --git a/CMakeListsMachine.txt b/CMakeListsMachine.txt index 73d0c1575..710067fde 100644 --- a/CMakeListsMachine.txt +++ b/CMakeListsMachine.txt @@ -10,7 +10,7 @@ SET(FORCE_VDM_ANALYTICAL OFF) # ========================================================================= # CMake generator settings # ========================================================================= -set(USED_CMAKE_GENERATOR "${CMAKE_GENERATOR}" CACHE STRING "Expose CMAKE_GENERATOR (cannot be changed here)" FORCE) +SET(USED_CMAKE_GENERATOR "${CMAKE_GENERATOR}" CACHE STRING "Expose CMAKE_GENERATOR (cannot be changed here)" FORCE) MESSAGE(STATUS "Using cmake generator: ${CMAKE_GENERATOR}") IF("${CMAKE_GENERATOR}" MATCHES "Ninja") # CMake introduced the CMAKE_COLOR_DIAGNOSTICS flag with 3.24.0, https://gitlab.kitware.com/cmake/cmake/-/merge_requests/6990 @@ -95,7 +95,7 @@ IF (CMAKE_FQDN_HOST MATCHES "hawk\.hww\.hlrs\.de$") MESSAGE(STATUS "Compiling on Hawk") # Overwrite compiler target architecture IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "Flang") - SET(PICLAS_INSTRUCTION "-march=znver2") + SET(PICLAS_INSTRUCTION "-march=znver2 -mtune=znver2") ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") SET(PICLAS_INSTRUCTION "-xCORE-AVX2") ENDIF() @@ -109,7 +109,7 @@ ELSEIF (CMAKE_FQDN_HOST MATCHES "sng\.lrz\.de$") MESSAGE(STATUS "Compiling on SuperMUC") # Overwrite compiler target architecture IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "Flang") - SET(PICLAS_INSTRUCTION "-march=skylake-avx512") + SET(PICLAS_INSTRUCTION "-march=skylake-avx512 -mtune=skylake-avx512") ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") SET(PICLAS_INSTRUCTION "-xSKYLAKE-AVX512") # Explicitely enable usage of AVX512 registers @@ -122,7 +122,7 @@ ELSEIF (CMAKE_FQDN_HOST MATCHES "sng\.lrz\.de$") ELSEIF(CMAKE_FQDN_HOST MATCHES "\.can$") MESSAGE(STATUS "Compiling on LUMI") IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU") - SET(FLEXI_INSTRUCTION "-march=znver3") + SET(FLEXI_INSTRUCTION "-march=znver3 -mtune=znver3") ELSE() MESSAGE(FATAL_ERROR "LUMI currently only supported using the GNU Compiler Collection (GCC). Please load/swap the following modules: LUMI PrgEnv-gnu cray-hdf5-parallel") ENDIF() @@ -130,7 +130,7 @@ ELSEIF(CMAKE_FQDN_HOST MATCHES "\.can$") # IAG Prandtl ELSEIF(CMAKE_FQDN_HOST MATCHES "^(prandtl|grafik.*)\.iag\.uni\-stuttgart\.de") MESSAGE(STATUS "Compiling on ${CMAKE_HOSTNAME}") - SET(PICLAS_INSTRUCTION "-march=native") + SET(PICLAS_INSTRUCTION "-march=native -mtune=native") # Set LUSTRE definition to account for filesystem ADD_DEFINITIONS(-DLUSTRE) @@ -138,29 +138,29 @@ ELSEIF (CMAKE_FQDN_HOST MATCHES "^ila(head.*|cfd.*)\.ila.uni\-stuttgart\.de") MESSAGE(STATUS "Compiling on ILA cluster") # Overwrite compiler target architecture IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "Flang") - SET(PICLAS_INSTRUCTION "-march=core-avx2") + SET(PICLAS_INSTRUCTION "-march=core-avx2 -mtune=core-avx2") ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") - SET(PICLAS_INSTRUCTION "-xCORE-AVX2") + SET(PICLAS_INSTRUCTION "-xCORE-AVX2") ENDIF() # Work around MPI-IO issue 4446 on machines mounting storage via NFS ADD_DEFINITIONS(-DNFS) ELSEIF (CMAKE_FQDN_HOST MATCHES "^(xenon.*|argon.*)\.ila.uni\-stuttgart\.de") MESSAGE(STATUS "Compiling on ILA student cluster") - SET(FLEXI_INSTRUCTION "-march=native") + SET(FLEXI_INSTRUCTION "-march=native -mtune=native") # Work around MPI-IO issue 4446 on machines mountng storage via NFS ADD_DEFINITIONS(-DNFS) ELSEIF ("${CMAKE_FQDN_HOST}" MATCHES "gitlab\.ila\.uni\-stuttgart\.de") MESSAGE(STATUS "Compiling on ILA Gitlab") ADD_DEFINITIONS(-DVDM_ANALYTICAL) - SET(PICLAS_INSTRUCTION "-march=native") + SET(PICLAS_INSTRUCTION "-march=native -mtune=native") ELSE() MESSAGE(STATUS "Compiling on a generic machine [${CMAKE_HOSTNAME}]") # Set compiler target architecture IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "Flang" OR CMAKE_Fortran_COMPILER_ID MATCHES "Cray") - SET(PICLAS_INSTRUCTION "-march=native") + SET(PICLAS_INSTRUCTION "-march=native -mtune=native") # SET(PICLAS_INSTRUCTION "-mtune=generic") ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") SET(PICLAS_INSTRUCTION "-xHost") @@ -243,7 +243,9 @@ IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU") SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -finstrument-functions") ENDIF(PICLAS_EXTRAE) # LUMI has an issue with argument types in MPI(CH) calls - SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch") + IF(CMAKE_FQDN_HOST MATCHES "\.can$") + SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch") + ENDIF() ENDIF() # initialize all variables as signalling NaNs to force the user to correctly initialize these data types SET (CMAKE_Fortran_FLAGS_NITRO "${CMAKE_Fortran_FLAGS} -Ofast ${PICLAS_INSTRUCTION}") From 18cb1616195c1c5816ddd8d45cc23e95b75d3907 Mon Sep 17 00:00:00 2001 From: Patrick Kopper Date: Tue, 5 Mar 2024 13:50:19 +0100 Subject: [PATCH 192/222] UnitTests also need position-independent code --- unitTests/CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/unitTests/CMakeLists.txt b/unitTests/CMakeLists.txt index 364976965..77919a878 100644 --- a/unitTests/CMakeLists.txt +++ b/unitTests/CMakeLists.txt @@ -12,12 +12,11 @@ # You should have received a copy of the GNU General Public License along with FLEXI. If not, see . #================================================================================================================================= -#add_unit_test( ...) +# add_unit_test( ...) # # Adds test executable, , built from and # adds the test so that CTest will run it. # Both the executable and the test will be named . -# function(add_unit_test target) # Add executable and libraries ADD_EXECUTABLE(${target} ${ARGN}) @@ -38,6 +37,9 @@ function(add_unit_test target) COMMAND ${CMAKE_BINARY_DIR}/unitTests/bin/${target}) endfunction() +# CMake can always request position independent code +SET(CMAKE_POSITION_INDEPENDENT_CODE ON) + # Enable testing in general ENABLE_TESTING() # ... and make it parallel From ea0fcf2c41c4c33f4f6a0db9596dd6f3c4d53ea2 Mon Sep 17 00:00:00 2001 From: Patrick Kopper Date: Wed, 6 Mar 2024 08:39:12 +0100 Subject: [PATCH 193/222] CMake needs more help with position-independent code --- CMakeLists.txt | 5 +++-- CMakeListsMachine.txt | 12 ++++++------ src/CMakeLists.txt | 15 +++++++++++++-- src/posti/CMakeLists.txt | 3 +-- src/posti/dmd/CMakeLists.txt | 5 +++-- src/posti/piclas2vtk/CMakeLists.txt | 6 ++++-- src/posti/superB/CMakeLists.txt | 5 +++-- src/posti/visu/CMakeLists.txt | 6 ++++-- unitTests/CMakeLists.txt | 6 ++++-- 9 files changed, 41 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e73e5b112..9bf2d277b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,7 @@ # ========================================================================= # CMake configuration # ========================================================================= +MESSAGE(STATUS "Generating with [cmake] (${CMAKE_VERSION})") # NOTE: use minimum CMake version required CMAKE_MINIMUM_REQUIRED(VERSION 3.6.3) # Policies (see https://cmake.org/cmake/help/v3.13/manual/cmake-policies.7.html) @@ -120,12 +121,12 @@ OPTION(PICLAS_PERFORMANCE "Enable performance optimizations (e.g. PGO for GNU)" IF (GNU_LD_STRING MATCHES "^GNU ld") EXECUTE_PROCESS(COMMAND ld --version COMMAND grep "^GNU ld" COMMAND sed "s/^.* //g" OUTPUT_VARIABLE GNU_LD_VERSION) STRING(STRIP "${GNU_LD_VERSION}" GNU_LD_VERSION) - MESSAGE(STATUS "Setting linker to [ld] (v${GNU_LD_VERSION})") + MESSAGE(STATUS "Linking with [ld] (v${GNU_LD_VERSION})") # ... or if we are running mold ELSEIF (GNU_LD_STRING MATCHES "^mold") EXECUTE_PROCESS(COMMAND ld --version COMMAND grep "^mold" COMMAND grep -Eo "[0-9]+\.[0-9]+\.[0-9]+ " OUTPUT_VARIABLE GNU_MOLD_VERSION) STRING(STRIP "${GNU_MOLD_VERSION}" GNU_MOLD_VERSION) - MESSAGE(STATUS "Setting linker to [mold] (v${GNU_MOLD_VERSION})") + MESSAGE(STATUS "Linking with [mold] (v${GNU_MOLD_VERSION})") ENDIF() ENDIF() # ENDIF() diff --git a/CMakeListsMachine.txt b/CMakeListsMachine.txt index 710067fde..c100e29cf 100644 --- a/CMakeListsMachine.txt +++ b/CMakeListsMachine.txt @@ -231,7 +231,7 @@ ENDIF() GET_FILENAME_COMPONENT (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME) # CMake can always request position independent code -SET(CMAKE_POSITION_INDEPENDENT_CODE ON) +# SET(CMAKE_POSITION_INDEPENDENT_CODE ON) # GNU Compiler Collection (GCC) IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU") @@ -255,8 +255,8 @@ IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU") SET (CMAKE_Fortran_FLAGS_SANITIZE "${CMAKE_Fortran_FLAGS} -g -Og -ggdb3 -ffpe-trap=invalid,zero,overflow,denorm -fbounds-check -fbacktrace -Wall -fsanitize=address,undefined,leak -fno-omit-frame-pointer -Wc-binding-type -Wuninitialized -pedantic") # Compile flags depend on the generator IF(NOT "${CMAKE_GENERATOR}" MATCHES "Ninja") - # add flags only for compiling not linking! - SET (PICLAS_COMPILE_FLAGS "-xf95-cpp-input") + # add flags only for compiling not linking! + SET (PICLAS_COMPILE_FLAGS "-xf95-cpp-input") ELSE() # Trailing white space required in case variable is unset! SET (PICLAS_COMPILE_FLAGS "${NINJA_COLOR_DIAGNOSTICS} ") @@ -274,8 +274,8 @@ ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Flang") SET (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS} -g -O0 -ggdb3 -ffpe-trap=invalid -fbounds-check -finit-real=snan -fbacktrace -Wall") # Compile flags depend on the generator IF(NOT "${CMAKE_GENERATOR}" MATCHES "Ninja") - # add flags only for compiling not linking! - SET (PICLAS_COMPILE_FLAGS "-xf95-cpp-input") + # add flags only for compiling not linking! + SET (PICLAS_COMPILE_FLAGS "-xf95-cpp-input") ELSE() # Trailing white space required in case variable is unset! SET (PICLAS_COMPILE_FLAGS "${NINJA_COLOR_DIAGNOSTICS} ") @@ -294,7 +294,7 @@ ELSEIF (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") # Compile flags depend on the generator IF(NOT "${CMAKE_GENERATOR}" MATCHES "Ninja") # add flags only for compiling not linking! - SET (PICLAS_COMPILE_FLAGS "-fPIC -fpp -allow nofpp_comments -assume bscc") + SET (PICLAS_COMPILE_FLAGS "-fpp -allow nofpp_comments -assume bscc") ELSE() SET (PICLAS_COMPILE_FLAGS "${NINJA_COLOR_DIAGNOSTICS} -allow nofpp_comments -assume bscc") ENDIF() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f1e9ddeff..8867e202b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -384,6 +384,8 @@ FUNCTION(add_exec target) ADD_EXECUTABLE( ${target} ${ARGN}) TARGET_LINK_LIBRARIES(${target} libpiclasshared) SET_TARGET_PROPERTIES(${target} PROPERTIES COMPILE_FLAGS ${PICLAS_COMPILE_FLAGS} + COMPILE_OPTIONS "-fPIC" + CMAKE_POSITION_INDEPENDENT_CODE ON LINKER_LANGUAGE Fortran) INSTALL(PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${target} DESTINATION bin) STRING(TOUPPER ${target} TARGETUP) @@ -395,6 +397,8 @@ FUNCTION(add_lib_shared target) TARGET_LINK_LIBRARIES(${target} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/userblock.o libpiclasstatic userblocklib stacksizelib memusagelib ${linkedlibs}) SET_TARGET_PROPERTIES(${target} PROPERTIES PREFIX "" COMPILE_FLAGS ${PICLAS_COMPILE_FLAGS} + COMPILE_OPTIONS "-fPIC" + CMAKE_POSITION_INDEPENDENT_CODE ON LINKER_LANGUAGE Fortran) INSTALL(TARGETS ${target} LIBRARY PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE @@ -539,24 +543,31 @@ ENDIF() # define libs ADD_LIBRARY( libpiclasstaticF90 OBJECT ${piclasF90} ) -SET_TARGET_PROPERTIES(libpiclasstaticF90 PROPERTIES COMPILE_FLAGS ${PICLAS_COMPILE_FLAGS}) +SET_TARGET_PROPERTIES(libpiclasstaticF90 PROPERTIES COMPILE_FLAGS ${PICLAS_COMPILE_FLAGS} + COMPILE_OPTIONS "-fPIC" + CMAKE_POSITION_INDEPENDENT_CODE ON) ADD_LIBRARY( libpiclasstatic STATIC $) SET_TARGET_PROPERTIES(libpiclasstatic PROPERTIES PREFIX "" - OUTPUT_NAME "libpiclasf90") + COMPILE_OPTIONS "-fPIC" + CMAKE_POSITION_INDEPENDENT_CODE ON + OUTPUT_NAME "libpiclasf90") IF(SELFBUILTEXTERNALS) ADD_DEPENDENCIES(libpiclasstaticF90 ${SELFBUILTEXTERNALS}) ENDIF() ADD_LIBRARY(userblocklib STATIC ./src/output/read_userblock.c) SET_TARGET_PROPERTIES(userblocklib PROPERTIES LANGUAGE C LINKER_LANGUAGE C + COMPILE_OPTIONS "-fPIC" CMAKE_POSITION_INDEPENDENT_CODE ON) ADD_LIBRARY(stacksizelib STATIC ./src/globals/stacksize.c) SET_TARGET_PROPERTIES(stacksizelib PROPERTIES LANGUAGE C LINKER_LANGUAGE C + COMPILE_OPTIONS "-fPIC" CMAKE_POSITION_INDEPENDENT_CODE ON) ADD_LIBRARY(memusagelib STATIC ./src/globals/processmemusage.cxx) SET_TARGET_PROPERTIES(memusagelib PROPERTIES LANGUAGE CXX LINKER_LANGUAGE CXX + COMPILE_OPTIONS "-fPIC" CMAKE_POSITION_INDEPENDENT_CODE ON) # we link the statically built libs diff --git a/src/posti/CMakeLists.txt b/src/posti/CMakeLists.txt index 40c39405a..9c461318e 100644 --- a/src/posti/CMakeLists.txt +++ b/src/posti/CMakeLists.txt @@ -20,7 +20,6 @@ IF(POSTI_BUILD_PICLAS2VTK) INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/src/posti/piclas2vtk/CMakeLists.txt) ENDIF() - IF(POSTI_BUILD_DMD) INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/src/posti/dmd/CMakeLists.txt) -ENDIF() +ENDIF() \ No newline at end of file diff --git a/src/posti/dmd/CMakeLists.txt b/src/posti/dmd/CMakeLists.txt index f98897c0a..b7372625f 100644 --- a/src/posti/dmd/CMakeLists.txt +++ b/src/posti/dmd/CMakeLists.txt @@ -13,7 +13,9 @@ FILE(GLOB ${TOOL_NAME}F90 ${TOOL_DIR}/dmd_main.f90 ${TOOL_DIR}/maxwell/equationDmd_vars.f90) ADD_LIBRARY(${TOOL_NAME}libF90 OBJECT ${${TOOL_NAME}F90}) -SET_TARGET_PROPERTIES(${TOOL_NAME}libF90 PROPERTIES COMPILE_FLAGS ${PICLAS_COMPILE_FLAGS}) +SET_TARGET_PROPERTIES(${TOOL_NAME}libF90 PROPERTIES COMPILE_FLAGS ${PICLAS_COMPILE_FLAGS} + COMPILE_OPTIONS "-fPIC" + CMAKE_POSITION_INDEPENDENT_CODE ON) ADD_LIBRARY(${TOOL_NAME}lib STATIC $) ADD_DEPENDENCIES(${TOOL_NAME}libF90 libpiclasshared) @@ -22,4 +24,3 @@ add_exec( ${TOOL_NAME} ${TOOL_DIR}/dmd.f90) TARGET_LINK_LIBRARIES(${TOOL_NAME} ${TOOL_NAME}lib libpiclasshared) ADD_DEPENDENCIES( ${TOOL_NAME} ${TOOL_NAME}lib libpiclasshared) SET_TARGET_PROPERTIES(${TOOL_NAME} PROPERTIES LINKER_LANGUAGE Fortran) - diff --git a/src/posti/piclas2vtk/CMakeLists.txt b/src/posti/piclas2vtk/CMakeLists.txt index f1d121e17..df895b2dd 100644 --- a/src/posti/piclas2vtk/CMakeLists.txt +++ b/src/posti/piclas2vtk/CMakeLists.txt @@ -11,11 +11,13 @@ FILE(GLOB ${TOOL_NAME}F90 ${TOOL_DIR}/${TOOL_NAME}.f90 ${TOOL_DIR}/${TOOL_NAME}_vars.f90) ADD_LIBRARY(${TOOL_NAME}libF90 OBJECT ${${TOOL_NAME}F90}) -SET_TARGET_PROPERTIES(${TOOL_NAME}libF90 PROPERTIES COMPILE_FLAGS ${PICLAS_COMPILE_FLAGS}) +SET_TARGET_PROPERTIES(${TOOL_NAME}libF90 PROPERTIES COMPILE_FLAGS ${PICLAS_COMPILE_FLAGS} + COMPILE_OPTIONS "-fPIC" + CMAKE_POSITION_INDEPENDENT_CODE ON) ADD_LIBRARY(${TOOL_NAME}lib STATIC $) ADD_DEPENDENCIES(${TOOL_NAME}libF90 libpiclasshared) # Standalone Posti executable add_exec( ${TOOL_NAME} ${TOOL_DIR}/${TOOL_NAME}.f90) TARGET_LINK_LIBRARIES(${TOOL_NAME} ${TOOL_NAME}lib libpiclasshared) -ADD_DEPENDENCIES( ${TOOL_NAME} ${TOOL_NAME}lib libpiclasshared) +ADD_DEPENDENCIES( ${TOOL_NAME} ${TOOL_NAME}lib libpiclasshared) \ No newline at end of file diff --git a/src/posti/superB/CMakeLists.txt b/src/posti/superB/CMakeLists.txt index d31e30b97..ffd06301b 100644 --- a/src/posti/superB/CMakeLists.txt +++ b/src/posti/superB/CMakeLists.txt @@ -19,7 +19,9 @@ IF (NOT PICLAS_PARTICLES) ENDIF() ADD_LIBRARY(${TOOL_NAME}libF90 OBJECT ${${TOOL_NAME}F90}) -SET_TARGET_PROPERTIES(${TOOL_NAME}libF90 PROPERTIES COMPILE_FLAGS ${PICLAS_COMPILE_FLAGS}) +SET_TARGET_PROPERTIES(${TOOL_NAME}libF90 PROPERTIES COMPILE_FLAGS ${PICLAS_COMPILE_FLAGS} + COMPILE_OPTIONS "-fPIC" + CMAKE_POSITION_INDEPENDENT_CODE ON) ADD_LIBRARY(${TOOL_NAME}lib STATIC $) ADD_DEPENDENCIES(${TOOL_NAME}libF90 libpiclasshared) @@ -27,4 +29,3 @@ ADD_DEPENDENCIES(${TOOL_NAME}libF90 libpiclasshared) add_exec( ${TOOL_NAME} ${TOOL_DIR}/${TOOL_NAME}.f90) TARGET_LINK_LIBRARIES(${TOOL_NAME} ${TOOL_NAME}lib libpiclasshared) ADD_DEPENDENCIES( ${TOOL_NAME} ${TOOL_NAME}lib libpiclasshared) - diff --git a/src/posti/visu/CMakeLists.txt b/src/posti/visu/CMakeLists.txt index 956b3e77e..ac0bac853 100644 --- a/src/posti/visu/CMakeLists.txt +++ b/src/posti/visu/CMakeLists.txt @@ -22,7 +22,9 @@ FILE(GLOB ${TOOL_NAME}F90 ${TOOL_DIR}/CMakeLists.txt ADD_LIBRARY(${TOOL_NAME}libF90 OBJECT ${${TOOL_NAME}F90}) -SET_TARGET_PROPERTIES(${TOOL_NAME}libF90 PROPERTIES COMPILE_FLAGS ${PICLAS_COMPILE_FLAGS}) +SET_TARGET_PROPERTIES(${TOOL_NAME}libF90 PROPERTIES COMPILE_FLAGS ${PICLAS_COMPILE_FLAGS} + COMPILE_OPTIONS "-fPIC" + CMAKE_POSITION_INDEPENDENT_CODE ON) ADD_LIBRARY(${TOOL_NAME}lib STATIC $) ADD_DEPENDENCIES(${TOOL_NAME}libF90 libpiclasshared) @@ -51,4 +53,4 @@ IF (POSTI_USE_PARAVIEW AND ParaView_FOUND) ADD_DEPENDENCIES( visuReader ${TOOL_NAME}lib libpiclasshared) TARGET_LINK_LIBRARIES(visuReader PUBLIC ${TOOL_NAME}lib libpiclasshared) -ENDIF() +ENDIF() \ No newline at end of file diff --git a/unitTests/CMakeLists.txt b/unitTests/CMakeLists.txt index 77919a878..807cc84f5 100644 --- a/unitTests/CMakeLists.txt +++ b/unitTests/CMakeLists.txt @@ -22,7 +22,9 @@ function(add_unit_test target) ADD_EXECUTABLE(${target} ${ARGN}) TARGET_LINK_LIBRARIES(${target} libpiclasshared) # Set properties of target - SET_TARGET_PROPERTIES(${target} PROPERTIES COMPILE_FLAGS ${PICLAS_COMPILE_FLAGS}) + SET_TARGET_PROPERTIES(${target} PROPERTIES COMPILE_FLAGS ${PICLAS_COMPILE_FLAGS} + COMPILE_OPTIONS "-fPIC" + CMAKE_POSITION_INDEPENDENT_CODE ON) SET_TARGET_PROPERTIES(${target} PROPERTIES LINKER_LANGUAGE Fortran) SET_TARGET_PROPERTIES(${target} PROPERTIES @@ -38,7 +40,7 @@ function(add_unit_test target) endfunction() # CMake can always request position independent code -SET(CMAKE_POSITION_INDEPENDENT_CODE ON) +# SET(CMAKE_POSITION_INDEPENDENT_CODE ON) # Enable testing in general ENABLE_TESTING() From 35810da80eb7a7a5f8483d10f9dfab4a64301a98 Mon Sep 17 00:00:00 2001 From: Patrick Kopper Date: Mon, 12 Feb 2024 11:55:09 +0100 Subject: [PATCH 194/222] Add CMake dummy target for synchronization When using Ninja, CMake tries to parallelize the build resulting in missing module files. Add a dummy target to ensure synchronization. --- src/posti/dmd/CMakeLists.txt | 7 ++++++- src/posti/piclas2vtk/CMakeLists.txt | 7 ++++++- src/posti/superB/CMakeLists.txt | 7 ++++++- src/posti/visu/CMakeLists.txt | 5 +++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/posti/dmd/CMakeLists.txt b/src/posti/dmd/CMakeLists.txt index b7372625f..b2b67a9af 100644 --- a/src/posti/dmd/CMakeLists.txt +++ b/src/posti/dmd/CMakeLists.txt @@ -19,7 +19,12 @@ SET_TARGET_PROPERTIES(${TOOL_NAME}libF90 PROPERTIES COMPILE_FLAGS ${PICLAS_COMPI ADD_LIBRARY(${TOOL_NAME}lib STATIC $) ADD_DEPENDENCIES(${TOOL_NAME}libF90 libpiclasshared) - # Standalone Posti executable +# When using Ninja, CMake tries to parallelize the build resulting in missing module files. Add a dummy target to ensure synchronization +ADD_CUSTOM_TARGET(${TOOL_NAME}target) +ADD_DEPENDENCIES(${TOOL_NAME}target libpiclasshared) +ADD_DEPENDENCIES(${TOOL_NAME}libF90 ${TOOL_NAME}target) + +# Standalone Posti executable add_exec( ${TOOL_NAME} ${TOOL_DIR}/dmd.f90) TARGET_LINK_LIBRARIES(${TOOL_NAME} ${TOOL_NAME}lib libpiclasshared) ADD_DEPENDENCIES( ${TOOL_NAME} ${TOOL_NAME}lib libpiclasshared) diff --git a/src/posti/piclas2vtk/CMakeLists.txt b/src/posti/piclas2vtk/CMakeLists.txt index df895b2dd..a0a6b54bd 100644 --- a/src/posti/piclas2vtk/CMakeLists.txt +++ b/src/posti/piclas2vtk/CMakeLists.txt @@ -17,7 +17,12 @@ SET_TARGET_PROPERTIES(${TOOL_NAME}libF90 PROPERTIES COMPILE_FLAGS ${PICLAS_COMPI ADD_LIBRARY(${TOOL_NAME}lib STATIC $) ADD_DEPENDENCIES(${TOOL_NAME}libF90 libpiclasshared) +# When using Ninja, CMake tries to parallelize the build resulting in missing module files. Add a dummy target to ensure synchronization +ADD_CUSTOM_TARGET(${TOOL_NAME}target) +ADD_DEPENDENCIES(${TOOL_NAME}target libpiclasshared) +ADD_DEPENDENCIES(${TOOL_NAME}libF90 ${TOOL_NAME}target) + # Standalone Posti executable add_exec( ${TOOL_NAME} ${TOOL_DIR}/${TOOL_NAME}.f90) TARGET_LINK_LIBRARIES(${TOOL_NAME} ${TOOL_NAME}lib libpiclasshared) -ADD_DEPENDENCIES( ${TOOL_NAME} ${TOOL_NAME}lib libpiclasshared) \ No newline at end of file +ADD_DEPENDENCIES( ${TOOL_NAME} ${TOOL_NAME}lib libpiclasshared) diff --git a/src/posti/superB/CMakeLists.txt b/src/posti/superB/CMakeLists.txt index ffd06301b..ba463a81f 100644 --- a/src/posti/superB/CMakeLists.txt +++ b/src/posti/superB/CMakeLists.txt @@ -25,7 +25,12 @@ SET_TARGET_PROPERTIES(${TOOL_NAME}libF90 PROPERTIES COMPILE_FLAGS ${PICLAS_COMPI ADD_LIBRARY(${TOOL_NAME}lib STATIC $) ADD_DEPENDENCIES(${TOOL_NAME}libF90 libpiclasshared) +# When using Ninja, CMake tries to parallelize the build resulting in missing module files. Add a dummy target to ensure synchronization +ADD_CUSTOM_TARGET(${TOOL_NAME}target) +ADD_DEPENDENCIES(${TOOL_NAME}target libpiclasshared) +ADD_DEPENDENCIES(${TOOL_NAME}libF90 ${TOOL_NAME}target) + # Standalone superB executable add_exec( ${TOOL_NAME} ${TOOL_DIR}/${TOOL_NAME}.f90) TARGET_LINK_LIBRARIES(${TOOL_NAME} ${TOOL_NAME}lib libpiclasshared) -ADD_DEPENDENCIES( ${TOOL_NAME} ${TOOL_NAME}lib libpiclasshared) +ADD_DEPENDENCIES( ${TOOL_NAME} ${TOOL_NAME}lib libpiclasshared) \ No newline at end of file diff --git a/src/posti/visu/CMakeLists.txt b/src/posti/visu/CMakeLists.txt index ac0bac853..f722bffbf 100644 --- a/src/posti/visu/CMakeLists.txt +++ b/src/posti/visu/CMakeLists.txt @@ -28,6 +28,11 @@ SET_TARGET_PROPERTIES(${TOOL_NAME}libF90 PROPERTIES COMPILE_FLAGS ${PICLAS_COMPI ADD_LIBRARY(${TOOL_NAME}lib STATIC $) ADD_DEPENDENCIES(${TOOL_NAME}libF90 libpiclasshared) +# When using Ninja, CMake tries to parallelize the build resulting in missing module files. Add a dummy target to ensure synchronization +ADD_CUSTOM_TARGET(${TOOL_NAME}target) +ADD_DEPENDENCIES(${TOOL_NAME}target libpiclasshared) +ADD_DEPENDENCIES(${TOOL_NAME}libF90 ${TOOL_NAME}target) + # # Standalone Posti executable # add_exec( posti_${TOOL_NAME} ${TOOL_DIR}/posti_visu.f90) # TARGET_LINK_LIBRARIES(posti_${TOOL_NAME} ${TOOL_NAME}lib libflexishared) From a52fae3daf05cc069cdd743a844909d3dbd68568 Mon Sep 17 00:00:00 2001 From: ValentinSchunck Date: Wed, 13 Mar 2024 17:11:55 +0100 Subject: [PATCH 195/222] New Index for HelperU for not dividing by zeros if only electric field should be calculated (HelperU has dim 6 for electric and magnetic field but only 3 for only electric --- .../pic/interpolation/pic_interpolation_tools.f90 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/particles/pic/interpolation/pic_interpolation_tools.f90 b/src/particles/pic/interpolation/pic_interpolation_tools.f90 index c8f52d85c..9f1fd638b 100644 --- a/src/particles/pic/interpolation/pic_interpolation_tools.f90 +++ b/src/particles/pic/interpolation/pic_interpolation_tools.f90 @@ -356,12 +356,13 @@ PPURE FUNCTION GetEMFieldDW(ElemID, PartPos_loc) ! LOCAL VARIABLES REAL :: HelperU(1:6,0:PP_N,0:PP_N,0:PP_N) REAL :: PartDistDepo(0:PP_N,0:PP_N,0:PP_N), DistSum -INTEGER :: k,l,m,ind1,ind2 +INTEGER :: k,l,m,ind1,ind2, HelperUIndex REAL :: norm !=================================================================================================================================== GetEMFieldDW(1:6)=0. !--- evaluate at Particle position #if (PP_nVar==8) +HelperUIndex = 6 #ifdef PP_POIS HelperU(1:3,:,:,:) = E(1:3,:,:,:,ElemID) HelperU(4:6,:,:,:) = U(4:6,:,:,:,ElemID) @@ -378,11 +379,13 @@ PPURE FUNCTION GetEMFieldDW(ElemID, PartPos_loc) HelperU(1:3,:,:,:) = E(1:3,:,:,:,ElemID) #else ! Consider only electric fields +HelperUIndex = 3 HelperU(1:3,:,:,:) = E(1:3,:,:,:,ElemID) #endif #elif PP_nVar==3 HelperU(4:6,:,:,:) = B(1:3,:,:,:,ElemID) #else +HelperUIndex = 6 HelperU(1:3,:,:,:) = E(1:3,:,:,:,ElemID) HelperU(4:6,:,:,:) = B(1:3,:,:,:,ElemID) #endif @@ -407,7 +410,7 @@ PPURE FUNCTION GetEMFieldDW(ElemID, PartPos_loc) GetEMFieldDW = 0.0 DO k = 0, PP_N; DO l=0, PP_N; DO m=0, PP_N - GetEMFieldDW(1:6) = GetEMFieldDW(1:6) + PartDistDepo(k,l,m)/DistSum*HelperU(1:6,k,l,m) + GetEMFieldDW(1:HelperUIndex) = GetEMFieldDW(1:HelperUIndex) + PartDistDepo(k,l,m)/DistSum*HelperU(1:HelperUIndex,k,l,m) END DO; END DO; END DO ! Check whether magnetic background field is activated (superB) From f774bc159e40920df5c49eff7c6cd9dea4abd73c Mon Sep 17 00:00:00 2001 From: Valentin Schunck Date: Thu, 14 Mar 2024 14:06:18 +0100 Subject: [PATCH 196/222] New Index for HelperU for not dividing by zeros if only electric field should be calculated (HelperU has dim 6 for electric and magnetic field but only 3 for only electric --- .../pic/interpolation/pic_interpolation_tools.f90 | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/particles/pic/interpolation/pic_interpolation_tools.f90 b/src/particles/pic/interpolation/pic_interpolation_tools.f90 index 9f1fd638b..11fcdf33e 100644 --- a/src/particles/pic/interpolation/pic_interpolation_tools.f90 +++ b/src/particles/pic/interpolation/pic_interpolation_tools.f90 @@ -359,10 +359,11 @@ PPURE FUNCTION GetEMFieldDW(ElemID, PartPos_loc) INTEGER :: k,l,m,ind1,ind2, HelperUIndex REAL :: norm !=================================================================================================================================== -GetEMFieldDW(1:6)=0. +GetEMFieldDW = 0.0 +PartDistDepo = 0.0 +HelperUIndex = 6 !--- evaluate at Particle position #if (PP_nVar==8) -HelperUIndex = 6 #ifdef PP_POIS HelperU(1:3,:,:,:) = E(1:3,:,:,:,ElemID) HelperU(4:6,:,:,:) = U(4:6,:,:,:,ElemID) @@ -385,7 +386,6 @@ PPURE FUNCTION GetEMFieldDW(ElemID, PartPos_loc) #elif PP_nVar==3 HelperU(4:6,:,:,:) = B(1:3,:,:,:,ElemID) #else -HelperUIndex = 6 HelperU(1:3,:,:,:) = E(1:3,:,:,:,ElemID) HelperU(4:6,:,:,:) = B(1:3,:,:,:,ElemID) #endif @@ -408,7 +408,6 @@ PPURE FUNCTION GetEMFieldDW(ElemID, PartPos_loc) DistSum = DistSum + PartDistDepo(k,l,m) END DO; END DO; END DO -GetEMFieldDW = 0.0 DO k = 0, PP_N; DO l=0, PP_N; DO m=0, PP_N GetEMFieldDW(1:HelperUIndex) = GetEMFieldDW(1:HelperUIndex) + PartDistDepo(k,l,m)/DistSum*HelperU(1:HelperUIndex,k,l,m) END DO; END DO; END DO From 10bc0e2e9cc12c2bcdbd9938c2abf1b4bbeef555 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Thu, 21 Mar 2024 12:51:36 +0100 Subject: [PATCH 197/222] Set HelperUIndex as parameter in GetEMFieldDW --- .../interpolation/pic_interpolation_tools.f90 | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/particles/pic/interpolation/pic_interpolation_tools.f90 b/src/particles/pic/interpolation/pic_interpolation_tools.f90 index 11fcdf33e..eb4625175 100644 --- a/src/particles/pic/interpolation/pic_interpolation_tools.f90 +++ b/src/particles/pic/interpolation/pic_interpolation_tools.f90 @@ -356,12 +356,27 @@ PPURE FUNCTION GetEMFieldDW(ElemID, PartPos_loc) ! LOCAL VARIABLES REAL :: HelperU(1:6,0:PP_N,0:PP_N,0:PP_N) REAL :: PartDistDepo(0:PP_N,0:PP_N,0:PP_N), DistSum -INTEGER :: k,l,m,ind1,ind2, HelperUIndex +INTEGER :: k,l,m,ind1,ind2 REAL :: norm +#if (PP_nVar==8) +INTEGER,PARAMETER :: HelperUIndex = 6 +#else +#ifdef PP_POIS +INTEGER,PARAMETER :: HelperUIndex = 3 +#elif USE_HDG +#if PP_nVar==1 +INTEGER,PARAMETER :: HelperUIndex = 3 +#else +INTEGER,PARAMETER :: HelperUIndex = 6 +#endif +#else +INTEGER,PARAMETER :: HelperUIndex = 3 +#endif +#endif !=================================================================================================================================== GetEMFieldDW = 0.0 PartDistDepo = 0.0 -HelperUIndex = 6 +HelperU = 0.0 !--- evaluate at Particle position #if (PP_nVar==8) #ifdef PP_POIS @@ -380,7 +395,6 @@ PPURE FUNCTION GetEMFieldDW(ElemID, PartPos_loc) HelperU(1:3,:,:,:) = E(1:3,:,:,:,ElemID) #else ! Consider only electric fields -HelperUIndex = 3 HelperU(1:3,:,:,:) = E(1:3,:,:,:,ElemID) #endif #elif PP_nVar==3 From 2ae8cb46a8f54f42b673fd0f77b8ba9837f05e2a Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Thu, 21 Mar 2024 18:24:47 +0100 Subject: [PATCH 198/222] Bugfix in call of DSMC_SetInternalEnr_Poly, documentation for fixed probability reaction model --- .gitignore | 3 + .../features-and-models/BC-particle-solver.md | 108 +++++++++++------- src/particles/dsmc/dsmc_polyatomic_model.f90 | 2 +- .../surfacemodel/surfacemodel_chemistry.f90 | 22 ++-- .../surfacemodel/surfacemodel_vars.f90 | 2 +- 5 files changed, 80 insertions(+), 57 deletions(-) diff --git a/.gitignore b/.gitignore index ab50ee355..bf59dd5ce 100644 --- a/.gitignore +++ b/.gitignore @@ -84,3 +84,6 @@ unitTests/bin/ # gitlab-ci-local temp files and folders .gitlab-ci-local/ reggie/ + +# pyenv project settings +.python-version diff --git a/docs/documentation/userguide/features-and-models/BC-particle-solver.md b/docs/documentation/userguide/features-and-models/BC-particle-solver.md index ff1122a88..5036454dd 100644 --- a/docs/documentation/userguide/features-and-models/BC-particle-solver.md +++ b/docs/documentation/userguide/features-and-models/BC-particle-solver.md @@ -3,30 +3,30 @@ Within the parameter file it is possible to define different particle boundary conditions. The number of boundaries is defined by - Part-nBounds=2 - Part-Boundary1-SourceName=BC_OPEN - Part-Boundary1-Condition=open - Part-Boundary2-SourceName=BC_WALL - Part-Boundary2-Condition=reflective - Part-Boundary2-SurfaceModel=2 + Part-nBounds = 2 + Part-Boundary1-SourceName = BC_OPEN + Part-Boundary1-Condition = open + Part-Boundary2-SourceName = BC_WALL + Part-Boundary2-Condition = reflective The `Part-Boundary1-SourceName=` corresponds to the name given during the preprocessing step with HOPR. The available conditions (`Part-Boundary1-Condition=`) are described in the table below. -| Condition | Description | -| :------------: | :------------------------------------------------------------------------------------------------------------------- | -| `open` | Every particle crossing the boundary will be deleted. | -| `symmetric` | A perfect specular reflection, without sampling of particle impacts. | -| `reflective` | Allows the definition of specular and diffuse reflection, Section {ref}`sec:particle-boundary-conditions-reflective` | -| `rot_periodic` | Allows the definition of rotational periodicity, Section {ref}`sec:particle-boundary-conditions-rotBC` | +| Condition | Description | +| :------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `open` | Every particle crossing the boundary will be deleted | +| `symmetric` | A perfect specular reflection, without sampling of particle impacts | +| `reflective` | Definition of different surface models: Section {ref}`sec:particle-boundary-conditions-reflective`, Section {ref}`sec:surface-chemistry`, Section {ref}`sec:catalytic-surface` | +| `rot_periodic` | Definition of rotational periodicity: Section {ref}`sec:particle-boundary-conditions-rotBC` | +| `rot_periodic_inter_plane` | Extension of rotational periodicity, allowing non-conformal interfaces and varying periodicity | (sec:particle-boundary-conditions-reflective)= ## Reflective Wall A reflective boundary can be defined with - Part-Boundary2-SourceName=BC_WALL - Part-Boundary2-Condition=reflective + Part-Boundary2-SourceName = BC_WALL + Part-Boundary2-Condition = reflective A perfect specular reflection is performed, if no other parameters are given. Gas-surface interactions can be modelled with the extended Maxwellian model {cite}`Padilla2009`, using accommodation coefficients of the form @@ -38,12 +38,12 @@ decide whether a diffuse (`MomentumACC` $>R$) or specular reflection (`MomentumA $R=[0,1)$ is a random number. Separate accommodation coefficients can be defined for the translation (`TransACC`), rotational (`RotACC`), vibrational (`VibACC`) and electronic energy (`ElecACC`) accommodation at a constant wall temperature [K]. - Part-Boundary2-MomentumACC=1. - Part-Boundary2-WallTemp=300. - Part-Boundary2-TransACC=1. - Part-Boundary2-VibACC=1. - Part-Boundary2-RotACC=1. - Part-Boundary2-ElecACC=1. + Part-Boundary2-MomentumACC = 1. + Part-Boundary2-WallTemp = 300. + Part-Boundary2-TransACC = 1. + Part-Boundary2-VibACC = 1. + Part-Boundary2-RotACC = 1. + Part-Boundary2-ElecACC = 1. An additional option `Part-Boundary2-SurfaceModel` is available, that is used for heterogeneous reactions (reactions that have reactants in two or more phases) or secondary electron emission models. These models are described in detail in Section {ref}`sec:surface-chemistry`. @@ -53,7 +53,7 @@ in two or more phases) or secondary electron emission models. These models are d Additionally, a linear wall velocity [m/s] can be given - Part-Boundary2-WallVelo=(/0,0,100/) + Part-Boundary2-WallVelo = (/0,0,100/) In the case of rotating walls the `-RotVelo` flag, a rotation frequency [Hz], and the rotation axis (x=1, y=2, z=3) must be set. Note that the definition of the rotational direction is defined by the sign of the frequency using the right-hand rule. @@ -140,11 +140,10 @@ definition in order to ensure the connection. Part-Boundary41-SourceName = BC_INT_S1_TOP Part-Boundary41-Condition = rot_periodic_inter_plane - Part-Boundary41-AssociatedPlane = 40 + Part-Boundary41-AssociatedPlane = 40 Note that using the intermediate plane definition with two corresponding BCs allows the user to mesh the segments independently, -creating a non-conforming interface at the intermediate plane. However, use of these non-conformal grids has so far only been -possible in pure DSMC simulations. +creating a non-conforming interface at the intermediate plane. However, use of these non-conformal grids is so far only possible in standalone DSMC simulations. ## Porous Wall / Pump @@ -213,20 +212,24 @@ to determine the pressure difference between the pump and a remote area of inter ## Surface Chemistry Modelling of reactive surfaces is enabled by setting `Part-BoundaryX-Condition=reflective` and an -appropriate particle boundary surface model `Part-BoundaryX-SurfaceModel`. -The available conditions (`Part-BoundaryX-SurfaceModel=`) are described in the table below. +appropriate particle boundary surface model `Part-BoundaryX-SurfaceModel`: + + Part-Boundary1-SurfaceModel = 0 + +The available conditions (`Part-BoundaryX-SurfaceModel=`) are described in the table below, ranging from simple empirical models and secondary electron/ion emission to finite-rate catalysis modelling including a surface treatment. | Model | Description | | :---------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 0 (default) | Standard extended Maxwellian scattering | -| 1 | Empirical modelling of sticking coefficient/probability | +| 1 | Empirical modelling of sticking coefficient/probability | +| 2 | Fixed probability surface chemistry | | 5 | Secondary electron emission as given by Ref. {cite}`Levko2015`. | | 7 | Secondary electron emission due to ion impact (SEE-I with $Ar^{+}$ on different metals) as used in Ref. {cite}`Pflug2014` and given by Ref. {cite}`Depla2009` with a default yield of 13 \%. | | 8 | Secondary electron emission due to ion impact (SEE-E with $e^{-}$ on dielectric surfaces) as used in Ref. {cite}`Liu2010` and given by Ref. {cite}`Morozov2004`. | | 9 | Secondary electron emission due to ion impact (SEE-I with $Ar^{+}$) with a constant yield of 1 \%. Emitted electrons have an energy of 6.8 eV upon emission. | | 10 | Secondary electron emission due to ion impact (SEE-I with $Ar^{+}$ on copper) as used in Ref. {cite}`Theis2021` originating from {cite}`Phelps1999` | | 11 | Secondary electron emission due to electron impact (SEE-E with $e^{-}$ on quartz (SiO$_{2}$)) as described in Ref. {cite}`Zeng2020` originating from {cite}`Dunaevsky2003` | -| 20 | Finite-rate catalysis model, Section {ref}`sec:catalytic-surface` | +| 20 | Finite-rate catalysis model, Section {ref}`sec:catalytic-surface` | For surface sampling output, where the surface is split into, e.g., $3\times3$ sub-surfaces, the following parameters mus be set @@ -272,10 +275,27 @@ The temperature limits $T_1$ and $T_2$ are model parameters and can be given for In this example, within impact angles of $0°\leq\alpha\leq45°$, the model parameters of the first row will be used and for $45°<\alpha\leq90°$ the second row. The number of rows is not limited. The species database is read-in by - Particles-Species-Database = Species_Database.h5 + Particles-Species-Database = SpeciesDatabase.h5 As additional output, the cell-local sticking coefficient will be added to the sampled surface output. A particle sticking to the surface will be deleted and its energy added to the heat flux sampling. This model can be combined with the linear temperature gradient and radiative equilibrium modelling as described in Section {ref}`sec:particle-boundary-conditions-reflective`. +### Fixed probability surface chemistry + +This simple fixed-probability surface chemistry model allows the user to define arbitrary surface reactions, by defining the impacting species, the products and a fixed event probability. The reaction is then assigned to the boundaries by specifying their number and index as defined previously. + + Surface-Reaction1-Type = P + Surface-Reaction1-Reactants = (/1,0/) + Surface-Reaction1-Products = (/2,1,0/) + Surface-Reaction1-EventProbability = 0.25 + Surface-Reaction1-NumOfBoundaries = 2 + Surface-Reaction1-Boundaries = (/1,3/) + +Optionally, a reaction-specific accommodation coefficient for the products can be defined, otherwise the surface-specific accommodation will be utilized for the product species: + + Surface-Reaction1-ProductAccommodation = 0. + +In the case that the defined event does not occur, a regular interaction using the surface-specific accommodation coefficients is performed. Examples are provided as part of the regression tests: `regressioncheck/NIG_DSMC/SURF_PROB_DifferentProbs` and `regressioncheck/NIG_DSMC/SURF_PROB_MultiReac`. + ### Secondary Electron Emission (SEE) Different models are implemented for secondary electron emission that are based on either electron or ion bombardment, depending on @@ -365,30 +385,30 @@ A catalytic reaction and the boundary on which it takes place is then defined by Surface-Reaction1-NumOfBoundaries = 2 Surface-Reaction1-Boundaries = (/1,3/) -All reactants and products are defined by their respective species index. In the case of multiple reacting, the order does not influence the input. The following optiona are available for the catalytic reaction type: +All reactants and products are defined by their respective species index. In the case of multiple reacting, the order does not influence the input. The following options are available for the catalytic reaction type: -| Model | Description | -| ----: | ------------------------------------------------- | -| A | Adsorption: Kisliuk or Langmuir model | -| D | Desorption: Polanyi-Wigner model | -| ER | Eley-Rideal reaction: Arrhenius based chemistry | -| LH | Langmuir-Hinshelwood reaction: Arrhenius based chemistry | -| LHD | Langmuir-Hisnhelwood reaction with instantaneous desorption | +| Model | Description | +| ----: | ----------------------------------------------------------- | +| A | Adsorption: Kisliuk or Langmuir model | +| D | Desorption: Polanyi-Wigner model | +| ER | Eley-Rideal reaction: Arrhenius based chemistry | +| LH | Langmuir-Hinshelwood reaction: Arrhenius based chemistry | +| LHD | Langmuir-Hisnhelwood reaction with instantaneous desorption | For the treatment of multiple reaction paths of the same species, a possible bias in the reaction rate is avoided by a randomized treatment. Bulk species can participate in the reaction. In this case, the bulk species is defined by `Surface-Species` and the corresponding species index. All reaction types allow for the definition of a reaction enthalpy. In addition, this value can be linearly increased (negative factor) or decreased (positive factor) by a scaling factor for the heat of reaction. Both values are given in [K]. - - Surface-Reaction1-ReactHeat = 17101.4 + + Surface-Reaction1-ReactHeat = 17101.4 Surface-Reaction1-HeatScaling = 1202.9 - + Depending on the reaction type, different additional parameters have to be defined. More details on the specific cases are given in the following subsections. An example input file for CO and O2 on a palladium surface can be found in the regression tests `regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2`. ### Adsorption For the modelling of the adsorption of a gas particle on the surface, two models are available: the simple Langmuir model, with a linear dependence of the adsorption probability on the surface coverage, and the precursor-based Kisliuk model: -$$ S = S_0 (1 + K (1/\theta^{\alpha} - 1))^{-1}$$ +$$ S = S_0 (1 + K (1/\theta^{\alpha} - 1))^{-1}$$ -here $S_0$ is the binding coefficient for a clean surface, $\alpha$ is the dissociation constant (2 for dissociative adsorption) and $K$ is the equilibrium constant between adsorption and desorption from the precursor state. For $K = 1$, the model simplifies to the Langmuir case. The parameters can be defined in PICLas as follows: +Here, $S_0$ is the binding coefficient for a clean surface, $\alpha$ is the dissociation constant (2 for dissociative adsorption) and $K$ is the equilibrium constant between adsorption and desorption from the precursor state. For $K = 1$, the model simplifies to the Langmuir case. The parameters can be defined in PICLas as follows: Surface-Reaction1-StickingCoefficient = 0.2 Surface-Reaction1-DissOrder = 1 @@ -396,11 +416,11 @@ here $S_0$ is the binding coefficient for a clean surface, $\alpha$ is the disso A special case of adsorption is the dissociative adsorption (`Surface-ReactionX-DissociativeAdsorption = true`), where only half of the molecule binds to the surface, while the other half remains in the gas phase. The adsorbate half `Surface-ReactionX-AdsorptionProduct` and the gas phase product `Surface-ReactionX-GasPhaseProduct` are specified by their respective species indices. The adsorption probability is calculated analogously to the general case. -Lateral interactions between multiple adsorbate species, which can disfavor further adsorption can be taken into account by the command `Surface-ReactionX-Inhibition` and the species index of the inhibiting species. +Lateral interactions between multiple adsorbate species, which can disfavor further adsorption can be taken into account by the command `Surface-ReactionX-Inhibition` and the species index of the inhibiting species. ### Desorption -The desorption of an adsorbate particle into the gas phase is modelled by the Polanyi-Wigner equation. +The desorption of an adsorbate particle into the gas phase is modelled by the Polanyi-Wigner equation. $$k(T) = A T^b \theta^{\alpha}_{A} e^{-E_\mathrm{a}/T}$$ diff --git a/src/particles/dsmc/dsmc_polyatomic_model.f90 b/src/particles/dsmc/dsmc_polyatomic_model.f90 index 90c629ce1..584fbe40e 100644 --- a/src/particles/dsmc/dsmc_polyatomic_model.f90 +++ b/src/particles/dsmc/dsmc_polyatomic_model.f90 @@ -333,7 +333,7 @@ SUBROUTINE DSMC_SetInternalEnr(iSpec, iInit, iPart, init_or_sf) END IF END IF IF(SpecDSMC(iSpec)%PolyatomicMol) THEN - CALL DSMC_SetInternalEnr_Poly(iSpec, iPart, iPart, init_or_sf) + CALL DSMC_SetInternalEnr_Poly(iSpec, iInit, iPart, init_or_sf) ELSE CALL DSMC_SetInternalEnr_Diatomic(iSpec, iPart, TRot, TVib) END IF diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index eb49b1229..2d82638d1 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -95,10 +95,10 @@ SUBROUTINE DefineParametersSurfaceChemistry() CALL prms%CreateIntArrayOption( 'Surface-Reaction[$]-Boundaries', 'Array of boundary indices of surface reaction.', & numberedmulti=.TRUE., no=0) CALL prms%CreateRealOption( 'Surface-Reaction[$]-EventProbability', & - 'Simple probability-based surface chemistry (Type = P)',numberedmulti=.TRUE.) + 'Event probability for the simple probability-based surface chemistry (Type = P)',numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-ProductAccommodation', & 'Reaction-specific translation thermal accommodation of the product species (Type = P), default is to ' //& - 'utilizethe surface-specific accommodation coefficient (TransACC)', '-1.',numberedmulti=.TRUE.) + 'utilize the surface-specific accommodation coefficient (TransACC)', '-1.',numberedmulti=.TRUE.) END SUBROUTINE DefineParametersSurfaceChemistry @@ -217,8 +217,8 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() SurfChem%EventProbInfo(iSpec)%ReactionIndex = 0 ALLOCATE(SurfChem%EventProbInfo(iSpec)%ReactionProb(SurfChem%EventProbInfo(iSpec)%NumOfReactionPaths)) SurfChem%EventProbInfo(iSpec)%ReactionProb = 0. - ALLOCATE(SurfChem%EventProbInfo(iSpec)%ProdAcc(SurfChem%EventProbInfo(iSpec)%NumOfReactionPaths)) - SurfChem%EventProbInfo(iSpec)%ProdAcc = -1. + ALLOCATE(SurfChem%EventProbInfo(iSpec)%ProdTransACC(SurfChem%EventProbInfo(iSpec)%NumOfReactionPaths)) + SurfChem%EventProbInfo(iSpec)%ProdTransACC = -1. END IF END DO @@ -463,16 +463,16 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() ReactionPathPerSpecies(SpecID) = ReactionPathPerSpecies(SpecID) + 1 SurfChem%EventProbInfo(SpecID)%ReactionIndex(ReactionPathPerSpecies(SpecID)) = iReac SurfChem%EventProbInfo(SpecID)%ReactionProb(ReactionPathPerSpecies(SpecID)) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-EventProbability') - SurfChem%EventProbInfo(SpecID)%ProdAcc(ReactionPathPerSpecies(SpecID)) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-ProductAccommodation') + SurfChem%EventProbInfo(SpecID)%ProdTransACC(ReactionPathPerSpecies(SpecID)) = GETREAL('Surface-Reaction'//TRIM(hilf)//'-ProductAccommodation') ! Sanity checks - IF(SurfChem%EventProbInfo(SpecID)%ProdAcc(ReactionPathPerSpecies(SpecID)).NE.-1.) THEN + IF(SurfChem%EventProbInfo(SpecID)%ProdTransACC(ReactionPathPerSpecies(SpecID)).NE.-1.) THEN ! If a reaction-specific accommodation coefficient is used, check if it is between 0 and 1 - IF ((SurfChem%EventProbInfo(SpecID)%ProdAcc(ReactionPathPerSpecies(SpecID)).LT.0.).OR. & - (SurfChem%EventProbInfo(SpecID)%ProdAcc(ReactionPathPerSpecies(SpecID)).GT.1.)) THEN + IF ((SurfChem%EventProbInfo(SpecID)%ProdTransACC(ReactionPathPerSpecies(SpecID)).LT.0.).OR. & + (SurfChem%EventProbInfo(SpecID)%ProdTransACC(ReactionPathPerSpecies(SpecID)).GT.1.)) THEN CALL abort(__STAMP__,'Reaction-specific thermal accommodation must be between 0 and 1 for reaction: ', IntInfoOpt=iReac) END IF ! If the reaction-specific accommodation coefficient is greater than 0, check if a wall temperature has been defined - IF(SurfChem%EventProbInfo(SpecID)%ProdAcc(ReactionPathPerSpecies(SpecID)).GT.0.) THEN + IF(SurfChem%EventProbInfo(SpecID)%ProdTransACC(ReactionPathPerSpecies(SpecID)).GT.0.) THEN DO iVal = 1, SurfChemReac(iReac)%NumOfBounds BCID = SurfChemReac(iReac)%Boundaries(iVal) IF(PartBound%WallTemp(BCID).EQ.0.) THEN @@ -1019,10 +1019,10 @@ SUBROUTINE SurfaceModelEventProbability(PartID,SideID,GlobalElemID,n_loc,PartPos IF(NumProd.GT.0) THEN CALL OrthoNormVec(n_loc,tang1,tang2) VeloSquare = DOTPRODUCT(PartState(4:6,PartID)) / NumProd - IF(SurfChem%EventProbInfo(SpecID)%ProdAcc(PathTodo).EQ.-1) THEN + IF(SurfChem%EventProbInfo(SpecID)%ProdTransACC(PathTodo).EQ.-1) THEN TransACC = PartBound%TransACC(locBCID) ELSE - TransACC = SurfChem%EventProbInfo(SpecID)%ProdAcc(PathTodo) + TransACC = SurfChem%EventProbInfo(SpecID)%ProdTransACC(PathTodo) END IF DO iProd = 1, NumProd ProdSpecID = SurfChemReac(ReacTodo)%Products(iProd) diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90 index 99aba600b..79ede1323 100644 --- a/src/particles/surfacemodel/surfacemodel_vars.f90 +++ b/src/particles/surfacemodel/surfacemodel_vars.f90 @@ -57,7 +57,7 @@ MODULE MOD_SurfaceModel_Vars END TYPE TYPE, EXTENDS(tCollCaseInfo) :: tEventProbInfo - REAL, ALLOCATABLE :: ProdAcc(:) ! Reaction-specific thermal accommodation + REAL, ALLOCATABLE :: ProdTransACC(:) ! Reaction-specific thermal accommodation END TYPE LOGICAL :: DoChemSurface ! Call the surface catalysis routines From 3ee995a11f1d69f662f27c3c6e63aed241c28fba Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 25 Mar 2024 23:37:59 +0100 Subject: [PATCH 199/222] Use new GetNextFreePosition routine during surfchem flux --- .../NIG_Reservoir/CAT_RATES_LH/DSMC.ini | 0 .../CAT_RATES_LH/PartAnalyze_ref.csv | 24 ++--- .../NIG_Reservoir/CAT_RATES_LH/hopr.ini | 0 .../NIG_Reservoir/CAT_RATES_LH/parameter.ini | 2 +- .../emission/particle_surface_chemflux.f90 | 93 +++++++------------ 5 files changed, 44 insertions(+), 75 deletions(-) mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CAT_RATES_LH/DSMC.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CAT_RATES_LH/hopr.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CAT_RATES_LH/parameter.ini diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/DSMC.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/DSMC.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/PartAnalyze_ref.csv b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/PartAnalyze_ref.csv index b8f4572a1..ec21a68e4 100644 --- a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/PartAnalyze_ref.csv +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/PartAnalyze_ref.csv @@ -1,12 +1,12 @@ -001-TIME,002-nPart-Spec-001,003-nPart-Spec-002,004-nPart-Spec-003,005-TempTra-001,006-TempTra-002,007-TempTra-003,008-TempVib001,009-TempVib002,010-XiVibMean001,011-XiVibMean002,012-TempRot001,013-TempRot002,014-TempTotal001,015-TempTotal002,016-TempTotal003,017-Pmean,018-Pmax,019-MeanFreePath -0.0000000000000000E+000,0.4141000000000000E+004,0.0000000000000000E+000,0.4141000000000000E+004,0.9899934937100466E+003,0.0000000000000000E+000,0.9899934937100466E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.9899934937100466E+003,0.0000000000000000E+000,0.9899934937100466E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.9999999999999985E-008,0.4141000000000000E+004,0.1200000000000000E+002,0.4153000000000000E+004,0.9894945817728972E+003,0.5541807375880298E+003,0.9882367522207135E+003,0.0000000000000000E+000,0.1167988152537970E+004,0.0000000000000000E+000,0.6486367163517712E+000,0.0000000000000000E+000,0.1429167829842992E+004,0.9894945817728972E+003,0.9344693485367619E+003,0.9893355876002910E+003,0.1396988223237172E-004,0.2405862598119430E-004,0.8189044609934687E-002 -0.1999999999999999E-007,0.4141000000000000E+004,0.2300000000000000E+002,0.4164000000000000E+004,0.9899319860759842E+003,0.1080713124613210E+004,0.9904334188777028E+003,0.0000000000000000E+000,0.1052473524954192E+004,0.0000000000000000E+000,0.5633437172226190E+000,0.0000000000000000E+000,0.1140773304425466E+004,0.9899319860759842E+003,0.1099444981546139E+004,0.9905368849462565E+003,0.1407681675226083E-004,0.2405110131303647E-004,0.8157780435805078E-002 -0.3000000000000008E-007,0.4141000000000000E+004,0.3500000000000000E+002,0.4176000000000000E+004,0.9899059557694612E+003,0.1105077095808921E+004,0.9908712311289875E+003,0.0000000000000000E+000,0.1092985762977481E+004,0.0000000000000000E+000,0.5941261547656689E+000,0.0000000000000000E+000,0.1378118497230075E+004,0.9899059557694612E+003,0.1201410108481880E+004,0.9916786198846276E+003,0.1397950729061824E-004,0.2763574444666942E-004,0.8123611823726676E-002 -0.4000000000000017E-007,0.4141000000000000E+004,0.4700000000000000E+002,0.4188000000000000E+004,0.9899567354920788E+003,0.1162117359913186E+004,0.9918888150880177E+003,0.0000000000000000E+000,0.1043271127736263E+004,0.0000000000000000E+000,0.5562210496146575E+000,0.0000000000000000E+000,0.1255063337960280E+004,0.9899567354920788E+003,0.1183676469786668E+004,0.9921307630737039E+003,0.1416673397816718E-004,0.2412845500940044E-004,0.8088375891741124E-002 -0.5000000000000026E-007,0.4141000000000000E+004,0.5900000000000000E+002,0.4200000000000000E+004,0.9897861194807703E+003,0.1257013807687416E+004,0.9935400322436732E+003,0.0000000000000000E+000,0.1069426583915809E+004,0.0000000000000000E+000,0.5763392753114951E+000,0.0000000000000000E+000,0.1202477741270706E+004,0.9897861194807703E+003,0.1218066030890333E+004,0.9929929087124760E+003,0.1428542474513852E-004,0.2581445914664975E-004,0.8054230046743162E-002 -0.6000000000000033E-007,0.4141000000000000E+004,0.6900000000000000E+002,0.4210000000000000E+004,0.9898533779944972E+003,0.1294370698612590E+004,0.9948442794488080E+003,0.0000000000000000E+000,0.1052473524954194E+004,0.0000000000000000E+000,0.5633437172226210E+000,0.0000000000000000E+000,0.1192661676331265E+004,0.9898533779944972E+003,0.1233312221045326E+004,0.9938435585575631E+003,0.1417263475526505E-004,0.2586664416634831E-004,0.8026245841074264E-002 -0.6999999999999975E-007,0.4141000000000000E+004,0.8100000000000000E+002,0.4222000000000000E+004,0.9899906053094475E+003,0.1318768690855853E+004,0.9962982853021663E+003,0.0000000000000000E+000,0.1029219913105938E+004,0.0000000000000000E+000,0.5452529416105713E+000,0.0000000000000000E+000,0.1247946787685591E+004,0.9899906053094475E+003,0.1264754720293598E+004,0.9952620153790155E+003,0.1426573783782728E-004,0.2699718188818483E-004,0.7993683037732770E-002 -0.7999999999999918E-007,0.4141000000000000E+004,0.9300000000000000E+002,0.4234000000000000E+004,0.9889916048618496E+003,0.1314033929203326E+004,0.9961311741022267E+003,0.0000000000000000E+000,0.1047830212600458E+004,0.0000000000000000E+000,0.5597557936437502E+000,0.0000000000000000E+000,0.1237680004097218E+004,0.9889916048618496E+003,0.1259765912033379E+004,0.9949391746698213E+003,0.1429380445452691E-004,0.2563555317515254E-004,0.7958043021189428E-002 -0.8999999999999861E-007,0.4141000000000000E+004,0.1060000000000000E+003,0.4247000000000000E+004,0.9897759606225814E+003,0.1300795510946644E+004,0.9975386336469163E+003,0.0000000000000000E+000,0.1088641126274868E+004,0.0000000000000000E+000,0.5908699088192092E+000,0.0000000000000000E+000,0.1184370007166909E+004,0.9897759606225814E+003,0.1236725579911220E+004,0.9959395254082173E+003,0.1439921885809115E-004,0.2457992150203433E-004,0.7922341332455023E-002 -0.1000000000000000E-006,0.4141000000000000E+004,0.1170000000000000E+003,0.4258000000000000E+004,0.9897899226199446E+003,0.1250683464814554E+004,0.9969586742490591E+003,0.0000000000000000E+000,0.1100828672184723E+004,0.0000000000000000E+000,0.5999769188070079E+000,0.0000000000000000E+000,0.1142186285662527E+004,0.9897899226199446E+003,0.1195878993384707E+004,0.9954527740242369E+003,0.1446658775903148E-004,0.2649822115294406E-004,0.7889842023967544E-002 +001-TIME,002-nPart-Spec-001,003-nPart-Spec-002,004-nPart-Spec-003,005-TempTra-001,006-TempTra-002,007-TempTra-003,008-TempVib001,009-TempVib002,010-XiVibMean001,011-XiVibMean002,012-TempRot001,013-TempRot002,014-TempTotal001,015-TempTotal002,016-TempTotal003 +0,4141,0,4141,989.993493710047,0,989.993493710047,0,0,0,0,0,0,989.993493710047,0,989.993493710047 +0.00000000999999999999999,4141,12,4153,989.494581772897,554.18073758803,988.236752220714,0,1167.98815253797,0,0.648636716351771,0,1429.16782984299,989.494581772897,934.469348536762,989.335587600291 +0.00000002,4141,23,4164,989.931986075984,1080.71312461321,990.433418877703,0,1052.47352495419,0,0.563343717222619,0,1140.77330442547,989.931986075984,1099.44498154614,990.536884946257 +0.0000000300000000000001,4141,35,4176,989.905955769461,1105.07709580892,990.871231128988,0,1092.98576297748,0,0.594126154765669,0,1378.11849723008,989.905955769461,1201.41010848188,991.678619884628 +0.0000000400000000000002,4141,47,4188,989.956735492079,1162.11735991319,991.888815088018,0,1043.27112773626,0,0.556221049614658,0,1255.06333796028,989.956735492079,1183.67646978667,992.130763073704 +0.0000000500000000000003,4141,59,4200,989.78611948077,1257.01380768742,993.540032243673,0,1069.42658391581,0,0.576339275311495,0,1202.47774127071,989.78611948077,1218.06603089033,992.992908712476 +0.0000000600000000000003,4141,69,4210,989.853377994497,1294.37069861259,994.844279448808,0,1052.47352495419,0,0.563343717222621,0,1192.66167633127,989.853377994497,1233.31222104533,993.843558557563 +0.0000000699999999999998,4141,81,4222,989.990605309448,1318.76869085585,996.298285302166,0,1029.21991310594,0,0.545252941610571,0,1247.94678768559,989.990605309448,1264.7547202936,995.262015379016 +0.0000000799999999999992,4141,93,4234,988.99160486185,1314.03392920333,996.131174102227,0,1047.83021260046,0,0.55975579364375,0,1237.68000409722,988.99160486185,1259.76591203338,994.939174669821 +0.0000000899999999999986,4141,106,4247,989.775960622581,1300.79551094664,997.538633646916,0,1088.64112627487,0,0.590869908819209,0,1184.37000716691,989.775960622581,1236.72557991122,995.939525408217 +0.0000001,4141,117,4258,989.789922619945,1250.68346481455,996.958674249059,0,1100.82867218472,0,0.599976918807008,0,1142.18628566253,989.789922619945,1195.87899338471,995.452774024237 diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/hopr.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/hopr.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/parameter.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/parameter.ini old mode 100755 new mode 100644 index 92224809d..05eddaff1 --- a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/parameter.ini +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/parameter.ini @@ -97,4 +97,4 @@ Part-TimeFracForSampling = 1.0 ManualTimeStep = 1.0E-10 Particles-DSMC-CalcSurfaceVal = T Particles-NumberForDSMCOutputs = 1 -Particles-DSMC-CalcQualityFactors = T +Particles-DSMC-CalcQualityFactors = F diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index b59dbc8ef..423aea4aa 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -42,22 +42,19 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Globals USE MOD_Particle_Vars USE MOD_Globals_Vars ,ONLY: PI, BoltzmannConst -USE MOD_part_tools ,ONLY: CalcRadWeightMPF -USE MOD_DSMC_Vars ,ONLY: useDSMC, CollisMode, RadialWeighting -USE MOD_Eval_xyz ,ONLY: GetPositionInRefElem +USE MOD_Part_Tools ,ONLY: CalcRadWeightMPF, GetNextFreePosition +USE MOD_DSMC_Vars ,ONLY: CollisMode, RadialWeighting USE MOD_Mesh_Vars ,ONLY: SideToElem, offsetElem USE MOD_Particle_Mesh_Vars ,ONLY: ElemMidPoint_Shared USE MOD_Mesh_Tools ,ONLY: GetCNElemID -USE MOD_Part_Tools ,ONLY: GetParticleWeight -USE MOD_Part_Emission_Tools ,ONLY: SetParticleChargeAndMass, SetParticleMPF +USE MOD_Part_Emission_Tools ,ONLY: SetParticleMPF USE MOD_Particle_Analyze_Vars ,ONLY: CalcPartBalance, nPartIn, PartEkinIn USE MOD_Particle_Analyze_Tools ,ONLY: CalcEkinPart USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID USE MOD_Timedisc_Vars ,ONLY: dt USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, SurfFluxSideSize USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, SurfSideArea_Shared -USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win, SurfChem, SurfChemReac, ChemWallProp, ChemDesorpWall -USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win, SurfChem, SurfChemReac, ChemWallProp, ChemDesorpWall USE MOD_Particle_SurfFlux ,ONLY: SetSurfacefluxVelocities, CalcPartPosTriaSurface, DefineSideDirectVec2D USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr #if USE_MPI @@ -80,7 +77,7 @@ SUBROUTINE ParticleSurfChemFlux() !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES ! Local variable declaration -INTEGER :: iSpec , PositionNbr, iSF, iSide, SideID, NbrOfParticle, ParticleIndexNbr +INTEGER :: iSpec , iSF, iSide, SideID, NbrOfParticle, PartID INTEGER :: BCSideID, ElemID, iLocSide, iSample, jSample, PartInsSubSide, iPart, iPartTotal INTEGER :: PartsEmitted, Node1, Node2, globElemId, CNElemID REAL :: xyzNod(3), Vector1(3), Vector2(3), ndist(3), midpoint(3), RVec(2), minPos(2) @@ -116,12 +113,6 @@ SUBROUTINE ParticleSurfChemFlux() SideID=GetGlobalNonUniqueSideID(globElemId,iLocSide) SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) - IF (RadialWeighting%DoRadialWeighting) THEN - SurfElemMPF = CalcRadWeightMPF(ElemMidPoint_Shared(2,CNElemID), iSpec, ElemID) - ELSE - SurfElemMPF = Species(1)%MacroParticleFactor - END IF - IF (SurfSideID.LT.1) CALL abort(__STAMP__,'Chemical Surface Flux is not allowed on non-sampling sides!') WallTemp = PartBound%WallTemp(BoundID) ! Boundary temperature @@ -397,11 +388,14 @@ SUBROUTINE ParticleSurfChemFlux() ! 3.) Insert the product species into the gas phase by a surface flux from the boundary DO iSpec = 1, nSpecies - #if USE_LOADBALANCE CALL LBStartTime(tLBStart) #endif /*USE_LOADBALANCE*/ - + IF (RadialWeighting%DoRadialWeighting) THEN + SurfElemMPF = CalcRadWeightMPF(ElemMidPoint_Shared(2,CNElemID), iSpec, ElemID) + ELSE + SurfElemMPF = Species(iSpec)%MacroParticleFactor + END IF IF (INT(ChemDesorpWall(iSpec,1, SubP, SubQ, SurfSideID)/SurfElemMPF).GE.1) THEN ! Define the necessary variables @@ -425,32 +419,31 @@ SUBROUTINE ParticleSurfChemFlux() NbrOfParticle = NbrOfParticle + PartInsSubSide !-- Fill Particle Informations (PartState, Partelem, etc.) - ParticleIndexNbr = 1 DO iPart=1,PartInsSubSide - IF ((iPart.EQ.1).OR.PDM%ParticleInside(ParticleIndexNbr)) THEN - ParticleIndexNbr = PDM%nextFreePosition(iPartTotal + 1 + PDM%CurrentNextFreePosition) - END IF - IF (ParticleIndexNbr .ne. 0) THEN - IF(Symmetry%Axisymmetric) THEN - PartState(1:3,ParticleIndexNbr) = CalcPartPosAxisym(minPos, RVec) - ELSE - PartState(1:3,ParticleIndexNbr) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) - END IF - LastPartPos(1:3,ParticleIndexNbr)=PartState(1:3,ParticleIndexNbr) - PDM%ParticleInside(ParticleIndexNbr) = .TRUE. - PDM%dtFracPush(ParticleIndexNbr) = .TRUE. - PDM%IsNewPart(ParticleIndexNbr) = .TRUE. - PEM%GlobalElemID(ParticleIndexNbr) = globElemId - PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId - iPartTotal = iPartTotal + 1 - IF(usevMPF)THEN - PartMPF(ParticleIndexNbr) = SurfElemMPF - END IF ! usevMPF + PartID = GetNextFreePosition() + IF(Symmetry%Axisymmetric) THEN + PartState(1:3,PartID) = CalcPartPosAxisym(minPos, RVec) ELSE - CALL abort(__STAMP__,'ERROR in ParticleSurfChemFlux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?') + PartState(1:3,PartID) = CalcPartPosTriaSurface(xyzNod, Vector1, Vector2, ndist, midpoint) END IF + PartSpecies(PartID) = iSpec + LastPartPos(1:3,PartID)=PartState(1:3,PartID) + IF(CollisMode.GT.1) CALL DSMC_SetInternalEnr(iSpec, BoundID, PartID, 3) + PDM%ParticleInside(PartID) = .TRUE. + PDM%dtFracPush(PartID) = .TRUE. + PDM%IsNewPart(PartID) = .TRUE. + PEM%GlobalElemID(PartID) = globElemId + PEM%LastGlobalElemID(PartID) = globElemId + iPartTotal = iPartTotal + 1 + IF(usevMPF)THEN + PartMPF(PartID) = SurfElemMPF + END IF ! usevMPF + IF(CalcPartBalance) THEN + ! Compute number of input particles and energy + nPartIn(iSpec) = nPartIn(iSpec) + 1 + PartEkinIn(iSpec) = PartEkinIn(iSpec)+CalcEkinPart(PartID) + END IF ! CalcPartBalance END DO - CALL SetSurfacefluxVelocities(2,iSpec,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) PartsEmitted = PartsEmitted + PartInsSubSide #if USE_LOADBALANCE @@ -463,30 +456,6 @@ SUBROUTINE ParticleSurfChemFlux() #endif /*USE_LOADBALANCE*/ END IF ! iSide IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'ERROR in ParticleSurfChemFlux: NbrOfParticle.NE.iPartTotal') - - ! Set the particle properties - CALL SetParticleChargeAndMass(iSpec,NbrOfParticle) - - IF (usevMPF.AND.(.NOT.RadialWeighting%DoRadialWeighting)) CALL SetParticleMPF(iSpec,-1,NbrOfParticle) - - IF (useDSMC.AND.(CollisMode.GT.1)) THEN - DO iPart = 1,NbrOfParticle - PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) - IF (PositionNbr .NE. 0) CALL DSMC_SetInternalEnr(iSpec, BoundID, PositionNbr, 3) - END DO - END IF - - IF(CalcPartBalance) THEN - ! Compute number of input particles and energy - nPartIn(iSpec)=nPartIn(iSpec) + NBrofParticle - - DO iPart=1,NbrOfparticle - PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition) - IF (PositionNbr .ne. 0) PartEkinIn(PartSpecies(PositionNbr))= & - PartEkinIn(PartSpecies(PositionNbr))+CalcEkinPart(PositionNbr) - END DO ! iPart - END IF ! CalcPartBalance - PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle #if USE_LOADBALANCE From 11e78b50f62932ca38e69612297930f89cd0b29d Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 25 Mar 2024 23:48:36 +0100 Subject: [PATCH 200/222] Use SurfSideArea in case of MPI=OFF in ParticleSurfChemFlux --- src/particles/boundary/particle_boundary_sampling.f90 | 6 ++---- src/particles/emission/particle_surface_chemflux.f90 | 9 +++++---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index efa78f89f..815fb9b13 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -476,20 +476,19 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) USE MOD_Restart_Vars ,ONLY: RestartTime USE MOD_TimeDisc_Vars ,ONLY: TEnd USE MOD_Timedisc_Vars ,ONLY: time,dt +USE MOD_Particle_Boundary_vars ,ONLY: SurfSideArea #if USE_MPI USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SURF, MPI_COMM_SHARED USE MOD_Particle_Boundary_Vars ,ONLY: SampWallPumpCapacity_Shared USE MOD_Particle_Boundary_vars ,ONLY: SampWallState_Shared,SampWallImpactNumber_Shared,SampWallImpactEnergy_Shared USE MOD_Particle_Boundary_vars ,ONLY: SampWallImpactVector_Shared,SampWallImpactAngle_Shared -USE MOD_Particle_Boundary_vars ,ONLY: SurfSideArea_Shared USE MOD_Particle_MPI_Boundary_Sampling,ONLY: ExchangeSurfData USE MOD_Particle_Boundary_Vars ,ONLY: BoundaryWallTemp_Shared_Win #else USE MOD_Particle_Boundary_Vars ,ONLY: SampWallPumpCapacity USE MOD_Particle_Boundary_vars ,ONLY: SampWallState,SampWallImpactNumber,SampWallImpactEnergy USE MOD_Particle_Boundary_vars ,ONLY: SampWallImpactVector,SampWallImpactAngle -USE MOD_Particle_Boundary_vars ,ONLY: SurfSideArea #endif ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -553,8 +552,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) SampWallImpactEnergy => SampWallImpactEnergy_Shared ,& SampWallImpactVector => SampWallImpactVector_Shared ,& SampWallImpactAngle => SampWallImpactAngle_Shared ,& - SampWallPumpCapacity => SampWallPumpCapacity_Shared ,& - SurfSideArea => SurfSideArea_Shared) + SampWallPumpCapacity => SampWallPumpCapacity_Shared) #endif OutputCounter = 0 diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index 423aea4aa..ba0f370a3 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -53,13 +53,14 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID USE MOD_Timedisc_Vars ,ONLY: dt USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, SurfFluxSideSize -USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, SurfSideArea_Shared -USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win, SurfChem, SurfChemReac, ChemWallProp, ChemDesorpWall +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, SurfSideArea +USE MOD_SurfaceModel_Vars ,ONLY: SurfChem, SurfChemReac, ChemWallProp, ChemDesorpWall USE MOD_Particle_SurfFlux ,ONLY: SetSurfacefluxVelocities, CalcPartPosTriaSurface, DefineSideDirectVec2D USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr #if USE_MPI USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win #endif !#if defined(IMPA) || defined(ROS) USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo @@ -117,7 +118,7 @@ SUBROUTINE ParticleSurfChemFlux() WallTemp = PartBound%WallTemp(BoundID) ! Boundary temperature - Area = SurfSideArea_Shared(SubP, SubQ,SurfSideID) + Area = SurfSideArea(SubP, SubQ,SurfSideID) IF(PartBound%LatticeVec(BoundID).GT.0.) THEN ! Absolute number of surface molecules in dependence of the occupancy of the unit cell SurfMol = PartBound%MolPerUnitCell(BoundID) * Area & @@ -477,7 +478,7 @@ SUBROUTINE ParticleSurfChemFlux() END DO !iSF #if USE_MPI - CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win,MPI_COMM_SHARED) +CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win,MPI_COMM_SHARED) #endif END SUBROUTINE ParticleSurfChemFlux From e93e03afe7f17d55df16be115ef970635fc91129 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Fri, 29 Mar 2024 18:15:30 +0100 Subject: [PATCH 201/222] Check the node offset times 3 to avoid an integer overflow during MPI_IALLGATHERV --- src/particles/particle_mesh/particle_mesh_readin.f90 | 1 + 1 file changed, 1 insertion(+) diff --git a/src/particles/particle_mesh/particle_mesh_readin.f90 b/src/particles/particle_mesh/particle_mesh_readin.f90 index ee66383fc..d7ba091a8 100644 --- a/src/particles/particle_mesh/particle_mesh_readin.f90 +++ b/src/particles/particle_mesh/particle_mesh_readin.f90 @@ -255,6 +255,7 @@ SUBROUTINE StartCommunicateMeshReadin() CALL MPI_ALLGATHER(MPI_IN_PLACE,0,MPI_DATATYPE_NULL,displsNode,1,MPI_INTEGER,MPI_COMM_LEADERS_SHARED,IERROR) DO iProc=1,nLeaderGroupProcs-1 recvcountNode(iProc-1) = displsNode(iProc)-displsNode(iProc-1) + CHECKSAFEINT(3_8*INT(displsNode(iProc),8),4) END DO recvcountNode(nLeaderGroupProcs-1) = nNonUniqueGlobalNodes - displsNode(nLeaderGroupProcs-1) From 7712063c10012c7ef5ffcb783d03fd200ce26783 Mon Sep 17 00:00:00 2001 From: Patrick Kopper Date: Tue, 2 Apr 2024 10:17:59 +0200 Subject: [PATCH 202/222] Only search for HDF5 (configure) after HDF5 (cmake) failed --- CMakeListsLib.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/CMakeListsLib.txt b/CMakeListsLib.txt index 462e1289d..ba1928322 100644 --- a/CMakeListsLib.txt +++ b/CMakeListsLib.txt @@ -118,9 +118,11 @@ ENDIF() # Try to find system HDF5 using CMake SET(LIBS_HDF5_CMAKE TRUE) FIND_PACKAGE(HDF5 NAMES hdf5 COMPONENTS C Fortran ${SEARCH_TYPE} QUIET PATH_SUFFIXES share/cmake) +IF (NOT HDF5_FOUND) # Try to find the configure version -SET(LIBS_HDF5_CMAKE FALSE) -FIND_PACKAGE(HDF5 COMPONENTS C Fortran QUIET) + SET(LIBS_HDF5_CMAKE FALSE) + FIND_PACKAGE(HDF5 COMPONENTS C Fortran QUIET) +ENDIF() # Hide all the HDF5 libs paths MARK_AS_ADVANCED(FORCE HDF5_DIR) # CMake version found @@ -691,4 +693,4 @@ IF(PICLAS_PETSC) ENDIF() ELSE() ADD_DEFINITIONS(-DUSE_PETSC=0) -ENDIF(PICLAS_PETSC) +ENDIF(PICLAS_PETSC) \ No newline at end of file From 5c22963d765addc5477c9ab5fab161d0f6e7d1fb Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Wed, 3 Apr 2024 17:31:25 +0200 Subject: [PATCH 203/222] Fixed compilation with MPI=OFF --- .../boundary/particle_boundary_init.f90 | 3 ++- .../emission/particle_surface_chemflux.f90 | 16 +++++++++++----- src/particles/particle_mesh/particle_mesh.f90 | 5 +---- .../particle_mesh/particle_mesh_tools.f90 | 1 - .../particle_mpi_boundary_sampling.f90 | 6 +++--- src/particles/restart/particle_restart.f90 | 4 ++-- .../surfacemodel/surfacemodel_chemistry.f90 | 8 ++++---- src/timedisc/timedisc_TimeStep_BGK.f90 | 2 ++ src/timedisc/timedisc_TimeStep_DSMC.f90 | 2 ++ src/timedisc/timedisc_TimeStep_FPFlow.f90 | 2 ++ 10 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/particles/boundary/particle_boundary_init.f90 b/src/particles/boundary/particle_boundary_init.f90 index 0c256750c..afce0706b 100644 --- a/src/particles/boundary/particle_boundary_init.f90 +++ b/src/particles/boundary/particle_boundary_init.f90 @@ -697,9 +697,10 @@ SUBROUTINE InitParticleBoundarySurfSides() INTEGER :: sendbuf,recvbuf INTEGER :: NbGlobalElemID, NbElemRank, NbLeaderID, nSurfSidesTmp INTEGER :: color +LOGICAL :: BCOnNode #endif /*USE_MPI*/ INTEGER :: NbGlobalSideID,PartBoundCondition -LOGICAL :: BCOnNode,ReflectiveOrOpenBCFound +LOGICAL :: ReflectiveOrOpenBCFound !=================================================================================================================================== LBWRITE(UNIT_stdOut,'(A)') ' INIT SURFACE SIDES ...' diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index ba0f370a3..8471a261f 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -525,14 +525,20 @@ SUBROUTINE ParticleSurfDiffusion() ! Modules USE MOD_Globals USE MOD_Particle_Vars -USE MOD_MPI_Shared_Vars ,ONLY: myComputeNodeRank, nComputeNodeProcessors USE MOD_Mesh_Vars ,ONLY: SideToElem, offsetElem USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF -USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide, nComputeNodeSurfTotalSides -USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win, SurfChem, ChemWallProp -USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED -USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC +USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide +USE MOD_SurfaceModel_Vars ,ONLY: SurfChem, ChemWallProp +#if USE_MPI +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win +USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfTotalSides +USE MOD_MPI_Shared_Vars ,ONLY: myComputeNodeRank, nComputeNodeProcessors +USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED +USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC +#else +USE MOD_Particle_Boundary_Vars ,ONLY: nGlobalSurfSides +#endif /*USE_MPI*/ !#if defined(IMPA) || defined(ROS) USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo !#endif /*IMPA*/ diff --git a/src/particles/particle_mesh/particle_mesh.f90 b/src/particles/particle_mesh/particle_mesh.f90 index 5dbdc1fd5..87ee029ff 100644 --- a/src/particles/particle_mesh/particle_mesh.f90 +++ b/src/particles/particle_mesh/particle_mesh.f90 @@ -211,9 +211,6 @@ SUBROUTINE InitParticleMesh() INTEGER :: RefMappingGuessProposal INTEGER :: iSample CHARACTER(LEN=2) :: tmpStr -#if !USE_MPI -INTEGER :: ALLOCSTAT -#endif #ifdef CODE_ANALYZE ! TODO ! REAL :: dx,dy,dz @@ -487,8 +484,8 @@ SUBROUTINE FinalizeParticleMesh() ! MODULES USE MOD_Globals USE MOD_Particle_Mesh_Vars -USE MOD_RayTracing_Vars ,ONLY: UseRayTracing #if USE_MPI +USE MOD_RayTracing_Vars ,ONLY: UseRayTracing USE MOD_Particle_Surfaces_Vars ,ONLY: BezierElevation USE MOD_PICDepo_Vars ,ONLY: DepositionType USE MOD_PICInterpolation_Vars ,ONLY: DoInterpolation diff --git a/src/particles/particle_mesh/particle_mesh_tools.f90 b/src/particles/particle_mesh/particle_mesh_tools.f90 index c33519d3d..da49be193 100644 --- a/src/particles/particle_mesh/particle_mesh_tools.f90 +++ b/src/particles/particle_mesh/particle_mesh_tools.f90 @@ -574,7 +574,6 @@ SUBROUTINE GetMeshMinMax() USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod #if USE_MPI USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED,MPI_COMM_LEADERS_SHARED,myComputeNodeRank -USE MOD_Particle_Mesh_Vars ,ONLY: offsetComputeNodeNode,nComputeNodeNodes #endif /*USE_MPI*/ #if USE_LOADBALANCE USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance diff --git a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 index 71bd252de..009047183 100644 --- a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 +++ b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 @@ -412,7 +412,7 @@ SUBROUTINE ExchangeChemSurfData() USE MOD_Particle_Vars ,ONLY: nSpecies USE MOD_SurfaceModel_Vars ,ONLY: ChemSampWall, ChemSampWall_Shared, ChemSampWall_Shared_Win USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp, ChemWallProp_Shared, ChemWallProp_Shared_Win -USE MOD_Particle_Boundary_vars ,ONLY: SurfSideArea_Shared, SurfSide2GlobalSide +USE MOD_Particle_Boundary_vars ,ONLY: SurfSideArea, SurfSide2GlobalSide USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -579,11 +579,11 @@ SUBROUTINE ExchangeChemSurfData() IF (PartBound%LatticeVec(locBCID).GT.0.) THEN ! update the surface coverage (direct calculation of the number of surface atoms) ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall(iSpec,1,:,:,iSide) * PartBound%LatticeVec(locBCID)* & - PartBound%LatticeVec(locBCID)/(PartBound%MolPerUnitCell(locBCID)*SurfSideArea_Shared(:,:,iSide)) + PartBound%LatticeVec(locBCID)/(PartBound%MolPerUnitCell(locBCID)*SurfSideArea(:,:,iSide)) ELSE ! update the surface coverage (calculation with a surface monolayer) ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall(iSpec,1,:,:,iSide) / & - (10.**(19)*SurfSideArea_Shared(:,:,iSide)) + (10.**(19)*SurfSideArea(:,:,iSide)) END IF ! calculate the heat flux on the surface subside ChemWallProp(iSpec,2,:,:,iSide) = ChemWallProp(iSpec,2,:,:,iSide) + ChemSampWall(iSpec,2,:,:,iSide) diff --git a/src/particles/restart/particle_restart.f90 b/src/particles/restart/particle_restart.f90 index e58322e33..f788c8970 100644 --- a/src/particles/restart/particle_restart.f90 +++ b/src/particles/restart/particle_restart.f90 @@ -945,7 +945,7 @@ SUBROUTINE CatalyticRestart() USE MOD_HDF5_Input ,ONLY: HSize,File_ID,GetDataProps USE MOD_Restart_Vars ,ONLY: CatalyticFileName USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp -USE MOD_Particle_Boundary_Vars ,ONLY: SurfSideArea_Shared +USE MOD_Particle_Boundary_Vars ,ONLY: SurfSideArea USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfSides, offsetComputeNodeSurfSide USE MOD_Particle_Vars ,ONLY: nSpecies ! IMPLICIT VARIABLE HANDLING @@ -1010,7 +1010,7 @@ SUBROUTINE CatalyticRestart() ChemWallProp(iSpec,1,1,1,iSide) = SurfData(iSpec,ReadInSide) END DO ! Heat flux on the surface element - ChemWallProp(1,2,1,1,iSide) = SurfData(nSpecies+1,ReadInSide)*OutputTime*SurfSideArea_Shared(1,1,iSide) + ChemWallProp(1,2,1,1,iSide) = SurfData(nSpecies+1,ReadInSide)*OutputTime*SurfSideArea(1,1,iSide) END DO SDEALLOCATE(VarNamesSurf_HDF5) diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index 2d82638d1..1178329d1 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -599,7 +599,7 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) USE MOD_Globals_Vars ,ONLY: PI, BoltzmannConst USE MOD_Particle_Vars ,ONLY: PartSpecies,Species,usevMPF, WriteMacroSurfaceValues USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo -USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, SurfSideArea_Shared +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, SurfSideArea USE MOD_SurfaceModel_Vars ,ONLY: SurfChem, SurfChemReac , ChemWallProp, ChemSampWall USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared, BoundsOfElem_Shared USE MOD_DSMC_Vars ,ONLY: DSMC, RadialWeighting, SamplingActive @@ -658,11 +658,11 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) IF(PartBound%LatticeVec(locBCID).GT.0.) THEN ! Number of surface molecules in dependence of the occupancy of the unit cell - SurfMol = PartBound%MolPerUnitCell(locBCID) * SurfSideArea_Shared(SubP, SubQ,SurfSideID) & + SurfMol = PartBound%MolPerUnitCell(locBCID) * SurfSideArea(SubP, SubQ,SurfSideID) & /(PartBound%LatticeVec(locBCID)*PartBound%LatticeVec(locBCID)) ELSE ! Alternative calculation by the average number of surface molecules per area for a monolayer - SurfMol = 10.**19 * SurfSideArea_Shared(SubP, SubQ,SurfSideID) + SurfMol = 10.**19 * SurfSideArea(SubP, SubQ,SurfSideID) END IF ! LatticeVec.GT.0 DO iReac = 1, SurfChem%NumOfReact @@ -762,7 +762,7 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) AdCountIter = ChemSampWall(speciesID, 1,SubP,SubQ, SurfSideID) END IF ! Absolute particle density of the element - AdsDens = Coverage * SurfMol / SurfSideArea_Shared(SubP, SubQ,SurfSideID) + AdsDens = Coverage * SurfMol / SurfSideArea(SubP, SubQ,SurfSideID) ! Determine the reaction heat in dependence of the coverage [J] ReacHeat = (SurfChemReac(iReac)%EReact - Coverage * SurfChemReac(iReac)%EScale) * BoltzmannConst diff --git a/src/timedisc/timedisc_TimeStep_BGK.f90 b/src/timedisc/timedisc_TimeStep_BGK.f90 index 551b319b6..2abd4efb8 100644 --- a/src/timedisc/timedisc_TimeStep_BGK.f90 +++ b/src/timedisc/timedisc_TimeStep_BGK.f90 @@ -82,7 +82,9 @@ SUBROUTINE TimeStep_BGK() END IF IF (DoChemSurface) THEN +#if USE_MPI CALL ExchangeChemSurfData() +#endif /*USE_MPI*/ IF (time.GT.0.0) THEN CALL ParticleSurfChemFlux() CALL ParticleSurfDiffusion() diff --git a/src/timedisc/timedisc_TimeStep_DSMC.f90 b/src/timedisc/timedisc_TimeStep_DSMC.f90 index 2ef72f226..73b551c80 100644 --- a/src/timedisc/timedisc_TimeStep_DSMC.f90 +++ b/src/timedisc/timedisc_TimeStep_DSMC.f90 @@ -106,7 +106,9 @@ SUBROUTINE TimeStep_DSMC() END IF IF (DoChemSurface) THEN +#if USE_MPI CALL ExchangeChemSurfData() +#endif /*USE_MPI*/ IF (time.GT.0.0) THEN CALL ParticleSurfChemFlux() diff --git a/src/timedisc/timedisc_TimeStep_FPFlow.f90 b/src/timedisc/timedisc_TimeStep_FPFlow.f90 index 4d0a79871..c4bc38671 100644 --- a/src/timedisc/timedisc_TimeStep_FPFlow.f90 +++ b/src/timedisc/timedisc_TimeStep_FPFlow.f90 @@ -70,7 +70,9 @@ SUBROUTINE TimeStep_FPFlow() END IF IF (DoChemSurface) THEN +#if USE_MPI CALL ExchangeChemSurfData() +#endif /*USE_MPI*/ IF (time.GT.0.0) THEN CALL ParticleSurfChemFlux() CALL ParticleSurfDiffusion() From ba8211f89f2859561905ee5b6623162c1e1b0ab5 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Wed, 3 Apr 2024 16:54:06 +0200 Subject: [PATCH 204/222] Use MPI_STRUCT to avoid integer overflow in StartCommunicateMeshReadin --- src/mpi/mpi_shared_vars.f90 | 1 + .../particle_mesh/particle_mesh_readin.f90 | 43 ++++++++++++++----- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/src/mpi/mpi_shared_vars.f90 b/src/mpi/mpi_shared_vars.f90 index 9bd9f7828..87ed74508 100644 --- a/src/mpi/mpi_shared_vars.f90 +++ b/src/mpi/mpi_shared_vars.f90 @@ -56,6 +56,7 @@ MODULE MOD_MPI_Shared_Vars INTEGER,ALLOCATABLE:: displsElem(:),recvcountElem(:) INTEGER,ALLOCATABLE:: displsSide(:),recvcountSide(:) INTEGER,ALLOCATABLE:: displsNode(:),recvcountNode(:) +INTEGER :: MPI_STRUCT_ELEM,MPI_STRUCT_SIDE,MPI_STRUCT_NODE #endif /*USE_MPI*/ ! Surface sampling diff --git a/src/particles/particle_mesh/particle_mesh_readin.f90 b/src/particles/particle_mesh/particle_mesh_readin.f90 index d7ba091a8..8c326523d 100644 --- a/src/particles/particle_mesh/particle_mesh_readin.f90 +++ b/src/particles/particle_mesh/particle_mesh_readin.f90 @@ -145,6 +145,8 @@ SUBROUTINE StartCommunicateMeshReadin() #if USE_MPI INTEGER :: iProc INTEGER :: offsetNodeID!,nNodeIDs +INTEGER :: MPI_LENGTH(1),MPI_TYPE(1) +INTEGER(KIND=MPI_ADDRESS_KIND) :: MPI_DISPLACEMENT(1) #endif /*USE_MPI*/ !=================================================================================================================================== @@ -255,20 +257,38 @@ SUBROUTINE StartCommunicateMeshReadin() CALL MPI_ALLGATHER(MPI_IN_PLACE,0,MPI_DATATYPE_NULL,displsNode,1,MPI_INTEGER,MPI_COMM_LEADERS_SHARED,IERROR) DO iProc=1,nLeaderGroupProcs-1 recvcountNode(iProc-1) = displsNode(iProc)-displsNode(iProc-1) - CHECKSAFEINT(3_8*INT(displsNode(iProc),8),4) END DO recvcountNode(nLeaderGroupProcs-1) = nNonUniqueGlobalNodes - displsNode(nLeaderGroupProcs-1) ! Gather mesh information in a non-blocking way ALLOCATE(MPI_COMM_LEADERS_REQUEST(1:4)) - CALL MPI_IALLGATHERV(MPI_IN_PLACE,0,MPI_DATATYPE_NULL,ElemInfo_Shared,ELEMINFOSIZE *recvcountElem & - ,ELEMINFOSIZE*displsElem ,MPI_INTEGER ,MPI_COMM_LEADERS_SHARED,MPI_COMM_LEADERS_REQUEST(1),IERROR) - CALL MPI_IALLGATHERV(MPI_IN_PLACE,0,MPI_DATATYPE_NULL,SideInfo_Shared,(SIDEINFOSIZE+1)*recvcountSide & - ,(SIDEINFOSIZE+1)*displsSide ,MPI_INTEGER ,MPI_COMM_LEADERS_SHARED,MPI_COMM_LEADERS_REQUEST(2),IERROR) + ! ElemInfo_Shared + MPI_LENGTH = ELEMINFOSIZE + MPI_DISPLACEMENT = 0 ! 0*SIZEOF(MPI_SIZE) + MPI_TYPE = MPI_INTEGER + CALL MPI_TYPE_CREATE_STRUCT(1,MPI_LENGTH,MPI_DISPLACEMENT,MPI_TYPE,MPI_STRUCT_ELEM,iError) + CALL MPI_TYPE_COMMIT(MPI_STRUCT_ELEM,iError) + CALL MPI_IALLGATHERV(MPI_IN_PLACE,0,MPI_DATATYPE_NULL,ElemInfo_Shared,recvcountElem & + ,displsElem ,MPI_STRUCT_ELEM ,MPI_COMM_LEADERS_SHARED,MPI_COMM_LEADERS_REQUEST(1),IERROR) + ! SideInfo_Shared + MPI_LENGTH = SIDEINFOSIZE+1 + MPI_DISPLACEMENT = 0 ! 0*SIZEOF(MPI_SIZE) + MPI_TYPE = MPI_INTEGER + CALL MPI_TYPE_CREATE_STRUCT(1,MPI_LENGTH,MPI_DISPLACEMENT,MPI_TYPE,MPI_STRUCT_SIDE,iError) + CALL MPI_TYPE_COMMIT(MPI_STRUCT_SIDE,iError) + CALL MPI_IALLGATHERV(MPI_IN_PLACE,0,MPI_DATATYPE_NULL,SideInfo_Shared, recvcountSide & + ,displsSide ,MPI_STRUCT_SIDE ,MPI_COMM_LEADERS_SHARED,MPI_COMM_LEADERS_REQUEST(2),IERROR) + ! NodeInfo_Shared CALL MPI_IALLGATHERV(MPI_IN_PLACE,0,MPI_DATATYPE_NULL,NodeInfo_Shared, recvcountNode & - ,displsNode ,MPI_INTEGER ,MPI_COMM_LEADERS_SHARED,MPI_COMM_LEADERS_REQUEST(3),IERROR) - CALL MPI_IALLGATHERV(MPI_IN_PLACE,0,MPI_DATATYPE_NULL,NodeCoords_Shared,3 *recvcountNode & - ,3*displsNode ,MPI_DOUBLE_PRECISION,MPI_COMM_LEADERS_SHARED,MPI_COMM_LEADERS_REQUEST(4),IERROR) + ,displsNode ,MPI_INTEGER ,MPI_COMM_LEADERS_SHARED,MPI_COMM_LEADERS_REQUEST(3),IERROR) + ! NodeCoords_Shared + MPI_LENGTH = 3 + MPI_DISPLACEMENT = 0 ! 0*SIZEOF(MPI_SIZE) + MPI_TYPE = MPI_DOUBLE_PRECISION + CALL MPI_TYPE_CREATE_STRUCT(1,MPI_LENGTH,MPI_DISPLACEMENT,MPI_TYPE,MPI_STRUCT_NODE,iError) + CALL MPI_TYPE_COMMIT(MPI_STRUCT_NODE,iError) + CALL MPI_IALLGATHERV(MPI_IN_PLACE,0,MPI_DATATYPE_NULL,NodeCoords_Shared,recvcountNode & + ,displsNode ,MPI_STRUCT_NODE ,MPI_COMM_LEADERS_SHARED,MPI_COMM_LEADERS_REQUEST(4),IERROR) END IF #endif /*USE_MPI*/ @@ -398,8 +418,11 @@ SUBROUTINE FinishCommunicateMeshReadin() CALL BARRIER_AND_SYNC(SideInfo_Shared_Win,MPI_COMM_SHARED) IF (myComputeNodeRank.EQ.0) THEN - CALL MPI_ALLGATHERV(MPI_IN_PLACE,0,MPI_DATATYPE_NULL,SideInfo_Shared,(SIDEINFOSIZE+1)*recvcountSide & - ,(SIDEINFOSIZE+1)*displsSide,MPI_INTEGER ,MPI_COMM_LEADERS_SHARED,IERROR) + CALL MPI_ALLGATHERV(MPI_IN_PLACE,0,MPI_DATATYPE_NULL,SideInfo_Shared,recvcountSide & + ,displsSide,MPI_STRUCT_SIDE ,MPI_COMM_LEADERS_SHARED,IERROR) + CALL MPI_TYPE_FREE(MPI_STRUCT_ELEM,iError) + CALL MPI_TYPE_FREE(MPI_STRUCT_SIDE,iError) + CALL MPI_TYPE_FREE(MPI_STRUCT_NODE,iError) END IF ! Write compute-node local SIDE_NBELEMTYPE From 6ff02857bfbc2ce9f1e87f63dbfeeb4c8d9ea374 Mon Sep 17 00:00:00 2001 From: Patrick Kopper Date: Thu, 4 Apr 2024 09:29:14 +0200 Subject: [PATCH 205/222] MatrixInverse unittest not compatible with PIC when compiling with OpenBLAS --- CMakeListsLib.txt | 2 +- CMakeListsMachine.txt | 2 +- unitTests/CMakeLists.txt | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CMakeListsLib.txt b/CMakeListsLib.txt index ba1928322..5d2386c27 100644 --- a/CMakeListsLib.txt +++ b/CMakeListsLib.txt @@ -616,7 +616,7 @@ ENDIF() # # IF(LIBS_USE_OPENMP) # IF ("${CMAKE_VERSION}" VERSION_LESS 3.1.0) -# MESSAGE(WARNING "For finding OpenMP Fortran flags at least CMake version 3.1.0 is # required. Please specify flags manually or use newer CMake version.") +# MESSAGE(WARNING "For finding OpenMP Fortran flags at least CMake version 3.1.0 is required. Please specify flags manually or use newer CMake version.") # ENDIF() # # If library is specifically requested, it is required # FIND_PACKAGE(OpenMP REQUIRED) diff --git a/CMakeListsMachine.txt b/CMakeListsMachine.txt index c100e29cf..d889d0f7e 100644 --- a/CMakeListsMachine.txt +++ b/CMakeListsMachine.txt @@ -339,4 +339,4 @@ SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}" CACHE STRIN SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE}" CACHE STRING "Release compiler flags" FORCE) SET(CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE}" CACHE STRING "Profile compiler flags" FORCE) SET(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG}" CACHE STRING "Debug compiler flags" FORCE) -SET(CMAKE_Fortran_FLAGS_SANITIZE "${CMAKE_Fortran_FLAGS_SANITIZE}" CACHE STRING "Sanitize compiler flags" FORCE) +SET(CMAKE_Fortran_FLAGS_SANITIZE "${CMAKE_Fortran_FLAGS_SANITIZE}" CACHE STRING "Sanitize compiler flags" FORCE) \ No newline at end of file diff --git a/unitTests/CMakeLists.txt b/unitTests/CMakeLists.txt index 807cc84f5..6dd08283b 100644 --- a/unitTests/CMakeLists.txt +++ b/unitTests/CMakeLists.txt @@ -22,9 +22,9 @@ function(add_unit_test target) ADD_EXECUTABLE(${target} ${ARGN}) TARGET_LINK_LIBRARIES(${target} libpiclasshared) # Set properties of target - SET_TARGET_PROPERTIES(${target} PROPERTIES COMPILE_FLAGS ${PICLAS_COMPILE_FLAGS} - COMPILE_OPTIONS "-fPIC" - CMAKE_POSITION_INDEPENDENT_CODE ON) + SET_TARGET_PROPERTIES(${target} PROPERTIES COMPILE_FLAGS ${PICLAS_COMPILE_FLAGS}) + # COMPILE_OPTIONS "-fPIC" + # CMAKE_POSITION_INDEPENDENT_CODE ON) SET_TARGET_PROPERTIES(${target} PROPERTIES LINKER_LANGUAGE Fortran) SET_TARGET_PROPERTIES(${target} PROPERTIES @@ -67,4 +67,4 @@ ADD_CUSTOM_TARGET( all_tests ALL ADD_CUSTOM_COMMAND(TARGET all_tests COMMENT "Run unit tests" POST_BUILD COMMAND ctest --output-on-failure -j${N} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) \ No newline at end of file From bbc7c521f3e2336302c041e82a59e01b901b1e86 Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Thu, 4 Apr 2024 13:27:09 +0200 Subject: [PATCH 206/222] Update regressioncheck Cat_Rates_LH --- .../CAT_RATES_LH/PartAnalyze_ref.csv | 20 +++++++++---------- .../surfacemodel/surfacemodel_chemistry.f90 | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/PartAnalyze_ref.csv b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/PartAnalyze_ref.csv index ec21a68e4..d81b052cc 100644 --- a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/PartAnalyze_ref.csv +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/PartAnalyze_ref.csv @@ -1,12 +1,12 @@ 001-TIME,002-nPart-Spec-001,003-nPart-Spec-002,004-nPart-Spec-003,005-TempTra-001,006-TempTra-002,007-TempTra-003,008-TempVib001,009-TempVib002,010-XiVibMean001,011-XiVibMean002,012-TempRot001,013-TempRot002,014-TempTotal001,015-TempTotal002,016-TempTotal003 0,4141,0,4141,989.993493710047,0,989.993493710047,0,0,0,0,0,0,989.993493710047,0,989.993493710047 -0.00000000999999999999999,4141,12,4153,989.494581772897,554.18073758803,988.236752220714,0,1167.98815253797,0,0.648636716351771,0,1429.16782984299,989.494581772897,934.469348536762,989.335587600291 -0.00000002,4141,23,4164,989.931986075984,1080.71312461321,990.433418877703,0,1052.47352495419,0,0.563343717222619,0,1140.77330442547,989.931986075984,1099.44498154614,990.536884946257 -0.0000000300000000000001,4141,35,4176,989.905955769461,1105.07709580892,990.871231128988,0,1092.98576297748,0,0.594126154765669,0,1378.11849723008,989.905955769461,1201.41010848188,991.678619884628 -0.0000000400000000000002,4141,47,4188,989.956735492079,1162.11735991319,991.888815088018,0,1043.27112773626,0,0.556221049614658,0,1255.06333796028,989.956735492079,1183.67646978667,992.130763073704 -0.0000000500000000000003,4141,59,4200,989.78611948077,1257.01380768742,993.540032243673,0,1069.42658391581,0,0.576339275311495,0,1202.47774127071,989.78611948077,1218.06603089033,992.992908712476 -0.0000000600000000000003,4141,69,4210,989.853377994497,1294.37069861259,994.844279448808,0,1052.47352495419,0,0.563343717222621,0,1192.66167633127,989.853377994497,1233.31222104533,993.843558557563 -0.0000000699999999999998,4141,81,4222,989.990605309448,1318.76869085585,996.298285302166,0,1029.21991310594,0,0.545252941610571,0,1247.94678768559,989.990605309448,1264.7547202936,995.262015379016 -0.0000000799999999999992,4141,93,4234,988.99160486185,1314.03392920333,996.131174102227,0,1047.83021260046,0,0.55975579364375,0,1237.68000409722,988.99160486185,1259.76591203338,994.939174669821 -0.0000000899999999999986,4141,106,4247,989.775960622581,1300.79551094664,997.538633646916,0,1088.64112627487,0,0.590869908819209,0,1184.37000716691,989.775960622581,1236.72557991122,995.939525408217 -0.0000001,4141,117,4258,989.789922619945,1250.68346481455,996.958674249059,0,1100.82867218472,0,0.599976918807008,0,1142.18628566253,989.789922619945,1195.87899338471,995.452774024237 +0.00000001,4141,12,4153,989.511954913133,961.200183840655,989.430148688026,0,886.09936620711,0,0.427491559576923,0,793.716784824363,989.511954913133,893.568247492353,989.234727730602 +0.00000002,4141,23,4164,989.870866649358,1023.36445865496,990.055869679168,0,1319.27331478339,0,0.749028955539611,0,1016.0660223835,989.870866649358,1059.37878916175,990.254796096473 +0.00000003,4141,33,4174,989.929194039475,1162.04289164254,991.289939612283,0,1303.98165555966,0,0.739441523358205,0,929.889360251637,989.929194039475,1099.43198333293,990.794932431109 +4.00000000000002E-08,4141,44,4185,989.995550972946,1252.61228143767,992.756634877474,0,1144.45957982108,0,0.631882199349233,0,970.12608622996,989.995550972946,1140.16103779276,991.574351790168 +5.00000000000003E-08,4141,56,4197,989.861910567283,1193.5126643396,992.579194868272,0,1034.39585713874,0,0.549306144334057,0,1072.34737936862,989.861910567283,1134.09363045896,991.786374783136 +6.00000000000003E-08,4141,68,4209,989.631041573506,1239.09214304213,993.661299330661,0,1058.80009402158,0,0.56821257648992,0,1059.10885126302,989.631041573506,1156.04739809018,992.319640348306 +6.99999999999998E-08,4141,81,4222,989.628711366124,1198.43467579281,993.634699788332,0,987.064498469715,0,0.511685576220902,0,1064.28201944079,989.628711366124,1130.1324516406,992.324306572717 +7.99999999999992E-08,4141,92,4233,988.699050217524,1172.93570942552,992.703248811225,0,939.990825438611,0,0.473066596859685,0,1036.7286112492,988.699050217524,1103.0274353154,991.183862745047 +8.99999999999986E-08,4141,103,4244,989.412938242455,1184.23319183344,994.141139495959,0,971.986876518091,0,0.499443396729273,0,1027.06686273766,989.412938242455,1107.80042427265,992.286150085317 +0.0000001,4141,116,4257,989.429875774754,1220.57190411911,995.728319582118,0,1019.88931308524,0,0.537908270547667,0,1067.20078072693,989.429875774754,1145.68964677623,993.687835238266 diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index 1178329d1..7e25e5dd4 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -67,7 +67,7 @@ SUBROUTINE DefineParametersSurfaceChemistry() CALL prms%CreateIntOption( 'Surface-Reaction[$]-Promotion','Promotion/Coadsorption behaviour due to other reactions', & '0', numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-StickingCoefficient','Ratio of adsorbed to impinging particles on a\n' //& - 'reactive surface, Langmuir or Kisluik model', '0.' , numberedmulti=.TRUE.) + 'reactive surface, Langmuir or Kisluik model', '1.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-DissOrder', & 'Associative = 1, dissociative = 2', '0.' , numberedmulti=.TRUE.) CALL prms%CreateRealOption( 'Surface-Reaction[$]-EqConstant', & From 718d7aa386340a368870952725535d99a277eebd Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Fri, 5 Apr 2024 19:35:06 +0200 Subject: [PATCH 207/222] Regression tests for circular inflow feature, bugfix for exclude circle functionality --- REGGIE.md | 5 +- .../particle-initialization-and-emission.md | 25 ++--- .../analyze.ini | 6 ++ .../command_line.ini | 2 + .../externals.ini | 6 ++ .../hopr.ini | 39 +++++++ .../parameter.ini | 99 +++++++++++++++++ .../readme.md | 4 + .../analyze.ini | 6 ++ .../command_line.ini | 2 + .../externals.ini | 6 ++ .../hopr.ini | 39 +++++++ .../parameter.ini | 99 +++++++++++++++++ .../readme.md | 4 + .../analyze.ini | 6 ++ .../command_line.ini | 2 + .../externals.ini | 6 ++ .../hopr.ini | 39 +++++++ .../parameter.ini | 100 ++++++++++++++++++ .../readme.md | 4 + .../emission/particle_surface_flux_init.f90 | 2 +- .../sampling/particle_sampling_adaptive.f90 | 3 +- 22 files changed, 489 insertions(+), 15 deletions(-) create mode 100644 regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/analyze.ini create mode 100644 regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/command_line.ini create mode 100644 regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/externals.ini create mode 100644 regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/hopr.ini create mode 100644 regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/parameter.ini create mode 100644 regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/readme.md create mode 100644 regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/analyze.ini create mode 100644 regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/command_line.ini create mode 100644 regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/externals.ini create mode 100644 regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/hopr.ini create mode 100644 regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/parameter.ini create mode 100644 regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/readme.md create mode 100644 regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/analyze.ini create mode 100644 regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/command_line.ini create mode 100644 regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/externals.ini create mode 100644 regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/hopr.ini create mode 100644 regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/parameter.ini create mode 100644 regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/readme.md diff --git a/REGGIE.md b/REGGIE.md index 3872508b4..178cbeb65 100644 --- a/REGGIE.md +++ b/REGGIE.md @@ -53,7 +53,7 @@ Small test cases to check features with DSMC timedisc: [Link to build](regressio | | BC_PorousBC | | PorousBC as a pump with 2 species, hard compiled N=1 | nProcs=3 | Total # of removed part through BC | | | | BC_PorousBC_2DAxi | | PorousBC as a pump with 2 species (axisymmetric, with/without radial weighting), hard compiled N=1 | nProcs=1,2 | Total number density | [Link](regressioncheck/CHE_DSMC/BC_PorousBC_2DAxi/readme.md) | | | BC_RotationalPeriodic | | Rotationally periodic BC with "worst-case" mesh based on tetrahedrons | nProcs=1,5 | Particle number | [Link](regressioncheck/CHE_DSMC/BC_RotationalPeriodic/readme.md) | -| | BPO_SpeciesTimeStep | | Species-specific time step with BoundaryParticleOutput | nProcs=4 | PartAnalyze, SurfaceAnalyze | [Link](regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/readme.md) | +| | BPO_SpeciesTimeStep | | Species-specific time step with BoundaryParticleOutput | nProcs=4 | PartAnalyze, SurfaceAnalyze | [Link](regressioncheck/CHE_DSMC/BPO_SpeciesTimeStep/readme.md) | | | cube | | Collismode=2,3, hard compiled N=1 | nProcs=2 | | | | | Rotational_Reference_Frame_Regions | | Rotational reference frame with several regions, switching between stationary and rotating frame | nProcs=1,2,3,4 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Regions/readme.md) | | | Rotational_Reference_Frame_RotBC | | Rotational reference frame in combination with the rotationally periodic BC | nProcs=1,2,3,4 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_RotBC/readme.md) | @@ -65,6 +65,9 @@ Small test cases to check features with DSMC timedisc: [Link to build](regressio | | SurfFlux_RefMapping_Tracing_TriaTracking | | Surface flux emission (collisionless) with ARM (with all three trackings) and TriaSurfaceFlux (only TriaTracking) | nProcs=1 | PartAnalyze: nPart, TransTemp | [Link](regressioncheck/CHE_DSMC/SurfFlux_RefMapping_Tracing_TriaTracking/readme.md) | | | SurfFlux_Tria_Adaptive_ConstPressure | | TriaSurfaceFlux with AdaptiveType=1/2 | nProcs=4 | Integrated mass flux | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstMassflow/readme.md) | | | SurfFlux_Tria_Adaptive_ConstMassflow | | TriaSurfaceFlux with AdaptiveType=3,4, hard compiled N=1 | nProcs=1 | Integrated mass flux | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstPressure/readme.md) | +| | SurfFlux_Tria_CircularInflow_Circle | | TriaSurfaceFlux with Circular Inflow: inflow only through defined circle | nProcs=4 | Number density in domain | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/readme.md) | +| | SurfFlux_Tria_CircularInflow_CircleCutout | | TriaSurfaceFlux with Circular Inflow: inflow only outside of defined circle | nProcs=4 | Number density in domain | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/readme.md) | +| | SurfFlux_Tria_CircularInflow_Ring | | TriaSurfaceFlux with Circular Inflow: inflow through a ring | nProcs=4 | Number density in domain | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/readme.md) | | | SurfFlux_Tria_CurrentMassflow | | Surface flux with an emission current or mass flow at fixed velocity | nProcs=4 | # of particles per time step | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_CurrentMassflow/readme.md) | | | vMPF_BGG_CellLocalInsertion | | Variable weighting factor: Cell local particle insertion at constant density and constant particle number per cell | nProcs=6 | PartAnalyze: nPart, DSMCState: NumDens | [Link](regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/readme.md) | | | vMPF_BGG_CellLocalInsertion_LimitLocation | | Variable weighting factor: Limited cell local particle insertion at constant density and constant particle number per cell | nProcs=6 | PartAnalyze: nPart, DSMCState: NumDens | [Link](regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/readme.md) | diff --git a/docs/documentation/userguide/features-and-models/particle-initialization-and-emission.md b/docs/documentation/userguide/features-and-models/particle-initialization-and-emission.md index 209908919..9c8c39b57 100644 --- a/docs/documentation/userguide/features-and-models/particle-initialization-and-emission.md +++ b/docs/documentation/userguide/features-and-models/particle-initialization-and-emission.md @@ -446,22 +446,22 @@ The provided temperature for the surface flux of the species determines the ener ### Circular Inflow -The emission of particles from a surface flux can be limited to the area within a circle or a ring. The respective boundary has to +The emission of particles from a surface flux can be limited to the area within a circle, ring or circle cut-out. The respective boundary has to coincide or be parallel to the xy-, xz, or yz-planes. This allows to define inflow boundaries without specifically meshing the geometrical feature, e.g. small orifices. The feature can be enabled per species and surface flux - Part-Species1-Surfaceflux1-CircularInflow=TRUE + Part-Species1-Surfaceflux1-CircularInflow = TRUE The normal direction of the respective boundary has to be defined by - Part-Species1-Surfaceflux1-axialDir=1 + Part-Species1-Surfaceflux1-axialDir = 1 Finally, the origin of the circle/ring on the surface and the radius have to be given. In the case of a ring, a maximal and minimal -radius is required (`-rmax` and `-rmin`, respectively), whereas for a circle only the input of maximal radius is sufficient. +radius is required (`-rmax` and `-rmin`, respectively), whereas for a circle only the input of maximal radius and for the circle cut-out only the minimal radius is sufficient. - Part-Species1-Surfaceflux1-origin=(/5e-6,5e-6/) - Part-Species1-Surfaceflux1-rmax=2.5e-6 - Part-Species1-Surfaceflux1-rmin=1e-6 + Part-Species1-Surfaceflux1-origin = (/5e-6,5e-6/) + Part-Species1-Surfaceflux1-rmax = 2.5e-6 + Part-Species1-Surfaceflux1-rmin = 1e-6 The absolute coordinates are defined as follows for the respective normal direction. @@ -471,7 +471,7 @@ The absolute coordinates are defined as follows for the respective normal direct | y (=2) | (z,x) | | z (=3) | (x,y) | -Multiple circular inflows can be defined on a single boundary through multiple surface fluxes, e.g. to enable the simulation of multiple inlets on a chamber wall. Circular inflows are also supported with axisymmetric simulations, under the assumptions that the chosen surface is in the yz-plane (and thus has a normal direction in x) and the minimal and maximum radii are in the positive y-direction. +Multiple circular inflows can be defined on a single boundary through multiple surface fluxes, e.g. to enable the simulation of multiple inlets on a chamber wall. Circular inflows are also supported with axisymmetric simulations, under the assumptions that the chosen surface is in the yz-plane (and thus has a normal direction in x) and the minimal and maximum radii are in the positive y-direction. Examples are given as part of the regression tests in `regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle`, `SurfFlux_Tria_CircularInflow_CircleCutout` and `SurfFlux_Tria_CircularInflow_Ring`. (sec:particle-emission-adaptive)= ### Adaptive/Subsonic Boundaries @@ -479,8 +479,8 @@ Multiple circular inflows can be defined on a single boundary through multiple s Different adaptive boundaries can be defined as a part of a surface flux to model subsonic in- and outflows, where the emission is adapted based on the prevalent conditions at the boundary. The modelling is based on the publications by Ref. {cite}`Farbar2014` and Ref. {cite}`Lei2017`. - Part-Species1-Surfaceflux1-Adaptive=TRUE - Part-Species1-Surfaceflux1-Adaptive-Type=1 + Part-Species1-Surfaceflux1-Adaptive = TRUE + Part-Species1-Surfaceflux1-Adaptive-Type = 1 An overview over the available types is given below. @@ -494,8 +494,8 @@ An overview over the available types is given below. Depending of the type of the chosen boundary type either the mass flow [kg/s] or the static pressure [Pa] have to be given - Part-Species1-Surfaceflux1-Adaptive-Massflow=1.00E-14 - Part-Species1-Surfaceflux1-Adaptive-Pressure=10 + Part-Species1-Surfaceflux1-Adaptive-Massflow = 1.00E-14 + Part-Species1-Surfaceflux1-Adaptive-Pressure = 10 The adaptive boundaries require the sampling of macroscopic properties such as flow velocity at the boundary. To compensate for the statistical fluctuations, three possible sampling approaches are available. The first approach uses a relaxation factor @@ -532,6 +532,7 @@ $$\dot{m} = \frac{QM}{1000RT},$$ where $R=8.314$ J mol$^{-1}$K$^{-1}$ is the gas constant, $M$ the molar mass in [g mol$^{-1}$] and $T$ is the gas temperature [K]. It should be noted that while multiple adaptive boundaries are possible, adjacent boundaries that share a mesh element should be avoided or treated carefully. +Examples are given as part of the regression tests in `regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstMassflow` and `SurfFlux_Tria_Adaptive_ConstPressure`. ### Verification diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/analyze.ini b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/analyze.ini new file mode 100644 index 000000000..323eb8b61 --- /dev/null +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/analyze.ini @@ -0,0 +1,6 @@ +integrate_line_file = PartAnalyze.csv ! data file name +integrate_line_columns = 0:1 ! columns x:y +integrate_line_integral_value = 5.89E+017 ! Number density [1/m3] +integrate_line_tolerance_value = 5e-2 ! tolerance +integrate_line_tolerance_type = relative ! special option +integrate_line_multiplier = 2E5 ! Divided by the end time (t=1E-5s) \ No newline at end of file diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/command_line.ini b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/command_line.ini new file mode 100644 index 000000000..f0056b1d6 --- /dev/null +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/command_line.ini @@ -0,0 +1,2 @@ +MPI=4 +database = ../../../SpeciesDatabase.h5 diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/externals.ini b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/externals.ini new file mode 100644 index 000000000..0bdc5a5c4 --- /dev/null +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/externals.ini @@ -0,0 +1,6 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre +cmd_suffix = \ No newline at end of file diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/hopr.ini b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/hopr.ini new file mode 100644 index 000000000..c0fbf7e4d --- /dev/null +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/hopr.ini @@ -0,0 +1,39 @@ +ProjectName = cube +Debugvisu = T +DebugVisuLevel=1 +NVisu =1 +Mode =1 + +DEFVAR = (REAL): minus_x = 0.0 +DEFVAR = (REAL): plus_x = 5.0 + +DEFVAR = (REAL): minus_y = 0.0 +DEFVAR = (REAL): plus_y = 1.0 + +DEFVAR = (REAL): minus_z = 0.0 +DEFVAR = (REAL): plus_z = 1.0 + +Corner =(/minus_x,minus_y,minus_z ,, plus_x,minus_y,minus_z ,, plus_x,plus_y,minus_z ,, minus_x,plus_y,minus_z ,, minus_x,minus_y,plus_z ,, plus_x,minus_y,plus_z ,, plus_x,plus_y,plus_z ,, minus_x,plus_y,plus_z /) +nElems =(/10,4,4/) +elemtype =108 + +BCIndex =(/6 ,4 ,1 ,3 ,2 ,5/) +! =(/z-,y-,x+,y+,x-,z+/) +nZones = 1 +nUserDefinedBoundaries=6 +BoundaryName=BC_Xplus +BoundaryType=(/3,0,0,0/) +BoundaryName=BC_Xminus +BoundaryType=(/3,0,0,0/) +BoundaryName=BC_Yplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Yminus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zminus +BoundaryType=(/4,0,0,0/) + +postscalemesh=true +meshscale=1e-5 +jacobiantolerance=1e-20 diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/parameter.ini b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/parameter.ini new file mode 100644 index 000000000..7f17c48c4 --- /dev/null +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/parameter.ini @@ -0,0 +1,99 @@ +! =============================================================================== ! +! EQUATION (linearscalaradvection) +! =============================================================================== ! +IniExactFunc = 0 +CFLscale = 0.2 ! Scaling of theoretical CFL number +! =============================================================================== ! +! DISCRETIZATION +! =============================================================================== ! +N = 1 ! Polynomial degree +NAnalyze = 1 ! Number of analyze points +! =============================================================================== ! +! MESH +! =============================================================================== ! +MeshFile = cube_mesh.h5 +useCurveds = F +! if boundaries have to be changed (else they are used from Mesh directly): +TrackingMethod = triatracking,tracing +TriaSurfaceFlux = T +! =============================================================================== ! +! OUTPUT / VISUALIZATION +! =============================================================================== ! +ProjectName = CircularInflow +IterDisplayStep = 100 +CalcSurfFluxInfo = TRUE +CalcNumDens = T +CalcPartBalance = T +! =============================================================================== ! +! CALCULATION +! =============================================================================== ! +tend = 5.0E-6 +Analyze_dt = 5.0E-6 +ManualTimeStep = 1.0000E-7 +! =============================================================================== ! +! Load Balance +! =============================================================================== ! +DoLoadBalance = T +DoInitialAutoRestart = T +Load-DeviationThreshold = 1e-9 +! =============================================================================== ! +! BOUNDARIES +! =============================================================================== ! +Part-nBounds=6 +Part-Boundary1-SourceName=BC_Xplus +Part-Boundary1-Condition=reflective +Part-Boundary2-SourceName=BC_Xminus +Part-Boundary2-Condition=open +Part-Boundary3-SourceName=BC_Yplus +Part-Boundary3-Condition=reflective +Part-Boundary4-SourceName=BC_Yminus +Part-Boundary4-Condition=reflective +Part-Boundary5-SourceName=BC_Zplus +Part-Boundary5-Condition=reflective +Part-Boundary6-SourceName=BC_Zminus +Part-Boundary6-Condition=reflective +Part-FIBGMdeltas=(/2e-6,2e-6,2e-6/) + +CalcBoundaryParticleOutput = T +BPO-NPartBoundaries = 1 +BPO-PartBoundaries = (/2/) +BPO-NSpecies = 1 +BPO-Species = (/1/) +! =============================================================================== ! +! SPECIES +! =============================================================================== ! +Particles-Species-Database = SpeciesDatabase.h5 +Part-nSpecies=1 +Part-Species1-SpeciesName = O2 +Part-Species1-MacroParticleFactor=5 + +Part-Species1-nSurfaceFluxBCs=1 + +! Inlet: Constant mass flow, Type 3 at Xplus (BC=1) +Part-Species1-Surfaceflux1-BC=1 +Part-Species1-Surfaceflux1-velocityDistribution=maxwell_lpn +Part-Species1-Surfaceflux1-VeloIC=600. +Part-Species1-Surfaceflux1-VeloVecIC=(/-1.0,0.0,0.0/) +Part-Species1-Surfaceflux1-MWTemperatureIC=300. +Part-Species1-Surfaceflux1-TempVib=300. +Part-Species1-Surfaceflux1-TempRot=300. +Part-Species1-Surfaceflux1-PartDensity=3E18 +Part-Species1-Surfaceflux1-CircularInflow=T +Part-Species1-Surfaceflux1-axialDir=1 +Part-Species1-Surfaceflux1-origin=(/5e-6,5e-6/) +Part-Species1-Surfaceflux1-rmax=2.5e-6 +! =============================================================================== ! +! DSMC +! =============================================================================== ! +Particles-HaloEpsVelo=2.0E+03 +Particles-NumberForDSMCOutputs=1 +Part-TimeFracForSampling=0.1 +Particles-DSMC-CalcSurfaceVal=true +UseDSMC=true +Particles-DSMC-CollisMode=2 !(1:elast coll, 2: elast + rela, 3:chem) +Part-NumberOfRandomSeeds=2 +Particles-RandomSeed1=1 +Particles-RandomSeed2=2 +Particles-DSMC-UseOctree=true +Particles-DSMC-UseNearestNeighbour = T +Particles-DSMC-CalcQualityFactors=F diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/readme.md b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/readme.md new file mode 100644 index 000000000..f45fcf973 --- /dev/null +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Circle/readme.md @@ -0,0 +1,4 @@ +# Flow through channel: Testing of a circular inflow +* Constant inflow with a fixed number density +* Circular inflow defined by a circle +* Resulting number density in the domain should correspond to the input value multiplied by the area ratio between total surface flux area and the circle (roughly 20%) \ No newline at end of file diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/analyze.ini b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/analyze.ini new file mode 100644 index 000000000..72632e2fd --- /dev/null +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/analyze.ini @@ -0,0 +1,6 @@ +integrate_line_file = PartAnalyze.csv ! data file name +integrate_line_columns = 0:1 ! columns x:y +integrate_line_integral_value = 2.41E+018 ! Number density [1/m3] +integrate_line_tolerance_value = 5e-2 ! tolerance +integrate_line_tolerance_type = relative ! special option +integrate_line_multiplier = 2E5 ! Divided by the end time (t=1E-5s) \ No newline at end of file diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/command_line.ini b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/command_line.ini new file mode 100644 index 000000000..f0056b1d6 --- /dev/null +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/command_line.ini @@ -0,0 +1,2 @@ +MPI=4 +database = ../../../SpeciesDatabase.h5 diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/externals.ini b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/externals.ini new file mode 100644 index 000000000..0bdc5a5c4 --- /dev/null +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/externals.ini @@ -0,0 +1,6 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre +cmd_suffix = \ No newline at end of file diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/hopr.ini b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/hopr.ini new file mode 100644 index 000000000..c0fbf7e4d --- /dev/null +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/hopr.ini @@ -0,0 +1,39 @@ +ProjectName = cube +Debugvisu = T +DebugVisuLevel=1 +NVisu =1 +Mode =1 + +DEFVAR = (REAL): minus_x = 0.0 +DEFVAR = (REAL): plus_x = 5.0 + +DEFVAR = (REAL): minus_y = 0.0 +DEFVAR = (REAL): plus_y = 1.0 + +DEFVAR = (REAL): minus_z = 0.0 +DEFVAR = (REAL): plus_z = 1.0 + +Corner =(/minus_x,minus_y,minus_z ,, plus_x,minus_y,minus_z ,, plus_x,plus_y,minus_z ,, minus_x,plus_y,minus_z ,, minus_x,minus_y,plus_z ,, plus_x,minus_y,plus_z ,, plus_x,plus_y,plus_z ,, minus_x,plus_y,plus_z /) +nElems =(/10,4,4/) +elemtype =108 + +BCIndex =(/6 ,4 ,1 ,3 ,2 ,5/) +! =(/z-,y-,x+,y+,x-,z+/) +nZones = 1 +nUserDefinedBoundaries=6 +BoundaryName=BC_Xplus +BoundaryType=(/3,0,0,0/) +BoundaryName=BC_Xminus +BoundaryType=(/3,0,0,0/) +BoundaryName=BC_Yplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Yminus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zminus +BoundaryType=(/4,0,0,0/) + +postscalemesh=true +meshscale=1e-5 +jacobiantolerance=1e-20 diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/parameter.ini b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/parameter.ini new file mode 100644 index 000000000..bb77cc950 --- /dev/null +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/parameter.ini @@ -0,0 +1,99 @@ +! =============================================================================== ! +! EQUATION (linearscalaradvection) +! =============================================================================== ! +IniExactFunc = 0 +CFLscale = 0.2 ! Scaling of theoretical CFL number +! =============================================================================== ! +! DISCRETIZATION +! =============================================================================== ! +N = 1 ! Polynomial degree +NAnalyze = 1 ! Number of analyze points +! =============================================================================== ! +! MESH +! =============================================================================== ! +MeshFile = cube_mesh.h5 +useCurveds = F +! if boundaries have to be changed (else they are used from Mesh directly): +TrackingMethod = triatracking,tracing +TriaSurfaceFlux = T +! =============================================================================== ! +! OUTPUT / VISUALIZATION +! =============================================================================== ! +ProjectName = CircularInflow +IterDisplayStep = 100 +CalcSurfFluxInfo = TRUE +CalcNumDens = T +CalcPartBalance = T +! =============================================================================== ! +! CALCULATION +! =============================================================================== ! +tend = 5.0E-6 +Analyze_dt = 5.0E-6 +ManualTimeStep = 1.0000E-7 +! =============================================================================== ! +! Load Balance +! =============================================================================== ! +DoLoadBalance = T +DoInitialAutoRestart = T +Load-DeviationThreshold = 1e-9 +! =============================================================================== ! +! BOUNDARIES +! =============================================================================== ! +Part-nBounds=6 +Part-Boundary1-SourceName=BC_Xplus +Part-Boundary1-Condition=reflective +Part-Boundary2-SourceName=BC_Xminus +Part-Boundary2-Condition=open +Part-Boundary3-SourceName=BC_Yplus +Part-Boundary3-Condition=reflective +Part-Boundary4-SourceName=BC_Yminus +Part-Boundary4-Condition=reflective +Part-Boundary5-SourceName=BC_Zplus +Part-Boundary5-Condition=reflective +Part-Boundary6-SourceName=BC_Zminus +Part-Boundary6-Condition=reflective +Part-FIBGMdeltas=(/2e-6,2e-6,2e-6/) + +CalcBoundaryParticleOutput = T +BPO-NPartBoundaries = 1 +BPO-PartBoundaries = (/2/) +BPO-NSpecies = 1 +BPO-Species = (/1/) +! =============================================================================== ! +! SPECIES +! =============================================================================== ! +Particles-Species-Database = SpeciesDatabase.h5 +Part-nSpecies=1 +Part-Species1-SpeciesName = O2 +Part-Species1-MacroParticleFactor=5 + +Part-Species1-nSurfaceFluxBCs=1 + +! Inlet: Constant mass flow, Type 3 at Xplus (BC=1) +Part-Species1-Surfaceflux1-BC=1 +Part-Species1-Surfaceflux1-velocityDistribution=maxwell_lpn +Part-Species1-Surfaceflux1-VeloIC=600. +Part-Species1-Surfaceflux1-VeloVecIC=(/-1.0,0.0,0.0/) +Part-Species1-Surfaceflux1-MWTemperatureIC=300. +Part-Species1-Surfaceflux1-TempVib=300. +Part-Species1-Surfaceflux1-TempRot=300. +Part-Species1-Surfaceflux1-PartDensity=3E18 +Part-Species1-Surfaceflux1-CircularInflow=T +Part-Species1-Surfaceflux1-axialDir=1 +Part-Species1-Surfaceflux1-origin=(/5e-6,5e-6/) +Part-Species1-Surfaceflux1-rmin=2.5e-6 +! =============================================================================== ! +! DSMC +! =============================================================================== ! +Particles-HaloEpsVelo=2.0E+03 +Particles-NumberForDSMCOutputs=1 +Part-TimeFracForSampling=0.1 +Particles-DSMC-CalcSurfaceVal=true +UseDSMC=true +Particles-DSMC-CollisMode=2 !(1:elast coll, 2: elast + rela, 3:chem) +Part-NumberOfRandomSeeds=2 +Particles-RandomSeed1=1 +Particles-RandomSeed2=2 +Particles-DSMC-UseOctree=true +Particles-DSMC-UseNearestNeighbour = T +Particles-DSMC-CalcQualityFactors=F diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/readme.md b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/readme.md new file mode 100644 index 000000000..ba53ad425 --- /dev/null +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_CircleCutout/readme.md @@ -0,0 +1,4 @@ +# Flow through channel: Testing of a circular inflow +* Constant inflow with a fixed number density +* Circular inflow defined by an inner circle, which is excluded from the surface flux +* Resulting number density in the domain should correspond to the input value multiplied by the area ratio between total surface flux area and the actual area without the circle (roughly 80%) \ No newline at end of file diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/analyze.ini b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/analyze.ini new file mode 100644 index 000000000..a6e1d2824 --- /dev/null +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/analyze.ini @@ -0,0 +1,6 @@ +integrate_line_file = PartAnalyze.csv ! data file name +integrate_line_columns = 0:1 ! columns x:y +integrate_line_integral_value = 1.767E+018 ! Number density [1/m3] +integrate_line_tolerance_value = 5e-2 ! tolerance +integrate_line_tolerance_type = relative ! special option +integrate_line_multiplier = 2E5 ! Divided by the end time (t=1E-5s) \ No newline at end of file diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/command_line.ini b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/command_line.ini new file mode 100644 index 000000000..f0056b1d6 --- /dev/null +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/command_line.ini @@ -0,0 +1,2 @@ +MPI=4 +database = ../../../SpeciesDatabase.h5 diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/externals.ini b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/externals.ini new file mode 100644 index 000000000..0bdc5a5c4 --- /dev/null +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/externals.ini @@ -0,0 +1,6 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre +cmd_suffix = \ No newline at end of file diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/hopr.ini b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/hopr.ini new file mode 100644 index 000000000..c0fbf7e4d --- /dev/null +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/hopr.ini @@ -0,0 +1,39 @@ +ProjectName = cube +Debugvisu = T +DebugVisuLevel=1 +NVisu =1 +Mode =1 + +DEFVAR = (REAL): minus_x = 0.0 +DEFVAR = (REAL): plus_x = 5.0 + +DEFVAR = (REAL): minus_y = 0.0 +DEFVAR = (REAL): plus_y = 1.0 + +DEFVAR = (REAL): minus_z = 0.0 +DEFVAR = (REAL): plus_z = 1.0 + +Corner =(/minus_x,minus_y,minus_z ,, plus_x,minus_y,minus_z ,, plus_x,plus_y,minus_z ,, minus_x,plus_y,minus_z ,, minus_x,minus_y,plus_z ,, plus_x,minus_y,plus_z ,, plus_x,plus_y,plus_z ,, minus_x,plus_y,plus_z /) +nElems =(/10,4,4/) +elemtype =108 + +BCIndex =(/6 ,4 ,1 ,3 ,2 ,5/) +! =(/z-,y-,x+,y+,x-,z+/) +nZones = 1 +nUserDefinedBoundaries=6 +BoundaryName=BC_Xplus +BoundaryType=(/3,0,0,0/) +BoundaryName=BC_Xminus +BoundaryType=(/3,0,0,0/) +BoundaryName=BC_Yplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Yminus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zminus +BoundaryType=(/4,0,0,0/) + +postscalemesh=true +meshscale=1e-5 +jacobiantolerance=1e-20 diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/parameter.ini b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/parameter.ini new file mode 100644 index 000000000..96cb52b24 --- /dev/null +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/parameter.ini @@ -0,0 +1,100 @@ +! =============================================================================== ! +! EQUATION (linearscalaradvection) +! =============================================================================== ! +IniExactFunc = 0 +CFLscale = 0.2 ! Scaling of theoretical CFL number +! =============================================================================== ! +! DISCRETIZATION +! =============================================================================== ! +N = 1 ! Polynomial degree +NAnalyze = 1 ! Number of analyze points +! =============================================================================== ! +! MESH +! =============================================================================== ! +MeshFile = cube_mesh.h5 +useCurveds = F +! if boundaries have to be changed (else they are used from Mesh directly): +TrackingMethod = triatracking,tracing +TriaSurfaceFlux = T +! =============================================================================== ! +! OUTPUT / VISUALIZATION +! =============================================================================== ! +ProjectName = CircularInflow +IterDisplayStep = 100 +CalcSurfFluxInfo = TRUE +CalcNumDens = T +CalcPartBalance = T +! =============================================================================== ! +! CALCULATION +! =============================================================================== ! +tend = 5.0E-6 +Analyze_dt = 5.0E-6 +ManualTimeStep = 1.0000E-7 +! =============================================================================== ! +! Load Balance +! =============================================================================== ! +DoLoadBalance = T +DoInitialAutoRestart = T +Load-DeviationThreshold = 1e-9 +! =============================================================================== ! +! BOUNDARIES +! =============================================================================== ! +Part-nBounds=6 +Part-Boundary1-SourceName=BC_Xplus +Part-Boundary1-Condition=reflective +Part-Boundary2-SourceName=BC_Xminus +Part-Boundary2-Condition=open +Part-Boundary3-SourceName=BC_Yplus +Part-Boundary3-Condition=reflective +Part-Boundary4-SourceName=BC_Yminus +Part-Boundary4-Condition=reflective +Part-Boundary5-SourceName=BC_Zplus +Part-Boundary5-Condition=reflective +Part-Boundary6-SourceName=BC_Zminus +Part-Boundary6-Condition=reflective +Part-FIBGMdeltas=(/2e-6,2e-6,2e-6/) + +CalcBoundaryParticleOutput = T +BPO-NPartBoundaries = 1 +BPO-PartBoundaries = (/2/) +BPO-NSpecies = 1 +BPO-Species = (/1/) +! =============================================================================== ! +! SPECIES +! =============================================================================== ! +Particles-Species-Database = SpeciesDatabase.h5 +Part-nSpecies=1 +Part-Species1-SpeciesName = O2 +Part-Species1-MacroParticleFactor=5 + +Part-Species1-nSurfaceFluxBCs=1 + +! Inlet: Constant mass flow, Type 3 at Xplus (BC=1) +Part-Species1-Surfaceflux1-BC=1 +Part-Species1-Surfaceflux1-velocityDistribution=maxwell_lpn +Part-Species1-Surfaceflux1-VeloIC=600. +Part-Species1-Surfaceflux1-VeloVecIC=(/-1.0,0.0,0.0/) +Part-Species1-Surfaceflux1-MWTemperatureIC=300. +Part-Species1-Surfaceflux1-TempVib=300. +Part-Species1-Surfaceflux1-TempRot=300. +Part-Species1-Surfaceflux1-PartDensity=3E18 +Part-Species1-Surfaceflux1-CircularInflow=T +Part-Species1-Surfaceflux1-axialDir=1 +Part-Species1-Surfaceflux1-origin=(/5e-6,5e-6/) +Part-Species1-Surfaceflux1-rmin=2.5e-6 +Part-Species1-Surfaceflux1-rmax=5.0e-6 +! =============================================================================== ! +! DSMC +! =============================================================================== ! +Particles-HaloEpsVelo=2.0E+03 +Particles-NumberForDSMCOutputs=1 +Part-TimeFracForSampling=0.1 +Particles-DSMC-CalcSurfaceVal=true +UseDSMC=true +Particles-DSMC-CollisMode=2 !(1:elast coll, 2: elast + rela, 3:chem) +Part-NumberOfRandomSeeds=2 +Particles-RandomSeed1=1 +Particles-RandomSeed2=2 +Particles-DSMC-UseOctree=true +Particles-DSMC-UseNearestNeighbour = T +Particles-DSMC-CalcQualityFactors=F diff --git a/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/readme.md b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/readme.md new file mode 100644 index 000000000..e8c69e607 --- /dev/null +++ b/regressioncheck/CHE_DSMC/SurfFlux_Tria_CircularInflow_Ring/readme.md @@ -0,0 +1,4 @@ +# Flow through channel: Testing of a circular inflow +* Constant inflow with a fixed number density +* Circular inflow defined by a ring +* Resulting number density in the domain should correspond to the input value multiplied by the area ratio between the ring area and the total surface flux area (roughly 59%) \ No newline at end of file diff --git a/src/particles/emission/particle_surface_flux_init.f90 b/src/particles/emission/particle_surface_flux_init.f90 index ac850bfb7..664c5c30e 100644 --- a/src/particles/emission/particle_surface_flux_init.f90 +++ b/src/particles/emission/particle_surface_flux_init.f90 @@ -489,7 +489,7 @@ SUBROUTINE ReadInAndPrepareSurfaceFlux(MaxSurfacefluxBCs, nDataBC) SF%rmax = GETREAL('Part-Species'//TRIM(hilf2)//'-rmax',TRIM(hilf3)) SF%rmin = GETREAL('Part-Species'//TRIM(hilf2)//'-rmin') ! Total area of surface flux - IF(SF%rmax.NE.HUGE(SF%rmax)) THEN + IF(.NOT.ALMOSTEQUALRELATIVE(SF%rmax,HUGE(SF%rmax),1E-1)) THEN ! rmax has been defined and a regular circular/ring-shaped inflow is performed SF%totalAreaSF = Pi*(SF%rmax*SF%rmax - SF%rmin*SF%rmin) ELSE IF (SF%rmin.GT.0.) THEN diff --git a/src/particles/sampling/particle_sampling_adaptive.f90 b/src/particles/sampling/particle_sampling_adaptive.f90 index 8cb720198..d642f1501 100644 --- a/src/particles/sampling/particle_sampling_adaptive.f90 +++ b/src/particles/sampling/particle_sampling_adaptive.f90 @@ -136,7 +136,8 @@ SUBROUTINE InitAdaptiveBCSampling() ! Skip elements outside of the circular inflow IF(Species(iSpec)%Surfaceflux(iSF)%CircularInflow) THEN IF(Species(iSpec)%Surfaceflux(iSF)%SurfFluxSideRejectType(iSide).EQ.1) CYCLE - ! Determine the area of the surface flux + ! Determine the area of the surface flux for the calculation of the pressure in the adjacent cells, using the full area of each + ! surface that is cut by the circle since the pressure is sampled in those volume elements without a cut-out DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) AdaptBCAreaSurfaceFlux(iSpec,iSF)=AdaptBCAreaSurfaceFlux(iSpec,iSF)+SurfMeshSubSideData(iSample,jSample,BCSideID)%area END DO; END DO From 2438ec698650ea9836794dbefd4cddec8114529e Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Sat, 6 Apr 2024 13:06:28 +0200 Subject: [PATCH 208/222] Update CAT_Rates_ER --- .../CAT_RATES_ER/PartAnalyze_ref.csv | 24 +++++++++---------- .../NIG_Reservoir/CAT_RATES_ER/parameter.ini | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/PartAnalyze_ref.csv b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/PartAnalyze_ref.csv index 23ace7305..68a3771d9 100644 --- a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/PartAnalyze_ref.csv +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/PartAnalyze_ref.csv @@ -1,12 +1,12 @@ -001-TIME,002-nPart-Spec-001,003-nPart-Spec-002,004-nPart-Spec-003,005-TempTra-001,006-TempTra-002,007-TempTra-003,008-TempVib001,009-TempVib002,010-XiVibMean001,011-XiVibMean002,012-TempRot001,013-TempRot002,014-TempTotal001,015-TempTotal002,016-TempTotal003,017-Pmean,018-Pmax,019-MeanFreePath -0.0000000000000000E+000,0.4141000000000000E+004,0.0000000000000000E+000,0.4141000000000000E+004,0.9899934937100466E+003,0.0000000000000000E+000,0.9899934937100466E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.9899934937100466E+003,0.0000000000000000E+000,0.9899934937100466E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000 -0.9999999999999985E-008,0.4136000000000000E+004,0.5000000000000000E+001,0.4141000000000000E+004,0.9894726160421980E+003,0.9449503197104581E+003,0.9894188581379094E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.8267624318585453E+003,0.9894726160421980E+003,0.8976751645696929E+003,0.9893617763277903E+003,0.1398706973342752E-004,0.2496071378517757E-004,0.8220546685687283E-002 -0.1999999999999999E-007,0.4136000000000000E+004,0.5000000000000000E+001,0.4141000000000000E+004,0.9898208965108893E+003,0.9370590434290933E+003,0.9897571898541858E+003,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.8267624318585453E+003,0.9898208965108893E+003,0.8929403988008740E+003,0.9897039193342289E+003,0.1396927259814213E-004,0.2380511836471437E-004,0.8221228878936917E-002 -0.3000000000000008E-007,0.4133000000000000E+004,0.8000000000000000E+001,0.4141000000000000E+004,0.9888492921870990E+003,0.1177361616502254E+004,0.9892134792420426E+003,0.0000000000000000E+000,0.1034395857138738E+004,0.0000000000000000E+000,0.5493061443340548E+000,0.0000000000000000E+000,0.9046471326897755E+003,0.9888492921870990E+003,0.1064922165254859E+004,0.9889962574091570E+003,0.1394230657390832E-004,0.2464808513181676E-004,0.8216492352644135E-002 -0.4000000000000017E-007,0.4132000000000000E+004,0.9000000000000000E+001,0.4141000000000000E+004,0.9889337455061565E+003,0.1181213233424669E+004,0.9893516434514031E+003,0.0000000000000000E+000,0.9870644984697105E+003,0.0000000000000000E+000,0.5116855762208988E+000,0.0000000000000000E+000,0.8641730506303542E+003,0.9889337455061565E+003,0.1048146231912313E+004,0.9890624372177372E+003,0.1388277932206090E-004,0.2420085080079060E-004,0.8215516145702467E-002 -0.5000000000000026E-007,0.4131000000000000E+004,0.1000000000000000E+002,0.4141000000000000E+004,0.9881643035436668E+003,0.9936746742969386E+003,0.9881776104037327E+003,0.0000000000000000E+000,0.9478312192290271E+003,0.0000000000000000E+000,0.4795790545596740E+000,0.0000000000000000E+000,0.8252921731326156E+003,0.9881643035436668E+003,0.9282042139575918E+003,0.9880195073843187E+003,0.1390508487174102E-004,0.2362554011599877E-004,0.8212328474456146E-002 -0.6000000000000033E-007,0.4130000000000000E+004,0.1100000000000000E+002,0.4141000000000000E+004,0.9881636002046406E+003,0.1221534096326477E+004,0.9887835170018732E+003,0.0000000000000000E+000,0.9146420048390563E+003,0.0000000000000000E+000,0.4518012090523634E+000,0.0000000000000000E+000,0.7842103169277323E+003,0.9881636002046406E+003,0.1035668592812227E+004,0.9882897907186912E+003,0.1391105777274065E-004,0.2465480287932244E-004,0.8211759946287983E-002 -0.6999999999999975E-007,0.4127000000000000E+004,0.1400000000000000E+002,0.4141000000000000E+004,0.9878741787780538E+003,0.1439486248139481E+004,0.9894010005532433E+003,0.0000000000000000E+000,0.8392754311108937E+003,0.0000000000000000E+000,0.3868643144431727E+000,0.0000000000000000E+000,0.8276177882066480E+003,0.9878741787780538E+003,0.1169210818663158E+004,0.9884872463845236E+003,0.1394679805390927E-004,0.2385601626155452E-004,0.8208831478309628E-002 -0.7999999999999918E-007,0.4123000000000000E+004,0.1800000000000000E+002,0.4141000000000000E+004,0.9866117537901586E+003,0.1497459247598471E+004,0.9888322934879488E+003,0.0000000000000000E+000,0.7718957723632029E+003,0.0000000000000000E+000,0.3271598865740490E+000,0.0000000000000000E+000,0.7422157723511598E+003,0.9866117537901586E+003,0.1169355295028928E+004,0.9874060990551424E+003,0.1375839275352820E-004,0.2393709152213229E-004,0.8202249465185543E-002 -0.8999999999999861E-007,0.4117000000000000E+004,0.2400000000000000E+002,0.4141000000000000E+004,0.9862474790277143E+003,0.1272288131360001E+004,0.9879052852716108E+003,0.0000000000000000E+000,0.7060850196335427E+003,0.0000000000000000E+000,0.2682396520723499E+000,0.0000000000000000E+000,0.1090648220513395E+004,0.9862474790277143E+003,0.1174502536662851E+004,0.9873385491516563E+003,0.1389060123215629E-004,0.2460412851944469E-004,0.8195479951364321E-002 -0.1000000000000000E-006,0.4115000000000000E+004,0.2600000000000000E+002,0.4141000000000000E+004,0.9852498440632004E+003,0.1198068630765925E+004,0.9865860644095590E+003,0.0000000000000000E+000,0.6895972380924925E+003,0.0000000000000000E+000,0.2535259127695642E+000,0.0000000000000000E+000,0.1047093232723262E+004,0.9852498440632004E+003,0.1116054859979568E+004,0.9860711264620957E+003,0.1398499190478650E-004,0.2391676969803836E-004,0.8190744112954361E-002 +001-TIME,002-nPart-Spec-001,003-nPart-Spec-002,004-nPart-Spec-003,005-TempTra-001,006-TempTra-002,007-TempTra-003,008-TempVib001,009-TempVib002,010-XiVibMean001,011-XiVibMean002,012-TempRot001,013-TempRot002,014-TempTotal001,015-TempTotal002,016-TempTotal003 +0,4141,0,4141,989.993493710047,0,989.993493710047,0,0,0,0,0,0,989.993493710047,0,989.993493710047 +0.00000001,4136,5,4141,989.472616042198,944.950319710458,989.418858137909,0,0,0,0,0,826.762431858545,989.472616042198,897.675164569693,989.36177632779 +0.00000002,4136,5,4141,989.820896510889,937.059043429093,989.757189854186,0,0,0,0,0,826.762431858545,989.820896510889,892.940398800874,989.703919334229 +0.00000003,4133,8,4141,988.849292187099,1177.36161650225,989.213479242043,0,1034.39585713874,0,0.549306144334055,0,904.647132689776,988.849292187099,1064.92216525486,988.996257409157 +4.00000000000002E-08,4132,9,4141,988.933745506157,1181.21323342467,989.351643451403,0,987.064498469711,0,0.511685576220899,0,864.173050630354,988.933745506157,1048.14623191231,989.062437217737 +5.00000000000003E-08,4131,10,4141,988.164303543667,993.674674296939,988.177610403733,0,947.831219229027,0,0.479579054559674,0,825.292173132616,988.164303543667,928.204213957592,988.019507384319 +6.00000000000003E-08,4130,11,4141,988.163600204641,1221.53409632648,988.783517001873,0,914.642004839056,0,0.451801209052363,0,784.210316927732,988.163600204641,1035.66859281223,988.289790718691 +6.99999999999998E-08,4127,14,4141,987.874178778054,1439.48624813948,989.401000553243,0,839.275431110894,0,0.386864314443173,0,827.617788206648,987.874178778054,1169.21081866316,988.487246384524 +7.99999999999992E-08,4123,18,4141,986.611753790159,1497.45924759847,988.832293487949,0,771.895772363203,0,0.327159886574049,0,742.21577235116,986.611753790159,1169.35529502893,987.406099055142 +8.99999999999986E-08,4117,24,4141,986.247479027714,1272.28813136,987.905285271611,0,706.085019633543,0,0.26823965207235,0,1090.6482205134,986.247479027714,1174.50253666285,987.338549151656 +0.0000001,4115,26,4141,985.2498440632,1198.06863076593,986.586064409559,0,689.597238092493,0,0.253525912769564,0,1047.09323272326,985.2498440632,1116.05485997957,986.071126462096 diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/parameter.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/parameter.ini index 461ae2fe6..034efcea0 100755 --- a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/parameter.ini +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/parameter.ini @@ -96,4 +96,4 @@ Part-TimeFracForSampling = 1.0 ManualTimeStep = 1.0E-10 Particles-DSMC-CalcSurfaceVal = T Particles-NumberForDSMCOutputs = 1 -Particles-DSMC-CalcQualityFactors = T +Particles-DSMC-CalcQualityFactors = F From 10daf1b8c6ad7fae56adb53ef12648552cdf6c82 Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Mon, 8 Apr 2024 11:34:31 +0200 Subject: [PATCH 209/222] Problem in the Channelflow_regressioncheck from a wrong assingement of the ParticleVecLength --- src/particles/emission/particle_surface_chemflux.f90 | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index 8471a261f..21269d6b2 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -420,8 +420,9 @@ SUBROUTINE ParticleSurfChemFlux() NbrOfParticle = NbrOfParticle + PartInsSubSide !-- Fill Particle Informations (PartState, Partelem, etc.) + PartID = 1 DO iPart=1,PartInsSubSide - PartID = GetNextFreePosition() + IF ((iPart.EQ.1).OR.PDM%ParticleInside(PartID)) PartID = GetNextFreePosition(iPartTotal+1) IF(Symmetry%Axisymmetric) THEN PartState(1:3,PartID) = CalcPartPosAxisym(minPos, RVec) ELSE @@ -457,8 +458,10 @@ SUBROUTINE ParticleSurfChemFlux() #endif /*USE_LOADBALANCE*/ END IF ! iSide IF (NbrOfParticle.NE.iPartTotal) CALL abort(__STAMP__, 'ERROR in ParticleSurfChemFlux: NbrOfParticle.NE.iPartTotal') - PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle - PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle + IF (iPartTotal.GT.0) THEN + PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle + PDM%ParticleVecLength = MAX(PDM%ParticleVecLength,GetNextFreePosition(0)) + END IF #if USE_LOADBALANCE CALL LBPauseTime(LB_SURFFLUX,tLBStart) #endif /*USE_LOADBALANCE*/ From 8fdef987b3fb9f109f7b23323f11c6c06544dd4f Mon Sep 17 00:00:00 2001 From: Asim Date: Mon, 8 Apr 2024 18:05:15 +0200 Subject: [PATCH 210/222] New specular reflection fpr RotRefFrame and adjustments to the corresponding reggie TC --- .../analyze.ini | 2 +- .../parameter.ini | 6 +++--- .../analyze/particle_analyze_code.f90 | 20 ++++++++++++------- .../surfacemodel/surfacemodel_main.f90 | 10 ++++++++++ 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/regressioncheck/NIG_code_analyze/Rotational_Reference_Frame_Wall_Specular/analyze.ini b/regressioncheck/NIG_code_analyze/Rotational_Reference_Frame_Wall_Specular/analyze.ini index 62b18d068..57d60d773 100644 --- a/regressioncheck/NIG_code_analyze/Rotational_Reference_Frame_Wall_Specular/analyze.ini +++ b/regressioncheck/NIG_code_analyze/Rotational_Reference_Frame_Wall_Specular/analyze.ini @@ -4,7 +4,7 @@ L2_error_name = L2_Part ! t-convergence test analyze_Convtest_t_rate = 0.4 ! allow 4 out of 7 unsuccesful tests -analyze_convtest_t_tolerance = 0.1 +analyze_convtest_t_tolerance = 0.76 analyze_convtest_t_order = 2 analyze_convtest_t_error_name = L2_Part diff --git a/regressioncheck/NIG_code_analyze/Rotational_Reference_Frame_Wall_Specular/parameter.ini b/regressioncheck/NIG_code_analyze/Rotational_Reference_Frame_Wall_Specular/parameter.ini index 0ec8a3b69..739b3ad56 100644 --- a/regressioncheck/NIG_code_analyze/Rotational_Reference_Frame_Wall_Specular/parameter.ini +++ b/regressioncheck/NIG_code_analyze/Rotational_Reference_Frame_Wall_Specular/parameter.ini @@ -25,7 +25,7 @@ Part-AnalyzeStep = 10 ! CALCULATION ! =============================================================================== ! ManualTimeStep = 1E-3,5E-4,1E-4,5E-5,1E-5,5E-6 -tend = 0.38 ! End time +tend = 0.25 ! End time Analyze_dt = 1.0 ! Timestep of analyze outputs CFLscale = 0.5 ! =============================================================================== ! @@ -75,9 +75,9 @@ Part-Species1-Init1-ParticleNumber=1 Part-Species1-Init1-BasePointIC=(/-0.25,0.0,0./) Part-Species1-Init1-NormalIC=(/1.,0.,0.0/) Part-Species1-Init1-velocityDistribution=constant -Part-Species1-Init1-VeloIC=0.0 +Part-Species1-Init1-VeloIC=1.0 -Part-Species1-Init1-VeloVecIC=(/0.0,1.0,0.0/) +Part-Species1-Init1-VeloVecIC=(/1.0,1.0,0.0/) ! =============================================================================== ! ! Analysis ! =============================================================================== ! diff --git a/src/particles/analyze/particle_analyze_code.f90 b/src/particles/analyze/particle_analyze_code.f90 index 761abe2e4..6253ae188 100644 --- a/src/particles/analyze/particle_analyze_code.f90 +++ b/src/particles/analyze/particle_analyze_code.f90 @@ -41,7 +41,7 @@ SUBROUTINE CalcAnalyticalParticleState(t,PartStateAnalytic,alpha_out,theta_out) USE MOD_PICInterpolation_Vars ,ONLY: AnalyticInterpolationPhase,AnalyticInterpolationGamma,AnalyticInterpolationE,AnalyticPartDim USE MOD_PICInterpolation_Vars ,ONLY: TimeReset,r_WallVec,v_WallVec USE MOD_TimeDisc_Vars ,ONLY: TEnd -USE MOD_PARTICLE_Vars ,ONLY: PartSpecies,Species,RotRefFrameOmega,RotRefFrameFreq +USE MOD_PARTICLE_Vars ,ONLY: PartSpecies,Species,RotRefFrameOmega,RotRefFrameFreq, PartState ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !---------------------------------------------------------------------------------------------------------------------------------- @@ -347,12 +347,13 @@ SUBROUTINE CalcAnalyticalParticleState(t,PartStateAnalytic,alpha_out,theta_out) IF(TimeReset.GT.0.0) THEN r_0Vec = r_WallVec v_0Vec = v_WallVec + v_0Vec = v_0Vec - CROSS(RotRefFrameOmega(1:3),r_0Vec) ! Transform velocity into RotRefFrame New_t = t - TimeReset ELSE r_0Vec = Species(iSpec)%Init(1)%BasePointIC(1:3) v_0Vec = Species(iSpec)%Init(1)%VeloVecIC(1:3) * Species(iSpec)%Init(1)%VeloIC New_t = t - v_0Vec = v_0Vec - CROSS(RotRefFrameOmega(1:3),r_0Vec) + v_0Vec = v_0Vec - CROSS(RotRefFrameOmega(1:3),r_0Vec) ! Transform velocity into RotRefFrame END IF r_tVec = r_0Vec + v_0Vec * New_t omega = 2.*PI*RotRefFrameFreq @@ -407,13 +408,18 @@ SUBROUTINE CalcAnalyticalParticleState(t,PartStateAnalytic,alpha_out,theta_out) - ( omega * (COS(omega * New_t) - omega * New_t * SIN(omega * New_t) ) ) & * ( TempArrayCross3(3) - 1/omega * TempArrayCross6(3) ) -! IF((PartStateAnalytic(1).GE.0.0).AND.(TimeReset.LE.0.0)) THEN - IF(ABS(PartStateAnalytic(1)).LT.1E-8) THEN +! IF(ABS(PartStateAnalytic(1)).LT.1E-8) THEN + IF(PartStateAnalytic(1).GT.0.0) THEN TimeReset = t + PartStateAnalytic(1) = 0.0 ! set particle on wall r_WallVec = PartStateAnalytic(1:3) - v_WallVec(1) = -PartStateAnalytic(4) - v_WallVec(2) = PartStateAnalytic(5) - v_WallVec(3) = PartStateAnalytic(6) +! v_WallVec(1) = -PartStateAnalytic(4) +! v_WallVec(2) = PartStateAnalytic(5) +! v_WallVec(3) = PartStateAnalytic(6) + v_0Vec = Species(iSpec)%Init(1)%VeloVecIC(1:3) * Species(iSpec)%Init(1)%VeloIC + v_WallVec = v_0Vec + v_WallVec(1) = - v_WallVec(1) ! mirror velocity (not equal push velocity or PartStateAnalytic(4:6)) + v_WallVec = v_WallVec + CROSS(RotRefFrameOmega(1:3),r_WallVec) ! add wall velocity END IF ! PartStateAnalytic(4:6) = 0.0 END SELECT diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90 index b9f722c98..da2857eca 100644 --- a/src/particles/surfacemodel/surfacemodel_main.f90 +++ b/src/particles/surfacemodel/surfacemodel_main.f90 @@ -346,6 +346,7 @@ SUBROUTINE PerfectReflection(PartID,SideID,n_Loc,opt_Symmetry) INTEGER :: locBCID, SpecID LOGICAL :: Symmetry REAL :: POI_vec(1:3) +REAL :: NormNewVeloPush(1:3) REAL :: dtVar !=================================================================================================================================== ! Initialize @@ -423,6 +424,15 @@ SUBROUTINE PerfectReflection(PartID,SideID,n_Loc,opt_Symmetry) NewVeloPush(1:3) = PartState(4:6,PartID) NewVeloPush(1:3) = NewVeloPush(1:3) - CROSS(RotRefFrameOmega(1:3),LastPartPos(1:3,PartID)) NewVeloPush(1:3) = NewVeloPush(1:3) + CalcPartRHSRotRefFrame(LastPartPos(1:3,PartID),NewVeloPush(1:3)) * (1.0 - POI_fak) * dtVar + ! Make sure the NewVeloPush is pointing away from the wall + IF(DOT_PRODUCT(n_loc,NewVeloPush(1:3)).GT.0.) THEN + ! Normal component of new velo push v = (v dot n / |n|^2) * n, |n| = 1 + NormNewVeloPush(1:3) = DOT_PRODUCT(n_loc,NewVeloPush(1:3)) * n_loc + ! Nullyfy normal component and keeping rest of NewVeloPush + NewVeloPush(1:3) = NewVeloPush(1:3) - NormNewVeloPush(1:3) + ! Move particle a little bit into the domain to avoid losing particles + NewVeloPush(1:3) = NewVeloPush(1:3) - 1E-6 * n_loc + END IF ! Store the new rotational reference frame velocity PartVeloRotRef(1:3,PartID) = NewVeloPush(1:3) ! Calc new particle position with NewVeloPush From 4a053dfd6cf3c48692cab592abbebae690c5b733 Mon Sep 17 00:00:00 2001 From: Asim Date: Tue, 9 Apr 2024 13:48:55 +0200 Subject: [PATCH 211/222] New Reggie TC for SubCycling within Rot Ref Frame --- REGGIE.md | 1 + .../DSMC.ini | 10 ++ .../ParticlePosition_Ref.csv | 4 + .../analyze.ini | 6 ++ .../command_line.ini | 2 + .../externals.ini | 7 ++ .../hopr.ini | 55 +++++++++++ .../parameter.ini | 99 +++++++++++++++++++ .../readme.md | 5 + 9 files changed, 189 insertions(+) create mode 100644 regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/DSMC.ini create mode 100644 regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/ParticlePosition_Ref.csv create mode 100644 regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/analyze.ini create mode 100644 regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/command_line.ini create mode 100644 regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/externals.ini create mode 100644 regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/hopr.ini create mode 100644 regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/parameter.ini create mode 100644 regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/readme.md diff --git a/REGGIE.md b/REGGIE.md index 3a91e50d5..f322744a1 100644 --- a/REGGIE.md +++ b/REGGIE.md @@ -57,6 +57,7 @@ Small test cases to check features with DSMC timedisc: [Link to build](regressio | | Rotational_Reference_Frame_Regions | | Rotational reference frame with several regions, switching between stationary and rotating frame | nProcs=1,2,3,4 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Regions/readme.md) | | | Rotational_Reference_Frame_RotBC | | Rotational reference frame in combination with the rotationally periodic BC | nProcs=1,2,3,4 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_RotBC/readme.md) | | | Rotational_Reference_Frame_Temperature | | Rotational reference frame: Many particles, multiple revolutions | nProcs=1,2,4 | Temperature | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Temperature/readme.md) | +| | Rotational_Reference_Frame_Subcycling | | Time sub cycling method within the rotational reference frame | nProcs=1 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/readme.md | | | SurfaceOutput | | Test of CalcSurfaceImpact and CalcBoundaryParticleOutput through defined electron flux | nProcs=1,4 | PartAnalyze, SurfaceAnalyze, DSMCSurfState | [Link](regressioncheck/CHE_DSMC/SurfaceOutput/readme.md) | | | DSMC_QualityFactors | | Quality factors: mean/max collision probability, MCS over MFP, mean free path, ResolvedCellPercentage | nProcs=1 | PartAnalyze | [Link](regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md) | | | DSMC_QualityFactors_MPI | | Quality factors: ResolvedTimestep, max collision probability, MCS over MFP, ResolvedCellPercentage | nProcs=4 | PartAnalyze | [Link](regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/readme.md) | diff --git a/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/DSMC.ini b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/DSMC.ini new file mode 100644 index 000000000..fa26a45d0 --- /dev/null +++ b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/DSMC.ini @@ -0,0 +1,10 @@ +! =============================================================================== ! +! Species1, O2 +! =============================================================================== ! +Part-Species1-InteractionID = 2 +Part-Species1-Tref = 273 +Part-Species1-dref = 4.07E-10 +Part-Species1-omega=0.27 +Part-Species1-CharaTempRot=2.1 +Part-Species1-CharaTempVib=2272.18 +Part-Species1-Ediss_eV=5.17 \ No newline at end of file diff --git a/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/ParticlePosition_Ref.csv b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/ParticlePosition_Ref.csv new file mode 100644 index 000000000..a8c7c3363 --- /dev/null +++ b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/ParticlePosition_Ref.csv @@ -0,0 +1,4 @@ +"001-time","PartNum","PartPosX","PartPosY","PartPosZ","PartVelX","PartVelY","PartVelZ","gamma","Element" +0.0000000000000000E+000,0.1000000000000000E+001,-.2500000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.7071067811865476E+001,0.7071067811865476E+001,0.0000000000000000E+000,0.1000000000000001E+001,0.3000000000000000E+001 +0.2000000000000000E-001,0.1000000000000000E+001,-.4716580473546355E-002,0.1782332060813231E+000,0.0000000000000000E+000,0.7071067811865476E+001,0.7071067811865476E+001,0.0000000000000000E+000,0.1000000000000001E+001,0.1000000000000000E+001 +0.4000000000000000E-001,0.1000000000000000E+001,-.1909047836164587E-001,0.4039505911426143E+000,0.0000000000000000E+000,-.1268564898553164E+002,0.7071067811865476E+001,0.0000000000000000E+000,0.1000000000000001E+001,0.1000000000000000E+001 diff --git a/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/analyze.ini b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/analyze.ini new file mode 100644 index 000000000..4ddd7ae19 --- /dev/null +++ b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/analyze.ini @@ -0,0 +1,6 @@ +! compare columns +compare_column_file = ParticlePosition.csv +compare_column_reference_file = ParticlePosition_Ref.csv +compare_column_index = 0,2,3 ! column index for comparison (starts at 0) +compare_column_tolerance_value = 0.0001 ! tolerance (depends on machine accuracy and MPI) +compare_column_tolerance_type = relative ! absolute or relative tolerance diff --git a/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/command_line.ini b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/command_line.ini new file mode 100644 index 000000000..2df6de114 --- /dev/null +++ b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/command_line.ini @@ -0,0 +1,2 @@ +MPI=1 +cmd_suffix=DSMC.ini diff --git a/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/externals.ini b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/externals.ini new file mode 100644 index 000000000..563c06535 --- /dev/null +++ b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/externals.ini @@ -0,0 +1,7 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre + +nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime diff --git a/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/hopr.ini b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/hopr.ini new file mode 100644 index 000000000..4a27dd61b --- /dev/null +++ b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/hopr.ini @@ -0,0 +1,55 @@ +ProjectName = cube +Debugvisu = T +DebugVisuLevel=2 +NVisu =1 +Mode =1 + +DEFVAR = (REAL): minus_x = -0.5 +DEFVAR = (REAL): plus_x = 0.5 +DEFVAR = (REAL): top_x_incline = 0.0 + +DEFVAR = (REAL): minus_y = -0.5 +DEFVAR = (REAL): plus_y = 0.5 + +DEFVAR = (REAL): minus_z = -0.1 +DEFVAR = (REAL): plus_z = 0.1 + +nZones = 3 + +Corner =(/minus_x,minus_y,minus_z ,, 0.0,minus_y,minus_z ,, 0.0,0.0,minus_z ,, minus_x,0.0,minus_z ,, minus_x,minus_y,plus_z ,, 0,minus_y,plus_z ,, 0.0,0.0,plus_z ,, minus_x,0.0,plus_z /) +nElems =(/1,1,1/) +BCIndex =(/6 ,4 ,0 ,0 ,2 ,5/) +elemtype =108 + +Corner =(/minus_x,0.0,minus_z ,, 0.0,0.0,minus_z ,,top_x_incline,plus_y,minus_z ,, minus_x,plus_y,minus_z ,, minus_x,0.0,plus_z ,,0.0,0.0,plus_z ,, top_x_incline,plus_y,plus_z ,, minus_x,plus_y,plus_z /) +nElems =(/1,1,1/) +BCIndex =(/6 ,0 ,7 ,3 ,2 ,5/) +elemtype =108 + +Corner =(/0.0,minus_y,minus_z ,, plus_x,minus_y,minus_z ,, plus_x,0.0,minus_z ,, 0.0,0.0,minus_z ,, 0.0,minus_y,plus_z ,, plus_x,minus_y,plus_z ,, plus_x,0.0,plus_z ,, 0.0,0.0,plus_z /) +nElems =(/1,1,1/) +BCIndex =(/6 ,4 ,1 ,7 ,0 ,5/) +elemtype =108 + + + + +nUserDefinedBoundaries=7 +BoundaryName=BC_Xplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Xminus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Yplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Yminus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zplus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Zminus +BoundaryType=(/4,0,0,0/) +BoundaryName=BC_Wall +BoundaryType=(/4,0,0,0/) + +postscalemesh=true +!meshscale=1e-5 +jacobiantolerance=1e-20 diff --git a/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/parameter.ini b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/parameter.ini new file mode 100644 index 000000000..5f7f4e378 --- /dev/null +++ b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/parameter.ini @@ -0,0 +1,99 @@ +! =============================================================================== ! +! EQUATION (linearscalaradvection) +! =============================================================================== ! +IniExactFunc = 0 +! =============================================================================== ! +! DISCRETIZATION +! =============================================================================== ! +N = 1 ! Polynomial degree +NAnalyze = 1 ! Number of analyze points +! =============================================================================== ! +! MESH +! =============================================================================== ! +MeshFile = cube_mesh.h5 +useCurveds = T +! =============================================================================== ! +! OUTPUT / VISUALIZATION +! =============================================================================== ! +ProjectName = RotRefFrame +Logging = F +WriteErrorFiles = F +IterDisplayStep = 1 +DoCalcErrorNorms = T +Part-AnalyzeStep = 10 +! =============================================================================== ! +! CALCULATION +! =============================================================================== ! +ManualTimeStep = 2E-3 +tend = 4E-2 ! End time +Analyze_dt = 1.0 ! Timestep of analyze outputs +CFLscale = 0.5 + +Part-UseRotationalReferenceSubCycling = T +Part-NumberSubCyclingSteps = 200 +! =============================================================================== ! +! BOUNDARIES +! =============================================================================== ! +Part-nBounds=7 +Part-Boundary1-SourceName=BC_Xplus +Part-Boundary1-Condition=open +Part-Boundary2-SourceName=BC_Xminus +Part-Boundary2-Condition=open +Part-Boundary3-SourceName=BC_Yplus +Part-Boundary3-Condition=open +Part-Boundary4-SourceName=BC_Yminus +Part-Boundary4-Condition=open +Part-Boundary5-SourceName=BC_Zplus +Part-Boundary5-Condition=open +Part-Boundary6-SourceName=BC_Zminus +Part-Boundary6-Condition=open +Part-Boundary7-SourceName=BC_Wall +Part-Boundary7-Condition=reflective +Part-Boundary7-WallTemp = 1.0 +Part-Boundary7-MomentumACC = 0. +Part-Boundary7-TransACC = 0. +Part-Boundary7-VibACC = 0. +Part-Boundary7-RotACC = 0. +Part-Boundary7-ElecACC = 0. +Part-Boundary7-RotVelo = T +Part-Boundary7-RotAxis = 3 +Part-Boundary7-RotFreq = 5 +Part-FIBGMdeltas=(/0.5,0.5,0.2/) +! =============================================================================== ! +! Tracking +! =============================================================================== ! +TrackingMethod = triatracking +! =============================================================================== ! +! PARTICLES +! =============================================================================== ! +Part-maxParticleNumber=10 +Part-nSpecies=1 +Part-Species1-ChargeIC=0. +Part-Species1-MassIC=1. +Part-Species1-MacroParticleFactor=1E0 + +Part-Species1-nInits = 1 +Part-Species1-Init1-SpaceIC=point +Part-Species1-Init1-ParticleNumber=1 +Part-Species1-Init1-BasePointIC=(/-0.25,0.0,0./) +Part-Species1-Init1-NormalIC=(/0.,0.,0.0/) +Part-Species1-Init1-velocityDistribution=constant +Part-Species1-Init1-VeloIC=10. +Part-Species1-Init1-VeloVecIC=(/1.0,1.0,0.0/) +! =============================================================================== ! +! Analysis +! =============================================================================== ! +Part-TrackPosition = T +! =============================================================================== ! +! DSMC +! =============================================================================== ! +UseDSMC=true +Particles-DSMC-CollisMode=0 ! Collisionless flow +Part-NumberOfRandomSeeds =2 +Particles-RandomSeed1= 1 +Particles-RandomSeed2= 2 +Particles-HaloEpsVelo=2 + +Part-UseRotationalReferenceFrame = T +Part-RotRefFrame-Axis = 3 +Part-RotRefFrame-Frequency = 5 diff --git a/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/readme.md b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/readme.md new file mode 100644 index 000000000..46e868f23 --- /dev/null +++ b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/readme.md @@ -0,0 +1,5 @@ +# Rotational frame of reference: SubCycling +* Frame of reference is rotating with 5 revolution per second +* A single particle is initially placed at coordinates (x,y) = (-0.25,-0.0) with a velocity vector of (10,10,0). It is anticipated to traverse a circular-like trajectory within the rotating frame of reference due to fictitious forces. +* A wall, rotating synchronously with the frame of reference, induces a specular reflection upon collision. +* A relatively large time step is employed (Delta_t=2E-3). Reference positions are calculated using a smaller time step (1E-5). Utilization of SubCycling with 200 sub-steps ensures identical positions in the regression test as in the reference case. Disabling SubCycling results in failure of the regression test. From d6a2b7e8af4dfc71751963bec30fd442846120b6 Mon Sep 17 00:00:00 2001 From: LauterbachS Date: Wed, 10 Apr 2024 14:25:24 +0200 Subject: [PATCH 212/222] Increase tolerance of regressioncheck --- .../ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/analyze.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/analyze.ini b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/analyze.ini index e8a06e718..6e6122776 100644 --- a/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/analyze.ini +++ b/regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/analyze.ini @@ -2,7 +2,7 @@ h5diff_file = coverage_DSMCSurfChemState_000.0000000100.h5 h5diff_reference_file = coverage_DSMCSurfChemState_000.0000000100_ref.h5 h5diff_data_set = SurfaceData -h5diff_tolerance_value = 20E-2 +h5diff_tolerance_value = 50E-2 h5diff_tolerance_type = relative !h5diff_max_differences = 5 From c6da5b30aaf922c143d2bc5c9a52120bfa137fde Mon Sep 17 00:00:00 2001 From: Patrick Kopper Date: Wed, 10 Apr 2024 14:35:20 +0200 Subject: [PATCH 213/222] Do not include system libraries when using self-built math libraries --- CMakeListsLib.txt | 7 +++---- CMakeListsMachine.txt | 5 +++-- src/posti/superB/CMakeLists.txt | 2 +- src/posti/visu/CMakeLists.txt | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CMakeListsLib.txt b/CMakeListsLib.txt index ba1928322..00dab6ecd 100644 --- a/CMakeListsLib.txt +++ b/CMakeListsLib.txt @@ -344,7 +344,6 @@ ENDIF() # Try to find system LAPACK/OpenBLAS FIND_PACKAGE(LAPACK QUIET) IF (LAPACK_FOUND) - LIST(APPEND linkedlibs ${LAPACK_LIBRARIES}) MESSAGE (STATUS "[BLAS/Lapack] found in system libraries") SET(LIBS_BUILD_MATH_LIB OFF CACHE BOOL "Compile and build math library") ELSE() @@ -409,10 +408,10 @@ ELSE() ELSEIF (LIBS_BUILD_MATH_LIB_VENDOR MATCHES "OpenBLAS") IF("${GIT_ORIGIN}" STREQUAL "") # Use https://github.com/xianyi/OpenBLAS when using piclas without git - SET (MATHLIB_DOWNLOAD "https://github.com/xianyi/OpenBLAS.git") + SET (MATHLIB_DOWNLOAD "https://github.com/OpenMathLib/OpenBLAS.git") ELSEIF("${GIT_ORIGIN}" MATCHES ".github.com") # Use https://github.com/xianyi/OpenBLAS when using piclas from github.com - SET (MATHLIB_DOWNLOAD "https://github.com/xianyi/OpenBLAS.git") + SET (MATHLIB_DOWNLOAD "https://github.com/OpenMathLib/OpenBLAS.git") ELSE() IF("${GIT_ORIGIN}" MATCHES "https://gitlab-ci-token") # Use https://piclas.boltzplatz.eu/piclas/OpenBLAS.git when gitlab runner needs to download libs @@ -616,7 +615,7 @@ ENDIF() # # IF(LIBS_USE_OPENMP) # IF ("${CMAKE_VERSION}" VERSION_LESS 3.1.0) -# MESSAGE(WARNING "For finding OpenMP Fortran flags at least CMake version 3.1.0 is # required. Please specify flags manually or use newer CMake version.") +# MESSAGE(WARNING "For finding OpenMP Fortran flags at least CMake version 3.1.0 is required. Please specify flags manually or use newer CMake version.") # ENDIF() # # If library is specifically requested, it is required # FIND_PACKAGE(OpenMP REQUIRED) diff --git a/CMakeListsMachine.txt b/CMakeListsMachine.txt index c100e29cf..c14fef75c 100644 --- a/CMakeListsMachine.txt +++ b/CMakeListsMachine.txt @@ -147,7 +147,7 @@ ELSEIF (CMAKE_FQDN_HOST MATCHES "^ila(head.*|cfd.*)\.ila.uni\-stuttgart\.de") ELSEIF (CMAKE_FQDN_HOST MATCHES "^(xenon.*|argon.*)\.ila.uni\-stuttgart\.de") MESSAGE(STATUS "Compiling on ILA student cluster") - SET(FLEXI_INSTRUCTION "-march=native -mtune=native") + SET(PICLAS_INSTRUCTION "-march=native -mtune=native") # Work around MPI-IO issue 4446 on machines mountng storage via NFS ADD_DEFINITIONS(-DNFS) @@ -205,12 +205,13 @@ IMPLICIT NONE PRIVATE CONTAINS ! Check for MOVE_ALLOC feature -SUBROUTINE GCC_PARSE_ASSOCAIATE() +SUBROUTINE GCC_PARSE_ASSOCIATE() REAL::x1(3),x2(3) ASSOCIATE(v1 => x1, v2 => x2) v1 = 0 v2 = 1 v1 = 0 + v1 +END ASSOCIATE END SUBROUTINE GCC_PARSE_ASSOCIATE END MODULE GCC13MOD diff --git a/src/posti/superB/CMakeLists.txt b/src/posti/superB/CMakeLists.txt index ba463a81f..df1dd445b 100644 --- a/src/posti/superB/CMakeLists.txt +++ b/src/posti/superB/CMakeLists.txt @@ -33,4 +33,4 @@ ADD_DEPENDENCIES(${TOOL_NAME}libF90 ${TOOL_NAME}target) # Standalone superB executable add_exec( ${TOOL_NAME} ${TOOL_DIR}/${TOOL_NAME}.f90) TARGET_LINK_LIBRARIES(${TOOL_NAME} ${TOOL_NAME}lib libpiclasshared) -ADD_DEPENDENCIES( ${TOOL_NAME} ${TOOL_NAME}lib libpiclasshared) \ No newline at end of file +ADD_DEPENDENCIES( ${TOOL_NAME} ${TOOL_NAME}lib libpiclasshared) diff --git a/src/posti/visu/CMakeLists.txt b/src/posti/visu/CMakeLists.txt index f722bffbf..3eefcbdd8 100644 --- a/src/posti/visu/CMakeLists.txt +++ b/src/posti/visu/CMakeLists.txt @@ -58,4 +58,4 @@ IF (POSTI_USE_PARAVIEW AND ParaView_FOUND) ADD_DEPENDENCIES( visuReader ${TOOL_NAME}lib libpiclasshared) TARGET_LINK_LIBRARIES(visuReader PUBLIC ${TOOL_NAME}lib libpiclasshared) -ENDIF() \ No newline at end of file +ENDIF() From b2fd683fcb16113cb48e8e6e04bbb7af7682fa49 Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Wed, 10 Apr 2024 17:18:48 +0200 Subject: [PATCH 214/222] Increased tolerance slightly for RadTrans_Cylinder_3D --- regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/analyze.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/analyze.ini b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/analyze.ini index 847c96315..5e67d7af4 100644 --- a/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/analyze.ini +++ b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/analyze.ini @@ -2,6 +2,6 @@ h5diff_file = RadTrans_Cylinder_3D_RadiationState.h5 h5diff_reference_file = RadTrans_Cylinder_3D_reference_RadiationState.h5 h5diff_data_set = ElemData -h5diff_tolerance_value = 10.0e-2 +h5diff_tolerance_value = 12.0e-2 h5diff_tolerance_type = relative h5diff_max_differences = 0 From 4b1cb8932cfebc342d7bab6719d825f079236c4e Mon Sep 17 00:00:00 2001 From: Valentin Schunck Date: Fri, 12 Apr 2024 18:04:55 +0000 Subject: [PATCH 215/222] [feature.unifiedSpeciesDatabase] SpeciesDatabase new format with extended reactions --- SpeciesDatabase.h5 | Bin 2271720 -> 2330312 bytes docs/documentation/userguide/appendix.md | 87 +++ .../userguide/features-and-models/BGG.md | 2 +- .../userguide/features-and-models/DSMC.md | 16 +- .../features-and-models/SpeciesDatabase.md | 44 +- docs/documentation/userguide/tools.md | 191 ++++--- .../CHE_DSMC/MCC_SpeciesTimeStep/DSMC.ini | 38 -- .../LXCat_Database_Phelps_Ar-e_100keV.h5 | Bin 12704 -> 0 bytes .../CHE_DSMC/MCC_SpeciesTimeStep/analyze.ini | 4 +- .../MCC_SpeciesTimeStep/channel_mesh.h5 | Bin 23858 -> 0 bytes .../MCC_SpeciesTimeStep/command_line.ini | 2 +- .../MCC_SpeciesTimeStep/externals.ini | 6 + .../MCC_SpeciesTimeStep/parameter.ini | 41 +- .../CHE_DSMC/MCC_SpeciesTimeStep/readme.md | 3 +- .../NIG_Reservoir/CAT_RATES_ER/DSMC.ini | 0 .../NIG_Reservoir/CAT_RATES_ER/hopr.ini | 0 .../NIG_Reservoir/CAT_RATES_ER/parameter.ini | 0 src/particles/dsmc/dsmc_chemical_init.f90 | 153 +++-- src/particles/dsmc/dsmc_init.f90 | 6 +- .../create_electronic_database_atoms.py | 127 ----- .../Air_11Spec_27Reac_Park1993.ini | 0 .../Air_11Spec_43Reac_Farbar2008.ini | 0 .../Air_11Spec_51Reac_Park1993.ini | 0 .../Air_5Spec_8Reac_Laux1995.ini | 0 .../Air_5Spec_8Reac_Park1993.ini | 0 .../{ => archive}/CH4-Ar_8Spec_7Reac.ini | 0 .../{ => archive}/CH4_7Spec_7Reac.ini | 0 .../CO2_6Spec_10Reac_Johnston2014.ini | 0 ...n-Air_7Spec_3Reac_Voronov1997Plane2015.ini | 0 .../Mars_11Spec_27Reac_Johnston2014.ini | 0 .../Mars_16Spec_31Reac_Park1994.ini | 0 .../Mars_17Spec_42Reac_Johnston2014.ini | 0 .../{ => archive}/REF_DSMC.ini | 0 .../Titan_14Spec_24Reac_Savajano2011.ini | 0 .../Titan_18Spec_30Reac_Savajano2011.ini | 0 .../XSec_H2-Plasma_6Spec_11Reac.ini | 0 .../XSec_H_Ionization_3Spec_1Reac.ini | 0 .../XSec_Xe-Plasma_3Spec_1Reac.ini | 0 .../{ => archive}/create_species_database.py | 278 +++++++++ .../archive/extend_reactions.py | 346 +++++++++++ .../{ => archive}/functions_database.py | 0 .../custom_electronic_levels_SPECIES.csv | 4 + tools/species_database/edit_crosssections.py | 0 tools/species_database/edit_reactions.py | 256 +++++++++ tools/species_database/edit_species.py | 539 ++++++++++++++++++ tools/species_database/edit_surfchem.py | 0 tools/species_database/general_functions.py | 82 +++ tools/species_database/maintain_database.py | 153 +++++ 48 files changed, 2068 insertions(+), 310 deletions(-) delete mode 100644 regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/DSMC.ini delete mode 100644 regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/LXCat_Database_Phelps_Ar-e_100keV.h5 delete mode 100644 regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/channel_mesh.h5 create mode 100644 regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/externals.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CAT_RATES_ER/DSMC.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CAT_RATES_ER/hopr.ini mode change 100755 => 100644 regressioncheck/NIG_Reservoir/CAT_RATES_ER/parameter.ini delete mode 100644 tools/electronic_data/create_electronic_database_atoms.py rename tools/species_database/{ => archive}/Air_11Spec_27Reac_Park1993.ini (100%) rename tools/species_database/{ => archive}/Air_11Spec_43Reac_Farbar2008.ini (100%) rename tools/species_database/{ => archive}/Air_11Spec_51Reac_Park1993.ini (100%) rename tools/species_database/{ => archive}/Air_5Spec_8Reac_Laux1995.ini (100%) rename tools/species_database/{ => archive}/Air_5Spec_8Reac_Park1993.ini (100%) rename tools/species_database/{ => archive}/CH4-Ar_8Spec_7Reac.ini (100%) rename tools/species_database/{ => archive}/CH4_7Spec_7Reac.ini (100%) rename tools/species_database/{ => archive}/CO2_6Spec_10Reac_Johnston2014.ini (100%) rename tools/species_database/{ => archive}/Fe-in-Air_7Spec_3Reac_Voronov1997Plane2015.ini (100%) rename tools/species_database/{ => archive}/Mars_11Spec_27Reac_Johnston2014.ini (100%) rename tools/species_database/{ => archive}/Mars_16Spec_31Reac_Park1994.ini (100%) rename tools/species_database/{ => archive}/Mars_17Spec_42Reac_Johnston2014.ini (100%) rename tools/species_database/{ => archive}/REF_DSMC.ini (100%) rename tools/species_database/{ => archive}/Titan_14Spec_24Reac_Savajano2011.ini (100%) rename tools/species_database/{ => archive}/Titan_18Spec_30Reac_Savajano2011.ini (100%) rename tools/species_database/{ => archive}/XSec_H2-Plasma_6Spec_11Reac.ini (100%) rename tools/species_database/{ => archive}/XSec_H_Ionization_3Spec_1Reac.ini (100%) rename tools/species_database/{ => archive}/XSec_Xe-Plasma_3Spec_1Reac.ini (100%) rename tools/species_database/{ => archive}/create_species_database.py (60%) create mode 100644 tools/species_database/archive/extend_reactions.py rename tools/species_database/{ => archive}/functions_database.py (100%) create mode 100644 tools/species_database/custom_electronic_levels_SPECIES.csv create mode 100644 tools/species_database/edit_crosssections.py create mode 100644 tools/species_database/edit_reactions.py create mode 100644 tools/species_database/edit_species.py create mode 100644 tools/species_database/edit_surfchem.py create mode 100644 tools/species_database/general_functions.py create mode 100644 tools/species_database/maintain_database.py diff --git a/SpeciesDatabase.h5 b/SpeciesDatabase.h5 index cc3e1d2dca57302f3d942e9c0c48f57c6fa31455..8d6b16afa459b989c325cc05aabc173144f647b6 100644 GIT binary patch delta 71989 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 Qf3@m_M_qNI@2Z#o4>hZr>i_@% diff --git a/docs/documentation/userguide/appendix.md b/docs/documentation/userguide/appendix.md index b0450c895..9ecca402e 100644 --- a/docs/documentation/userguide/appendix.md +++ b/docs/documentation/userguide/appendix.md @@ -24,3 +24,90 @@ Combinations that can cause problems are listed in the following table | --- | :------------: | :---------: | :------: | :----: | :-----------: | :------: | :-----------------------------------------------------------------------: | | SC | 1.4.0 (Nov 19) | boltzreggie | gnu9.2.0 | 1.10.5 | openmpi-4.0.1 | 3.15.3-d | Does not work for more than 3 processors probably due to a problem with the OpenMPI version | | | | | | | | | | + +## Unified Species Database (USD) + +This section documents the initial creation process for the database, but since it is updated all the time it is recommended that modifications and maintenance are performed using the scripts in the *tools* folder: `piclas/tools/species_database/`. These scripts are meant to provide a controlled and uniform approach to database management. +All files to create the original database were moved to `piclas/tools/archive/`. + + +A tool to create a database containing cross-section, electronic states, Arrhenius rates, and species data can be found in the *tools* folder: `piclas/tools/species_database/`. +The Python script (python3.7) `create_species_database.py` creates a new database or expands an existing one combining all necessary parameters (formerly read-in through ini files). The script uses the `numpy`, `h5py`, `argparse`,`datetime`, `cmath`, and `matplotlib.rcsetup` packages. To create the species database run the command: + + python3.7 create_species_database.py + +If electronic states or cross-section data should be added to the species database, an electronic states `Electronic-State-Database.h5` and a cross-section database `XSec-Database.h5` need to be built before. + +If nothing additionally is specified, the following filenames are called: `DSMC.ini` for the parameter, gas-phase reaction input and `Species_Database.h5` for the final output. For custom file names and for the inclusion of electronic and cross-section data, the following options can be added: + + python3 create_species_database.py --parameter parameter-filename --electronic electronic_statefile --crosssection crosssection_statefile --output output_filename --reference reference-name + +or + + python3 create_species_database.py -p parameter-filename -e electronic_statefile -c crosssection_statefile -o output_filename -r reference-name + +The data is grouped in the output file, as shown in the following example: + + Cross-Sections (group) + H2-H2Ion1 (dataset) + Reaction (group) + CH3_CH2+H (dataset) + Chemistry model (attributes) + Arrhenius parameters (attributes) + O2+M_O+O+M (dataset) + Chemistry model (attributes) + Arrhenius parameters (attributes) + Fe_FeIon1+electron (dataset) + Chemistry model (attributes) + Arrhenius parameters (attributes) + Species (group) + H2 (group) + Electronic levels (dataset) + Species parameters (attributes) + H2Ion1 (group) + Electronic levels (dataset) + Species parameters (attributes) + electron (group) + Electronic levels (dataset) + Species parameters (attributes) + +For cross-sections, reactions and species data, the former `DSMC.ini` files are used to create the database. However, every species must be defined to create the database and to run simulations. + + Part-Species1-SpeciesName=CO2 + +The name of the reaction is optional, if none is given, the reaction name is created automatically from the reactants and products, following the naming convention defined below: + + Reac1+Reac2_Prod1+Prod2+Prod3 + Reac1+Reac2_Prod1+Prod2+Prod3#2 + +Non-reacting partners can be given as A (atoms or similar) or M (molecules or similar) in the reaction name. If a name is defined in the input file, the programm automatically renames it according to the set convention. If multiple sets of parameters or multiple models exist for the same reaction, a counter variable f.e. '#5' is added at the end of the reaction name. + +For reactions a chemistry model is defined in all cases. The name of the given parameter-file is automatically taken as the model name. To have a clear distinction, the following naming convention should be used for the parameter-filename and thus the chemistry model for the reactions: + + PlanetAtmosphere_XSpec_XReac_Source (Titan_18Spec_30Reac_Gokcen2007) + TestCase_XSpec_XReac_Source (CO2_6Spec_10Reac_Johnston2014) + +In addition to creating a new database, the same script can be used to extend an existing version. For this, only the name of the existing database needs to be defined in the call to create_species_database.py. The function automatically tests if the provided data is already included and adds them if not. + +After creating the database the script `extend_reactions.py` in `piclas/tools/archive/` is used to allow one reaction to be part of more than one chemistry model. In this script there are some hard coded changes to ensure a consistent documentation, so no changes by hand had to be made, e.g. changing the reaction model to 'QK' for these reactions 'O2+electron_O2Ion1+electron+electron#1','O+electron_OIon1+electron+electron#1' and 'CO+electron_COIon1+electron+electron#1'. + +### Electronic database + +This function was also moved to the *tools* folder: `piclas/tools/species_database/`. If a new atom species is added the electronic excitation states are added to the database with the data from the NIST database (https://physics.nist.gov/cgi-bin/ASD/energy1.pl). +The folder `piclas/tools/electronic_database/` was removed to enable a uniform handling of electronic excitation states, but the section is kept for clarity. + +A tool to create a database containing electronic excitation states can be found in the *tools* folder: `piclas/tools/electronic_database/`. +The Python script (python3.7) `create_electronic_database_atoms.py` can be used to populate a PICLas-compatible cross-section database, using +the `pandas`, `h5py`, `io`, `re`, `datetime` and `requests` packages. It can be excuted with + + python3.7 `create_electronic_database_atoms.py` + +The script gets the data from the NIST database (https://physics.nist.gov/cgi-bin/ASD/energy1.pl) and stores it in an h5-database. Additional species can be added by adapting the `species-list` parameter. + +### Reactions + +This function was also moved to the *tools* folder: `piclas/tools/species_database/`. If a new reaction is added the necessary data is read in from user inputs or from the name of the reaction. + +Reactions can be defined in a separate group as shown above, named by the product species, and added manually using h5py or +[HDF View](https://www.hdfgroup.org/downloads/hdfview/) (Make sure to re-open the file as `Read/Write` to be able to modify and create the dataset.). The ionization process from the LXCat database is not added as a reaction, +however, the cross-section can be used. An additional source for cross-sectional data for reactions is the [NIFS database](https://dbshino.nifs.ac.jp/nifsdb/). \ No newline at end of file diff --git a/docs/documentation/userguide/features-and-models/BGG.md b/docs/documentation/userguide/features-and-models/BGG.md index 86fd673bf..8467defca 100644 --- a/docs/documentation/userguide/features-and-models/BGG.md +++ b/docs/documentation/userguide/features-and-models/BGG.md @@ -96,7 +96,7 @@ collision cross-sections have to be supplied via read-in from a database Cross-section data can be retrieved from the [LXCat database](https://fr.lxcat.net/home/) {cite}`Pitchford2017` and converted with a Python script provided in the tools folder: `piclas/tools/crosssection_database`. Details on how to create an own database with -custom cross-section data is given in Section {ref}`ssec:tools-xsec-collision`. Finally, the input which species should be treated with the MCC +custom cross-section data is given in Section {ref}`sssec:tools-maintain-database-xsec-collision`. Finally, the input which species should be treated with the MCC model is required Part-Species2-SpeciesName = electron diff --git a/docs/documentation/userguide/features-and-models/DSMC.md b/docs/documentation/userguide/features-and-models/DSMC.md index 1ec6de4b2..9c2c17e1a 100644 --- a/docs/documentation/userguide/features-and-models/DSMC.md +++ b/docs/documentation/userguide/features-and-models/DSMC.md @@ -164,7 +164,7 @@ parameters can be obtained from e.g. {cite}`Swaminathan-Gopalan2016`. ### Cross-section based collision probabilities Cross-section data to model collisional and relaxation probabilities (e.g. in case of electron-neutral collisions), analogous to -Monte Carlo Collisions, can be utilized and is described in Section {ref}`ssec:tools-xsec-collision` and {ref}`sec:xsec-chemistry`. +Monte Carlo Collisions, can be utilized and is described in Section {ref}`sssec:tools-maintain-database-xsec-collision` and {ref}`sec:xsec-chemistry`. (sec:DSMC-relaxation)= ## Inelastic Collisions \& Relaxation @@ -256,15 +256,10 @@ using an instantaneous translational cell temperature. (sec:DSMC-electronic-relaxation)= ### Electronic Relaxation -For the modelling of electronic relaxation, three models are available: the model by Liechty et al. {cite}`Liechty2011a` and a BGK Landau-Teller like model {cite}`Pfeiffer2018b`,{cite}``Pfeiffer2018b``', where each +For the modelling of electronic relaxation, three models are available: the model by Liechty et al. {cite}`Liechty2011a` and a BGK Landau-Teller like model {cite}`Pfeiffer2018b`, where each particle has a specific electronic state and the model by Burt and Eswar {cite}`Burt2015b`, where each particle has an electronic distribution function attached. The three models utilize tabulated energy levels, which can be found in literature for a wide range of -species (e.g. for monatomic {cite}`NISTASD`, diatomic {cite}`Huber1979`, polyatomic {cite}`Herzberg1966` molecules). An example -database `DSMCSpecies_electronic_state_full_Data.h5` can be found in e.g. -`piclas/regressioncheck/NIG_Reservoir/CHEM_EQUI_TCE_Air_5Spec`, where the energy levels are stored in containers and -accessed via the species name, e.g. `Part-Species1-SpeciesName=N2`. The database is described in Section {ref}`ssec:tools-electronic-database`. Each level is described by its degeneracy in the first column -and by the energy in [J] in the second column. To include electronic excitation in the simulation, the following parameters are -required +species (e.g. for monatomic {cite}`NISTASD`, diatomic {cite}`Huber1979`, polyatomic {cite}`Herzberg1966` molecules). PICLas utilizes a species database, which contains the electronic energy levels of the species and is located in the top folder `SpeciesDatabase.h5`. Details regarding the database and the addition of new species can be found in Section {ref}`sec:unified-species-database`. To include electronic excitation in the simulation, the following parameters are required Particles-DSMC-ElectronicModel = 0 ! No electronic energy is considered (default) = 1 ! Model by Liechty @@ -289,9 +284,6 @@ the following parameter needs to be defined Part-Species4-ElecRelaxProb = 0.5 Part-Species5-ElecRelaxProb = 0.1 -An electronic state database can be created using a Fortran tool in `piclas/tools/electronic_data`. An alternative is to use the -Python-based script discussed in Section {ref}`ssec:tools-xsec-collision` and to adapt it to electronic energy levels. - (sec:DSMC-chemistry)= ## Chemistry & Ionization @@ -384,7 +376,7 @@ read-in of the electronic state database. ### Cross-section Chemistry (XSec) The cross-section based chemistry model utilizes experimentally measured or ab-initio calculated cross-sections (analogous to -the collision probability procedure described in Section {ref}`ssec:tools-xsec-collision`). It requires the same database, where the +the collision probability procedure described in Section {ref}`sssec:tools-maintain-database-xsec-collision`). It requires the same database, where the reaction paths are stored per particle pair, e.g. the `N2-electron` container contains the `REACTION` folder, which includes the reactions named by their products, e.g. `N2Ion1-electron-electron`. diff --git a/docs/documentation/userguide/features-and-models/SpeciesDatabase.md b/docs/documentation/userguide/features-and-models/SpeciesDatabase.md index 5127f85bd..3260d512c 100644 --- a/docs/documentation/userguide/features-and-models/SpeciesDatabase.md +++ b/docs/documentation/userguide/features-and-models/SpeciesDatabase.md @@ -3,6 +3,39 @@ A unified database of species data, electronic states, cross-sections, and chemistry models can be used as a more convenient alternative input for the simulations. The use of the database allows to reduce the length of the input files and ensures a consistent storage of the parameters, together with the respective reference. The database (`SpeciesDatabase.h5`) is provided at the top level of the PICLas directory. It contains over 40 of the most common species in PICLas simulations and the most common complex chemical reaction models with 300 single reactions. In addition, several cross-section models are included. This feature is still under development and the provided species & reaction data should be treated carefully as we are in process of verifying the data. +The data in the Unified Species Database is grouped, as shown in the following example: + + Cross-Sections (group) + H2-H2Ion1 (dataset) + Reaction (group) + CH3_CH2+H (dataset) + Chemistry model (attribute) + Reaction model (attribute) + Arrhenius parameters (attribute) + Products (attribute) + Reactants (attribute) + O2+M_O+O+M (dataset) + Chemistry model (attribute) + Reaction model (attribute) + Arrhenius parameters (attribute) + Products (attribute) + Reactants (attribute) + Fe_FeIon1+electron (dataset) + Chemistry model (attribute) + Reaction model (attribute) + Products (attribute) + Reactants (attribute) + Species (group) + H2 (group) + Electronic levels (dataset) + Species parameters (attribute) + H2Ion1 (group) + Electronic levels (dataset) + Species parameters (attribute) + electron (group) + Electronic levels (dataset) + Species parameters (attribute) + To read in data from a given species database, the database name must be specified in the `parameter.ini` file of the simulation Particles-Species-Database = SpeciesDatabase.h5 @@ -28,7 +61,7 @@ where the number after 'Ion' refers to the degree of ionization. The database co | -------------------------------------------: | :--------: | :----------------------------------------------------------------------------------------------- | | Heat of formation (at 298.15K) | Kelvin | [Active Thermochemical Tables (ATcT)](https://atct.anl.gov/) | - + It possible to revert to the regular parameter read-in from parameter files per species @@ -43,8 +76,11 @@ If this flag is set, all parameters for this species need to be set manually and (ssec:usd-reaction)= ## Reaction data -The database contains different chemistry models including various reactions, utilizing the {ref}`ssec:TCE` model or {ref}`ssec:QK` model. For the TCE model, the Arrhenius prefactor, powerfactor and the activation energy are stored. For the QK model only dissociation energy of the molecule is required, which has been provided as a species parameter. -To utilize the read-in of reaction from the database, a chemistry model has to be defined. All reactions with this model are then read-in from te database and no additional parameter input is required: +The database contains different chemistry models including various reactions, utilizing the {ref}`ssec:TCE` model or {ref}`ssec:QK` model. Each reaction is assigned to a single or more chemistry models (N). This information is stored in the chemistry model attribute along with the non reactive species of this reaction. This attribute contains an array which either has the dimension (N,1) or (N,2), where the second column contains the non reactive species, if existent. +For the TCE model, the Arrhenius prefactor, powerfactor and the activation energy are stored. For the QK model only dissociation energy of the molecule is required, which has been provided as a species parameter. + + +To utilize the read-in of reaction from the database, a chemistry model has to be defined. All reactions with this model are then read-in from the database and no additional parameter input is required: DSMC-ChemistryModel = Titan_14Spec_24Reac_Gokcen2007 @@ -80,4 +116,4 @@ A reaction name is generated automatically based on the given species names and (ssec:usd-xsec-data)= ## Cross-section data -The use of the unififed species database for the cross-section data follows the description given in Section {ref}`sec:background-gas-collision-xsec` for collision and {ref}`sec:xsec-chemistry` for chemistry modelling, respectively. An example for is located in `regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database`. +The use of the unified species database for the cross-section data follows the description given in Section {ref}`sec:background-gas-collision-xsec` for collision and {ref}`sec:xsec-chemistry` for chemistry modelling, respectively. An example for is located in `regressioncheck/NIG_Reservoir/CHEM_RATES_XSec_Chem_H2_Plasma_Database`. diff --git a/docs/documentation/userguide/tools.md b/docs/documentation/userguide/tools.md index e6ee0748f..ddd312be7 100644 --- a/docs/documentation/userguide/tools.md +++ b/docs/documentation/userguide/tools.md @@ -7,81 +7,119 @@ An overview of the tools is given in [TOOLS.md](https://github.com/piclas-framew (sec:tools-usd)= ## Unified Species Database (USD) -A tool to create a database containing cross-section, electronic states, Arrhenius rates, and species data can be found in the *tools* folder: `piclas/tools/species_database/`. -The Python script (python3.7) `create_species_database.py` creates a new database or expands an existing one combining all necessary parameters (formerly read-in through ini files). The script uses the `numpy`, `h5py`, `argparse`,`datetime`, `cmath`, and `matplotlib.rcsetup` packages. To create the species database run the command: - - python3.7 create_species_database.py - -If electronic states or cross-section data should be added to the species database, an electronic states `Electronic-State-Database.h5` and a cross-section database `XSec-Database.h5` need to be built before ({ref}`ssec:tools-xsec-collision`, {ref}`ssec:tools-electronic-database`). - -If nothing additionally is specified, the following filenames are called: `DSMC.ini` for the parameter, gas-phase reaction input and `Species_Database.h5` for the final output. For custom file names and for the inclusion of electronic and cross-section data, the following options can be added: - - python3 create_species_database.py --parameter parameter-filename --electronic electronic_statefile --crosssection crosssection_statefile --output output_filename --reference reference-name - -or - - python3 create_species_database.py -p parameter-filename -e electronic_statefile -c crosssection_statefile -o output_filename -r reference-name - -The data is grouped in the output file, as shown in the following example: - - Cross-Sections (group) - H2-H2Ion1 (dataset) - Reaction (group) - CH3_CH2+H (dataset) - Chemistry model (attributes) - Arrhenius parameters (attributes) - O2+M_O+O+M (dataset) - Chemistry model (attributes) - Arrhenius parameters (attributes) - Fe_FeIon1+electron (dataset) - Chemistry model (attributes) - Arrhenius parameters (attributes) - Species (group) - H2 (group) - Electronic levels (dataset) - Species parameters (attributes) - H2Ion1 (group) - Electronic levels (dataset) - Species parameters (attributes) - electron (group) - Electronic levels (dataset) - Species parameters (attributes) - -For cross-sections, reactions and species data, the former `DSMC.ini` files are used to create the database. However, every species must be defined to create the database and to run simulations. - - Part-Species1-SpeciesName=CO2 - -The name of the reaction is optional, if none is given, the reaction name is created automatically from the reactants and products, following the naming convention defined below: - - Reac1+Reac2_Prod1+Prod2+Prod3 - Reac1+Reac2_Prod1+Prod2+Prod3#2 - -Non-reacting partners can be given as A (atoms or similar) or M (molecules or similar) in the reaction name. If a name is defined in the input file, the programm automatically renames it according to the set convention. If multiple sets of parameters or multiple models exist for the same reaction, a counter variable f.e. '#5' is added at the end of the reaction name. - -For reactions a chemistry model is defined in all cases. The name of the given parameter-file is automatically taken as the model name. To have a clear distinction, the following naming convention should be used for the parameter-filename and thus the chemistry model for the reactions: - - PlanetAtmosphere_XSpec_XReac_Source (Titan_18Spec_30Reac_Gokcen2007) - TestCase_XSpec_XReac_Source (CO2_6Spec_10Reac_Johnston2014) - -In addition to creating a new database, the same script can be used to extend an existing version. For this, only the name of the existing database needs to be defined in the call to create_species_database.py. The function automatically tests if the provided data is already included and adds them if not. - -(ssec:tools-electronic-database)= -### Electronic database - -A tool to create a database containing electronic excitation states can be found in the *tools* folder: `piclas/tools/electronic_database/`. -The Python script (python3.7) `create_electronic_database_atoms.py` can be used to populate a PICLas-compatible cross-section database, using -the `pandas`, `h5py`, `io`, `re`, `datetime` and `requests` packages. It can be excuted with - - python3.7 `create_electronic_database_atoms.py` - -The script gets the data from the NIST database (https://physics.nist.gov/cgi-bin/ASD/energy1.pl) and stores it in an h5-database. Additional species can be added by adapting the `species-list` parameter. - -(ssec:tools-xsec-collision)= -### Collision cross-section database +The unified species database was created for a more convenient alternative input for the simulations of species data, electronic states, cross-sections, and chemistry models. +For the general structure and using the unified species database, please refer to Chapter {ref}`sec:unified-species-database` for instructions. + + +(ssec:tools-maintain-database)= +### Maintain and edit database + +A tool to modify or maintain the database it is recommended to use the `maintain_database.py` which can be found in the *tools* folder: `piclas/tools/species_database/`. Its basic usage is to close the database in other programs and run + + python3 maintain_database.py + +The script shows 5 options to choose from: + + 1 to maintain/edit species or + 2 to maintain/edit chemical reactions or + 3 to maintain/edit cross section data or + 4 to maintain/edit surface chemistry or + 5 to exit program + +(sssec:tools-maintain-database-species)= +#### Species parameters + +After selecting to edit/maintain species the script offers the following options + + 1 check existing species or + 2 add new species or + 3 to exit program + +The first option loops over all atom species in the database and compares the electronic excitation states (datasets) to the electronic excitation states from the [NIST database](https://physics.nist.gov/PhysRefData/ASD/levels_form.html). Afterwards, the attribute values including the mass and heat of formation are compared with data obtained from the [Active Thermochemical Tables](https://atct.anl.gov/) for all species. +Currently the verification of electronic excitation states for molecules is not implemented yet due to the lack of data in other databases. + +There is an option to add electronic excitation states for molecules by providing the data as comma-separated values (csv). For activating this feature the electronic excitation states need to be stored in a .csv file in `piclas/tools/species_database/`. The name and format should follow the template `custom_electronic_levels_SPECIES.csv`, where SPECIES is replaced with the actual name of the species, e.g. 'H2'. The format is analogous to the output of the NIST database: + +| Term | J | Levelcm-1 | +|-------|-----|-----------| +| --- | XXX | XX | +| --- | XXX | XX | +| Limit | -- | XX | + +where each row represents one electronic state and the last row contains the ionization energy. The first column can remain empty. The second column contains the total angular momentum $J$, which is converted to the degeneracy $g$ with $g = 2J+1$. The third column contains the energy value in 1/cm, which will be converted to Kelvin. + +For each atom species, the electronic excitation states are kept if the data is within a relative tolerance of 1e-05 (which is set in `piclas/tools/species_database/edit_species.py`). If the data is not within this range or the number of electronic levels do not match the differences are displayed and it is possible to choose which data should be kept + + 1 to keep data and attributes from unified species database or + 2 to save only electronic level data from https://physics.nist.gov/cgi-bin/ASD/energy1.pl or + 3 to skip all electronic levels and continue with only attributes or + 4 to exit program + +If the third option is selected the verification of electronic excitation states is skipped for all atom species and the verification of the attributes is started. + +For each species in the database the heat of formation (unit: K, `HeatOfFormation_K`), atomic mass (unit: kg, `MassIC`), charge (unit: C, `ChargeIC`) and the internal species identifier (`InteractionID`) are compared. The heat of formation and mass are obtained from the Active Thermochemical Tables while the charge and identifier are derived from the species name. If no differences are determined, the output should look like this + + HeatOfFormation_K for SPECIES is equal so will be kept + MassIC for SPECIES is equal so will be kept + ChargeIC for SPECIES is equal so will be kept + InteractionID for SPECIES is equal so will be kept + +Otherwise the differences are displayed and it is possible to select which data should be saved + + 1 to keep attributes from unified species database or + 2 to save attributes from https://atct.anl.gov/Thermochemical%20Data/version%201.130 or + 3 to exit program here + +The script can be executed by providing the species as arguments + + python3 maintain_database.py --species H Ar + +to limit the check to these species. Note that the electronic excitation states for molecules will only be set from custom csv files. + +The 'add new species' option follows the same logic. If no species is given with the --species argument, the species to add should be input comma seperated string, e.g. `Fe,Ar,H,CIon1,CIon2,C`. + +For each species the electronic excitation states will be obtained from the [NIST database](https://physics.nist.gov/PhysRefData/ASD/levels_form.html), the attributes from [Active Thermochemical Tables](https://atct.anl.gov/) and VHS parameter (`Tref`, `dref`, `omega`) by user input. + + +(sssec:tools-maintain-database-reaction)= +#### Chemical reactions + +After selecting to edit/maintain reactions the script offers the following options + + 1 add new reactions or + 2 delete reactions or + 3 to exit program + +The first option will expect a list of reactions as a comma separated string, e.g. `C+N_CNIon1+electron,C2+M_C+M+C` and loop over all given reactions. If the reaction already exists in the database all entries will be listed, e.g. + + Reaction: C+N_CNIon1+electron#1 + * Created : August 02, 2023 + Activation-Energy_K : 164400.0 + Arrhenius-Powerfactor : 1.5 + Arrhenius-Prefactor : 1.66053927673551e-15 + ChemistryModel : [[b'Titan_18Spec_30Reac_Gokcen2007']] + Products: CNIon1,electron + Reactants: N,C + ReactionModel: TCE + +Currently there are the following options to choose from + + 1 add a new reaction with different attributes or + 2 add a new chemistry model to existing reaction or + 3 to skip this reaction or + 4 to exit program + +When adding a new reaction some parameters such as the reaction model and chemistry model need to be set per user input. Other parameters such as the reactants and products are constructed from the reaction name or if the non reactive species need to be set as well. + +The 'delete reactions' option will expect a list of reactions as comma separated string, e.g. `C+N_CNIon1+electron,C2+M_C+M+C`. If there is only one reaction in the database the reaction will be deleted and if there is more than one reaction stored in the database all reactions will be displayed like shown above. To choose which of the listed reactions should be deleted the number(s) of the reaction(s) to delete have to be entered as comma separated string, e.g. `1,2,3`. + +(sssec:tools-maintain-database-xsec-collision)= +### Collision cross-sections + +The option to create new collision cross-section data is not implemented in the `maintain_database.py` script. To add new collision cross-section data it is recommended to use the old workflow and revert to the regular parameter read-in for these species as described in {ref}`ssec:usd-species` or insert the cross-section data by hand to the unified species database. A tool to create a database containing cross-section data can be found in the *tools* folder: `piclas/tools/crosssection_database/`. -The Python script (python3.7) `create_xsec_db_lxcat.py` can be used to populate a PICLas-compatible cross-section database, using -the `numpy`, `h5py` and `lxcat_data_parser` packages. +The Python script (python3.7) `create_xsec_db_lxcat.py` can be used to populate a PICLas-compatible cross-section database, using the `numpy`, `h5py` and `lxcat_data_parser` packages. python3.7 create_xsec_db_lxcat.py @@ -116,9 +154,10 @@ Finally, the utilized cross-section data should be properly referenced by adding Users of cross-section data are encouraged to download the data directly from the [LXCat project website](https://fr.lxcat.net/home/) and to consider the guidelines regarding referencing and publication. -Reactions can be defined in a separate group as shown above, named by the product species, and added manually using h5py or -[HDF View](https://www.hdfgroup.org/downloads/hdfview/) (Make sure to re-open the file as `Read/Write` to be able to modify and create the dataset.). The ionization process from the LXCat database is not added as a reaction, -however, the cross-section can be used. An additional source for cross-sectional data for reactions is the [NIFS database](https://dbshino.nifs.ac.jp/nifsdb/). +(sssec:tools-maintain-database-surfchem)= +### Surface chemistry + +The option to create new surface chemistry data is not implemented in the `maintain_database.py` script. To add surface chemistry data it is recommended to add data by hand to the unified species database. ## Userblock diff --git a/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/DSMC.ini b/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/DSMC.ini deleted file mode 100644 index e0be438d9..000000000 --- a/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/DSMC.ini +++ /dev/null @@ -1,38 +0,0 @@ -! =============================================================================== ! -! Species1, e -! =============================================================================== ! -Part-Species1-SpeciesName = electron -Part-Species1-InteractionID = 4 -Part-Species1-Tref = 273 -Part-Species1-dref = 1E-15 -Part-Species1-omega = 0.24 -Part-Species1-UseCollXSec = T -! =============================================================================== ! -! Species2, Argon -! =============================================================================== ! -Part-Species2-SpeciesName = Ar -Part-Species2-InteractionID = 1 -Part-Species2-Tref = 273 -Part-Species2-dref = 4.05E-10 -Part-Species2-omega = 0.24 -Part-Species2-HeatOfFormation_K = 0.0 -! =============================================================================== ! -! Species3, Argon ion -! =============================================================================== ! -Part-Species3-SpeciesName = ArIon1 -Part-Species3-InteractionID = 10 -Part-Species3-Tref = 273 -Part-Species3-dref = 4.05E-10 -Part-Species3-omega = 0.24 -Part-Species3-PreviousState = 2 -! =============================================================================== ! -! Reactions -! =============================================================================== ! -DSMC-NumOfReactions = 1 -! ---------------------------------------------------- -! Electron impact -! ---------------------------------------------------- -! Ionization: Ar + e --> ArIon1 + e + e -DSMC-Reaction1-ReactionModel = XSec -DSMC-Reaction1-Reactants = (/2,1,0/) -DSMC-Reaction1-Products = (/3,1,1,0/) \ No newline at end of file diff --git a/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/LXCat_Database_Phelps_Ar-e_100keV.h5 b/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/LXCat_Database_Phelps_Ar-e_100keV.h5 deleted file mode 100644 index 82bad145f44e863bcdbe681b9bcbe53ad1efb8c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12704 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 diff --git a/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/command_line.ini b/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/command_line.ini index 9b0bb4a7d..f0056b1d6 100644 --- a/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/command_line.ini +++ b/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/command_line.ini @@ -1,2 +1,2 @@ MPI=4 -cmd_suffix=DSMC.ini +database = ../../../SpeciesDatabase.h5 diff --git a/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/externals.ini b/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/externals.ini new file mode 100644 index 000000000..0bdc5a5c4 --- /dev/null +++ b/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/externals.ini @@ -0,0 +1,6 @@ +! --- Externals Tool Reggie +MPI = 1 +externalbinary = ./hopr/build/bin/hopr +externaldirectory = hopr.ini +externalruntime = pre +cmd_suffix = \ No newline at end of file diff --git a/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/parameter.ini b/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/parameter.ini index e81ba7632..f01c02150 100644 --- a/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/parameter.ini +++ b/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/parameter.ini @@ -72,11 +72,11 @@ Part-FIBGMdeltas=(/1e-5,5e-6,5e-6/) ! =============================================================================== ! ! PARTICLES ! =============================================================================== ! -Particles-CollXSec-Database = LXCat_Database_Phelps_Ar-e_100keV.h5 -Particles-CollXSec-NullCollision = T - +! Only required if DoOverwriteParameters = T for ArIon1 Particles-DSMCElectronicDatabase = Electronic-State-Database-Ar-ArIon1.h5 +Particles-Species-Database = SpeciesDatabase.h5 + Part-maxParticleNumber=500000 Part-nSpecies = 3 Part-Species$-MacroParticleFactor = 2E4 @@ -84,16 +84,16 @@ Part-Species$-MacroParticleFactor = 2E4 ManualTimeStep = 5.0000E-11 Part-Species1-TimeStepFactor = 0.2 +Particles-CollXSec-NullCollision = T Part-VariableTimeStep-DisableForMCC = F,T ! =============================================================================== ! ! Species1 - electron ! =============================================================================== ! -Part-Species1-MassIC = 9.11E-31 -Part-Species1-ChargeIC = -1.60217653E-19 +Part-Species1-SpeciesName = electron +Part-Species1-UseCollXSec = T Part-Species1-nSurfaceFluxBCs=1 Part-Species1-Surfaceflux1-BC=2 - Part-Species1-Surfaceflux1-VeloIC = 1E7 Part-Species1-Surfaceflux1-VeloVecIC = (/1,0,0/) Part-Species1-Surfaceflux1-velocityDistribution = maxwell_lpn @@ -102,11 +102,9 @@ Part-Species1-Surfaceflux1-EmissionCurrent = 2. ! =============================================================================== ! ! Species2 - Argon ! =============================================================================== ! -Part-Species2-MassIC = 6.63400E-26 -Part-Species2-ChargeIC = 0 +Part-Species2-SpeciesName = Ar Part-Species2-nInits = 1 - Part-Species2-Init1-SpaceIC = background Part-Species2-Init1-velocityDistribution = maxwell_lpn Part-Species2-Init1-MWTemperatureIC = 300 @@ -116,8 +114,16 @@ Part-Species2-Init1-VeloVecIC = (/0.,0.,1./) ! =============================================================================== ! ! Species3 - ArgonIon ! =============================================================================== ! -Part-Species3-MassIC = 6.633908906174E-26 -Part-Species3-ChargeIC = 1.60217653E-19 +Part-Species3-SpeciesName = ArIon1 +! Testing the manual species input functionality +Part-Species3-DoOverwriteParameters = F,T +Part-Species3-MassIC = 6.633908906174E-26 +Part-Species3-ChargeIC = 1.60217653E-19 +Part-Species3-InteractionID = 10 +Part-Species3-Tref = 273 +Part-Species3-dref = 4.05E-10 +Part-Species3-omega = 0.24 +Part-Species3-PreviousState = 2 ! =============================================================================== ! ! DSMC ! =============================================================================== ! @@ -130,4 +136,15 @@ Particles-RandomSeed1=1 Particles-RandomSeed2=2 Particles-DSMC-UseOctree=F Particles-DSMC-UseNearestNeighbour = F -Particles-DSMC-CalcQualityFactors = F \ No newline at end of file +Particles-DSMC-CalcQualityFactors = F +! =============================================================================== ! +! Reactions +! =============================================================================== ! +DSMC-NumOfReactions = 1 +! ---------------------------------------------------- +! Electron impact +! ---------------------------------------------------- +! Ionization: Ar + e --> ArIon1 + e + e +DSMC-Reaction1-ReactionModel = XSec +DSMC-Reaction1-Reactants = (/2,1,0/) +DSMC-Reaction1-Products = (/3,1,1,0/) \ No newline at end of file diff --git a/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/readme.md b/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/readme.md index 3e4a824b6..6028425ae 100644 --- a/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/readme.md +++ b/regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/readme.md @@ -5,4 +5,5 @@ 2. Part-VariableTimeStep-DisableForMCC = T: Collisions and chemistry are performed at the ManualTimeStep to accelerate convergence * Comparing the number density with different reference files as 1. Option is expected to ionize at a slower rate - 2. Reference file for the 2. option has been generated with a regular simulation at the lower electron time step (dt = 1e-11s) \ No newline at end of file + 2. Reference file for the 2. option has been generated with a regular simulation at the lower electron time step (dt = 1e-11s) +* Species parameters from the Unified Species Database are used, and the manual input of ArIon1 parameters is tested \ No newline at end of file diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/DSMC.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/DSMC.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/hopr.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/hopr.ini old mode 100755 new mode 100644 diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/parameter.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/parameter.ini old mode 100755 new mode 100644 diff --git a/src/particles/dsmc/dsmc_chemical_init.f90 b/src/particles/dsmc/dsmc_chemical_init.f90 index 488a56c39..0cd815cbd 100644 --- a/src/particles/dsmc/dsmc_chemical_init.f90 +++ b/src/particles/dsmc/dsmc_chemical_init.f90 @@ -818,7 +818,7 @@ SUBROUTINE GetNumReacFromDatabase(ReadInNumOfReact) USE MOD_Particle_Vars ,ONLY: SpeciesDatabase, Species, nSpecies USE MOD_DSMC_Vars ,ONLY: ChemReac USE MOD_HDF5_Input ,ONLY: DatasetExists,nDims,HSize,ReadAttribute,GetDataSize,AttributeExists -USE MOD_StringTools ,ONLY: STRICMP +USE MOD_StringTools ,ONLY: STRICMP, SPLIT_STRING ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -828,10 +828,10 @@ SUBROUTINE GetNumReacFromDatabase(ReadInNumOfReact) INTEGER,INTENT(OUT) :: ReadInNumOfReact !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -CHARACTER(LEN=256) :: dsetname, groupname, dsetname2 -CHARACTER(LEN=255),ALLOCATABLE :: ModelNames(:), NonReactiveSpeciesName(:) +CHARACTER(LEN=256) :: dsetname, groupname, dsetname2, NonReactiveSpeciesString +CHARACTER(LEN=255),ALLOCATABLE :: ModelNames(:), NonReactiveSpeciesNames(:) INTEGER :: storage, max_corder, err -INTEGER :: totalNumReac, ModelNamesSize, iModel, numReac, iSpec, jSpec +INTEGER :: totalNumReac, ModelNamesSize, iModel, numReac, iSpec, jSpec, iNonReac, NumChemModels, NumOfCols, LenNonReacArray INTEGER(HID_T) :: file_id_specdb, group_id, dset_id ! File/group/dataset identifiers INTEGER(SIZE_T) :: size ! Size of name INTEGER(HSIZE_T) :: iReac, ReacID @@ -864,7 +864,14 @@ SUBROUTINE GetNumReacFromDatabase(ReadInNumOfReact) CALL H5DOPEN_F(file_id_specdb, dsetname2, dset_id, err) ! Get the size of the attribute array CALL GetDataSize(dset_id,'ChemistryModel',nDims,HSize,attrib=.TRUE.) - ModelNamesSize = INT(HSize(1),4) + IF (nDims.EQ.1) THEN ! Catch for old database where ChemistryModel was not an 2D array + NumChemModels = 1 + ELSE ! NumChemModels of current reaction equals number of rows of attribute + NumChemModels=INT(HSize(2),4) + END IF + ! NumOfCols = 1 if Non Reactives dont exist, = 2 if Non Reactives exist + NumOfCols = INT(HSize(1),4) + ModelNamesSize = NumChemModels*NumOfCols IF(ALLOCATED(ModelNames)) THEN DEALLOCATE(ModelNames) ALLOCATE(ModelNames(ModelNamesSize)) @@ -873,8 +880,9 @@ SUBROUTINE GetNumReacFromDatabase(ReadInNumOfReact) END IF ModelNames = '' CALL ReadAttribute(file_id_specdb,'ChemistryModel',ModelNamesSize,TRIM(dsetname2),StrArray=ModelNames) - DO iModel = 1,ModelNamesSize - IF(STRICMP(ChemReac%ChemistryModel,ModelNames(iModel))) THEN + DO iModel = 1,NumChemModels + ! ModelNames contains strings of alterning ChemistryModel and (if existent) corrensponding NonReactives, thus index of ModelNames to check if ChemistryModel matches + IF(STRICMP(ChemReac%ChemistryModel,ModelNames((iModel - 1) * NumOfCols + 1))) THEN numReac = numReac + 1 ChemReac%totalReacToModel(numReac) = INT(iReac,4) END IF @@ -896,33 +904,94 @@ SUBROUTINE GetNumReacFromDatabase(ReadInNumOfReact) dsetname2 = TRIM(groupname)//'/'//TRIM(dsetname) ! Open the reaction dataset CALL H5DOPEN_F(file_id_specdb, dsetname2, dset_id, err) - ! Check if the non-reactive species list exists - CALL AttributeExists(file_id_specdb,'NonReactiveSpecies',TRIM(dsetname2), AttrExists=AttrExists) - IF(AttrExists) THEN - ! Get the size of the attribute array - CALL GetDataSize(dset_id,'NonReactiveSpecies',nDims,HSize,attrib=.TRUE.) - ChemReac%ArbDiss(iReac)%NumOfNonReactives = INT(HSize(1),4) - IF(ChemReac%ArbDiss(iReac)%NumOfNonReactives.GT.0) THEN - ALLOCATE(ChemReac%ArbDiss(iReac)%NonReactiveSpecies(ChemReac%ArbDiss(iReac)%NumOfNonReactives)) - ALLOCATE(NonReactiveSpeciesName(ChemReac%ArbDiss(iReac)%NumOfNonReactives)) - ! Read-in the non-reactive species names array - CALL ReadAttribute(file_id_specdb,'NonReactiveSpecies',ChemReac%ArbDiss(iReac)%NumOfNonReactives,TRIM(dsetname2),StrArray=NonReactiveSpeciesName) - ! Find the index of the respective species - DO iSpec = 1, ChemReac%ArbDiss(iReac)%NumOfNonReactives - SpeciesFound = .FALSE. - DO jSpec = 1, nSpecies - IF(STRICMP(NonReactiveSpeciesName(iSpec),Species(jSpec)%Name)) THEN - ChemReac%ArbDiss(iReac)%NonReactiveSpecies(iSpec) = jSpec - SpeciesFound = .TRUE. - EXIT - END IF - END DO - IF(.NOT.SpeciesFound) CALL abort(__STAMP__,'ERROR in SpeciesDatabase: Species defined as non-reactive has not beend found!') + ! Get the size of the attribute array + CALL GetDataSize(dset_id,'ChemistryModel',nDims,HSize,attrib=.TRUE.) + IF (nDims.EQ.1) THEN ! Catch for old database where ChemistryModel was not an 2D array + NumChemModels = 1 + ! dummy -1 to handle old case + NumOfCols = -1 + ELSE ! NumChemModels of current reaction equals number of rows of attribute + NumChemModels=INT(HSize(2),4) + NumOfCols = INT(HSize(1),4) + END IF + ! Check if NonReactives exist + IF(NumOfCols.EQ.2)THEN ! new format of database + ModelNamesSize = NumChemModels*NumOfCols + IF(ALLOCATED(ModelNames)) THEN + DEALLOCATE(ModelNames) + ALLOCATE(ModelNames(ModelNamesSize)) + ELSE + ALLOCATE(ModelNames(ModelNamesSize)) + END IF + ModelNames = '' + CALL ReadAttribute(file_id_specdb,'ChemistryModel',ModelNamesSize,TRIM(dsetname2),StrArray=ModelNames) + NonReactiveSpeciesString = '' + DO iModel = 1,NumChemModels + ! ModelNames contains string of alterning ChemistryModel and (if existent) corrensponding NonReactives, thus index of ModelNames + IF(STRICMP(ChemReac%ChemistryModel,ModelNames((iModel - 1) * NumOfCols + 1))) THEN + ! saving NonReactives of selected ChemistryModel in comma separated string + NonReactiveSpeciesString = ADJUSTL(Trim(ModelNames((iModel - 1) * NumOfCols + 2))) + END IF + END DO + LenNonReacArray = 0 + DO iNonReac = 1, LEN_TRIM(NonReactiveSpeciesString) + ! count elements (commas) for array allocation + IF(NonReactiveSpeciesString(iNonReac:iNonReac).EQ.',')THEN + LenNonReacArray = LenNonReacArray + 1 + END IF + END DO + ! Allocate memory NonReactiveSpecies Array with count of commas +1 since string does not end with a comma + ALLOCATE(NonReactiveSpeciesNames(LenNonReacArray + 1)) + ALLOCATE(ChemReac%ArbDiss(iReac)%NonReactiveSpecies(LenNonReacArray + 1)) + CALL SPLIT_STRING(NonReactiveSpeciesString,',',NonReactiveSpeciesNames,ChemReac%ArbDiss(iReac)%NumOfNonReactives) + ! Find the index of the respective species + DO iSpec = 1, ChemReac%ArbDiss(iReac)%NumOfNonReactives + SpeciesFound = .FALSE. + DO jSpec = 1, nSpecies + IF(STRICMP(NonReactiveSpeciesNames(iSpec),Species(jSpec)%Name)) THEN + ChemReac%ArbDiss(iReac)%NonReactiveSpecies(iSpec) = jSpec + SpeciesFound = .TRUE. + EXIT + END IF END DO - DEALLOCATE(NonReactiveSpeciesName) - ! First reaction is saved within the dummy input reaction, thus "- 1" - ChemReac%NumOfReact = ChemReac%NumOfReact + ChemReac%ArbDiss(iReac)%NumOfNonReactives - 1 - ChemReac%NumOfReactWOBackward = ChemReac%NumOfReactWOBackward + ChemReac%ArbDiss(iReac)%NumOfNonReactives - 1 + IF(.NOT.SpeciesFound) CALL abort(__STAMP__,'ERROR in SpeciesDatabase: Species defined as non-reactive has not beend found!') + END DO + DEALLOCATE(NonReactiveSpeciesNames) + DEALLOCATE(ModelNames) + ! First reaction is saved within the dummy input reaction, thus "- 1" + ChemReac%NumOfReact = ChemReac%NumOfReact + ChemReac%ArbDiss(iReac)%NumOfNonReactives - 1 + ChemReac%NumOfReactWOBackward = ChemReac%NumOfReactWOBackward + ChemReac%ArbDiss(iReac)%NumOfNonReactives - 1 + ELSE IF(NumOfCols.EQ.-1)THEN ! old format of database + ! Check if the non-reactive species list exists + CALL AttributeExists(file_id_specdb,'NonReactiveSpecies',TRIM(dsetname2), AttrExists=AttrExists) + IF(AttrExists) THEN + ! Get the size of the attribute array + CALL GetDataSize(dset_id,'NonReactiveSpecies',nDims,HSize,attrib=.TRUE.) + ChemReac%ArbDiss(iReac)%NumOfNonReactives = INT(HSize(1),4) + IF(ChemReac%ArbDiss(iReac)%NumOfNonReactives.GT.0) THEN + ALLOCATE(ChemReac%ArbDiss(iReac)%NonReactiveSpecies(ChemReac%ArbDiss(iReac)%NumOfNonReactives)) + ALLOCATE(NonReactiveSpeciesNames(ChemReac%ArbDiss(iReac)%NumOfNonReactives)) + ! Read-in the non-reactive species names array + CALL ReadAttribute(file_id_specdb,'NonReactiveSpecies',ChemReac%ArbDiss(iReac)%NumOfNonReactives,TRIM(dsetname2),StrArray=NonReactiveSpeciesNames) + ! Find the index of the respective species + DO iSpec = 1, ChemReac%ArbDiss(iReac)%NumOfNonReactives + SpeciesFound = .FALSE. + DO jSpec = 1, nSpecies + IF(STRICMP(NonReactiveSpeciesNames(iSpec),Species(jSpec)%Name)) THEN + ChemReac%ArbDiss(iReac)%NonReactiveSpecies(iSpec) = jSpec + SpeciesFound = .TRUE. + EXIT + END IF + END DO + IF(.NOT.SpeciesFound) CALL abort(__STAMP__,'ERROR in SpeciesDatabase: Species defined as non-reactive has not beend found!') + END DO + DEALLOCATE(NonReactiveSpeciesNames) + ! First reaction is saved within the dummy input reaction, thus "- 1" + ChemReac%NumOfReact = ChemReac%NumOfReact + ChemReac%ArbDiss(iReac)%NumOfNonReactives - 1 + ChemReac%NumOfReactWOBackward = ChemReac%NumOfReactWOBackward + ChemReac%ArbDiss(iReac)%NumOfNonReactives - 1 + END IF + ELSE + ChemReac%ArbDiss(iReac)%NumOfNonReactives = 0 END IF ELSE ChemReac%ArbDiss(iReac)%NumOfNonReactives = 0 @@ -973,6 +1042,8 @@ SUBROUTINE ReadReacFromDatabase(ReadInNumOfReact) CHARACTER(LEN=32) :: hilf CHARACTER(LEN=255) :: reacNameReactants, reacNameProducts CHARACTER(LEN=255) :: ReactantNames(3), ProductNames(4) +REAL :: SumProdMass, SumReactMass +REAL,PARAMETER :: RelMassTol=1e-14 ! Relative tolerance applied to conservation of mass before/after reaction !=================================================================================================================================== ! Initialize FORTRAN interface. @@ -1125,7 +1196,21 @@ SUBROUTINE ReadReacFromDatabase(ReadInNumOfReact) ELSE CALL abort(__STAMP__,'ERROR in reaction definition: No products found in the selected reaction in the database') END IF - ! Read-in of the reaction parameters, depending on the model + ! Get mass of products and reactants + SumProdMass = 0 + DO iSpec = 1, 4 + IF(ChemReac%Products(iReac,iSpec).NE.0) SumProdMass = SumProdMass + Species(ChemReac%Products(iReac,iSpec))%MassIC + END DO + SumReactMass = 0 + DO iSpec = 1, 3 + IF(ChemReac%Reactants(iReac,iSpec).NE.0) SumReactMass = SumReactMass + Species(ChemReac%Reactants(iReac,iSpec))%MassIC + END DO + ! Santiy mass check for reactions of selected chemistry model, real compare with RelMassTol + IF(.NOT.ALMOSTEQUALRELATIVE(SumProdMass,SumReactMass,RelMassTol)) THEN + CALL PrintOption('DSMC_Chemistry might not mass conserving for chemical reaction:','WARNING',StrOpt=TRIM(ChemReac%ReactionName(iReac))) + CALL abort(__STAMP__,'DSMC_Chemistry might not mass conserving for current chemical reaction') + END IF + ! Read-in of the reaction parameters, depending on the model SELECT CASE (TRIM(ChemReac%ReactModel(iReac))) CASE('TCE') ! Total Collision Energy: Arrhenius-based chemistry model diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90 index f16373166..f89e50bf2 100644 --- a/src/particles/dsmc/dsmc_init.f90 +++ b/src/particles/dsmc/dsmc_init.f90 @@ -425,7 +425,8 @@ SUBROUTINE InitDSMC() CALL H5OPEN_F(err) CALL H5FOPEN_F (TRIM(SpeciesDatabase), H5F_ACC_RDONLY_F, file_id_specdb, err) DO iSpec = 1, nSpecies - WRITE(UNIT=hilf,FMT='(I0)') iSpec + ! Skip species that are not read-in from the database + IF(Species(iSpec)%DoOverwriteParameters) CYCLE ! averagedCollisionParameters set true: species-specific collision parameters get read in IF(CollInf%averagedCollisionParameters) THEN LBWRITE (UNIT_stdOut,'(68(". "))') @@ -449,9 +450,10 @@ SUBROUTINE InitDSMC() END IF CALL PrintOption('alphaVSS','DB',RealOpt=SpecDSMC(iSpec)%alphaVSS) ! check for faulty parameters + WRITE(UNIT=hilf,FMT='(I0)') iSpec IF((Species(iSpec)%InterID * SpecDSMC(iSpec)%Tref * SpecDSMC(iSpec)%dref * SpecDSMC(iSpec)%alphaVSS) .EQ. 0) THEN CALL Abort(__STAMP__,'ERROR in species data: check collision parameters \n'//& - 'Part-Species'//TRIM(hilf)//'-(InterID * Tref * dref * alphaVSS) .EQ. 0 - but must not be 0') + 'Part-Species'//TRIM(hilf)//'-(InterID * Tref * dref * alphaVSS) .EQ. 0 - but must not be 0') END IF ! (Tref * dref * alphaVSS) .EQ. 0 IF ((SpecDSMC(iSpec)%alphaVSS.LT.0.0) .OR. (SpecDSMC(iSpec)%alphaVSS.GT.2.0)) THEN CALL Abort(__STAMP__,'ERROR: Check set parameter Part-Species'//TRIM(hilf)//'-alphaVSS must not be lower 0 or greater 2') diff --git a/tools/electronic_data/create_electronic_database_atoms.py b/tools/electronic_data/create_electronic_database_atoms.py deleted file mode 100644 index 46cb69044..000000000 --- a/tools/electronic_data/create_electronic_database_atoms.py +++ /dev/null @@ -1,127 +0,0 @@ -import requests -import h5py -import pandas as pd -import io -import re -from datetime import date - -# Function to determine the Roman number from an integer -def int_to_Roman(num): - val = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1) - syb = ('M', 'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I') - roman_num = "" - for i in range(len(val)): - count = int(num / val[i]) - roman_num += syb[i] * count - num -= val[i] * count - return roman_num - -### USER INPUT BEGIN -# Output of the HDF5 database -hdf = h5py.File('Electronic-State-Database.h5', 'a') -# Species list to be included in the output database -species_list = ['N','O','NIon1','OIon1','H','Xe','XeIon1','XeIon2','Ar','ArIon1','ArIon2'] -### USER INPUT END - -# Base URL of the query -URL_base = 'https://physics.nist.gov/cgi-bin/ASD/energy1.pl' -# Loop over species list -for current_species in species_list: - # Get the ionization number as the last digits and 1 to comply with the NIST standard - ion_level = int(re.sub('.*?([0-9]*)$',r'\1',current_species) or 0) + 1 - # Get the species (everything before Ion) - species = current_species.split('Ion')[0] - # Build the species in the NIST database query format: Xe+I - current_species_NIST = species + '+' + int_to_Roman(ion_level) - print('Converted '+current_species+' to '+current_species_NIST+' for download from NIST database.') - # Build the request URL - URL_request = URL_base + '?de=0&spectrum=' + current_species_NIST + '&units=0&format=2&output=0&page_size=15&multiplet_ordered=1&level_out=on&j_out=on&temp=&submit=Retrieve+Data' - response = requests.get(URL_request) - # Check the website - if response.status_code == 200: - print('Download successful.') - # Get the data from the NIST website - data = response.content.decode('utf-8') - # Clean the data - data = data.replace('[','') - data = data.replace(']','') - data = data.replace('(','') - data = data.replace(')','') - data = data.replace('= ','') - data = data.replace('=','') - data = data.replace(' ','') - data = data.replace('"','') - # Read-in data as a pandas dataframe - data = pd.read_csv(io.StringIO(data),skipinitialspace=True,delimiter=",",usecols=['J','Prefix'], na_values=['---']) - # Drop rows with an empty cell and '---' entries (which were converted to N/A during read-in) - # and also drop all rows following the first '---' entry - J = data.columns.get_loc("J") - Level = data.columns.get_loc("Prefix") - rows_with_nan = [index for index, row in data.iterrows() if row.isnull().any()] - if len(rows_with_nan) == 1: - max_level = rows_with_nan[0] - drop_to_end = 1 - (len(data)-max_level) - if drop_to_end < 0: - data = data.iloc[:drop_to_end] - elif drop_to_end == 0: - pass - else: - print("ERROR: drop_to_end must be negative!") - exit(1) - else: - for val in rows_with_nan: - data = data.drop(val) - max_level = len(data)-1 - if data['J'].dtype == 'float64': - data.iloc[max_level,J] = 0.0 - else: - data.iloc[max_level,J] = "0.0" - - # Check the datatype: if its a float, then all non-numerical characters have already been removed - if data['Prefix'].dtype != 'float64': - # Drop rows with a question mark ("This level/line may not be real.") - data.drop(data[data['Prefix'].str.contains(r'[?]')].index,inplace=True) - # Drop rows with a +x ("The relative positions of the levels within such a system are accurate within experimental uncertainties, but no experimental connection between this system and the other levels of the spectrum has been made.") - data.drop(data[data['Prefix'].str.contains(r'[+x]')].index,inplace=True) - # Execute fractions and convert J to g - if data['J'].dtype != 'float64': - for i in range(len(data['J'])): - # Convert fraction entries to floats (5/2 -> 2.5) - #print(type(data.iloc[i,J])) - found = re.search(r'\d+/\d+', data.iloc[i,J]) - if found: - numbers = data.iloc[i,J].split("/") - data.iloc[i,J] = float(numbers[0])/float(numbers[1]) - else: - data.iloc[i,J] = float(data.iloc[i,J]) - - # Convert J to g - data.iloc[:,J] = 2 * data.iloc[:,J] + 1.0 - - # Convert type for HDF5 output - data['J'] = data['J'].astype(float) - - # Convert 1/cm to K - data['Prefix'] = data['Prefix'].astype(float) - data['Prefix'] = 100 * data['Prefix'] * 1.986E-025 / 1.38065E-023 # 1/cm * 100cm/m * (J m) / (J/K) = K - - x_old=0. - for i in range(len(data['Prefix'])): - x = data.iloc[i,Level] - if x < x_old: - print('Error in level %s: the energy is not increasing with the levels E2=%s < E1=%s' % (i,x,x_old)) - exit(1) - else: - x_old = x - - # Write to hdf: If data set already exists, delete the old set first - data.columns=['Degeneracy', 'Level(K)'] - if current_species in hdf.keys(): - del hdf[current_species] - print('Old dataset replaced.') - dataset = hdf.create_dataset(current_species, data=data) - # Write attributes for source and time of retrieval - dataset.attrs['Reference'] = 'Kramida, A., Ralchenko, Yu., Reader, J., and NIST ASD Team (2020). NIST Atomic Spectra Database (ver. 5.8), [Online]. Available: https://physics.nist.gov/asd. National Institute of Standards and Technology, Gaithersburg, MD. DOI: https://doi.org/10.18434/T4W30F. Retrieved on ' + date.today().strftime("%B %d, %Y") + '.' - -print('Output successful.') -hdf.close() diff --git a/tools/species_database/Air_11Spec_27Reac_Park1993.ini b/tools/species_database/archive/Air_11Spec_27Reac_Park1993.ini similarity index 100% rename from tools/species_database/Air_11Spec_27Reac_Park1993.ini rename to tools/species_database/archive/Air_11Spec_27Reac_Park1993.ini diff --git a/tools/species_database/Air_11Spec_43Reac_Farbar2008.ini b/tools/species_database/archive/Air_11Spec_43Reac_Farbar2008.ini similarity index 100% rename from tools/species_database/Air_11Spec_43Reac_Farbar2008.ini rename to tools/species_database/archive/Air_11Spec_43Reac_Farbar2008.ini diff --git a/tools/species_database/Air_11Spec_51Reac_Park1993.ini b/tools/species_database/archive/Air_11Spec_51Reac_Park1993.ini similarity index 100% rename from tools/species_database/Air_11Spec_51Reac_Park1993.ini rename to tools/species_database/archive/Air_11Spec_51Reac_Park1993.ini diff --git a/tools/species_database/Air_5Spec_8Reac_Laux1995.ini b/tools/species_database/archive/Air_5Spec_8Reac_Laux1995.ini similarity index 100% rename from tools/species_database/Air_5Spec_8Reac_Laux1995.ini rename to tools/species_database/archive/Air_5Spec_8Reac_Laux1995.ini diff --git a/tools/species_database/Air_5Spec_8Reac_Park1993.ini b/tools/species_database/archive/Air_5Spec_8Reac_Park1993.ini similarity index 100% rename from tools/species_database/Air_5Spec_8Reac_Park1993.ini rename to tools/species_database/archive/Air_5Spec_8Reac_Park1993.ini diff --git a/tools/species_database/CH4-Ar_8Spec_7Reac.ini b/tools/species_database/archive/CH4-Ar_8Spec_7Reac.ini similarity index 100% rename from tools/species_database/CH4-Ar_8Spec_7Reac.ini rename to tools/species_database/archive/CH4-Ar_8Spec_7Reac.ini diff --git a/tools/species_database/CH4_7Spec_7Reac.ini b/tools/species_database/archive/CH4_7Spec_7Reac.ini similarity index 100% rename from tools/species_database/CH4_7Spec_7Reac.ini rename to tools/species_database/archive/CH4_7Spec_7Reac.ini diff --git a/tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini b/tools/species_database/archive/CO2_6Spec_10Reac_Johnston2014.ini similarity index 100% rename from tools/species_database/CO2_6Spec_10Reac_Johnston2014.ini rename to tools/species_database/archive/CO2_6Spec_10Reac_Johnston2014.ini diff --git a/tools/species_database/Fe-in-Air_7Spec_3Reac_Voronov1997Plane2015.ini b/tools/species_database/archive/Fe-in-Air_7Spec_3Reac_Voronov1997Plane2015.ini similarity index 100% rename from tools/species_database/Fe-in-Air_7Spec_3Reac_Voronov1997Plane2015.ini rename to tools/species_database/archive/Fe-in-Air_7Spec_3Reac_Voronov1997Plane2015.ini diff --git a/tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini b/tools/species_database/archive/Mars_11Spec_27Reac_Johnston2014.ini similarity index 100% rename from tools/species_database/Mars_11Spec_27Reac_Johnston2014.ini rename to tools/species_database/archive/Mars_11Spec_27Reac_Johnston2014.ini diff --git a/tools/species_database/Mars_16Spec_31Reac_Park1994.ini b/tools/species_database/archive/Mars_16Spec_31Reac_Park1994.ini similarity index 100% rename from tools/species_database/Mars_16Spec_31Reac_Park1994.ini rename to tools/species_database/archive/Mars_16Spec_31Reac_Park1994.ini diff --git a/tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini b/tools/species_database/archive/Mars_17Spec_42Reac_Johnston2014.ini similarity index 100% rename from tools/species_database/Mars_17Spec_42Reac_Johnston2014.ini rename to tools/species_database/archive/Mars_17Spec_42Reac_Johnston2014.ini diff --git a/tools/species_database/REF_DSMC.ini b/tools/species_database/archive/REF_DSMC.ini similarity index 100% rename from tools/species_database/REF_DSMC.ini rename to tools/species_database/archive/REF_DSMC.ini diff --git a/tools/species_database/Titan_14Spec_24Reac_Savajano2011.ini b/tools/species_database/archive/Titan_14Spec_24Reac_Savajano2011.ini similarity index 100% rename from tools/species_database/Titan_14Spec_24Reac_Savajano2011.ini rename to tools/species_database/archive/Titan_14Spec_24Reac_Savajano2011.ini diff --git a/tools/species_database/Titan_18Spec_30Reac_Savajano2011.ini b/tools/species_database/archive/Titan_18Spec_30Reac_Savajano2011.ini similarity index 100% rename from tools/species_database/Titan_18Spec_30Reac_Savajano2011.ini rename to tools/species_database/archive/Titan_18Spec_30Reac_Savajano2011.ini diff --git a/tools/species_database/XSec_H2-Plasma_6Spec_11Reac.ini b/tools/species_database/archive/XSec_H2-Plasma_6Spec_11Reac.ini similarity index 100% rename from tools/species_database/XSec_H2-Plasma_6Spec_11Reac.ini rename to tools/species_database/archive/XSec_H2-Plasma_6Spec_11Reac.ini diff --git a/tools/species_database/XSec_H_Ionization_3Spec_1Reac.ini b/tools/species_database/archive/XSec_H_Ionization_3Spec_1Reac.ini similarity index 100% rename from tools/species_database/XSec_H_Ionization_3Spec_1Reac.ini rename to tools/species_database/archive/XSec_H_Ionization_3Spec_1Reac.ini diff --git a/tools/species_database/XSec_Xe-Plasma_3Spec_1Reac.ini b/tools/species_database/archive/XSec_Xe-Plasma_3Spec_1Reac.ini similarity index 100% rename from tools/species_database/XSec_Xe-Plasma_3Spec_1Reac.ini rename to tools/species_database/archive/XSec_Xe-Plasma_3Spec_1Reac.ini diff --git a/tools/species_database/create_species_database.py b/tools/species_database/archive/create_species_database.py similarity index 60% rename from tools/species_database/create_species_database.py rename to tools/species_database/archive/create_species_database.py index f15e4d6c0..60e58292d 100644 --- a/tools/species_database/create_species_database.py +++ b/tools/species_database/archive/create_species_database.py @@ -503,3 +503,281 @@ def is_float(value): h5_electronic.close() if args.database_crosssection != "": h5_crosssection.close() + + +#--------------------------------------- combine reactions ---------------------------------------# +################################################################################################### +#----------------------------------------- quick changes -----------------------------------------# +# Disclaimer: script only works on 'old' database from a27fcdae1f4d312a7f629273dc17ed8eade95769 +################################################################################################### +# Name of Attribute of the Reaction # +reaction_attribute_name = 'ChemistryModel,NonReactiveSpecies' +# this attribute is an array with dimension: (X,1), where in the first column the Name of the Chemisty Model is stored +# or +# (X,2), where in the first column the Name of the Chemisty Model is stored and in the second column the nonreactive species as a string seperated by ',' +################################################################################################### +# Name of Attribute of Reactions (the group containing all reactions) # +all_reactions_attribute_name = 'AvailableChemistryModels,NonReactiveSpecies,Reference' +################################################################################################### +# relative tolerance for arrhenius comparison to check if two reactions should be put together (keeping the firsst arrhenius coefficients) +Rtol = 0.003 +################################################################################################### +# relative path to species database +relative_path = '../../SpeciesDatabase.h5' +################################################################################################### + +import h5py +import re +import numpy as np + +def create_dataset(hdf_unified_data, chem_model_list, non_reac_species_list, reference_list): + # array_of_strings is used for the single reactions to combine chemisty models and Full_Chem_Model_List is for saving the Models for the attribute of the reactions group + if non_reac_species_list != []: + array_of_strings = np.empty((len(chem_model_list),2), dtype='S255') + for i in range(len(chem_model_list)): + + Full_Chem_Model_List.append(chem_model_list[i][0]) + Full_Ref_List.append(str(reference_list[i]).encode('ascii', 'ignore').decode('utf-8')) + + array_of_strings[i,0] = chem_model_list[i][0] + + non_reac_species_str = '' + for species in non_reac_species_list[i]: + non_reac_species_str += species + ',' + + non_reac_species_str = non_reac_species_str[:-1] + array_of_strings[i,1] = non_reac_species_str + Full_Non_Reac_List.append(non_reac_species_str) + + else: + array_of_strings = np.empty((len(chem_model_list),1), dtype='S255') + for i in range(len(chem_model_list)): + Full_Chem_Model_List.append(chem_model_list[i][0]) + Full_Ref_List.append(str(reference_list[i]).encode('ascii', 'ignore').decode('utf-8')) + Full_Non_Reac_List.append('-') + array_of_strings[i,0] = chem_model_list[i][0] + + # delete old attributes + hdf_unified_data['Reactions'][combined_reaction_name].attrs.create(reaction_attribute_name, array_of_strings) + if '* Reference' in hdf_unified_data["Reactions"][combined_reaction_name].attrs: + del hdf_unified_data["Reactions"][combined_reaction_name].attrs['* Reference'] + if 'NonReactiveSpecies' in hdf_unified_data["Reactions"][combined_reaction_name].attrs: + del hdf_unified_data["Reactions"][combined_reaction_name].attrs['NonReactiveSpecies'] + if 'ChemistryModel' in hdf_unified_data["Reactions"][combined_reaction_name].attrs: + del hdf_unified_data["Reactions"][combined_reaction_name].attrs['ChemistryModel'] + + +# Read in Species Database +hdf_unified_data = h5py.File(relative_path, 'a') + +# get list of all reactions +reactions_list = list(hdf_unified_data["Reactions"].keys()) + +Full_Chem_Model_List = [] +Full_Ref_List = [] +Full_Non_Reac_List = [] + +# Loop over species list +for i,reaction in enumerate(reactions_list): + + # create new reaction dataset if current name differs from name before + if (re.sub(r'#\d+','',reaction) != re.sub(r'#\d+','',reactions_list[i-1])) or reaction==reactions_list[0]: + # set counter for new combined name later if Arrhenius changes (if not reaction with different arrhenius coefficientes would be stored under the same name) + j = 0 + # set name for reaction + combined_reaction_name = re.sub(r'#\d+','',reaction) + + # Store existing attributes + attrs = hdf_unified_data["Reactions"][reaction].attrs + + # create lists for created reaction + chem_model_list = [] + non_reac_species_list = [] + reference_list = [] + + # check its the first iteration and the reaction name exists already + if combined_reaction_name == reaction: + combined_reaction_name = reaction + dataset = hdf_unified_data["Reactions"][reaction] + else: + dataset = hdf_unified_data["Reactions"].create_dataset(combined_reaction_name, data=0) + + # Restore attributes + for attr_name, attr_value in attrs.items(): + dataset.attrs[attr_name] = attr_value + + # enter loop to check arr coefficients if the current name is equal to the name before (after 'or' just to insure loop is entered even with new changed name from j counter) + elif re.sub(r'#\d+','',reaction) == combined_reaction_name or re.sub(r'#\d+','',reaction) == re.sub(r'#0\d+','',combined_reaction_name): + # Check if both reactions have the necessary attributes before comparing them + if "Arrhenius-Powerfactor" in hdf_unified_data["Reactions"][reaction].attrs and \ + "Arrhenius-Prefactor" in hdf_unified_data["Reactions"][reaction].attrs and \ + "Activation-Energy_K" in hdf_unified_data["Reactions"][reaction].attrs: + + # check the three Arrhenius coefficients to decide if new reaction has to be created + if (not np.isclose(hdf_unified_data["Reactions"][reaction].attrs['Arrhenius-Powerfactor'], Arrhenius_Powerfactor, rtol=Rtol, atol=0.0)) or \ + (not np.isclose(hdf_unified_data["Reactions"][reaction].attrs['Arrhenius-Prefactor'], Arrhenius_Prefactor, rtol=Rtol, atol=0.0)) or \ + (not np.isclose(hdf_unified_data["Reactions"][reaction].attrs['Activation-Energy_K'], Activation_Energy_Kr, rtol=Rtol, atol=0.0)) or \ + (not (hdf_unified_data["Reactions"][reaction].attrs['ReactionModel'][0] == ReactionModel)): + + # add old chem_models to attribute to create new reaction before resetting lists to store new data + create_dataset(hdf_unified_data, chem_model_list, non_reac_species_list, reference_list) + # counter plus one to ensure other name of reaction + j += 1 + # empty lists for new reaction + chem_model_list = [] + non_reac_species_list = [] + reference_list = [] + + # Store existing attributes + attrs = hdf_unified_data["Reactions"][reaction].attrs + combined_reaction_name = re.sub(r'#\d+','',reaction) + '#0%i' % j + dataset = hdf_unified_data["Reactions"].create_dataset(combined_reaction_name, data=0) + # Restore attributes + for attr_name, attr_value in attrs.items(): + dataset.attrs[attr_name] = attr_value + + elif ("Arrhenius-Powerfactor" not in hdf_unified_data["Reactions"][reaction].attrs or \ + "Arrhenius-Prefactor" not in hdf_unified_data["Reactions"][reaction].attrs or \ + "Activation-Energy_K" not in hdf_unified_data["Reactions"][reaction].attrs) and \ + (Arrhenius_Powerfactor!=0 or Arrhenius_Prefactor!=0 or Activation_Energy_Kr!=0): + # counter plus one to ensure other name of reaction + j += 1 + # empty lists for new reaction + chem_model_list = [] + non_reac_species_list = [] + reference_list = [] + + # Store existing attributes + attrs = hdf_unified_data["Reactions"][reaction].attrs + combined_reaction_name = re.sub(r'#\d+','',reaction) + '#0%i' % j + dataset = hdf_unified_data["Reactions"].create_dataset(combined_reaction_name, data=0) + # Restore attributes + for attr_name, attr_value in attrs.items(): + dataset.attrs[attr_name] = attr_value + + # store values for loop in next iter since reaction will be deleted before the if loop + ReactionModel = hdf_unified_data["Reactions"][reaction].attrs['ReactionModel'][0] + if "Arrhenius-Powerfactor" in hdf_unified_data["Reactions"][reaction].attrs and \ + "Arrhenius-Prefactor" in hdf_unified_data["Reactions"][reaction].attrs and \ + "Activation-Energy_K" in hdf_unified_data["Reactions"][reaction].attrs: + + Activation_Energy_Kr = hdf_unified_data["Reactions"][reaction].attrs['Activation-Energy_K'] + Arrhenius_Prefactor= hdf_unified_data["Reactions"][reaction].attrs['Arrhenius-Prefactor'] + Arrhenius_Powerfactor = hdf_unified_data["Reactions"][reaction].attrs['Arrhenius-Powerfactor'] + else: + Activation_Energy_Kr = 0 + Arrhenius_Prefactor = 0 + Arrhenius_Powerfactor = 0 + + # if current reaction has the same name as the combined reaction and arr are equal since elif was skipped -> add the data to the lists (after 'or' just to insure loop is entered even with new changed name from j counter) + if re.sub(r'#\d+','',reaction) == combined_reaction_name or re.sub(r'#\d+','',reaction) == re.sub(r'#0\d+','',combined_reaction_name): + # Store existing attributes + attrs = hdf_unified_data["Reactions"][reaction].attrs + + chem_model_list.append(attrs['ChemistryModel']) + reference_list.append(attrs['* Reference']) + + if 'NonReactiveSpecies' in hdf_unified_data["Reactions"][reaction].attrs: + # get strings in byte format + byte_strings = attrs['NonReactiveSpecies'] + # Convert each byte string to a regular string + species_list = [byte_string.decode('utf-8') for byte_string in byte_strings] + non_reac_species_list.append(species_list) + + # delete old reaction + if combined_reaction_name != reaction: + del hdf_unified_data["Reactions"][reaction] + + # if last reaction in list or current reaction is not equal to next reaction (after second 'or' just to insure loop is entered even with new changed name from j counter) + if reaction == reactions_list[-1] or re.sub(r'#\d+','',reaction) != re.sub(r'#\d+','',reactions_list[i+1]) or re.sub(r'#\d+','',reaction) != re.sub(r'#0\d+','',reactions_list[i+1]): + + create_dataset(hdf_unified_data, chem_model_list, non_reac_species_list, reference_list) + +# convert Full lists to arrays to store in attribute +Full_Non_Reac_array = np.array(Full_Non_Reac_List, dtype='S255') +Full_Chem_Model_array = np.array(Full_Chem_Model_List, dtype='S255') +Full_Ref_array = np.array(Full_Ref_List, dtype='S255') +Full_Array = np.vstack((Full_Chem_Model_array, Full_Non_Reac_array, Full_Ref_array)) +Full_Array = Full_Array.T +unique_array = np.unique(Full_Array, axis=0) +hdf_unified_data['Reactions'].attrs.create(all_reactions_attribute_name, unique_array) + + +################################################################################################### +#----------------------------------------- second part -----------------------------------------# +################################################################################################### +# checking all new reactions if arr coefficients are equal and reactions werent adjacent since this wasnt considered before + +# Read in Species Database +hdf_unified_data = h5py.File(relative_path, 'a') + +# get list of all reactions )stripped from '#01',etc. +unique_reaction_list = [] +reaction_list = list(hdf_unified_data["Reactions"].keys()) +for item in hdf_unified_data["Reactions"].keys(): + if re.sub(r'#0\d+','',item) not in unique_reaction_list: + unique_reaction_list.append(re.sub(r'#0\d+','',item)) +# counter for reactions in full reaction list (with '#01') +j = 0 +for i,reaction in enumerate(unique_reaction_list): + + Activation_Energy_Kr = [] + Arrhenius_Prefactor = [] + Arrhenius_Powerfactor = [] + Reaction_Model = [] + Reaction = [] + + # appending all coefficients and reaction names as long as the unique name is equal to the full name when removed '#01' + while j < len(reaction_list) and reaction == re.sub(r'#0\d+','',reaction_list[j]): + if "Arrhenius-Powerfactor" in hdf_unified_data["Reactions"][reaction_list[j]].attrs and \ + "Arrhenius-Prefactor" in hdf_unified_data["Reactions"][reaction_list[j]].attrs and \ + "Activation-Energy_K" in hdf_unified_data["Reactions"][reaction_list[j]].attrs: + + Activation_Energy_Kr.append(hdf_unified_data["Reactions"][reaction_list[j]].attrs['Activation-Energy_K']) + Arrhenius_Prefactor.append(hdf_unified_data["Reactions"][reaction_list[j]].attrs['Arrhenius-Prefactor']) + Arrhenius_Powerfactor.append(hdf_unified_data["Reactions"][reaction_list[j]].attrs['Arrhenius-Powerfactor']) + Reaction_Model.append(hdf_unified_data["Reactions"][reaction_list[j]].attrs['ReactionModel'][0]) + Reaction.append(reaction_list[j]) + else: + Activation_Energy_Kr.append('-') + Arrhenius_Prefactor.append('-') + Arrhenius_Powerfactor.append('-') + Reaction_Model.append(hdf_unified_data["Reactions"][reaction_list[j]].attrs['ReactionModel'][0]) + Reaction.append(reaction_list[j]) + j += 1 + + Activation_Energy_Array = np.array(Activation_Energy_Kr) + Arrhenius_Prefactor_Array = np.array(Arrhenius_Prefactor) + Arrhenius_Powerfactor_Array = np.array(Arrhenius_Powerfactor) + Reaction_Model_Array = np.array(Reaction_Model) + Reaction_Array = np.array(Reaction) + Full_Array = np.vstack((Reaction_Array,Arrhenius_Powerfactor_Array,Arrhenius_Prefactor_Array,Activation_Energy_Array, Reaction_Model_Array)).T + # Find rows where the last three columns match + matching_rows = [] + for i in range(len(Full_Array)): + for k in range(i + 1, len(Full_Array)): + if all(Full_Array[i][-4:] == Full_Array[k][-4:]): + matching_rows.append((i, k)) + + if matching_rows != 0: + for match in matching_rows: + # get matching idices + index1, index2 = match + # Store existing attributes + attrs = hdf_unified_data["Reactions"][Full_Array[index1,0]].attrs + + current_models_array = hdf_unified_data["Reactions"][Full_Array[index1,0]].attrs[reaction_attribute_name] + append_models_array = hdf_unified_data["Reactions"][Full_Array[index2,0]].attrs[reaction_attribute_name] + + # stacked array for attribute creation + new_models_array = np.vstack((current_models_array,append_models_array)) + + # keeping first match so only deleting attribute + del hdf_unified_data["Reactions"][Full_Array[index1,0]].attrs[reaction_attribute_name] + # deleting whole reaction of second match + del hdf_unified_data["Reactions"][Full_Array[index2,0]] + + hdf_unified_data["Reactions"][Full_Array[index1,0]].attrs.create(reaction_attribute_name, new_models_array) + +print('Output successful.') +hdf_unified_data.close() \ No newline at end of file diff --git a/tools/species_database/archive/extend_reactions.py b/tools/species_database/archive/extend_reactions.py new file mode 100644 index 000000000..517fa1c01 --- /dev/null +++ b/tools/species_database/archive/extend_reactions.py @@ -0,0 +1,346 @@ +################################################################################################### +#----------------------------------------- quick changes -----------------------------------------# +# Disclaimer: script only works on 'old' database from a27fcdae1f4d312a7f629273dc17ed8eade95769 +################################################################################################### +# Name of Attribute of the Reaction # +reaction_attribute_name = 'ChemistryModel' +# this attribute is an array with dimension: (X,1), where in the first column the Name of the Chemisty Model is stored +# or +# (X,2), where in the first column the Name of the Chemisty Model is stored and in the second column the nonreactive species as a string seperated by ',' +################################################################################################### +# Name of Attribute of Reactions (the group containing all reactions) # +all_reactions_attribute_name = 'AvailableChemistryModels,Reference' +################################################################################################### +# relative tolerance for arrhenius comparison to check if two reactions should be put together (keeping the first arrhenius coefficients) +Rtol = 0.003 +################################################################################################### +# relative path to species database +relative_path = '../../SpeciesDatabase.h5' +################################################################################################### + +import h5py +import re +import numpy as np + +def create_dataset(hdf_unified_data, chem_model_list, non_reac_species_list, reference_list): + # array_of_strings is used for the single reactions to combine chemisty models and Full_Chem_Model_List is for saving the Models for the attribute of the reactions group + if non_reac_species_list != []: + array_of_strings = np.empty((len(chem_model_list),2), dtype='S255') + for i in range(len(chem_model_list)): + + Full_Chem_Model_List.append(chem_model_list[i][0]) + Full_Ref_List.append(str(reference_list[i]).encode('ascii', 'ignore').decode('utf-8')) + + array_of_strings[i,0] = chem_model_list[i][0] + + non_reac_species_str = '' + for species in non_reac_species_list[i]: + non_reac_species_str += species + ',' + + non_reac_species_str = non_reac_species_str[:-1] + array_of_strings[i,1] = non_reac_species_str + + else: + array_of_strings = np.empty((len(chem_model_list),1), dtype='S255') + for i in range(len(chem_model_list)): + Full_Chem_Model_List.append(chem_model_list[i][0]) + Full_Ref_List.append(str(reference_list[i]).encode('ascii', 'ignore').decode('utf-8')) + array_of_strings[i,0] = chem_model_list[i][0] + + # delete old attributes + if '* Reference' in hdf_unified_data["Reactions"][combined_reaction_name].attrs: + del hdf_unified_data["Reactions"][combined_reaction_name].attrs['* Reference'] + if 'NonReactiveSpecies' in hdf_unified_data["Reactions"][combined_reaction_name].attrs: + del hdf_unified_data["Reactions"][combined_reaction_name].attrs['NonReactiveSpecies'] + if 'ChemistryModel' in hdf_unified_data["Reactions"][combined_reaction_name].attrs: + del hdf_unified_data["Reactions"][combined_reaction_name].attrs['ChemistryModel'] + hdf_unified_data['Reactions'][combined_reaction_name].attrs.create(reaction_attribute_name, array_of_strings) + + + +# Read in Species Database +hdf_unified_data = h5py.File(relative_path, 'a') + +# get list of all reactions +reactions_list = list(hdf_unified_data["Reactions"].keys()) + +# initialize variables +Full_Chem_Model_List = [] +Full_Ref_List = [] +Activation_Energy_Kr = 0 +Arrhenius_Prefactor = 0 +Arrhenius_Powerfactor = 0 + +# Loop over species list +for i,reaction in enumerate(reactions_list): + + # create new reaction dataset if current name differs from name before + if (re.sub(r'#\d+','',reaction) != re.sub(r'#\d+','',reactions_list[i-1])) or reaction==reactions_list[0]: + # set counter for new combined name later if Arrhenius changes (if not reaction with different arrhenius coefficientes would be stored under the same name) + j = 0 + # set name for reaction + combined_reaction_name = re.sub(r'#\d+','',reaction) + + # Store existing attributes + attrs = hdf_unified_data["Reactions"][reaction].attrs + + # create lists for created reaction + chem_model_list = [] + non_reac_species_list = [] + reference_list = [] + + # check its the first iteration and the reaction name exists already + if combined_reaction_name == reaction: + combined_reaction_name = reaction + dataset = hdf_unified_data["Reactions"][reaction] + else: + dataset = hdf_unified_data["Reactions"].create_dataset(combined_reaction_name, data=0) + + # Restore attributes + for attr_name, attr_value in attrs.items(): + dataset.attrs[attr_name] = attr_value + + # enter loop to check arr coefficients if the current name is equal to the name before (after 'or' just to insure loop is entered even with new changed name from j counter) + elif re.sub(r'#\d+','',reaction) == combined_reaction_name or re.sub(r'#\d+','',reaction) == re.sub(r'#0\d+','',combined_reaction_name): + # Check if both reactions have the necessary attributes before comparing them + if "Arrhenius-Powerfactor" in hdf_unified_data["Reactions"][reaction].attrs and \ + "Arrhenius-Prefactor" in hdf_unified_data["Reactions"][reaction].attrs and \ + "Activation-Energy_K" in hdf_unified_data["Reactions"][reaction].attrs: + + # check the three Arrhenius coefficients to decide if new reaction has to be created + if (not np.isclose(hdf_unified_data["Reactions"][reaction].attrs['Arrhenius-Powerfactor'], Arrhenius_Powerfactor, rtol=Rtol, atol=0.0)) or \ + (not np.isclose(hdf_unified_data["Reactions"][reaction].attrs['Arrhenius-Prefactor'], Arrhenius_Prefactor, rtol=Rtol, atol=0.0)) or \ + (not np.isclose(hdf_unified_data["Reactions"][reaction].attrs['Activation-Energy_K'], Activation_Energy_Kr, rtol=Rtol, atol=0.0)) or \ + (not (hdf_unified_data["Reactions"][reaction].attrs['ReactionModel'][0] == ReactionModel)): + + # add old chem_models to attribute to create new reaction before resetting lists to store new data + create_dataset(hdf_unified_data, chem_model_list, non_reac_species_list, reference_list) + # counter plus one to ensure other name of reaction + j += 1 + # empty lists for new reaction + chem_model_list = [] + non_reac_species_list = [] + reference_list = [] + + # Store existing attributes + attrs = hdf_unified_data["Reactions"][reaction].attrs + combined_reaction_name = re.sub(r'#\d+','',reaction) + '#0%i' % j + dataset = hdf_unified_data["Reactions"].create_dataset(combined_reaction_name, data=0) + # Restore attributes + for attr_name, attr_value in attrs.items(): + dataset.attrs[attr_name] = attr_value + + else: + for ArrString,OldValue in zip(["Arrhenius-Powerfactor", "Arrhenius-Prefactor" , "Activation-Energy_K"],[Arrhenius_Powerfactor, Arrhenius_Prefactor, Activation_Energy_Kr]): + ArrValue = hdf_unified_data["Reactions"][reaction].attrs[ArrString] + precision1 = len(str(ArrValue).split('.')[1]) if '.' in str(ArrValue) else 0 + precision2 = len(str(OldValue).split('.')[1]) if '.' in str(OldValue) else 0 + if precision1 > precision2: + hdf_unified_data["Reactions"][reaction].attrs[ArrString] = ArrValue + else: + hdf_unified_data["Reactions"][reaction].attrs[ArrString] = OldValue + + elif ("Arrhenius-Powerfactor" not in hdf_unified_data["Reactions"][reaction].attrs or \ + "Arrhenius-Prefactor" not in hdf_unified_data["Reactions"][reaction].attrs or \ + "Activation-Energy_K" not in hdf_unified_data["Reactions"][reaction].attrs) and \ + (Arrhenius_Powerfactor!=0 or Arrhenius_Prefactor!=0 or Activation_Energy_Kr!=0): + # counter plus one to ensure other name of reaction + j += 1 + # empty lists for new reaction + chem_model_list = [] + non_reac_species_list = [] + reference_list = [] + + # Store existing attributes + attrs = hdf_unified_data["Reactions"][reaction].attrs + combined_reaction_name = re.sub(r'#\d+','',reaction) + '#0%i' % j + dataset = hdf_unified_data["Reactions"].create_dataset(combined_reaction_name, data=0) + # Restore attributes + for attr_name, attr_value in attrs.items(): + dataset.attrs[attr_name] = attr_value + + # store values for loop in next iter since reaction will be deleted before the if loop + ReactionModel = hdf_unified_data["Reactions"][reaction].attrs['ReactionModel'][0] + if "Arrhenius-Powerfactor" in hdf_unified_data["Reactions"][reaction].attrs and \ + "Arrhenius-Prefactor" in hdf_unified_data["Reactions"][reaction].attrs and \ + "Activation-Energy_K" in hdf_unified_data["Reactions"][reaction].attrs: + + Activation_Energy_Kr = hdf_unified_data["Reactions"][reaction].attrs['Activation-Energy_K'] + Arrhenius_Prefactor= hdf_unified_data["Reactions"][reaction].attrs['Arrhenius-Prefactor'] + Arrhenius_Powerfactor = hdf_unified_data["Reactions"][reaction].attrs['Arrhenius-Powerfactor'] + else: + Activation_Energy_Kr = 0 + Arrhenius_Prefactor = 0 + Arrhenius_Powerfactor = 0 + + # if current reaction has the same name as the combined reaction and arr are equal since elif was skipped -> add the data to the lists (after 'or' just to insure loop is entered even with new changed name from j counter) + if re.sub(r'#\d+','',reaction) == combined_reaction_name or re.sub(r'#\d+','',reaction) == re.sub(r'#0\d+','',combined_reaction_name): + # fix for wrong value in old database + if reaction == 'N+electron_NIon1+electron+electron#1' or reaction == 'N+electron_NIon1+electron+electron#2': + del hdf_unified_data["Reactions"][combined_reaction_name].attrs['ReactionModel'] + hdf_unified_data['Reactions'][combined_reaction_name].attrs.create('ReactionModel', ['QK'],dtype='S255') + # Store existing attributes + attrs = hdf_unified_data["Reactions"][reaction].attrs + + chem_model_list.append(attrs['ChemistryModel']) + reference_list.append(attrs['* Reference']) + + if 'NonReactiveSpecies' in hdf_unified_data["Reactions"][reaction].attrs: + # get strings in byte format + byte_strings = attrs['NonReactiveSpecies'] + # Convert each byte string to a regular string + species_list = [byte_string.decode('utf-8') for byte_string in byte_strings] + non_reac_species_list.append(species_list) + + # delete old reaction + if combined_reaction_name != reaction: + del hdf_unified_data["Reactions"][reaction] + + # if last reaction in list or current reaction is not equal to next reaction (after second 'or' just to insure loop is entered even with new changed name from j counter) + if reaction == reactions_list[-1] or re.sub(r'#\d+','',reaction) != re.sub(r'#\d+','',reactions_list[i+1]) or re.sub(r'#\d+','',reaction) != re.sub(r'#0\d+','',reactions_list[i+1]): + + create_dataset(hdf_unified_data, chem_model_list, non_reac_species_list, reference_list) + +# convert Full lists to arrays to store in attribute +Full_Chem_Model_array = np.array(Full_Chem_Model_List, dtype='S255') +Full_Ref_array = np.array(Full_Ref_List, dtype='S255') +Full_Array = np.vstack((Full_Chem_Model_array, Full_Ref_array)) +Full_Array = Full_Array.T +unique_array = np.unique(Full_Array, axis=0) +hdf_unified_data['Reactions'].attrs.create(all_reactions_attribute_name, unique_array) + + +################################################################################################### +#----------------------------------------- second part -----------------------------------------# +################################################################################################### +# checking all new reactions if arr coefficients are equal and reactions werent adjacent since this wasnt considered before + +# Read in Species Database +hdf_unified_data = h5py.File(relative_path, 'a') + +# get list of all reactions )stripped from '#01',etc. +unique_reaction_list = [] +reaction_list = list(hdf_unified_data["Reactions"].keys()) +for item in hdf_unified_data["Reactions"].keys(): + if re.sub(r'#0\d+','',item) not in unique_reaction_list: + unique_reaction_list.append(re.sub(r'#0\d+','',item)) +# counter for reactions in full reaction list (with '#01') +j = 0 +delete_list = [] +for i,reaction in enumerate(unique_reaction_list): + + Activation_Energy_Kr = [] + Arrhenius_Prefactor = [] + Arrhenius_Powerfactor = [] + Reaction_Model = [] + Reaction = [] + + # appending all coefficients and reaction names as long as the unique name is equal to the full name when removed '#01' + while j < len(reaction_list) and reaction == re.sub(r'#0\d+','',reaction_list[j]): + if "Arrhenius-Powerfactor" in hdf_unified_data["Reactions"][reaction_list[j]].attrs and \ + "Arrhenius-Prefactor" in hdf_unified_data["Reactions"][reaction_list[j]].attrs and \ + "Activation-Energy_K" in hdf_unified_data["Reactions"][reaction_list[j]].attrs: + + Activation_Energy_Kr.append(hdf_unified_data["Reactions"][reaction_list[j]].attrs['Activation-Energy_K']) + Arrhenius_Prefactor.append(hdf_unified_data["Reactions"][reaction_list[j]].attrs['Arrhenius-Prefactor']) + Arrhenius_Powerfactor.append(hdf_unified_data["Reactions"][reaction_list[j]].attrs['Arrhenius-Powerfactor']) + Reaction_Model.append(hdf_unified_data["Reactions"][reaction_list[j]].attrs['ReactionModel'][0]) + Reaction.append(reaction_list[j]) + else: + Activation_Energy_Kr.append(-1) + Arrhenius_Prefactor.append(-1) + Arrhenius_Powerfactor.append(-1) + Reaction_Model.append(hdf_unified_data["Reactions"][reaction_list[j]].attrs['ReactionModel'][0]) + Reaction.append(reaction_list[j]) + j += 1 + + Activation_Energy_Array = np.array(Activation_Energy_Kr) + Arrhenius_Prefactor_Array = np.array(Arrhenius_Prefactor) + Arrhenius_Powerfactor_Array = np.array(Arrhenius_Powerfactor) + Reaction_Model_Array = np.array(Reaction_Model) + Reaction_Array = np.array(Reaction) + Full_Array = np.vstack((Reaction_Array,Arrhenius_Powerfactor_Array,Arrhenius_Prefactor_Array,Activation_Energy_Array, Reaction_Model_Array)).T + # Find rows where the last three columns match + matching_rows = [] + for i in range(len(Full_Array)): + for k in range(i + 1, len(Full_Array)): + if Full_Array[i,-1] == Full_Array[k,-1]: + if np.all(np.isclose(Full_Array[i][1:3].astype(float), Full_Array[k][1:3].astype(float), rtol=Rtol, atol=0.0)): + matching_rows.append((i, k)) + + if matching_rows != 0: + for match in matching_rows: + # get matching idices + index1, index2 = match + current_models_array = hdf_unified_data["Reactions"][Full_Array[index1,0]].attrs[reaction_attribute_name] + append_models_array = hdf_unified_data["Reactions"][Full_Array[index2,0]].attrs[reaction_attribute_name] + + if "Arrhenius-Powerfactor" in hdf_unified_data["Reactions"][Full_Array[index1,0]].attrs and \ + "Arrhenius-Prefactor" in hdf_unified_data["Reactions"][Full_Array[index1,0]].attrs and \ + "Activation-Energy_K" in hdf_unified_data["Reactions"][Full_Array[index1,0]].attrs: + + for ArrString in ["Arrhenius-Powerfactor", "Arrhenius-Prefactor" , "Activation-Energy_K"]: + ArrValue1 = hdf_unified_data["Reactions"][Full_Array[index1,0]].attrs[ArrString] + ArrValue2 = hdf_unified_data["Reactions"][Full_Array[index2,0]].attrs[ArrString] + precision1 = len(str(ArrValue).split('.')[1]) if '.' in str(ArrValue1) else 0 + precision2 = len(str(OldValue).split('.')[1]) if '.' in str(ArrValue2) else 0 + if precision1 > precision2: + hdf_unified_data["Reactions"][Full_Array[index1,0]].attrs[ArrString] = ArrValue1 + else: + hdf_unified_data["Reactions"][Full_Array[index1,0]].attrs[ArrString] = ArrValue2 + # stacked array for attribute creation + new_models_array = np.vstack((current_models_array,append_models_array)) + + # Store existing attributes + attrs = hdf_unified_data["Reactions"][Full_Array[index1,0]].attrs + + # keeping first match so only deleting attribute + del hdf_unified_data["Reactions"][Full_Array[index1,0]].attrs[reaction_attribute_name] + # deleting whole reaction of second match + delete_list.append(Full_Array[index2,0]) + + hdf_unified_data["Reactions"][Full_Array[index1,0]].attrs.create(reaction_attribute_name, new_models_array) + +delete_list = np.unique(delete_list) +for reaction in delete_list: + del hdf_unified_data["Reactions"][reaction] + +# get list of all reactions )stripped from '#01',etc. +unique_reaction_list = [] +reaction_list = list(hdf_unified_data["Reactions"].keys()) +for item in hdf_unified_data["Reactions"].keys(): + if re.sub(r'#0\d+','',item) not in unique_reaction_list: + unique_reaction_list.append(re.sub(r'#0\d+','',item)) +# counter for reactions in full reaction list (with '#01') +j = 0 +for i,reaction in enumerate(unique_reaction_list): + k = 1 + if j != len(unique_reaction_list) or not (re.sub(r'#0\d+','',reaction_list[j]) != re.sub(r'#0\d+','',reaction_list[j+1])): + while j < len(reaction_list) and (reaction == re.sub(r'#0\d+','',reaction_list[j]) or reaction == re.sub(r'#\d+','',reaction_list[j])): + attrs = hdf_unified_data["Reactions"][reaction_list[j]].attrs + del hdf_unified_data["Reactions"][reaction_list[j]] + new_name = re.sub(r'#0\d+','',reaction_list[j]) + f'#{k}' + dataset = hdf_unified_data["Reactions"].create_dataset(new_name, data=0) + # Restore attributes + for attr_name, attr_value in attrs.items(): + dataset.attrs[attr_name] = attr_value + j += 1 + k += 1 + + else: + attrs = hdf_unified_data["Reactions"][reaction].attrs + del hdf_unified_data["Reactions"][reaction] + new_name = re.sub(r'#0\d+','',reaction) + '#1' + dataset = hdf_unified_data["Reactions"].create_dataset(new_name, data=0) + # Restore attributes + for attr_name, attr_value in attrs.items(): + dataset.attrs[attr_name] = attr_value + j += 1 + +reaction_list = list(hdf_unified_data["Reactions"].keys()) +for i,reaction in enumerate(reaction_list): + if reaction in ['O2+electron_O2Ion1+electron+electron#1','O+electron_OIon1+electron+electron#1','CO+electron_COIon1+electron+electron#1']: + hdf_unified_data["Reactions"][reaction].attrs['ReactionModel'] = 'QK' + +print('Output successful.') +hdf_unified_data.close() \ No newline at end of file diff --git a/tools/species_database/functions_database.py b/tools/species_database/archive/functions_database.py similarity index 100% rename from tools/species_database/functions_database.py rename to tools/species_database/archive/functions_database.py diff --git a/tools/species_database/custom_electronic_levels_SPECIES.csv b/tools/species_database/custom_electronic_levels_SPECIES.csv new file mode 100644 index 000000000..44b83c1ce --- /dev/null +++ b/tools/species_database/custom_electronic_levels_SPECIES.csv @@ -0,0 +1,4 @@ +"Term","J","Levelcm-1" +"---","XX","XX" +"---","XX","XX" +"Limit","---","XX" diff --git a/tools/species_database/edit_crosssections.py b/tools/species_database/edit_crosssections.py new file mode 100644 index 000000000..e69de29bb diff --git a/tools/species_database/edit_reactions.py b/tools/species_database/edit_reactions.py new file mode 100644 index 000000000..2728a6e6f --- /dev/null +++ b/tools/species_database/edit_reactions.py @@ -0,0 +1,256 @@ +from general_functions import * +from datetime import date +import re +import numpy as np + +def display_reaction(HDF_UNIFIED_DATA, CURRENT_REACTION): + print("\n"+red("Reaction: ") + green(CURRENT_REACTION)) + for AttrName, AttrValue in list(HDF_UNIFIED_DATA["Reactions"][CURRENT_REACTION].attrs.items()): + if AttrName == 'ChemistryModel': + for i in range(len(AttrValue[:,0])): + print('\nChemistry Model %s: '%(i+1), AttrValue[i,0].decode('utf-8')) + if AttrValue.shape[1] != 1: + print('Non-Reactive species: ', AttrValue[i,1].decode('utf-8')) + print('') + + elif AttrName in ['Products','Reactants','ReactionModel']: + if len(AttrValue) == 1: + print(AttrName,": ",AttrValue[0].decode('utf-8')) + else: + print(AttrName, end=': ') + i = 0 + for i in range(len(AttrValue)-1): + print(AttrValue[i].decode('utf-8'), end=',') + print(AttrValue[i+1].decode('utf-8')) + + + else: + try: + print(AttrName,': ',AttrValue.decode('utf-8')) + except Exception: + print(AttrName,': ',AttrValue) + +def check_reaction(HDF_UNIFIED_DATA, CURRENT_REACTION): + existing_reaction_list = list(HDF_UNIFIED_DATA["Reactions"].keys()) + unique_reaction_list = [] + for item in HDF_UNIFIED_DATA["Reactions"].keys(): + if re.sub(r'#\d+','',item) not in unique_reaction_list: + unique_reaction_list.append(re.sub(r'#\d+','',item)) + + if CURRENT_REACTION in unique_reaction_list: + print("It seems like the given reaction exists already in the database - "+green(CURRENT_REACTION)) + # count matches for new reaction number later + count = 0 + #check for more than one hits of current reaction + for REACTION in existing_reaction_list: + if re.sub(r'#\d+','',REACTION) == CURRENT_REACTION: + display_reaction(HDF_UNIFIED_DATA, REACTION) + count += 1 + user_input = get_valid_input(create_prompt('add a new reaction with different attributes', 'add a new chemistry model to existing reaction','to skip this reaction'), lambda x: x == '1' or x == '2' or x == '3' or x == '4') + + if user_input == '1': + New_Reaction_Name = CURRENT_REACTION + "#" + str(count+1) + return New_Reaction_Name + elif user_input == '2': + # new chem model to existing reaction + if count != 1: + user_input = input(bold('\nPlease enter the number of the reaction where you want add a new chemistry model\n-->')) + chem_model_reaction_name = CURRENT_REACTION + "#" + str(user_input) + else: + chem_model_reaction_name = CURRENT_REACTION + "#1" + only_new_chem_model(HDF_UNIFIED_DATA,chem_model_reaction_name) + elif user_input == '3': + return None + elif user_input == '4': + own_exit() + else: + New_Reaction_Name = CURRENT_REACTION + "#1" + return New_Reaction_Name + +# create new chemistry model in the reaction attribute 'AvailableChemistryModels,Reference' +def create_new_ref_attribute(HDF_UNIFIED_DATA, reaction_name, CHEM_MODEL): + # add reference to attribute of reactions group + Reference = input(bold('\nPlease enter the Reference of current reaction %s\n-->') % reaction_name) + AvailChemModels = HDF_UNIFIED_DATA["Reactions"].attrs['AvailableChemistryModels,Reference'] + AvailChemModels_unicode = np.char.decode(AvailChemModels, 'utf-8') + + if not (np.any(AvailChemModels_unicode[:, 0] == CHEM_MODEL)): + size = len(AvailChemModels_unicode[:, 0]) + new_chem_models = np.zeros((size+1,2), dtype='S255') + for i in range(size): + new_chem_models[i,0] = AvailChemModels_unicode[i,0] + new_chem_models[i,1] = AvailChemModels_unicode[i,1] + new_chem_models[-1,0] = CHEM_MODEL + new_chem_models[-1,1] = Reference + + del HDF_UNIFIED_DATA["Reactions"].attrs['AvailableChemistryModels,Reference'] + HDF_UNIFIED_DATA['Reactions'].attrs.create('AvailableChemistryModels,Reference', new_chem_models ,dtype='S255') + +def create_reaction(HDF_UNIFIED_DATA, CURRENT_REACTION): + reaction_name = check_reaction(HDF_UNIFIED_DATA, CURRENT_REACTION) + if reaction_name != None: + # get attributes + try: + Reactants, Products = CURRENT_REACTION.split('_') + except Exception as e: + print("Read in of products and reactants from reaction name has failed with error %s. Please ensure reaction has correct format: C2+M_C+M+C (products and reactants separated by underscore). %s will be skipped"%(e,reaction_name)) + return + Products = Products.split('+') + prodList = remove_from_list(Products, 'M', '+', 'A') + Reactants = re.sub(r'#\d+','',Reactants) + Reactants = Reactants.split('+') + reacList = remove_from_list(Reactants, 'M', '+', 'A') + + + # create reaction + dataset = HDF_UNIFIED_DATA["Reactions"].create_dataset(reaction_name, data=0) + ReactionModel = get_valid_input(bold('\nPlease enter the reaction model of current reaction %s (Options: "QK" or "TCE")\n-->') % reaction_name, lambda x: x == 'QK' or x == 'TCE') + dataset.attrs.create('ReactionModel', [ReactionModel], dtype='S255') + if ReactionModel == 'TCE': # get other parameter + for ArrString in ["Arrhenius-Powerfactor", "Arrhenius-Prefactor" , "Activation-Energy_K"]: + ArrValue = input(bold('\nPlease enter the '+ArrString+' of current reaction %s\n-->') % reaction_name) + dataset.attrs.create(ArrString, ArrValue, dtype='float64') + elif ReactionModel == 'QK': # qk only used for ionization or dissociation + if any('Ion' in element for element in prodList): # check if ion is in prodcuts of reaction -> ionization + # sanity check if required values are set for species: last electronic level with degeneracy 1 + for spec in reacList: + if spec != 'el': # check all reactants except electrons + if HDF_UNIFIED_DATA['Species'][spec][:][-1,0] != 1: + print("Error: Degeneracy of last electronic level of species %s not equal to 1! Reaction will be skipped" % spec) + del HDF_UNIFIED_DATA["Reactions"][reaction_name] + return + else: + print("Please double check the ionization energy of species %s: %s" % (spec,HDF_UNIFIED_DATA['Species'][spec][:][-1,1])) + else: # dissociation reaction + # sanity check of reactants: EdissEV in species set + for spec in reacList: + if spec != 'el': # check all reactants except electrons + if HDF_UNIFIED_DATA['Species'][spec].attrs['Ediss_eV'] == None: + print(red("Error:")+" Ediss_eV of species %s not found in database! Reaction will be skipped" % spec) + del HDF_UNIFIED_DATA["Reactions"][reaction_name] + return + else: + print("Please double check the dissociation energy of species %s: %s" % (spec,HDF_UNIFIED_DATA['Species'][spec].attrs['Ediss_eV'])) + + ##### TODO: show available chem models and be able to select one + ChemModel = input(bold('\nPlease enter the chemistry model to which the currenet reaction %s belongs\n-->') % reaction_name) + if 'M' in Reactants or 'M' in Products or 'A' in Reactants or 'A' in Products: + NonReactives = input(bold('\nPlease enter the non reactive species of currenet reaction %s as comma separated string, e.g "H2,H,O"\n-->') % reaction_name) + dataset.attrs.create('ChemistryModel', [[ChemModel,NonReactives]], dtype='S255') + else: + dataset.attrs.create('ChemistryModel', [[ChemModel]], dtype='S255') + + dataset.attrs.create('* Created', date.today().strftime("%B %d, %Y"), dtype='S255') + dataset.attrs.create('Products', np.array(prodList), dtype='S255') + dataset.attrs.create('Reactants', np.array(reacList), dtype='S255') + + create_new_ref_attribute(HDF_UNIFIED_DATA, reaction_name, ChemModel) + + print("New reaction created!") + +def delete_reaction(HDF_UNIFIED_DATA, CURRENT_REACTION): + existing_reaction_list = list(HDF_UNIFIED_DATA["Reactions"].keys()) + unique_reaction_list = [] + for item in HDF_UNIFIED_DATA["Reactions"].keys(): + if re.sub(r'#\d+','',item) not in unique_reaction_list: + unique_reaction_list.append(re.sub(r'#\d+','',item)) + + if CURRENT_REACTION in unique_reaction_list: + print("It seems likt the given reaction exists already in the database - "+green(CURRENT_REACTION)) + # counter for break if only one reaction exists + counter = 0 + #check for more than one hits of current reaction + for REACTION in existing_reaction_list: + if re.sub(r'#\d+','',REACTION) == CURRENT_REACTION: + counter += 1 + + chemModelCheck = [] # save chemistry models of deleted reactions for check later + if counter == 1: + delete_reaction_name = CURRENT_REACTION + "#1" + display_reaction(HDF_UNIFIED_DATA, delete_reaction_name) + user_input = get_valid_input(create_prompt('to delete this reaction', 'to skip this reaction'), lambda x: x == '1' or x == '2' or x == '3') + if user_input == '1': + try: # catch reaction falsly without chem model to still delete + chemModelCheck.append(HDF_UNIFIED_DATA["Reactions"][delete_reaction_name].attrs['ChemistryModel'][:,0]) + except: + pass + del HDF_UNIFIED_DATA["Reactions"][delete_reaction_name] + else: + return + + else: + # display other reactions + for REACTION in existing_reaction_list: + if re.sub(r'#\d+','',REACTION) == CURRENT_REACTION: + display_reaction(HDF_UNIFIED_DATA, REACTION) + # get which reaction to delete + user_input = input(bold('\nPlease enter the number(s) of the reaction(s) you want to delete as comma separated string, e.g. 1,2,3\n-->')) + user_input = user_input.split(',') + # create reaction names to delete + for num in user_input: + delete_reaction_name = CURRENT_REACTION + "#" + str(num) + try: # catch reaction falsly without chem model to still delete + chemModelCheck.append(HDF_UNIFIED_DATA["Reactions"][delete_reaction_name].attrs['ChemistryModel'][:,0]) + except: + pass + del HDF_UNIFIED_DATA["Reactions"][delete_reaction_name] + + # get new list without deleted reaction + existing_reaction_list = list(HDF_UNIFIED_DATA["Reactions"].keys()) + # renumber remaining reactions + counter = 1 + for REACTION in existing_reaction_list: + if re.sub(r'#\d+','',REACTION) == CURRENT_REACTION: + attrs = HDF_UNIFIED_DATA["Reactions"][REACTION].attrs + del HDF_UNIFIED_DATA["Reactions"][REACTION] + new_name = CURRENT_REACTION + f'#{counter}' + dataset = HDF_UNIFIED_DATA["Reactions"].create_dataset(new_name, data=0) + # Restore attributes + for attr_name, attr_value in attrs.items(): + dataset.attrs[attr_name] = attr_value + counter += 1 + + # check if reaction with chem model still exists or if it should be deleted from the reactions attribute + existing_reaction_list = list(HDF_UNIFIED_DATA["Reactions"].keys()) + # loop over all reactions + availChemModels = HDF_UNIFIED_DATA["Reactions"].attrs['AvailableChemistryModels,Reference'] + for MODEL in chemModelCheck: + for REATION in existing_reaction_list: + if MODEL in HDF_UNIFIED_DATA["Reactions"][REATION].attrs['ChemistryModel'][:,0]: + break + # model in remaining reactions not found - will be deleted from available chemistry models + index_match = np.where(availChemModels[:, 0] == MODEL)[0] + + NewAvailChemModels = np.delete(availChemModels, index_match, axis=0) + + if len(chemModelCheck) != 0: # catch reaction falsly without chem model to still delete + del HDF_UNIFIED_DATA["Reactions"].attrs['AvailableChemistryModels,Reference'] + HDF_UNIFIED_DATA['Reactions'].attrs.create('AvailableChemistryModels,Reference', NewAvailChemModels ,dtype='S255') + + else: + print("It seems like the reaction is not found in the database. Please ensure the right syntax (e.g. C+N_CNIon1+electron) or check by hand if the reaction exists.") + +def only_new_chem_model(HDF_UNIFIED_DATA, chem_model_reaction_name): + # get chem model (and non reactives from reaction) + ChemModelNonReacArray = HDF_UNIFIED_DATA["Reactions"][chem_model_reaction_name].attrs['ChemistryModel'] + ChemModelNonReacArray_unicode = np.char.decode(ChemModelNonReacArray, 'utf-8') + size = len(ChemModelNonReacArray_unicode[:, 0]) + NumCols = ChemModelNonReacArray_unicode.shape[1] + New_ChemModelNonReacArray = np.zeros((size+1,NumCols), dtype='S255') + + for i in range(size): + New_ChemModelNonReacArray[i,0] = ChemModelNonReacArray_unicode[i,0] + if NumCols == 2: + New_ChemModelNonReacArray[i,1] = ChemModelNonReacArray_unicode[i,1] + + # add new chem model and non reacs + ChemistryModel = input(bold('\nPlease enter the name of the new chemistry model\n-->')) + New_ChemModelNonReacArray[-1,0] = ChemistryModel + if NumCols == 2: + NewNonReactives = input(bold('\nPlease enter the non reactive species of the new chemistry model as comma separated string, e.g "H2,H,O"\n-->')) + New_ChemModelNonReacArray[-1,1] = NewNonReactives + + del HDF_UNIFIED_DATA["Reactions"][chem_model_reaction_name].attrs['ChemistryModel'] + HDF_UNIFIED_DATA['Reactions'][chem_model_reaction_name].attrs.create('ChemistryModel', New_ChemModelNonReacArray ,dtype='S255') + + create_new_ref_attribute(HDF_UNIFIED_DATA, chem_model_reaction_name, ChemistryModel) diff --git a/tools/species_database/edit_species.py b/tools/species_database/edit_species.py new file mode 100644 index 000000000..996dfa311 --- /dev/null +++ b/tools/species_database/edit_species.py @@ -0,0 +1,539 @@ +import requests +import pandas as pd +import io +import re +import numpy as np +import os +from tabulate import tabulate +from datetime import date +from requests_html import HTMLSession +from bs4 import BeautifulSoup +from general_functions import * + +################################################################################################### +# functions for electronic levels Data handeling +################################################################################################### +def get_data_from_NIST(CURRENT_SPECIES, SPECIES, ION_LEVEL, URL_BASE, HDF_UNIFIED_DATA): + # Build the species in the NIST database query format: Xe+I + current_species_NIST = SPECIES + '+' + int_to_Roman(ION_LEVEL) + print(bold('Converted '+CURRENT_SPECIES+' to '+current_species_NIST+' for download from NIST database.')) + # Build the request URL + URL_request = URL_BASE + '?de=0&spectrum=' + current_species_NIST + '&units=0&format=2&output=0&page_size=15&multiplet_ordered=1&term_out=on&level_out=on&j_out=on&temp=&submit=Retrieve+Data' + response = requests.get(URL_request) + # Check the website + if response.status_code == 200: + print('Download from NIST successful.\n') + # Get the data from the NIST website + data = response.content.decode('utf-8') + # Clean the data + data = data.replace('[','') + data = data.replace(']','') + data = data.replace('(','') + data = data.replace(')','') + data = data.replace('= ','') + data = data.replace('=','') + data = data.replace(' ','') + data = data.replace('"','') + try: + # Attempt to convert data to pandas dataframe + data = pd.read_csv(io.StringIO(data),skipinitialspace=True,delimiter=",",usecols=['J','Prefix','Levelcm-1','Suffix','Term'], na_values=['---']) + # Drop 'Prefix' and 'Suffix' columns + data = data.drop(columns=['Prefix', 'Suffix']) + return data, current_species_NIST + except Exception as e: + # check if species is not found because it is fully ionized in database + if "FullyIonized" in HDF_UNIFIED_DATA["Species"][CURRENT_SPECIES].attrs: + return int(-1), current_species_NIST + # Print an error message if there's an exception + print(red('Error'), "converting data from \n", blue(URL_request), " for ", green(CURRENT_SPECIES), "might not be available on requested URL. Tried to access data with ", green(current_species_NIST), "Please check this combination on the URL. \nError:", e ,"\n") + # get user input to determine which dataset should be saved + user_input_create = get_valid_input("Do you want to create "+green(CURRENT_SPECIES)+" without the electronic level?\n" + bold('Please enter\n ') + purple('1') + " for yes or \n " + purple('2') + " for no\n-->", lambda x: x == '1' or x == '2') + if user_input_create == '1': + column_names = ['J', 'Levelcm-1', 'Term'] + data = pd.DataFrame(columns=column_names) + first_row_data = {'J': '0', 'Levelcm-1': '0', 'Term': 'Limit'} + data = data.append(first_row_data, ignore_index=True) + elif user_input_create == '2': + return int(-1), current_species_NIST + +# converting electronic data in useful format +def convert_electronic_data(DATA): + # get index of J column + J = DATA.columns.get_loc("J") + # find the first limit in term column to drop every entry after ionization + index_of_limit_ionization = DATA[DATA['Term'].str.contains('Limit', na=False)].index[0] + # drop every entry after limit index + DATA = DATA.drop(DATA.index[index_of_limit_ionization+1:]) + # set J of limit row to 0 so its not lost in nan computation and it later becomes g=1 + DATA.iloc[index_of_limit_ionization,J] = 0 + max_level = len(DATA)-1 + # dropping term column for nan filtering + DATA = DATA.drop(columns=['Term']) + # find rows containing nan + rows_with_nan = [index for index, row in DATA.iterrows() if row.isnull().any()] + # remove rows with nan + if len(rows_with_nan) == 1: + max_level = rows_with_nan[0] + drop_to_end = 1 - (len(DATA)-max_level) + if drop_to_end < 0: + DATA = DATA.iloc[:drop_to_end] + elif drop_to_end == 0: + pass + else: + print("ERROR: drop_to_end must be negative!") + exit(1) + else: + for val in rows_with_nan: + DATA = DATA.drop(val) + max_level = len(DATA)-1 + # get J again because 'Term' was deleted + J = DATA.columns.get_loc("J") + # set last J to 0 so ionization is later (1,UNIFIED_DATA_ARRAY) + if DATA['J'].dtype == 'float64': + DATA.iloc[max_level,J] = 0.0 + else: + DATA.iloc[max_level,J] = "0.0" + # Check the DATAtype: if its a float, then all non-numerical characters have already been removed + if DATA['Levelcm-1'].dtype != 'float64': + # Drop rows with a question mark ("This level/line may not be real.") + DATA.drop(DATA[DATA['Levelcm-1'].str.contains(r'[?]')].index,inplace=True) + # Drop rows with a +x ("The relative positions of the levels within such a system are accurate within experimental uncertainties, but no experimental connection between this system and the other levels of the spectrum has been made.") + DATA.drop(DATA[DATA['Levelcm-1'].str.contains(r'[+x]')].index,inplace=True) + # Execute fractions and convert J to g + if DATA['J'].dtype != 'float64': + for i in range(len(DATA['J'])): + # Convert fraction entries to floats (5/2 -> 2.5) + #print(type(DATA.iloc[i,J])) + found = re.search(r'\d+/\d+', DATA.iloc[i,J]) + if found: + numbers = DATA.iloc[i,J].split("/") + DATA.iloc[i,J] = float(numbers[0])/float(numbers[1]) + else: + DATA.iloc[i,J] = float(DATA.iloc[i,J]) + # Convert J to g + DATA.iloc[:,J] = 2 * DATA.iloc[:,J] + 1.0 + # Convert type for HDF5 output + DATA['J'] = DATA['J'].astype(float) + # make sure first level is (1,0) + DATA.iloc[0,J] = 1 + # Convert 1/cm to K + DATA['Levelcm-1'] = DATA['Levelcm-1'].astype(float) + DATA['Levelcm-1'] = 100 * DATA['Levelcm-1'] * 1.986E-025 / 1.38065E-023 # 1/cm * 100cm/m * (J m) / (J/K) = K + # check for energy limits if they are increasing with every level + x_old=0. + Level = DATA.columns.get_loc("Levelcm-1") + for i in range(len(DATA['Levelcm-1'])): + x = DATA.iloc[i,Level] + if x < x_old: + print('Error in level %s: the energy is not increasing with the levels E2=%s < E1=%s' % (i,x,x_old)) + exit(1) + else: + x_old = x + # Write to hdf: If DATA set already exists, delete the old set first + DATA.columns=['Degeneracy', 'Level(K)'] + return DATA + +# create dataset and save attributes +def create_dataset(HDF_UNIFIED_DATA, CURRENT_SPECIES, DATA_ARRAY): + '''Create new dataset while saving old attributes and adding a new reference\n Inputs: database where dataset is saved and species name''' + # Store existing attributes + attrs = HDF_UNIFIED_DATA["Species"][CURRENT_SPECIES].attrs + del HDF_UNIFIED_DATA["Species"][CURRENT_SPECIES] + dataset = HDF_UNIFIED_DATA['Species'].create_dataset(CURRENT_SPECIES, data=DATA_ARRAY) + # Restore attributes + for attr_name, attr_value in attrs.items(): + dataset.attrs[attr_name] = attr_value + # Get current references -> will be an array?! + current_references = [attrs['* Reference']] + levels_reference = 'Levels and Degeneracy - Kramida, A., Ralchenko, Yu., Reader, J., and NIST ASD Team (2020). NIST Atomic Spectra Database (ver. 5.8), [Online]. Available: https://physics.nist.gov/asd. National Institute of Standards and Technology, Gaithersburg, MD. DOI: https://doi.org/10.18434/T4W30F. Retrieved on ' + date.today().strftime("%B %d, %Y") + '.' + # Append the new reference + current_references.append(levels_reference) + # Update the attribute with the references + del dataset.attrs['* Reference'] + dataset.attrs.create('* Reference', current_references) + +# function to print differences in datasets +def print_diffs(DATA_ARRAY, UNIFIED_DATA_ARRAY, CURRENT_SPECIES_NIST): + '''Print the differneces in the two data sets onto terminal\n Inputs: new data array from url and data array from species database''' + try: + diff_indices_degeneracy = np.where(~np.isclose(DATA_ARRAY[:,0], UNIFIED_DATA_ARRAY[:,0], rtol=1e-05, atol=0)) + diff_indices_levels = np.where(~np.isclose(DATA_ARRAY[:,1], UNIFIED_DATA_ARRAY[:,1], rtol=1e-05, atol=0)) + # Create DataFrame for levels + diff_df_levels = pd.DataFrame({ + 'Index Level': diff_indices_levels[0], + 'URL Array Level': [DATA_ARRAY[idx, 1] for idx in diff_indices_levels[0]], + 'Unified Data Array Level': [UNIFIED_DATA_ARRAY[idx, 1] for idx in diff_indices_levels[0]], + }) + # Create DataFrame for degeneracy + diff_df_degeneracy = pd.DataFrame({ + 'Index Degeneracy': diff_indices_degeneracy[0], + 'URL Array Degeneracy': [DATA_ARRAY[idx, 0] for idx in diff_indices_degeneracy[0]], + 'Unified Data Array Degeneracy': [UNIFIED_DATA_ARRAY[idx, 0] for idx in diff_indices_degeneracy[0]], + }) + # Set display option to show all rows + with pd.option_context('display.max_rows', None): + # Print DataFrames separately with a clear separator + print("\n" + underlinE('Differnce for Levels:')) + print(tabulate(diff_df_levels, headers='keys', tablefmt='psql', numalign='center')) + print("\n" + underlinE('Differnce for Degeneracy:')) + print(tabulate(diff_df_degeneracy, headers='keys', tablefmt='psql', numalign='center')) + except Exception as e: + if 'operands could not be broadcast together' in str(e): + # print Error message with colors if expected errors occurs + print(bold('\033[91mError:\033[0m'),"operands could not be broadcast together with shapes \033[33m%s\033[0m from \033[33munified species database\033[0m and \033[34m%s\033[0m with data from \033[34mURL\033[0m accessed as \033[32m%s\033[0m" % (UNIFIED_DATA_ARRAY.shape,DATA_ARRAY.shape,CURRENT_SPECIES_NIST)+"\n") + else: + # print error message if not expected error occurs + print(e) + return + +def check_datasets(current_species, HDF_UNIFIED_DATA, RELATIVE_PATH): + # Base URL of the query + URL_base = 'https://physics.nist.gov/cgi-bin/ASD/energy1.pl' + # Get the ionization number as the last digits and 1 to comply with the NIST standard + ion_level = int(re.sub('.*?([0-9]*)$',r'\1',current_species) or 0) + 1 + # Get the species (everything before Ion) + species = current_species.split('Ion')[0] + # break for molecules + if bool(re.search(r'[A-Za-z]*\d', species)) or sum(1 for c in species.replace('Ion','') if c.isupper()) != 1: + try: + # Attempt to convert data to pandas dataframe from custom csv file + data = pd.read_csv(f'custom_electronic_levels_{current_species}.csv',skipinitialspace=True,delimiter=",",usecols=['J','Levelcm-1','Term'], na_values=['---'], dtype=str) + print(f'Using custom data from custom_electronic_levels_{current_species}.csv') + except: + print(red('Caution')+": Please make sure you provide a atom species. Automatic read in from online database of electronic levels for molecules not possible yet! Current species: "+green(current_species)+" It is possible to provide a custom csv file containing the electronic levels. To use this option please use the template in this directory, insert the necessary information and add the species to the end like this: 'custom_electronic_levels_H2.csv'") + return + else: + # get data from Nist database + data, current_species_NIST = get_data_from_NIST(current_species, species, ion_level, URL_base, HDF_UNIFIED_DATA) + if type(data) == int: + return + + # convert data from website to fit specifications (e.g. filter unnecessary information ) + data = convert_electronic_data(data) + + # check if species is already in Species database + if current_species in HDF_UNIFIED_DATA['Species'].keys(): + # data from URL into numpy array + data_array = data.to_numpy() + # data from species database into numpy array + unified_data_array = np.array(HDF_UNIFIED_DATA["Species"][current_species]) + + # check if read-in data from species database has wrong format (might be empty) + if unified_data_array.ndim == 1 or unified_data_array.shape[1] != 2: + print(red('Error'), ": Read-in from ", cyan(os.path.abspath(RELATIVE_PATH))," failed or dataset has unexpected dimensions (needs to be (X,2)! Please check the dataset of species ", green(current_species), " - species will be skipped\n") + # print("What should be done in this case? Dimension do not match") + # old_attrs = HDF_UNIFIED_DATA["Species"][current_species].attrs + # del HDF_UNIFIED_DATA["Species"][current_species] + # dataset = HDF_UNIFIED_DATA['Species'].create_dataset(current_species, data=data_array) + return + # Compare the arrays to check if they are already the same + if np.array_equal(data_array, unified_data_array): + print("\nDatasets of species "+ green(current_species) + " are equal, so dataset from " + yellow('unified species database') + " will be kept.\n") + return + + # get user input to determine which dataset should be saved + print("It seems like the species " + green(current_species) + " is already stored in the SpeciesDatabase at " + cyan(os.path.abspath(os.path.abspath(RELATIVE_PATH)))+' with the following data:\n') + print_diffs(data_array, unified_data_array,current_species_NIST) + + # Prompt user to choose which dataset to keep + user_input = get_valid_input(create_prompt('to keep data and attributes from '+yellow('unified species database'), 'to save only electronic level data from '+blue(URL_base), 'to skip all electronic levels and continue with only attributes'), lambda x: x == '1' or x == '2' or x == '3' or x == '4') + if user_input == '1': + print("Keeping electronic level dataset and attributes for species ",green(current_species), "\n") + return + elif user_input == '2': + create_dataset(HDF_UNIFIED_DATA, current_species, data_array) + print("Saving electronic level dataset from " + blue('URL') + " for species ",green(current_species), " but keeping attributes\n") + elif user_input == '3': + return -1 # to break loop in maintain_database.py + elif user_input == '4': + print(bold(red("Exiting program"))) + exit(1) + + else: + print("Species "+green(current_species)+" not found in database. Please create new species.") + +def add_dataset(HDF_UNIFIED_DATA,current_species,RELATIVE_PATH,ATCT_URL,SPECIES_DICT,SPECIES_DICT_FLAG): + # Base URL of the query + URL_base = 'https://physics.nist.gov/cgi-bin/ASD/energy1.pl' + # Get the ionization number as the last digits and 1 to comply with the NIST standard + ion_level = int(re.sub('.*?([0-9]*)$',r'\1',current_species) or 0) + 1 + # Get the species (everything before Ion) + species = current_species.split('Ion')[0] + # break for molecules + if bool(re.search(r'[A-Za-z]*\d', species)) or sum(1 for c in species.replace('Ion','') if c.isupper()) != 1: + try: + # Attempt to convert data to pandas dataframe from custom csv file + data = pd.read_csv(f'custom_electronic_levels_{current_species}.csv',skipinitialspace=True,delimiter=",",usecols=['J','Levelcm-1','Term'], na_values=['---'], dtype=str) + print(f'Using custom data from custom_electronic_levels_{current_species}.csv') + except: + print(red('Caution')+": Please make sure you provide a atom species. Automatic read in from online database of electronic levels for molecules not possible yet! Current species: "+green(current_species)+" It is possible to provide a custom csv file containing the electronic levels. To use this option please use the template in this directory, insert the necessary information and add the species to the end like this: 'custom_electronic_levels_H2.csv'") + return + + + else: + # get data from Nist database + data, current_species_NIST = get_data_from_NIST(current_species, species, ion_level, URL_base, HDF_UNIFIED_DATA) + if type(data) == int: + print("Error") + return + + # convert data from website to fit specifications (e.g. filter unnecessary information ) + data = convert_electronic_data(data) + # check if exists + if current_species not in HDF_UNIFIED_DATA['Species'].keys(): + print("Species "+ green(current_species) + " not found in Species Database - new dataset is being generated at "+ cyan(os.path.abspath(RELATIVE_PATH))) + dataset = HDF_UNIFIED_DATA['Species'].create_dataset(current_species, data=data) + try: + SPECIES_DICT_FLAG, HeatOfFormation_K, MassIC_kg, current_species_charge, interactionID = get_attr_values(SPECIES_DICT_FLAG, SPECIES_DICT, current_species, ATCT_URL) + except: + return SPECIES_DICT_FLAG + create_attributes(dataset, current_species, ATCT_URL, MassIC_kg, HeatOfFormation_K, current_species_charge, interactionID) + else: + print("Species already exists in database\n") + + +################################################################################################### +# functions for ATcT data handeling +################################################################################################### +def create_species_dict(SPECIES_DICT, ATCT_URL): + # Create an HTML session + session = HTMLSession() + # Make a GET request to the URL + response = session.get(ATCT_URL) + # Check if the request was successful (status code 200) + if response.status_code == 200: + print('Request at ATcT successful.\n') + # Render the HTML content (execute JavaScript) + response.html.render() + # Parse the HTML content + soup = BeautifulSoup(response.html.html, 'html.parser') + # Navigating to wanted data + grand_table = soup.find(class_ = 'bodyProperInner') + tbody = grand_table.find('tbody') + tr = tbody.find('tr') + td = tr.find('td') + inner_table = td.find('table') + inner_tbody = inner_table.find_all('tbody') + # data not easily accesable due to missing ids and many tables,bodies,etc -> 5 must equal the number of the tbody containing the species names, heat, ... + inner_tbody = inner_tbody[5] + rows = inner_tbody.find_all('tr') + # slice first entry since it only shows the structure + rows = rows[1:] + for row in rows: + # get species name + row_str = str(row) + start_index = row_str.index('type="button">') + len('type="button">') + end_index = row_str.index(' ') + formula = row_str[start_index:end_index] + formula = formula.replace('[','') + formula = formula.replace(']','') + formula = formula.replace(' ','') + if formula.endswith("(g)") and '(' not in formula[:-3]: # only save data of species in gas phase + formula = re.sub(r'\([a-zA-Z0-9,\/]+\)','',formula) + else: + continue + # get heat of formation at 298.15K + bkgDHf298_element = row.find('td', class_='bkgDHf298') + if bkgDHf298_element: + # Extract the text content from the element inside and convert to kelvin + delta_f_H_298K = float(bkgDHf298_element.span.text) * 120.27311595710411 + # get molecular mass of species + bkgMass_element = row.find('td', class_='bkgMass') + if bkgMass_element: + # Extract the text content from the element inside + mol_mass = bkgMass_element.span.text + # clean data + index_of_plus = mol_mass.find('±') + if index_of_plus != -1: + mol_mass = float(mol_mass[:index_of_plus-1]) + # convert with avogadro const and to kg + mass = mol_mass/(6.02214076e23 * 1000) + SPECIES_DICT.append({ + "Species": formula, + "HeatOfFormation_K": delta_f_H_298K, + "MassIC_kg": mass + }) + # print(SPECIES_DICT) + return SPECIES_DICT + +# Function to search for a species in the dictionary +def search_species_value(SPECIES_LABEL, SPECIES_DICT, ATCT_URL): + # convert species name to fit SPECIES_DICT + if 'Ion' in SPECIES_LABEL: + Ion_Number = int(re.search(r'\d+$', SPECIES_LABEL).group()) + if Ion_Number == 1: + SPECIES_LABEL = re.sub('Ion1','+', SPECIES_LABEL) + elif Ion_Number != None: + SPECIES_LABEL = re.sub('Ion','+', SPECIES_LABEL) + for species in SPECIES_DICT: + try: + if species["Species"] == SPECIES_LABEL: + return species["HeatOfFormation_K"], species['MassIC_kg'] + except: + return None # Return None if species is not found + +# function to get values of species out of dictionary +def get_attr_values(SPECIES_DICT_FLAG, SPECIES_DICT, CURRENT_SPECIES, ATCT_URL): + # read-in heat of formation and mass from ATcT at 298.15K + if not SPECIES_DICT_FLAG: + # create dict with heat of formation and mass for faster read in for second species + SPECIES_DICT_FLAG = True + SPECIES_DICT = create_species_dict(SPECIES_DICT, ATCT_URL) + try: + HeatOfFormation_K, MassIC_kg = search_species_value(CURRENT_SPECIES, SPECIES_DICT, ATCT_URL) + except: + if CURRENT_SPECIES != 'electron': + print(red('Error:')+' It seems like the species %s was not found at %s! Please check for the species on website\n' % (CURRENT_SPECIES, ATCT_URL)) + return SPECIES_DICT_FLAG + # read-in ChargeIC from name of species + if 'Ion' in CURRENT_SPECIES: + Ion_Number = int(re.search(r'\d+$', CURRENT_SPECIES).group()) + electron_charge = -1.60217653E-19 # coulombs + current_species_charge = - Ion_Number * electron_charge + elif 'electron' in CURRENT_SPECIES: + current_species_charge = electron_charge + else: + current_species_charge = 0 + # get interactionID from current species name + if sum(1 for c in CURRENT_SPECIES.replace('Ion','') if c.isupper()) == 1 and not bool(re.search(r'\d+', re.sub(r'Ion\d+','',CURRENT_SPECIES))): + if not bool(re.search(r'[A-Za-z]*\d', re.sub(r'Ion\d+','',CURRENT_SPECIES))): + if 'Ion' in CURRENT_SPECIES: + interactionID = 10 + elif 'Ion' not in CURRENT_SPECIES: + interactionID = 1 + elif bool(re.search(r'\d+', re.sub(r'Ion\d+','',CURRENT_SPECIES))) or sum(1 for c in CURRENT_SPECIES.replace('Ion','') if c.isupper()) != 1: + if 'Ion' in CURRENT_SPECIES: + interactionID = 20 + elif 'Ion' not in CURRENT_SPECIES: + interactionID = 2 + elif 'electron' in CURRENT_SPECIES: + interactionID = 4 + return SPECIES_DICT_FLAG, HeatOfFormation_K, MassIC_kg, current_species_charge, interactionID + +# creating attrubutes for current species with data from dict +def create_attributes(DATASET, CURRENT_SPECIES, ATCT_URL, MassIC_kg, HeatOfFormation_K, current_species_charge, interactionID,old_attrs=[]): + # get input from user -> maybe also database read in? where? + if 'Tref' in list(old_attrs): + DATASET.attrs['Tref'] = old_attrs['Tref'] + else: + DATASET.attrs['Tref'] = float(input(bold('\nPlease enter Tref in [K] of current species %s\n-->') % CURRENT_SPECIES)) + + if 'dref' in list(old_attrs): + DATASET.attrs['dref'] = old_attrs['dref'] + else: + DATASET.attrs['dref'] = float(input(bold('\nPlease enter dref in [m] of current species %s\n-->') % CURRENT_SPECIES)) + + if 'omega' in list(old_attrs): + DATASET.attrs['omega'] = old_attrs['omega'] + else: + DATASET.attrs['omega'] = float(input(bold('\nPlease enter omega in [] of current species %s\n-->') % CURRENT_SPECIES)) + + # set attributes + DATASET.attrs['MassIC'] = MassIC_kg + DATASET.attrs['HeatOfFormation_K'] = HeatOfFormation_K + DATASET.attrs['ChargeIC'] = current_species_charge + DATASET.attrs['InteractionID'] = interactionID + + array_of_strings = np.empty((6,2), dtype='S500') + array_of_strings[0,0] = 'Electronic Energy Levels' + array_of_strings[1,0] = 'HeatOfFormation_K' + array_of_strings[2,0] = 'MassIC' + array_of_strings[3,0] = 'Tref' + array_of_strings[4,0] = 'dref' + array_of_strings[5,0] = 'omega' + + array_of_strings[0,1] = 'Kramida, A., Ralchenko, Yu., Reader, J., and NIST ASD Team (2020). NIST Atomic Spectra Database (ver. 5.8), [Online]. Available: https://physics.nist.gov/asd. National Institute of Standards and Technology, Gaithersburg, MD. DOI: https://doi.org/10.18434/T4W30F. Retrieved on ' + date.today().strftime("%B %d, %Y") + '.' + array_of_strings[1,1] = 'B. Ruscic and D. H. Bross, Active Thermochemical Tables (ATcT) values based on ver. 1.130 of the Thermochemical Network. Argonne National Laboratory, Lemont, Illinois 2023; available at ATcT.anl.gov. DOI: https://doi.org/10.17038/CSE/1997229. Retrieved on ' + date.today().strftime("%B %d, %Y") + ' from ' + ATCT_URL + '.' + array_of_strings[2,1] = 'B. Ruscic and D. H. Bross, Active Thermochemical Tables (ATcT) values based on ver. 1.130 of the Thermochemical Network. Argonne National Laboratory, Lemont, Illinois 2023; available at ATcT.anl.gov. DOI: https://doi.org/10.17038/CSE/1997229. Retrieved on ' + date.today().strftime("%B %d, %Y") + ' from ' + ATCT_URL + '.' + array_of_strings[3,1] = 'User input at ' + date.today().strftime("%B %d, %Y") + array_of_strings[4,1] = 'User input at ' + date.today().strftime("%B %d, %Y") + array_of_strings[5,1] = 'User input at ' + date.today().strftime("%B %d, %Y") + + DATASET.attrs.create('* Reference', array_of_strings) + DATASET.attrs['* Created'] = date.today().strftime("%B %d, %Y") + +# checking attribute in existing database +def check_single_attr(HDF_UNIFIED_DATA, CURRENT_SPECIES, WANTED_VALUE, VALUE_NAME, ATCT_URL): + try: + if np.isclose(HDF_UNIFIED_DATA["Species"][CURRENT_SPECIES].attrs[VALUE_NAME], WANTED_VALUE, rtol=1e-03, atol=1e-08): + print('%s for ' % (VALUE_NAME) +green(CURRENT_SPECIES)+' is equal so will be kept') + else: + print(underlinE(VALUE_NAME)+' of species '+green(CURRENT_SPECIES)+'\n'+yellow('unified species database')+f': {HDF_UNIFIED_DATA["Species"][CURRENT_SPECIES].attrs[VALUE_NAME]}'+"\n"+blue(ATCT_URL) +f': {WANTED_VALUE}\n') + return -1 + except KeyError: + if VALUE_NAME in ['HeatOfFormation_K','MassIC']: + print("It seems like %s is not set for %s so it will be set as %s with data from "% (VALUE_NAME,CURRENT_SPECIES,WANTED_VALUE)+blue(ATCT_URL)) + elif VALUE_NAME in ['ChargeIC','InteractionID']: + print("It seems like %s is not set for %s so it will be set as %s"% (VALUE_NAME,CURRENT_SPECIES,WANTED_VALUE)) + return VALUE_NAME + + +# checking all attributes in existing database +def check_attributes(HDF_UNIFIED_DATA, SPECIES_DICT_FLAG, SPECIES_DICT, CURRENT_SPECIES, ATCT_URL): + try: + SPECIES_DICT_FLAG, HeatOfFormation_K, MassIC_kg, current_species_charge, interactionID = get_attr_values(SPECIES_DICT_FLAG, SPECIES_DICT, CURRENT_SPECIES, ATCT_URL) + except: + return SPECIES_DICT_FLAG, 1 + + return_list = [] + + if 'HeatOfFormation_K' not in HDF_UNIFIED_DATA['Species'][CURRENT_SPECIES].attrs: # sanity check: calculate heat of formation for ions and compare with data from ATcT + Ion_Number = int(re.search(r'\d+$', CURRENT_SPECIES).group()) + ground_state = re.sub(r'Ion\d+','',CURRENT_SPECIES) + HeatOfFormation_Sum = HDF_UNIFIED_DATA['Species'][ground_state].attrs['HeatOfFormation_K']+HDF_UNIFIED_DATA['Species'][ground_state][:][-1,1] + for i in range(1, Ion_Number): + prev_state = ground_state + 'Ion' + str(i) + HeatOfFormation_Sum = HeatOfFormation_Sum + HDF_UNIFIED_DATA['Species'][prev_state][:][-1,1] + + if not np.isclose(HeatOfFormation_K, HeatOfFormation_Sum, rtol=1e-03, atol=0.0): # HeatOfFormation_K being value from ATcT and HeatOfFormation_Sum cal value with relative tolerance of 1e-05 + print(red('Caution:')+' Please check the heat of formation of the current species: '+green(CURRENT_SPECIES)+', since it did not matcht with the value from '+blue(ATCT_URL)+'!\nIt is calculated in the PICLas source code like this: HeatOfFormation(CurrentSpecies) = HeatOfFormation(previous state) + Ionization Energy(last entry in electronic level dataset of previous state)') + print(yellow("Calculated HeatOfFormation: ")+str(HeatOfFormation_Sum)+"\n"+blue("HeatOfFormation form ATcT: ")+str(HeatOfFormation_K)) + + else: # dont check heat of formation of ions because it is not stored + return_list.append(check_single_attr(HDF_UNIFIED_DATA, CURRENT_SPECIES, HeatOfFormation_K, 'HeatOfFormation_K', ATCT_URL)) + + return_list.append(check_single_attr(HDF_UNIFIED_DATA, CURRENT_SPECIES, MassIC_kg, 'MassIC', ATCT_URL)) + return_list.append(check_single_attr(HDF_UNIFIED_DATA, CURRENT_SPECIES, current_species_charge, 'ChargeIC', ATCT_URL)) + return_list.append(check_single_attr(HDF_UNIFIED_DATA, CURRENT_SPECIES, interactionID, 'InteractionID', ATCT_URL)) + if -1 in return_list: + user_input = get_valid_input(bold('\nPlease enter') + "\n " + purple('1') + " to keep attributes from " + yellow('unified species database') + " or \n " + purple('2') + " to save attributes from " + blue(ATCT_URL) + " or \n " + purple('3') + " to exit program here\n-->", lambda x: x == '1' or x == '2' or x == '3') + if user_input == '1': + print("Keeping attributes for species ",green(CURRENT_SPECIES), "\n") + return SPECIES_DICT_FLAG, 1 + elif user_input == '2': + old_attrs = HDF_UNIFIED_DATA["Species"][CURRENT_SPECIES].attrs + data_array = HDF_UNIFIED_DATA["Species"][CURRENT_SPECIES][:] + del HDF_UNIFIED_DATA["Species"][CURRENT_SPECIES] + dataset = HDF_UNIFIED_DATA['Species'].create_dataset(CURRENT_SPECIES, data=data_array) + try: + SPECIES_DICT_FLAG, HeatOfFormation_K, MassIC_kg, current_species_charge, interactionID = get_attr_values(SPECIES_DICT_FLAG, SPECIES_DICT, CURRENT_SPECIES, ATCT_URL) + except TypeError: + return SPECIES_DICT_FLAG, -1 + create_attributes(dataset, CURRENT_SPECIES, ATCT_URL, MassIC_kg, HeatOfFormation_K, current_species_charge, interactionID,old_attrs) + elif user_input == '3': + own_exit() + + elif any(item != -1 and item is not None for item in return_list): + value_dict={ + 'HeatOfFormation_K':HeatOfFormation_K, + 'MassIC':MassIC_kg, + 'ChargeIC':current_species_charge, + 'InteractionID':interactionID, + } + + for VALUE_NAME in return_list: + if VALUE_NAME != None: + HDF_UNIFIED_DATA['Species'][CURRENT_SPECIES].attrs.create(VALUE_NAME, value_dict.get(VALUE_NAME) ,dtype='float') + + print("\n") + return SPECIES_DICT_FLAG, 1 + +def check_ATcT(CURRENT_SPECIES, HDF_UNIFIED_DATA, SPECIES_DICT_FLAG, SPECIES_DICT, ATCT_URL): + # check if species is already in Species database + if CURRENT_SPECIES in HDF_UNIFIED_DATA['Species'].keys(): + SPECIES_DICT_FLAG, break_flag = check_attributes(HDF_UNIFIED_DATA, SPECIES_DICT_FLAG, SPECIES_DICT, CURRENT_SPECIES, ATCT_URL) + if break_flag == -1: + return SPECIES_DICT_FLAG,-1 + return SPECIES_DICT_FLAG, 1 + else: + print("Species "+green(CURRENT_SPECIES)+" not found in database. Please create new species.") \ No newline at end of file diff --git a/tools/species_database/edit_surfchem.py b/tools/species_database/edit_surfchem.py new file mode 100644 index 000000000..e69de29bb diff --git a/tools/species_database/general_functions.py b/tools/species_database/general_functions.py new file mode 100644 index 000000000..beccb4d6b --- /dev/null +++ b/tools/species_database/general_functions.py @@ -0,0 +1,82 @@ +################################################################################################### +# General functions +################################################################################################### +class myColors : + """ Add different colors and styles (ANSI code) to strings """ + # After coloring, change back to \033 + endc = '\033[0m' + + # Regular Colors + black = '\033[30m' + red = '\033[31m' + green = '\033[32m' + yellow = '\033[33m' + blue = '\033[34m' + purple = '\033[35m' + cyan = '\033[36m' + white = '\033[37m' + + # Text Style + bold = '\033[1m' + underlinE = '\033[4m' + +def bold(text) : + return myColors.bold+text+myColors.endc +def underlinE(text) : + return myColors.underlinE+text+myColors.endc +def red(text) : + return myColors.red+text+myColors.endc +def green(text) : + return myColors.green+text+myColors.endc +def blue(text) : + return myColors.blue+text+myColors.endc +def yellow(text) : + return myColors.yellow+text+myColors.endc +def purple(text) : + return myColors.purple+text+myColors.endc +def cyan(text) : + return myColors.cyan+text+myColors.endc + +# input function +def get_valid_input(prompt, validator_func): + try: + while True: + user_input = input(prompt) + if validator_func(user_input): + return user_input + else: + print(bold(red("Invalid input!"))) + except KeyboardInterrupt: + print("\nKeyboardInterrupt: Program terminated by user.") + +# create prompt for input functions +def create_prompt(*args): + prompt_for_user = bold('\nPlease enter') + "\n " + for i,arg in enumerate(args): + prompt_for_user = prompt_for_user + purple(str(i+1)) + " " + arg + " " +" or \n " + prompt_for_user = prompt_for_user + purple(str(i+2)) + " to exit program\n-->" + return prompt_for_user + +def own_exit(): + print(bold(red("Exiting"))) + exit(1) + +# Function to determine the Roman number from an integer +def int_to_Roman(num): + val = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1) + syb = ('M', 'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I') + roman_num = "" + for i in range(len(val)): + count = int(num / val[i]) + roman_num += syb[i] * count + num -= val[i] * count + return roman_num + +def remove_from_list(List, *args_to_remove): + NewList = [] + for element in List: + if element == 'electron': # special case for reaction handling + NewList.append('el') + elif element not in args_to_remove: + NewList.append(element) + return NewList \ No newline at end of file diff --git a/tools/species_database/maintain_database.py b/tools/species_database/maintain_database.py new file mode 100644 index 000000000..cd9d301bb --- /dev/null +++ b/tools/species_database/maintain_database.py @@ -0,0 +1,153 @@ +import h5py +import re +import argparse +from general_functions import * +from edit_species import * +from edit_crosssections import * +from edit_reactions import * +from edit_surfchem import * + +################################################################################################### +# - Program starts here +################################################################################################### +# arguments for ionization and species setting +parser = argparse.ArgumentParser(description='Create electronic database') +parser.add_argument('--species', nargs='+', metavar='', help='Select species to add into Species Database (also possible directly in script, line 160). Enter species like H Fe C') +parser.add_argument('--setting', type=str, metavar='', help='Select which setting should be run: "a" for adding new dataset to Species database or "c" for checking existing database for updates') +parser.add_argument('--reactions', nargs='+', metavar='', help='Select reactions to add into Database (also possible directly in script). Enter reactions like C+N_CNIon1+electron C2+M_C+M+C') +args = parser.parse_args() + +# Read in Species Database +relative_path = '../../SpeciesDatabase.h5' +hdf_unified_data = h5py.File(relative_path, 'a') +# select ATcT Version (script build for 1.130) +version = '1.130' +ATcT_URL = f'https://atct.anl.gov/Thermochemical%20Data/version%20{version}' +# Base URL of the query +URL_base = 'https://physics.nist.gov/cgi-bin/ASD/energy1.pl' +# flag for reading in data from ATcT only once +species_dict = [] +species_dict_flag = False + +################################################################################################### +# variables to set in code if not by user input or arguments, leave empty if not used +################################################################################################### +# set reaction list in code like ['C+N_CNIon1+electron','C2+M_C+M+C'] +code_reactions = [] +code_species = [] + +# Prompt user to choose which dataset to keep +print("\n\nThis script is meant to edit and maintain the " +yellow("unified species database") + " of PICLas") +user_input = get_valid_input(create_prompt('to maintain/edit species', 'to maintain/edit chemical reactions', 'to maintain/edit cross section data', 'to maintain/edit surface chemistry'), lambda x: x == '1' or x == '2' or x =='3' or x =='4' or x =='5') + + +################################################################################################### +# SPECIES +################################################################################################### +if user_input == "1": + user_input = get_valid_input(create_prompt('check existing species', 'add new species'), lambda x: x == '1' or x == '2' or x =='3') + if user_input == "1": + print("Checking electronic levels "+red("currently only for atoms")+ " from "+blue(URL_base)+" and from custom csv file for molecules if set\nand attributes for all species from "+ blue(ATcT_URL)) + existing_species_list = list(hdf_unified_data["Species"].keys()) + species_list = [] + # check if species to check was provided + if args.species == None: + if len(code_species) == 0: + # run through all atoms species from species database + print('Checking all existing atom species in database and species with provided custom csv electronic levels') + for i, species in enumerate(existing_species_list): + if sum(1 for c in species.replace('Ion','') if c.isupper()) == 1: + if bool(re.search(r'[A-Za-z]*\d', re.sub(r'Ion\d+','',species))): + continue + species_list.append(species) + + # Directory path + current_directory = os.getcwd() + for root, dirs, files in os.walk(current_directory): + for filename in files: + if 'custom_electronic_levels' in filename and 'SPECIES' not in filename: # exclude template + species_list.append(filename.split('_')[-1].split('.')[0]) + + else: + species_list = code_species + + else: + species_list = args.species + existing_species_list = args.species + + print('Checking species: ' + ', '.join(species_list)) + + # check electronic levels for atoms and custom data + for current_species in species_list: + if check_datasets(current_species, hdf_unified_data, relative_path) == -1: + break + + # check attributes for all species in database + for current_species in existing_species_list: + species_dict_flag, break_flag = check_ATcT(current_species, hdf_unified_data, species_dict_flag, species_dict, ATcT_URL) + if break_flag == -1: + break + + elif user_input == "2": + # check if species list was provided as argument, if not use species list provided in python + if args.species == None: + user_input_species = input(bold('\nPlease enter species list as comma separated string') + ', e.g. Fe,Ar,H,CIon1,CIon2,C\n') + species_list = user_input_species.split(',') + else: + species_list = args.species + + for current_species in species_list: + # still fails if species not found in species dict -> edit_species.py line 370 + add_dataset(hdf_unified_data,current_species,relative_path,ATcT_URL,species_dict,species_dict_flag) + + elif user_input == "3": + own_exit() + +################################################################################################### +# REACTIONS +################################################################################################### + +elif user_input == "2": + user_input = get_valid_input(create_prompt('add new reactions', 'delete reactions'), lambda x: x == '1' or x == '2' or x =='3') + if user_input == '1': + function = create_reaction + elif user_input == '2': + function = delete_reaction + elif user_input == '3': + own_exit() + + # operation + if args.reactions == None: + if len(code_reactions) == 0: + user_input_reaction = input(bold('\nPlease enter reactions list as comma separated string') + ', e.g. C+N_CNIon1+electron,C2+M_C+M+C\n') + reaction_list = user_input_reaction.split(',') + else: + reaction_list = code_reactions + else: + reaction_list = args.reactions + + for reaction in reaction_list: + function(hdf_unified_data, reaction) + +################################################################################################### +# CROSS SECTION DATA +################################################################################################### + +elif user_input == "3": + print("Not implemented yet") + +################################################################################################### +# SURFACE CHEMISTRY +################################################################################################### + +elif user_input == "4": + print("Not implemented yet") + +################################################################################################### +# EXIT +################################################################################################### +elif user_input == "5": + own_exit() + +print('Done.') +hdf_unified_data.close() \ No newline at end of file From 8f87eb978ed7900784b808f064693e6435b0d9b3 Mon Sep 17 00:00:00 2001 From: Asim Date: Tue, 16 Apr 2024 11:53:53 +0200 Subject: [PATCH 216/222] Add entry for subcycling in userguide --- .../features-and-models/particle-tracking.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/documentation/userguide/features-and-models/particle-tracking.md b/docs/documentation/userguide/features-and-models/particle-tracking.md index dbe6576bd..5d4a11954 100644 --- a/docs/documentation/userguide/features-and-models/particle-tracking.md +++ b/docs/documentation/userguide/features-and-models/particle-tracking.md @@ -125,4 +125,14 @@ boundary surfaces of these regions can only be defined perpendicular to the rota Part-RefFrameRegion2-MAX = 110 This allows to model systems of rotating and stationary geometries (e.g. pumps with stator and rotor blades) within a single simulation. For rotationally symmetric cases, the simulation domain can be reduced using the rotationally perodic boundary condition (as shown in Section {ref}`sec:particle-boundary-conditions-rotBC`). Examples are provided in the regression test directory, e.g. -`regressioncheck/CHE_DSMC/Rotational_Reference_Frame` and `regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Regions`. \ No newline at end of file +`regressioncheck/CHE_DSMC/Rotational_Reference_Frame` and `regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Regions`. + +### Time step subcycling for Rotating Frame of Reference + +In PICLas, an explicit time step scheme is used, with both collision and motion operators altering particle distribution function within each iteration. This leads to changes in particle positions, momentum, and energy due to motion and collisions. Operators can be sequentially executed through operator splitting, adjusting particle positions based on velocities first, followed by collisions within a time step. It's crucial for the time step to resolve collision frequency adequately. External forces (i.e. the centripetal force and the Coriolis in the case of a rotating reference frame) may require additional consideration for time step determination, especially when particle acceleration needs to be modeled. To ensure that the existing time step requirement in DSMC, dictated by collisions, remains unaffected, a subcycling algorithm only for the particle motion can be used. This algorithm divides the motion and thus the modeling of external forces into smaller subtimesteps. Consequently, the time step can be chosen based on collision frequency as usual, while the motion can be more finely resolved through subcycling. The usage of the subcycling algorithm is enabled by + + Part-UseRotationalReferenceSubCycling = T + +Additionally, the number of the subcycling steps can be defined by + + Part-NumberSubCyclingSteps = 10 ! Default = 10 steps \ No newline at end of file From d620c0acc927964706bd15739498df8930070770 Mon Sep 17 00:00:00 2001 From: Asim Date: Tue, 16 Apr 2024 12:00:20 +0200 Subject: [PATCH 217/222] Part-UseRotationalReferenceSubCycling -> Part-RotRefFrame-UseSubCycling --- .../userguide/features-and-models/particle-tracking.md | 2 +- .../Rotational_Reference_Frame_Subcycling/parameter.ini | 2 +- src/particles/particle_init.f90 | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/documentation/userguide/features-and-models/particle-tracking.md b/docs/documentation/userguide/features-and-models/particle-tracking.md index 5d4a11954..1b975d648 100644 --- a/docs/documentation/userguide/features-and-models/particle-tracking.md +++ b/docs/documentation/userguide/features-and-models/particle-tracking.md @@ -131,7 +131,7 @@ This allows to model systems of rotating and stationary geometries (e.g. pumps w In PICLas, an explicit time step scheme is used, with both collision and motion operators altering particle distribution function within each iteration. This leads to changes in particle positions, momentum, and energy due to motion and collisions. Operators can be sequentially executed through operator splitting, adjusting particle positions based on velocities first, followed by collisions within a time step. It's crucial for the time step to resolve collision frequency adequately. External forces (i.e. the centripetal force and the Coriolis in the case of a rotating reference frame) may require additional consideration for time step determination, especially when particle acceleration needs to be modeled. To ensure that the existing time step requirement in DSMC, dictated by collisions, remains unaffected, a subcycling algorithm only for the particle motion can be used. This algorithm divides the motion and thus the modeling of external forces into smaller subtimesteps. Consequently, the time step can be chosen based on collision frequency as usual, while the motion can be more finely resolved through subcycling. The usage of the subcycling algorithm is enabled by - Part-UseRotationalReferenceSubCycling = T + Part-RotRefFrame-UseSubCycling = T Additionally, the number of the subcycling steps can be defined by diff --git a/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/parameter.ini b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/parameter.ini index 5f7f4e378..1aede14a6 100644 --- a/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/parameter.ini +++ b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/parameter.ini @@ -29,7 +29,7 @@ tend = 4E-2 ! End time Analyze_dt = 1.0 ! Timestep of analyze outputs CFLscale = 0.5 -Part-UseRotationalReferenceSubCycling = T +Part-RotRefFrame-UseSubCycling = T Part-NumberSubCyclingSteps = 200 ! =============================================================================== ! ! BOUNDARIES diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index f1ab3094f..59a22ebab 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -213,7 +213,7 @@ SUBROUTINE DefineParametersParticles() ! === Rotational frame of reference CALL prms%CreateLogicalOption( 'Part-UseRotationalReferenceFrame', 'Activate rotational frame of reference', '.FALSE.') -CALL prms%CreateLogicalOption( 'Part-UseRotationalReferenceSubCycling', 'Activate sub cycling in rot ref frame', '.FALSE.') +CALL prms%CreateLogicalOption( 'Part-RotRefFrame-UseSubCycling', 'Activate sub cycling in rot ref frame', '.FALSE.') CALL prms%CreateIntOption( 'Part-NumberSubCyclingSteps','Number of subcyling steps)','10') CALL prms%CreateIntOption( 'Part-RotRefFrame-Axis','Axis of rotational frame of reference (x=1, y=2, z=3)') CALL prms%CreateRealOption( 'Part-RotRefFrame-Frequency','Frequency of rotational frame of reference [1/s], sign according '//& @@ -1730,7 +1730,7 @@ SUBROUTINE InitializeVariablesRotationalRefFrame() !=================================================================================================================================== UseRotRefFrame = GETLOGICAL('Part-UseRotationalReferenceFrame') -UseRotSubCycling = GETLOGICAL('Part-UseRotationalReferenceSubCycling') +UseRotSubCycling = GETLOGICAL('Part-Part-RotRefFrame-UseSubCycling') nSubCyclingSteps = GETINT('Part-NumberSubCyclingSteps') IF(UseRotRefFrame) THEN From c37994d507f13ffd085b341c047c28b95b371e41 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Tue, 16 Apr 2024 17:13:25 +0200 Subject: [PATCH 218/222] Fix read-in variable name, minor corrections in documentation --- REGGIE.md | 72 +++++++++---------- .../features-and-models/particle-tracking.md | 10 +-- .../parameter.ini | 2 +- .../readme.md | 6 +- .../analyze/particle_analyze_code.f90 | 6 +- src/particles/particle_init.f90 | 20 +++--- src/particles/particle_rhs.f90 | 23 +++--- src/particles/particle_tools.f90 | 6 +- src/particles/particle_vars.f90 | 24 +++---- tools/Setup_ModuleEnv/InstallAOTUS.sh | 0 tools/Setup_ModuleEnv/InstallCMake.sh | 0 tools/Setup_ModuleEnv/InstallGCC.sh | 0 tools/Setup_ModuleEnv/InstallHDF5.sh | 0 tools/Setup_ModuleEnv/InstallHOPR.sh | 0 .../Setup_ModuleEnv/InstallMPIallCOMPILERS.sh | 0 tools/Setup_ModuleEnv/InstallModules.sh | 0 tools/Setup_ModuleEnv/InstallPETSc.sh | 0 .../InstallPackagesParaView.sh | 0 .../Setup_ModuleEnv/InstallPackagesReggie.sh | 0 .../Setup_ModuleEnv/InstallPackagesServer.sh | 0 .../InstallPackagesUbuntu16.sh | 0 .../InstallPackagesUbuntu20.sh | 0 .../InstallPackagesUbuntu21.sh | 0 .../InstallPackagesUbuntu22.sh | 0 tools/Setup_ModuleEnv/InstallParaview.sh | 0 25 files changed, 80 insertions(+), 89 deletions(-) mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallAOTUS.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallCMake.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallGCC.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallHDF5.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallHOPR.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallMPIallCOMPILERS.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallModules.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallPETSc.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallPackagesParaView.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallPackagesReggie.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallPackagesServer.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallPackagesUbuntu16.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallPackagesUbuntu20.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallPackagesUbuntu21.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallPackagesUbuntu22.sh mode change 100644 => 100755 tools/Setup_ModuleEnv/InstallParaview.sh diff --git a/REGGIE.md b/REGGIE.md index cc6693717..9d6f54280 100644 --- a/REGGIE.md +++ b/REGGIE.md @@ -58,7 +58,7 @@ Small test cases to check features with DSMC timedisc: [Link to build](regressio | | Rotational_Reference_Frame_Regions | | Rotational reference frame with several regions, switching between stationary and rotating frame | nProcs=1,2,3,4 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Regions/readme.md) | | | Rotational_Reference_Frame_RotBC | | Rotational reference frame in combination with the rotationally periodic BC | nProcs=1,2,3,4 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_RotBC/readme.md) | | | Rotational_Reference_Frame_Temperature | | Rotational reference frame: Many particles, multiple revolutions | nProcs=1,2,4 | Temperature | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Temperature/readme.md) | -| | Rotational_Reference_Frame_Subcycling | | Time sub cycling method within the rotational reference frame | nProcs=1 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/readme.md | +| | Rotational_Reference_Frame_Subcycling | | Time subcycling method within the rotational reference frame | nProcs=1 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/readme.md | | | SurfaceOutput | | Test of CalcSurfaceImpact and CalcBoundaryParticleOutput through defined electron flux | nProcs=1,4 | PartAnalyze, SurfaceAnalyze, DSMCSurfState | [Link](regressioncheck/CHE_DSMC/SurfaceOutput/readme.md) | | | DSMC_QualityFactors | | Quality factors: mean/max collision probability, MCS over MFP, mean free path, ResolvedCellPercentage | nProcs=1 | PartAnalyze | [Link](regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md) | | | DSMC_QualityFactors_MPI | | Quality factors: ResolvedTimestep, max collision probability, MCS over MFP, ResolvedCellPercentage | nProcs=4 | PartAnalyze | [Link](regressioncheck/CHE_DSMC/DSMC_QualityFactors_MPI/readme.md) | @@ -78,7 +78,7 @@ Small test cases to check features with DSMC timedisc: [Link to build](regressio #### CHE_BGK/FPFlow -Both methods share the same regression tests in the different folders (CHE_BGK: [BGK build](regressioncheck/CHE_BGK/builds.ini), CHE_FPFlow: [FPFlow build](regressioncheck/CHE_FPFlow/builds.ini) +Both methods share the same regression tests in the different folders, CHE_BGK: [BGK build](regressioncheck/CHE_BGK/builds.ini), CHE_FPFlow: [FPFlow build](regressioncheck/CHE_FPFlow/builds.ini) | **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | | :-----: | :-----------------------: | :--------------: | :---------------------------------------------------------------------------------------------------------------------: | :-----------: | :------------------------: | :-----------------------------------------------------------------: | @@ -452,38 +452,38 @@ Test all features of radiation timedisc (cell-local emission using the radiation Overview of the test cases performed every week. -| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | -| :-----: | :-----------------------------------------------------: | :-------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------: | :-------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------: | -| 1 | plasma_wave | [PIC-Maxwell](regressioncheck/WEK_PIC_maxwell/builds.ini) | Maxwell-PIC,SF1D, FastPeriodic | nProcs=6, IMEX for ImplicitO4 | W_el LineIntegration (FieldAnalyze.csv) | [Link](regressioncheck/WEK_PIC_maxwell/plasma_wave/readme.md) | -| ** | 3D_periodic_shape_function | ** | Maxwell-PIC,shape function deposition over periodic sides 3D | nProcs= 1,2,6,10,20 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_shape_function/readme.md) | -| ** | 3D_periodic_CVWM | ** | Maxwell-PIC,CVWM over periodic sides 3D with 1000 elements | nProcs= 1,2,6,10,15,20,30 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM/readme.md) | -| ** | 3D_periodic_CVWM_split2hex | ** | Maxwell-PIC,CVWM over periodic sides 3D and split2hex grid with 768 hex elements | nProcs= 1,2,6,10,15,20,30 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM_split2hex/readme.md) | -| 2 | HEMPT-90deg-symmetry | [PIC-HDG](regressioncheck/WEK_PIC_poisson/builds.ini) | create mesh (hopr) and external magnetic field (superB) and use both in simulation | nProcs=1,10,20 | | [Link](regressioncheck/WEK_PIC_poisson/HEMPT-90deg-symmetry/readme.md) | -| 3 | CHEM_EQUI_diss_CH4 | [Reservoir](regressioncheck/WEK_Reservoir/builds.ini) | Relaxation into equilibrium with dissociation and recombination of CH4 | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4/readme.md) | -| ** | CHEM_EQUI_exch_CH3-H | ** | Relaxation into equilibrium with exchange/radical reaction of CH3+H <-> CH2+H2 | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_exch_CH3-H/readme.md) | -| ** | CHEM_EQUI_ionization_H | ** | Relaxation into equilibrium with ionization and recombination of H | nProcs=1 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_ionization_H/readme.md) | -| ** | CHEM_EQUI_diss_CH4_2DAxi_RadWeight | ** | Analogous to CHEM_EQUI_diss_CH4 with 2D axisymmetric mesh with radial weighting | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4_2DAxi_RadWeight/readme.md) | -| ** | CHEM_EQUI_Titan_Chemistry | ** | Reservoir simulation with Titan's atmosphere (18 species, 28 reactions) | nProcs=6 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry/readme.md) | -| ** | CHEM_EQUI_Titan_Chemistry_Database | ** | Reservoir simulation with Titan's atmosphere (18 species, 28 reactions) using species/reaction data from the species database | nProcs=6 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/readme.md) | -| ** | MCC_MultiSpec_XSec | ** | Multi-species reservoir: Collision rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/MCC_MultiSpec_XSec/readme.md) | -| ** | MCC_MultiSpec_XSec_TCE_QK_Chem | ** | Multi-species reservoir: QK ionization and TCE dissociation | nProcs=2 | | [Link](regressioncheck/WEK_Reservoir/MCC_MultiSpec_XSec_Chem/readme.md) | -| ** | BGG_MultiSpec_XSec_Elec | ** | Background gas reservoir with VHS: Electronic excitation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/BGG_MultiSpec_XSec_Elec/readme.md) | -| ** | MCC_N2_XSec_Elec | ** | Regular reservoir with MCC/VHS: Electronic excitation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/MCC_N2_XSec_Elec/readme.md) | -| ** | 1D_Sod_Shocktube | [DSMC](regressioncheck/WEK_DSMC/builds.ini) | 1D test case shock tube | nProcs=6 | DSMCState | [Link](regressioncheck/WEK_Reservoir/1D_Sod_Shocktube/readme.md) | -| 4 | 2DAxi_ChannelFlow_ConstPressure_TruncAverage | ** | 2D axisymmetric: Pressure gradient driven pipe flow with adaptive surface flux, using a truncated running average | nProcs=6 | PartAnalyze: Average pressure and mass flow rate at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/readme.md) | -| 4 | ChannelFlow_AdaptiveBoundary_ConstMassflow | ** | Constant massflow driven channel flow with adaptive surface flux | nProcs=6 | PartAnalyze: Average pressure and mass flow rate at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/readme.md) | -| 4 | ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage | ** | Pressure gradient driven channel flow with adaptive surface flux, using a fixed average for the sampling | nProcs=6 | PartAnalyze: Average pressure at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/readme.md) | -| 4 | ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation | ** | Pressure gradient driven channel flow with adaptive surface flux, using a relaxation factor for the sampling | nProcs=6 | PartAnalyze: Average pressure at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/readme.md) | -| 4 | ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage | ** | Pressure gradient driven channel flow with adaptive surface flux, using a truncated running average for the sampling | nProcs=6 | PartAnalyze: Average pressure at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/readme.md) | +| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** | +| :-----: | :-----------------------------------------------------: | :-------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------: | :--------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------: | +| 1 | plasma_wave | [PIC-Maxwell](regressioncheck/WEK_PIC_maxwell/builds.ini) | Maxwell-PIC,SF1D, FastPeriodic | nProcs=6, IMEX for ImplicitO4 | W_el LineIntegration (FieldAnalyze.csv) | [Link](regressioncheck/WEK_PIC_maxwell/plasma_wave/readme.md) | +| ** | 3D_periodic_shape_function | ** | Maxwell-PIC,shape function deposition over periodic sides 3D | nProcs= 1,2,6,10,20 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_shape_function/readme.md) | +| ** | 3D_periodic_CVWM | ** | Maxwell-PIC,CVWM over periodic sides 3D with 1000 elements | nProcs= 1,2,6,10,15,20,30 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM/readme.md) | +| ** | 3D_periodic_CVWM_split2hex | ** | Maxwell-PIC,CVWM over periodic sides 3D and split2hex grid with 768 hex elements | nProcs= 1,2,6,10,15,20,30 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM_split2hex/readme.md) | +| 2 | HEMPT-90deg-symmetry | [PIC-HDG](regressioncheck/WEK_PIC_poisson/builds.ini) | create mesh (hopr) and external magnetic field (superB) and use both in simulation | nProcs=1,10,20 | | [Link](regressioncheck/WEK_PIC_poisson/HEMPT-90deg-symmetry/readme.md) | +| 3 | CHEM_EQUI_diss_CH4 | [Reservoir](regressioncheck/WEK_Reservoir/builds.ini) | Relaxation into equilibrium with dissociation and recombination of CH4 | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4/readme.md) | +| ** | CHEM_EQUI_exch_CH3-H | ** | Relaxation into equilibrium with exchange/radical reaction of CH3+H <-> CH2+H2 | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_exch_CH3-H/readme.md) | +| ** | CHEM_EQUI_ionization_H | ** | Relaxation into equilibrium with ionization and recombination of H | nProcs=1 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_ionization_H/readme.md) | +| ** | CHEM_EQUI_diss_CH4_2DAxi_RadWeight | ** | Analogous to CHEM_EQUI_diss_CH4 with 2D axisymmetric mesh with radial weighting | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4_2DAxi_RadWeight/readme.md) | +| ** | CHEM_EQUI_Titan_Chemistry | ** | Reservoir simulation with Titan's atmosphere (18 species, 28 reactions) | nProcs=6 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry/readme.md) | +| ** | CHEM_EQUI_Titan_Chemistry_Database | ** | Reservoir simulation with Titan's atmosphere (18 species, 28 reactions) using species/reaction data from the species database | nProcs=6 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry_Database/readme.md) | +| ** | MCC_MultiSpec_XSec | ** | Multi-species reservoir: Collision rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/MCC_MultiSpec_XSec/readme.md) | +| ** | MCC_MultiSpec_XSec_TCE_QK_Chem | ** | Multi-species reservoir: QK ionization and TCE dissociation | nProcs=2 | | [Link](regressioncheck/WEK_Reservoir/MCC_MultiSpec_XSec_Chem/readme.md) | +| ** | BGG_MultiSpec_XSec_Elec | ** | Background gas reservoir with VHS: Electronic excitation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/BGG_MultiSpec_XSec_Elec/readme.md) | +| ** | MCC_N2_XSec_Elec | ** | Regular reservoir with MCC/VHS: Electronic excitation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/MCC_N2_XSec_Elec/readme.md) | +| ** | 1D_Sod_Shocktube | [DSMC](regressioncheck/WEK_DSMC/builds.ini) | 1D test case shock tube | nProcs=6 | DSMCState | [Link](regressioncheck/WEK_Reservoir/1D_Sod_Shocktube/readme.md) | +| 4 | 2DAxi_ChannelFlow_ConstPressure_TruncAverage | ** | 2D axisymmetric: Pressure gradient driven pipe flow with adaptive surface flux, using a truncated running average | nProcs=6 | PartAnalyze: Average pressure and mass flow rate at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/readme.md) | +| 4 | ChannelFlow_AdaptiveBoundary_ConstMassflow | ** | Constant massflow driven channel flow with adaptive surface flux | nProcs=6 | PartAnalyze: Average pressure and mass flow rate at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/readme.md) | +| 4 | ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage | ** | Pressure gradient driven channel flow with adaptive surface flux, using a fixed average for the sampling | nProcs=6 | PartAnalyze: Average pressure at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/readme.md) | +| 4 | ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation | ** | Pressure gradient driven channel flow with adaptive surface flux, using a relaxation factor for the sampling | nProcs=6 | PartAnalyze: Average pressure at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/readme.md) | +| 4 | ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage | ** | Pressure gradient driven channel flow with adaptive surface flux, using a truncated running average for the sampling | nProcs=6 | PartAnalyze: Average pressure at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/readme.md) | | | ChannelFlow_SurfChem_AdsorpDesorp_CO_O2 | ** | Channel flow with surface chemistry, testing adsorption/desorption of CO and O2 | nProcs=6 | Coverage (DSMCSurfChemStatePartAnalyze), Number density, temperature (PartAnalyze) | [Link](regressioncheck/WEK_DSMC/ChannelFlow_SurfChem_AdsorpDesorp_CO_O2/readme.md) | -| ** | Flow_Argon_Cylinder_Curved | ** | Hypersonic Argon flow around a cylinder (pseudo 2D) with DSMC on a curved mesh | nProcs=2 | | [Link](regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_Curved/readme.md) | -| ** | Flow_Argon_Cylinder_LinearMesh | ** | Hypersonic Argon flow around a cylinder (2D) with DSMC on a linear mesh | nProcs=4 | | [Link](regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/readme.md) | -| ** | Flow_N2_70degCone | ** | 2D axisymmetric 70 degree cone | nProcs=6 | Surface Sampling, includes CalcSurfaceImpact and adaptive wall temperature | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) | -| ** | fully_periodic_3D | ** | Periodic boundary conditions in all three directions | nProcs=10,20,30 | Check whether particles end up outside of the domain | [Link](regressioncheck/WEK_DSMC/fully_periodic_3D/readme.md) | -| ** | Surface_Sticking_Coefficient | ** | Channel flow with a sticking coefficient model | nProcs=5 | Surface sampling | [Link](regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/readme.md) | -| 5 | Flow_N2_70degCone | [BGK](regressioncheck/WEK_BGKFlow/builds.ini) | 2D axisymmetric 70 degree cone | nProcs=6 | | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) | -| ** | MultiSpec_Supersonic_Couette_Ar-He | ** | Supersonic Couette flow with an Ar-He mixture | nProcs=5 | Temperature | [Link](regressioncheck/WEK_DSMC/MultiSpec_Supersonic_Couette_Ar-He/readme.md) | -| ** | MultiSpec_Supersonic_Couette_CO2-N2 | ** | Supersonic Couette flow with a CO2-N2 mixture | nProcs=5 | Temperature | [Link](regressioncheck/WEK_DSMC/MultiSpec_Supersonic_Couette_CO2-N2/readme.md) | -| 6 | Flow_N2_70degCone | [FP](regressioncheck/WEK_FPFlow/builds.ini) | 2D axisymmetric 70 degree cone | nProcs=6 | Surface Sampling, includes CalcSurfaceImpact | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) | -| 7 | Flow_N2-N_70degConeHot | [DSMC](regressioncheck/WEK_DSMC/builds.ini) | 2D axisymmetric 70 degree cone (hotter and with N to get some radiation in the next step) | nProcs=6 | Surface Sampling | [Link](regressioncheck/WEK_DSMC/Flow_N2-N_70degConeHot/readme.md) | -| ** | Flow_N2-N_70degConeHot | [Radiation](regressioncheck/WEK_Radiation/builds.ini) | using previously simulated WEK_DSMC/Flow_N2_70degCone results to check radiation tool chain (write out DSMC results, readin those results, radiation solver, radiative transfer, piclas2vtk) | nProcs=6 | Surface heat flux | [Link](regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/readme.md) | +| ** | Flow_Argon_Cylinder_Curved | ** | Hypersonic Argon flow around a cylinder (pseudo 2D) with DSMC on a curved mesh | nProcs=2 | | [Link](regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_Curved/readme.md) | +| ** | Flow_Argon_Cylinder_LinearMesh | ** | Hypersonic Argon flow around a cylinder (2D) with DSMC on a linear mesh | nProcs=4 | | [Link](regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/readme.md) | +| ** | Flow_N2_70degCone | ** | 2D axisymmetric 70 degree cone | nProcs=6 | Surface Sampling, includes CalcSurfaceImpact and adaptive wall temperature | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) | +| ** | fully_periodic_3D | ** | Periodic boundary conditions in all three directions | nProcs=10,20,30 | Check whether particles end up outside of the domain | [Link](regressioncheck/WEK_DSMC/fully_periodic_3D/readme.md) | +| ** | Surface_Sticking_Coefficient | ** | Channel flow with a sticking coefficient model | nProcs=5 | Surface sampling | [Link](regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/readme.md) | +| 5 | Flow_N2_70degCone | [BGK](regressioncheck/WEK_BGKFlow/builds.ini) | 2D axisymmetric 70 degree cone | nProcs=6 | | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) | +| ** | MultiSpec_Supersonic_Couette_Ar-He | ** | Supersonic Couette flow with an Ar-He mixture | nProcs=5 | Temperature | [Link](regressioncheck/WEK_DSMC/MultiSpec_Supersonic_Couette_Ar-He/readme.md) | +| ** | MultiSpec_Supersonic_Couette_CO2-N2 | ** | Supersonic Couette flow with a CO2-N2 mixture | nProcs=5 | Temperature | [Link](regressioncheck/WEK_DSMC/MultiSpec_Supersonic_Couette_CO2-N2/readme.md) | +| 6 | Flow_N2_70degCone | [FP](regressioncheck/WEK_FPFlow/builds.ini) | 2D axisymmetric 70 degree cone | nProcs=6 | Surface Sampling, includes CalcSurfaceImpact | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) | +| 7 | Flow_N2-N_70degConeHot | [DSMC](regressioncheck/WEK_DSMC/builds.ini) | 2D axisymmetric 70 degree cone (hotter and with N to get some radiation in the next step) | nProcs=6 | Surface Sampling | [Link](regressioncheck/WEK_DSMC/Flow_N2-N_70degConeHot/readme.md) | +| ** | Flow_N2-N_70degConeHot | [Radiation](regressioncheck/WEK_Radiation/builds.ini) | using previously simulated WEK_DSMC/Flow_N2_70degCone results to check radiation tool chain (write out DSMC results, readin those results, radiation solver, radiative transfer, piclas2vtk) | nProcs=6 | Surface heat flux | [Link](regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/readme.md) | diff --git a/docs/documentation/userguide/features-and-models/particle-tracking.md b/docs/documentation/userguide/features-and-models/particle-tracking.md index 1b975d648..f74b808a3 100644 --- a/docs/documentation/userguide/features-and-models/particle-tracking.md +++ b/docs/documentation/userguide/features-and-models/particle-tracking.md @@ -100,14 +100,14 @@ Per default the resting frame of reference is used and no further settings are r The rotating reference frame can be used to represent rotating geometries like e.g. turbine blades, since rotating/changing meshes are currently not supported. The corresponding rotational wall velocity has to be defined for the boundary as well, as shown in Section {ref}`sec:particle-boundary-conditions-reflective-wallvelo`. The distinction between a resting and rotating frame of reference is only important for the particle movement step. Here particles -are not moving on a straight line due to the pseudo forces, i.e. the centripetal force and the Coriolis force. +are not moving on a straight line due to the pseudo forces, i.e. the centrifugal and the Coriolis force. This means that particles follow a circular path towards a stationary boundary that represents a rotating geometry. The usage of the rotating reference frame is enabled by Part-UseRotationalReferenceFrame = T Additionally, the rotational axis (x-, y- or z-axis) and frequency have to be defiend by - Part-RotRefFrame-Axis = 1 ! x=1, y=2, z=3 + Part-RotRefFrame-Axis = 1 ! x=1, y=2, z=3 Part-RotRefFrame-Frequency = -100 ! [Hz, 1/s] The sign of the frequency (+/-) defines the direction of rotation according to the right-hand rule. @@ -127,12 +127,12 @@ boundary surfaces of these regions can only be defined perpendicular to the rota This allows to model systems of rotating and stationary geometries (e.g. pumps with stator and rotor blades) within a single simulation. For rotationally symmetric cases, the simulation domain can be reduced using the rotationally perodic boundary condition (as shown in Section {ref}`sec:particle-boundary-conditions-rotBC`). Examples are provided in the regression test directory, e.g. `regressioncheck/CHE_DSMC/Rotational_Reference_Frame` and `regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Regions`. -### Time step subcycling for Rotating Frame of Reference +### Time step subcycling for rotating frame of reference -In PICLas, an explicit time step scheme is used, with both collision and motion operators altering particle distribution function within each iteration. This leads to changes in particle positions, momentum, and energy due to motion and collisions. Operators can be sequentially executed through operator splitting, adjusting particle positions based on velocities first, followed by collisions within a time step. It's crucial for the time step to resolve collision frequency adequately. External forces (i.e. the centripetal force and the Coriolis in the case of a rotating reference frame) may require additional consideration for time step determination, especially when particle acceleration needs to be modeled. To ensure that the existing time step requirement in DSMC, dictated by collisions, remains unaffected, a subcycling algorithm only for the particle motion can be used. This algorithm divides the motion and thus the modeling of external forces into smaller subtimesteps. Consequently, the time step can be chosen based on collision frequency as usual, while the motion can be more finely resolved through subcycling. The usage of the subcycling algorithm is enabled by +In PICLas, an explicit time stepping scheme is used for the DSMC method, with both collision and motion operators altering the particle distribution function within each iteration. This leads to changes in the particle positions, momentum, and energy due to motion and collisions. Operators can be sequentially executed through operator splitting, adjusting the particle positions based on velocities first, followed by collisions within a time step. It is crucial for the time step to resolve collision frequency adequately. External forces (i.e. the centrifugal and the Coriolis force in the case of a rotating reference frame) may require additional consideration for the time step determination, especially when particle acceleration needs to be modeled. To ensure that the existing time step requirement in DSMC, dictated by collisions, remains unaffected, a subcycling algorithm only for the particle motion can be used. This algorithm divides the motion and thus the modeling of external forces into smaller subtimesteps. Consequently, the time step can be chosen based on collision frequency, while the motion can be more finely resolved through subcycling. The usage of the subcycling algorithm is enabled by Part-RotRefFrame-UseSubCycling = T Additionally, the number of the subcycling steps can be defined by - Part-NumberSubCyclingSteps = 10 ! Default = 10 steps \ No newline at end of file + Part-RotRefFrame-SubCyclingSteps = 10 ! Default = 10 steps \ No newline at end of file diff --git a/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/parameter.ini b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/parameter.ini index 1aede14a6..608334883 100644 --- a/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/parameter.ini +++ b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/parameter.ini @@ -30,7 +30,7 @@ Analyze_dt = 1.0 ! Timestep of analyze outputs CFLscale = 0.5 Part-RotRefFrame-UseSubCycling = T -Part-NumberSubCyclingSteps = 200 +Part-RotRefFrame-SubCyclingSteps = 200 ! =============================================================================== ! ! BOUNDARIES ! =============================================================================== ! diff --git a/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/readme.md b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/readme.md index 46e868f23..483e9da09 100644 --- a/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/readme.md +++ b/regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Subcycling/readme.md @@ -1,5 +1,5 @@ -# Rotational frame of reference: SubCycling -* Frame of reference is rotating with 5 revolution per second +# Rotational frame of reference: Subcycling +* Frame of reference is rotating with 5 revolutions per second * A single particle is initially placed at coordinates (x,y) = (-0.25,-0.0) with a velocity vector of (10,10,0). It is anticipated to traverse a circular-like trajectory within the rotating frame of reference due to fictitious forces. * A wall, rotating synchronously with the frame of reference, induces a specular reflection upon collision. -* A relatively large time step is employed (Delta_t=2E-3). Reference positions are calculated using a smaller time step (1E-5). Utilization of SubCycling with 200 sub-steps ensures identical positions in the regression test as in the reference case. Disabling SubCycling results in failure of the regression test. +* A relatively large time step is employed (Delta_t=2E-3). Reference positions are calculated using a smaller time step (1E-5). Utilization of a subcycling with 200 substeps ensures identical positions in the regression test as in the reference case. Disabling subcycling results in failure of the regression test. diff --git a/src/particles/analyze/particle_analyze_code.f90 b/src/particles/analyze/particle_analyze_code.f90 index 6253ae188..c1c3d1873 100644 --- a/src/particles/analyze/particle_analyze_code.f90 +++ b/src/particles/analyze/particle_analyze_code.f90 @@ -41,7 +41,7 @@ SUBROUTINE CalcAnalyticalParticleState(t,PartStateAnalytic,alpha_out,theta_out) USE MOD_PICInterpolation_Vars ,ONLY: AnalyticInterpolationPhase,AnalyticInterpolationGamma,AnalyticInterpolationE,AnalyticPartDim USE MOD_PICInterpolation_Vars ,ONLY: TimeReset,r_WallVec,v_WallVec USE MOD_TimeDisc_Vars ,ONLY: TEnd -USE MOD_PARTICLE_Vars ,ONLY: PartSpecies,Species,RotRefFrameOmega,RotRefFrameFreq, PartState +USE MOD_PARTICLE_Vars ,ONLY: PartSpecies,Species,RotRefFrameOmega,RotRefFrameFreq ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !---------------------------------------------------------------------------------------------------------------------------------- @@ -408,14 +408,10 @@ SUBROUTINE CalcAnalyticalParticleState(t,PartStateAnalytic,alpha_out,theta_out) - ( omega * (COS(omega * New_t) - omega * New_t * SIN(omega * New_t) ) ) & * ( TempArrayCross3(3) - 1/omega * TempArrayCross6(3) ) -! IF(ABS(PartStateAnalytic(1)).LT.1E-8) THEN IF(PartStateAnalytic(1).GT.0.0) THEN TimeReset = t PartStateAnalytic(1) = 0.0 ! set particle on wall r_WallVec = PartStateAnalytic(1:3) -! v_WallVec(1) = -PartStateAnalytic(4) -! v_WallVec(2) = PartStateAnalytic(5) -! v_WallVec(3) = PartStateAnalytic(6) v_0Vec = Species(iSpec)%Init(1)%VeloVecIC(1:3) * Species(iSpec)%Init(1)%VeloIC v_WallVec = v_0Vec v_WallVec(1) = - v_WallVec(1) ! mirror velocity (not equal push velocity or PartStateAnalytic(4:6)) diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 59a22ebab..59b42a512 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -212,9 +212,9 @@ SUBROUTINE DefineParametersParticles() , 'Set [T] to activate sampling of electronic energy excitation (currently only available for ElectronicModel = 3)', '.FALSE.') ! === Rotational frame of reference -CALL prms%CreateLogicalOption( 'Part-UseRotationalReferenceFrame', 'Activate rotational frame of reference', '.FALSE.') -CALL prms%CreateLogicalOption( 'Part-RotRefFrame-UseSubCycling', 'Activate sub cycling in rot ref frame', '.FALSE.') -CALL prms%CreateIntOption( 'Part-NumberSubCyclingSteps','Number of subcyling steps)','10') +CALL prms%CreateLogicalOption( 'Part-UseRotationalReferenceFrame', 'Activate the rotational frame of reference', '.FALSE.') +CALL prms%CreateLogicalOption( 'Part-RotRefFrame-UseSubCycling', 'Activate subcycling in the rotational frame of reference', '.FALSE.') +CALL prms%CreateIntOption( 'Part-RotRefFrame-SubCyclingSteps','Number of subcyling steps)','10') CALL prms%CreateIntOption( 'Part-RotRefFrame-Axis','Axis of rotational frame of reference (x=1, y=2, z=3)') CALL prms%CreateRealOption( 'Part-RotRefFrame-Frequency','Frequency of rotational frame of reference [1/s], sign according '//& 'to right-hand rule, e.g. positive: counter-clockwise, negative: clockwise') @@ -1503,7 +1503,7 @@ SUBROUTINE FinalizeParticles() SDEALLOCATE(PEM%pNext) SDEALLOCATE(seeds) SDEALLOCATE(PartPosLandmark) -SDEALLOCATE(RotRefFramRegion) +SDEALLOCATE(RotRefFrameRegion) SDEALLOCATE(VirtMergedCells) SDEALLOCATE(PartDataVarNames) #if USE_MPI @@ -1730,8 +1730,8 @@ SUBROUTINE InitializeVariablesRotationalRefFrame() !=================================================================================================================================== UseRotRefFrame = GETLOGICAL('Part-UseRotationalReferenceFrame') -UseRotSubCycling = GETLOGICAL('Part-Part-RotRefFrame-UseSubCycling') -nSubCyclingSteps = GETINT('Part-NumberSubCyclingSteps') +UseRotSubCycling = GETLOGICAL('Part-RotRefFrame-UseSubCycling') +nSubCyclingSteps = GETINT('Part-RotRefFrame-SubCyclingSteps') IF(UseRotRefFrame) THEN ! Abort for other timedisc except DSMC/BGK @@ -1756,13 +1756,13 @@ SUBROUTINE InitializeVariablesRotationalRefFrame() CALL abort(__STAMP__,'ERROR Rotational Reference Frame: Axis must be between 1 and 3. Selected axis: ',IntInfoOpt=RotRefFrameAxis) END SELECT nRefFrameRegions = GETINT('Part-nRefFrameRegions') - ALLOCATE(RotRefFramRegion(1:2,1:nRefFrameRegions)) + ALLOCATE(RotRefFrameRegion(1:2,1:nRefFrameRegions)) IF(nRefFrameRegions.GT.0)THEN DO iRegion=1, nRefFrameRegions WRITE(UNIT=hilf,FMT='(I0)') iRegion - RotRefFramRegion(1,iRegion)= GETREAL('Part-RefFrameRegion'//TRIM(hilf)//'-MIN') - RotRefFramRegion(2,iRegion)= GETREAL('Part-RefFrameRegion'//TRIM(hilf)//'-MAX') - IF(RotRefFramRegion(1,iRegion).GE.RotRefFramRegion(2,iRegion)) THEN + RotRefFrameRegion(1,iRegion)= GETREAL('Part-RefFrameRegion'//TRIM(hilf)//'-MIN') + RotRefFrameRegion(2,iRegion)= GETREAL('Part-RefFrameRegion'//TRIM(hilf)//'-MAX') + IF(RotRefFrameRegion(1,iRegion).GE.RotRefFrameRegion(2,iRegion)) THEN CALL abort(__STAMP__,'ERROR Rotational Reference Frame: MIN > MAX in definition of region ',IntInfoOpt=iRegion) END IF END DO diff --git a/src/particles/particle_rhs.f90 b/src/particles/particle_rhs.f90 index 0d9be1049..5af5ab2b2 100644 --- a/src/particles/particle_rhs.f90 +++ b/src/particles/particle_rhs.f90 @@ -36,10 +36,6 @@ MODULE MOD_part_RHS PROCEDURE PartRHS END INTERFACE -INTERFACE CalcPartPosInRotRef - PROCEDURE CalcPartPosInRotRef -END INTERFACE - !---------------------------------------------------------------------------------------------------------------------------------- PUBLIC :: CalcPartRHS PUBLIC :: PartVeloToImp @@ -802,13 +798,12 @@ END SUBROUTINE PartVeloToImp SUBROUTINE CalcPartPosInRotRef(iPart, RotTimestep) !=================================================================================================================================== -!> Particle push in rotational frame of references +!> Particle push in rotational frame of reference using the midpoint method !=================================================================================================================================== ! MODULES -USE MOD_Particle_Vars ,ONLY: PartState, PDM, PartVeloRotRef -!USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame +USE MOD_Particle_Vars ,ONLY: PartState, PDM, PartVeloRotRef ! IMPLICIT VARIABLE HANDLING - IMPLICIT NONE +IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES INTEGER, INTENT(IN) :: iPart @@ -817,21 +812,21 @@ SUBROUTINE CalcPartPosInRotRef(iPart, RotTimestep) ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -REAL :: Pt_local(1:3), Pt_local_old(1:3), VeloRotRef_half(1:3), PartState_half(1:3) +REAL :: Pt_local(1:3), Pt_local_old(1:3), VeloRotRef_half(1:3), PartState_half(1:3) !=================================================================================================================================== IF(PDM%InRotRefFrame(iPart)) THEN ! Midpoint method ! calculate the acceleration (force / mass) at the current time step Pt_local_old(1:3) = CalcPartRHSRotRefFrame(PartState(1:3,iPart), PartVeloRotRef(1:3,iPart)) - ! estimate the mid-point velocity in the rotational frame + ! estimate the midpoint velocity in the rotational frame VeloRotRef_half(1:3) = PartVeloRotRef(1:3,iPart) + 0.5*Pt_local_old(1:3)*RotTimestep - ! estimate the mid-point position + ! estimate the midpoint position PartState_half(1:3) = PartState(1:3,iPart) + 0.5*PartVeloRotRef(1:3,iPart)*RotTimestep - ! calculate the acceleration (force / mass) at the mid-point + ! calculate the acceleration (force / mass) at the midpoint Pt_local(1:3) = CalcPartRHSRotRefFrame(PartState_half(1:3), VeloRotRef_half(1:3)) - ! update the position using the mid-point velocity in the rotational frame + ! update the position using the midpoint velocity in the rotational frame PartState(1:3,iPart) = PartState(1:3,iPart) + VeloRotRef_half(1:3)*RotTimestep - ! update the velocity in the rotational frame using the mid-point acceleration + ! update the velocity in the rotational frame using the midpoint acceleration PartVeloRotRef(1:3,iPart) = PartVeloRotRef(1:3,iPart) + Pt_local(1:3)*RotTimestep ELSE PartState(1:3,iPart) = PartState(1:3,iPart) + PartState(4:6,iPart) * RotTimestep diff --git a/src/particles/particle_tools.f90 b/src/particles/particle_tools.f90 index a18b2ee88..63c1f524b 100644 --- a/src/particles/particle_tools.f90 +++ b/src/particles/particle_tools.f90 @@ -718,7 +718,7 @@ PPURE FUNCTION InRotRefFrameCheck(iPart) !----------------------------------------------------------------------------------------------------------------------------------! ! MODULES ! !----------------------------------------------------------------------------------------------------------------------------------! -USE MOD_Particle_Vars ,ONLY: PartState,RotRefFramRegion,RotRefFrameAxis,nRefFrameRegions +USE MOD_Particle_Vars ,ONLY: PartState,RotRefFrameRegion,RotRefFrameAxis,nRefFrameRegions !----------------------------------------------------------------------------------------------------------------------------------! IMPLICIT NONE ! INPUT / OUTPUT VARIABLES @@ -732,8 +732,8 @@ PPURE FUNCTION InRotRefFrameCheck(iPart) IF(nRefFrameRegions.GT.0) THEN InRotRefFrameCheck = .FALSE. DO iRegion = 1, nRefFrameRegions - IF((PartState(RotRefFrameAxis,iPart).GT.RotRefFramRegion(1,iRegion)).AND. & - (PartState(RotRefFrameAxis,iPart).LT.RotRefFramRegion(2,iRegion))) THEN + IF((PartState(RotRefFrameAxis,iPart).GT.RotRefFrameRegion(1,iRegion)).AND. & + (PartState(RotRefFrameAxis,iPart).LT.RotRefFrameRegion(2,iRegion))) THEN InRotRefFrameCheck = .TRUE. EXIT END IF diff --git a/src/particles/particle_vars.f90 b/src/particles/particle_vars.f90 index 4b1c255fd..c88d73707 100644 --- a/src/particles/particle_vars.f90 +++ b/src/particles/particle_vars.f90 @@ -73,16 +73,6 @@ MODULE MOD_Particle_Vars REAL , ALLOCATABLE :: PartPosRef(:,:) ! (1:3,1:NParts) particles pos mapped to -1|1 space REAL , ALLOCATABLE :: PartVeloRotRef(:,:) ! (1:3,1:NParts) Velocity in the rotational reference frame REAL , ALLOCATABLE :: LastPartVeloRotRef(:,:) ! (1:3,1:NParts) Last Velocity in the rotational reference frame -! Rot Ref Sub Cycling -LOGICAL :: UseRotSubCycling ! Flag if sub cycling is active -INTEGER :: nSubCyclingSteps ! Number of subcyling steps -REAL :: LastPartPosSubCycling(3) ! Last position before SubCycling -REAL :: NewPosSubCycling(3) ! New particle position before SubCycling -REAL :: PartVeloRotRefSubCycling(3) ! Velocity in the rotational reference frame before SubCycling -REAL :: LastVeloRotRefSubCycling(3) ! Last Velocity in the rotational reference frame before SubCycling -INTEGER :: GlobalElemIDSubCycling ! Elemnt ID before SubCycling -LOGICAL :: RotRefSubTimeStep ! Flag for loop, that defines the cureent time step is a sub cycling step -LOGICAL :: InRotRefFrameSubCycling ! Check for RotRefFrame before SubCycling REAL , ALLOCATABLE :: Pt(:,:) ! Derivative of PartState (vx,xy,vz) only ! since temporal derivative of position ! is the velocity. Thus we can take @@ -223,7 +213,7 @@ PPURE INTEGER FUNCTION ElemID_INTERFACE(iPart) INTEGER :: ParticleVecLengthOld ! Vector Length for Particle Push Calculation REAL :: MaxPartNumIncrease ! How much shall the PDM%MaxParticleNumber be increased if it is full INTEGER ,ALLOCATABLE :: nextFreePosition(:) ! =>NULL() ! next_free_Position(1:maxParticleNumber) - ! List of free Positon + ! List of free Position LOGICAL ,ALLOCATABLE :: ParticleInside(:) ! Particle_inside (1:maxParticleNumber) LOGICAL ,ALLOCATABLE :: InRotRefFrame(:) ! Check for RotRefFrame (1:maxParticleNumber) LOGICAL ,ALLOCATABLE :: dtFracPush(:) ! Push random fraction only @@ -310,7 +300,17 @@ PPURE INTEGER FUNCTION ElemID_INTERFACE(iPart) REAL :: RotRefFrameFreq ! frequency of rotational frame of reference REAL :: RotRefFrameOmega(3) ! angular velocity of rotational frame of reference INTEGER :: nRefFrameRegions ! number of rotational frame of reference regions -REAL, ALLOCATABLE :: RotRefFramRegion(:,:) ! MIN/MAX defintion for multiple rotational frame of reference region +REAL, ALLOCATABLE :: RotRefFrameRegion(:,:) ! MIN/MAX defintion for multiple rotational frame of reference region ! (i,RegionNumber), MIN:i=1, MAX:i=2 +! Rotational frame of reference: Subcycling +LOGICAL :: UseRotSubCycling ! Flag if subcycling is active +INTEGER :: nSubCyclingSteps ! Number of subcycling steps +REAL :: LastPartPosSubCycling(3) ! Last position before subcycling +REAL :: NewPosSubCycling(3) ! New particle position before subcycling +REAL :: PartVeloRotRefSubCycling(3) ! Velocity in the rotational reference frame before subcycling +REAL :: LastVeloRotRefSubCycling(3) ! Last Velocity in the rotational reference frame before subcycling +INTEGER :: GlobalElemIDSubCycling ! Element ID before subcycling +LOGICAL :: RotRefSubTimeStep ! Flag for loop that defines that the current time step is a subcycling step +LOGICAL :: InRotRefFrameSubCycling ! Check for RotRefFrame before subcycling !=================================================================================================================================== END MODULE MOD_Particle_Vars diff --git a/tools/Setup_ModuleEnv/InstallAOTUS.sh b/tools/Setup_ModuleEnv/InstallAOTUS.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallCMake.sh b/tools/Setup_ModuleEnv/InstallCMake.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallGCC.sh b/tools/Setup_ModuleEnv/InstallGCC.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallHDF5.sh b/tools/Setup_ModuleEnv/InstallHDF5.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallHOPR.sh b/tools/Setup_ModuleEnv/InstallHOPR.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallMPIallCOMPILERS.sh b/tools/Setup_ModuleEnv/InstallMPIallCOMPILERS.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallModules.sh b/tools/Setup_ModuleEnv/InstallModules.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallPETSc.sh b/tools/Setup_ModuleEnv/InstallPETSc.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallPackagesParaView.sh b/tools/Setup_ModuleEnv/InstallPackagesParaView.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallPackagesReggie.sh b/tools/Setup_ModuleEnv/InstallPackagesReggie.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallPackagesServer.sh b/tools/Setup_ModuleEnv/InstallPackagesServer.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallPackagesUbuntu16.sh b/tools/Setup_ModuleEnv/InstallPackagesUbuntu16.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallPackagesUbuntu20.sh b/tools/Setup_ModuleEnv/InstallPackagesUbuntu20.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallPackagesUbuntu21.sh b/tools/Setup_ModuleEnv/InstallPackagesUbuntu21.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallPackagesUbuntu22.sh b/tools/Setup_ModuleEnv/InstallPackagesUbuntu22.sh old mode 100644 new mode 100755 diff --git a/tools/Setup_ModuleEnv/InstallParaview.sh b/tools/Setup_ModuleEnv/InstallParaview.sh old mode 100644 new mode 100755 From 09f59951e59eb7a7979e4356e10ea3457e2a216d Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Wed, 17 Apr 2024 18:35:21 +0200 Subject: [PATCH 219/222] Do not use TrackInfo outside of tracking, do not perform surface chemistry routines without surface sides (or halo surface sides) on the compute node --- src/mpi/mpi_shared.f90 | 6 +++- .../boundary/particle_boundary_sampling.f90 | 11 +++---- .../emission/particle_surface_chemflux.f90 | 33 +++++++++++-------- 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/mpi/mpi_shared.f90 b/src/mpi/mpi_shared.f90 index 22b62057a..f6641b979 100644 --- a/src/mpi/mpi_shared.f90 +++ b/src/mpi/mpi_shared.f90 @@ -1221,7 +1221,11 @@ SUBROUTINE Allocate_Shared_Real_5(nVal,SM_WIN,DataPointer& ! SM_PTR can now be associated with a Fortran pointer and thus used to access the shared data CALL C_F_POINTER(SM_PTR, DataPointer, nVal) -IF (.NOT.ASSOCIATED(DataPointer)) CALL abort(__STAMP__,'ERROR: Datapointer ('//TRIM(FuncName)//') could not be associated') +IF (.NOT.ASSOCIATED(DataPointer)) CALL abort(__STAMP__,'ERROR: Datapointer ('//TRIM(FuncName)//') could not be associated'& +#ifdef DEBUG_MEMORY +//' for '//TRIM(SM_WIN_NAME)//' in file '//TRIM(SM_CALL_FILE)//' in line '//TRIM(hilf)& +#endif /*DEBUG_MEMORY*/ +) END SUBROUTINE ALLOCATE_SHARED_REAL_5 diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index 815fb9b13..6ec7aed23 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -606,12 +606,11 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt) - SampWallState(SAMPWALL_EVIBNEW ,p,q,iSurfSide) & - SampWallState(SAMPWALL_EELECNEW ,p,q,iSurfSide)) & / (SurfSideArea(p,q,iSurfSide) * TimeSampleTemp) - END IF - - ! Add the heat flux due to catalytic reactions on the surface - IF(DoChemSurface) THEN - MacroSurfaceVal(4,p,q,OutputCounter) = MacroSurfaceVal(4,p,q,OutputCounter) + SUM(ChemWallProp(:,2,p, q, iSurfSide)) & - / (SurfSideArea(p,q,iSurfSide)*TimeSampleTemp) + ! Add the heat flux due to catalytic reactions on the surface + IF(DoChemSurface) THEN + MacroSurfaceVal(4,p,q,OutputCounter) = MacroSurfaceVal(4,p,q,OutputCounter) + SUM(ChemWallProp(:,2,p, q, iSurfSide)) & + / (SurfSideArea(p,q,iSurfSide)*TimeSampleTemp) + END IF END IF ! Number of simulation particle impacts per iteration diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index 21269d6b2..505323ff1 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -53,7 +53,7 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID USE MOD_Timedisc_Vars ,ONLY: dt USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, SurfFluxSideSize -USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, SurfSideArea +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, SurfSideArea, SurfTotalSideOnNode USE MOD_SurfaceModel_Vars ,ONLY: SurfChem, SurfChemReac, ChemWallProp, ChemDesorpWall USE MOD_Particle_SurfFlux ,ONLY: SetSurfacefluxVelocities, CalcPartPosTriaSurface, DefineSideDirectVec2D USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr @@ -62,9 +62,6 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win #endif -!#if defined(IMPA) || defined(ROS) -USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo -!#endif /*IMPA*/ #if USE_LOADBALANCE USE MOD_LoadBalance_Vars ,ONLY: nSurfacefluxPerElem USE MOD_LoadBalance_Timers ,ONLY: LBStartTime, LBElemSplitTime, LBPauseTime @@ -96,10 +93,16 @@ SUBROUTINE ParticleSurfChemFlux() REAL :: tLBStart #endif /*USE_LOADBALANCE*/ !=================================================================================================================================== + +IF(.NOT.SurfTotalSideOnNode) RETURN + ! 1.) Determine the surface parameters nSF = SurfChem%CatBoundNum -SubP = TrackInfo%p -SubQ = TrackInfo%q +! TODO: TrackInfo is only available during tracking +! SubP = TrackInfo%p +! SubQ = TrackInfo%q +SubP = 1 +SubQ = 1 DO iSF = 1, nSF BoundID = SurfChem%Surfaceflux(iSF)%BC @@ -238,7 +241,7 @@ SUBROUTINE ParticleSurfChemFlux() END DO ! Determine the reaction energy in dependence of the surface coverage [J] - ! Complete accomodation due to the intermediate desorption step + ! Complete accommodation due to the intermediate desorption step ReacHeat = (SurfChemReac(iReac)%EReact - Coverage*SurfChemReac(iReac)%EScale) * BoltzmannConst nu = SurfChemReac(iReac)%Prefactor @@ -531,7 +534,7 @@ SUBROUTINE ParticleSurfDiffusion() USE MOD_Mesh_Vars ,ONLY: SideToElem, offsetElem USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF -USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide +USE MOD_Particle_Boundary_Vars ,ONLY: SurfTotalSideOnNode, GlobalSide2SurfSide USE MOD_SurfaceModel_Vars ,ONLY: SurfChem, ChemWallProp #if USE_MPI USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win @@ -542,9 +545,6 @@ SUBROUTINE ParticleSurfDiffusion() #else USE MOD_Particle_Boundary_Vars ,ONLY: nGlobalSurfSides #endif /*USE_MPI*/ -!#if defined(IMPA) || defined(ROS) -USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo -!#endif /*IMPA*/ #if USE_LOADBALANCE USE MOD_LoadBalance_Timers ,ONLY: LBStartTime, LBElemSplitTime, LBPauseTime #endif /*USE_LOADBALANCE*/ @@ -566,10 +566,15 @@ SUBROUTINE ParticleSurfDiffusion() INTEGER :: SubP, SubQ REAL :: Coverage_Sum !=================================================================================================================================== +IF(.NOT.SurfTotalSideOnNode) RETURN + CatBoundNum = SurfChem%CatBoundNum -SubP = TrackInfo%p -SubQ = TrackInfo%q +! TODO: TrackInfo is only available during tracking +! SubP = TrackInfo%p +! SubQ = TrackInfo%q +SubP = 1 +SubQ = 1 #if USE_MPI firstSide = INT(REAL( myComputeNodeRank *nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors))+1 @@ -593,7 +598,7 @@ SUBROUTINE ParticleSurfDiffusion() BoundID = SurfChem%Surfaceflux(iSF)%BC SideNumber = BCdata_auxSF(BoundID)%SideNumber - ! Determine the sum of the coverage on all indivual subsides + ! Determine the sum of the coverage on all individual subsides DO iSpec = 1, nSpecies Coverage_Sum = 0.0 DO iSide = 1, SideNumber From a41cc0eb6ef97584aa7d518077f52d340d4987d7 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Fri, 19 Apr 2024 01:02:07 +0200 Subject: [PATCH 220/222] Surface chemistry: separate routine to set velocities to avoid unused/uninitialised variables, calculate surface coverage without MPI as well --- .../boundary/particle_boundary_init.f90 | 2 +- .../boundary/particle_boundary_sampling.f90 | 5 +- .../emission/particle_surface_chemflux.f90 | 78 ++++- .../emission/particle_surface_flux.f90 | 5 +- .../emission/particle_surface_flux_init.f90 | 184 ++-------- src/particles/particle_init.f90 | 23 +- .../particle_mpi_boundary_sampling.f90 | 174 +--------- src/particles/particle_vars.f90 | 2 +- .../surfacemodel/surfacemodel_chemistry.f90 | 315 +++++++++++++++--- .../surfacemodel/surfacemodel_init.f90 | 13 +- .../surfacemodel/surfacemodel_vars.f90 | 24 +- src/timedisc/timedisc_TimeStep_DSMC.f90 | 11 +- 12 files changed, 423 insertions(+), 413 deletions(-) diff --git a/src/particles/boundary/particle_boundary_init.f90 b/src/particles/boundary/particle_boundary_init.f90 index afce0706b..aae264d00 100644 --- a/src/particles/boundary/particle_boundary_init.f90 +++ b/src/particles/boundary/particle_boundary_init.f90 @@ -621,7 +621,7 @@ SUBROUTINE InitializeVariablesPartBoundary() !-- Floating Potential ALLOCATE(BCdata_auxSF(1:nPartBound)) DO iPartBound=1,nPartBound - BCdata_auxSF(iPartBound)%SideNumber=-1 !init value when not used + BCdata_auxSF(iPartBound)%SideNumber=-1 ! initial value deactivates the mapping of sides (when required for surface flux is set to 0) BCdata_auxSF(iPartBound)%GlobalArea=0. BCdata_auxSF(iPartBound)%LocalArea=0. END DO diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90 index 6ec7aed23..95c403ed2 100644 --- a/src/particles/boundary/particle_boundary_sampling.f90 +++ b/src/particles/boundary/particle_boundary_sampling.f90 @@ -934,7 +934,7 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) INTEGER :: nVar2D, nVar2D_Spec, nVar2D_Total, nVarCount, nVar2D_Heat INTEGER :: iSpec, iSurfSide, nReac INTEGER :: p,q,OutputCounter -REAL :: tstart,tend, tout +REAL :: tstart,tend REAL, ALLOCATABLE :: MacroSurfaceSpecChemVal(:,:,:,:,:) REAL, ALLOCATABLE :: MacroSurfaceHeatVal(:,:,:,:) !=================================================================================================================================== @@ -1019,8 +1019,7 @@ SUBROUTINE WriteSurfSampleChemToHDF5(MeshFileName,OutputTime) DO p = 1,nSurfSample ! --- Total output (catalytic heat flux) ! --- Species-specific output (surface coverage) - tout = OutputTime - MacroSurfaceHeatVal(1,p,q,OutputCounter) = SUM(ChemWallProp(:,2,p, q, iSurfSide))/ (SurfSideArea(p,q,iSurfSide)*tout) + MacroSurfaceHeatVal(1,p,q,OutputCounter) = SUM(ChemWallProp(:,2,p, q, iSurfSide))/ (SurfSideArea(p,q,iSurfSide)*OutputTime) DO iSpec=1,nSpecies MacroSurfaceSpecChemVal(1,p,q,OutputCounter,iSpec) = ChemWallProp(iSpec,1,p, q, iSurfSide) END DO ! iSpec=1,nSpecies diff --git a/src/particles/emission/particle_surface_chemflux.f90 b/src/particles/emission/particle_surface_chemflux.f90 index 505323ff1..5508f794c 100644 --- a/src/particles/emission/particle_surface_chemflux.f90 +++ b/src/particles/emission/particle_surface_chemflux.f90 @@ -55,7 +55,7 @@ SUBROUTINE ParticleSurfChemFlux() USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, SurfFluxSideSize USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide, SurfSideArea, SurfTotalSideOnNode USE MOD_SurfaceModel_Vars ,ONLY: SurfChem, SurfChemReac, ChemWallProp, ChemDesorpWall -USE MOD_Particle_SurfFlux ,ONLY: SetSurfacefluxVelocities, CalcPartPosTriaSurface, DefineSideDirectVec2D +USE MOD_Particle_SurfFlux ,ONLY: CalcPartPosTriaSurface, DefineSideDirectVec2D USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr #if USE_MPI USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED @@ -85,7 +85,7 @@ SUBROUTINE ParticleSurfChemFlux() REAL :: BetaCoeff REAL :: WallTemp REAL :: SurfMol, SurfMolDens -INTEGER :: iReac, ReactantCount, BoundID, nSF +INTEGER :: iReac, ReactantCount, BoundID INTEGER :: iVal, iReactant, iValReac, SurfSideID, iBias INTEGER :: SubP, SubQ INTEGER :: SurfReacBias(SurfChem%NumOfReact) @@ -97,15 +97,14 @@ SUBROUTINE ParticleSurfChemFlux() IF(.NOT.SurfTotalSideOnNode) RETURN ! 1.) Determine the surface parameters -nSF = SurfChem%CatBoundNum ! TODO: TrackInfo is only available during tracking ! SubP = TrackInfo%p ! SubQ = TrackInfo%q SubP = 1 SubQ = 1 -DO iSF = 1, nSF - BoundID = SurfChem%Surfaceflux(iSF)%BC +DO iSF = 1, SurfChem%CatBoundNum + BoundID = SurfChem%SurfacefluxBC(iSF) IF(ANY(SurfChem%PSMap(BoundID)%PureSurfReac)) THEN DO iSide = 1, BCdata_auxSF(BoundID)%SideNumber @@ -448,8 +447,8 @@ SUBROUTINE ParticleSurfChemFlux() nPartIn(iSpec) = nPartIn(iSpec) + 1 PartEkinIn(iSpec) = PartEkinIn(iSpec)+CalcEkinPart(PartID) END IF ! CalcPartBalance + CALL SetChemFluxVelocities(PartID,iSpec,iSF,iSample,jSample,BCSideID) END DO - CALL SetSurfacefluxVelocities(2,iSpec,iSF,iSample,jSample,iSide,BCSideID,SideID,NbrOfParticle,PartInsSubSide) PartsEmitted = PartsEmitted + PartInsSubSide #if USE_LOADBALANCE !used for calculating LoadBalance of tCurrent(LB_SURFFLUX) @@ -561,15 +560,12 @@ SUBROUTINE ParticleSurfDiffusion() INTEGER :: iSpec , iSF, iSide, BoundID, SideID INTEGER :: BCSideID, ElemID, iLocSide INTEGER :: globElemId -INTEGER :: CatBoundNum INTEGER :: SurfSideID INTEGER :: SubP, SubQ REAL :: Coverage_Sum !=================================================================================================================================== IF(.NOT.SurfTotalSideOnNode) RETURN -CatBoundNum = SurfChem%CatBoundNum - ! TODO: TrackInfo is only available during tracking ! SubP = TrackInfo%p ! SubQ = TrackInfo%q @@ -594,8 +590,8 @@ SUBROUTINE ParticleSurfDiffusion() ! Diffusion over a single reactive boundary ELSE IF(SurfChem%Diffusion) THEN - DO iSF = 1, CatBoundNum - BoundID = SurfChem%Surfaceflux(iSF)%BC + DO iSF = 1, SurfChem%CatBoundNum + BoundID = SurfChem%SurfacefluxBC(iSF) SideNumber = BCdata_auxSF(BoundID)%SideNumber ! Determine the sum of the coverage on all individual subsides @@ -677,4 +673,64 @@ FUNCTION CalcPartPosAxisym(minPos,RVec) END FUNCTION CalcPartPosAxisym + +!=================================================================================================================================== +!> Chemistry SurfaceFlux: Simplified version of SetSurfacefluxVelocities under the assumption of velocity magnitude = 0 +!=================================================================================================================================== +SUBROUTINE SetChemFluxVelocities(PartID,iSpec,iSF,iSample,jSample,BCSideID) +! MODULES +USE MOD_Globals +USE MOD_Globals_Vars ,ONLY: PI, BoltzmannConst +USE MOD_Particle_Vars +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound +USE MOD_Particle_Surfaces_Vars ,ONLY: SurfMeshSubSideData +USE MOD_Part_Tools ,ONLY: InRotRefFrameCheck +USE MOD_SurfaceModel_Vars ,ONLY: SurfChem +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER,INTENT(IN) :: PartID +INTEGER,INTENT(IN) :: iSpec,iSF,iSample,jSample,BCSideID +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +REAL :: Vec3D(3), vec_nIn(1:3), vec_t1(1:3), vec_t2(1:3) +REAL :: RandVal1,RandVal2(2),Velo1,Velo2,Velosq,Temp +!=================================================================================================================================== + +Temp = PartBound%WallTemp(SurfChem%SurfacefluxBC(iSF)) + +vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3) +vec_t1(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1(1:3) +vec_t2(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2(1:3) +CALL RANDOM_NUMBER(RandVal1) +!-- 1.: sample normal directions and build complete velo-vector +Vec3D(1:3) = vec_nIn(1:3) * SQRT(2.*BoltzmannConst*Temp/Species(iSpec)%MassIC)*SQRT(-LOG(RandVal1)) +Velosq = 2 +DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.)) + CALL RANDOM_NUMBER(RandVal2) + Velo1 = 2.*RandVal2(1) - 1. + Velo2 = 2.*RandVal2(2) - 1. + Velosq = Velo1**2 + Velo2**2 +END DO +Velo1 = Velo1*SQRT(-2*LOG(Velosq)/Velosq) +Velo2 = Velo2*SQRT(-2*LOG(Velosq)/Velosq) +Vec3D(1:3) = Vec3D(1:3) + vec_t1(1:3) * (Velo1*SQRT(BoltzmannConst*Temp/Species(iSpec)%MassIC)) +Vec3D(1:3) = Vec3D(1:3) + vec_t2(1:3) * (Velo2*SQRT(BoltzmannConst*Temp/Species(iSpec)%MassIC)) +PartState(4:6,PartID) = Vec3D(1:3) + +IF(UseRotRefFrame) THEN + ! Detect if particle is within a RotRefDomain + PDM%InRotRefFrame(PartID) = InRotRefFrameCheck(PartID) + ! Initialize velocity in the rotational frame of reference + IF(PDM%InRotRefFrame(PartID)) THEN + PartVeloRotRef(1:3,PartID) = PartState(4:6,PartID) - CROSS(RotRefFrameOmega(1:3),PartState(1:3,PartID)) + END IF +END IF + +END SUBROUTINE SetChemFluxVelocities + + END MODULE MOD_Particle_SurfChemFlux \ No newline at end of file diff --git a/src/particles/emission/particle_surface_flux.f90 b/src/particles/emission/particle_surface_flux.f90 index c0cc203c8..ad9e03801 100644 --- a/src/particles/emission/particle_surface_flux.f90 +++ b/src/particles/emission/particle_surface_flux.f90 @@ -1213,7 +1213,6 @@ SUBROUTINE SetSurfacefluxVelocities(Mode,iSpec,iSF,iSample,jSample,iSide,BCSideI USE MOD_Particle_SurfaceFlux_Vars ,ONLY: tSurfaceFlux USE MOD_Mesh_Vars ,ONLY: SideToElem USE MOD_DSMC_Vars ,ONLY: AmbiPolarSFMapping, AmbipolElecVelo, DSMC -USE MOD_SurfaceModel_Vars ,ONLY: SurfChem ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -1246,9 +1245,7 @@ SUBROUTINE SetSurfacefluxVelocities(Mode,iSpec,iSF,iSample,jSample,iSide,BCSideI SF => Species(iSpec)%Surfaceflux(iSF) a = SF%SurfFluxSubSideData(iSample,jSample,iSide)%a_nIn CASE(2) - ! 2: Surface flux at a boundary - SF => SurfChem%Surfaceflux(iSF) - a = SurfChem%SFAux(iSF)%a_nIn(iSample,jSample,iSide,iSpec) + ! 2: Surface flux at a boundary (NOT USED ANYMORE, separate simplified routine SetChemFluxVelocities) CASE(3) ! 3: Ambipolar diffusion: setting velocity of electrons ! Only insert electron for positively charged species diff --git a/src/particles/emission/particle_surface_flux_init.f90 b/src/particles/emission/particle_surface_flux_init.f90 index ebb6a7c84..68329a5dc 100644 --- a/src/particles/emission/particle_surface_flux_init.f90 +++ b/src/particles/emission/particle_surface_flux_init.f90 @@ -183,8 +183,8 @@ SUBROUTINE InitializeParticleSurfaceflux() !-- 1.: read/prepare parameters and determine nec. BCs CALL ReadInAndPrepareSurfaceFlux(MaxSurfacefluxBCs, nDataBC) -! Call to the reactive surfaces -IF (SurfChem%CatBoundNum.GT.0) CALL ReadInAndPrepareSurfChemFlux(nDataBC) +!-- 2.: initialize/add surface flux due to reactive surfaces +IF (SurfChem%CatBoundNum.GT.0) CALL InitSurfChemFlux(nDataBC) #if USE_MPI CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoPoissonRounding,1,MPI_LOGICAL,MPI_LAND,MPI_COMM_PICLAS,iError) !set T if this is for all procs @@ -297,56 +297,6 @@ SUBROUTINE InitializeParticleSurfaceflux() END DO !iSF END DO !iSpec -!initialize Surfaceflux-specific data -DO iSF=1,SurfChem%CatBoundNum - currentBC = SurfChem%Surfaceflux(iSF)%BC - IF (BCdata_auxSF(currentBC)%SideNumber.GT.0) THEN - - ! Loop over sides on the surface flux - DO iSide=1,BCdata_auxSF(currentBC)%SideNumber - BCSideID=BCdata_auxSF(currentBC)%SideList(iSide) - ElemID = SideToElem(S2E_ELEM_ID,BCSideID) - iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) - SideID=GetGlobalNonUniqueSideID(offsetElem+ElemID,iLocSide) - IF (SurfChem%Surfaceflux(iSF)%AcceptReject) THEN - CALL GetBezierSampledAreas(SideID=SideID,BezierSampleN=BezierSampleN & - ,BezierSurfFluxProjection_opt=.NOT.SurfChem%Surfaceflux(iSF)%VeloIsNormal & - ,SurfMeshSubSideAreas=tmp_SubSideAreas,DmaxSampleN_opt=SurfChem%Surfaceflux(iSF)%ARM_DmaxSampleN & - ,Dmax_opt=tmp_SubSideDmax,BezierControlPoints2D_opt=tmp_BezierControlPoints2D) - ELSE IF (.NOT.TriaSurfaceFlux) THEN - CALL GetBezierSampledAreas(SideID=SideID,BezierSampleN=BezierSampleN & - ,BezierSurfFluxProjection_opt=.NOT.SurfChem%Surfaceflux(iSF)%VeloIsNormal,SurfMeshSubSideAreas=tmp_SubSideAreas) - ELSE ! TriaSurfaceFlux - DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - tmp_SubSideAreas(iSample,jSample)=SurfMeshSubSideData(iSample,jSample,BCSideID)%area - END DO; END DO - END IF - ! Initialize surface flux - CALL InitSurfChemFlux(iSF, iSide) - ! Initialize acceptance-rejection on SF - IF (SurfChem%Surfaceflux(iSF)%AcceptReject) THEN - DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - SurfChem%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Dmax = tmp_SubSideDmax(iSample,jSample) - ! IF (.NOT.SurfChemReac%Surfaceflux(iSF)%VeloIsNormal) THEN - ! ALLOCATE(SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample & - ! ,iSide)%BezierControlPoints2D(1:2,0:NGeo,0:NGeo)) - ! DO iCopy1=0,NGeo; DO iCopy2=0,NGeo; DO iCopy3=1,2 - ! SurfChemReac%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample & - ! ,iSide)%BezierControlPoints2D(iCopy3,iCopy2,iCopy1) & - ! = tmp_BezierControlPoints2D(iCopy3,iCopy2,iCopy1,iSample,jSample) - ! END DO; END DO; END DO - !END IF !.NOT.VeloIsNormal - END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) - END IF - !Init adaptive SF - END DO ! iSide - ELSE IF (BCdata_auxSF(currentBC)%SideNumber.EQ.-1) THEN - CALL abort(__STAMP__& - ,'ERROR in ParticleSurfaceflux: Someting is wrong with SideNumber of BC ',currentBC) - END IF -END DO !iSF - - #ifdef CODE_ANALYZE SDEALLOCATE(CountCircInflowType) #endif @@ -773,7 +723,6 @@ SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp) USE MOD_DSMC_Symmetry ,ONLY: DSMC_1D_CalcSymmetryArea, DSMC_2D_CalcSymmetryArea, DSMC_2D_CalcSymmetryAreaSubSides USE MOD_DSMC_Vars ,ONLY: RadialWeighting USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle -USE MOD_SurfaceModel_Vars ,ONLY: SurfChem ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- @@ -855,13 +804,6 @@ SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp) END DO END DO - DO iSF=1,SurfChem%CatBoundNum - IF (TmpMapToBC(iBC).EQ.SurfChem%Surfaceflux(iSF)%BC) THEN !only surfacefluxes with iBC - ALLOCATE(SurfChem%Surfaceflux(iSF)%SurfFluxSubSideData(SurfFluxSideSize(1),SurfFluxSideSize(2),1:TmpSideNumber(iBC))) - ALLOCATE(SurfChem%SFAux(iSF)%a_nIn(SurfFluxSideSize(1),SurfFluxSideSize(2),1:TmpSideNumber(iBC),nSpecies)) - END IF - END DO - BCSideID=TmpSideStart(iBC) iCount=0 DO !follow BCSideID list seq. with iCount @@ -1170,7 +1112,7 @@ END SUBROUTINE InitReduceNoiseSF SUBROUTINE CalcCircInflowAreaPerTria(iSpec,iSF) !=================================================================================================================================== -!> Routine calculates the partial area of the circular infow per triangle for AdaptiveType=4 (Monte Carlo integration) +!> Routine calculates the partial area of the circular inflow per triangle for AdaptiveType=4 (Monte Carlo integration) !=================================================================================================================================== ! MODULES ! !----------------------------------------------------------------------------------------------------------------------------------! @@ -1194,9 +1136,7 @@ SUBROUTINE CalcCircInflowAreaPerTria(iSpec,iSF) MCVar = 1000000 IF (.NOT.TriaSurfaceFlux) THEN - CALL abort(& -__STAMP__& -,'ERROR: CircularInflow only with TriaSurfaceFlux!') + CALL abort(__STAMP__,'ERROR: CircularInflow only with TriaSurfaceFlux!') END IF currentBC = Species(iSpec)%Surfaceflux(iSF)%BC @@ -1280,82 +1220,17 @@ SUBROUTINE CalcConstMassflowWeightForZeroMassFlow(iSpec,iSF) END SUBROUTINE CalcConstMassflowWeightForZeroMassFlow -SUBROUTINE InitSurfChemFlux(iSF, iSide) -!=================================================================================================================================== -!> Initialize surface flux variables in SurfFluxSubSideData type -!=================================================================================================================================== -! MODULES -USE MOD_Globals -USE MOD_SurfaceModel_Vars ,ONLY: SurfChem -USE MOD_Globals_Vars ,ONLY: BoltzmannConst, PI -USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, SurfMeshSubSideData, BCdata_auxSF -USE MOD_Particle_Vars ,ONLY: Species, nSpecies -! IMPLICIT VARIABLE HANDLING - IMPLICIT NONE -!----------------------------------------------------------------------------------------------------------------------------------- -! INPUT VARIABLES -INTEGER, INTENT(IN) :: iSF, iSide -!----------------------------------------------------------------------------------------------------------------------------------- -! OUTPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! LOCAL VARIABLES -INTEGER :: iSpec, jSample, iSample, currentBC, BCSideID -REAL :: vec_nIn(3), vec_t1(3), vec_t2(3), projFak, v_thermal, a -!=================================================================================================================================== -currentBC = SurfChem%Surfaceflux(iSF)%BC -BCSideID=BCdata_auxSF(currentBC)%SideList(iSide) -DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1) - vec_nIn = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn - vec_t1 = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1 - vec_t2 = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2 - IF (.NOT.SurfChem%Surfaceflux(iSF)%VeloIsNormal) THEN - projFak = DOT_PRODUCT(vec_nIn,SurfChem%Surfaceflux(iSF)%VeloVecIC) !VeloVecIC projected to inwards normal - ELSE - projFak = 1. - END IF - - DO iSpec=1,nSpecies - v_thermal = SQRT(2.*BoltzmannConst*SurfChem%Surfaceflux(iSF)%MWTemperatureIC/Species(iSpec)%MassIC) !thermal speed - a = 0 !dummy for projected speed ratio in constant v-distri - !-- compute total volume flow rate through surface - SELECT CASE(TRIM(SurfChem%Surfaceflux(iSF)%velocityDistribution)) - CASE('constant') - CASE('maxwell','maxwell_lpn') - a = SurfChem%Surfaceflux(iSF)%VeloIC * projFak / v_thermal !speed ratio proj. to inwards n (can be negative!) - CASE DEFAULT - CALL abort(__STAMP__,& - 'ERROR in SurfaceFlux: Wrong velocity distribution!') - END SELECT - !-- store species-specific data in separate arrays to be able to re-use the surface flux types - SurfChem%SFAux(iSF)%a_nIn(iSample,jSample,iSide,iSpec) = a - END DO !iSpec - - SurfChem%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%projFak = projFak - IF (.NOT.SurfChem%Surfaceflux(iSF)%VeloIsNormal) THEN - SurfChem%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 & - = SurfChem%Surfaceflux(iSF)%VeloIC & - * DOT_PRODUCT(vec_t1,SurfChem%Surfaceflux(iSF)%VeloVecIC) !v in t1-dir - SurfChem%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 & - = SurfChem%Surfaceflux(iSF)%VeloIC & - * DOT_PRODUCT(vec_t2,SurfChem%Surfaceflux(iSF)%VeloVecIC) !v in t2-dir - ELSE - SurfChem%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t1 = 0. !v in t1-dir - SurfChem%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%Velo_t2 = 0. !v in t2-dir - END IF! .NOT.VeloIsNormal -END DO; END DO !jSample=1,SurfFluxSideSize(2); iSample=1,SurfFluxSideSize(1) - -END SUBROUTINE InitSurfChemFlux - - -SUBROUTINE ReadInAndPrepareSurfChemFlux(nDataBC) +SUBROUTINE InitSurfChemFlux(nDataBC) !=================================================================================================================================== -!> +!> Initialize the BCdata_auxSF mapping to utilize the surface flux for surface chemistry +!> Boundary side list is created by setting SideNumber = 0, the list is created later in CreateSideListAndFinalizeAreasSurfFlux +!> Otherwise only SurfMeshSubSideData is required for the simplified surface flux (SetChemFluxVelocities) !=================================================================================================================================== ! MODULES USE MOD_Globals USE MOD_ReadInTools USE MOD_Globals_Vars ,ONLY: BoltzmannConst, Pi -USE MOD_Particle_Boundary_Vars ,ONLY: PartBound,nPartBound +USE MOD_Particle_Boundary_Vars ,ONLY: nPartBound USE MOD_SurfaceModel_Vars USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF USE MOD_Particle_Surfaces_Vars ,ONLY: TriaSurfaceFlux @@ -1369,44 +1244,35 @@ SUBROUTINE ReadInAndPrepareSurfChemFlux(nDataBC) !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: iSF, iBound -INTEGER :: CatBoundNum !=================================================================================================================================== -CatBoundNum = SurfChem%CatBoundNum -ALLOCATE(SurfChem%SurfaceFlux(1:CatBoundNum)) -! Type for variables different from the regular surface flux type -ALLOCATE(SurfChem%SFAux(1:CatBoundNum)) -! Initialize Surfaceflux to BC mapping -SurfChem%Surfaceflux(:)%BC=-1 +ALLOCATE(SurfChem%SurfaceFluxBC(1:SurfChem%CatBoundNum)) +! Initialize Surfaceflux to BC mapping +SurfChem%SurfacefluxBC = -1 iSF = 1 DO iBound=1,nPartBound - IF (SurfChem%BoundisChemSurf(iBound)) THEN - SurfChem%Surfaceflux(iSF)%BC = iBound + IF (SurfChem%BoundIsChemSurf(iBound)) THEN + SurfChem%SurfacefluxBC(iSF) = iBound iSF = iSF + 1 END IF END DO -DO iSF = 1, CatBoundNum - IF (TriaSurfaceFlux) THEN - SurfChem%Surfaceflux(iSF)%AcceptReject=.FALSE. - END IF - - SurfChem%Surfaceflux(iSF)%Adaptive = .FALSE. - ! get surfaceflux data - IF (SurfChem%Surfaceflux(iSF)%BC.LT.1 .OR. SurfChem%Surfaceflux(iSF)%BC.GT.nPartBound) THEN +! Add the BC to the surface flux data array BCdata_auxSF, which will be populated later +DO iSF = 1, SurfChem%CatBoundNum + IF (SurfChem%SurfacefluxBC(iSF).LT.1 .OR. SurfChem%SurfacefluxBC(iSF).GT.nPartBound) THEN CALL abort(__STAMP__, 'Chemistry Surfaceflux BCs must be between 1 and nPartBound!') - ELSE IF (BCdata_auxSF(SurfChem%Surfaceflux(iSF)%BC)%SideNumber.EQ. -1) THEN !not set yet - BCdata_auxSF(SurfChem%Surfaceflux(iSF)%BC)%SideNumber=0 + ELSE IF (BCdata_auxSF(SurfChem%SurfacefluxBC(iSF))%SideNumber.EQ. -1) THEN !not set yet + BCdata_auxSF(SurfChem%SurfacefluxBC(iSF))%SideNumber=0 nDataBC=nDataBC+1 END IF - - SurfChem%Surfaceflux(iSF)%velocityDistribution = 'maxwell_lpn' - SurfChem%Surfaceflux(iSF)%VeloIC = 0. - SurfChem%Surfaceflux(iSF)%VeloIsNormal = .FALSE. - SurfChem%Surfaceflux(iSF)%MWTemperatureIC = PartBound%WallTemp(SurfChem%Surfaceflux(iSF)%BC) END DO !iSF -END SUBROUTINE ReadInAndPrepareSurfChemFlux +! Sanity check +IF(.NOT.TriaSurfaceFlux) THEN + CALL abort(__STAMP__, 'Chemistry Surfaceflux is only supported with TriaSurfaceFlux = T!') +END IF + +END SUBROUTINE InitSurfChemFlux SUBROUTINE ReadInThermionicEmission(iSpec,iSF) diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 5d5d8e086..bcdb0b2cc 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -584,12 +584,8 @@ SUBROUTINE InitializeVariables() RadialWeighting%PerformCloning = .TRUE. CALL DSMC_2D_InitRadialWeighting() END IF - IF(TrackingMethod.NE.TRIATRACKING) CALL abort(& - __STAMP__& - ,'ERROR: Axisymmetric simulation only supported with TrackingMethod = triatracking') - IF(.NOT.TriaSurfaceFlux) CALL abort(& - __STAMP__& - ,'ERROR: Axisymmetric simulation only supported with TriaSurfaceFlux = T') + IF(TrackingMethod.NE.TRIATRACKING) CALL abort(__STAMP__,'ERROR: Axisymmetric simulation only supported with TrackingMethod = triatracking') + IF(.NOT.TriaSurfaceFlux) CALL abort(__STAMP__,'ERROR: Axisymmetric simulation only supported with TriaSurfaceFlux = T') END IF #if USE_MPI @@ -1435,6 +1431,7 @@ SUBROUTINE FinalizeParticles() ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES +INTEGER :: iSpec, iSF !=================================================================================================================================== !#if USE_MPI !CALL FinalizeEmissionParticlesToProcs() @@ -1485,6 +1482,20 @@ SUBROUTINE FinalizeParticles() SDEALLOCATE(CellEvib_vMPF) SDEALLOCATE(PartMPF) SDEALLOCATE(InterPlanePartIndx) +DO iSpec = 1, nSpecies + DO iSF=1, Species(iSpec)%nSurfacefluxBCs + SDEALLOCATE(Species(iSpec)%Surfaceflux(iSF)%SurfFluxSubSideData) + SDEALLOCATE(Species(iSpec)%Surfaceflux(iSF)%SurfFluxSideRejectType) + SDEALLOCATE(Species(iSpec)%Surfaceflux(iSF)%nVFRSub) + SDEALLOCATE(Species(iSpec)%Surfaceflux(iSF)%VFR_total_allProcs) + SDEALLOCATE(Species(iSpec)%Surfaceflux(iSF)%ConstMassflowWeight) + SDEALLOCATE(Species(iSpec)%Surfaceflux(iSF)%CircleAreaPerTriaSide) + END DO + IF(ASSOCIATED(Species(iSpec)%Surfaceflux)) THEN + DEALLOCATE(Species(iSpec)%Surfaceflux) + NULLIFY(Species(iSpec)%Surfaceflux) + END IF +END DO SDEALLOCATE(Species) SDEALLOCATE(SpecReset) SDEALLOCATE(IMDSpeciesID) diff --git a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 index 009047183..0d7c96660 100644 --- a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 +++ b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 @@ -388,22 +388,21 @@ SUBROUTINE InitSurfCommunication() END SUBROUTINE InitSurfCommunication + SUBROUTINE ExchangeChemSurfData() !=================================================================================================================================== -! exchange the surface data -!> 1) collect the information on the local compute-node +! exchange the surface chemistry data in the ChemSampWall array (includes impacts in the halo region) +!> 1) collect the information on the local compute-node (node-local communication) !> 2) compute-node leaders with sampling sides in their halo region and the original node communicate the sampling information -!> 3) calculation of the coverage (needed without MPI as well) -!> 4) compute-node leaders communicate the calculated coverage to the halo sides -!> 5) compute-node leaders ensure synchronization of shared arrays on their node +! (inter-node communication) !!=================================================================================================================================== ! MODULES ! !----------------------------------------------------------------------------------------------------------------------------------! USE MOD_Globals USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC -USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED,MPI_COMM_LEADERS_SURF, nComputeNodeProcessors +USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED,MPI_COMM_LEADERS_SURF USE MOD_MPI_Shared_Vars ,ONLY: nSurfLeaders,myComputeNodeRank,mySurfRank -USE MOD_Particle_Boundary_Vars ,ONLY: SurfTotalSideOnNode, PartBound +USE MOD_Particle_Boundary_Vars ,ONLY: SurfTotalSideOnNode USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfTotalSides USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide @@ -411,9 +410,6 @@ SUBROUTINE ExchangeChemSurfData() USE MOD_Particle_MPI_Vars ,ONLY: SurfSendBuf,SurfRecvBuf USE MOD_Particle_Vars ,ONLY: nSpecies USE MOD_SurfaceModel_Vars ,ONLY: ChemSampWall, ChemSampWall_Shared, ChemSampWall_Shared_Win -USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp, ChemWallProp_Shared, ChemWallProp_Shared_Win -USE MOD_Particle_Boundary_vars ,ONLY: SurfSideArea, SurfSide2GlobalSide -USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------! @@ -422,7 +418,7 @@ SUBROUTINE ExchangeChemSurfData() ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -INTEGER :: iProc,SideID, firstSide, lastSide, GlobalSideID, locBCID, iSide, iSpec +INTEGER :: iProc,SideID,iSpec INTEGER :: iPos,p,q INTEGER :: MessageSize,iSurfSide,SurfSideID INTEGER :: nValues, SurfChemVarNum, SurfChemSampSize @@ -431,7 +427,6 @@ SUBROUTINE ExchangeChemSurfData() ! nodes without sampling surfaces do not take part in this routine IF (.NOT.SurfTotalSideOnNode) RETURN -#if USE_MPI SurfChemVarNum = 2 SurfChemSampSize = SurfChemVarNum * nSpecies ! collect the information from the proc-local shadow arrays in the compute-node shared array @@ -442,11 +437,8 @@ SUBROUTINE ExchangeChemSurfData() CALL MPI_REDUCE(ChemSampWall,0 ,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_SHARED,IERROR) ENDIF ChemSampWall = 0. -ASSOCIATE(ChemSampWall => ChemSampWall_Shared) CALL BARRIER_AND_SYNC(ChemSampWall_Shared_Win ,MPI_COMM_SHARED) -firstSide = INT(REAL( myComputeNodeRank *nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors))+1 -lastSide = INT(REAL((myComputeNodeRank+1)*nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors)) ! surf leader communication of the sampled values in ChemSampWall IF (myComputeNodeRank.EQ.0) THEN @@ -491,13 +483,13 @@ SUBROUTINE ExchangeChemSurfData() DO q = 1,nSurfSample DO p = 1,nSurfSample DO iSpec =1, nSpecies - SurfSendBuf(iProc)%content(iPos+1:iPos+SurfChemVarNum) = ChemSampWall(iSpec,:,p,q,SurfSideID) + SurfSendBuf(iProc)%content(iPos+1:iPos+SurfChemVarNum) = ChemSampWall_Shared(iSpec,:,p,q,SurfSideID) iPos = iPos + SurfChemVarNum END DO END DO ! p=0,nSurfSample END DO ! q=0,nSurfSample - ChemSampWall(:,:,:,:,SurfSideID)=0. + ChemSampWall_Shared(:,:,:,:,SurfSideID)=0. END DO ! iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides END DO @@ -549,11 +541,10 @@ SUBROUTINE ExchangeChemSurfData() DO iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides SideID = SurfMapping(iProc)%RecvSurfGlobalID(iSurfSide) SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) - DO q=1,nSurfSample DO p=1,nSurfSample DO iSpec =1, nSpecies - ChemSampWall(iSpec,:,p,q,SurfSideID) = ChemSampWall(iSpec,:,p,q,SurfSideID) & + ChemSampWall_Shared(iSpec,:,p,q,SurfSideID) = ChemSampWall_Shared(iSpec,:,p,q,SurfSideID) & + SurfRecvBuf(iProc)%content(iPos+1:iPos+SurfChemVarNum) iPos = iPos + SurfChemVarNum END DO @@ -564,153 +555,8 @@ SUBROUTINE ExchangeChemSurfData() SurfRecvBuf(iProc)%content = 0. END DO ! iProc END IF -#else -firstSide = 1 -lastSide = nGlobalSurfSides -#endif /*USE_MPI*/ - -! calculate the coverage from the sampled values (also required in the MPI=OFF case) and nullify the ChemSampWall array -! in the case of MPI, ChemSampWall is associated to the _Shared variant -DO iSide = firstSide, lastSide - GlobalSideID = SurfSide2GlobalSide(SURF_SIDEID,iSide) - locBCID = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,GlobalSideID)) - - DO iSpec =1, nSpecies - IF (PartBound%LatticeVec(locBCID).GT.0.) THEN - ! update the surface coverage (direct calculation of the number of surface atoms) - ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall(iSpec,1,:,:,iSide) * PartBound%LatticeVec(locBCID)* & - PartBound%LatticeVec(locBCID)/(PartBound%MolPerUnitCell(locBCID)*SurfSideArea(:,:,iSide)) - ELSE - ! update the surface coverage (calculation with a surface monolayer) - ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall(iSpec,1,:,:,iSide) / & - (10.**(19)*SurfSideArea(:,:,iSide)) - END IF - ! calculate the heat flux on the surface subside - ChemWallProp(iSpec,2,:,:,iSide) = ChemWallProp(iSpec,2,:,:,iSide) + ChemSampWall(iSpec,2,:,:,iSide) - END DO - ChemSampWall(:,:,:,:,iSide) = 0.0 -END DO -#if USE_MPI CALL BARRIER_AND_SYNC(ChemSampWall_Shared_Win ,MPI_COMM_SHARED) -CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win ,MPI_COMM_SHARED) -! communication of the coverage values to the halo region of compute nodes -! swap the receive/send array, send coverage values to the sides, where you would receive from -IF (myComputeNodeRank.EQ.0) THEN - DO iProc = 0,nSurfLeaders-1 - ! ignore myself - IF (iProc.EQ.mySurfRank) CYCLE - - ! Only open recv buffer if we would have sent to this leader node (thus SendSurfSides) - IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE - - ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc - MessageSize = SurfMapping(iProc)%nSendSurfSides * nValues - CALL MPI_IRECV( SurfSendBuf(iProc)%content & - , MessageSize & - , MPI_DOUBLE_PRECISION & - , iProc & - , 1209 & - , MPI_COMM_LEADERS_SURF & - , RecvRequest(iProc) & - , IERROR) - END DO ! iProc - - ! build message - DO iProc = 0,nSurfLeaders-1 - ! Ignore myself - IF (iProc .EQ. mySurfRank) CYCLE - - ! Only assemble message if we would have received from this leader node - IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE - - ! Nullify everything - iPos = 0 - SurfRecvBuf(iProc)%content = 0. - - DO iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides - ! Get the right side id through the receive global id mapping - SideID = SurfMapping(iProc)%RecvSurfGlobalID(iSurfSide) - SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) - ! Assemble message - DO q = 1,nSurfSample - DO p = 1,nSurfSample - DO iSpec =1, nSpecies - SurfRecvBuf(iProc)%content(iPos+1:iPos+SurfChemVarNum) = ChemWallProp_Shared(iSpec,:,p,q,SurfSideID) - iPos = iPos + SurfChemVarNum - END DO - END DO ! p=0,nSurfSample - END DO ! q=0,nSurfSample - END DO ! iSurfSide=1,SurfMapping(iProc)%nRecvSurfSides - END DO - - ! send message - DO iProc = 0,nSurfLeaders-1 - ! ignore myself - IF (iProc.EQ.mySurfRank) CYCLE - - ! Only open recv buffer if we are expecting sides from this leader node - IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE - - ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc - MessageSize = SurfMapping(iProc)%nRecvSurfSides * nValues - CALL MPI_ISEND( SurfRecvBuf(iProc)%content & - , MessageSize & - , MPI_DOUBLE_PRECISION & - , iProc & - , 1209 & - , MPI_COMM_LEADERS_SURF & - , SendRequest(iProc) & - , IERROR) - END DO ! iProc - - ! Finish received number of sampling surfaces - DO iProc = 0,nSurfLeaders-1 - ! ignore myself - IF (iProc.EQ.mySurfRank) CYCLE - - IF (SurfMapping(iProc)%nRecvSurfSides.NE.0) THEN - CALL MPI_WAIT(SendRequest(iProc),MPIStatus,IERROR) - IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) - END IF - - IF (SurfMapping(iProc)%nSendSurfSides.NE.0) THEN - CALL MPI_WAIT(RecvRequest(iProc),MPIStatus,IERROR) - IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) - END IF - END DO ! iProc - - ! add data do my list - DO iProc = 0,nSurfLeaders-1 - ! ignore myself - IF (iProc.EQ.mySurfRank) CYCLE - - ! Only open recv buffer if we would have sent this leader node - IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE - - iPos=0 - DO iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides - SideID = SurfMapping(iProc)%SendSurfGlobalID(iSurfSide) - SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) - ! Store values in the halo regions - DO q = 1,nSurfSample - DO p = 1,nSurfSample - DO iSpec =1, nSpecies - ChemWallProp_Shared(iSpec,:,p,q,SurfSideID) = SurfSendBuf(iProc)%content(iPos+1:iPos+SurfChemVarNum) - iPos = iPos + SurfChemVarNum - END DO - END DO ! p=0,nSurfSample - END DO ! q=0,nSurfSample - END DO ! iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides - ! Nullify buffer - SurfSendBuf(iProc)%content = 0. - END DO ! iProc -END IF - -! ensure synchronization on compute node -END ASSOCIATE -CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win ,MPI_COMM_SHARED) -#endif /*USE_MPI*/ END SUBROUTINE ExchangeChemSurfData diff --git a/src/particles/particle_vars.f90 b/src/particles/particle_vars.f90 index 828bb99d8..f1e98659e 100644 --- a/src/particles/particle_vars.f90 +++ b/src/particles/particle_vars.f90 @@ -147,7 +147,7 @@ MODULE MOD_Particle_Vars REAL :: MacroParticleFactor ! Number of Microparticle per Macroparticle REAL :: TimeStepFactor ! Species-specific time step factor INTEGER :: NumberOfInits ! Number of different initial particle placements - TYPE(tSurfaceFlux),POINTER :: Surfaceflux(:) ! Particle Data for each SurfaceFlux emission + TYPE(tSurfaceFlux),POINTER :: Surfaceflux(:) => NULL() ! Particle Data for each SurfaceFlux emission INTEGER :: nSurfacefluxBCs ! Number of SF emissions LOGICAL :: DoOverwriteParameters ! Flag to read in parameters manually #if IMPA diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index 7e25e5dd4..394c85a12 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -27,7 +27,10 @@ MODULE MOD_SurfaceModel_Chemistry ! Private Part --------------------------------------------------------------------------------------------------------------------- ! Public Part ---------------------------------------------------------------------------------------------------------------------- PUBLIC :: DefineParametersSurfaceChemistry, InitializeVariablesSurfaceChemistry, InitSurfaceModelChemistry -PUBLIC :: SurfaceModelChemistry, SurfaceModelEventProbability +PUBLIC :: SurfaceModelChemistry, SurfaceModelEventProbability, SurfChemCoverage +#if USE_MPI +PUBLIC :: ExchangeSurfChemCoverage +#endif !=================================================================================================================================== CONTAINS @@ -143,8 +146,8 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() !---------------------------------------------------------------------------------------------------------------------------------- ALLOCATE(SurfChemReac(ReadInNumOfReact)) ! Surface map -ALLOCATE(SurfChem%BoundisChemSurf(nPartBound)) -SurfChem%BoundisChemSurf = .FALSE. +ALLOCATE(SurfChem%BoundIsChemSurf(nPartBound)) +SurfChem%BoundIsChemSurf = .FALSE. ALLOCATE(SurfChem%PSMap(nPartBound)) SurfChem%CatBoundNum = 0 DO iBound=1, nPartBound @@ -189,7 +192,7 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() PartBound%Reactive(SurfChemReac(iReac)%Boundaries) = .TRUE. END IF DO iReac2 = 1, SurfChemReac(iReac)%NumOfBounds - SurfChem%BoundisChemSurf(SurfChemReac(iReac)%Boundaries(iReac2)) = .TRUE. + SurfChem%BoundIsChemSurf(SurfChemReac(iReac)%Boundaries(iReac2)) = .TRUE. END DO DoChemSurface = .TRUE. ! Select pure surface reactions @@ -203,9 +206,9 @@ SUBROUTINE InitializeVariablesSurfaceChemistry() END SELECT END DO -! Determine the number of boundaries with a surface reaction on them +! Determine the number of boundaries with a surface reaction with a surface flux on them DO iBound = 1, nPartBound - IF (SurfChem%BoundisChemSurf(iBound)) THEN + IF (SurfChem%BoundIsChemSurf(iBound)) THEN SurfChem%CatBoundNum = SurfChem%CatBoundNum + 1 END IF END DO @@ -506,7 +509,7 @@ SUBROUTINE InitSurfaceModelChemistry() USE MOD_Globals USE MOD_PARTICLE_Vars ,ONLY: nSpecies USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared -USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, nSurfSample, nComputeNodeSurfTotalSides, SurfSide2GlobalSide +USE MOD_Particle_Boundary_Vars ,ONLY: SurfTotalSideOnNode, PartBound, nSurfSample, nComputeNodeSurfTotalSides, SurfSide2GlobalSide USE MOD_SurfaceModel_Vars ,ONLY: ChemSampWall, ChemDesorpWall, ChemWallProp ! USE MOD_Particle_Surfaces_Vars #if USE_MPI @@ -526,49 +529,49 @@ SUBROUTINE InitSurfaceModelChemistry() INTEGER :: iSide, iSpec, iBC, SideID !=================================================================================================================================== -ALLOCATE( ChemSampWall(1:nSpecies,2,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) +IF(.NOT.SurfTotalSideOnNode) RETURN + +ALLOCATE(ChemSampWall(1:nSpecies,2,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) ChemSampWall = 0.0 ALLOCATE(ChemDesorpWall(1:nSpecies,1,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) ChemDesorpWall = 0.0 #if USE_MPI - CALL Allocate_Shared((/nSpecies,2,nSurfSample,nSurfSample,nComputeNodeSurfTotalSides/),ChemSampWall_Shared_Win,ChemSampWall_Shared) - CALL MPI_WIN_LOCK_ALL(0,ChemSampWall_Shared_Win,IERROR) - IF (myComputeNodeRank.EQ.0) THEN - ChemSampWall_Shared = 0. - END IF - CALL BARRIER_AND_SYNC(ChemSampWall_Shared_Win,MPI_COMM_SHARED) - - CALL Allocate_Shared((/nSpecies,2,nSurfSample,nSurfSample,nComputeNodeSurfTotalSides/),ChemWallProp_Shared_Win,ChemWallProp_Shared) - CALL MPI_WIN_LOCK_ALL(0,ChemWallProp_Shared_Win,IERROR) - ChemWallProp => ChemWallProp_Shared - IF (myComputeNodeRank.EQ.0) THEN - ChemWallProp = 0. - - DO iSide = 1, nComputeNodeSurfTotalSides - ! get global SideID. This contains only nonUniqueSide, no special mortar treatment required - SideID = SurfSide2GlobalSide(SURF_SIDEID,iSide) - iBC = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) - DO iSpec = 1, nSpecies - ! Initial surface coverage - ChemWallProp(iSpec,1,:,:,iSide) = PartBound%CoverageIni(iBC, iSpec) - END DO - END DO +CALL Allocate_Shared((/nSpecies,2,nSurfSample,nSurfSample,nComputeNodeSurfTotalSides/),ChemSampWall_Shared_Win,ChemSampWall_Shared) +CALL MPI_WIN_LOCK_ALL(0,ChemSampWall_Shared_Win,IERROR) +IF (myComputeNodeRank.EQ.0) THEN + ChemSampWall_Shared = 0. +END IF +CALL BARRIER_AND_SYNC(ChemSampWall_Shared_Win,MPI_COMM_SHARED) - END IF - CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win,MPI_COMM_SHARED) -#else - ALLOCATE(ChemWallProp(1:nSpecies,2,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) - ChemWallProp = 0.0 +CALL Allocate_Shared((/nSpecies,2,nSurfSample,nSurfSample,nComputeNodeSurfTotalSides/),ChemWallProp_Shared_Win,ChemWallProp_Shared) +CALL MPI_WIN_LOCK_ALL(0,ChemWallProp_Shared_Win,IERROR) +ChemWallProp => ChemWallProp_Shared +IF (myComputeNodeRank.EQ.0) THEN + ChemWallProp = 0. DO iSide = 1, nComputeNodeSurfTotalSides ! get global SideID. This contains only nonUniqueSide, no special mortar treatment required SideID = SurfSide2GlobalSide(SURF_SIDEID,iSide) iBC = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) DO iSpec = 1, nSpecies - ! Initial surface coverage + ! Initial surface coverage ChemWallProp(iSpec,1,:,:,iSide) = PartBound%CoverageIni(iBC, iSpec) END DO END DO +END IF +CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win,MPI_COMM_SHARED) +#else +ALLOCATE(ChemWallProp(1:nSpecies,2,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides)) +ChemWallProp = 0.0 +DO iSide = 1, nComputeNodeSurfTotalSides + ! get global SideID. This contains only nonUniqueSide, no special mortar treatment required + SideID = SurfSide2GlobalSide(SURF_SIDEID,iSide) + iBC = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)) + DO iSpec = 1, nSpecies + ! Initial surface coverage + ChemWallProp(iSpec,1,:,:,iSide) = PartBound%CoverageIni(iBC, iSpec) + END DO +END DO #endif /*USE_MPI*/ @@ -589,7 +592,7 @@ END SUBROUTINE InitSurfaceModelChemistry SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) ! MODULES ! ROUTINES / FUNCTIONS -USE MOD_Globals ,ONLY: abort,UNITVECTOR,OrthoNormVec +USE MOD_Globals ,ONLY: abort,UNITVECTOR,OrthoNormVec,myRank USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr USE MOD_part_operations ,ONLY: RemoveParticle, CreateParticle USE MOD_part_tools ,ONLY: VeloFromDistribution, GetParticleWeight @@ -722,7 +725,7 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) END IF ! Check whether the maximum coverage value is reached: - IF(Theta.GE.0.0 .AND. TotalCoverage.LT.MaxTotalCov) THEN + IF(Theta.GT.0.0 .AND. TotalCoverage.LT.MaxTotalCov) THEN Theta = Theta**DissOrder ! Kisliuk model (for EqConstant=1 and MaxCoverage=1: Langmuir model) StickCoeff = S_0 * (1.0 + EqConstant * (1.0/Theta - 1.0))**(-1.0) @@ -814,7 +817,7 @@ SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) END DO !iReac ! ---------------------------------------------------------------------------------------------------------------------------------- -! 3.) Choose the occuring pathway by comparison with a random number +! 3.) Choose the occurring pathway by comparison with a random number ! Rescale the probability (ER-Reaction) and the sticking coefficient (adsorption) IF ((Prob+StickCoeff).GT.0.) THEN CALL RANDOM_NUMBER(RanNum) @@ -1058,4 +1061,238 @@ SUBROUTINE SurfaceModelEventProbability(PartID,SideID,GlobalElemID,n_loc,PartPos END SUBROUTINE SurfaceModelEventProbability + +SUBROUTINE SurfChemCoverage() +!=================================================================================================================================== +!> calculation of the surface coverage +!> 1) calculation of the coverage (needed without MPI as well) +!> 2) compute-node leaders ensure synchronization of shared arrays on their node +!=================================================================================================================================== +! MODULES ! +!----------------------------------------------------------------------------------------------------------------------------------! +USE MOD_Globals +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound +USE MOD_Particle_Vars ,ONLY: nSpecies +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp +USE MOD_Particle_Boundary_vars ,ONLY: SurfSideArea, SurfSide2GlobalSide +USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared +USE MOD_Particle_Boundary_Vars ,ONLY: SurfTotalSideOnNode, nComputeNodeSurfTotalSides +#if USE_MPI +USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC +USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED, nComputeNodeProcessors +USE MOD_MPI_Shared_Vars ,ONLY: myComputeNodeRank +USE MOD_SurfaceModel_Vars ,ONLY: ChemSampWall_Shared, ChemSampWall_Shared_Win +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared_Win +#else +USE MOD_SurfaceModel_Vars ,ONLY: ChemSampWall +#endif /*USE_MPI*/ +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------! +! INPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------! +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: iSide, firstSide, lastSide, GlobalSideID, locBCID, iSpec +!=================================================================================================================================== +! nodes without sampling surfaces do not take part in this routine +IF (.NOT.SurfTotalSideOnNode) RETURN + +#if USE_MPI +ASSOCIATE(ChemSampWall => ChemSampWall_Shared) +firstSide = INT(REAL( myComputeNodeRank *nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors))+1 +lastSide = INT(REAL((myComputeNodeRank+1)*nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors)) +#else +firstSide = 1 +lastSide = nComputeNodeSurfTotalSides +#endif /*USE_MPI*/ + +! calculate the coverage from the sampled values (also required in the MPI=OFF case) and nullify the ChemSampWall array +! in the case of MPI, ChemSampWall is an associate to the _Shared variant +DO iSide = firstSide, lastSide + GlobalSideID = SurfSide2GlobalSide(SURF_SIDEID,iSide) + locBCID = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,GlobalSideID)) + DO iSpec = 1, nSpecies + IF (PartBound%LatticeVec(locBCID).GT.0.) THEN + ! update the surface coverage (direct calculation of the number of surface atoms) + ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall(iSpec,1,:,:,iSide) * PartBound%LatticeVec(locBCID)* & + PartBound%LatticeVec(locBCID)/(PartBound%MolPerUnitCell(locBCID)*SurfSideArea(:,:,iSide)) + ELSE + ! update the surface coverage (calculation with a surface monolayer) + ChemWallProp(iSpec,1,:,:,iSide) = ChemWallProp(iSpec,1,:,:,iSide) + ChemSampWall(iSpec,1,:,:,iSide) / & + (10.**(19)*SurfSideArea(:,:,iSide)) + END IF + ! calculate the heat flux on the surface subside + ChemWallProp(iSpec,2,:,:,iSide) = ChemWallProp(iSpec,2,:,:,iSide) + ChemSampWall(iSpec,2,:,:,iSide) + END DO + ChemSampWall(:,:,:,:,iSide) = 0.0 +END DO + +#if USE_MPI +! ensure synchronization on compute node +CALL BARRIER_AND_SYNC(ChemSampWall_Shared_Win ,MPI_COMM_SHARED) +CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win ,MPI_COMM_SHARED) +END ASSOCIATE +#endif /*USE_MPI*/ + +END SUBROUTINE SurfChemCoverage + + +#if USE_MPI +SUBROUTINE ExchangeSurfChemCoverage() +!=================================================================================================================================== +!> 1) compute-node leaders communicate the calculated coverage to the halo sides +!> 2) compute-node leaders ensure synchronization of shared arrays on their node +!=================================================================================================================================== +! MODULES ! +!----------------------------------------------------------------------------------------------------------------------------------! +USE MOD_Globals +USE MOD_Particle_Vars ,ONLY: nSpecies +USE MOD_Particle_Boundary_Vars ,ONLY: SurfTotalSideOnNode +USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC +USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED,MPI_COMM_LEADERS_SURF +USE MOD_MPI_Shared_Vars ,ONLY: nSurfLeaders,myComputeNodeRank,mySurfRank +USE MOD_SurfaceModel_Vars ,ONLY: ChemWallProp_Shared, ChemWallProp_Shared_Win +USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample +USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide, SurfMapping +USE MOD_Particle_MPI_Vars ,ONLY: SurfSendBuf,SurfRecvBuf +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------! +! INPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------! +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: iSpec,iProc,SideID,iPos,p,q +INTEGER :: MessageSize,iSurfSide,SurfSideID +INTEGER :: nValues, SurfChemVarNum, SurfChemSampSize +INTEGER :: RecvRequest(0:nSurfLeaders-1),SendRequest(0:nSurfLeaders-1) +!=================================================================================================================================== +! nodes without sampling surfaces do not take part in this routine +IF (.NOT.SurfTotalSideOnNode) RETURN + +! communication of the coverage values to the halo region of compute nodes +! swap the receive/send array, send coverage values to the sides, where you would receive from +IF (myComputeNodeRank.EQ.0) THEN + SurfChemVarNum = 2 + SurfChemSampSize = SurfChemVarNum * nSpecies + nValues = SurfChemSampSize*nSurfSample**2 + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE + + ! Only open recv buffer if we would have sent to this leader node (thus SendSurfSides) + IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE + + ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc + MessageSize = SurfMapping(iProc)%nSendSurfSides * nValues + CALL MPI_IRECV( SurfSendBuf(iProc)%content & + , MessageSize & + , MPI_DOUBLE_PRECISION & + , iProc & + , 1209 & + , MPI_COMM_LEADERS_SURF & + , RecvRequest(iProc) & + , IERROR) + END DO ! iProc + + ! build message + DO iProc = 0,nSurfLeaders-1 + ! Ignore myself + IF (iProc .EQ. mySurfRank) CYCLE + + ! Only assemble message if we would have received from this leader node + IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE + + ! Nullify everything + iPos = 0 + SurfRecvBuf(iProc)%content = 0. + + DO iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides + ! Get the right side id through the receive global id mapping + SideID = SurfMapping(iProc)%RecvSurfGlobalID(iSurfSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + ! Assemble message + DO q = 1,nSurfSample + DO p = 1,nSurfSample + DO iSpec =1, nSpecies + SurfRecvBuf(iProc)%content(iPos+1:iPos+SurfChemVarNum) = ChemWallProp_Shared(iSpec,:,p,q,SurfSideID) + iPos = iPos + SurfChemVarNum + END DO + END DO ! p=0,nSurfSample + END DO ! q=0,nSurfSample + END DO ! iSurfSide=1,SurfMapping(iProc)%nRecvSurfSides + END DO + + ! send message + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE + + ! Only open recv buffer if we are expecting sides from this leader node + IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE + + ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc + MessageSize = SurfMapping(iProc)%nRecvSurfSides * nValues + CALL MPI_ISEND( SurfRecvBuf(iProc)%content & + , MessageSize & + , MPI_DOUBLE_PRECISION & + , iProc & + , 1209 & + , MPI_COMM_LEADERS_SURF & + , SendRequest(iProc) & + , IERROR) + END DO ! iProc + + ! Finish received number of sampling surfaces + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE + + IF (SurfMapping(iProc)%nRecvSurfSides.NE.0) THEN + CALL MPI_WAIT(SendRequest(iProc),MPIStatus,IERROR) + IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) + END IF + + IF (SurfMapping(iProc)%nSendSurfSides.NE.0) THEN + CALL MPI_WAIT(RecvRequest(iProc),MPIStatus,IERROR) + IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR) + END IF + END DO ! iProc + + ! add data do my list + DO iProc = 0,nSurfLeaders-1 + ! ignore myself + IF (iProc.EQ.mySurfRank) CYCLE + + ! Only open recv buffer if we would have sent this leader node + IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE + + iPos=0 + DO iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides + SideID = SurfMapping(iProc)%SendSurfGlobalID(iSurfSide) + SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID) + ! Store values in the halo regions + DO q = 1,nSurfSample + DO p = 1,nSurfSample + DO iSpec =1, nSpecies + ChemWallProp_Shared(iSpec,:,p,q,SurfSideID) = SurfSendBuf(iProc)%content(iPos+1:iPos+SurfChemVarNum) + iPos = iPos + SurfChemVarNum + END DO + END DO ! p=0,nSurfSample + END DO ! q=0,nSurfSample + END DO ! iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides + ! Nullify buffer + SurfSendBuf(iProc)%content = 0. + END DO ! iProc +END IF + +! ensure synchronization on compute node +CALL BARRIER_AND_SYNC(ChemWallProp_Shared_Win ,MPI_COMM_SHARED) + +END SUBROUTINE ExchangeSurfChemCoverage +#endif /*USE_MPI*/ + END MODULE MOD_SurfaceModel_Chemistry diff --git a/src/particles/surfacemodel/surfacemodel_init.f90 b/src/particles/surfacemodel/surfacemodel_init.f90 index 6654b6298..6b518efec 100644 --- a/src/particles/surfacemodel/surfacemodel_init.f90 +++ b/src/particles/surfacemodel/surfacemodel_init.f90 @@ -191,7 +191,8 @@ SUBROUTINE FinalizeSurfaceModel() USE MOD_Globals USE MOD_SurfaceModel_Vars #if USE_MPI -USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED +USE MOD_Particle_Boundary_Vars ,ONLY: SurfTotalSideOnNode +USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED USE MOD_MPI_Shared #endif ! IMPLICIT VARIABLE HANDLING @@ -206,10 +207,11 @@ SUBROUTINE FinalizeSurfaceModel() SDEALLOCATE(SurfModResultSpec) SDEALLOCATE(SurfModEnergyDistribution) SDEALLOCATE(SurfChemReac) -SDEALLOCATE(SurfChem%BoundisChemSurf) +SDEALLOCATE(SurfChem%BoundIsChemSurf) SDEALLOCATE(SurfChem%PSMap) SDEALLOCATE(SurfChem%EventProbInfo) #if USE_MPI +IF(SurfTotalSideOnNode) THEN CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR) IF(DoChemSurface) THEN CALL UNLOCK_AND_FREE(ChemWallProp_Shared_Win) @@ -217,15 +219,12 @@ SUBROUTINE FinalizeSurfaceModel() END IF ADEALLOCATE(ChemSampWall_Shared) ADEALLOCATE(ChemWallProp_Shared) -#else +END IF #endif SDEALLOCATE(ChemDesorpWall) -ADEALLOCATE(ChemSampWall) +SDEALLOCATE(ChemSampWall) ADEALLOCATE(ChemWallProp) -SNULLIFY(SurfChem%Surfaceflux) -SDEALLOCATE(SurfChem%SFAux) - SDEALLOCATE(SurfModEmissionEnergy) SDEALLOCATE(SurfModEmissionYield) SDEALLOCATE(StickingCoefficientData) diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90 index 79ede1323..d968661e1 100644 --- a/src/particles/surfacemodel/surfacemodel_vars.f90 +++ b/src/particles/surfacemodel/surfacemodel_vars.f90 @@ -19,7 +19,6 @@ MODULE MOD_SurfaceModel_Vars ! IMPLICIT VARIABLE HANDLING USE MOD_DSMC_Vars ,ONLY: tCollCaseInfo -USE MOD_Particle_SurfaceFlux_Vars ,ONLY: tSurfaceFlux IMPLICIT NONE PUBLIC @@ -66,14 +65,13 @@ MODULE MOD_SurfaceModel_Vars INTEGER :: NumOfReact ! Number of catalytic reactions LOGICAL :: OverwriteCatParameters ! Flag to read the cat parameters manually INTEGER :: SurfSpecies ! Bulk species of the surface, involved in the reactions - LOGICAL :: Diffusion ! Activates instantaneous diffussion over the whole boundary - LOGICAL :: TotDiffusion ! Activates instantaneous diffussion over all boundaries - INTEGER :: CatBoundNum ! Number of catalytic boundaries - LOGICAL, ALLOCATABLE :: BoundisChemSurf(:) ! Boundary with catalytic activity + LOGICAL :: Diffusion ! Activates instantaneous diffusion over the whole boundary + LOGICAL :: TotDiffusion ! Activates instantaneous diffusion over all boundaries + INTEGER :: CatBoundNum ! Number of catalytic boundaries (modelled as a surface flux) + INTEGER, ALLOCATABLE :: SurfaceFluxBC(:) ! Mapping from catalytic surface flux to corresponding boundary + LOGICAL, ALLOCATABLE :: BoundIsChemSurf(:) ! Boundary with catalytic activity TYPE(tPureSurf), ALLOCATABLE :: PSMap(:) ! Map for reactions occurring only on the surface TYPE(tCollCaseInfo), ALLOCATABLE :: CollCaseInfo(:) ! Information of collision cases (nCase) - TYPE(tSurfaceFlux), POINTER :: SurfaceFlux(:) ! Surface flux data (using the regular surface flux type) - TYPE(tSFAux), ALLOCATABLE :: SFAux(:) ! Additional surface flux data, where variables differ from the regular surface flux type ! Event probability TYPE(tEventProbInfo), ALLOCATABLE :: EventProbInfo(:) ! Number of reaction paths and their probability per species END TYPE @@ -121,19 +119,15 @@ MODULE MOD_SurfaceModel_Vars END TYPE TYPE(tSurfReactions), ALLOCATABLE :: SurfChemReac(:) -TYPE tSFAux - REAL, ALLOCATABLE :: a_nIn(:,:,:,:) ! Speed ratio projected to inwards normal (additionally to regular surface flux variable due to missing species dependency) -END TYPE - REAL,ALLOCATABLE :: ChemDesorpWall(:,:,:,:,:) ! Desorption numbers +REAL,ALLOCATABLE :: ChemSampWall(:,:,:,:,:) ! Sampling direct impact mechanism REAL,ALLOCPOINT :: ChemWallProp(:,:,:,:,:) ! Adsorption count / heat flux -REAL,ALLOCPOINT :: ChemSampWall(:,:,:,:,:) ! Sampling direct impact mechanism #if USE_MPI -REAL,ALLOCPOINT :: ChemWallProp_Shared(:,:,:,:,:) ! Adsorption count / heat flux -INTEGER :: ChemWallProp_Shared_Win -REAL,ALLOCPOINT :: ChemSampWall_Shared(:,:,:,:,:) ! Sampling direct impact mechanism +REAL,POINTER :: ChemSampWall_Shared(:,:,:,:,:)! Sampling direct impact mechanism INTEGER :: ChemSampWall_Shared_Win +REAL,POINTER :: ChemWallProp_Shared(:,:,:,:,:)! Adsorption count / heat flux +INTEGER :: ChemWallProp_Shared_Win #endif ! === SEE BC ==================================================================================================================== diff --git a/src/timedisc/timedisc_TimeStep_DSMC.f90 b/src/timedisc/timedisc_TimeStep_DSMC.f90 index 73b551c80..5cb3d3745 100644 --- a/src/timedisc/timedisc_TimeStep_DSMC.f90 +++ b/src/timedisc/timedisc_TimeStep_DSMC.f90 @@ -32,6 +32,7 @@ SUBROUTINE TimeStep_DSMC() !> Direct Simulation Monte Carlo !=================================================================================================================================== ! MODULES +USE MOD_Globals USE MOD_PreProc USE MOD_TimeDisc_Vars ,ONLY: dt, IterDisplayStep, iter, TEnd, Time #ifdef PARTICLES @@ -49,6 +50,7 @@ SUBROUTINE TimeStep_DSMC() USE MOD_Particle_SurfChemFlux USE MOD_Particle_Tracking_vars ,ONLY: tTracking,MeasureTrackTime USE MOD_Particle_Tracking ,ONLY: PerformTracking +USE MOD_SurfaceModel_Chemistry ,ONLY: SurfChemCoverage USE MOD_SurfaceModel_Porous ,ONLY: PorousBoundaryRemovalProb_Pressure USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, DoChemSurface USE MOD_vMPF ,ONLY: SplitAndMerge @@ -57,8 +59,9 @@ SUBROUTINE TimeStep_DSMC() USE MOD_Part_Tools ,ONLY: InRotRefFrameCheck USE MOD_Part_Tools ,ONLY: CalcPartSymmetryPos #if USE_MPI -USE MOD_Particle_MPI ,ONLY: IRecvNbOfParticles, MPIParticleSend,MPIParticleRecv,SendNbOfparticles USE MOD_Particle_MPI_Boundary_Sampling, ONLY: ExchangeChemSurfData +USE MOD_SurfaceModel_Chemistry ,ONLY: ExchangeSurfChemCoverage +USE MOD_Particle_MPI ,ONLY: IRecvNbOfParticles, MPIParticleSend,MPIParticleRecv,SendNbOfparticles #endif /*USE_MPI*/ #if USE_LOADBALANCE USE MOD_LoadBalance_Timers ,ONLY: LBStartTime,LBSplitTime,LBPauseTime @@ -109,12 +112,14 @@ SUBROUTINE TimeStep_DSMC() #if USE_MPI CALL ExchangeChemSurfData() #endif /*USE_MPI*/ - + CALL SurfChemCoverage() IF (time.GT.0.0) THEN CALL ParticleSurfChemFlux() CALL ParticleSurfDiffusion() END IF - +#if USE_MPI + CALL ExchangeSurfChemCoverage() +#endif /*USE_MPI*/ END IF #if USE_LOADBALANCE From e939d8fd927db344a2cbf04d45acf0b5345c56e1 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Fri, 19 Apr 2024 16:19:11 +0200 Subject: [PATCH 221/222] Missing deallocate of SurfChem%SurfaceFluxBC --- src/particles/surfacemodel/surfacemodel_init.f90 | 1 + 1 file changed, 1 insertion(+) diff --git a/src/particles/surfacemodel/surfacemodel_init.f90 b/src/particles/surfacemodel/surfacemodel_init.f90 index 6b518efec..cad43a6aa 100644 --- a/src/particles/surfacemodel/surfacemodel_init.f90 +++ b/src/particles/surfacemodel/surfacemodel_init.f90 @@ -210,6 +210,7 @@ SUBROUTINE FinalizeSurfaceModel() SDEALLOCATE(SurfChem%BoundIsChemSurf) SDEALLOCATE(SurfChem%PSMap) SDEALLOCATE(SurfChem%EventProbInfo) +SDEALLOCATE(SurfChem%SurfaceFluxBC) #if USE_MPI IF(SurfTotalSideOnNode) THEN CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR) From eac8df148ccc96a5f5a535972375f5659a03698d Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Sun, 21 Apr 2024 16:09:13 +0200 Subject: [PATCH 222/222] CAT_RATES_LH/ER: comparing number density and removed temperature --- .../CAT_RATES_ER/PartAnalyze_ref.csv | 24 +++++++++---------- .../NIG_Reservoir/CAT_RATES_ER/analyze.ini | 3 +-- .../NIG_Reservoir/CAT_RATES_ER/parameter.ini | 11 ++++----- .../CAT_RATES_LH/PartAnalyze_ref.csv | 24 +++++++++---------- .../NIG_Reservoir/CAT_RATES_LH/analyze.ini | 3 +-- .../NIG_Reservoir/CAT_RATES_LH/parameter.ini | 13 +++++----- .../surfacemodel/surfacemodel_chemistry.f90 | 11 +++++---- 7 files changed, 44 insertions(+), 45 deletions(-) diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/PartAnalyze_ref.csv b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/PartAnalyze_ref.csv index 68a3771d9..339c67b21 100644 --- a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/PartAnalyze_ref.csv +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/PartAnalyze_ref.csv @@ -1,12 +1,12 @@ -001-TIME,002-nPart-Spec-001,003-nPart-Spec-002,004-nPart-Spec-003,005-TempTra-001,006-TempTra-002,007-TempTra-003,008-TempVib001,009-TempVib002,010-XiVibMean001,011-XiVibMean002,012-TempRot001,013-TempRot002,014-TempTotal001,015-TempTotal002,016-TempTotal003 -0,4141,0,4141,989.993493710047,0,989.993493710047,0,0,0,0,0,0,989.993493710047,0,989.993493710047 -0.00000001,4136,5,4141,989.472616042198,944.950319710458,989.418858137909,0,0,0,0,0,826.762431858545,989.472616042198,897.675164569693,989.36177632779 -0.00000002,4136,5,4141,989.820896510889,937.059043429093,989.757189854186,0,0,0,0,0,826.762431858545,989.820896510889,892.940398800874,989.703919334229 -0.00000003,4133,8,4141,988.849292187099,1177.36161650225,989.213479242043,0,1034.39585713874,0,0.549306144334055,0,904.647132689776,988.849292187099,1064.92216525486,988.996257409157 -4.00000000000002E-08,4132,9,4141,988.933745506157,1181.21323342467,989.351643451403,0,987.064498469711,0,0.511685576220899,0,864.173050630354,988.933745506157,1048.14623191231,989.062437217737 -5.00000000000003E-08,4131,10,4141,988.164303543667,993.674674296939,988.177610403733,0,947.831219229027,0,0.479579054559674,0,825.292173132616,988.164303543667,928.204213957592,988.019507384319 -6.00000000000003E-08,4130,11,4141,988.163600204641,1221.53409632648,988.783517001873,0,914.642004839056,0,0.451801209052363,0,784.210316927732,988.163600204641,1035.66859281223,988.289790718691 -6.99999999999998E-08,4127,14,4141,987.874178778054,1439.48624813948,989.401000553243,0,839.275431110894,0,0.386864314443173,0,827.617788206648,987.874178778054,1169.21081866316,988.487246384524 -7.99999999999992E-08,4123,18,4141,986.611753790159,1497.45924759847,988.832293487949,0,771.895772363203,0,0.327159886574049,0,742.21577235116,986.611753790159,1169.35529502893,987.406099055142 -8.99999999999986E-08,4117,24,4141,986.247479027714,1272.28813136,987.905285271611,0,706.085019633543,0,0.26823965207235,0,1090.6482205134,986.247479027714,1174.50253666285,987.338549151656 -0.0000001,4115,26,4141,985.2498440632,1198.06863076593,986.586064409559,0,689.597238092493,0,0.253525912769564,0,1047.09323272326,985.2498440632,1116.05485997957,986.071126462096 +001-TIME,002-NumDens-Spec-001,003-NumDens-Spec-002,004-NumDens-Spec-003 +0.0000000000000000E+000,0.4140999999999998E+021,0.0000000000000000E+000,0.4140999999999998E+021 +0.9999999999999985E-008,0.4138029999999998E+021,0.2969999999999999E+018,0.4140999999999998E+021 +0.1999999999999999E-007,0.4134789999999998E+021,0.6209999999999997E+018,0.4140999999999998E+021 +0.3000000000000008E-007,0.4131919999999998E+021,0.9079999999999996E+018,0.4140999999999998E+021 +0.4000000000000017E-007,0.4129139999999998E+021,0.1185999999999999E+019,0.4140999999999998E+021 +0.5000000000000026E-007,0.4125979999999998E+021,0.1501999999999999E+019,0.4140999999999998E+021 +0.6000000000000033E-007,0.4123289999999998E+021,0.1770999999999999E+019,0.4140999999999998E+021 +0.6999999999999975E-007,0.4120519999999998E+021,0.2047999999999999E+019,0.4140999999999998E+021 +0.7999999999999918E-007,0.4117429999999998E+021,0.2356999999999999E+019,0.4140999999999998E+021 +0.8999999999999861E-007,0.4114609999999998E+021,0.2638999999999999E+019,0.4140999999999998E+021 +0.1000000000000000E-006,0.4111539999999998E+021,0.2945999999999998E+019,0.4140999999999998E+021 diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/analyze.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/analyze.ini index 688fa4207..f8ab7f94b 100644 --- a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/analyze.ini +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/analyze.ini @@ -1,6 +1,5 @@ ! PartAnalyze diff compare_data_file_name = PartAnalyze.csv compare_data_file_reference = PartAnalyze_ref.csv -compare_data_file_tolerance = 5E-2 +compare_data_file_tolerance = 20E-2 compare_data_file_tolerance_type = relative -!compare_data_file_max_differences = 2 diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/parameter.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/parameter.ini index 034efcea0..144e49f65 100644 --- a/regressioncheck/NIG_Reservoir/CAT_RATES_ER/parameter.ini +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_ER/parameter.ini @@ -18,9 +18,8 @@ useCurveds = F ProjectName = ER IterDisplayStep = 100 Part-AnalyzeStep = 100 -CalcTemp = T -CalcNumSpec = T -CalcReacRates = T +CalcTemp = F +CalcNumDens = T ! =============================================================================== ! ! CALCULATION ! =============================================================================== ! @@ -51,8 +50,8 @@ Part-Boundary6-Condition = symmetric Part-FIBGMdeltas = (/10e-6,10e-6,10e-6/) Part-nSpecies = 2 -Part-Species1-MacroParticleFactor = 100.0 -Part-Species2-MacroParticleFactor = 100.0 +Part-Species1-MacroParticleFactor = 20.0 +Part-Species2-MacroParticleFactor = 20.0 ! =============================================================================== ! ! Species1 - O ! =============================================================================== ! @@ -88,7 +87,7 @@ VisuDSMC = T Particles-DSMCReservoirSim = F Particles-DSMCReservoirSimRate = F Particles-DSMCReservoirStatistic = F -Particles-DSMC-CollisMode = 2 +Particles-DSMC-CollisMode = 2 Part-NumberOfRandomSeeds = 2 Particles-RandomSeed1 = 1 Particles-RandomSeed2 = 2 diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/PartAnalyze_ref.csv b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/PartAnalyze_ref.csv index d81b052cc..c39bf0fad 100644 --- a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/PartAnalyze_ref.csv +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/PartAnalyze_ref.csv @@ -1,12 +1,12 @@ -001-TIME,002-nPart-Spec-001,003-nPart-Spec-002,004-nPart-Spec-003,005-TempTra-001,006-TempTra-002,007-TempTra-003,008-TempVib001,009-TempVib002,010-XiVibMean001,011-XiVibMean002,012-TempRot001,013-TempRot002,014-TempTotal001,015-TempTotal002,016-TempTotal003 -0,4141,0,4141,989.993493710047,0,989.993493710047,0,0,0,0,0,0,989.993493710047,0,989.993493710047 -0.00000001,4141,12,4153,989.511954913133,961.200183840655,989.430148688026,0,886.09936620711,0,0.427491559576923,0,793.716784824363,989.511954913133,893.568247492353,989.234727730602 -0.00000002,4141,23,4164,989.870866649358,1023.36445865496,990.055869679168,0,1319.27331478339,0,0.749028955539611,0,1016.0660223835,989.870866649358,1059.37878916175,990.254796096473 -0.00000003,4141,33,4174,989.929194039475,1162.04289164254,991.289939612283,0,1303.98165555966,0,0.739441523358205,0,929.889360251637,989.929194039475,1099.43198333293,990.794932431109 -4.00000000000002E-08,4141,44,4185,989.995550972946,1252.61228143767,992.756634877474,0,1144.45957982108,0,0.631882199349233,0,970.12608622996,989.995550972946,1140.16103779276,991.574351790168 -5.00000000000003E-08,4141,56,4197,989.861910567283,1193.5126643396,992.579194868272,0,1034.39585713874,0,0.549306144334057,0,1072.34737936862,989.861910567283,1134.09363045896,991.786374783136 -6.00000000000003E-08,4141,68,4209,989.631041573506,1239.09214304213,993.661299330661,0,1058.80009402158,0,0.56821257648992,0,1059.10885126302,989.631041573506,1156.04739809018,992.319640348306 -6.99999999999998E-08,4141,81,4222,989.628711366124,1198.43467579281,993.634699788332,0,987.064498469715,0,0.511685576220902,0,1064.28201944079,989.628711366124,1130.1324516406,992.324306572717 -7.99999999999992E-08,4141,92,4233,988.699050217524,1172.93570942552,992.703248811225,0,939.990825438611,0,0.473066596859685,0,1036.7286112492,988.699050217524,1103.0274353154,991.183862745047 -8.99999999999986E-08,4141,103,4244,989.412938242455,1184.23319183344,994.141139495959,0,971.986876518091,0,0.499443396729273,0,1027.06686273766,989.412938242455,1107.80042427265,992.286150085317 -0.0000001,4141,116,4257,989.429875774754,1220.57190411911,995.728319582118,0,1019.88931308524,0,0.537908270547667,0,1067.20078072693,989.429875774754,1145.68964677623,993.687835238266 +001-TIME,002-NumDens-Spec-001,003-NumDens-Spec-002,004-NumDens-Spec-003 +0.0000000000000000E+000,0.4140999999999998E+021,0.0000000000000000E+000,0.4140999999999998E+021 +0.9999999999999985E-008,0.4140999999999998E+021,0.1191999999999999E+019,0.4152919999999998E+021 +0.1999999999999999E-007,0.4140999999999998E+021,0.2353999999999999E+019,0.4164539999999998E+021 +0.3000000000000008E-007,0.4140999999999998E+021,0.3578999999999998E+019,0.4176789999999998E+021 +0.4000000000000017E-007,0.4140999999999998E+021,0.4916999999999998E+019,0.4190169999999998E+021 +0.5000000000000026E-007,0.4140999999999998E+021,0.6364999999999997E+019,0.4204649999999998E+021 +0.6000000000000033E-007,0.4140999999999998E+021,0.7625999999999996E+019,0.4217259999999998E+021 +0.6999999999999975E-007,0.4140999999999998E+021,0.8885999999999996E+019,0.4229859999999998E+021 +0.7999999999999918E-007,0.4140999999999998E+021,0.9998999999999996E+019,0.4240989999999998E+021 +0.8999999999999861E-007,0.4140999999999998E+021,0.1125599999999999E+020,0.4253559999999998E+021 +0.1000000000000000E-006,0.4140999999999998E+021,0.1250599999999999E+020,0.4266059999999998E+021 diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/analyze.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/analyze.ini index 688fa4207..2061a875b 100644 --- a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/analyze.ini +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/analyze.ini @@ -1,6 +1,5 @@ ! PartAnalyze diff compare_data_file_name = PartAnalyze.csv compare_data_file_reference = PartAnalyze_ref.csv -compare_data_file_tolerance = 5E-2 +compare_data_file_tolerance = 30E-2 compare_data_file_tolerance_type = relative -!compare_data_file_max_differences = 2 diff --git a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/parameter.ini b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/parameter.ini index 05eddaff1..268f3a946 100644 --- a/regressioncheck/NIG_Reservoir/CAT_RATES_LH/parameter.ini +++ b/regressioncheck/NIG_Reservoir/CAT_RATES_LH/parameter.ini @@ -18,9 +18,8 @@ useCurveds = F ProjectName = LH IterDisplayStep = 100 Part-AnalyzeStep = 100 -CalcTemp = T -CalcNumSpec = T -CalcReacRates = T +CalcTemp = F +CalcNumDens = T ! =============================================================================== ! ! CALCULATION ! =============================================================================== ! @@ -52,8 +51,8 @@ Part-Boundary6-Condition = symmetric Part-FIBGMdeltas = (/10e-6,10e-6,10e-6/) Part-nSpecies = 2 -Part-Species1-MacroParticleFactor = 100.0 -Part-Species2-MacroParticleFactor = 100.0 +Part-Species1-MacroParticleFactor = 20.0 +Part-Species2-MacroParticleFactor = 20.0 ! =============================================================================== ! ! Species1 - O ! =============================================================================== ! @@ -76,7 +75,7 @@ Surface-NumOfReactions = 1 Surface-Reaction1-SurfName = LH Surface-Reaction1-Type = LHD Surface-Reaction1-Reactants = (/1,1/) -Surface-Reaction1-Products = (/2,0,0/) +Surface-Reaction1-Products = (/2,0,0/) Surface-Reaction1-NumOfBoundaries = 1 Surface-Reaction1-Boundaries = 1 Surface-Reaction1-Energy = 19275.36 @@ -89,7 +88,7 @@ VisuDSMC = T Particles-DSMCReservoirSim = F Particles-DSMCReservoirSimRate = F Particles-DSMCReservoirStatistic = F -Particles-DSMC-CollisMode = 2 +Particles-DSMC-CollisMode = 2 Part-NumberOfRandomSeeds = 2 Particles-RandomSeed1 = 1 Particles-RandomSeed2 = 2 diff --git a/src/particles/surfacemodel/surfacemodel_chemistry.f90 b/src/particles/surfacemodel/surfacemodel_chemistry.f90 index 394c85a12..33f53b74a 100644 --- a/src/particles/surfacemodel/surfacemodel_chemistry.f90 +++ b/src/particles/surfacemodel/surfacemodel_chemistry.f90 @@ -583,7 +583,7 @@ END SUBROUTINE InitSurfaceModelChemistry !> 0.) Determine the surface parameters: Coverage and number of surface molecules !> 1.) Calculate the sticking coefficient by the Kisliuk model (adsorption) !> 2.) Calculate the reaction probability by the Arrhenius equation (bias-free for multiple channels) -!> 3.) Choose the occuring pathway by comparison with a random number +!> 3.) Choose the occurring pathway by comparison with a random number !> 4.) Perform the chosen process !> a.) Adsorption: delete the incoming particle and update the surface values, for the special case of dissociative adsorption, !> the dissociated half is inserted in the gas phase @@ -592,7 +592,7 @@ END SUBROUTINE InitSurfaceModelChemistry SUBROUTINE SurfaceModelChemistry(PartID,SideID,GlobalElemID,n_Loc,PartPosImpact) ! MODULES ! ROUTINES / FUNCTIONS -USE MOD_Globals ,ONLY: abort,UNITVECTOR,OrthoNormVec,myRank +USE MOD_Globals ,ONLY: abort,UNITVECTOR,OrthoNormVec USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr USE MOD_part_operations ,ONLY: RemoveParticle, CreateParticle USE MOD_part_tools ,ONLY: VeloFromDistribution, GetParticleWeight @@ -948,7 +948,9 @@ END SUBROUTINE SurfaceModelChemistry !=================================================================================================================================== -!> +!> Perform a simple surface reaction based on a fixed probability +!> 1.) Check whether species has any reactions to perform at the boundary and select reaction path +!> 2.) Perform the selected reaction path !=================================================================================================================================== SUBROUTINE SurfaceModelEventProbability(PartID,SideID,GlobalElemID,n_loc,PartPosImpact) ! MODULES @@ -1004,7 +1006,7 @@ SUBROUTINE SurfaceModelEventProbability(PartID,SideID,GlobalElemID,n_loc,PartPos IF(SurfChem%EventProbInfo(SpecID)%NumOfReactionPaths.EQ.0) THEN PathTodo = 0 ELSE -! 2a.) Determine which reaction path to follow +! 1a.) Determine which reaction path to follow CALL RANDOM_NUMBER(RanNum) DO iPath = 1, SurfChem%EventProbInfo(SpecID)%NumOfReactionPaths TotalProb = TotalProb + SurfChem%EventProbInfo(SpecID)%ReactionProb(iPath) @@ -1015,6 +1017,7 @@ SUBROUTINE SurfaceModelEventProbability(PartID,SideID,GlobalElemID,n_loc,PartPos END DO END IF +! 2.) Perform the selected reaction path IF(PathTodo.GT.0) THEN ReacTodo = SurfChem%EventProbInfo(SpecID)%ReactionIndex(PathTodo) NumProd = COUNT(SurfChemReac(ReacTodo)%Products(:).GT.0)