~reducedmodelling/fluidity/ROM_Non-intrusive-ann

« back to all changes in this revision

Viewing changes to include/python_statec.h

  • Committer: skramer
  • Date: 2010-11-16 15:37:38 UTC
  • Revision ID: svn-v4:5bf5533e-7014-46e3-b1bb-cce4b9d03719:trunk:2477
Changing the storage of vector_field from vfield%val(dim)%ptr(node) to vfield%val(dim,node).

This was a long desired and discussed change that should improve cache performance and will allow vector fields of more than 3 dimension (internally no vtk support). Just realised it could be done with a few simple seds.

Most important changes need:
- removal of wrap_field() for vector_fields.
- this required some surgery in vtk_write_fields, a horrible piece of code in any case
- traffic and mesh_movement were using wrap_field and now have to do a few more copies.
- halo_update() requires a contiguous buffer in memory, so a copy is now done for halo_update(vfield)
- the wrapped python vector fields available in python_state diagnostics had to be rewired to account for the new storage. This actually simplifies the wrapping a lot.

I realise this is a big commit which might give some trouble when merging in big changes (from for example a branch). The following little script I used might be handy for this. You might only want to apply it to files you have modified. Make sure you back up your entire local checkout before applying any of these:

#/bin/sh
FILES=*/*.F90 */tests/*.F90
# replace any %val(1)%ptr(2) where 2 contains a pair of ()
sed -i 's!%val(\([A-Za-z0-9%_\+\* -]*\))%ptr(\([^)]*([^)]*)[^)]*\))!%val(\1,\2)!g' ${FILES}
# replace any %val(1)%ptr(2) where 2 contains no closing )
sed -i 's!%val(\([A-Za-z0-9%_\+\* -]*\))%ptr(\([^)]*\))!%val(\1,\2)!g' ${FILES}
# replace any %val(1)%ptr not followed by (
sed -i 's!%val(\([A-Za-z0-9%_\+\* -]*\))%ptr!%val(\1,:)!g' ${FILES}
# now svn revert femtools/Sparse_Tools.F90
# as it gives false positives for dcsr_matrices
# luckily it doesn't use vector_fields, so we can just revert


Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
void python_add_statec_(char *name,int *len); // Add a new state object to the Python environment, if a state with the same name already exists it will overwrite that state; also the last added state will be accessible as 'state', all others in the 'states' dictionary
21
21
 
22
22
void python_add_scalar_(int *sx,double x[],char *name,int *nlen, int *field_type, char *option_path, int *oplen, char *state,int *slen,char*,int*);  // Add a new scalar field to the state with name *state
23
 
void python_add_vector_(int *s, int *num_dim, 
24
 
  double x[], double y[], double z[],
 
23
void python_add_vector_(int *num_dim, int *s, 
 
24
  double x[],
25
25
  char *name,int *nlen, int *field_type, char *option_path, int *oplen, char *state,int *slen,char*,int*); // Add a new vector field to the state with name *state
26
26
void python_add_tensor_(int *sx,int *sy,int *sz, double *x, int *num_dim,
27
27
  char *name,int *nlen, int *field_type, char *option_path, int *oplen, char *state,int *slen,char*,int*); // Add a new tensor field to the state with name *state