Changeset 24220
- Timestamp:
- 10/14/19 18:31:47 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
r24209 r24220 239 239 // Take forward differences on left and right edges 240 240 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]); 242 242 243 243 //Take centered differences on interior points … … 667 667 KP = xNew<IssmDouble>(m); 668 668 669 KU[0] = UNDEF;670 KD[m-1] = UNDEF;669 KU[0] = Delflag; 670 KD[m-1] = Delflag; 671 671 for(int i=1;i<m;i++) KU[i]= K[i-1]; 672 672 for(int i=0;i<m-1;i++) KD[i] = K[i+1]; … … 676 676 dzU = xNew<IssmDouble>(m); 677 677 dzD = xNew<IssmDouble>(m); 678 dzU[0]= UNDEF;679 dzD[m-1]= UNDEF;678 dzU[0]=Delflag; 679 dzD[m-1]=Delflag; 680 680 681 681 for(int i=1;i<m;i++) dzU[i]= dz[i-1]; … … 1401 1401 for(int i=0;i<n;i++) m[i] += dW[i]; // new mass [kg] 1402 1402 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] 1404 1404 1405 1405 // if pore water froze in ice then adjust d and dz thickness … … 1433 1433 1434 1434 int i = 0; 1435 while (cellsum(surpE,n) > 0.0+Ttol ){1435 while (cellsum(surpE,n) > 0.0+Ttol && i<n){ 1436 1436 // use surplus energy to increase the temperature of lower cell 1437 1437 T[i+1] = surpE[i]/m[i+1]/CI + T[i+1]; … … 1451 1451 1452 1452 // 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 } 1454 1458 sumM = cellsum(M,n); // total melt [kg] 1455 1459 … … 1511 1515 // some or all meltwater refreezes 1512 1516 else{ 1513 // change in density densityand temperature1517 // change in density and temperature 1514 1518 // _printf_("MELT REFREEZE"); 1515 1519 //-----------------------melt water----------------------------- … … 1541 1545 1542 1546 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 } 1544 1550 1545 1551 // check if an ice layer forms … … 2003 2009 2004 2010 // 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; 2006 2012 2007 2013 // calculate new grid cell length
Note:
See TracChangeset
for help on using the changeset viewer.