Changeset 24220


Ignore:
Timestamp:
10/14/19 18:31:47 (5 years ago)
Author:
schlegel
Message:

CHG: minor, add in some checks for GEMB

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp

    r24209 r24220  
    239239        // Take forward differences on left and right edges
    240240        dT[0] = (T[1] - T[0])/(zGPC[1]-zGPC[0]);
    241         dT[m-1] = (T[m-1] - T[m-2])/(zGPC[m-1]-zGPC[m-2]);
     241        if(m>1) dT[m-1] = (T[m-1] - T[m-2])/(zGPC[m-1]-zGPC[m-2]);
    242242
    243243        //Take centered differences on interior points
     
    667667        KP = xNew<IssmDouble>(m);
    668668
    669         KU[0] = UNDEF;
    670         KD[m-1] = UNDEF;
     669        KU[0] = Delflag;
     670        KD[m-1] = Delflag;
    671671        for(int i=1;i<m;i++) KU[i]= K[i-1];
    672672        for(int i=0;i<m-1;i++) KD[i] = K[i+1];
     
    676676        dzU = xNew<IssmDouble>(m);
    677677        dzD = xNew<IssmDouble>(m);
    678         dzU[0]=UNDEF;
    679         dzD[m-1]=UNDEF;
     678        dzU[0]=Delflag;
     679        dzD[m-1]=Delflag;
    680680
    681681        for(int i=1;i<m;i++) dzU[i]= dz[i-1];
     
    14011401                for(int i=0;i<n;i++) m[i] += dW[i];                                            // new mass [kg]
    14021402                for(int i=0;i<n;i++) d[i] = m[i] / dz[i];                                    // density [kg m-3]   
    1403                 for(int i=0;i<n;i++) T[i] = T[i] + (dW[i]*(LF+(CtoK - T[i])*CI)/(m[i]*CI));      // temperature [K]
     1403                for(int i=0;i<n;i++) if(m[i]>Wtol) T[i] = T[i] + (dW[i]*(LF+(CtoK - T[i])*CI)/(m[i]*CI));      // temperature [K]
    14041404
    14051405                // if pore water froze in ice then adjust d and dz thickness
     
    14331433
    14341434                        int i = 0;
    1435                         while (cellsum(surpE,n) > 0.0+Ttol){
     1435                        while (cellsum(surpE,n) > 0.0+Ttol && i<n){
    14361436                                // use surplus energy to increase the temperature of lower cell
    14371437                                T[i+1] = surpE[i]/m[i+1]/CI + T[i+1];
     
    14511451
    14521452                // convert temperature excess to melt [kg]
    1453                 for(int i=0;i<n;i++) M[i] = min(exsT[i] * d[i] * dz[i] * CI / LF, m[i]);  // melt
     1453                double Mmax=0.0;
     1454                for(int i=0;i<n;i++){
     1455                        Mmax=exsT[i] * d[i] * dz[i] * CI / LF;
     1456                        M[i] = min(Mmax, m[i]);  // melt
     1457                }
    14541458                sumM = cellsum(M,n);                                                       // total melt [kg]
    14551459
     
    15111515                        // some or all meltwater refreezes
    15121516                        else{
    1513                                 // change in density density and temperature
     1517                                // change in density and temperature
    15141518                                // _printf_("MELT REFREEZE");
    15151519                                //-----------------------melt water-----------------------------
     
    15411545
    15421546                                flxDn[i+1] = inM - F1 - dW[i];     // meltwater out       
    1543                                 T[i] = T[i] + ((F1+F2)*(LF+(CtoK - T[i])*CI)/(m[i]*CI));// change in temperature
     1547                                if (m[i]>Wtol){
     1548                                        T[i] = T[i] + ((F1+F2)*(LF+(CtoK - T[i])*CI)/(m[i]*CI));// change in temperature
     1549                                }
    15441550
    15451551                                // check if an ice layer forms
     
    20032009
    20042010                // do not allow densities to exceed the density of ice
    2005                 if(d[i] > dIce-Dtol) d[i]=dIce;
     2011                if(d[i] > dIce-Ptol) d[i]=dIce;
    20062012
    20072013                // calculate new grid cell length
Note: See TracChangeset for help on using the changeset viewer.