def test_illegal_triangles_throw_exceptions(self):
        # Calls triangle(0, 0, 0)
        self.assertRaises(TriangleError, triangle(0, 0, 0))

        self.assertRaises(TriangleError, triangle(3, 4, -5))
        self.assertRaises(TriangleError, triangle(1, 1, 3))
        self.assertRaises(TriangleError, triangle(2, 5, 2))
 def test_isosceles_triangles_have_exactly_two_sides_equal(self):
 	#self.assertEqual(None, triangle(3,4,4))
     self.assertEqual('isosceles', triangle(3, 4, 4))
     #self.assertEqual(None, triangle(4,3,4))
     self.assertEqual('isosceles', triangle(4, 3, 4))
     #self.assertEqual(None, triangle(4,4,3))
     self.assertEqual('isosceles', triangle(4, 4, 3))
     #self.assertEqual(None, triangle(10,10,2))
     self.assertEqual('isosceles', triangle(10, 10, 2))
 def test_equilateral_triangles_have_equal_sides(self):
 	#self.assertEqual(None, triangle(2,2,2))
     self.assertEqual('equilateral', triangle(2, 2, 2))
     self.assertEqual('equilateral', triangle(10, 10, 10))
Beispiel #4
0
#Test Name: SquareShelfLevelsetCalvingSSA2dLevermann
from model import *
from socket import gethostname
from triangle import *
from setmask import *
from parameterize import *
from setflowequation import *
from solve import *

import numpy as np

md=triangle(model(),'../Exp/Square.exp',50000.)
md=setmask(md,'all','')
md=parameterize(md,'../Par/SquareShelf.py')
md=setflowequation(md,'SSA','all')
md.cluster=generic('name',gethostname(),'np',3)

x = md.mesh.x
xmin = min(x)
xmax = max(x)
Lx = (xmax-xmin)
alpha = 2./3.
md.mask.ice_levelset = np.float_((x - alpha*Lx)>0) - np.float_((x - alpha*Lx)<0)

md.timestepping.time_step=10
md.timestepping.final_time=30

#Transient
md.transient.isstressbalance=True
md.transient.ismasstransport=True
md.transient.issmb=True
Beispiel #5
0
#Test Name: PigTranSSA2d
from model import *
from socket import gethostname
from triangle import *
from setmask import *
from parameterize import *
from setflowequation import *
from solve import *

md = triangle(model(), '../Exp/Pig.exp', 20000.)
md = setmask(md, '../Exp/PigShelves.exp', '../Exp/PigIslands.exp')
md = parameterize(md, '../Par/Pig.py')
md = setflowequation(md, 'SSA', 'all')
md.cluster = generic('name', gethostname(), 'np', 3)
md = solve(md, 'Transient')

