Tutorial: PyGIMLi

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
live streaming is on okay and we should be live welcome everybody to the another tutorial as part of uh transform 2022 this one is going to be about pi gimli which is an open source library for geophysical modeling and in persian written in python so this is part of transform 2022 so which has a bunch of um openly accessible tutorials and similar things related to geoscience um particular digital geoscience uh we'd like to thank curvenote.com for their support of transform uh if you're curious about the schedule or what else you've what else has happened and what is going to still be happening because we're about halfway through um have a look in the description um the schedule is at softwareunderground.org forward slash transform if you'd like to get involved with some of the live tutorials and ask questions while they're happening have a look at software dot org forward slash slack and for this particular channel you want to have a look for t22 dash mon ml-models just a reminder you can pause and rewind this video even if it even if you are catching it live but um otherwise you know we'll see you i'm going to hand over to thomas gunter who will be taking us through a bunch of stuff for pie gimnee so take it away thomas yeah thanks madam thanks for the introduction thanks to all the uh sponsors of this event for all the organizers for made for inviting us to this really great event we've been starting uh to present by gimli already last year and it was a great success since then the video was uh was looked uh i guess like 5000 times and uh that's why we we thought it was a good idea to uh have a follow-up of our geophysical inversion modeling library pi gimli actually the title isn't very different uh but the focus will be a little bit different so i'm sharing my screen so you will see the readme file of the after repository that you hopefully have in front of you uh otherwise you can have a look at the main page of our tutorial i'm gonna uh starting with uh introducing my co-op course i'm thomas uh and then there's carson customer quicker is the uh is the main developer of pi gimli he's really the one that coded all the the uh the uh the nasty dirty c plus plus stuff and everything in the back and he and he will be also in the back of our of his leg channel which is also linked in on our readme file it's um t22 to pi gimli on the sapphire underground slack channel and also florian wagner who cannot be here today uh but who uh did a lot uh promoting uh and and bringing forward uh by gimli we're going to give a talk about uh physical modeling with pi gimli i'm gonna start with a quick review of what we did last year maybe you didn't see the the talk maybe if you haven't seen the talk already it might be a good start to to start with that one it will also be linked uh uh when i'm uh giving you a video of last year's uh presentation i just want to show some slides on what we did last year last year so we so we presented some ability of pie gimli regarding the mesh generation so we work with 2d and 3d measures we've created mesh having uh some layers in the background and having some some anomaly in it and and and showed how easy it is to control this mesh in the in such a jubilant notebook the second notebook was to to use this this credit mesh and to simulate it on it i find an element uh analysis of our of a heat equation a simple laplacian equation and we solved this and and we presented uh well the heat distribution and heat transfer lines and everything this is number two then next we designed a crossover travel time experiment so we set up a scheme of geophones and and and [Music] transmitters and then and then we then we used the same anomaly also for uh for making tomography a seismic demography which we in the fourth notebook are inverted so we took some synthetic data and we did a version of the synthetic data android very powerful and everything so this is pretty much how you how you readily use can how you can readily use pygmy which was also demonstrated for ert data for those of you not familiar with ert might have be uh you might have a uh a hard time this time uh because it will mainly be on ert uh this tutorial but uh but everything we do and demonstrate is uh can also be transferred to any other geophysical imaging technology so the electrical resistivity demography was used to read and some feed data and make some inversion and control that it wasn't just a little bit so these are pretty much uh ready-made tools that you can just copy and and paste from the from the web page and and a last notebook we we started doing something more complicating we use the very nice open tool open source toolbox empire mod as a forward solver and put this external ad library into our in vision machine and data and did some em 1d sounding of some synthetic model that's what we did last year uh but our idea now is to present pygmy more as the more of the toolbox that uh that can be solved that can be used to solve specific problems rather than the ready tools for solving uh already existing problems like inverting eft fear data that's why we want to go a little more into details a little more into the uh under the hood of our priority for any recommendation i i'd like to refer to the prakimdi webpage if you go to pygmy.org you'll find a lot of stuff on the webpage you can see a lot of nice uh papers that that we but other people completely independent of us made by ghibli and this really speeded up so in this three years of publication uh we had i was with already 160 references to the main paper and a lot of uh grimly related papers and you can have a complete list of those papers that are really actively using pie gimli here but it's all but that's also a lot of documentation you can have a look at the program the ap you can look at every function uh you can look up how different functions are looking like uh [Music] and ap documentation you can have a look at installation routines uh you can watch a lot of tutorials which are really uh teaching basics and this is pretty much what we're doing right now which is what we will be doing today actually the toys that you we're gonna present will be will become parts of uh this tutorial uh collection and then there's also examples which are pretty much what we did last time like uh crossover travel and demography or uh illustrating blade paths refraction modeling resistivity ip gravity magnetics darcy flow so you can see pie gimli is actually not only being used for resistivity tomography there's a lot more okay uh today we want to uh go in the very first part a little into into the details of some some very important uh pygmy classes which are the data container the mesh class server metrics types model and data transformation and introduce some frameworks we will discuss the genus statistically regularization which which is not totally new but we haven't touched this last week last year's tutorial and discuss it against classical movement types we will demonstrate you how to uh treat individual uh subsurface regions differently so that you can really have hands on your inversion so the version won't stay a black box for you but it will be something that you can actively use and this is also uh nicely illustrated by the fourth uh notebook which is dealing with the incorporation of prior knowledge into a into either inversion which can of course also be any other type of inversion and we quickly discuss different kinds of joint and company inversions we we probably will have little time to do to do uh to talk a bit about induced polarization modeling and spectrally constrained inversion and it will at least give us some outlook on what we're currently doing and and also shed light on some other packages that might be of interest for you from the pygmy ecosystem which are named here so before the tutorial started this was already written on the on the github on the github page which is also linked and returned in the transformation under the uh weapon and gimli or transform 22 you will see all the notebooks here those are the ready-made notebooks that that can be followed just by clicking through it i will step by step start from almost empty notebooks because this makes it much easier for you to follow we also provided some data that we're going to use and and there's also some environment yaml uh been given which can be really easily used to uh to create your contact to create your python environment using the contact environment so what you have to do that's the quick setup is to is to get hands on your data for instance by git clone or by done or i downloaded the zip file from on the project page then then uh change into this directory create an environment activate this environment and then start python and test pi gimli we will be using jupiter lab but of course you can also use any other ide like vs code or spyder or or jupiter notebooks uh that's not much different you can see i'm already in the jupiter lab environment so i have already started this triple lab command with you which will open right at the position where we are you can see on the left hand side we have a little more in the file browser you see the data folder that contains some of the data that we're gonna use in this um tutorial and then i have actually two versions of this um of this tutorial because i have a blank version with only the necessary steps so whenever you have problems following those installation routines you can uh you can go to the slack uh channel and uh talk to and talk to custom paste your your arrows or whatsoever but it should be very easy on both uh um windows lineups and and mac you will need the the latest pi giveaway version for those of you with with an active programming installation you will need the newest version 1.2.5 so download the mirror instead install the tutorial and then start tutorial and that's what we're going to do today and have a right start with a there's a very quick introduction so we so we start with the uh first of a series tutorial as we come from zero and python uh in this tutorial it wouldn't not be so interesting as the other ones but we will dive a little bit more into the uh the main uh the main classes mesh data container matrix types and uh demonstrate different kind of constraints that will be the next tutorial fourth tutorial original constraints and then prior knowledge uh in this notebook in all other notebooks i i have already put in some uh some imports at the top so that i don't have to repeat them again what we're gonna use is of course standard libraries such as numpy we're gonna have to import by gimli but we also use uh network uh as plotting library for also we will not do any 3d visualization this time and we're going to use the sebum notebook style and well this is just for making this notebook a little bit nicer the main important thing we're going to use pipeline for matpad lib as flooding library then we're going to import numpy and we're going to import pygmy and and as soon as we imported by gimli we should uh print the packaging versions such as also possible for numpy and probably in some cases there might be some issues also with a [Music] pipeline version just to make sure if you have correct versions it's not it's not strictly uh it isn't as good necessary but in some matter clip versus there might be some problems and if this occurs it can help you out because see the macbook version is 3.5 there had been some recent issues with three point five numpai is one point nineteen but should also work with numpy one twenty one one twenty one and also other like little persons uh if not uh if there are any problems this could be the the reasons for it okay let's start with the data container but assume we have a very simple idea of just storing data so we assume we want to store vertical electric sounding data and and we create an id uh maybe having uh if you have a spreading of our electrodes area and you're going to start this into uh by using numpy log space we start from from from one meter to one thousand meter so we're gonna specify the uh uh the exponent of this lock space and we've got this uh we have a logarithmically equidistant spacing and we're gonna essentially put a variable a b over two and actually what we wanna do and we want to get this into a data container so what we gonna start is we use the typically data container so so whenever you type pygmy you will see a lot of things with it probably too much but that you can just uh tap complete we will see that true instance there is a normal data container in the data container ert et is a specialized data container for for electric resistivity geometry but right now we're going to start with the empty data container and we're going to call this vs like a radical electric with no sensors and no data okay that's probably very simple the data pretty much behaves like a like big player like an empire named every but it has some uh some advantages that are important for geophilic that's why we created the data container back then but what i'm doing is uh i'm using a like a dictionary and creating a new data field called ab2 and getting the the values of 82 into it and of course only also abc times two it doesn't matter the names it's just uh and once you see it you have a uh you have an 82 range of 19 then you can see we have you have 19 data which is really uh which is really nice uh and you have one non-zero entries uh uh field called a b over two okay in the next step we're gonna put something else uh in like uh for a vertical electrical sounding here and usually have a potential electro explaining in contrast to the current electrode spacing and uh well i'm just gonna put in some other area and then i'm having an error because uh it's saying it's wrong data says ah but yes of course it's a data it's data list and matrix so uh actually i cannot uh use different datasets so if i'm using the uh the correct number there won't be any error in this case i uh i will use an error of the same thing as a b over two that's why i'm using uh one slag a b a d over two from the numpy and i'm gonna print it and now i see i have two two properties in my data container so say you want to do some uh with the collectively sounding what i'm doing is i'm creating a manager that's what we already did uh last time when we're doing eit and travel time inversion so i'm going to the correct sub module so you can enter the sub modules in the in the import routine but you can also access them step by step if i'm going into the erp sub module you'll see a lot of stuff which is in the erp there's also a pds manager so i'm gonna pull that to manager which is empty then i'm gonna model a certain model and this is a layered model of three layer cases so i can have two thickness values 10 and 10 meters and then i have a 100 ohmmeter 10 ohmmeter and 1000 ohms have a free layer case what i'm doing is uh is i'm using this this miniature to simulate this model with a given a b over two play it and that's a given uh m over two layers and as we said we have some uh you get some numerical values and as you can see they start with 100 ohmmeters then they go down uh 2x to 10 ohmmeter and then they go up again which is which is somehow nice but uh but he has a nun value actually a nice idea which is very uh simple to say because uh our m and over two values already start with uh uh one meter and our a b over two values start at the same position so we have current and potential line at the same at the same position that's why i'm going back uh and i'm using a smaller electrode spacing and now you see you have a uh you don't have any non-values and the result we also put into our data structure and we call it apparent resistivity it's just a name so there are no predefined structure you can call it whatever you want and then you see you have free data in these structures so how's this going to look like i'm going to use pod.subplos and it's returning a figure and x is a network lib and then i'm gonna use this uh to make a lock lock plot of of all the uh resistivity on the x-axis and i'm gonna use the av over 2 on the y-axis and i'm going to plot it with excess end and so you can edit i'm going to add some magic to it which is turning the uh the limits up and down adding a grid to the to the axis and and having some labels for the applied resistivity on the x-axis and the uh and the a b over two on the y-axis so what we have as a is our uh measuring curve starting with a first layer resistivity then going down not not to it not quite to the second layer resistivity then going up and also not reaching the upper resistivity okay this is how it looks like uh what we usually want to do is for for any other purposes is to save this uh stuff and then the the data container has a lot of options so you can do a lot of uh you can add add point you can uh check uh the validity of the data we will do this let me create centers you can you can look into the data there's also a save function look into the uh black swing it's it's coming from c plus it's not very it's not looking very nice but but we're gonna just call it restart data and we could look into the data we can just quickly and you have to the content of this uh of this uh file type down so the first part of this file is is holding the sensors in this case we don't have any sensors any transmitters receivers are whatsoever we just have 19 data and they are organized in columns and we could also say well we just want to have the a b over 2 and that time resistivity in columns and then we see when we see nothing is is saved of course the data are if we take this uh if we take this back the data has also a an additional column which is called reddit and it's unfortunately called uh yeah it's unfortunately on the on the uh outermost column this means all of our data are invalid so what we can do is is we can mark all those data valid there are different marking functions so you can uh kind of mask your data but you don't have to to delete it which is very important when you process your data you you're keeping your data structure uh as it is and at the end uh uh on from the front version you can delete your data so what you can do is you just mark your data and then you can uh say well we mark heavy data with s a b over two uh then we're going to copy the f structure uh we can say any any data that a b over 2 is bigger than 0 is valid and then we have the one anywhere recommended and then we can also uh say we we only want to store a b over two and an apparent resistivity in there okay this is a a very simple data container of course we can add whatever our flags like something like uh something like uh we can have a look at all values uh below uh of its own threshold like over 100 ohmmeter and we transform this into a standard vector and then we save all also this flag and then we see uh that we have marked all values above 100 over the one and our other values will be with a zero so we can do a lot of electrical operations and and so but very often the data containers become important when you have index data and that's the next step so again we are going to create a new data container you're going to print it and it's again an empty data container like in this case we assume we have a some sort of transmitter in sensor the receiver we use the function register sensor index which means the data called rx it's just a definition uh of uh just an arbitrary definition this is a sensor index so this should not be a 1.2 this should be an integer and the same we do for our tx and then we have rx and ps as fields they can be excess like all the other fields but they have but they are special fields they are essentially uh okay something was uh glitching yeah okay then we create some sensors so what we can do is you create a sense of the uh by gambling positions so what we can do is to add a certain position what i'm doing right here is i'm creating loop [Applause] i'm using pen pencils and i'm creating a sensor spacing of 2 meters and then have a look at the data so i'm still have no no data but i have 10 sensors i can print those sends off like uh pg and then you see the sensors start at 0 2 3 1 18. okay now i'm going to add some data to the to the data container i'm using the rx field the receiver starts from the very first sensor and goes to the sensor number 12. i don't mind there but we only have 10 sensors and again if i want to [Music] i want to do the same for the transmitter and i'm using a different size i'm going to have an error because the 11 doesn't match the the 12. so they what i can do is to uh is to use a numpy and here's the date i've got size which is telling me the number uh 12 and i'm using the number 2 as a sensor because we have closed eight uh data and ten centers and you can of course uh [Applause] save the uh data file again let's call it test. beta and then i'm gonna like type edit again so we see we have our 10 sensors 2 meter spacing xyz and then we have some rx values are starting from 1 1 to 12 and 3 3 for the receivers three number three for the transmitter and and and and one to twelve for the receiver which is uh kind of uh strange because we already put in two and a number of twelve and this this are some historical reasons because uh right now we started with ert and we defined the number zero as a infinite electorate as a remote electrode and we started to count uh real electrodes as number one actually we started from from matlab and uh this is why it it's indeed a bit uh strange you can change this behavior by setting a different data type but uh but for historical reason we will we will stick to it okay so we have some receiver we have some transmitter and we're gonna i'm sorry to do something else of it so so we can uh again mark what all the data valid so that we don't uh fall into any problem we can mark our all transmitters uh reddit and then we can also print the valid validity of the data and this is uh reddit all the time so so there's some something in it and uh but of course we know that we we still have uh numbers here that that are integer numbers uh referring into the uh into the center list but there are only ten sensors so actually there's something wrong that's what you're going to do with uh click data validity and then we're going to put the data again and then we see after okay we have 12 uh data before but now after checking the data ability two two data has been deleted and we now print the uh i printed again the file then we see that the the number 11 number 11 and 12 have been removed because they are invalid because they are referring to a center that doesn't exist okay we can do some other computations with it for instance uh you can uh uh [Music] extract uh the center x this pg of data and then we're gonna define the distance between the twitter and receiver [Music] and we use the the absolute difference between the x-value of a rx receiver minus the uh x value of uh px receiver we have distance between transmitter and receiver we remember that the transmitter is the third er index so that's where we have a zero distance here and we have an increasing distance between transmitted receiver to both sides then we can uh for instance say why we don't have a receiver rather translator it's because this is this this is going to destroy our uh [Applause] it's going to destroy our transmitter that we can just use any logic expression like data i rx is data tx and we if you see it's still there it's still 10 data but uh it's just marked inverted if we if we want to remove all the invalid values then we see the data has only nine data entries and again we can print the the distance function we're going to see that the zero from the original distance line has been removed because transmitter is zero at the same point and uh so we can do a lot of things with these uh transmitters uh with those data so like uh inserting uh gonna create a new center and for instance we can use uh we can use the center list and we take uh by just taking the last sensor the data centers is uh is gonna uh produce this all the sensors that we take from at least the last one and create a new sensor probably probably it's enough to have only data here uh and we see we don't have any more sensor well because there are those are unique sensors and there's already a sensor the same position but if you then we see we have 11 senses because this is a new sensor and uh but actually this this center is not used so what you also can do at a later stage is to remove unused sensors the center is going to be a reduced again and it's and it's doing all the numbering and if we insert some sensor in the middle then we can sort it and everything so there's a lot of functions in the data container that are not so easily accessible in a number uh named area of honda's data frame one thing that that might be important is to plot such a sensor to plot such a data container and there's a little uh linear functions so we go into the viewer sub module we have different uh uh different functions but there's an mpa view and there's a function uh but another another show function and draw functions for plotting all stuff and that's for instance a plotting function for data containers matrix and and this is plotting the data container with against the tx layer and and the distance as a function and then you see the uh so you can plot all your data container as a cross plot between your stuff uh uh next one is the mesh class let me speed a little bit up uh mesh we have already uh created some matches by some automatic uh stuff now we're gonna uh do some uh by hand mesh generation just to to show you some uh we're gonna create a new mesh and call it mesh okay you got a print image uh it doesn't have any node cells or boundaries so ratchet has no cells or boundaries so what we can do is to create created note at a certain position we see a zero position and we call it n one one and we play the note and we have one note okay what you're going to do is to copy this again and again what i'm going to do is to place two nodes next to each other one at 10 1.0 2.0 then we have already three nodes but for free node we cannot create any mesh that's why i'm gonna use another line of notes which are having different numbers in the same x positions one two and three but at different right positions of uh one and just by actually i'm giving one of those notes a specific marker equals one if we're going to do this we have six nodes and we can also already excessive note markers so we have a vector of zero zero zero one uh zero okay then i'm gonna create two more notes in the middle uh between even above the two notes so what i'm going to to produce is a is one row of two quadrangles and then i'm going to use two triangles so i'm using the uh the function make the triangle which is uh using nodes and one one and one two and in the second row two one two two all right yes of course that's not enough that's not the correct note but now i have one set and one cell okay i can also give it a marker like i'm gonna give it a marker of four which is uh just specifying the rectangle for me and and i'll do the same again with here the next note so one two one three two three two two and what i can also do at the very end is let's show this mesh when i get rid of those uh semicolons then you see can you see two two cells that are two blocks but what i also want to do is to create two triangles a lot of these so we have one quite two quarter quadrangle and we see there's a strange uh node marker ring because i have uh created this node like one two three four and that's why i have some edges in between that's why i should uh turn those notes around so that they are circular and then i see the two the two the two quadrangles and the at the frequency and it's three triangles what i can do is to um it is to show any sorry what i can see is the dimension does not have any boundaries because we we didn't put any downwards in but this can be automatically uh be done trade we see we have 11 boundaries which are the edges between and and at the outside one two three four five we also have a triangle here and any convex body then we see we have 12 boundaries um i'm gonna do this mesh again so having a look at the marker and we see the triangles have a mark of three and the quadrangles have markers a four like like i specified before uh as i'm leaving this marker out and i just wanted to uh to show you i'm gonna do some magic uh copying what i'm doing is uh i'm plotting uh iterating for all the nodes or the nodes what i'm doing is uh to add a text add the uh node x value node y value node point [Music] and then i'm gonna the text that i'm going to put here is the node id and for this i'm using the color d0 then we yes we don't see it because we cannot flip uh we have to return the access object to plug into this the every show function returns to object which is uh an axis object that you can draw in and a color by in this case we don't need a color bar that's why i'm returning a blank but i can see that all the notes are zero one two three four five five seven and the same we're gonna do with uh the boundaries and and the and the mesh cells so we've got a mesh at the center of each mesh shell we plot the the number of uh the id of a of a mesh cell and at the center of a boundary we plug the uh the idea for mesh boundaries and then you have the whole mesh planet here so you have the zero mesh size zero one two three four in the in the order they were created and we have the boundaries uh zero one two three four five so we can access all those boundaries and of course we can also access node markers uh cell markers boundary markers and adobe markers have something to do for boundary condition for final element computation and so on okay uh i'm gonna skip the next one what i'm gonna do is uh okay i'm gonna uh have some uh uh some quantity i'm just using an and now the a range of uh a note count and i'm just adding a number 10 and then i'm gonna control how the mesh enter okay and you have the uh uh the voltage distribution because it's lowest here and it's uh it's from 10 to 17. and similarly i can also show any other uh property then i can also put into the match that can also use the mesh like the dictionary and i can do something like mesh velocity is this case we need a cell count adding 10 and then we're gonna show the mesh we have the mesh velocity as property then we have the velocity distribution that we just ordered from 10 to 14. okay what we can do at last reformations is we can save it under a binary formula but we also can take it as a vtk file and have a look at the if i then oh yes the call is export vtk and ptkfi looks like this is also very familiar format we have eight points five cells and there are quadrangles and rectangles with different types and we also have the have the velocity function in there you don't have the voltage because this was just defined outside okay now we're going to step to the next important point we have different matrices and i just want to go quickly through it through the matrices uh but they are important for uh also for for the constraint for the regularization that's why i want to go into details about a little bit into detail so there's a dense matrix called uh matrix so we can change so we can initialize such a matrix with a size and you see a metric which is full of zeros and then you can index anyway it's just like a numpy matrix but yeah but what you also can do is you can also access whole rows of a matrix like an a range of four then you have an uh one two three four in the in the second row so this is really this is a very uh uh often using matrix for for everything that stands like a jacobian matrix of ert or whatever this is very often this also exists as a complex matrix then there's an index then there's a index based sparse matrix which can be created like a snap map which is a false matrix you can also yes all the classes are starting with a big s and it's not so easy to to see it but you can uh it is metrics it's two by three but to see any entries you you would have to uh get some values and this is uh done by said well some other values in and then you see the uh viscosity structure so we have like a first order derivative uh in the in the first row uh in the zero zero button we guess there's a minus one and then the next one is a plus one which is actually a second actually first order derivative if you multiply it by a model vector to just take it the difference between the second and the and the first uh model parameter and and in the second row there's actually something like a second order derivative where you put a minus one a plus two and a and a minus one in there of course you can uh multiply by any vector and then you have a wizard which is a two two by camera so you can multiply it even with a list or none pair vector or by giving directly there also they are compatible uh i'm going to quickly uh uh go full our matrix there's a column compass matrix mostly used for finite element equations uh inside of a fem kernel there are diagonal matrices like the identity matrix which is uh which doesn't have to store any bundle so if you want to use an identity matrix you just have to to create one all the matrices are under the subject matrix you can create an identity matrix of form and then you can then you can multiply yes of course the because the dimensions have dimension then you can multiply any vector by it and then you have the same vector as an output then there are weighted matrices uh where you can use this matrix like initialize a standard matrix of three by four and and adding a value of one two is it so that we have uh one blaze in eight and then we have a waiting vector uh which is containing some numbers for the weighting and then this is a might left matrix which comes important for the constraining for the regularization and we multiply the weighting vector from the left with matrix and then again we can uh use multiply this with a length four and then we have a uh ray like this so the weighting takes uh into it goes into this matrix uh b but we don't have to to multiply but we don't have to create this explicitly so there's also a waiting on right hand side and value from both sides and we're going to use this for jacobian matrices transformations or whatever there are combinations of matrices uh like multiplication of two matrix or the addition of two metrics where you can completely avoid to uh to do metallic matrix computation because they are they are they are expensive if you have the two matrices uh ready then you just have create a new symbolic matrix which is holding those two matrices and the most important type is the is the block matrix that i quickly want to go into which is a metric which is really very uh commonly used in pygmy we have a block matrix if you don't see much from the block matrix that that's why we're gonna show the block matrix uh but actually saying that there are no no matrices in there so we need to add some matrices so like uh like one matrix my two metrics and i'm adding this to the matrix a at the position zero zero and then i'm also a adding the same matrix a1 at another position uh because when you contain a different time frame with the same constrained method you don't have to copy it then you see you have the two matrices uh on top of zero zero but also on two two but you can also uh uh an identity matrix of of five for instance and then add this add it at a certain position this identity matrix then you can either possibly matrix for instance of the same type two three under the when you add this also and then you the matrix can be on top of each other and can uh slice each other it doesn't matter it's just a block matrix which is uh yeah being being been created from several other matrices okay this is what we want to do with a major scene and now i'm gonna start with a quick introduction into regularization so again i'm using the import functions i'm done checking i'm not taking the package again if you go to regularization which is important thing in in inversion we are minimizing some data objective function which is the difference between data and advanced results weighted by the error estimate epsilon this is our data objective matrix uh as this minimization problem is non-unique we add some uh regularization parameter to it and and for this we're using some operator or wm uh and this regular second operator is using some constraint operator and we will illustrate here some uh some types of some types of constraint operators [Music] with some rating functions so we see this is a multi-left error this is a mind left matrix so we have some operator c that can be weighted by uh some operator and we're going to have a look at which kinds of operators exist in in pokemon for exemplifying this we're using a very simple forward operator that we're going to use later on uh which is called prior modeling which is a just a mapping operator assuming you have a mesh and you have some measured uh and you measured the value somewhere somewhere on the range of this mesh then you uh then this mapping operators just finds out the cells uh of the individual position so we it refer we iterate for all the positions find the cell where this position is and and restore and restore the idea and the response of this forward response is is just the the model at this very position and similar is also for the for the jacobi magic which is uh really which is a very simple matrix with uh the one where you add the at the i uh radio of the ends index and we're gonna we're gonna exemplify this by uh on behalf of the triangular mesh of a simple uh simple domain so what we're gonna do we import import mesh tools as empty then we're going to create a rectangle many many trade functions uh a rectangle uh starting at uh zero minus ten so we go into the sub-surface and ending at 10 and 0. we have this rectangle here then we create a match this rectangle and we see wow the mesh is very very simple because it uh it's just a true cranial nerve to have a to do some computations on it uh we need some mesh quality for the translation uh but still this doesn't help here but what you can do is we will stick the mesh size uh to a certain certain level and then we have a triangulation of subsurface now we define some positions where we measure our fields so we have a probing so say we have three and minus three has a position in the left in the upper left edge and then and then we have seven and minus seven in in the lower uh right left edge and we measured some values uh which are 20 and 15. what we're going to do is we create a forward operator bottling which is taking two different uh because it arguments the one is the mesh and then the other positions okay now we have our phone operator we found one region and now we said that now we set up an inversion instance a thought operator and what we uh what we will do is to to create an inversion so from the inversion we create an inversion instrument which is a pg inversion and then what we can do is uh instead run and of course uh explain because the positional arguments are missing and so what we need is for the uh the values is a data valves and we need the error wells let's say our data have an error of uh data of 10 then we add an error and then we're going to need a stop model let's say we have a start model of 10. this could also be a vector [Music] okay yes because of course what we have to do is we we need the species right before the water so we use our forward operator and in this case we also also when i have some output of the inversion and then we're going to run the inverter and it's after two iterations it's fitting the data almost perfectly which is natural because we have only two data and to show the inversion result we are returning to results from the inverting the make sure the pizza for now i'm turning the the verbals so that we see a little bit more okay if you look at the result we have a um a value of 20 here anyway 15 here and the middle and the rest there's some middle so what we have by default is a first order smoothness what you know i can do is to uh this to uh central idealization parameters and for doing so i will take all those parameters into an inversion keyword box that i can this is producing the same result but i'm storing all my arguments for the run so that i can uh easily run the uh the inverting again with the same arguments if you don't have to recreate the inversion there's a function set recognization which is uh having different arguments there's a regional number which we can omit uh in this case it holds for all the regions in the subsurface you can specify starting model limits for the uh for the parameter transformation function constraint type a vertical weight and define several several options for this we run it again and keyboard and we are gonna show it again i'm gonna just copy paste of course the result is the same because this is the normal constraint that if i'm using the constraint type 0 which means i need to uh use the result is that we're using a zero type which is a pure damping of in of a model apartment we see the model is throughout one everywhere which is the logarithm of uh uh logarithmic one is zero so it is it's driving the the model towards uh thirds towards a zero value because the starting model is only a starting model but if you add the reference switch then this the starting model of 10 meters becomes also a reference model if you change this the image doesn't change much but the uh by the whole background is now of at 10 ohm meters instead of 20 or m so we see the damping has a really very low uh local footprint and doesn't have as much in the in the inversion we're going to copy this i'm going to use a second orders movement and here it doesn't make a difference that will use the x reference tool or not because we will have a very smooth transition we have the 20 ohmmeters around here 10 millimeters around here and uh and then we have a smooth transition from here to here even with the values above 20 and and below 15. if you want to have a look at a closer look at the constraints that we can access this uh matrix it's a sparse map matrix we can have a look at this matrix i'm going to use a marker size so this is the second order smoothness uh the second of smoothness complaint which is kind of a blazing operator if we gonna call it again with a first order smoothness and visualize the uh the constraint again then this is looking different so in this case we have the mesh of almost 800 model model boundaries and we have 500 and we have 850 model boundaries and 540 cells so the so this metric c is is it is asymmetric net as much rows as as there are boundaries between the between the individual triangles and as much columns as their cells uh now i'm going to go to geostatistics inversion to statistics regularization this is uh taking not only neighbors into account but it's having a wider correlation by using an operator which is defined by for instance an exponential model and more details you can find on tutorial okay yeah so sorry about that okay ah there we go thomas is back i'm not quite sure what happened there yeah so it seems like i have been offline okay so we're going to proceed with the hg statistic constraints and actually one thing i wanted to uh to show you before is also the [Music] effect of a circular vertical smoothness factor which is called satellite which is defining the purely uh how much people purely vertical boundaries behave in contrast to horizontal boundaries because very often we have uh more or less layer subsurfaces and in this case we have a footprint of the subsurface which is a regularization footprint is rather isotropic around these these points but if i'm uh reducing this vertical weight then we can uh enforce uh more or less laterally constrained uh subsurface models and uh [Music] maybe that we're gonna end up in in structures that are that are more horizontally layered we can also put it the other way around and have a vertical layering i just wanted to show you because we're going to need it next time as time is running short i will not go into too much detail about the the uh statistic constraint matrix because there's a nice tutorial here i can thomas maybe just try stopping the screen share briefly i'm not sure if you can hear me um if you stop the screen share and then try again maybe that will fix it not sure what's causing the problem okay so i guess there's somehow some error before the game page not responding okay if you hear me i can proceed uh i think what it might be is that you've shared a specific tab rather than the entire window and when you switch to another tab maybe it gets confused i'm not sure if that might be what causes it no i wanted to i'm sharing the whole screen but i wanted to uh to show other uh well it's back so it's back okay okay okay but what you can do is is to use the statistical uh geostatistic regularization by a different correlation length in the different directions copy from here i'm using a correlation like five meters in the both direction which is uh producing an image which is similar but i can control uh much better on how the geostatistical distribution of my parameters is looking like by defining different correlation lengths in the horizontal vertical direction for instance or also using a dipping vector so that my result is stepping in [Music] in one of the other directions this is what we're going to use also in the next tutorial i'm going to start with the ert feed data inversion with region specific behavior which is the late case this this measured data have been this data have been measured at a at a lake across a shallow lake with about two three meters at depths and what i'm doing is the is unloading the uh the data and bringing the data actually this shouldn't be actually this shouldn't be blank uh but i'm gonna step into uh i can i can also show these data that's not working but it can but you can see you have a data you have a data container with 48 sensors and 658 er point what i'm doing right now is what i did before is i'm plotting the x positions again the set positions uh just to see the uh the symmetry so we have the first two electrodes on on the shore and the last two electrodes on the shore and in the middle we have the petimetry which is about 2.5 meters deep the whole profile is uh 80 meters long so that's very nice uh i'm gonna i'm gonna show my data but it doesn't uh it does tell me there's another kind of resistivity in the data of course when i'm looking here there's a b m n uh curt electro's potential error code has some errors in it there's some current and voltage and resistance in it but uh but no append resistivity and a geometric factor apparently i need the uh computer geometric checklist of this data and what i'm doing is to putting it into my data container and i have also a chromatic factor k and i need to compute my account resistivity by the uh by multiplying the resistance of uh uh for measurements with a dramatic picture and then and i also have applied resistivity and now i can uh this erp show or pg vector many ways to the target uh to show the client resistivities i have a pseudo section which is uh uh not a subsurface representation but what i see here is i have a vendor better i have a slimberger measurements with a a small diaper in the middle and an enlarging a current diaper and in the second uh in the second part on the lower part i see the uh i see even better measurements all those data or those two different data types show an increasing uh resistivity steps starting from about uh 20 20 meter to uh to about 100 ohm meters at maximum and i want to do an inversion of this of this data set so first of all first i need to compute the mesh so what i'm doing first is is using the mesh tools i have to import it and then to i'm using the function empty the create rms plc i'm using a depth of 20 meters and what i'm doing here is just for visualization purposes very small boundary usually the boundary around the inversion mesh is much bigger but in this case i'm going to use a very small boundary and the result is called psc it's a piecewise linear complex i'm gonna i'm gonna show this plc which is indeed strange because it has already always been been working [Music] start over again is everyone here um i'm gonna start it continue something it has been working right now and it's not working anymore um [Music] curse of life coding okay um so i'm gonna show this late case in a in the ready tutorial this is really uh really a shame but uh but it has been working right now and for some reason something's not working here okay we are at this point uh if we show this uh this parameter mesh then we have uh this this psc then we see the delay button topography we have the boundary of the of the background uh region around it and then we have the inversion domain here but what we need is this water domain what we uh and if we plot the uh the nodes and the shore if you plot the first 12 nodes then we see the node number eight and nine and ten are at zero and then they're going down to the uh down into the pedimetry and if we go to the left so what we do is to is we connect the node number 10 with another number 100 so we take pse node 10 pse not 100 and give it a marker of uh one and then we add a region marker at a shallow depth at about the middle of a profile at 10 centimeters left and give it the marker free this is our water body and if you show this then then we have three regions the background the inversion domain and then the water body actually what i'm doing here uh i'm creating a mesh so this that this whole domain will be subsurface uh discretized and uh and showing it again what i'm also doing is i'm getting rid of those uh marker one which is the delayed boundary because this is uh leading to problem so what i'm doing is uh i'm searching for all the mesh boundaries i'm using a loop for all measured boundaries and if this mesh boundary is -1 and if this boundary is not outside which means above here if this is inside i'm setting the marker to 2 and if it show and if i show it again i have my mesh manipulation in in cedar you can see the mesh marker uh and see the boundary mark of two inside of a inside information now we can do an inversion movement so i'm setting up an ert manager that's what we did last time so i'm starting an ert manager with a ert data uh i'm saying verbose is true i'm setting a mesh which i have constructed previously by the function set measure and then i'm doing an inversion standard inversion and we see the chi-square value is going down to 2 which is not as as low as as i would expect but if we look at the data fit which is the data the measured data on the left hand side and the model response on the right hand side we see an arm as a three percent it's pretty good and and we can hardly see any obvious difference between the two but what we have to do is to look at the uh the misfit function so that's why we use the function uh manager.misfit and this is this is producing a the the relative misfit of a data and model response and then see uh it has a lot of systematics in the data so there's still some structure in the data that needs to be inverted uh to actually be a random distribution of gaussian noise uh i'm going i'm going to show the the results so i'm using an uh uh a constant keyword argument which is defining the minimum color map and a maximum color by the logo of a column of this color map and i'm showing the result and if we show and if you see this then we have a subsurface image which is very smooth and then we have a very low uh resistivity which is actually level what we expected because uh when we measured with a connectivity meter the conductivity of water and we find out that we found that a value of 22.5 so actually here the resistivity is is below 20. to access what's happening in the water i'm using a a very interesting function which is called master dot submesh uh so i'm so i'm extracting a submerge of a mesh and i'm using all mesh sales that have a mesh cell marker of equal three which is all the water body then then i'm ex extracting from the from the manager model the last uh the last water cell count values from the model and then i show it and i'm showing only the water resistivity and i see very low radius of four or five ohm meters up to 19 ohm meters so which is which is far below the 22 meters but actually i know something about the water so i should try to limit this i already explained the uh the set weight value which is uh the vertical weight and if i'm using this uh this vertical weight here then i can see i get a much more layered subsurface and i also see in the water layer there are surveys below 20 ohm meters but they are but they are much more around the uh the expected players so uh even the the the regularization the strong organization disturbed my my fitting because now i see i can i can reach my chi-square of one and now you see in the sub-surface we have a water layer but still uh two high resistivities here but we see some layering which which is a muddy uh sediment layer probably and and some higher resistivity uh better in the subsurface this is a much better image but actually i don't like what's happening in the water that's why i'm setting reach a specific regularization so i'm using the same functions method uh i'm using the inversion object inside of a manager and use the set virtualization with a keyword argument with a non-keyword argument number three which is the original number and i'm saying what my water body should be limited between 20 and 25 uh meters there are several functions to limit this usually this is done by a logarithmic transformation and if i'm doing the inversion i i also end up with one ohmmeter and i see what very nicely my water body is almost constant because i limited the way i can still fit my data so this was obviously a good idea but i see very low resistivities below the water so maybe something's wrong with my constraints enforcing some artifacts or or there's something are other something going on the sub surface maybe in muddy uh i could also limit my regularization uh limited resistivity of my subsurface layer number two uh but uh this can also uh plug this can actually fit my data and produce a model that is above 20 ohmmeters in the whole subdomain so actually there's not that's not a big difference between those two models so if i'm pretty sure that that my values are above 20 ohmmeters i can i can constrain them to be above this value by this limit function but actually i would expect my water body to be constant body so uh what i'm doing is i'm i'm keeping off all limits that's why i'm setting all for all regions a limit of zero which means no limit at all then i'm setting the number three uh the water body to the so-called single flag which means uh all the triangles in this water body are reduced to one another inversion so it's only there's only one water resistivity uh being involved again i can fit my data and if i'm plotting the result i have this value and if i'm looking at this value it at the very end of my profile and at the very end of my model vectors if i'm plotting my model vector uh i see a value of 21.8 ohmmeters so actually this was a nice idea i kept it free and uh and the inversion automatically set up an inversion uh a water resistivity of 21 ohm meters which is really nice but i can also if i know it exactly there's no need for any inversion so what i also can do is to use the fixed argument and i'm fixing the water conductivity to 22.5 again i'm able to fit the data with a chi square of 0.5 very good fit and in the result i observe almost the same surface structures but the water body is gone because it's not a part of inversion anymore while in the in the single region it is it is a projected deck the one unknown is projected back into the whole water body uh now the whole water body is outside of the lane what it can also do is is to use statistic uh length in this case i have a 30 meters in horizontal direction and two meters in the vertical direction and then i'm ending up in a uh in a resistivity image which is also feeding the data but looks uh very layered because i really enforce the layering so this you have to be careful with this region layers i can also do just for meters of completeness i can also couple those two regions that are otherwise decoupled so there as those are different regions i usually decouple but i can couple them by using the indirection coupling argument then i'm getting a reset which is again very implausible with high resistivities in the water but there might be other cases why this behavior might be meaningful as a takeaway messages you should always have a look at the data fit and get your hands on the data around and you see a lot of models can fit the data equivalently particularly in this food space case so so you need to control your regions and you need to constrain or fix whatever it's possible to fix and reliable uh and play around with your parameters and just as these constraints can sometimes outperform the atlantic is movements but sometimes uh it doesn't so you need to be careful with this because all your your you should be encouraged to play recognization and keep looking at the data fit and play with regularization and and compare the different uh mods okay now i'm trying to go back to my uh uh foot notebook maybe this is going to work out i'm going to do it again in style so we have learned a lot about regularization schemes and different kinds of regular sites and how we can control the subsurface and this is this is something we want to use for a specific case this is incorporating prior data into inversion and this is a assuming drill to borrow or drill direct fish signing and we we have a data set which is called that work x set r the x position is constantly 155 the set position is increasing and then we have the resistivity measured by the push starting so we start looking at that and read in the data by again from txt x set on you can follow whatever you want you unpick all the columns and name the columns x y x set and resistivity and then we want to plug them so i'm gonna generate a subplot and then we got a similar graphically flat resistivity over there from the depths which is already negative because in our our uh definition set comes upward and so so minus steps are below the surface i'm adding uh a grid layer so what we have here is a clay layer at the top that we have our uh in the bedding of certain scent layers in the middle then we play again and we have uh with a resistive battery at the bottom okay then we're gonna do an elt measurement and uh and we're gonna load our ert data we're going to use the function emp load that can load a lot of different data formats and we can produce later so we have 64 sensors and 1000 uh data and we're gonna show this data so we unlike blood unlike in last case we don't have to do anything uh uh with the data the current resistivity uh is again combined with two different uh data sets is the vena alpha data set and schlumberger data set and and we can also look at the errors which are already nicely uh estimated starting from three percent to four percent so uh so we can actually go right into integration with those data so so again we create a manager the ip manager put in the data for both i'm going to use a depths of millimeters we don't have to create and mesh the phone we can also uh input all our mesh arguments also in invert command and i'm gonna [Music] limit the maximum cell size to 100 square meters and here i'm going to see inversion commented a bit too deep and then we're gonna and we're not gonna see too much in this uh in this notebook okay so so we see a really straightforward data fleet uh to the year of uh today of caseware one so we're going to have a look at the result and look at the data fit and the results are already explaining something uh well we see a recent underlying bedrock topography is in increasing resistivity but it does not much uh there's not much uh in common with our uh with our sounding that we that we have measured but actually what i'm doing is um i mean some keyword arguments to make the results nice and reproducible so that we can compare different results uh and i'm also returning the axis and the colorblock of the actual results argument and then i'm splitting the positions of the measurement so that we can see where we have our measurements decreasing the marker size and we can see that there's a larger spacing of a point in the upper part and there's a higher spacing where there's a lot of things happening uh actually we want to when i have a comparison between those type of push data and our real data so what i'm doing now is um create a precision vector as we did before in the other term and i'm iterating for all the zipped x and set values which is a just a pair and i'm using this this position vector and i'm using an interpolation function we can extract our mesh the resistivity from our mesh in the same position okay we're gonna have everybody plotted i'm gonna step uh over this part a little bit uh again i'm creating a subplot i'm plotting the ball value and i'm plotting this uh assistivity measurement and i'm uh seeing what the ert inversion result does not resemble my uh uh four layer model at all so what i want to do is is to improve my is to improve my model so what i also tend to do is to set the regularization and cutting the reset again so just decreasing the vertical rates for the for the resistivity a little bit actually when i was testing this was all uh much faster but uh seems like we are like we're approaching a nice recent yeah actually i can also take beforehand that we can similarly good feed the data and have a model which is what we have performed because we have changed our realization scheme uh so we can just use the deep aforementioned figure to plot the second ert in version yeah so now we can fit the data data is looking a little bit better it's only uh gradually showing this uh we can improve this a little bit by uh using even lower values of set weight and this can improve the value but actually what we want to do is to is to try to statistical inversion so i'm using only the inversion domain and i'm guessing uh at the correlation length of about typically uh the correlation length in the horizontal direction is very large the vertical direction i would guess from these uh behavior we could do a variable analog we could do a variable analysis uh at about five meter correlation length which is the a bit less than the thickness of these layers uh and i would assume a factor of 10 higher correlation in the in the x direction i'm going to do the inversion of the statistical version and again yeah already plugging the values on top of each other and we will see that the statistical inversion is is now showing uh uh delayed uh low resistivity high relativity low resistivity uh but then we did a comparison in in detail we see ah well it's a it's nice behavior but uh the high resistivity layers to to it's terrific and and and and the bad work becomes 2d which is very common uh for people doing either eit inversions actually we cannot use the direct push data too much just by optimizing parameters we are kind of at the end right now so what we have to do is uh actually those are data so why not using those data in the inversions and that's what we do in a sort of a joint inversion framework there's a ready-made framework joined by modeling that combines the it provides the uh different forward players and that's what we're going to do so like in the like the other example uh i'm gonna uh yeah like in the other example i'm uh using this framework but i'm using the prior modeling and setting up the prima the power modeling i'm calling this forward operator uh fopdp like direct push what i need to do is is i need to extract the parameter mesh from the from the actual mesh and that's uh and for this reason i i again use the a creates submerged so i'm extracting all all uh all mesh cells with the center box too and expected to be because i want to do the prior inverting only the inner inversion okay so i'm taking the measure of a manager that i have been taking before and what i can do right now is to take a forward response of the thus inverting model just extracting my uh my resistivity at the at the positions so my prior uh so my prior model is uh extracting the resistivity at a certain positions i could even set up an inversion with this using the uh direct pressure that we push over here and then get recognization selecting look at the uh okay i'm giving the uh the measured direct process to be also an arrow vector and i'm using the uh and using a 10 vector when your visa is ready you show it and something's not working right now i'm going to show you the ready prepared results going back to the i skipped the part where we also could use the prior data as structure information and an included a structural constraint but we also we already did it last time you can have it you can have a look at this in the original tutorial and if you do the inversion of those data then you can see the exact transition of the of the push data in the model and and the in the inversion if some are extrapolating the data to the outside you can also use geostatistic correlation links and then you have a different sort of extrapolation function to the outside which is uh which can be better which can be worse actually what we want to do is to join the version of our ert data and direct push data so we import also from the frameworks we import the joint modeling we set up an ert modeling set the mesh set the data at the joint uh except the joint modeling by just combining two different forward operators so we're going to use the ert4 operator and data and push forward operator we set the mesh for the joint inversion forward operator then we set the data which is also like the forward operators that are just combined combination of twofold or writers this is a combination of the ert data and end of the end of the vector of a of a resistivity uh then we create a model which is our starting model and we're gonna uh do a response uh performance response of our joint forward operator and if we and if we split this into the ert forward operator and direct push forward operator then we can have a look at the elt forward operator and at the uh uh there is which is of course constantly 100. we can created your government for a teacher government on top and there and the direct question on the bottom so we have two 1200 ert data and uh and about uh 100 uh a 50 60 direct push data that are gonna rate it in the inversion so this is the this is how the direct push [Music] metric is looking like what's important is we go into joint inversion so what we do is we is we create our uh data vector so we concatenate all our apparent resistivities again together with our measures of resistivity we concatenate the same way our data errors with uh in this case i use 20 data arrow because i've seen that the data fit is not very good and i'm going into inversion uh using the join forward operator using logarithmic model transform property this is our default then we run the inversion uh with a starting model and then we see that with a normal smoothness constraint we have a perfect resembling uh of our direct push later at the point where they are but they don't reach very far into the into the uh subsurface that's why we're going to use jesus christ constraints with correlation length of 5 50 and 5 meters as both and we can nicely fit the data this means we can fit both ert and diary push data and we have a model that is in the middle fitting our our depth sounding and and also being extrapolated and we have a kind of an idea how this is how the clay clay and sand and zip content is looking uh like outside so the layers seem to uh seem to be continuous a little bit so if we again take our model response and split the model response into two parts then we can see that the misfit function looks very gaussian and if you now look at the at the difference between the uh between the uh and the measured borehole data and the and the uh direct push data we see we see a very nice alignment it's it's still perfect there's something going on also push measurements maybe a scaling factor or whatever but we can uh really uh incorporate this data into the value version so still ert data is highly ambiguous uh particularly for uh for hidden layers and private data can help to improve organization uh structure data can be of help but it doesn't make sense if you only have point information but point data improved images uh but it can only make real improvements by geostatistic extrapolation uh to conclude to make an overall conclusion somehow my computer is hanging uh if you have pro if you have a specific problem you should use facility regularization and those matrices are the key to are the key to the uh the efficient inverting and sophisticated inversion and you can really use pygmy to solve your own problem do uh reproducible research contribute your ideas and solutions we would be highly uh welcome any contribution from uh any ideas for improvements any uh any solution any nice case study or even do your research and and tell tell us uh that you did it uh with pygmy uh there are other frameworks to be used as pathophysical inversion there's a block joint in birth and there's also lateral especially constrained 1d inversion and then other things that we are working still working in uh actually those things are ready and become uh ready classes in pi gimli so we have a full uh uh a full frame constraint in version like for a full-time time-lapse inversions or inversion along the frequency axis we have in structurally coupled uh cooperative and version cross-gradient frameworks also for joint versions of separate dataset and including additional uh equations and then there's a lot of things that that need to be done to speed up the whole algebra to replace the cg and the solver and then uh and then uh yeah there's a lot of future work to be done and i i recommend you to go for all the uh uh because time was running too short to go through all the tutorials in in your time take your time time take your time to play around but i also want you to to have a look at other uh packages in the packaging environment which is the build package for this electrical resistivity that has reproducible data analysis there's an ecoskipper created a package of carbohydrate magnetic resonance a little electrical resistivity which is uh doing a lot of electromagnetic stuff and structurally coupled creative inversion framework that is going to be implemented in the black md there's also a very recent uh implementation of an electromagnetic modeling toolbox which is called custom by my colleague affair offline which is modeling and also 2d 3d inversion of control source em data by using pi gimli and not only for the mesh generation but also for the inversion part and and uh semi-other electromagnetics and there's some and there's some references and uh yeah with this i would uh close up uh and i apologize for the uh late uh for the technical problems and for the uh rush that i made in the in the last uh in the last hour i hope you get an idea on how uh on what you could do with pi gimli for your own research and and [Music] you're welcome to have a look at all the examples documentations and so on thanks for your attention all right thank you very much um i definitely saw quite a lot of interesting stuff there and i don't really work much on vm but i can see it's got applications elsewhere as well um so thank you very much thomas uh that was um you know i give another overview or another tutorial on some of the about or some more complicated things compared to last year that you can do here in pi gimli if you found this video useful please do share it the there's still a bit happening with transform as i say we're about half we're just over halfway through so we've still got um one more talk today and we've got a few and a few more tomorrow on all sorts of interesting geoscience you know digital geoscience things so thank you very much for all your attention thanks again to curve note for helping out with um with organization of this um do have a look at the software underground um the links are all down below um and with that thank you very much and we will see you on another one
Info
Channel: Software Underground
Views: 3,780
Rating: undefined out of 5
Keywords: conference, python, tutorial, geophysics, modeling
Id: 2Hu4gDnRzlU
Channel Id: undefined
Length: 121min 49sec (7309 seconds)
Published: Tue Apr 26 2022
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.