Adding models to eWaterCycle

eWaterCycle has been designed to make it easy to use hydrological models. Using a model doesn’t require much technical expertise, so researchers can focus on scientific discovery instead. By contrast, adding new models to eWaterCycle requires a deep understanding of the technologies used to build the system and the models of which it is comprised.

There are roughly three steps to adding a model to eWaterCycle:

  1. Create a model which exposes the Basic Model Interface (BMI)

  2. Add the model as eWaterCycle plugin

  3. Custom forcing (Optional)

Use the flowchart below to determine which steps are required for your model.

eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1dV3PbSrJ+96/g9b7sVlx1MDAxZEKTw75sKScry1ZYb6lcdTAwMTggXHUwMDEyXCJcdFBcZkpb579vXHUwMDBmZVx1MDAxMVx1MDAxOVx1MDAwNGXCXHUwMDAyjy9si1x1MDAxNlx0XHUwMDAyXHJg+uuve7p7/vupUvk8eu7bn/9Z+Ww/NWpdpzmoPX7+w7z/YFx1MDAwZoaO58JHZPL70Fx1MDAxYlx1MDAwZlx1MDAxYZM926NRf/jPlVx1MDAxNf9cdTAwMWJWw+u9fsvu2j3bXHUwMDFkXHJhv3/D75XKfyc/XHUwMDAz52k6tZ7nNie7Tz7wT4SJir576LmTk2KKmUJaKj7dw1x1MDAxOW7A2UZ2XHUwMDEzPr6tdYe2/4l56/Pqyeb4cq3TvLxU+1tfOre7L09cdTAwMWTbP+2t0+2ejZ67XHUwMDEzoYZcdTAwMWVcXIj/2XA08Dr2hdNcdTAwMWO1zbkj76d9a+CNW23XXHUwMDFlXHUwMDBlQ9/x+rWGM3o27yE0fbfmtibH8N95gt9cdTAwMTgnllxibJJNPzZcdTAwMDeQyFwiwY1GXHUwMDA0W/e63sBcYvY3bJs/vmj1WqPTXHUwMDAy+dymv8/tZPP3efxxuVxm+fe4bTut9sjIrrV/Mntyz7FGWDLGkS+GOUV/tzl5+v/x7/Sg1rN3zVfccbdcdTAwMWK8XW7zx+16XHUwMDFiJf44IT/e+dO/XHUwMDA2s/9mdHxcdTAwMDXHWGicjeyn0fTiXHUwMDAyw2L0cH6svp09e937nZOqVz87sFx1MDAwZtY+T/f784/kw75+eWA3XHUwMDBmXHUwMDBlyKbCvHVO+odn1/xq7zB8lrfz11x1MDAwNlx1MDAwM+8x73GPTja+3D+Pb9brVzY+u8cnt+iyme+4P/7n3+5xv1l71VxuLLTQhCpcdTAwMGXPyX98XcftRJ9F12t0fEX6XHUwMDE0XHUwMDEwOKa/oftcdTAwMWFUXizSlJdxTLWSjObW3eSHlKy77VqjPVx1MDAxZdhcdTAwMWavvVxcSlx1MDAwYishMfzlTFx1MDAwN2755PuMWVouSntHg5o77NdcdTAwMDagXHUwMDBicVxyxlxcWIxrpbVGhDIqXHUwMDEzXHUwMDE0mqOoPkssJTxEJH9enUNcdTAwMWbE9HbGUFxySDZ7qPpSee7ozHmZQFx1MDAwN1xuvbtV6znd59BTnYxhuItcdTAwMWJe5dlcdTAwMWJX2rVcdTAwMDe7Uqt8d3te0+7+63Nov9Wu0zLj+3NcdTAwMDPkt1x1MDAwN6GhP3LAXHUwMDAyTnfoOc1mN/DYXHUwMDFhcPKa49qD3Tz2yFx1MDAxYjgtx611z1x1MDAxM2WLSlx1MDAwNnfG3pmCs0V4YLBcZm3zqdE7mqnJXHUwMDE5lpiwdEuMtFx1MDAxNlx1MDAxNEmW31x1MDAxMm91x49cdTAwMDfSPV1rXHUwMDFjPG1cXJ5cdTAwMWSfr55cdTAwMGb3ym2JqdZcdTAwMTZcdTAwMGVuIV2mXHUwMDAyW8rfdESsRdlhXHUwMDEyV1vC/DeneoukREoul1x1MDAxOWZHzmg0UOqscXUtzq9cdTAwMWXHNf6w9dFm+OXl8Ft962mv/uX6qd9z2+2dbXu0gONu1lx1MDAxZa/Ov/TvvXHv29e7XHUwMDBi0Vx1MDAxY7du2os073HM/Fxc7znWwK7BWLKbXmNoOd5KXHUwMDAwPn7e3lx1MDAxM5Fcblx1MDAxMVx1MDAxYYybYETq3FxikTxcdTAwMWHKbu8xt1x1MDAxMMLG5GsmUVx1MDAwMDLN94FcdTAwMTlbdEFcdTAwMTiRbe2NW4C1YkpQojBJMPZcdTAwMDFcdTAwMDLwRt4lZUpLSn8ra29cdTAwMGaNTVx1MDAxZLxaU7D3P4zr2sEu/OJcdTAwMTjzfltr2EVcdTAwMTGAXHUwMDE5ZjBOXHUwMDAwwuJcdTAwMDaETVx1MDAxMjVcdTAwMTcjXHUwMDEw6t2MIGBfooxcdTAwMDBwXHUwMDE4XHUwMDEzXHUwMDFj3GOWvu9hJd1Vl7/sv4zR7jG5aHzd4OVmXHUwMDA0XFySkPdcdTAwMWR2zVx1MDAwNVBuXHUwMDFk3IqhXHUwMDA0mlx1MDAwNXmH8pXXJ1xiMkbsXHUwMDAxIJRCQTheXHUwMDA2gvAyfHzpbZ6Me/2t9k7jsHHfr57qvFx1MDAwNveCONts8/Rp46V/iV7Wjkfn6vpxXHUwMDExhnz//uryiW4446OnzebR3elVQ6+VmHic07Or+rC/r+/uOeo1n68lq5KCicdbeLDljNrjulx0XHKu2Fx1MDAxN/DNwfpzo2uvtFx1MDAwNv1cdTAwMDZcdTAwMDNyslAyQlx1MDAwM3JE0IkqgSniKj84JY+8kpNcdTAwMTGJqCXgUk2glFx1MDAwYixcIpFDziy2KHjKZCOEYotjIVx1MDAwNOFaXHUwMDAyKuajI1x1MDAxYVx1MDAwYk6Fxlx1MDAwYoCoZWEjuz+Me8ieT2hcYlx1MDAxOPkuPORxrWVXRu3aqOJcZuH94bjf91x1MDAwNiBxZfv0eJ2Zr1x1MDAxNcRTZlx1MDAxOOcoT0m+kOTLyLyIRTCYgd1cdTAwMTi9KkhcdTAwMTJKXGJcdTAwMTJ991xyJZRWUoOW+c9pXHUwMDE2Soxv1+pfeydCfbm62V49OKpfbDysl5vCYIx0ctxi8n2FQiFcdTAwMGYkXCKCLYbDUG68Jn/DXHQkXHUwMDA2c1x1MDAxZr6mJEZJRLhihbBcdTAwMTj6Xlx1MDAxNvPT4ftcdTAwMTTzPYtcdTAwMWQ5nbO988u+Otuv19jTw+lX+6Rezctcbka7XHUwMDBmX8hh7aHaOaO0vtGv73d21ceygq5d6zzXx1x1MDAwMK+j6sLJgZBpak+Q5JKTYIR8lt4n3/mSs1x1MDAwM4w5XHUwMDAx5aZKXHUwMDAzXHUwMDBiIFxmXHUwMDA1grfPr7dhgaqfzVx1MDAwZiSyOFxioaTURFx1MDAwYpU0N1x1MDAxMbyeN/XnVFx1MDAxMcQk+Y3iXHUwMDE1XHUwMDE3XHUwMDAzZzSN/U+IwfHzqO25391HUKKJvVx1MDAxZNm9flx1MDAxN4T87tqPRplcdTAwMWHZyrRQmjDDXHUwMDAwRmnC4q8mXHUwMDE3X9DZcyCv+JZcdTAwMDBcdTAwMWFB5zqWi8CRYpyw/GQh20CUXHUwMDE0NFx1MDAxNEWWonAjhFJcXPBcdTAwMDAoTL6vhSWFoKCSWiPGonItXHUwMDEwMlx1MDAwNLFcdTAwMTBcdTAwMDemQFx1MDAxMKJGXHUwMDBi44hBxCQ2g5iigC1IifgsXHQjXG4tXVx1MDAxMGTv9qt92j667fTaPXftYKN5u93eXFyAOc6DWcNRbTBac9ym47bCV/0jySfPtOZcdTAwMDTlXHUwMDFhY3NcdTAwMGKAXcJcdTAwMDNQjGCB4Fx1MDAwN5dYXHUwMDA19mrV+kZoYsFIoiaUzTQ8cCxjd9Z2m7OFysamsFCcSYRcdTAwMTmjXHUwMDEyM0k1l3GhwqE9pURMqG5tOFr3ej1nXHUwMDA0N//YXHUwMDAzNyh6kyd3c9WgTduuxYZcdTAwMTdcXFTwsygs9c1cdTAwMTHDw+jfgcGCgiNcdTAwMDdN//+fP1x1MDAxMvdOVafXXHUwMDBmo4rkXHUwMDFm7lPwdV5cdTAwMTKmo+/5ySFw41x1MDAxMaP5J4uSlaLkYKpcdLJcdTAwMTAx00Uwrlx1MDAxNedhXHUwMDAyhrWytMRcdTAwMTL+XHSlJeFFXHUwMDA2aCw9yS1cdTAwMDNcXCBAwZJiyLH4XGZcdTAwMTBEpLnAXHUwMDAx7P0g+uXf/aLp16FXXHUwMDEwcZpBXHUwMDA2osQpKEcuyoOzQySplIfLVCXFhGLBpFx1MDAxNPm1NHuOvqRaKqiyXHUwMDE0VkiAfVKMqXBcdTAwMTTVICdcdTAwMDPjpCjYMPCkWHFuXHUwMDEy1lx1MDAxNlx1MDAxNVRwKYhgWmr/clx1MDAwMl6SielcbqbguYFyXHUwMDA288neXHUwMDEyNDFcdTAwMDFDXG46vlScZyBXd++3r1x1MDAwZduequ2c4cO7+0vB5+c871x1MDAwMopFc54qgL5B/dDfOMFcdTAwMDDnXHUwMDFiyKlcdTAwMDSvglxuhjRT72M92Vx1MDAxM8xcdTAwMTGxwMlcdTAwMTeSXHUwMDAyv0dYXHUwMDAy0Vx1MDAxMjgmXHUwMDE2t4SBfCnNTKNEaLlpTzVVpcxcdTAwMTZTplx1MDAwNdGe9KRYrFx1MDAwMUWYwIHg1ExITdSMskMqllx1MDAxNlx1MDAxMzDsOYOBhkg46EypXHUwMDA2wqk0oJSAkShcboRUalwiYEB8XHUwMDAwv8GUMZFcdTAwMDCpceKDOVx1MDAwNsSXwYmBvzzxubKHXHUwMDA1MZ9cdTAwMTmcIMp8QoJcdTAwMTRKfTRm0XenesowkWDqcX49zY6vl1RP4SqFXHRcdTAwMTFLMEKUXHRcdTAwMWW43omiclx1MDAwZa45QYpcdTAwMTOhXHUwMDE17FGYnjJhcXD8JVeKgKNEXHUwMDEz9NTk4lx1MDAwMKJQrrFRZFx1MDAxY4v2XHUwMDAw9Vx1MDAxMXDJ9KOYz0eSkzliXHUwMDFmYPpcdTAwMTVcdTAwMTWCUiNcdTAwMWFcdTAwMTg+P0liSlx1MDAwMlxitihFWjIgxJKQ+ERZLmZyLs+/nXbF/fHTQf9hTMXXq4s1N42ZaIokpkCJiFx1MDAwMOqRXHUwMDEwJVx1MDAwMlx1MDAxNzZcXCVcdTAwMTV/XCJLxUxSR7zZYmN9TmaSinlEp3NcdTAwMTNcdTAwMGU3n8IzyO/uZWcwlVx1MDAxNPNcdTAwMDRX4NBcdPBuOdNmgIcgj0tqcU2l4WlcdTAwMTJoo4rItTjI09jiglx1MDAwMM2Gm46J4Fx0if+gXHUwMDBlXHUwMDE24K6ewLPAnMQxj4OdXHUwMDAyp/XDQG/6nbncvcNt6pyNT1x1MDAwN+vPg/2ja/vk29Zpt1Eud2+mX/VcbkvMwoRrjYxcdTAwMDdcdTAwMDGw5Vx1MDAxN2+GMZcz4KBAKJREXFxxyt+HqNlJOj5UWthcdTAwMTSAIaZcdTAwMDDp4Vx1MDAwZkmWXHRsP9PcRFx1MDAwMzmjYOSX29VLVSezxVx1MDAxNWlOQE0vgMyAU1x0t1jNkV2UrFx1MDAxNWWHU6Utk1xirjRcdTAwMDfcXHUwMDA0XHUwMDA3N1x1MDAwNKfg6lx1MDAwMoOk4Hshylx1MDAxMEPFhbjf5elJhZFki0gv+n8/b1x1MDAwNlx1MDAxOSjcz8vMXHUwMDAyxFwiPcxtxiWM4jl4z+H69trq0WON7p1cZrr7Z092V949lDtcclBzM8vqb+F5farD7FpcdTAwMTWTXHUwMDA2XHUwMDE4zJ5cYuT9xYPYRFx1MDAxMsxcdTAwMDVSXHUwMDBiSPxZeN7fT9T1/ZF83Fls6emk2aHk4aja+tpcdTAwMTh/OVx1MDAxZez3vePc1Vx1MDAwMD9RXHUwMDE18V5cdTAwMTY2zfsrulx1MDAxY1x1MDAxMVx1MDAwN1LaYpNXRCiu8Fx1MDAxY5NXybe55OZXXHUwMDBiU1x1MDAxZFx1MDAwNC5cIlx1MDAwMlx1MDAxN1x1MDAxYS44rNfA61x1MDAxNqjX2VPMWLxcdTAwMWFgoLhcdTAwMThLrFRcXNVcdTAwMTNKXHUwMDEyTZRYgOv/+1jg3V7/Va6K59rf3e8u3IpKXFxTXG6y0jNMVyzPf15hXHUwMDE3kc+fXHUwMDFlvVCp9YhcdTAwMWMzjJlG+St+snG8pOquMLVMXHUwMDE2lZBaXG7wJ8Nz1UwhS4MrXHUwMDA3f0worcj6Y1xuz1ZJ40JcbsnA803K6LWMR4yJRopcdTAwMTBcdTAwMDY6XHUwMDFlXHUwMDAwn1ftp/BcdJJILFdcdTAwMTeD7aPbXHJHblxyXHUwMDBlry+qjfXN3Ye9+/29JVx1MDAwYl5cdTAwMDRDr1RcdTAwMTPTSsJMgSpcdTAwMDTiXHUwMDA1dpsm6Fx1MDAxMdjLxFxcQX5O3lx1MDAxOb3Ihp6wUFhJToSUmFx1MDAxMmJSXHUwMDAyeUyo+HT5MkUr0vVn8mlMc/zjfVxuvi4sIY9jXHI+XHUwMDAxI/lLXCKStaDs8MmpZYY7XHUwMDEwQ8alkOFgXHUwMDA1k9iiyKRcZmPNOdLFxX7flY+HNYA61fLDqyH+XHUwMDAy6XgzjP+HpeMxlT4/IydzZCT/lHS261dSXHUwMDE1NfWYlph4/8JUXFyIcNIs/G7JwFZcdTAwMWPF4cLiXGaAXHUwMDAwSa4xR4r6T8anOFxmXHUwMDE0XHUwMDE5RFx1MDAwNVx1MDAxZFx1MDAwNruoXHUwMDA1ik3QcKVNZzi8XHUwMDAwXHUwMDA351x1MDAxN1Kci631hkO/ddnqtay10Gjzvqta5aI4M9nEXHUwMDBm7lx1MDAxMm7phXz9qlx1MDAwNCdDgGVwToFcdTAwMDPBXHUwMDBmTlx0fueUd85cdFx1MDAxYSDxhr2DqSHgtJuZyEShqFx1MDAxNIRcYnB6MNeKSLbUjKeark9mi2tS0ZRHg+k1/Vxu5sDTRK0oOZ5qXHUwMDA2gCnAXHUwMDE3lMAozX9CcCpcdTAwMDSyYMBzRYlcdTAwMDLyL1xuLEHQlqRm48qQ3mCadVx1MDAwNuehmnKCXHT6jWZojjpWQaRnXHUwMDA2XHUwMDFmiJKekCDFXHUwMDE2IfD0aVTGjG/K84dxs9v1lFVLObNcdTAwMTDBgEnStLxcdTAwMTbhpFx1MDAxNCVN1IeYQjpBNStQSzHhXHUwMDE2U5KZdD9cdTAwMDYonVx1MDAxNNeR0lx1MDAwMp+USUlcdCdcdTAwMTJcdTAwMDWcl2lQ11x1MDAxNMryYHR+XHUwMDE5SM/X1a7Uh4d03LlbfzjfJOiewOWUivTk5Vx1MDAxN9JCQDDAiVVcdTAwMWFcdKlQXHUwMDEy6ZnUXHUwMDAzKIB8xM1OxizHM0BcdTAwMTaT6DctqZxNxSZcdTAwMDEpZOZkNWOUXGJcdTAwMTiK8XDTMvGedI0yW0yXXHUwMDE2xHoy8lIklsrM0+RcdTAwMGb1JCtG2Vx1MDAxMVViXHUwMDBiXGaHgtHEYXiHe/lqJC2g1FxmXHUwMDAzIYVcdTAwMWJfYOXlu9JSXHUwMDA0KIBcdPb8RrNixeWlzOBcdTAwMDNcdTAwMWZYf4BS61x1MDAwZlxiUlpgLeYokM7u+ldSJYWhZlFwvKlcdTAwMDbOQDRcdTAwMGY7J4b2XGJcIlx0USZcdTAwMWVLdYGVl8j09lx1MDAwNmZFTL0rU0nJuIJbpkSecc1NTjyOd6tcdTAwMTKgMcaRKiRrpTDac3BWP1x1MDAxYrfuN1q19ceXblx1MDAwZsmHq9HBctJcdTAwMWUyeUJcYknKmFwigbqyKO1hKvT3nVx1MDAxM1qqirdOmvf1x5uX3vn145etqm03XHUwMDEyxEJcdTAwMTbTXGJcdMZcdTAwMTGB28WZTFx1MDAxNlx1MDAwYmNcIs1IXHUwMDA3UyFcdFZoyeM96Tpltpg2LYj4pIZ74CxggFx1MDAwNcqPqMmKUXZElcJcIsCbNSbUNNiM8Fx1MDAxZdPqg0sllFJcdTAwMTjczVx1MDAwMtOB3jXDhUByQehcdTAwMDLyXHUwMDAxloX3XHUwMDE0NsM1g1x1MDAwZlx1MDAxND3DZXe7Tn+Y3JFTpXbkxJSBXHUwMDA1XHUwMDA1SMjvnGSDcClzccFcdTAwMGa0XHUwMDE09TdcdTAwMTJO2tM0reH3Qlty4rTFTlx1MDAwMpm5sYxcdTAwMWTTxIZcdTAwMTGxXFyBXHUwMDFkZ81bX305vv1211CXzZuDu5PBee7Vv4rvpp2ePzujm/aKM1x1MDAxY47t4YprP6402p5cdTAwMTdUt1x1MDAwNWTXMpHaX1x1MDAxYtxTRpTGc0yeJD+EkltThkw3PFwiXHUwMDE5NZMj0eJcdTAwMTatpFx1MDAwNVSTc625oLTAdFx1MDAxMaBSzIRsgFx1MDAxY3Jl6v3iylx1MDAxYV/bXHUwMDBixlx1MDAxOFx1MDAwN+JMf6f+TUd9263U3MpEMyqeW1x0t5WM96FfqM2dYYtiXHUwMDEzLFFhs0VdxPJf2UUyKr0hgpl+0FTPsZxfdlS4lIZcdTAwMTkjzS1cdTAwMTGwieHcXHUwMDEzUKeQySxmKU7TkiFlPVDfMktcdTAwMTXq6Vx1MDAxZFx1MDAwZkaASyV1qJi7XGZcdTAwMTU0syz13VXXvrl80Y+3XHUwMDE3rvvc23jeqY2/ffQ6XHUwMDFkP9E5O/O4++iettbGTuu8tdegV4/r1YNn72OZRaTt7kq969VXeoBwK6ebq1x1MDAxYlx1MDAwN5tWr/m3Ybs2cNxW1fT/r05cdTAwMWH7VkHFOrWWedNcdTAwMTlVXHUwMDFkt1qrToGxulBKgnl6wY/pXHUwMDFkKlx1MDAwMaHyu1x1MDAwZcmjreSUXHUwMDA0cEdaTFx0jFx1MDAxNFx1MDAxN1KHI6am/YmFuL9cdTAwMTXZUpJYXHUwMDFhZzr4XHTlPtyQKFx1MDAxNlxcWPgvT0mOx6Pgil6TNTK+u39vmlNcZv5RmWpKZdJcdTAwMTL7u/u2SEZRcYFss1x1MDAxY+UoSdKnyVx1MDAxZZe88NU9iEpdkFAyQrhQ+T2Uo4ud9cagPnx6+UZcdTAwMGVcdTAwMWGd06svW537clx1MDAxM1x1MDAxNi11UN1FONpneliFXCJcdCRcItiCXCJcdDRMWJJKgfgsvoInoXGN+XJcdTAwMTGWp9HVwGk0N75cXJx3n+4uXHUwMDFmd3dO1lXuXHUwMDA1wFx1MDAwZm63n9Yuv+0rtD5cdTAwMWNt7zZa46PzRVx1MDAxMJZNdrF66Vx1MDAxY22u3lx1MDAxZVx1MDAxY7nqmD0+nHY/llhcdTAwMDQ8m2q/O1x1MDAwNohZKC8gKH1dUsaZ6WSb33FJfqYlp1x1MDAwNVqBXHUwMDEymi7egpjQP40gXHUwMDAxRdpcbkZcdTAwMWOLi1VQgi1uTsGx5jRxZdKEpT4oNfN2gTqvvz4v+Do0S2TZQae/XHUwMDFh4N/f3beVMSo1t1x0hlx1MDAxN1x1MDAxZdS4MYKRPayMPOBcdI+DWj9ims3hvrtcdTAwMDG989fmKohNzLCZUTYx45ormZeccsEzLrfQXHUwMDA1Q6hI90e0RIQhRfJcdTAwMDNPtkNYUuBcdTAwMDE/hIbWPFx1MDAwZZckw8fKkoQwpTDlXHUwMDFj85+azcj2SHh4sVaUULBcdTAwMDPCmMl1pKTSXCKYXGb/Vq4jRHhR22WY32iObs5O1p+HaHfVa9/Vnp9e2OptuTI4cveCNOmfwiRcdTAwMTBLXHUwMDA1Nlx1MDAxYlxivN87uFx1MDAxMszz8DdTuVx1MDAxYbuzufI3bi5Y6+hk1e6Mn/Dm3ri7fn9100lcdTAwMTJqkjPClaTTn/F6ZFx1MDAxY4lcciaUXHUwMDEwLVX6Rro2mS2qR/7hPlx1MDAwNV/n5XGpLI4gSjXFXHUwMDEy5Y/uJGtFydFcdTAwMTRuplx1MDAwNX6c0JIoglx1MDAxOYnQOKy1XHUwMDAxU38rXGZM4ekrMXfjbFx1MDAwMmhiXG6of6Pwzobn2v9XXHUwMDEwu5pBXGLii8eHRCm8qVx1MDAxYSHpXHUwMDEzxKYppok/5O9+mI3GpVxmv3CGQtHWcNVcdTAwMGXGXHUwMDAyhVY9LSb8XHUwMDAy6pZylkCZMrdcdTAwMDJiXHUwMDAyvkQ1lyisuEC8XFxcctdmXHUwMDExn4fbNqmd6HWqXpr7+8NWb3ttxH/B9EvmcX9cIqpTXHUwMDAwUXuXXHUwMDE5JunrIHJMXHUwMDE5ofOsmZz8kEpuh0FJLJPrxJVAXHUwMDEyuFxcVLM1t4jfhKDAzFx1MDAwZqYsalx1MDAxNqCjyixUwmi+rmqIm+7VSn94q1x1MDAxMDLHUP05OzydqPAnJbzXqVx1MDAxNv+Ngd1y4Fx0PVf+blstXHUwMDBiPmq1XHUwMDFiXHUwMDAzy/H+qLzOaLTH9X9cdTAwMTRVfDvDvKXOu0QuJ/Visi+l0LZsVGcspKFcdTAwMTBVlPL8eJGNnyXFXHUwMDBiuMRgXHUwMDEwJFJlXHUwMDBmREhamoHbXGJulOKIXHUwMDE2WMlCSTDQS1x1MDAwM1x1MDAxZPOmgEGVxVx1MDAwNNfwb7JSWKBp+TRcdTAwMWMrMEdI6OXK83w+kfbwulc/XHUwMDFk3qC9h+pgffxy/zK/eX1cdTAwMTdm5YyD5Fx1MDAwZTlcdTAwMThOXHUwMDA3biBcdTAwMDFrTyiYIZNgXHUwMDE42G3aRyRcdTAwMTTUR+9sW5JcdTAwMWTFrYRcdTAwMDMhXHUwMDEyblx1MDAxNVx1MDAxMdqUXHKbZnDxJcTCUlGmlryAN1WjzFx1MDAxNtcl/3ifgq/zcrDUPlBcdTAwMDAhXHUwMDAybqom+SE1WTHKXHUwMDBlqVxuMJOiNOeKKG4hYVx1MDAxNjEgZi07XWBcXJlZxpuVXHUwMDFhyFx1MDAxOGLJq9fHYyFcdTAwMWFzXHUwMDEzPSFcdTAwMWY+o/XrKNhRpyDuNINcdTAwMTLEXHUwMDFilyw2XGLSdGo9z20maSmW6Vx1MDAxZGlhyFx1MDAwMoLT/Fx1MDAxMcvGsKNqu1x1MDAwZd492Vxce2BcdTAwMGaH7Xrj2UlR07JEQFA4YTacII9cdTAwMTnS4WW0f0ZJ01x1MDAxM1B0OLzBXHUwMDEyOE8wVjVtU6JcdTAwMTRjXHUwMDFjseWq132833RcdTAwMWWPPX3lndm61jm8vXC2n39BakjmccdHo2tv/c5b1eRq135cdTAwMWU8Nq9bYlx1MDAwMce9XHUwMDE3V1x1MDAxZPaCSO+brrbr0lYnm5eL7V4/XHUwMDBmPL7LkFx1MDAwN5NcdTAwMWSj3pHhUFxuuF3+otTkp19yUy5cYrfMPDFYaUnMXHUwMDFhylx1MDAxMZRcdTAwMTBcdTAwMGJEiWzviFx1MDAwYkuahVxmkclcbkLBXHUwMDAyt6zsXHUwMDE0LIHesVx1MDAxMLz95Y357jCYa2GiKL1+beTUu/Zbomow8eK727LBXFw7jcqtN2iAt/GvgqjAXGZcdTAwMWJcdTAwMTnrX1x1MDAxZrqK6DVcdTAwMDSvIF3+QjNIXGJKzSBcdTAwMDFmqyY1XFy5wSFcdTAwMWLdS1xuXHUwMDBl4ERa4EFcdMzAjULR5dexKcHjiFx1MDAwMI9SXG6hXCJb2lx1MDAxM2kpyphEXGYpwVx1MDAxOU+Y8lx1MDAxNOBcbsJcdTAwMDeaglx1MDAwN1xmPjBcdTAwMTIx2k9Ns1x1MDAwMyT1cmWQ7N1tytPxzcv1enf1aW3nknU39Gm5XCInuWNcdTAwMTTIXCKaXHUwMDBi8I8pMVVcdTAwMTKYJTS0N13AzWjTJs4lhZSxXHUwMDFimytuklxyRiGZkGmBYUroqOlcdTAwMDWGiIxcdTAwMGKlLZNdglx1MDAxNTGNQuiSR02q6epktrhcIvlcdTAwMDf8XHUwMDE0fJ2bbaVPSZs7a5aYzZ+Ql6xcdTAwMTYlx1Ol1WS5XHUwMDA2gEutsWCRXHUwMDE0XHUwMDEyZlx1MDAxNlxmwqb/vcaMiuDk0aIzgU1cIrDWgkihwClcdTAwMTNJK1x1MDAwMiXkkJhVXHUwMDEzpdaLKFx1MDAwNFhcdTAwMTaudTXuXHUwMDE3RJdmMIJY87OgIFx1MDAwNbdcdTAwMDHB6Yv5mF5gZmXG/G5RQ2xu3XZcdTAwMGW7N1x1MDAxZPfpoTV4XHUwMDE2XHUwMDE39Vx1MDAwYlbu0Ikw1cSBMt+wmkrOQuv1XHUwMDE1XHUwMDEzOUn3vFx1MDAwMqXGocRGpGK5I1ghipnmxZTuXHUwMDE0xnlO7XX5snb19eBqe43g0/rW0Fx1MDAxNeKj41x1MDAxZM87O1x1MDAwN9uNi1x1MDAxZdqqblx1MDAxZH7bv9nfeXpo5jtuXHUwMDAxXHUwMDFj7X1cdTAwMTZYpk5dUMyZVFrn1+vkh1RyXHUwMDBiLJmygNlcYkUoQ5JcdTAwMDdgbPJ9hbmFXHUwMDEwXHUwMDA1TWJagb9T4MyFZKC7WirTr1x1MDAwNTyphGhHQttcdTAwMTD4ltYyuFbnXHUwMDA3XHUwMDE4YCFRwFx1MDAxMyy+XHUwMDBi12PFhsH67Ll2pVFzK+Oh/Vx1MDAxYTj47k6LTVx1MDAwMtGCooJcdTAwMWLZVizesytN6myZXHUwMDE30UgkPaCB00tiwFx1MDAwMTLtveZYwiZcdTAwMWJny6r/XFxYJndbmp5BTIS7e2FcdTAwMDGOntSKXGJFpWSEXHUwMDE1l1x1MDAwYlx1MDAwMpabv/aMl1x1MDAwNMhUUipcYibMMuu+UU1cdTAwMTmlXHUwMDFjsXjHL8JcdTAwMTR4yGS5jPt976vUXHUwMDBmpEdcdTAwMWN+3XD7NyOyuW6XK6AxT/BcdTAwMDBTSoighFx1MDAxMWpWXGJAXHSpIMKShFx1MDAwYm2KLieL+b0zXHUwMDE1JFx1MDAxYoIq4VRcdTAwMTDwplx1MDAxMVxmXHUwMDFhqmGcm9ZcdTAwMWLJkVx1MDAxNspcdTAwMTlcdTAwMThcdTAwMWbYRzPwXHUwMDAzY2ItU1QjVaPMXHUwMDE21yX/cJ+Cr/MyqtRkXFyClGlcdTAwMTQtRf5cdTAwMTBxsmKUXHUwMDFkUE0oQU+WLddcblx1MDAxNCDqKzFcdTAwMTb0pESBIVxyZaHXVCvCJJIoaaI5YY1jqY2ifHg3919cdTAwMTjQsIdF1cTMYFx1MDAwNFx07dx/ZUlMoN4lmlx1MDAwZVwiXHUwMDAwIYHW5vd96vvd++rdmNdO++2D7fo5vlx1MDAxYTs75Y5pYCTB9Vx0hC1cIvkgPFx1MDAxMtUopoNcdTAwMWHFkbMkdVBj4fJGXHUwMDFjW8VGMio0eCGFrNxXWElMg+2Lr6e8fn53drnjNbv64fTR/lx1MDAwNdGHzON+QFx1MDAxNse0IUmg1UBk0fJcdTAwMTXbXTHNXHUwMDA2hqNcdTAwMTVwnFx1MDAwNjetsdO0rfao1/3b1uskcFx1MDAxNU5VXHUwMDBioMdcdTAwMDKCIyhcdTAwMTUgXGJiREiM5liYJflhl9yYmyCiRSZ2XHUwMDFhM8BcdTAwMGJcdTAwMTn1j8yEbzCbqzBrTji2lCmZo8iMIZlcdTAwMTD9jIdHXGLDilFJf6O8znXQXHUwMDFi05OjXHUwMDAyzH/k9d5SJN6SPmojb1CQsZ9hXHUwMDAyo8Y+TdBcdTAwMDQxXHUwMDBijoGkpnxcdJOmXHUwMDFmLKyYmbudicml1XHELWDIXHUwMDE0XHUwMDBihTjVKMrYXHUwMDAz07SL1mpGLdBRwjTjZjWWXHUwMDA0im7WvERcZtxl0CNBXHUwMDE1jsU8zJqDQpBcdTAwMGYrf/nIsES2ylVC69PCUyZcdTAwMTKDZ29efPiszFFcdLLYoFx1MDAwNFhcdTAwMGWCXHUwMDE1eFvapH8gLOJcIlx1MDAxMUuBh46JWVx1MDAwNN6syVx1MDAxMn9cdTAwMWPLXHUwMDE0kKimjXazxca5f7RPwdf58Y2lt1tDXGJUXqn8bk42OSwpwJk1XHUwMDFhpOl6yrCQzFx1MDAwZnz9cHMwt4hiUlx1MDAwME/AJtZbXHUwMDE42GFcdTAwMTP6MMW+JmlcdTAwMDIhXHUwMDE49Fx0XHUwMDFjhlogJVwipmCZaC3jXHUwMDEzuKZsSVwijZar3O9QoPbOTfdcdTAwMDBzdjCunnS+bLSOyJLGeKvIUoRQTTDToEKUs0C61Fx1MDAwZuhcIsiUmmGuYURxKUhcdTAwMDJ05ULT3FxiP1x08VwiZVoxXHUwMDExblx1MDAxYdJcdTAwMDBxSSj3W2pcdTAwMDBNVyCzxVRnTlx1MDAwNJ0/S02bflx1MDAwM6E2qLPwM1lcckqOn1x1MDAxOFFlSSqAKDLJgVx1MDAxM0eyflx1MDAwNWaWiaIrRDVYLvpTgaJsuojMI1x1MDAxNkLCeYiZYYlcdTAwMDNoQkhXaT1pzf9cdTAwMWJ5gYeeZVx1MDAxNdVcdTAwMWNhXHUwMDA2XHUwMDA3iE98h0SZK6r76Vx1MDAwN1x1MDAxNHyu9ftnI7ijU6T8/ODYj2vpccZPP/TcqJQ9sXV/fvrzf7fmJa0ifQ== Do you have a model?Does your model have a BMI interface?Is your BMI interface in a language that is supported GRPC4BMI Write a modelin Pythonwith BMI templateewatercycle/leakybucket-bmiNoYesYesImplement onesee bmi.readthedocs.ioNoOk.YesNoOpen an issue on ewatercycle/grpc4bmiPut your model in a (docker) container with GRPC4BMIUse the ewatercycle-leakybuckettemplate and instructions to wrap your model in the eWaterCycle interfaceDone!Put your container on a container registry (e.g. ghcr.io, dockerhub).OkIs your model compatible with eWaterCycle generic forcing?YupNow everyone can use your model in eWaterCycleYes!Create a custom forcing generatorNo...

