Changeset 4967


Ignore:
Timestamp:
Jan 23, 2008, 4:24:11 PM (17 years ago)
Author:
steve
Message:

Playing with f2py for adding C extensions

Location:
anuga_core/source/anuga/advection
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • anuga_core/source/anuga/advection/advection.py

    r4964 r4967  
    110110    def compute_fluxes(self):
    111111
    112         try:
    113             self.compute_fluxes_ext()
    114         except:
    115             self.compute_fluxes_python()
     112       
     113        self.compute_fluxes_ext()
     114##         try:
     115##             self.compute_fluxes_ext()
     116##         except:
     117##             self.compute_fluxes_python()
    116118 
    117119
     
    230232        from anuga.config import max_timestep
    231233
    232         import weave
    233         from weave import converters
    234 
    235234        N = len(self)
    236235
    237 
    238         timestep    = zeros( 1, Float);
    239         timestep[0] = float(max_timestep) #FIXME: Get rid of this
     236        timestep = max_timestep
    240237
    241238        #Shortcuts
     
    260257
    261258        from advection_ext import compute_fluxes
     259
     260
     261        print 'N = ',N
     262        print 'timestep = ',timestep
     263        print 'huge_timestep = ',huge_timestep
    262264               
    263         compute_fluxes(stage_edge,stage_bdry,stage_update,
    264                        neighbours,neighbour_edges,normals,
    265                        areas,radii,edgelengths,
    266                        tri_full_flag,
    267                        huge_timestep,timestep,v)                         
     265        timestep = compute_fluxes(stage_edge,stage_bdry,stage_update,
     266                                  neighbours,neighbour_edges,normals,
     267                                  areas,radii,edgelengths,
     268                                  tri_full_flag,
     269                                  huge_timestep,max_timestep,v,N)
     270       
     271        print 'timestep out2 =',timestep
    268272
    269273        self.timestep = timestep
  • anuga_core/source/anuga/advection/advection_ext.c

    r4964 r4967  
    11#include "math.h"
     2#include "stdio.h"
    23
    3 void compute_fluxes(double* stage_edge,
    4                                         double* stage_bdry,
    5                                         double* stage_update,
     4double compute_fluxes(double* stage_edge,
     5                    double* stage_bdry,
     6                    double* stage_update,
    67                    int* neighbours,
    7                                         int* neighbour_edges,
    8                                         double* normals,
     8                    int* neighbour_edges,
     9                    double* normals,
    910                    double* areas,
    10                                         double* radii,
    11                                         double* edgelengths,
    12                                         int* tri_full_flag,
    13                     double huge_timestep,
    14                     double timestep,
    15                                         double* v,
    16                                         int N){
     11                    double* radii,
     12                    double* edgelengths,
     13                    int*    tri_full_flag,
     14                    double  huge_timestep,
     15                    double  max_timestep,
     16                    double* v,
     17                    int N){
    1718        //Loop
    1819
     
    2324        double max_speed;
    2425        double optimal_timestep;
    25                 int I,M,K;
    26                 int k,i,j,n,m;
    27                
     26        double timestep;
     27        int I,M,K;
     28        int k,i,j,n,m;
     29       
     30        timestep = max_timestep;
     31
     32        printf("N = %i\n",N);
     33        printf("timestep = %g\n",timestep);
     34        printf("huge_timestep = %g\n",huge_timestep);
     35
    2836               
    2937        for (k=0; k<N; k++){
     
    8290
    8391        }
     92
     93        printf("timestep out = %g\n",timestep);
     94
     95        return timestep;
    8496}
    8597
  • anuga_core/source/anuga/advection/advection_ext.pyf

    r4964 r4967  
    33python module advection_ext
    44interface
    5         subroutine compute_fluxes(stage_edge,stage_bdry,stage_update,neighbours,neighbour_edges,normals,areas,radii,edgelengths,tri_full_flag,huge_timestep,timestep,v,n)
     5        double precision function compute_fluxes(stage_edge,stage_bdry,stage_update,neighbours,neighbour_edges,normals,areas,radii,edgelengths,tri_full_flag,huge_timestep,max_timestep,v,n)
    66                intent(c) compute_fluxes
    77                intent(c)
    88       
    9                 double precision dimension(3,n) ::    stage_edge
    10                 double precision dimension(3,n) ::        stage_bdry,
    11                 double precision dimension(n) ::          stage_update,
    12         integer dimension(n) ::               neighbours,
    13                 integer dimension(n) ::                       neighbour_edges,
    14                 double precision dimension(6,n) ::        normals
    15         double precision dimension(n) ::      areas
    16                 double precision dimension(n) ::          radii
    17                 double precision dimension(3,n) ::        edgelengths
    18                 integer dimension(n) ::                           tri_full_flag
    19         double precision  ::                  huge_timestep
    20         double precision  ::                  timestep
     9                double precision dimension(*) ::      stage_edge
     10                double precision dimension(*) ::      stage_bdry,
     11                double precision dimension(*) ::      stage_update,
     12                integer dimension(*) ::               neighbours,
     13                integer dimension(*) ::               neighbour_edges,
     14                double precision dimension(*) ::      normals
     15                double precision dimension(*) ::      areas
     16                double precision dimension(*) ::      radii
     17                double precision dimension(*) ::      edgelengths
     18                integer dimension(*) ::               tri_full_flag
     19                double precision   ::                 huge_timestep
     20                double precision   ::                 max_timestep
    2121                double precision dimension(2) ::      v
    22         integer optional,check(shape(stage_edge,1)==n),depend(stage_edge) :: n=shape(stage_edge,0)
     22                integer  ::                           n
    2323
    24         end subroutine compute_fluxes
     24        end function compute_fluxes
    2525end interface
    2626end python module
     
    2828
    2929
    30 
    31 void compute_fluxes(double* stage_edge,
    32                                         double* stage_bdry,
    33                                         double* stage_update,
    34                     int* neighbours,
    35                                         int* neighbour_edges,
    36                                         double* normals,
    37                     double* areas,
    38                                         double* radii,
    39                                         double* edgelengths,
    40                                         int* tri_full_flag,
    41                     double huge_timestep,
    42                     double timestep,
    43                                         double* v,
    44                                         int N){
Note: See TracChangeset for help on using the changeset viewer.