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