@@ -19,6 +19,9 @@ AMREX_GPU_MANAGED amrex::Real MFsurfchem::e_beta;
1919AMREX_GPU_MANAGED int MFsurfchem::splitting_MFsurfchem;
2020AMREX_GPU_MANAGED int MFsurfchem::conversion_MFsurfchem;
2121
22+ AMREX_GPU_MANAGED int MFsurfchem::mean_MFsurfchem;
23+ AMREX_GPU_MANAGED GpuArray<amrex::Real, MAX_SPECIES > MFsurfchem::mean_pressure;
24+
2225void InitializeMFSurfchemNamespace ()
2326{
2427 // extract inputs parameters
@@ -87,6 +90,15 @@ void InitializeMFSurfchemNamespace()
8790 if ( (n_ads_spec + conversion_MFsurfchem) > nspecies) {
8891 Abort (" ERROR: desorption species is not included in nspecies" );
8992 }
93+
94+ // Use equilibrium (mean) values of pressure and temperature to calculate adsorption rate
95+ mean_MFsurfchem = 0 ; // default value
96+ pp.query (" mean_MFsurfchem" ,mean_MFsurfchem);
97+ if (mean_MFsurfchem) {
98+ std::vector<amrex::Real> mean_pressure_tmp (MAX_SPECIES );
99+ pp.queryarr (" mean_pressure" ,mean_pressure_tmp,0 ,n_ads_spec); // mean partial pressure of adsorption species
100+ for (int m=0 ;m<n_ads_spec;m++) mean_pressure[m] = mean_pressure_tmp[m];
101+ }
90102 return ;
91103}
92104
@@ -172,8 +184,17 @@ void sample_MFsurfchem(MultiFab& cu, MultiFab& prim, MultiFab& surfcov, MultiFab
172184
173185 amrex::Real theta = surfcov_arr (i,j,k,m);
174186
175- amrex::Real meanNads = ads_rate_const[m]*pres*(1 -sumtheta)*Ntot*dt*pow (tempratio,k_beta);
176- amrex::Real meanNdes = des_rate[m]*theta*Ntot*dt;
187+ amrex::Real meanNads;
188+ amrex::Real meanNdes;
189+
190+ if (mean_MFsurfchem==0 ) {
191+ meanNads = ads_rate_const[m]*pres*(1 -sumtheta)*Ntot*dt*pow (tempratio,k_beta);
192+ meanNdes = des_rate[m]*theta*Ntot*dt;
193+ }
194+ else {
195+ meanNads = ads_rate_const[m]*mean_pressure[m]*(1 -sumtheta)*Ntot*dt; // tempratio = 1
196+ meanNdes = des_rate[m]*theta*Ntot*dt;
197+ }
177198
178199 amrex::Real Nads;
179200 amrex::Real Ndes;
0 commit comments