~reducedmodelling/fluidity/ROM_Non-intrusive-ann

« back to all changes in this revision

Viewing changes to error_measures/tests/test_pseudo2d_gradation.F90

  • 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:
31
31
  call allocate(hessian, mesh, "Hessian")
32
32
 
33
33
  do i=1,mesh%nodes
34
 
    x = positions%val(1)%ptr(i)
35
 
    y = positions%val(2)%ptr(i)
36
 
    z = positions%val(3)%ptr(i)
 
34
    x = positions%val(1,i)
 
35
    y = positions%val(2,i)
 
36
    z = positions%val(3,i)
37
37
    pressure_field%val(i) = x * x
38
38
  end do
39
39
 
62
62
 
63
63
  fail = .false.
64
64
  do i=1,mesh%nodes
65
 
    x = positions%val(1)%ptr(i)
66
 
    y = positions%val(2)%ptr(i)
67
 
    z = positions%val(3)%ptr(i)
 
65
    x = positions%val(1,i)
 
66
    y = positions%val(2,i)
 
67
    z = positions%val(3,i)
68
68
 
69
 
    if (x == minval(positions%val(1)%ptr) .or. x == maxval(positions%val(1)%ptr)) cycle
70
 
    if (y == minval(positions%val(2)%ptr) .or. y == maxval(positions%val(2)%ptr)) cycle
 
69
    if (x == minval(positions%val(1,:)) .or. x == maxval(positions%val(1,:))) cycle
 
70
    if (y == minval(positions%val(2,:)) .or. y == maxval(positions%val(2,:))) cycle
71
71
    
72
72
    call eigendecomposition_symmetric(hessian%val(:, :, i), evecs, evals)
73
73
    domvec = dominant_eigenvector(evecs, evals)