Changeset 19048 for issm/trunk-jpl/src/m/classes/model.m
- Timestamp:
- 01/29/15 08:44:39 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/model.m
r19040 r19048 750 750 %Ok, now deal with the other fields from the 2d mesh: 751 751 752 %bedinfo and surface info 753 md.mesh.vertexonbase=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',1); 754 md.mesh.vertexonsurface=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',md.mesh.numberoflayers); 755 md.mesh.vertexonboundary=project3d(md,'vector',md.mesh.vertexonboundary,'type','node'); 756 752 757 %lat long 753 758 md.mesh.lat=project3d(md,'vector',md.mesh.lat,'type','node'); 754 759 md.mesh.long=project3d(md,'vector',md.mesh.long,'type','node'); 755 760 756 %drag coefficient is limited to nodes that are on the bedrock. 757 if isa(md.friction,'friction'), 758 md.friction.coefficient=project3d(md,'vector',md.friction.coefficient,'type','node','layer',1); 759 md.friction.p=project3d(md,'vector',md.friction.p,'type','element'); 760 md.friction.q=project3d(md,'vector',md.friction.q,'type','element'); 761 elseif isa(md.friction,'frictionhydro'), 762 md.friction.q=project3d(md,'vector',md.friction.q,'type','element'); 763 md.friction.C=project3d(md,'vector',md.friction.C,'type','element'); 764 md.friction.As=project3d(md,'vector',md.friction.As,'type','element'); 765 md.friction.effective_pressure=project3d(md,'vector',md.friction.effective_pressure,'type','node','layer',1); 766 elseif isa(md.friction,'frictionwaterlayer'), 767 md.friction.coefficient=project3d(md,'vector',md.friction.coefficient,'type','node','layer',1); 768 md.friction.p=project3d(md,'vector',md.friction.p,'type','element'); 769 md.friction.q=project3d(md,'vector',md.friction.q,'type','element'); 770 md.friction.water_layer=project3d(md,'vector',md.friction.water_layer,'type','node','layer',1); 771 elseif isa(md.friction,'frictionweertman'), 772 md.friction.C=project3d(md,'vector',md.friction.C,'type','node','layer',1); 773 md.friction.m=project3d(md,'vector',md.friction.m,'type','element'); 774 end 775 776 %observations 777 md.inversion.vx_obs=project3d(md,'vector',md.inversion.vx_obs,'type','node'); 778 md.inversion.vy_obs=project3d(md,'vector',md.inversion.vy_obs,'type','node'); 779 md.inversion.vel_obs=project3d(md,'vector',md.inversion.vel_obs,'type','node'); 780 md.inversion.thickness_obs=project3d(md,'vector',md.inversion.thickness_obs,'type','node'); 761 md.geometry=extrude(md.geometry,md); 762 md.friction = extrude(md.friction,md); 763 md.inversion = extrude(md.inversion,md); 781 764 md.surfaceforcings = extrude(md.surfaceforcings,md); 782 md.balancethickness.thickening_rate=project3d(md,'vector',md.balancethickness.thickening_rate,'type','node'); 783 784 %results 785 if ~isnan(md.initialization.vx),md.initialization.vx=project3d(md,'vector',md.initialization.vx,'type','node');end; 786 if ~isnan(md.initialization.vy),md.initialization.vy=project3d(md,'vector',md.initialization.vy,'type','node');end; 787 if ~isnan(md.initialization.vz),md.initialization.vz=project3d(md,'vector',md.initialization.vz,'type','node');end; 788 if ~isnan(md.initialization.vel),md.initialization.vel=project3d(md,'vector',md.initialization.vel,'type','node');end; 789 if ~isnan(md.initialization.temperature),md.initialization.temperature=project3d(md,'vector',md.initialization.temperature,'type','node');end; 790 if ~isnan(md.initialization.waterfraction),md.initialization.waterfraction=project3d(md,'vector',md.initialization.waterfraction,'type','node');end; 791 if ~isnan(md.initialization.watercolumn),md.initialization.watercolumn=project3d(md,'vector',md.initialization.watercolumn,'type','node','layer',1);end; 792 if ~isnan(md.initialization.sediment_head),md.initialization.sediment_head=project3d(md,'vector',md.initialization.sediment_head,'type','node','layer',1);end; 793 if ~isnan(md.initialization.epl_head),md.initialization.epl_head=project3d(md,'vector',md.initialization.epl_head,'type','node','layer',1);end; 794 if ~isnan(md.initialization.epl_thickness),md.initialization.epl_thickness=project3d(md,'vector',md.initialization.epl_thickness,'type','node','layer',1);end; 795 796 %bedinfo and surface info 797 md.mesh.vertexonbase=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',1); 798 md.mesh.vertexonsurface=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',md.mesh.numberoflayers); 799 800 %elementstype 801 if ~isnan(md.flowequation.element_equation) 802 oldelements_type=md.flowequation.element_equation; 803 md.flowequation.element_equation=zeros(number_el3d,1); 804 md.flowequation.element_equation=project3d(md,'vector',oldelements_type,'type','element'); 805 end 806 807 %verticestype 808 if ~isnan(md.flowequation.vertex_equation) 809 oldvertices_type=md.flowequation.vertex_equation; 810 md.flowequation.vertex_equation=zeros(number_nodes3d,1); 811 md.flowequation.vertex_equation=project3d(md,'vector',oldvertices_type,'type','node'); 812 end 813 md.flowequation.borderSSA=project3d(md,'vector',md.flowequation.borderSSA,'type','node'); 814 md.flowequation.borderHO=project3d(md,'vector',md.flowequation.borderHO,'type','node'); 815 md.flowequation.borderFS=project3d(md,'vector',md.flowequation.borderFS,'type','node'); 816 817 %boundary conditions 818 md.stressbalance.spcvx=project3d(md,'vector',md.stressbalance.spcvx,'type','node'); 819 md.stressbalance.spcvy=project3d(md,'vector',md.stressbalance.spcvy,'type','node'); 820 md.stressbalance.spcvz=project3d(md,'vector',md.stressbalance.spcvz,'type','node'); 821 md.thermal.spctemperature=project3d(md,'vector',md.thermal.spctemperature,'type','node','layer',md.mesh.numberoflayers,'padding',NaN); 822 if (length(md.initialization.temperature)==md.mesh.numberofvertices), 823 md.thermal.spctemperature=NaN*ones(md.mesh.numberofvertices,1); 824 if isprop(md.mesh,'vertexonsurface'), 825 pos=find(md.mesh.vertexonsurface); 826 md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface 827 end 828 end 829 md.masstransport.spcthickness=project3d(md,'vector',md.masstransport.spcthickness,'type','node'); 830 md.balancethickness.spcthickness=project3d(md,'vector',md.balancethickness.spcthickness,'type','node'); 831 md.damage.spcdamage=project3d(md,'vector',md.damage.spcdamage,'type','node'); 832 md.stressbalance.referential=project3d(md,'vector',md.stressbalance.referential,'type','node'); 833 md.stressbalance.loadingforce=project3d(md,'vector',md.stressbalance.loadingforce,'type','node'); 834 835 % Calving variables 836 if isa(md.calving,'calving'),md.calving.calvingrate=project3d(md,'vector',md.calving.calvingrate,'type','node');end; 837 if ~isnan(md.calving.meltingrate),md.calving.meltingrate=project3d(md,'vector',md.calving.meltingrate,'type','node');end; 838 if isa(md.calving,'calvinglevermann'),md.calving.coeff=project3d(md,'vector',md.calving.coeff,'type','node');end; 839 if isa(md.calving,'calvingpi'),md.calving.coeff=project3d(md,'vector',md.calving.coeff,'type','node');end; 840 841 % Hydrologydc variables 842 if isa(md.hydrology,'hydrologydc'); 843 md.hydrology.spcsediment_head=project3d(md,'vector',md.hydrology.spcsediment_head,'type','node','layer',1); 844 md.hydrology.mask_eplactive_node=project3d(md,'vector',md.hydrology.mask_eplactive_node,'type','node','layer',1); 845 md.hydrology.sediment_transmitivity=project3d(md,'vector',md.hydrology.sediment_transmitivity,'type','node','layer',1); 846 md.hydrology.basal_moulin_input=project3d(md,'vector',md.hydrology.basal_moulin_input,'type','node','layer',1); 847 if(md.hydrology.isefficientlayer==1); 848 md.hydrology.spcepl_head=project3d(md,'vector',md.hydrology.spcepl_head,'type','node','layer',1); 849 end 850 end 765 md.initialization = extrude(md.initialization,md); 766 767 md.flowequation.extrude(md); 768 md.stressbalance=extrude(md.stressbalance,md); 769 md.thermal.extrude(md); 770 md.masstransport.extrude(md); 771 md.calving=extrude(md.calving,md); 772 md.hydrology = extrude(md.hydrology,md); 851 773 852 774 %connectivity … … 861 783 end 862 784 863 %materials 864 md.materials.rheology_B=project3d(md,'vector',md.materials.rheology_B,'type','node'); 865 md.materials.rheology_n=project3d(md,'vector',md.materials.rheology_n,'type','element'); 866 867 %damage 868 md.damage.D=project3d(md,'vector',md.damage.D,'type','node'); 869 870 %parameters 871 md.geometry.surface=project3d(md,'vector',md.geometry.surface,'type','node'); 872 md.geometry.thickness=project3d(md,'vector',md.geometry.thickness,'type','node'); 873 md.gia.mantle_viscosity=project3d(md,'vector',md.gia.mantle_viscosity,'type','node'); 874 md.gia.lithosphere_thickness=project3d(md,'vector',md.gia.lithosphere_thickness,'type','node'); 875 md.geometry.hydrostatic_ratio=project3d(md,'vector',md.geometry.hydrostatic_ratio,'type','node'); 876 md.geometry.base=project3d(md,'vector',md.geometry.base,'type','node'); 877 md.geometry.bed=project3d(md,'vector',md.geometry.bed,'type','node'); 878 md.mesh.vertexonboundary=project3d(md,'vector',md.mesh.vertexonboundary,'type','node'); 879 md.mask.groundedice_levelset=project3d(md,'vector',md.mask.groundedice_levelset,'type','node'); 880 md.mask.ice_levelset=project3d(md,'vector',md.mask.ice_levelset,'type','node'); 881 if ~isnan(md.inversion.cost_functions_coefficients),md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end; 882 if ~isnan(md.inversion.min_parameters),md.inversion.min_parameters=project3d(md,'vector',md.inversion.min_parameters,'type','node');end; 883 if ~isnan(md.inversion.max_parameters),md.inversion.max_parameters=project3d(md,'vector',md.inversion.max_parameters,'type','node');end; 884 if ~isnan(md.qmu.partition),md.qmu.partition=project3d(md,'vector',md.qmu.partition','type','node');end 885 886 %Put lithostatic pressure if there is an existing pressure 887 if ~isnan(md.initialization.pressure), 888 md.initialization.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z); 889 end 890 891 %special for thermal modeling: 892 md.basalforcings.groundedice_melting_rate=project3d(md,'vector',md.basalforcings.groundedice_melting_rate,'type','node','layer',1); 893 md.basalforcings.floatingice_melting_rate=project3d(md,'vector',md.basalforcings.floatingice_melting_rate,'type','node','layer',1); 894 if ~isnan(md.basalforcings.geothermalflux) 895 md.basalforcings.geothermalflux=project3d(md,'vector',md.basalforcings.geothermalflux,'type','node','layer',1); %bedrock only gets geothermal flux 896 end 785 md.materials=extrude(md.materials,md); 786 md.damage=extrude(md.damage,md); 787 md.mask=extrude(md.mask,md); 788 md.qmu=extrude(md.qmu,md); 789 md.basalforcings=extrude(md.basalforcings,md); 897 790 898 791 %increase connectivity if less than 25:
Note:
See TracChangeset
for help on using the changeset viewer.