Guillermo Polito

Noury Bouraqadi

Stéphane Ducasse

Luc Fabresse

Understanding Pharo's global state to move programs through time and space

Code mobility is a mechanism that allows the migration of running programs between different environments. Such migration includes amongst others the migration of application data and resources. Application's data is is usually composed by elements of different nature: from printers and files, to framework and domain objects. This application data will be transported along with the code of its program in space (when serialized and deployed in another environment) or time (when a new session is started in a different point of time). The main problem when moving around code resides, in our understanding, to global state. While unreferenced leaf objects are garbage collected, those referenced (transitively) by some global object will remain alive.

In order to support code mobility in time and space, we need to understand how global application data is used. With this purpose, we study and classify Pharo's global state. This classification uncovers some common patterns and provides a first insight on how global state should be managed, specially in code mobility scenarios. As a minor contribution, we also discuss solutions to each of the found categories.

Introduction

Code mobility is a mechanism that allows the migration of programs between different environments. It provides support for e.g., load balancing, adjusting an application's resources dynamically and functionality customization. Fuggetta et al. define informally code mobility as the capability to rebind a piece of code with the location it is running [? ].

[Copyright notice will appear here once 'preprint' option is removed.] Such rebinding may consist, depending on the style of mobility, in the mobility of execution state, application data and resources, or both of them. Execution state mobility is the ability to suspend the actual execution of a program and transfer its internal execution information (e.g., code, execution stacks, instruction pointers) to some other environment. Data mobility is the ability to transfer the application's data (e.g., objects, database connections, files) between different environments.

Application data is usually composed by elements of different nature. Files are used for configuration and logging. Network connections such as sockets are used to communicate with remote systems. External libraries provide with code reuse. We can also find objects local to the application, of two different categories: domain objects modeling the application's specific concerns and application objects modeling those concerns that are cross-cutting between applications.

In our experience manipulating the language kernel of Pharo, we identified several cases where data mobility presents some issues. We can generalize those issues as mobility either in time (i.e., creating or recreating a program), or in space (i.e., moving a program between different environments):

Transporting code in space. When moving a program from one environment to another one, some of its state becomes invalid. For example, files existing in one machine will not exist in some other. Because of this, the migration mechanism should be aware of the state it migrates, to either reinitialize it, re-bind it in the new environment, or by keep it with its same value [? ].

Transporting code in time. Image-based systems allow one to persist the state of a program to restart it at some other point of time from the last check-point, introducing the idea of program sessions: every time the system is restarted, a new session is started. These programming sessions introduce the concern of session specific state i.e., state that is only valid during a programming ses-sion. The mechanism in charge of stopping and restarting the image has to recognize the session specific state to re-initialize or rebind it every time a new session is started.

Creating for the first time. The initial creation of the system is a combination of transporting the program in space and time, since the issues of both appear in it. When creating or recreating the language kernel from scratch, for example during a bootstrap process [? ], we must deal with its initialization. All the initial objects must be created, and their state is initialized by either binding it for the first time to some resource or assigning it some value. This state should be initialized in a proper order.

One of the main problems when moving code around resides in the existence of global state. While unreferenced leaf objects are garbage collected, those referenced (transitively) by some global object will remain alive. Because of this, we focus our attention on global state (cf. Section 2). Migrating global state in the cases described above in a generic way shows itself challenging (cf. Section 3). Global state is used for many different and unrelated purposes in the Pharo base libraries e.g., from caches to constants values. Also, the intention of such usage is not explicit in the source code: its identification requires the developer to read the complete implementation.

In this paper we present an empirical study on the global state of Pharo base libraries. Our contribution is twofold:

• We present a classification of the usage of global state, identifying patterns built with global state constructs in Pharo (cf. Section 4).

• We discuss our findings and solutions to the issues we found. Our main goal with this is to make explicit those patterns. In such a way, client libraries and frameworks in charge of program migration can be simplified. (cf. Section 6 and Section 5).

Background

Global state is a simple and handy mechanism to share state between different objects. It is also a simple persistency mechanism: state hold by it will persist as long as the program is alive and running. Additionally, in image-based systems as Pharo it will remain alive through different program executions because the image persists its state taking as root the global objects. In this paper we put focus on global state because of this persistency property. Global state is indeed not a bad mechanism per se, and is often used in applications to implement globally needed concerns. For example, Pharo implements through it a global process scheduler and the system dictionary holding all classes. However, its usage is discouraged in general terms because it introduces hidden dependencies in the software it is used.

Global State in Pharo

Global state in Pharo can be expressed in many forms with many constructs of the language. In this paper we will focus on the elements we present following. Note that equivalent language constructs can be found in other languages such as Java (for example, with static variables).

Global Variables. Global variables are variables that share their values to all objects in the system. A global variable can be accessed from any method, from any object. In Pharo, these kind of variables are stored in the global SystemDictionary object. Global variables may reference either (a) global instances such as Processor or Smalltalk, either (b) Classes and Traits.

Class Variables. Class variables are variables that belong to a class. These variables can be accessed by both classes and instances from the hierarchy below its owner class.

Their value is shared between all the objects that can access them. In Pharo, these kind of variables are stored in a Dictionary object in its owner class.

Class Instance Variables. Class instance variables are instance variables of the classes. Their value is not directly accessible from subclasses and subinstances of the class. However, they are often made globally accessible with accessors.

Shared Pools. Shared pools are sets of class variables shared amongst many classes. Their values are accessible to all classes (and their instances) that import the shared pool.

In Pharo, Shared Pools as implemented as classes treated specially by the compiler at binding time.

Method Literals. Each method contains a collection of those literal objects used in in e.g., strings, literal arrays or numbers. As classes are globally accessible, their methods are too, and so their literals.

About the State in Image-Based Systems

Pharo, as a Smalltalk inspired language, is an image-based language such as Lisp. Image-based languages present the following two main properties: direct object manipulation and persistence. Direct object manipulation provides with instant feedback during development and a flexible way to understand the state of applications. Persistence allows one to store those changes made by direct object manipulation without the need of recreating the system every time it is started. Indeed, an image-based language can be persisted and restarted later on, possibly in another machine. We refer as a session to the time elapsed between the startup of an image and its shutdown. These programming sessions have session specific state, i.e., state that is valid only within a session. For example, we can name as such file and socket descriptors, handles to external libraries, operating system information, and time and date information. These kind of objects become invalid when their session is finished. Using them in an invalid state may lead to unexpected behavior, exceptions and virtual machine crashes. The language runtime must ensure that this state is correctly handled on session startup and shutdown: e.g., reinitialize it or discard it.

Motivation

In this section we show why understanding and making explicit the usage of global state is important. We introduce first an example based on two Pharo's cache implementations, and their problems. Then, we explore three different situations in which those problems are made more evident.

Problems on Global State Usage: an Example

To exemplify the problems on global state usage, we present here two different global cache implementations we find in Pharo 3.0. First, in Figure 1, we present a simplified version of the AST cache. Second, in Figure 2, we find an extract of the HelpIcon class, with the code related to an icon cache. By looking at these two ad-hoc implementations of caches, we identify the following issues:

Incompleteness. Both cache implementations were written to solve only particular issues. The AST cache presents weak references as it inherits from the WeakIdentityKey-Dictionary class and also presents methods to be flushed. The icon cache does not present code for any of those features. None of them cover some concerns a cache may want to address such as specifying a maximum amount of elements or a recycling strategy (LRU, FIFO, etc.).

Non-Explicitness. In order to identify the examples as caches we need to read their code: the names of the classes and variables gives us an idea of its responsibility as caches. The default method in the AST cache hints us about having found also a singleton. This problem uncovers the existence of hidden information in the system. One cannot query the system to, for example, obtain a list of the existing caches in order to flush them, or make a report on their memory usage.

Creating Programs from Scratch: Bootstrapping

While bootstrapping Pharo [? ], we must initialize the image's global state. We observed the need for an order in this initialization, showing off a hidden coupling between code pieces. For example, some global tables must be initialized before initializing the classes state, which in turn must be initialized before the rest of the language kernel (i.e., the startup and shutdown lists, the main processes, etc.).

Since the global state language constructs are used for different concerns implicitly, it is difficult to discern wether they are responsibility of the language kernel, of basic libraries such as Collections, or other not-basic ones such as Networking. This makes the bootstrap process difficult to maintain. A lot of ad-hoc code should be written to handle the dependencies between the global state in Pharo's language kernel.

Transporting Programs in Time: Session Awareness

Image-based systems introduce the concern of session specific state. State holding references to for example, files, caches, or platform specific information, may become invalid when a new session is started in a different moment. Pharo presents a startup and a shutdown mechanism to support this. The language runtime raises events on its startup and shutdown. Classes subscribed to such events are notified and will execute some code according to the event. The handler of these events is responsibility of the class developer. This mechanism hides information in two different levels:

Dependencies between classes. The subscribed classes receive the startup and shutdown events in an explicitly defined order. This order is present in a list which is defined by the developers. This list express a dependency between classes e.g., some classes must receive the startup event before others to satisfy its invariants. However, this list does not actually express the reason of this dependency i.e., which is the state or invariants that should be guaranteed before each class receives the proper event.

Semantics of class state. The startup and shutdown event handlers, which are in charge of the clean-up and reinitialization of some the global state, are written in an imperative fashion. This imperative fashion hides the semantics and invariants of this state.

This hidden information makes difficult to change the startup and shutdown mechanism. Some questions appear when doing so: Can we remove some class from these lists? Can we alter the order without changing the behavior? When we register a new class, in which position should we put it?

Transporting Programs in Space: Serialization

Migrating objects, and specially code (classes and methods), from one image to another requires in general customizations for the global state it carries and references. References to external classes and global variables may not be serialized but just re-binded in the new environment. Class variables containing constant value objects may be transported with the program. Session specific state should be re-initialized, as program migration implies session change also.

A migration mechanism needs information about the semantics of the state in migration, so it knows wether it should reinitialize it, re-bind it, or keep it as it is. As this information is not usually explicitly available in the program under migration, the developer must add it in the form of extensions or descriptions, external to the program. For example, the serialization library Fuel [? ] presents special clusters to handle and customize the serialization of global variables and class variables. The user must customize these clusters externally.

Classification of Pharo's Global State

Classification Methodology

Our universe of study is the latest release of Pharo, Pharo 3.0. We selected as individuals to study all those usages of global state language constructs as we presented it in Section 2 i.e., class variables and class instance variables, shared pools and global variables. For simplicity, we excluded from our analysis the classes referenced by global variables. We also excluded method literals because analyzing them would mean to read every single method in the language kernel.

The global state in Pharo is present mostly in ad-hoc implementations, making difficult the usage of automated methods for its classification. Since the goal of this paper is not to obtain an automatic classification, we built our classification using purely empirical observation: reading the code. We took each of the selected individuals, read all the code related to it and made a qualitative evaluation of it. We put special emphasis on the side-effects on such individuals, which showed useful to recognize the individual's semantics in the program.

As a result, we distinguished some patterns of usage, which lead us to the categories in Section 4.2. Note that the individuals under study can fall into more than of these categories e.g., a cache made globally as a singleton. Also, to avoid noise we excluded from the classification those individuals whose role in the source code was very specific, thus they did not conform a representative category.

Categories

