Changeset 25539
- Timestamp:
- 09/07/20 03:12:14 (5 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 77 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp ¶
r25439 r25539 66 66 67 67 /*First, reset all F to 0 */ 68 for( int i=0;i<elements->Size();i++){69 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));68 for(Object* & object : elements->objects){ 69 Element* element = xDynamicCast<Element*>(object); 70 70 element->SetElementInput(inputs,DamageFEnum,0.); 71 71 } … … 150 150 IssmDouble principalDevStress1, principalDevStress2; 151 151 IssmDouble tensileStress, compressiveStress; 152 152 153 153 int equivstress, domaintype, dim; 154 154 … … 197 197 for (int i=0;i<numnodes;i++){ 198 198 f[i] = 0; 199 199 200 200 gauss->GaussNode(element->GetElementType(),i); 201 201 … … 566 566 Ke->values[i*numnodes+j] += ( 567 567 dbasis[0*numnodes+i] *(D[0*dim+0]*dbasis[0*numnodes+j] + D[0*dim+1]*dbasis[1*numnodes+j]) + 568 dbasis[1*numnodes+i] *(D[1*dim+0]*dbasis[0*numnodes+j] + D[1*dim+1]*dbasis[1*numnodes+j]) 568 dbasis[1*numnodes+i] *(D[1*dim+0]*dbasis[0*numnodes+j] + D[1*dim+1]*dbasis[1*numnodes+j]) 569 569 ); 570 570 } … … 586 586 dbasis[0*numnodes+i] *(D[0*dim+0]*dbasis[0*numnodes+j] + D[0*dim+1]*dbasis[1*numnodes+j] + D[0*dim+2]*dbasis[2*numnodes+j]) + 587 587 dbasis[1*numnodes+i] *(D[1*dim+0]*dbasis[0*numnodes+j] + D[1*dim+1]*dbasis[1*numnodes+j] + D[1*dim+2]*dbasis[2*numnodes+j]) + 588 dbasis[2*numnodes+i] *(D[2*dim+0]*dbasis[0*numnodes+j] + D[2*dim+1]*dbasis[1*numnodes+j] + D[2*dim+2]*dbasis[2*numnodes+j]) 588 dbasis[2*numnodes+i] *(D[2*dim+0]*dbasis[0*numnodes+j] + D[2*dim+1]*dbasis[1*numnodes+j] + D[2*dim+2]*dbasis[2*numnodes+j]) 589 589 ); 590 590 } … … 816 816 817 817 /*Create and assemble matrix*/ 818 for( int i=0;i<femmodel->elements->Size();i++){819 Element* element = xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));818 for(Object* & object : femmodel->elements->objects){ 819 Element* element = xDynamicCast<Element*>(object); 820 820 ElementMatrix* Ke = this->CreateFctKMatrix(element); 821 821 if(Ke) Ke->AddToGlobal(Kff,Kfs); … … 841 841 842 842 /*Create and assemble matrix*/ 843 for( int i=0;i<femmodel->elements->Size();i++){844 Element* element = xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));843 for(Object* & object : femmodel->elements->objects){ 844 Element* element = xDynamicCast<Element*>(object); 845 845 ElementMatrix* MLe = this->CreateMassMatrix(element); 846 846 if(MLe){ -
TabularUnified issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp ¶
r25437 r25539 301 301 if(frictionlaw==9){ 302 302 parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum)); 303 parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum)); 303 parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum)); 304 304 parameters->AddObject(new IntParam(FrictionCouplingEnum,0)); 305 305 } … … 355 355 void EnthalpyAnalysis::ComputeBasalMeltingrate(FemModel* femmodel){/*{{{*/ 356 356 /*Compute basal melting rates: */ 357 for( int i=0;i<femmodel->elements->Size();i++){358 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));357 for(Object* & object : femmodel->elements->objects){ 358 Element* element=xDynamicCast<Element*>(object); 359 359 ComputeBasalMeltingrate(element); 360 360 } … … 434 434 435 435 IssmDouble watercolumnupperlimit = element->FindParam(ThermalWatercolumnUpperlimitEnum); 436 436 437 437 Gauss* gauss=element->NewGauss(); 438 438 for(is=0;is<numsegments;is++){ … … 580 580 IssmDouble h,hx,hy,hz,vx,vy,vz; 581 581 IssmDouble tau_parameter,diameter; 582 IssmDouble tau_parameter_anisotropic[2],tau_parameter_hor,tau_parameter_ver; 582 IssmDouble tau_parameter_anisotropic[2],tau_parameter_hor,tau_parameter_ver; 583 583 IssmDouble D_scalar; 584 584 IssmDouble* xyz_list = NULL; … … 670 670 dbasis[0*numnodes+i] *(K[0][0]*dbasis[0*numnodes+j] + K[0][1]*dbasis[1*numnodes+j]+ K[0][2]*dbasis[2*numnodes+j]) + 671 671 dbasis[1*numnodes+i] *(K[1][0]*dbasis[0*numnodes+j] + K[1][1]*dbasis[1*numnodes+j]+ K[1][2]*dbasis[2*numnodes+j]) + 672 dbasis[2*numnodes+i] *(K[2][0]*dbasis[0*numnodes+j] + K[2][1]*dbasis[1*numnodes+j]+ K[2][2]*dbasis[2*numnodes+j]) 672 dbasis[2*numnodes+i] *(K[2][0]*dbasis[0*numnodes+j] + K[2][1]*dbasis[1*numnodes+j]+ K[2][2]*dbasis[2*numnodes+j]) 673 673 ); 674 674 } … … 678 678 else if(stabilization==2){ 679 679 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 680 diameter=element->MinEdgeLength(xyz_list); 680 diameter=element->MinEdgeLength(xyz_list); 681 681 tau_parameter=element->StabilizationParameter(u-um,v-vm,w-wm,diameter,kappa/rho_ice); 682 682 for(int i=0;i<numnodes;i++){ … … 699 699 else if(stabilization==3){ 700 700 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 701 element->ElementSizes(&hx,&hy,&hz); 701 element->ElementSizes(&hx,&hy,&hz); 702 702 element->StabilizationParameterAnisotropic(&tau_parameter_anisotropic[0],u-um,v-vm,w-wm,hx,hy,hz,kappa/rho_ice); 703 703 tau_parameter_hor=tau_parameter_anisotropic[0]; … … 873 873 for(i=0;i<numnodes;i++) pe->values[i]+=scalar_transient*basis[i]; 874 874 } 875 875 876 876 /* SUPG */ 877 877 if(stabilization==2){ … … 1074 1074 void EnthalpyAnalysis::ComputeWaterfractionDrainage(FemModel* femmodel){/*{{{*/ 1075 1075 1076 int i,k,numnodes;1076 int k,numnodes; 1077 1077 IssmDouble dt; 1078 1078 Element* element= NULL; … … 1080 1080 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 1081 1081 1082 for( i=0;i<femmodel->elements->Size();i++){1083 element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));1082 for(Object* & object : femmodel->elements->objects){ 1083 element=xDynamicCast<Element*>(object); 1084 1084 numnodes=element->GetNumberOfNodes(); 1085 1085 IssmDouble* waterfractions= xNew<IssmDouble>(numnodes); … … 1099 1099 void EnthalpyAnalysis::DrainageUpdateWatercolumn(FemModel* femmodel){/*{{{*/ 1100 1100 1101 int i,k,numnodes, numbasalnodes;1101 int k,numnodes, numbasalnodes; 1102 1102 IssmDouble dt; 1103 1103 int* basalnodeindices=NULL; … … 1113 1113 extrudefrombase_core(femmodel); 1114 1114 /*multiply depth-average by ice thickness*/ 1115 for( i=0;i<femmodel->elements->Size();i++){1116 element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));1115 for(Object* & object : femmodel->elements->objects){ 1116 element=xDynamicCast<Element*>(object); 1117 1117 numnodes=element->GetNumberOfNodes(); 1118 1118 IssmDouble* drainage_int= xNew<IssmDouble>(numnodes); … … 1132 1132 1133 1133 /*update water column*/ 1134 for( i=0;i<femmodel->elements->Size();i++){1135 element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));1134 for(Object* & object : femmodel->elements->objects){ 1135 element=xDynamicCast<Element*>(object); 1136 1136 /* Check if ice in element */ 1137 1137 if(!element->IsIceInElement()) continue; … … 1158 1158 void EnthalpyAnalysis::DrainageUpdateEnthalpy(FemModel* femmodel){/*{{{*/ 1159 1159 1160 int i,k,numnodes;1160 int k,numnodes; 1161 1161 IssmDouble dt; 1162 1162 Element* element= NULL; 1163 1163 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 1164 1164 1165 for( i=0;i<femmodel->elements->Size();i++){1166 element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));1165 for(Object* & object : femmodel->elements->objects){ 1166 element=xDynamicCast<Element*>(object); 1167 1167 numnodes=element->GetNumberOfNodes(); 1168 1168 IssmDouble* enthalpies= xNew<IssmDouble>(numnodes); … … 1182 1182 else 1183 1183 waterfractions[k]-=dt*drainage[k]; 1184 1184 1185 1185 element->ThermalToEnthalpy(&enthalpies[k], temperatures[k], waterfractions[k], pressures[k]); 1186 1186 } … … 1608 1608 } 1609 1609 case LliboutryDuvalEnum:{ 1610 for(i=0;i<numnodes;i++) B[i]=LliboutryDuval(values[i],pressure[i],n[i],element->FindParam(MaterialsBetaEnum),element->FindParam(ConstantsReferencetemperatureEnum),element->FindParam(MaterialsHeatcapacityEnum),element->FindParam(MaterialsLatentheatEnum)); 1611 element->AddInput(MaterialsRheologyBEnum,&B[0],finite_element); 1612 break; 1610 for(i=0;i<numnodes;i++) B[i]=LliboutryDuval(values[i],pressure[i],n[i],element->FindParam(MaterialsBetaEnum),element->FindParam(ConstantsReferencetemperatureEnum),element->FindParam(MaterialsHeatcapacityEnum),element->FindParam(MaterialsLatentheatEnum)); 1611 element->AddInput(MaterialsRheologyBEnum,&B[0],finite_element); 1612 break; 1613 1613 } 1614 1614 default: _error_("Rheology law " << EnumToStringx(rheology_law) << " not supported yet"); … … 1670 1670 spc=new Vector<IssmDouble>(femmodel->nodes->NumberOfNodes()); 1671 1671 /*First create a vector to figure out what elements should be constrained*/ 1672 for( int i=0;i<femmodel->elements->Size();i++){1673 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));1672 for(Object* & object : femmodel->elements->objects){ 1673 Element* element=xDynamicCast<Element*>(object); 1674 1674 GetBasalConstraints(spc,element); 1675 1675 } … … 1681 1681 1682 1682 /*Then update basal constraints nodes accordingly*/ 1683 for( int i=0;i<femmodel->elements->Size();i++){1684 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));1683 for(Object* & object : femmodel->elements->objects){ 1684 Element* element=xDynamicCast<Element*>(object); 1685 1685 ApplyBasalConstraints(serial_spc,element); 1686 1686 } -
TabularUnified issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.cpp ¶
r25439 r25539 291 291 void ExtrapolationAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/ 292 292 293 for( int i=0;i<femmodel->elements->Size();i++){294 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));293 for(Object* & object : femmodel->elements->objects){ 294 Element* element=xDynamicCast<Element*>(object); 295 295 this->SetConstraintsOnIce(element); 296 296 } -
TabularUnified issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp ¶
r25439 r25539 357 357 IssmDouble phi,isonbase,base; 358 358 359 for( int i=0;i<femmodel->elements->Size();i++){360 361 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));359 for(Object* & object : femmodel->elements->objects){ 360 361 Element* element=xDynamicCast<Element*>(object); 362 362 if(!element->IsOnBase()) continue; 363 363 -
TabularUnified issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.cpp ¶
r25439 r25539 208 208 209 209 /*Constrain all nodes that are grounded and unconstrain the ones that float*/ 210 for( int i=0;i<femmodel->elements->Size();i++){211 Element *element = xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));210 for(Object* & object : femmodel->elements->objects){ 211 Element *element = xDynamicCast<Element*>(object); 212 212 int numnodes = element->GetNumberOfNodes(); 213 213 IssmDouble *mask = xNew<IssmDouble>(numnodes); -
TabularUnified issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp ¶
r25491 r25539 536 536 void HydrologyDCEfficientAnalysis::ComputeEPLThickness(FemModel* femmodel){/*{{{*/ 537 537 538 bool active_element; 539 int iseplthickcomp; 540 int domaintype; 541 542 femmodel->parameters->FindParam(&domaintype,DomainTypeEnum); 538 int iseplthickcomp; 539 540 541 /*Skip if we don't want to compute thicknesses*/ 543 542 femmodel->parameters->FindParam(&iseplthickcomp,HydrologydcEplThickCompEnum); 544 543 if(iseplthickcomp==0) return; 545 544 546 for(int j=0;j<femmodel->elements->Size();j++){ 547 548 Element* element=(Element*)femmodel->elements->GetObjectByOffset(j); 545 /*Get Parameters*/ 546 int domaintype; 547 IssmDouble max_thick; 548 IssmDouble epl_conductivity; 549 IssmDouble latentheat; 550 IssmDouble rho_ice; 551 IssmDouble rho_water; 552 IssmDouble gravity; 553 IssmDouble dt; 554 555 femmodel->parameters->FindParam(&domaintype,DomainTypeEnum); 556 femmodel->parameters->FindParam(&max_thick,HydrologydcEplMaxThicknessEnum); 557 femmodel->parameters->FindParam(&epl_conductivity,HydrologydcEplConductivityEnum); 558 femmodel->parameters->FindParam(&latentheat,MaterialsLatentheatEnum); 559 femmodel->parameters->FindParam(&rho_ice,MaterialsRhoIceEnum); 560 femmodel->parameters->FindParam(&rho_water,MaterialsRhoFreshwaterEnum); 561 femmodel->parameters->FindParam(&gravity,ConstantsGEnum); 562 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 563 564 565 for(Object* & object : femmodel->elements->objects){ 566 Element* element = xDynamicCast<Element*>(object); 549 567 550 568 /*skip element if 3d and not on base*/ … … 562 580 IssmDouble* bed = xNew<IssmDouble>(numnodes); 563 581 582 bool active_element; 583 IssmDouble init_thick; 564 584 element->GetInputValue(&active_element,HydrologydcMaskEplactiveEltEnum); 565 566 /*parameters*/567 IssmDouble gravity;568 IssmDouble rho_water;569 IssmDouble rho_ice;570 IssmDouble latentheat;571 IssmDouble epl_conductivity;572 IssmDouble init_thick;573 IssmDouble max_thick;574 IssmDouble dt;575 585 576 586 /* Intermiedaries */ … … 593 603 default: _error_("not Implemented Yet"); 594 604 } 595 596 element->FindParam(&max_thick,HydrologydcEplMaxThicknessEnum);597 element->FindParam(&epl_conductivity,HydrologydcEplConductivityEnum);598 element->FindParam(&latentheat,MaterialsLatentheatEnum);599 element->FindParam(&rho_ice,MaterialsRhoIceEnum);600 element->FindParam(&rho_water,MaterialsRhoFreshwaterEnum);601 element->FindParam(&gravity,ConstantsGEnum);602 element->FindParam(&dt,TimesteppingTimeStepEnum);603 604 605 element->GetInputListOnVertices(&eplhead[0],EplHeadSubstepEnum); 605 606 element->GetInputListOnVertices(&epl_slopeX[0],EplHeadSlopeXEnum); -
TabularUnified issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp ¶
r25489 r25539 451 451 void HydrologyDCInefficientAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/ 452 452 453 /*Intermediaries*/ 453 /*Intermediaries*/ 454 bool converged; 455 int* doflist = NULL; 454 456 int domaintype; 455 457 Element* basalelement=NULL; 456 bool converged;457 int* doflist = NULL;458 458 459 459 /*Get basal element*/ … … 482 482 if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector"); 483 483 if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in solution vector"); 484 485 484 } 486 485 … … 689 688 Element* element=NULL; 690 689 int elementssize=femmodel->elements->Size(); 691 for(int i=0;i<elementssize;i++){ 692 element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i)); 693 690 for(Object* & object : femmodel->elements->objects){ 691 element = xDynamicCast<Element*>(object); 694 692 Input* input=element->GetInput(HydrologydcMaskEplactiveNodeEnum); _assert_(input); 695 693 if(input->GetInputMax()>0.){ … … 749 747 Element* element=NULL; 750 748 int elementssize = femmodel->elements->Size(); 751 for( int i=0;i<elementssize;i++){752 element =xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));749 for(Object* & object : femmodel->elements->objects){ 750 element = xDynamicCast<Element*>(object); 753 751 754 752 Input* input=element->GetInput(HydrologydcMaskThawedNodeEnum); _assert_(input); -
TabularUnified issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.cpp ¶
r25437 r25539 456 456 void HydrologyGlaDSAnalysis::UpdateSheetThickness(FemModel* femmodel){/*{{{*/ 457 457 458 for( int j=0;j<femmodel->elements->Size();j++){459 Element* element= (Element*)femmodel->elements->GetObjectByOffset(j);458 for(Object* & object : femmodel->elements->objects){ 459 Element* element=xDynamicCast<Element*>(object); 460 460 UpdateSheetThickness(element); 461 461 } … … 545 545 void HydrologyGlaDSAnalysis::UpdateEffectivePressure(FemModel* femmodel){/*{{{*/ 546 546 547 for( int j=0;j<femmodel->elements->Size();j++){548 Element* element= (Element*)femmodel->elements->GetObjectByOffset(j);547 for(Object* & object : femmodel->elements->objects){ 548 Element* element=xDynamicCast<Element*>(object); 549 549 UpdateEffectivePressure(element); 550 550 } -
TabularUnified issm/trunk-jpl/src/c/analyses/HydrologyPismAnalysis.cpp ¶
r25379 r25539 92 92 void HydrologyPismAnalysis::UpdateWaterColumn(FemModel* femmodel){/*{{{*/ 93 93 94 for( int j=0;j<femmodel->elements->Size();j++){95 Element* element= (Element*)femmodel->elements->GetObjectByOffset(j);94 for(Object* & object : femmodel->elements->objects){ 95 Element* element=xDynamicCast<Element*>(object); 96 96 this->UpdateWaterColumn(element); 97 97 } -
TabularUnified issm/trunk-jpl/src/c/analyses/HydrologyShaktiAnalysis.cpp ¶
r25437 r25539 455 455 void HydrologyShaktiAnalysis::UpdateGapHeight(FemModel* femmodel){/*{{{*/ 456 456 457 for( int j=0;j<femmodel->elements->Size();j++){458 Element* element= (Element*)femmodel->elements->GetObjectByOffset(j);457 for(Object* & object : femmodel->elements->objects){ 458 Element* element=xDynamicCast<Element*>(object); 459 459 UpdateGapHeight(element); 460 460 } -
TabularUnified issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp ¶
r25439 r25539 653 653 654 654 /*Loop over all elements of this partition*/ 655 for( int i=0;i<femmodel->elements->Size();i++){656 Element* element = xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));655 for(Object* & object : femmodel->elements->objects){ 656 Element* element = xDynamicCast<Element*>(object); 657 657 658 658 int numnodes = element->GetNumberOfNodes(); … … 690 690 691 691 /*Loop over all elements of this partition*/ 692 for( int i=0;i<femmodel->elements->Size();i++){693 Element* element = xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));692 for(Object* & object : femmodel->elements->objects){ 693 Element* element = xDynamicCast<Element*>(object); 694 694 695 695 rho_ice = element->FindParam(MaterialsRhoIceEnum); … … 739 739 vec_constraint_nodes=new Vector<IssmDouble>(femmodel->nodes->NumberOfNodes()); 740 740 741 for( int i=0;i<femmodel->elements->Size();i++){742 Element* element = xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));741 for(Object* & object : femmodel->elements->objects){ 742 Element* element = xDynamicCast<Element*>(object); 743 743 int numnodes = element->GetNumberOfNodes(); 744 744 Gauss* gauss = element->NewGauss(); … … 777 777 while(nflipped){ 778 778 local_nflipped=0; 779 for( int i=0;i<femmodel->elements->Size();i++){780 Element* element = xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));779 for(Object* & object : femmodel->elements->objects){ 780 Element* element = xDynamicCast<Element*>(object); 781 781 int numnodes = element->GetNumberOfNodes(); 782 782 Gauss* gauss = element->NewGauss(); … … 831 831 832 832 /*Contrain the nodes that will be calved*/ 833 for( int i=0;i<femmodel->elements->Size();i++){834 Element* element = xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));833 for(Object* & object : femmodel->elements->objects){ 834 Element* element = xDynamicCast<Element*>(object); 835 835 int numnodes = element->GetNumberOfNodes(); 836 836 Gauss* gauss = element->NewGauss(); -
TabularUnified issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp ¶
r25439 r25539 189 189 iomodel->FetchData(&array3d,&Ms,&Ns,&K,"md.basalforcings.tf"); 190 190 if(!array3d) _error_("md.basalforcings.tf not found in binary file"); 191 for( int i=0;i<elements->Size();i++){192 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));191 for(Object* & object : elements->objects){ 192 Element* element = xDynamicCast<Element*>(object); 193 193 if(iomodel->domaintype!=Domain2DhorizontalEnum && !element->IsOnBase()) continue; 194 194 for(int kk=0;kk<K;kk++){ … … 418 418 Ke->values[i*numnodes+j] += ( 419 419 dbasis[0*numnodes+i] *(D[0*dim+0]*dbasis[0*numnodes+j] + D[0*dim+1]*dbasis[1*numnodes+j]) + 420 dbasis[1*numnodes+i] *(D[1*dim+0]*dbasis[0*numnodes+j] + D[1*dim+1]*dbasis[1*numnodes+j]) 420 dbasis[1*numnodes+i] *(D[1*dim+0]*dbasis[0*numnodes+j] + D[1*dim+1]*dbasis[1*numnodes+j]) 421 421 ); 422 422 } … … 444 444 for(int i=0;i<numnodes;i++){ 445 445 for(int j=0;j<numnodes;j++){ 446 Ke->values[i*numnodes+j]+=gauss->weight*Jdet*tau*basis[j]*(vx*dbasis[0*numnodes+i]+vy*dbasis[1*numnodes+i]); 446 Ke->values[i*numnodes+j]+=gauss->weight*Jdet*tau*basis[j]*(vx*dbasis[0*numnodes+i]+vy*dbasis[1*numnodes+i]); 447 447 } 448 448 } … … 450 450 for(int i=0;i<numnodes;i++){ 451 451 for(int j=0;j<numnodes;j++){ 452 Ke->values[i*numnodes+j]+=gauss->weight*Jdet*tau*basis[j]*(basis[i]*dvxdx+basis[i]*dvydy); 453 } 454 } 455 452 Ke->values[i*numnodes+j]+=gauss->weight*Jdet*tau*basis[j]*(basis[i]*dvxdx+basis[i]*dvydy); 453 } 454 } 455 456 456 /*Advection matrix - part 2, A*/ 457 457 for(int i=0;i<numnodes;i++){ … … 476 476 for(int i=0;i<numnodes;i++){ 477 477 for(int j=0;j<numnodes;j++){ 478 Ke->values[i*numnodes+j]+=dt*gauss->weight*Jdet*tau*(basis[j]*dvxdx+basis[j]*dvydy)*(basis[i]*dvxdx+basis[i]*dvydy); 478 Ke->values[i*numnodes+j]+=dt*gauss->weight*Jdet*tau*(basis[j]*dvxdx+basis[j]*dvydy)*(basis[i]*dvxdx+basis[i]*dvydy); 479 479 } 480 480 } … … 600 600 default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet"); 601 601 } 602 602 603 603 /*Fetch number of nodes and dof for this finite element*/ 604 604 int numnodes = element->GetNumberOfNodes(); … … 626 626 // _error_("S"); 627 627 // } 628 628 629 629 h=element->CharacteristicLength(); 630 630 631 631 /*Recover portion of element that is grounded*/ 632 632 phi=element->GetGroundedPortion(xyz_list); … … 670 670 671 671 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(thickness+dt*(ms-mb))*basis[i]; 672 672 673 673 if(stabilization==5){ //SUPG 674 674 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); … … 683 683 xi=1; 684 684 tau=xi*h/(2*vel); 685 685 686 686 /*Force vector - part 2*/ 687 687 for(int i=0;i<numnodes;i++){ … … 693 693 } 694 694 } 695 695 696 696 } 697 697 … … 806 806 for(int i=0;i<numnodes;i++){ 807 807 newthickness[i]=solution[doflist[i]]; 808 thicknessresidual[i]=0.; 808 thicknessresidual[i]=0.; 809 809 /*Check solution*/ 810 810 if(xIsNan<IssmDouble>(newthickness[i])) _error_("NaN found in solution vector"); … … 817 817 element->AddBasalInput(ThicknessEnum,newthickness,element->GetElementType()); 818 818 element->AddBasalInput(ThicknessResidualEnum,thicknessresidual,element->GetElementType()); 819 819 820 820 xDelete<int>(doflist); 821 821 xDelete<IssmDouble>(newthickness); … … 1042 1042 default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet"); 1043 1043 } 1044 1044 1045 1045 /*Fetch number of nodes and dof for this finite element*/ 1046 1046 int numnodes = element->GetNumberOfNodes(); … … 1061 1061 Input* vxaverage_input = element->GetInput(VxAverageEnum); _assert_(vxaverage_input); 1062 1062 Input* vyaverage_input = element->GetInput(VyAverageEnum); _assert_(vyaverage_input); 1063 1063 1064 1064 /*Recover portion of element that is grounded*/ 1065 1065 phi=element->GetGroundedPortion(xyz_list); … … 1102 1102 1103 1103 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(ms-mb)*basis[i]; 1104 1104 1105 1105 } 1106 1106 … … 1122 1122 1123 1123 /*Create and assemble matrix*/ 1124 for( int i=0;i<femmodel->elements->Size();i++){1125 Element* element = xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));1124 for(Object* & object : femmodel->elements->objects){ 1125 Element* element = xDynamicCast<Element*>(object); 1126 1126 ElementMatrix* Ke = this->CreateFctKMatrix(element); 1127 1127 if(Ke) Ke->AddToGlobal(Kff,Kfs); … … 1149 1149 1150 1150 /*Create and assemble matrix*/ 1151 for( int i=0;i<femmodel->elements->Size();i++){1152 Element* element = xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));1151 for(Object* & object : femmodel->elements->objects){ 1152 Element* element = xDynamicCast<Element*>(object); 1153 1153 ElementVector* pe = this->CreateFctPVector(element); 1154 1154 if(pe) pe->AddToGlobal(pf); … … 1167 1167 1168 1168 /*Create and assemble matrix*/ 1169 for( int i=0;i<femmodel->elements->Size();i++){1170 Element* element = xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));1169 for(Object* & object : femmodel->elements->objects){ 1170 Element* element = xDynamicCast<Element*>(object); 1171 1171 ElementMatrix* MLe = this->CreateMassMatrix(element); 1172 1172 if(MLe){ -
TabularUnified issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp ¶
r25379 r25539 65 65 66 66 67 for( int i=0;i<elements->Size();i++){68 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));67 for(Object* & object : elements->objects){ 68 Element* element=xDynamicCast<Element*>(object); 69 69 70 70 for(int t=0;t<N;t++){ … … 113 113 TransientInput* transientinput=inputs->SetDatasetTransientInput(DslGlobalAverageThermostericSeaLevelChangeEnum,i, times,N); 114 114 115 for( int j=0;j<elements->Size();j++){116 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(j));115 for(Object* & object : elements->objects){ 116 Element* element=xDynamicCast<Element*>(object); 117 117 118 118 for(int t=0;t<N;t++){ -
TabularUnified issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp ¶
r25379 r25539 129 129 int* ids = xNew<int>(N); for(int i=0;i<N;i++) ids[i] = i; 130 130 131 for( int i=0;i<elements->Size();i++){132 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));131 for(Object* & object : elements->objects){ 132 Element* element=xDynamicCast<Element*>(object); 133 133 element->DatasetInputCreate(doublearray,M-1,N,ids,N,inputs,iomodel,SmbTemperaturesReconstructedEnum); 134 134 } … … 147 147 int* ids = xNew<int>(N); for(int i=0;i<N;i++) ids[i] = i; 148 148 149 for( int i=0;i<elements->Size();i++){150 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));149 for(Object* & object : elements->objects){ 150 Element* element=xDynamicCast<Element*>(object); 151 151 element->DatasetInputCreate(doublearray,M-1,N,ids,N,inputs,iomodel,SmbPrecipitationsReconstructedEnum); 152 152 } -
TabularUnified issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp ¶
r25514 r25539 5892 5892 parameters->FindParam(&dim,DomainDimensionEnum); 5893 5893 5894 for( int i=0;i<elements->Size();i++){5895 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));5894 for(Object* & object : elements->objects){ 5895 Element* element=xDynamicCast<Element*>(object); 5896 5896 5897 5897 /*Get inputs and parameters*/ … … 6064 6064 else tausize = 6; 6065 6065 6066 for( int i=0;i<elements->Size();i++){6067 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));6066 for(Object* & object : elements->objects){ 6067 Element* element=xDynamicCast<Element*>(object); 6068 6068 6069 6069 /*Get inputs and parameters*/ … … 6276 6276 else tausize = 6; 6277 6277 6278 for( int i=0;i<elements->Size();i++){6279 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));6278 for(Object* & object : elements->objects){ 6279 Element* element=xDynamicCast<Element*>(object); 6280 6280 6281 6281 /*Get inputs and parameters*/ -
TabularUnified issm/trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.cpp ¶
r25508 r25539 99 99 IssmDouble J_sum=0.; 100 100 101 for( int i=0;i<femmodel->elements->Size();i++){102 Element* element= (Element*)femmodel->elements->GetObjectByOffset(i);101 for(Object* & object : femmodel->elements->objects){ 102 Element* element=xDynamicCast<Element*>(object); 103 103 J+=this->Cfdragcoeffabsgrad_Calculation(element,weights_enum); 104 104 } -
TabularUnified issm/trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp ¶
r25508 r25539 104 104 IssmDouble J_sum=0.; 105 105 if(this->datatime<=time && !timepassedflag){ 106 for( int i=0;i<femmodel->elements->Size();i++){107 Element* element= (Element*)femmodel->elements->GetObjectByOffset(i);106 for(Object* & object : femmodel->elements->objects){ 107 Element* element=xDynamicCast<Element*>(object); 108 108 J+=this->Cfsurfacelogvel_Calculation(element,definitionenum); 109 109 } -
TabularUnified issm/trunk-jpl/src/c/classes/Cfsurfacesquare.cpp ¶
r25508 r25539 113 113 114 114 if(datatime<=time && !timepassedflag){ 115 for( int i=0;i<femmodel->elements->Size();i++){116 Element* element= (Element*)femmodel->elements->GetObjectByOffset(i);115 for(Object* & object : femmodel->elements->objects){ 116 Element* element=xDynamicCast<Element*>(object); 117 117 J+=this->Cfsurfacesquare_Calculation(element,model_enum,observation_enum,weights_enum); 118 118 } -
TabularUnified issm/trunk-jpl/src/c/classes/Elements/Element.cpp ¶
r25507 r25539 3400 3400 /*Intermediaries*/ 3401 3401 const int numnodes = this->GetNumberOfNodes(); 3402 3403 3402 /*Output */ 3404 3403 int d_nz = 0; -
TabularUnified issm/trunk-jpl/src/c/classes/FemModel.cpp ¶
r25533 r25539 110 110 for(int i=0;i<this->nummodels;i++) if(this->analysis_type_list[i]==StressbalanceAnalysisEnum){analysis_counter=i;break;} 111 111 if(analysis_counter==-1) _error_("Could not find alias for analysis_type StressbalanceAnalysisEnum in list of FemModel analyses\n"); 112 for( int i=0;i<this->elements->Size();i++){113 Element* element = xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));112 for(Object* & object : this->elements->objects){ 113 Element* element = xDynamicCast<Element*>(object); 114 114 element_type = element->element_type_list[analysis_counter]; 115 115 if(element_type!=P1Enum) _error_("Element type "<<EnumToStringx(element_type)<<" not supported with AMR yet!\n"); … … 980 980 if(profiler->Used(MPISERIAL)) _printf0_(" "<<setw(40)<<left<<"MPISERIAL elapsed time:"<<setw(7)<<setprecision(6)<<profiler->TotalTime(MPISERIAL) << " sec\n"); 981 981 982 if(profiler->Used(SEDLOOP)) _printf0_(" "<<setw(40)<<left<<"SedimentLoop elapsed time:"<<setw(7)<<setprecision(6)<<profiler->TotalTime(SEDLOOP) << " sec\n"); 983 if(profiler->Used(SEDMatrix)) _printf0_(" "<<setw(40)<<left<<"SedimentMatrix elapsed time:"<<setw(7)<<setprecision(6)<<profiler->TotalTime(SEDMatrix) << " sec\n"); 984 if(profiler->Used(SEDUpdate)) _printf0_(" "<<setw(40)<<left<<"SedimentUpdate elapsed time:"<<setw(7)<<setprecision(6)<<profiler->TotalTime(SEDUpdate) << " sec\n"); 985 if(profiler->Used(EPLLOOP)) _printf0_(" "<<setw(40)<<left<<"EplLoop elapsed time:"<<setw(7)<<setprecision(6)<<profiler->TotalTime(EPLLOOP) << " sec\n"); 986 if(profiler->Used(EPLMasking)) _printf0_(" "<<setw(40)<<left<<"EPL masking elapsed time:"<<setw(7)<<setprecision(6)<<profiler->TotalTime(EPLMasking) << " sec\n"); 987 if(profiler->Used(EPLMatrices)) _printf0_(" "<<setw(40)<<left<<"EPLMatrices elapsed time:"<<setw(7)<<setprecision(6)<<profiler->TotalTime(EPLMatrices) << " sec\n"); 988 if(profiler->Used(EPLUpdate)) _printf0_(" "<<setw(40)<<left<<"EPLUpdate elapsed time:"<<setw(7)<<setprecision(6)<<profiler->TotalTime(EPLUpdate) << " sec\n"); 989 982 990 /*Add to results: */ 983 991 results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingSolutionTimeEnum, solution_time)); … … 1013 1021 1014 1022 /*Compute Misfit: */ 1015 for( int i=0;i<elements->Size();i++){1016 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));1023 for(Object* & object : this->elements->objects){ 1024 Element* element = xDynamicCast<Element*>(object); 1017 1025 1018 1026 /*If on water, return 0: */ … … 1069 1077 void FemModel::CalvingRateVonmisesx(){/*{{{*/ 1070 1078 1071 for( int i=0;i<elements->Size();i++){1072 Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));1079 for(Object* & object : this->elements->objects){ 1080 Element* element = xDynamicCast<Element*>(object); 1073 1081 element->CalvingRateVonmises(); 1074 1082 } … … 1077 1085 void FemModel::CalvingRateLevermannx(){/*{{{*/ 1078 1086 1079 for( int i=0;i<elements->Size();i++){1080 Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));1087 for(Object* & object : this->elements->objects){ 1088 Element* element = xDynamicCast<Element*>(object); 1081 1089 element->CalvingRateLevermann(); 1082 1090 } … … 1085 1093 void FemModel::CalvingFluxLevelsetx(){/*{{{*/ 1086 1094 1087 for( int i=0;i<elements->Size();i++){1088 Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));1095 for(Object* & object : this->elements->objects){ 1096 Element* element = xDynamicCast<Element*>(object); 1089 1097 element->CalvingFluxLevelset(); 1090 1098 } … … 1093 1101 void FemModel::CalvingMeltingFluxLevelsetx(){/*{{{*/ 1094 1102 1095 for( int i=0;i<elements->Size();i++){1096 Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));1103 for(Object* & object : this->elements->objects){ 1104 Element* element = xDynamicCast<Element*>(object); 1097 1105 element->CalvingMeltingFluxLevelset(); 1098 1106 } … … 1134 1142 void FemModel::DeviatoricStressx(){/*{{{*/ 1135 1143 1136 for( int i=0;i<elements->Size();i++){1137 Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));1144 for(Object* & object : this->elements->objects){ 1145 Element* element = xDynamicCast<Element*>(object); 1138 1146 element->ComputeDeviatoricStressTensor(); 1139 1147 } … … 1153 1161 * segments we have (corresopnding to field = value)*/ 1154 1162 DataSet* segments=new DataSet(); 1155 for( int i=0;i<elements->Size();i++){1156 Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));1163 for(Object* & object : this->elements->objects){ 1164 Element* element = xDynamicCast<Element*>(object); 1157 1165 if(!element->IsOnBase()) continue; 1158 1166 Element* basalelement = element->SpawnBasalElement(); … … 1192 1200 IssmDouble d,xn,yn,dmin; 1193 1201 int last = -1; 1194 for(int v=0;v<vertices->Size();v++){ 1195 1196 Vertex* vertex=dynamic_cast<Vertex*>(this->vertices->GetObjectByOffset(v)); 1202 for(Object* & object : this->vertices->objects){ 1203 Vertex* vertex= xDynamicCast<Vertex*>(object); 1197 1204 IssmDouble x = vertex->x; 1198 1205 IssmDouble y = vertex->y; … … 1254 1261 } 1255 1262 1256 for( int i=0;i<this->elements->Size();i++){1257 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1263 for(Object* & object : this->elements->objects){ 1264 Element* element= xDynamicCast<Element*>(object); 1258 1265 element->CreateDistanceInputFromSegmentlist(distances,distanceenum); 1259 1266 } … … 1269 1276 IssmDouble total_divergence; 1270 1277 1271 for( int i=0;i<this->elements->Size();i++){1272 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1278 for(Object* & object : this->elements->objects){ 1279 Element* element= xDynamicCast<Element*>(object); 1273 1280 local_divergence+=element->Divergence(); 1274 1281 } … … 1282 1289 void FemModel::ElementOperationx(void (Element::*function)(void)){ /*{{{*/ 1283 1290 1284 for( int i=0;i<elements->Size();i++){1285 Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));1291 for(Object* & object : this->elements->objects){ 1292 Element* element= xDynamicCast<Element*>(object); 1286 1293 (element->*function)(); 1287 1294 } … … 1303 1310 1304 1311 /*now, go through our elements, and retrieve the one with this id: index: */ 1305 for( int i=0;i<this->elements->Size();i++){1306 element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1312 for(Object* & object : this->elements->objects){ 1313 element= xDynamicCast<Element*>(object); 1307 1314 if (element->Id()==index){ 1308 1315 found=1; … … 1334 1341 IssmDouble total_floating_area; 1335 1342 1336 for( int i=0;i<this->elements->Size();i++){1337 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1343 for(Object* & object : this->elements->objects){ 1344 Element* element= xDynamicCast<Element*>(object); 1338 1345 local_floating_area+=element->FloatingArea(scaled); 1339 1346 } … … 1358 1365 } 1359 1366 1360 for( int i=0;i<this->elements->Size();i++){1361 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1367 for(Object* & object : this->elements->objects){ 1368 Element* element= xDynamicCast<Element*>(object); 1362 1369 element->GetInputLocalMinMaxOnNodes(uLmin_local,uLmax_local,ug); 1363 1370 } … … 1572 1579 IssmDouble total_grounded_area; 1573 1580 1574 for( int i=0;i<this->elements->Size();i++){1575 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1581 for(Object* & object : this->elements->objects){ 1582 Element* element= xDynamicCast<Element*>(object); 1576 1583 local_grounded_area+=element->GroundedArea(scaled); 1577 1584 } … … 1595 1602 IssmDouble total_icefront_area; 1596 1603 1597 for( int i=0;i<this->elements->Size();i++){1598 Element* element= xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1604 for(Object* & object : this->elements->objects){ 1605 Element* element= xDynamicCast<Element*>(object); 1599 1606 element->GetInputListOnVertices(BasinId,FrontalForcingsBasinIdEnum); 1600 1607 for(int j=0;j<numvertices;j++){ … … 1621 1628 IssmDouble total_mass_flux; 1622 1629 1623 for( int i=0;i<this->elements->Size();i++){1624 Element* element= xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1630 for(Object* & object : this->elements->objects){ 1631 Element* element= xDynamicCast<Element*>(object); 1625 1632 local_mass_flux+=element->IcefrontMassFlux(scaled); 1626 1633 } … … 1637 1644 IssmDouble total_mass_flux; 1638 1645 1639 for( int i=0;i<this->elements->Size();i++){1640 Element* element= xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1646 for(Object* & object : this->elements->objects){ 1647 Element* element= xDynamicCast<Element*>(object); 1641 1648 local_mass_flux+=element->IcefrontMassFluxLevelset(scaled); 1642 1649 } … … 1653 1660 IssmDouble* P1DGlist = xNew<IssmDouble>(numvertices); 1654 1661 1655 for( int i=0;i<this->elements->Size();i++){1656 Element* element= xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1662 for(Object* & object : this->elements->objects){ 1663 Element* element= xDynamicCast<Element*>(object); 1657 1664 element->GetInputListOnVertices(P1DGlist,enum_in); 1658 1665 element->AddInput(DummyEnum,P1DGlist,P1DGEnum); … … 1681 1688 IssmDouble total_mass_flux; 1682 1689 1683 for( int i=0;i<this->elements->Size();i++){1684 Element* element= xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1690 for(Object* & object : this->elements->objects){ 1691 Element* element= xDynamicCast<Element*>(object); 1685 1692 local_mass_flux+=element->GroundinglineMassFlux(scaled); 1686 1693 } … … 1697 1704 IssmDouble total_ice_mass; 1698 1705 1699 for( int i=0;i<this->elements->Size();i++){1700 Element* element= xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1706 for(Object* & object : this->elements->objects){ 1707 Element* element= xDynamicCast<Element*>(object); 1701 1708 local_ice_mass+=element->IceMass(scaled); 1702 1709 } … … 1713 1720 IssmDouble total_ice_volume_af; 1714 1721 1715 for( int i=0;i<this->elements->Size();i++){1716 Element* element= xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1722 for(Object* & object : this->elements->objects){ 1723 Element* element= xDynamicCast<Element*>(object); 1717 1724 local_ice_volume_af+=element->IceVolumeAboveFloatation(scaled); 1718 1725 } … … 1729 1736 IssmDouble total_ice_volume; 1730 1737 1731 for( int i=0;i<this->elements->Size();i++){1732 Element* element= xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1738 for(Object* & object : this->elements->objects){ 1739 Element* element= xDynamicCast<Element*>(object); 1733 1740 local_ice_volume+=element->IceVolume(scaled); 1734 1741 } … … 1772 1779 for(i=0;i<num_segments;i++){ 1773 1780 element_id=reCast<int,IssmDouble>(*(segments+5*i+4)); 1774 for( j=0;j<elements->Size();j++){1775 element =(Element*)this->elements->GetObjectByOffset(j);1781 for(Object* & object : this->elements->objects){ 1782 element = xDynamicCast<Element*>(object); 1776 1783 if (element->Id()==element_id){ 1777 1784 /*We found the element which owns this segment, use it to compute the mass flux: */ … … 1807 1814 /*Go through elements, and request velocity: */ 1808 1815 maxabsvx=-INFINITY; 1809 for( i=0;i<this->elements->Size();i++){1810 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1816 for(Object* & object : this->elements->objects){ 1817 Element* element = xDynamicCast<Element*>(object); 1811 1818 Input* input = element->GetInput(VxEnum); 1812 1819 element_maxabsvx=input->GetInputMaxAbs(); … … 1832 1839 /*Go through elements, and request velocity: */ 1833 1840 maxabsvy=-INFINITY; 1834 for( i=0;i<this->elements->Size();i++){1835 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1841 for(Object* & object : this->elements->objects){ 1842 Element* element = xDynamicCast<Element*>(object); 1836 1843 Input* input = element->GetInput(VyEnum); 1837 1844 element_maxabsvy=input->GetInputMaxAbs(); … … 1857 1864 /*Go through elements, and request velocity: */ 1858 1865 maxabsvz=-INFINITY; 1859 for( i=0;i<this->elements->Size();i++){1860 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1866 for(Object* & object : this->elements->objects){ 1867 Element* element = xDynamicCast<Element*>(object); 1861 1868 Input* input = element->GetInput(VzEnum); 1862 1869 element_maxabsvz=input->GetInputMaxAbs(); … … 1879 1886 IssmDouble max_divergence = -INFINITY; 1880 1887 1881 for( int i=0;i<this->elements->Size();i++){1882 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1888 for(Object* & object : this->elements->objects){ 1889 Element* element = xDynamicCast<Element*>(object); 1883 1890 local_divergence=element->Divergence(); 1884 1891 if(fabs(local_divergence)>max_divergence) max_divergence=fabs(local_divergence); … … 1901 1908 /*Go through elements, and request velocity: */ 1902 1909 maxvel=-INFINITY; 1903 for( i=0;i<this->elements->Size();i++){1904 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1910 for(Object* & object : this->elements->objects){ 1911 Element* element = xDynamicCast<Element*>(object); 1905 1912 Input* vel_input = element->GetInput(VelEnum); _assert_(vel_input); 1906 1913 element_maxvel = vel_input->GetInputMax(); … … 1926 1933 /*Go through elements, and request velocity: */ 1927 1934 maxvx=-INFINITY; 1928 for( i=0;i<this->elements->Size();i++){1929 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1935 for(Object* & object : this->elements->objects){ 1936 Element* element = xDynamicCast<Element*>(object); 1930 1937 Input* vx_input = element->GetInput(VxEnum); _assert_(vx_input); 1931 1938 element_maxvx = vx_input->GetInputMax(); … … 1951 1958 /*Go through elements, and request velocity: */ 1952 1959 maxvy=-INFINITY; 1953 for( i=0;i<this->elements->Size();i++){1954 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1960 for(Object* & object : this->elements->objects){ 1961 Element* element = xDynamicCast<Element*>(object); 1955 1962 Input* vy_input = element->GetInput(VyEnum); _assert_(vy_input); 1956 1963 element_maxvy = vy_input->GetInputMax(); … … 1976 1983 /*Go through elements, and request velocity: */ 1977 1984 maxvz=-INFINITY; 1978 for( i=0;i<this->elements->Size();i++){1979 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));1985 for(Object* & object : this->elements->objects){ 1986 Element* element = xDynamicCast<Element*>(object); 1980 1987 Input* vz_input = element->GetInput(VzEnum); _assert_(vz_input); 1981 1988 element_maxvz = vz_input->GetInputMax(); … … 2001 2008 /*Go through elements, and request velocity: */ 2002 2009 minvel=INFINITY; 2003 for( i=0;i<this->elements->Size();i++){2004 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));2010 for(Object* & object : this->elements->objects){ 2011 Element* element = xDynamicCast<Element*>(object); 2005 2012 Input* input = element->GetInput(VelEnum); 2006 2013 element_minvel =input->GetInputMin(); … … 2026 2033 /*Go through elements, and request velocity: */ 2027 2034 minvx=INFINITY; 2028 for( i=0;i<this->elements->Size();i++){2029 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));2035 for(Object* & object : this->elements->objects){ 2036 Element* element = xDynamicCast<Element*>(object); 2030 2037 Input* input = element->GetInput(VxEnum); 2031 2038 element_minvx =input->GetInputMin(); … … 2051 2058 /*Go through elements, and request velocity: */ 2052 2059 minvy=INFINITY; 2053 for( i=0;i<this->elements->Size();i++){2054 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));2060 for(Object* & object : this->elements->objects){ 2061 Element* element = xDynamicCast<Element*>(object); 2055 2062 Input* input = element->GetInput(VyEnum); 2056 2063 element_minvy =input->GetInputMin(); … … 2076 2083 /*Go through elements, and request velocity: */ 2077 2084 minvz=INFINITY; 2078 for( i=0;i<this->elements->Size();i++){2079 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));2085 for(Object* & object : this->elements->objects){ 2086 Element* element = xDynamicCast<Element*>(object); 2080 2087 Input* input = element->GetInput(VzEnum); 2081 2088 element_minvz =input->GetInputMin(); … … 2104 2111 2105 2112 /*Compute Misfit: */ 2106 for( int i=0;i<elements->Size();i++){2107 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));2113 for(Object* & object : this->elements->objects){ 2114 Element* element = xDynamicCast<Element*>(object); 2108 2115 2109 2116 /*If on water, return 0: */ … … 2159 2166 2160 2167 /*Compute Misfit: */ 2161 for( int i=0;i<elements->Size();i++){2162 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));2168 for(Object* & object : this->elements->objects){ 2169 Element* element = xDynamicCast<Element*>(object); 2163 2170 2164 2171 /*If on water, return 0: */ … … 2245 2252 2246 2253 /*Fill in vector*/ 2247 for( int j=0;j<elements->Size();j++){2248 Element* element =(Element*)elements->GetObjectByOffset(j);2254 for(Object* & object : this->elements->objects){ 2255 Element* element = xDynamicCast<Element*>(object); 2249 2256 element->ControlToVectors(vector_control,vector_gradient,control_enum,control_interp[i]); 2250 2257 } … … 2466 2473 2467 2474 /*Get interpolation (and compute input if necessary)*/ 2468 for( int j=0;j<elements->Size();j++){2469 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(j));2475 for(Object* & object : this->elements->objects){ 2476 Element* element = xDynamicCast<Element*>(object); 2470 2477 element->ResultInterpolation(&rank_interpolation,&rank_nodesperelement,&rank_arraysize,output_enum); 2471 2478 if(rank_arraysize>max_rank_arraysize)max_rank_arraysize=rank_arraysize; … … 2495 2502 2496 2503 /*Fill-in matrix*/ 2497 for( int j=0;j<elements->Size();j++){2498 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(j));2504 for(Object* & object : this->elements->objects){ 2505 Element* element = xDynamicCast<Element*>(object); 2499 2506 element->ResultToPatch(values,nodesperelement,output_enum); 2500 2507 } … … 2522 2529 2523 2530 /*Fill in vector*/ 2524 for( int j=0;j<elements->Size();j++){2525 Element* element =(Element*)elements->GetObjectByOffset(j);2531 for(Object* & object : this->elements->objects){ 2532 Element* element = xDynamicCast<Element*>(object); 2526 2533 element->ResultToVector(vector_result,output_enum); 2527 2534 } … … 2541 2548 2542 2549 /*Fill-in matrix*/ 2543 for( int j=0;j<elements->Size();j++){2544 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(j));2550 for(Object* & object : this->elements->objects){ 2551 Element* element = xDynamicCast<Element*>(object); 2545 2552 element->ResultToMatrix(values,ncols,output_enum); 2546 2553 } … … 2667 2674 void FemModel::RignotMeltParameterizationx(){/*{{{*/ 2668 2675 2669 for( int i=0;i<elements->Size();i++){2670 Element* element =dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));2676 for(Object* & object : this->elements->objects){ 2677 Element* element = xDynamicCast<Element*>(object); 2671 2678 element->RignotMeltParameterization(); 2672 2679 } … … 2675 2682 void FemModel::StrainRateparallelx(){/*{{{*/ 2676 2683 2677 for( int i=0;i<elements->Size();i++){2678 Element* element =dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));2684 for(Object* & object : this->elements->objects){ 2685 Element* element = xDynamicCast<Element*>(object); 2679 2686 element->StrainRateparallel(); 2680 2687 } … … 2683 2690 void FemModel::StrainRateperpendicularx(){/*{{{*/ 2684 2691 2685 for( int i=0;i<elements->Size();i++){2686 Element* element =dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));2692 for(Object* & object : this->elements->objects){ 2693 Element* element = xDynamicCast<Element*>(object); 2687 2694 element->StrainRateperpendicular(); 2688 2695 } … … 2691 2698 void FemModel::StrainRateeffectivex(){/*{{{*/ 2692 2699 2693 for( int i=0;i<elements->Size();i++){2694 Element* element =dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));2700 for(Object* & object : this->elements->objects){ 2701 Element* element = xDynamicCast<Element*>(object); 2695 2702 element->ComputeStrainRate(); 2696 2703 } … … 2700 2707 2701 2708 /*Update input for basal element only*/ 2702 for( int i=0;i<elements->Size();i++){2703 Element* element =dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));2709 for(Object* & object : this->elements->objects){ 2710 Element* element = xDynamicCast<Element*>(object); 2704 2711 element->StressIntensityFactor(); 2705 2712 } … … 2717 2724 2718 2725 /*Compute Misfit: */ 2719 for( int i=0;i<elements->Size();i++){2720 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));2726 for(Object* & object : this->elements->objects){ 2727 Element* element = xDynamicCast<Element*>(object); 2721 2728 2722 2729 /*If on water, return 0: */ … … 2771 2778 2772 2779 /*Compute Misfit: */ 2773 for( int i=0;i<elements->Size();i++){2774 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));2780 for(Object* & object : this->elements->objects){ 2781 Element* element = xDynamicCast<Element*>(object); 2775 2782 2776 2783 /*If on water, return 0: */ … … 2825 2832 Vector<IssmDouble>* vectotalweight = new Vector<IssmDouble>(numberofvertices); 2826 2833 2827 for(int i=0;i<this->elements->Size();i++){2828 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));2834 for(Object* & object : this->elements->objects){ 2835 Element* element = xDynamicCast<Element*>(object); 2829 2836 2830 2837 /*check if there is ice in this element*/ … … 2860 2867 2861 2868 /*Set element inputs*/ 2862 for(int i=0;i<this->elements->Size();i++){2863 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));2869 for(Object* & object : this->elements->objects){ 2870 Element* element = xDynamicCast<Element*>(object); 2864 2871 H[0]=Hserial[element->vertices[0]->Sid()]; 2865 2872 H[1]=Hserial[element->vertices[1]->Sid()]; … … 2888 2895 2889 2896 /*Compute Misfit: */ 2890 for( int i=0;i<elements->Size();i++){2891 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));2897 for(Object* & object : this->elements->objects){ 2898 Element* element = xDynamicCast<Element*>(object); 2892 2899 2893 2900 /*If on water, return 0: */ … … 2944 2951 Element* element=(Element*)elements->GetObjectByOffset(0); min_dt=element->TimeAdapt(); 2945 2952 2946 for( int i=1;i<elements->Size();i++){2947 element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));2953 for(Object* & object : this->elements->objects){ 2954 element = xDynamicCast<Element*>(object); 2948 2955 dt=element->TimeAdapt(); 2949 2956 if(dt<min_dt)min_dt=dt; … … 2971 2978 IssmDouble total_calving_flux; 2972 2979 2973 for( int i=0;i<this->elements->Size();i++){2974 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));2980 for(Object* & object : this->elements->objects){ 2981 Element* element = xDynamicCast<Element*>(object); 2975 2982 local_calving_flux+=element->TotalCalvingFluxLevelset(scaled); 2976 2983 } … … 2987 2994 IssmDouble total_calving_flux; 2988 2995 2989 for( int i=0;i<this->elements->Size();i++){2990 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));2996 for(Object* & object : this->elements->objects){ 2997 Element* element = xDynamicCast<Element*>(object); 2991 2998 local_calving_flux+=element->TotalCalvingMeltingFluxLevelset(scaled); 2992 2999 } … … 3003 3010 IssmDouble total_fbmb; 3004 3011 3005 for( int i=0;i<this->elements->Size();i++){3006 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));3012 for(Object* & object : this->elements->objects){ 3013 Element* element = xDynamicCast<Element*>(object); 3007 3014 local_fbmb+=element->TotalFloatingBmb(scaled); 3008 3015 } … … 3019 3026 IssmDouble total_gbmb; 3020 3027 3021 for( int i=0;i<this->elements->Size();i++){3022 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));3028 for(Object* & object : this->elements->objects){ 3029 Element* element = xDynamicCast<Element*>(object); 3023 3030 local_gbmb+=element->TotalGroundedBmb(scaled); 3024 3031 } … … 3035 3042 IssmDouble total_smb; 3036 3043 3037 for( int i=0;i<this->elements->Size();i++){3038 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));3044 for(Object* & object : this->elements->objects){ 3045 Element* element = xDynamicCast<Element*>(object); 3039 3046 local_smb+=element->TotalSmb(scaled); 3040 3047 } … … 3048 3055 void FemModel::UpdateConstraintsExtrudeFromBasex(void){ /*{{{*/ 3049 3056 3050 for( int i=0;i<elements->Size();i++){3051 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));3057 for(Object* & object : this->elements->objects){ 3058 Element* element = xDynamicCast<Element*>(object); 3052 3059 element->UpdateConstraintsExtrudeFromBase(); 3053 3060 } … … 3057 3064 void FemModel::UpdateConstraintsExtrudeFromTopx(void){ /*{{{*/ 3058 3065 3059 for( int i=0;i<elements->Size();i++){3060 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));3066 for(Object* & object : this->elements->objects){ 3067 Element* element = xDynamicCast<Element*>(object); 3061 3068 element->UpdateConstraintsExtrudeFromTop(); 3062 3069 } … … 3111 3118 3112 3119 /*Update verices new geometry: */ 3113 for( int i=0;i<vertices->Size();i++){3114 Vertex* vertex =(Vertex*)vertices->GetObjectByOffset(i);3120 for(Object* & object : this->vertices->objects){ 3121 Vertex* vertex = xDynamicCast<Vertex*>(object); 3115 3122 vertex->UpdatePosition(vx,vy,vz,parameters,surface,bed); 3116 3123 } … … 3332 3339 IssmDouble* r = xNew<IssmDouble>(numvertices); 3333 3340 3334 for( int el=0;el<this->elements->Size();el++){3335 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(el));3341 for(Object* & object : this->elements->objects){ 3342 Element* element = xDynamicCast<Element*>(object); 3336 3343 element->GetVerticesCoordinates(&xyz_list); 3337 3344 for(int i=0;i<numvertices;i++){ … … 3364 3371 IssmDouble* sl = xNew<IssmDouble>(numvertices); 3365 3372 3366 for( int el=0;el<this->elements->Size();el++){3367 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(el));3373 for(Object* & object : this->elements->objects){ 3374 Element* element = xDynamicCast<Element*>(object); 3368 3375 3369 3376 element->GetInputListOnVertices(&s[0],SurfaceEnum); … … 3469 3476 vP0inputs= new Vector<IssmDouble>(numberofelements*numP0inputs); 3470 3477 vP1inputs= new Vector<IssmDouble>(numberofvertices*numP1inputs); 3471 for( int i=0;i<this->elements->Size();i++){3472 Element* element =xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));3478 for(Object* & object : this->elements->objects){ 3479 Element* element = xDynamicCast<Element*>(object); 3473 3480 3474 3481 /*Get P0 inputs*/ … … 4077 4084 4078 4085 /*Calculate the Smoothed Deviatoric Stress tensor*/ 4079 for( int i=0;i<this->elements->Size();i++){4080 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));4086 for(Object* & object : this->elements->objects){ 4087 Element* element = xDynamicCast<Element*>(object); 4081 4088 element->GetInputListOnVertices(deviatoricstressxx,DeviatoricStressxxEnum); 4082 4089 element->GetInputListOnVertices(deviatoricstressyy,DeviatoricStressyyEnum); … … 4167 4174 4168 4175 /*Integrate the error over elements*/ 4169 for(int i=0;i<this->elements->Size();i++){4170 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));4176 for(Object* & object : this->elements->objects){ 4177 Element* element = xDynamicCast<Element*>(object); 4171 4178 element->GetInputListOnVertices(tauxx,DeviatoricStressxxEnum); 4172 4179 element->GetInputListOnVertices(tauyy,DeviatoricStressyyEnum); … … 4233 4240 Vector<IssmDouble>* vectotalweight = new Vector<IssmDouble>(numberofvertices); 4234 4241 4235 for(int i=0;i<this->elements->Size();i++){4236 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));4242 for(Object* & object : this->elements->objects){ 4243 Element* element = xDynamicCast<Element*>(object); 4237 4244 element->GetInputListOnVertices(H,ThicknessEnum); 4238 4245 element->GetVerticesSidList(elem_vertices); … … 4317 4324 4318 4325 /*Integrate the error over elements*/ 4319 for(int i=0;i<this->elements->Size();i++){4320 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));4326 for(Object* & object : this->elements->objects){ 4327 Element* element = xDynamicCast<Element*>(object); 4321 4328 element->GetInputListOnVertices(H,ThicknessEnum); 4322 4329 element->GetVerticesSidList(elem_vertices); … … 4372 4379 Vector<IssmDouble>* vmasklevelset = new Vector<IssmDouble>(numberofelements); 4373 4380 4374 for(int i=0;i<this->elements->Size();i++){4375 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));4381 for(Object* & object : this->elements->objects){ 4382 Element* element = xDynamicCast<Element*>(object); 4376 4383 element->GetInputListOnVertices(elementlevelset,MaskOceanLevelsetEnum); 4377 4384 int sid = element->Sid(); … … 4405 4412 4406 4413 /*Insert the element center coordinates*/ 4407 for(int i=0;i<this->elements->Size();i++){4408 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));4414 for(Object* & object : this->elements->objects){ 4415 Element* element = xDynamicCast<Element*>(object); 4409 4416 //element->GetVerticesSidList(elem_vertices); 4410 4417 int sid = element->Sid(); … … 4461 4468 4462 4469 /*Use the element center coordinate if level set is zero (grounding line or ice front), otherwise set NAN*/ 4463 for(int i=0;i<this->elements->Size();i++){4464 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));4470 for(Object* & object : this->elements->objects){ 4471 Element* element = xDynamicCast<Element*>(object); 4465 4472 element->GetInputListOnVertices(levelset,levelset_type); 4466 4473 element->GetVerticesSidList(elem_vertices); … … 4645 4652 4646 4653 /*Go through elements, and add contribution from each element to the deflection vector wg:*/ 4647 for( int i=0;i<elements->Size();i++){4648 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));4654 for(Object* & object : this->elements->objects){ 4655 Element* element = xDynamicCast<Element*>(object); 4649 4656 element->GiaDeflection(wg,dwgdt, x,y); 4650 4657 } … … 4749 4756 4750 4757 /*First, figure out the area of the ocean, which is needed to compute the eustatic component: */ 4751 for(int i=0;i<elements->Size();i++){ 4752 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 4758 int i = -1; 4759 for(Object* & object : this->elements->objects){ 4760 i +=1; 4761 Element* element = xDynamicCast<Element*>(object); 4753 4762 element->GetInputValue(&area,AreaEnum); 4754 4763 if (masks->isoceanin[i]) oceanarea_cpu += area; … … 4759 4768 4760 4769 /*Call the sea level rise core: */ 4761 for( int i=0;i<elements->Size();i++){4762 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));4770 for(Object* & object : this->elements->objects){ 4771 Element* element = xDynamicCast<Element*>(object); 4763 4772 element->SealevelriseEustatic(RSLgi,&eustatic_cpu_e,masks, oceanarea); 4764 4773 eustatic_cpu+=eustatic_cpu_e; … … 4811 4820 /*Call the sea level rise non-eustatic core only if required: */ 4812 4821 if(computerigid | computeelastic){ 4813 for( int i=0;i<elements->Size();i++){4814 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));4822 for(Object* & object : this->elements->objects){ 4823 Element* element = xDynamicCast<Element*>(object); 4815 4824 element->SealevelriseNonEustatic(RSLgo,RSLg_old,masks); 4816 4825 } … … 4847 4856 IssmDouble moi_list[3]={0,0,0}; 4848 4857 IssmDouble moi_list_cpu[3]={0,0,0}; 4849 for( int i=0;i<elements->Size();i++){4850 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));4858 for(Object* & object : this->elements->objects){ 4859 Element* element = xDynamicCast<Element*>(object); 4851 4860 element->SealevelriseMomentOfInertia(&moi_list[0],RSLg_old,masks ); 4852 4861 moi_list_cpu[0] += moi_list[0]; … … 4949 4958 4950 4959 /*Call the sea level rise core: */ 4951 for( int i=0;i<elements->Size();i++){4952 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));4960 for(Object* & object : this->elements->objects){ 4961 Element* element = xDynamicCast<Element*>(object); 4953 4962 element->SealevelriseGeodetic(Up,North,East,RSLg,masks); 4954 4963 } … … 4985 4994 4986 4995 /*Go through elements, and add contribution from each element and divide by overall ocean area:*/ 4987 for( int i=0;i<elements->Size();i++){4988 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));4996 for(Object* & object : this->elements->objects){ 4997 Element* element = xDynamicCast<Element*>(object); 4989 4998 oceanvalue_cpu += element->OceanAverage(RSLg_serial,masks); 4990 4999 } … … 5023 5032 GetVectoronBaseFromInputsx(&old_active,this,HydrologydcMaskEplactiveNodeEnum,NodeSIdEnum); 5024 5033 5025 for (int i=0;i<elements->Size();i++){5026 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));5034 for(Object* & object : this->elements->objects){ 5035 Element* element = xDynamicCast<Element*>(object); 5027 5036 effanalysis->HydrologyEPLGetMask(mask,recurence,element); 5028 5037 } … … 5031 5040 recurence->Assemble(); 5032 5041 serial_rec=recurence->ToMPISerial(); 5033 for (int i=0;i<nodes->Size();i++){5034 Node* node =xDynamicCast<Node*>(nodes->GetObjectByOffset(i));5042 for(Object* & object : this->nodes->objects){ 5043 Node* node = xDynamicCast<Node*>(object); 5035 5044 if(serial_rec[node->Sid()]==1.)eplzigzag_counter[node->Lid()] ++; 5036 5045 if(eplzigzag_counter[node->Lid()]>eplflip_lock && eplflip_lock!=0){ … … 5055 5064 /*Step 2: update node activity. If one element is connected to mask=1, all nodes are active*/ 5056 5065 active=new Vector<IssmDouble>(nodes->NumberOfNodes()); 5057 for (int i=0;i<elements->Size();i++){5058 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));5066 for(Object* & object : this->elements->objects){ 5067 Element* element = xDynamicCast<Element*>(object); 5059 5068 effanalysis->HydrologyEPLGetActive(active,element); 5060 5069 } … … 5072 5081 this->parameters->FindParam(&domaintype,DomainTypeEnum); 5073 5082 5074 for( int i=0;i<elements->Size();i++){5075 Element *element = xDynamicCast<Element*>(elements->GetObjectByOffset(i));5083 for(Object* & object : this->elements->objects){ 5084 Element* element = xDynamicCast<Element*>(object); 5076 5085 switch(domaintype){ 5077 5086 case Domain2DhorizontalEnum: … … 5142 5151 mask=new Vector<IssmDouble>(this->nodes->NumberOfNodes()); 5143 5152 5144 for (int i=0;i<elements->Size();i++){5145 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));5153 for(Object* & object : this->elements->objects){ 5154 Element* element = xDynamicCast<Element*>(object); 5146 5155 inefanalysis->HydrologyIDSGetMask(mask,element); 5147 5156 } … … 5162 5171 /*get node mask coherent with element mask*/ 5163 5172 active=new Vector<IssmDouble>(nodes->NumberOfNodes()); 5164 for (int i=0;i<elements->Size();i++){5165 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));5173 for(Object* & object : this->elements->objects){ 5174 Element* element = xDynamicCast<Element*>(object); 5166 5175 inefanalysis->HydrologyIdsGetActive(active,element); 5167 5176 } … … 5174 5183 /*Update node activation accordingly*/ 5175 5184 int counter = 0; //this is probably not acurate but we are only interested in positivity 5176 for( int i=0;i<elements->Size();i++){5177 Element *element = xDynamicCast<Element*>(elements->GetObjectByOffset(i));5185 for(Object* & object : this->elements->objects){ 5186 Element* element = xDynamicCast<Element*>(object); 5178 5187 int numnodes = element->GetNumberOfNodes(); 5179 5188 IssmDouble *base = xNew<IssmDouble>(numnodes); … … 5223 5232 this->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum); 5224 5233 active=new Vector<IssmDouble>(nodes->NumberOfNodes()); 5225 for (int i=0;i<elements->Size();i++){5226 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));5234 for(Object* & object : this->elements->objects){ 5235 Element* element = xDynamicCast<Element*>(object); 5227 5236 effanalysis->HydrologyEPLGetActive(active,element); 5228 5237 } … … 5237 5246 int counter =0; 5238 5247 this->SetCurrentConfiguration(L2ProjectionEPLAnalysisEnum); 5239 for (int i=0;i<nodes->Size();i++){5240 Node* node =xDynamicCast<Node*>(nodes->GetObjectByOffset(i));5248 for(Object* & object : this->nodes->objects){ 5249 Node* node = xDynamicCast<Node*>(object); 5241 5250 if(serial_active[node->Sid()]==1.){ 5242 5251 node->Activate(); … … 5274 5283 } 5275 5284 else{ 5276 for( int j=0;j<elements->Size();j++){5285 for(Object* & object : this->elements->objects){ 5277 5286 /*Get the right transient input*/ 5278 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(j));5287 Element* element = xDynamicCast<Element*>(object); 5279 5288 TransientInput* transientinput = this->inputs->GetTransientInput(transientinput_enum[i]); 5280 5289 … … 5310 5319 } 5311 5320 else{ 5312 for(int j=0;j<elements->Size();j++){ 5321 int j=-1; 5322 for(Object* & object : this->elements->objects){ 5313 5323 /*Get the right transient input*/ 5314 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j)); 5324 Element* element = xDynamicCast<Element*>(object); 5325 j+=1; 5315 5326 /*Get basal element*/ 5316 5327 switch(domaintype){ … … 5357 5368 5358 5369 for(int i=0;i<numoutputs;i++){ 5359 for( int j=0;j<this->elements->Size();j++){5360 Element* element = xDynamicCast<Element*>( elements->GetObjectByOffset(j));5370 for(Object* & object : this->elements->objects){ 5371 Element* element = xDynamicCast<Element*>(object); 5361 5372 element->CreateInputTimeAverage(transientinput_enum[i],averagedinput_enum[i],init_time,end_time,averaging_method); 5362 5373 } … … 5369 5380 5370 5381 for(int i=0;i<numoutputs;i++){ 5371 for( int j=0;j<this->elements->Size();j++){5372 Element* element = xDynamicCast<Element*>( elements->GetObjectByOffset(j));5382 for(Object* & object : this->elements->objects){ 5383 Element* element = xDynamicCast<Element*>(object); 5373 5384 /*Get basal element*/ 5374 5385 switch(domaintype){ … … 5646 5657 this->GetZeroLevelSetPoints(&levelset_points,numberofpoints,levelset_type);//levelset_points is serial (global) 5647 5658 5648 for( int i=0;i<this->vertices->Size();i++){//only on this partition5649 Vertex* vertex =(Vertex*)this->vertices->GetObjectByOffset(i);5659 for(Object* & object : this->vertices->objects){ 5660 Vertex* vertex = xDynamicCast<Vertex*>(object); 5650 5661 /*Attention: no spherical coordinates*/ 5651 5662 x = vertex->GetX(); … … 5977 5988 this->GetZeroLevelSetPoints(&levelset_points,numberofpoints,levelset_type); 5978 5989 5979 for( int i=0;i<this->elements->Size();i++){//parallel5980 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));5990 for(Object* & object : this->elements->objects){ 5991 Element* element = xDynamicCast<Element*>(object); 5981 5992 int sid = element->Sid(); 5982 5993 element->GetVerticesCoordinates(&xyz_list); -
TabularUnified issm/trunk-jpl/src/c/classes/IoModel.cpp ¶
r25425 r25539 1700 1700 if(strcmp(iodata->name,vector_name)==0){ 1701 1701 _assert_(iodata->code==7); 1702 for( int i=0;i<elements->Size();i++){1703 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));1702 for(Object* & object : elements->objects){ 1703 Element* element=xDynamicCast<Element*>(object); 1704 1704 element->InputCreate(iodata->data,inputs,this,iodata->M,iodata->N,iodata->layout,input_enum,iodata->code);//we need i to index into elements. 1705 1705 } … … 1721 1721 this->FetchData(&doublearray,&M,&N,vector_name); 1722 1722 1723 for( int i=0;i<elements->Size();i++){1724 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));1723 for(Object* & object : elements->objects){ 1724 Element* element=xDynamicCast<Element*>(object); 1725 1725 if(!doublearray){ 1726 1726 element->SetElementInput(inputs,input_enum,default_value); … … 1742 1742 IoData* iodata=*iter; 1743 1743 if(strcmp(iodata->name,vector_name)==0){ 1744 for( int i=0;i<elements->Size();i++){1745 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));1744 for(Object* & object : elements->objects){ 1745 Element* element=xDynamicCast<Element*>(object); 1746 1746 element->InputCreate(iodata->data,inputs,this,iodata->M,iodata->N,iodata->layout,input_enum,iodata->code);//we need i to index into elements. 1747 1747 } … … 1767 1767 case 1: //boolean constant 1768 1768 this->FetchData(&boolean,vector_name); 1769 for( i=0;i<elements->Size();i++){1770 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));1769 for(Object* & object : elements->objects){ 1770 Element* element=xDynamicCast<Element*>(object); 1771 1771 element->SetBoolInput(inputs,input_enum,boolean); 1772 1772 } … … 1774 1774 case 2: //integer constant 1775 1775 this->FetchData(&integer,vector_name); 1776 for( i=0;i<elements->Size();i++){1777 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));1776 for(Object* & object : elements->objects){ 1777 Element* element=xDynamicCast<Element*>(object); 1778 1778 element->SetIntInput(inputs,input_enum,integer); 1779 1779 } … … 1781 1781 case 3: //IssmDouble constant 1782 1782 this->FetchData(&scalar,vector_name); 1783 for( i=0;i<elements->Size();i++){1784 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));1783 for(Object* & object : elements->objects){ 1784 Element* element=xDynamicCast<Element*>(object); 1785 1785 element->SetElementInput(inputs,input_enum,scalar); 1786 1786 } … … 1789 1789 this->FetchData(&doublearray,&M,&N,vector_name); //we still have a doublearray, because it might include times in transient mode 1790 1790 if(!doublearray) _error_("\""<<vector_name<<"\" not found in binary file"); 1791 for( i=0;i<elements->Size();i++){1792 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));1791 for(Object* & object : elements->objects){ 1792 Element* element=xDynamicCast<Element*>(object); 1793 1793 element->InputCreate(doublearray,inputs,this,M,N,vector_layout,input_enum,code);//we need i to index into elements. 1794 1794 } … … 1797 1797 this->FetchData(&doublearray,&M,&N,vector_name); //we still have a doublearray, because it might include times in transient mode 1798 1798 if(!doublearray) _error_("\""<<vector_name<<"\" not found in binary file"); 1799 for( i=0;i<elements->Size();i++){1800 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));1799 for(Object* & object : elements->objects){ 1800 Element* element=xDynamicCast<Element*>(object); 1801 1801 element->InputCreate(doublearray,inputs,this,M,N,vector_layout,input_enum,code);//we need i to index into elements. 1802 1802 } … … 1828 1828 //initialize transient input dataset: 1829 1829 TransientInput* transientinput=inputs->SetDatasetTransientInput(input_enum,i, times,N); 1830 for( int j=0;j<elements->Size();j++){1830 for(Object* & object : elements->objects){ 1831 1831 1832 1832 /*Get the right transient input*/ 1833 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(j));1833 Element* element=xDynamicCast<Element*>(object); 1834 1834 1835 1835 /*Get values and lid list*/ … … 1899 1899 this->FetchData(&doublearray,&M,&N,vector_name); 1900 1900 if(!doublearray) _error_("\""<<vector_name<<"\" not found in binary file"); 1901 for( i=0;i<elements->Size();i++){1902 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));1901 for(Object* & object : elements->objects){ 1902 Element* element=xDynamicCast<Element*>(object); 1903 1903 element->InputCreate(doublearray,inputs,this,M,N,vector_layout,input_enum,code);//we need i to index into elements. 1904 1904 } … … 1919 1919 IoData* iodata=*iter; 1920 1920 if(strcmp(iodata->name,vector_name)==0){ 1921 for( int i=0;i<elements->Size();i++){1922 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));1921 for(Object* & object : elements->objects){ 1922 Element* element=xDynamicCast<Element*>(object); 1923 1923 _error_("to be implemented..."); 1924 1924 //element->InputCreate(iodata->data,inputs,this,iodata->M,iodata->N,iodata->layout,input_enum,iodata->code);//we need i to index into elements. … … 1960 1960 for(int i=0;i<N;i++) ids[i] = i; 1961 1961 1962 for( int i=0;i<elements->Size();i++){1963 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));1962 for(Object* & object : elements->objects){ 1963 Element* element=xDynamicCast<Element*>(object); 1964 1964 element->DatasetInputCreate(doublearray,M,N,ids,N,inputs,this,input_enum); 1965 1965 } … … 1975 1975 for(int i=0;i<N;i++) ids[i] = i; 1976 1976 1977 for( int i=0;i<elements->Size();i++){1978 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));1977 for(Object* & object : elements->objects){ 1978 Element* element=xDynamicCast<Element*>(object); 1979 1979 element->DatasetInputCreate(doublearray,M,N,ids,N,inputs,this,input_enum); 1980 1980 } -
TabularUnified issm/trunk-jpl/src/c/classes/Loads/Loads.cpp ¶
r25508 r25539 57 57 output->id_offsets=NULL; 58 58 output->sorted_ids=NULL; 59 if(this->sorted && objsize>0 && this->id_offsets){ 59 if(this->sorted && objsize>0 && this->id_offsets){ 60 60 output->id_offsets=xNew<int>(objsize); 61 61 xMemCpy<int>(output->id_offsets,this->id_offsets,objsize); … … 102 102 103 103 /*Now go through all loads, and get how many nodes they own, unless they are clone nodes: */ 104 for( int i=0;i<this->Size();i++){105 Load* load=xDynamicCast<Load*>(this->GetObjectByOffset(i));104 for(Object* & object : this->objects){ 105 Load* load = xDynamicCast<Load*>(object); 106 106 if(load->IsPenalty()){ 107 107 ispenalty++; … … 135 135 136 136 /*Now go through all loads, and get how many nodes they own, unless they are clone nodes: */ 137 for( int i=0;i<this->Size();i++){138 Load* load=xDynamicCast<Load*>(this->GetObjectByOffset(i));137 for(Object* & object : this->objects){ 138 Load* load = xDynamicCast<Load*>(object); 139 139 int numnodes=load->GetNumberOfNodes(); 140 140 if(numnodes>max)max=numnodes; -
TabularUnified issm/trunk-jpl/src/c/classes/Misfit.cpp ¶
r25508 r25539 90 90 /*}}}*/ 91 91 void Misfit::Marshall(MarshallHandle* marshallhandle){/*{{{*/ 92 _error_("not implemented yet!"); 93 } 92 _error_("not implemented yet!"); 93 } 94 94 /*}}}*/ 95 95 int Misfit::ObjectEnum(void){/*{{{*/ … … 123 123 if (this->local==1){ /*area integration using elements: {{{*/ 124 124 125 int i;126 125 IssmDouble misfit_t=0.; 127 126 IssmDouble all_misfit_t=0.; … … 132 131 if(this->lock)return misfit/(time-starttime); 133 132 134 for( i=0;i<femmodel->elements->Size();i++){135 Element* element= (Element*)femmodel->elements->GetObjectByOffset(i);133 for(Object* & object : femmodel->elements->objects){ 134 Element* element=xDynamicCast<Element*>(object); 136 135 misfit_t+=element->Misfit(model_enum,observation_enum,weights_enum); 137 136 area_t+=element->MisfitArea(weights_enum); … … 153 152 154 153 /*What we return is the value of misfit / time if transient*/ 155 if(time!=0.) return misfit/(time-starttime); 154 if(time!=0.) return misfit/(time-starttime); 156 155 return misfit; 157 156 } /*}}}*/ -
TabularUnified issm/trunk-jpl/src/c/classes/Nodes.cpp ¶
r25508 r25539 63 63 output->id_offsets=NULL; 64 64 output->sorted_ids=NULL; 65 if(this->sorted && objsize>0 && this->id_offsets){ 65 if(this->sorted && objsize>0 && this->id_offsets){ 66 66 output->id_offsets=xNew<int>(objsize); 67 67 xMemCpy<int>(output->id_offsets,this->id_offsets,objsize); … … 148 148 149 149 /*First, allocate dof lists based on fset and sset*/ 150 for( int i=0;i<this->Size();i++){151 Node* node=xDynamicCast<Node*>(this->GetObjectByOffset(i));150 for(Object* & object : this->objects){ 151 Node* node = xDynamicCast<Node*>(object); 152 152 node->AllocateDofLists(setenum); 153 153 } … … 155 155 /*Now, Build local dofs for masters first*/ 156 156 int dofcount=0; 157 for( int i=0;i<this->Size();i++){158 Node* node=xDynamicCast<Node*>(this->GetObjectByOffset(i));157 for(Object* & object : this->objects){ 158 Node* node = xDynamicCast<Node*>(object); 159 159 if(!node->IsClone()) node->DistributeLocalDofs(&dofcount,setenum); 160 160 } 161 161 /*Build local dofs for clones, they always will be at the end*/ 162 162 int dofcount_local = dofcount; 163 for( int i=0;i<this->Size();i++){164 Node* node =xDynamicCast<Node*>(this->GetObjectByOffset(i));163 for(Object* & object : this->objects){ 164 Node* node = xDynamicCast<Node*>(object); 165 165 if(node->IsClone()) node->DistributeLocalDofs(&dofcount_local,setenum); 166 166 } 167 167 168 /* Now every object has distributed dofs, but locally, and with a dof count starting from 168 /* Now every object has distributed dofs, but locally, and with a dof count starting from 169 169 * 0. This means the dofs between all the cpus are not unique. We now offset the dofs of each 170 170 * cpus by the total last (master) dofs of the previus cpu, starting from 0. … … 179 179 xDelete<int>(alldofcount); 180 180 181 for( int i=0;i<this->Size();i++){182 Node* node =xDynamicCast<Node*>(this->GetObjectByOffset(i));181 for(Object* & object : this->objects){ 182 Node* node = xDynamicCast<Node*>(object); 183 183 node->DistributeGlobalDofsMasters(offset,setenum); 184 184 } 185 185 186 /* Finally, remember that cpus may have skipped some objects, because they were clones. For every 187 * object that is not a clone, tell them to show their dofs, so that later on, they can get picked 186 /* Finally, remember that cpus may have skipped some objects, because they were clones. For every 187 * object that is not a clone, tell them to show their dofs, so that later on, they can get picked 188 188 * up by their clones: */ 189 189 int maxdofspernode = this->MaxNumDofs(setenum); … … 212 212 213 213 /*Update indexingupdateflag*/ 214 for( int i=0;i<this->Size();i++){215 Node* node =xDynamicCast<Node*>(this->GetObjectByOffset(i));214 for(Object* & object : this->objects){ 215 Node* node = xDynamicCast<Node*>(object); 216 216 node->ReindexingDone(); 217 217 } … … 236 236 this->numberofnodes_local=this->Size(); 237 237 this->numberofmasters_local=0; 238 for( int i=0;i<this->Size();i++){239 Node* node =xDynamicCast<Node*>(this->GetObjectByOffset(i));238 for(Object* & object : this->objects){ 239 Node* node = xDynamicCast<Node*>(object); 240 240 if(!node->clone) this->numberofmasters_local++; 241 241 } … … 244 244 /*2. Distribute lids (First: masters, then clones)*/ 245 245 int lid = 0; 246 for( int i=0;i<this->Size();i++){247 Node* node =xDynamicCast<Node*>(this->GetObjectByOffset(i));246 for(Object* & object : this->objects){ 247 Node* node = xDynamicCast<Node*>(object); 248 248 if(!node->clone) node->lid=lid++; 249 249 } 250 for( int i=0;i<this->Size();i++){251 Node* node =xDynamicCast<Node*>(this->GetObjectByOffset(i));250 for(Object* & object : this->objects){ 251 Node* node = xDynamicCast<Node*>(object); 252 252 if(node->clone) node->lid=lid++; 253 253 } … … 261 261 xDelete<int>(all_num_masters); 262 262 263 for( int i=0;i<this->Size();i++){264 Node* node =xDynamicCast<Node*>(this->GetObjectByOffset(i));263 for(Object* & object : this->objects){ 264 Node* node = xDynamicCast<Node*>(object); 265 265 node->pid = node->lid+offset; 266 266 } … … 301 301 302 302 /*Now go through all nodes, and get how many dofs they own, unless they are clone nodes: */ 303 for( int i=0;i<this->Size();i++){304 Node* node =xDynamicCast<Node*>(this->GetObjectByOffset(i));303 for(Object* & object : this->objects){ 304 Node* node = xDynamicCast<Node*>(object); 305 305 306 306 int numdofs=node->GetNumberOfDofs(NoneApproximationEnum,setenum); … … 332 332 333 333 /*Now go through all nodes, and get how many dofs they own, unless they are clone nodes: */ 334 for( int i=0;i<this->Size();i++){335 Node* node =xDynamicCast<Node*>(this->GetObjectByOffset(i));334 for(Object* & object : this->objects){ 335 Node* node = xDynamicCast<Node*>(object); 336 336 337 337 /*Ok, this object is a node, ask it to plug values into partition: */ … … 348 348 /*go through all nodes, and get how many dofs they own, unless they are clone nodes: */ 349 349 int numdofs=0; 350 for( int i=0;i<this->Size();i++){351 Node* node =xDynamicCast<Node*>(this->GetObjectByOffset(i));350 for(Object* & object : this->objects){ 351 Node* node = xDynamicCast<Node*>(object); 352 352 numdofs+=node->GetNumberOfDofs(NoneApproximationEnum,setenum); 353 353 } … … 376 376 377 377 /*Now go through all nodes, and get how many dofs they own, unless they are clone nodes: */ 378 for( int i=0;i<this->Size();i++){379 Node* node =xDynamicCast<Node*>(this->GetObjectByOffset(i));378 for(Object* & object : this->objects){ 379 Node* node = xDynamicCast<Node*>(object); 380 380 if(node->RequiresDofReindexing()){ 381 381 flag = 1; … … 408 408 409 409 /*First, go over all nodes, and masters can write their f dof and -1 for s-set*/ 410 for( int i=0;i<this->Size();i++){411 Node* node =xDynamicCast<Node*>(this->GetObjectByOffset(i));410 for(Object* & object : this->objects){ 411 Node* node = xDynamicCast<Node*>(object); 412 412 413 413 /*Skip if clone (will check later)*/ … … 436 436 437 437 /*Second, go over all nodes, and check that we still have what's expected...*/ 438 for( int i=0;i<this->Size();i++){439 Node* node =xDynamicCast<Node*>(this->GetObjectByOffset(i));438 for(Object* & object : this->objects){ 439 Node* node = xDynamicCast<Node*>(object); 440 440 441 441 /*Write degree of freedom if active*/ -
TabularUnified issm/trunk-jpl/src/c/classes/Profiler.h ¶
r25508 r25539 28 28 #define SLRCORE 15 /*Profiling SLR */ 29 29 #define MPISERIAL 16 /*Profiling MPISerial */ 30 #define MAXPROFSIZE 17 /*Used to initialize static arrays*/ 30 #define SEDLOOP 17 /*Profiling MPISerial */ 31 #define SEDMatrix 18 /*Profiling MPISerial */ 32 #define SEDUpdate 19 /*Profiling MPISerial */ 33 #define EPLLOOP 20 /*Profiling MPISerial */ 34 #define EPLMasking 21 /*Profiling MPISerial */ 35 #define EPLMatrices 22 /*Profiling MPISerial */ 36 #define EPLUpdate 23 /*Profiling MPISerial */ 37 #define MAXPROFSIZE 24 /*Used to initialize static arrays*/ 31 38 32 39 33 40 class Profiler: public Object{ 34 41 35 public: 42 public: 36 43 IssmPDouble flops[MAXPROFSIZE]; 37 44 IssmPDouble flops_start[MAXPROFSIZE]; -
TabularUnified issm/trunk-jpl/src/c/classes/Radar.cpp ¶
r25508 r25539 30 30 } 31 31 /*}}}*/ 32 Radar::Radar(char* in_name, int in_definitionenum){/*{{{*/ 32 Radar::Radar(char* in_name, int in_definitionenum){/*{{{*/ 33 33 this->definitionenum=in_definitionenum; 34 34 this->name = xNew<char>(strlen(in_name)+1); … … 59 59 /*}}}*/ 60 60 void Radar::Marshall(MarshallHandle* marshallhandle){/*{{{*/ 61 _error_("not implemented yet!"); 62 } 61 _error_("not implemented yet!"); 62 } 63 63 /*}}}*/ 64 64 int Radar::ObjectEnum(void){/*{{{*/ … … 77 77 } 78 78 /*}}}*/ 79 IssmDouble Radar::Response(FemModel* femmodel){/*{{{*/ 80 int i; 81 for(i=0;i<femmodel->elements->Size();i++){ 82 Element* element=(Element*)femmodel->elements->GetObjectByOffset(i); 79 IssmDouble Radar::Response(FemModel* femmodel){/*{{{*/ 80 for(Object* & object : femmodel->elements->objects){ 81 Element* element=xDynamicCast<Element*>(object); 83 82 this->ComputeRadarAttenuation(element); 84 this->ComputeRadarPower(element); 83 this->ComputeRadarPower(element); 85 84 } 86 85 return 0.; … … 112 111 IssmDouble E_Cl_W97=3.6800e-20; 113 112 IssmDouble E_NH=3.6800e-20; 114 IssmDouble mol_H_hol=1.6; 115 IssmDouble mol_H_lgp=0.2; 116 IssmDouble mol_Cl_hol=0.4; 117 IssmDouble mol_Cl_lgp=1.8; 113 IssmDouble mol_H_hol=1.6; 114 IssmDouble mol_H_lgp=0.2; 115 IssmDouble mol_Cl_hol=0.4; 116 IssmDouble mol_Cl_lgp=1.8; 118 117 IssmDouble mol_NH_hol=0.5; 119 IssmDouble mol_NH_lgp=0.4; 118 IssmDouble mol_NH_lgp=0.4; 120 119 IssmDouble mol_H, mol_Cl, mol_NH; 121 120 IssmDouble attenuation_rate_macgregor[NUMVERTICES]; … … 129 128 /*Retrieve all inputs we will be needing: */ 130 129 Input* temp_input=element->GetInput(TemperatureEnum); _assert_(temp_input); 131 Input* ice_period_input=element->GetInput(RadarIcePeriodEnum); _assert_(ice_period_input); 130 Input* ice_period_input=element->GetInput(RadarIcePeriodEnum); _assert_(ice_period_input); 132 131 133 132 /* Start looping on the number of vertices: */ … … 136 135 for (int iv=0;iv<NUMVERTICES;iv++){ 137 136 gauss->GaussVertex(iv); 138 137 139 138 /*Get ice temperature: */ 140 139 temp_input->GetInputValue(&temperature,gauss); 141 140 ice_period_input->GetInputValue(&ice_period,gauss); 142 141 143 if(ice_period>0){; 142 if(ice_period>0){; 144 143 mol_H=mol_H_hol; 145 144 mol_Cl=mol_Cl_hol; 146 145 mol_NH=mol_NH_hol; 147 146 } 148 else{ 147 else{ 149 148 mol_H=mol_H_lgp; 150 mol_Cl=mol_Cl_lgp; 149 mol_Cl=mol_Cl_lgp; 151 150 mol_NH=mol_NH_lgp; 152 151 } … … 209 208 IssmDouble rho_ice, gravity, pressure, pressure_melting_pt, frozen_temp, basal_temp, basal_pmp; 210 209 GaussPenta* gauss=NULL; 211 210 212 211 /* Get node coordinates*/ 213 212 element->GetVerticesCoordinates(&xyz_list); … … 253 252 pressure=rho_ice*gravity*thickness; 254 253 pressure_melting_pt=t_tp-gamma*(pressure-p_tp); 255 254 256 255 if((temperature-pressure_melting_pt)<=-1){ 257 256 reflectivity=-40; -
TabularUnified issm/trunk-jpl/src/c/classes/Regionaloutput.cpp ¶
r25508 r25539 36 36 /*}}}*/ 37 37 Regionaloutput::~Regionaloutput(){/*{{{*/ 38 if(this->name)xDelete(this->name); 38 if(this->name)xDelete(this->name); 39 39 if(this->outputname)xDelete(this->outputname); 40 40 if(this->mask)xDelete(this->mask); … … 64 64 /*}}}*/ 65 65 void Regionaloutput::Marshall(MarshallHandle* marshallhandle){/*{{{*/ 66 _error_("not implemented yet!"); 67 } 66 _error_("not implemented yet!"); 67 } 68 68 /*}}}*/ 69 69 int Regionaloutput::ObjectEnum(void){/*{{{*/ … … 88 88 IssmDouble Regionaloutput::Response(FemModel* femmodel){/*{{{*/ 89 89 90 int i;91 90 IssmDouble val_t=0.; 92 91 IssmDouble all_val_t=0.; 93 92 int outputenum = StringToEnumx(this->outputname); 94 93 95 for( i=0;i<femmodel->elements->Size();i++){96 Element* element= (Element*)femmodel->elements->GetObjectByOffset(i);94 for(Object* & object : femmodel->elements->objects){ 95 Element* element=xDynamicCast<Element*>(object); 97 96 switch(outputenum){ 98 97 case GroundedAreaEnum: -
TabularUnified issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp ¶
r25474 r25539 336 336 337 337 /*go through elements and fill the masks: */ 338 for (int i=0;i<femmodel->elements->Size();i++){339 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));338 for(Object* & object : femmodel->elements->objects){ 339 Element* element=xDynamicCast<Element*>(object); 340 340 element->SetSealevelMasks(masks); 341 341 } … … 377 377 378 378 /*Run sealevelrie geometry routine in elements:*/ 379 for( int i=0;i<femmodel->elements->Size();i++){380 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));379 for(Object* & object : femmodel->elements->objects){ 380 Element* element=xDynamicCast<Element*>(object); 381 381 element->SealevelriseGeometry(latitude,longitude,radius,xx,yy,zz); 382 382 } -
TabularUnified issm/trunk-jpl/src/c/main/esmfbinders.cpp ¶
r25379 r25539 28 28 29 29 elementsonlocalrank=xNewZeroInit<int>(numberofelements); 30 for (int i=0;i<femmodel->elements->Size();i++){31 Element* element=dynamic_cast<Element*>( femmodel->elements->GetObjectByOffset(i));30 for(Object* & object : femmodel->elements->objects){ 31 Element* element=dynamic_cast<Element*>(object); 32 32 elementsonlocalrank[element->Sid()]=1; 33 33 } … … 63 63 int forcing_type=GCMForcingTerms[f]; 64 64 65 for (int i=0;i<femmodel->elements->Size();i++){66 Element* element=dynamic_cast<Element*>( femmodel->elements->GetObjectByOffset(i));65 for(Object* & object : femmodel->elements->objects){ 66 Element* element=dynamic_cast<Element*>(object); 67 67 68 68 switch(forcing_type){ … … 103 103 int output_type=ISSMOutputTerms[f]; 104 104 105 for (int i=0;i<femmodel->elements->Size();i++){106 Element* element=dynamic_cast<Element*>( femmodel->elements->GetObjectByOffset(i));105 for(Object* & object : femmodel->elements->objects){ 106 Element* element=dynamic_cast<Element*>(object); 107 107 108 108 switch(output_type){ -
TabularUnified issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp ¶
r25486 r25539 120 120 int elementssize = femmodel->elements->Size(); 121 121 int loadssize = femmodel->loads->Size(); 122 122 123 /*First, we are building chaining vectors so that we know what nodes are 123 124 * connected to what elements. These vectors are such that: … … 128 129 next_e = xNew<int>(elementssize*numnodesperelement); 129 130 count2offset_e = xNew<int>(elementssize*numnodesperelement); 130 131 131 k=0; 132 for(i=0;i<elementssize;i++){ 133 element = xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i)); 132 i=-1; 133 for(Object* & object : femmodel->elements->objects){ 134 element = xDynamicCast<Element*>(object); 135 i+=1; 134 136 int elementnumnodes = element->GetNumberOfNodes(); 135 137 lidlist = xNew<int>(elementnumnodes); … … 148 150 xDelete<int>(lidlist); 149 151 } 150 151 152 /*Chain for loads*/ 152 153 head_l = xNew<int>(localnumnodes); for(i=0;i<localnumnodes;i++) head_l[i]=-1; … … 154 155 count2offset_l = xNew<int>(loadssize*numnodesperload); 155 156 k=0; 156 for(i=0;i<loadssize;i++){ 157 load = xDynamicCast<Load*>(femmodel->loads->GetObjectByOffset(i)); 157 i=-1; 158 for(Object* & object : femmodel->loads->objects){ 159 load = xDynamicCast<Load*>(object); 160 i+=1; 158 161 int loadnumnodes = load->GetNumberOfNodes(); 159 162 lidlist = xNew<int>(loadnumnodes); … … 182 185 183 186 Vector<IssmDouble> *connectivity_clone= new Vector<IssmDouble>(localmasters,numnodes); 184 185 187 femmodel->parameters->FindParam(&analysis_type,AnalysisTypeEnum); 186 188 /*Resetting flags to false at each iteration takes a lot of time, so we keep track of the flags … … 190 192 191 193 /*Create connectivity vector*/ 192 for( i=0;i<femmodel->nodes->Size();i++){193 Node* node=xDynamicCast<Node*>(femmodel->nodes->GetObjectByOffset(i));194 for(Object* & object : femmodel->nodes->objects){ 195 Node* node = xDynamicCast<Node*>(object); 194 196 int lid = node->Lid(); 195 197 int pid = node->Pid(); … … 207 209 } 208 210 flagsindices_counter = 0; 209 210 211 for(j=head_e[lid];j!=-1;j=next_e[j]){ 211 212 offset=count2offset_e[j]; … … 252 253 d_nnz=xNew<int>(m); 253 254 o_nnz=xNew<int>(m); 254 for( i=0;i<femmodel->nodes->Size();i++){255 Node* node =xDynamicCast<Node*>(femmodel->nodes->GetObjectByOffset(i));255 for(Object* & object : femmodel->nodes->objects){ 256 Node* node = xDynamicCast<Node*>(object); 256 257 int lid = node->Lid(); 257 258 if(!node->IsClone()){ -
TabularUnified issm/trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp ¶
r24998 r25539 30 30 31 31 /*loop on each element, and add contribution of the element to the partition (surface weighted average): */ 32 for( int i=0;i<elements->Size();i++){33 Element* element =xDynamicCast<Element*>(elements->GetObjectByOffset(i));32 for(Object* & object : elements->objects){ 33 Element* element = xDynamicCast<Element*>(object); 34 34 element->AverageOntoPartition(partition_contributions,partition_areas,vertex_response,qmu_part); 35 35 } -
TabularUnified issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp ¶
r25379 r25539 16 16 17 17 if(VerboseMProcessor()) _printf0_(" Configuring elements...\n"); 18 for( int i=0;i<elements->Size();i++){19 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));18 for(Object* & object : elements->objects){ 19 Element* element=xDynamicCast<Element*>(object); 20 20 element->Configure(elements,loads,nodes,vertices,materials,parameters,inputs); 21 21 } -
TabularUnified issm/trunk-jpl/src/c/modules/ControlInputSetGradientx/ControlInputSetGradientx.cpp ¶
r25317 r25539 25 25 int offset = 0; 26 26 for(int i=0;i<num_controls;i++){ 27 for( int j=0;j<elements->Size();j++){28 Element* element= (Element*)elements->GetObjectByOffset(j);27 for(Object* & object : elements->objects){ 28 Element* element=xDynamicCast<Element*>(object); 29 29 element->ControlInputSetGradient(gradient,control_type[i],i,offset,M_all[i],N_all[i],interp_all[i]); 30 30 } -
TabularUnified issm/trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp ¶
r23588 r25539 10 10 void CreateJacobianMatrixx(Matrix<IssmDouble>** pJff,FemModel* femmodel,IssmDouble kmax){ 11 11 12 int i;13 12 int configuration_type,analysisenum; 14 13 Element *element = NULL; … … 28 27 29 28 /*Create and assemble matrix*/ 30 for( i=0;i<femmodel->elements->Size();i++){31 element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));29 for(Object* & object : femmodel->elements->objects){ 30 element=xDynamicCast<Element*>(object); 32 31 ElementMatrix* Je = analysis->CreateJacobianMatrix(element); 33 32 if(Je) Je->AddToGlobal(Jff); 34 33 delete Je; 35 34 } 36 for (i =0;i<femmodel->loads->Size();i++){35 for (int i=0;i<femmodel->loads->Size();i++){ 37 36 load=(Load*)femmodel->loads->GetObjectByOffset(i); 38 37 load->CreateJacobianMatrix(Jff); -
TabularUnified issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp ¶
r25446 r25539 16 16 17 17 /*Compute Misfit: */ 18 for( int i=0;i<elements->Size();i++){19 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));18 for(Object* & object : elements->objects){ 19 Element* element=xDynamicCast<Element*>(object); 20 20 J+=DragCoefficientAbsGradient(element); 21 21 } -
TabularUnified issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp ¶
r25379 r25539 14 14 15 15 /*First, reset all melt to 0 */ 16 for( int i=0;i<femmodel->elements->Size();i++){17 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));16 for(Object* & object : femmodel->elements->objects){ 17 Element* element=xDynamicCast<Element*>(object); 18 18 int numvertices = element->GetNumberOfVertices(); 19 19 IssmDouble* values = xNewZeroInit<IssmDouble>(numvertices); … … 55 55 IssmDouble maxdist_cpu=-1.; 56 56 for(int i=0;i<num_basins;i++){dmax_basin_cpu[i]=-1;} 57 for( int i=0;i<femmodel->elements->Size();i++){58 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));57 for(Object* & object : femmodel->elements->objects){ 58 Element* element=xDynamicCast<Element*>(object); 59 59 if(!element->IsIceInElement() || !element->IsFloating()) continue; 60 60 numvertices = element->GetNumberOfVertices(); … … 91 91 92 92 /*Assign box numbers*/ 93 for( int i=0;i<femmodel->elements->Size();i++){94 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));93 for(Object* & object : femmodel->elements->objects){ 94 Element* element=xDynamicCast<Element*>(object); 95 95 element->PicoUpdateBoxid(nd); 96 96 } … … 112 112 IssmDouble* boxareas=xNewZeroInit<IssmDouble>(num_basins*maxbox); 113 113 114 for( int i=0;i<femmodel->elements->Size();i++){115 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));114 for(Object* & object : femmodel->elements->objects){ 115 Element* element=xDynamicCast<Element*>(object); 116 116 if(!element->IsOnBase()) continue; 117 117 Element* basalelement = element->SpawnBasalElement(); … … 138 138 }/*}}}*/ 139 139 void UpdateBoxPico(FemModel* femmodel, int loopboxid){/*{{{*/ 140 for( int i=0;i<femmodel->elements->Size();i++){141 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));140 for(Object* & object : femmodel->elements->objects){ 141 Element* element=xDynamicCast<Element*>(object); 142 142 element->PicoUpdateBox(loopboxid); 143 143 } … … 160 160 161 161 /* Compute Toc and Soc weighted avg (boxes 0 to n-1) */ 162 for( int i=0;i<femmodel->elements->Size();i++){163 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));162 for(Object* & object : femmodel->elements->objects){ 163 Element* element=xDynamicCast<Element*>(object); 164 164 if(!element->IsOnBase()) continue; 165 165 Element* basalelement = element->SpawnBasalElement(); … … 201 201 if(boxid==0){ 202 202 overturning_weighted_avg=xNewZeroInit<IssmDouble>(num_basins); 203 for( int i=0;i<femmodel->elements->Size();i++){204 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));203 for(Object* & object : femmodel->elements->objects){ 204 Element* element=xDynamicCast<Element*>(object); 205 205 if(!element->IsOnBase()) continue; 206 206 Element* basalelement = element->SpawnBasalElement(); … … 243 243 }/*}}}*/ 244 244 void ComputeBasalMeltPlume(FemModel* femmodel){/*{{{*/ 245 for( int i=0;i<femmodel->elements->Size();i++){246 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));245 for(Object* & object : femmodel->elements->objects){ 246 Element* element=xDynamicCast<Element*>(object); 247 247 element->PicoComputeBasalMelt(); 248 248 } -
TabularUnified issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp ¶
r25379 r25539 54 54 void LinearFloatingiceMeltingRatex(FemModel* femmodel){/*{{{*/ 55 55 56 for( int i=0;i<femmodel->elements->Size();i++){57 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));56 for(Object* & object : femmodel->elements->objects){ 57 Element* element = xDynamicCast<Element*>(object); 58 58 element->LinearFloatingiceMeltingRate(); 59 59 } … … 62 62 void SpatialLinearFloatingiceMeltingRatex(FemModel* femmodel){/*{{{*/ 63 63 64 for( int i=0;i<femmodel->elements->Size();i++){65 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));64 for(Object* & object : femmodel->elements->objects){ 65 Element* element = xDynamicCast<Element*>(object); 66 66 element->SpatialLinearFloatingiceMeltingRate(); 67 67 } … … 70 70 void MismipFloatingiceMeltingRatex(FemModel* femmodel){/*{{{*/ 71 71 72 for( int i=0;i<femmodel->elements->Size();i++){73 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));72 for(Object* & object : femmodel->elements->objects){ 73 Element* element = xDynamicCast<Element*>(object); 74 74 element->MismipFloatingiceMeltingRate(); 75 75 } … … 84 84 85 85 femmodel->parameters->FindParam(&num_basins,BasalforcingsIsmip6NumBasinsEnum); 86 femmodel->parameters->FindParam(&tf_depths,&num_depths,BasalforcingsIsmip6TfDepthsEnum); _assert_(tf_depths); 86 femmodel->parameters->FindParam(&tf_depths,&num_depths,BasalforcingsIsmip6TfDepthsEnum); _assert_(tf_depths); 87 87 femmodel->parameters->FindParam(&islocal,BasalforcingsIsmip6IsLocalEnum); 88 88 … … 96 96 97 97 /*Get TF at each ice shelf point - linearly intepolate in depth and time*/ 98 for( int i=0;i<femmodel->elements->Size();i++){99 Element* element = xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));98 for(Object* & object : femmodel->elements->objects){ 99 Element* element = xDynamicCast<Element*>(object); 100 100 int numvertices = element->GetNumberOfVertices(); 101 101 … … 123 123 IssmDouble depth = -depth_vertices[iv]; /*NOTE: make sure we are dealing with depth>0*/ 124 124 int offset; 125 int found=binary_search(&offset,depth,tf_depths,num_depths); 125 int found=binary_search(&offset,depth,tf_depths,num_depths); 126 126 if(!found) _error_("depth not found"); 127 127 … … 157 157 if(!islocal) { 158 158 /*Compute sums of tf*area and shelf-area per cpu*/ 159 for( int i=0;i<femmodel->elements->Size();i++){160 Element* element =xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));159 for(Object* & object : femmodel->elements->objects){ 160 Element* element = xDynamicCast<Element*>(object); 161 161 if(!element->IsOnBase() || !element->IsIceInElement() || !element->IsFloating()) continue; 162 162 /*Spawn basal element if on base to compute element area*/ … … 169 169 area=basalelement->GetHorizontalSurfaceArea(); 170 170 tf_weighted_avg[basinid]+=tf*area; 171 areas_summed[basinid] +=area; 171 areas_summed[basinid] +=area; 172 172 /*Delete spawned element if we are in 3D*/ 173 173 basalelement->FindParam(&domaintype,DomainTypeEnum); … … 185 185 186 186 /*Compute meltrates*/ 187 for( int i=0;i<femmodel->elements->Size();i++){188 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));187 for(Object* & object : femmodel->elements->objects){ 188 Element* element = xDynamicCast<Element*>(object); 189 189 element->Ismip6FloatingiceMeltingRate(); 190 190 } … … 200 200 void BeckmannGoosseFloatingiceMeltingRatex(FemModel* femmodel){/*{{{*/ 201 201 202 for( int i=0;i<femmodel->elements->Size();i++){203 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));202 for(Object* & object : femmodel->elements->objects){ 203 Element* element = xDynamicCast<Element*>(object); 204 204 element->BeckmannGoosseFloatingiceMeltingRate(); 205 205 } -
TabularUnified issm/trunk-jpl/src/c/modules/GeothermalFluxx/GeothermalFluxx.cpp ¶
r24145 r25539 39 39 void MantlePlumeGeothermalFluxx(FemModel* femmodel){/*{{{*/ 40 40 41 for( int i=0;i<femmodel->elements->Size();i++){42 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));41 for(Object* & object : femmodel->elements->objects){ 42 Element* element=xDynamicCast<Element*>(object); 43 43 element->MantlePlumeGeothermalFlux(); 44 44 } -
TabularUnified issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp ¶
r23612 r25539 7 7 #include "../../toolkits/toolkits.h" 8 8 9 void GetSolutionFromInputsx(Vector<IssmDouble>** psolution,FemModel* femmodel){ 9 void GetSolutionFromInputsx(Vector<IssmDouble>** psolution,FemModel* femmodel){/*{{{*/ 10 10 11 11 if(VerboseModule()) _printf0_(" Get solution from inputs\n"); … … 25 25 /*Go through elements and plug solution: */ 26 26 Analysis* analysis = EnumToAnalysis(analysisenum); 27 for( int i=0;i<femmodel->elements->Size();i++){28 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));27 for(Object* & object : femmodel->elements->objects){ 28 Element* element=xDynamicCast<Element*>(object); 29 29 analysis->GetSolutionFromInputs(solution,element); 30 30 } … … 36 36 /*Assign output pointers:*/ 37 37 *psolution=solution; 38 } 38 }/*}}}*/ 39 40 void GetBasalSolutionFromInputsx(Vector<IssmDouble>** psolution,FemModel* femmodel){ /*{{{*/ 41 42 if(VerboseModule()) _printf0_(" Get solution from inputs\n"); 43 44 /*retrieve parameters: */ 45 int analysisenum; 46 int domaintype; 47 femmodel->parameters->FindParam(&analysisenum,AnalysisTypeEnum); 48 femmodel->parameters->FindParam(&domaintype,DomainTypeEnum); 49 /*Get size of vector: */ 50 int gsize = femmodel->nodes->NumberOfDofs(GsetEnum); 51 int gsize_local = femmodel->nodes->NumberOfDofsLocal(GsetEnum); 52 if(gsize==0) _error_("Allocating a Vec of size 0 as gsize=0 "); 53 54 /*Initialize solution: */ 55 Vector<IssmDouble>* solution=new Vector<IssmDouble>(gsize_local,gsize); 56 57 /*Go through elements and plug solution: */ 58 Analysis* analysis = EnumToAnalysis(analysisenum); 59 for(Object* & object : femmodel->elements->objects){ 60 Element* element=xDynamicCast<Element*>(object); 61 switch(domaintype){ 62 case Domain2DhorizontalEnum: 63 analysis->GetSolutionFromInputs(solution,element); 64 break; 65 case Domain3DEnum: 66 if(!element->IsOnBase()) continue; 67 analysis->GetSolutionFromInputs(solution,element); 68 break; 69 default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet"); 70 } 71 } 72 delete analysis; 73 74 /*Assemble vector: */ 75 solution->Assemble(); 76 77 /*Assign output pointers:*/ 78 *psolution=solution; 79 }/*}}}*/ -
TabularUnified issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.h ¶
r16675 r25539 1 1 /*!\file: GetSolutionFromInputsx.h 2 2 * \brief header file for updating datasets from inputs 3 */ 3 */ 4 4 5 5 #ifndef _GETSOLUTIONFROMINPUTSXX_H … … 11 11 /* local prototypes: */ 12 12 void GetSolutionFromInputsx(Vector<IssmDouble>** psolution,FemModel* femmodel); 13 void GetBasalSolutionFromInputsx(Vector<IssmDouble>** psolution,FemModel* femmodel); 13 14 14 15 #endif /* _GETSOLUTIONFROMINPUTSXX_H */ -
TabularUnified issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp ¶
r25406 r25539 30 30 int offset = 0; 31 31 for(int i=0;i<num_controls;i++){ 32 for( int j=0;j<elements->Size();j++){33 Element* element= (Element*)elements->GetObjectByOffset(j);32 for(Object* & object : elements->objects){ 33 Element* element=xDynamicCast<Element*>(object); 34 34 element->GetVectorFromControlInputs(vector,control_type[i],i,N[i],data,offset); 35 35 } -
TabularUnified issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp ¶
r25489 r25539 9 9 void GetVectorFromInputsx(Vector<IssmDouble>** pvector,FemModel* femmodel,int name,int type){ /*{{{*/ 10 10 11 int i;12 11 Vector<IssmDouble>* vector=NULL; 13 12 … … 26 25 } 27 26 /*Look up in elements*/ 28 for( i=0;i<femmodel->elements->Size();i++){29 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));27 for(Object* & object : femmodel->elements->objects){ 28 Element* element=xDynamicCast<Element*>(object); 30 29 element->GetVectorFromInputs(vector,name,type); 31 30 } … … 38 37 void GetVectoronBaseFromInputsx(Vector<IssmDouble>** pvector,FemModel* femmodel,int name,int type){ /*{{{*/ 39 38 40 int i,domaintype;39 int domaintype; 41 40 Vector<IssmDouble>* vector=NULL; 42 41 … … 56 55 57 56 /*Look up in elements*/ 58 for( i=0;i<femmodel->elements->Size();i++){59 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));57 for(Object* & object : femmodel->elements->objects){ 58 Element* element=xDynamicCast<Element*>(object); 60 59 element->FindParam(&domaintype,DomainTypeEnum); 61 60 switch(domaintype){ … … 76 75 void GetVectorFromInputsx(Vector<IssmDouble>** pvector,FemModel* femmodel,int name,int type,IssmDouble time){/*{{{*/ 77 76 78 int i;79 77 Vector<IssmDouble>* vector=NULL; 80 78 … … 90 88 } 91 89 /*Look up in elements*/ 92 for( i=0;i<femmodel->elements->Size();i++){93 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));90 for(Object* & object : femmodel->elements->objects){ 91 Element* element=xDynamicCast<Element*>(object); 94 92 element->GetVectorFromInputs(vector,name,type,time); 95 93 } -
TabularUnified issm/trunk-jpl/src/c/modules/Gradjx/Gradjx.cpp ¶
r25317 r25539 44 44 /*Compute all gradient_list*/ 45 45 for(int i=0;i<num_controls;i++){ 46 for( int j=0;j<elements->Size();j++){47 Element* element= (Element*)elements->GetObjectByOffset(j);46 for(Object* & object : elements->objects){ 47 Element* element=xDynamicCast<Element*>(object); 48 48 analysis->GradientJ(gradient_list[i],element,control_type[i],control_interp[i],i); 49 49 } -
TabularUnified issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp ¶
r25465 r25539 43 43 44 44 /*Migrate grounding line : */ 45 for( int i=0;i<elements->Size();i++){46 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));45 for(Object* & object : elements->objects){ 46 Element* element=xDynamicCast<Element*>(object); 47 47 element->MigrateGroundingLine(phi_ungrounding); 48 48 } … … 68 68 69 69 /*Fill vector vertices_potentially_floating: */ 70 for( int i=0;i<elements->Size();i++){71 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));70 for(Object* & object : elements->objects){ 71 Element* element=xDynamicCast<Element*>(object); 72 72 element->FSContactMigration(vertex_sigmann,vertex_waterpressure); 73 73 } … … 104 104 105 105 /*Fill vector vertices_potentially_floating: */ 106 for( i=0;i<elements->Size();i++){107 element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));106 for(Object* & object : elements->objects){ 107 element=xDynamicCast<Element*>(object); 108 108 element->PotentialUngrounding(vec_vertices_potentially_ungrounding); 109 109 } … … 132 132 /*recover vec_phi*/ 133 133 vec_phi=new Vector<IssmDouble>(vertices->NumberOfVertices()); 134 for( i=0;i<elements->Size();i++){135 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));134 for(Object* & object : elements->objects){ 135 Element* element=xDynamicCast<Element*>(object); 136 136 element->GetVectorFromInputs(vec_phi,MaskOceanLevelsetEnum,VertexPIdEnum); 137 137 } … … 146 146 147 147 /*Figure out if any of the nodes of the element will be floating -> elements neighbouting the floating ice*/ 148 for( i=0;i<elements->Size();i++){149 element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));148 for(Object* & object : elements->objects){ 149 element=xDynamicCast<Element*>(object); 150 150 vec_elements_neighboring_floatingice->SetValue(element->Sid(),element->IsNodeOnShelfFromFlags(phi)?1.0:0.0,INS_VAL); 151 151 } … … 157 157 /*Go through elements_neighboring_floatingce, and update vector of the nodes that will start floating*/ 158 158 local_nflipped=0; 159 for( i=0;i<elements->Size();i++){160 element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));159 for(Object* & object : elements->objects){ 160 element=xDynamicCast<Element*>(object); 161 161 if(reCast<int,IssmDouble>(elements_neighboring_floatingce[element->Sid()])){ 162 162 local_nflipped+=element->UpdatePotentialUngrounding(vertices_potentially_ungrounding,vec_phi,phi); -
TabularUnified issm/trunk-jpl/src/c/modules/InputDepthAverageAtBasex/InputDepthAverageAtBasex.cpp ¶
r18521 r25539 9 9 10 10 void InputDepthAverageAtBasex(FemModel* femmodel,int original_enum, int new_enum){ 11 for( int i=0;i<femmodel->elements->Size();i++){12 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));11 for(Object* & object : femmodel->elements->objects){ 12 Element* element=xDynamicCast<Element*>(object); 13 13 element->InputDepthAverageAtBase(original_enum,new_enum); 14 14 } -
TabularUnified issm/trunk-jpl/src/c/modules/InputExtrudex/InputExtrudex.cpp ¶
r18521 r25539 9 9 10 10 void InputExtrudex(FemModel* femmodel,int input_enum,int start){ 11 for( int i=0;i<femmodel->elements->Size();i++){12 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));11 for(Object* & object : femmodel->elements->objects){ 12 Element* element=xDynamicCast<Element*>(object); 13 13 element->InputExtrude(input_enum,start); 14 14 } -
TabularUnified issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp ¶
r25379 r25539 12 12 13 13 /*Elements and loads drive the update: */ 14 for( int i=0;i<femmodel->elements->Size();i++){15 Element* element =xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));14 for(Object* & object : femmodel->elements->objects){ 15 Element* element = xDynamicCast<Element*>(object); 16 16 element->InputUpdateFromConstant(constant,name); 17 17 } … … 22 22 23 23 /*Elements and loads drive the update: */ 24 for( int i=0;i<femmodel->elements->Size();i++){25 Element* element =xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));24 for(Object* & object : femmodel->elements->objects){ 25 Element* element = xDynamicCast<Element*>(object); 26 26 element->InputUpdateFromConstant(constant,name); 27 27 } … … 33 33 /*Elements and loads drive the update: */ 34 34 if(IsInputEnum(name)){ 35 for( int i=0;i<femmodel->elements->Size();i++){36 Element* element =xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));35 for(Object* & object : femmodel->elements->objects){ 36 Element* element = xDynamicCast<Element*>(object); 37 37 element->InputUpdateFromConstant(constant,name); 38 38 } … … 55 55 56 56 /*Elements and loads drive the update: */ 57 for( int i=0;i<elements->Size();i++){58 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));57 for(Object* & object : elements->objects){ 58 Element* element=xDynamicCast<Element*>(object); 59 59 element->SetElementInput(inputs,name,constant); 60 60 } … … 65 65 66 66 /*Elements and loads drive the update: */ 67 for( int i=0;i<elements->Size();i++){68 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));67 for(Object* & object : elements->objects){ 68 Element* element=xDynamicCast<Element*>(object); 69 69 element->SetBoolInput(inputs,name,constant); 70 70 } … … 79 79 80 80 /*Elements and loads drive the update: */ 81 for( int i=0;i<elements->Size();i++){82 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));81 for(Object* & object : elements->objects){ 82 Element* element=xDynamicCast<Element*>(object); 83 83 element->SetElementInput(inputs,name,constant2); 84 84 } -
TabularUnified issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp ¶
r25379 r25539 12 12 #include "../InputUpdateFromConstantx/InputUpdateFromConstantx.h" 13 13 #include "../InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h" 14 14 15 15 void InputUpdateFromDakotax(FemModel* femmodel,double* variables,char* *variables_descriptors,int numdakotavariables){ /*{{{*/ 16 16 … … 34 34 35 35 /*retrieve parameters: */ 36 femmodel->parameters->FindParam(&variable_partitions,&variable_partitions_num,NULL,NULL,QmuVariablePartitionsEnum); 37 femmodel->parameters->FindParam(&variable_partitions_npart,NULL,NULL,QmuVariablePartitionsNpartEnum); 38 femmodel->parameters->FindParam(&variable_partitions_nt,NULL,NULL,QmuVariablePartitionsNtEnum); 39 40 41 /*Go through all dakota descriptors, ex: "rho_ice","thermal_conductivity","thickness1","thickness2", etc ..., and 42 * for each descriptor, take the variable value and plug it into the inputs (more or less :)): 43 * We also start with distributed and standard values , as they tend to be used to pluck data from a multi-modle ensemble (mme) 44 * which can then be scaled. Doing the scaling first would be impractical, as the entire mme would have to be scaled, 36 femmodel->parameters->FindParam(&variable_partitions,&variable_partitions_num,NULL,NULL,QmuVariablePartitionsEnum); 37 femmodel->parameters->FindParam(&variable_partitions_npart,NULL,NULL,QmuVariablePartitionsNpartEnum); 38 femmodel->parameters->FindParam(&variable_partitions_nt,NULL,NULL,QmuVariablePartitionsNtEnum); 39 40 41 /*Go through all dakota descriptors, ex: "rho_ice","thermal_conductivity","thickness1","thickness2", etc ..., and 42 * for each descriptor, take the variable value and plug it into the inputs (more or less :)): 43 * We also start with distributed and standard values , as they tend to be used to pluck data from a multi-modle ensemble (mme) 44 * which can then be scaled. Doing the scaling first would be impractical, as the entire mme would have to be scaled, 45 45 * which is a waste of time:*/ 46 46 47 47 variablecount=0; 48 for(i=0;i<numdakotavariables;i++){ //these are the dakota variables, for all partitions. 48 for(i=0;i<numdakotavariables;i++){ //these are the dakota variables, for all partitions. 49 49 50 50 descriptor=variables_descriptors[i]; 51 51 52 52 53 53 /*From descriptor, figure out if the variable is scaled, indexed, distributed or just a simple variable: */ 54 if (strncmp(descriptor,"scaled_",7)==0){ 54 if (strncmp(descriptor,"scaled_",7)==0){ 55 55 /*we are skipping these for now.*/ 56 56 npart=variable_partitions_npart[variablecount]; 57 57 nt=variable_partitions_nt[variablecount]; 58 58 59 59 /*increment i to skip the distributed values just collected: */ 60 60 i+=npart*nt-1; //careful, the for loop will add 1. … … 66 66 /*we are skipping these for now.*/ 67 67 } 68 68 69 69 else if (strncmp(descriptor,"distributed_",12)==0){ 70 70 if (VerboseQmu())_printf0_(" updating variable " << descriptor << "\n"); 71 71 72 72 /*recover partition vector: */ 73 73 variable_partition=variable_partitions[variablecount]; 74 74 npart=variable_partitions_npart[variablecount]; 75 75 76 /*Variable is distributed. Determine root name of variable (ex: distributed_DragCoefficient_1 -> DragCoefficient). 76 /*Variable is distributed. Determine root name of variable (ex: distributed_DragCoefficient_1 -> DragCoefficient). 77 77 * Allocate distributed_values and fill the distributed_values with the next npart variables: */ 78 78 … … 86 86 87 87 //for (int j=0;j<npart;j++)_printf_(j << ":" << distributed_values[j] << "\n"); 88 88 89 89 //Call specialty code: 90 90 InputUpdateSpecialtyCode(femmodel,distributed_values,variable_partition,npart,root); 91 91 92 92 /*increment i to skip the distributed values just collected: */ 93 93 i+=npart-1; //careful, the for loop will add 1. 94 94 95 95 /*Free allocations: */ 96 96 xDelete<double>(parameter); … … 104 104 variablecount++; 105 105 } 106 106 107 107 variablecount=0; 108 108 /*now deal with scaled variabes:*/ 109 for(i=0;i<numdakotavariables;i++){ //these are the dakota variables, for all partitions. 109 for(i=0;i<numdakotavariables;i++){ //these are the dakota variables, for all partitions. 110 110 111 111 descriptor=variables_descriptors[i]; 112 112 113 113 /*From descriptor, figure out if the variable is scaled, indexed, distributed or just a simple variable: */ 114 114 if (strncmp(descriptor,"scaled_",7)==0){ 115 115 116 116 if (VerboseQmu())_printf0_(" updating variable " << descriptor << "\n"); 117 117 118 118 /*recover partition vector: */ 119 119 variable_partition=variable_partitions[variablecount]; … … 121 121 nt=variable_partitions_nt[variablecount]; 122 122 123 /* Variable is scaled, determine its root name (ex: scaled_DragCoefficient_1 -> DragCoefficient). Allocate distributed_values and fill the 123 /* Variable is scaled, determine its root name (ex: scaled_DragCoefficient_1 -> DragCoefficient). Allocate distributed_values and fill the 124 124 * distributed_values with the next npart variables coming from Dakota: */ 125 125 memcpy(root,strstr(descriptor,"_")+1,(strlen(strstr(descriptor,"_")+1)+1)*sizeof(char)); … … 136 136 /*increment i to skip the distributed values just collected: */ 137 137 i+=npart*nt-1; //careful, the for loop will add 1. 138 138 139 139 /*Free allocations: */ 140 140 xDelete<double>(parameter); … … 201 201 femmodel->inputs->SetTransientInput(DummyEnum,times,N); 202 202 transientinput2 = femmodel->inputs->GetTransientInput(DummyEnum); 203 204 for (int i=0;i<femmodel->elements->Size();i++){ 205 206 Tria* element=xDynamicCast<Tria*>(femmodel->elements->GetObjectByOffset(i)); 203 204 for(Object* & object : femmodel->elements->objects){ 205 Tria* element=xDynamicCast<Tria*>(object); 207 206 208 207 if((int)variable_partition[element->Sid()]==-1)id=0; //grab background field … … 218 217 if(interpolationenum==P0Enum){ 219 218 value=tria_input->element_values[0]; 220 transientinput2->AddTriaTimeInput( j,1,&(element->lid),&value,P0Enum); 219 transientinput2->AddTriaTimeInput( j,1,&(element->lid),&value,P0Enum); 221 220 } 222 221 else if(interpolationenum==P1Enum){ … … 231 230 element->GetVerticesSidList(&vertexsids[0]); 232 231 values=tria_input->element_values; 233 transientinput2->AddTriaTimeInput( j,numvertices,vertexlids,values,P1Enum); 232 transientinput2->AddTriaTimeInput( j,numvertices,vertexlids,values,P1Enum); 234 233 } 235 234 } … … 248 247 249 248 /*Go through elements, copy input name to dummy, and scale it using the distributed_values and the partition vector:*/ 250 for( int i=0;i<femmodel->elements->Size();i++){251 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));249 for(Object* & object : femmodel->elements->objects){ 250 Element* element=xDynamicCast<Element*>(object); 252 251 element->InputScaleFromDakota(distributed_values,partition,npart,nt,name); 253 252 } 254 253 255 /*We created a dummy input, which was a scaled copy of the name input. Now wipe 254 /*We created a dummy input, which was a scaled copy of the name input. Now wipe 256 255 * out the name input with the new input:*/ 257 256 femmodel->inputs->ChangeEnum(DummyEnum,name); -
TabularUnified issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp ¶
r24175 r25539 10 10 void InputUpdateFromMatrixDakotax(FemModel* femmodel,double* matrix,int nrows,int ncols, int name, int type){ 11 11 12 int i;13 12 int numberofvertices,numberofelements; 14 13 … … 20 19 21 20 /*Update elements, nodes, loads and materials from inputs: */ 22 for( i=0;i<femmodel->elements->Size();i++){23 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));21 for(Object* & object : femmodel->elements->objects){ 22 Element* element=xDynamicCast<Element*>(object); 24 23 element->InputUpdateFromMatrixDakota(matrix,nrows,ncols,name,type); 25 24 } -
TabularUnified issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp ¶
r25024 r25539 22 22 23 23 /*Now update inputs (analysis specific)*/ 24 for( int i=0;i<femmodel->elements->Size();i++){25 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));24 for(Object* & object : femmodel->elements->objects){ 25 Element* element = xDynamicCast<Element*>(object); 26 26 analysis->InputUpdateFromSolution(local_ug,element); 27 27 } -
TabularUnified issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.h ¶
r23629 r25539 1 1 /*!\file: InputUpdateFromSolutionx.h 2 2 * \brief header file for updating datasets from inputs 3 */ 3 */ 4 4 5 5 #ifndef _UPDATEINPUTSFROMSOLUTIONXX_H -
TabularUnified issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp ¶
r23524 r25539 19 19 20 20 /*Update elements, nodes, loads and materials from inputs: */ 21 for( int i=0;i<femmodel->elements->Size();i++){22 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));21 for(Object* & object : femmodel->elements->objects){ 22 Element* element=xDynamicCast<Element*>(object); 23 23 element->InputUpdateFromVectorDakota(vector,name,type); 24 24 } -
TabularUnified issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp ¶
r23638 r25539 25 25 26 26 /*Update elements, nodes, loads and materials from inputs: */ 27 for( int i=0;i<femmodel->elements->Size();i++){28 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));27 for(Object* & object : femmodel->elements->objects){ 28 Element* element=xDynamicCast<Element*>(object); 29 29 element->InputUpdateFromVector(vector,name,type); 30 30 } -
TabularUnified issm/trunk-jpl/src/c/modules/KillIcebergsx/KillIcebergsx.cpp ¶
r25379 r25539 96 96 97 97 /*OK, now deactivate iceberg and count the number of deactivated vertices*/ 98 for( int i=0;i<femmodel->elements->Size();i++){99 Element* element =xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));98 for(Object* & object : femmodel->elements->objects){ 99 Element* element = xDynamicCast<Element*>(object); 100 100 101 101 if(element->IsIceInElement()){ -
TabularUnified issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp ¶
r25379 r25539 83 83 if(domaintype!=Domain2DverticalEnum) iomodel->FetchDataToInput(inputs,elements,"md.inversion.vy_obs",InversionVyObsEnum); 84 84 } 85 for( int j=0;j<elements->Size();j++){86 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(j));85 for(Object* & object : elements->objects){ 86 Element* element=xDynamicCast<Element*>(object); 87 87 element->DatasetInputAdd(InversionCostFunctionsCoefficientsEnum,&weights[i*iomodel->numberofvertices],inputs,iomodel,M,1,1,cost_function,7,cost_function); 88 88 } … … 160 160 } 161 161 162 for( int j=0;j<elements->Size();j++){163 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(j));162 for(Object* & object : elements->objects){ 163 Element* element=xDynamicCast<Element*>(object); 164 164 element->ControlInputCreate(independent,&independents_min[offset],&independents_max[offset],inputs,iomodel,M,N,scale,control,i+1); 165 165 } … … 290 290 291 291 292 for( int j=0;j<elements->Size();j++){293 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(j));292 for(Object* & object : elements->objects){ 293 Element* element=xDynamicCast<Element*>(object); 294 294 element->ControlInputCreate(independent,independents_min,independents_max,inputs,iomodel,M,N,1.,input_enum,i+1); 295 295 } -
TabularUnified issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp ¶
r25379 r25539 216 216 if (!isice){ 217 217 /*go through elements, and zero the hmaterials pointers: */ 218 for( int j=0;j<elements->Size();j++){219 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(j));218 for(Object* & object : elements->objects){ 219 Element* element=xDynamicCast<Element*>(object); 220 220 switch(element->ObjectEnum()){ 221 221 case TriaEnum: -
TabularUnified issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp ¶
r25379 r25539 118 118 119 119 /*Now, for this particular misfit object, make sure we plug into the elements: the observation, and the weights.*/ 120 for( int k=0;k<elements->Size();k++){121 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(k));120 for(Object* & object : elements->objects){ 121 Element* element=xDynamicCast<Element*>(object); 122 122 element->InputCreate(misfit_observation_s[j],inputs,iomodel,misfit_observation_M_s[j],misfit_observation_N_s[j],obs_vector_type,StringToEnumx(misfit_observation_string_s[j]),7); 123 123 element->InputCreate(misfit_weights_s[j],inputs,iomodel,misfit_weights_M_s[j],misfit_weights_N_s[j],weight_vector_type,StringToEnumx(misfit_weights_string_s[j]),7); … … 208 208 209 209 /*Now, for this particular cfsurfacesquare object, make sure we plug into the elements: the observation, and the weights.*/ 210 for( int k=0;k<elements->Size();k++){211 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(k));210 for(Object* & object : elements->objects){ 211 Element* element=xDynamicCast<Element*>(object); 212 212 element->DatasetInputAdd(StringToEnumx(cfsurfacesquare_definitionstring_s[j]),cfsurfacesquare_observation_s[j],inputs,iomodel,cfsurfacesquare_observation_M_s[j],cfsurfacesquare_observation_N_s[j],obs_vector_type,StringToEnumx(cfsurfacesquare_observation_string_s[j]),7,SurfaceObservationEnum); 213 213 element->DatasetInputAdd(StringToEnumx(cfsurfacesquare_definitionstring_s[j]),cfsurfacesquare_weights_s[j],inputs,iomodel,cfsurfacesquare_weights_M_s[j],cfsurfacesquare_weights_N_s[j],weight_vector_type,StringToEnumx(cfsurfacesquare_weights_string_s[j]),7,WeightsSurfaceObservationEnum); … … 278 278 279 279 /*Now, for this particular cfdragcoeffabsgrad object, make sure we plug into the elements: the observation, and the weights.*/ 280 for( int k=0;k<elements->Size();k++){281 282 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(k));280 for(Object* & object : elements->objects){ 281 282 Element* element=xDynamicCast<Element*>(object); 283 283 284 284 element->DatasetInputAdd(StringToEnumx(cfdragcoeffabsgrad_definitionstring_s[j]),cfdragcoeffabsgrad_weights_s[j],inputs,iomodel,cfdragcoeffabsgrad_weights_M_s[j],cfdragcoeffabsgrad_weights_N_s[j],weight_vector_type,StringToEnumx(cfdragcoeffabsgrad_weights_string_s[j]),7,WeightsSurfaceObservationEnum); … … 361 361 362 362 /*Now, for this particular cfsurfacelogvel object, make sure we plug into the elements: the observation, and the weights.*/ 363 for( int k=0;k<elements->Size();k++){364 365 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(k));363 for(Object* & object : elements->objects){ 364 365 Element* element=xDynamicCast<Element*>(object); 366 366 367 367 element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_vxobs[j],inputs,iomodel,cfsurfacelogvel_observation_M[j],cfsurfacelogvel_observation_N[j],obs_vector_type,StringToEnumx(cfsurfacelogvel_vxobs_string[j]),7,VxObsEnum); … … 606 606 607 607 /*Now, for this particular misfit object, make sure we plug into the elements: the observation, and the weights.*/ 608 for( int k=0;k<elements->Size();k++){609 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(k));608 for(Object* & object : elements->objects){ 609 Element* element=xDynamicCast<Element*>(object); 610 610 element->DatasetInputCreate(cost_functions_weights[j],cost_functions_weights_M[j],cost_functions_weights_N[j],cost_function_enums,num_cost_functions,inputs,iomodel,InversionCostFunctionsCoefficientsEnum); 611 611 } -
TabularUnified issm/trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp ¶
r23066 r25539 22 22 found=0; 23 23 24 for( int i=0;i<elements->Size();i++){25 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));24 for(Object* & object : elements->objects){ 25 Element* element=xDynamicCast<Element*>(object); 26 26 found=element->NodalValue(&value,index,natureofdataenum); 27 27 if(found){ -
TabularUnified issm/trunk-jpl/src/c/modules/ResetFSBasalBoundaryConditionx/ResetFSBasalBoundaryConditionx.cpp ¶
r18521 r25539 11 11 Element *element = NULL; 12 12 13 for (int i=0;i<elements->Size();i++){14 element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));13 for(Object* & object : elements->objects){ 14 element = xDynamicCast<Element*>(object); 15 15 element->ResetFSBasalBoundaryCondition(); 16 16 } -
TabularUnified issm/trunk-jpl/src/c/modules/RheologyBAbsGradientx/RheologyBAbsGradientx.cpp ¶
r25446 r25539 16 16 17 17 /*Compute Misfit: */ 18 for( int i=0;i<elements->Size();i++){19 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));18 for(Object* & object : elements->objects){ 19 Element* element=xDynamicCast<Element*>(object); 20 20 J+=RheologyBAbsGradient(element); 21 21 } … … 85 85 86 86 /*Compute Misfit: */ 87 for( int i=0;i<elements->Size();i++){88 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));87 for(Object* & object : elements->objects){ 88 Element* element=xDynamicCast<Element*>(object); 89 89 J+=RheologyBInitialguessMisfit(element); 90 90 } -
TabularUnified issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp ¶
r25446 r25539 16 16 17 17 /*Compute Misfit: */ 18 for( int i=0;i<elements->Size();i++){19 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));18 for(Object* & object : elements->objects){ 19 Element* element=xDynamicCast<Element*>(object); 20 20 J+=RheologyBbarAbsGradient(element); 21 21 } -
TabularUnified issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.cpp ¶
r25514 r25539 17 17 femmodel->parameters->FindParam(&domaintype,DomainTypeEnum); 18 18 19 for( int i=0;i<femmodel->elements->Size();i++){20 Element *element = xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));19 for(Object* & object : femmodel->elements->objects){ 20 Element *element = xDynamicCast<Element*>(object); 21 21 int numnodes = element->GetNumberOfNodes(); 22 22 IssmDouble *mask = xNew<IssmDouble>(numnodes); … … 66 66 67 67 /*Fill vector with values: */ 68 for( int i=0;i<femmodel->elements->Size();i++){69 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));68 for(Object* & object : femmodel->elements->objects){ 69 Element* element=xDynamicCast<Element*>(object); 70 70 if(element->IsIceInElement()){ 71 71 int nbv = element->GetNumberOfVertices(); … … 92 92 93 93 /*Fill vector with values: */ 94 for( int i=0;i<femmodel->elements->Size();i++){95 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));94 for(Object* & object : femmodel->elements->objects){ 95 Element* element=xDynamicCast<Element*>(object); 96 96 97 97 if(element->IsIceInElement()){ … … 116 116 117 117 /*Now update inputs (analysis specific)*/ 118 for( int i=0;i<femmodel->elements->Size();i++){119 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));118 for(Object* & object : femmodel->elements->objects){ 119 Element* element=xDynamicCast<Element*>(object); 120 120 element->InputUpdateFromSolutionOneDof(local_ug,IceMaskNodeActivationEnum); 121 121 } -
TabularUnified issm/trunk-jpl/src/c/modules/SetControlInputsFromVectorx/SetControlInputsFromVectorx.cpp ¶
r25317 r25539 22 22 int offset = 0; 23 23 for(int i=0;i<num_controls;i++){ 24 for( int j=0;j<femmodel->elements->Size();j++){25 Element* element= (Element*)femmodel->elements->GetObjectByOffset(j);24 for(Object* & object : femmodel->elements->objects){ 25 Element* element=xDynamicCast<Element*>(object); 26 26 element->SetControlInputsFromVector(vector,control_type[i],i,offset,M[i],N[i]); 27 27 } -
TabularUnified issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp ¶
r25446 r25539 16 16 17 17 /*Compute Misfit: */ 18 for( int i=0;i<elements->Size();i++){19 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));18 for(Object* & object : elements->objects){ 19 Element* element=xDynamicCast<Element*>(object); 20 20 J+=SurfaceAbsVelMisfit(element); 21 21 } -
TabularUnified issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp ¶
r18521 r25539 19 19 20 20 /*Compute gradients: */ 21 for( int i=0;i<femmodel->elements->Size();i++){22 element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));21 for(Object* & object : femmodel->elements->objects){ 22 element=xDynamicCast<Element*>(object); 23 23 S+=element->SurfaceArea(); 24 24 } -
TabularUnified issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp ¶
r25446 r25539 17 17 18 18 /*Compute Misfit: */ 19 for( int i=0;i<femmodel->elements->Size();i++){20 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));19 for(Object* & object : femmodel->elements->objects){ 20 Element* element=xDynamicCast<Element*>(object); 21 21 J+=SurfaceAverageVelMisfit(element); 22 22 } -
TabularUnified issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp ¶
r25446 r25539 15 15 16 16 /*Compute Misfit: */ 17 for( int i=0;i<elements->Size();i++){18 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));17 for(Object* & object : elements->objects){ 18 Element* element=xDynamicCast<Element*>(object); 19 19 J+=SurfaceLogVelMisfit(element); 20 20 } -
TabularUnified issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp ¶
r25446 r25539 16 16 17 17 /*Compute Misfit: */ 18 for( int i=0;i<elements->Size();i++){19 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));18 for(Object* & object : elements->objects){ 19 Element* element = xDynamicCast<Element*>(object); 20 20 J+=SurfaceLogVxVyMisfit(element); 21 21 } … … 91 91 * 92 92 * 1 [ |u| + eps 2 |v| + eps 2 ] 93 * J = --- \bar{v}^2 | log ( ----------- ) + log ( ----------- ) | 93 * J = --- \bar{v}^2 | log ( ----------- ) + log ( ----------- ) | 94 94 * 2 [ |u |+ eps |v |+ eps ] 95 95 * obs obs -
TabularUnified issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp ¶
r25437 r25539 59 59 for (t=time;t<=time+dt-smb_dt;t=t+smb_dt){ 60 60 61 for( int i=0;i<femmodel->elements->Size();i++){62 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));61 for(Object* & object : femmodel->elements->objects){ 62 Element* element=xDynamicCast<Element*>(object); 63 63 64 64 timeclim=time; -
TabularUnified issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp ¶
r25379 r25539 21 21 /*Get time parameters*/ 22 22 IssmDouble time,dt,starttime,finaltime; 23 femmodel->parameters->FindParam(&time,TimeEnum); 23 femmodel->parameters->FindParam(&time,TimeEnum); 24 24 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 25 25 femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum); 26 26 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); 27 27 28 28 if(time<=starttime+dt){ 29 29 /*FIXME: this is wrong, should be done at the ElementUpdate step of analysis, not here!*/ … … 54 54 55 55 /*Loop over all the elements of this partition*/ 56 for( int i=0;i<femmodel->elements->Size();i++){57 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));56 for(Object* & object : femmodel->elements->objects){ 57 Element* element=xDynamicCast<Element*>(object); 58 58 59 59 int numvertices = element->GetNumberOfVertices(); … … 80 80 81 81 /*Loop over all the elements of this partition*/ 82 for( int i=0;i<femmodel->elements->Size();i++){83 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));82 for(Object* & object : femmodel->elements->objects){ 83 Element* element=xDynamicCast<Element*>(object); 84 84 85 85 /*Allocate all arrays*/ … … 140 140 141 141 /*Loop over all the elements of this partition*/ 142 for( int i=0;i<femmodel->elements->Size();i++){143 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));142 for(Object* & object : femmodel->elements->objects){ 143 Element* element=xDynamicCast<Element*>(object); 144 144 145 145 /*Allocate all arrays*/ … … 199 199 void Delta18oParameterizationx(FemModel* femmodel){/*{{{*/ 200 200 201 for( int i=0;i<femmodel->elements->Size();i++){202 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));201 for(Object* & object : femmodel->elements->objects){ 202 Element* element=xDynamicCast<Element*>(object); 203 203 element->Delta18oParameterization(); 204 204 } … … 207 207 void MungsmtpParameterizationx(FemModel* femmodel){/*{{{*/ 208 208 209 for( int i=0;i<femmodel->elements->Size();i++){210 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));209 for(Object* & object : femmodel->elements->objects){ 210 Element* element=xDynamicCast<Element*>(object); 211 211 element->MungsmtpParameterization(); 212 212 } … … 215 215 void Delta18opdParameterizationx(FemModel* femmodel){/*{{{*/ 216 216 217 for( int i=0;i<femmodel->elements->Size();i++){218 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));217 for(Object* & object : femmodel->elements->objects){ 218 Element* element=xDynamicCast<Element*>(object); 219 219 element->Delta18opdParameterization(); 220 220 } … … 233 233 // mean annual surface temperature (degrees C): Tsurf(NA) 234 234 235 int i , it, jj, itm;235 int it, jj, itm; 236 236 IssmDouble DT = 0.02, sigfac, snormfac; 237 237 IssmDouble signorm = 5.5; // signorm : sigma of the temperature distribution for a normal day … … 315 315 // *******END initialize PDD 316 316 317 for( i=0;i<femmodel->elements->Size();i++){318 element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));317 for(Object* & object : femmodel->elements->objects){ 318 element=xDynamicCast<Element*>(object); 319 319 element->PositiveDegreeDay(pdds,pds,signorm,ismungsm,issetpddfac); 320 320 } … … 328 328 femmodel->parameters->FindParam(&isfirnwarming,SmbIsfirnwarmingEnum); 329 329 330 for( int i=0;i<femmodel->elements->Size();i++){331 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));330 for(Object* & object : femmodel->elements->objects){ 331 Element* element=xDynamicCast<Element*>(object); 332 332 element->PositiveDegreeDaySicopolis(isfirnwarming); 333 333 } … … 355 355 356 356 /*Loop over all the elements of this partition*/ 357 for( int i=0;i<femmodel->elements->Size();i++){358 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));357 for(Object* & object : femmodel->elements->objects){ 358 Element* element=xDynamicCast<Element*>(object); 359 359 360 360 /*Get reference SMB (uncorrected) and allocate all arrays*/ … … 414 414 415 415 /*Loop over all the elements of this partition*/ 416 for( int i=0;i<femmodel->elements->Size();i++){417 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));416 for(Object* & object : femmodel->elements->objects){ 417 Element* element=xDynamicCast<Element*>(object); 418 418 419 419 /*Allocate all arrays*/ … … 432 432 433 433 /*Get time parameters*/ 434 femmodel->parameters->FindParam(&time,TimeEnum); 434 femmodel->parameters->FindParam(&time,TimeEnum); 435 435 femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum); 436 436 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); … … 514 514 515 515 /*Loop over all the elements of this partition*/ 516 for( int i=0;i<femmodel->elements->Size();i++){517 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));516 for(Object* & object : femmodel->elements->objects){ 517 Element* element=xDynamicCast<Element*>(object); 518 518 519 519 /*Allocate all arrays*/ … … 620 620 void SmbGradientsComponentsx(FemModel* femmodel){/*{{{*/ 621 621 622 for( int i=0;i<femmodel->elements->Size();i++){623 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));622 for(Object* & object : femmodel->elements->objects){ 623 Element* element=xDynamicCast<Element*>(object); 624 624 element->SmbGradCompParameterization(); 625 625 } … … 629 629 void SmbSemicx(FemModel* femmodel){/*{{{*/ 630 630 631 for( int i=0;i<femmodel->elements->Size();i++){632 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));631 for(Object* & object : femmodel->elements->objects){ 632 Element* element=xDynamicCast<Element*>(object); 633 633 element->SmbSemic(); 634 634 } -
TabularUnified issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp ¶
r25446 r25539 16 16 17 17 /*Compute Misfit: */ 18 for( int i=0;i<elements->Size();i++){19 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));18 for(Object* & object : elements->objects){ 19 Element* element = xDynamicCast<Element*>(object); 20 20 J+=SurfaceRelVelMisfit(element); 21 21 } … … 89 89 90 90 /*Compute SurfaceRelVelMisfit: 91 * 91 * 92 92 * 1 [ \bar{v}^2 2 \bar{v}^2 2 ] 93 93 * J = --- | ------------- (u - u ) + ------------- (v - v ) | 94 94 * 2 [ (u + eps)^2 obs (v + eps)^2 obs ] 95 * obs obs 95 * obs obs 96 96 */ 97 97 -
TabularUnified issm/trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp ¶
r24679 r25539 41 41 42 42 /*Get complete stiffness matrix without penalties*/ 43 for (i=0;i<femmodel->elements->Size();i++){44 element =xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));43 for(Object* & object : femmodel->elements->objects){ 44 element = xDynamicCast<Element*>(object); 45 45 if(!element->AnyFSet() && analysisenum!=StressbalanceAnalysisEnum) continue; 46 46 ElementMatrix* Ke = analysis->CreateKMatrix(element); … … 52 52 } 53 53 54 for (i=0;i<femmodel->loads->Size();i++){55 load =xDynamicCast<Load*>(femmodel->loads->GetObjectByOffset(i));54 for(Object* & object : femmodel->loads->objects){ 55 load = xDynamicCast<Load*>(object); 56 56 load->CreateKMatrix(Kff_temp,NULL); 57 57 } … … 83 83 84 84 /*Fill stiffness matrix and load vector from elements*/ 85 for (i=0;i<femmodel->elements->Size();i++){86 element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));85 for(Object* & object : femmodel->elements->objects){ 86 element = xDynamicCast<Element*>(object); 87 87 if(!element->AnyFSet() && analysisenum!=StressbalanceAnalysisEnum) continue; 88 88 ElementMatrix* Ke = analysis->CreateKMatrix(element); … … 98 98 99 99 /*Fill stiffness matrix and load vector from loads*/ 100 for( i=0;i<femmodel->loads->Size();i++){101 load=xDynamicCast<Load*>(femmodel->loads->GetObjectByOffset(i));100 for(Object* & object : femmodel->loads->objects){ 101 load = xDynamicCast<Load*>(object); 102 102 load->CreateKMatrix(Kff,Kfs); 103 103 load->CreatePVector(pf); … … 106 106 /*Now deal with penalties (only in loads)*/ 107 107 if(ispenalty){ 108 for (i=0;i<femmodel->loads->Size();i++){109 load =xDynamicCast<Load*>(femmodel->loads->GetObjectByOffset(i));108 for(Object* & object : femmodel->loads->objects){ 109 load = xDynamicCast<Load*>(object); 110 110 load->PenaltyCreateKMatrix(Kff,Kfs,kmax); 111 111 load->PenaltyCreatePVector(pf,kmax); … … 115 115 /*Create dof vector for stiffness matrix preconditioning*/ 116 116 if(pdf){ 117 for(i=0;i<femmodel->elements->Size();i++){118 element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));119 120 121 117 for(Object* & object : femmodel->elements->objects){ 118 element = xDynamicCast<Element*>(object); 119 ElementVector* de=analysis->CreateDVector(element); 120 if(de) de->InsertIntoGlobal(df); 121 delete de; 122 122 } 123 123 } -
TabularUnified issm/trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp ¶
r25446 r25539 16 16 17 17 /*Compute Misfit: */ 18 for( int i=0;i<elements->Size();i++){19 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));18 for(Object* & object : elements->objects){ 19 Element* element=xDynamicCast<Element*>(object); 20 20 J+=ThicknessAbsMisfit(element); 21 21 } -
TabularUnified issm/trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp ¶
r25446 r25539 16 16 17 17 /*Compute Misfit: */ 18 for( int i=0;i<elements->Size();i++){19 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));18 for(Object* & object : elements->objects){ 19 Element* element = xDynamicCast<Element*>(object); 20 20 J+=ThicknessAcrossGradient(element); 21 21 } -
TabularUnified issm/trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp ¶
r25446 r25539 16 16 17 17 /*Compute Misfit: */ 18 for( int i=0;i<elements->Size();i++){19 Element* element=xDynamicCast<Element*>( elements->GetObjectByOffset(i));18 for(Object* & object : elements->objects){ 19 Element* element=xDynamicCast<Element*>(object); 20 20 J+=ThicknessAlongGradient(element); 21 21 } -
TabularUnified issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp ¶
r23661 r25539 58 58 59 59 /*{{{*//*Retrieve inputs as the initial state for the non linear iteration*/ 60 Get SolutionFromInputsx(&ug_sed,femmodel);60 GetBasalSolutionFromInputsx(&ug_sed,femmodel); 61 61 Reducevectorgtofx(&uf_sed, ug_sed, femmodel->nodes,femmodel->parameters); 62 62 if(isefficientlayer) { … … 64 64 effanalysis = new HydrologyDCEfficientAnalysis(); 65 65 femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum); 66 Get SolutionFromInputsx(&ug_epl,femmodel);66 GetBasalSolutionFromInputsx(&ug_epl,femmodel); 67 67 /*Initialize the EPL element mask*/ 68 68 inefanalysis->ElementizeEplMask(femmodel); … … 96 96 97 97 /*{{{*//*Treating the sediment*/ 98 femmodel->profiler->Start(SEDLOOP); 98 99 for(;;){ 99 100 sedconverged=false; … … 104 105 /*{{{*//*Core of the computation*/ 105 106 if(VerboseSolution()) _printf0_("Building Sediment Matrix...\n"); 107 femmodel->profiler->Start(SEDMatrix); 106 108 SystemMatricesx(&Kff,&Kfs,&pf,&df,&sediment_kmax,femmodel); 107 109 CreateNodalConstraintsx(&ys,femmodel->nodes); 108 110 Reduceloadx(pf,Kfs,ys); delete Kfs; 109 111 delete uf_sed; 112 femmodel->profiler->Stop(SEDMatrix); 110 113 111 114 femmodel->profiler->Start(SOLVER); … … 115 118 delete Kff; delete pf; delete df; 116 119 delete ug_sed; 120 femmodel->profiler->Start(SEDUpdate); 117 121 Mergesolutionfromftogx(&ug_sed,uf_sed,ys,femmodel->nodes,femmodel->parameters); delete ys; 118 122 InputUpdateFromSolutionx(femmodel,ug_sed); 119 123 ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel); 124 femmodel->profiler->Stop(SEDUpdate); 120 125 /*}}}*/ 121 126 if (!sedconverged){ … … 157 162 } 158 163 } 164 femmodel->profiler->Stop(SEDLOOP); 159 165 /*}}}*//*End of the global sediment loop*/ 160 166 /*{{{*//*Now dealing with the EPL in the same way*/ 167 femmodel->profiler->Start(EPLLOOP); 161 168 if(isefficientlayer){ 162 169 femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum); … … 173 180 /*{{{*//*Retrieve the EPL head slopes and compute EPL Thickness*/ 174 181 if(VerboseSolution()) _printf0_("computing EPL Head slope...\n"); 182 femmodel->profiler->Start(EPLMasking); 175 183 femmodel->SetCurrentConfiguration(L2ProjectionEPLAnalysisEnum); 176 184 femmodel->UpdateConstraintsL2ProjectionEPLx(&L2Count); … … 185 193 femmodel->HydrologyEPLupdateDomainx(&ThickCount); 186 194 /*}}}*/ 187 195 femmodel->profiler->Stop(EPLMasking); 188 196 if(VerboseSolution()) _printf0_("Building EPL Matrix...\n"); 197 femmodel->profiler->Start(EPLMatrices); 189 198 SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel); 190 199 CreateNodalConstraintsx(&ys,femmodel->nodes); 191 200 Reduceloadx(pf,Kfs,ys); delete Kfs; 192 201 delete uf_epl; 193 202 femmodel->profiler->Stop(EPLMatrices); 194 203 femmodel->profiler->Start(SOLVER); 195 204 Solverx(&uf_epl,Kff,pf,uf_epl_sub_iter,df,femmodel->parameters); … … 201 210 uf_epl->Copy(uf_epl_sub_iter); 202 211 delete ug_epl; 212 femmodel->profiler->Start(EPLUpdate); 203 213 Mergesolutionfromftogx(&ug_epl,uf_epl,ys,femmodel->nodes,femmodel->parameters); delete ys; 204 214 InputUpdateFromSolutionx(femmodel,ug_epl); 205 215 ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel); 216 femmodel->profiler->Stop(EPLUpdate); 206 217 207 218 dug=ug_epl_sub_iter->Duplicate();_assert_(dug); … … 230 241 } 231 242 } 243 femmodel->profiler->Stop(EPLLOOP); 232 244 /*}}}*//*End of the global EPL loop*/ 233 245 /*{{{*//*Now dealing with the convergence of the whole system*/ -
TabularUnified issm/trunk-jpl/src/c/solutionsequences/solutionsequence_schurcg.cpp ¶
r24527 r25539 753 753 if(precond) 754 754 { 755 for( int i=0;i<femmodel->elements->Size();i++){756 Element* element=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));755 for(Object* & object : femmodel->elements->objects){ 756 Element* element=xDynamicCast<Element*>(object); 757 757 ElementMatrix* Ie = analysis->CreateSchurPrecondMatrix(element); 758 758 if(Ie) Ie->AddToGlobal(Kff,NULL); … … 761 761 }else{ 762 762 763 for( int i=0;i<femmodel->elements->Size();i++){764 Element* element2=xDynamicCast<Element*>( femmodel->elements->GetObjectByOffset(i));763 for(Object* & object : femmodel->elements->objects){ 764 Element* element2=xDynamicCast<Element*>(object); 765 765 ElementMatrix* Ie2 = analysis->CreatePressureMassMatrix(element2); 766 766 if(Ie2) Ie2->AddToGlobal(Kff,NULL);
Note:
See TracChangeset
for help on using the changeset viewer.