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
   -echo    true
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
   -echo    true
   -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
