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_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_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_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_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_run_direct(self): OC,wing_param = self.__init_wing_param() DLLM = DLLMSolver('test',wing_param,OC) try: print '' DLLM.run_direct() ok=True except: ok=False assert(ok)
def test_DLLM_run_direct(self): OC, wing_param = self.__init_wing_param() DLLM = DLLMSolver('test', wing_param, OC) try: print '' DLLM.run_direct() ok = True except: ok = False assert (ok)
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 df(x): wing_param.update_from_x_list(x) DLLM = DLLMSolver('Simple',wing_param,OC) DLLM.run_direct() DLLM.run_post() DLLM.run_adjoint() func_grad=numpy.array(DLLM.get_dF_list_dchi()) return func_grad
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_instantiation(self): """ test class instantiation """ OC, wing_param = self.__init_wing_param() DLLM = DLLMSolver('test', wing_param, OC) assert (DLLM is not None)
def runDLLM(wing_param, OC): DLLM = DLLMSolver('SimpleM6', wing_param, OC) DLLM.run_direct() DLLM.run_post() output = DLLM.get_F_list() F_list_names = DLLM.get_F_list_names() return output, F_list_names
def __init__(self, tag, wing_param, OC): DLLMSolver.__init__(self, tag, wing_param, OC) self.__N = self.get_wing_param().get_n_sect() self.__ndv = self.get_wing_param().get_ndv() self.__R_TL = numpy.zeros(self.__N+1) self.__dpR_TL_dpW = numpy.zeros((self.__N+1,self.__N+1)) self.__dpR_TL_dpchi = numpy.zeros((self.__N+1,self.__ndv)) self.__dpF_list_dpW = None self.__target_Lift = 10000. # initialize the Newton-Raphson problem self.__NRPb = None self.__init_Newton_Raphson()
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 f(x): wing_param.update_from_x_list(x) DLLM = DLLMSolver('Simple',wing_param,OC) DLLM.run_direct() DLLM.run_post() func=DLLM.get_F_list() return func
def __init__(self, tag, geom, OC,verbose = 0, grad_active=True): self.__verbose = verbose DLLMSolver.__init__(self, tag, geom, OC, verbose = self.__verbose, grad_active=grad_active) self.__N = self.get_geom().get_n_sect() self.__ndv = self.get_geom().get_ndv() self.__R_TL = numpy.zeros(self.__N+1) self.__dpR_TL_dpW = numpy.zeros((self.__N+1,self.__N+1)) self.__dpR_TL_dpchi = numpy.zeros((self.__N+1,self.__ndv)) self.__dpF_list_dpW = None self.__target_Lift = 0. # initialize the Newton-Raphson problem self.__NRPb = None self.__init_Newton_Raphson()
def __init__(self, tag, wing_param, OC, verbose = 0): self.__verbose = verbose DLLMSolver.__init__(self, tag, wing_param, OC, verbose = self.__verbose) self.__N = self.get_wing_param().get_n_sect() self.__ndv = self.get_wing_param().get_ndv() self.__R_TCl = numpy.zeros(self.__N+1) self.__dpR_TCl_dpW = numpy.zeros((self.__N+1,self.__N+1)) self.__dpR_TCl_dpchi = numpy.zeros((self.__N+1,self.__ndv)) self.__dpF_list_dpW = None self.__target_Cl = 0.5 # initialize the Newton-Raphson problem self.__NRPb = None self.__init_Newton_Raphson()
def f(x): wing_param.update_from_x_list(x) DLLM = DLLMSolver('Meta', wing_param, OC) DLLM.run_direct() #DLLM.run_post(func_list=['Cl']) DLLM.run_post() func = DLLM.get_F_list() return func
def runDLLM(wing_param, OC): DLLM = DLLMSolver('Wing',wing_param,OC) DLLM.run_direct() DLLM.run_post() output = DLLM.get_F_list() F_list_names = DLLM.get_F_list_names() return output, F_list_names
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 __config_DLLM(self): WARNING_MSG=self.WARNING_MSG+'__config_DLLM: ' input_keys=self.__config_dict.keys() type_key = self.__tag+'.DLLM.type' type = self.__config_dict[type_key] if type not in self.POS_SOLVER: print WARNING_MSG+'solver_type = '+str(solve_type)+' not in '+str(self.POS_SOLVER)+'. Set to default solver_type = Solver' type='Solver' if type == 'Solver': self.__DLLM_solver = DLLMSolver(self.__tag,self.__wing_param,self.__OC) elif type == 'TargetCl': self.__DLLM_solver = DLLMTargetCl(self.__tag,self.__wing_param,self.__OC) target_Cl_key = self.__tag+'.DLLM.target_Cl' target_Cl = self.__config_dict[target_Cl_key] self.__DLLM_solver.set_target_Cl(target_Cl) elif type == 'TargetLift': self.__DLLM_solver = DLLMTargetLift(self.__tag,self.__wing_param,self.__OC) target_Lift_key = self.__tag+'.DLLM.target_Lift' target_Lift = self.__config_dict[target_Lift_key] self.__DLLM_solver.set_target_Lift(target_Lift) method_key = self.__tag+'.DLLM.method' if method_key in input_keys: method = self.__config_dict[method_key] self.__DLLM_solver.set_method(method) relax_factor_key = self.__tag+'.DLLM.relax_factor' if relax_factor_key in input_keys: relax_factor = self.__config_dict[relax_factor_key] self.__DLLM_solver.set_relax_factor(relax_factor) stop_residual_key = self.__tag+'.DLLM.stop_residual' if stop_residual_key in input_keys: stop_residual = self.__config_dict[stop_residual_key] self.__DLLM_solver.set_stop_residual(stop_residual) max_iterations_key = self.__tag+'.DLLM.max_iterations' if max_iterations_key in input_keys: max_iterations = self.__config_dict[max_iterations_key] self.__DLLM_solver.set_max_iterations(max_iterations) gamma_file_name_key = self.__tag+'.DLLM.gamma_file_name' if gamma_file_name_key in input_keys: gamma_file_name = self.__config_dict[gamma_file_name_key] self.__DLLM_solver.set_gamma_file_name(gamma_file_name) F_list_names_key = self.__tag+'.DLLM.F_list_names' if F_list_names_key in input_keys: F_list_names = self.__config_dict[F_list_names_key] self.__DLLM_solver.set_F_list_names(F_list_names)
def f(x): wing_param.update_from_x_list(x) DLLM = DLLMSolver('Meta',wing_param,OC) DLLM.run_direct() #DLLM.run_post(func_list=['Cl']) DLLM.run_post() func=DLLM.get_F_list() return func
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)
chords_eta = np.zeros(N+1) rel_thicks_eta = np.zeros(N+1) eta = np.zeros((3,N+1)) #-- set data twist[:] = 0. # 0. twist for all sections chords_eta[:] = 5. # 5m chord for all sections rel_thicks_eta[:] = 0.15 # same rel_thick for all sections sweep_eta[:] = sweep_rad for i, r in enumerate(r_list): abs_r = abs(r) eta[0, i] = abs_r * span * np.sin(sweep_rad) + 0.25 * chords_eta[i] eta[1, i] = r * span wing_geom.set_twist(twist) wing_geom.set_sweep_eta(sweep_eta) wing_geom.set_chords_eta(chords_eta) wing_geom.set_rel_thicks_eta(rel_thicks_eta) wing_geom.set_eta(eta) wing_geom.build_linear_airfoil(OC, AoA0=0.0, set_as_ref=True) wing_geom.build_airfoils_from_ref() wing_geom.update() wing_geom.plot() print wing_geom DLLM = DLLMSolver('tuto3', wing_geom, OC, verbose=1, grad_active=False) DLLM.run_direct() DLLM.run_post() DLLM.plot() DLLM.export_F_list()
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 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
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 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()
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() 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
wing_param = Wing_param('test_param', geom_type='Broken', n_sect=20) wing_param.build_wing() wing_param.set_value('span', 34.1) wing_param.set_value('sweep', 34.) wing_param.set_value('break_percent', 33.) wing_param.set_value('root_chord', 6.1) wing_param.set_value('break_chord', 4.6) wing_param.set_value('tip_chord', 1.5) wing_param.set_value('root_height', 1.28) wing_param.set_value('break_height', 0.97) wing_param.set_value('tip_height', 0.33) wing_param.convert_to_design_variable('span', (10., 50.)) wing_param.convert_to_design_variable('sweep', (0., 40.)) 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() DLLM.run_post()
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_meta_airfoil(OC, '../MetaModelFixed.xml', relative_thickness=.12, camber=0., Sref=1., Lref=1., sweep=.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('Meta',wing_param,OC) DLLM.run_direct() iAoA=DLLM.get_iAoA() def f(x): wing_param.set_thetaY(x) func=DLLM.comp_R(iAoA) return func def df(x): wing_param.set_thetaY(x) func_grad=DLLM.comp_dpR_dpthetaY() return func_grad val_grad=FDValidGrad(2,f,df,fd_step=1.e-9) ok,df_fd,df=val_grad.compare(thetaY0,treshold=1.e-6,return_all=True)
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 x0=wing_param.get_dv_array() DLLM = DLLMSolver('Simple',wing_param,OC) DLLM.run_direct() DLLM.run_post() iAoA0=DLLM.get_iAoA() AoA0=OC.get_AoA_rad() def f(x): OC.set_AoA_rad(x[0]) R=DLLM.comp_R(iAoA0) # print 'x=',x # print 'R=',R # print 'iAoA updated?:',DLLM.get_iAoA() Post=DLLM.get_DLLMPost() func=Post.comp_Lift_distrib() # print 'func=',func
import numpy OC=OperatingCondition('cond1') OC.set_Mach(0.8) OC.set_AoA(3.5) OC.set_altitude(10000.) 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() wing_param.plot() print wing_param x0=wing_param.get_dv_array() DLLM = DLLMSolver('Simple',wing_param,OC) DLLM.run_direct() DLLM.run_post() Post=DLLM.get_DLLMPost() print Post.dpLift_distrib_dpiAoA
wing_param.build_wing() wing_param.set_value('span',34.1) #34.1 wing_param.set_value('sweep',34.) wing_param.set_value('break_percent',23.) #33. wing_param.set_value('root_chord',5.4) #6.1 wing_param.set_value('break_chord',4.6) wing_param.set_value('tip_chord',1.2) #1.5 wing_param.set_value('root_height',.98) wing_param.set_value('break_height',0.70) wing_param.set_value('tip_height',0.18) wing_param.convert_to_design_variable('span',(10.,50.)) wing_param.convert_to_design_variable('sweep',(0.,40.)) 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',(0.7,1.)) wing_param.convert_to_design_variable('break_height',(0.45,0.8)) wing_param.convert_to_design_variable('tip_height',(0.10,0.26)) #wing_param.build_linear_airfoil(OC, AoA0=-2., Cm0=-0.1, set_as_ref=True) wing_param.build_meta_airfoil(OC, '../MetaModelCleaning.xml', relative_thickness=.12, camber=0., Sref=1., Lref=1., sweep=.0, set_as_ref=True) wing_param.build_airfoils_from_ref() wing_param.update() print wing_param DLLM = DLLMSolver('Meta',wing_param,OC) DLLM.run_direct() DLLM.run_post()
wing_param.convert_to_design_variable('span', (0., 50.)) wing_param.convert_to_design_variable('sweep', (0., 40.)) 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)
wing_param.set_value("sweep", 34.0) wing_param.set_value("break_percent", 23.0) # 33. wing_param.set_value("root_chord", 5.4) # 6.1 wing_param.set_value("break_chord", 4.6) wing_param.set_value("tip_chord", 1.2) # 1.5 wing_param.set_value("root_height", 0.98) wing_param.set_value("break_height", 0.70) wing_param.set_value("tip_height", 0.18) wing_param.convert_to_design_variable("span", (10.0, 50.0)) wing_param.convert_to_design_variable("sweep", (0.0, 40.0)) wing_param.convert_to_design_variable("break_percent", (20.0, 40.0)) wing_param.convert_to_design_variable("root_chord", (5.0, 7.0)) wing_param.convert_to_design_variable("break_chord", (3.0, 5.0)) wing_param.convert_to_design_variable("tip_chord", (1.0, 2.0)) wing_param.convert_to_design_variable("root_height", (0.7, 1.0)) wing_param.convert_to_design_variable("break_height", (0.45, 0.8)) wing_param.convert_to_design_variable("tip_height", (0.10, 0.26)) # wing_param.build_linear_airfoil(OC, AoA0=-2., Cm0=-0.1, set_as_ref=True) wing_param.build_meta_airfoil( OC, "../MetaModelCleaning.xml", relative_thickness=0.12, camber=0.0, Sref=1.0, Lref=1.0, sweep=0.0, set_as_ref=True ) wing_param.build_airfoils_from_ref() wing_param.update() print wing_param DLLM = DLLMSolver("Meta", wing_param, OC) DLLM.run_direct() DLLM.run_post() DLLM.run_adjoint()