Changeset 1185 for issm/trunk/src/c/objects/Tria.cpp
- Timestamp:
- 06/30/09 13:49:49 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/objects/Tria.cpp
r1184 r1185 2007 2007 #undef __FUNCT__ 2008 2008 #define __FUNCT__ "Tria::Du" 2009 void Tria::Du(Vec du_g, double* velocity,void* vinputs,int analysis_type,int sub_analysis_type){2009 void Tria::Du(Vec du_g,void* vinputs,int analysis_type,int sub_analysis_type){ 2010 2010 2011 2011 int i; … … 2080 2080 throw ErrorException(__FUNCT__,"missing velocity_obs input parameter"); 2081 2081 } 2082 if(!inputs->Recover("velocity",&vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){ 2083 throw ErrorException(__FUNCT__,"missing velocity input parameter"); 2084 } 2082 2085 2083 2086 for(i=0;i<numgrids;i++){ 2084 2087 obs_vx_list[i]=obs_vxvy_list[i][0]; 2085 2088 obs_vy_list[i]=obs_vxvy_list[i][1]; 2086 } 2087 2088 /*Initialize velocities: */ 2089 for(i=0;i<numgrids;i++){ 2090 vx_list[i]=velocity[doflist[i*numberofdofspernode+0]]; 2091 vy_list[i]=velocity[doflist[i*numberofdofspernode+1]]; 2092 //obs_vx_list[i]=obs_velocity[doflist[i*numberofdofspernode+0]]; 2093 //obs_vy_list[i]=obs_velocity[doflist[i*numberofdofspernode+1]]; 2089 vx_list[i]=vxvy_list[i][0]; 2090 vy_list[i]=vxvy_list[i][1]; 2094 2091 } 2095 2092 … … 2220 2217 #undef __FUNCT__ 2221 2218 #define __FUNCT__ "Tria::Gradj" 2222 void Tria::Gradj(Vec grad_g,double* velocity,double*adjoint,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){2219 void Tria::Gradj(Vec grad_g,double* adjoint,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){ 2223 2220 2224 2221 if (strcmp(control_type,"drag")==0){ 2225 GradjDrag( grad_g, velocity,adjoint,inputs,analysis_type,sub_analysis_type);2222 GradjDrag( grad_g,adjoint,inputs,analysis_type,sub_analysis_type); 2226 2223 } 2227 2224 else if (strcmp(control_type,"B")==0){ 2228 GradjB( grad_g, velocity, adjoint,inputs,analysis_type,sub_analysis_type);2225 GradjB( grad_g,adjoint,inputs,analysis_type,sub_analysis_type); 2229 2226 } 2230 2227 else throw ErrorException(__FUNCT__,exprintf("%s%s","control type not supported yet: ",control_type)); … … 2233 2230 #undef __FUNCT__ 2234 2231 #define __FUNCT__ "Tria::GradjDrag" 2235 void Tria::GradjDrag(Vec grad_g,double* velocity,double*adjoint,void* vinputs,int analysis_type,int sub_analysis_type){2232 void Tria::GradjDrag(Vec grad_g,double* adjoint,void* vinputs,int analysis_type,int sub_analysis_type){ 2236 2233 2237 2234 … … 2253 2250 double adjx_list[numgrids]; 2254 2251 double adjy_list[numgrids]; 2252 double adjxadjy_list[numgrids][2]; 2255 2253 2256 2254 double drag; 2257 int dofs[1]={0}; 2255 int dofs1[1]={0}; 2256 int dofs2[2]={0,1}; 2258 2257 2259 2258 /* gaussian points: */ … … 2281 2280 double alpha_complement; 2282 2281 2283 2284 2282 /*element vector at the gaussian points: */ 2285 2283 double grade_g[numgrids]; … … 2309 2307 2310 2308 /* recover input parameters: */ 2311 inputs->Recover("drag",&k[0],1,dofs,numgrids,(void**)nodes); 2312 inputs->Recover("bed",&b[0],1,dofs,numgrids,(void**)nodes); 2313 inputs->Recover("thickness",&h[0],1,dofs,numgrids,(void**)nodes); 2309 inputs->Recover("drag",&k[0],1,dofs1,numgrids,(void**)nodes); 2310 inputs->Recover("bed",&b[0],1,dofs1,numgrids,(void**)nodes); 2311 inputs->Recover("thickness",&h[0],1,dofs1,numgrids,(void**)nodes); 2312 if(!inputs->Recover("velocity",&vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){ 2313 throw ErrorException(__FUNCT__,"missing velocity input parameter"); 2314 } 2315 2316 for(i=0;i<numgrids;i++){ 2317 vx_list[i]=vxvy_list[i][0]; 2318 vy_list[i]=vxvy_list[i][1]; 2319 } 2314 2320 2315 2321 /*Initialize parameter lists: */ 2316 2322 for(i=0;i<numgrids;i++){ 2317 vx_list[i]=velocity[doflist[i*numberofdofspernode+0]];2318 vy_list[i]=velocity[doflist[i*numberofdofspernode+1]];2319 vxvy_list[i][0]=vx_list[i];2320 vxvy_list[i][1]=vy_list[i];2323 //vx_list[i]=velocity[doflist[i*numberofdofspernode+0]]; 2324 //vy_list[i]=velocity[doflist[i*numberofdofspernode+1]]; 2325 //vxvy_list[i][0]=vx_list[i]; 2326 //vxvy_list[i][1]=vy_list[i]; 2321 2327 adjx_list[i]=adjoint[doflist[i*numberofdofspernode+0]]; 2322 2328 adjy_list[i]=adjoint[doflist[i*numberofdofspernode+1]]; … … 2429 2435 #undef __FUNCT__ 2430 2436 #define __FUNCT__ "Tria::GradjB" 2431 void Tria::GradjB(Vec grad_g,double* velocity,double*adjoint,void* vinputs,int analysis_type,int sub_analysis_type){2437 void Tria::GradjB(Vec grad_g,double* adjoint,void* vinputs,int analysis_type,int sub_analysis_type){ 2432 2438 2433 2439 int i; … … 2449 2455 double adjx_list[numgrids]; 2450 2456 double adjy_list[numgrids]; 2457 double adjxadjy_list[numgrids][2]; 2458 2459 int dofs1[1]={0}; 2460 int dofs2[2]={0,1}; 2451 2461 2452 2462 /* gaussian points: */ … … 2471 2481 /* strain rate: */ 2472 2482 double epsilon[3]; /* epsilon=[exx,eyy,exy];*/ 2473 2474 2483 2475 2484 /* parameters: */ … … 2499 2508 /* recover input parameters: */ 2500 2509 inputs->Recover("thickness",&h[0],1,dofs,numgrids,(void**)nodes); 2510 if(!inputs->Recover("velocity",&vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){ 2511 throw ErrorException(__FUNCT__,"missing velocity input parameter"); 2512 } 2513 2514 for(i=0;i<numgrids;i++){ 2515 vx_list[i]=vxvy_list[i][0]; 2516 vy_list[i]=vxvy_list[i][1]; 2517 } 2501 2518 2502 2519 /*Initialize parameter lists: */ 2503 2520 for(i=0;i<numgrids;i++){ 2504 vx_list[i]=velocity[doflist[i*numberofdofspernode+0]];2505 vy_list[i]=velocity[doflist[i*numberofdofspernode+1]];2506 vxvy_list[i][0]=vx_list[i];2507 vxvy_list[i][1]=vy_list[i];2521 //vx_list[i]=velocity[doflist[i*numberofdofspernode+0]]; 2522 //vy_list[i]=velocity[doflist[i*numberofdofspernode+1]]; 2523 //vxvy_list[i][0]=vx_list[i]; 2524 //vxvy_list[i][1]=vy_list[i]; 2508 2525 adjx_list[i]=adjoint[doflist[i*numberofdofspernode+0]]; 2509 2526 adjy_list[i]=adjoint[doflist[i*numberofdofspernode+1]]; … … 2572 2589 #undef __FUNCT__ 2573 2590 #define __FUNCT__ "Tria::Misfit" 2574 double Tria::Misfit( double* velocity,void* vinputs,int analysis_type,int sub_analysis_type){2591 double Tria::Misfit(void* vinputs,int analysis_type,int sub_analysis_type){ 2575 2592 2576 2593 int i; … … 2634 2651 throw ErrorException(__FUNCT__,"missing velocity_obs input parameter"); 2635 2652 } 2636 2653 if(!inputs->Recover("velocity",&vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){ 2654 throw ErrorException(__FUNCT__,"missing velocity input parameter"); 2655 } 2656 2657 /*Initialize velocities: */ 2637 2658 for(i=0;i<numgrids;i++){ 2638 2659 obs_vx_list[i]=obs_vxvy_list[i][0]; 2639 2660 obs_vy_list[i]=obs_vxvy_list[i][1]; 2640 } 2641 2642 /*Initialize velocities: */ 2643 for(i=0;i<numgrids;i++){ 2644 vx_list[i]=velocity[doflist[i*numberofdofspernode+0]]; 2645 vy_list[i]=velocity[doflist[i*numberofdofspernode+1]]; 2646 } 2647 2661 vx_list[i]=vxvy_list[i][0]; 2662 vy_list[i]=vxvy_list[i][1]; 2663 } 2664 2648 2665 /*Compute Misfit at the 3 nodes (integration of the linearized function)*/ 2649 2666 if(fit==0){
Note:
See TracChangeset
for help on using the changeset viewer.