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)
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)
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)
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)
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)
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_distrib_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() Post=DLLM.get_DLLMPost() def f1(x): OC.set_AoA_rad(x[0]) R=DLLM.comp_R(iAoA0) DLLM.run_post() func=Post.Lift_distrib return func def df1(x): OC.set_AoA_rad(x[0]) R=DLLM.comp_R(iAoA0) DLLM.run_post() func_grad=Post.dpLift_distrib_dpAoA N=len(func_grad) np_func_grad=np.zeros((N,1)) np_func_grad[:,0]=func_grad[:] return np_func_grad def f2(x): OC.set_AoA_rad(x[0]) R=DLLM.comp_R(iAoA0) DLLM.run_post() func=Post.Drag_distrib return func def df2(x): OC.set_AoA_rad(x[0]) R=DLLM.comp_R(iAoA0) DLLM.run_post() func_grad=Post.dpDrag_distrib_dpAoA N=len(func_grad) np_func_grad=np.zeros((N,1)) np_func_grad[:,0]=func_grad[:] return np_func_grad val_grad1=FDValidGrad(2,f1,df1,fd_step=1.e-8) ok1,df_fd1,df1=val_grad1.compare([AoA0],treshold=1.e-6,return_all=True) val_grad2=FDValidGrad(2,f2,df2,fd_step=1.e-8) ok2,df_fd2,df2=val_grad2.compare([AoA0],treshold=1.e-6,return_all=True) norm1, norm2 = self.print_valid_FD([AoA0],'dpLift_distrib_dpAoA',df1,df_fd1,'dpDrag_distrib_dpAoA',df2,df_fd2) self.plot_valid_FD([AoA0],'dpLift_distrib_dpAoA',df1,df_fd1,'dpDrag_distrib_dpAoA',df2,df_fd2, norm1, norm2, 'Loads_distrib_dpAoA') if (ok1==True) and (ok2==True): ok = True else : ok = False assert(ok)
def test_DLLM_valid_dpLoads_distrib_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() Post=DLLM.get_DLLMPost() def f1(x): wing_param.update_from_x_list(x) DLLM.set_geom(wing_param) DLLM.comp_R(iAoA) Post.run() func=Post.Lift_distrib return func def df1(x): wing_param.update_from_x_list(x) DLLM.set_geom(wing_param) DLLM.comp_R(iAoA) Post.run() func_grad=Post.dpLift_distrib_dpchi return func_grad def f2(x): wing_param.update_from_x_list(x) DLLM.set_geom(wing_param) DLLM.comp_R(iAoA) Post.run() func=Post.Drag_distrib return func def df2(x): wing_param.update_from_x_list(x) DLLM.set_geom(wing_param) DLLM.comp_R(iAoA) Post.run() func_grad=Post.dpDrag_distrib_dpchi 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) 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) norm1, norm2 = self.print_valid_FD(x0,'dpLift_distrib_dpchi',df1,df_fd1,'dpDrag_distrib_dpchi',df2,df_fd2) self.plot_valid_FD(x0,'dpLift_distrib_dpchi',df1,df_fd1,'dpDrag_distrib_dpchi',df2,df_fd2, norm1, norm2, 'Loads_distrib_dpchi') if (ok1==True) and (ok2==True): ok = True else : ok = False assert(ok)
def test_DLLM_valid_dpR_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): func=DLLM.comp_R(x) return func def df1(x): func_grad=DLLM.comp_dpR_dpiAoA(x) 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)
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)
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)
wing_param.convert_to_design_variable('break_percent', (20., 40.)) wing_param.convert_to_design_variable('root_chord', (5., 7.)) wing_param.convert_to_design_variable('break_chord', (3., 5.)) wing_param.convert_to_design_variable('tip_chord', (1., 2.)) wing_param.convert_to_design_variable('root_height', (1., 1.5)) wing_param.convert_to_design_variable('break_height', (0.8, 1.2)) wing_param.convert_to_design_variable('tip_height', (0.2, 0.5)) wing_param.build_linear_airfoil(OC, AoA0=-2., Cm0=-0.1, set_as_ref=True) wing_param.build_airfoils_from_ref() wing_param.update() print wing_param 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[:]
wing_param=Wing_Broken('broken_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() print wing_param thetaY0=wing_param.get_thetaY() print 'thetaY0 shape',thetaY0.shape print 'thetaY0=',thetaY0 DLLM = DLLMSolver('Simple',wing_param,OC) DLLM.run_direct() iAoA=DLLM.get_iAoA() def f(x): wing_param.set_thetaY(x) DLLM.comp_R(iAoA) DLLM.set_direct_computed() DLLM.run_post() func=DLLM.get_F_list() return func def df(x): wing_param.set_thetaY(x) DLLM.set_direct_computed() DLLM.run_post() func_grad=DLLM.get_dpF_list_dpthetaY() return func_grad
wing_param.convert_to_design_variable('tip_height', (0.2, 0.5)) wing_param.build_linear_airfoil(OC, AoA0=-2., Cm0=-0.1, set_as_ref=True) wing_param.build_airfoils_from_ref() wing_param.update() print wing_param N = wing_param.get_n_sect() iAoA0 = numpy.zeros(N) DLLM = DLLMSolver('test', wing_param, OC) NRPb = NewtonRaphsonProblem(iAoA0, DLLM.comp_R, DLLM.comp_dpR_dpiAoA) NRPb.set_relax_factor(0.99) NRPb.set_stop_residual(1.e-9) NRPb.set_max_iterations(100) iAoA = NRPb.solve() DLLM.set_direct_computed() print iAoA DLLM.comp_dpR_dpchi() dpRdpthetaY = DLLM.comp_dpR_dpthetaY() print 'dpRdpthetaY=', dpRdpthetaY print DLLM.get_iAoA() DLLM.run_post() DLLM.run_adjoint()
OC.set_T0_deg(15.) OC.set_P0(101325.) OC.set_humidity(0.) OC.compute_atmosphere() wing_param=Wing_Broken('broken_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() print wing_param DLLM = DLLMSolver('Simple',wing_param,OC) DLLM.run_direct() iAoA0=DLLM.get_iAoA() print 'iAoA0 shape',iAoA0.shape print 'iAoA0=',iAoA0 def f(x): func=DLLM.comp_R(x) return func def df(x): func_grad=DLLM.comp_dpR_dpiAoA(x) return func_grad val_grad=FDValidGrad(2,f,df,fd_step=1.e-8) ok,df_fd,df=val_grad.compare(iAoA0,treshold=1.e-6,return_all=True)
wing_param.convert_to_design_variable('root_height', (1., 1.5)) wing_param.convert_to_design_variable('break_height', (0.8, 1.2)) wing_param.convert_to_design_variable('tip_height', (0.2, 0.5)) wing_param.build_linear_airfoil(OC, AoA0=-2., Cm0=-0.1, set_as_ref=True) wing_param.build_airfoils_from_ref() wing_param.update() print wing_param x0 = wing_param.get_dv_array() print 'dv array shape', x0.shape print 'dv_array=', x0 DLLM = DLLMSolver('Simple', wing_param, OC) DLLM.run_direct() iAoA = DLLM.get_iAoA() # Split validation in 2 steps since the norm depends on the function value scale... def f(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 df(x): wing_param.update_from_x_list(x)
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() N = wing_param.get_n_sect() iAoA0=numpy.zeros(N) DLLM = DLLMSolver('test',wing_param,OC) NRPb = NewtonRaphsonProblem(iAoA0, DLLM.comp_R, DLLM.comp_dpR_dpiAoA) NRPb.set_relax_factor(0.99) NRPb.set_stop_residual(1.e-9) NRPb.set_max_iterations(100) iAoA=NRPb.solve() DLLM.set_direct_computed() print iAoA DLLM.comp_dpR_dpchi() dpRdpthetaY=DLLM.comp_dpR_dpthetaY() print 'dpRdpthetaY=',dpRdpthetaY print DLLM.get_iAoA() DLLM.run_post() DLLM.run_adjoint()