Changeset 18786
- Timestamp:
- 11/14/14 16:42:09 (10 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 5 added
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/Makefile.am ¶
r18613 r18786 437 437 ./classes/Massfluxatgate.h \ 438 438 ./classes/Misfit.h \ 439 ./classes/Masscon.h \ 439 440 ./modules/ModelProcessorx/CreateOutputDefinitions.cpp\ 440 441 ./modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.h\ -
TabularUnified issm/trunk-jpl/src/c/classes/Elements/Element.h ¶
r18736 r18786 205 205 virtual bool IsOnSurface()=0; 206 206 virtual void GetGroundedPart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlyfloating)=0; 207 virtual void GetLevelsetPositivePart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlynegative,IssmDouble* levelsetvalues)=0; 207 208 virtual IssmDouble GetGroundedPortion(IssmDouble* xyz_list)=0; 208 209 virtual void GetInputValue(IssmDouble* pvalue,Node* node,int enumtype)=0; … … 273 274 virtual IssmDouble TotalSmb(void)=0; 274 275 virtual IssmDouble Misfit(int modelenum,int observationenum,int weightsenum)=0; 276 virtual IssmDouble Masscon(IssmDouble* levelset)=0; 275 277 virtual IssmDouble MisfitArea(int weightsenum)=0; 276 278 virtual int VertexConnectivity(int vertexindex)=0; -
TabularUnified issm/trunk-jpl/src/c/classes/Elements/Penta.h ¶
r18736 r18786 74 74 Element* GetUpperElement(void); 75 75 Element* GetBasalElement(void); 76 void GetLevelsetPositivePart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlynegative,IssmDouble* levelsetvalues){_error_("not implemented yet");}; 76 77 void GetGroundedPart(int* point1,IssmDouble* fraction1, IssmDouble* fraction2,bool* mainlyfloating); 77 78 IssmDouble GetGroundedPortion(IssmDouble* xyz_list); … … 132 133 IssmDouble Misfit(int modelenum,int observationenum,int weightsenum){_error_("not implemented yet");}; 133 134 IssmDouble MisfitArea(int weightsenum){_error_("not implemented yet");}; 135 IssmDouble Masscon(IssmDouble* levelset){_error_("not implemented yet");}; 134 136 135 137 void MigrateGroundingLine(IssmDouble* sheet_ungrounding); -
TabularUnified issm/trunk-jpl/src/c/classes/Elements/Seg.h ¶
r18736 r18786 109 109 int VelocityInterpolation(void){_error_("not implemented yet");}; 110 110 int TensorInterpolation(void){_error_("not implemented yet");}; 111 void GetLevelsetPositivePart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlynegative,IssmDouble* levelsetvalues){_error_("not implemented yet");}; 111 112 void GetGroundedPart(int* point1,IssmDouble* fraction1, IssmDouble* fraction2,bool* mainlyfloating){_error_("not implemented yet");}; 112 113 IssmDouble GetGroundedPortion(IssmDouble* xyz_list){_error_("not implemented yet");}; … … 157 158 IssmDouble Misfit(int modelenum,int observationenum,int weightsenum){_error_("not implemented yet");}; 158 159 IssmDouble MisfitArea(int weightsenum){_error_("not implemented yet");}; 160 IssmDouble Masscon(IssmDouble* levelset){_error_("not implemented yet");}; 159 161 160 162 #ifdef _HAVE_GIA_ -
TabularUnified issm/trunk-jpl/src/c/classes/Elements/Tetra.h ¶
r18736 r18786 114 114 int VelocityInterpolation(void); 115 115 int TensorInterpolation(void); 116 void GetLevelsetPositivePart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlynegative,IssmDouble* levelsetvalues){_error_("not implemented yet");}; 116 117 void GetGroundedPart(int* point1,IssmDouble* fraction1, IssmDouble* fraction2,bool* mainlyfloating){_error_("not implemented yet");}; 117 118 IssmDouble GetGroundedPortion(IssmDouble* xyz_list){_error_("not implemented yet");}; … … 161 162 IssmDouble Misfit(int modelenum,int observationenum,int weightsenum){_error_("not implemented yet");}; 162 163 IssmDouble MisfitArea(int weightsenum){_error_("not implemented yet");}; 164 IssmDouble Masscon(IssmDouble* levelset){_error_("not implemented yet");}; 163 165 164 166 #ifdef _HAVE_GIA_ -
TabularUnified issm/trunk-jpl/src/c/classes/Elements/Tria.cpp ¶
r18758 r18786 666 666 return this->element_type; 667 667 668 } 669 /*}}}*/ 670 void Tria::GetLevelsetPositivePart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlynegative,IssmDouble* gl){/*{{{*/ 671 672 /*Computeportion of the element that has a positive levelset*/ 673 674 bool negative=true; 675 int point; 676 const IssmPDouble epsilon= 1.e-15; 677 IssmDouble f1,f2; 678 679 /*Be sure that values are not zero*/ 680 if(gl[0]==0.) gl[0]=gl[0]+epsilon; 681 if(gl[1]==0.) gl[1]=gl[1]+epsilon; 682 if(gl[2]==0.) gl[2]=gl[2]+epsilon; 683 684 /*Check that not all nodes are positive or negative*/ 685 if(gl[0]>0 && gl[1]>0 && gl[2]>0){ // All positive 686 point=0; 687 f1=1.; 688 f2=1.; 689 } 690 else if(gl[0]<0 && gl[1]<0 && gl[2]<0){ //All negative 691 point=0; 692 f1=0.; 693 f2=0.; 694 } 695 else{ 696 if(gl[0]*gl[1]*gl[2]<0) negative=false; 697 698 if(gl[0]*gl[1]>0){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2 699 point=2; 700 f1=gl[2]/(gl[2]-gl[0]); 701 f2=gl[2]/(gl[2]-gl[1]); 702 } 703 else if(gl[1]*gl[2]>0){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2 704 point=0; 705 f1=gl[0]/(gl[0]-gl[1]); 706 f2=gl[0]/(gl[0]-gl[2]); 707 } 708 else if(gl[0]*gl[2]>0){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2 709 point=1; 710 f1=gl[1]/(gl[1]-gl[2]); 711 f2=gl[1]/(gl[1]-gl[0]); 712 } 713 } 714 *point1=point; 715 *fraction1=f1; 716 *fraction2=f2; 717 *mainlynegative=negative; 668 718 } 669 719 /*}}}*/ … … 2716 2766 } 2717 2767 /*}}}*/ 2768 IssmDouble Tria::Masscon(IssmDouble* levelset){ /*{{{*/ 2769 2770 2771 /*intermediary: */ 2772 IssmDouble* values=NULL; 2773 Input* thickness_input=NULL; 2774 IssmDouble thickness; 2775 IssmDouble weight; 2776 IssmDouble Jdet; 2777 IssmDouble volume; 2778 IssmDouble rho_ice; 2779 IssmDouble* xyz_list=NULL; 2780 int point1; 2781 IssmDouble fraction1,fraction2; 2782 bool mainlynegative=true; 2783 2784 /*Output:*/ 2785 volume=0; 2786 2787 /* Get node coordinates and dof list: */ 2788 GetVerticesCoordinates(&xyz_list); 2789 2790 /*Retrieve inputs required:*/ 2791 thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input); 2792 2793 /*Retrieve material parameters: */ 2794 rho_ice=matpar->GetRhoIce(); 2795 2796 /*Retrieve values of the levelset defining the masscon: */ 2797 values = xNew<IssmDouble>(NUMVERTICES); 2798 for(int i=0;i<NUMVERTICES;i++){ 2799 values[i]=levelset[this->vertices[i]->Sid()]; 2800 } 2801 2802 /*Ok, use the level set values to figure out where we put our gaussian points:*/ 2803 this->GetLevelsetPositivePart(&point1,&fraction1,&fraction2,&mainlynegative,values); 2804 Gauss* gauss = this->NewGauss(point1,fraction1,fraction2,mainlynegative,4); 2805 2806 volume=0; 2807 2808 for(int ig=gauss->begin();ig<gauss->end();ig++){ 2809 gauss->GaussPoint(ig); 2810 2811 this->JacobianDeterminant(&Jdet,xyz_list,gauss); 2812 thickness_input->GetInputValue(&thickness, gauss); 2813 2814 volume+=thickness*gauss->weight*Jdet; 2815 } 2816 2817 /* clean up and Return: */ 2818 xDelete<IssmDouble>(xyz_list); 2819 xDelete<IssmDouble>(values); 2820 delete gauss; 2821 return rho_ice*volume; 2822 } 2823 /*}}}*/ 2718 2824 2719 2825 #ifdef _HAVE_GIA_ -
TabularUnified issm/trunk-jpl/src/c/classes/Elements/Tria.h ¶
r18736 r18786 69 69 Element* GetUpperElement(void){_error_("not implemented yet");}; 70 70 Element* GetBasalElement(void){_error_("not implemented yet");}; 71 void GetLevelsetPositivePart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlynegative,IssmDouble* levelsetvalues); 71 72 void GetGroundedPart(int* point1,IssmDouble* fraction1, IssmDouble* fraction2,bool* mainlyfloating); 72 73 IssmDouble GetGroundedPortion(IssmDouble* xyz_list); … … 123 124 IssmDouble MassFlux(IssmDouble x1,IssmDouble y1, IssmDouble x2, IssmDouble y2,int segment_id); 124 125 void ElementResponse(IssmDouble* presponse,int response_enum); 126 IssmDouble Masscon(IssmDouble* levelset); 125 127 IssmDouble Misfit(int modelenum,int observationenum,int weightsenum); 126 128 IssmDouble MisfitArea(int weightsenum); -
TabularUnified issm/trunk-jpl/src/c/classes/classes.h ¶
r18492 r18786 19 19 #include "./Massfluxatgate.h" 20 20 #include "./Misfit.h" 21 #include "./Masscon.h" 21 22 22 23 /*Constraints: */ -
TabularUnified issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp ¶
r18521 r18786 114 114 /*}}}*/ 115 115 } 116 else if (output_definition_enums[i]==MassconEnum){ 117 /*Deal with masscons: {{{*/ 118 119 /*masscon variables: */ 120 int nummasscons; 121 char** masscon_name_s = NULL; 122 IssmDouble** masscon_levelset_s = NULL; 123 int* masscon_levelset_M_s = NULL; 124 int* masscon_levelset_N_s = NULL; 116 125 126 /*Fetch name and levelset, etc ... (see src/m/classes/masscon.m): */ 127 iomodel->FetchMultipleData(&masscon_name_s,&nummasscons,MassconNameEnum); 128 iomodel->FetchMultipleData(&masscon_levelset_s,&masscon_levelset_M_s,&masscon_levelset_N_s,&nummasscons,MassconLevelsetEnum); 129 for(j=0;j<nummasscons;j++){ 130 131 /*Create a masscon object: */ 132 output_definitions->AddObject(new Masscon(masscon_name_s[j],masscon_levelset_s[j],masscon_levelset_M_s[j])); 133 134 } 135 136 /*Free ressources:*/ 137 for(j=0;j<nummasscons;j++){ 138 char* string=NULL; 139 IssmDouble* matrix = NULL; 140 141 string = masscon_name_s[j]; xDelete<char>(string); 142 matrix = masscon_levelset_s[j]; xDelete<IssmDouble>(matrix); 143 } 144 xDelete<char*>(masscon_name_s); 145 xDelete<IssmDouble*>(masscon_levelset_s); 146 xDelete<int>(masscon_levelset_M_s); 147 xDelete<int>(masscon_levelset_N_s); 148 /*}}}*/ 149 } 117 150 else _error_("output definition enum " << output_definition_enums[i] << "not supported yet!"); 118 151 } -
TabularUnified issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h ¶
r18778 r18786 491 491 ProfilerEnum, 492 492 MatrixParamEnum, 493 MassconEnum, 494 MassconNameEnum, 495 MassconLevelsetEnum, 493 496 NodeSIdEnum, 494 497 VectorParamEnum, -
TabularUnified issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp ¶
r18778 r18786 488 488 case ProfilerEnum : return "Profiler"; 489 489 case MatrixParamEnum : return "MatrixParam"; 490 case MassconEnum : return "Masscon"; 491 case MassconNameEnum : return "MassconName"; 492 case MassconLevelsetEnum : return "MassconLevelset"; 490 493 case NodeSIdEnum : return "NodeSId"; 491 494 case VectorParamEnum : return "VectorParam"; -
TabularUnified issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp ¶
r18778 r18786 497 497 else if (strcmp(name,"Profiler")==0) return ProfilerEnum; 498 498 else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum; 499 else if (strcmp(name,"Masscon")==0) return MassconEnum; 500 else if (strcmp(name,"MassconName")==0) return MassconNameEnum; 501 else if (strcmp(name,"MassconLevelset")==0) return MassconLevelsetEnum; 499 502 else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum; 500 503 else if (strcmp(name,"VectorParam")==0) return VectorParamEnum; … … 503 506 else if (strcmp(name,"Segment")==0) return SegmentEnum; 504 507 else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum; 505 else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;506 else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;507 else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum; 511 if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum; 512 else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum; 513 else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum; 514 else if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum; 512 515 else if (strcmp(name,"StringParam")==0) return StringParamEnum; 513 516 else if (strcmp(name,"Seg")==0) return SegEnum; … … 626 629 else if (strcmp(name,"P1")==0) return P1Enum; 627 630 else if (strcmp(name,"P1DG")==0) return P1DGEnum; 628 else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;629 else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;630 else if (strcmp(name,"P2")==0) return P2Enum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"P2bubble")==0) return P2bubbleEnum; 634 if (strcmp(name,"P1bubble")==0) return P1bubbleEnum; 635 else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum; 636 else if (strcmp(name,"P2")==0) return P2Enum; 637 else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum; 635 638 else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum; 636 639 else if (strcmp(name,"P2xP1")==0) return P2xP1Enum; … … 749 752 else if (strcmp(name,"OptionCell")==0) return OptionCellEnum; 750 753 else if (strcmp(name,"OptionStruct")==0) return OptionStructEnum; 751 else if (strcmp(name,"Cuffey")==0) return CuffeyEnum;752 else if (strcmp(name,"Paterson")==0) return PatersonEnum;753 else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum; 757 if (strcmp(name,"Cuffey")==0) return CuffeyEnum; 758 else if (strcmp(name,"Paterson")==0) return PatersonEnum; 759 else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum; 760 else if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum; 758 761 else if (strcmp(name,"TransientIslevelset")==0) return TransientIslevelsetEnum; 759 762 else if (strcmp(name,"ExtrapolationVariable")==0) return ExtrapolationVariableEnum; -
TabularUnified issm/trunk-jpl/src/m/enum/EnumDefinitions.py ¶
r18779 r18786 480 480 def ProfilerEnum(): return StringToEnum("Profiler")[0] 481 481 def MatrixParamEnum(): return StringToEnum("MatrixParam")[0] 482 def MassconEnum(): return StringToEnum("Masscon")[0] 483 def MassconNameEnum(): return StringToEnum("MassconName")[0] 484 def MassconLevelsetEnum(): return StringToEnum("MassconLevelset")[0] 482 485 def NodeSIdEnum(): return StringToEnum("NodeSId")[0] 483 486 def VectorParamEnum(): return StringToEnum("VectorParam")[0] -
TabularUnified issm/trunk-jpl/src/m/exp/exp_to_levelset.m ¶
r18773 r18786 23 23 cleanup=1; 24 24 if cleanup, 25 flags=zeros( length(segments),1);26 for j=1: length(segments),25 flags=zeros(size(segments,1),1); 26 for j=1:size(segments,1), 27 27 segment=segments(j,:); 28 28 x1=segment(1); x2=segment(3); … … 74 74 %cleanup: remove 0 length segments: 75 75 if cleanup, 76 flags=zeros( length(segments),1);77 for j=1: length(segments),76 flags=zeros(size(segments,1),1); 77 for j=1:size(segments,1), 78 78 segment=segments(j,:); 79 79 x1=segment(1); x2=segment(3); -
TabularUnified issm/trunk-jpl/src/m/plot/applyoptions.m ¶
r18660 r18786 427 427 end 428 428 hold on,p=plot(x,y,'k.'); 429 markersize=getfieldvalue(options,'markersize', 5);429 markersize=getfieldvalue(options,'markersize',12); 430 430 color=getfieldvalue(options,'cloudcolor','k'); 431 431 set(p,'Color',color);
Note:
See TracChangeset
for help on using the changeset viewer.