source: issm/oecreview/Archive/21724-22754/ISSM-22748-22749.diff@ 22755

Last change on this file since 22755 was 22755, checked in by Mathieu Morlighem, 7 years ago

CHG: added 21724-22754

File size: 9.0 KB
  • ../trunk-jpl/src/m/classes/basalforcingspico.m

    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
     
    6767                                md = checkfield(md,'fieldname','basalforcings.maxboxcount','numel',1,'NaN',1,'Inf',1,'>',0);
    6868                                md = checkfield(md,'fieldname','basalforcings.overturning_coeff','numel',1,'NaN',1,'Inf',1,'>',0);
    6969                                md = checkfield(md,'fieldname','basalforcings.gamma_T','numel',1,'NaN',1,'Inf',1,'>',0);
    70                                 md = checkfield(md,'fieldname','basalforcings.farocean_temperature','NaN',1,'Inf',1,'>',0);
    71                                 md = checkfield(md,'fieldname','basalforcings.farocean_salinity','NaN',1,'Inf',1,'>',0);
     70                                md = checkfield(md,'fieldname','basalforcings.farocean_temperature','NaN',1,'Inf',1,'>',0,'size',[md.basalforcings.num_basins+1 NaN]);
     71                                md = checkfield(md,'fieldname','basalforcings.farocean_salinity','NaN',1,'Inf',1,'>',0,'size',[md.basalforcings.num_basins+1 NaN]);
    7272                                md = checkfield(md,'fieldname','basalforcings.geothermalflux','NaN',1,'Inf',1,'>=',0,'timeseries',1);
    7373                                md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1);
    7474
  • ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp

     
    3131void UpdateBoxIdsPico(FemModel* femmodel){/*{{{*/
    3232
    3333        int         numvertices,num_basins,maxbox,basinid;
    34         IssmDouble* dmax_basin=NULL;
     34        IssmDouble  dist_max;
     35        IssmDouble* dmax_basin_cpu=NULL;
    3536        IssmDouble* distances=NULL;
    3637
    3738        femmodel->parameters->FindParam(&num_basins,BasalforcingsPicoNumBasinsEnum);
    3839        femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
    39         dmax_basin=xNew<IssmDouble>(num_basins);
     40        dmax_basin_cpu=xNew<IssmDouble>(num_basins);
    4041
    4142        femmodel->elements->InputDuplicate(MaskGroundediceLevelsetEnum,DistanceToGroundinglineEnum);
    4243        femmodel->DistanceToFieldValue(MaskGroundediceLevelsetEnum,0.,DistanceToGroundinglineEnum);
     
    4546        femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0.,DistanceToCalvingfrontEnum);
    4647
    4748        /*find maximum distance to grounding line per domain and per basin*/
    48         IssmDouble dist_max=-1.;
    49         for(int i=0;i<num_basins;i++){dmax_basin[i]=-1;}
     49        IssmDouble maxdist_cpu=-1.;
     50        for(int i=0;i<num_basins;i++){dmax_basin_cpu[i]=-1;}
    5051        for(int i=0;i<femmodel->elements->Size();i++){
    5152                Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
    5253                if(!element->IsIceInElement() || !element->IsFloating()) continue;
     
    5556                element->GetInputListOnVertices(&distances[0],DistanceToGroundinglineEnum);
    5657                element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
    5758                for(int k=0; k<numvertices; k++){
    58                         if(fabs(distances[k])>dist_max){dist_max=fabs(distances[k]);}
    59                         if(fabs(distances[k])>dmax_basin[basinid]){dmax_basin[basinid]=fabs(distances[k]);}
     59                        if(fabs(distances[k])>maxdist_cpu){maxdist_cpu=fabs(distances[k]);}
     60                        if(fabs(distances[k])>dmax_basin_cpu[basinid]){dmax_basin_cpu[basinid]=fabs(distances[k]);}
    6061                }
    6162                xDelete<IssmDouble>(distances);
    6263        }
    6364
     65        /*Synchronize across cpus*/
     66        IssmDouble* dmax_basin=xNew<IssmDouble>(num_basins);
     67        ISSM_MPI_Allreduce((void*)&maxdist_cpu,(void*)&dist_max,1,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,IssmComm::GetComm());
     68        ISSM_MPI_Allreduce(dmax_basin_cpu,dmax_basin,num_basins,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,IssmComm::GetComm());
     69
    6470        /*Define maximum number of boxes per basin*/
    6571        int* nd=xNew<int>(num_basins);
    6672        for(int i=0; i<num_basins;i++){
     
    96102        femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
    97103       
    98104        IssmDouble* boxareas=xNewZeroInit<IssmDouble>(num_basins*maxbox);
     105
    99106        for(int i=0;i<femmodel->elements->Size();i++){
    100107                Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
    101108                if(!element->IsIceInElement() || !element->IsFloating()) continue;
     
    107114        /*Synchronize across cpus*/
    108115        IssmDouble* sumareas =xNew<IssmDouble>(num_basins*maxbox);
    109116        ISSM_MPI_Allreduce(boxareas,sumareas,num_basins*maxbox,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
    110 
     117        if(sumareas[0]==0){_error_("No elements in box 0, basal meltrates will be 0. Consider decreasing md.basalforcings.maxboxcount or refining your mesh!");}
     118       
    111119        /*Update parameters to keep track of the new areas in future calculations*/
    112120        femmodel->parameters->AddObject(new DoubleVecParam(BasalforcingsPicoBoxAreaEnum,sumareas,maxbox*num_basins));
    113121
  • ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp

     
    233233                                parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum));
    234234                                parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.gamma_T",BasalforcingsPicoGammaTEnum));
    235235                                iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_temperature");
    236                                 _assert_(M>1 && N>1);
     236                                _assert_(M>=1 && N>=1);
    237237                                parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceantemperatureEnum,transparam,&transparam[N*(M-1)],interp,N,M));
    238238                                xDelete<IssmDouble>(transparam);
    239239                                iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_salinity");
    240                                 _assert_(M>1 && N>1);
     240                                _assert_(M>=1 && N>=1);
    241241                                parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceansalinityEnum,transparam,&transparam[N*(M-1)],interp,N,M));
    242242                                xDelete<IssmDouble>(transparam);
    243243                        break;
  • ../trunk-jpl/src/c/classes/Elements/Tria.cpp

     
    21992199                xDelete<char*>(cost_functions);
    22002200        }
    22012201}
     2202/*}}}*/
    22022203void       Tria::InputUpdateFromSolutionOneDof(IssmDouble* solution,int enum_type){/*{{{*/
    22032204
    22042205        /*Intermediary*/
     
    28922893        IssmDouble dist_gl,dist_cf;
    28932894
    28942895        inputs->GetInputValue(&basin_id,BasalforcingsPicoBasinIdEnum);
    2895         IssmDouble boxid_max=reCast<IssmDouble>(max_boxid_basin_list[basin_id]);
     2896        IssmDouble boxid_max=reCast<IssmDouble>(max_boxid_basin_list[basin_id])+1.;
    28962897
    28972898        Input* dist_gl_input=inputs->GetInput(DistanceToGroundinglineEnum); _assert_(dist_gl_input);
    28982899        Input* dist_cf_input=inputs->GetInput(DistanceToCalvingfrontEnum);  _assert_(dist_cf_input);
     
    29352936        int        basinid, maxbox, num_basins, numnodes, M;
    29362937        IssmDouble gamma_T, overturning_coeff, thickness;
    29372938        IssmDouble pressure, T_star,p_coeff, q_coeff;
    2938         IssmDouble* boxareas  = NULL;
    29392939
    29402940        /*Get variables*/
    29412941        IssmDouble rhoi       = this->GetMaterialParameter(MaterialsRhoIceEnum);
     
    29572957        this->parameters->FindParam(&gamma_T,BasalforcingsPicoGammaTEnum);
    29582958        this->parameters->FindParam(&overturning_coeff,BasalforcingsPicoOverturningCoeffEnum);
    29592959        this->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
    2960         this->parameters->FindParam(&boxareas,&M,BasalforcingsPicoBoxAreaEnum);
    29612960        this->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
    29622961        Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
    29632962        _assert_(basinid<=num_basins);
    29642963
     2964   IssmDouble* boxareas = xNew<IssmDouble>(num_basins*maxbox);
     2965        this->parameters->FindParam(&boxareas,&M,BasalforcingsPicoBoxAreaEnum);
     2966
    29652967        IssmDouble area_boxi        = boxareas[basinid*maxbox+boxid];
    29662968        IssmDouble g1               = area_boxi*gamma_T;
    29672969
  • ../trunk-jpl/test/NightlyRun/test470.m

     
    4545field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Pressure1','FloatingiceMeltingrate1',...
    4646           'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Pressure2','FloatingiceMeltingrate2',...
    4747           'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Pressure3','FloatingiceMeltingrate3'};
    48 field_tolerances={1,1,1,1,1,1,1,1,...
    49            1,1,1,1,1,1,1,1,...
    50            1,1,1,1,1,1,1,1};
     48field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,1e-13,1e-13,...
     49           3e-11,3e-11,9e-10,7e-11,1e-09,5e-08,1e-10,1e-13,...
     50           1e-10,3e-11,1e-10,7e-11,1e-09,5e-08,1e-10,1e-13};
    5151field_values={...
    5252           (md.results.TransientSolution(1).Base),...
    5353           (md.results.TransientSolution(1).Surface),...
Note: See TracBrowser for help on using the repository browser.