Changeset 22057
- Timestamp:
- 09/07/17 05:50:36 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/model.py
r22053 r22057 65 65 from ElementConnectivity import ElementConnectivity 66 66 from contourenvelope import contourenvelope 67 import MatlabFuncs as m68 67 from DepthAverage import DepthAverage 69 68 #}}} … … 126 125 def properties(self): # {{{ 127 126 # ordered list of properties since vars(self) is random 128 return ['mesh', \129 'mask', \130 'geometry', \131 'constants', \132 'smb', \133 'basalforcings', \134 'materials', \135 'damage', \136 'friction', \137 'flowequation', \138 'timestepping', \139 'initialization', \140 'rifts', \141 'slr', \142 'debug', \143 'verbose', \144 'settings', \145 'toolkits', \146 'cluster', \147 'balancethickness', \148 'stressbalance', \149 'groundingline', \150 'hydrology', \151 'masstransport', \152 'thermal', \153 'steadystate', \154 'transient', \155 'levelset', \156 'calving', \157 'gia',\ 158 'love',\ 159 'autodiff', \160 'inversion', \161 'qmu', \162 'amr', \163 'outputdefinition', \164 'results', \165 'radaroverlay', \166 'miscellaneous', \127 return ['mesh', 128 'mask', 129 'geometry', 130 'constants', 131 'smb', 132 'basalforcings', 133 'materials', 134 'damage', 135 'friction', 136 'flowequation', 137 'timestepping', 138 'initialization', 139 'rifts', 140 'slr', 141 'debug', 142 'verbose', 143 'settings', 144 'toolkits', 145 'cluster', 146 'balancethickness', 147 'stressbalance', 148 'groundingline', 149 'hydrology', 150 'masstransport', 151 'thermal', 152 'steadystate', 153 'transient', 154 'levelset', 155 'calving', 156 'gia', 157 'love', 158 'autodiff', 159 'inversion', 160 'qmu', 161 'amr', 162 'outputdefinition', 163 'results', 164 'radaroverlay', 165 'miscellaneous', 167 166 'private'] 168 167 # }}} … … 198 197 string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("levelset","[%s,%s]" % ("1x1",obj.levelset.__class__.__name__),"parameters for moving boundaries (level-set method)")) 199 198 string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("calving","[%s,%s]" % ("1x1",obj.calving.__class__.__name__),"parameters for calving")) 200 199 string="%s\n%s" % (string,'%19s: %-22s -- %s' % ("love","[%s,%s]" % ("1x1",obj.love.__class__.__name__),"parameters for love solution")) 201 200 string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("autodiff","[%s,%s]" % ("1x1",obj.autodiff.__class__.__name__),"automatic differentiation parameters")) 202 201 string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("inversion","[%s,%s]" % ("1x1",obj.inversion.__class__.__name__),"parameters for inverse methods")) … … 293 292 field=getattr(md1,fieldi) 294 293 fieldsize=np.shape(field) 295 if hasattr(field,'__dict__') and not m.ismember(fieldi,['results'])[0]: #recursive call294 if hasattr(field,'__dict__') and not fieldi in ['results']: #recursive call 296 295 object_fields=vars(field) 297 296 for fieldj in object_fields: … … 301 300 if len(fieldsize): 302 301 #size = number of nodes * n 303 if 302 if fieldsize[0]==numberofvertices1: 304 303 setattr(getattr(md2,fieldi),fieldj,field[pos_node]) 305 304 elif fieldsize[0]==numberofvertices1+1: … … 311 310 if len(fieldsize): 312 311 #size = number of nodes * n 313 if 312 if fieldsize[0]==numberofvertices1: 314 313 setattr(md2,fieldi,field[pos_node]) 315 314 elif fieldsize[0]==numberofvertices1+1: … … 362 361 363 362 #Edges 364 if m .strcmp(md.mesh.domaintype(),'2Dhorizontal'):363 if md.mesh.domaintype()=='2Dhorizontal': 365 364 if np.ndim(md2.mesh.edges)>1 and np.size(md2.mesh.edges,axis=1)>1: #do not use ~isnan because there are some np.nans... 366 365 #renumber first two columns 367 366 pos=np.nonzero(md2.mesh.edges[:,3]!=-1)[0] 368 md2.mesh.edges[: 369 md2.mesh.edges[: 370 md2.mesh.edges[: 367 md2.mesh.edges[:,0]=Pnode[md2.mesh.edges[:,0]-1] 368 md2.mesh.edges[:,1]=Pnode[md2.mesh.edges[:,1]-1] 369 md2.mesh.edges[:,2]=Pelem[md2.mesh.edges[:,2]-1] 371 370 md2.mesh.edges[pos,3]=Pelem[md2.mesh.edges[pos,3]-1] 372 371 #remove edges when the 2 vertices are not in the domain. … … 695 694 #dealing with the friction law 696 695 #drag is limited to nodes that are on the bedrock. 697 if hasattr(md.friction,'coefficient'): md.friction.coefficient=project2d(md,md.friction.coefficient,1) 696 if hasattr(md.friction,'coefficient'): 697 md.friction.coefficient=project2d(md,md.friction.coefficient,1) 698 698 699 699 #p and q (same deal, except for element that are on the bedrock: ) 700 if hasattr(md.friction,'p'): md.friction.p=project2d(md,md.friction.p,1) 701 if hasattr(md.friction,'q'): md.friction.q=project2d(md,md.friction.q,1) 700 if hasattr(md.friction,'p'): 701 md.friction.p=project2d(md,md.friction.p,1) 702 if hasattr(md.friction,'q'): 703 md.friction.q=project2d(md,md.friction.q,1) 702 704 703 if hasattr(md.friction,'coefficientcoulomb'): md.friction.coefficientcoulomb=project2d(md,md.friction.coefficientcoulomb,1) 704 if hasattr(md.friction,'C'): md.friction.C=project2d(md,md.friction.C,1) 705 if hasattr(md.friction,'As'): md.friction.As=project2d(md,md.friction.As,1) 705 if hasattr(md.friction,'coefficientcoulomb'): 706 md.friction.coefficientcoulomb=project2d(md,md.friction.coefficientcoulomb,1) 707 if hasattr(md.friction,'C'): 708 md.friction.C=project2d(md,md.friction.C,1) 709 if hasattr(md.friction,'As'): 710 md.friction.As=project2d(md,md.friction.As,1) 706 711 if hasattr(md.friction,'effective_pressure') and not np.isnan(md.friction.effective_pressure).all(): 707 md.friction.effective_pressure=project2d(md,md.friction.effective_pressure,1) 708 if hasattr(md.friction,'water_layer'): md.friction.water_layer=project2d(md,md.friction.water_layer,1) 709 if hasattr(md.friction,'m'): md.friction.m=project2d(md,md.friction.m,1) 712 md.friction.effective_pressure=project2d(md,md.friction.effective_pressure,1) 713 if hasattr(md.friction,'water_layer'): 714 md.friction.water_layer=project2d(md,md.friction.water_layer,1) 715 if hasattr(md.friction,'m'): 716 md.friction.m=project2d(md,md.friction.m,1) 710 717 711 718 #observations 712 if not np.isnan(md.inversion.vx_obs).all(): md.inversion.vx_obs=project2d(md,md.inversion.vx_obs,md.mesh.numberoflayers) 713 if not np.isnan(md.inversion.vy_obs).all(): md.inversion.vy_obs=project2d(md,md.inversion.vy_obs,md.mesh.numberoflayers) 714 if not np.isnan(md.inversion.vel_obs).all(): md.inversion.vel_obs=project2d(md,md.inversion.vel_obs,md.mesh.numberoflayers) 715 if not np.isnan(md.inversion.cost_functions_coefficients).all(): md.inversion.cost_functions_coefficients=project2d(md,md.inversion.cost_functions_coefficients,md.mesh.numberoflayers) 716 if isinstance(md.inversion.min_parameters,np.ndarray): 717 if md.inversion.min_parameters.size>1: md.inversion.min_parameters=project2d(md,md.inversion.min_parameters,md.mesh.numberoflayers) 718 if isinstance(md.inversion.max_parameters,np.ndarray): 719 if md.inversion.max_parameters.size>1: md.inversion.max_parameters=project2d(md,md.inversion.max_parameters,md.mesh.numberoflayers) 719 if not np.isnan(md.inversion.vx_obs).all(): 720 md.inversion.vx_obs=project2d(md,md.inversion.vx_obs,md.mesh.numberoflayers) 721 if not np.isnan(md.inversion.vy_obs).all(): 722 md.inversion.vy_obs=project2d(md,md.inversion.vy_obs,md.mesh.numberoflayers) 723 if not np.isnan(md.inversion.vel_obs).all(): 724 md.inversion.vel_obs=project2d(md,md.inversion.vel_obs,md.mesh.numberoflayers) 725 if not np.isnan(md.inversion.cost_functions_coefficients).all(): 726 md.inversion.cost_functions_coefficients=project2d(md,md.inversion.cost_functions_coefficients,md.mesh.numberoflayers) 727 if isinstance(md.inversion.min_parameters,np.ndarray): 728 if md.inversion.min_parameters.size>1: 729 md.inversion.min_parameters=project2d(md,md.inversion.min_parameters,md.mesh.numberoflayers) 730 if isinstance(md.inversion.max_parameters,np.ndarray): 731 if md.inversion.max_parameters.size>1: 732 md.inversion.max_parameters=project2d(md,md.inversion.max_parameters,md.mesh.numberoflayers) 720 733 if not np.isnan(md.smb.mass_balance).all(): 721 734 md.smb.mass_balance=project2d(md,md.smb.mass_balance,md.mesh.numberoflayers) 722 735 723 736 #results 724 if not np.isnan(md.initialization.vx).all(): md.initialization.vx=DepthAverage(md,md.initialization.vx) 725 if not np.isnan(md.initialization.vy).all(): md.initialization.vy=DepthAverage(md,md.initialization.vy) 726 if not np.isnan(md.initialization.vz).all(): md.initialization.vz=DepthAverage(md,md.initialization.vz) 727 if not np.isnan(md.initialization.vel).all(): md.initialization.vel=DepthAverage(md,md.initialization.vel) 728 if not np.isnan(md.initialization.temperature).all(): md.initialization.temperature=DepthAverage(md,md.initialization.temperature) 729 if not np.isnan(md.initialization.pressure).all(): md.initialization.pressure=project2d(md,md.initialization.pressure,1) 730 if not np.isnan(md.initialization.sediment_head).all(): md.initialization.sediment_head=project2d(md,md.initialization.sediment_head,1) 731 if not np.isnan(md.initialization.epl_head).all(): md.initialization.epl_head=project2d(md,md.initialization.epl_head,1) 732 if not np.isnan(md.initialization.epl_thickness).all(): md.initialization.epl_thickness=project2d(md,md.initialization.epl_thickness,1) 737 if not np.isnan(md.initialization.vx).all(): 738 md.initialization.vx=DepthAverage(md,md.initialization.vx) 739 if not np.isnan(md.initialization.vy).all(): 740 md.initialization.vy=DepthAverage(md,md.initialization.vy) 741 if not np.isnan(md.initialization.vz).all(): 742 md.initialization.vz=DepthAverage(md,md.initialization.vz) 743 if not np.isnan(md.initialization.vel).all(): 744 md.initialization.vel=DepthAverage(md,md.initialization.vel) 745 if not np.isnan(md.initialization.temperature).all(): 746 md.initialization.temperature=DepthAverage(md,md.initialization.temperature) 747 if not np.isnan(md.initialization.pressure).all(): 748 md.initialization.pressure=project2d(md,md.initialization.pressure,1) 749 if not np.isnan(md.initialization.sediment_head).all(): 750 md.initialization.sediment_head=project2d(md,md.initialization.sediment_head,1) 751 if not np.isnan(md.initialization.epl_head).all(): 752 md.initialization.epl_head=project2d(md,md.initialization.epl_head,1) 753 if not np.isnan(md.initialization.epl_thickness).all(): 754 md.initialization.epl_thickness=project2d(md,md.initialization.epl_thickness,1) 733 755 734 756 #giaivins 735 if not np.isnan(md.gia.mantle_viscosity).all(): md.gia.mantle_viscosity=project2d(md,md.gia.mantle_viscosity,1) 736 if not np.isnan(md.gia.lithosphere_thickness).all(): md.gia.lithosphere_thickness=project2d(md,md.gia.lithosphere_thickness,1) 757 if not np.isnan(md.gia.mantle_viscosity).all(): 758 md.gia.mantle_viscosity=project2d(md,md.gia.mantle_viscosity,1) 759 if not np.isnan(md.gia.lithosphere_thickness).all(): 760 md.gia.lithosphere_thickness=project2d(md,md.gia.lithosphere_thickness,1) 737 761 738 762 #elementstype … … 760 784 md.stressbalance.loadingforce=project2d(md,md.stressbalance.loadingforce,md.mesh.numberoflayers) 761 785 md.masstransport.spcthickness=project2d(md,md.masstransport.spcthickness,md.mesh.numberoflayers) 762 if not np.isnan(md.damage.spcdamage).all(): md.damage.spcdamage=project2d(md,md.damage.spcdamage,md.mesh.numberoflayers-1)763 786 md.thermal.spctemperature=project2d(md,md.thermal.spctemperature,md.mesh.numberoflayers-1) 787 if not np.isnan(md.damage.spcdamage).all(): 788 md.damage.spcdamage=project2d(md,md.damage.spcdamage,md.mesh.numberoflayers-1) 764 789 765 790 #materials … … 787 812 md.geometry.thickness=project2d(md,md.geometry.thickness,1) 788 813 md.geometry.base=project2d(md,md.geometry.base,1) 789 790 814 if isinstance(md.geometry.bed,np.ndarray): 815 md.geometry.bed=project2d(md,md.geometry.bed,1) 791 816 md.mask.groundedice_levelset=project2d(md,md.mask.groundedice_levelset,1) 792 817 md.mask.ice_levelset=project2d(md,md.mask.ice_levelset,1) … … 815 840 mesh.numberofelements=md.mesh.numberofelements2d 816 841 mesh.elements=md.mesh.elements2d 817 if not np.isnan(md.mesh.vertexonboundary).all(): mesh.vertexonboundary=project2d(md,md.mesh.vertexonboundary,1) 818 if not np.isnan(md.mesh.elementconnectivity).all(): mesh.elementconnectivity=project2d(md,md.mesh.elementconnectivity,1) 842 if not np.isnan(md.mesh.vertexonboundary).all(): 843 mesh.vertexonboundary=project2d(md,md.mesh.vertexonboundary,1) 844 if not np.isnan(md.mesh.elementconnectivity).all(): 845 mesh.elementconnectivity=project2d(md,md.mesh.elementconnectivity,1) 819 846 if isinstance(md.mesh.lat,np.ndarray): 820 if md.mesh.lat.size==md.mesh.numberofvertices: mesh.lat=project2d(md,md.mesh.lat,1) 847 if md.mesh.lat.size==md.mesh.numberofvertices: 848 mesh.lat=project2d(md,md.mesh.lat,1) 821 849 if isinstance(md.mesh.long,np.ndarray): 822 if md.mesh.long.size==md.mesh.numberofvertices: mesh.long=project2d(md,md.mesh.long,1) 850 if md.mesh.long.size==md.mesh.numberofvertices: 851 md.mesh.long=project2d(md,md.mesh.long,1) 823 852 mesh.epsg=md.mesh.epsg 824 853 md.mesh=mesh
Note:
See TracChangeset
for help on using the changeset viewer.