Changeset 20793
- Timestamp:
- 06/22/16 14:50:37 (9 years ago)
- Location:
- issm/trunk-jpl/jenkins/javascript/karma/lib/bin
- Files:
-
- 1 added
- 1 edited
-
model.js (modified) (8 diffs)
-
project3d.js (added)
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/jenkins/javascript/karma/lib/bin/model.js
r20767 r20793 5 5 6 6 function model () { 7 function ones(...args) { 8 var array = []; 9 for (var i = 0; i < args[0]; ++i) { 10 array.push(args.length === 1 ? 1 : ones(args.slice(1))); 11 } 12 return array; 13 } 14 7 15 //methods 8 16 this.disp = function() { //{{{ … … 111 119 112 120 } //}}} 113 this.extrude = function(md , ...args) { //{{{121 this.extrude = function(md) { //{{{ 114 122 //EXTRUDE - vertically extrude a 2d mesh 115 123 // … … 134 142 135 143 //some checks on list of arguments 136 var argc = arg s.length;144 var argc = arguments.length; 137 145 138 146 if ((argc > 4) | (argc < 2)) { … … 142 150 //Extrude the mesh 143 151 if (argc==2) { //list of coefficients 144 clist=arg s[0];152 clist=arguments[0]; 145 153 146 154 if (clist.some(function(x) { return x < 0; }) | clist.some(function(x) { return x > 1; })) … … 156 164 numlayers=extrusionlist.length; 157 165 } else if (argc==3) { //one polynomial law 158 if (arg s[2]<=0) {166 if (arguments[2]<=0) { 159 167 //help extrude; 160 168 throw 'extrusionexponent must be >=0'; 161 169 } 162 numlayers=arg s[0];170 numlayers=arguments[0]; 163 171 164 172 extrusionlist = []; 165 173 166 174 for (var i = 0; i < numlayers; i++) { 167 extrusionlist.push(Math.pow(i/(numlayers-1), arg s[2]));175 extrusionlist.push(Math.pow(i/(numlayers-1), arguments[2])); 168 176 }; 169 177 170 178 } else if (argc==4) { //two polynomial laws 171 numlayers=arg s[0];172 lowerexp=arg s[1];173 upperexp=arg s[2];174 175 if (arg s[1]<=0 | args[2]<=0) {179 numlayers=arguments[0]; 180 lowerexp=arguments[1]; 181 upperexp=arguments[2]; 182 183 if (arguments[1]<=0 | args[2]<=0) { 176 184 throw 'lower and upper extrusionexponents must be >=0'; 177 185 } … … 202 210 203 211 if (numlayers<2) { 204 error('number of layers should be at least 2');212 console.error('number of layers should be at least 2'); 205 213 } 206 214 207 215 if (md.mesh.domaintype() !== '3D') { 208 error('Cannot extrude a 3d mesh (extrude cannot be called more than once)');216 console.error('Cannot extrude a 3d mesh (extrude cannot be called more than once)'); 209 217 } 210 218 211 219 //Initialize with the 2d mesh 212 220 mesh2d = md.mesh; 213 md.mesh=mesh3dprisms(); 221 md.mesh=new mesh3dprisms(); 222 214 223 md.mesh.x = mesh2d.x; 215 224 md.mesh.y = mesh2d.y; … … 244 253 }; 245 254 246 number_nodes3d= size(x3d,1); //number of 3d nodes for the non extruded part of the mesh247 248 //Extrude elements249 elements3d=[];250 for (var i = 0; i < numlayers; i++) {251 elements3d.push(md.mesh.elements+(i-1)*md.mesh.numberofvertices, md.mesh.elements+i*md.mesh.numberofvertices); //Create the elements of the 3d mesh for the non extruded part252 };253 254 number_el3d=size(elements3d,1); //number of 3d nodes for the non extruded part of the mesh255 256 function fillArray(value, len) {257 if (len == 0) return [];258 var a = [value];259 while (a.length * 2 <= len) a = a.concat(a);260 if (a.length < len) a = a.concat(a.slice(0, len - a.length));261 return a;262 }263 264 //Keep a trace of lower and upper nodes265 //lowervertex=NaN*ones(number_nodes3d,1);266 //uppervertex=NaN*ones(number_nodes3d,1);267 268 lowervertex = fillArray(null, number_nodes3d);269 uppervertex = fillArray(null, number_nodes3d);270 271 //lowervertex(md.mesh.numberofvertices+1:end)=1:(numlayers-1)*md.mesh.numberofvertices;272 //uppervertex(1:(numlayers-1)*md.mesh.numberofvertices)=md.mesh.numberofvertices+1:number_nodes3d;273 274 for (var i = md.mesh.numberofvertices+1, k = 1; i < lowervertex.length && k <= (numlayers-1)*md.mesh.numberofvertices; i++, k++) {275 lowervertex[i] = k;276 };277 278 for (var i = 1, k = md.mesh.numberofvertices+1; i <= (numlayers-1)*md.mesh.numberofvertices && k <= number_nodes3d; i++, k++) {279 uppervertex[i] = k;280 };281 282 md.mesh.lowervertex=lowervertex;283 md.mesh.uppervertex=uppervertex;284 285 //same for lower and upper elements286 lowerelements = fillArray(null, number_el3d);287 upperelements = fillArray(null, number_el3d);288 //lowerelements(md.mesh.numberofelements+1:end)=1:(numlayers-2)*md.mesh.numberofelements;289 //upperelements(1:(numlayers-2)*md.mesh.numberofelements)=md.mesh.numberofelements+1:(numlayers-1)*md.mesh.numberofelements;290 291 for (var i = md.mesh.numberofvertices+1, k = 1; i < lowerelements.length && k <= (numlayers-2)*md.mesh.numberofelements; i++, k++) {292 lowerelements[i] = k;293 };294 295 for (var i = 1, k = md.mesh.numberofelements + 1; i <= (numlayers-2)*md.mesh.numberofelements && k <= (numlayers-1)*md.mesh.numberofelements; i++, k++) {296 upperelements[i] = k;297 };298 299 md.mesh.lowerelements=lowerelements;300 md.mesh.upperelements=upperelements;301 302 //Save old mesh303 md.mesh.x2d=md.mesh.x;304 md.mesh.y2d=md.mesh.y;305 md.mesh.elements2d=md.mesh.elements;306 md.mesh.numberofelements2d=md.mesh.numberofelements;307 md.mesh.numberofvertices2d=md.mesh.numberofvertices;308 309 //Build global 3d mesh310 md.mesh.elements=elements3d;311 md.mesh.x=x3d;312 md.mesh.y=y3d;313 md.mesh.z=z3d;314 md.mesh.numberofelements=number_el3d;315 md.mesh.numberofvertices=number_nodes3d;316 md.mesh.numberoflayers=numlayers;317 318 //Ok, now deal with the other fields from the 2d mesh:319 320 //bedinfo and surface info321 md.mesh.vertexonbase=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',1);322 md.mesh.vertexonsurface=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',md.mesh.numberoflayers);323 md.mesh.vertexonboundary=project3d(md,'vector',md.mesh.vertexonboundary,'type','node');324 325 //lat long326 md.mesh.lat=project3d(md,'vector',md.mesh.lat,'type','node');327 md.mesh.long=project3d(md,'vector',md.mesh.long,'type','node');328 329 md.geometry=extrude(md.geometry,md);255 number_nodes3d=x3d.length; //number of 3d nodes for the non extruded part of the mesh 256 257 //Extrude elements 258 elements3d=[]; 259 for (var i = 0; i < numlayers; i++) { 260 elements3d.push(md.mesh.elements+(i-1)*md.mesh.numberofvertices, md.mesh.elements+i*md.mesh.numberofvertices); //Create the elements of the 3d mesh for the non extruded part 261 }; 262 263 number_el3d=elements3d.length; //number of 3d nodes for the non extruded part of the mesh 264 265 function fillArray(value, len) { 266 if (len == 0) return []; 267 var a = [value]; 268 while (a.length * 2 <= len) a = a.concat(a); 269 if (a.length < len) a = a.concat(a.slice(0, len - a.length)); 270 return a; 271 } 272 273 //Keep a trace of lower and upper nodes 274 //lowervertex=NaN*ones(number_nodes3d,1); 275 //uppervertex=NaN*ones(number_nodes3d,1); 276 277 lowervertex = fillArray(null, number_nodes3d); 278 uppervertex = fillArray(null, number_nodes3d); 279 280 //lowervertex(md.mesh.numberofvertices+1:end)=1:(numlayers-1)*md.mesh.numberofvertices; 281 //uppervertex(1:(numlayers-1)*md.mesh.numberofvertices)=md.mesh.numberofvertices+1:number_nodes3d; 282 283 for (var i = md.mesh.numberofvertices+1, k = 1; i < lowervertex.length && k <= (numlayers-1)*md.mesh.numberofvertices; i++, k++) { 284 lowervertex[i] = k; 285 }; 286 287 for (var i = 1, k = md.mesh.numberofvertices+1; i <= (numlayers-1)*md.mesh.numberofvertices && k <= number_nodes3d; i++, k++) { 288 uppervertex[i] = k; 289 }; 290 291 md.mesh.lowervertex=lowervertex; 292 md.mesh.uppervertex=uppervertex; 293 294 //same for lower and upper elements 295 lowerelements = fillArray(null, number_el3d); 296 upperelements = fillArray(null, number_el3d); 297 //lowerelements(md.mesh.numberofelements+1:end)=1:(numlayers-2)*md.mesh.numberofelements; 298 //upperelements(1:(numlayers-2)*md.mesh.numberofelements)=md.mesh.numberofelements+1:(numlayers-1)*md.mesh.numberofelements; 299 300 for (var i = md.mesh.numberofvertices+1, k = 1; i < lowerelements.length && k <= (numlayers-2)*md.mesh.numberofelements; i++, k++) { 301 lowerelements[i] = k; 302 }; 303 304 for (var i = 1, k = md.mesh.numberofelements + 1; i <= (numlayers-2)*md.mesh.numberofelements && k <= (numlayers-1)*md.mesh.numberofelements; i++, k++) { 305 upperelements[i] = k; 306 }; 307 308 md.mesh.lowerelements=lowerelements; 309 md.mesh.upperelements=upperelements; 310 311 //Save old mesh 312 md.mesh.x2d=md.mesh.x; 313 md.mesh.y2d=md.mesh.y; 314 md.mesh.elements2d=md.mesh.elements; 315 md.mesh.numberofelements2d=md.mesh.numberofelements; 316 md.mesh.numberofvertices2d=md.mesh.numberofvertices; 317 318 //Build global 3d mesh 319 md.mesh.elements=elements3d; 320 md.mesh.x=x3d; 321 md.mesh.y=y3d; 322 md.mesh.z=z3d; 323 md.mesh.numberofelements=number_el3d; 324 md.mesh.numberofvertices=number_nodes3d; 325 md.mesh.numberoflayers=numlayers; 326 327 //Ok, now deal with the other fields from the 2d mesh: 328 329 //bedinfo and surface info 330 md.mesh.vertexonbase=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',1); 331 md.mesh.vertexonsurface=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',md.mesh.numberoflayers); 332 md.mesh.vertexonboundary=project3d(md,'vector',md.mesh.vertexonboundary,'type','node'); 333 334 //lat long 335 md.mesh.lat=project3d(md,'vector',md.mesh.lat,'type','node'); 336 md.mesh.long=project3d(md,'vector',md.mesh.long,'type','node'); 337 338 md.geometry=extrude(md.geometry,md); 330 339 md.friction = extrude(md.friction,md); 331 340 md.inversion = extrude(md.inversion,md); … … 373 382 374 383 for (var i = 0; i < md.mesh.elementconnectivity.length; ++i) { 375 if (md.mesh.elementconnectivity[i] === null || typeof md.mesh.elementcon ectivity[i] === 'undefined') {384 if (md.mesh.elementconnectivity[i] === null || typeof md.mesh.elementconnectivity[i] === 'undefined') { 376 385 md.mesh.elementconnectivity[i] = 0; 377 386 }
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/trac/issm/chrome/common/trac_banner.png)