Changeset 23973


Ignore:
Timestamp:
05/31/19 15:33:02 (6 years ago)
Author:
Mathieu Morlighem
Message:

CHG: added channels as potential output

Location:
issm/trunk-jpl/src
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/FemModel.cpp

    r23936 r23973  
    22292229                                        case EtaDiffEnum:                   EtaDiffx(&double_result); break;
    22302230
    2231                                    /*Vector */
     2231                                        /*Vector special case (maybe should go to specific analysis?)*/
     2232                                        case ChannelAreaEnum:{
     2233
     2234                                                        /*Get Number of Channels*/
     2235                                                        int numchannels_local=0,numchannels;
     2236                                                        for(int j=0;j<this->loads->Size();j++){
     2237                                                                if(this->loads->GetEnum(i)==ChannelEnum) numchannels_local++;
     2238                                                        }
     2239                                                        ISSM_MPI_Reduce(&numchannels_local,&numchannels,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
     2240                                                        ISSM_MPI_Bcast(&numchannels,1,ISSM_MPI_INT,0,IssmComm::GetComm());
     2241
     2242                                                        IssmDouble* values    = xNewZeroInit<IssmDouble>(numchannels);
     2243                                                        IssmDouble* allvalues = xNew<IssmDouble>(numchannels);
     2244
     2245                                                        /*Fill-in vector*/
     2246                                                        for(int j=0;j<this->loads->Size();j++){
     2247                                                                if(this->loads->GetEnum(i)==ChannelEnum){
     2248                                                                        Channel* channel=(Channel*)this->loads->GetObjectByOffset(i);
     2249                                                                        channel->WriteChannelCrossSection(values);
     2250                                                                }
     2251                                                        }
     2252
     2253                                                        /*Gather from all cpus*/
     2254                                                        ISSM_MPI_Allreduce((void*)values,(void*)allvalues,numchannels,ISSM_MPI_PDOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
     2255                                                        xDelete<IssmDouble>(values);
     2256
     2257                                                        if(save_results)results->AddResult(new GenericExternalResult<IssmDouble*>(results->Size()+1,output_enum,allvalues,numchannels,1,step,time));
     2258                                                        xDelete<IssmDouble>(allvalues);
     2259
     2260                                                        isvec = true;
     2261                                        }
     2262                                        break;
     2263
     2264
     2265                                   /*Default is always Vector */
    22322266                                        default:
    22332267
     
    23472381        /*Convert list of enums to list of string*/
    23482382        char** enumlist = xNew<char*>(numoutputs);
    2349         for(int i=0;i<numoutputs;i++){
    2350                 EnumToStringx(&enumlist[i],requested_outputs[i]);
    2351         }
     2383        for(int i=0;i<numoutputs;i++) EnumToStringx(&enumlist[i],requested_outputs[i]);
    23522384
    23532385        /*Call main module*/
     
    23572389        for(int i=0;i<numoutputs;i++) xDelete<char>(enumlist[i]);
    23582390        xDelete<char*>(enumlist);
    2359         return;
    23602391}
    23612392/*}}}*/
  • issm/trunk-jpl/src/c/classes/Loads/Channel.cpp

    r23971 r23973  
    2828/*Channel constructors and destructor*/
    2929Channel::Channel(){/*{{{*/
     30        this->id         = -1;
     31        this->sid        = -1;
    3032        this->parameters = NULL;
    3133        this->helement   = NULL;
     
    3941
    4042        this->id=channel_id;
     43        this->sid=channel_id-1;
    4144        this->parameters = NULL;
    4245        this->element    = NULL;
     
    679682}
    680683/*}}}*/
     684void           Channel::WriteChannelCrossSection(IssmDouble* values){/*{{{*/
     685
     686        _assert_(values);
     687        values[this->sid] = this->S;
     688}
     689/*}}}*/
  • issm/trunk-jpl/src/c/classes/Loads/Channel.h

    r23965 r23973  
    2222
    2323        public:
     24                int sid;
    2425                int id;
    2526
     
    7778                ElementVector* CreatePVectorHydrologyGlaDS(void);
    7879                ElementMatrix* CreateKMatrixHydrologyGlaDS(void);
     80                void           WriteChannelCrossSection(IssmDouble* values);
    7981                /*}}}*/
    8082
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r23958 r23973  
    928928        CfsurfacesquareEnum,
    929929        ChannelEnum,
     930        ChannelAreaEnum,
    930931        ClosedEnum,
    931932        ColinearEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r23958 r23973  
    932932                case CfsurfacesquareEnum : return "Cfsurfacesquare";
    933933                case ChannelEnum : return "Channel";
     934                case ChannelAreaEnum : return "ChannelArea";
    934935                case ClosedEnum : return "Closed";
    935936                case ColinearEnum : return "Colinear";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r23958 r23973  
    953953              else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
    954954              else if (strcmp(name,"Channel")==0) return ChannelEnum;
     955              else if (strcmp(name,"ChannelArea")==0) return ChannelAreaEnum;
    955956              else if (strcmp(name,"Closed")==0) return ClosedEnum;
    956957              else if (strcmp(name,"Colinear")==0) return ColinearEnum;
     
    997998              else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
    998999              else if (strcmp(name,"ExtrapolationAnalysis")==0) return ExtrapolationAnalysisEnum;
    999               else if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
    10001000         else stage=9;
    10011001   }
    10021002   if(stage==9){
    1003               if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
     1003              if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
     1004              else if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
    10041005              else if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum;
    10051006              else if (strcmp(name,"FSSolver")==0) return FSSolverEnum;
     
    11201121              else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
    11211122              else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
    1122               else if (strcmp(name,"MeshX")==0) return MeshXEnum;
    11231123         else stage=10;
    11241124   }
    11251125   if(stage==10){
    1126               if (strcmp(name,"MeshY")==0) return MeshYEnum;
     1126              if (strcmp(name,"MeshX")==0) return MeshXEnum;
     1127              else if (strcmp(name,"MeshY")==0) return MeshYEnum;
    11271128              else if (strcmp(name,"MinVel")==0) return MinVelEnum;
    11281129              else if (strcmp(name,"MinVx")==0) return MinVxEnum;
     
    12431244              else if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum;
    12441245              else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
    1245               else if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum;
    12461246         else stage=11;
    12471247   }
    12481248   if(stage==11){
    1249               if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
     1249              if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum;
     1250              else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
    12501251              else if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
    12511252              else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
  • issm/trunk-jpl/src/m/classes/hydrologyglads.m

    r23969 r23973  
    3636                end % }}}
    3737                function list = defaultoutputs(self,md) % {{{
    38                         list = {'EffectivePressure','HydraulicPotential','HydrologySheetThickness'};
     38                        list = {'EffectivePressure','HydraulicPotential','HydrologySheetThickness','ChannelArea'};
    3939                end % }}}   
    4040
Note: See TracChangeset for help on using the changeset viewer.