# but WITHOUT ANY WARRANTY; without even the implied warranty # of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # 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 sys, os from pyBeamLibAD import pyBeamSolverAD # Load running directory file_dir = os.path.dirname(os.path.realpath(__file__)) beam = pyBeamSolverAD(file_dir, 'config_AD.cfg') iNode = 21 - 1 beam.ReadRestart() beam.SetLoads(iNode, 0, 0, 60000) beam.StartRecording() beam.SetDependencies() #beam.SetDisplacementAdjoint(iNode, 0.0, 0.0, 0.0) beam.Restart()
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]) adjX = MLS.interpolation_matrix.transpose().dot(AeroAdjoints[:, 0]) adjY = MLS.interpolation_matrix.transpose().dot(AeroAdjoints[:, 1]) adjZ = MLS.interpolation_matrix.transpose().dot(AeroAdjoints[:, 2]) ######################################## # Initialize and set loads/crossed terms ######################################## adjoint = pyBeamSolverAD(file_dir, 'configAD.pyBeam') for iNode in range(0, len(loadsX)): adjoint.SetLoads(iNode, loadsX[iNode], loadsY[iNode], loadsZ[iNode]) adjoint.SetDisplacementAdjoint(iNode, adjX[iNode], adjY[iNode], adjZ[iNode]) ############################ # Solve adjoint ############################ adjoint.ReadRestart() adjoint.StartRecording() adjoint.SetDependencies() adjoint.Restart() adjoint.StopRecording()