Changeset 18503
- Timestamp:
- 09/11/14 07:03:33 (11 years ago)
- Location:
- issm/trunk-jpl/src/m
- Files:
-
- 10 added
- 1 deleted
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/constants.m
r17720 r18503 6 6 classdef constants 7 7 properties (SetAccess=public) 8 g = 0; 9 yts = 0; 10 referencetemperature = 0; 8 g = 0.; 9 omega = 0.; 10 yts = 0.; 11 referencetemperature = 0.; 11 12 end 12 13 methods … … 31 32 obj.g=9.81; 32 33 34 %Earth's rotation speed 35 obj.omega = 7.292*1e-5; 36 33 37 %converstion from year to seconds 34 38 obj.yts=365*24*3600; … … 40 44 function md = checkconsistency(obj,md,solution,analyses) % {{{ 41 45 42 % md = checkfield(md,'fieldname','constants.g','>',0,'size',[1 1]); 46 md = checkfield(md,'fieldname','constants.g','>=',0,'size',[1 1]); %We allow 0 for validation tests 47 md = checkfield(md,'fieldname','constants.omega','>=',0,'size',[1 1]); 43 48 md = checkfield(md,'fieldname','constants.yts','>',0,'size',[1 1]); 44 49 md = checkfield(md,'fieldname','constants.referencetemperature','size',[1 1]); … … 49 54 50 55 fielddisplay(obj,'g','gravitational acceleration [m/s^2]'); 56 fielddisplay(obj,'omega','angular velocity of Earth [rad/s]'); 51 57 fielddisplay(obj,'yts','number of seconds in a year [s/yr]'); 52 58 fielddisplay(obj,'referencetemperature','reference temperature used in the enthalpy model [K]'); … … 55 61 function marshall(obj,md,fid) % {{{ 56 62 WriteData(fid,'object',obj,'fieldname','g','format','Double'); 63 WriteData(fid,'object',obj,'fieldname','omega','format','Double'); 57 64 WriteData(fid,'object',obj,'fieldname','yts','format','Double'); 58 65 WriteData(fid,'object',obj,'fieldname','referencetemperature','format','Double'); -
issm/trunk-jpl/src/m/classes/matseaice.m
r18494 r18503 9 9 poisson = 0.; 10 10 young_modulus = 0.; 11 damage = NaN;12 11 ridging_exponent = 0.; 13 12 cohesion = 0.; … … 15 14 compression_coef = 0.; 16 15 traction_coef = 0.; 16 time_relaxation_stress = 0.; 17 time_relaxation_damage = 0.; 17 18 end 18 19 methods … … 61 62 obj.traction_coef=5./6.; 62 63 64 %Time relaxation stress 65 %1e20 for the elastic case (perfect memory of the stress), equal to the timestep for the viscous case (no memory of the stress) 66 obj.time_relaxation_stress=1.e+20; 67 68 %Time relaxation damage 69 %1e20 for the brittle case (perfect memory of the damage), equal to the timestep for the plastic case (no memory of the damage) 70 obj.time_relaxation_damage=1.e+20; 71 63 72 end % }}} 64 73 function md = checkconsistency(obj,md,solution,analyses) % {{{ … … 66 75 md = checkfield(md,'fieldname','materials.poisson','NaN',1,'>',0,'<',.5,'numel',1); 67 76 md = checkfield(md,'fieldname','materials.young_modulus','NaN',1,'>',0,'numel',1); 68 md = checkfield(md,'fieldname','materials.damage','NaN',1,'>=',0,'<',1,'size',[md.mesh.numberofelements 1]);69 77 md = checkfield(md,'fieldname','materials.ridging_exponent','NaN',1,'<',0,'numel',1); 70 78 md = checkfield(md,'fieldname','materials.cohesion','NaN',1,'>',0,'numel',1); … … 72 80 md = checkfield(md,'fieldname','materials.compression_coef','NaN',1,'>',1,'numel',1); 73 81 md = checkfield(md,'fieldname','materials.traction_coef','NaN',1,'>',0,'<',1,'numel',1); 82 md = checkfield(md,'fieldname','materials.time_relaxation_stress','NaN',1,'>',md.timestepping.time_step,'numel',1); 74 83 end % }}} 75 84 function disp(obj) % {{{ 76 85 disp(sprintf(' Sea Ice Material:')); 77 78 86 fielddisplay(obj,'rho_ice','ice density [kg/m^3]'); 79 87 fielddisplay(obj,'poisson','poisson ratio for undamaged ice [no unit]'); 80 88 fielddisplay(obj,'young_modulus','Young modulus for undamaged ice [Pa]'); 81 fielddisplay(obj,'damage','damage, between 0 (no damage) and 1 (fully damaged)');82 89 fielddisplay(obj,'ridging_exponent','Riging exponent (c, Hibler parameter) [no unit]'); 83 90 fielddisplay(obj,'cohesion','cohesion (C) [Pa]'); … … 85 92 fielddisplay(obj,'compression_coef','Ratio between cutoff compressive strength and the cohesion [no unit]'); 86 93 fielddisplay(obj,'traction_coef','Ratio between cutoff tensile strength and Mohr-Coulomb tensile strength [no unit]'); 94 fielddisplay(obj,'time_relaxation_stress','Relaxation time for stress (1e+20: elastic, dt: viscous) [s]'); 95 fielddisplay(obj,'time_relaxation_damage','Relaxation time for damage (1e+20: brittle, dt: plastic) [s]'); 87 96 end % }}} 88 97 function marshall(obj,md,fid) % {{{ … … 91 100 WriteData(fid,'object',obj,'class','materials','fieldname','poisson','format','Double'); 92 101 WriteData(fid,'object',obj,'class','materials','fieldname','young_modulus','format','Double'); 93 WriteData(fid,'object',obj,'class','materials','fieldname','damage','format','DoubleMat','mattype',2);94 102 WriteData(fid,'object',obj,'class','materials','fieldname','ridging_exponent','format','Double'); 95 103 WriteData(fid,'object',obj,'class','materials','fieldname','cohesion','format','Double'); … … 97 105 WriteData(fid,'object',obj,'class','materials','fieldname','compression_coef','format','Double'); 98 106 WriteData(fid,'object',obj,'class','materials','fieldname','traction_coef','format','Double'); 107 WriteData(fid,'object',obj,'class','materials','fieldname','time_relaxation_stress','format','Double'); 108 WriteData(fid,'object',obj,'class','materials','fieldname','time_relaxation_damage','format','Double'); 99 109 end % }}} 100 110 end -
issm/trunk-jpl/src/m/classes/model.m
r18492 r18503 137 137 if strcmpi(varargin{1},'seaice'), 138 138 md=setdefaultparameters(md); 139 md.materials = matseaice(); 139 140 %Specific subject for sea ice model 141 md.materials = matseaice(); 140 142 md.surfaceforcings = seaiceatm(); 141 143 md.basalforcings = seaiceocean(); 142 144 md.initialization = seaiceinitialization(); 145 146 %Change some of the defauls 147 md.timestepping.in_years = false; 148 md.constants.g = 9.80616; %Same as TOPAZ 143 149 else 144 150 error('model constructor not supported yet'); -
issm/trunk-jpl/src/m/classes/seaice.m
r18497 r18503 6 6 classdef seaice 7 7 properties (SetAccess=public) 8 thickness = NaN; 9 concentration = NaN; 10 spcvx = NaN; 11 spcvy = NaN; 12 coriolis_factor = NaN; 8 min_concentration = 0.; 9 min_thickness = 0.; 10 max_thickness = 0.; 11 spcvx = NaN; 12 spcvy = NaN; 13 coriolis_factor = NaN; 13 14 end 14 15 methods … … 16 17 switch nargin 17 18 case 0 19 obj=setdefaultparameters(obj); 18 20 return; 19 21 otherwise … … 23 25 function md = checkconsistency(obj,md,solution,analyses) % {{{ 24 26 if solution~=SeaiceSolutionEnum(), return; end 25 md = checkfield(md,'fieldname','seaice.thickness','size',[md.mesh.numberofelements 1],'NaN',1,'>=',0); 26 md = checkfield(md,'fieldname','seaice.concentration','size',[md.mesh.numberofelements 1],'NaN',1,'>=',0); 27 md = checkfield(md,'fieldname','seaice.min_concentration','NaN',1,'>=',0,'numel',1); 28 md = checkfield(md,'fieldname','seaice.min_thickness','NaN',1,'>=',0,'numel',1); 29 md = checkfield(md,'fieldname','seaice.max_thickness','NaN',1,'>',0,'numel',1); 27 30 md = checkfield(md,'fieldname','seaice.spcvx','size',[md.mesh.numberofvertices 1]); 28 31 md = checkfield(md,'fieldname','seaice.spcvy','size',[md.mesh.numberofvertices 1]); 29 32 md = checkfield(md,'fieldname','seaice.coriolis_factor','size',[md.mesh.numberofelements 1],'NaN',1,'>=',0); 30 33 end % }}} 34 function obj = setdefaultparameters(obj) % {{{ 35 36 %Minimum ice concentration allowed in the simulation 37 obj.min_concentration=0.; 38 39 %Minimum ice thickness allowed in the simulation 40 obj.min_thickness=0.; 41 42 %Maxmimum ice thickness allowed in the simulation 43 obj.max_thickness=25.; 44 45 end % }}} 31 46 function disp(obj) % {{{ 32 47 disp(sprintf(' seaice parameters:')); 33 fielddisplay(obj,'thickness','sea ice thickness [m]'); 34 fielddisplay(obj,'concentration','sea ice concentration (between 0 and 1)'); 48 fielddisplay(obj,'min_concentration','minimum ice concentration allowed in the simulation [no unit]'); 49 fielddisplay(obj,'min_thickness','minimum ice thickness allowed in the simulation [m]'); 50 fielddisplay(obj,'max_thickness','maximum ice thickness allowed in the simulation [m]'); 35 51 fielddisplay(obj,'spcvx','x-axis velocity constraint (NaN means no constraint) [m/s]'); 36 52 fielddisplay(obj,'spcvy','y-axis velocity constraint (NaN means no constraint) [m/s]'); … … 38 54 end % }}} 39 55 function marshall(obj,md,fid) % {{{ 40 WriteData(fid,'object',obj,'fieldname','thickness','format','DoubleMat','mattype',2); 41 WriteData(fid,'object',obj,'fieldname','concentration','format','DoubleMat','mattype',2); 56 WriteData(fid,'object',obj,'fieldname','min_concentration','format','Double'); 57 WriteData(fid,'object',obj,'fieldname','min_thickness','format','Double'); 58 WriteData(fid,'object',obj,'fieldname','max_thickness','format','Double'); 42 59 WriteData(fid,'object',obj,'fieldname','spcvx','format','DoubleMat','mattype',1); 43 60 WriteData(fid,'object',obj,'fieldname','spcvy','format','DoubleMat','mattype',1); -
issm/trunk-jpl/src/m/classes/seaiceinitialization.m
r18492 r18503 6 6 classdef seaiceinitialization 7 7 properties (SetAccess=public) 8 vx = NaN; 9 vy = NaN; 10 vx_coriolis = NaN; 11 vy_coriolis = NaN; 8 thickness = NaN; 9 concentration = NaN; 10 vx = NaN; 11 vy = NaN; 12 vx_coriolis = NaN; 13 vy_coriolis = NaN; 14 sigma_predictor_xx = NaN; 15 sigma_predictor_yy = NaN; 16 sigma_predictor_xy = NaN; 17 damage = NaN; 18 mesh_x = NaN; 19 mesh_y = NaN; 12 20 end 13 21 methods … … 21 29 end % }}} 22 30 function md = checkconsistency(obj,md,solution,analyses) % {{{ 31 md = checkfield(md,'fieldname','initialization.thickness','size',[md.mesh.numberofelements 1],'NaN',1,'>=',0); 32 md = checkfield(md,'fieldname','initialization.concentration','size',[md.mesh.numberofelements 1],'NaN',1,'>=',0); 23 33 md = checkfield(md,'fieldname','initialization.vx','NaN',1,'size',[md.mesh.numberofvertices 1]); 24 34 md = checkfield(md,'fieldname','initialization.vy','NaN',1,'size',[md.mesh.numberofvertices 1]); 25 35 md = checkfield(md,'fieldname','initialization.vx_coriolis','NaN',1,'size',[md.mesh.numberofvertices 1]); 26 36 md = checkfield(md,'fieldname','initialization.vy_coriolis','NaN',1,'size',[md.mesh.numberofvertices 1]); 37 md = checkfield(md,'fieldname','initialization.sigma_predictor_xx','NaN',1,'>=',0,'<',1,'size',[md.mesh.numberofelements 1]); 38 md = checkfield(md,'fieldname','initialization.sigma_predictor_yy','NaN',1,'>=',0,'<',1,'size',[md.mesh.numberofelements 1]); 39 md = checkfield(md,'fieldname','initialization.sigma_predictor_xy','NaN',1,'>=',0,'<',1,'size',[md.mesh.numberofelements 1]); 40 md = checkfield(md,'fieldname','initialization.damage','NaN',1,'>=',0,'<',1,'size',[md.mesh.numberofelements 1]); 41 md = checkfield(md,'fieldname','initialization.mesh_x','NaN',1,'size',[md.mesh.numberofvertices 1]); 42 md = checkfield(md,'fieldname','initialization.mesh_y','NaN',1,'size',[md.mesh.numberofvertices 1]); 27 43 end % }}} 28 44 function disp(obj) % {{{ 29 45 disp(sprintf(' initial field values:')); 46 fielddisplay(obj,'thickness','sea ice thickness [m]'); 47 fielddisplay(obj,'concentration','sea ice concentration (between 0 and 1)'); 30 48 fielddisplay(obj,'vx','x component of the ice velocity [m/s]'); 31 49 fielddisplay(obj,'vy','y component of the ice velocity [m/s]'); 32 50 fielddisplay(obj,'vx_coriolis','x component of the ice velocity used to calculate coriolis forces [m/s]'); 33 51 fielddisplay(obj,'vy_coriolis','y component of the ice velocity used to calculate coriolis forces [m/s]'); 52 fielddisplay(obj,'sigma_predictor_xx','Predictor for the xx component of the Cauchy stress tensor [Pa]'); 53 fielddisplay(obj,'sigma_predictor_yy','Predictor for the yy component of the Cauchy stress tensor [Pa]'); 54 fielddisplay(obj,'sigma_predictor_xy','Predictor for the xy component of the Cauchy stress tensor [Pa]'); 55 fielddisplay(obj,'damage','damage, between 0 (no damage) and 1 (fully damaged)'); 56 fielddisplay(obj,'mesh_x','x position of each vertex of the mesh using a Lagrangian approach'); 57 fielddisplay(obj,'mesh_y','y position of each vertex of the mesh using a Lagrangian approach'); 34 58 end % }}} 35 59 function marshall(obj,md,fid) % {{{ 60 WriteData(fid,'data',obj.thickness,'format','DoubleMat','mattype',2,'enum',SeaiceThicknessEnum()); 61 WriteData(fid,'data',obj.concentration,'format','DoubleMat','mattype',2,'enum',SeaiceConcentrationEnum()); 36 62 WriteData(fid,'data',obj.vx,'format','DoubleMat','mattype',1,'enum',VxEnum); 37 63 WriteData(fid,'data',obj.vy,'format','DoubleMat','mattype',1,'enum',VyEnum); 38 WriteData(fid,'data',obj.vx_coriolis,'format','DoubleMat','mattype',1,'enum',VxStarEnum); 39 WriteData(fid,'data',obj.vy_coriolis,'format','DoubleMat','mattype',1,'enum',VyStarEnum); 64 WriteData(fid,'data',obj.vx_coriolis,'format','DoubleMat','mattype',1,'enum',VxStarEnum()); 65 WriteData(fid,'data',obj.vy_coriolis,'format','DoubleMat','mattype',1,'enum',VyStarEnum()); 66 WriteData(fid,'data',obj.sigma_predictor_xx,'format','DoubleMat','mattype',2,'enum',StressTensorPredictorxxEnum()); 67 WriteData(fid,'data',obj.sigma_predictor_yy,'format','DoubleMat','mattype',2,'enum',StressTensorPredictoryyEnum()); 68 WriteData(fid,'data',obj.sigma_predictor_xy,'format','DoubleMat','mattype',2,'enum',StressTensorPredictorxyEnum()); 69 WriteData(fid,'data',obj.damage,'format','DoubleMat','mattype',2,'enum',DamageEnum()); 70 WriteData(fid,'data',obj.mesh_x,'format','DoubleMat','mattype',1,'enum',MeshXEnum()); 71 WriteData(fid,'data',obj.mesh_y,'format','DoubleMat','mattype',1,'enum',MeshYEnum()); 40 72 end % }}} 41 73 end -
issm/trunk-jpl/src/m/classes/seaiceocean.m
r18492 r18503 37 37 38 38 %Turning angle in degrees (McPhee 1998) 39 obj.ocean_turning_angle = 25.;39 obj.ocean_turning_angle = deg2rad(25.); 40 40 41 41 end % }}} … … 57 57 fielddisplay(obj,'ocean_lin_drag_coef','ocean linear drag coefficient [Pa/(m/s)]'); 58 58 fielddisplay(obj,'ocean_quad_drag_coef','ocean quadratic drag coefficient [Pa/(m/s)^2]'); 59 fielddisplay(obj,'ocean_turning_angle','ocean turning angle [ degree]');59 fielddisplay(obj,'ocean_turning_angle','ocean turning angle [rad]'); 60 60 fielddisplay(obj,'ocean_ssh','ocean sea surface height [m]'); 61 61 fielddisplay(obj,'ocean_vx','ocean speed x-component [m/s]'); -
issm/trunk-jpl/src/m/classes/timestepping.m
r18000 r18503 12 12 cfl_coefficient = 0.; 13 13 interp_forcings = 1; 14 in_years = 0; 14 15 end 15 16 methods … … 50 51 %should we interpolate forcings between timesteps? 51 52 obj.interp_forcings=1; 53 54 %In years by default 55 obj.in_years = 1; 52 56 end % }}} 53 57 function md = checkconsistency(obj,md,solution,analyses) % {{{ … … 66 70 disp(sprintf(' timestepping parameters:')); 67 71 68 fielddisplay(obj,'start_time','simulation starting time [yr]'); 69 fielddisplay(obj,'final_time','final time to stop the simulation [yr]'); 70 fielddisplay(obj,'time_step','length of time steps [yr]'); 72 if(obj.in_years) 73 unit = 'yr'; 74 else 75 unit = 's'; 76 end 77 fielddisplay(obj,'start_time',['simulation starting time [' unit ']']); 78 fielddisplay(obj,'final_time',['final time to stop the simulation [' unit ']']); 79 fielddisplay(obj,'time_step',['length of time steps [' unit ']']); 71 80 fielddisplay(obj,'time_adapt','use cfl condition to define time step ? (0 or 1) '); 72 81 fielddisplay(obj,'cfl_coefficient','coefficient applied to cfl condition'); 73 82 fielddisplay(obj,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)'); 83 fielddisplay(obj,'in_years','time unit, 1: years, 0: seconds'); 74 84 75 85 end % }}} 76 86 function marshall(obj,md,fid) % {{{ 77 87 78 yts=365.0*24.0*3600.0; 79 80 WriteData(fid,'object',obj,'fieldname','start_time','format','Double','scale',yts); 81 WriteData(fid,'object',obj,'fieldname','final_time','format','Double','scale',yts); 82 WriteData(fid,'object',obj,'fieldname','time_step','format','Double','scale',yts); 88 if obj.in_years, 89 scale = 365.0*24.0*3600.0; 90 else 91 scale = 1.; 92 end 93 WriteData(fid,'object',obj,'fieldname','start_time','format','Double','scale',scale); 94 WriteData(fid,'object',obj,'fieldname','final_time','format','Double','scale',scale); 95 WriteData(fid,'object',obj,'fieldname','time_step','format','Double','scale',scale); 83 96 WriteData(fid,'object',obj,'fieldname','time_adapt','format','Boolean'); 84 97 WriteData(fid,'object',obj,'fieldname','cfl_coefficient','format','Double'); -
issm/trunk-jpl/src/m/enum/EnumDefinitions.py
r18497 r18503 50 50 def BaseEnum(): return StringToEnum("Base")[0] 51 51 def ConstantsGEnum(): return StringToEnum("ConstantsG")[0] 52 def ConstantsOmegaEnum(): return StringToEnum("ConstantsOmega")[0] 52 53 def ConstantsReferencetemperatureEnum(): return StringToEnum("ConstantsReferencetemperature")[0] 53 54 def ConstantsYtsEnum(): return StringToEnum("ConstantsYts")[0] … … 198 199 def DamageEvolutionNumRequestedOutputsEnum(): return StringToEnum("DamageEvolutionNumRequestedOutputs")[0] 199 200 def DamageEvolutionRequestedOutputsEnum(): return StringToEnum("DamageEvolutionRequestedOutputs")[0] 201 def DamageEnum(): return StringToEnum("Damage")[0] 200 202 def NewDamageEnum(): return StringToEnum("NewDamage")[0] 201 203 def MaterialsRhoIceEnum(): return StringToEnum("MaterialsRhoIce")[0] … … 700 702 def SeaiceThicknessEnum(): return StringToEnum("SeaiceThickness")[0] 701 703 def SeaiceConcentrationEnum(): return StringToEnum("SeaiceConcentration")[0] 704 def SeaiceMinConcentrationEnum(): return StringToEnum("SeaiceMinConcentration")[0] 705 def SeaiceMinThicknessEnum(): return StringToEnum("SeaiceMinThickness")[0] 706 def SeaiceMaxThicknessEnum(): return StringToEnum("SeaiceMaxThickness")[0] 702 707 def SeaiceSpcvxEnum(): return StringToEnum("SeaiceSpcvx")[0] 703 708 def SeaiceSpcvyEnum(): return StringToEnum("SeaiceSpcvy")[0] … … 720 725 def MaterialsPoissonEnum(): return StringToEnum("MaterialsPoisson")[0] 721 726 def MaterialsYoungModulusEnum(): return StringToEnum("MaterialsYoungModulus")[0] 722 def MaterialsDamageEnum(): return StringToEnum("MaterialsDamage")[0] 727 def MaterialsTimeRelaxationStressEnum(): return StringToEnum("MaterialsTimeRelaxationStress")[0] 728 def MaterialsTimeRelaxationDamageEnum(): return StringToEnum("MaterialsTimeRelaxationDamage")[0] 723 729 def MaterialsRidgingExponentEnum(): return StringToEnum("MaterialsRidgingExponent")[0] 724 730 def MaterialsCohesionEnum(): return StringToEnum("MaterialsCohesion")[0] … … 728 734 def VxStarEnum(): return StringToEnum("VxStar")[0] 729 735 def VyStarEnum(): return StringToEnum("VyStar")[0] 736 def StressTensorPredictorxxEnum(): return StringToEnum("StressTensorPredictorxx")[0] 737 def StressTensorPredictoryyEnum(): return StringToEnum("StressTensorPredictoryy")[0] 738 def StressTensorPredictorxyEnum(): return StringToEnum("StressTensorPredictorxy")[0] 730 739 def MaximumNumberOfDefinitionsEnum(): return StringToEnum("MaximumNumberOfDefinitions")[0]
Note:
See TracChangeset
for help on using the changeset viewer.