예제 #1
0
def test_equation_solvers():
    

    N = 20
    Tn = 40
    T = 1

    mesh = UnitIntervalMesh(N)
    V = FunctionSpace(mesh,"CG",1)

    test1 = HeatControl(V,mesh)
    
    r = Expression('sin(2*pi*x[0])')
    ic_expression = Expression('10*x[0]*(1-x[0])')
    ic = project(ic_expression,V)

    RHS = []

    for i in range(Tn+1):
        RHS.append(project(Constant(0.0),V))


    ut = project(r,V)
    opt = {'c' : 1,'rhs':RHS,'uT':ut,'T':T}

    #test1.PDE_solver(ic,opt,0,T,Tn,show_plot=True)
    test1.adjoint_solver(ic,opt,0,T,Tn,show_plot=True)
예제 #2
0
def test_problem(N,Tn,T,m):


    mesh = UnitIntervalMesh(N)
    V = FunctionSpace(mesh,"CG",1)

    test1 = HeatControl(V,mesh)
    test2 = HeatControl(V,mesh)
    
    r = Expression('sin(2*pi*x[0])')
    ic_expression = Expression('10*x[0]*(1-x[0])')
    ic = project(ic_expression,V)

    RHS1 = []
    RHS2 = []
    
    
    for i in range(Tn+1):
        RHS1.append(project(Constant(0.0),V))
        RHS2.append(project(Constant(0.0),V))


    ut = project(r,V)
    
    opt1 = {'c' : 0.01,'rhs':RHS1,'uT':ut,'T':T,'alpha':10}
    opt2 ={'c' : 0.01,'rhs':RHS2,'uT':ut,'T':T,'alpha':10}


    start = 0
    end = T

    res1 = test1.solver(opt1,ic,start,end,Tn,algorithm='my_steepest_decent')
    #res2 = test2.penalty_solver(opt2,ic,start,end,Tn,m,[1],algorithm='my_steepest_decent')
    res2=test2.PPCSD_solver(opt2,ic,start,end,Tn,m,[10])


    print res1.val(),res1.niter,res2.niter,res2.val()
    
    print res1.x
    test1.PDE_solver(ic,opt1,start,end,Tn,show_plot=True)