{ "metadata": { "name": "tests" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "import os\n", "\n", "import json\n", "\n", "import openearthtools.modelapi.bmi\n", "import matplotlib.pyplot as plt\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "# Locate the libdflow dll\n", "DIRNAME = os.path.abspath('.')\n", "LIBFMNAME = os.path.join(DIRNAME, '../../src/.libs/libdflowfm.dylib')\n", "# This is a simulation of a river bend.\n", "rundir = '/Users/fedorbaart/Documents/checkouts/cases_unstruc/e00_unstruc/f04_bottomfriction/c016_2DConveyance_bend/input'\n", "VARIABLES = os.path.join(DIRNAME, '../../src/variables.json')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "# Wrap the dflow_fm library with the python BMI api (taking into account fortran memory order)\n", "fm = openearthtools.modelapi.bmi.BMIFortran(libname=LIBFMNAME, rundir=rundir)\n", "# Initialize the model with the input file\n", "fm.initialize('bendprof.mdu')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "with open(VARIABLES) as f:\n", " data = json.load(f)\n", "variables = []\n", "for var in data['variables']:\n", " variable = {}\n", " variable.update(data['default'])\n", " variable.update(var)\n", " variables.append(variable)\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Test all rank functions\n", "------------------------" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for var in variables:\n", " print(\"var:{} rank:{}\".format(var['name'], fm.get_var_rank(var['name'])))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "var:s1 rank:1\n", "var:ucx rank:1\n", "var:ucy rank:1\n", "var:unorm rank:1\n", "var:xk rank:1\n", "var:yk rank:1\n", "var:zk rank:1\n", "var:xzw rank:1\n", "var:yzw rank:1\n", "var:kn rank:2\n", "var:netelemnode rank:2\n", "var:flowelemnode rank:2\n", "var:flowelemcontour_x rank:2\n", "var:flowelemcontour_y rank:2\n", "var:wx rank:1\n", "var:wy rank:1\n", "var:wxy rank:1\n", "var:hs rank:1\n", "var:bl rank:1\n", "var:twav rank:1\n", "var:Uorb rank:1\n" ] } ], "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Test all shape functions\n", "------------------------" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for var in variables:\n", " print(\"var:{} shape:{}\".format(var['name'], fm.get_var_shape(var['name'])))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "var:s1 shape:(400,)\n", "var:ucx shape:(400,)\n", "var:ucy shape:(400,)\n", "var:unorm shape:(770,)\n", "var:xk shape:(451,)\n", "var:yk shape:(451,)\n", "var:zk shape:(451,)\n", "var:xzw shape:(400,)\n", "var:yzw shape:(400,)\n", "var:kn shape:(400, 4)\n", "var:netelemnode shape:(400, 4)\n", "var:flowelemnode shape:(400, 4)\n", "var:flowelemcontour_x shape:(400, 4)\n", "var:flowelemcontour_y shape:(400, 4)\n", "var:wx shape:(770,)\n", "var:wy shape:(770,)\n", "var:wxy shape:(770,)\n", "var:hs shape:(400,)\n", "var:bl shape:(400,)\n", "var:twav shape:(420,)\n", "var:Uorb shape:(420,)\n" ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Test all type functions\n", "------------------------" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for var in variables:\n", " print(\"var:{} type:{}\".format(var['name'], fm.get_var_type(var['name'])))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "var:s1 type:double\n", "var:ucx type:double\n", "var:ucy type:double\n", "var:unorm type:double\n", "var:xk type:double\n", "var:yk type:double\n", "var:zk type:double\n", "var:xzw type:double\n", "var:yzw type:double\n", "var:kn type:int\n", "var:netelemnode type:int\n", "var:flowelemnode type:int\n", "var:flowelemcontour_x type:double\n", "var:flowelemcontour_y type:double\n", "var:wx type:double\n", "var:wy type:double\n", "var:wxy type:double\n", "var:hs type:double\n", "var:bl type:double\n", "var:twav type:double\n", "var:Uorb type:double\n" ] } ], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Test all type functions\n", "------------------------" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for var in variables:\n", " print(\"var:{} type:{}\".format(var['name'], fm.get_var_type(var['name'])))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "var:s1 type:double\n", "var:ucx type:double\n", "var:ucy type:double\n", "var:unorm type:double\n", "var:xk type:double\n", "var:yk type:double\n", "var:zk type:double\n", "var:xzw type:double\n", "var:yzw type:double\n", "var:kn type:int\n", "var:netelemnode type:int\n", "var:flowelemnode type:int\n", "var:flowelemcontour_x type:double\n", "var:flowelemcontour_y type:double\n", "var:wx type:double\n", "var:wy type:double\n", "var:wxy type:double\n", "var:hs type:double\n", "var:bl type:double\n", "var:twav type:double\n", "var:Uorb type:double\n" ] } ], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "for var in variables:\n", " try:\n", " x1 = fm.get_nd(var['name']).copy()\n", " except TypeError as e:\n", " print(\"var {} not readable: {}\".format(var[\"name\"], e))\n", " continue\n", " fm.set_nd(var['name'], x1+1)\n", " x2 = fm.get_nd(var['name']).copy() \n", " print(\"getting {} write test ok: {}\".format(var[\"name\"], np.all(x1+1==x2)))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "getting s1 write test ok: True\n", "getting ucx write test ok: True\n", "getting ucy write test ok: True\n", "getting unorm write test ok: True\n", "getting xk write test ok: True\n", "getting yk write test ok: True\n", "getting zk write test ok: True\n", "getting xzw write test ok: True\n", "getting yzw write test ok: True\n", "getting kn write test ok: False\n", "getting netelemnode write test ok: False\n", "getting flowelemnode write test ok: False\n", "getting flowelemcontour_x write test ok: False\n", "getting flowelemcontour_y write test ok: False\n", "var wx not readable: first element of __array_interface__ data tuple must be integer or string.\n", "var wy not readable: first element of __array_interface__ data tuple must be integer or string.\n", "var wxy not readable: first element of __array_interface__ data tuple must be integer or string.\n", "getting hs write test ok: True\n", "getting bl write test ok: True\n", "var twav not readable: first element of __array_interface__ data tuple must be integer or string.\n", "var Uorb not readable: first element of __array_interface__ data tuple must be integer or string.\n" ] } ], "prompt_number": 21 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This should leave the model in a pretty messed up state. Let's call it a day. \n", "\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "fm.finalize()\n", "fm.unload()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 } ], "metadata": {} } ] }