Changeset 26256
- Timestamp:
- 05/10/21 13:22:33 (4 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
r26255 r26256 10 10 #include "../modules/modules.h" 11 11 #include "../solutionsequences/solutionsequences.h" 12 #include "../classes/Inputs/DatasetInput.h"13 14 12 15 13 void LevelsetAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/ … … 51 49 52 50 iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 53 // iomodel->FetchDataToInput(inputs,elements,"md.mask.ref_levelset",MaskIceRefLevelsetEnum);54 51 iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum); 55 52 iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum); … … 70 67 iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum); 71 68 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;78 69 case CalvingMinthicknessEnum: 79 70 iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum); … … 112 103 void LevelsetAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/ 113 104 114 IssmDouble* coefficients=NULL;115 int nco;116 117 105 parameters->AddObject(iomodel->CopyConstantObject("md.levelset.stabilization",LevelsetStabilizationEnum)); 118 106 parameters->AddObject(iomodel->CopyConstantObject("md.levelset.reinit_frequency",LevelsetReinitFrequencyEnum)); … … 129 117 parameters->AddObject(iomodel->CopyConstantObject("md.calving.min_thickness",CalvingMinthicknessEnum)); 130 118 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);140 119 case CalvingMinthicknessEnum: 141 120 parameters->AddObject(iomodel->CopyConstantObject("md.calving.min_thickness",CalvingMinthicknessEnum)); … … 236 215 IssmDouble* dbasis = xNew<IssmDouble>(2*numnodes); 237 216 IssmDouble* Bprime = NULL; 238 IssmDouble tau;239 217 if(stabilization==2){ 240 218 Bprime = xNew<IssmDouble>(dim*numnodes); … … 362 340 363 341 /*Intermediaries */ 364 int domaintype , stabilization;342 int domaintype; 365 343 IssmDouble Jdet,dt; 366 344 IssmDouble lsf; 367 345 IssmDouble* xyz_list = NULL; 368 IssmDouble vx,vy,vel,h,tau;369 346 370 347 /*Fetch number of nodes and dof for this finite element*/ … … 374 351 ElementVector* pe = basalelement->NewElementVector(); 375 352 basalelement->FindParam(&dt,TimesteppingTimeStepEnum); 376 basalelement->FindParam(&stabilization,LevelsetStabilizationEnum);377 353 378 354 if(dt!=0.){ … … 383 359 basalelement->GetVerticesCoordinates(&xyz_list); 384 360 Input* levelset_input = basalelement->GetInput(MaskIceLevelsetEnum); _assert_(levelset_input); 385 386 // h=element->CharacteristicLength();387 361 388 362 /* Start looping on the number of gaussian points: */ … … 499 473 } 500 474 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 }536 475 if(calvinglaw==CalvingHabEnum){ 537 476 -
issm/trunk-jpl/src/c/classes/Cflevelsetmisfit.h
r26252 r26256 18 18 19 19 int definitionenum; 20 int local;21 20 int model_enum; 22 21 char* name; 23 22 int observation_enum; 24 char* timeinterpolation;25 23 int weights_enum; 26 24 IssmDouble datatime;
Note:
See TracChangeset
for help on using the changeset viewer.