Download presentation
Presentation is loading. Please wait.
Published byAlexander Wood Modified over 9 years ago
1
Model Integration with SWAT A publish-subscribe type system June 24, 2013 André Dozier and Olaf David
2
Detailed Assessment Model – daily and 1-5km resolution SWAT Read Inputs MODFLOW Solver MODFLOW Read Inputs MODFLOW Close RT3D Read Inputs RT3D Solver RT3D Close SWAT HRU calcs SWAT Routing SWAT Output SWAT Close Daily Loop Optimization – yearly (or 2-5 year) and 30-50km resolution WALL Solver WALL Solver Minimize Vulnerability and Cost CGE Solver SWAT Solver IUWM BMPs Few Iterations Ensure Economic Demand = Cons. Use Supply to WALL Demand to SWAT Manually add model detail Pareto optimal curve of management solutions DayCent
3
Linkages Need to add two linking components SWAT Model Other Model
4
Linkages Need to add two linking components SWAT Model OMS Simulation Other Model
5
My OMS Component My Wrapper Linkages Need to add two linking components SWAT Model OMS Simulation Other Model
6
My OMS Component My Wrapper Linkages Need to add two linking components SWAT Model event publish OMS Simulation subscribe SWAT run direction Other Model run component finished inform SWAT
7
My OMS Component My Wrapper Special OMS Component -Event names -Event inputs -Event outputs -Communication via MPI (use blocking sends) Linkages Need to add two linking components OMS Simulation Other Model
8
My OMS Component Normal (or special if desired) OMS component -Inputs -Outputs -Execution subroutine My Wrapper Special OMS Component -Event names -Event inputs -Event outputs -Communication via MPI (use blocking sends) Linkages Need to add two linking components OMS Simulation
9
My OMS Component Normal (or special if desired) OMS component -Inputs -Outputs -Execution subroutine My Wrapper Special OMS Component -Event names -Event inputs -Event outputs -Communication via MPI (use blocking sends) Linkages Need to add two linking components Simulation specifications -location(s) or NULL -Native or managed?
10
“Events” in SWAT SWAT Start Read Inputs Year Loop Month Loop Daily Loop End
11
“Events” in SWAT SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End
12
“Events” in SWAT SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End Array of function pointers
13
“Events” in SWAT SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End mysub othersub Array of function pointers To “subscribe” subroutine mysub() print *,“my sub” end subroutine subroutine othersub() print *,“other sub” end subroutine
14
“Events” in SWAT SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End mysub othersub Array of function pointers To “subscribe” subroutine mysub() print *,“my sub” end subroutine subroutine othersub() print *,“other sub” end subroutine program subscriber() use parm implicit none integer :: event_i interface subroutine mysub() end subroutine end interface interface subroutine othersub() end subroutine end interface event_i = TopOfDailyLoop%subscribe(mysub) event_i = TopOfDailyLoop%subscribe(othersub) call swat_main() end program program subscriber() use parm implicit none integer :: event_i interface subroutine mysub() end subroutine end interface interface subroutine othersub() end subroutine end interface event_i = TopOfDailyLoop%subscribe(mysub) event_i = TopOfDailyLoop%subscribe(othersub) call swat_main() end program
15
“Events” in SWAT SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End mysub othersub Array of function pointers subroutine mysub() print *,“my sub” end subroutine subroutine othersub() print *,“other sub” end subroutine
16
Special OMS-SWAT Component SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End call EndOfYear%fire() End mpi_input mpi_output subroutine mpi_input() use parm ! Variable initialization ! MPI inputs call MPI_RECEIVE(buf, …) ! Variable dereferencing end subroutine subroutine mpi_output() use parm ! Variable initialization ! MPI outputs call MPI_SEND(buf, …) ! MPI wait until finished call MPI_RECEIVE(buf, …) ! Variable dereferencing end subroutine
17
Special OMS-SWAT Component SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End call EndOfYear%fire() End mpi_input mpi_output Waits until inputs are available from another OMS component Sends output from SWAT to OMS with the option of waiting until the component has finished running
18
My OMS Component My Wrapper Linkages Need to add two linking components SWAT Model event publish OMS Simulation subscribe SWAT run direction Other Model run component finished inform SWAT
19
One Possible Orientation SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End call EndOfYear%fire() End mpi_input mpi_output OMS Simulation OMS Component(s)
20
Another Possible Orientation SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End call EndOfYear%fire() End mpi_output mpi_input OMS Simulation OMS Component(s) Allows parallel implementation
21
Yet Another Possible Orientation SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End call EndOfYear%fire() End mpi_output mpi_input OMS Simulation OMS Component(s) mpi_input mpi_output
22
Detailed Assessment Model – daily and 1-5km resolution SWAT Read Inputs MODFLOW Solver MODFLOW Read Inputs MODFLOW Close RT3D Read Inputs RT3D Solver RT3D Close SWAT HRU calcs SWAT Routing SWAT Output SWAT Close Daily Loop Optimization – yearly (or 2-5 year) and 30-50km resolution WALL Solver WALL Solver Minimize Vulnerability and Cost CGE Solver SWAT Solver IUWM BMPs Few Iterations Ensure Economic Demand = Cons. Use Supply to WALL Demand to SWAT Manually add model detail Pareto optimal curve of management solutions DayCent
23
First test case
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.