Changeset 2268
- Timestamp:
- 09/21/09 15:52:16 (15 years ago)
- Location:
- issm/trunk/src
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/ModelProcessorx/Control/CreateParametersControl.cpp
r2267 r2268 86 86 param= new Param(count,"eps_cm",DOUBLE); 87 87 param->SetDouble(iomodel->eps_cm); 88 parameters->AddObject(param); 89 90 /*cm_noisedampening: */ 91 count++; 92 param= new Param(count,"cm_noisedampening",DOUBLE); 93 param->SetDouble(iomodel->cm_noisedampening); 88 94 parameters->AddObject(param); 89 95 -
issm/trunk/src/c/ModelProcessorx/IoModel.cpp
r2267 r2268 116 116 iomodel->tolx=0; 117 117 iomodel->maxiter=NULL; 118 iomodel->cm_noisedampening=0; 118 119 iomodel->mincontrolconstraint=0; 119 120 iomodel->maxcontrolconstraint=0; … … 331 332 IoModelFetchData((void**)&iomodel->eps_cm,NULL,NULL,iomodel_handle,"eps_cm","Scalar",NULL); 332 333 IoModelFetchData((void**)&iomodel->tolx,NULL,NULL,iomodel_handle,"tolx","Scalar",NULL); 334 IoModelFetchData((void**)&iomodel->cm_noisedampening,NULL,NULL,iomodel_handle,"cm_noisedampening","Scalar",NULL); 333 335 IoModelFetchData((void**)&iomodel->mincontrolconstraint,NULL,NULL,iomodel_handle,"mincontrolconstraint","Scalar",NULL); 334 336 IoModelFetchData((void**)&iomodel->maxcontrolconstraint,NULL,NULL,iomodel_handle,"maxcontrolconstraint","Scalar",NULL); -
issm/trunk/src/c/ModelProcessorx/IoModel.h
r2267 r2268 114 114 double tolx; 115 115 double* maxiter; 116 double cm_noisedampening; 116 117 double mincontrolconstraint; 117 118 double maxcontrolconstraint; -
issm/trunk/src/c/objects/Tria.cpp
r2112 r2268 2227 2227 int doflist1[numgrids]; 2228 2228 int numberofdofspernode; 2229 double dh1dh2dh3_basic[NDOF2][numgrids]; 2229 2230 2230 2231 /* grid data: */ … … 2250 2251 2251 2252 /* parameters: */ 2252 double dvx[NDOF2]; 2253 double dvy[NDOF2]; 2254 double dadjx[NDOF2]; 2255 double dadjy[NDOF2]; 2253 double dk[NDOF2]; 2256 2254 double vx,vy; 2257 2255 double lambda,mu; 2258 2256 double bed,thickness,Neff; 2257 double cm_noisedampening; 2259 2258 2260 2259 /*drag: */ … … 2280 2279 /*recover pointers: */ 2281 2280 inputs=(ParameterInputs*)vinputs; 2281 2282 /*Get out if shelf*/ 2283 if(shelf) return; 2282 2284 2283 2285 /* Get node coordinates and dof list: */ … … 2298 2300 if(!inputs->Recover("adjoint",&adjxadjy_list[0][0],2,dofs2,numgrids,(void**)nodes)){ 2299 2301 throw ErrorException(__FUNCT__,"missing adjoint input parameter"); 2302 } 2303 if(!inputs->Recover("cm_noisedampening",&cm_noisedampening)){ 2304 throw ErrorException(__FUNCT__,"missing cm_noisedampening"); 2300 2305 } 2301 2306 … … 2392 2397 GetNodalFunctions(l1l2l3, gauss_l1l2l3); 2393 2398 2399 /*Get nodal functions derivatives*/ 2400 GetNodalFunctionsDerivativesBasic(&dh1dh2dh3_basic[0][0],&xyz_list[0][0],gauss_l1l2l3); 2401 2402 /*Get k derivative: dk/dx */ 2403 GetParameterDerivativeValue(&dk[0], &k[0],&xyz_list[0][0], gauss_l1l2l3); 2404 2394 2405 /*Build gradje_g_gaussian vector (actually -dJ/ddrag): */ 2395 2406 for (i=0;i<numgrids;i++){ 2396 grade_g_gaussian[i]=-2*drag*alpha_complement*((lambda*vx+mu*vy))*Jdet*gauss_weight*l1l2l3[i]; 2407 grade_g_gaussian[i]= 2408 -2*drag*alpha_complement*((lambda*vx+mu*vy))*Jdet*gauss_weight*l1l2l3[i] //standard term dJ/dki 2409 +cm_noisedampening*Jdet*gauss_weight*(dh1dh2dh3_basic[0][i]*dk[0]+dh1dh2dh3_basic[1][i]*dk[1]); // regularization term d/dki(1/2*(dk/dx)^2) 2397 2410 } 2398 2411 … … 2424 2437 int doflist1[numgrids]; 2425 2438 int numberofdofspernode; 2439 double dh1dh2dh3_basic[NDOF2][numgrids]; 2426 2440 2427 2441 /* grid data: */ … … 2454 2468 double surface_normal[3]; 2455 2469 double bed_normal[3]; 2470 double dk[NDOF2]; 2471 double cm_noisedampening; 2456 2472 2457 2473 /*drag: */ … … 2494 2510 if(!inputs->Recover("adjoint",&adjxyz_list[0][0],3,dofs3,numgrids,(void**)nodes)){ 2495 2511 throw ErrorException(__FUNCT__,"missing adjoint input parameter"); 2512 } 2513 if(!inputs->Recover("cm_noisedampening",&cm_noisedampening)){ 2514 throw ErrorException(__FUNCT__,"missing cm_noisedampening"); 2496 2515 } 2497 2516 … … 2599 2618 GetNodalFunctions(l1l2l3, gauss_l1l2l3); 2600 2619 2620 /*Get nodal functions derivatives*/ 2621 GetNodalFunctionsDerivativesBasic(&dh1dh2dh3_basic[0][0],&xyz_list[0][0],gauss_l1l2l3); 2622 2623 /*Get k derivative: dk/dx */ 2624 GetParameterDerivativeValue(&dk[0], &k[0],&xyz_list[0][0], gauss_l1l2l3); 2625 2601 2626 /*Build gradje_g_gaussian vector (actually -dJ/ddrag): */ 2602 2627 for (i=0;i<numgrids;i++){ 2628 //standard gradient dJ/dki 2603 2629 grade_g_gaussian[i]=( 2604 2630 -lambda*(2*drag*alpha_complement*(vx - vz*bed_normal[0]*bed_normal[2])) … … 2606 2632 -xi *(2*drag*alpha_complement*(-vx*bed_normal[0]*bed_normal[2]-vy*bed_normal[1]*bed_normal[2])) 2607 2633 )*Jdet*gauss_weight*l1l2l3[i]; 2634 2635 //Add regularization term 2636 grade_g_gaussian[i]+=cm_noisedampening*Jdet*gauss_weight*(dh1dh2dh3_basic[0][i]*dk[0]+dh1dh2dh3_basic[1][i]*dk[1]); 2608 2637 } 2609 2638 … … 2666 2695 int doflist1[numgrids]; 2667 2696 int numberofdofspernode; 2697 double dh1dh2dh3_basic[NDOF2][numgrids]; 2668 2698 2669 2699 /* grid data: */ … … 2710 2740 double thickness; 2711 2741 int dofs[1]={0}; 2742 double dk[NDOF2]; 2743 double cm_noisedampening; 2712 2744 2713 2745 ParameterInputs* inputs=NULL; … … 2731 2763 if(!inputs->Recover("adjoint",&adjxadjy_list[0][0],2,dofs2,numgrids,(void**)nodes)){ 2732 2764 throw ErrorException(__FUNCT__,"missing adjoint input parameter"); 2765 } 2766 if(!inputs->Recover("cm_noisedampening",&cm_noisedampening)){ 2767 throw ErrorException(__FUNCT__,"missing cm_noisedampening"); 2733 2768 } 2734 2769 … … 2781 2816 #endif 2782 2817 2818 /*Get nodal functions derivatives*/ 2819 GetNodalFunctionsDerivativesBasic(&dh1dh2dh3_basic[0][0],&xyz_list[0][0],gauss_l1l2l3); 2820 2821 /*Get k derivative: dk/dx */ 2822 GetParameterDerivativeValue(&dk[0], &k[0],&xyz_list[0][0], gauss_l1l2l3); 2823 2783 2824 /*Build gradje_g_gaussian vector (actually -dJ/dB): */ 2784 2825 for (i=0;i<numgrids;i++){ 2826 //standard gradient dJ/dki 2785 2827 grade_g_gaussian[i]=-viscosity_complement*thickness*( (2*dvx[0]+dvy[1])*2*dadjx[0]+(dvx[1]+dvy[0])*(dadjx[1]+dadjy[0])+(2*dvy[1]+dvx[0])*2*dadjy[1])*Jdet*gauss_weight*l1l2l3[i]; 2828 2829 //Add regularization term 2830 grade_g_gaussian[i]+=cm_noisedampening*Jdet*gauss_weight*(dh1dh2dh3_basic[0][i]*dk[0]+dh1dh2dh3_basic[1][i]*dk[1]); 2786 2831 } 2787 2832 … … 2829 2874 double relative_list[numgrids]; 2830 2875 double logarithmic_list[numgrids]; 2876 double B[numgrids]; 2831 2877 2832 2878 /* gaussian points: */ … … 2842 2888 double velocity_mag,obs_velocity_mag; 2843 2889 double absolute,relative,logarithmic; 2890 double dk[NDOF2]; 2891 double dB[NDOF2]; 2892 double cm_noisedampening; 2844 2893 2845 2894 /* Jacobian: */ … … 2870 2919 if(!inputs->Recover("velocity",&vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){ 2871 2920 throw ErrorException(__FUNCT__,"missing velocity input parameter"); 2921 } 2922 if(!inputs->Recover("cm_noisedampening",&cm_noisedampening)){ 2923 throw ErrorException(__FUNCT__,"missing cm_noisedampening"); 2872 2924 } 2873 2925 … … 2933 2985 #endif 2934 2986 2987 2988 2989 /*Initialize Jelem with dampening term*/ 2990 /* NOT working for NOW 2991 if (strcmp(control_type,"drag")==0 & !shelf){ 2992 GetParameterDerivativeValue(&dk[0], &k[0],&xyz_list[0][0], gauss_l1l2l3); 2993 Jelem+=cm_noisedampening*1/2*(pow(dk[0],2)+pow(dk[1],2))*Jdet*gauss_weight; 2994 if (id==1){ 2995 printf("id=%i value=%g k=[%g %g %g]\n",id,(pow(dk[0],2)+pow(dk[1],2)),k[0],k[1],k[2]); 2996 } 2997 if ((pow(dk[0],2)+pow(dk[1],2))>pow(10,-20)){ 2998 printf("id=%i value=%g k=[%g %g %g]\n",id,(pow(dk[0],2)+pow(dk[1],2)),k[0],k[1],k[2]); 2999 } 3000 } 3001 else if (strcmp(control_type,"B")==0){ 3002 B=matice->GetB(); 3003 GetParameterDerivativeValue(&dB[0], &B[0],&xyz_list[0][0], gauss_l1l2l3); 3004 Jelem+=cm_noisedampening*1/2*(pow(dB[0],2)+pow(dB[1],2))*Jdet*gauss_weight; 3005 } 3006 */ 3007 2935 3008 /*Differents misfits are allowed: */ 2936 3009 if(fit==0){ -
issm/trunk/src/c/parallel/diagnostic.cpp
r2234 r2268 33 33 DataSet* results=NULL; 34 34 DataSet* processed_results=NULL; 35 Result* result=NULL;35 Result* result=NULL; 36 36 37 37 ParameterInputs* inputs=NULL; 38 38 int waitonlock=0; 39 int 39 int numberofnodes; 40 40 41 41 double* u_g_initial=NULL; … … 44 44 int count; 45 45 DataSet* parameters=NULL; 46 double cm_noisedampening; 46 47 47 48 MODULEBOOT(); … … 99 100 inputs->Add("velocity",u_g_initial,3,numberofnodes); 100 101 if(control_analysis){ 102 model->FindParam(&cm_noisedampening,"cm_noisedampening"); 103 inputs->Add("cm_noisedampening",cm_noisedampening); 101 104 model->FindParam(&u_g_obs,"u_g_obs",DiagnosticAnalysisEnum(),HorizAnalysisEnum()); 102 105 inputs->Add("velocity_obs",u_g_obs,2,numberofnodes); -
issm/trunk/src/c/parallel/steadystate.cpp
r2234 r2268 45 45 double* u_g_obs=NULL; 46 46 double dt; 47 double cm_noisedampening; 47 48 Param* param=NULL; 48 49 … … 109 110 110 111 if(control_analysis){ 112 model->FindParam(&cm_noisedampening,"cm_noisedampening"); 113 inputs->Add("cm_noisedampening",cm_noisedampening); 111 114 model->FindParam(&u_g_obs,"u_g_obs",DiagnosticAnalysisEnum(),HorizAnalysisEnum()); 112 115 inputs->Add("velocity_obs",u_g_obs,2,numberofnodes); -
issm/trunk/src/m/classes/@model/model.m
r2267 r2268 182 182 md.tolx=0; 183 183 md.optscal=[]; 184 md.cm_noisedampening=0; 184 185 md.mincontrolconstraint=0; 185 186 md.maxcontrolconstraint=0; -
issm/trunk/src/m/classes/public/display/displaycontrol.m
r2267 r2268 19 19 fielddisplay(md,'maxiter','maximum iterations during each optimization step'); 20 20 fielddisplay(md,'tolx','minimum tolerance which will stop one optimization search'); 21 fielddisplay(md,'cm_noisedampening','noise dampening coefficient'); 21 22 fielddisplay(md,'mincontrolconstraint','minimum contraint for the controlled parameters'); 22 23 fielddisplay(md,'maxcontrolconstraint','maximum contraint for the controlled parameters'); -
issm/trunk/src/m/classes/public/marshall.m
r2267 r2268 112 112 WriteData(fid,md.tolx,'Scalar','tolx'); 113 113 WriteData(fid,md.maxiter,'Mat','maxiter'); 114 WriteData(fid,md.cm_noisedampening,'Scalar','cm_noisedampening'); 114 115 WriteData(fid,md.mincontrolconstraint,'Scalar','mincontrolconstraint'); 115 116 WriteData(fid,md.maxcontrolconstraint,'Scalar','maxcontrolconstraint'); -
issm/trunk/src/m/solutions/cielo/diagnostic.m
r1963 r2268 34 34 inputs=add(inputs,'velocity',models.dh.parameters.u_g,'doublevec',3,models.dh.parameters.numberofnodes); 35 35 if md.control_analysis, 36 inputs=add(inputs,'cm_noisedampening',models.dh.parameters.cm_noisedampening,'double'); 36 37 inputs=add(inputs,'velocity_obs',models.dh.parameters.u_g_obs,'doublevec',2,models.dh.parameters.numberofnodes); 37 38 end -
issm/trunk/src/m/solutions/cielo/steadystate.m
r2027 r2268 44 44 inputs=add(inputs,'dt',models.t.parameters.dt*models.t.parameters.yts,'double'); 45 45 if md.control_analysis, 46 inputs=add(inputs,'cm_noisedampening',models.dh.parameters.cm_noisedampening,'double'); 46 47 inputs=add(inputs,'velocity_obs',models.dh.parameters.u_g_obs,'doublevec',2,models.dh.parameters.numberofnodes); 47 48 end
Note:
See TracChangeset
for help on using the changeset viewer.