Changeset 24044


Ignore:
Timestamp:
06/24/19 07:44:12 (6 years ago)
Author:
seroussi
Message:

NEW: added anomaly to ISMIP6 forcing

Location:
issm/trunk-jpl
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp

    r24024 r24044  
    181181                case BasalforcingsIsmip6Enum:{
    182182                        iomodel->FetchDataToInput(elements,"md.basalforcings.basin_id",BasalforcingsIsmp6BasinIdEnum);
     183                        iomodel->FetchDataToInput(elements,"md.basalforcings.melt_anomaly",BasalforcingsIsmp6MeltAnomalyEnum,0.);
    183184                        IssmDouble** array3d = NULL; int* Ms = NULL; int* Ns = NULL; int K;
    184185                        iomodel->FetchData(&array3d,&Ms,&Ns,&K,"md.basalforcings.tf");
  • issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r24023 r24044  
    21752175
    21762176        int         basinid,num_basins,M,N;
    2177         IssmDouble  tf,gamma0,base,delta_t_basin,mean_tf_basin,absval;
     2177        IssmDouble  tf,gamma0,base,delta_t_basin,mean_tf_basin,absval,meltanomaly;
    21782178        bool        islocal;
    21792179        IssmDouble* delta_t = NULL;
     
    22032203                this->parameters->FindParam(&mean_tf,&N,BasalforcingsIsmp6AverageTfEnum); _assert_(N==num_basins);
    22042204        }
    2205         Input* tf_input=this->GetInput(BasalforcingsIsmp6TfShelfEnum);            _assert_(tf_input);
     2205        Input* tf_input = this->GetInput(BasalforcingsIsmp6TfShelfEnum);              _assert_(tf_input);
     2206        Input* meltanomaly_input = this->GetInput(BasalforcingsIsmp6MeltAnomalyEnum); _assert_(meltanomaly_input);
    22062207        delta_t_basin = delta_t[basinid];
    22072208        if(!islocal) mean_tf_basin = mean_tf[basinid];
     
    22122213                gauss->GaussVertex(i);
    22132214                tf_input->GetInputValue(&tf,gauss);
     2215                meltanomaly_input->GetInputValue(&meltanomaly,gauss);
    22142216                if(!islocal) {
    22152217                        absval = mean_tf_basin+delta_t_basin;
    22162218                        if (absval<0) {absval = -1.*absval;}
    2217                         basalmeltrate[i] = gamma0*pow((rhow*cp)/(rhoi*lf),2)*(tf+delta_t_basin)*absval;
     2219                        basalmeltrate[i] = gamma0*pow((rhow*cp)/(rhoi*lf),2)*(tf+delta_t_basin)*absval + meltanomaly;
    22182220                }
    22192221                else{
    2220                         basalmeltrate[i] = gamma0*pow((rhow*cp)/(rhoi*lf),2)*pow(max(tf+delta_t_basin,0.),2);
     2222                        basalmeltrate[i] = gamma0*pow((rhow*cp)/(rhoi*lf),2)*pow(max(tf+delta_t_basin,0.),2) + meltanomaly;
    22212223                }
    22222224        }
  • issm/trunk-jpl/src/c/shared/Enum/Enum.vim

    r24040 r24044  
    457457syn keyword cConstant BasalforcingsIsmp6TfEnum
    458458syn keyword cConstant BasalforcingsIsmp6TfShelfEnum
     459syn keyword cConstant BasalforcingsIsmp6MeltAnomalyEnum
    459460syn keyword cConstant BasalforcingsPicoBasinIdEnum
    460461syn keyword cConstant BasalforcingsPicoBoxIdEnum
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r24040 r24044  
    453453        BasalforcingsIsmp6TfEnum,
    454454        BasalforcingsIsmp6TfShelfEnum,
     455        BasalforcingsIsmp6MeltAnomalyEnum,
    455456        BasalforcingsPicoBasinIdEnum,
    456457        BasalforcingsPicoBoxIdEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r24040 r24044  
    459459                case BasalforcingsIsmp6TfEnum : return "BasalforcingsIsmp6Tf";
    460460                case BasalforcingsIsmp6TfShelfEnum : return "BasalforcingsIsmp6TfShelf";
     461                case BasalforcingsIsmp6MeltAnomalyEnum : return "BasalforcingsIsmp6MeltAnomaly";
    461462                case BasalforcingsPicoBasinIdEnum : return "BasalforcingsPicoBasinId";
    462463                case BasalforcingsPicoBoxIdEnum : return "BasalforcingsPicoBoxId";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r24040 r24044  
    468468              else if (strcmp(name,"BasalforcingsIsmp6Tf")==0) return BasalforcingsIsmp6TfEnum;
    469469              else if (strcmp(name,"BasalforcingsIsmp6TfShelf")==0) return BasalforcingsIsmp6TfShelfEnum;
     470              else if (strcmp(name,"BasalforcingsIsmp6MeltAnomaly")==0) return BasalforcingsIsmp6MeltAnomalyEnum;
    470471              else if (strcmp(name,"BasalforcingsPicoBasinId")==0) return BasalforcingsPicoBasinIdEnum;
    471472              else if (strcmp(name,"BasalforcingsPicoBoxId")==0) return BasalforcingsPicoBoxIdEnum;
  • issm/trunk-jpl/src/m/classes/basalforcingsismip6.m

    r24010 r24044  
    1515                geothermalflux            = NaN;
    1616                groundedice_melting_rate  = NaN;
     17                melt_anomaly              = NaN;
    1718        end
    1819        methods
     
    2425                        self.geothermalflux=project3d(md,'vector',self.geothermalflux,'type','element','layer',1); %bedrock only gets geothermal flux
    2526                        self.groundedice_melting_rate=project3d(md,'vector',self.groundedice_melting_rate,'type','node','layer',1);
     27                        self.melt_anomaly=project3d(md,'vector',self.melt_anomaly,'type','element','layer',1); %bedrock only gets geothermal flux
    2628                end % }}}
    2729                function self = basalforcingsismip6(varargin) % {{{
     
    6163                        md = checkfield(md,'fieldname','basalforcings.geothermalflux','NaN',1,'Inf',1,'>=',0,'timeseries',1);
    6264                        md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1);
     65                        if length(md.basalforcings.melt_anomaly)>1,
     66                                md = checkfield(md,'fieldname','basalforcings.melt_anomaly','NaN',1,'Inf',1,'timeseries',1);
     67                        end
    6368
    6469                        md = checkfield(md,'fieldname','basalforcings.tf','size',[1,1,numel(md.basalforcings.tf_depths)]);
     
    7984                        fielddisplay(self,'geothermalflux','geothermal heat flux (W/m^2)');
    8085                        fielddisplay(self,'groundedice_melting_rate','basal melting rate (positive if melting) (m/yr)');
     86                        fielddisplay(self,'melt_anomaly','floating ice basal melt anomaly (m/yr)');
    8187
    8288                end % }}}
     
    95101                        WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','format','DoubleMat','name','md.basalforcings.geothermalflux','mattype',1,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
    96102                        WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
     103                        WriteData(fid,prefix,'object',self,'fieldname','melt_anomaly','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
    97104
    98105                end % }}}
  • issm/trunk-jpl/test/NightlyRun/test472.m

    r23906 r24044  
    3232D = cell(1,1,3); D(:,:,1)={A}; D(:,:,2)={B}; D(:,:,3)={C};
    3333md.basalforcings.tf = D;
     34
     35%Add a melt anomaly
     36md.basalforcings.melt_anomaly= ones(md.mesh.numberofvertices+1,2);
     37md.basalforcings.melt_anomaly(:,2)= 2;
     38md.basalforcings.melt_anomaly(end,:)=[1;2];
    3439
    3540%Boundary conditions:
Note: See TracChangeset for help on using the changeset viewer.