print('Time to solve mobility problem =', time.time() - start_time ) # Plot velocity field if read.plot_velocity_field.size > 1: print('plot_velocity_field') plot_velocity_field(read.plot_velocity_field, r_vectors_blobs, lambda_blobs, read.blob_radius, read.eta, read.output_name, read.tracer_radius, mobility_vector_prod_implementation = read.mobility_vector_prod_implementation) # If scheme == resistance solve resistance problem elif read.scheme == 'resistance': start_time = time.time() # Get blobs coordinates r_vectors_blobs = multi_bodies.get_blobs_r_vectors(bodies, Nblobs) # Calculate block-diagonal matrix K K = multi_bodies.calc_K_matrix(bodies, Nblobs) # Set right hand side slip += multi_bodies.K_matrix_vector_prod(bodies, velocity, Nblobs) RHS = np.reshape(slip, slip.size) # Calculate mobility (M) at the blob level mobility_blobs = multi_bodies.mobility_blobs(r_vectors_blobs, read.eta, read.blob_radius) # Compute constraint forces force_blobs = np.linalg.solve(mobility_blobs, RHS) # Compute force-torques on bodies force = np.reshape(multi_bodies.K_matrix_T_vector_prod(bodies, force_blobs, Nblobs), (num_bodies, 6)) # Save force