[17986] | 1 | Index: ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp
|
---|
| 2 | ===================================================================
|
---|
| 3 | --- ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp (revision 17974)
|
---|
| 4 | +++ ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp (revision 17975)
|
---|
| 5 | @@ -9,18 +9,14 @@
|
---|
| 6 |
|
---|
| 7 | void SurfaceLogVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
|
---|
| 8 |
|
---|
| 9 | - /*Intermediary*/
|
---|
| 10 | - int i;
|
---|
| 11 | - Element* element=NULL;
|
---|
| 12 | -
|
---|
| 13 | /*output: */
|
---|
| 14 | - IssmDouble J=0;
|
---|
| 15 | + IssmDouble J=0.;
|
---|
| 16 | IssmDouble J_sum;
|
---|
| 17 |
|
---|
| 18 | /*Compute Misfit: */
|
---|
| 19 | - for (i=0;i<elements->Size();i++){
|
---|
| 20 | - element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
|
---|
| 21 | - J+=element->SurfaceLogVelMisfit();
|
---|
| 22 | + for(int i=0;i<elements->Size();i++){
|
---|
| 23 | + Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
|
---|
| 24 | + J+=SurfaceLogVelMisfit(element);
|
---|
| 25 | }
|
---|
| 26 |
|
---|
| 27 | /*Sum all J from all cpus of the cluster:*/
|
---|
| 28 | @@ -31,3 +27,102 @@
|
---|
| 29 | /*Assign output pointers: */
|
---|
| 30 | *pJ=J;
|
---|
| 31 | }
|
---|
| 32 | +
|
---|
| 33 | +IssmDouble SurfaceLogVelMisfit(Element* element){
|
---|
| 34 | +
|
---|
| 35 | + int domaintype,numcomponents;
|
---|
| 36 | + bool surfaceintegral;
|
---|
| 37 | + IssmDouble Jelem=0.;
|
---|
| 38 | + IssmDouble epsvel=2.220446049250313e-16;
|
---|
| 39 | + IssmDouble meanvel=3.170979198376458e-05; /*1000 m/yr*/
|
---|
| 40 | + IssmDouble velocity_mag,obs_velocity_mag;
|
---|
| 41 | + IssmDouble misfit,Jdet;
|
---|
| 42 | + IssmDouble vx,vy,vxobs,vyobs,weight;
|
---|
| 43 | + IssmDouble* xyz_list = NULL;
|
---|
| 44 | +
|
---|
| 45 | + /*Get basal element*/
|
---|
| 46 | + if(!element->IsOnSurface()) return 0.;
|
---|
| 47 | +
|
---|
| 48 | + /*If on water, return 0: */
|
---|
| 49 | + if(!element->IsIceInElement()) return 0.;
|
---|
| 50 | +
|
---|
| 51 | + /*Get problem dimension*/
|
---|
| 52 | + element->FindParam(&domaintype,DomainTypeEnum);
|
---|
| 53 | + switch(domaintype){
|
---|
| 54 | + case Domain2DverticalEnum:
|
---|
| 55 | + surfaceintegral = true;
|
---|
| 56 | + numcomponents = 1;
|
---|
| 57 | + break;
|
---|
| 58 | + case Domain3DEnum:
|
---|
| 59 | + surfaceintegral = true;
|
---|
| 60 | + numcomponents = 2;
|
---|
| 61 | + break;
|
---|
| 62 | + case Domain2DhorizontalEnum:
|
---|
| 63 | + surfaceintegral = false;
|
---|
| 64 | + numcomponents = 2;
|
---|
| 65 | + break;
|
---|
| 66 | + default: _error_("not supported yet");
|
---|
| 67 | + }
|
---|
| 68 | +
|
---|
| 69 | + /*Spawn surface element*/
|
---|
| 70 | + Element* topelement = element->SpawnTopElement();
|
---|
| 71 | +
|
---|
| 72 | + /* Get node coordinates*/
|
---|
| 73 | + topelement->GetVerticesCoordinates(&xyz_list);
|
---|
| 74 | +
|
---|
| 75 | + /*Retrieve all inputs we will be needing: */
|
---|
| 76 | + Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
|
---|
| 77 | + Input* vx_input =topelement->GetInput(VxEnum); _assert_(vx_input);
|
---|
| 78 | + Input* vxobs_input =topelement->GetInput(InversionVxObsEnum); _assert_(vxobs_input);
|
---|
| 79 | + Input* vy_input = NULL;
|
---|
| 80 | + Input* vyobs_input = NULL;
|
---|
| 81 | + if(numcomponents==2){
|
---|
| 82 | + vy_input =topelement->GetInput(VyEnum); _assert_(vy_input);
|
---|
| 83 | + vyobs_input =topelement->GetInput(InversionVyObsEnum); _assert_(vyobs_input);
|
---|
| 84 | + }
|
---|
| 85 | +
|
---|
| 86 | + /* Start looping on the number of gaussian points: */
|
---|
| 87 | + Gauss* gauss=topelement->NewGauss(4);
|
---|
| 88 | + for(int ig=gauss->begin();ig<gauss->end();ig++){
|
---|
| 89 | +
|
---|
| 90 | + gauss->GaussPoint(ig);
|
---|
| 91 | +
|
---|
| 92 | + /* Get Jacobian determinant: */
|
---|
| 93 | + topelement->JacobianDeterminant(&Jdet,xyz_list,gauss);
|
---|
| 94 | +
|
---|
| 95 | + /*Get all parameters at gaussian point*/
|
---|
| 96 | + weights_input->GetInputValue(&weight,gauss,SurfaceLogVelMisfitEnum);
|
---|
| 97 | + vx_input->GetInputValue(&vx,gauss);
|
---|
| 98 | + vxobs_input->GetInputValue(&vxobs,gauss);
|
---|
| 99 | + if(numcomponents==2){
|
---|
| 100 | + vy_input->GetInputValue(&vy,gauss);
|
---|
| 101 | + vyobs_input->GetInputValue(&vyobs,gauss);
|
---|
| 102 | + }
|
---|
| 103 | +
|
---|
| 104 | + /*Compute SurfaceLogVelMisfit:
|
---|
| 105 | + * [ vel + eps ] 2
|
---|
| 106 | + * J = 4 \bar{v}^2 | log ( ----------- ) |
|
---|
| 107 | + * [ vel + eps ]
|
---|
| 108 | + * obs
|
---|
| 109 | + */
|
---|
| 110 | + if(numcomponents==1){
|
---|
| 111 | + velocity_mag =fabs(vx)+epsvel;
|
---|
| 112 | + obs_velocity_mag=fabs(vxobs)+epsvel;
|
---|
| 113 | + }
|
---|
| 114 | + else{
|
---|
| 115 | + velocity_mag =sqrt(vx*vx+vy*vy)+epsvel;
|
---|
| 116 | + obs_velocity_mag=sqrt(vxobs*vxobs+vyobs*vyobs)+epsvel;
|
---|
| 117 | + }
|
---|
| 118 | +
|
---|
| 119 | + misfit=4*pow(meanvel,2)*pow(log(velocity_mag/obs_velocity_mag),2);
|
---|
| 120 | +
|
---|
| 121 | + /*Add to cost function*/
|
---|
| 122 | + Jelem+=misfit*weight*Jdet*gauss->weight;
|
---|
| 123 | + }
|
---|
| 124 | +
|
---|
| 125 | + /*clean up and Return: */
|
---|
| 126 | + if(domaintype!=Domain2DhorizontalEnum){topelement->DeleteMaterials(); delete topelement;};
|
---|
| 127 | + xDelete<IssmDouble>(xyz_list);
|
---|
| 128 | + delete gauss;
|
---|
| 129 | + return Jelem;
|
---|
| 130 | +}
|
---|
| 131 | Index: ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.h
|
---|
| 132 | ===================================================================
|
---|
| 133 | --- ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.h (revision 17974)
|
---|
| 134 | +++ ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.h (revision 17975)
|
---|
| 135 | @@ -9,5 +9,6 @@
|
---|
| 136 |
|
---|
| 137 | /* local prototypes: */
|
---|
| 138 | void SurfaceLogVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters);
|
---|
| 139 | +IssmDouble SurfaceLogVelMisfit(Element* element);
|
---|
| 140 |
|
---|
| 141 | #endif
|
---|
| 142 | Index: ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp
|
---|
| 143 | ===================================================================
|
---|
| 144 | --- ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp (revision 17974)
|
---|
| 145 | +++ ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp (revision 17975)
|
---|
| 146 | @@ -9,18 +9,14 @@
|
---|
| 147 |
|
---|
| 148 | void SurfaceRelVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
|
---|
| 149 |
|
---|
| 150 | - /*Intermediary*/
|
---|
| 151 | - int i;
|
---|
| 152 | - Element* element=NULL;
|
---|
| 153 | -
|
---|
| 154 | /*output: */
|
---|
| 155 | - IssmDouble J=0;
|
---|
| 156 | + IssmDouble J=0.;
|
---|
| 157 | IssmDouble J_sum;
|
---|
| 158 |
|
---|
| 159 | /*Compute Misfit: */
|
---|
| 160 | - for (i=0;i<elements->Size();i++){
|
---|
| 161 | - element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
|
---|
| 162 | - J+=element->SurfaceRelVelMisfit();
|
---|
| 163 | + for(int i=0;i<elements->Size();i++){
|
---|
| 164 | + Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
|
---|
| 165 | + J+=SurfaceRelVelMisfit(element);
|
---|
| 166 | }
|
---|
| 167 |
|
---|
| 168 | /*Sum all J from all cpus of the cluster:*/
|
---|
| 169 | @@ -31,3 +27,102 @@
|
---|
| 170 | /*Assign output pointers: */
|
---|
| 171 | *pJ=J;
|
---|
| 172 | }
|
---|
| 173 | +
|
---|
| 174 | +IssmDouble SurfaceRelVelMisfit(Element* element){
|
---|
| 175 | +
|
---|
| 176 | + int domaintype,numcomponents;
|
---|
| 177 | + bool surfaceintegral;
|
---|
| 178 | + IssmDouble Jelem=0.;
|
---|
| 179 | + IssmDouble misfit,Jdet,scalex,scaley;
|
---|
| 180 | + IssmDouble epsvel=2.220446049250313e-16;
|
---|
| 181 | + IssmDouble meanvel=3.170979198376458e-05; /*1000 m/yr*/
|
---|
| 182 | + IssmDouble vx,vy,vxobs,vyobs,weight;
|
---|
| 183 | + IssmDouble* xyz_list = NULL;
|
---|
| 184 | +
|
---|
| 185 | + /*Get basal element*/
|
---|
| 186 | + if(!element->IsOnSurface()) return 0.;
|
---|
| 187 | +
|
---|
| 188 | + /*If on water, return 0: */
|
---|
| 189 | + if(!element->IsIceInElement()) return 0.;
|
---|
| 190 | +
|
---|
| 191 | + /*Get problem dimension*/
|
---|
| 192 | + element->FindParam(&domaintype,DomainTypeEnum);
|
---|
| 193 | + switch(domaintype){
|
---|
| 194 | + case Domain2DverticalEnum:
|
---|
| 195 | + surfaceintegral = true;
|
---|
| 196 | + numcomponents = 1;
|
---|
| 197 | + break;
|
---|
| 198 | + case Domain3DEnum:
|
---|
| 199 | + surfaceintegral = true;
|
---|
| 200 | + numcomponents = 2;
|
---|
| 201 | + break;
|
---|
| 202 | + case Domain2DhorizontalEnum:
|
---|
| 203 | + surfaceintegral = false;
|
---|
| 204 | + numcomponents = 2;
|
---|
| 205 | + break;
|
---|
| 206 | + default: _error_("not supported yet");
|
---|
| 207 | + }
|
---|
| 208 | +
|
---|
| 209 | + /*Spawn surface element*/
|
---|
| 210 | + Element* topelement = element->SpawnTopElement();
|
---|
| 211 | +
|
---|
| 212 | + /* Get node coordinates*/
|
---|
| 213 | + topelement->GetVerticesCoordinates(&xyz_list);
|
---|
| 214 | +
|
---|
| 215 | + /*Retrieve all inputs we will be needing: */
|
---|
| 216 | + Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
|
---|
| 217 | + Input* vx_input =topelement->GetInput(VxEnum); _assert_(vx_input);
|
---|
| 218 | + Input* vxobs_input =topelement->GetInput(InversionVxObsEnum); _assert_(vxobs_input);
|
---|
| 219 | + Input* vy_input = NULL;
|
---|
| 220 | + Input* vyobs_input = NULL;
|
---|
| 221 | + if(numcomponents==2){
|
---|
| 222 | + vy_input =topelement->GetInput(VyEnum); _assert_(vy_input);
|
---|
| 223 | + vyobs_input =topelement->GetInput(InversionVyObsEnum); _assert_(vyobs_input);
|
---|
| 224 | + }
|
---|
| 225 | +
|
---|
| 226 | + /* Start looping on the number of gaussian points: */
|
---|
| 227 | + Gauss* gauss=topelement->NewGauss(4);
|
---|
| 228 | + for(int ig=gauss->begin();ig<gauss->end();ig++){
|
---|
| 229 | +
|
---|
| 230 | + gauss->GaussPoint(ig);
|
---|
| 231 | +
|
---|
| 232 | + /* Get Jacobian determinant: */
|
---|
| 233 | + topelement->JacobianDeterminant(&Jdet,xyz_list,gauss);
|
---|
| 234 | +
|
---|
| 235 | + /*Get all parameters at gaussian point*/
|
---|
| 236 | + weights_input->GetInputValue(&weight,gauss,SurfaceRelVelMisfitEnum);
|
---|
| 237 | + vx_input->GetInputValue(&vx,gauss);
|
---|
| 238 | + vxobs_input->GetInputValue(&vxobs,gauss);
|
---|
| 239 | + if(numcomponents==2){
|
---|
| 240 | + vy_input->GetInputValue(&vy,gauss);
|
---|
| 241 | + vyobs_input->GetInputValue(&vyobs,gauss);
|
---|
| 242 | + }
|
---|
| 243 | +
|
---|
| 244 | + /*Compute SurfaceRelVelMisfit:
|
---|
| 245 | + *
|
---|
| 246 | + * 1 [ \bar{v}^2 2 \bar{v}^2 2 ]
|
---|
| 247 | + * J = --- | ------------- (u - u ) + ------------- (v - v ) |
|
---|
| 248 | + * 2 [ (u + eps)^2 obs (v + eps)^2 obs ]
|
---|
| 249 | + * obs obs
|
---|
| 250 | + */
|
---|
| 251 | +
|
---|
| 252 | + if(numcomponents==2){
|
---|
| 253 | + scalex=pow(meanvel/(vxobs+epsvel),2); if(vxobs==0)scalex=0;
|
---|
| 254 | + scaley=pow(meanvel/(vyobs+epsvel),2); if(vyobs==0)scaley=0;
|
---|
| 255 | + misfit=0.5*(scalex*pow((vx-vxobs),2)+scaley*pow((vy-vyobs),2));
|
---|
| 256 | + }
|
---|
| 257 | + else{
|
---|
| 258 | + scalex=pow(meanvel/(vxobs+epsvel),2); if(vxobs==0)scalex=0;
|
---|
| 259 | + misfit=0.5*(scalex*pow((vx-vxobs),2));
|
---|
| 260 | + }
|
---|
| 261 | +
|
---|
| 262 | + /*Add to cost function*/
|
---|
| 263 | + Jelem+=misfit*weight*Jdet*gauss->weight;
|
---|
| 264 | + }
|
---|
| 265 | +
|
---|
| 266 | + /*clean up and Return: */
|
---|
| 267 | + if(domaintype!=Domain2DhorizontalEnum){topelement->DeleteMaterials(); delete topelement;};
|
---|
| 268 | + xDelete<IssmDouble>(xyz_list);
|
---|
| 269 | + delete gauss;
|
---|
| 270 | + return Jelem;
|
---|
| 271 | +}
|
---|
| 272 | Index: ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.h
|
---|
| 273 | ===================================================================
|
---|
| 274 | --- ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.h (revision 17974)
|
---|
| 275 | +++ ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.h (revision 17975)
|
---|
| 276 | @@ -9,5 +9,6 @@
|
---|
| 277 |
|
---|
| 278 | /* local prototypes: */
|
---|
| 279 | void SurfaceRelVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters);
|
---|
| 280 | +IssmDouble SurfaceRelVelMisfit(Element* element);
|
---|
| 281 |
|
---|
| 282 | #endif
|
---|
| 283 | Index: ../trunk-jpl/src/c/classes/Elements/Element.h
|
---|
| 284 | ===================================================================
|
---|
| 285 | --- ../trunk-jpl/src/c/classes/Elements/Element.h (revision 17974)
|
---|
| 286 | +++ ../trunk-jpl/src/c/classes/Elements/Element.h (revision 17975)
|
---|
| 287 | @@ -276,9 +276,6 @@
|
---|
| 288 |
|
---|
| 289 | virtual void Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index)=0;
|
---|
| 290 | virtual IssmDouble ThicknessAbsMisfit(void)=0;
|
---|
| 291 | - virtual IssmDouble SurfaceAbsVelMisfit(void)=0;
|
---|
| 292 | - virtual IssmDouble SurfaceRelVelMisfit(void)=0;
|
---|
| 293 | - virtual IssmDouble SurfaceLogVelMisfit(void)=0;
|
---|
| 294 | virtual IssmDouble SurfaceLogVxVyMisfit(void)=0;
|
---|
| 295 | virtual IssmDouble SurfaceAverageVelMisfit(void)=0;
|
---|
| 296 | virtual IssmDouble ThicknessAbsGradient(void)=0;
|
---|
| 297 | @@ -286,7 +283,6 @@
|
---|
| 298 | virtual IssmDouble ThicknessAcrossGradient(void)=0;
|
---|
| 299 | virtual IssmDouble BalancethicknessMisfit(void)=0;
|
---|
| 300 | virtual IssmDouble RheologyBbarAbsGradient(void)=0;
|
---|
| 301 | - virtual IssmDouble DragCoefficientAbsGradient(void)=0;
|
---|
| 302 | virtual void ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index)=0;
|
---|
| 303 | virtual void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index)=0;
|
---|
| 304 | virtual void ControlInputScaleGradient(int enum_type, IssmDouble scale)=0;
|
---|
| 305 | Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
|
---|
| 306 | ===================================================================
|
---|
| 307 | --- ../trunk-jpl/src/c/classes/Elements/Tria.cpp (revision 17974)
|
---|
| 308 | +++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp (revision 17975)
|
---|
| 309 | @@ -3570,65 +3570,6 @@
|
---|
| 310 | return Jelem;
|
---|
| 311 | }
|
---|
| 312 | /*}}}*/
|
---|
| 313 | -IssmDouble Tria::SurfaceLogVelMisfit(void){/*{{{*/
|
---|
| 314 | -
|
---|
| 315 | - IssmDouble Jelem=0.;
|
---|
| 316 | - IssmDouble misfit,Jdet;
|
---|
| 317 | - IssmDouble epsvel=2.220446049250313e-16;
|
---|
| 318 | - IssmDouble meanvel=3.170979198376458e-05; /*1000 m/yr*/
|
---|
| 319 | - IssmDouble velocity_mag,obs_velocity_mag;
|
---|
| 320 | - IssmDouble xyz_list[NUMVERTICES][3];
|
---|
| 321 | - IssmDouble vx,vy,vxobs,vyobs,weight;
|
---|
| 322 | - GaussTria *gauss=NULL;
|
---|
| 323 | -
|
---|
| 324 | - /*If on water, return 0: */
|
---|
| 325 | - if(!IsIceInElement())return 0;
|
---|
| 326 | -
|
---|
| 327 | - /* Get node coordinates and dof list: */
|
---|
| 328 | - ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
|
---|
| 329 | -
|
---|
| 330 | - /*Retrieve all inputs we will be needing: */
|
---|
| 331 | - Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
|
---|
| 332 | - Input* vx_input =inputs->GetInput(VxEnum); _assert_(vx_input);
|
---|
| 333 | - Input* vy_input =inputs->GetInput(VyEnum); _assert_(vy_input);
|
---|
| 334 | - Input* vxobs_input =inputs->GetInput(InversionVxObsEnum); _assert_(vxobs_input);
|
---|
| 335 | - Input* vyobs_input =inputs->GetInput(InversionVyObsEnum); _assert_(vyobs_input);
|
---|
| 336 | -
|
---|
| 337 | - /* Start looping on the number of gaussian points: */
|
---|
| 338 | - gauss=new GaussTria(4);
|
---|
| 339 | - for(int ig=gauss->begin();ig<gauss->end();ig++){
|
---|
| 340 | -
|
---|
| 341 | - gauss->GaussPoint(ig);
|
---|
| 342 | -
|
---|
| 343 | - /* Get Jacobian determinant: */
|
---|
| 344 | - GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
|
---|
| 345 | -
|
---|
| 346 | - /*Get all parameters at gaussian point*/
|
---|
| 347 | - weights_input->GetInputValue(&weight,gauss,SurfaceLogVelMisfitEnum);
|
---|
| 348 | - vx_input->GetInputValue(&vx,gauss);
|
---|
| 349 | - vy_input->GetInputValue(&vy,gauss);
|
---|
| 350 | - vxobs_input->GetInputValue(&vxobs,gauss);
|
---|
| 351 | - vyobs_input->GetInputValue(&vyobs,gauss);
|
---|
| 352 | -
|
---|
| 353 | - /*Compute SurfaceLogVelMisfit:
|
---|
| 354 | - * 4 [ vel + eps ] 2
|
---|
| 355 | - * J = 4 \bar{v}^2 | log ( ----------- ) |
|
---|
| 356 | - * [ vel + eps ]
|
---|
| 357 | - * obs
|
---|
| 358 | - */
|
---|
| 359 | - velocity_mag =sqrt(pow(vx, 2)+pow(vy, 2))+epsvel;
|
---|
| 360 | - obs_velocity_mag=sqrt(pow(vxobs,2)+pow(vyobs,2))+epsvel;
|
---|
| 361 | - misfit=4*pow(meanvel,2)*pow(log(velocity_mag/obs_velocity_mag),2);
|
---|
| 362 | -
|
---|
| 363 | - /*Add to cost function*/
|
---|
| 364 | - Jelem+=misfit*weight*Jdet*gauss->weight;
|
---|
| 365 | - }
|
---|
| 366 | -
|
---|
| 367 | - /*clean-up and Return: */
|
---|
| 368 | - delete gauss;
|
---|
| 369 | - return Jelem;
|
---|
| 370 | -}
|
---|
| 371 | -/*}}}*/
|
---|
| 372 | IssmDouble Tria::SurfaceLogVxVyMisfit(void){/*{{{*/
|
---|
| 373 |
|
---|
| 374 | IssmDouble Jelem=0, S=0;
|
---|
| 375 | @@ -3688,121 +3629,6 @@
|
---|
| 376 | return Jelem;
|
---|
| 377 | }
|
---|
| 378 | /*}}}*/
|
---|
| 379 | -IssmDouble Tria::SurfaceAbsVelMisfit(void){/*{{{*/
|
---|
| 380 | -
|
---|
| 381 | - IssmDouble Jelem=0;
|
---|
| 382 | - IssmDouble misfit,Jdet;
|
---|
| 383 | - IssmDouble vx,vy,vxobs,vyobs,weight;
|
---|
| 384 | - IssmDouble xyz_list[NUMVERTICES][3];
|
---|
| 385 | - GaussTria *gauss=NULL;
|
---|
| 386 | -
|
---|
| 387 | - /*If on water, return 0: */
|
---|
| 388 | - if(!IsIceInElement())return 0;
|
---|
| 389 | -
|
---|
| 390 | - /* Get node coordinates and dof list: */
|
---|
| 391 | - ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
|
---|
| 392 | -
|
---|
| 393 | - /*Retrieve all inputs we will be needing: */
|
---|
| 394 | - Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
|
---|
| 395 | - Input* vx_input =inputs->GetInput(VxEnum); _assert_(vx_input);
|
---|
| 396 | - Input* vy_input =inputs->GetInput(VyEnum); _assert_(vy_input);
|
---|
| 397 | - Input* vxobs_input =inputs->GetInput(InversionVxObsEnum); _assert_(vxobs_input);
|
---|
| 398 | - Input* vyobs_input =inputs->GetInput(InversionVyObsEnum); _assert_(vyobs_input);
|
---|
| 399 | -
|
---|
| 400 | - /* Start looping on the number of gaussian points: */
|
---|
| 401 | - gauss=new GaussTria(2);
|
---|
| 402 | - for(int ig=gauss->begin();ig<gauss->end();ig++){
|
---|
| 403 | -
|
---|
| 404 | - gauss->GaussPoint(ig);
|
---|
| 405 | -
|
---|
| 406 | - /* Get Jacobian determinant: */
|
---|
| 407 | - GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
|
---|
| 408 | -
|
---|
| 409 | - /*Get all parameters at gaussian point*/
|
---|
| 410 | - weights_input->GetInputValue(&weight,gauss,SurfaceAbsVelMisfitEnum);
|
---|
| 411 | - vx_input->GetInputValue(&vx,gauss);
|
---|
| 412 | - vy_input->GetInputValue(&vy,gauss);
|
---|
| 413 | - vxobs_input->GetInputValue(&vxobs,gauss);
|
---|
| 414 | - vyobs_input->GetInputValue(&vyobs,gauss);
|
---|
| 415 | -
|
---|
| 416 | - /*Compute SurfaceAbsVelMisfitEnum:
|
---|
| 417 | - *
|
---|
| 418 | - * 1 [ 2 2 ]
|
---|
| 419 | - * J = --- | (u - u ) + (v - v ) |
|
---|
| 420 | - * 2 [ obs obs ]
|
---|
| 421 | - *
|
---|
| 422 | - */
|
---|
| 423 | - misfit=0.5*( pow(vx-vxobs,2) + pow(vy-vyobs,2) );
|
---|
| 424 | -
|
---|
| 425 | - /*Add to cost function*/
|
---|
| 426 | - Jelem+=misfit*weight*Jdet*gauss->weight;
|
---|
| 427 | - }
|
---|
| 428 | -
|
---|
| 429 | - /*clean up and Return: */
|
---|
| 430 | - delete gauss;
|
---|
| 431 | - return Jelem;
|
---|
| 432 | -}
|
---|
| 433 | -/*}}}*/
|
---|
| 434 | -IssmDouble Tria::SurfaceRelVelMisfit(void){/*{{{*/
|
---|
| 435 | -
|
---|
| 436 | - IssmDouble Jelem=0;
|
---|
| 437 | - IssmDouble scalex=1,scaley=1;
|
---|
| 438 | - IssmDouble misfit,Jdet;
|
---|
| 439 | - IssmDouble epsvel=2.220446049250313e-16;
|
---|
| 440 | - IssmDouble meanvel=3.170979198376458e-05; /*1000 m/yr*/
|
---|
| 441 | - IssmDouble vx,vy,vxobs,vyobs,weight;
|
---|
| 442 | - IssmDouble xyz_list[NUMVERTICES][3];
|
---|
| 443 | - GaussTria *gauss=NULL;
|
---|
| 444 | -
|
---|
| 445 | - /*If on water, return 0: */
|
---|
| 446 | - if(!IsIceInElement())return 0;
|
---|
| 447 | -
|
---|
| 448 | - /* Get node coordinates and dof list: */
|
---|
| 449 | - ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
|
---|
| 450 | -
|
---|
| 451 | - /*Retrieve all inputs we will be needing: */
|
---|
| 452 | - Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
|
---|
| 453 | - Input* vx_input =inputs->GetInput(VxEnum); _assert_(vx_input);
|
---|
| 454 | - Input* vy_input =inputs->GetInput(VyEnum); _assert_(vy_input);
|
---|
| 455 | - Input* vxobs_input =inputs->GetInput(InversionVxObsEnum); _assert_(vxobs_input);
|
---|
| 456 | - Input* vyobs_input =inputs->GetInput(InversionVyObsEnum); _assert_(vyobs_input);
|
---|
| 457 | -
|
---|
| 458 | - /* Start looping on the number of gaussian points: */
|
---|
| 459 | - gauss=new GaussTria(4);
|
---|
| 460 | - for(int ig=gauss->begin();ig<gauss->end();ig++){
|
---|
| 461 | -
|
---|
| 462 | - gauss->GaussPoint(ig);
|
---|
| 463 | -
|
---|
| 464 | - /* Get Jacobian determinant: */
|
---|
| 465 | - GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
|
---|
| 466 | -
|
---|
| 467 | - /*Get all parameters at gaussian point*/
|
---|
| 468 | - weights_input->GetInputValue(&weight,gauss,SurfaceRelVelMisfitEnum);
|
---|
| 469 | - vx_input->GetInputValue(&vx,gauss);
|
---|
| 470 | - vy_input->GetInputValue(&vy,gauss);
|
---|
| 471 | - vxobs_input->GetInputValue(&vxobs,gauss);
|
---|
| 472 | - vyobs_input->GetInputValue(&vyobs,gauss);
|
---|
| 473 | -
|
---|
| 474 | - /*Compute SurfaceRelVelMisfit:
|
---|
| 475 | - *
|
---|
| 476 | - * 1 [ \bar{v}^2 2 \bar{v}^2 2 ]
|
---|
| 477 | - * J = --- | ------------- (u - u ) + ------------- (v - v ) |
|
---|
| 478 | - * 2 [ (u + eps)^2 obs (v + eps)^2 obs ]
|
---|
| 479 | - * obs obs
|
---|
| 480 | - */
|
---|
| 481 | - scalex=pow(meanvel/(vxobs+epsvel),2); if(vxobs==0)scalex=0;
|
---|
| 482 | - scaley=pow(meanvel/(vyobs+epsvel),2); if(vyobs==0)scaley=0;
|
---|
| 483 | - misfit=0.5*(scalex*pow((vx-vxobs),2)+scaley*pow((vy-vyobs),2));
|
---|
| 484 | -
|
---|
| 485 | - /*Add to cost function*/
|
---|
| 486 | - Jelem+=misfit*weight*Jdet*gauss->weight;
|
---|
| 487 | - }
|
---|
| 488 | -
|
---|
| 489 | - /*clean up and Return: */
|
---|
| 490 | - delete gauss;
|
---|
| 491 | - return Jelem;
|
---|
| 492 | -}
|
---|
| 493 | -/*}}}*/
|
---|
| 494 | IssmDouble Tria::ThicknessAbsGradient(void){/*{{{*/
|
---|
| 495 |
|
---|
| 496 | /* Intermediaries */
|
---|
| 497 | @@ -3988,48 +3814,6 @@
|
---|
| 498 | return Jelem;
|
---|
| 499 | }
|
---|
| 500 | /*}}}*/
|
---|
| 501 | -IssmDouble Tria::DragCoefficientAbsGradient(void){/*{{{*/
|
---|
| 502 | -
|
---|
| 503 | - /* Intermediaries */
|
---|
| 504 | - IssmDouble Jelem = 0;
|
---|
| 505 | - IssmDouble weight;
|
---|
| 506 | - IssmDouble Jdet;
|
---|
| 507 | - IssmDouble xyz_list[NUMVERTICES][3];
|
---|
| 508 | - IssmDouble dp[NDOF2];
|
---|
| 509 | - GaussTria *gauss = NULL;
|
---|
| 510 | -
|
---|
| 511 | - /*retrieve parameters and inputs*/
|
---|
| 512 | -
|
---|
| 513 | - /*If on water, return 0: */
|
---|
| 514 | - if(!IsIceInElement()) return 0;
|
---|
| 515 | -
|
---|
| 516 | - /*Retrieve all inputs we will be needing: */
|
---|
| 517 | - ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
|
---|
| 518 | - Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
|
---|
| 519 | - Input* drag_input =inputs->GetInput(FrictionCoefficientEnum); _assert_(drag_input);
|
---|
| 520 | -
|
---|
| 521 | - /* Start looping on the number of gaussian points: */
|
---|
| 522 | - gauss=new GaussTria(2);
|
---|
| 523 | - for(int ig=gauss->begin();ig<gauss->end();ig++){
|
---|
| 524 | -
|
---|
| 525 | - gauss->GaussPoint(ig);
|
---|
| 526 | -
|
---|
| 527 | - /* Get Jacobian determinant: */
|
---|
| 528 | - GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
|
---|
| 529 | -
|
---|
| 530 | - /*Get all parameters at gaussian point*/
|
---|
| 531 | - weights_input->GetInputValue(&weight,gauss,DragCoefficientAbsGradientEnum);
|
---|
| 532 | - drag_input->GetInputDerivativeValue(&dp[0],&xyz_list[0][0],gauss);
|
---|
| 533 | -
|
---|
| 534 | - /*Tikhonov regularization: J = 1/2 ((dp/dx)^2 + (dp/dy)^2) */
|
---|
| 535 | - Jelem+=weight*1/2*(dp[0]*dp[0]+dp[1]*dp[1])*Jdet*gauss->weight;
|
---|
| 536 | - }
|
---|
| 537 | -
|
---|
| 538 | - /*Clean up and return*/
|
---|
| 539 | - delete gauss;
|
---|
| 540 | - return Jelem;
|
---|
| 541 | -}
|
---|
| 542 | -/*}}}*/
|
---|
| 543 | void Tria::GetVectorFromControlInputs(Vector<IssmDouble>* vector,int control_enum,int control_index,const char* data){/*{{{*/
|
---|
| 544 |
|
---|
| 545 | int vertexpidlist[NUMVERTICES];
|
---|
| 546 | Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
|
---|
| 547 | ===================================================================
|
---|
| 548 | --- ../trunk-jpl/src/c/classes/Elements/Tria.h (revision 17974)
|
---|
| 549 | +++ ../trunk-jpl/src/c/classes/Elements/Tria.h (revision 17975)
|
---|
| 550 | @@ -136,7 +136,6 @@
|
---|
| 551 | void GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y);
|
---|
| 552 | #endif
|
---|
| 553 |
|
---|
| 554 | - IssmDouble DragCoefficientAbsGradient(void);
|
---|
| 555 | void GradientIndexing(int* indexing,int control_index);
|
---|
| 556 | void Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index);
|
---|
| 557 | void GradjBGradient(Vector<IssmDouble>* gradient,int control_index);
|
---|
| 558 | @@ -158,13 +157,10 @@
|
---|
| 559 | void ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum);
|
---|
| 560 | IssmDouble RheologyBbarAbsGradient(void);
|
---|
| 561 | IssmDouble ThicknessAbsMisfit(void);
|
---|
| 562 | - IssmDouble SurfaceAbsVelMisfit(void);
|
---|
| 563 | IssmDouble ThicknessAbsGradient(void);
|
---|
| 564 | IssmDouble ThicknessAlongGradient(void);
|
---|
| 565 | IssmDouble ThicknessAcrossGradient(void);
|
---|
| 566 | IssmDouble BalancethicknessMisfit(void);
|
---|
| 567 | - IssmDouble SurfaceRelVelMisfit(void);
|
---|
| 568 | - IssmDouble SurfaceLogVelMisfit(void);
|
---|
| 569 | IssmDouble SurfaceLogVxVyMisfit(void);
|
---|
| 570 | IssmDouble SurfaceAverageVelMisfit(void);
|
---|
| 571 | void InputControlUpdate(IssmDouble scalar,bool save_parameter);
|
---|
| 572 | Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
|
---|
| 573 | ===================================================================
|
---|
| 574 | --- ../trunk-jpl/src/c/classes/Elements/Penta.cpp (revision 17974)
|
---|
| 575 | +++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp (revision 17975)
|
---|
| 576 | @@ -3364,78 +3364,6 @@
|
---|
| 577 | }
|
---|
| 578 | }
|
---|
| 579 | /*}}}*/
|
---|
| 580 | -IssmDouble Penta::SurfaceAbsVelMisfit(void){/*{{{*/
|
---|
| 581 | -
|
---|
| 582 | - int approximation;
|
---|
| 583 | - IssmDouble J;
|
---|
| 584 | - Tria* tria=NULL;
|
---|
| 585 | -
|
---|
| 586 | - /*retrieve inputs :*/
|
---|
| 587 | - inputs->GetInputValue(&approximation,ApproximationEnum);
|
---|
| 588 | -
|
---|
| 589 | - /*If on water, return 0: */
|
---|
| 590 | - if(!IsIceInElement())return 0;
|
---|
| 591 | -
|
---|
| 592 | - /*Bail out if this element if:
|
---|
| 593 | - * -> Non SSA and not on the surface
|
---|
| 594 | - * -> SSA (2d model) and not on bed) */
|
---|
| 595 | - if ((approximation!=SSAApproximationEnum && !IsOnSurface()) || (approximation==SSAApproximationEnum && !IsOnBase())){
|
---|
| 596 | - return 0;
|
---|
| 597 | - }
|
---|
| 598 | - else if (approximation==SSAApproximationEnum){
|
---|
| 599 | -
|
---|
| 600 | - /*This element should be collapsed into a tria element at its base. Create this tria element,
|
---|
| 601 | - * and compute SurfaceAbsVelMisfit*/
|
---|
| 602 | - tria=(Tria*)SpawnTria(0,1,2);
|
---|
| 603 | - J=tria->SurfaceAbsVelMisfit();
|
---|
| 604 | - delete tria->material; delete tria;
|
---|
| 605 | - return J;
|
---|
| 606 | - }
|
---|
| 607 | - else{
|
---|
| 608 | -
|
---|
| 609 | - tria=(Tria*)SpawnTria(3,4,5);
|
---|
| 610 | - J=tria->SurfaceAbsVelMisfit();
|
---|
| 611 | - delete tria->material; delete tria;
|
---|
| 612 | - return J;
|
---|
| 613 | - }
|
---|
| 614 | -}
|
---|
| 615 | -/*}}}*/
|
---|
| 616 | -IssmDouble Penta::SurfaceLogVelMisfit(void){/*{{{*/
|
---|
| 617 | -
|
---|
| 618 | - int approximation;
|
---|
| 619 | - IssmDouble J;
|
---|
| 620 | - Tria* tria=NULL;
|
---|
| 621 | -
|
---|
| 622 | - /*retrieve inputs :*/
|
---|
| 623 | - inputs->GetInputValue(&approximation,ApproximationEnum);
|
---|
| 624 | -
|
---|
| 625 | - /*If on water, return 0: */
|
---|
| 626 | - if(!IsIceInElement())return 0;
|
---|
| 627 | -
|
---|
| 628 | - /*Bail out if this element if:
|
---|
| 629 | - * -> Non SSA and not on the surface
|
---|
| 630 | - * -> SSA (2d model) and not on bed) */
|
---|
| 631 | - if ((approximation!=SSAApproximationEnum && !IsOnSurface()) || (approximation==SSAApproximationEnum && !IsOnBase())){
|
---|
| 632 | - return 0;
|
---|
| 633 | - }
|
---|
| 634 | - else if (approximation==SSAApproximationEnum){
|
---|
| 635 | -
|
---|
| 636 | - /*This element should be collapsed into a tria element at its base. Create this tria element,
|
---|
| 637 | - * and compute SurfaceLogVelMisfit*/
|
---|
| 638 | - tria=(Tria*)SpawnTria(0,1,2); //lower face is 0, upper face is 1.
|
---|
| 639 | - J=tria->SurfaceLogVelMisfit();
|
---|
| 640 | - delete tria->material; delete tria;
|
---|
| 641 | - return J;
|
---|
| 642 | - }
|
---|
| 643 | - else{
|
---|
| 644 | -
|
---|
| 645 | - tria=(Tria*)SpawnTria(3,4,5); //lower face is 0, upper face is 1.
|
---|
| 646 | - J=tria->SurfaceLogVelMisfit();
|
---|
| 647 | - delete tria->material; delete tria;
|
---|
| 648 | - return J;
|
---|
| 649 | - }
|
---|
| 650 | -}
|
---|
| 651 | -/*}}}*/
|
---|
| 652 | IssmDouble Penta::SurfaceLogVxVyMisfit(void){/*{{{*/
|
---|
| 653 |
|
---|
| 654 | IssmDouble J;
|
---|
| 655 | @@ -3474,42 +3402,6 @@
|
---|
| 656 | }
|
---|
| 657 | }
|
---|
| 658 | /*}}}*/
|
---|
| 659 | -IssmDouble Penta::SurfaceRelVelMisfit(void){/*{{{*/
|
---|
| 660 | -
|
---|
| 661 | - int approximation;
|
---|
| 662 | - IssmDouble J;
|
---|
| 663 | - Tria* tria=NULL;
|
---|
| 664 | -
|
---|
| 665 | - /*retrieve inputs :*/
|
---|
| 666 | - inputs->GetInputValue(&approximation,ApproximationEnum);
|
---|
| 667 | -
|
---|
| 668 | - /*If on water, return 0: */
|
---|
| 669 | - if(!IsIceInElement())return 0;
|
---|
| 670 | -
|
---|
| 671 | - /*Bail out if this element if:
|
---|
| 672 | - * -> Non SSA and not on the surface
|
---|
| 673 | - * -> SSA (2d model) and not on bed) */
|
---|
| 674 | - if ((approximation!=SSAApproximationEnum && !IsOnSurface()) || (approximation==SSAApproximationEnum && !IsOnBase())){
|
---|
| 675 | - return 0;
|
---|
| 676 | - }
|
---|
| 677 | - else if (approximation==SSAApproximationEnum){
|
---|
| 678 | -
|
---|
| 679 | - /*This element should be collapsed into a tria element at its base. Create this tria element,
|
---|
| 680 | - * and compute SurfaceRelVelMisfit*/
|
---|
| 681 | - tria=(Tria*)SpawnTria(0,1,2);
|
---|
| 682 | - J=tria->SurfaceRelVelMisfit();
|
---|
| 683 | - delete tria->material; delete tria;
|
---|
| 684 | - return J;
|
---|
| 685 | - }
|
---|
| 686 | - else{
|
---|
| 687 | -
|
---|
| 688 | - tria=(Tria*)SpawnTria(3,4,5);
|
---|
| 689 | - J=tria->SurfaceRelVelMisfit();
|
---|
| 690 | - delete tria->material; delete tria;
|
---|
| 691 | - return J;
|
---|
| 692 | - }
|
---|
| 693 | -}
|
---|
| 694 | -/*}}}*/
|
---|
| 695 | IssmDouble Penta::ThicknessAbsGradient(void){/*{{{*/
|
---|
| 696 |
|
---|
| 697 | _error_("Not implemented yet");
|
---|
| 698 | @@ -3534,20 +3426,6 @@
|
---|
| 699 | return J;
|
---|
| 700 | }
|
---|
| 701 | /*}}}*/
|
---|
| 702 | -IssmDouble Penta::DragCoefficientAbsGradient(void){/*{{{*/
|
---|
| 703 | -
|
---|
| 704 | - IssmDouble J;
|
---|
| 705 | - Tria* tria=NULL;
|
---|
| 706 | -
|
---|
| 707 | - /*If on water, on shelf or not on bed, skip: */
|
---|
| 708 | - if(!IsIceInElement()|| IsFloating() || !IsOnBase()) return 0;
|
---|
| 709 | -
|
---|
| 710 | - tria=(Tria*)SpawnTria(0,1,2); //lower face is 0, upper face is 1
|
---|
| 711 | - J=tria->DragCoefficientAbsGradient();
|
---|
| 712 | - delete tria->material; delete tria;
|
---|
| 713 | - return J;
|
---|
| 714 | -}
|
---|
| 715 | -/*}}}*/
|
---|
| 716 | IssmDouble Penta::RheologyBbarAbsGradient(void){/*{{{*/
|
---|
| 717 |
|
---|
| 718 | IssmDouble J;
|
---|
| 719 | Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
|
---|
| 720 | ===================================================================
|
---|
| 721 | --- ../trunk-jpl/src/c/classes/Elements/Penta.h (revision 17974)
|
---|
| 722 | +++ ../trunk-jpl/src/c/classes/Elements/Penta.h (revision 17975)
|
---|
| 723 | @@ -131,7 +131,6 @@
|
---|
| 724 | void GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y);
|
---|
| 725 | #endif
|
---|
| 726 |
|
---|
| 727 | - IssmDouble DragCoefficientAbsGradient(void);
|
---|
| 728 | void GradientIndexing(int* indexing,int control_index);
|
---|
| 729 | void Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index);
|
---|
| 730 | void GradjDragSSA(Vector<IssmDouble>* gradient,int control_index);
|
---|
| 731 | @@ -148,9 +147,6 @@
|
---|
| 732 | void ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum);
|
---|
| 733 | IssmDouble RheologyBbarAbsGradient(void);
|
---|
| 734 | IssmDouble ThicknessAbsMisfit(void);
|
---|
| 735 | - IssmDouble SurfaceAbsVelMisfit(void);
|
---|
| 736 | - IssmDouble SurfaceRelVelMisfit(void);
|
---|
| 737 | - IssmDouble SurfaceLogVelMisfit(void);
|
---|
| 738 | IssmDouble SurfaceLogVxVyMisfit(void);
|
---|
| 739 | IssmDouble SurfaceAverageVelMisfit(void);
|
---|
| 740 | IssmDouble ThicknessAbsGradient(void);
|
---|
| 741 | Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
|
---|
| 742 | ===================================================================
|
---|
| 743 | --- ../trunk-jpl/src/c/classes/Elements/Seg.h (revision 17974)
|
---|
| 744 | +++ ../trunk-jpl/src/c/classes/Elements/Seg.h (revision 17975)
|
---|
| 745 | @@ -167,7 +167,6 @@
|
---|
| 746 | void GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y){_error_("not implemented yet");};
|
---|
| 747 | #endif
|
---|
| 748 |
|
---|
| 749 | - IssmDouble DragCoefficientAbsGradient(void){_error_("not implemented yet");};
|
---|
| 750 | void GradientIndexing(int* indexing,int control_index);
|
---|
| 751 | void Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index){_error_("not implemented yet");};
|
---|
| 752 | void GradjBGradient(Vector<IssmDouble>* gradient,int control_index){_error_("not implemented yet");};
|
---|
| 753 | @@ -189,13 +188,10 @@
|
---|
| 754 | void ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum){_error_("not implemented yet");};
|
---|
| 755 | IssmDouble RheologyBbarAbsGradient(void){_error_("not implemented yet");};
|
---|
| 756 | IssmDouble ThicknessAbsMisfit(void){_error_("not implemented yet");};
|
---|
| 757 | - IssmDouble SurfaceAbsVelMisfit(void){_error_("not implemented yet");};
|
---|
| 758 | IssmDouble ThicknessAbsGradient(void){_error_("not implemented yet");};
|
---|
| 759 | IssmDouble ThicknessAlongGradient(void){_error_("not implemented yet");};
|
---|
| 760 | IssmDouble ThicknessAcrossGradient(void){_error_("not implemented yet");};
|
---|
| 761 | IssmDouble BalancethicknessMisfit(void){_error_("not implemented yet");};
|
---|
| 762 | - IssmDouble SurfaceRelVelMisfit(void){_error_("not implemented yet");};
|
---|
| 763 | - IssmDouble SurfaceLogVelMisfit(void){_error_("not implemented yet");};
|
---|
| 764 | IssmDouble SurfaceLogVxVyMisfit(void){_error_("not implemented yet");};
|
---|
| 765 | IssmDouble SurfaceAverageVelMisfit(void){_error_("not implemented yet");};
|
---|
| 766 | void InputControlUpdate(IssmDouble scalar,bool save_parameter){_error_("not implemented yet");};
|
---|
| 767 | Index: ../trunk-jpl/src/c/classes/Elements/Tetra.h
|
---|
| 768 | ===================================================================
|
---|
| 769 | --- ../trunk-jpl/src/c/classes/Elements/Tetra.h (revision 17974)
|
---|
| 770 | +++ ../trunk-jpl/src/c/classes/Elements/Tetra.h (revision 17975)
|
---|
| 771 | @@ -193,13 +193,10 @@
|
---|
| 772 | void ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum){_error_("not implemented yet");};
|
---|
| 773 | IssmDouble RheologyBbarAbsGradient(void){_error_("not implemented yet");};
|
---|
| 774 | IssmDouble ThicknessAbsMisfit(void){_error_("not implemented yet");};
|
---|
| 775 | - IssmDouble SurfaceAbsVelMisfit(void){_error_("not implemented yet");};
|
---|
| 776 | IssmDouble ThicknessAbsGradient(void){_error_("not implemented yet");};
|
---|
| 777 | IssmDouble ThicknessAlongGradient(void){_error_("not implemented yet");};
|
---|
| 778 | IssmDouble ThicknessAcrossGradient(void){_error_("not implemented yet");};
|
---|
| 779 | IssmDouble BalancethicknessMisfit(void){_error_("not implemented yet");};
|
---|
| 780 | - IssmDouble SurfaceRelVelMisfit(void){_error_("not implemented yet");};
|
---|
| 781 | - IssmDouble SurfaceLogVelMisfit(void){_error_("not implemented yet");};
|
---|
| 782 | IssmDouble SurfaceLogVxVyMisfit(void){_error_("not implemented yet");};
|
---|
| 783 | IssmDouble SurfaceAverageVelMisfit(void){_error_("not implemented yet");};
|
---|
| 784 | void InputControlUpdate(IssmDouble scalar,bool save_parameter){_error_("not implemented yet");};
|
---|