Beispiel #1
0
    def test_DLLM_valid_grad_TCl(self):
        OC, wing_param = self.__init_wing_param()
        x0 = wing_param.get_dv_array()

        def f1(x):
            wing_param.update_from_x_list(x)
            DLLM = DLLMTargetCl('Simple', wing_param, OC)
            DLLM.set_target_Cl(0.5)
            DLLM.run_direct()
            DLLM.run_post()
            func = DLLM.get_F_list()
            return func

        def df1(x):
            wing_param.update_from_x_list(x)
            DLLM = DLLMTargetCl('Simple', wing_param, OC)
            DLLM.set_target_Cl(0.5)
            DLLM.run_direct()
            DLLM.run_post()
            DLLM.run_adjoint()
            func_grad = array(DLLM.get_dF_list_dchi())
            return func_grad

        val_grad1 = FDValidGrad(2, f1, df1, fd_step=1.e-8)
        ok1, df_fd1, df1 = val_grad1.compare(x0,
                                             treshold=1.e-6,
                                             split_out=True,
                                             return_all=True)
        assert (ok1)
Beispiel #2
0
    def test_DLLM_valid_dpF_list_dpchi(self):
        OC, wing_param = self.__init_wing_param()
        DLLM = DLLMSolver('test', wing_param, OC)
        print ''
        DLLM.run_direct()
        iAoA = DLLM.get_iAoA()
        x0 = wing_param.get_dv_array()

        def f2(x):
            wing_param.update_from_x_list(x)
            DLLM.set_wing_param(wing_param)
            DLLM.comp_R(iAoA)
            DLLM.set_direct_computed()
            DLLM.run_post()
            func = DLLM.get_F_list()
            return func

        def df2(x):
            wing_param.update_from_x_list(x)
            DLLM.set_wing_param(wing_param)
            DLLM.comp_R(iAoA)
            DLLM.set_direct_computed()
            DLLM.run_post()
            func_grad = DLLM.get_dpF_list_dpchi()
            return func_grad

        val_grad2 = FDValidGrad(2, f2, df2, fd_step=1.e-8)
        ok2, df_fd2, df2 = val_grad2.compare(x0,
                                             treshold=1.e-6,
                                             split_out=True,
                                             return_all=True)
        assert (ok2)
Beispiel #3
0
    def test_DLLM_valid_grad_TLift(self):
        OC, wing_param = self.__init_wing_param()
        x0 = wing_param.get_dv_array()
        DLLM = DLLMTargetLift('Simple', wing_param, OC)
        F_list_names = DLLM.get_DLLMPost().DEF_F_LIST_NAMES
        F_list_names.remove('Lift')

        def f2(x):
            wing_param.update_from_x_list(x)
            DLLM = DLLMTargetLift('Simple', wing_param, OC)
            DLLM.set_target_Lift(769200.)
            DLLM.set_F_list_names(F_list_names)
            DLLM.run_direct()
            DLLM.run_post()
            func = DLLM.get_F_list()
            return func

        def df2(x):
            wing_param.update_from_x_list(x)
            DLLM = DLLMTargetLift('Simple', wing_param, OC)
            DLLM.set_target_Lift(769200.)
            DLLM.set_F_list_names(F_list_names)
            DLLM.run_direct()
            DLLM.run_post()
            DLLM.run_adjoint()
            func_grad = array(DLLM.get_dF_list_dchi())
            return func_grad

        val_grad2 = FDValidGrad(2, f2, df2, fd_step=1.e-8)
        ok2, df_fd2, df2 = val_grad2.compare(x0,
                                             treshold=1.e-6,
                                             split_out=True,
                                             return_all=True)
        assert (ok2)
Beispiel #4
0
    def test_DLLM_valid_dF_list_dchi(self):
        OC, wing_param = self.__init_wing_param()
        x0 = wing_param.get_dv_array()

        def f4(x):
            wing_param.update_from_x_list(x)
            DLLM = DLLMSolver('test', wing_param, OC)
            DLLM.run_direct()
            DLLM.run_post()
            func = DLLM.get_F_list()
            return func

        def df4(x):
            wing_param.update_from_x_list(x)
            DLLM = DLLMSolver('test', wing_param, OC)
            DLLM.run_direct()
            DLLM.run_post()
            DLLM.run_adjoint()
            func_grad = array(DLLM.get_dF_list_dchi())
            return func_grad

        val_grad4 = FDValidGrad(2, f4, df4, fd_step=1.e-8)
        ok4, df_fd4, df4 = val_grad4.compare(x0,
                                             treshold=1.e-6,
                                             split_out=True,
                                             return_all=True)
        assert (ok4)
