def eval_warp(handler, test_name, meshOptions, iscomplex): # --- Create warping object --- if iscomplex: # Checking if the complex verision of the code has been built: try: from idwarp import idwarp_cs # noqa: F401 h = 1e-40 mesh = USMesh_C(options=meshOptions, debug=True) except ImportError: raise unittest.SkipTest( "Skipping because you do not have complex idwarp compiled") else: try: from idwarp import idwarp # noqa: F401 mesh = USMesh(options=meshOptions) except ImportError: raise unittest.SkipTest( "Skipping because you do not have real idwarp compiled") # --- Extract Surface Coordinates --- coords0 = mesh.getSurfaceCoordinates() vCoords = mesh.getCommonGrid() val = MPI.COMM_WORLD.reduce(numpy.sum(vCoords.flatten()), op=MPI.SUM) handler.root_add_val(f"{test_name} - Sum of vCoords Inital:", val, tol=1e-8) new_coords = coords0.copy() # --- Setting the coordinates displacement for surface mesh --- if test_name == "Test_inflate_cube": # This specific test displaces the surface in every direction for i in range(len(coords0)): new_coords[i, 0] *= 1.1 new_coords[i, 1] *= 1.2 new_coords[i, 2] *= 1.3 else: # Do a shearing sweep deflection: for i in range(len(coords0)): span = coords0[i, 2] new_coords[i, 0] += 0.05 * span # --- Reset the newly computed surface coordiantes mesh.setSurfaceCoordinates(new_coords) mesh.warpMesh() # --- Get the sum of the warped coordinates --- vCoords = mesh.getWarpGrid() val = MPI.COMM_WORLD.reduce(numpy.sum(vCoords.flatten()), op=MPI.SUM) handler.root_add_val(f"{test_name} - Sum of vCoords Warped:", val, tol=1e-8) # --- Create a dXv vector to do test the mesh warping with --- dXv_warp = numpy.linspace(0, 1.0, mesh.warp.griddata.warpmeshdof) if not iscomplex: # --- Computing Warp Derivatives --- mesh.warpDeriv(dXv_warp, solverVec=False) dXs = mesh.getdXs() val = MPI.COMM_WORLD.reduce(numpy.sum(dXs.flatten()), op=MPI.SUM) # --- Verifying Warp Deriv --- mesh.verifyWarpDeriv(dXv_warp, solverVec=False, dofStart=0, dofEnd=5) else: # add a complex perturbation on all surface nodes simultaneously: for i in range(len(coords0)): new_coords[i, :] += h * 1j # Reset the newly computed surface coordiantes mesh.setSurfaceCoordinates(new_coords) mesh.warpMesh() vCoords = mesh.getWarpGrid() deriv = numpy.imag(vCoords) / h deriv = numpy.dot(dXv_warp, deriv) val = MPI.COMM_WORLD.reduce(numpy.sum(deriv), op=MPI.SUM) handler.root_add_val(f"{test_name} - Sum of dxs:", val, tol=1e-8)
def test1(): # Test the Ahmed body openfoam mesh sys.stdout.flush() #change directory to the correct test case os.chdir('./input/ahmedBodyMesh/') file_name = os.getcwd() meshOptions = copy.deepcopy(defOpts) meshOptions.update({ 'gridFile': file_name, 'fileType': 'openfoam', 'symmetryPlanes': [[[0, 0, 0], [0, 1, 0]]], }) # Create warping object mesh = USMesh(options=meshOptions, debug=True) # Extract Surface Coordinates coords0 = mesh.getSurfaceCoordinates() vCoords = mesh.getCommonGrid() val = MPI.COMM_WORLD.reduce(numpy.sum(vCoords.flatten()), op=MPI.SUM) if MPI.COMM_WORLD.rank == 0: print('Sum of vCoords Inital:') reg_write(val, 1e-8, 1e-8) new_coords = coords0.copy() # Do a stretch: for i in range(len(coords0)): length = coords0[i, 2] new_coords[i, 0] += .05 * length # Reset the newly computed surface coordiantes mesh.setSurfaceCoordinates(new_coords) mesh.warpMesh() vCoords = mesh.getWarpGrid() val = MPI.COMM_WORLD.reduce(numpy.sum(vCoords.flatten()), op=MPI.SUM) if MPI.COMM_WORLD.rank == 0: print('Sum of vCoords Warped:') reg_write(val, 1e-8, 1e-8) # Create a dXv vector to do test the mesh warping with: dXv_warp = numpy.linspace(0, 1.0, mesh.warp.griddata.warpmeshdof) if not 'complex' in sys.argv: if MPI.COMM_WORLD.rank == 0: print('Computing Warp Deriv') mesh.warpDeriv(dXv_warp, solverVec=False) dXs = mesh.getdXs() val = MPI.COMM_WORLD.reduce(numpy.sum(dXs.flatten()), op=MPI.SUM) if MPI.COMM_WORLD.rank == 0: print('Sum of dxs:') reg_write(val, 1e-8, 1e-8) else: # add a complex perturbation on all surface nodes simultaneously: for i in range(len(coords0)): new_coords[i, :] += h * 1j # Reset the newly computed surface coordiantes mesh.setSurfaceCoordinates(new_coords) mesh.warpMesh() vCoords = mesh.getWarpGrid() deriv = numpy.imag(vCoords) / h deriv = numpy.dot(dXv_warp, deriv) val = MPI.COMM_WORLD.reduce(numpy.sum(deriv), op=MPI.SUM) if MPI.COMM_WORLD.rank == 0: print('Sum of dxs:') reg_write(val, 1e-8, 1e-8) del mesh #os.system('rm -fr *.cgns *.dat') #change back to the original directory os.chdir('../../')
def test3(): # Test the mdo tutorial o mesh file_name = '../input_files/o_mesh.cgns' meshOptions = copy.deepcopy(defOpts) meshOptions.update({'gridFile': file_name, 'fileType': 'cgns'}) # Create warping object mesh = USMesh(options=meshOptions) # Extract Surface Coordinates coords0 = mesh.getSurfaceCoordinates() vCoords = mesh.getCommonGrid() val = MPI.COMM_WORLD.reduce(numpy.sum(vCoords.flatten()), op=MPI.SUM) if MPI.COMM_WORLD.rank == 0: print('Sum of vCoords Inital:') reg_write(val, 1e-8, 1e-8) new_coords = coords0.copy() # Do a shearing sweep deflection: for i in range(len(coords0)): span = coords0[i, 2] new_coords[i, 0] += .05 * span # Reset the newly computed surface coordiantes mesh.setSurfaceCoordinates(new_coords) mesh.warpMesh() # Get the sum of the warped coordinates #vCoords = mesh.getSolverGrid() vCoords = mesh.getWarpGrid() val = MPI.COMM_WORLD.reduce(numpy.sum(vCoords.flatten()), op=MPI.SUM) if MPI.COMM_WORLD.rank == 0: print('Sum of vCoords Warped:') reg_write(val, 1e-8, 1e-8) # Create a dXv vector to do test the mesh warping with: dXv_warp = numpy.linspace(0, 1.0, mesh.warp.griddata.warpmeshdof) if not 'complex' in sys.argv: if MPI.COMM_WORLD.rank == 0: print('Computing Warp Deriv') mesh.warpDeriv(dXv_warp, solverVec=False) dXs = mesh.getdXs() val = MPI.COMM_WORLD.reduce(numpy.sum(dXs.flatten()), op=MPI.SUM) if MPI.COMM_WORLD.rank == 0: print('Sum of dxs:') reg_write(val, 1e-8, 1e-8) else: # add a complex perturbation on all surface nodes simultaneously: for i in range(len(coords0)): new_coords[i, :] += h * 1j # Reset the newly computed surface coordiantes mesh.setSurfaceCoordinates(new_coords) mesh.warpMesh() vCoords = mesh.getWarpGrid() deriv = numpy.imag(vCoords) / h deriv = numpy.dot(dXv_warp, deriv) val = MPI.COMM_WORLD.reduce(numpy.sum(deriv), op=MPI.SUM) if MPI.COMM_WORLD.rank == 0: print('Sum of dxs:') reg_write(val, 1e-8, 1e-8)