Beispiel #1
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)
    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-6)
        ok2,df_fd2,df2=val_grad2.compare(x0,treshold=1.e-2,split_out=True,return_all=True)
        assert(ok2)
    DLLM.set_target_Lift(769200.)
    DLLM.run_direct()
    DLLM.run_post()
    DLLM.run_adjoint()
    func_grad=np.array(DLLM.get_dF_list_dchi())
    N = func_grad.shape[0]
    ndv = func_grad.shape[1]
    out_grad = np.zeros((N,ndv))
    for i in xrange(N):
        out_grad[i,:] = func_grad[i,:]/Ref_F[i]
    return out_grad

val_grad=FDValidGrad(2,f,df,fd_step=1.e-8)
ok,df_fd,df=val_grad.compare(x0,treshold=1.e-5,split_out=True,return_all=True)

for j in xrange(len(df[:,0])):
    #print 'index =',j,DLLM.get_F_list_names()[j]
    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 'target lift  = ',DLLM.get_DLLMPost().Lift, 'target =',769200.

print '\n****************************************************'
if ok:
    print 'DLLMTargetLift gradients are valid.'
else:
    print 'DLLMTargetLift gradients are not valid!'
print '****************************************************'
from DLLM.DLLMGeom.wing_elliptic import Wing_Elliptic
from DLLM.DLLMKernel.DLLMTargetLift import DLLMTargetLift

OC=OperatingCondition('cond1', atmospheric_model='ISA')
OC.set_Mach(0.8)
OC.set_AoA(3.0)
OC.set_altitude(10000.)
OC.set_T0_deg(15.)
OC.set_P0(101325.)
OC.set_humidity(0.)
OC.compute_atmosphere()

wing_param=Wing_Elliptic('elliptic_wing',n_sect=20)
wing_param.import_BC_from_file('input_parameters.par')
wing_param.build_linear_airfoil(OC, AoA0=0.0, set_as_ref=True)
wing_param.build_airfoils_from_ref()
wing_param.update()
wing_param.plot()

DLLM = DLLMTargetLift('TLift',wing_param,OC)
DLLM.set_target_Lift(769200.)
DLLM.run_direct()
DLLM.run_post()
DLLM.run_adjoint()

dF_list_dchi=DLLM.get_dF_list_dchi()

print 'Lift = ',DLLM.get_DLLMPost().Lift,' Target = ',769200.
print 'AoA = ',OC.get_AoA()

dF_list_dchi=DLLM.get_dF_list_dchi()