Changeset 21584
- Timestamp:
- 03/01/17 23:27:31 (8 years ago)
- Location:
- issm/trunk-jpl/src/m
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/geometry.js
r21530 r21584 29 29 this.checkconsistency = function(md,solution,analyses) { //{{{ 30 30 31 if ((solution=='TransientSolution' & md.trans.isgia ivins) | (solution=='GiaIvinsSolution')){31 if ((solution=='TransientSolution' & md.trans.isgia) | (solution=='GiaSolution')){ 32 32 checkfield(md,'fieldname','geometry.thickness','timeseries',1,'NaN',1,'Inf',1,'>=',0); 33 33 } -
issm/trunk-jpl/src/m/classes/geometry.m
r21530 r21584 53 53 function md = checkconsistency(self,md,solution,analyses) % {{{ 54 54 55 if (strcmp(solution,'TransientSolution') & md.transient.isgia ivins) | strcmp(solution,'GiaIvinsSolution'),55 if (strcmp(solution,'TransientSolution') & md.transient.isgia) | strcmp(solution,'GiaSolution'), 56 56 md = checkfield(md,'fieldname','geometry.thickness','timeseries',1,'NaN',1,'Inf',1,'>=',0); 57 57 else -
issm/trunk-jpl/src/m/classes/geometry.py
r21530 r21584 45 45 def checkconsistency(self,md,solution,analyses): # {{{ 46 46 47 if (solution=='TransientSolution' and md.transient.isgia ivins) or (solution=='GiaIvinsSolution'):47 if (solution=='TransientSolution' and md.transient.isgia) or (solution=='GiaSolution'): 48 48 md = checkfield(md,'fieldname','geometry.thickness','NaN',1,'Inf',1,'>=',0,'timeseries',1) 49 49 else: -
issm/trunk-jpl/src/m/classes/giaivins.js
r21531 r21584 27 27 if(!ArrayAnyEqual(ArrayIsMember('GiaAnalysis',analyses),1))return; 28 28 29 checkfield(md,'fieldname','gia ivins.mantle_viscosity','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices,1],'>',0);30 checkfield(md,'fieldname','gia ivins.lithosphere_thickness','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices,1],'>',0);31 checkfield(md,'fieldname','gia ivins.cross_section_shape','numel',[1],'values',[1,2]);29 checkfield(md,'fieldname','gia.mantle_viscosity','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices,1],'>',0); 30 checkfield(md,'fieldname','gia.lithosphere_thickness','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices,1],'>',0); 31 checkfield(md,'fieldname','gia.cross_section_shape','numel',[1],'values',[1,2]); 32 32 33 33 //be sure that if we are running a masstransport ice flow model coupled with giaivins, that thickness forcings 34 34 //are not provided into the future. 35 if (solution=='TransientSolution' & md.trans.ismasstransport & md.trans.isgia ivins){35 if (solution=='TransientSolution' & md.trans.ismasstransport & md.trans.isgia){ 36 36 //figure out if thickness is a transient forcing: 37 37 if (md.geometry.thickness.length == (md.mesh.numberofvertices+1)){ -
issm/trunk-jpl/src/m/classes/giaivins.m
r21531 r21584 29 29 30 30 if ~ismember('GiaAnalysis',analyses), return; end 31 md = checkfield(md,'fieldname','gia ivins.mantle_viscosity','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1],'>',0);32 md = checkfield(md,'fieldname','gia ivins.lithosphere_thickness','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1],'>',0);33 md = checkfield(md,'fieldname','gia ivins.cross_section_shape','numel',[1],'values',[1,2]);31 md = checkfield(md,'fieldname','gia.mantle_viscosity','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1],'>',0); 32 md = checkfield(md,'fieldname','gia.lithosphere_thickness','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1],'>',0); 33 md = checkfield(md,'fieldname','gia.cross_section_shape','numel',[1],'values',[1,2]); 34 34 35 35 %be sure that if we are running a masstransport ice flow model coupled with giaivins, that thickness forcings 36 36 %are not provided into the future. 37 if strcmp(solution,'TransientSolution') & md.transient.ismasstransport & md.transient.isgia ivins,37 if strcmp(solution,'TransientSolution') & md.transient.ismasstransport & md.transient.isgia, 38 38 %figure out if thickness is a transient forcing: 39 39 if size(md.geometry.thickness,1)==md.mesh.numberofvertices+1, … … 64 64 function savemodeljs(self,fid,modelname) % {{{ 65 65 66 writejsdouble(fid,[modelname '.gia ivins.mantle_viscosity'],self.mantle_viscosity);67 writejsdouble(fid,[modelname '.gia ivins.lithosphere_thickness'],self.lithosphere_thickness);68 writejsdouble(fid,[modelname '.gia ivins.cross_section_shape'],self.cross_section_shape);66 writejsdouble(fid,[modelname '.gia.mantle_viscosity'],self.mantle_viscosity); 67 writejsdouble(fid,[modelname '.gia.lithosphere_thickness'],self.lithosphere_thickness); 68 writejsdouble(fid,[modelname '.gia.cross_section_shape'],self.cross_section_shape); 69 69 70 70 end % }}} -
issm/trunk-jpl/src/m/classes/giaivins.py
r21531 r21584 47 47 return md 48 48 49 md = checkfield(md,'fieldname','gia ivins.mantle_viscosity','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices],'>',0)50 md = checkfield(md,'fieldname','gia ivins.lithosphere_thickness','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices],'>',0)51 md = checkfield(md,'fieldname','gia ivins.cross_section_shape','numel',[1],'values',[1,2])49 md = checkfield(md,'fieldname','gia.mantle_viscosity','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices],'>',0) 50 md = checkfield(md,'fieldname','gia.lithosphere_thickness','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices],'>',0) 51 md = checkfield(md,'fieldname','gia.cross_section_shape','numel',[1],'values',[1,2]) 52 52 53 53 #be sure that if we are running a masstransport ice flow model coupled with giaivins, that thickness forcings -
issm/trunk-jpl/src/m/classes/model.js
r21530 r21584 37 37 console.log(sprintf("//19s: //-22s -- //s","levelset" ,"[1x1 " + typeof(this.levelset) + "]","parameters for moving boundaries (level-set method)")); 38 38 console.log(sprintf("//19s: //-22s -- //s","calving" ,"[1x1 " + typeof(this.calving) + "]","parameters for calving")); 39 console.log(sprintf("//19s: //-22s -- //s","gia ivins" ,"[1x1 " + typeof(this.giaivins) + "]","parameters for giaivinssolution"));39 console.log(sprintf("//19s: //-22s -- //s","gia" ,"[1x1 " + typeof(this.gia) + "]","parameters for gia solution")); 40 40 console.log(sprintf("//19s: //-22s -- //s","autodiff" ,"[1x1 " + typeof(this.autodiff) + "]","automatic differentiation parameters")); 41 41 console.log(sprintf("//19s: //-22s -- //s","inversion" ,"[1x1 " + typeof(this.inversion) + "]","parameters for inverse methods")); … … 78 78 this.levelset = new levelset(); 79 79 this.calving = new calving(); 80 this.gia ivins= new giaivins();80 this.gia = new giaivins(); 81 81 this.autodiff = new autodiff(); 82 82 this.inversion = new inversion(); … … 473 473 474 474 // giaivins 475 if (!isNaN(md.gia ivins.mantle_viscosity))476 md.gia ivins.mantle_viscosity=project2d(md,md.giaivins.mantle_viscosity,1);477 if (!isNaN(md.gia ivins.lithosphere_thickness))478 md.gia ivins.lithosphere_thickness=project2d(md,md.giaivins.lithosphere_thickness,1);475 if (!isNaN(md.gia.mantle_viscosity)) 476 md.gia.mantle_viscosity=project2d(md,md.gia.mantle_viscosity,1); 477 if (!isNaN(md.gia.lithosphere_thickness)) 478 md.gia.lithosphere_thickness=project2d(md,md.gia.lithosphere_thickness,1); 479 479 480 480 // elementstype … … 607 607 this.levelset = 0; 608 608 this.calving = 0; 609 this.gia ivins= 0;609 this.gia = 0; 610 610 611 611 this.autodiff = 0; -
issm/trunk-jpl/src/m/classes/model.m
r21545 r21584 40 40 levelset = 0; 41 41 calving = 0; 42 gia ivins= 0;42 gia = 0; 43 43 esa = 0; 44 44 … … 230 230 if ~isnan(md.initialization.watercolumn),md.initialization.watercolumn=project2d(md,md.initialization.watercolumn,1);end; 231 231 %giaivins 232 if ~isnan(md.gia ivins.mantle_viscosity), md.giaivins.mantle_viscosity=project2d(md,md.giaivins.mantle_viscosity,1); end233 if ~isnan(md.gia ivins.lithosphere_thickness), md.giaivins.lithosphere_thickness=project2d(md,md.giaivins.lithosphere_thickness,1); end232 if ~isnan(md.gia.mantle_viscosity), md.gia.mantle_viscosity=project2d(md,md.gia.mantle_viscosity,1); end 233 if ~isnan(md.gia.lithosphere_thickness), md.gia.lithosphere_thickness=project2d(md,md.gia.lithosphere_thickness,1); end 234 234 235 235 %elementstype … … 1115 1115 md.levelset = levelset(); 1116 1116 md.calving = calving(); 1117 md.gia ivins= giaivins();1117 md.gia = giaivins(); 1118 1118 md.esa = esa(); 1119 1119 md.autodiff = autodiff(); … … 1287 1287 disp(sprintf('%19s: %-22s -- %s','levelset' ,['[1x1 ' class(self.levelset) ']'],'parameters for moving boundaries (level-set method)')); 1288 1288 disp(sprintf('%19s: %-22s -- %s','calving' ,['[1x1 ' class(self.calving) ']'],'parameters for calving')); 1289 disp(sprintf('%19s: %-22s -- %s','gia ivins' ,['[1x1 ' class(self.giaivins) ']'],'parameters for giaivinssolution'));1289 disp(sprintf('%19s: %-22s -- %s','gia' ,['[1x1 ' class(self.gia) ']'],'parameters for gia solution')); 1290 1290 disp(sprintf('%19s: %-22s -- %s','esa' ,['[1x1 ' class(self.esa) ']'],'parameters for elastic adjustment solution')); 1291 1291 disp(sprintf('%19s: %-22s -- %s','autodiff' ,['[1x1 ' class(self.autodiff) ']'],'automatic differentiation parameters')); -
issm/trunk-jpl/src/m/classes/model.py
r21530 r21584 107 107 self.levelset = levelset() 108 108 self.calving = calving() 109 self.gia ivins= giaivins()109 self.gia = giaivins() 110 110 111 111 self.autodiff = autodiff() … … 150 150 'levelset',\ 151 151 'calving',\ 152 'giaivins',\152 'gia',\ 153 153 'autodiff',\ 154 154 'inversion',\ … … 640 640 md.materials.extrude(md) 641 641 md.damage.extrude(md) 642 md.gia ivins.extrude(md)642 md.gia.extrude(md) 643 643 md.mask.extrude(md) 644 644 md.qmu.extrude(md) … … 697 697 698 698 #giaivins 699 if not np.isnan(md.gia ivins.mantle_viscosity).all(): md.giaivins.mantle_viscosity=project2d(md,md.giaivins.mantle_viscosity,1)700 if not np.isnan(md.gia ivins.lithosphere_thickness).all(): md.giaivins.lithosphere_thickness=project2d(md,md.giaivins.lithosphere_thickness,1)699 if not np.isnan(md.gia.mantle_viscosity).all(): md.gia.mantle_viscosity=project2d(md,md.gia.mantle_viscosity,1) 700 if not np.isnan(md.gia.lithosphere_thickness).all(): md.gia.lithosphere_thickness=project2d(md,md.gia.lithosphere_thickness,1) 701 701 702 702 #elementstype -
issm/trunk-jpl/src/m/classes/trans.js
r21530 r21584 14 14 this.isthermal = 1; 15 15 this.isgroundingline = 0; 16 this.isgia ivins= 0;16 this.isgia = 0; 17 17 this.isdamageevolution = 0; 18 18 this.ismovingfront = 0; … … 34 34 fielddisplay(this,'isthermal','indicates whether a thermal solution is used in the transient'); 35 35 fielddisplay(this,'isgroundingline','indicates whether a groundingline migration is used in the transient'); 36 fielddisplay(this,'isgia ivins','indicates whether a postglacial rebound model is used in the transient');36 fielddisplay(this,'isgia','indicates whether a postglacial rebound model is used in the transient'); 37 37 fielddisplay(this,'isdamageevolution','indicates whether damage evolution is used in the transient'); 38 38 fielddisplay(this,'ismovingfront','indicates whether a moving front capability is used in the transient'); … … 57 57 checkfield(md,'fieldname','trans.isthermal','numel',[1],'values',[0 ,1]); 58 58 checkfield(md,'fieldname','trans.isgroundingline','numel',[1],'values',[0, 1]); 59 checkfield(md,'fieldname','trans.isgia ivins','numel',[1],'values',[0, 1]);59 checkfield(md,'fieldname','trans.isgia','numel',[1],'values',[0, 1]); 60 60 checkfield(md,'fieldname','trans.isdamageevolution','numel',[1],'values',[0, 1]); 61 61 checkfield(md,'fieldname','trans.ismovingfront','numel',[1],'values',[0, 1]); … … 73 73 WriteData(fid,prefix,'object',this,'fieldname','isthermal','format','Boolean'); 74 74 WriteData(fid,prefix,'object',this,'fieldname','isgroundingline','format','Boolean'); 75 WriteData(fid,prefix,'object',this,'fieldname','isgia ivins','format','Boolean');75 WriteData(fid,prefix,'object',this,'fieldname','isgia','format','Boolean'); 76 76 WriteData(fid,prefix,'object',this,'fieldname','isdamageevolution','format','Boolean'); 77 77 WriteData(fid,prefix,'object',this,'fieldname','ishydrology','format','Boolean'); … … 105 105 this.isthermal = 0; 106 106 this.isgroundingline = 0; 107 this.isgia ivins= 0;107 this.isgia = 0; 108 108 this.isdamageevolution = 0; 109 109 this.ismovingfront = 0; -
issm/trunk-jpl/src/m/classes/transient.m
r21576 r21584 11 11 isthermal = 0; 12 12 isgroundingline = 0; 13 isgia ivins= 0;13 isgia = 0; 14 14 isesa = 0; 15 15 isdamageevolution = 0; … … 38 38 self.isthermal = 0; 39 39 self.isgroundingline = 0; 40 self.isgia ivins= 0;40 self.isgia = 0; 41 41 self.isesa = 0; 42 42 self.isdamageevolution = 0; … … 58 58 self.isthermal = 1; 59 59 self.isgroundingline = 0; 60 self.isgia ivins= 0;60 self.isgia = 0; 61 61 self.isesa = 0; 62 62 self.isdamageevolution = 0; … … 87 87 md = checkfield(md,'fieldname','transient.isthermal','numel',[1],'values',[0 1]); 88 88 md = checkfield(md,'fieldname','transient.isgroundingline','numel',[1],'values',[0 1]); 89 md = checkfield(md,'fieldname','transient.isgia ivins','numel',[1],'values',[0 1]);89 md = checkfield(md,'fieldname','transient.isgia','numel',[1],'values',[0 1]); 90 90 md = checkfield(md,'fieldname','transient.isesa','numel',[1],'values',[0 1]); 91 91 md = checkfield(md,'fieldname','transient.isdamageevolution','numel',[1],'values',[0 1]); … … 109 109 fielddisplay(self,'isthermal','indicates whether a thermal solution is used in the transient'); 110 110 fielddisplay(self,'isgroundingline','indicates whether a groundingline migration is used in the transient'); 111 fielddisplay(self,'isgia ivins','indicates whether a postglacial rebound model is used in the transient');111 fielddisplay(self,'isgia','indicates whether a postglacial rebound model is used in the transient'); 112 112 fielddisplay(self,'isesa','indicates whether an elastic adjustment model is used in the transient'); 113 113 fielddisplay(self,'isdamageevolution','indicates whether damage evolution is used in the transient'); … … 126 126 WriteData(fid,prefix,'object',self,'fieldname','isthermal','format','Boolean'); 127 127 WriteData(fid,prefix,'object',self,'fieldname','isgroundingline','format','Boolean'); 128 WriteData(fid,prefix,'object',self,'fieldname','isgia ivins','format','Boolean');128 WriteData(fid,prefix,'object',self,'fieldname','isgia','format','Boolean'); 129 129 WriteData(fid,prefix,'object',self,'fieldname','isesa','format','Boolean'); 130 130 WriteData(fid,prefix,'object',self,'fieldname','isdamageevolution','format','Boolean'); … … 151 151 writejsdouble(fid,[modelname '.trans.isthermal'],self.isthermal); 152 152 writejsdouble(fid,[modelname '.trans.isgroundingline'],self.isgroundingline); 153 writejsdouble(fid,[modelname '.trans.isgia ivins'],self.isgiaivins);153 writejsdouble(fid,[modelname '.trans.isgia'],self.isgia); 154 154 writejsdouble(fid,[modelname '.trans.isesa'],self.isesa); 155 155 writejsdouble(fid,[modelname '.trans.isdamageevolution'],self.isdamageevolution); -
issm/trunk-jpl/src/m/classes/transient.py
r21576 r21584 17 17 self.isthermal = False 18 18 self.isgroundingline = False 19 self.isgia ivins= False19 self.isgia = False 20 20 self.isesa = False 21 21 self.isdamageevolution = False … … 38 38 string="%s\n%s"%(string,fielddisplay(self,'isthermal','indicates if a thermal solution is used in the transient')) 39 39 string="%s\n%s"%(string,fielddisplay(self,'isgroundingline','indicates if a groundingline migration is used in the transient')) 40 string="%s\n%s"%(string,fielddisplay(self,'isgia ivins','indicates if a postglacial rebound is used in the transient'))40 string="%s\n%s"%(string,fielddisplay(self,'isgia','indicates if a postglacial rebound is used in the transient')) 41 41 string="%s\n%s"%(string,fielddisplay(self,'isesa','indicates whether an elastic adjustment model is used in the transient')) 42 42 string="%s\n%s"%(string,fielddisplay(self,'isdamageevolution','indicates whether damage evolution is used in the transient')) … … 65 65 self.isthermal = False 66 66 self.isgroundingline = False 67 self.isgia ivins= False67 self.isgia = False 68 68 self.isesa = False 69 69 self.isdamageevolution = False … … 86 86 self.isthermal = True 87 87 self.isgroundingline = False 88 self.isgia ivins= False88 self.isgia = False 89 89 self.isesa = False 90 90 self.isdamageevolution = False … … 110 110 md = checkfield(md,'fieldname','transient.isthermal','numel',[1],'values',[0,1]) 111 111 md = checkfield(md,'fieldname','transient.isgroundingline','numel',[1],'values',[0,1]) 112 md = checkfield(md,'fieldname','transient.isgia ivins','numel',[1],'values',[0,1])112 md = checkfield(md,'fieldname','transient.isgia','numel',[1],'values',[0,1]) 113 113 md = checkfield(md,'fieldname','transient.isesa','numel',[1],'values',[0,1]) 114 114 md = checkfield(md,'fieldname','transient.isdamageevolution','numel',[1],'values',[0,1]) … … 131 131 WriteData(fid,prefix,'object',self,'fieldname','isthermal','format','Boolean') 132 132 WriteData(fid,prefix,'object',self,'fieldname','isgroundingline','format','Boolean') 133 WriteData(fid,prefix,'object',self,'fieldname','isgia ivins','format','Boolean')133 WriteData(fid,prefix,'object',self,'fieldname','isgia','format','Boolean') 134 134 WriteData(fid,prefix,'object',self,'fieldname','isesa','format','Boolean') 135 135 WriteData(fid,prefix,'object',self,'fieldname','isdamageevolution','format','Boolean') -
issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.js
r21530 r21584 75 75 analyses=['L2ProjectionBaseAnalysis']; 76 76 77 }else if(solutiontype ==='Gia IvinsSolution'){77 }else if(solutiontype ==='GiaSolution'){ 78 78 analyses=['GiaIvinsAnalysis']; 79 79 -
issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m
r21530 r21584 64 64 elseif strcmp(solutiontype,'BedSlopeSolution') 65 65 analyses={'L2ProjectionBaseAnalysis'}; 66 elseif strcmp(solutiontype,'Gia IvinsSolution')66 elseif strcmp(solutiontype,'GiaSolution') 67 67 analyses={'GiaIvinsAnalysis'}; 68 68 elseif strcmp(solutiontype,'EsaSolution') -
issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.py
r21530 r21584 31 31 analyses=['L2ProjectionBaseAnalysis'] 32 32 33 elif solutiontype == 'Gia IvinsSolution':33 elif solutiontype == 'GiaSolution': 34 34 analyses=['GiaIvinsAnalysis'] 35 35 -
issm/trunk-jpl/src/m/solve/solve.js
r21530 r21584 18 18 // - 'Hydrology' or 'hy' 19 19 // - 'DamageEvolution' or 'da' 20 // - 'Gia Ivins' or 'giaivins'20 // - 'Gia' or 'gia' 21 21 // - 'Sealevelrise' or 'slr' 22 22 // … … 59 59 }else if((solutionstring.toLowerCase() === 'da') || (solutionstring.toLowerCase() === 'damageevolution')){ 60 60 solutionstring = 'DamageEvolutionSolution'; 61 }else if((solutionstring.toLowerCase() === 'gia ivins') || (solutionstring.toLowerCase() === 'giaivins')){62 solutionstring = 'Gia IvinsSolution';61 }else if((solutionstring.toLowerCase() === 'gia') || (solutionstring.toLowerCase() === 'gia')){ 62 solutionstring = 'GiaSolution'; 63 63 }else if((solutionstring.toLowerCase() === 'slr') || (solutionstring.toLowerCase() === 'sealevelrise')){ 64 64 solutionstring = 'SealevelriseSolution'; -
issm/trunk-jpl/src/m/solve/solve.m
r21576 r21584 18 18 % - 'Hydrology' or 'hy' 19 19 % - 'DamageEvolution' or 'da' 20 % - 'Gia Ivins' or 'giaivins'20 % - 'Gia' or 'gia' 21 21 % - 'Esa' or 'esa' 22 22 % - 'Sealevelrise' or 'slr' … … 62 62 elseif strcmpi(solutionstring,'da') || strcmpi(solutionstring,'DamageEvolution') 63 63 solutionstring = 'DamageEvolutionSolution'; 64 elseif strcmpi(solutionstring,'gia ivins') || strcmpi(solutionstring,'GiaIvins')65 solutionstring = 'Gia IvinsSolution';64 elseif strcmpi(solutionstring,'gia') || strcmpi(solutionstring,'Gia') 65 solutionstring = 'GiaSolution'; 66 66 elseif strcmpi(solutionstring,'esa') || strcmpi(solutionstring,'Esa') 67 67 solutionstring = 'EsaSolution'; -
issm/trunk-jpl/src/m/solve/solve.py
r21582 r21584 28 28 - 'Hydrology' or 'hy' 29 29 - 'DamageEvolution' or 'da' 30 - 'Gia Ivins' or 'giaivins'30 - 'Gia' or 'gia' 31 31 - 'Sealevelrise' or 'slr' 32 32 … … 64 64 elif solutionstring.lower() == 'da' or solutionstring.lower() == 'damageevolution': 65 65 solutionstring = 'DamageEvolutionSolution'; 66 elif solutionstring.lower() == 'gia ivins' or solutionstring.lower() == 'giaivins':67 solutionstring = 'Gia IvinsSolution';66 elif solutionstring.lower() == 'gia' or solutionstring.lower() == 'gia': 67 solutionstring = 'GiaSolution'; 68 68 elif solutionstring.lower() == 'slr' or solutionstring.lower() == 'sealevelrise': 69 69 solutionstring = 'SealevelriseSolution';
Note:
See TracChangeset
for help on using the changeset viewer.