def boltz_main_outputs(N=2**5,h=2.,period=12.,youngs=5.e9,\ visc_rp=0,width=100.,Hs_inc=3.,conc=.7,dmean=100.,ax=None): import WIM2d_f2py as Mwim # N : no of directions # h : # thickness [m] # period : # period [s] # youngs : # period [s] # visc_rp : # R-P damping parameter [m^s/s] # Hs : # sig wave height [m] # conc : # concentration [0-1] # dmean : # mean floe size [m] om = 2*np.pi/period gravity = 9.81 atten_in = np.array([h,om,youngs,visc_rp]) atten_out = Mwim.atten_youngs(atten_in) # print(atten_in) # print(atten_out) alp = conc/dmean*atten_out[4] # scattering "attenuation" [m^{-1}] alp_dis = 2*conc*atten_out[0] # damping [m^{-1}] kwtr = atten_out[2] cp = om/kwtr # phase vel (open water) [m/s] cg = cp/2. # group vel (open water, inf depth relation) [m/s] print('\n') print('width = '+str(width)+'m') print('\n') out = Fbs.solve_boltzmann(width=width, alp=alp,N=N,alp_dis=alp_dis,cg=cg,Hs=Hs_inc, f_inc=dirspec_inc_spreading) th_vec = out['angles'] dth = 2*np.pi/N xx = np.linspace(0,width,num=800) E_th = Fbs.calc_expansion(out,xx,L=width) # E0 = dth*E_th.sum(1) # integral over directions (freq spec) Hs_steady = 4*np.sqrt(E0.real) # S_th = E_th.dot(out['solution']['Rmat'].transpose()) # source term S_cos = S_th.dot(dtheta*np.cos(out['angles'])) # integral with cos over directions rhow = 1025 # kg/m^3 gravity = 9.81 # m/s^2 taux_steady = -(rhow*gravity/cp)*S_cos.real #test plot if desired if ax is not None: ax.plot(xx/1.e3,Hs_out) return xx,Hs_out
def atten_nondim(h,T,young,visc_rp): # attenuation per floe # - for scalars (ie single grid cell) # h = inputs(1) # om = inputs(2) # young = inputs(3) # visc_rp = inputs(4) om = 2*np.pi/T inputs = np.array([h,om,young,visc_rp]) outs = Mwim.atten_youngs(inputs) # calls interface to fortran code # outputs = (/damping,kice,kwtr,int_adm, # ac,modT,argR,argT/) k_visc = outs[0] kice = outs[1] kwtr = outs[2] alp_scat = outs[4] return k_visc,kice,kwtr,alp_scat
cols = ['k','b','r','g','m','c'] lstil = ['-','--','-.',':'] Nc = len(cols) loop_c = -1 loop_s = 0 ndirs = [16,32,64,128,256] fig = None labs = ['$x$, km','$H_s$, m'] for N in ndirs: # get steady state solution om = 2*np.pi/Tp_in # gravity = 9.81 atten_in = np.array([h_in,om,young,visc_rp]) atten_out = Mwim.atten_youngs(atten_in) alp = c_in/D_in*atten_out[4] # scattering "attenuation" [m^{-1}] alp_dis = 2*c_in*atten_out[0] # damping [m^{-1}] kwtr = atten_out[2] cp = om/kwtr # phase vel (open water) [m/s] cg = cp/2. # group vel (open water, inf depth relation) [m/s] # #N = pow(2,4) out = Fbs.solve_boltzmann_ft(width=ice_width, alp=alp,N=N,alp_dis=alp_dis,cg=cg,f_inc=Fbs.dirspec_inc_spreading,Hs=Hs_in) # alp2 = out['inputs'][0] # print(alp,alp2) # sys.exit('fig_test_convergence2steady') nx0 = 1.e3