Create a model which exposes the Basic Model Interface (BMI)

Models in eWaterCycle follow the Basic Model Interface. You can either write a model that directly exposes this interface, but the more common use case is to add a wrapper around an existing model.

The https://github.com/eWaterCycle/leakybucket-bmi repository contains a simple example of a BMI model. It can be used as a template for your own model.

The following BMI methods are called by the eWaterCycle library and should be implemented:

  • initialize()

  • finalize()

  • update()

  • get_current_time()

  • get_end_time()

  • get_grid_type()

  • get_grid_rank()

  • get_grid_shape()

  • get_grid_size()

  • get_grid_x()

  • get_grid_y()

  • get_output_var_names()

  • get_start_time()

  • get_time_step()

  • get_time_units()

  • get_value_at_indices()

  • get_value()

  • get_var_grid()

  • get_var_itemsize()

  • get_var_nbytes()

  • get_var_type()

  • set_value_at_indices()

  • set_value()

Add the model as eWaterCycle plugin

Models in eWaterCycle are added as plugins. A plugin is a Python package. The https://github.com/eWaterCycle/ewatercycle-plugin/tree/leakybucket repo contains a simple example of a plugin. It can be used as a template for your own plugin.

Custom forcing

If your model can use generic forcing data such as forcings based off (GenericDistributedForcing or GenericLumpedForcing), e.g. the MakkinkForcing classes, you can skip this section. For more information on forcing, see the user guide .

