GithubHelp home page GithubHelp logo

jzmejia / crevasse_propagation Goto Github PK

View Code? Open in Web Editor NEW
7.0 3.0 0.0 7.33 MB

thermo-visco-elastic model for slow crevasse propagation adapted from Poinar et al., 2017

License: MIT License

Python 100.00%
glaciology model crevasse fracture-mechanics ice ice-fracture python fracture numerical-model

crevasse_propagation's Introduction

Hi there, I'm Jess ๐Ÿ‘ฉโ€๐Ÿ’ป

I'm a glaciologist โ„๏ธ


Connect with me


what i've been using lately..

Top Langs

a bit more about me

const name = 'Jessica Mejia';  
document.write("Hello World");

var status =  
{  
    learning : [Vuejs, Vuetify, Django],  
    interests: [Research, Open Source Contribution]
}

const skills = 
{
    languages   :[Python, Bash, CRBasic, Matlab, JavaScrip, LaTeX],

    ide         :[VSCode, Jupyter],

    libraries   :[Numpy, Pandas, Seaborn, Matplotlib],
}

Developer dev = new Developer(jzmejia);

while(dev.isCoding() && dev.isStuck())
{
    dev.drinkCoffee();
    dev.getWorkDone();
}

Workspaces

image image

crevasse_propagation's People

Contributors

jzmejia avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

crevasse_propagation's Issues

Thermal Model iterative execution error

Error in ib.temperature (ThermalModel instance) when running model at the first thermal model timestep to recalculate ice block temperatures and refreezing

error is raised from
ice block.increment_time()

# Run temperature solver with updated geometry
if self.n % self.thermal_freq == 0:
    self.temperature.calc_temperature(self.crev_locs)
for num, crev in enumerate(self.crev_idx):
     # upstream of crevasse
     if num+1 < len(self.crev_idx) or max(crev) > rhs.size-nx:
         idx = [x-1 for x in crev if x < idx_surface]
         rhs[idx] = rhs[idx] + (self.Lf/self.heat_capacity_intercept * self.bluelayer_right[0])/self.ibg.dx

error there is pointing to the line with self.bluelayer_right which is updated by .calc_refreezing()

handling of water height in crevasse for small crevasse depths

Issue: solving for water height in crevasse--implemented with the class method Crevasse.calc_water_height()--becomes invalid for shallow crevasses < ~22 m.

Current (Kristin's solution), was implemented in Crevasse.calc_water_depth() where the water height was forced to be less than or equal to crevasse depth (return max(0,crevasse_depth-water_height)) and an extrapolation method for b (below) was included for crevasses<30m, implemented with an if-statement

Options added to function in conjunction with added plotting water depth required to balance KIC within crevasse for crevasse depths - utilizing Crevasse.calc_water_height()

Figure shows crevasse depth (d) and computed water height calculated from .calc_water_height() for an ice thickness of 600, and fracture toughnesses of 0.1MPa (blue), 0.15 MPa (orange), 0.2MPa (green). The gray dashed lines correspond to the b-approximation used for small crevasse depths (d<30m) and plotted against different values of sigmaCrev (Rxx or the applied stress to the crevasse) ranging from 0 (top curves) to 150000Pa (amplitude of crevasse field's stress field), bottom.

Screenshot 2023-04-28 at 4 39 49 PM

Fracture Toughness = 0.1MPa (Blue), 0.15MPa (orange), 0.2MPa (Green)

Screenshot 2023-04-28 at 5 02 53 PM

NOTE for small values of sigmaCrev whereby b never becomes null, there is a region within these low crevasse depths (d<~22m) where b>d which should not be allowed to occur. Kristin's model appears to use the b-approximation (dashed lines) to try and circumvent the areas where b is NaN, and the max(0,water_depth) restriction to fix b>d results. While this is probably fine, the b extrapolation is being computed when the results will be set to 0 by the max() conditional.

This may also not be an issue if we calculate a better initial crevasse depth (likely deeper than in this area of uncertainty) such that it is all avoided and we only use realistic crevasse depths.

 def extrapolate_b(crevasse_depth, rxx):
        d1 = 30
        d2 = 40
        b1 = Crevasse.calc_water_height(d1, Rxx=rxx)
        b2 = Crevasse.calc_water_height(d2, Rxx=rxx)
        return b1 + (b2-b1)/(d2-d1)*(crevasse_depth-d1)

Variable density for firn layer enhancement

Issue identified after including depth dependent density functionality to Crevasse class, features added in commits: #111 #110

Crevasse evolution with variable density is producing crevasse shapes like below where they are very bloated at the base, narrowing towards the surface. These crevasses are too wide at the base
Screenshot 2024-03-29 at 7 40 39โ€ฏPM
crevasse width (m) for 51 model runs

Is the problem in the d equation used to calculate wall displacement not able to support densities other than that of solid ice?

add refreezing calculation to `Crevasse`

This will move the refreezing (or blueband) calculation into Crevasse and out of ThermalModel

Note: This will require ThermalModel pass required values to IceBlock so they can be accessed by Crevasse for the refreezing calculation

  • Write refreezing method in Crevasse
  • Determine what values need to be extracted from ThermalModel for the refreezing calc.
  • store and track refreezing for each crevasse (refreezing/blueband grows through time as refreezing continues (but it can melt as well).

Include vertical advection

Consider vertical ice advection in ThermalModel. This will affect terms in the A matrix and in the thermal solver.

ThermalModel needs new parameter for vertical ice velocity v
v = (z2d/self.ice_thickness) * -ablation

ice surface lowering (ablation) is negative, accumulation is positive.

+ `Crevasse` class documentation update

class Crevasse needs documentation to be added to include description of class methods, attributes, and implementation.

Similarly, update all class methods to reflect Crevasse class attributes

stress field error

need to change sin() to cos() in sigmaT function to induce enough stress at the upstream boundary condition where sigmaT>fracture toughness to actually allow a crevasse to open.

Add variable air temperature in Thermal Model

allow T_surface to be updated through time with these variable values used in Temperature calculations. Updated T_surface values from RAMCO or weather stations need to update this class attribute without reinitializing ThermalModel

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.