 Alright, why don't we go ahead and get started. So greetings everyone and thanks very much for joining in this webinar that's going to be about fondling Earth surface with land lab version two. I'm Greg Tucker, I'm at the University of Colorado in Boulder, and I'm the director of CSDMS. And I'm thrilled to have the opportunity to tell you a little bit about land lab and some of what it can do. I'll say that this webinar is going to be, it's going to be emphasizing pointing toward resources where you can learn more at land lab at this point has gotten to be quite a large package. And there's no way to do justice to it in just a brief webinar. So my emphasis is going to be very much pointing you toward tutorials and online documentation and that kind of thing. I suspect I have about 24 slides so on the rule of a minute per slide I expect this will go now maybe half an hour or something like that so we'll leave plenty of room for questions and discussion. Let me go ahead and fill the screen with this slide hopefully you are seeing title slide. I just want to say that I encourage you if you've got questions as we go. Don't hesitate to interrupt. I won't be able to see if you use the raise hand function as I'm doing this presentation mode so just go ahead and jump in with questions verbally if you've got them. Okay, so to tell the story of land lab I have to tell you a little bit about the community surface dynamics modeling system or CSDMS. There's an NSF supported facility that supports computational modeling of various kinds of Earth surface processes, hydrological geomorphological sedimentological eco hydrological etc. There is a small integration facility based at the University of Colorado where I'm talking to you from that supports the community with community engagement computing support and various kinds of educational resources. The land lab is one element of the CSDMS software ecosystem. It is a Python language toolkit, a programming library. And it's designed to make it quicker and more efficient for you to build integrated and modular numerical models of all sorts of different kinds of surface processes. So here's an example. This little video you're looking at is obviously a very geomorphological and geological example it's representing a island micro continent that's being rifted tectonically. There's isostatic response to original unloading and sedimentary loading there is sedimentation in the deep sea and rivers on land and so on. This is composed of various modular components and we'll be learning about what that means. This is just one example I could have chosen a more short term engineering scale or human time scale process that could have been hydrology or eco hydrology or something like this but the point is that land lab is designed to make it easier to write grid based numerical models and to create integrated models from reusable components. It's geared toward various kinds of surface processes so it's not necessarily limited to those I mean it's a numerical modeling toolkit so you could in principle model all kinds of things from plasma physics to, you know who knows. Okay, so let me before I tell you about what's in land lab and what it does I'll give you a few examples of how land lab has been used in the recent past in the literature. So this slide shows a variety of images from different papers or ongoing studies that have used land lab in different contexts. And it gives you a little bit of a sense for the topical variety so for example, there's a paper that's just recently come out where a group in the UK has built a dry land hydrology simulator. Next to that is an example from work by Nathan Lyons and colleagues where they're interested in how river captures drive speciation of aquatic species. There's a bunch of other examples that range from hydrodynamics basin stratigraphy tectonics landslide susceptibility title circulation and title marshes sentiment yield big picture earth mantle related tectonics and a variety of other things. So it's a pretty diverse package. I'm going to choose some resources to learn about land lab before I tell you a little bit about overview. There's a couple of papers that give a kind of a high level overview of land lab and what it does. There's a 2017 paper by Dan hobley and colleagues. The link is here. That was sort of the first all about land lab what it is and what it does paper. Hey Barnhart has a follow up paper from last year that describes version 2.0 and some of the design changes that were made in that. And then we have a pre print out that includes land lab in a greater description of CSDMS, it's software ecosystem and how that fits into the larger picture of geoscience software places you can access to learn about land lab. But it's completely open source so there is a digital repository on GitHub at this website. All the, all the code all the documentation and associated files are there. And there's also a fairly comprehensive website that includes tutorials and user guide and a reference manual. So here's words about the tutorials. We've worked hard with land lab to create a wide variety of hands on tutorials so for me personally I I learned best technical kinds of things when I have a tutorial that I can work for and get a feel for how it works with Jupiter notebooks. Making tutorials is a really easy and fun process you have these wonderful interactive documents that can combine text and pictures and code. So that's what we've used to create the land lab to port tutorials. How do you find them well. I'm going to skip out of this for a second. Here's the land lab website. You'll notice that across the banner on the top one of the items here is tutorials. I click on that link. There are some instructions on how you can connect to the tutorials. And here I've listed some of these. So one of the ways you can do it. If you want the tutorials on your own computer where you can open them up in a Jupyter notebook you can clone the repository. And here's the address of the repository. You'll find the tutorials under the subfolder land lab notebooks tutorials that referee raises a point I want to make here is there's two kinds of notebooks associated with land lab there's the tutorials that are designed for people to learn about different aspects of land lab. And then there's a series of teaching notebooks that are designed for use in the classroom and they've been developed by various folks, including Nicole Gasperini and at Tulane and others. As basically lab exercises in classrooms so check both of those out. So you can get them on your own computer another way you can do it is with the free notebook hosting service binder. I'm sure some of you are familiar with this. If you go to the tutorials page. You'll notice that there's a section launch notebooks online if I click this link. Doing a new tab. It will open the tutorial notebooks in binder. You know that you know it's a free service sometimes it works really well and sometimes it, you know there's so much demand for their servers it just won't function so. But this is what you'll see as the notebooks is starting to load. So that's one method. The method is that you can access the land lab tutorials and land lab itself through hydro share. So as many of you probably know hydro share is a wonderful web platform for the hydro logical sciences. It's a place to store and share and disseminate all kinds of data and other resources about water related systems. So let me show you show you quickly how you can find land lab and its tutorials on hydro share. So here I'm on hydro share I've logged in you need an account supreme count. If I go to discover. It takes me to a search bar. And I can type in land lab notebooks. And one of the items I get is land lab Jupyter notebooks I click on that resource. It opens the resource. I can page down and see what's contained in the resource is a folder called notebooks. If I want to run them, I go to the button open with select quasi Jupyter hub. From quasi Jupyter hub you'll notice that one of the server options is the CSC mass workbench. So this is an instance of a Jupyter hub that will have all the CSC mass software installed on it will select that and say start. And this will ultimately start up a server where we can run the notebooks directly online so this way you don't have to install anything on your local computer you can just get right to it and start working with them. Sometimes it takes a few minutes to start up and I'll let that just do its thing. So okay so that's three ways that you can interact with the tutorials. We hope soon there will be a fourth we're going to be rolling out actually there exists already a CSC mass Jupyter server soon to be branded as the Earthscape hub. Thanks to an award from NSF that just arrived this week. So you'll be you'll be hearing about that soon. Okay, so I've told you all about the documentation but I haven't said all that much about what land lab actually is and what's in it so let's take a look at that. And actually before I do that let me say one thing about the one further thing about the tutorials. There's a lot of them. There's probably over 100 I haven't counted lately. So if you want a pathway through it. The welcome notebook which is the first tutorial notebook you'll find is kind of the overview and starting place. It includes a link to something called the land lab syllabus. So this is simply a sequence of notebook tutorials that we've set up as what we think is a reasonable order to go in to get a comprehensive picture of what land lab is and how it works. So one way you can dive into this course you don't have to follow that you can go pick and choose among different topics, whatever makes sense. Let me say something too about pre prerequisites for using land lab. It's, it's, it's designed to make it easier to work with numerical models and create them but it doesn't spare you from needing to know some things. So one of those things is to know a Python programming, and in particular to be familiar with using Python classes and objects, the object oriented features of the language, because that's something that land lab uses heavily. You need to know something about NumPy arrays and how to work with arrays how to index them and so on. Fortunately, both of these topics there are plenty of resources online for learning if you, if you don't already know. The other thing that's useful to know is to know something about numerical methods and particular the methods that you're going to use in your favorite application. There's really no substitute for good numerical methods course but to to semi substitutes that I particularly like are a textbook by Stingerland and comp called mathematical modeling averse dynamical systems is a 2011 a text that walks you through some fundamentals of numerical methods with very geoscientific examples. That's a great resource. Another one more generally is the famous numerical recipes book that you may have heard of that contains essentially numerical recipes, sub routines and algorithms for all kinds of different, different methods from root finding to partial differential equations. So, I recommend both of those. Okay, so let's dive in I want to look now at a live example of some land lab code that is a concise code that will create a comprehensive model. And, you know, once again I freely admit, I'm a geomorphologist so I picked a geomorphological example. It doesn't have to be geomorphological we could have picked something more short term or hydrological or ecological but I guess it's a geomorphic one. On the right you're looking at a little simulation of a hypothetical landscape that has evolved with hill slopes and channels and networks. It's what's called a landscape evolution model, and here it's been written in 15 lines of code that you see picture. So this will be our work example as we go through, and I'll be referring to different pieces of this code. One of the things this indicates is that you can write fairly comprehensive models, rather succinctly as compared to having to do it from scratch. The first piece that we need to look at in thinking about the main components of land lab is what's called the gridding engine. At the heart of most land lab built models is a simulation grid at the moment land lab is designed to support two dimensional grids. We hope in the coming near future to support 3D and global grids as well. The idea here is that a grid is a data object that contains all the geometry and topology to represent some kind of a two dimensional mesh. There are different kinds of grid meshes that are available that you can create you can see them pictured here. So raster grids with regular spacing, and you know, Cartesian orientation hex grids unstructured grids based on a Voronoi diagram and a triangulation, a subset of that called radial grids, and a relatively new type that comes out of work by Katie Barnhardt and Allison Pfeiffer called a network model grid that really focuses on the topology of a river network or really any kind of network. So the idea here is we want to be able to create a grid object in just a single line of code. The idea is that that line will create a data object that again has all the elements that describe the geometry and topology. So grids and land lab are made of graph primitives. So think nodes and links and things like that. So let's look at some examples. First of all, in our 15 line landscape evolution model. Here's the line that creates a grid. In this case, it'll be a raster model grid. So that's the name of the grid class. So we're going to give it 40 rows, 64 columns with an XY spacing between points of 100 units, in this case, meters. And all of that will be returned in a variable that I've just called grid. Right, so there's creating a grid in one line of code. Let me dig into this a little bit more and give you some examples with with graphics to accompany it. Here's that line of code creating a raster model grid with the shape of 10 rows and 16 columns. And here's a picture of what that looks like in terms of some of its primitive geometric elements. So the black dots here are points that are called nodes. The red line segments are called links, and they have a direction as well as a magnitude. The blue boundaries outline cells. And these are three of what are actually six basic primitive elements of a land lab grid. The other ones are the sort of dual complement to these so if you notice these four line segments here the links they enclose an area that's called a patch. The sides of each cell here are called faces, and the vertices of the cells are called corners. So there's six different kinds of geometric primitive that you can work with. Not every application requires you to work with all of them often applications will just use nodes or nodes plus links or nodes links and cells, it depends on the application. Here's a couple of examples of other kinds of grids. Here's the command to create a hex model grid. And here's what that grid looks like. The grid creation functions give you some control over size as and layout so here's an alternative hex model grid that has a rectilinear layout to its structure. Here's a example of a semi structured grid this in this case a radial model grid. So maybe you're doing a volcano simulation or something like this so a radial arrangement of nodes that uses under the hood a Delaney triangulation. So these are a few examples of grids. And where do you go to learn more about land lab grids. So what I'm going to go is a little online tool that allows you to visualize the complete geometry and topology of a kind of a mini grid. So I'm going to turn to that now just so you can see what that looks like I've got the URL here. And I'll skip over to this browser. The lab grid sketchbook gives us as a default a little starting raster grid. And if I hover over the different elements, it will tell me the name of the element, and it's number. So if I hover over this little blue circle I see that that's a node, and it starts with node zero. And this I can get a sense of the numbering scheme so if I go left to right I've got node zero 123 and then I go up to the next row for five, six, seven, etc. So this is an indication that the numbering scheme for all the elements is bottom to top and left to right. So if I hover over this this is patch zero patch one patch to patch three, etc. And I can find out the same information for links faces cells and corners. I can switch over if I want to a hex arrangement can switch to a radial arrangement. So this tool to help you picture how a grid is composed of its various geometric elements, and if you need to know the numbering of a particular thing like I want to like monitor what's happening at this link here. It's a good way to go and and find out which number it actually is. The limitation of this is that there's a limit on how big you can make these so you know once you get to hundreds and hundreds of grid points on a side, this tool doesn't really work anymore. But there is an alternative. In a built in there is a plot graph function that you can import, and it will display all the elements of a grid or subsets of those elements with the numbers displayed directly. I won't show that live now but I'll point you to a tutorial it's called the land lab false garb tutorial that shows how to use this plot graph function. There's also a tutorial on introduction to the model grid object that will tell you more about working with grids. Okay, so let's move on so that's the grid but a grid by itself isn't of much use unless it has some data associated with it. And that's where we get to this concept of fields. So a field is a flat array of data that are associated with one particular type of grid element. Here's an example. There's a function associated with grid objects called add zeros. Its purpose is to create a new field filled initially with zeros with a name that you give it. So here's the command to make a field. Here's the name. I'm going to call it topographic underscore elevation. And I have to say what kind of element I want to associate it with. In this case, nodes. What I will do is to create a new array. It's a flat array where there is one value per grid node. I can then access that array in a couple of different ways. I can access it through the variable that I used here LF, or I can access it through the grid itself because the grid will remember a list of all the fields that are associated with itself. If I say LF is grid at node topographic elevation, it says true, meaning those are two, those two things are looking at exactly the same data in memory. So that's all I'm going to say about fields other than quickly looking at an example from our mini landscape evolution model, but you can learn more about working with fields from the user guide section about adding data to land lab grid elements. And there's also a working with fields tutorial. Let me just briefly skip out of this to show you where the user guide lives. That's easy. If I go back to the homepage. The second banner item here is user guide. And you can see there's a whole bunch of topics here. So in our little mini landscape evolution model where, where was the field. Well, here it is. I'm using that same function add zeros to create a topographic elevation field and then the next line I initialize it with some random noise. So, we've talked about grids we've talked about fields meaning layers of data that I attached to it the next thing to talk about is components. Before I give you a definition of a component let me give you a pictorial example of one way to build a model with land lab. So this diagram is sort of a pictorial representation of what would really be a Python code. The concept here is that you can build a complete standalone model by combining three kinds of things. You have a grid. It has fields, and you have one or more components associated with it and each component handles one of the processes that you're interested in modeling. Well, let's let's look more at what a component is so a definition of a component is given in the upper left here component is a Python class that has a semi structured interface, and then implements either a model for a particular kind of process. Or a calculation of some kind of analysis. So what do I mean by that, the various pictures on this slide show a few examples of some of the processes that land lab components are meant to model. So for example those who are into tectonics there is a component that models the flexure of the lithosphere as an elastic sheet subject to surface loads. And so that's handled by one land lab component. There's others for generating stochastic rainstorms or calculating soil creep or calculating channel incision or probability of landsliding and a whole range of different things. The current version of land lab has around 64 components, and the collection is steadily growing and thanks in no small part from contributions from lots of folks in the community. So if you want to learn about the component library one of the places to go is the section of the reference manual that describes the components. And here's a little snapshot on the left from that manual pause here and click over to it so you can see how I get to that. So here I'm back on the main website and you'll notice that one of the tabs is reference manual. We used to call this API reference but we found a lot of geologists and hydrologists don't know what an API is so we just call it reference manual. Maybe that's changed now. But if I go to reference manual at any rate you can see a variety of different topics here. And under it, one of the items is components. There's a variety of different types of components there's a lot of geomorphology because land lab was written by a team that includes geomorphologists like me. There's a lot of hydrology because there's also hydrologists on the team, but there's some other things as well. One, one thing that components can do, as I mentioned is analysis so you'll see for example under terrain analysis there's a variety of components that don't so much calculate a process or simulate a process as they do perform a calculation so for example, I can calculate what's called the steepness index or there's one by David Litwin at Johns Hopkins that does the height above nearest drainage calculation for flood analysis. Okay, so that's a little bit about the component library. So why do we actually work with a component. Well, you saw a glimpse of an example in our, in our short little mini landscape evolution model. There's really three, three steps to working with a pre existing component. Step one you import it. And that's pretty easy from land lab dot components import name of component. And the second step because a component is a class. And if you want to create an instance of that class and object you do what's called instantiating it. So next step is to instantiate a component and that's really just typing the name of the component with some arguments and parentheses and returning it to a variable that is your object that's, that's your instantiated component. So here are some examples from our little mini landscape evolution model three different components. One does the flow routing on the surface one does water erosion and one does hill slope gravitational transport. Normally components take a grid as their first arguments do you have to make your grid first, then there normally will follow one or more parameters that are specific to that component. So our flow accumulator says, I'd like to know what kind of direction scheme you want to use is it d4 d8 d infinity, or whatever. Then the third step is to run the component. There's a sort of a semi standard I wouldn't call it a strict standard but many of the components have a method or a function called run one step. It says do your thing. And if you're a time evolving thing do it for this amount of time. So an amount of time is one of the arguments called DT think of it as a time step. So you pass that as an argument. If the component doesn't require that argument we can leave it off. All components will have a go method like this they it won't always be called run one step. So that's really the basics of working with pre existing components, some resources to learn more about it. The user guide has a section as on the component library, the reference manual I showed you the section on components. And there's also quite a few tutorial notebooks about specific components. Let me also show you a little trick. I learned probably too late but it's a quite a fun little trick. If you're actively writing code, and you're in, you know, a Jupyter notebook or a Python session or something like that. And you want to quickly find out what's up with this component and what are its parameters. There's a couple of cute tricks here. One thing is I can print the components header doc string. So part of the standardization is that every component has a doc string a little document documentation string at its top. And that's internal to the code right it's actually written in the code, but we can peek at it by simply printing out name of component dot underscore underscore doc underscore underscore. So if I do this with the flow accumulator component gives me some text that I can read through about that component. Sometimes that text will list all the parameters it takes and what their units are and things like that. Sometimes that information is provided instead by what's called the init doc string. So another thing I can do is to print out the init doc string. Here's an example of that. In this little line of code, I'm going to the linear diffuser component, going to its init method. So that's what's called the constructor or it's the thing that sets the component up. And then say give me your doc string again double underscore doc double underscore. And normally you'll find there a list of all the parameters that that component requires it tells me I need a grid, it needs this parameter linear diffusivity here's what the units are and so on. Okay, so far what I've told you is about how you would work with a component that already exists but let's suppose you want to write a new component that's something we definitely encourage and it's not all that hard to do. I'm not going to tell you how to do it here but I'll tell you where you can learn. There's a couple of places one is a an introductory tutorial on how to make a component it's called the making components tutorial. And there's another one on component design tips that gives you some tips and tricks on how to design a component that that is somewhat standardized and conforms with usual land lab practice. So this first one will walk you through the example of making a little kinematic wave overland flow model that's kind of a kind of a fun little exercise. Okay, let's see. Let me say a few quick words about numerics land lab after all is a package for writing numerical models so what about numerical computing and numerical functions. So one thing I want to point out is that because we have this graph based data structure representing a mesh that has lots of different kinds of elements connected to one another. It opens up the possibility of doing a lot of different kinds of numerical solutions so finite difference finite volume finite element. All these are in theory possible. We have done some work to provide some built in numerical methods. But it's by no means complete. But I'll point out with a little code snippet here is to particular numerical methods. So this is a code snippet that's from one of the sort of first introductory tutorials. It's called the land lab false car tutorial. And it walks you through the exercise of creating a diffusion model to model diffusion of a of an uplifted false car. One of the functions it's used is the one that I'm showing here with a pointer called calc grad at link. That's a numerical function that goes to each link. Now link is a line segment that connects to grid nodes, and all it does is it computes the gradient in the field that you give it between those two nodes, and it assigns that gradient to the link between them. It's a nice handy tool for gradient based models things like a diffusion model where the temperature gradient or the land surface gradient or the chemical concentration gradient or whatever gradient you care about is part of the solution. Another example on the one of the lines in the middle here is calc flux div at node. It's a sort for divergence. One of the things we often have to do with numerical computing is if we have a mass balance model we need to do the flux divergence, meaning calculate all the inflows and the outflows of mass or maybe it's energy or whatever in a particular grid cell. Calc flux div node does that for you, given the way that represents fluxes at the link so it takes each link, and it adds up all the flows through all the faces of each cell surrounding a grid node and gives you the resultant net flux. You can read more about both of those in the gradient and divergence tutorial. They also appear in the land lab false car tutorial as I mentioned. Another thing is matrix creation, you know, often we have numerical methods that involve inverting a matrix. So there is a matrix creation tutorial as well. We have, you know, we haven't gotten very advanced with that but there is at least one component called the title flow calculator component that uses a matrix inversion to solve a steady diffusion equation. So there's an example of that. And that's one of the things that I'm interested in working with matrices. Okay, I'll tell you a little bit very quickly about other kinds of utilities, especially for data input and output. So one of the things we've tried to do is to use standard input output formats. One of the things that we use standard format text files, yeah the so called YAML format to read parameter input so there's a way if you write a little text input file in that format you can read it and land lab will parse it for grids and data. We make use of three formats. One is the Esri ASCII format for writing individual raster based data or reading it in so this is one way you can read in a digital elevation model if that's relevant to your favorite application. There's tools to read and write net CDF files, which are a nice standard, and maybe a little bit more exotic but there's a little utility that will write an OBJ file for a 3D mesh that you can then read into visualization and sort of solids modeling packages like Blender. Alongside that there's a number of because again bunch of hydrologists and geomorphologists are working on this. There's a lot of DEM digital elevation model analysis routines and functions. You can configure watershed type boundary conditions in a otherwise rectangular DEM and there's a variety of others. Places to learn about all these things there's a reference manual section that covers input and output. There's a tutorial on reading DEMs into land lab and a various terrain analysis tools you'll see under the list of tutorial topics terrain analysis is among them. Okay, I think the last thing I want to say here is has to do with contributing to land lab and getting involved. Landlab is a community resource it's open source it at this point has a lot of different contributors and developers. So folks have gotten involved in, you know, anywhere from raising or answering issues, here's a little snapshot from the GitHub issues page you can see it's sort of an active, active conversations ongoing. We certainly encourage people to if they want to help review a pull request that's great. I really want people to feel encouraged to contribute new components new capabilities new utilities, whatever it may be this is not meant to be a closed chop by any way, by any means land lab is meant to be a resource for for the complete scientific community who are interested in Earth surface processes. So I encourage everybody to get involved and probably one of the easiest ways to do that is simply to, if you have a question, or an issue or you found a bug, heaven forbid, or you see a need for a new enhancement. Go to the issues page on the GitHub site again github.com land lab land lab and simply post an issue and folks on the development team at CSMS will try to get back to you as soon as possible. So without I have all I have for an overview. I'm happy to entertain questions. I've put my own email address here as well as let me go back to this the CSMS contact and a reminder of the land lab website. And while we're waiting to see if there's any questions and verbally or in the chat. I'd be really interested if you are willing. If you'd like to just paste in the chat, a quick summary of your own interests. You know whether you're an active land lab user, and you're really interested in, I don't know, eco hydrology capabilities or just curious to see what the capabilities are, or you'd really like to see more on this topic or that topic. We'd love to hear about that. Interesting I'm seeing some different applications roll in in the chat. You know one thing I'll say I want to make a comment about speed so one of the trade offs you have in writing. One of the things that we do have a scientific modeling code is do you want your code. Do you want to develop it quickly, or do you want it to run really fast and sometimes those are conflicting imperatives. So our philosophy has been to to write code in a way that we can write it quickly and generate capabilities relatively quickly and efficiently, and then when we need speed to go back and do some reengineering for speed. One of the things for example that we've used in the land lab code base is Scython. You may or may not know that Scython is essentially a super set of Python that can be compiled, essentially translated to see and compiled. By writing certain computationally intensive pieces in this flavor of see and compiling them you gain the speed of a compiled language, alongside the efficiency of the kind of human efficiency of an interpreted language. I would really admit that in the development team our emphasis has very much been on on getting capabilities rolled out quickly. And so you'll find that there are, there are many components that don't run as fast as you probably like them to. I would say if you find that's the case, we would be happy to hear about it what are your bottlenecks first of all, and happy to work with you to think about ways to speed things up whether it's optimal algorithms, or it's, you know, wrapping things coding things in Scython or whatever it might take. I would suggest we can, we can wrap up at this point, and I wish everybody a good day but I'll hang out for a few minutes in case anybody has any, any specific questions, or you actually do have a couple of questions now in the chat. I'm seeing these but they, I think they're, oh I see okay great good. Okay, so there's a question about, could land lab be used to model processes, other than physical. Well let's see I'm not, I'm not totally sure what you mean by other than physical I suppose I think chemical or biological, and if, if that's what you mean yeah of course, you know. Although we have a linear diffusion component and you know because it was written by geomorphologists we tend to use diffusion theory to represent soil moving across hillslopes but of course, diffusion at its core is about motion of molecules in solution right so you could, there's a, there's a chemical process that one could, that one could model. You could model, you know things like the descent of a weathering front in a geochemical system. I saw at least one published application in an ecological context for frog habitat. And if I understood right I think they were using land lab really just to figure out the local moisture and the landscape so they weren't really directly modeling a biological process. But they were using it as part of an eco dynamics kind of approach. Another application that I think is really cool is something that Matt Rossi here at the University of Colorado has been working on. He's interested in how the growth and of trees in a in a forested montane landscape can drive the gradual turning of rock to soil. He has used the net logo agent based modeling package to represent the individual trees and the seeds that they spread across the landscape, and then he's married that with a land lab module that that moves the soil down slope over time. So in principle you can do a lot of different things that anything you can do on a grid essentially with grids and fields, you can, you can model. So that's on improving collaboration through interaction with hydro share. I think there's a there's a lot of scope here I mean the beauty of hydro shares, people can collaborate on on things like notebooks and codes. The land lab is now installed thanks to a wonderful collaboration with the hydro share team. As you know David, we have, we have land lab and the other CSD mass tools installed on that Jupiter Hub server. So it's a nice way. I think one of the neat possibilities is bringing models and data together you know one of the great things about hydro share is it's a great place to, to store and share data. And the fact that you can run models on the same platform as you have your data makes that model data integration process a little bit easier. In terms of geotips that's something that we'd like to do is have a geotip capability. G doll is super powerful. I've been hesitant to make it another dependency of land lab itself but it's pretty easy to integrate G doll functions and libraries with land lab calculations because they're all because of G dolls Python, Python package. Stephanie you can go ahead and ask your question. Hi, I'm Stephanie. Thanks Greg for your presentation and thanks for everything you do for the community and with land lab. So, I guess a little bit of my background I'm a kind of a tecton assist and I'm doing a project and tectonic geomorphology. One of the things that I'm interested in is like fault block rotation in the basin and range sort of Eastern California shear zone. And I know that this is currently a 2D kind of landscape evolution model. I know that there's some components like the normal fault component and some tectonic components and I was just wondering what kind of like I'm interested, like I said fault block rotation and I was wondering like what kind of options are there for like that kind of tectonic situation and looking at the geomorphic evolution in particular associated with that. Yeah, it's a great question, Stephanie. So, so far, the various tectonic pieces in land lab the components are our kinematic. Well and the components and other would not dynamic. And you would know better than me but my sense is that deformation codes are pretty computationally expensive. And he has so far tried to write a deformation code in land lab but that said, one of the, one of the tools for doing the kind of thing that I think you're talking about here that I think is exciting and that we're hoping to work with as part of this new open project, is a 2D plane strain, not plane strain sorry what do you call a cross section strain model written by Jean Arturo Aleve, working with Mark Bain that they've used to study extension and how the interaction between extensional fault blocks and surface processes erosion and sedimentation can effectively prolong the life of a master fault. And so they've got this deformation code sisters, the acronym for it that I think is actually written in MATLAB and we've been thinking about and hoping to couple that with surface process models written in land lab so we weren't thinking of actually rewriting sister in land lab though that's something you could do, but rather using the existing version of sister and then combining that with the surface process model that uses land lab. I mean John Archer has already done this with a different surface process code written in another way. But if you look at his, I don't know if you familiar with his work it's really fascinating he can show how the, the creation and lifespan of faults varies depending on how intense the surface erosion and sedimentations. Oh that's interesting what how do you spell his name I haven't heard of. Your name is spelled like olive like an olive in a martini. Oh, okay. I have heard of him. Okay. Yeah that's interesting no I do like my lithospheric scale deformation stuff in aspect, and they're trying to couple that with fast scape which I know there's a component in land lab that uses fast scape or odor, which is kind of cool. But yeah I'm just like trying to figure out what the different options are sort of trying to couple the surface processes with the lithospheric scale deformation, but. Right I mean that should be totally doable my sense is that it's the aspect is going to be the, the major number crunching part of it and the surface processes will run a lot faster, we have not yet tried to parallelize pieces of land lab but that's another thing that's on the, on the horizon for this new open Earthscape project is to try to take advantage of some of the modern parallelization built in parallelization tools like what's that new Python package call and blanking on it now but that's coming soon so I think it's doable but you know somebody has to actually do the work to stitch the things together. Let's see so there's a question about is net logo or agent based modeling part of land lab library the answer is no it's not but they're easy to combine and there is a. Gosh, I think this is in the land lab collection I have to double check but there is a demo notebook that shows an example of combining the Mesa agent based modeling library with land lab. A couple of simple examples of this from a tutorial we ran a workshop we ran, I guess, two years ago, and then Matt Rossi has one that shows shows something similar. So it's it's we haven't tried to build in the agent based rules directly in land lab because there's already really nice packages out there that do that and it's just a matter of sort of marrying them together. So, another question about creating nested locally refined grids. So the answer sort of a qualified yes yes you can do it the topology supports it. But we have not so far created the machinery to actually do that, though in other words, there's nothing about the land lab data structures that would prevent it having locally refined grids. But we haven't, for example, written like a, what do they call the quad tree grid type grid class that or the or the methods that you would need to, you know, add points or densify here or undensify there. That was one of the things that we had in mind when we created the grid routines but it just hasn't been a priority to write that stuff but if you want to write it, we'd be happy to talk to you. Let's see I see there's a question from Niles J. Swara on can we generate a drainage boundary at a desired poor point exit using a land lab tool. And can we do drainage divide analysis for identifying a possible drainage reorganization. Yeah, you can do both of those things so there is a way to set up. If you have a DEM. There's a way you can. There's a question that Nicole Gasperine wrote that will I pick. I think it's the lowest elevation point on the perimeter and treat that as the watershed outlet and then identify the watershed upstream of that. And then in terms of identifying drainage divide analysis there's a. CHI finder tool that will calculate the so called CHI index, which is this weighted weighted drainage area upstream integral that you may be familiar with. And that's a good way for identifying drainage divides. As I say we're, we're always happy to answer your questions. Please feel free to reach out and contact me or contact CSD mess at CSD mess colorado.edu. Or if you have a, you know a land lab specific question or capability or something like that. I highly encourage you to go ahead and post it on the land lab issues board. But for now thanks again for tuning in and I wish you all a good weekend.