コード例 #1
0
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
コード例 #2
0
ファイル: get_atten.py プロジェクト: whigg/SWARP-routines
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
コード例 #3
0
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