Constants. Constants are values that are initialized once and never updated. Pharo has no construct to express constant values. Thus, they are expressed using the other available constructs. This means that the semantics of constants must be ensured explicitly in the code or they are not ensured at all. Caches. A cache is a buffer that stores duplicated information to reduce the consumption of resources such as CPU or memory. Caches store usually up to a maximum amount of elements, discarding old ones following a given strategy e.g., First In First Out (FIFO) and Least Recently Used (LRU). Pharo presents several caches which store for example images, fonts and package metadata.

Settings and

Registries. A registry stores a list of possible service providers and resolves which one of them is the appropriate to handle a task. They are usually used as a factory, to decouple the users of a service from a particular implementation. For example, a compiler registry may store all the compiler implementations available and provide a default one. A registry allows users to subscribe and unsubscribe services into it. For example, when a notification has to be shown to the end user, the UIManager registry decides how to show it according to its registered providers: either by using the standard output or the graphical user interface. Pharo uses registries to manage different kind of concerns such as the compiler suite, the fonts or the UI interactions.

Session Specific State. Session specific state is the global state that is tied to a particular session e.g., information gathered from the current platform, file handles and library handles. This state should be reinitialized or reset when a new session is started either in a new machine or a different one, to avoid misbehaviors and unexpected errors.

Process Controllers. Process controllers manage the life cycle of well known processes such as the idle process, the user interface (UI) process or the low space watcher process. They control how and when these well known processes are started, terminated, suspended and resumed.

Finalizables. Resources external to the language, such as files, sockets, or handles to external libraries, must be finalized accordingly when they are garbage collected or new session are started. For such a task, the classes of those objects implement a finalization mechanism to be aware of garbage collections and handle such situations.

Graphical Resources. Graphical resources are objects such as images, fonts, icons or bitmaps. These resources are embedded in the system using the global state constructs. As such, there is no general solution to discard them or reload them.

Results and Discussion of Impact

Table 1 lists the results of applying each of our categories to our set of individuals under study: how many of them apply to each category. The details of such a classification can be found in the Appendix A. These results present some particularities we should take into account before doing a deep analysis. First, the number of detected graphical resources does not really represent the reality. A lot of graphical resources are represented as byte arrays in method literals (which we did not measure because of its complexity). With respect to the numbers in our results, we can argue that they give us an idea of the impact produced by each category i.e., code-migration libraries have to potentially handle each appearance of these patterns in an ad-hoc fashion, since they are not explicit in the source code. For example, if we would decide that on serialization all caches should be flushed, we must add custom code to handle each of the 43 caches.

Discussion: a need for Reification

Bouraqadi et al. [? ?

] presented already the need for the reification of resources used in a mobile code. The reification of resources provide support for an open architecture and facilitates the task of object migration. They also make explicit the concepts that are part of the program, providing with information the system can benefit from. We identify in particular the need for reification of the following elements part of our categories:

Processes. Pharo processes, although they are already objects, are managed from other objects. Process specific state is controlled by objects other than the process itself, breaking encapsulation. As such, the life-cycle of processes are tied to those objects that create them or keep their state. A first class representation of processes, on the other hand, will encapsulate the process specific state, avoid conflicts on its access, and provide a common interface for their manipulation.

Finalizables. First class finalizable resources provide a framework supporting uniform finalization and resource deallocation.

Caches. First class caches provide a uniform and complete implementation of caches libraries can rely upon. Additionally they will enable the system with introspection and self-modification of such caches.

Variables. First class variables, namely slots, were sketched by Verwaest et al.

[? ] and a first version introduced into Pharo 3.0. Slots introduce the ability to refine instance variables, give them specific behavior and annotate them with meta-information. Specialized slots can be used to implement e.g., session specific state, constant values or settings.

Using explicit metaclasses.

Finding all singletons installed in the system could be easily achieved through the usage of explicit metaclasses [? ] or traits [? ]. Explicit metaclasses and traits allow the sharing of behavior between classes, and thus, they eliminate the need for ad-hoc implementations of e.g., singletons. Additionally, reifying the singleton abstraction in the language, provides with the ability to query and act upon the installed singletons. Implementing them with traits, however, presents as main limitation that the current trait implementation in Pharo is stateless. Thus, it does not allow to express class variables to hold the singleton instance.

Discussion: Moving responsibilities to the language runtime

Within our classification, we understand there are some concerns that should be moved under the umbrella of the language or its runtime system. The language may provide its own abstractions for recurrent problems such as caching or registering services. This will provide with the proper and needed meta-information to handle services. Additionally, providing end users with correct and complete implementations will avoid the ad-hoc implementations with repeated logic.

Resource manager

As we noted in the results, graphical resources such as images, icons and fonts are present as globally accessible resources in Pharo. We can add also that Pharo's memory is occupied in great percentage by instantiated bitmaps 1 [? ].

There is not, however, a possibility to inspect all available resources, understand their origin (the package, class and method that defines them), or recreate them from files. This poses the need for a resource manager.

A sketch implementation of such a resource manager was implemented as a in-memory file system. In such a prototype, each Pharo package contains an associated file system that stores resources of that package. Images, icons, configuration files, and other files are stored in this file system. Package resources can be accessed from within and outside the package in an structured way, and serialized along with its package.

Session manager

How session specific state is handled nowadays denotes the need for a session manager. Currently, in the presence of session specific state, the class that stores it has to be subscribed to the startup and shutdown events of the runtime system. These two events are used to reset and initialize the class state when a new session is started.

We sketched a session manager to ease the management of session specific state. First class instance variables (Slots) describe declaratively their initialization when a new session is started. Then, during the startup of a new session, the session manager will reinitialize each of these slots using their description. This session manager encapsulates the need for the startup and shutdown lists, and removes such responsibility from the developer. et al. [? ] present also a classification of the state of mobile systems, but using as criteria the strategy used for migration. As such, their classification is orthogonal and complementary to ours. They present two properties to characterize the data to migrate 1 24.50% according to our measures in latest Pharo version Transferrable. A transferrable element is the one that can be physically migrated e.g., a file. Oppositely, a non transferrable one is the one that cannot be migrated, e.g., as a printer.

Related Work

Fuggetta

Desirability to transfer it. An application can mark some data as fixed or free according to its needs. Fixed data is associated permanently with its original environment, while free data migration is allowed.

and three ways to bind an application to a given resource By identifier. Resources binded by identifier are tied with a particular instance of a resource e.g., a socket. When a program is migrated, all its resources binder by identifier are kept in their original environment. A network communication is enforced between them.

By value. Resources binded by value are interested in the value of a resource and not in their identity, e.g., the contents of a file. These kind of resources can be copied along with the program upon migration.

By type. Resources binded by type are intended to provide some kind of service despite their value or identity e.g., a display. These kind of resources are rebinded to local resources of the same type after migration.

Ungar et al. implemented a transporter for the Self programming language [? ]. This transporter had to deal with many of the difficulties we presented above, in particular the lack of explicit usage information. They provided a generic solution to the problem: let the developer annotate the objects' slots to guarantee the desired state of the program upon a migration. However, a question remained: How should developers annotate the slots? To answer this question, they provided with a series of properties that must help in such analysis.

Does identity matter?

The developer has to identify those objects whose identity matters, and those whose it doesn't. When identity matters, the transporter must ensure that references to the same object are kept the same after migration. When it does not, the transporter can simply duplicate the object.

An initial value must always be enforced? Some objects must be reinitialized every time they are migrated. This is for example the case of caches.

An object must be written in an abstract or concrete way? Some objects can be rebuilt as the result of an expression, while some others must be built by concretely enumerating its slots.

Conclusion and Future Work

In this paper we studied the usage of global state in Pharo.

The study of global state is interesting since references kept from global state are persisted in image-based systems. Global state is also a concern in when working in code mobility because resources globally available must be reinitialized or rebinded when code is migrated. We present a classification of Pharo's global state based on its usage, and found many patterns that are recurrent in the kernel of the language, though not explicit in the code.We discuss how to make explicit these patterns so the language kernel can benefit from it, either by reifying them or moving some responsibilities to the language kernel. This work is a first step to prepare Pharo to the mobile code world. To be able to transport Pharo programs either in time or space, the abstractions we found should be made explicit in the language, and so, libraries and frameworks can take advantage of them. As future work we also consider that the discussed sketches have to be iterated and developed further.

