Ignore:
Timestamp:
Dec 12, 2007, 5:38:37 PM (16 years ago)
Author:
steve
Message:

Working towards an edge limiter (at least in quantity)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • anuga_core/source/anuga/utilities/util_ext.h

    r4883 r4886  
    166166
    167167
    168 void _limit_by_edge(int N, double beta, double* qc, double* qv,
    169             double* qmin, double* qmax) {
    170 
    171   //N are the number of elements
    172   int k, i, k3;
    173   double dq, dqa[3], phi, r;
    174  
    175   //printf("INSIDE\n");
    176   for (k=0; k<N; k++) {
    177     k3 = k*3;
    178    
    179     //Find the gradient limiter (phi) across vertices 
    180     phi = 1.0;
    181     for (i=0; i<3; i++) {   
    182       r = 1.0;
    183      
    184       dq = qv[k3+i] - qc[k];    //Delta between vertex and centroid values
    185       dqa[i] = dq;              //Save dq for use in the next loop
    186      
    187       if (dq > 0.0) r = (qmax[k] - qc[k])/dq;
    188       if (dq < 0.0) r = (qmin[k] - qc[k])/dq;     
    189  
    190  
    191       phi = min( min(r*beta, 1.0), phi);   
    192     }
    193    
    194     //Then update using phi limiter
    195     for (i=0; i<3; i++) {   
    196       qv[k3+i] = qc[k] + phi*dqa[i];
    197     }
    198   }
    199 }
    200 
    201 void _limit_by_vertex(int N, double beta, double* qc, double* qv,
    202             double* qmin, double* qmax) {
    203 
    204   //N are the number of elements
    205   int k, i, k3;
    206   double dq, dqa[3], phi, r;
    207  
    208   //printf("INSIDE\n");
    209   for (k=0; k<N; k++) {
    210     k3 = k*3;
    211    
    212     //Find the gradient limiter (phi) across vertices 
    213     phi = 1.0;
    214     for (i=0; i<3; i++) {   
    215       r = 1.0;
    216      
    217       dq = qv[k3+i] - qc[k];    //Delta between vertex and centroid values
    218       dqa[i] = dq;              //Save dq for use in the next loop
    219      
    220       if (dq > 0.0) r = (qmax[k] - qc[k])/dq;
    221       if (dq < 0.0) r = (qmin[k] - qc[k])/dq;     
    222  
    223  
    224       phi = min( min(r*beta, 1.0), phi);   
    225     }
    226    
    227     //Then update using phi limiter
    228     for (i=0; i<3; i++) {   
    229       qv[k3+i] = qc[k] + phi*dqa[i];
    230     }
    231   }
    232 }
    233168
    234169
Note: See TracChangeset for help on using the changeset viewer.