def RunPrimal(node, delta, load, file): # Node where to evaluate the objective function iNode = 20 - 1 # Load running directory file_dir = os.path.dirname(os.path.realpath(__file__)) beam = pyBeamSolver(file_dir, 'config_NL.cfg') beam.SetLoads(0, 0.00013, 0.00004, 0.00114) beam.SetLoads(1, 0.00010, 0.00003, 0.00122) beam.SetLoads(2, 0.00009, 0.00002, 0.00129) beam.SetLoads(3, 0.00007, 0.00001, 0.00135) beam.SetLoads(4, 0.00005, 0.00000, 0.00139) beam.SetLoads(5, 0.00004, 0.00000, 0.00142) beam.SetLoads(6, 0.00002, 0.00000, 0.00143) beam.SetLoads(7, 0.00001, 0.00000, 0.00144) beam.SetLoads(8, -0.00000, 0.00001, 0.00143) beam.SetLoads(9, -0.00001, 0.00002, 0.00141) beam.SetLoads(10, -0.00002, 0.00003, 0.00137) beam.SetLoads(11, -0.00003, 0.00004, 0.00132) beam.SetLoads(12, -0.00004, 0.00006, 0.00126) beam.SetLoads(13, -0.00004, 0.00008, 0.00119) beam.SetLoads(14, -0.00005, 0.00010, 0.00110) beam.SetLoads(15, -0.00005, 0.00012, 0.00100) beam.SetLoads(16, -0.00005, 0.00015, 0.00089) beam.SetLoads(17, -0.00005, 0.00018, 0.00076) beam.SetLoads(18, -0.00005, 0.00021, 0.00063) if node == 0: file.write("Check. Node {}. Set Load = {} {} {} \n".format( node, load[0], load[1], (1 + delta) * load[2])) beam.SetLoads(19, load[0], load[1], (1 + delta) * load[2]) # here else: beam.SetLoads(19, -0.00005, 0.00024, 0.00048) beam.SetLoads(20, 0.00014, -0.00006, 0.00153) beam.SetLoads(21, 0.00011, -0.00006, 0.00167) beam.SetLoads(22, 0.00009, -0.00006, 0.00179) beam.SetLoads(23, 0.00006, -0.00005, 0.00189) beam.SetLoads(24, 0.00004, -0.00005, 0.00198) beam.SetLoads(25, 0.00002, -0.00004, 0.00206) beam.SetLoads(26, -0.00000, -0.00003, 0.00212) beam.SetLoads(27, -0.00002, -0.00002, 0.00216) beam.SetLoads(28, -0.00004, -0.00000, 0.00218) beam.SetLoads(29, -0.00005, 0.00001, 0.00219) beam.SetLoads(30, -0.00007, 0.00003, 0.00219) beam.SetLoads(31, -0.00008, 0.00005, 0.00216) beam.SetLoads(32, -0.00009, 0.00008, 0.00213) beam.SetLoads(33, -0.00010, 0.00010, 0.00207) beam.SetLoads(34, -0.00011, 0.00013, 0.00200) beam.SetLoads(35, -0.00011, 0.00016, 0.00192) beam.SetLoads(36, -0.00012, 0.00019, 0.00181) beam.SetLoads(37, -0.00012, 0.00022, 0.00170) beam.SetLoads(38, -0.00012, 0.00026, 0.00156) if node == 1: file.write("Check. Node {}. Set Load = {} {} {} \n".format( node, load[0], load[1], (1 + delta) * load[2])) beam.SetLoads(39, load[0], load[1], (1 + delta) * load[2]) # here else: beam.SetLoads(39, -0.00012, 0.00030, 0.00141) # here beam.SetLoads(40, -0.00002, 0.00008, 0.00032) beam.SetLoads(41, -0.00002, 0.00005, 0.00033) beam.SetLoads(42, -0.00002, 0.00003, 0.00032) beam.SetLoads(43, -0.00003, 0.00001, 0.00031) beam.SetLoads(44, -0.00003, -0.00001, 0.00030) beam.SetLoads(45, -0.00003, -0.00002, 0.00027) beam.SetLoads(46, -0.00003, -0.00003, 0.00023) beam.SetLoads(47, -0.00003, -0.00004, 0.00019) beam.SetLoads(48, -0.00003, -0.00005, 0.00014) beam.SetLoads(49, -0.00003, -0.00005, 0.00007) beam.SetLoads(50, -0.00003, -0.00004, 0.00001) beam.SetLoads(51, -0.00002, -0.00004, -0.00007) beam.SetLoads(52, -0.00002, -0.00003, -0.00016) beam.SetLoads(53, -0.00002, -0.00002, -0.00025) beam.SetLoads(54, -0.00001, -0.00000, -0.00036) beam.SetLoads(55, -0.00001, 0.00002, -0.00047) beam.SetLoads(56, -0.00000, 0.00004, -0.00059) beam.SetLoads(57, 0.00000, 0.00007, -0.00072) beam.SetLoads(58, 0.00001, 0.00009, -0.00086) if node == 2: file.write("Check. Node {}. Set Load = {} {} {} \n".format( node, load[0], load[1], (1 + delta) * load[2])) beam.SetLoads(59, load[0], load[1], (1 + delta) * load[2]) # here else: beam.SetLoads(59, 0.00002, 0.00013, -0.00100) # here beam.SetLoads(60, -0.00000, 0.00015, 0.00628) beam.SetLoads(61, -0.00003, 0.00014, 0.00627) beam.SetLoads(62, -0.00004, 0.00013, 0.00624) beam.SetLoads(63, -0.00006, 0.00012, 0.00621) beam.SetLoads(64, -0.00008, 0.00011, 0.00615) beam.SetLoads(65, -0.00009, 0.00011, 0.00609) beam.SetLoads(66, -0.00011, 0.00011, 0.00601) beam.SetLoads(67, -0.00012, 0.00011, 0.00591) beam.SetLoads(68, -0.00013, 0.00012, 0.00580) beam.SetLoads(69, -0.00014, 0.00012, 0.00568) beam.SetLoads(70, -0.00015, 0.00013, 0.00554) beam.SetLoads(71, -0.00016, 0.00014, 0.00539) beam.SetLoads(72, -0.00016, 0.00016, 0.00522) beam.SetLoads(73, -0.00016, 0.00017, 0.00504) beam.SetLoads(74, -0.00017, 0.00019, 0.00485) beam.SetLoads(75, -0.00017, 0.00022, 0.00464) beam.SetLoads(76, -0.00017, 0.00024, 0.00442) beam.SetLoads(77, -0.00016, 0.00027, 0.00418) beam.SetLoads(78, -0.00016, 0.00030, 0.00393) if node == 3: file.write("Check. Node {}. Set Load = {} {} {} \n".format( node, load[0], load[1], (1 + delta) * load[2])) beam.SetLoads(79, load[0], load[1], (1 + delta) * load[2]) # here else: beam.SetLoads(79, -0.00016, 0.00033, 0.00367) # here beam.SetLoads(80, 0.00026, -0.00007, -0.00399) beam.SetLoads(81, 0.00024, -0.00008, -0.00382) beam.SetLoads(82, 0.00022, -0.00009, -0.00366) beam.SetLoads(83, 0.00020, -0.00010, -0.00351) beam.SetLoads(84, 0.00018, -0.00011, -0.00338) beam.SetLoads(85, 0.00016, -0.00011, -0.00325) beam.SetLoads(86, 0.00015, -0.00011, -0.00314) beam.SetLoads(87, 0.00014, -0.00010, -0.00304) beam.SetLoads(88, 0.00012, -0.00010, -0.00295) beam.SetLoads(89, 0.00011, -0.00009, -0.00287) beam.SetLoads(90, 0.00010, -0.00007, -0.00280) beam.SetLoads(91, 0.00009, -0.00006, -0.00274) beam.SetLoads(92, 0.00008, -0.00004, -0.00270) beam.SetLoads(93, 0.00008, -0.00002, -0.00267) beam.SetLoads(94, 0.00007, 0.00000, -0.00265) beam.SetLoads(95, 0.00007, 0.00003, -0.00264) beam.SetLoads(96, 0.00006, 0.00006, -0.00264) beam.SetLoads(97, 0.00006, 0.00009, -0.00265) beam.SetLoads(98, 0.00006, 0.00012, -0.00268) if node == 4: file.write("Check. Node {}. Set Load = {} {} {} \n".format( node, load[0], load[1], (1 + delta) * load[2])) beam.SetLoads(99, load[0], load[1], (1 + delta) * load[2]) # here else: beam.SetLoads(99, 0.00006, 0.00016, -0.00271) # here beam.Run() OF = beam.ComputeObjectiveFunction(iNode) return OF
# See the GNU Affero General Public License for more details. # You should have received a copy of the GNU Affero # General Public License along with pyBeam. # If not, see <http://www.gnu.org/licenses/>. # import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np import sys, os from pyBeamLib import pyBeamSolver # Load running directory file_dir = os.path.dirname(os.path.realpath(__file__)) beam = pyBeamSolver(file_dir, 'config.cfg') iNode = 21 - 1 beam.SetLoads(iNode, 0, 0, 60000) # beam.Run() beam.PrintSolution(iNode) beam.ComputeObjectiveFunction(iNode) coordinate_X = [] coordinate_Y = [] coordinate_Z = [] coordinate_X0 = []
input_file = file_dir + '/data.pkl' f = open(input_file, 'rb') StructNodes, AeroNodes, AeroLoads = pickle.load(f) config_file = file_dir + '/config.pyMLS' MLS = interpolate.pyMLSInterface(config_file, AeroNodes, StructNodes) loadsX = MLS.interpolation_matrix.transpose().dot(AeroLoads[:, 0]) loadsY = MLS.interpolation_matrix.transpose().dot(AeroLoads[:, 1]) loadsZ = MLS.interpolation_matrix.transpose().dot(AeroLoads[:, 2]) ######################################## # Initialize and set loads/crossed terms ######################################## primal = pyBeamSolver(file_dir, 'config.pyBeam') for iNode in range(0, len(loadsX)): primal.SetLoads(iNode, loadsX[iNode], loadsY[iNode], loadsZ[iNode]) ############################ # Solve adjoint ############################ primal.Run() posX, posY, posZ = primal.PrintSolution(19) ############################ # Tests ############################