AJx86Registers -> #MM6 AJx86Registers -> #MM7 AJx86Registers -> #R10 AJx86Registers -> #R10B AJx86Registers -> #R10D AJx86Registers -> #R10W AJx86Registers -> #R11 AJx86Registers -> #R11B AJx86Registers -> #R11D AJx86Registers -> #R11W AJx86Registers -> #R12 AJx86Registers -> #R12B AJx86Registers -> #R12D AJx86Registers -> #R12W AJx86Registers -> #R13 AJx86Registers -> #R13B AJx86Registers -> #R13D AJx86Registers -> #R13W AJx86Registers -> #R14 AJx86Registers -> #R14B AJx86Registers -> #R14D AJx86Registers -> #R14W AJx86Registers -> #R15 AJx86Registers -> #R15B AJx86Registers -> #R15D AJx86Registers -> #R15W AJx86Registers -> #R8 AJx86Registers -> #R8B AJx86Registers -> #R8D AJx86Registers -> #R8W AJx86Registers -> #R9 AJx86Registers -> #R9B AJx86Registers -> #R9D AJx86Registers -> #R9W AJx86Registers -> #RAX AJx86Registers -> #RBP AJx86Registers -> #RBX AJx86Registers -> #RCX AJx86Registers -> #RDI AJx86Registers -> #RDX AJx86Registers -> #RIP AJx86Registers -> #RSI AJx86Registers -> #RSP AJx86Registers -> #SI AJx86Registers -> #SIL AJx86Registers -> #SP AJx86Registers -> #SPL AJx86Registers -> #ST0 AJx86Registers -> #ST1 AJx86Registers -> #ST2 AJx86Registers -> #ST3 AJx86Registers -> #ST4 AJx86Registers -> #ST5 AJx86Registers -> #ST6 AJx86Registers -> #ST7 AJx86Registers -> #XMM0 AJx86Registers -> #XMM1 AJx86Registers -> #XMM10 AJx86Registers -> #XMM11 13 2014/8/19 AJx86Registers -> #XMM12 AJx86Registers -> #XMM13 AJx86Registers -> #XMM14 AJx86Registers -> #XMM15 AJx86Registers -> #XMM2 AJx86Registers -> #XMM3 AJx86Registers -> #XMM4 AJx86Registers -> #XMM5 AJx86Registers -> #XMM6 AJx86Registers -> #XMM7 AJx86Registers -> #XMM8 AJx86Registers -> #XMM9 AsyncFile -> #Busy AsyncFile -> #ErrorCode AthensBezierConverter -> #CollinearityEps AthensBezierConverter -> #CurveAngleTolerance AthensBezierConverter -> #DistanceEps AthensCairoDefs -> #CAIRO_ANTIALIAS_BEST AthensCairoDefs -> #CAIRO_ANTIALIAS_DEFAULT AthensCairoDefs -> #CAIRO_ANTIALIAS_FAST AthensCairoDefs -> #CAIRO_ANTIALIAS_GOOD AthensCairoDefs -> #CAIRO_ANTIALIAS_GRAY AthensCairoDefs -> #CAIRO_ANTIALIAS_NONE AthensCairoDefs -> #CAIRO_ANTIALIAS_SUBPIXEL AthensCairoDefs -> #CAIRO_EXTEND_NONE AthensCairoDefs -> #CAIRO_EXTEND_PAD AthensCairoDefs -> #CAIRO_EXTEND_REFLECT AthensCairoDefs -> #CAIRO_EXTEND_REPEAT AthensCairoDefs -> #CAIRO_FONT_SLANT_ITALIC AthensCairoDefs -> #CAIRO_FONT_SLANT_NORMAL AthensCairoDefs -> #CAIRO_FONT_SLANT_OBLIQUE AthensCairoDefs -> #CAIRO_FONT_TYPE_FT AthensCairoDefs -> #CAIRO_FONT_TYPE_QUARTZ AthensCairoDefs -> #CAIRO_FONT_TYPE_TOY AthensCairoDefs -> #CAIRO_FONT_TYPE_USER AthensCairoDefs -> #CAIRO_FONT_TYPE_WIN32 AthensCairoDefs -> #CAIRO_FONT_WEIGHT_BOLD AthensCairoDefs -> #CAIRO_FONT_WEIGHT_NORMAL AthensCairoDefs -> #CAIRO_FORMAT_A1 AthensCairoDefs -> #CAIRO_FORMAT_A8 AthensCairoDefs -> #CAIRO_FORMAT_ARGB32 AthensCairoDefs -> #CAIRO_FORMAT_INVALID AthensCairoDefs -> #CAIRO_FORMAT_RGB16_565 AthensCairoDefs -> #CAIRO_FORMAT_RGB24 AthensCairoDefs -> #CAIRO_HINT_METRICS_DEFAULT AthensCairoDefs -> #CAIRO_HINT_METRICS_OFF AthensCairoDefs -> #CAIRO_HINT_METRICS_ON AthensCairoDefs -> #CAIRO_HINT_STYLE_DEFAULT AthensCairoDefs -> #CAIRO_HINT_STYLE_FULL AthensCairoDefs -> #CAIRO_HINT_STYLE_MEDIUM AthensCairoDefs -> #CAIRO_HINT_STYLE_NONE AthensCairoDefs -> #CAIRO_HINT_STYLE_SLIGHT AthensCairoDefs -> #CAIRO_LINE_CAP_BUTT AthensCairoDefs -> #CAIRO_LINE_CAP_ROUND AthensCairoDefs -> #CAIRO_LINE_CAP_SQUARE AthensCairoDefs -> #CAIRO_LINE_JOIN_BEVEL AthensCairoDefs -> #CAIRO_LINE_JOIN_MITER AthensCairoDefs -> #CAIRO_LINE_JOIN_ROUND AthensCairoDefs -> #CAIRO_OPERATOR_ADD AthensCairoDefs -> #CAIRO_OPERATOR_ATOP AthensCairoDefs -> #CAIRO_OPERATOR_CLEAR AthensCairoDefs -> #CAIRO_OPERATOR_COLOR_BURN AthensCairoDefs -> #CAIRO_OPERATOR_COLOR_DODGE AthensCairoDefs -> #CAIRO_OPERATOR_DARKEN AthensCairoDefs -> #CAIRO_OPERATOR_DEST AthensCairoDefs -> #CAIRO_OPERATOR_DEST_ATOP AthensCairoDefs -> #CAIRO_OPERATOR_DEST_IN AthensCairoDefs -> #CAIRO_OPERATOR_DEST_OUT AthensCairoDefs -> #CAIRO_OPERATOR_DEST_OVER AthensCairoDefs -> #CAIRO_OPERATOR_DIFFERENCE AthensCairoDefs -> #CAIRO_OPERATOR_EXCLUSION AthensCairoDefs -> #CAIRO_OPERATOR_HARD_LIGHT AthensCairoDefs -> #CAIRO_OPERATOR_HSL_COLOR AthensCairoDefs -> #CAIRO_OPERATOR_HSL_HUE AthensCairoDefs -> #CAIRO_OPERATOR_HSL_LUMINOSITY AthensCairoDefs -> #CAIRO_OPERATOR_HSL_SATURATION AthensCairoDefs -> #CAIRO_OPERATOR_IN AthensCairoDefs -> #CAIRO_OPERATOR_LIGHTEN AthensCairoDefs -> #CAIRO_OPERATOR_MULTIPLY AthensCairoDefs -> #CAIRO_OPERATOR_OUT AthensCairoDefs -> #CAIRO_OPERATOR_OVER AthensCairoDefs -> #CAIRO_OPERATOR_OVERLAY AthensCairoDefs -> #CAIRO_OPERATOR_SATURATE AthensCairoDefs -> #CAIRO_OPERATOR_SCREEN AthensCairoDefs -> #CAIRO_OPERATOR_SOFT_LIGHT AthensCairoDefs -> #CAIRO_OPERATOR_SOURCE AthensCairoDefs -> #CAIRO_OPERATOR_XOR AthensCairoDefs -> #CAIRO_STATUS_CLIP_NOT_REPRESENTABLE AthensCairoDefs -> #CAIRO_STATUS_DEVICE_ERROR AthensCairoDefs -> #CAIRO_STATUS_DEVICE_TYPE_MISMATCH AthensCairoDefs -> #CAIRO_STATUS_FILE_NOT_FOUND AthensCairoDefs -> #CAIRO_STATUS_FONT_TYPE_MISMATCH AthensCairoDefs -> #CAIRO_STATUS_INVALID_CLUSTERS AthensCairoDefs -> #CAIRO_STATUS_INVALID_CONTENT AthensCairoDefs -> #CAIRO_STATUS_INVALID_DASH AthensCairoDefs -> #CAIRO_STATUS_INVALID_DSC_COMMENT AthensCairoDefs -> #CAIRO_STATUS_INVALID_FORMAT AthensCairoDefs -> #CAIRO_STATUS_INVALID_INDEX AthensCairoDefs -> #CAIRO_STATUS_INVALID_MATRIX AthensCairoDefs -> #CAIRO_STATUS_INVALID_PATH_DATA AthensCairoDefs -> #CAIRO_STATUS_INVALID_POP_GROUP AthensCairoDefs -> #CAIRO_STATUS_INVALID_RESTORE AthensCairoDefs -> #CAIRO_STATUS_INVALID_SIZE AthensCairoDefs -> #

1

  WeakIdentityKeyDictionary

Figure 1 .

 1 Figure 1. Simplified code of Pharo's AST cache.

Figure 2 .

 2 Figure 2. Code of Pharo's Help Icon class with an icon cache.

5. 1

 1 Concepts to Reify in Pharo.

  Configurable Default Values. Settings and configurable default values provide a single point to configure and share values amongst several instances. They are publicly accessible so they can be modified and customized by developers. Pharo uses settings to store for example maximum size of UI widgets, code completion configurations and network configurations.

Singletons. Singletons are well known objects globally accessible in the system [? ? ]. They are used to provide a single access point to some shared state or behavior. Pharo presents several different singleton implementations: global leaf objects (not classes nor traits) such as e.g., the Processor or the Transcript, leaf objects stored in class variables or class instance variables often accessible through the uniqueInstance message, and some classes which are indeed used as singletons.

Table 1 .

 1 Amount of individuals classified under each of the identified categories.

	Category	Amount satifying
	Constants	1722
	Settings and	236
	Configurable Default Values
	Singletons	65
	Graphical Resources*	47
	Caches	43
	Registries	31
	Session Specific	27
	Process Controllers	11
	Finalizables	6

2014/8/19

2014/8/19

2014/8/19

2014/8/19

2014/8/19

2014/8/19

2014/8/19

2014/8/19

2014/8/19

2014/8/19

2014/8/19

2014/8/19

2014/8/19

2014/8/19

Acknowledgements

This work was supported by Ministry of Higher Education and Research, Nord-Pas de Calais Regional Council, FEDER through the 'Contrat de Projets Etat Region (CPER) 2007-2013', the Cutter ANR project, ANR-10-BLAN-0219 and the MEALS Marie Curie Actions program FP7-PEOPLE-2011-IRSES MEALS.

HACCEL NBWinTypes -> #HALF_PTR NBWinTypes -> #HANDLE NBWinTypes -> #HBRUSH NBWinTypes -> #HCOLORSPACE NBWinTypes -> #HCONV NBWinTypes -> #HCONVLIST NBWinTypes -> #HCURSOR NBWinTypes -> #HDC NBWinTypes -> #HDDEDATA NBWinTypes -> #HDESK NBWinTypes -> #HDROP NBWinTypes -> #HDWP NBWinTypes -> #HENHMETAFILE NBWinTypes -> #HFILE NBWinTypes -> #HFONT NBWinTypes -> #HGDIOBJ NBWinTypes -> #HGLOBAL NBWinTypes -> #HHOOK NBWinTypes -> #HICON NBWinTypes -> #HINSTANCE NBWinTypes -> #HKEY NBWinTypes -> #HKL NBWinTypes -> #HLOCAL NBWinTypes -> #HMENU NBWinTypes -> #HMETAFILE NBWinTypes -> #HMODULE NBWinTypes -> #HMONITOR NBWinTypes -> #HPALETTE NBWinTypes -> #HPEN NBWinTypes -> #HRESULT NBWinTypes -> #HRGN NBWinTypes -> #HRSRC NBWinTypes -> #HSZ NBWinTypes -> #HWINSTA NBWinTypes -> #HWND NBWinTypes

WPARAM NativeBoostConstants -> #ErrInvalidPlatformId NativeBoostConstants -> #ErrInvalidPrimitiveVoltageUse NativeBoostConstants -> #ErrNoNBPrimitive NativeBoostConstants -> #ErrNoNativeCodeInMethod NativeBoostConstants -> #ErrNotEnabled ThumbnailMorph -> #EccentricityThreshhold ThumbnailMorph -> #RecursionMax Transcripter -> #Icon TransferMorph -> #CopyPlusIcon UCSTable -> #GB2312Table UCSTable -> #JISX0208Table UCSTable -> #KSX1001Table UCSTable -> #Latin1Table Unicode -> #Cc Unicode -> #Cf Unicode -> #Cn Unicode -> #Co Unicode -> #Cs Unicode -> #DecimalProperty Unicode -> #GeneralCategory Unicode -> #Ll Unicode -> #Lm Unicode -> #Lo Unicode -> #Lt Unicode -> #Lu Unicode -> #Mc Unicode -> #Me Unicode -> #Mn Unicode -> #Nd Unicode -> #Nl

HashTableSizes -> #sizes IRBytecodeGenerator -> #BytecodeTable IRBytecodeGenerator -> #Bytecodes IRBytecodeGenerator -> #SpecialConstants IRBytecodeGenerator -> #SpecialSelectors ISOLanguageDefinition -> #ISO2Countries


A Chouippe

E Climent

) D Legendre

C Gabillet

Numerical simulation of bubble dispersion in turbulent Taylor-Couette flow

Keywords: numbers: 47.55.dd, 47.27.E-, 47.27.nb Bubbles, Taylor-Couette, turbulence, Numerical simulation, Lagrangian tracking

We investigate bubble dispersion in turbulent Taylor-Couette flow. The aim of this study is to describe the main mechanisms yielding preferential bubble accumulation in near-wall structures of the flow. We first proceed to direct numerical simulation of Taylor-Couette flows for three different geometrical configurations (three radius ratios η = R 1 /R 2 : η = 0.5, η = 0.72 and η = 0.91 with the outer cylinder at rest) and Reynolds numbers corresponding to turbulent regime ranging from 3000 to 8000. The statistics of the flow are discussed using two different averaging procedures that permit to characterize the mean azimuthal velocity, the Taylor vortices contribution and the small-scale turbulent fluctuations. The simulations are compared and validated with experimental and numerical data from literature. The second part of this study is devoted to bubble dispersion. Bubble accumulation is analyzed by comparing the dispersion obtained with the full turbulent flow field to bubble dispersion occurring at lower Reynolds numbers in previous works. Several patterns of preferential accumulation of bubbles have been observed depending on bubble size and the effect of gravity. For the smaller size considered, bubbles disperse homogeneously throughout the gap, while for the larger size they accumulate along the inner wall for the large gap width (η = 0.5). Varying the intensity of buoyancy yields complex evolution of the bubble spatial distribution. For low gravity effect, bubble entrapment is strong leading to accumulation along the inner wall in outflow regions (streaks of low wall shear stress). When buoyancy effect dominates on vortex trapping, bubbles rise through the vortices while spiral patterns stretched along the inner cylinder are clearly identified. Force balance is analyzed to identify dominating forces leading to this accumulation and accumulation patterns are compared with previous experiments.

I. INTRODUCTION

The flow between two rotating concentric cylinders has many industrial applications due to its simple conception and the well controlled shear stress. Applications of multiphase flows in such device are for example liquid-liquid extraction, biological or chemical reactors.

a) Present address: Institute for Hydromechanics, Karlsruhe Institute of Technology (KIT), Karlsruhe, Germany b) Electronic mail: eric.climent@imft.fr It is also an academic configuration to investigate the effect of successive flow instabilities on the dispersion of bubbles or particles. The aim of our study is to use numerical simulation to evidence major mechanisms leading to bubble accumulation in the Taylor-Couette turbulent regime. The geometry of the Taylor-Couette device is characterized by two dimensionless parameters: the radius ratio η = R 1 /R 2 , and the aspect ratio Γ = L ax /(R 2 -R 1 ) where R 1 , R 2 and L ax are the inner cylinder radius, outer cylinder radius and height of the cylinders, respectively (see fig. 1). When the outer cylinder is fixed, the Reynolds number

 1 R 1 R 2 L ax FIG.
1. Geometric configuration of the Taylor-Couette device characterizing the flow dynamics is based on the velocity of the inner cylinder U 1 = R 1 Ω 1 , the gap width, and the kinematic viscosity of the fluid ν:

Re = U 1 (R 2 -R 1 ) ν (1)
Taylor-Couette flow experiences successive hydrodynamic instabilities for increasing Re. For low Reynolds numbers the flow is purely azimuthal, and can be solved analytically, e.g. Couette flow. For increasing Reynolds numbers different regimes appear : the first one is the Taylor Vortex Flow regime (TVF), characterized by toroidal steady counter-rotating vortices with an axial periodicity [START_REF] Davey | The growth of Taylor vortices in flow between rotating cylinders[END_REF] . Then the Wavy Vortex Flow (WVF), Modulated Wavy Vortex Flow (MWVF), Turbulent Taylor Vortex Flow (TTVF), and chaotic Turbulent Flow occur successively at higher Reynolds numbers [START_REF] Andereck | Flow regimes in a circular Couette system with independently rotating cylinders[END_REF] . The transition to turbulence has been studied [START_REF] Gollub | Onset of turbulence in a rotating fluid[END_REF] , with a specific emphasis on the evolution of energy spectra. The fully turbulent regime was also investigated [START_REF] Lathrop | Transition to shear-driven turbulence in Couette-Taylor flow[END_REF] . In our study, we focus on the TTVF regime, which is characterized by the superposition of three distinct contributions as previously discussed [START_REF] Dong | Direct numerical simulation of turbulent Taylor-Couette flow[END_REF][START_REF] Bilson | Direct numerical simulation of turbulent Taylor-Couette flow[END_REF] : the azimuthal flow driven by the rotation of the inner cylinder, large scale Taylor Vortices and small scale turbulent fluctuations. The presence of Taylor Vortices induces the development of two jets (outflow and inflow), respectively directed towards the outer and the inner cylinders. The other specificity of turbulent Taylor-Couette flows is its near-wall turbulence structure composed of small-scale herringbone-like streaks observed experimentally [START_REF] Barcilon | Marginal instability in Taylor-Couette flows at a very high Taylor number[END_REF] and numerically [START_REF] Dong | Herringbone streaks in Taylor-Couette turbulence[END_REF] .

The turbulent Taylor-Couette flow is an interesting configuration to study bubble dispersion, since it is made of distinct structures (large and small scale structures). The interaction between bubbles and large scale vortices has already been investigated [START_REF] Sridhar | Effect of entrained bubbles on the structure of vortex rings[END_REF][START_REF] Ferrante | On the effects of microbubbles on Taylor-Green vortex flow[END_REF][START_REF] Climent | Dynamics of two-dimensional upflowing mixing layer seeded with bubbles: Bubble dispersion and effect of two-way coupling[END_REF] . Studies of the interaction between bubbles and a turbulent flow has been carried out in homogeneous isotropic turbulence [START_REF] Mazzitelli | The effect of microbubbles on developped turbulence[END_REF] and in turbulent channel flow [START_REF] Molin | Turbulence modulation and microbubble dynamics in vertical channel flow[END_REF] . It appears that bubbles accumulate in low-pressure and high vorticity regions of the flow.

To our knowledge, four research groups have been very active to study experimentally bubble dispersion in Taylor-Couette configuration: Research Institute of French Naval Academy [START_REF] Djeridi | Bubble capture and migration in Couette-Taylor flow[END_REF][START_REF] Djeridi | Two-phase Couette-Taylor flow: Arrangement of the dispersed phase and effects on the flow structures[END_REF][START_REF] Mehel | Analysis of the flow pattern modifications in a bubbly Couette-Taylor flow[END_REF] , University of Maryland [START_REF] Van Den | Drag reduction in Bubbly Taylor-Couette Turbulence[END_REF][START_REF] Van Den | Bubbly turbulent drag reduction is a boundary layer effect[END_REF] , the Hokkaido University [START_REF] Murai | Frictional drag reduction in bubbly Couette-Taylor flow[END_REF][START_REF] Watamura | Intensified and attenuated waves in a microbubble taylor-couette flow[END_REF] , and the University of Twente [START_REF] Van Gils | The Twente Turbulent Taylor-Couette (T3C) facility : Strongly turbulent (multiphase) flow between two independently rotating cylinders[END_REF][START_REF] Van Gils | The importance of bubble deformability for strong drag reduction in bubbly turbulent taylor-couette flow[END_REF] . Table I gives the geometric characteristics of this different devices, and the ranges of Reynolds number which have been considered in the corresponding experiments.

Device η Γ Re Research Institute of French Naval Academy [START_REF] Djeridi | Bubble capture and migration in Couette-Taylor flow[END_REF][START_REF] Djeridi | Two-phase Couette-Taylor flow: Arrangement of the dispersed phase and effects on the flow structures[END_REF] 0.85 20 -22 0 → 4000 Research Institute of French Naval Academy [START_REF] Mehel | Analysis of the flow pattern modifications in a bubbly Couette-Taylor flow[END_REF] 0.9 40 2500 → 3.10 4 Hokkaido University [START_REF] Murai | Frictional drag reduction in bubbly Couette-Taylor flow[END_REF][START_REF] Watamura | Intensified and attenuated waves in a microbubble taylor-couette flow[END_REF] 0.83 20 600 → 4500 University of Maryland [START_REF] Van Den | Drag reduction in Bubbly Taylor-Couette Turbulence[END_REF] 0.72 11.5 2.10 5 → 10 6 University of Twente [START_REF] Van Den | Bubbly turbulent drag reduction is a boundary layer effect[END_REF][START_REF] Van Gils | The Twente Turbulent Taylor-Couette (T3C) facility : Strongly turbulent (multiphase) flow between two independently rotating cylinders[END_REF] 0.716 11.68 2.10 5 → 2.10 6 TABLE I. Geometric parameters of some bubbly Taylor-Couette devices.

Early studies at IRENav were concerned with TVF, WVF, MWVF and weakly turbulent regimes for gaseous cavitation and ventilation. First measurements were used to quantify the influence of bubbles on the velocity field, and the accumulation patterns of the dispersed phase for different bubble sizes [START_REF] Djeridi | Two-phase Couette-Taylor flow: Arrangement of the dispersed phase and effects on the flow structures[END_REF] . They observed axial deformation of Taylor vortices and an advance of the transition to MWVF. Bubbles were trapped by the large scale vortices for WVF while they were accumulating near the inner cylinder in outflow regions for MWVF. They observed that sub-millimetric bubbles are rather localized in the outflow region, while millimetric bubbles are trapped within the Taylor vortices (measurements of bubble concentration [START_REF] Mehel | Analysis of the flow pattern modifications in a bubbly Couette-Taylor flow[END_REF] support those observations). Accumulation in Taylor vortices leads to vorticity enhancement and a reduction of the axial wavelength. Accumulation near the inner cylinder wall increases near-wall velocity gradients in the outflow region.

Other studies had the objective to show if significant modifications of the flow can be achieved by bubble injection (namely, bubble drag reduction). Indeed drag reduction occurs in the MWVF and weakly turbulent regimes [START_REF] Murai | Frictional drag reduction in bubbly Couette-Taylor flow[END_REF] . Bubbly drag reduction was also investigated experimentally for higher Reynolds numbers at University of Maryland [START_REF] Van Den | Drag reduction in Bubbly Taylor-Couette Turbulence[END_REF][START_REF] Van Den | Bubbly turbulent drag reduction is a boundary layer effect[END_REF] and in the Twente Turbulent Taylor-Couette (T 3 C) system [START_REF] Van Den | Bubbly turbulent drag reduction is a boundary layer effect[END_REF][START_REF] Van Gils | The Twente Turbulent Taylor-Couette (T3C) facility : Strongly turbulent (multiphase) flow between two independently rotating cylinders[END_REF][START_REF] Van Gils | The importance of bubble deformability for strong drag reduction in bubbly turbulent taylor-couette flow[END_REF] . The T 3 C device enables to consider range of Reynolds numbers from 5.10 5 to 2.10 6 , and two different drag reduction regimes have been observed: moderate drag reduction for the lower Reynolds numbers and significant drag reduction for the largest. Void fraction measurements in the T 3 C highlighted preferential accumulation of bubbles near the inner cylinder. It appeared also that bubble deformability was crucial for viscous drag reduction at very high Reynolds numbers [START_REF] Van Den | Bubbly turbulent drag reduction is a boundary layer effect[END_REF][START_REF] Van Gils | The importance of bubble deformability for strong drag reduction in bubbly turbulent taylor-couette flow[END_REF] .

Numerical simulation was used for the study of bubble dispersion in order to analyze migration mechanisms in the TVF and WVF regimes [START_REF] Climent | Preferential accumulation of bubbles in Couette-Taylor flow patterns[END_REF] and also for considering bubble drag reduction [START_REF] Sugiyama | Microbubbly drag reduction in Taylor-Couette flow in the wavy vortex regime[END_REF] with results qualitatively consistent with the experiments of Murai et al. [START_REF] Murai | Frictional drag reduction in bubbly Couette-Taylor flow[END_REF] . Major results can be summarized as follows. Depending on the size of the bubbles, the rotation rate of the inner cylinder and the intensity of Taylor vortices, bubbles can either accumulate along the inner wall, be trapped in the vortices or in outflow regions. When wavy motion sets in, bubble initially accumulated as collars in toroidal vortices follow the azimuthal deformation of vortices and migrate towards the crests or throughs of the wave. When two-way coupling is enabled [START_REF] Sugiyama | Microbubbly drag reduction in Taylor-Couette flow in the wavy vortex regime[END_REF] , bubbles modify the vortex structure and may induce drag reduction due to upward flow perturbation. The aim of our study is to focus on passive bubble dispersion in the Taylor-Couette flows, and more specifically on the turbulent regime (Re ranging from 3000 to 8000), and analyze migration mechanisms by considering three geometric configurations η = 0.5 -0.72 -0.91.

