Changeset 26255
- Timestamp:
- 05/10/21 12:30:20 (4 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 2 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp ¶
r26090 r26255 10 10 #include "../modules/modules.h" 11 11 #include "../solutionsequences/solutionsequences.h" 12 #include "../classes/Inputs/DatasetInput.h" 13 12 14 13 15 void LevelsetAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/ … … 49 51 50 52 iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 53 // iomodel->FetchDataToInput(inputs,elements,"md.mask.ref_levelset",MaskIceRefLevelsetEnum); 51 54 iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum); 52 55 iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum); … … 67 70 iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum); 68 71 break; 72 case CalvingTestEnum: 73 iomodel->FetchDataToInput(inputs,elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum); 74 iomodel->FetchDataToInput(inputs,elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum); 75 iomodel->FetchDataToInput(inputs,elements,"md.calving.Qrates",CalvingNonlinearQRateEnum); 76 iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum); 77 break; 69 78 case CalvingMinthicknessEnum: 70 79 iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum); … … 103 112 void LevelsetAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/ 104 113 114 IssmDouble* coefficients=NULL; 115 int nco; 116 105 117 parameters->AddObject(iomodel->CopyConstantObject("md.levelset.stabilization",LevelsetStabilizationEnum)); 106 118 parameters->AddObject(iomodel->CopyConstantObject("md.levelset.reinit_frequency",LevelsetReinitFrequencyEnum)); … … 117 129 parameters->AddObject(iomodel->CopyConstantObject("md.calving.min_thickness",CalvingMinthicknessEnum)); 118 130 break; 131 case CalvingTestEnum: 132 parameters->AddObject(iomodel->CopyConstantObject("md.calving.min_thickness",CalvingMinthicknessEnum)); 133 parameters->AddObject(iomodel->CopyConstantObject("md.calving.dt_order",CalvingDtimeorderEnum)); 134 parameters->AddObject(iomodel->CopyConstantObject("md.calving.nonlinear_law",CalvingNonlinearLawEnum)); 135 136 /* Add the coefficients for the new nonlinear law */ 137 iomodel->FetchData(&coefficients, &nco, NULL, "md.calving.coefficients"); 138 parameters->AddObject(new DoubleMatParam(CalvingNonlinearCoeffEnum, coefficients, nco, 1)); 139 xDelete<IssmDouble>(coefficients); 119 140 case CalvingMinthicknessEnum: 120 141 parameters->AddObject(iomodel->CopyConstantObject("md.calving.min_thickness",CalvingMinthicknessEnum)); … … 215 236 IssmDouble* dbasis = xNew<IssmDouble>(2*numnodes); 216 237 IssmDouble* Bprime = NULL; 238 IssmDouble tau; 217 239 if(stabilization==2){ 218 240 Bprime = xNew<IssmDouble>(dim*numnodes); … … 340 362 341 363 /*Intermediaries */ 342 int domaintype ;364 int domaintype, stabilization; 343 365 IssmDouble Jdet,dt; 344 366 IssmDouble lsf; 345 367 IssmDouble* xyz_list = NULL; 368 IssmDouble vx,vy,vel,h,tau; 346 369 347 370 /*Fetch number of nodes and dof for this finite element*/ … … 351 374 ElementVector* pe = basalelement->NewElementVector(); 352 375 basalelement->FindParam(&dt,TimesteppingTimeStepEnum); 376 basalelement->FindParam(&stabilization,LevelsetStabilizationEnum); 353 377 354 378 if(dt!=0.){ … … 359 383 basalelement->GetVerticesCoordinates(&xyz_list); 360 384 Input* levelset_input = basalelement->GetInput(MaskIceLevelsetEnum); _assert_(levelset_input); 385 386 // h=element->CharacteristicLength(); 361 387 362 388 /* Start looping on the number of gaussian points: */ … … 473 499 } 474 500 501 if(calvinglaw==CalvingTestEnum){ 502 503 /*Get minimum thickness threshold*/ 504 femmodel->parameters->FindParam(&min_thickness,CalvingMinthicknessEnum); 505 506 /*Loop over all elements of this partition*/ 507 for(Object* & object : femmodel->elements->objects){ 508 Element* element = xDynamicCast<Element*>(object); 509 510 int numnodes = element->GetNumberOfNodes(); 511 Gauss* gauss = element->NewGauss(); 512 Input* H_input = element->GetInput(ThicknessEnum); _assert_(H_input); 513 Input* b_input = element->GetInput(BedEnum); _assert_(b_input); 514 Input* sl_input = element->GetInput(SealevelEnum); _assert_(sl_input); 515 516 /*Potentially constrain nodes of this element*/ 517 for(int in=0;in<numnodes;in++){ 518 gauss->GaussNode(element->GetElementType(),in); 519 Node* node=element->GetNode(in); 520 if(!node->IsActive()) continue; 521 522 H_input->GetInputValue(&thickness,gauss); 523 b_input->GetInputValue(&bed,gauss); 524 sl_input->GetInputValue(&sealevel,gauss); 525 if(thickness<min_thickness && bed<sealevel){ 526 node->ApplyConstraint(0,+1.); 527 } 528 else { 529 /* no ice, set no spc */ 530 node->DofInFSet(0); 531 } 532 } 533 delete gauss; 534 } 535 } 475 536 if(calvinglaw==CalvingHabEnum){ 476 537 -
TabularUnified issm/trunk-jpl/src/c/classes/Cflevelsetmisfit.cpp ¶
r26254 r26255 89 89 90 90 marshallhandle->call(this->definitionenum); 91 marshallhandle->call(this->local);92 91 marshallhandle->call(this->model_enum); 93 92 marshallhandle->call(this->name); 94 93 marshallhandle->call(this->observation_enum); 95 marshallhandle->call(this->timeinterpolation);96 94 marshallhandle->call(this->weights_enum); 97 95 marshallhandle->call(this->datatime); -
TabularUnified issm/trunk-jpl/src/c/datastructures/DataSet.cpp ¶
r25531 r26255 251 251 this->AddObject(res); 252 252 } 253 else if(obj_enum==CflevelsetmisfitEnum){ 254 Cflevelsetmisfit* Cflevelset=new Cflevelsetmisfit(); 255 Cflevelset->Marshall(marshallhandle); 256 this->AddObject(Cflevelset); 257 } 253 258 else _error_("could not recognize enum type: " << obj_enum << ": " << EnumToStringx(obj_enum) ); 254 259 }
Note:
See TracChangeset
for help on using the changeset viewer.