Files
LaGriT/PyLaGriT/examples/arctic_2D/mesh_pylagrit.py

110 lines
3.5 KiB
Python
Raw Normal View History

2025-12-17 11:00:57 +08:00
from pylagrit import PyLaGriT
import numpy
# Variables
nx = 50 # Number of points in x direction
dy = 0.25 # width of cells in y direction
distance = 12.34364319 # distance in x direction
l = PyLaGriT()
# Create base layer
layer = l.create_qua()
layer.createpts_xyz((nx,2,1),[0.,0.,0.],[distance,dy,0.],rz_switch=[1,1,1],connect=True)
layer.setatt('itetclr',1)
layer.minmax_xyz()
# Create top of mesh
# Collapse y values
layer.addatt('y_save',vtype='vdouble',rank='scalar')
layer.copyatt('yic','y_save')
layer.setatt('yic',0.)
# Read in lidar top elevations
peat_surf_pts = l.read('surface_coords2.avs')
peat_surf_pts.addatt('z_save',vtype='vdouble',rank='scalar')
peat_surf_pts.copyatt('zic','z_save')
peat_surf_pts.setatt('zic',0.)
# Interpolate surface elevations to layer mo
layer.addatt('z_val',vtype='vdouble',rank='scalar')
layer.interpolate_voronoi('z_val',peat_surf_pts,'z_save')
layer.copyatt('y_save','yic')
layer.copyatt('z_val','zic')
# Save peat top
layer.setatt('imt',1)
layer.setatt('itetclr',1)
layer.dump('tmp_lay_peat_top.inp')
peat_surf_pts.delete()
# Read in peat bottom elevations
peat_bot_pts = l.read('bottom_peat2.avs')
peat_bot_pts.addatt('z_save',vtype='vdouble',rank='scalar')
peat_bot_pts.copyatt('zic','z_save')
peat_bot_pts.setatt('zic',0.)
# Interpolate peat bottom elevations to layer mo
layer.setatt('yic',0.)
layer.addatt('z_val',vtype='vdouble',rank='scalar')
layer.interpolate_voronoi('z_val',peat_bot_pts,'z_save')
layer.copyatt('y_save','yic')
layer.delatt('y_save')
layer.copyatt('z_val','zic')
layer.delatt('z_val')
# Save peat bot
layer.dump('tmp_lay_peat_bot.inp')
# Copy layer to peat_bot for use in generating additional layers
peat_bot = layer.copy()
stack_files = ['tmp_lay_peat_top.inp 1,5']
stack_files.append('tmp_lay_peat_bot.inp 1,33')
# Layer depths?
# 1 2 3 4 5 6 7 8 9 10
layers = [ 1.0, 0.16, 0.32, 0.64, 1.28, 3.2, 6.4, 8.0]
addnum = [ 3, 3, 3, 3, 4, 4, 3, 5]
matnum = [2]*len(layers)
layer_interfaces = numpy.cumsum(layers)
i = 1
for li,m,a in zip(layer_interfaces,matnum,addnum):
layer.math('sub','zic',li,cmosrc=peat_bot)
stack_files.append('tmp_lay'+str(i)+'.inp '+str(int(m))+', '+str(a))
layer.dump('tmp_lay'+str(i)+'.inp')
i += 1
layer.setatt('zic',-45.)
layer.dump('tmp_lay_bot.inp')
stack_files.append('tmp_lay_bot.inp 2')
stack_files.reverse()
# Create stacked layer mesh and fill
stack = l.create()
stack.stack_layers(stack_files,file_type='avs',flip_opt=True)
stack_hex = stack.stack_fill()
# Create boundary facesets, dictionary of PyLaGriT faceset objects is returned
fs = stack_hex.create_boundary_facesets(base_name='faceset_bounds',stacked_layers=True,reorder=True)
# Should add this to PyLaGriT, but I'm feeling lazy ;-)
stack_hex.sendline('quality volume itetclr')
# Write exo file with boundary facesets
stack_hex.dump_exo('arctic_siteb_2d.exo',facesets=fs.values())
# Write region and faceset identifier file for ats_xml
matnames = {10000:'computational domain peat',
20000:'computational domain upper mineral'}
facenames = {1:'bottom face',
2:'surface',
3:'front',
4:'right',
5:'back',
6:'left'}
stack_hex.dump_ats_xml('arctic_siteb_2d_mesh.xml','/scratch/tundra/dharp/arctic/geophysics/mesh/from_lucia/arctic_siteb_2d.exo',matnames=matnames,facenames=facenames)
stack_hex.dump_ats_xml('arctic_siteb_2d_par4_mesh.xml','/scratch/tundra/dharp/arctic/geophysics/mesh/from_lucia/arctic_siteb_2d.par',matnames=matnames,facenames=facenames)