def test_run(self):
        """
        Test initialization and few iterations
        """
        #%%
        m = 'CH'  #or 'CSH'
        ll = 1  #liquid lauer in front of portlandite
        l_ch = 25  #length of portlandite
        lx = (l_ch + ll) * 1.0e-6
        ly = 2.0e-6
        dx = 1.0e-6

        domain = yantra.Domain2D(corner=(0, 0),
                                 lengths=(lx, ly),
                                 dx=dx,
                                 grid_type='nodal')
        domain.nodetype[:, ll + 1:ll + l_ch] = ct.Type.MULTILEVEL
        domain.nodetype[0, :] = ct.Type.SOLID
        domain.nodetype[-1, :] = ct.Type.SOLID
        domain.nodetype[:, -1] = ct.Type.SOLID

        #%%
        nn = '09_unit_test'
        phrqc_input = {
            'c_bc': {
                'type': 'conc',
                'value': 0.01
            },  # another option 'c_bc':{'type':'pco2', 'value': 3.4}
            'c_mlvl': {
                'type': 'conc',
                'value': '0'
            },  # another option c_mlvl':{'type':'conc', 'value': '0'}
            'c_liq': {
                'type': 'conc',
                'value': '0'
            },  # another option c_liq':{'type':'conc', 'value': '0'}
            'ca_mlvl': {
                'type': 'eq',
                'value': 'portlandite'
            },
            'ca_liq': {
                'type': 'eq',
                'value': 'portlandite'
            }
        }  # another option ca_liq':{'type':'conc', 'value': '0'} or ca_liq':{'type':'eq', 'value': 'portlandite'}

        phrqc = fn.set_phrqc_input(phrqc_input)
        fn.save_phrqc_input(phrqc, root_dir, nn)

        scale = 50  # scale of molar volume
        init_porosCH = 0.05  #initial porosity of portlandite nodes
        mvol_ratio = 3.69 / 3.31
        mvolCH = 0.0331 * scale
        mvol = [mvolCH, mvolCH * mvol_ratio]
        mvol = fn.set_mvols(mvol, ptype=m)  #m3/mol
        #max_pqty = fn.get_max_pqty(mvol) #mol/m3
        init_conc = fn.set_init_pqty(mvol, init_porosCH)
        pqty = fn.get_pqty(init_conc, domain)

        slabels = fn.set_labels(domain, m)
        D = 1.0e-09  # default diffusion coefficient in pure liquid
        porosity = fn.get_porosity(domain, pqty, mvol, m)
        app_tort_degree = 1. / 3.
        app_tort = 1. * porosity**app_tort_degree

        settings = {
            'precipitation': 'interface',  # 'interface'/'all'/'mineral' nodes
            'dissolution': 'multilevel',  #'multilevel'/'subgrid'
            'active_nodes': 'all',  # 'all'/'smart'/'interface'
            'diffusivity': {
                'type': 'fixed',  #'archie'/'fixed'/'mixed'
                'D_border': D,  #diffusivity at border
                'D_CC': 1e-11,  # fixed diffusivity in calcite node
                'D_CH': 1e-13,  # fixed diffusivity in portlandite node
            },
            'pcs_mode': {
                'pcs': True,  #Pore-Size Controlled Solubility concept
                'pores': 'block',  #'block'/'cylinder'
                'int_energy': 0.5,  # internal energy
                'pore_size': 0.01 * dx,  # threshold radius or distance/2
                'crystal_size': 0.5 * dx,  # crystal or pore length
                'pore_density':
                2000,  #pore density per um3 - only for cylinder type
            },
            'subgrid': {
                'fraction': None
            },  # fraction of interface cell number or None = porosity
            'app_tort': {
                'degree': app_tort_degree
            },
            'velocity': False,
            'bc': phrqc_input['c_bc'],
            'dx': dx,
            'Dref': D
        }

        domain_params = fn.set_domain_params(D, mvol, pqty, porosity, app_tort, slabels,
                                     input_file = root_dir + \
                                     '\\phreeqc_input\\' + nn + '.phrq')#'CH_CC-nat.phrq'
        bc_params = fn.set_bc_params(bc_slabels={'left': 100001})
        solver_params = fn.set_solver_params(
            tfact=None, smart_thres=1e-8
        )  # optional values, for time step (if tfact => tfactbased tau)

        #%%
        carb_rt = rt.CarbonationRT('MultilevelAdvectionDiffusion', domain,
                                   domain_params, bc_params, solver_params,
                                   settings)

        itr = 0
        nitr = 10
        while itr < nitr:
            carb_rt.advance()
            itr += 1
        #%%
        self.assertEqual(carb_rt.iters, nitr)
 def test_init_pqty(self):
     self.assertEqual(fn.set_init_pqty([1]), [0.9, 0.0])
     self.assertEqual(fn.set_init_pqty([1, 2], porosCH=0.2), [0.8, 0.0])