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
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 249 250 251 252 253 254 number_el3d=size(elements3d,1); //number of 3d nodes for the non extruded part of the mesh255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 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.