From 880d668c8c606621c0e92e6789aab212ccf0620b Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Keck <Jean-Baptiste.Keck@imag.fr> Date: Thu, 13 Dec 2018 21:21:00 +0100 Subject: [PATCH] added hyperbolic function --- .../sediment_deposit_levelset.py | 39 ++++++++++++------- hysop/backend/device/codegen/symbolic/map.py | 12 ++++-- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/examples/sediment_deposit/sediment_deposit_levelset.py b/examples/sediment_deposit/sediment_deposit_levelset.py index dfeb56cb8..53e73d40a 100644 --- a/examples/sediment_deposit/sediment_deposit_levelset.py +++ b/examples/sediment_deposit/sediment_deposit_levelset.py @@ -8,7 +8,10 @@ TANK_RATIO = 1 FILL_PCT = 0.25 SEDIMENT_RADIUS = 5e-3 SEDIMENT_COUNT = int(1.15*(FILL_PCT*TANK_RATIO / (np.pi*SEDIMENT_RADIUS**2))) -DISCRETIZATION = 4096 +DISCRETIZATION = 2048 + +BLOB_INIT = False +NB = 5 # initialize vorticity def init_vorticity(data, coords, component=None): @@ -32,18 +35,21 @@ def init_phi(data, coords, nblobs, rblob): R2 = rblob * rblob cache_file='/tmp/C_init_ls_{}_{}'.format('_'.join(str(x) for x in data.shape), - str(abs(hash((TANK_RATIO,nblobs,rblob))))) + str(abs(hash((BLOB_INIT, NB, TANK_RATIO, nblobs, rblob))))) try: D = np.load(file=cache_file+'.npz') vprint(' *Initializing sediments from cache: "{}.npz".'.format(cache_file)) data[...] = D['data'] except: - vprint(' *Initializing sediments of radius {} with {} random blobs.'.format(rblob, nblobs)) - nb = 5 - data[...] = np.sin(2*np.pi*nb*X)*np.sin(2*np.pi*nb*Y) - return + + if not BLOB_INIT: + vprint(' *Initializing sediments with sines...') + data[...] = np.sin(2*np.pi*NB*X)*np.sin(2*np.pi*NB*Y) + data[...] = np.abs(data) + return # we cache initialization + vprint(' *Initializing sediments of radius {} with {} random blobs.'.format(rblob, nblobs)) np.savez_compressed(file=cache_file, data=data) vprint(' *Caching data to "{}.npz".'.format(cache_file)) @@ -230,7 +236,11 @@ def compute(args): #e3 = Assignment(H, H_eps) #e4 = Assignment(Ss, S1 + (S2-S1)*H) #exprs = (e0,e1,e2,e3,e4) - e = Assignment(Ss, 0.5*LogicalLE(phis, 0)) + if BLOB_INIT: + e = Assignment(Ss, 0.5*LogicalLE(phis, 0)) + else: + e = Assignment(Ss, 0.5*LogicalGT(phis, 0.5)) + #e = Assignment(Ss, 0.5*LogicalLE(phis, 0)) exprs = (e,) eval_fields = DirectionalSymbolic(name='eval_fields', pretty_name=u'{}({})'.format( @@ -305,8 +315,8 @@ def compute(args): dump_fields = HDF_Writer(name='dump', io_params=io_params, force_backend=Backend.OPENCL, - variables={velo: npts, - vorti: npts, + variables={#velo: npts, + #vorti: npts, phi: npts, S: npts}, **extra_op_kwds) @@ -324,7 +334,7 @@ def compute(args): ### Adaptive timestep operator adapt_dt = AdaptiveTimeStep(dt, equivalent_CFL=True, name='merge_dt', pretty_name='dt', - max_dt=1e-1) + max_dt=1) dt_cfl = adapt_dt.push_cfl_criteria(cfl=args.cfl, Finf=min_max_U.Finf, equivalent_CFL=True, @@ -376,7 +386,8 @@ def compute(args): # Initialize vorticity, velocity, S on all topologies problem.initialize_field(field=velo, formula=init_velocity) problem.initialize_field(field=vorti, formula=init_vorticity) - problem.initialize_field(field=phi, formula=init_phi, nblobs=nblobs, rblob=rblob, without_ghosts=True) + problem.initialize_field(field=phi, formula=init_phi, nblobs=nblobs, rblob=rblob, + without_ghosts=BLOB_INIT) # Finally solve the problem problem.solve(simu, dry_run=args.dry_run) @@ -418,9 +429,9 @@ if __name__=='__main__': parser.set_defaults(impl='cl', ndim=2, npts=(TANK_RATIO*DISCRETIZATION+1,DISCRETIZATION+1), box_origin=(0.0,), box_length=(1.0,), - tstart=0.0, tend=10000.1, - dt=1e-6, cfl=0.50, lcfl=0.50, - dump_times=tuple(float(100*x) for x in range(100)), + tstart=0.0, tend=100.1, + dt=1e-6, cfl=8.00, lcfl=0.50, + dump_times=tuple(float(5*x) for x in range(20)), dump_freq=0) parser.run(compute) diff --git a/hysop/backend/device/codegen/symbolic/map.py b/hysop/backend/device/codegen/symbolic/map.py index 9c6b068dc..a0d8cd301 100644 --- a/hysop/backend/device/codegen/symbolic/map.py +++ b/hysop/backend/device/codegen/symbolic/map.py @@ -39,7 +39,8 @@ def map_expression(csc, expr, args, reqs): def _map_ctypes(expr, args): - if isinstance(expr, sm.functions.elementary.trigonometric.TrigonometricFunction): + if isinstance(expr, (sm.functions.elementary.trigonometric.TrigonometricFunction, + sm.functions.elementary.hyperbolic.HyperbolicFunction)): (args, ctype) = OpenClCastUtils.promote_expressions_to_required_signature(args, 'ftype', ret=0) elif isinstance(expr, Select): @@ -133,7 +134,10 @@ _func_mappings = { Select: OpenClSelect, BroadCast: OpenClBroadCast, Expand: OpenClExpand, - sm.cos: BuiltinFunction('cos'), - sm.sin: BuiltinFunction('sin'), - sm.tan: BuiltinFunction('tan'), + sm.cos: BuiltinFunction('cos'), + sm.sin: BuiltinFunction('sin'), + sm.tan: BuiltinFunction('tan'), + sm.cosh: BuiltinFunction('cosh'), + sm.sinh: BuiltinFunction('sinh'), + sm.tanh: BuiltinFunction('tanh'), } -- GitLab