Source code for issm.roundmesh

import numpy as np
import os
from collections import OrderedDict
from issm.expwrite import expwrite
from issm.triangle import triangle

[docs]def roundmesh(md,radius,resolution): """ ROUNDMESH - create an unstructured round mesh This script will generate a structured round mesh - radius : specifies the radius of the circle in meters - resolution : specifies the resolution in meters Usage: md=roundmesh(md,radius,resolution) """ #First we have to create the domain outline #Get number of points on the circle pointsonedge=np.floor((2.*np.pi*radius) / resolution) #Calculate the cartesians coordinates of the points x_list=np.ones(pointsonedge) y_list=np.ones(pointsonedge) theta=np.linspace(0.,2.*np.pi,num=pointsonedge,endpoint=False) x_list=roundsigfig(radius*x_list*np.cos(theta),12) y_list=roundsigfig(radius*y_list*np.sin(theta),12) A=OrderedDict() A['x']=[x_list] A['y']=[y_list] A['density']=1. expwrite(A,'RoundDomainOutline.exp') #Call Bamg md=triangle(md,'RoundDomainOutline.exp',resolution) #md=bamg(md,'domain','RoundDomainOutline.exp','hmin',resolution) #move the closest node to the center pos=np.argmin(md.mesh.x**2+md.mesh.y**2) md.mesh.x[pos]=0. md.mesh.y[pos]=0. #delete domain os.remove('RoundDomainOutline.exp') return md
[docs]def roundsigfig(x,n): digits=np.ceil(np.log10(np.abs(x))) x=x/10.**digits x=np.round(x,decimals=n) x=x*10.**digits pos=np.nonzero(np.isnan(x)) x[pos]=0. return x