If your model needs custom forcing data, you need to create your own forcing class.

The forcing class should sub class DefaultForcing.

In the class you have to define attributes for the forcing files your model will need.

To use a ESMValTool recipe you have to implement the _build_recipe() method. It should return a Recipe object which can be build using the RecipeBuilder class. For example if your model only needs precipitation you can implement the method like this:

from ewatercycle.forcing import RecipeBuilder

...

@classmethod
def _build_recipe(cls,
    start_time: datetime,
    end_time: datetime,
    shape: Path,
    dataset: Dataset | str | dict = "ERA5",
):
    return (
      RecipeBuilder()
      .start(start_time.year)
      .end(end_time.year)
      .shape(shape)
      .dataset(dataset)
      .add_variable("pr")
      .build()
    )

If your ESMValTool recipe needs additional arguments you can add and document them by implementing the generate() method like so

@classmethod
def generate(
  cls,
  <arguments of DefaultForcing>,
  my_argument: str,
):
    """Generate forcing data for my model.

    Args:
        <arguments of DefaultForcing>
        my_argument: My argument
    """
    return super().generate(
        <arguments of DefaultForcing>,
        my_argument=my_argument,
    )

The recipe output is mapped to the forcing class arguments with the _recipe_output_to_forcing_arguments() method. If you want to change the mapping you can override this method.

If you do not want to use ESMValTool to generate recipes you can override the generate() method.

To list your forcing class in ewatercycle.forcing.sources you have to register in the ewatercycle.forcings entry point group. It can then be imported with

from ewatercycle.forcings import sources

forcing = source['MyForcing'](
  ...
)