Changeset 21303 for issm/trunk-jpl/src/m/boundaryconditions
- Timestamp:
- 10/21/16 08:49:08 (9 years ago)
- Location:
- issm/trunk-jpl/src/m/boundaryconditions
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/boundaryconditions/PattynSMB.py
r21254 r21303 1 1 import os 2 import numpy as np2 import numpy as np 3 3 def PattynSMB(md,Tf): 4 4 """ -
issm/trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py
r19527 r21303 1 1 import os 2 import numpy 2 import numpy as np 3 3 from ContourToMesh import ContourToMesh 4 4 … … 14 14 15 15 #node on Dirichlet 16 pos=n umpy.nonzero(md.mesh.vertexonboundary)17 md.stressbalance.spcvx=float('nan')*n umpy.ones(md.mesh.numberofvertices)18 md.stressbalance.spcvy=float('nan')*n umpy.ones(md.mesh.numberofvertices)19 md.stressbalance.spcvz=float('nan')*n umpy.ones(md.mesh.numberofvertices)16 pos=np.nonzero(md.mesh.vertexonboundary) 17 md.stressbalance.spcvx=float('nan')*np.ones(md.mesh.numberofvertices) 18 md.stressbalance.spcvy=float('nan')*np.ones(md.mesh.numberofvertices) 19 md.stressbalance.spcvz=float('nan')*np.ones(md.mesh.numberofvertices) 20 20 md.stressbalance.spcvx[pos]=0 21 21 md.stressbalance.spcvy[pos]=0 22 22 md.stressbalance.spcvz[pos]=0 23 md.stressbalance.referential=float('nan')*n umpy.ones((md.mesh.numberofvertices,6))24 md.stressbalance.loadingforce=0*n umpy.ones((md.mesh.numberofvertices,3))23 md.stressbalance.referential=float('nan')*np.ones((md.mesh.numberofvertices,6)) 24 md.stressbalance.loadingforce=0*np.ones((md.mesh.numberofvertices,3)) 25 25 26 26 #Dirichlet Values 27 if isinstance(md.inversion.vx_obs,n umpy.ndarray) and numpy.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,numpy.ndarray) and numpy.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices:27 if isinstance(md.inversion.vx_obs,np.ndarray) and np.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,np.ndarray) and np.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices: 28 28 print " boundary conditions for stressbalance model: spc set as observed velocities" 29 29 md.stressbalance.spcvx[pos]=md.inversion.vx_obs[pos] … … 39 39 40 40 #Deal with other boundary conditions 41 if n umpy.all(numpy.isnan(md.balancethickness.thickening_rate)):42 md.balancethickness.thickening_rate=n umpy.zeros((md.mesh.numberofvertices,1))41 if np.all(np.isnan(md.balancethickness.thickening_rate)): 42 md.balancethickness.thickening_rate=np.zeros((md.mesh.numberofvertices)) 43 43 print " no balancethickness.thickening_rate specified: values set as zero" 44 md.masstransport.spcthickness=float('nan')*n umpy.ones((md.mesh.numberofvertices,1))45 md.balancethickness.spcthickness=float('nan')*n umpy.ones((md.mesh.numberofvertices,1))46 md.damage.spcdamage=float('nan')*n umpy.ones((md.mesh.numberofvertices,1))44 md.masstransport.spcthickness=float('nan')*np.ones((md.mesh.numberofvertices)) 45 md.balancethickness.spcthickness=float('nan')*np.ones((md.mesh.numberofvertices)) 46 md.damage.spcdamage=float('nan')*np.ones((md.mesh.numberofvertices)) 47 47 48 if isinstance(md.initialization.temperature,n umpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:49 md.thermal.spctemperature=float('nan')*n umpy.ones((md.mesh.numberofvertices,1))48 if isinstance(md.initialization.temperature,np.ndarray) and np.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices: 49 md.thermal.spctemperature=float('nan')*np.ones((md.mesh.numberofvertices)) 50 50 if hasattr(md.mesh,'vertexonsurface'): 51 pos=n umpy.nonzero(md.mesh.vertexonsurface)[0]51 pos=np.nonzero(md.mesh.vertexonsurface)[0] 52 52 md.thermal.spctemperature[pos]=md.initialization.temperature[pos] #impose observed temperature on surface 53 if not isinstance(md.basalforcings.geothermalflux,n umpy.ndarray) or not numpy.size(md.basalforcings.geothermalflux)==md.mesh.numberofvertices:54 md.basalforcings.geothermalflux=50.*10**-3*n umpy.ones((md.mesh.numberofvertices,1)) #50 mW/m^253 if not isinstance(md.basalforcings.geothermalflux,np.ndarray) or not np.size(md.basalforcings.geothermalflux)==md.mesh.numberofvertices: 54 md.basalforcings.geothermalflux=50.*10**-3*np.ones((md.mesh.numberofvertices)) #50 mW/m^2 55 55 else: 56 56 print " no thermal boundary conditions created: no observed temperature found" -
issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
r20910 r21303 1 1 import os 2 import numpy 2 import numpy as np 3 3 from ContourToMesh import ContourToMesh 4 4 import MatlabFuncs as m … … 27 27 raise IOError("SetIceShelfBC error message: ice front file '%s' not found." % icefrontfile) 28 28 nodeinsideicefront=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,icefrontfile,'node',2) 29 nodeonicefront=n umpy.logical_and(md.mesh.vertexonboundary,nodeinsideicefront.reshape(-1))29 nodeonicefront=np.logical_and(md.mesh.vertexonboundary,nodeinsideicefront.reshape(-1)) 30 30 else: 31 nodeonicefront=n umpy.zeros((md.mesh.numberofvertices),bool)31 nodeonicefront=np.zeros((md.mesh.numberofvertices),bool) 32 32 33 33 # pos=find(md.mesh.vertexonboundary & ~nodeonicefront); 34 pos=n umpy.nonzero(numpy.logical_and(md.mesh.vertexonboundary,numpy.logical_not(nodeonicefront)))[0]35 md.stressbalance.spcvx=float('nan')*n umpy.ones(md.mesh.numberofvertices)36 md.stressbalance.spcvy=float('nan')*n umpy.ones(md.mesh.numberofvertices)37 md.stressbalance.spcvz=float('nan')*n umpy.ones(md.mesh.numberofvertices)38 md.stressbalance.referential=float('nan')*n umpy.ones((md.mesh.numberofvertices,6))39 md.stressbalance.loadingforce=0*n umpy.ones((md.mesh.numberofvertices,3))34 pos=np.nonzero(np.logical_and(md.mesh.vertexonboundary,np.logical_not(nodeonicefront)))[0] 35 md.stressbalance.spcvx=float('nan')*np.ones(md.mesh.numberofvertices) 36 md.stressbalance.spcvy=float('nan')*np.ones(md.mesh.numberofvertices) 37 md.stressbalance.spcvz=float('nan')*np.ones(md.mesh.numberofvertices) 38 md.stressbalance.referential=float('nan')*np.ones((md.mesh.numberofvertices,6)) 39 md.stressbalance.loadingforce=0*np.ones((md.mesh.numberofvertices,3)) 40 40 41 41 #Icefront position 42 pos=n umpy.nonzero(nodeonicefront)[0]42 pos=np.nonzero(nodeonicefront)[0] 43 43 md.mask.ice_levelset[pos]=0 44 44 … … 53 53 values=md.mask.ice_levelset[md.mesh.segments[:,0:-1]-1] 54 54 segmentsfront=1-values 55 n umpy.sum(segmentsfront,axis=1)!=numbernodesfront56 segments=n umpy.nonzero(numpy.sum(segmentsfront,axis=1)!=numbernodesfront)[0]55 np.sum(segmentsfront,axis=1)!=numbernodesfront 56 segments=np.nonzero(np.sum(segmentsfront,axis=1)!=numbernodesfront)[0] 57 57 #Find all nodes for these segments and spc them 58 58 pos=md.mesh.segments[segments,0:-1]-1 59 59 else: 60 pos=n umpy.nonzero(md.mesh.vertexonboundary)[0]60 pos=np.nonzero(md.mesh.vertexonboundary)[0] 61 61 md.stressbalance.spcvx[pos]=0 62 62 md.stressbalance.spcvy[pos]=0 … … 64 64 65 65 #Dirichlet Values 66 if isinstance(md.inversion.vx_obs,n umpy.ndarray) and numpy.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,numpy.ndarray) and numpy.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices:66 if isinstance(md.inversion.vx_obs,np.ndarray) and np.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,np.ndarray) and np.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices: 67 67 #reshape to rank-2 if necessary to match spc arrays 68 if n umpy.ndim(md.inversion.vx_obs)==1:69 md.inversion.vx_obs=md.inversion.vx_obs.reshape(-1, 1)70 if n umpy.ndim(md.inversion.vy_obs)==1:71 md.inversion.vy_obs=md.inversion.vy_obs.reshape(-1, 1)68 if np.ndim(md.inversion.vx_obs)==1: 69 md.inversion.vx_obs=md.inversion.vx_obs.reshape(-1,) 70 if np.ndim(md.inversion.vy_obs)==1: 71 md.inversion.vy_obs=md.inversion.vy_obs.reshape(-1,) 72 72 print " boundary conditions for stressbalance model: spc set as observed velocities" 73 73 md.stressbalance.spcvx[pos]=md.inversion.vx_obs[pos] … … 81 81 82 82 #Deal with other boundary conditions 83 if n umpy.all(numpy.isnan(md.balancethickness.thickening_rate)):84 md.balancethickness.thickening_rate=n umpy.zeros((md.mesh.numberofvertices,1))83 if np.all(np.isnan(md.balancethickness.thickening_rate)): 84 md.balancethickness.thickening_rate=np.zeros((md.mesh.numberofvertices)) 85 85 print " no balancethickness.thickening_rate specified: values set as zero" 86 md.masstransport.spcthickness=float('nan')*n umpy.ones((md.mesh.numberofvertices,1))87 md.balancethickness.spcthickness=float('nan')*n umpy.ones((md.mesh.numberofvertices,1))88 md.damage.spcdamage=float('nan')*n umpy.ones((md.mesh.numberofvertices,1))86 md.masstransport.spcthickness=float('nan')*np.ones((md.mesh.numberofvertices)) 87 md.balancethickness.spcthickness=float('nan')*np.ones((md.mesh.numberofvertices)) 88 md.damage.spcdamage=float('nan')*np.ones((md.mesh.numberofvertices)) 89 89 90 if isinstance(md.initialization.temperature,n umpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:91 md.thermal.spctemperature=float('nan')*n umpy.ones((md.mesh.numberofvertices,1))90 if isinstance(md.initialization.temperature,np.ndarray) and np.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices: 91 md.thermal.spctemperature=float('nan')*np.ones((md.mesh.numberofvertices)) 92 92 if hasattr(md.mesh,'vertexonsurface'): 93 pos=n umpy.nonzero(md.mesh.vertexonsurface)[0]93 pos=np.nonzero(md.mesh.vertexonsurface)[0] 94 94 md.thermal.spctemperature[pos]=md.initialization.temperature[pos] #impose observed temperature on surface 95 if not isinstance(md.basalforcings.geothermalflux,n umpy.ndarray) or not numpy.size(md.basalforcings.geothermalflux,axis=0)==md.mesh.numberofvertices:96 md.basalforcings.geothermalflux=n umpy.zeros((md.mesh.numberofvertices,1))95 if not isinstance(md.basalforcings.geothermalflux,np.ndarray) or not np.size(md.basalforcings.geothermalflux,axis=0)==md.mesh.numberofvertices: 96 md.basalforcings.geothermalflux=np.zeros((md.mesh.numberofvertices)) 97 97 else: 98 98 print " no thermal boundary conditions created: no observed temperature found" -
issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
r20910 r21303 1 1 import os 2 import numpy 2 import numpy as np 3 3 from ContourToMesh import ContourToMesh 4 4 import MatlabFuncs as m … … 29 29 raise IOError("SetMarineIceSheetBC error message: ice front file '%s' not found." % icefrontfile) 30 30 incontour=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,icefrontfile,'node',2) 31 vertexonicefront=n umpy.logical_and(md.mesh.vertexonboundary,incontour.reshape(-1))31 vertexonicefront=np.logical_and(md.mesh.vertexonboundary,incontour.reshape(-1)) 32 32 else: 33 33 #Guess where the ice front is 34 vertexonfloatingice=n umpy.zeros((md.mesh.numberofvertices,1))35 pos=n umpy.nonzero(numpy.sum(md.mask.groundedice_levelset[md.mesh.elements-1]<0.,axis=1) >0.)[0]34 vertexonfloatingice=np.zeros((md.mesh.numberofvertices)) 35 pos=np.nonzero(np.sum(md.mask.groundedice_levelset[md.mesh.elements-1]<0.,axis=1) >0.)[0] 36 36 vertexonfloatingice[md.mesh.elements[pos].astype(int)-1]=1. 37 vertexonicefront=n umpy.logical_and(numpy.reshape(md.mesh.vertexonboundary,(-1,1)),vertexonfloatingice>0.)37 vertexonicefront=np.logical_and(np.reshape(md.mesh.vertexonboundary,(-1,)),vertexonfloatingice>0.) 38 38 39 39 # pos=find(md.mesh.vertexonboundary & ~vertexonicefront); 40 pos=n umpy.nonzero(numpy.logical_and(md.mesh.vertexonboundary,numpy.logical_not(vertexonicefront)))[0]41 if not n umpy.size(pos):40 pos=np.nonzero(np.logical_and(md.mesh.vertexonboundary,np.logical_not(vertexonicefront)))[0] 41 if not np.size(pos): 42 42 print "SetMarineIceSheetBC warning: ice front all around the glacier, no dirichlet found. Dirichlet must be added manually." 43 43 44 md.stressbalance.spcvx=float('nan')*n umpy.ones(md.mesh.numberofvertices)45 md.stressbalance.spcvy=float('nan')*n umpy.ones(md.mesh.numberofvertices)46 md.stressbalance.spcvz=float('nan')*n umpy.ones(md.mesh.numberofvertices)47 md.stressbalance.referential=float('nan')*n umpy.ones((md.mesh.numberofvertices,6))48 md.stressbalance.loadingforce=0*n umpy.ones((md.mesh.numberofvertices,3))44 md.stressbalance.spcvx=float('nan')*np.ones(md.mesh.numberofvertices) 45 md.stressbalance.spcvy=float('nan')*np.ones(md.mesh.numberofvertices) 46 md.stressbalance.spcvz=float('nan')*np.ones(md.mesh.numberofvertices) 47 md.stressbalance.referential=float('nan')*np.ones((md.mesh.numberofvertices,6)) 48 md.stressbalance.loadingforce=0*np.ones((md.mesh.numberofvertices,3)) 49 49 50 50 #Position of ice front 51 pos=n umpy.nonzero(vertexonicefront)[0]51 pos=np.nonzero(vertexonicefront)[0] 52 52 md.mask.ice_levelset[pos]=0 53 53 … … 62 62 values=md.mask.ice_levelset[md.mesh.segments[:,0:-1]-1] 63 63 segmentsfront=1-values 64 n umpy.sum(segmentsfront,axis=1)!=numbernodesfront65 segments=n umpy.nonzero(numpy.sum(segmentsfront,axis=1)!=numbernodesfront)[0]64 np.sum(segmentsfront,axis=1)!=numbernodesfront 65 segments=np.nonzero(np.sum(segmentsfront,axis=1)!=numbernodesfront)[0] 66 66 #Find all nodes for these segments and spc them 67 67 pos=md.mesh.segments[segments,0:-1]-1 68 68 else: 69 pos=n umpy.nonzero(md.mesh.vertexonboundary)[0]69 pos=np.nonzero(md.mesh.vertexonboundary)[0] 70 70 md.stressbalance.spcvx[pos]=0 71 71 md.stressbalance.spcvy[pos]=0 … … 73 73 74 74 #Dirichlet Values 75 if isinstance(md.inversion.vx_obs,n umpy.ndarray) and numpy.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,numpy.ndarray) and numpy.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices:75 if isinstance(md.inversion.vx_obs,np.ndarray) and np.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,np.ndarray) and np.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices: 76 76 print " boundary conditions for stressbalance model: spc set as observed velocities" 77 77 md.stressbalance.spcvx[pos]=md.inversion.vx_obs[pos] … … 80 80 print " boundary conditions for stressbalance model: spc set as zero" 81 81 82 md.hydrology.spcwatercolumn=n umpy.zeros((md.mesh.numberofvertices,2))83 pos=n umpy.nonzero(md.mesh.vertexonboundary)[0]82 md.hydrology.spcwatercolumn=np.zeros((md.mesh.numberofvertices,2)) 83 pos=np.nonzero(md.mesh.vertexonboundary)[0] 84 84 md.hydrology.spcwatercolumn[pos,0]=1 85 85 … … 89 89 90 90 #Deal with other boundary conditions 91 if n umpy.all(numpy.isnan(md.balancethickness.thickening_rate)):92 md.balancethickness.thickening_rate=n umpy.zeros((md.mesh.numberofvertices,1))91 if np.all(np.isnan(md.balancethickness.thickening_rate)): 92 md.balancethickness.thickening_rate=np.zeros((md.mesh.numberofvertices)) 93 93 print " no balancethickness.thickening_rate specified: values set as zero" 94 94 95 md.masstransport.spcthickness=float('nan')*n umpy.ones((md.mesh.numberofvertices,1))96 md.balancethickness.spcthickness=float('nan')*n umpy.ones((md.mesh.numberofvertices,1))97 md.damage.spcdamage=float('nan')*n umpy.ones((md.mesh.numberofvertices,1))95 md.masstransport.spcthickness=float('nan')*np.ones((md.mesh.numberofvertices)) 96 md.balancethickness.spcthickness=float('nan')*np.ones((md.mesh.numberofvertices)) 97 md.damage.spcdamage=float('nan')*np.ones((md.mesh.numberofvertices)) 98 98 99 if isinstance(md.initialization.temperature,n umpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:100 md.thermal.spctemperature=float('nan')*n umpy.ones((md.mesh.numberofvertices,1))99 if isinstance(md.initialization.temperature,np.ndarray) and np.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices: 100 md.thermal.spctemperature=float('nan')*np.ones((md.mesh.numberofvertices)) 101 101 if hasattr(md.mesh,'vertexonsurface'): 102 pos=n umpy.nonzero(md.mesh.vertexonsurface)[0]102 pos=np.nonzero(md.mesh.vertexonsurface)[0] 103 103 md.thermal.spctemperature[pos]=md.initialization.temperature[pos] #impose observed temperature on surface 104 if not isinstance(md.basalforcings.geothermalflux,n umpy.ndarray) or not numpy.size(md.basalforcings.geothermalflux,axis=0)==md.mesh.numberofvertices:105 md.basalforcings.geothermalflux=n umpy.zeros((md.mesh.numberofvertices,1))106 md.basalforcings.geothermalflux[n umpy.nonzero(md.mask.groundedice_levelset>0.)]=50.*10.**-3 #50mW/m2104 if not isinstance(md.basalforcings.geothermalflux,np.ndarray) or not np.size(md.basalforcings.geothermalflux,axis=0)==md.mesh.numberofvertices: 105 md.basalforcings.geothermalflux=np.zeros((md.mesh.numberofvertices)) 106 md.basalforcings.geothermalflux[np.nonzero(md.mask.groundedice_levelset>0.)]=50.*10.**-3 #50mW/m2 107 107 else: 108 108 print " no thermal boundary conditions created: no observed temperature found" -
issm/trunk-jpl/src/m/boundaryconditions/love_numbers.py
r21069 r21303 1 1 from MatlabFuncs import * 2 2 from model import * 3 from n umpyimport *3 from np.import * 4 4 5 5 def love_numbers(value,*varargin):
Note:
See TracChangeset
for help on using the changeset viewer.