Changeset 23006


Ignore:
Timestamp:
07/25/18 12:25:26 (7 years ago)
Author:
dlcheng
Message:

CHG (JS): Resolving bamg.js error for reverse winded SHP domain files.

Location:
issm/trunk-jpl/src/m
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/array/arrayoperations.js

    r22901 r23006  
    5151    //Takes in any number of scalars or arrays, and calculates the sum. Scalars are treated as similar length arrays of the scalar.
    5252    //Determine reference array and size
    53     var size, arg;
     53    var size, array, arg, initial;
    5454        for (var a = 0; a < arguments.length; a++) {
    5555        arg = arguments[a];
    5656        if (arg instanceof Array) {
    5757            size = arg.length;
     58            array = arg;
     59                        initial = a;
    5860            break;
    5961        }
     
    6971        }
    7072        //do the result:
    71         var result = NewArrayFill(size, 0);
    72         for (var a = 0; a < arguments.length; a++) {
    73                 arg = arguments[a];
    74         if (arg instanceof Array) {
    75             for(var i = 0; i < result.length; i++){
    76                 result[i] -= arg[i];
    77             }
    78         } else if (typeof arg != 'number') {
    79             for(var i = 0; i < result.length; i++){
    80                 result[i] += arg;
    81             }
     73        var result = array.slice(0);
     74        for (var a = 0; a < arguments.length; a++) {
     75                if (a != initial) {
     76                        arg = arguments[a];
     77                        if (arg instanceof Array) {
     78                                for(var i = 0; i < result.length; i++){
     79                                        result[i] += arg[i];
     80                                }
     81                        } else if (typeof arg != 'number') {
     82                                for(var i = 0; i < result.length; i++){
     83                                        result[i] += arg;
     84                                }
     85                        }
    8286        }
    8387        }
     
    8791    //Takes in any number of scalars or arrays, and calculates the subtraction. Scalars are treated as similar length arrays of the scalar.
    8892    //Determine reference array and size
    89     var size, array, arg;
     93    var size, array, arg, initial;
    9094        for (var a = 0; a < arguments.length; a++) {
    9195        arg = arguments[a];
     
    9397            size = arg.length;
    9498            array = arg;
     99                        initial = a;
    95100            break;
    96101        }
     
    108113        var result = array.slice(0);
    109114        for (var a = 0; a < arguments.length; a++) {
    110                 arg = arguments[a];
    111         if (arg instanceof Array) {
    112             for(var i = 0; i < result.length; i++){
    113                 result[i] -= arg[i];
    114             }
    115         } else if (typeof arg != 'number') {
    116             for(var i = 0; i < result.length; i++){
    117                 result[i] -= arg;
    118             }
     115                if (a !== initial) {
     116                        arg = arguments[a];
     117                        if (arg instanceof Array) {
     118                                for(var i = 0; i < result.length; i++){
     119                                        result[i] -= arg[i];
     120                                }
     121                        } else if (typeof arg != 'number') {
     122                                for(var i = 0; i < result.length; i++){
     123                                        result[i] -= arg;
     124                                }
     125                        }
    119126        }
    120127        }
     
    124131    //Takes in any number of scalars or arrays, and calculates the product. Scalars are treated as similar length arrays of the scalar.
    125132    //Determine reference array and size
    126     var size, arg;
     133    var size, array, arg, initial;
    127134        for (var a = 0; a < arguments.length; a++) {
    128135        arg = arguments[a];
    129136        if (arg instanceof Array) {
    130137            size = arg.length;
     138            array = arg;
     139                        initial = a;
    131140            break;
    132141        }
     
    142151        }
    143152        //do the result:
    144         var result = NewArrayFill(size, 0);
    145         for (var a = 0; a < arguments.length; a++) {
    146                 arg = arguments[a];
    147         if (arg instanceof Array) {
    148             for(var i = 0; i < result.length; i++){
    149                 result[i] *= arg[i];
    150             }
    151         } else if (typeof arg != 'number') {
    152             for(var i = 0; i < result.length; i++){
    153                 result[i] *= arg;
    154             }
    155         }
     153        var result = array.slice(0);
     154        for (var a = 0; a < arguments.length; a++) {
     155                if (a !== initial) {
     156                        arg = arguments[a];
     157                        if (arg instanceof Array) {
     158                                for(var i = 0; i < result.length; i++){
     159                                        result[i] *= arg[i];
     160                                }
     161                        } else if (typeof arg != 'number') {
     162                                for(var i = 0; i < result.length; i++){
     163                                        result[i] *= arg;
     164                                }
     165                        }
     166                }
    156167        }
    157168        return result;
    158169} //}}}
    159 function ArrayDivide(array1, array2){ //{{{
     170function ArrayDivide(){ //{{{
    160171    //Takes in any number of scalars or arrays, and calculates the quotient. Scalars are treated as similar length arrays of the scalar.
    161172    //Determine reference array and size
    162     var size, array, arg;
     173    var size, array, arg, initial;
    163174        for (var a = 0; a < arguments.length; a++) {
    164175        arg = arguments[a];
     
    166177            size = arg.length;
    167178            array = arg;
     179                        initial = a;
    168180            break;
    169181        }
     
    181193        var result = array.slice(0);
    182194        for (var a = 0; a < arguments.length; a++) {
    183                 arg = arguments[a];
    184         if (arg instanceof Array) {
    185             for(var i = 0; i < result.length; i++){
    186                 result[i] /= arg[i];
    187             }
    188         } else if (typeof arg != 'number') {
    189             for(var i = 0; i < result.length; i++){
    190                 result[i] /= arg;
    191             }
    192         }
     195                if (a !== initial) {
     196                        arg = arguments[a];
     197                        if (arg instanceof Array) {
     198                                for(var i = 0; i < result.length; i++){
     199                                        result[i] /= arg[i];
     200                                }
     201                        } else if (typeof arg != 'number') {
     202                                for(var i = 0; i < result.length; i++){
     203                                        result[i] /= arg;
     204                                }
     205                        }
     206                }
    193207        }
    194208        return result;
  • issm/trunk-jpl/src/m/mesh/bamg.js

    r22906 r23006  
    122122            //Check orientation
    123123            var nods = domain[i].nods-1; //the domain are closed 1=end;
    124             var test = ArraySum(ArrayAdd(ArraySubtract(domain[i].x.slice(1,nods), ArrayMultiply(domain[i].x.slice(0,nods-1), domain[i].y.slice(1,nods))), domain[i].y.slice(0,nods-1)));
     124            var test = ArraySum(ArrayMultiply(ArraySubtract(domain[i].x.slice(1,nods+1), domain[i].x.slice(0,nods)), ArrayAdd(domain[i].y.slice(1,nods+1), domain[i].y.slice(0,nods))));
    125125            if ((i==0 && test>0) || (i>0 && test<0)) {
    126126                console.log('At least one contour was not correctly oriented and has been re-oriented');
    127                 //TODO: Implement flipud
    128                 //domain[i].x = flipud(domain[i].x); domain[i].y = flipud(domain[i].y);
     127                domain[i].x.reverse();
     128                domain[i].y.reverse();
    129129            }
    130130
     
    170170            //Check that hole is correctly oriented
    171171            var nods = holes[i].nods-1; //the holes are closed 1=end;
    172             var test = ArraySum(ArrayAdd(ArraySubtract(holes[i].x.slice(1,nods), ArrayMultiply(holes[i].x.slice(0,nods-1), holes[i].y.slice(1,nods))), holes[i].y.slice(0,nods-1)));
     172            var test = ArraySum(ArrayMultiply(ArraySubtract(holes[i].x.slice(1,nods+1), holes[i].x.slice(0,nods)), ArrayAdd(holes[i].y.slice(1,nods+1), holes[i].y.slice(0,nods))));
    173173            if ((i==0 && test>0) || (i>0 && test<0)) {
    174174                console.log('At least one contour was not correctly oriented and has been re-oriented');
    175                 //TODO: Implement flipud
    176                 //holes[i].x = flipud(holes[i].x); holes[i].y = flipud(holes[i].y);
     175                holes[i].x.reverse();
     176                holes[i].y.reverse();
    177177            }
    178178
     
    209209            //Check that hole is correctly oriented
    210210            var nods=subdomains[i].nods-1; //the subdomains are closed 1=end;
    211             var test = ArraySum(ArrayAdd(ArraySubtract(subdomains[i].x.slice(1,nods), ArrayMultiply(subdomains[i].x.slice(0,nods-1), subdomains[i].y.slice(1,nods))), subdomains[i].y.slice(0,nods-1)));
     211            var test = ArraySum(ArrayMultiply(ArraySubtract(subdomain[i].x.slice(1,nods+1), subdomain[i].x.slice(0,nods)), ArrayAdd(subdomain[i].y.slice(1,nods+1), subdomain[i].y.slice(0,nods))));
    212212            if ((i==0 && test>0) || (i>0 && test<0)) {
    213213                console.log('At least one contour was not correctly oriented and has been re-oriented');
    214                 //TODO: Implement flipud
    215                 //subdomains[i].x = flipud(subdomains[i].x); subdomains[i].y = flipud(subdomains[i].y);
     214                subdomains[i].x.reverse();
     215                subdomains[i].y.reverse();
    216216            }
    217217
Note: See TracChangeset for help on using the changeset viewer.