def test_spanwise_dvs(self, train=False, refDeriv=False): refFile = os.path.join(self.base_path, "ref/test_Cylinder_spanwise_dvs.ref") with BaseRegTest(refFile, train=train) as handler: handler.root_print("Test 1: Basic FFD, global DVs") radius = 1.0 height = 10.0 DVCon = DVConstraints() surf = self.make_cylinder_mesh(radius, height) DVCon.setSurface(surf) # DVCon.writeSurfaceTecplot('cylinder_surface.dat') ffd_name = os.path.join(self.base_path, "../inputFiles/cylinder_ffd.xyz") self.make_ffd(ffd_name, radius, height) DVGeo = DVGeometry(ffd_name) DVGeo.addSpanwiseLocalDV("shape", "i", lower=-0.5, upper=0.5, axis="y", scale=1.0) size = DVGeo._getNDVSpanwiseLocal() DVCon.setDVGeo(DVGeo) leList = [[0, 0, 0], [-radius / 2, 0, height]] xAxis = [-1, 0, 0] yAxis = [0, 1, 0] DVCon.addLERadiusConstraints(leList, nSpan=5, axis=yAxis, chordDir=xAxis, scaled=False) # DVCon.writeTecplot('cylinder_constraints.dat') funcs = {} DVCon.evalFunctions(funcs) print(funcs) handler.root_add_dict("funcs1", funcs, rtol=1e-6, atol=1e-6) np.random.seed(0) DVGeo.setDesignVars({"shape": (np.random.rand(size) - 0.5)}) funcs = {} DVCon.evalFunctions(funcs) handler.root_add_dict("funcs2", funcs, rtol=1e-6, atol=1e-6) print(funcs) funcsSens = {} DVCon.evalFunctionsSens(funcsSens) print(funcsSens) handler.root_add_dict("funcsSens", funcsSens, rtol=1e-6, atol=1e-6) print(funcsSens)
def test_spanwise_dvs(self, train=False, refDeriv=False): """ Test spanwise_dvs """ # refFile = os.path.join(self.base_path,'ref/test_DVGeometry_spanwise_dvs.ref') # with BaseRegTest(refFile, train=train) as handler: # handler.root_print("Test spanwise local variables writing function") meshfile = os.path.join(self.base_path, "../../input_files/c172.stl") ffdfile = os.path.join(self.base_path, "../../input_files/c172.xyz") testmesh = mesh.Mesh.from_file(meshfile) # test mesh dim 0 is triangle index # dim 1 is each vertex of the triangle # dim 2 is x, y, z dimension # create a DVGeo object with a few local thickness variables DVGeo = DVGeometry(ffdfile) DVGeo.addSpanwiseLocalDV("shape", "i", lower=-0.5, upper=0.5, axis="y", scale=1.0) # create a DVConstraints object for the wing DVCon = DVConstraints() DVCon.setDVGeo(DVGeo) p0 = testmesh.vectors[:, 0, :] / 1000 v1 = testmesh.vectors[:, 1, :] / 1000 - p0 v2 = testmesh.vectors[:, 2, :] / 1000 - p0 DVCon.setSurface([p0, v1, v2]) leList = [[0.7, 0.0, 0.1], [0.7, 0.0, 2.4]] teList = [[0.9, 0.0, 0.1], [0.9, 0.0, 2.4]] nSpan = 10 nChord = 10 name = "thickness_con" DVCon.addThicknessConstraints2D(leList, teList, nSpan, nChord, name=name) size = DVGeo._getNDVSpanwiseLocal() np.random.seed(0) DVGeo.setDesignVars({"shape": (np.random.rand(size) - 0.5)}) funcs = {} DVCon.evalFunctions(funcs) # print(funcs) for i in range(nChord): for j in range(nSpan - 1): np.testing.assert_allclose(funcs[name][i * nChord + j + 1], funcs[name][i * nChord + j], rtol=2e-15)