The following input data file performs calculations for example 12, which models the diffusion of heat and solute from a constant boundary condition at one end and a closed boundary condition at the other. The input file is simplified from that given in example 12 by eliminating one of the transport calculations and setting up the initial conditions directly with SOLUTION data blocks.
For the constant boundary condition, an analytical solution exists for the temperature and concentration as a function of time and distance. To test the accuracy of the numerical method, the TRANSPORT calculation is performed with two discretizations, a 20-cell model and a 60-cell model. For a second-order method, decreasing the cell size by a factor of three should decrease the discrepancy with the analytical solution by a factor of about nine. The deviations from the analytical solutions for each model at the end of the time step are calculated and stored with PUT statements for distances from 0.5 to 8.5 m (in 0.5 m increments) by the Basic program in the USER_PUNCH data block. The stored results are printed in an additional simulation with a USER_PRINT data block. The final simulation is a dummy calculation for pure water, none of the results are printed. However, the calculation causes USER_PRINT to be invoked. The Basic program in the USER_PRINT data block uses GET statements and prints the results stored by the USER_PUNCH Basic program during the previous TRANSPORT simulations.
Table 56. --Input data set for example 12 demonstrating second-order accuracy of the numerical method
TITLE Example 12a.--Advective and diffusive transport of heat and solutes. Constant boundary condition at one end, closed at other. The problem is designed so that temperature should equal Na-conc (in mmol/kgw) after diffusion. Compares with analytical solution for 20-cell and 60-cell models. EXCHANGE_SPECIES Na+ + X- = NaX log_k 0.0 -gamma 4.0 0.075 H+ + X- = HX log_k -99. -gamma 9.0 0.0 K+ + X- = KX log_k 0.0 -gamma 3.5 0.015 # # 20-cell model, initial conditions # SOLUTION 0 Fixed temp 24C, and NaCl conc (first type boundary cond) at inlet units mol/kgw temp 24 pH 7.0 pe 12.0 O2(g) -0.67 Na 24.e-3 Cl 24.e-3 SOLUTION 1-19 24.0 mM KNO3 units mol/kgw temp 0 # Incoming solution 0C pH 7.0 pe 12.0 O2(g) -0.67 K 24.e-3 N(5) 24.e-3 EXCHANGE 1-19 KX 0.048 SOLUTION 20 Same as soln 0 in cell 20 at closed column end (second type boundary cond) units mol/kgw temp 24 pH 7.0 pe 12.0 O2(g) -0.67 Na 24.e-3 Cl 24.e-3 EXCHANGE 20 NaX 0.048 PRINT -reset false END # # 20-cell model, transport # TRANSPORT # Diffuse 24C, NaCl solution from column end -cells 20 -shifts 1 -flow_d diffusion -bcon constant closed -length 1.0 -thermal_diffusion 3.0 # Heat is retarded equal to Na -disp 0.0 # No dispersion -diffc 0.3e-9 # m^2/s -timest 1.0e+10 # 317 years, 19 substeps will be used SELECTED_OUTPUT -file ex12a.sel -high_precision true -reset false -dist true -temp true USER_PUNCH -head Na_mmol K_mmol Cl_mmol Cl-analytic Na_analytic 10 PUNCH TOT("Na")*1000, TOT("K")*1000, TOT("Cl")*1000 # # Calculate deviation from analytical solution for Cl and Na # 20 DATA 0.254829592, -0.284496736, 1.421413741, -1.453152027, 1.061405429 30 x = DIST 40 if (x > 8.5 OR SIM_TIME <= 0) THEN END 50 IF (ABS(x MOD 0.5) > 1e-3) OR (TC <= 0) THEN END 60 READ a1, a2, a3, a4, a5 70 REM calculate error in Cl 80 Arg = x / (2*SQRT(3e-10 * SIM_TIME / 1.0)) 90 e = 1/(1 + 0.3275911 * Arg) 100 erfc_Cl = (e*(a1+e*(a2+e*(a3+e*(a4+e*a5)))))*EXP(-Arg*Arg); 110 REM calculate error in Na 120 Arg = x / (2*SQRT(3e-10 * SIM_TIME / 3.0)) 130 e = 1/(1 + 0.3275911 * Arg) 140 erfc_Na = (e*(a1+e*(a2+e*(a3+e*(a4+e*a5)))))*EXP(-Arg*Arg); 150 REM punch results 160 error_Cl = 0.024 * erfc_Cl - TOT("Cl") 170 error_Na = 0.024 * erfc_Na - TOT("Na") 180 PUNCH error_Cl, error_Na 190 REM store results 200 j = x - 0.5 210 PUT(error_Cl, SIM_NO, j, 1) 220 PUT(error_Na, SIM_NO, j, 2) 500 END END # # 60-cell model, initial conditions # SELECTED_OUTPUT -user_punch false SOLUTION 0 Fixed temp 24C, and NaCl conc (first type boundary cond) at inlet units mol/kgw temp 24 pH 7.0 pe 12.0 O2(g) -0.67 Na 24.e-3 Cl 24.e-3 SOLUTION 1-59 24.0 mM KNO3 units mol/kgw temp 0 # Incoming solution 0C pH 7.0 pe 12.0 O2(g) -0.67 K 24.e-3 N(5) 24.e-3 EXCHANGE 1-59 KX 0.048 SOLUTION 60 Same as soln 0 in cell 60 at closed column end (second type boundary cond) units mol/kgw temp 24 pH 7.0 pe 12.0 O2(g) -0.67 Na 24.e-3 Cl 24.e-3 EXCHANGE 60 NaX 0.048 END # # 60-cell model, transport # TRANSPORT # Diffuse 24C, NaCl solution from column end -cells 60 -shifts 1 -flow_d diffusion -bcon constant closed -thermal_diffusion 3.0 # Heat is retarded equal to Na -disp 0.0 # No dispersion -diffc 0.3e-9 # m^2/s -length .33333333333333333 -timest 1.0e+10 # 317 years -punch_cell 1-60 SELECTED_OUTPUT -high_precision true -user_punch true -reset false -dist true -temp true END # # Print comparison with analytical solution for # Cl and Na in 20-cell and 60-cell models # SOLUTION # Initial solution calculation for pure water # A calculation is needed to invoke USER_PRINT PRINT -reset false # Initial solution calculation not printed -user_print true SELECTED_OUTPUT -high_precision false # Controls precision for USER_PRINT too. USER_PRINT 10 PRINT " Error in Cl concentration Error in Na concentration" 20 PRINT " ------------------------- -------------------------" 30 PRINT " Distance 20-cell 60-cell 20-cell 60-cell" 40 PRINT " " 50 FOR j = 0 TO 8 60 PRINT j + 0.5, GET(2, j, 1), GET(4, j, 1), GET(2, j, 2), GET(4, j, 2) 70 NEXT j END