Beispiel #5
0
    def test_DLLM_valid_dpF_list_dpW(self):
        OC, wing_param = self.__init_wing_param()
        DLLM = DLLMSolver('test', wing_param, OC)
        print ''
        DLLM.run_direct()
        iAoA0 = DLLM.get_iAoA()

        def f1(x):
            DLLM.comp_R(x)
            DLLM.set_direct_computed()
            DLLM.run_post()
            func = DLLM.get_F_list()
            return func

        def df1(x):
            DLLM.comp_R(x)
            DLLM.set_direct_computed()
            DLLM.run_post()
            func_grad = DLLM.get_dpF_list_dpW()
            return func_grad

        val_grad1 = FDValidGrad(2, f1, df1, fd_step=1.e-8)
        ok1, df_fd1, df1 = val_grad1.compare(iAoA0,
                                             treshold=1.e-6,
                                             return_all=True)
        assert (ok1)
Beispiel #6
0
    def test_DLLM_valid_dpF_list_dpAoA(self):
        OC, wing_param = self.__init_wing_param()
        DLLM = DLLMSolver('test', wing_param, OC)
        print ''
        DLLM.run_direct()
        iAoA = DLLM.get_iAoA()
        AoA0 = OC.get_AoA_rad()

        def f3(x):
            OC.set_AoA_rad(x[0])
            DLLM.comp_R(iAoA)
            DLLM.set_direct_computed()
            DLLM.run_post()
            func = DLLM.get_F_list()
            return func

        def df3(x):
            OC.set_AoA_rad(x[0])
            DLLM.comp_R(iAoA)
            DLLM.set_direct_computed()
            DLLM.run_post()
            func_grad = DLLM.get_dpF_list_dpAoA()
            N = len(func_grad)
            np_func_grad = zeros((N, 1))
            np_func_grad[:, 0] = func_grad[:]
            return np_func_grad

        val_grad3 = FDValidGrad(2, f3, df3, fd_step=1.e-8)
        ok3, df_fd3, df3 = val_grad3.compare([AoA0],
                                             treshold=1.e-6,
                                             split_out=True,
                                             return_all=True)
        assert (ok3)
    def test_DLLM_valid_dpLoads_dpAoA(self):
        OC, wing_param = self.__init_wing_param()
        DLLM = DLLMSolver('test', wing_param, OC)
        print ''
        DLLM.run_direct()
        iAoA0 = DLLM.get_iAoA()
        AoA0 = OC.get_AoA_rad()

        def f2(x):
            OC.set_AoA_rad(x[0])
            R = DLLM.comp_R(iAoA0)
            Post = DLLM.get_DLLMPost()
            func = Post.comp_Lift_distrib()
            return func

        def df2(x):
            OC.set_AoA_rad(x[0])
            R = DLLM.comp_R(iAoA0)
            Post = DLLM.get_DLLMPost()
            func_grad = Post.comp_dpLift_distrib_dpAoA()
            N = len(func_grad)
            np_func_grad = zeros((N, 1))
            np_func_grad[:, 0] = func_grad[:]
            return np_func_grad

        val_grad2 = FDValidGrad(2, f2, df2, fd_step=1.e-8)
        ok2, df_fd2, df2 = val_grad2.compare([AoA0],
                                             treshold=1.e-5,
                                             return_all=True)
        assert (ok2)
Beispiel #8
0
    def test_Wing_param_valid_grad_chords(self):
        wing_param = self.__init_wing_param()
        x0 = wing_param.get_dv_array()

        def f2(x):
            wing_param.update_from_x_list(x)
            func = wing_param.get_chords()
            return func

        def df2(x):
            wing_param.update_from_x_list(x)
            func_grad = wing_param.get_chords_grad()
            return func_grad

        val_grad2 = FDValidGrad(2, f2, df2, fd_step=1.e-8)
        ok2, df_fd2, df2 = val_grad2.compare(x0,
                                             treshold=1.e-6,
                                             return_all=True)
        assert (ok2)
Beispiel #9
0
    def test_Wing_param_valid_grad_XYZ(self):
        wing_param = self.__init_wing_param()
        x0 = wing_param.get_dv_array()

        def f5(x):
            wing_param.update_from_x_list(x)
            func = wing_param.get_XYZ()
            return func

        def df5(x):
            wing_param.update_from_x_list(x)
            func_grad = wing_param.get_XYZ_grad()
            return func_grad

        val_grad5 = FDValidGrad(2, f5, df5, fd_step=1.e-8)
        ok5, df_fd5, df5 = val_grad5.compare(x0,
                                             treshold=1.e-6,
                                             return_all=True)
        assert (ok5)