# Fields and tolerances to track changes
field_names = [
    'Vx1', 'Vy1', 'Vel1', 'Pressure1', 'Bed1', 'Surface1', 'Thickness1', 'Vx2',
    'Vy2', 'Vel2', 'Pressure2', 'Bed2', 'Surface2', 'Thickness2'
]
field_tolerances = [
    1e-12, 2e-12, 2e-12, 1e-13, 1e-13, 1e-13, 1e-13, 1e-12, 1e-12, 1e-12,
    1e-13, 1e-13, 1e-13, 1e-13
]
field_values=[\
 md.results.TransientSolution[0].Vx,\
 md.results.TransientSolution[0].Vy,\
 md.results.TransientSolution[0].Vel,\
 md.results.TransientSolution[0].Pressure,\
 md.results.TransientSolution[0].Base,\
Beispiel #6
0
 def test_scalene_triangles_have_no_equal_sides(self):
     self.assertEqual('scalene', triangle(3, 4, 5))
     self.assertEqual('scalene', triangle(10, 11, 12))
     self.assertEqual('scalene', triangle(5, 4, 2))
Beispiel #7
0
 def test_isosceles_triangles_have_exactly_two_sides_equal(self):
     self.assertEqual('isosceles', triangle(3, 4, 4))
     self.assertEqual('isosceles', triangle(4, 3, 4))
     self.assertEqual('isosceles', triangle(4, 4, 3))
     self.assertEqual('isosceles', triangle(10, 10, 2))
Beispiel #8
0
from model import *
from socket import gethostname
from triangle import *
from setmask import *
from parameterize import *
from setflowequation import *
from solve import *
"""
EISMINT benchmark experiment A
"""

numlayers = 8
resolution = 50000.

#To begin with the numerical model
md = triangle(model(), '../Exp/SquareEISMINT750000.exp', resolution)
md = setmask(md, '', '')
md = parameterize(md, '../Par/RoundSheetEISMINT.py')

#We extrude the model to have a 3d model
md.extrude(numlayers, 1.)
md = setflowequation(md, 'SIA', 'all')

#Spc the nodes on the bed
pos = np.where(md.mesh.vertexonbase)
md.stressbalance.spcvx[pos] = 0.
md.stressbalance.spcvy[pos] = 0.
md.stressbalance.spcvz[pos] = 0.

#Adapt the time steps to the resolution
md.timestepping.time_step = 15.
Beispiel #9
0
#Test Name: SquareShelfTherStea

from model import *
from socket import gethostname
import numpy as np
from triangle import *
from setmask import *
from parameterize import *
from setflowequation import *
from solve import *
from generic import generic

md = triangle(model(), '../Exp/Square.exp', 180000)
md = setmask(md, 'all', '')
md = parameterize(md, '../Par/SquareShelf.py')
md.extrude(3, 1.)
md = setflowequation(md, 'SSA', 'all')
md.timestepping.time_step = 0
md.cluster = generic('name', gethostname(), 'np', 3)
md = solve(md, 'Thermal')

# Fields and tolerances to track changes

field_names = ['Temperature', 'BasalforcingsGroundediceMeltingRate']
field_tolerances = [1e-13, 5e-6]
field_values = [
    md.results.ThermalSolution.Temperature,
    md.results.ThermalSolution.BasalforcingsGroundediceMeltingRate
]
Beispiel #10
0
#Test Name: 79NorthSurfSlop3d
import numpy as np
from model import *
from socket import gethostname

from triangle import *
from setmask import *
from parameterize import *
from setflowequation import *
from solve import *

md = triangle(model(), '../Exp/79North.exp', 10000.)
md = setmask(md, '../Exp/79NorthShelf.exp', '')
md = parameterize(md, '../Par/79North.py')
md.extrude(5, 1.5)
md = setflowequation(md, 'HO', 'all')
md.cluster = generic('name', gethostname(), 'np', 3)
md = solve(md, 'SurfaceSlope')

#Fields and tolerances to track changes
field_names = ['SurfaceSlopeX', 'SurfaceSlopeY']
field_tolerances = [1e-13, 1e-13]
field_values=[\
 md.results.SurfaceSlopeSolution.SurfaceSlopeX,\
 md.results.SurfaceSlopeSolution.SurfaceSlopeY,\
 ]
Beispiel #11
0
#Test Name: SquareShelfStressSSA2dRift

from model import *
from socket import gethostname
import numpy as np
from triangle import *
from meshprocessrifts import *
from setmask import *
from parameterize import *
from setflowequation import *
from solve import *
from generic import generic

md=triangle(model(),'../Exp/SquareHole.exp','../Exp/Rifts.exp',50000.)
md=meshprocessrifts(md,'../Exp/Square.exp')
md=setmask(md,'all','')
md=parameterize(md,'../Par/SquareShelf2.py')
md=setflowequation(md,'SSA','all')
md.cluster=generic('name',gethostname(),'np',3)

# rift settings

md.rifts.riftstruct[0]['fill']='Melange'
md.rifts.riftstruct[0]['fraction']=0
md.stressbalance.rift_penalty_lock=2
md.stressbalance.rift_penalty_threshold=0
md.rifts.riftstruct[0]['fractionincrement']=0.1
md=solve(md,'Stressbalance')

# Fields and tolerances to track changes
Beispiel #12
0
from setmask import *
from parameterize import *
from setflowequation import *
from paterson import *
from solve import *
"""
This file can be run to check that the melting in simple conduction is correctly modeled.
There is no velocity (no advection) the only thermal boundary conditions are an imposed temperature
at upper surface and an impose flux at its base. The result must be a linear temperature from the upper to the lower
surface with an imposed slope (Geothermal flux). if it is not the case, something is thermal modeling has been changed...
"""

printingflag = False

md = model()
md = triangle(md, '../Exp/Square.exp', 100000.)
md = setmask(md, '', '')
md = parameterize(md, '../Par/SquareThermal.py')
md.extrude(3, 2.)
md = setflowequation(md, 'HO', 'all')

#Some conditions specific to melting test
md.initialization.pressure = np.zeros((md.mesh.numberofvertices, 1), int)
md.initialization.temperature = 273.15 * np.ones((md.mesh.numberofvertices))
pos = np.nonzero(md.mesh.vertexonsurface)[0]
md.thermal.spctemperature[pos] = md.initialization.temperature[pos]
md.materials.rheology_B = paterson(md.initialization.temperature)

#analytical results
#melting heat = geothermal flux
#Mb*L*rho=G   => Mb=G/L*rho
def main():
    print "hello"
    lines = [line.strip() for line in open(file_name, "r+")]

    for i in range(len(lines)):
        line = lines[i]
        if "v" == line[0]:
            line = str.split(line)
            line = line[1:]
            for i in range(3):
                line[i] = float(line[i])

            vertices.append(line)
        elif "f" == line[0]:
            line = str.split(line)
            line = line[1:]
            for i in range(3):
                line[i] = int(line[i])
            faces.append(line)
        else:
            print "corrupt data"

    triangle.vertex = vertices
    triangle.face = faces
    for i in range(len(faces)):
        covered.append(0)
        face = faces[i]
        triangles.append(triangle(face[0], face[1], face[2], i))

    edge_tri = triangle.edge_tri
    # t=triangles[0]
    # t.f(0.12,0.2,0.1)
    # print t.lengths
    # print t.new_lengths
    # print t.new_lambda
    # print np.array(t.angles)*180/np.pi
    # print np.array(t.new_angles)*180/np.pi
    """
	for tri in triangles:
		#pass
		#print tri.vertex_numbers
		tri.f(0.12,0.2,0.1)
		tri.f(0.12,0.2,0.1)
		#print tri.new_lambda
	#print triangle.v_tri
	#	print str(tri.tri_number)+': '+str(tri.angles)
		#print np.array(tri.new_angles)*180/np.pi
	"""
    print "###"
    print len(vertices)
    for key in triangle.edge_tri:
        if len(triangle.edge_tri[key]) != 2:
            for v in key:
                if v not in boundary_vertices:
                    boundary_vertices.append(v)
                else:
                    pass

                ####### THIS IS ONLY FOR CONE SINGULARITIES ##########
                # boundary_vertices.append(17)
                # boundary_vertices.append(44)
                ######################################################
                ## this list contains index of internal vertices
    triangle.vert_wo_bound = range(len(vertices))

    for v in boundary_vertices:
        triangle.vert_wo_bound.remove(v)

    for v in range(len(vertices)):
        if v in corners:
            target_angl.append(np.pi / 2)
        elif v in boundary_vertices:
            target_angl.append(np.pi)
        else:
            target_angl.append(2 * np.pi)
    print boundary_vertices

    """
	a=[0, 2, 3, 6, 7, 237]
	a_sum=0
	for i in a:
		tri=triangles[i]
		print i
		print np.array(tri.angles)*180/np.pi
		a_sum+=tri.angl_at_abs_vert(0)
		print tri.angl_at_abs_vert(0)*180/np.pi
	
	pArray=np.array([])
	for i in range(len(vertices)):
		angle_sum=0
		for t in triangle.v_tri[i]:
			tri=triangles[t]
			angle_sum+=tri.angl_at_abs_vert(i)
		pArray=np.append(pArray, angle_sum)
	print pArray*180/np.pi
	""" """
	pArray=np.array([])

	for i in range(len(vertices)):
		angle_sum=0
		for t in triangle.v_tri[i]:
			tri=triangles[t]
			angle_sum+=tri.angl_at_abs_vert(i)
		pArray=np.append(pArray, 2*np.pi-angle_sum)
	print pArray"""

    guess = []
    guess2 = []
    guess3 = []
    for i in range(len(triangle.vert_wo_bound)):
        guess.append(0.0)
        guess2.append(-10)
        guess3.append(100)

    """
	guess=[]
	for i in range(len(vertices)):
		guess.append(0.0)
	"""
    # energy(guess)
    # energy(guess2)
    # energy(guess3)

    # ePrime(guess)
    # print boundary_vertices
    # print target_angl

    # energy(u_values)

    start = 0
    if file_name == "face.obj":
        start = 600

        # tile_nei(triangles[0],(0,1),np.array([0,0,0]),np.array([triangles[0].new_lengths[0],0,0]),-1)

        # print triangle.v_tri
        # print lenboundary_vertices)

    m = optimize.fmin_l_bfgs_b(energy, guess, fprime=ePrime)

    print m[0]

    cong = open("temp", "w")
    cnt = 0
    for item in m[0]:
        if cnt == 9:
            cong.write(str(item) + "\n")
            cnt = 0
        else:
            cong.write(str(item) + " ")
            cnt += 1
    cong.close()
    for tri in triangles:
        if tri.new_angles[0] == 0 or tri.new_angles[0] == np.pi:
            print "nono"

    f = open("temp", "r")
    a = f.readlines()
    u_values = []
    for tens in a:
        if tens[0] != "f":
            for ones in tens.split():
                u_values.append(float(ones))
    f.close()
    os.system("rm temp")
    ePrime(u_values)
    tile_not_recursive(
        triangles[start],
        triangles[start].edges[0],
        np.array([0, 0, 0]),
        np.array([triangles[start].new_lengths[0], 0, 0]),
        -1,
    )
    while len(current) != 0:
        for tri_num in current:
            tile_neighbors(triangles[tri_num])
    f = open(out_name, "w+")
    for tri in triangles:
        for i in range(3):
            f.write(str(tri.text_coord[i][0]) + "\n")
            f.write(str(tri.text_coord[i][1]) + "\n")
    f.close()

    # t = triangle([-0.206972, 0.0740737, 0.544664],[-0.398695, -0.0740794, 0.501089],\
    # 	[-0.211327, -0.187367, 0.588234])
    # print t.vi

    # starting triangle: 86
    # tile_nei(triangles[0],(0,1),np.array([0,0,0]),np.array([triangles[0].new_lengths[0],0,0]),-1)
    # tile_not_recursive(triangles[1013],(484, 558),np.array([0,0,0]),np.array([triangles[1013].new_lengths[0],0,0]),-1)
    """
	"""
    """
	tile_not_recursive(triangles[238],(209, 210),np.array([0,0,0]),np.array([triangles[238].new_lengths[0],0,0]),-1)
	while(len(current) != 0):
		for tri_num in current:
			tile_neighbors(triangles[tri_num])
	
	
	f=open('egea_param.txt','w+')
	for tri in triangles:
		for i in range(3):
			f.write(str(tri.text_coord[i][0] * 150)+'\n')
			f.write(str(tri.text_coord[i][1] * 150)+'\n')
	f.close()
	
	x=[]
	y=[]
	for tri in triangles:
		for i in range(3):
			x.append(tri.text_coord[i][0] * 100)
			y.append(tri.text_coord[i][1] * 100)

	plt.scatter(x,y,marker='+',s=150,linewidths=4 ,c=y, cmap=plt.cm.coolwarm)
	plt.show()"""

    """
Beispiel #14
0
from socket import gethostname
from triangle import *
from setmask import *
from parameterize import *
from setflowequation import *
from solve import *
"""
This test is a test from the ISMP-HOM Intercomparison project.
Pattyn and Payne 2006
"""

L_list = [80000.]
results = []

for L in L_list:
    md = triangle(model(), "../Exp/Square_%d.exp" % L, L / 10.)  #size 3*L
    md = setmask(md, '', '')  #ice sheet test
    md = parameterize(md, '../Par/ISMIPC.py')
    md.friction.coefficient = np.sqrt(
        md.constants.yts *
        (1000. + 1000. * np.sin(md.mesh.x * 2. * np.pi / L) *
         np.sin(md.mesh.y * 2. * np.pi / L)))
    md.extrude(10, 1.)

    #Add spc on the borders
    pos = np.where(
        np.logical_or.reduce(
            (md.mesh.x == 0., md.mesh.x == np.max(md.mesh.x), md.mesh.y == 0.,
             md.mesh.y == np.max(md.mesh.y))))
    md.stressbalance.spcvx[pos] = 0.
    md.stressbalance.spcvy[pos] = 0.
 def test_scalene_triangles_have_no_equal_sides(self):
 	#self.assertEqual(None, triangle(3, 4, 5))
     self.assertEqual('scalene', triangle(3, 4, 5))
     self.assertEqual('scalene', triangle(10, 11, 12))
     self.assertEqual('scalene', triangle(5, 4, 2))
Beispiel #16
0
 def test_equilateral_triangles_have_equal_sides(self):
     self.assertEqual('equilateral', triangle(2, 2, 2))
     self.assertEqual('equilateral', triangle(10, 10, 10))
Beispiel #17
0
from triangle import *
from setmask import *
from parameterize import *
from setflowequation import *
from solve import *


"""
Test on the stressbalance model and the masstransport in 2d
"""

printingflag=False

#tests 3 and 4: using Glen's flow law
md=model()
md=triangle(md,'../Exp/SquareEISMINT.exp',3550.)
md=setmask(md,'all','')
md=parameterize(md,'../Par/SquareEISMINT.py')
md=setflowequation(md,'SSA','all')    #SSA's model and 2d

#Impose a non zero velocity on the upper boundary condition (y=max(y))
pos=np.where(md.mesh.y==np.max(md.mesh.y))
heavyside=np.where(np.logical_and(md.mesh.y==np.max(md.mesh.y),((1.+sys.float_info.epsilon)*np.ones((np.size(md.mesh.y)))-((md.mesh.x-100000.)/25000.)**2)>0))
md.stressbalance.spcvy[pos]=np.zeros((np.size(pos)))
md.stressbalance.spcvy[heavyside]=400.*(((md.mesh.x[heavyside]-100000.)/25000.)**2-np.ones((np.size(heavyside))))

#Compute solution for SSA's model 
md.cluster=generic('name',gethostname(),'np',8)
md=solve(md,'Stressbalance')

#plot results