Changeset 22749
- Timestamp:
- 05/07/18 14:29:32 (7 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r22740 r22749 2200 2200 } 2201 2201 } 2202 /*}}}*/ 2202 2203 void Tria::InputUpdateFromSolutionOneDof(IssmDouble* solution,int enum_type){/*{{{*/ 2203 2204 … … 2893 2894 2894 2895 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.; 2896 2897 2897 2898 Input* dist_gl_input=inputs->GetInput(DistanceToGroundinglineEnum); _assert_(dist_gl_input); … … 2936 2937 IssmDouble gamma_T, overturning_coeff, thickness; 2937 2938 IssmDouble pressure, T_star,p_coeff, q_coeff; 2938 IssmDouble* boxareas = NULL;2939 2939 2940 2940 /*Get variables*/ … … 2958 2958 this->parameters->FindParam(&overturning_coeff,BasalforcingsPicoOverturningCoeffEnum); 2959 2959 this->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum); 2960 this->parameters->FindParam(&boxareas,&M,BasalforcingsPicoBoxAreaEnum);2961 2960 this->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum); 2962 2961 Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input); 2963 2962 _assert_(basinid<=num_basins); 2963 2964 IssmDouble* boxareas = xNew<IssmDouble>(num_basins*maxbox); 2965 this->parameters->FindParam(&boxareas,&M,BasalforcingsPicoBoxAreaEnum); 2964 2966 2965 2967 IssmDouble area_boxi = boxareas[basinid*maxbox+boxid]; -
issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp
r22732 r22749 32 32 33 33 int numvertices,num_basins,maxbox,basinid; 34 IssmDouble* dmax_basin=NULL; 34 IssmDouble dist_max; 35 IssmDouble* dmax_basin_cpu=NULL; 35 36 IssmDouble* distances=NULL; 36 37 37 38 femmodel->parameters->FindParam(&num_basins,BasalforcingsPicoNumBasinsEnum); 38 39 femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum); 39 dmax_basin =xNew<IssmDouble>(num_basins);40 dmax_basin_cpu=xNew<IssmDouble>(num_basins); 40 41 41 42 femmodel->elements->InputDuplicate(MaskGroundediceLevelsetEnum,DistanceToGroundinglineEnum); … … 46 47 47 48 /*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;} 50 51 for(int i=0;i<femmodel->elements->Size();i++){ 51 52 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i)); … … 56 57 element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum); 57 58 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]);} 60 61 } 61 62 xDelete<IssmDouble>(distances); 62 63 } 64 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()); 63 69 64 70 /*Define maximum number of boxes per basin*/ … … 97 103 98 104 IssmDouble* boxareas=xNewZeroInit<IssmDouble>(num_basins*maxbox); 105 99 106 for(int i=0;i<femmodel->elements->Size();i++){ 100 107 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i)); … … 108 115 IssmDouble* sumareas =xNew<IssmDouble>(num_basins*maxbox); 109 116 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 111 119 /*Update parameters to keep track of the new areas in future calculations*/ 112 120 femmodel->parameters->AddObject(new DoubleVecParam(BasalforcingsPicoBoxAreaEnum,sumareas,maxbox*num_basins)); -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
r22732 r22749 234 234 parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.gamma_T",BasalforcingsPicoGammaTEnum)); 235 235 iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_temperature"); 236 _assert_(M> 1 && N>1);236 _assert_(M>=1 && N>=1); 237 237 parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceantemperatureEnum,transparam,&transparam[N*(M-1)],interp,N,M)); 238 238 xDelete<IssmDouble>(transparam); 239 239 iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_salinity"); 240 _assert_(M> 1 && N>1);240 _assert_(M>=1 && N>=1); 241 241 parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceansalinityEnum,transparam,&transparam[N*(M-1)],interp,N,M)); 242 242 xDelete<IssmDouble>(transparam); -
issm/trunk-jpl/src/m/classes/basalforcingspico.m
r22625 r22749 68 68 md = checkfield(md,'fieldname','basalforcings.overturning_coeff','numel',1,'NaN',1,'Inf',1,'>',0); 69 69 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]); 72 72 md = checkfield(md,'fieldname','basalforcings.geothermalflux','NaN',1,'Inf',1,'>=',0,'timeseries',1); 73 73 md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1); -
issm/trunk-jpl/test/NightlyRun/test470.m
r22735 r22749 46 46 'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Pressure2','FloatingiceMeltingrate2',... 47 47 '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};48 field_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}; 51 51 field_values={... 52 52 (md.results.TransientSolution(1).Base),...
Note:
See TracChangeset
for help on using the changeset viewer.