Beispiel #10
0
    def test_Wing_param_valid_grad_rel_thicks(self):
        wing_param = self.__init_wing_param()
        x0 = wing_param.get_dv_array()

        def f3(x):
            wing_param.update_from_x_list(x)
            func = wing_param.get_rel_thicks()
            return func

        def df3(x):
            wing_param.update_from_x_list(x)
            func_grad = wing_param.get_rel_thicks_grad()
            return func_grad

        val_grad3 = FDValidGrad(2, f3, df3, fd_step=1.e-8)
        ok3, df_fd3, df3 = val_grad3.compare(x0,
                                             treshold=1.e-6,
                                             return_all=True)
        assert (ok3)
Beispiel #11
0
    def test_Wing_param_valid_grad_twist(self):
        wing_param = self.__init_wing_param()
        x0 = wing_param.get_dv_array()

        def f1(x):
            wing_param.update_from_x_list(x)
            func = wing_param.get_twist()
            return func

        def df1(x):
            wing_param.update_from_x_list(x)
            func_grad = wing_param.get_twist_grad()
            return func_grad

        val_grad1 = FDValidGrad(2, f1, df1, fd_step=1.e-8)
        ok1, df_fd1, df1 = val_grad1.compare(x0,
                                             treshold=1.e-6,
                                             return_all=True)
        assert (ok1)
Beispiel #12
0
    def test_Wing_param_valid_grad_eta(self):
        wing_param = self.__init_wing_param()
        x0 = wing_param.get_dv_array()

        def f4(x):
            wing_param.update_from_x_list(x)
            func = wing_param.get_eta()
            return func

        def df4(x):
            wing_param.update_from_x_list(x)
            func_grad = wing_param.get_eta_grad()
            return func_grad

        val_grad4 = FDValidGrad(2, f4, df4, fd_step=1.e-8)
        ok4, df_fd4, df4 = val_grad4.compare(x0,
                                             treshold=1.e-6,
                                             return_all=True)
        assert (ok4)
Beispiel #13
0
 def test_DLLM_valid_dpR_dpthetaY(self):
     OC,wing_param = self.__init_wing_param()
     DLLM = DLLMSolver('test',wing_param,OC)
     print ''
     DLLM.run_direct()
     iAoA=DLLM.get_iAoA()
     thetaY0=wing_param.get_thetaY()
     def f3(x):
         wing_param.set_thetaY(x)
         func=DLLM.comp_R(iAoA)
         return func
     
     def df3(x):
         wing_param.set_thetaY(x)
         func_grad=DLLM.comp_dpR_dpthetaY()
         return func_grad
     
     val_grad3=FDValidGrad(2,f3,df3,fd_step=1.e-8)
     ok3,df_fd3,df3=val_grad3.compare(thetaY0,treshold=1.e-6,return_all=True)
     assert(ok3)
Beispiel #14
0
 def test_DLLM_valid_dpR_dpAoA(self):
     OC,wing_param = self.__init_wing_param()
     DLLM = DLLMSolver('test',wing_param,OC)
     print ''
     DLLM.run_direct()
     iAoA = DLLM.get_iAoA()
     AoA0=OC.get_AoA_rad()
     def f4(x):
         OC.set_AoA_rad(x[0])
         func=DLLM.comp_R(iAoA)
         return func
     
     def df4(x):
         OC.set_AoA_rad(x[0])
         func_grad=DLLM.comp_dpR_dpAoA()
         N=len(func_grad)
         np_func_grad=zeros((N,1))
         np_func_grad[:,0]=func_grad[:]
         return np_func_grad
     
     val_grad4=FDValidGrad(2,f4,df4,fd_step=1.e-8)
     ok4,df_fd4,df4=val_grad4.compare([AoA0],treshold=1.e-6,return_all=True)
     assert(ok4)
    def test_DLLM_valid_dpLoads_dpiAoA(self):
        OC, wing_param = self.__init_wing_param()
        DLLM = DLLMSolver('test', wing_param, OC)
        print ''
        DLLM.run_direct()
        iAoA0 = DLLM.get_iAoA()

        def f1(x):
            R = DLLM.comp_R(x)
            Post = DLLM.get_DLLMPost()
            func = Post.comp_Lift_distrib()
            return func

        def df1(x):
            R = DLLM.comp_R(x)
            Post = DLLM.get_DLLMPost()
            func_grad = Post.comp_dpLift_distrib_dpiAoA()
            return func_grad

        val_grad1 = FDValidGrad(2, f1, df1, fd_step=1.e-8)
        ok1, df_fd1, df1 = val_grad1.compare(iAoA0,
                                             treshold=1.e-2,
                                             return_all=True)
        assert (ok1)
