coolfluid/coolfluid3 — pull request #172 by wdeconinck (2012-01-16 15:20:51+00:00)
Title: Spaces / Fields are much simpler to handle now

- Any space now always has a connectivity table, and a coordinate field
This greatly reduces complexity of algorithms needing access and coordinates. It is better to have a standard uniform way

- Spaces are no longer fixed to 1 topology, but to a series of entities, to allow fine-grained control:

```C++
// Create new space
SpaceFields& space_fields = *create_component("new_P2_space");
// Register all entities in this space
boost_foreach(const Handle& entities, entities_range)
entities->create_space("cf3.mesh.LagrangeP2."+entities->element_type().shape_name(),space_fields);
// Create connectivity / glb_idx / rank / coordinates field in the space
space_fields.update();
```
It is not required that all shape functions are of the same family (P1/P2 can be mixed for instance)

- Space construction can also be done with a one-liner:
You can choose:
- Continuous space:
- mesh.create_continuous_space(space_name, space_lib_name , entities_vector);
- mesh.create_continuous_space(space_name, space_lib_name , regions_vector);
--> calls previous
- mesh.create_continuous_space(space_name, space_lib_name);
--> calls previous with regions = full topology
- Discontinuous space:
- analogous

- Fast access to Space component from SpaceFields : Space& entities_space = space_field.space(entities)
(a small internal private map with Handle as key is much faster than access using get_child)

For now the "type" of the SpaceFields is only valid to be "POINT_BASED" or "ELEMENT_BASED".
A nicer solution to remove this entirely will follow.
Some remaining code in mostly mesh writers needs to be still adapted then.