Changeset 18450
- Timestamp:
- 08/20/14 15:01:47 (11 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 25 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp
r18403 r18450 202 202 /*Intermediaries */ 203 203 int Hinterpolation; 204 IssmDouble vx,vy,vbar,nu,normdphi,dphi[2] ;204 IssmDouble vx,vy,vbar,nu,normdphi,dphi[2],H; 205 205 IssmDouble* xyz_list = NULL; 206 206 int * doflist = NULL; … … 233 233 Input* vy_input = element->GetInput(BalancethicknessVyObsEnum); _assert_(vy_input); 234 234 Input* nu_input = element->GetInput(BalancethicknessNuEnum); _assert_(nu_input); 235 Input* thickness_input = element->GetInput(BalancethicknessThicknessObsEnum); _assert_(thickness_input); 235 236 236 237 switch(element->GetElementType()){ … … 246 247 vy_input->GetInputValue(&vy,gauss); 247 248 nu_input->GetInputValue(&nu,gauss); 249 thickness_input->GetInputValue(&H,gauss); 248 250 potential_input->GetInputDerivativeValue(&dphi[0],xyz_list,gauss); 249 251 … … 253 255 254 256 thickness_list[iv] = normdphi/vbar; 255 vx_list[iv] = -1./ thickness_list[iv]* dphi[0];256 vy_list[iv] = -1./ thickness_list[iv]* dphi[1];257 vx_list[iv] = -1./H * dphi[0]; 258 vy_list[iv] = -1./H * dphi[1]; 257 259 } 258 260 element->AddInput(ThicknessEnum,thickness_list,Hinterpolation); -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r18385 r18450 220 220 221 221 virtual void Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0; 222 virtual void InputExtrude(int input_enum )=0;222 virtual void InputExtrude(int input_enum,int start)=0; 223 223 virtual void InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solution,int inputenum)=0; 224 224 virtual void InputUpdateFromSolutionOneDof(IssmDouble* solution,int inputenum)=0; -
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r18400 r18450 447 447 this->inputs->AddInput(NewPrecipitationInput); 448 448 449 this->InputExtrude(SurfaceforcingsMonthlytemperaturesEnum );450 this->InputExtrude(SurfaceforcingsPrecipitationEnum );449 this->InputExtrude(SurfaceforcingsMonthlytemperaturesEnum,-1); 450 this->InputExtrude(SurfaceforcingsPrecipitationEnum,-1); 451 451 452 452 /*clean-up*/ … … 1191 1191 } 1192 1192 /*}}}*/ 1193 void Penta::InputExtrude(int enum_type){/*{{{*/ 1194 1195 /*Are we on the base, not on the surface?:*/ 1196 if(!IsOnBase()) return; 1193 void Penta::InputExtrude(int enum_type,int start){/*{{{*/ 1194 1195 _assert_(start==-1 || start==+1); 1196 1197 /*Are we on the the boundary we want to be?*/ 1198 if(start==-1 && !IsOnBase()) return; 1199 if(start==+1 && !IsOnSurface()) return; 1197 1200 1198 1201 /*Step1: Get and Extrude original input: */ 1199 1202 Input* base_input=(Input*)this->inputs->GetInput(enum_type); 1200 1203 if(!base_input) _error_("could not find input with enum " << EnumToStringx(enum_type)); 1201 base_input->Extrude( );1204 base_input->Extrude(start); 1202 1205 1203 1206 /*Stop if there is only one layer of element*/ 1204 if(this->IsOnSurface()) return; 1207 if(start==-1 && this->IsOnSurface()) return; 1208 if(start==+1 && this->IsOnBase()) return; 1205 1209 1206 1210 /*Step 2: this input has been extruded for this element, now follow the upper element*/ 1207 1211 Penta* penta=this; 1208 1212 for(;;){ 1209 /* get upper Penta*/ 1210 penta=penta->GetUpperPenta(); 1213 /*get upper/lower Penta*/ 1214 if(start==-1) penta=penta->GetUpperPenta(); 1215 else penta=penta->GetLowerPenta(); 1211 1216 _assert_(penta->Id()!=this->id); 1212 1217 … … 1215 1220 penta->inputs->AddInput((Input*)copy); 1216 1221 1217 /*Stop if we have reached the surface*/ 1218 if(penta->IsOnSurface()) break; 1222 /*Stop if we have reached the surface/base*/ 1223 if(start==-1 && penta->IsOnSurface()) break; 1224 if(start==+1 && penta->IsOnBase()) break; 1219 1225 } 1220 1226 } … … 1785 1791 this->inputs->AddInput(new PentaInput(SurfaceforcingsMassBalanceEnum,&agd[0],P1Enum)); 1786 1792 //this->inputs->AddInput(new PentaVertexInput(ThermalSpcTemperatureEnum,&Tsurf[0])); 1787 this->InputExtrude(SurfaceforcingsMassBalanceEnum );1793 this->InputExtrude(SurfaceforcingsMassBalanceEnum,-1); 1788 1794 1789 1795 /*clean-up*/ … … 2860 2866 2861 2867 if(control_type[i]==MaterialsRheologyBbarEnum){ 2862 this->InputExtrude(MaterialsRheologyBEnum );2868 this->InputExtrude(MaterialsRheologyBEnum,-1); 2863 2869 } 2864 2870 else if(control_type[i]==DamageDbarEnum){ 2865 this->InputExtrude(DamageDEnum );2871 this->InputExtrude(DamageDEnum,-1); 2866 2872 } 2867 2873 } … … 2930 2936 2931 2937 if(control_init==MaterialsRheologyBbarEnum){ 2932 this->InputExtrude(control_enum );2938 this->InputExtrude(control_enum,-1); 2933 2939 } 2934 2940 if(control_init==DamageDbarEnum){ 2935 this->InputExtrude(control_enum );2941 this->InputExtrude(control_enum,-1); 2936 2942 } 2937 2943 } … … 3171 3177 } 3172 3178 this->inputs->AddInput(new PentaInput(MaskGroundediceLevelsetEnum,&phi[0],P1Enum)); 3173 this->InputExtrude(MaskGroundediceLevelsetEnum );3179 this->InputExtrude(MaskGroundediceLevelsetEnum,-1); 3174 3180 3175 3181 /*Update inputs*/ … … 3178 3184 3179 3185 /*Extrude inputs*/ 3180 this->InputExtrude(SurfaceEnum );3181 this->InputExtrude(BaseEnum );3186 this->InputExtrude(SurfaceEnum,-1); 3187 this->InputExtrude(BaseEnum,-1); 3182 3188 } 3183 3189 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r18293 r18450 144 144 void GetInputValue(IssmDouble* pvalue,Node* node,int enumtype); 145 145 Node* GetNode(int node_number); 146 void InputExtrude(int enum_type );146 void InputExtrude(int enum_type,int start); 147 147 void InputUpdateFromSolutionOneDof(IssmDouble* solutiong,int enum_type); 148 148 void InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solutiong,int enum_type); -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r18293 r18450 130 130 void GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type){_error_("not implemented yet");}; 131 131 void InputDepthAverageAtBase(int enum_type,int average_enum_type){_error_("not implemented yet");}; 132 void InputExtrude(int enum_type ){_error_("not implemented"); /*For penta only*/};132 void InputExtrude(int enum_type,int start){_error_("not implemented"); /*For penta only*/}; 133 133 void InputScale(int enum_type,IssmDouble scale_factor){_error_("not implemented yet");}; 134 134 void MaterialUpdateFromTemperature(void){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Elements/Tetra.h
r18293 r18450 134 134 void GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type){_error_("not implemented yet");}; 135 135 void InputDepthAverageAtBase(int enum_type,int average_enum_type){_error_("not implemented yet");}; 136 void InputExtrude(int enum_type ){_error_("not implemented"); /*For penta only*/};136 void InputExtrude(int enum_type,int start){_error_("not implemented"); /*For penta only*/}; 137 137 void InputScale(int enum_type,IssmDouble scale_factor){_error_("not implemented yet");}; 138 138 void MaterialUpdateFromTemperature(void){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r18293 r18450 86 86 void GetVerticesCoordinatesTop(IssmDouble** pxyz_list); 87 87 void InputDepthAverageAtBase(int enum_type,int average_enum_type); 88 void InputExtrude(int enum_type ){_error_("not implemented"); /*For penta only*/};88 void InputExtrude(int enum_type,int start){_error_("not implemented"); /*For penta only*/}; 89 89 void InputScale(int enum_type,IssmDouble scale_factor); 90 90 void MaterialUpdateFromTemperature(void){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp
r18064 r18450 133 133 } 134 134 /*}}}*/ 135 void BoolInput::Extrude( void){/*{{{*/135 void BoolInput::Extrude(int start){/*{{{*/ 136 136 137 137 /*do nothing*/ -
issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h
r17514 r18450 64 64 void AXPY(Input* xinput,IssmDouble scalar); 65 65 void Constrain(IssmDouble cm_min, IssmDouble cm_max){_error_("Constrain not implemented for booleans");}; 66 void Extrude( void);66 void Extrude(int start); 67 67 void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");}; 68 68 void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist); -
issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp
r18118 r18450 121 121 values->Constrain(min,max); 122 122 }/*}}}*/ 123 void ControlInput::Extrude( void){/*{{{*/124 values->Extrude( );125 savedvalues->Extrude( );123 void ControlInput::Extrude(int start){/*{{{*/ 124 values->Extrude(start); 125 savedvalues->Extrude(start); 126 126 //gradient->Extrude(); 127 127 }/*}}}*/ -
issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h
r18118 r18450 72 72 IssmDouble Min(void); 73 73 IssmDouble MinAbs(void){_error_("not implemented yet");}; 74 void Extrude( void);74 void Extrude(int start); 75 75 void VerticallyIntegrate(Input* thickness_input); 76 76 void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist,const char* data); -
issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h
r17514 r18450 68 68 IssmDouble Min(void){_error_("not implemented yet");}; 69 69 IssmDouble MinAbs(void){_error_("not implemented yet");}; 70 void Extrude( void){_error_("not implemented yet");};70 void Extrude(int start){_error_("not implemented yet");}; 71 71 void VerticallyIntegrate(Input* thickness_input){_error_("not implemented yet");}; 72 72 void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h
r17514 r18450 67 67 IssmDouble Min(void); 68 68 IssmDouble MinAbs(void); 69 void Extrude( void){_error_("not supported yet");};69 void Extrude(int start){_error_("not supported yet");}; 70 70 void VerticallyIntegrate(Input* thickness_input); 71 71 void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist); -
issm/trunk-jpl/src/c/classes/Inputs/Input.h
r17514 r18450 51 51 virtual void Constrain(IssmDouble cm_min, IssmDouble cm_max)=0; 52 52 virtual void VerticallyIntegrate(Input* thickness_input)=0; 53 virtual void Extrude( )=0;53 virtual void Extrude(int start)=0; 54 54 virtual void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist)=0; 55 55 -
issm/trunk-jpl/src/c/classes/Inputs/IntInput.h
r17514 r18450 68 68 IssmDouble Min(void){_error_("Min not implemented for integers");}; 69 69 IssmDouble MinAbs(void){_error_("Min not implemented for integers");}; 70 void Extrude( void){_error_("not supported yet");};70 void Extrude(int start){_error_("not supported yet");}; 71 71 void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");}; 72 72 void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist); -
issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
r18237 r18450 291 291 } 292 292 /*}}}*/ 293 void PentaInput::Extrude( void){/*{{{*/293 void PentaInput::Extrude(int start){/*{{{*/ 294 294 295 295 switch(this->interpolation_type){ 296 296 case P1Enum: 297 for(int i=0;i<3;i++) this->values[3+i]=this->values[i]; 297 if(start==-1){ 298 for(int i=0;i<3;i++) this->values[3+i]=this->values[i]; 299 } 300 else{ 301 for(int i=3;i<6;i++) this->values[i] =this->values[3+i]; 302 } 298 303 break; 299 304 default: -
issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h
r18078 r18450 68 68 IssmDouble Min(void); 69 69 IssmDouble MinAbs(void); 70 void Extrude( void);70 void Extrude(int start); 71 71 void VerticallyIntegrate(Input* thickness_input); 72 72 void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist); -
issm/trunk-jpl/src/c/classes/Inputs/SegInput.h
r18078 r18450 69 69 IssmDouble Min(void); 70 70 IssmDouble MinAbs(void){_error_("not implemented yet");}; 71 void Extrude( void){_error_("not supported yet");};71 void Extrude(int start){_error_("not supported yet");}; 72 72 void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");}; 73 73 void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Inputs/TetraInput.h
r18078 r18450 69 69 IssmDouble Min(void); 70 70 IssmDouble MinAbs(void); 71 void Extrude( void){_error_("not supported yet");};71 void Extrude(int start){_error_("not supported yet");}; 72 72 void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");}; 73 73 void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist); -
issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
r18237 r18450 345 345 } 346 346 /*}}}*/ 347 void TransientInput::Extrude( void){/*{{{*/347 void TransientInput::Extrude(int start){/*{{{*/ 348 348 349 349 for(int i=0;i<this->numtimesteps;i++){ 350 ((Input*)this->inputs->GetObjectByOffset(i))->Extrude( );350 ((Input*)this->inputs->GetObjectByOffset(i))->Extrude(start); 351 351 } 352 352 } -
issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h
r17514 r18450 73 73 IssmDouble Min(void); 74 74 IssmDouble MinAbs(void); 75 void Extrude( void);75 void Extrude(int start); 76 76 void VerticallyIntegrate(Input* thickness_forcing){_error_("not supported yet");}; 77 77 void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist); -
issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h
r18078 r18450 69 69 IssmDouble Min(void); 70 70 IssmDouble MinAbs(void); 71 void Extrude( void){_error_("not supported yet");};71 void Extrude(int start){_error_("not supported yet");}; 72 72 void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");}; 73 73 void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist); -
issm/trunk-jpl/src/c/cores/extrudefrombase_core.cpp
r17887 r18450 27 27 if(elementtype==PentaEnum){ 28 28 int inputenum; femmodel->parameters->FindParam(&inputenum,InputToExtrudeEnum); 29 InputExtrudex(femmodel,inputenum );29 InputExtrudex(femmodel,inputenum,-1); 30 30 } 31 31 else{ -
issm/trunk-jpl/src/c/modules/InputExtrudex/InputExtrudex.cpp
r17862 r18450 8 8 #include "../../toolkits/toolkits.h" 9 9 10 void InputExtrudex(FemModel* femmodel,int input_enum ){10 void InputExtrudex(FemModel* femmodel,int input_enum,int start){ 11 11 for(int i=0;i<femmodel->elements->Size();i++){ 12 12 Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i)); 13 element->InputExtrude(input_enum );13 element->InputExtrude(input_enum,start); 14 14 } 15 15 } -
issm/trunk-jpl/src/c/modules/InputExtrudex/InputExtrudex.h
r17862 r18450 9 9 10 10 /* local prototypes: */ 11 void InputExtrudex(FemModel* femmodel,int input_enum );11 void InputExtrudex(FemModel* femmodel,int input_enum,int start); 12 12 13 13 #endif /* _INPUTDUPLICATEX_H */
Note:
See TracChangeset
for help on using the changeset viewer.