print 'dv_array=', x0


def f1(x):
    wing_param.update_from_x_list(x)
    func = wing_param.get_twist()
    return func


def df1(x):
    wing_param.update_from_x_list(x)
    func_grad = wing_param.get_twist_grad()
    return func_grad


val_grad1 = FDValidGrad(2, f1, df1, fd_step=1.e-8)
ok1, df_fd1, df1 = val_grad1.compare(x0, treshold=1.e-6, return_all=True)


def f2(x):
    wing_param.update_from_x_list(x)
    func = wing_param.get_chords()
    return func


def df2(x):
    wing_param.update_from_x_list(x)
    func_grad = wing_param.get_chords_grad()
    return func_grad

config_dict['Case.DLLM.relax_factor'] = 0.99
config_dict['Case.DLLM.stop_residual'] = 1e-9
config_dict['Case.DLLM.max_iterations'] = 100

list_log = glob('*.log')
for log in list_log:
    os.remove(log)

MP = DLLMMP('Case')
MP.configure(config_dict)
MP.set_out_format('numpy')
MP.set_grad_format('numpy')

x0 = MP.get_x0()

val_grad = FDValidGrad(2, MP.run, MP.run_grad, fd_step=1.e-8)
ok, df_fd, df = val_grad.compare(x0,
                                 treshold=1.e-6,
                                 split_out=True,
                                 return_all=True)

# for j in xrange(len(df[:,0])):
#     fid=open('gradient_file'+str(j)+'.dat','w')
#     for i in xrange(len(x0)):
#         fid.write(str(i)+' '+str(df_fd[j,i])+' '+str(df[j,i])+'\n')
#     fid.close()

print '\n****************************************************'
if ok:
    print 'DLLMMP gradients are valid.'
else:
Beispiel #18
0
DLLM = DLLMSolver('Simple', wing_param, OC)
DLLM.run_direct()
iAoA0 = DLLM.get_iAoA()
AoA0 = OC.get_AoA_rad()


def f(x):
    OC.set_AoA_rad(x[0])
    func = DLLM.comp_R(iAoA0)
    return func


def df(x):
    OC.set_AoA_rad(x[0])
    func_grad = DLLM.comp_dpR_dpAoA()
    N = len(func_grad)
    np_func_grad = numpy.zeros((N, 1))
    np_func_grad[:, 0] = func_grad[:]
    return np_func_grad


val_grad = FDValidGrad(2, f, df, fd_step=1.e-8)
ok, df_fd, df = val_grad.compare([AoA0], treshold=1.e-6, return_all=True)

print '\n****************************************************'
if ok:
    print 'dpR_dpAoA is valid.'
else:
    print '!!!! dpR_dpAoA is NOT valid !!!!'
print '****************************************************'
Beispiel #19
0
config_dict['cond1.DLLM.gamma_file_name'] = 'gamma.dat'
#config_dict['cond1.DLLM.F_list_names']=['Lift','Drag','Drag_Pressure','Drag_Friction','Cl', 'Cd', 'Cdp', 'Cdf', 'LoD']
#config_dict['cond1.DLLM.F_list_names']=['Lift','Drag','Drag_Pressure','Drag_Friction','LoD']
#config_dict['cond1.DLLM.target_Cl']=0.5
#config_dict['cond1.DLLM.target_Lift']=769200.

DLLMcond1 = DLLMWrapper('cond1')
DLLMcond1.configure(config_dict)
DLLMcond1.set_out_format('numpy')
DLLMcond1.set_grad_format('numpy')

x0 = DLLMcond1.get_x0()
print 'dv array shape', x0.shape
print 'dv_array=', x0

val_grad = FDValidGrad(2, DLLMcond1.run, DLLMcond1.run_grad, fd_step=1.e-8)
ok, df_fd, df = val_grad.compare(x0,
                                 treshold=1.e-6,
                                 split_out=True,
                                 return_all=True)

for j in xrange(len(df[:, 0])):
    fid = open('gradient_file' + str(j) + '.dat', 'w')
    for i in xrange(len(x0)):
        fid.write(str(i) + ' ' + str(df_fd[j, i]) + ' ' + str(df[j, i]) + '\n')
    fid.close()

print '\n****************************************************'
if ok:
    print 'DLLMWrapper gradients are valid.'
else: