コード例 #1
0
ファイル: simplepnps.py プロジェクト: jhwnkim/nanopores
    def __init__(self, geo, phys, goals=[], iterative=False, **params):
        problems = OrderedDict([
            ("poisson", LinearSGPoissonProblem),
            ("npp", SimpleNernstPlanckProblem),
            ("npm", SimpleNernstPlanckProblem),
        ])

        def couple_poisson(unpp, unpm, geo):
            return dict(cp=unpp, cm=unpm, dx_ions=geo.dx("fluid"))

        def couple_npp(upoisson, geo, phys):
            E = -phys.grad(upoisson)
            D = phys.Dp  #geo.pwconst("Dp")
            return dict(z=1., E=E, D=D)

        def couple_npm(upoisson, geo, phys):
            E = -phys.grad(upoisson)
            D = phys.Dm  #geo.pwconst("Dm")
            return dict(z=-1., E=E, D=D)

        couplers = dict(poisson=couple_poisson, npp=couple_npp, npm=couple_npm)

        problem = CoupledProblem(problems, couplers, geo, phys, **params)
        for name in problems:
            problem.problems[name].method["iterative"] = iterative
        CoupledSolver.__init__(self, problem, goals, **params)
コード例 #2
0
ファイル: simplepnps.py プロジェクト: jhwnkim/nanopores
    def __init__(self, geo, phys, goals=[], iterative=False, **params):
        problems = OrderedDict([
            ("poisson", SimplePoissonProblem),
            ("npp", SimpleNernstPlanckProblem),
            ("npm", SimpleNernstPlanckProblem),
        ])

        def couple_poisson(unpp, unpm, geo, phys):
            f = phys.cFarad * (unpp - unpm)
            dxf = geo.dx("fluid")
            return dict(f=f, dxf=dxf)

        def couple_npp(upoisson, geo, phys):
            E = -phys.grad(upoisson)
            D = phys.Dp
            return dict(z=1., E=E, D=D)

        def couple_npm(upoisson, geo, phys):
            E = -phys.grad(upoisson)
            D = phys.Dm
            return dict(z=-1., E=E, D=D)

        couplers = dict(poisson=couple_poisson, npp=couple_npp, npm=couple_npm)

        problem = CoupledProblem(problems, couplers, geo, phys, **params)
        for name in problems:
            problem.problems[name].method["iterative"] = iterative
        CoupledSolver.__init__(self, problem, goals, **params)
コード例 #3
0
ファイル: simplepnps.py プロジェクト: jhwnkim/nanopores
    def __init__(self,
                 geo,
                 phys,
                 goals=[],
                 taylorhood=False,
                 iterative=False,
                 stokesiter=False,
                 **params):
        problems = OrderedDict([
            ("poisson", LinearSGPoissonProblem),
            ("npp", SimpleNernstPlanckProblem),
            ("npm", SimpleNernstPlanckProblem),
            ("stokes", SimpleStokesProblem),
        ])

        def couple_poisson(unpp, unpm, geo):
            return dict(cp=unpp, cm=unpm, dx_ions=geo.dx("fluid"))

        def couple_npp(upoisson, ustokes, geo, phys):
            Dp = phys.Dp
            E = -phys.grad(upoisson)
            return dict(z=1., E=E, D=Dp, ustokes=ustokes.sub(0))

        def couple_npm(upoisson, ustokes, geo, phys):
            Dm = phys.Dm
            E = -phys.grad(upoisson)
            return dict(z=-1., E=E, D=Dm, ustokes=ustokes.sub(0))

        def couple_stokes(upoisson, unpp, unpm, phys):
            v, cp, cm = upoisson, unpp, unpm
            f = -phys.cFarad * (cp - cm) * phys.grad(v)
            return dict(f=f)

        couplers = dict(poisson=couple_poisson,
                        npp=couple_npp,
                        npm=couple_npm,
                        stokes=couple_stokes)

        if taylorhood:
            params["ku"] = 2
            params["kp"] = 1
            params["beta"] = 0.
        problem = CoupledProblem(problems, couplers, geo, phys, **params)
        for name in problems:
            problem.problems[name].method["iterative"] = iterative
        problem.problems["stokes"].method["iterative"] = stokesiter
        CoupledSolver.__init__(self, problem, goals, **params)
コード例 #4
0
ファイル: simplepnps.py プロジェクト: jhwnkim/nanopores
    def __init__(self, geo, phys, goals=[], iterative=False, **params):
        problems = OrderedDict([
            ("pnp", SimplePNPProblem),
            ("stokes", SimpleStokesProblem),
        ])

        def couple_pnp(ustokes):
            return dict(ustokes=ustokes.sub(0))

        def couple_stokes(upnp, phys):
            v, cp, cm = split(upnp)  #upnp.split()
            f = -phys.cFarad * (cp - cm) * phys.grad(v)
            return dict(f=f)

        couplers = dict(pnp=couple_pnp, stokes=couple_stokes)

        problem = CoupledProblem(problems, couplers, geo, phys, **params)
        problem.problems["pnp"].method["iterative"] = iterative
        problem.problems["stokes"].method["iterative"] = iterative
        CoupledSolver.__init__(self, problem, goals, **params)