plot a specific parameter on a surface
-
Dear all,
for some projects, it is valuable to be able to plot a specific parameter on a surface. For instance, consider you want to plot energy density in spherical capacitor which is proportional to square of electric field. for this purpose, you can write python code like below:
import numpy import s4l_v1 as s4l import s4l_v1.analysis as analysis import s4l_v1.document as document import s4l_v1.model as model import s4l_v1.units as units from s4l_v1 import ReleaseVersion from s4l_v1 import Unit # Define the version to use for default values ReleaseVersion.set_active(ReleaseVersion.version5_2) # Creating the analysis pipeline # Adding a new SimulationExtractor simulation = document.AllSimulations["LF Unstructured"] simulation_extractor = simulation.Results() # Adding a new ModelToGridFilter inputs = [] model_to_grid_filter = analysis.core.ModelToGridFilter(inputs=inputs) model_to_grid_filter.Name = "desired surface" model_to_grid_filter.Entity = model.AllEntities()["desired surface"] model_to_grid_filter.MaximumEdgeLength = 0.1e-3, units.Meters model_to_grid_filter.UpdateAttributes() document.AllAlgorithms.Add(model_to_grid_filter) # Adding a new EmSensorExtractor em_sensor_extractor = simulation_extractor["Overall Field"] em_sensor_extractor.FrequencySettings.ExtractedFrequency = u"All" document.AllAlgorithms.Add(em_sensor_extractor) # Adding a new FieldInterpolationFilter inputs = [em_sensor_extractor.Outputs["EM E(x,y,z,f0)"], model_to_grid_filter.Outputs["Surface"]] field_interpolation_filter = analysis.core.FieldInterpolationFilter(inputs=inputs) field_interpolation_filter.UpdateAttributes() document.AllAlgorithms.Add(field_interpolation_filter) # field = field_interpolation_filter.Outputs[0] field.Update() #get data data = field.Data.Field(0) #compute desired value out=data**2 # target_grid=model_to_grid_filter.Outputs[0].Data # energy_density= s4l.analysis.core.ComplexFloatFieldData() energy_density.Allocate(1,target_grid.NumberOfPoints, 1) energy_density.Grid = target_grid energy_density.Quantity.Name = "out" energy_density.SnapshotQuantity = field.Data.SnapshotQuantity energy_density.Snapshots = field.Data.Snapshots energy_density.ValueLocation = field.Data.ValueLocation energy_density.SetField(0, out) energy_density.Check() source = s4l.analysis.core.TrivialProducer() source.SetDataObject(energy_density) inputs = [source.Outputs["out"]] surface_viewer = analysis.viewers.SurfaceViewer(inputs=inputs) surface_viewer.Data.Mode = surface_viewer.Data.Mode.enum.QuantityRealPart surface_viewer.UpdateAttributes() document.AllAlgorithms.Add(surface_viewer) surface_viewer.Update()