Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp =================================================================== --- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp (revision 15449) +++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp (revision 15450) @@ -10,11 +10,8 @@ void UpdateElementsDiagnosticHutter(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){ - int numberofelements; + /*Fetch data needed: */ bool ishutter; - - /*Fetch data needed: */ - iomodel->Constant(&numberofelements,MeshNumberofelementsEnum); iomodel->Constant(&ishutter,FlowequationIshutterEnum); /*Now, is the flag hutter on? otherwise, do nothing: */ @@ -24,7 +21,7 @@ /*Update elements: */ int counter=0; - for(int i=0;inumberofelements;i++){ if(iomodel->my_elements[i]){ Element* element=(Element*)elements->GetObjectByOffset(counter); element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements. Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp =================================================================== --- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp (revision 15449) +++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp (revision 15450) @@ -10,11 +10,6 @@ void UpdateElementsEnthalpy(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){ - int numberofelements; - - /*Fetch parameters: */ - iomodel->Constant(&numberofelements,MeshNumberofelementsEnum); - /*Now, is the model 3d? otherwise, do nothing: */ if(iomodel->dim==2)return; @@ -23,7 +18,7 @@ /*Update elements: */ int counter=0; - for(int i=0;inumberofelements;i++){ if(iomodel->my_elements[i]){ Element* element=(Element*)elements->GetObjectByOffset(counter); element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements. Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp =================================================================== --- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp (revision 15449) +++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp (revision 15450) @@ -10,7 +10,6 @@ void UpdateElementsPrognostic(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){ - int numberofelements; int stabilization; bool dakota_analysis; bool issmbgradients; @@ -18,7 +17,6 @@ bool isdelta18o; /*Fetch data needed: */ - iomodel->Constant(&numberofelements,MeshNumberofelementsEnum); iomodel->Constant(&stabilization,PrognosticStabilizationEnum); iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum); iomodel->Constant(&ispdd,SurfaceforcingsIspddEnum); @@ -27,7 +25,7 @@ /*Update elements: */ int counter=0; - for(int i=0;inumberofelements;i++){ if(iomodel->my_elements[i]){ Element* element=(Element*)elements->GetObjectByOffset(counter); element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements. Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp =================================================================== --- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp (revision 15449) +++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp (revision 15450) @@ -15,12 +15,10 @@ int counter; Element *element = NULL; Material *material = NULL; - int numberofelements; int num_control_type; bool control_analysis; /*Fetch parameters: */ - iomodel->Constant(&numberofelements,MeshNumberofelementsEnum); iomodel->Constant(&control_analysis,InversionIscontrolEnum); if(control_analysis) iomodel->Constant(&num_control_type,InversionNumControlParametersEnum); @@ -48,7 +46,7 @@ /*Update elements and materials: */ counter=0; - for (i=0;inumberofelements;i++){ if(iomodel->my_elements[i]){ element=(Element*)elements->GetObjectByOffset(counter); element->InputUpdateFromIoModel(i,iomodel); //we need i to index into elements. Index: ../trunk-jpl/src/c/classes/Loads/Icefront.cpp =================================================================== --- ../trunk-jpl/src/c/classes/Loads/Icefront.cpp (revision 15449) +++ ../trunk-jpl/src/c/classes/Loads/Icefront.cpp (revision 15450) @@ -42,18 +42,14 @@ int element; int numnodes; int numvertices; - int numberofelements; /*icefront constructor data: */ int icefront_eid; int icefront_mparid; - int icefront_node_ids[NUMVERTICESQUA]; //initialize with largest size - int icefront_vertex_ids[NUMVERTICESQUA]; //initialize with largest size int icefront_fill; + int *icefront_node_ids = NULL; + int *icefront_vertex_ids = NULL; - /*find parameters: */ - iomodel->Constant(&numberofelements,MeshNumberofelementsEnum); - /*First, retrieve element index and element type: */ if(iomodel->dim==2){ segment_width=4; @@ -62,19 +58,27 @@ segment_width=6; } _assert_(iomodel->Data(DiagnosticIcefrontEnum)); - element=reCast(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+segment_width-2)-1); //element is in the penultimate column (node1 node2 ... elem fill) + element=reCast(iomodel->Data(DiagnosticIcefrontEnum)[segment_width*i+segment_width-2]-1); /*Build ids for hook constructors: */ - icefront_eid=reCast( *(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+segment_width-2)); //matlab indexing - icefront_mparid=numberofelements+1; //matlab indexing + icefront_eid = reCast(iomodel->Data(DiagnosticIcefrontEnum)[segment_width*i+segment_width-2]); //matlab indexing + icefront_mparid = iomodel->numberofelements+1; if (in_icefront_type==MacAyeal2dIceFrontEnum || in_icefront_type==MacAyeal3dIceFrontEnum){ + numnodes = 2; + numvertices = 2; + icefront_node_ids = xNew(numnodes); + icefront_vertex_ids = xNew(numvertices); icefront_node_ids[0]=iomodel->nodecounter+reCast(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0)); icefront_node_ids[1]=iomodel->nodecounter+reCast(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1)); icefront_vertex_ids[0]=reCast(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0)); icefront_vertex_ids[1]=reCast(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1)); } else if (in_icefront_type==PattynIceFrontEnum || in_icefront_type==StokesIceFrontEnum){ + numnodes = 4; + numvertices = 4; + icefront_node_ids = xNew(numnodes); + icefront_vertex_ids = xNew(numvertices); icefront_node_ids[0]=iomodel->nodecounter+reCast(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0)); icefront_node_ids[1]=iomodel->nodecounter+reCast(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1)); icefront_node_ids[2]=iomodel->nodecounter+reCast(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+2)); @@ -86,15 +90,6 @@ } else _error_("in_icefront_type " << EnumToStringx(in_icefront_type) << " not supported yet!"); - if (in_icefront_type==PattynIceFrontEnum || in_icefront_type==StokesIceFrontEnum){ - numnodes=4; - numvertices=4; - } - else{ - numnodes=2; - numvertices=2; - } - /*Fill*/ icefront_fill=reCast(iomodel->Data(DiagnosticIcefrontEnum)[segment_width*i+segment_width-1]); @@ -119,8 +114,11 @@ this->vertices = NULL; this->element = NULL; this->matpar = NULL; + + /*Clean up*/ + xDelete(icefront_node_ids); + xDelete(icefront_vertex_ids); } - /*}}}*/ /*FUNCTION Icefront::Icefront(const char* element_type_in,Inputs* inputs_in,Matpar* matpar_in, int icefront_type, int in_analysis_type) {{{*/ Icefront::Icefront(const char* element_type_in,Inputs* inputs_in,Matpar* matpar_in,int in_icefront_type, int in_analysis_type){ Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp =================================================================== --- ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp (revision 15449) +++ ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp (revision 15450) @@ -43,7 +43,6 @@ IssmDouble riftfront_friction; IssmDouble riftfront_fractionincrement; bool riftfront_shelf; - int numberofelements; int penalty_lock; /*intermediary: */ @@ -51,7 +50,6 @@ int node1 ,node2; /*Fetch parameters: */ - iomodel->Constant(&numberofelements,MeshNumberofelementsEnum); iomodel->Constant(&penalty_lock,DiagnosticRiftPenaltyLockEnum); /*Ok, retrieve all the data needed to add a penalty between the two nodes: */ @@ -70,7 +68,7 @@ riftfront_node_ids[1]=iomodel->nodecounter+node2; riftfront_elem_ids[0]=el1; riftfront_elem_ids[1]=el2; - riftfront_matpar_id=numberofelements+1; //matlab indexing + riftfront_matpar_id=iomodel->numberofelements+1; //matlab indexing /*Hooks: */ this->hnodes=new Hook(riftfront_node_ids,2); Index: ../trunk-jpl/src/c/classes/Elements/ElementHook.cpp =================================================================== --- ../trunk-jpl/src/c/classes/Elements/ElementHook.cpp (revision 15449) +++ ../trunk-jpl/src/c/classes/Elements/ElementHook.cpp (revision 15450) @@ -48,7 +48,7 @@ int material_id; /*retrieve material_id: */ - iomodel->Constant(&matpar_id,MeshNumberofelementsEnum); matpar_id++; + matpar_id = iomodel->numberofelements+1; /*retrieve material_id*/ material_id = element_id;