#Test Name: SquareSheetShelfGroundingLine2dAggressive. From test424, with sea level increasing.
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 *
from newforcing import *

md = triangle(model(), '../Exp/Square.exp', 150000.)
md = setmask(md, '../Exp/SquareShelf.exp', '')
md = parameterize(md, '../Par/SquareSheetShelf.py')
md = setflowequation(md, 'SSA', 'all')
md.initialization.vx[:] = 0.
md.initialization.vy[:] = 0.
md.smb.mass_balance[:] = 0.

md.geometry.base = -700. - np.abs(md.mesh.y - 500000.) / 1000.
md.geometry.bed = -700. - np.abs(md.mesh.y - 500000.) / 1000.
md.geometry.thickness[:] = 1000.
md.geometry.surface = md.geometry.base + md.geometry.thickness

md.transient.isstressbalance = 0
md.transient.isgroundingline = 1
md.transient.isthermal = 0
md.groundingline.migration = 'AggressiveMigration'
md.transient.requested_outputs = ['IceVolume', 'IceVolumeAboveFloatation', 'Sealevel']

md.timestepping.time_step = .1
md.slr.sealevel = newforcing(md.timestepping.start_time, md.timestepping.final_time,
                             md.timestepping.time_step, -200., 200., md.mesh.numberofvertices)

md.cluster = generic('name', gethostname(), 'np', 3)
md = solve(md, 'Transient')

#we are checking that the grounding line position is near the theorical one, which is the 0 contour level
#of surface-sealevel - (1 - di) * thickness

nsteps = len(md.results.TransientSolution)
field_names = []
field_tolerances = []
field_values = []
#time is off by the year constant
for i in range(nsteps):
    field_names.append('Time-' + str(md.results.TransientSolution[i].time) + '-yr-ice_levelset-S-sl-(1-di) * H')
    field_tolerances.append(1e-12)
    field_values.append(md.results.TransientSolution[i].MaskGroundediceLevelset.reshape(-1, ) - (md.geometry.surface - md.results.TransientSolution[i].Sealevel.reshape(-1, ) - (1 - md.materials.rho_ice / md.materials.rho_water) * md.geometry.thickness))