The paper is organized as follows: in the first section we present the numerical method which has been used and validations with experiments or former simulations from the literature. In the second section, we detail the single-phase flow statistics and its spatial structure (large scale vortices and near-wall turbulent structures). The third part is concerned with bubble dispersion for different bubble size. Then, we propose a discussion on migration mechanisms that contribute to the dispersion.

II. DESCRIPTION OF THE CARRIER FLOW

In this section, we detail the simulation of the turbulent Taylor-Couette flows for singlephase configuration. The final objective is to perform a Direct Numerical Simulation (DNS) of the fluid coupled to Lagrangian tracking of the bubbles. We will first describe the numerical method, and then emphasize the major features characterizing the flow dynamics.

A. Numerical method and validations

The Taylor-Couette flow dynamics is computed by solving the full three-dimensional unsteady Navier-Stokes equations (equations 2,3) for a Newtonian fluid with constant physical properties. The equations are written in the conservative form. The code JADIM is based on a finite volume method, and the velocity and pressure (U,P ) are discretized on a staggered nonuniform cylindrical grid. The numerical code has been already used in laminar and turbulent configurations [START_REF] Climent | Preferential accumulation of bubbles in Couette-Taylor flow patterns[END_REF][START_REF] Legendre | The lift force on a spherical bubble in a viscous linear shear flow[END_REF][START_REF] Calmet | Statistical structure of high-reynolds number turbulence close to the free surface of an open-channel flow[END_REF] . The spatial derivatives are computed with second order accuracy, and temporal integration is achieved by a third order Runge-Kutta scheme and a semi-implicit Crank-Nicolson scheme for the viscous terms. Incompressibility is achieved by a projection method associated to a Poisson equation for the pressure correction. Time step is defined in order to have CFL lower than 1.

∇ • u = 0 (2) ∂u ∂t + ∇ • (uu) = - 1 ρ ∇P + ∇ • ν ∇u + (∇u) T + g (3)
Validations for different Taylor-Couette configurations have been carried out. We impose a constant velocity U 1 on the inner cylinder, and use periodic boundary conditions in the axial direction (so that the configuration is equivalent to infinite cylinders in the axial direction with a prescribed wavelength). Velocities are scaled with U 1 , distances with the radius of the outer cylinder R 2 . The reference time T Ω1 = 2πR 1 /U 1 (one revolution of the inner cylinder) has been chosen to describe unsteady features. Imposing periodic boundary conditions sets the number of Taylor vortices in the simulation domain, and then the wavelength λ has to be chosen properly. Linear stability analysis predicts that λ should be close to 2(R 2 -R 1 ) but different ratios λ/(R 2 -R 1 ) could be obtained by changing the acceleration rate during the transient regime [START_REF] Burkhalter | Steady supercritical Taylor vortex flow[END_REF][START_REF] Burkhalter | Steady supercritical Taylor vortices after sudden starts[END_REF] . History effects (increasing or decreasing Re) could have an influence on the selected wavelength of the flow [START_REF] Coles | Transition in circular Couette flow[END_REF] . We collected values of this ratio from different experimental studies in the literature (see figure 2). It appears that geometries with small gaps (η close to one) are more sensitive to the Reynolds number.

From the figure, λ ≈ 2(R 2 -R 1 ) seems to be a good estimate for large gap geometries for the range of Re considered in our study. The axial length we selected for our DNS are also reported in this figure .  A good compromise need to be determined between grid refinement for ensuring the DNS of the turbulent flow and the computational time necessarily to reach good convergence of the statistics. For this purpose, we focused on the large gap case (η = 0.5) for Re = 8000 in order to have a direct comparison with the DNS of Dong [START_REF] Dong | Direct numerical simulation of turbulent Taylor-Couette flow[END_REF] . The characteristics of the three grids tested are summarized in table II. We fixed λ/(R 2 -R 1 ) = 2.09 to match precisely Dong's study (which is a common value for large gap geometry according to figure 2).

We first compared the radial profile of the mean velocity < U > xθt (averaged in time and over the axial and azimuthal directions) with the corresponding simulation [START_REF] Dong | Direct numerical simulation of turbulent Taylor-Couette flow[END_REF] . The axial and radial components are close to zero, and the azimuthal component is not very sensitive to the [START_REF] Dong | Direct numerical simulation of turbulent Taylor-Couette flow[END_REF][START_REF] Bilson | Direct numerical simulation of turbulent Taylor-Couette flow[END_REF][START_REF] Murai | Frictional drag reduction in bubbly Couette-Taylor flow[END_REF][START_REF] Burkhalter | Steady supercritical Taylor vortices after sudden starts[END_REF][START_REF] Coles | Transition in circular Couette flow[END_REF][START_REF] Racina | Vermischung in Taylor-Couette Strömung[END_REF][START_REF] Mehel | Étude expérimentale d'un écoulement diphasique de Taylor Couette[END_REF][START_REF] Bouabdallah | Instabilités et turbulence dans l'écoulement de Taylor-Couette[END_REF][START_REF] Koschmieder | Turbulent Taylor Vortex Flow[END_REF][START_REF] Barcilon | Organized structures in turbulent Taylor-Couette flow[END_REF] ). Colors are related to three distinct ranges of gap width: grey for 0.5 < η < 0.75, black for 0.75 < η < 0.85 and light grey for 0.85 ≤ η. spatial discretisation as shown in fig. 3.a which is consistent with a similar observation on the torque. The evolution of the fluctuating velocity field defined as 3.b for the azimuthal velocity. This quantity is more sensitive to grid refinement, specially when considering the peak values close to the inner and outer walls. Fluctuation levels are larger with coarse grids due to inaccurate calculation at small scales of the dissipation, and we observe the convergence with a good agreement to the Dong's DNS for the finest mesh (which will be selected for the rest of our computations). For the other configurations, we based our criteria of mesh independence on the fluctuation statistics. We chose to simulate one single wavelength in the axial direction and set at least four points in the radial direction within the viscous sublayer r + ≤ 5. Table III summarizes the characteristics of the meshes used in the rest of our study. For the small gap geometry (η = 0.91), we chose an axial wavelength λ ≈ 3.1(R 2 -R 1 ), which is close to the prediction of the linear stability analysis 1 and also in agreement with experimental observations [START_REF] Mehel | Analysis of the flow pattern modifications in a bubbly Couette-Taylor flow[END_REF] . Finally, we report the comparison of our results with the correlation for the viscous torque 4.a indicating that for our Reynolds number range, a power scaling G ≈ Re 1.5 is a good compromise for the different radius ratios. Recent works [START_REF] Ostilla Monico | Optimal Taylor-Couette flow: radius ratio dependence[END_REF][START_REF] Merbold | Torque measurements and numerical determination in differentially rotating wide gap Taylor-Couette flow[END_REF] focused on the evolution of a Nusselt number N u ω for the general configuration where both cylinders can independently rotate. Nusselt number is defined for Taylor-Couette flows as the ratio between G and the dimensionless torque G lam associated to pure Couette flow: N u ω = G/G lam . Ostilla et al. [START_REF] Ostilla Monico | Optimal Taylor-Couette flow: radius ratio dependence[END_REF] observed a change in the local scaling for an approximate critical Taylor number T a ≈ 3.10 6 depending on the radius ratio. For small Reynolds numbers, they observed N u ω -1 ≈ T a 1/3 (i.e. ≈ Re 2/3 ). For moderate Reynolds numbers, the scaling law shifts to N u ω -1 ≈ T a 0.2 (i.e. ≈ Re 0.4 ). For high Reynolds numbers (Taylor numbers larger than 10 8 ), they obtained N u ω ≈ T a 0.38 (i.e. ≈ Re 0.76 ) referred as the ultimate regime which does not depend on the radius ratio. In the range of Reynolds numbers we studied, Merbold et al. [START_REF] Merbold | Torque measurements and numerical determination in differentially rotating wide gap Taylor-Couette flow[END_REF] proposed an evolution N u ω ≈ Re 0.62 very close to the scaling proposed by Ostilla et al. [START_REF] Ostilla Monico | Optimal Taylor-Couette flow: radius ratio dependence[END_REF] for the small Reynolds regime. In our study, different power scaling laws were tested and we obtain a good agreement with the evolution 0.04Re 0.617 as shown in fig. The TTVF regime is characterized by the development of turbulent structures and the persistence of the Taylor vortices. Isocontours of the fluid velocity highlight the presence of large scale Taylor vortices, that are modulated by small scale turbulent fluctuations (fig. 5).

U i = U i -< U i > xθt is shown in fig.

Mesh name

(a) 0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1 (r -R 1 )/(R 2 -R 1 ) < U θ > xθt Mesh 1 Mesh 2 Mesh 3 Dong (2007) (b) 0 0.2 0.4 0.6 0.8 1 0 0.05 0.1 0.15 0.2 (r -R 1 )/(R 2 -R 1 ) < (U ′ θ ) 2 > xθt Mesh 1 Mesh 2 Mesh 3 Dong (2007) 0 0.05 0.05 0.1 0.15 (r -R 1 )/(R 2 -R 1 ) < (U ′ θ ) 2
The numerical study of Dong 5 showed that increasing the Reynolds number enhances small scale fluctuations. This can be clearly observed in fig. 6 for η = 0.5 and three different Reynolds numbers. Same features of the flow were observed for another gap ratio [START_REF] Bilson | Direct numerical simulation of turbulent Taylor-Couette flow[END_REF] . Figure 7 shows those structures in our simulations for the smallest gap configuration (η = 0.91). It is also important to remind that the circulation of the Taylor vortices induces the presence of inflow and outflow jets impacting on walls.

