Quickstart
Build a batch
The code below will create a mesh sensitivity batch and highlight some of the key features. The comments in the code should help to clarify the process.
import OrcFxAPI as ofx # why so much typing?
import numpy as np # need some numpy magic
from qalx_orcaflex.core import QalxOrcaFlex, OrcaFlexBatch, ModelSource # core classes
from qalx_orcaflex import data_models as dm # get data_models with little typing
qfx = QalxOrcaFlex() # initialise a pyqalx session for OrcaFlex
m = ofx.Model() # empty model
line = m.CreateObject(ofx.otLine, "My Line") # make a line
line.Length[0] = 200 # make the line long
line.EndAX = 0 # move end A
line.EndBX = 150 # move end B
line.EndAY, line.EndBY, line.EndAZ, line.EndBZ = (0, 0, 0, 0) # put everything else at 0
line.TargetSegmentLength[0] = 0.5 # initial segment length
batch_options = dm.BatchOptions(
batch_queue="example batch bot", # queue our batch bot is looking at for jobs
sim_queue="example sim bot", # queue our sim bot is looking at for jobs
)
ofx_batch = OrcaFlexBatch(
"Example sensitivity batch", # name of the batch
session=qfx, # qalx session we created earlier
batch_options=batch_options, # options for this batch
meta={"example": "mesh_sensitivity"}, # some metadata (could be anything here)
verbose=True, # show some print statements so we can see what's happening
)
results = [ # I want some results
dm.RangeGraph( # a range graph
object="My Line", # of line
variable="Curvature", # curvature
period=dm.Period(named_period="Latest Wave") # for the latest wave
),
dm.RangeGraph( # and a range graph
object="My Line", # for line
variable="Effective tension", # tension
period=dm.Period(named_period="Latest Wave") # for the latest wave
),
]
with ofx_batch as batch: # let's build this batch
for l_seg in np.linspace(0.01, 0.5, 10): # I want 10 segment lengths equally spaced between 0.01 and 0.5
line.TargetSegmentLength[0] = l_seg # set the segment length
case_info = dm.RawInfo(key="Segment Length", value=l_seg) # define some load case information
batch.add(
source=ModelSource(m, f"seg@{l_seg:2.2}"), # add the model with a name that shows the segmentation
load_case_info=dm.LoadCaseInfo(raw_info=[case_info]), # add the load case info
required_results=results # add the results
)
# Once the code has exited the above `with` block then the batch has been built and submitted
Start the bots
We use the qalx command line tool to start the BatchBot and SimBot
qalx bot-start --queue-name "example batch bot" qalx_orcaflex.bots:batch_bot
In a separate command line window
qalx bot-start --queue-name "example sim bot" qalx_orcaflex.bots:sim_bot
Read the results
Once your jobs have finished you can get the results summary and references to all the jobs and results:
from qalx_orcaflex.core import QalxOrcaFlex
qfx = QalxOrcaFlex()
mesh_batch_results = qfx.get_batch_results_summary("Example sensitivity batch")
for result_name, range_graph in mesh_batch_results['Range Graphs'].items():
print(f"{result_name}: Max {range_graph['max_value']:2.2f} @ {range_graph['arc_max_value']:2.2f}")
worst_case_info = range_graph['max_case_info']
print(f"worst segment length={worst_case_info['Segment Length']}m")
Where’s a nice pretty user interface?
Short answer, there isn’t one. There are a few reasons for this:
User interfaces are hard to get right and we didn’t want to just ship a poor one
We expect a lot of users to already have their own interfaces and systems that they would integrate with
Custom Interfaces shows how easy it is to create your own