Changeset 25993
- Timestamp:
- 02/15/21 13:49:48 (4 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r25905 r25993 3551 3551 IssmDouble teValue=1.0; 3552 3552 IssmDouble aValue=0.0; 3553 IssmDouble szaValue=0.0; 3554 IssmDouble cotValue=0.0; 3555 IssmDouble ccsnowValue=0.0; 3556 IssmDouble cciceValue=0.0; 3553 3557 IssmDouble dt,time,smb_dt; 3554 3558 int aIdx=0; … … 3833 3837 teValue_input->GetInputValue(&teValue,gauss); // Emissivity [0-1] 3834 3838 aValue_input->GetInputValue(&aValue,gauss); // Albedo [0 1] 3839 //Not implemented as input 3840 //szaValue; // Solar Zenith Angle [degree] 3841 //cotValue; // Cloud Optical Thickness 3842 //ccsnowValue;//concentration of light absorbing carbon for snow [ppm1] 3843 //cciceValue;//concentration of light absorbing carbon for ice [ppm1] 3835 3844 //_printf_("Time: " << t << " Ta: " << Ta << " V: " << V << " dlw: " << dlw << " dsw: " << dsw << " P: " << P << " eAir: " << eAir << " pAir: " << pAir << "\n"); 3836 3845 /*}}}*/ … … 3840 3849 3841 3850 /*Snow, firn and ice albedo:*/ 3842 if(isalbedo)albedo(&a,aIdx,re,dz,d,cldFrac,aIce,aSnow,aValue,adThresh,T,W,P,EC,Msurf, t0wet,t0dry,K,smb_dt,rho_ice,m,this->Sid());3851 if(isalbedo)albedo(&a,aIdx,re,dz,d,cldFrac,aIce,aSnow,aValue,adThresh,T,W,P,EC,Msurf,ccsnowValue,cciceValue,szaValue,cotValue,t0wet,t0dry,K,smb_dt,rho_ice,m,this->Sid()); 3843 3852 3844 3853 /*Distribution of absorbed short wave radation with depth:*/ … … 3927 3936 /*Check mass conservation:*/ 3928 3937 if (dMass != 0.0){ 3929 _printf_("total system mass not conserved in MB function \n"); 3938 _printf_("Time: " << setprecision(8) << timeinputs/365.0/24.0/3600.0 << ",total system mass not conserved in MB function \n"); 3939 _printf_("sumMass: " << sumMass << " sumR: " << sumR << " sumW: " << sumW << " sumP: " << sumP << " sumEC: " << sumEC << " initMass: " << initMass << " sumMassAdd: " << sumMassAdd << " \n"); 3930 3940 } 3931 3941 #endif -
issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
r25851 r25993 410 410 411 411 } /*}}}*/ 412 void albedo(IssmDouble** pa, int aIdx, IssmDouble* re, IssmDouble* dz, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble aValue, IssmDouble adThresh, IssmDouble* TK, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble Msurf, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt, IssmDouble dIce, int m,int sid) { /*{{{*/412 void albedo(IssmDouble** pa, int aIdx, IssmDouble* re, IssmDouble* dz, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble aValue, IssmDouble adThresh, IssmDouble* TK, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble Msurf, IssmDouble clabSnow, IssmDouble clabIce, IssmDouble SZA, IssmDouble COT, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt, IssmDouble dIce, int m,int sid) { /*{{{*/ 413 413 414 414 //// Calculates Snow, firn and ice albedo as a function of: … … 432 432 // Methods 1 & 2 433 433 // re = surface effective grain radius [mm] 434 // Method 1, optional 435 // clabSnow = concentration of light absorbing carbon [ppm1], default 0 436 // SZA = solar zenith angle of the incident radiation [deg], default 0 437 // COT = cloud optical thickness, default 0 438 // For TWO LAYER 439 // clabIce = concentration of light absorbing carbon of first ice layer [ppm1], default 0 434 440 435 441 // Methods 3 … … 485 491 //function of effective grain radius 486 492 493 //gardnerAlb(S1, c1, SZA, t, z1, S2, c2) 494 //This is an implementation of the snow and ice broadband albedo 495 // parameterization developed by Alex Gardner. 496 //Created By: Alex S. Gardner, Jet Propulsion Laboratory [alex.s.gardner@jpl.nasa.gov] 497 // Last Modified: June, 2014 498 //Full Reference: Gardner, A. S., and Sharp, M. J.: A review of snow and 499 // ice albedo and the development of a new physically based broadband albedo 500 // parameterization, J. Geophys. Res., 115, F01009, 10.1029/2009jf001444, 501 // 2010. 502 503 //INPUTS 504 // ONE LAYER 505 // - S1 : specific surface area of the snow or ice [cm^2 g-1] 506 // - c1 : concentration of light absorbing carbon [ppm1] 507 // - SZA : solar zenith angle of the incident radiation [deg] 508 // - t : cloud optical thickness 509 // TWO LAYER 510 // - z1 : depth of snow suface layer [mm w.e.] 511 // - S2 : specific surface area of bottom ice layer [cm^2 g-1] 512 // - c2 : concentration of light absorbing carbon of bottom ice 513 // layer [ppm1] 514 IssmDouble c1=clabSnow; 515 IssmDouble c2=clabIce; 516 IssmDouble t=COT; 517 518 //Single layer albedo parameterization 487 519 //convert effective radius to specific surface area [cm2 g-1] 488 IssmDouble S = 3.0 / (0.091 * re[0]); 489 490 //determine broadband albedo 491 a[0]= 1.48 - pow(S,-0.07); 520 IssmDouble S1 = 3.0 / (0.091 * re[0]); 521 522 //effective solar zenith angle 523 IssmDouble x = min(pow(t/(3*cos(Pi*SZA/180.0)),0.5), 1.0); 524 IssmDouble u = 0.64*x + (1-x)*cos(Pi*SZA/180.0); 525 526 // pure snow albedo 527 IssmDouble as = 1.48 - pow(S1,-0.07); 528 529 //change in pure snow albedo due to soot loading 530 IssmDouble dac = max(0.04 - as, pow(-c1,0.55)/(0.16 + 0.6*pow(S1,0.5) + (1.8*pow(c1,0.6))*pow(S1,-0.25))); 531 532 //Two layer albedo parameterization 533 // do two layer calculation if there is more than 1 layer 534 IssmDouble z1=0.0; 535 int lice=0; 536 for(int l=0;(l<m & d[l]<dPHC-Dtol);l++){ 537 z1=z1+dz[l]*d[l]; //mm 538 lice=l+1; 539 } 540 if (m>0 & lice<m & z1 > Dtol){ 541 // determine albedo values for bottom layer 542 IssmDouble S2 = 3.0 / (0.091 * re[lice]); 543 544 // pure snow albedo 545 IssmDouble as2 = 1.48 - pow(S2,-0.07); 546 547 // change in pure snow albedo due to soot loading 548 IssmDouble dac2 = max(0.04 - as2, pow(-c2,0.55)/(0.16 + 0.6*pow(S1,0.5) + (1.8*pow(c2,0.6))*pow(S2,-0.25))); 549 550 // determine the effective change due to finite depth and soot loading 551 IssmDouble A = min(1.0, (2.1 * pow(z1,1.35*(1-as) - 0.1*c1 - 0.13))); 552 553 dac = (as2 + dac2 - as) + A*((as + dac) - (as2 + dac2)); 554 } 555 556 // change in albedo due to solar zenith angle 557 IssmDouble dasz = 0.53*as*(1 - (as + dac))*pow(1 - u,1.2); 558 559 // change in albedo due to cloud (apart from change in diffuse fraction) 560 IssmDouble dat = (0.1*t*pow(as + dac,1.3)) / (pow(1 + 1.5*t,as)); 561 562 // Broadband albedo 563 a[0] = as + dac + dasz + dat; 492 564 } 493 565 else if(aIdx==2){ -
issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h
r25396 r25993 29 29 IssmDouble Marbouty(IssmDouble T, IssmDouble d, IssmDouble dT); 30 30 void grainGrowth(IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, IssmDouble* T,IssmDouble* dz,IssmDouble* d, IssmDouble* W,IssmDouble smb_dt,int m,int aIdx, int sid); 31 void albedo(IssmDouble** a,int aIdx, IssmDouble* re, IssmDouble* dz, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble aValue, IssmDouble adThresh, IssmDouble* T, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble Msurf, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt, IssmDouble dIce, int m, int sid);31 void albedo(IssmDouble** a,int aIdx, IssmDouble* re, IssmDouble* dz, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble aValue, IssmDouble adThresh, IssmDouble* T, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble Msurf, IssmDouble clabSnow, IssmDouble clabIce, IssmDouble SZA, IssmDouble COT, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt, IssmDouble dIce, int m, int sid); 32 32 void shortwave(IssmDouble** pswf, int swIdx, int aIdx, IssmDouble dsw, IssmDouble as, IssmDouble* d, IssmDouble* dz, IssmDouble* re, IssmDouble dIce, int m, int sid); 33 33 void thermo(IssmDouble* pEC, IssmDouble** T, IssmDouble* pulwrf, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlw, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble teValue, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz, IssmDouble thermo_scaling, IssmDouble dIce, int sid, bool isconstrainsurfaceT);
Note:
See TracChangeset
for help on using the changeset viewer.