(r -R 1 )/(R 2 -R 1 ) x/(R 2 -R 1 ) -0.2 -0.1 0 0.1 0.2 (b) 0 0.5 1 0 0.5 1 1.5 2 (r -R 1 )/(R 2 -R 1 ) x/(R 2 -R 1 ) -0.2 -0.1 0 0.1 0.2 (c) 0 0.5 1 0 0.5 1 1.5 2 (r -R 1 )/(R 2 -R 1 )
x/(R The general trend of the azimuthal component is similar for different Reynolds numbers and radius ratios (fig. 8). Varying Re or η mainly changes the slope in the near wall region and the amplitude of the velocity in the bulk of the fluid. In order to discuss the different contributions of the velocity field, we introduce two different averaging procedures [START_REF] Bilson | Direct numerical simulation of turbulent Taylor-Couette flow[END_REF] . We use the notation < • > xθt for an average calculated over the azimuthal and axial directions and time. The second one, < • > θt , corresponds to an average over the azimuthal direction and time only. Figure 9 presents isocontours of the velocity field < U > θt . It emphasizes the presence of large scale Taylor vortices. We also define two distinct fluctuations in order to describe the turbulent contribution to the flow:

u(x, r, θ, t) = < u > xθt (r) + u (x, r, θ, t) (4) u(x, r, θ, t) = < u > θt (x, r) + u (x, r, θ, t) (5)
Figure 10 shows the rms velocity profiles for the two averaging procedures. It appears that the fluctuations u are more intense than u which is consistent because Taylor vortices are accounted for in this definition of fluctuations. We also observe that the level of fluctuations u increases with the Reynolds number, while the level of u decreases. It implies that the relative importance of the Taylor vortices decreases with the Reynolds number in favor of the small scale fluctuations. The azimuthal component of u fluctuations behaves similarly as observed in a turbulent channel flow: the fluctuation level decreases with the Reynolds number, and the maximum of fluctuating energy comes closer to the wall. For Re ≥ 5000, the maximum of fluctuations is located at a distance from the inner wall r + 1 ≈ 10, which is slightly closer to the wall than for turbulent channel flows. The amplitude of the maximum

C. Description of the near wall region

We focus on the evolution of the velocity field in the near-wall region. The friction velocity is defined for each wall (i = 1 for inner cylinder and i = 2 for outer cylinder) u * i = |τ w,i |/ρ, where τ w,i is the wall shear stress [START_REF] Lathrop | Transition to shear-driven turbulence in Couette-Taylor flow[END_REF][START_REF] Bilson | Direct numerical simulation of turbulent Taylor-Couette flow[END_REF] . We also introduce the corresponding viscous length-scale δ * i = ν/u * i . The balance of the total shear stress τ tot averaged in the axial and azimuthal directions is given by This is consistent with the conservation of the mean transverse angular momentum [START_REF] Eckhardt | Torque scaling in turbulent Taylor-Couette flow between independently rotating cylinders[END_REF] leading to equality of the torques applied on the inner and outer cylinders. Turbulent shear stress is negligible in the near wall region, so that eq. 6 can be rewritten in the near-wall regions as:

τ tot (r) = ρνr ∂(< u θ > xθt /r) ∂r -ρ < u θ u r > xθt = cte r 2 (6)
ρνr ∂(< u θ > xθt /r) ∂r = cte r 2 = τ w1 R 2 1 r 2 = τ w2 R 2 2 r 2 . ( 7
)
Assuming r ≈ R i close to the corresponding wall, it follows from the integration of eq. 7 a linear evolution for the inner and outer velocities u i = U i -< u θ > xθt normalized by the friction velocity:

u + i = 1 + U i δ * i R i u * i r + i , (8)
An estimate based on the Wendt's correlation [START_REF] Wendt | Turbulente Strömungen zwischen zwei rotierenden konaxialen Zylindern[END_REF] of the ratio U 1 δ * 1 /R 1 u * 1 indicates that this term is much smaller than 1 for Re > 2000, so that the approximation As in turbulent channel flows, one can define a turbulent Reynolds numbers for each cylinder i as performed in the high Reynolds number regime 41 highlighted a linear evolution of the normalized azimuthal velocity similar to the u + = y + evolution observed for a turbulent channel flow (where y + is the dimensionless distance to the wall) and a logarithmic behavior for y + > 30. This linear evolution has also been numerically observed for smaller Reynolds numbers (Re ≈ 10 3 ) 6,40 , but the logarithmic evolution was not observed for Re * between 340 and 380 [START_REF] Pirrò | Direct numerical simulation of turbulent Taylor-Couette flow[END_REF] .

U 1 -< u θ > xθt ≈ u1 * δ1 * (r -R 1 )
Re * i = u * i (R 2 -R 1 )/ν.
Further from the wall, we have tested the validity of a logarithmic law (fig. 12) using the same fitting range as in the work of Huisman 42 (y + > 50). The slope is expected to be different from the results of Smith and Townsend 41 obtained for larger Reynolds numbers (Re ≈ 21000 -50000). Indeed, the ratio (R 2 -R 1 )/δ * 1 is close to 400 for our larger Reynolds number Re = 8000 while it is larger than 1000 in their experiments. Thus, we expect that the boundary layers attached to each cylinder are still interacting for the Reynolds numbers we considered, explaining why we did not observe a log-law with the Von Kàrman constant. We observe a law log(y + )/B with B varying from 1.37 for Re = 3000 to 0.68 for Re = 8000. This decrease of B when increasing Re is consistent with the experimental works of Huisman 42 , for which B 1.6 at the inner wall for Re 5000. They observe that B asymptotically approaches to the Von Kàrman constant for high Re. Recent works of Grossmann et al. [START_REF] Grossmann | Velocity profiles in strongly turbulent Taylor-Couette flow[END_REF] highlighted that log-law with a Von Kàrman constant is more appropriate for the radial evolution of the angular velocity ω than for the azimuthal velocity. The evolution of the angular velocity is presented in fig. 12.b . The constant B associated with angular velocity profiles varies from 0.71 for Re = 3000 to 0.45 for Re = 8000. Enhanced universality of the log-law is achieved with the angular velocity than with the azimuthal velocity. The dispersed phase is composed of N b clean spherical bubbles. Bubble trajectories are computed by time integration of the force balance, which accounts for buoyancy, drag, pressure gradient, added mass and lift forces. For each bubble of radius R b (and volume V b ), velocity v, the force balance can be written as a function of the velocity of the fluid u at the bubble location and its gradients:

ρ b V b dv dt = (ρ b -ρ f )V b g -ρ f V b 3 8R b C D |v -u|(v -u) + ρ f V b Du Dt +ρ f V b C M Du Dt - dv dt -ρ f V b C L (v -u) × Ω (9)
The bubble Reynolds number is defined as

Re b = |u -v| 2R b ν (10)
The added-mass coefficient for a spherical object [START_REF] Magnaudet | The motion of high-reynolds number bubbles in inhomogeneous flow[END_REF] is equal to C M = 1/2. The drag coefficient is given by [START_REF] Mei | A note on the history force on a spherical bubble at finite Reynolds number[END_REF] :

C D = 16 Re b   1 + 8 Re b + 1 2 1 + 3.315 Re 1/2 b -1   (11)
This correlation obtained thanks to DNS around a spherical bubble describes the drag coefficient whatever its Reynolds number. The lift coefficient is given by [START_REF] Legendre | The lift force on a spherical bubble in a viscous linear shear flow[END_REF] :

C L =   2.2555 × 6/π 2 (1 + 0.2(|v -u| 2 /Sν)) 3/2 ν Sd 2 b 1 2 2 + 1 2 1 + 16/Re b 1 + 29/Re b 2   1 2 (12)
which depends on the bubble Reynolds number and on the local shear rate intensity S = 2R b Ω / uv b . It has been shown that the force balance (9) combined with the added mass, drag and lift coefficients given above is able to correctly describe the force acting on a clean spherical bubble in a turbulent flow [START_REF] Merle | Forces on a high-re spherical bubble in a turbulent flow[END_REF] . Periodic conditions are imposed for the bubble trajectories at the upper and the bottom of the domain while an elastic bouncing is imposed on the inner and outer walls. The time integration of the force balance ( 9) is carried out for each bubble with a second-order Runge-Kutta scheme. For each time step of the temporal solution of Navier-Stokes equations, several time steps of the force balance integration are required. Indeed, Lagrangian tracking has its own time constraint dt ≈ τ b /5 where τ b = R 2 b /6ν is the bubble relaxation time. The fluid velocity as well as its spatial and time gradients need to be evaluated at the bubble location. Those Lagrangian quantities are interpolated with second order accuracy. The Lagrangian tracking has been widely used and validated [START_REF] Climent | Large-Scale Simulations of Bubble-Induced Convection in a Liquid Layer[END_REF][START_REF] Legendre | Influence of gravity upon the bubble distribution in a turbulent pipe flow: comparison between numerical simulations and experimental datas[END_REF] . For the present study, parallel computing of the Lagrangian equations was necessary in order to simulate large amount of bubbles, typically N b = O(10 6 ). When the flow has reached a statistical steady state for the considered Reynolds number, bubbles are seeded at random initial positions with velocity equal to the fluid velocity at the bubble locations.

The force balance used in the simulations is only valid for spherical bubbles. We validated this hypothesis a posteriori by measuring the bubble Weber number based on the instantaneous slip velocity or based on the turbulence fluctuations. Considering fluid properties corresponding to classic air/water systems, both Weber numbers were found to be much smaller than unity (typically lower than 10 -2 ).

B. Dispersion of bubbles in non-turbulent Taylor-Couette flows.

Climent et al. [START_REF] Climent | Preferential accumulation of bubbles in Couette-Taylor flow patterns[END_REF] proposed to consider two dimensionless parameters H and C to characterize the major migration mechanisms in Taylor vortex flows. Migration is dominated by three main effects: (i) the azimuthal rotation of the inner cylinder induces attraction towards the inner cylinder, (ii) the flow circulation within Taylor Vortices generates entrapment of bubbles in the vortex cores and (iii) buoyancy effects yield bubble rising through the flow structures. These effects are compared throughout the dimensionless parameters H and C:

C = U T V /V T ( 13
)
H = 4 U T V U 1 2 R 1 R 2 -R 1 ( 14
)
where U T V corresponds to a characteristic velocity of the Taylor Vortices and V T stands for the terminal velocity of the bubbles. Depending on the evolution of the (H, C) parameters, the following migration scenarii have been observed for Taylor vortex flows [START_REF] Climent | Preferential accumulation of bubbles in Couette-Taylor flow patterns[END_REF] . Accumulation in the axial direction can be explained as follows: a large value of parameter C implies small buoyancy effects and bubbles can be trapped within toroidal Taylor Vortices. On the contrary for small C values, related to high buoyancy effects, bubbles rise through the flow. Radial accumulation is then described using H parameter: a high H value indicates that bubbles are trapped in Taylor vortices, while a low value indicates that accumulation towards the inner cylinder is dominant. Three main scenarii are then obtained: for large C and H values bubbles are trapped within the Taylor vortices, for a large C and a small H bubbles are attracted towards the inner cylinder and accumulate preferentially in outflow regions, and finally for small C and large H values bubbles accumulate uniformly along the inner cylinder. It is important to note that C depends on both the characteristics of the carrier flow and the bubbles, while H only depends on the characteristics of the flow. The aim of this section is to study the relevance of these parameters on bubble dispersion for the turbulent regime. The evolution of H depending on the radius ratio and the Reynolds number is shown in fig. 13 for several geometric configurations. For turbulent flows, those dimensionless parameters are evaluated on the large-scale contributions of the flow. Two estimates of the characteristic velocity of Taylor Vortices U T V are shown for both radial and axial components. They give the same general trends: a decrease of H with the Reynolds number, and an increase of H for increasing η which implies that reducing the gap width should promote accumulation in Taylor Vortices. As discussed in the next section, this conclusion will be modulated by the presence of small-scale turbulent structures which tend to disperse bubbles throughout the gap between the cylinders. Table V reports the two-phase flow configurations we simulated. We are aiming to study the influence of the Reynolds number (through H variation), the bubble size by changing R b /R 2 , and the role of buoyancy effects by considering two different values of C. In experiments, these effects can hardly be tested independently since C depends both on gravity and bubble size (bubble size is controlled by the injection flow rate, the nozzle geometry and possibly the local shear rate which in turn depends on the flow Reynolds number). For all configurations the dispersed phase is composed of one million bubbles, but figures representing bubble positions display only 20000 bubbles in order to ease visualizations (typically fig. 14). Table V also gives an estimate of the Stokes numbers based on the characteristics of the inner cylinder wall turbulent scales St = τ b /(δ * 1 /u * 1 ). Our analysis is organized as follows: we will first present the general arrangement of the dispersed phase and the corresponding void fraction profiles. We will focus on cases without gravity effects (g = 0). Then, we describe the effect of gravity by varying C and finally we discuss the effects of the flow Reynolds number Re and the bubble size R b /R 2 .

C. Bubble accumulation without gravity effects

We first consider dispersion for case 1 corresponding to the largest bubbles considered with g = 0 (C = ∞), for Re = 5000 and η = 0.5 (see Table V). Bubble positions for successive times are presented in fig. 14. We observe for short times that most of the bubbles are transported from the outflow region towards the outer cylinder. Strong dispersion of bubbles follows. The rest of bubbles is attracted towards the inner cylinder.

Case Re R b /R2 (R2 -R1)/2R b 2R b /δ * 1 H C St1
For longer simulation times, bubbles are either concentrated in accumulation zones in the outflow region near the inner wall, or dispersed throughout the entire gap without any specific organization. The general trend is different for smaller bubbles (case 2) under the same H and C conditions (see fig. 15). We observe similar initial ejection at short times from the outflow region, but we do not observe any organization for longer times, neither in the gap nor in the near wall region of the inner cylinder. For cases with smaller Reynolds numbers (larger H value), large bubbles behave similarly (fig. 16): bubbles are initially ejected from the outflow regions and then dispersed in the flow, then attracted towards the inner cylinder and form collars in the outflow region. Therefore variations of H in the range of parameters we tested does not have a significant effect on the overall behavior of the dispersed phase. Focusing on bubbles located in the near-wall region, we do not observe any specific arrangement for small bubbles (case 2). On the contrary, the arrangement for larger bubble (cases 1 and 3) is strongly affected by the local flow structures as shown in fig. 17, for both Reynolds numbers. Indeed, bubbles are trapped in the herringbone-like structures close to the inner cylinder, more precisely in high speed streaks corresponding to strong ejection of high momentum fluid. Despite the analogies with turbulent channel flow discussed in section II, the Taylor-Couette configuration exhibits original structures like the herringbonelike streaks 7 near the inner cylinder wall (so called Görtler vortices). These structures have also been observed near the outer cylinder [START_REF] Wei | Görtler vortex formation at the inner cylinder in Taylor-Couette flow[END_REF] , and then numerically evidenced on both cylinders [START_REF] Dong | Herringbone streaks in Taylor-Couette turbulence[END_REF] . Increasing the Reynolds number also increases the number of herringbonelike streaks in this inflow-outflow regions 8 . More recently simulations at higher Reynolds numbers (Re ≈ 30000) highlighted again the presence of these herringbone-like streaks [START_REF] Brauckmann | Direct numerical simulations of local and global torque in taylorcouette flow up to re=30000[END_REF] . We show here that depending on the bubble size, these structures can have a significant effect on bubble preferential accumulation in the vicinity of the wall.

D. With gravity effects

The effect of gravity is now discussed by considering the case C ≈ 0.5: the terminal rising velocity of the bubbles is almost half of the characteristic velocity of Taylor vortices. We remind that periodic boundary conditions are used for the bubble and the flow equations, so that bubbles reaching the upper boundary are re-injected at the bottom of the domain with the same velocity and acceleration. Compared to case C = ∞ (g = 0), we observe a different response of the bubbly phase. The influence of the outflow jet is less pronounced as shown in fig. 18 and fig. 19 for both bubble size (cases 4 and 5, respectively). Initial ejection by the outflow jet is now weaker, which confirms that Taylor vortices have less influence and that bubble migration in the vertical direction is dominated by buoyancy. In the radial direction, bubbles are attracted towards the inner cylinder, as expected. For larger bubbles, the spatial arrangement does not match herringbone-like streaks but forms well defined spirals as shown in fig. 20. These spirals could be related to bubbly spiral patterns observed experimentally [START_REF] Murai | Frictional drag reduction in bubbly Couette-Taylor flow[END_REF] and reported in fig. 21. We estimated the value of C in these experiments and we found that our cases with C ≈ 0.5 should correspond in the experimental study to Reynolds numbers between Re = 600 and Re = 900, which is consistent with the accumulation patterns observed. Smaller bubbles (case 5 in fig. 19) seems to accumulate uniformly along the inner wall and we do not notice the formation of bubbly spirals in this region (fig. 20). To compare our results with experimental studies, we computed the local void fraction mapped on the Eulerian grid used to simulate the carrying flow. These void fraction profiles are averaged in the axial and azimuthal directions, but not in time. It is thus possible to observe their evolutions in time. In agreement with results discussed above, we observe in fig. 22 that volumetric concentration grows in the near wall region for large bubbles while for the small bubbles the void fraction becomes almost constant throughout the gap. Such bubbles clusters yielding a void fraction peak near the inner cylinder have already been experimentally observed [START_REF] Mehel | Analysis of the flow pattern modifications in a bubbly Couette-Taylor flow[END_REF][START_REF] Murai | Frictional drag reduction in bubbly Couette-Taylor flow[END_REF] for the same range of Reynolds numbers, and also at higher Reynolds numbers [START_REF] Van Gils | The importance of bubble deformability for strong drag reduction in bubbly turbulent taylor-couette flow[END_REF] . The major difference between our results and the experiments is the location of the accumulation peak, which is very close to the wall in our simulations compared to the experiments. This can be related to the assumption of pointwise bubbles in our simulations. Direct bubble interactions and collisions are neglected in our model which can lead to stronger accumulation than real finite size bubbles experiencing bouncing with neighbors. Those differences in concentration profiles could also be attributed to near-wall hydrodynamic effect. In order to discuss the radial migration, we consider the force balance in the radial direction:

(r -R 1 )/(R 2 -R 1 ) < ε d > xθ /ε glob t = 0 t = 1.1T Ω1 t = 4.3T Ω1 t = 19T Ω1 (b)
(ρ b + C M ρ f ) V b r - v 2 θ r = (1 + C M )ρ f V b Du r Dt + F L,r + F D,r (15)
For the comparison of the different contributions, we have selected case 1 corresponding to Re = 5000 and g = 0. Each contribution of the force balance (eq. 15) is averaged on the Eulerian mesh grid. These Eulerian force fields are obtained by averaging over time, azimuthal and axial directions the forces acting on bubbles at a considered radial location. The different contributions are shown in fig. 23. We clearly obtain a negative net balance which explains the strong attraction of bubbles towards the inner cylinder. Force balance is dominated by inertia (including added-mass) effects. This is driven by the azimuthal rotation of the fluid corresponding to the contribution - The averaged value is compared to instantaneous and local values of twenty selected bubbles. This force is the major contribution leading to the peak of bubble concentration near the inner cylinder. Realistic void fraction profiles seem then difficult to be numerically reproduced since this force always drives the bubbles towards the inner wall. Sugiyama et al. [START_REF] Sugiyama | Microbubbly drag reduction in Taylor-Couette flow in the wavy vortex regime[END_REF] have also observed those drawbacks of bubble pointwise assumption. They also gave some evidences that the bubble distribution near the wall is very sensitive to the lift force and its modeling.

(r -R 1 )/(R 2 -R 1 ) Σ F ρ f V b U 2 1 /R 1 ρ f V b (1 + C m ) Dur Dt + (ρ b + C m ρ f )V b u 2 θ r ρ f V b (1 + C m ) Dur Dt + (ρ b + C m ρ f )V b u 2 θ r + F d,r ρ f V b (1 + C m ) Dur Dt + (ρ b + C m ρ f )V b u 2 θ r + F d,r + F l,r
FIG. 23. Sum of radial components of forces experienced by bubbles in case 1 (forces are scaled by

(1 + Cm)V b ρ f U 2 1 /R1) (a) 0 0.2 0.4 0.6 0.8 1 -2 -1.5 -1 -0.5 0 0.5 1 1.5 (r -R 1 )/(R 2 -R 1 ) force -ρ f V b (1 + C m ) < u θ > 2 θxt /r ρ f V b (1 + C m ) Dur Dt (b) 0 0.05 0.1 0.15 -2 -1.5 -1 -0.5 0 0.5 1 1.5 (r -R 1 )/(R 2 -R 1 ) force -ρ f V b (1 + C m ) < u θ > 2 θxt /r ρ f V b (1 + C m ) Dur
f V b (1+Cm) < U θ > 2
xθt /r. The instantaneous evolution of this force is also presented for 20 bubbles as a function of their radial positions. All forces have been scaled by (

1 + Cm)V b ρ f U 2 1 /R1
Therefore, we performed additional simulations considering the normal wall correction F LW 51 in the force balance (eq. 9):

F LW = C LW πR 2 b ρ f U 2 LW 2 (16)
This force depends on the bubble distance to the wall and on the bubble drift velocity parallel to the wall U LW . The coefficient C LW is positive so that this force induces a repulsive contribution when the bubble approaches the wall. Those simulations have shown that this correction is not strong enough neither to shift the peak of accumulation away from the inner wall, nor to reduce the accumulation in the herringbone-like streaks. We did not observe inversion ot the motion due to the lift effect in constrast with numerical results of Giusti et al. [START_REF] Giusti | Influence of the lift force in direct numerical simulation of upward/downward turbulent channel flow laden with surfactant contaminated microbubbles[END_REF] and Molin et al. [START_REF] Molin | Turbulence modulation and microbubble dynamics in vertical channel flow[END_REF] in the channel flow configuration. For the range of parameters considered here, the radial motion in the Taylor-Couette flow is controlled by the inertia forces (added mass and pressure gradient) in balance with the drag force.

Considering bubble dispersion in a turbulent Taylor Couette flow, our simulations have shown a weak influence of the Reynolds numbers, but an important sensitivity to the bubble size. Reducing bubble size decreases accumulation in the near-wall region. An estimate of the Stokes numbers indicates that St ≈ 0.1 -0.2 for large bubbles (cases 1, 3 and 4) and St ≈ 2.10 -3 for small bubbles (cases 2 and 5). In this latter cases, the time scale of the dispersed phase is very short and small bubbles behave as passive tracers. They respond to small scale energetic fluctuations located around r + ≈ 10. This generates much turbulent dispersion. Additional simulations (not presented here) carried out with small bubbles for Re = 3000 and g = 0 have revealed similar trends to those observed for Re = 5000, i.e. no accumulation in the near-wall herringbone-like streaks and an important turbulent dispersion.

V. CONCLUSION

The first part of our study has consisted in simulating the Taylor-Couette flow in the Turbulent Taylor Vortex Flow regime, with three different geometries. We first validated our simulations by comparing statistics to the literature. After grid convergence tests we chose to focus on geometries with one wavelength λ in the axial direction. Bibliography study highlighted that λ mostly depends on the geometry and on the Reynolds number. Concerning the structure of the flow itself, we observed same trends as described in the literature namely the decomposition of the flow in three mains contributions: a main azimuthal flow driven by the rotation of the inner cylinder, counter-rotative Taylor-Vortices and small scale turbulent fluctuations. The relative amplitude of these three contributions mostly depends on the Reynolds number and the geometry. In the very near wall region, the flow presents similarities with turbulent channel flow such as the linear evolution u + = r + and radial evolution of rms velocities. But the main originality of the flow resides in the presence of the Taylor-Couette vortices inducing Inflow/Outflow regions and the development of streaks with herringbone-shape.

Simulations have been carried out within those regimes to study interaction mechanisms involved in bubble dispersion in Taylor-Couette flows. Bubble dispersion is the consequence of their interaction with these three main contributions of the flow. The rotation of the inner cylinder induces an important attraction towards the inner cylinder through inertia effects. Taylor Vortices have two influences: the outflow jet enhances the global dispersion in the bulk in the radial direction, and circulation of Taylor vortices modifies the migration of bubbles in the axial direction generating accumulation in outflow regions near the inner cylinder. This accumulation is evident for large bubbles (St ≈ 10 -1 and R b /δ * ≈ 1). Comparison between the influence of these three contributions shows that, for large gap (η = 0.5), it is the attraction towards the inner cylinder due to its rotation which is here predominant. We modified the force balance in the near wall region to account for particle/wall interaction through repulsive force model, and the force balance in the radial direction kept dominated by inertia induced attraction. Bubbles accumulate in herringbone-like high speed streaks near the inner cylinder. This accumulation along the inner cylinder was expected based on the relative values of the two dimensionless parameters C and H. Compared to bubble accumulation for lower Reynolds number flows (Taylor Vortex Flow or Wavy Vortex Flow), turbulent regime is characterised by the occurence of new flow structures. The small scale turbulent fluctuations has the general tendency to disperse small bubbles characterized by a low Stokes number. No clear accumulation has been observed in these cases.

Gravity effects were also investigated in this study. Larger bubbles migrate towards the inner wall and generate spiral patterns of preferential accumulation. The influence of Taylor vortices is limited by buoyancy effect to the benefit of small scale structures. No accumulation is observed for small bubbles as we can expect considering the results without gravity.

Two main outlooks to this study are related (i) to consider the effect of the bubble deformation on their dispersion and (ii) to describe the flow modulation by the presence of the bubble. Indeed, bubble deformation is known to change the sign of the lift force 53 so that it is expected to impact the bubble accumulation/dispersion. Considering the feedback of the bubbly phase on the continuous one, it can be achieved thanks to two-way coupling simulations. Depending on the scenario of bubble accumulation, important differences on the modification of the flow can lead to torque modulation (increase or reduction of overall drag on the cylinders). Another important issue is to account for direct bubble interactions in the highly accumulated zones of the flow. In those regions, bubble concentration is large and collisions or coalescence are expected to play a significant role on the response of the dispersed phase. Lagrangian tracking needs to be improved beyond the pointwise bubble approximation to restore realistic bubble concentration radial profiles which results as a balance of added-mass centripetal attraction and near-wall shear induced bubble collisions and agitation. Combining (i) and (ii) will then make possible to perform simulation in order to propose a detailed discussion of the experiments showing that bubble deformation is crucial for drag reduction [START_REF] Van Den | Bubbly turbulent drag reduction is a boundary layer effect[END_REF][START_REF] Van Gils | The importance of bubble deformability for strong drag reduction in bubbly turbulent taylor-couette flow[END_REF] .

  FIG.2. Axial wavelength of Taylor vortices as a function of the Reynolds number (data gathered from literature[START_REF] Dong | Direct numerical simulation of turbulent Taylor-Couette flow[END_REF][START_REF] Bilson | Direct numerical simulation of turbulent Taylor-Couette flow[END_REF][START_REF] Murai | Frictional drag reduction in bubbly Couette-Taylor flow[END_REF][START_REF] Burkhalter | Steady supercritical Taylor vortices after sudden starts[END_REF][START_REF] Coles | Transition in circular Couette flow[END_REF][START_REF] Racina | Vermischung in Taylor-Couette Strömung[END_REF][START_REF] Mehel | Étude expérimentale d'un écoulement diphasique de Taylor Couette[END_REF][START_REF] Bouabdallah | Instabilités et turbulence dans l'écoulement de Taylor-Couette[END_REF][START_REF] Koschmieder | Turbulent Taylor Vortex Flow[END_REF][START_REF] Barcilon | Organized structures in turbulent Taylor-Couette flow[END_REF] ). Colors are related to three distinct ranges of gap width: grey for 0.5 < η < 0.75, black for 0.75 < η < 0.85 and light grey for 0.85 ≤ η.

FIG. 3 .

 3 FIG. 3. Radial profiles of (a) the mean azimuthal velocity and (b) the azimuthal velocity fluctuation for different meshes compared to simulations of Dong 5 for η = 0.5 and Re = 8000.

  4.a. The time evolution of the inner and outer torque has been used to determine if the permanent regime is reached (fig. 4.b). After a transient regime, the torques acting on the inner and outer cylinders finally converge to the same value (one percent overall variation for the evolution reported in fig. 4.b).

FIG. 4 .

 4 FIG. 4. (a) Comparison of dimensionless torque acting on the inner cylinder with the correlation 35 G W endt = 1.45 η 3/2 /(1 -η) 7/4 Re 3/2 , and (inset) evolution of the Nusselt number N uω = G/G lam with Re, (b) Time evolution of the dimensionless torque acting on the inner and outer cylinders for η = 0.72 and Re = 6000

8 FIG. 5 .

 85 FIG. 5. Isocontours of the velocity for η = 0.72 and Re = 5000 in an axial-radial plane: (a) Axial, (b) radial and (c) azimuthal component (color on line).

FIG. 6 .

 6 FIG. 6. Isocontour |U| = 0.5 of the velocity for η = 0.5 and different Reynolds numbers: (a) Re = 3000, (b) Re = 5000, (c) Re = 8000. (color on line)

FIG. 7 . 1 (FIG. 8 .

 718 FIG. 7. Isocontour |U| = 0.6 of the velocity for Re = 5000 and η = 0.91. (color on line)

FIG. 9 .

 9 FIG. 9. Isocontours of the mean velocity field < U > θt for η = 0.5 and Re = 5000 (colors correspond to axial velocity)

2 ( 2 ( 2 (r -R 1 )/(R 2 -R 1 ) 2 (r -R 1 )/(R 2 -R 1 ) 2 ( 2 (FIG. 10 .

 22212121212210 FIG.10. Profiles of the root mean square velocity fluctuations for the two averaging procedures, for η = 0.5 and for different Reynolds numbers.

FIG. 11 .

 11 FIG. 11. Evolution of the mean azimuthal velocity normalized by the friction velocity for differentReynolds numbers (η = 0.5). Wall normal distances are reported in wall units (a) near the inner cylinder and (b) near the outer cylinder. The linear law u + = y + is reported in solid line for comparison (y + stands for the normalized distance normal to a cylinder).

′FIG. 12 .

 12 FIG. 12. Evolution of the mean velocity (a) and angular velocity (b) normalized by the friction velocity and angular velocity (ω * 1 = u * 1 /R1) respectively for different Reynolds numbers (η = 0.5). Wall normal distances are scaled using wall units, both figures correspond to the inner cylinder boundary layer. A log-law with κ = 0.41 and A = 1.8 is shown for comparison in dashed line. Best fit near the inner cylinder for all Re is represented in grey, it corresponds to B = 0.71 and C = 3.23 for azimuthal velocity and B = 0.48 and C = 1.26 for the angular velocity

FIG. 13 .

 13 FIG. 13. Values of the parameter H for different Reynolds numbers and different radius ratios corresponding to this study. The estimate of UT V is based on (left) the computed axial component of Taylor Vortices and (right) on their radial component.

FIG. 14 .FIG. 15 .FIG. 16 .FIG. 17 .

 14151617 FIG. 14. Bubble positions (3D positions and projection in a (er, ex) plane) at different times for case 1: (a) Initial positions -(b) after 0.2TΩ1 -(c) after 1.1TΩ1 -(d) after 19TΩ1

FIG. 18 .FIG. 19 .FIG. 20 .

 181920 FIG. 18. Bubble positions (3D positions and projection in a (er, ex) plane) at different times for case 4: (a) Initial positions -(b) after 0.2TΩ1 -after 1.1TΩ1 -(d) after 19TΩ1

FIG. 22 .

 22 FIG. 22. Average profiles of bubble concentration by the mean void fraction at different times for cases (1 -2 -3 -4) in panels (a -b -c -d), respectively

u 2 θr 2 θr

 22 V b ρ f of the radial acceleration of the fluid Dur Dt = ∂ur ∂t + as shown in fig. 24.

DtFIG. 24 .

 24 FIG. 24. Relative magnitude of the force balance contributions contained in ρ f V b (1+Cm)Du/dt for case 1. Data are plotted as function of the radial distance to the inner wall for (a) the entire gap and (b) in the vicinity of the inner cylinder. The mean value is compared to ρf V b (1+Cm) < U θ > 2xθt /r. The instantaneous evolution of this force is also presented for 20 bubbles as a function of their radial positions. All forces have been scaled by (1 + Cm)V b ρ f U 2 1 /R1

TABLE II .

 II Characteristics of the different meshes used for the validation cases η = 0.5. ∆x is the grid spacing along the axial direction and, ∆r1 and ∆r2 are the radial grid spacing at the inner and outer cylinder, respectively.

	η	Nx Nr N θ Γ = λ/(R2 -R1) ∆x + r∆θ + ∆r + 1,min ∆r + 1,max ∆r + 2,min ∆r + 2,max
	0.5 200 100 200	2.09	2.9	9	0.78	5.44	0.79	5.50
	0.72 200 100 400	2.09	4.5	10	0.65	4.48	0.55	3.84
	0.91 200 100 600	3.08	3.14 20	0.53	3.69	0.69	4.82

TABLE III. Description of meshes used for the computation of the flow (number of grid points in the three directions and grid spacing in terms of wall units for Re = 5000).

  can be made. Indeed, we show in fig.11a linear evolution on both walls similar to turbulent channel flows. Similar trends were observed numerically[START_REF] Bilson | Direct numerical simulation of turbulent Taylor-Couette flow[END_REF][START_REF] Pirrò | Direct numerical simulation of turbulent Taylor-Couette flow[END_REF] , and experimentally[START_REF] Smith | Turbulent Couette flow between concentric cylinders at large Taylor numbers[END_REF] . It confirms the existence of an inner layer of constant shear stress where viscous diffusion is prevailing and curvature effect is negligible. It is worth noting that for Re > 5000, profiles are well superposed with this linear evolution indicating that u i * and δ i * are the characteristic velocity and length scales of the flow in near wall regions, respectively.

TABLE IV .

 IV Their values are reported in TableIV. The study Values of the inner-and outer-turbulent Reynolds numbers and for different Reynolds numbers (η = 0.5).

	Re	Re * 1	Re * 2
	1000 94.27 47.24
	3000 200.1 99.6
	5000 300.2 150.8
	8000 446.6 223.0

TABLE V .

 V Parameters of the dispersed phase and the carrier flow presented in this study. The geometrical configuration corresponds to η = 0.5. The number of bubbles is N b = 10 6 .

	1	5000 2.10 -3	125	2.32 0.0637 ∞	0.23
	2	5000 2.10 -4	1250	0.23 0.0637 ∞ 0.0023
	3	3000 2.10 -3	125	1.5068 0.1490 ∞ 0.0946
	4	5000 2.10 -3	125	2.32 0.0637 0.5	0.23
	5	5000 2.10 -4	1250	0.23 0.0637 0.5 0.0023

ACKNOWLEDGMENTS

We would like to acknowledge Délégation Générale de l'Armement (DGA) for funding this project. The regional supercomputing centre CALMIP at the University of Toulouse, and the national centres IDRIS and CINES are gratefully acknowledged for their support. We also thank Annaïg Pedrono for her technical support.