示例#1
0
def Solve2(mydomain,height):
    print("Partially constraint solution")
    l=[1.,1.,1.]
    l[mydomain.getDim()-1]=height
    print(l)
    cf=ContinuousFunction(mydomain)
    x=cf.getX()
    #construct exact solution:
    u_ex=Scalar(1.,cf)
    for i in range(mydomain.getDim()):
      u_ex*=x[i]*(2*l[i]-x[i])
    #construct mask:
    msk=Scalar(0.,cf)
    for i in range(mydomain.getDim()):
      msk+=whereZero(x[i])
    #construct right hand side 
    f=Scalar(0,cf)
    for i in range(mydomain.getDim()):
       f_p=Scalar(1,cf)
       for j in range(mydomain.getDim()):
          if i==j:
             f_p*=2.
          else:
             f_p*=x[j]*(2*l[j]-x[j])
       f+=f_p
    mypde=Poisson(mydomain)
    mypde.setTolerance(1.e-10)
    mypde.setValue(f=f,q=msk)
    u=mypde.getSolution()
    error=Lsup(u-u_ex)/Lsup(u_ex)
    print("error = ",error)
    return error
def Solve2(mydomain, height):
    print("Partially constraint solution")
    l = [1., 1., 1.]
    l[mydomain.getDim() - 1] = height
    print(l)
    cf = ContinuousFunction(mydomain)
    x = cf.getX()
    #construct exact solution:
    u_ex = Scalar(1., cf)
    for i in range(mydomain.getDim()):
        u_ex *= x[i] * (2 * l[i] - x[i])
    #construct mask:
    msk = Scalar(0., cf)
    for i in range(mydomain.getDim()):
        msk += whereZero(x[i])
    #construct right hand side
    f = Scalar(0, cf)
    for i in range(mydomain.getDim()):
        f_p = Scalar(1, cf)
        for j in range(mydomain.getDim()):
            if i == j:
                f_p *= 2.
            else:
                f_p *= x[j] * (2 * l[j] - x[j])
        f += f_p
    mypde = Poisson(mydomain)
    mypde.setTolerance(1.e-10)
    mypde.setValue(f=f, q=msk)
    u = mypde.getSolution()
    error = Lsup(u - u_ex) / Lsup(u_ex)
    print("error = ", error)
    return error