Introduction to developing or migrating models to be compliant to the OpenMI Standard. OpenMI is an open standard which allows dynamic linking of numerical models, such as river models rainfall-runoff models and so on. See also:
http://www.lictek.com
Use of an Oscilloscope - maXbox Starter33Max Kleiner
This is an oscilloscope introduction that uses several sources for input. My hope is that it encourages a few future scientists to experiment and get into touch with new waves ~.
Oscilloscopes are one of the few pieces of electronic equipment that plays multiple roles and can be used in the place of other electronics equipment.
Seminar in AI, with chosen topic Hierarchical Task Networks.
Here is provided an overview of HTNs, based on Erol(94) paper. An idea of HTNs application is given by presenting some example based on video-game domain and, in general, real-time application.
Use of an Oscilloscope - maXbox Starter33Max Kleiner
This is an oscilloscope introduction that uses several sources for input. My hope is that it encourages a few future scientists to experiment and get into touch with new waves ~.
Oscilloscopes are one of the few pieces of electronic equipment that plays multiple roles and can be used in the place of other electronics equipment.
Seminar in AI, with chosen topic Hierarchical Task Networks.
Here is provided an overview of HTNs, based on Erol(94) paper. An idea of HTNs application is given by presenting some example based on video-game domain and, in general, real-time application.
Python for Delphi (P4D) is a set of free components that wrap up the Python DLL into Delphi and Lazarus (FPC). They let you easily execute Python scripts, create new Python modules and new Python types. You can create Python extensions as DLLs and much more like scripting. P4D provides different levels of functionality: Low-level access to the python API High-level bi-directional interaction with Python Access to Python objects using Delphi custom variants (VarPyth.pas).
Reactive Qt - Ivan Čukić (Qt World Summit 2015)Ivan Čukić
Reactive programming is an emerging discipline which achieves concurrency using events-based programming. Today, It is mostly used for writing very scalable web services that can achieve high concurrency levels even on a single thread.
The concept is simple - make a system that is fully event-based, and look at events not as isolated instances, but as streams. When we have streams, we can manipulate them as if they were simple ranges. We can filter them, modify them, combine multiple streams into one etc.
Reactive programming is not only applicable to the web services, it can be used in any event-based environment. In our case, in normal Qt applications, to enrich the power of signals and slots.
[...]
E2MATRIX Research Lab
Opp Phagwara Bus Stand, Backside Axis Bank,
Parmar Complex, Phagwara Punjab (India).
Contact : +91 9041262727
web: www.e2matrix.com -- email: support@e2matrix.com
Simulation and Synthesis
Modules and Primitives
Styles
Structural Descriptions
Language Conventions
Data Types
Delay
Behavioral Constructs
Compiler Directives
Simulation and Testbenches
Simulation tools typically accept full set of Verilog language constructs
Some language constructs and their use in a Verilog description make simulation efficient and are ignored by synthesis tools
Synthesis tools typically accept only a subset of the full Verilog language constructs
In this presentation, Verilog language constructs not supported in Synopsys FPGA Express are in red italics
There are other restrictions not detailed here, see [2].
Resource to Performance Tradeoff Adjustment for Fine-Grained Architectures ─A...Fahad Cheema
Resource to Performance Tradeoff
Adjustment for Fine-Grained Architectures
─A Design Methodology
When implementing computation-intensive algorithms on finegrained
parallel architectures, adjustment of resource to
performance tradeoff is a big challenge. This paper proposes a
methodology for dealing with some of these performance tradeoffs
by adjusting parallelism at different levels. In a case study,
interpolation kernels are implemented on a fine-grained
architecture (FPGA) using a high level language (Mitrion-C).
For both cubic and bi-cubic interpolation, one single-kernel, one
cross-kernel and two multi-kernel parallel implementations are
designed and evaluated. Our results demonstrate that no single
level of parallelism can be used for trade-off adjustment. Instead,
the appropriate degree of parallelism on each level, according to
available resources and the performance requirements of the
application, needs to be found. Basing the design on high-level
programming simplifies the trade-off process. This research is a
step towards automation of the choice of parallelization based on
a combination of parallelism levels.
(Costless) Software Abstractions for Parallel ArchitecturesJoel Falcou
Performing large, intensive or non-trivial computing on array like data structures is one of the most common task in scientific computing, video game development and other fields. This matter of fact is backed up by the large number of tools, languages and libraries to perform such tasks. If we restrict ourselves to C++ based solutions, more than a dozen such libraries exists from BLAS/LAPACK C++ binding to template meta-programming based Blitz++ or Eigen. If all of these libraries provide good performance or good abstraction, none of them seems to fit the need of so many different user types.
Moreover, as parallel system complexity grows, the need to maintain all those components quickly become unwieldy. This talk explores various software design techniques - like Generative Programming, MetaProgramming and Generic Programming - and their application to the implementation of a parallel computing librariy in such a way that:
- abstraction and expressiveness are maximized - cost over efficiency is minimized
We'll skim over various applications and see how they can benefit from such tools. We will conclude by discussing what lessons were learnt from this kind of implementation and how those lessons can translate into new directions for the language itself.
Verilog Tutorial - Verilog HDL Tutorial with ExamplesE2MATRIX
E2MATRIX Research Lab
Opp Phagwara Bus Stand, Backside Axis Bank,
Parmar Complex, Phagwara Punjab (India).
Contact : +91 9041262727
web: www.e2matrix.com -- email: support@e2matrix.com
Simulation tools typically accept full set of Verilog language constructs
Some language constructs and their use in a Verilog description make simulation efficient and are ignored by synthesis tools
Synthesis tools typically accept only a subset of the full Verilog language constructs
In this presentation, Verilog language constructs not supported in Synopsys FPGA Express are in red italics
There are other restrictions not detailed here, see [2].
The Module Concept
Basic design unit
Modules are:
Declared
Instantiated
Modules declarations cannot be nested
Python for Delphi (P4D) is a set of free components that wrap up the Python DLL into Delphi and Lazarus (FPC). They let you easily execute Python scripts, create new Python modules and new Python types. You can create Python extensions as DLLs and much more like scripting. P4D provides different levels of functionality: Low-level access to the python API High-level bi-directional interaction with Python Access to Python objects using Delphi custom variants (VarPyth.pas).
Reactive Qt - Ivan Čukić (Qt World Summit 2015)Ivan Čukić
Reactive programming is an emerging discipline which achieves concurrency using events-based programming. Today, It is mostly used for writing very scalable web services that can achieve high concurrency levels even on a single thread.
The concept is simple - make a system that is fully event-based, and look at events not as isolated instances, but as streams. When we have streams, we can manipulate them as if they were simple ranges. We can filter them, modify them, combine multiple streams into one etc.
Reactive programming is not only applicable to the web services, it can be used in any event-based environment. In our case, in normal Qt applications, to enrich the power of signals and slots.
[...]
E2MATRIX Research Lab
Opp Phagwara Bus Stand, Backside Axis Bank,
Parmar Complex, Phagwara Punjab (India).
Contact : +91 9041262727
web: www.e2matrix.com -- email: support@e2matrix.com
Simulation and Synthesis
Modules and Primitives
Styles
Structural Descriptions
Language Conventions
Data Types
Delay
Behavioral Constructs
Compiler Directives
Simulation and Testbenches
Simulation tools typically accept full set of Verilog language constructs
Some language constructs and their use in a Verilog description make simulation efficient and are ignored by synthesis tools
Synthesis tools typically accept only a subset of the full Verilog language constructs
In this presentation, Verilog language constructs not supported in Synopsys FPGA Express are in red italics
There are other restrictions not detailed here, see [2].
Resource to Performance Tradeoff Adjustment for Fine-Grained Architectures ─A...Fahad Cheema
Resource to Performance Tradeoff
Adjustment for Fine-Grained Architectures
─A Design Methodology
When implementing computation-intensive algorithms on finegrained
parallel architectures, adjustment of resource to
performance tradeoff is a big challenge. This paper proposes a
methodology for dealing with some of these performance tradeoffs
by adjusting parallelism at different levels. In a case study,
interpolation kernels are implemented on a fine-grained
architecture (FPGA) using a high level language (Mitrion-C).
For both cubic and bi-cubic interpolation, one single-kernel, one
cross-kernel and two multi-kernel parallel implementations are
designed and evaluated. Our results demonstrate that no single
level of parallelism can be used for trade-off adjustment. Instead,
the appropriate degree of parallelism on each level, according to
available resources and the performance requirements of the
application, needs to be found. Basing the design on high-level
programming simplifies the trade-off process. This research is a
step towards automation of the choice of parallelization based on
a combination of parallelism levels.
(Costless) Software Abstractions for Parallel ArchitecturesJoel Falcou
Performing large, intensive or non-trivial computing on array like data structures is one of the most common task in scientific computing, video game development and other fields. This matter of fact is backed up by the large number of tools, languages and libraries to perform such tasks. If we restrict ourselves to C++ based solutions, more than a dozen such libraries exists from BLAS/LAPACK C++ binding to template meta-programming based Blitz++ or Eigen. If all of these libraries provide good performance or good abstraction, none of them seems to fit the need of so many different user types.
Moreover, as parallel system complexity grows, the need to maintain all those components quickly become unwieldy. This talk explores various software design techniques - like Generative Programming, MetaProgramming and Generic Programming - and their application to the implementation of a parallel computing librariy in such a way that:
- abstraction and expressiveness are maximized - cost over efficiency is minimized
We'll skim over various applications and see how they can benefit from such tools. We will conclude by discussing what lessons were learnt from this kind of implementation and how those lessons can translate into new directions for the language itself.
Verilog Tutorial - Verilog HDL Tutorial with ExamplesE2MATRIX
E2MATRIX Research Lab
Opp Phagwara Bus Stand, Backside Axis Bank,
Parmar Complex, Phagwara Punjab (India).
Contact : +91 9041262727
web: www.e2matrix.com -- email: support@e2matrix.com
Simulation tools typically accept full set of Verilog language constructs
Some language constructs and their use in a Verilog description make simulation efficient and are ignored by synthesis tools
Synthesis tools typically accept only a subset of the full Verilog language constructs
In this presentation, Verilog language constructs not supported in Synopsys FPGA Express are in red italics
There are other restrictions not detailed here, see [2].
The Module Concept
Basic design unit
Modules are:
Declared
Instantiated
Modules declarations cannot be nested
Presentata alla quinta Girl Geek Dinner Milano, il 24 ottobre 2008 da Sara Rosso con la contribuzione di Bruna Gardella. Un introduzione all’Open Source, il mondo della donna e l’Open Source, la Girl Geek e l’Open Source, e tanti modi di essere più coinvolto nel mondo Open Source.
Using WordPress as a website (not a blog)Sara Rosso
A brief introduction to WordPress, a versatile open source CMS software that can be easily configured to be used as a website.
This presentation was originally given to the Foreign Press in Milan in June 2011.
I gave this presentation of what happens during "Restart Parties" run by The Restart Project (www.therestartproject.org, @RestartProject) at the REconomy Day of the Transition Town Conference 2012 in London, September 14th 2012.
The Restart Project aims at changing the way communities and individuals approach electronic products, starting with the promotion of communities of self-repair, and planning to promote fairer and easier access to professional repair and contribute to improved design for repairability. By empowering communities in regaining control of the gadgets they own, we want to inspire a different approach to consumption. These slides show the range of activities we engage in during Restart Parties, where volunteers come together to share their technical skills and help other community members to fix their products and to learn more about them.
Components - Crossing the Boundaries while Analyzing Heterogeneous Component-...ICSM 2011
Paper: "Crossing the Boundaries while Analyzing Heterogeneous Component-Based Software Systems"
Authors: Amir Reza Yazdanshenas, Leon Moonen
Session: Research Track Session 7: Components
Observability and Orchestration of your GitOps Deployments with KeptnAndreas Grabner
GitOps has become the default way to manage configuration in cloud native environments with tools like Argo or Flux keeping Git and K8s in sync.
But GitOps lacks end-2-end traceability when GitOps operators make changes on the target environments. And as k8s lacks application awareness its hard to enforce pre- and post-deployment orchestration task such as sending notifications upon successful app delivery or validating all SLOs are healthy for a new version.
The CNCF project Keptn is addressing those challenges by automatically providing End-2-End Observability through OpenTelemetry as well as introducing an application deployment lifecycle events enabling pre- and post-deployment checks natively on k8s.
Keptn therefore extends your GitOps approach with the missing observability and orchestration needed for successful cloud native development.
Quand Swift a été annoncé en 2014, personne n'aurait imaginé qu'un jour on aurait pu se servir de ce langage pour réaliser une application... côté serveur ! En ouvrant les sources de Swift, (En rendant Swift Open-Source ?), Apple apporte aux développeurs une nouvelle façon d’imaginer leurs développements, en leur donnant accès aux applications Web. Nous passerons en revue les forces et faiblesses de la proposition d’Apple, de découvrir comment coder des applicatifs back, les déployer dans le cloud ou encore comment Swift se positionne face à ses concurrents directs.
Flink Forward Berlin 2018: Thomas Weise & Aljoscha Krettek - "Python Streamin...Flink Forward
Python is popular amongst data scientists and engineers for data processing tasks. The big data ecosystem has traditionally been rather JVM centric. Often Java (or Scala) are the only viable option to implement data processing pipelines. That sometimes poses an adoption barrier for organizations that have already invested in other language ecosystems. The Apache Beam project provides a unified programming model for data processing and its ongoing portability effort aims to enable multiple language SDKs (currently Java, Python and Go) on a common set of runners. The combination of Python streaming on the Apache Flink runner is one example. Let’s take a look how the Flink runner translates the Beam model into the native DataStream (or DataSet) API, how the runner is changing to support portable pipelines, how Python user code execution is coordinated with gRPC based services and how a sample pipeline runs on Flink.
Python is popular amongst data scientists and engineers for data processing tasks. The big data ecosystem has traditionally been rather JVM centric. Often Java (or Scala) are the only viable option to implement data processing pipelines. That sometimes poses an adoption barrier for organizations that have already invested in other language ecosystems. The Apache Beam project provides a unified programming model for data processing and its ongoing portability effort aims to enable multiple language SDKs (currently Java, Python and Go) on a common set of runners. The combination of Python streaming on the Apache Flink runner is one example. Let’s take a look how the Flink runner translates the Beam model into the native DataStream (or DataSet) API, how the runner is changing to support portable pipelines, how Python user code execution is coordinated with gRPC based services and how a sample pipeline runs on Flink.
Introduction to the OpenMI. OpenMI is an open standard which allows dynamic linking of numerical models, such as river models rainfall-runoff models and so on. See also:
http://www.lictek.com
Introduction to the OpenMI. OpenMI is an open standard which allows dynamic linking of numerical models, such as river models rainfall-runoff models and so on. See also:
http://www.lictek.com
Introduction to developing or migrating models to be compliant to the OpenMI Standard. OpenMI is an open standard which allows dynamic linking of numerical models, such as river models rainfall-runoff models and so on. See also:
http://www.lictek.com
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Essentials of Automations: Optimizing FME Workflows with ParametersSafe Software
Are you looking to streamline your workflows and boost your projects’ efficiency? Do you find yourself searching for ways to add flexibility and control over your FME workflows? If so, you’re in the right place.
Join us for an insightful dive into the world of FME parameters, a critical element in optimizing workflow efficiency. This webinar marks the beginning of our three-part “Essentials of Automation” series. This first webinar is designed to equip you with the knowledge and skills to utilize parameters effectively: enhancing the flexibility, maintainability, and user control of your FME projects.
Here’s what you’ll gain:
- Essentials of FME Parameters: Understand the pivotal role of parameters, including Reader/Writer, Transformer, User, and FME Flow categories. Discover how they are the key to unlocking automation and optimization within your workflows.
- Practical Applications in FME Form: Delve into key user parameter types including choice, connections, and file URLs. Allow users to control how a workflow runs, making your workflows more reusable. Learn to import values and deliver the best user experience for your workflows while enhancing accuracy.
- Optimization Strategies in FME Flow: Explore the creation and strategic deployment of parameters in FME Flow, including the use of deployment and geometry parameters, to maximize workflow efficiency.
- Pro Tips for Success: Gain insights on parameterizing connections and leveraging new features like Conditional Visibility for clarity and simplicity.
We’ll wrap up with a glimpse into future webinars, followed by a Q&A session to address your specific questions surrounding this topic.
Don’t miss this opportunity to elevate your FME expertise and drive your projects to new heights of efficiency.
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
Generating a custom Ruby SDK for your web service or Rails API using Smithyg2nightmarescribd
Have you ever wanted a Ruby client API to communicate with your web service? Smithy is a protocol-agnostic language for defining services and SDKs. Smithy Ruby is an implementation of Smithy that generates a Ruby SDK using a Smithy model. In this talk, we will explore Smithy and Smithy Ruby to learn how to generate custom feature-rich SDKs that can communicate with any web service, such as a Rails JSON API.
9. Org.OpenMI.Utilities
Org.OpenMI.Utilities.Buffer Buffers results from the engine core
SmartBuffer
Mapping of values associated to one array of
times /timespans to values represented on another
array of times/timespans
t t
Org.OpenMI.Utilities.Spatial
Mapping of values associated to
ElementMapper one ElementSet to be represented
on another ElementSet
Org.OpenMI.Utilities.Wrapper
Generic wrapper suited for time
SmartWrapper stepping model engines
Jan Gregersen 9
10. LinkableEngine features
• Provides a default implementation of the
ILinkableComponent interface
• Links bookkeeping
• Event handling
• Buffering
• Temporal interpolations, aggregations,
extrapolations
• Spatial interpolations, aggregations,
extrapolations
Jan Gregersen 10
12. IEngine Interface
// -- Execution control methods (Inherited from IRunEngine) --
void Initialize(Hashtable properties);
bool PerformTimeStep();
void Finish();
//-- Time methods (Inherited from IRunEngine) --
ITime GetCurrentTime();
ITime GetInputTime(string QuantityID, string ElementSetID);
ITimeStamp GetEarliestNeededTime();
//-- Data access methods (Inherited from IRunEngine) --
void SetValues(string QuantityID, string ElementSetID, IValueSet values);
IValueSet GetValues(string QuantityID, string ElementSetID);
//-- Component description methods (Inherited from IRunEngine) --
double GetMissingValueDefinition();
string GetComponentID();
string GetComponentDescription();
// -- Model description methods --
string GetModelID();
string GetModelDescription();
double GetTimeHorizon();
// -- Exchange items --
int GetInputExchangeItemCount();
int GetOutputExchangeItemCount();
org.OpenMI.Backbone GetInputExchangeItem(int exchangeItemIndex);
org.OpenMI.Backbone GetOutputExchangeItem(int exchangeItemIndex);
Jan Gregersen 12
13. Inside the LinkableEngine
has SmartWrapper has
SmartInputLinkSet SmartOutputLinkSet
UpdateInput() UpdateBuffer()
1
GetValues()
access
has Link access 1
Link has
* *
SmartInputLink SmartOutputLink
UpdateInput() has UpdateBuffer()
GetValues()
has
SmartBuffer ElementMapper
Jan Gregersen 13
14. GetValues()
Model B Model A
GetValues(time, LinkID)
GetValues(time, LinkID)
1. Update with input from linked models
2. Perform time step and fill internal buffers
While (CurrentTime < time & State is “Not Busy”)
3. Map values in time and space
Return values
Jan Gregersen 14
15. GetValues()
Model B Model A
GetValues(time, LinkID)
GetValues(time, LinkID)
1. Update with input from linked models
2. Perform time step and fill internal buffers
While (CurrentTime < time & State is “Not Busy”)
3. Map values in time and space
Return values
Jan Gregersen 15
16. GetValues()
Engine Smart A Smart A Smart A Smart
A Smart
Model B Model A AIP Output Output Element InputLink Input
Buffer
Access LInkSet LInk Mapper Set Link
GetValues(tl LinkID)
GetCurrentTime()
IsBusy = true UpdateInput(ct)
UpdateInput(ct)
GetValues(ct,LinkID)
SetValues(Quantity,LocationID,Values)
For each Input Link
Jan Gregersen 16
17. GetValues()
Model B Model A
GetValues(time, LinkID)
GetValues(time, LinkID)
1. Update with input from linked models
2. Perform time step and fill internal buffers
While (CurrentTime < time & State is “Not Busy”)
3. Map values in time and space
Return values
Jan Gregersen 17
18. GetValues()
Engine Smart A Smart A Smart A Smart
A Smart
Model B Model A AIP Output Output Element InputLink Input
Buffer
Access LInkSet LInk Mapper Set Link
PerformTimeStep()
UpdateBuffers()
UpdateBuffer()
Getvalues(Quantity,LocationIDs)
Addvalues(time, valueSet)
For each output link
IsBusy = false
Jan Gregersen 18
19. GetValues()
Model B Model A
GetValues(time, LinkID)
GetValues(time, LinkID)
1. Update with input from linked models
2. Perform time step and fill internal buffers
While (CurrentTime < time & State is “Not Busy”)
3. Map values in time and space
Return values
Jan Gregersen 19
20. GetValues()
Engine Smart A Smart A Smart A Smart
A Smart
Model B Model A AIP Output Output Element InputLink Input
Buffer
Access LInkSet LInk Mapper Set Link
GetValues(time, LinkID)
GetValues(time)
GetValues(time)
MapValues(inpuValues)
Jan Gregersen 20
21. IEngine Interface
// -- Execution control methods (Inherited from IRunEngine) --
void Initialize(Hashtable properties);
bool PerformTimeStep();
void Finish();
//-- Time methods (Inherited from IRunEngine) --
ITime GetCurrentTime();
ITime GetInputTime(string QuantityID, string ElementSetID);
ITimeStamp GetEarliestNeededTime();
//-- Data access methods (Inherited from IRunEngine) --
void SetValues(string QuantityID, string ElementSetID, IValueSet values);
IValueSet GetValues(string QuantityID, string ElementSetID);
//-- Component description methods (Inherited from IRunEngine) --
double GetMissingValueDefinition();
string GetComponentID();
string GetComponentDescription();
// -- Model description methods --
string GetModelID();
string GetModelDescription();
double GetTimeHorizon();
// -- Exchange items --
int GetInputExchangeItemCount();
int GetOutputExchangeItemCount();
org.OpenMI.Backbone GetInputExchangeItem(int exchangeItemIndex);
org.OpenMI.Backbone GetOutputExchangeItem(int exchangeItemIndex);
Jan Gregersen 21
23. Migration steps
• Change your engine to a dll
• Implement Initialize, PerformTimeStep
and Finish
• Create the EngineDllWrapper class
Jan Gregersen 23
27. The ElementMapper
Ground water River Model
Model
GetValues(time, link)
Calculate
Return values
Has Link Has
ElementSet
Quantity
“GW Recharge”
Jan Gregersen 27
35. Unidirectional link
« t rae
in f c»
e « t rae
in f c»
e
Re oe:
ivr dl
M Rm e:
Ro l
d
M Pg m
a r r
in o a I in b C pnn
L k le o oet
a m I in b C pnn
L k le o oet
a m
GVlusim t ,lin D r gr in
e a e t e 1 k = ige k
t ( = I T L )
[]
1
[]
2 GVlusim R t e _t lin D RRe
e a e t e M + d k = t ivr
t ( = im , I Ro )
Pro T e t p
e r im e
f m S
[]
3
r t r VluSt R o
e n a ee u f
u : nf { h Rt e Rt e _t
w ile Rim< M + d
im }
Pro T e t p
e r im e
f m S
{ h Rt e t }
w ile M <1
im
r t r VluSt Re lo
e n a e e ivr w
u : F
36. Bidirectional links
«interface» «interface»
RiverModel : GroundW aterModel :
MainProgram ILinkableComponent ILinkableComponent
GetValues(t2,TriggerLink)
[1]
GetValues(time=t1, linkID=QtoRiver)
[2]
GetValues(time=t2, linkID=HtoGW)
[3] Extrapolate (t2)
[4]
return extrapolated ValueSet: HtoGW (t2)
PerformTimeStep (t2)
[5]
return interpolated ValueSet QtoRiver (t1)
PerformTimeStep (t1)
[6]
GetValues(time=t2, linkID=QtoRiver)
[7]
return ValueSet QtoRiver (t2)
PerformTimeStep (t2)
return ValueSet Hriver (t2)
RiverModel us time s
es tep t1, GroundwaterModel us time s
es tep t2
39. Persistency
• OMI File
– For identifying a linkable component
• Composition
– In org.OpenMI.Utilities.Configuration
– Holds administration of links and linkable
components
– Can be run
– Can be written and read to / from xml
40. Exercise 9:
Unit Conversion
Step 1
Open the DataCombinator
Step 2
Adjust the code of GetValues so that it delivers data in the right
unit
Step 3
Adjust the test program to ask for a quantity which has a
conversion factor not equal to one
Step 4
Identify a value as missing value (e.g. -999) and adjust the
input. Make sure this value is processed correctly.
Step 5
Test the program using NUnit