Changeset 22902
- Timestamp:
- 07/05/18 03:04:58 (7 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
r22898 r22902 485 485 486 486 /*Intermediaries*/ 487 int domaintype; 488 Element* basalelement=NULL; 489 bool converged; 490 int* doflist = NULL; 487 bool thawed_element; 488 int domaintype; 489 Element* basalelement=NULL; 490 bool converged; 491 int* doflist = NULL; 491 492 492 493 /*Get basal element*/ … … 514 515 515 516 /*Use the dof list to index into the solution vector: */ 517 518 /*need to introduce thawed test herre*/ 516 519 for(int i=0;i<numnodes;i++){ 517 520 values[i] =solution[doflist[i]]; … … 819 822 } 820 823 }/*}}}*/ 824 825 void HydrologyDCInefficientAnalysis::HydrologyIdsGetActive(Vector<IssmDouble>* active_vec, Element* element){/*{{{*/ 826 /*Constants*/ 827 int domaintype; 828 Element* basalelement=NULL; 829 830 /*Get basal element*/ 831 element->FindParam(&domaintype,DomainTypeEnum); 832 switch(domaintype){ 833 case Domain2DhorizontalEnum: 834 basalelement = element; 835 break; 836 case Domain3DEnum: 837 if(!element->IsOnBase()) return; 838 basalelement = element->SpawnBasalElement(); 839 break; 840 default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet"); 841 } 842 843 const int numnodes = basalelement->GetNumberOfNodes(); 844 IssmDouble flag = 0.; 845 IssmDouble* active = xNew<IssmDouble>(numnodes); 846 bool active_element; 847 848 /*Pass the activity mask from elements to nodes*/ 849 basalelement->GetInputListOnVertices(&active[0],HydrologydcMaskThawedNodeEnum); 850 Input* active_element_input=basalelement->GetInput(HydrologydcMaskThawedEltEnum); _assert_(active_element_input); 851 active_element_input->GetInputValue(&active_element); 852 853 for(int i=0;i<numnodes;i++) flag+=active[i]; 854 855 /*If any node is active all the node in the element are active*/ 856 if(flag>0.){ 857 for(int i=0;i<numnodes;i++){ 858 active_vec->SetValue(basalelement->nodes[i]->Sid(),1.,INS_VAL); 859 } 860 } 861 /*If the element is active all its nodes are active*/ 862 else if(active_element){ 863 for(int i=0;i<numnodes;i++){ 864 active_vec->SetValue(basalelement->nodes[i]->Sid(),1.,INS_VAL); 865 } 866 } 867 else{ 868 /*Do not do anything: at least one node is active for this element but this element is not solved for*/ 869 } 870 if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;}; 871 xDelete<IssmDouble>(active); 872 } 873 /*}}}*/ -
issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h
r22898 r22902 42 42 void HydrologyIDSGetMask(Vector<IssmDouble>* vec_mask, Element* element); 43 43 void ElementizeIdsMask(FemModel* femmodel); 44 void HydrologyIdsGetActive(Vector<IssmDouble>* active_vec, Element* element); 44 45 }; 45 46 #endif -
issm/trunk-jpl/src/c/classes/FemModel.cpp
r22898 r22902 4599 4599 bool isthermal; 4600 4600 Vector<IssmDouble>* mask = NULL; 4601 Vector<IssmDouble>* active = NULL; 4601 4602 IssmDouble* serial_mask = NULL; 4603 IssmDouble* serial_active = NULL; 4602 4604 4603 4605 HydrologyDCInefficientAnalysis* inefanalysis = new HydrologyDCInefficientAnalysis(); … … 4620 4622 /*for other cases we just grab the mask from the initialisation value*/ 4621 4623 else{ 4622 GetVectorFromInputsx(&serial_mask,this,HydrologydcMaskThawedNodeEnum,NodeSIdEnum); 4623 } 4624 GetVectorFromInputsx(&serial_mask,this,HydrologydcMaskThawedNodeEnum,NodeSIdEnum); 4625 } 4626 /*Update Mask and elementize*/ 4627 InputUpdateFromVectorx(this,serial_mask,HydrologydcMaskThawedNodeEnum,NodeSIdEnum); 4628 xDelete<IssmDouble>(serial_mask); 4629 inefanalysis->ElementizeIdsMask(this); 4630 4631 /*get node mask coherent with element mask*/ 4632 active=new Vector<IssmDouble>(nodes->NumberOfNodes(HydrologyDCInefficientAnalysisEnum)); 4633 for (int i=0;i<elements->Size();i++){ 4634 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 4635 inefanalysis->HydrologyIdsGetActive(active,element); 4636 } 4637 4638 /*Assemble and serialize*/ 4639 active->Assemble(); 4640 serial_active=active->ToMPISerial(); 4641 delete active; 4642 4624 4643 /*Update node activation accordingly*/ 4625 4644 int counter =0; … … 4627 4646 Node* node=xDynamicCast<Node*>(nodes->GetObjectByOffset(i)); 4628 4647 if(node->InAnalysis(HydrologyDCInefficientAnalysisEnum)){ 4629 if(serial_ mask[node->Sid()]==1.){4648 if(serial_active[node->Sid()]==1.){ 4630 4649 node->Activate(); 4631 4650 if(!node->IsClone()) counter++; … … 4637 4656 } 4638 4657 4639 /*Update Mask*/ 4640 InputUpdateFromVectorx(this,serial_mask,HydrologydcMaskThawedNodeEnum,NodeSIdEnum); 4641 xDelete<IssmDouble>(serial_mask); 4642 inefanalysis->ElementizeIdsMask(this); 4643 4658 xDelete<IssmDouble>(serial_active); 4659 delete inefanalysis; 4644 4660 int sum_counter; 4645 4661 ISSM_MPI_Reduce(&counter,&sum_counter,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() ); -
issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
r22898 r22902 60 60 GetSolutionFromInputsx(&ug_sed,femmodel); 61 61 Reducevectorgtofx(&uf_sed, ug_sed, femmodel->nodes,femmodel->parameters); 62 /*Initialize the thawed element mask*/63 62 if(isefficientlayer) { 64 63 inefanalysis = new HydrologyDCInefficientAnalysis();
Note:
See TracChangeset
for help on using the changeset viewer.