Found 174 repositories(showing 30)
ShelvanLee
# XFEM_Fracture2D ### Description This is a Matlab program that can be used to solve fracture problems involving arbitrary multiple crack propagations in a 2D linear-elastic solid based on the principle of minimum potential energy. The extended finite element method is used to discretise the solid continuum considering cracks as discontinuities in the displacement field. To this end, a strong discontinuity enrichment and a square-root singular crack tip enrichment are used to describe each crack. Several crack growth criteria are available to determine the evolution of cracks over time; apart from the classic maximum tension (or hoop-stress) criterion, the minimum total energy criterion and the local symmetry criterion are implemented implicitly with respect to the discrete time-stepping. ### Key features * *Fast:* The stiffness matrix and the force vector (i.e. the equations' system) and the enrichment tracking data structures are updated at each time step only with respect to the changes in the fracture topology. This ultimately results in the major part of the computational expense in the solution to the linear system of equations rather than in the post-processing of the solution or in the assembly and updating of the equations. As Matlab offers fast and robust direct solvers, the computational times are reasonably fast. * *Robust.* Suitable for multiple crack propagations with intersections. Furthermore, the stress intensity factors are computed robustly via the interaction integral approach (with the inclusion of the terms to account for crack surface pressure, residual stresses or strains). The minimum total energy criterion and the principle of local symmetry are implemented implicitly in time. The energy release rates are computed based on the stiffness derivative approach using algebraic differentiation (rather than finite differencing of the potential energy). On the other hand, the crack growth direction based on the local symmetry criterion is determined such that the local mode-II stress intensity factor vanishes; the change in a crack tip kink angle is approximated using the ratio of the crack tip stress intensity factors. * *Easy to run.* Each job has its own input files which are independent form those of all other jobs. The code especially lends itself to running parametric studies. Various results can be saved relating to the fracture geometry, fracture mechanics parameters, and the elastic fields in the solid domain. Extensive visualisation library is available for plotting results. ### Instructions 1. Get started by running the demo to showcase some of the capabilities of the program and to determine if it can be useful for you. At the Matlab's command line enter: ```Matlab >> RUN_JOBS.m ``` This will execute a series of jobs located inside the *jobs directory* `./JOBS_LIBRARY/`. These jobs do not take very long to execute (around 5 minutes in total). 2. Subsequently, you can pick one of the jobs inside `./JOBS_LIBRARY/` by defining the job title: ```Matlab >> job_title = 'several_cracks/edge/vertical_tension' ``` 3. Then you can open all the relevant scripts for this job as follows: ```Matlab >> open_job ``` The following input scripts for the *job* will be open in the Matlab's editor: 1. `JOB_MAIN.m`: This is the job's main script. It is called when executing `RUN_JOB` (or `RUN_JOBS`) and acts like a wrapper. Notably, it can serve as a convenient interface to run parametric studies and to save intermediate simulation results. 2. `Input_Scope.m`: This defines the scope of the simulation. From which crack growth criteria to use, to what to compute and what results to show via plots and/or movies. To put it simply, the script is a bunch of "switches" that tell the program what the user wants to be done. 3. `Input_Material.m`: Defines the material's elastic properties in different regions or layers (called "phases") of the computational domain. Moreover, it defines the fracture toughness of the material (assumed to be constant in all material phases). 4. `Input_Crack.m`: Defines the initial crack geometry. 5. `Input_BC.m`: Defines boundary conditions, such as displacements, tractions, crack surface pressure (assumed to be constant in all cracks), body loads (e.g. gravity, pre-stress or pre-strain). 6. `Mesh_make.m`: In-house structured mesh generator for rectangular domains using either linear triangle or bilinear quadrilateral elements. It is possible to mesh horizontal layers using different mesh sizes. 7. `Mesh_read.m`: Gmsh based mesh reader for version-1 mesh files. Of course you can use your own mesh reader provided the output variables are of the correct format (see later). 8. `Mesh_file.m`: Specifies the mesh input file (.msh). At the moment, only Gmsh mesh files of version-1 are allowed. ### Mesh_file.m A mesh file needs to be able to output the following data or variables: * `mNdCrd`: Node coordinates, size = `[nNdStd, 2]` * `mLNodS`: Element connectivities, size = `[nElemn,nLNodS]` * `vElPhz`: Element material phase (or region) ID's, size = `[nElemn,1]` * `cBCNod`: cell of boundary nodes, cell size = `{nBound,1}`, cell element size = `[nBnNod,2]` Example mesh files are located in `./JOBS_LIBRARY/`. Gmsh version-1 file format is described [here](http://www.manpagez.com/info/gmsh/gmsh-2.4.0/gmsh_60.php). ### Additional notes * global variables are defined in `.\Routines_AuxInput\Declare_Global.m` * External libraries are `.\Other_Libs\distmesh` and `.\Other_Libs\mesh2d` ### References Two external meshing libraries are used for the local mesh refinement and remeshing at the crack tip during crack propagation or prior to a crack intersection with another crack or with a boundary of the domain. Specifically, these libraries, which are located in `.\Other_Libs\`, are the following: * [*mesh2d*](https://people.sc.fsu.edu/~jburkardt/m_src/mesh2d/mesh2d.html) by Darren Engwirda * [*distmesh*](http://persson.berkeley.edu/distmesh/) by Per-Olof Persson and Gilbert Strang. ### Issues and Support For support or questions please email [sutula.danas@gmail.com](mailto:sutula.danas@gmail.com). ### Authors Danas Sutula, University of Luxembourg, Luxembourg. If you find this code useful, we kindly ask that you consider citing us. * [Minimum energy multiple crack propagation](http://hdl.handle.net/10993/29414)
ngavu2004
Help you track your job applications automatically by fetching and processing emails from your Gmail account.
zichengalexzhao
Automate job application tracking with Gmail API, OpenAI, and GitHub Actions. Generates visualizations and updates hourly.
AlexMcVay
I wrote a google app script to help people screen their emails to find jobs
Tomiwajin
🔒 AI-powered job application tracker with Gmail integration. Automatically organize applications, track responses, and visualize your job search — completely stateless with zero data storage. 100% free and open source.
johnson00111
Full-stack job application tracker that auto-classifies Gmail emails using local LLMs (Ollama) and visualizes insights through a React dashboard.
AssafAbadi
Job Search Tracker- independent project that integrates with Gmail & OpenAI APIs to analyze and classify emails, and then store their status using PostgreSQL. Utilized HTTP, asynchronoues programming and Maven.
iskandarreza
React app to pull job posting links from alert emails in Gmail, keep track of job applications, and do other cool stuff like generate a summary of the job description (and later we'll add keyword analysis and cover letter generation)
pointofsale
Mongo db console commands //showing the existing dbs.. show dbs //use test switching to db test, (only creating it when actually adding new data) //prompts the name of the working db now db //the fllw would prompt the count(), in the link2 collection, in the current db... >db.links2.count() //inserting a record in links2 db.links2.insert({title:"unn titulo", url:"", comment:"", tags:["un primer tag", "un segundo tag"], saved_on: new Date}) //working with an object the javascript way... data = {} | data.title = "un titulo" | data.tags = ["un tag", "otro"] | data.meta = {} | data.meta.OS = "win7" | db.links2.insert(data) //printing the result of the find, in the structured json format. db.links2.find().forEach(printjson) //--> in this case we pass to forEach the printjson function... //retriving only the first of the results of the find method. db.links2.find()[0] db.links2.find()[0]._id //getting the timestamp present in the _id variable (is made of (also) the time it was created) db.links2.find()[0]._id.getTimestamp() /*the following function creates, when called, a new collection inside the same working db, that tracks the last id number we are in. This allows having the same behavieur than in relational DBs.*/ //apparently, u have to declare this function... function counter(name) { var ret = db.counter.findAndModify({query:{_id:name}, update:{$inc:{next:1}}, "new":true, upsert:true}); return ret.next; } //so u can do something like db.products.insert({_id:counter("products"), nombre:"primer nombre"}) //the result is something like: { "_id": 1, "name": "un producto" } { "_id": 2, "name": "otro producto" } /*referencing in MongoDB*/ db.users.insert({name:"Richard"}) var a = db.users.findOne({name:"Richard"}) db.links2.insert({title:"primer titulo", author:a._id}) //reference to other collection throught the _id key... //quering db.users.findOne({ _id:link.author }) //a way to make manual inner joins... within the user db, we search for a coincidence of our _ids on the links2 db, author field. ---note--- embedding is much more efficient when we have significantly more read than writes. Otherwise, consider using the normalized way. These depends on every case. /**/ #importing data from a .js in json format. With mongod running or in a services: > ../../../mongodb/bin/mongo 127.0.0.1/bookmarks bookmarks.js //the first part is the location to the mongo exe in the mongo usual location //the second part is the server and db in which we will be importing in //the third part is the file with all the mongo commands... --this bookmarks file is in C:\Tuto\mongo\trying -- https://raw.github.com/tuts-premium/learning-mongodb/master/08%20-%20bookmarks.js /*bookmarks.js extract*/ var u1 = db.users.findOne({ 'name.first': 'John' }), u2 = db.users.findOne({ 'name.first': 'Jane' }), u3 = db.users.findOne({ 'name.first': 'Bob' }); db.links.insert({ title: 'Nettuts+', url: 'http://net.tutsplus.com', comment: 'Great site for web dev tutorials', tags: ['tutorials', 'dev', 'code'], favourites: 100, userId: u1._id }); /**/ //connecting directly to db bookmarks > ../../../mongodb/bin/mongo bookmarks //searching in the collection all docs that have inside the tags array the "code" element. //this can be done because we are dealing with an array --> array advantages... db.users.find({tags:"code"}).forEach(printjson) //with findOne u can do (not with find) findOne().name db.links.find({favourites:100}, title:true, url:1) //selecting only some fields... db.links.find({favourites:100}, tags:0) //selecting all but the tag field... //selecting inside an object... db.users.findOne({"name.first": "John"}) db.users.findOne({"name.first": "John"}, "name.last":1) var john = db.users.findOne({"name.first": "John"}) db.links.find({userId:john._id}, {title:1, _id: 0}) /*queries directives*/ //greater than 150 db.links.find({favourites:{$gt:150}}, {_id:0, favourites:1, title:1}).forEach(printjson) db.links.find({favourites:{$gt:150}}, {_id:0, favourites:1, title:1}).count() //less than db.links.find({favourites:{$lt:150}}, {_id:0, favourites:1, title:1}).forEach(printjson) //$lte, $gte -- and iqual //using in db.users.find({"name.first":{$in:["John", "Jane"]}}) //the opposite is $nin db.users.find({"name.first":{$nin:["John", "Jane"]}}) //$all -- only the records with all the specifications in "tags" field. db.links.find({tags: {$all:["code", "marketplace"]}}, {title:1, tags:1, _id:0}) //$ne -- not equal //the $or flag search for the fullfillment of at least one of the elements in the array passed... db.users.find({$or: [{"name.first": "John"}, {"name.last": "Wilson"}]}) //the opposite: $nor //inclusive: $and //$exists db.users.find({email: {$exists: true}}) //$mod db.links.find({favourites: {$mod: [5, 0]}}, {_id:0, title:1, favourites:1}) db.links.find({favourites: {$not: {$mod: [5, 0]}}}, {_id:0, title:1, favourites:1}) //elemMatch -- inside logins, search for an element match that has minutes = 20, and return the complete record db.users.find({logins: {$elemMatch: {minutes: 20}}}) //searching for an 'at' prior to 2012/03/30.. and returning the whole record... db.users.find({logins: {$elemMatch: {at: { $lt: new Date(2012, 3, 30)}}}}) //using where -- c) is equivalent to a) a) db.users.find({ $where: 'this.name.first === "John"'}) b) db.users.find({ $where: 'this.name.first === "John"', age:30}) c) db.users.find( 'this.name.first === "John"') //injecting functions in mongodb -- as this example returns trueéfalse, its going to return values randomly var frand = function() {return Math.random() > 0.5} db.users.find(frand) // var f = function() { return this.name.first === "John"} db.users.find(f) //or db.users.find( {$where: f} ) //other queries //distinct -- returns a list of diff results db.links.distinct('favourites') --> [100, 32, 21, 78, ...] db.links.distinct("url") db.links.group({ key:{userId : true}, initial:{favCount: 0}, reduce: function (doc, o) {o.favCount += doc.favourites}, finalize: function(o) {o.name = db.users.findOne({ _id: o.userId}).name } }); *** //the final part is not working... db.links.group({ key:{userId : true}, initial:{favCount: 0}, reduce: function (doc, o) {o.favCount += doc.favourites} }); db.links.group({ key:{userId : true}, initial:{favCount: 0}, reduce: function (doc, o) {o.favCount += doc.favourites}, finalize: function(o) {o.name = "richard"}} ); //regex db.links.find({ title: /tuts\+$/}) db.links.find({ title: {regex: /tuts\+$/}}, {title:1}) //counting db.users.count({'name.first': 'John'}) db.users.count(); //all users in the collection //sorting, limit db.links.find({}, {title:1}).sort({title:1}).limit(1) //1: asc -1: desc //sorting, skipping and limiting... normal behavieur in the pagination rutine... db.links.find({}, {title:1, _id:0}).sort({title:1}).skip(3).limit(3) /*updating*/ //by replacement or by modification... ---general form /* db.collection.update( <query>, <update>, { upsert: <Boolean>, //if not found insert multi: <Boolean>, //change in all the condition <query> is fullfilled } ) */ // more info in http://docs.mongodb.org/manual/reference/method/db.collection.update/ db.users.update({-the query object-}, {-the update object-}, -upsert boolean-); var n = {title:"Nettuts+"} db.links.find(n, {title:1}) db.links.update(n, {$inc: {favourites: 5}}) var q = {"name.last": "Doe"} db.users.find(q, {name:1}) //we can use set to update a field or add a completly new one... db.users.update(q, {$set: {"name.last": "Doetix"}}) //modifying an existing field.. db.users.update(q, {$set: {"email": "doetix81@gmail.com"}}) //inserting a new one... //to remove a field w use unset db.users.update(q, {$unset: {job: "Web developper"}}) db.users.update({"name.first":"John"}, {$set: {job:"Web developer"}}, false, true) //modifying and then inserting an object var bob = db.users.findOne({"name.first":"Bob"}) >bob { "_id" : ObjectId("525f06242df9763abe646b62"), "name" : { "first" : "Bob", "last" : "Smith" }, "age" : 31, "email" : "bob.smith@gmail.com", "passwordHash" : "last_password_hash" } > bob.job = "Thick Brush Painter" > db.users.save(bob) //find and modify -- findAndModify {{}} /* The findAndModify command atomically modifies and returns a single document. By default, the returned document does not include the modifications made on the update. To return the document with the modifications made on the update, use the new option. { findAndModify: <string>, query: <document>, sort: <document>, remove: <boolean>, //one of | update: <document>, //this two | new: <boolean>, //if the new object must be shown or the old one.. fields: <document>, //fields to show in the result upsert: <boolean> } */ > db.links.findAndModify({ query:{favourites: {$gt:150}}, sort:{title:1}, update:{favourites: 333}, new: true, fields: {_id:0} }); //pulling into arrays db.links.update(n, { $push: {tags: "jobs"}}) > db.links.findOne(n).tags //several... db.links.update(n, {$pushAll:{tags: ['blogs','press','contests']}}) //on pull into the array if the new element is not present.. db.links.update(n, {$addToSet:{tags: "dev"}}) //doing the same with an array... db.links.update(n, {$addToSet:{ tags:{$each: ["dev", "interviews"]} }}) //pulling out content from the array... db.links.update(n, {$pull: {tags:'interviews'}}) //pulling several... db.links.update(n, {$pullAll: {tags: ['blogs','dev', 'contests']}}) //poping out from the beginning or the end.. db.links.update(n, {$pop: {tags: 1}}) //--from the end (-1 -- from the beginning) //positional operator... only the subobject gets updated... db.users.update({'logins.minutes': 20} , {$inc:{ 'logins.$.minutes': 10}}, false, true) db.users.update({'logins.minutes': 20} , {$set:{ 'logins.$.location': 10}}, false, true) db.users.update({'logins.minutes': 30}, {$set: {random: true}}, false, true) //renaming the fields name... db.links.update({url: {$exists: true}}, {$rename:{"url": "camino"}}, false, true); //more info on the positional operator in: http://docs.mongodb.org/manual/reference/operator/update/positional/ //taken from there: /* The positional $ operator facilitates updates to arrays that contain embedded documents. Use the positional $ operator to access the fields in the embedded documents with the dot notation on the $ operator. db.collection.update( { <query selector> }, { <update operator>: { "array.$.field" : value } } ) */ /***EXAMPLE Consider the following document in the students collection whose grades field value is an array of embedded documents: { "_id" : 4, "grades" : [ { grade: 80, mean: 75, std: 8 }, { grade: 85, mean: 90, std: 5 }, { grade: 90, mean: 85, std: 3 } ] } Use the positional $ operator to update the value of the std field in the embedded document with the grade of 85: db.students.update( { _id: 4, "grades.grade": 85 }, { $set: { "grades.$.std" : 6 } } ) ***/ //removing db.users.remove({'name.first': "John"}) //all the collections in the selected db... show collections //dropping completly a collection... db.acoll.drop() //indexes... db.links.find().explain db.links.ensureIndex({ title: 1}) //in ascending order.. in mainly important in cpompund indexes.. //a reflect of this index can be found in that db indexes collection db.system.indexes.find(); //u cound put an index to a canging value, but every time u change that value the index must be updated. keep in mind. //usually is a good idea to set the indexes at the beginning when no data is present in the collections. However, u could use the following formula to treat duplicates and unique data //keeping only the first one, deleting the others.. db.links.ensureIndex({ title: 1}, { unique: true, dropDups: true}) //when considering the case of some of the documents without the idexed field, to save mongo from storing space for this index if the field itself has not been inserted: db.links.ensureIndex({ title: 1}, {sparse: true}) //its important to think of the compund index as a nested one, an index of an index. Its related to each problem-case. Like in the case of the recepies: indexing first the ingredient and the the recepie, makes more sense than indexing in reverse. Its all related on how u are going to search. db.links.ensureIndex({ title: 1, url: 1}) //this one means that u can search on title; or on title and url... db.links.ensureIndex({ a: 1, b: 1, c: 1}) //searches are possible on a; a, b; a, b, c //deleting indexes db.links.dropIndex("title_1"); //the same way that appears in system.index collection... /*concepts to follow*/ //Sharding and Replica Set... http://www.slideshare.net/Dataversity/common-mongodb-use-cases-13695677 http://docs.mongodb.org/ecosystem/use-cases/product-catalog/ db.collection.update({"grades.grade":80}, { $set: {"grades.$.std": 18}})
Pranav-here
Automated job application tracking via Gmails → Airtable
chuckle123
A personal job search OS built on Claude Code with pipeline tracking, interview prep, and Gmail/Calendar integration.
AravindMohan10
Sync Gmail job-application emails to a single Excel sheet. OAuth + cron; uses Gemini for extraction . For job seekers tracking applications.
Sachinkumar-jpg
AI-Powered Job Application Tracker with Gmail, Hugging Face, and Spring Boot
shantanu9841
Agentic AI job tracker: evaluates JD fit, logs to Notion, drafts outreach in Gmail. Runs as a Claude Artifact.
ngavu2004
Help you track your job applications automatically by fetching and processing emails from your Gmail account.
roxxe3
ApplyAI is an AI-powered tool that simplifies job applications by automating and personalizing the process. It uses the Gmail API to send and track applications, while AI customizes your CV, email subjects, and bodies based on each job description. Built with FastAPI, Next.js, and MongoDB, ApplyAI helps you apply smarter and faster.
jabercrombia
This Python project connects to the Gmail API to search for job application emails by exact subject, extract metadata like sender, subject, and date, and export the results to a CSV file. It uses OAuth2 for authentication and includes utility functions to clean and parse email headers.
SwethaTharini
Automated job application tracker using Gmail & Google Apps Script
leafoffaith
search query based email job application tracker
Yvonne-Yu217
AI-powered job application tracker that parses Gmail to extract, classify, and track your application progress.
Automate your job application tracking! This Google Apps Script scans Gmail for job-related emails and logs them into a Notion database, categorizing them as Applied, Interview, Offer, or Rejected.
MaheenRH
An AI-powered Gmail + Google Sheets job tracker that extracts applications automatically.
toastynerd
A modern job application tracking system with LinkedIn and Gmail integration
harshitverma-code
Automatically tracks all your job applications from Gmail into a Google Sheet
tyagiprnv
Automatically track job applications by reading Gmail and updating Google Sheets with AI-powered analysis.
jason-conklin
Applictus is a job application tracker that syncs with Gmail to automatically organize applications, infer statuses, and track your hiring pipeline. Designed for clarity, control, and real-world job searches.
Dagmbisrat
AI-powered job application tracker that monitors your Gmail inbox and automatically logs applications and status updates to a personal dashboard.
simon-azike1
Uzy is a full-stack job application tracker that connects to your Gmail and automatically detects every job you've applied to. No manual entry — just connect once and your entire job search history is organized instantly. Track application statuses...
PulkitGarg777
Internship Application Organizer — auto-ingests confirmation emails, extracts company/role/job IDs, tracks status, and exports CSV. (Gmail API, FastAPI, React)
coolbrother
A self-hosted, AI-powered job tracking system that automatically scrapes GitHub job lists, filters opportunities by your eligibility, monitors application status via Gmail, and syncs everything to Google Sheets