Changeset 24030
- Timestamp:
- 06/19/19 07:14:34 (6 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
r23959 r24030 434 434 basalelement->GetDofListLocal(&doflist,NoneApproximationEnum,GsetEnum); 435 435 IssmDouble* eplHeads = xNew<IssmDouble>(numnodes); 436 IssmDouble* base = xNew<IssmDouble>(numnodes); 437 438 basalelement->GetInputListOnVertices(&base[0],BaseEnum); 436 439 437 /*Use the dof list to index into the solution vector: */ 440 /*If the EPL is not active we revert to the bedrock elevation */438 /*If the EPL is not active we revert to the bedrock elevation when deactivating*/ 441 439 for(int i=0;i<numnodes;i++){ 442 if(basalelement->nodes[i]->IsActive()){ 443 eplHeads[i]=solution[doflist[i]]; 444 } 445 else{ 446 eplHeads[i]=base[i]; 447 } 440 eplHeads[i]=solution[doflist[i]]; 448 441 if(xIsNan<IssmDouble>(eplHeads[i])) _error_("NaN found in solution vector"); 449 442 if(xIsInf<IssmDouble>(eplHeads[i])) _error_("Inf found in solution vector"); … … 453 446 /*Free ressources:*/ 454 447 xDelete<IssmDouble>(eplHeads); 455 xDelete<IssmDouble>(base);456 448 xDelete<int>(doflist); 457 449 if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;}; -
issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
r23959 r24030 364 364 basalelement->FindParam(&smb_model,SmbEnum); 365 365 366 Input* sed_head_input= basalelement->GetInput(SedimentHeadHydrostepEnum);367 Input* epl_head_input= basalelement->GetInput(EplHeadHydrostepEnum);368 Input* base_input= basalelement->GetInput(BaseEnum);369 Input* basal_melt_input= basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(basal_melt_input);370 Input* SedTrans_input= basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);366 Input* sed_head_input = basalelement->GetInput(SedimentHeadHydrostepEnum); 367 Input* epl_head_input = basalelement->GetInput(EplHeadHydrostepEnum); 368 Input* base_input = basalelement->GetInput(BaseEnum); 369 Input* basal_melt_input = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(basal_melt_input); 370 Input* SedTrans_input = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input); 371 371 372 372 if(dt!= 0.){ … … 488 488 489 489 /*Intermediaries*/ 490 int 490 int domaintype; 491 491 Element* basalelement=NULL; 492 bool converged; 492 bool converged; 493 int* doflist = NULL; 493 494 494 495 /*Get basal element*/ … … 504 505 default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet"); 505 506 } 506 /*Intermediary*/507 int* doflist = NULL;508 509 507 /*Fetch number of nodes for this finite element*/ 510 508 int numnodes = basalelement->GetNumberOfNodes(); … … 515 513 IssmDouble* pressure = xNew<IssmDouble>(numnodes); 516 514 IssmDouble* residual = xNew<IssmDouble>(numnodes); 517 IssmDouble* base = xNew<IssmDouble>(numnodes); 518 519 basalelement->GetInputListOnVertices(&base[0],BaseEnum); 520 /*Use the dof list to index into the solution vector, frozen nodes are set to initial value: */ 515 516 /*Use the dof list to index into the solution vector reseting to base is done at the deactivate stage: */ 521 517 for(int i=0;i<numnodes;i++){ 522 if(basalelement->nodes[i]->IsActive()){ 523 values[i] =solution[doflist[i]]; 524 } 525 else{ 526 values[i] = base[i]; 527 } 518 values[i] =solution[doflist[i]]; 528 519 if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector"); 529 520 if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in solution vector"); … … 537 528 IssmDouble penalty_factor,kmax,kappa,h_max; 538 529 IssmDouble* thickness = xNew<IssmDouble>(numnodes); 530 IssmDouble* base = xNew<IssmDouble>(numnodes); 539 531 IssmDouble* transmitivity = xNew<IssmDouble>(numnodes); 540 532 … … 546 538 547 539 basalelement->GetInputListOnVertices(&thickness[0],ThicknessEnum); 540 basalelement->GetInputListOnVertices(&base[0],BaseEnum); 548 541 basalelement->GetInputListOnVertices(&transmitivity[0],HydrologydcSedimentTransmitivityEnum); 549 542 … … 563 556 } 564 557 xDelete<IssmDouble>(thickness); 558 xDelete<IssmDouble>(base); 565 559 xDelete<IssmDouble>(transmitivity); 566 xDelete<IssmDouble>(base);567 560 } 568 561 … … 576 569 xDelete<IssmDouble>(residual); 577 570 xDelete<IssmDouble>(pressure); 578 xDelete<IssmDouble>(base);579 571 xDelete<int>(doflist); 580 572 if(domaintype!=Domain2DhorizontalEnum){ -
issm/trunk-jpl/src/c/classes/FemModel.cpp
r23993 r24030 1470 1470 ISSM_MPI_Reduce(&local_icefront_area,&total_icefront_area,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm()); 1471 1471 ISSM_MPI_Bcast(&total_icefront_area,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 1472 1472 1473 1473 basin_icefront_area[basin-1]=total_icefront_area; 1474 1474 } 1475 1475 1476 1476 this->parameters->AddObject(new DoubleVecParam(FrontalForcingsBasinIcefrontAreaEnum,basin_icefront_area,numbasins)); 1477 1477 xDelete<IssmDouble>(basin_icefront_area); 1478 1478 1479 1479 }/*}}}*/ 1480 1480 void FemModel::IcefrontMassFluxx(IssmDouble* pM, bool scaled){/*{{{*/ … … 4808 4808 delete active; 4809 4809 4810 4810 4811 /*Update node activation accordingly*/ 4811 int counter =0; 4812 for (int i=0;i<nodes->Size();i++){ 4813 Node* node=xDynamicCast<Node*>(nodes->GetObjectByOffset(i)); 4814 if(serial_active[node->Sid()]==1.){ 4815 node->Activate(); 4816 if(!node->IsClone()) counter++; 4817 } 4818 else{ 4819 node->Deactivate(); 4820 } 4812 int counter = 0; //this is probably not acurate but we are only interested in positivity 4813 for(int i=0;i<elements->Size();i++){ 4814 Element *element = xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 4815 int numnodes = element->GetNumberOfNodes(); 4816 IssmDouble *base = xNew<IssmDouble>(numnodes); 4817 element->GetInputListOnNodes(&base[0],BaseEnum); 4818 for(int in=0;in<numnodes;in++){ 4819 Node* node=element->GetNode(in); 4820 if(serial_active[node->Sid()]==1.){ 4821 node->Activate(); 4822 if(!node->IsClone()) counter++; 4823 } 4824 else{ 4825 node->Deactivate(); 4826 node->ApplyConstraint(0,base[in]); 4827 } 4828 } 4829 xDelete<IssmDouble>(base); 4821 4830 } 4822 4831 xDelete<IssmDouble>(serial_active); … … 4828 4837 counter=sum_counter; 4829 4838 *pEplcount = counter; 4830 if(VerboseSolution()) _printf0_(" Number of active nodes in EPL layer: "<< counter <<"\n"); 4839 if(VerboseSolution()) { 4840 if(counter==0){ 4841 _printf0_(" No nodes are active in EPL layer \n"); 4842 } 4843 else { 4844 _printf0_(" Some active nodes in EPL layer \n"); 4845 } 4846 } 4831 4847 4832 4848 /*Update dof indexings*/ … … 4881 4897 4882 4898 /*Update node activation accordingly*/ 4883 int counter =0; 4884 for (int i=0;i<nodes->Size();i++){ 4885 Node* node=xDynamicCast<Node*>(nodes->GetObjectByOffset(i)); 4886 if(serial_active[node->Sid()]==1.){ 4887 node->Activate(); 4888 if(!node->IsClone()) counter++; 4889 } 4890 else{ 4891 node->Deactivate(); 4892 } 4893 } 4894 4899 int counter = 0; //this is probably not acurate but we are only interested in positivity 4900 for(int i=0;i<elements->Size();i++){ 4901 Element *element = xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 4902 int numnodes = element->GetNumberOfNodes(); 4903 IssmDouble *base = xNew<IssmDouble>(numnodes); 4904 4905 element->GetInputListOnNodes(&base[0],BaseEnum); 4906 4907 for(int in=0;in<numnodes;in++){ 4908 Node* node=element->GetNode(in); 4909 if(serial_active[node->Sid()]==1.){ 4910 node->Activate(); 4911 if(!node->IsClone()) counter++; 4912 } 4913 else{ 4914 node->Deactivate(); 4915 node->ApplyConstraint(0,base[in]); 4916 } 4917 } 4918 xDelete<IssmDouble>(base); 4919 } 4895 4920 xDelete<IssmDouble>(serial_active); 4896 4921 delete inefanalysis; … … 4900 4925 counter=sum_counter; 4901 4926 *pIDScount = counter; 4902 if(VerboseSolution()) _printf0_(" Number of active nodes in IDS layer: "<< counter <<"\n"); 4903 4927 if(VerboseSolution()) { 4928 if(counter==0){ 4929 _printf0_(" No nodes are active in IDS layer \n"); 4930 } 4931 else { 4932 _printf0_(" Some active nodes in IDS layer \n"); 4933 } 4934 } 4904 4935 /*Update dof indexings*/ 4905 4936 this->UpdateConstraintsx(); -
issm/trunk-jpl/src/c/classes/IoModel.cpp
r23767 r24030 402 402 _printf0_(" Marshalled file is corrupted \n"); 403 403 _printf0_(" \n"); 404 _printf0_(" * Last record found is : \n");404 _printf0_(" * Last record found is : \n"); 405 405 _printf0_(" the corresponding model field has probably been marshalled \n"); 406 406 _printf0_(" incorrectly \n"); -
issm/trunk-jpl/src/c/shared/Exp/exp.h
r21035 r24030 80 80 /*open domain outline file for reading: */ 81 81 if ((fid=fopen(domainname,"r"))==NULL){ 82 _error_("could not find file \"" << domainname<<"\". Make sure that the file and path provided exist."); 82 _error_("could not find file \"" << domainname<<"\". Make sure that the file and path provided exist."); 83 83 } 84 84
Note:
See TracChangeset
for help on using the changeset viewer.