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)
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)
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)
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)