#Test Name: ThermalEnthBasalcondsTrans 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/Square.exp',300000.) md = setmask(md,'','') md = parameterize(md,'../Par/SquareThermal.py') h = 100. md.geometry.thickness = h * np.ones((md.mesh.numberofvertices,)) md.geometry.base = -h * np.ones((md.mesh.numberofvertices,)) md.geometry.surface = md.geometry.base + md.geometry.thickness md.extrude(41,2.) md = setflowequation(md,'HO','all') md.thermal.isenthalpy = True md.thermal.isdynamicbasalspc = True #Basal forcing Ts = 273.15-3. Tb = 273.15-1. Tsw = Tb qgeo = md.materials.thermalconductivity / max(md.geometry.thickness) * (Tb - Ts) #qgeo=kappa*(Tb-Ts)/H md.basalforcings.geothermalflux[np.where(md.mesh.vertexonbase)] = qgeo md.initialization.temperature = qgeo / md.materials.thermalconductivity * (md.geometry.surface - md.mesh.z) + Ts #Surface forcing pos = np.where(md.mesh.vertexonsurface) SPC_cold = float('NaN') * np.ones((md.mesh.numberofvertices,)) SPC_warm = float('NaN') * np.ones((md.mesh.numberofvertices,)) SPC_cold[pos] = Ts SPC_warm[pos] = Tsw md.thermal.spctemperature = SPC_cold md.timestepping.time_step = 5. t0 = 0. t1 = 10. t2 = 100. md.timestepping.final_time = 400. md.thermal.spctemperature = np.array([SPC_cold,SPC_cold,SPC_warm,SPC_warm,SPC_cold]).T md.thermal.spctemperature = np.vstack((md.thermal.spctemperature,[t0, t1-1, t1, t2-1, t2])) #print np.shape(md.thermal.spctemperature) #print md.thermal.spctemperature #Additional settings md.transient.ismasstransport = False md.transient.isstressbalance = False md.transient.issmb = True md.transient.isthermal = True md.thermal.stabilization = False #Go solve md.verbose = verbose(0) md.cluster = generic('name',gethostname(),'np',3) md = solve(md,'Transient') #Fields and tolerances to track changes field_names = ['Enthalpy1','Temperature1','Waterfraction1','BasalMeltingRate1','Watercolumn1', 'Enthalpy2','Temperature2','Waterfraction2','BasalMeltingRate2','Watercolumn2', 'Enthalpy3','Temperature3','Waterfraction3','BasalMeltingRate3','Watercolumn3', 'Enthalpy4','Temperature4','Waterfraction4','BasalMeltingRate4','Watercolumn4'] field_tolerances = [1.e-10,1.e-10,1.e-10,1.e-9,1.e-10, 1.e-10,1.e-10,1.e-10,2.e-9,2.e-10, 1.e-10,1.e-10,1.e-10,2.e-9,1.e-10, 1.e-10,1.e-10,1.e-10,2.e-9,1.e-10] i1 = 0 i2 = int(np.ceil(t2 / md.timestepping.time_step) + 2)-1 i3 = int(np.ceil(md.timestepping.final_time / (2. * md.timestepping.time_step)))-1 i4 = np.shape(md.results.TransientSolution)[0]-1 field_values = [ md.results.TransientSolution[i1].Enthalpy, md.results.TransientSolution[i1].Temperature, md.results.TransientSolution[i1].Waterfraction, md.results.TransientSolution[i1].BasalforcingsGroundediceMeltingRate, md.results.TransientSolution[i1].Watercolumn, md.results.TransientSolution[i2].Enthalpy, md.results.TransientSolution[i2].Temperature, md.results.TransientSolution[i2].Waterfraction, md.results.TransientSolution[i2].BasalforcingsGroundediceMeltingRate, md.results.TransientSolution[i2].Watercolumn, md.results.TransientSolution[i3].Enthalpy, md.results.TransientSolution[i3].Temperature, md.results.TransientSolution[i3].Waterfraction, md.results.TransientSolution[i3].BasalforcingsGroundediceMeltingRate, md.results.TransientSolution[i3].Watercolumn, md.results.TransientSolution[i4].Enthalpy, md.results.TransientSolution[i4].Temperature, md.results.TransientSolution[i4].Waterfraction, md.results.TransientSolution[i4].BasalforcingsGroundediceMeltingRate, md.results.TransientSolution[i4].Watercolumn, ]