source:
issm/oecreview/Archive/21724-22754/ISSM-22748-22749.diff@
22755
Last change on this file since 22755 was 22755, checked in by , 7 years ago | |
---|---|
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
67 67 md = checkfield(md,'fieldname','basalforcings.maxboxcount','numel',1,'NaN',1,'Inf',1,'>',0); 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); 74 74 -
../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp
31 31 void UpdateBoxIdsPico(FemModel* femmodel){/*{{{*/ 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); 42 43 femmodel->DistanceToFieldValue(MaskGroundediceLevelsetEnum,0.,DistanceToGroundinglineEnum); … … 45 46 femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0.,DistanceToCalvingfrontEnum); 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)); 52 53 if(!element->IsIceInElement() || !element->IsFloating()) continue; … … 55 56 element->GetInputListOnVertices(&distances[0],DistanceToGroundinglineEnum); 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 } 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()); 69 64 70 /*Define maximum number of boxes per basin*/ 65 71 int* nd=xNew<int>(num_basins); 66 72 for(int i=0; i<num_basins;i++){ … … 96 102 femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum); 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)); 101 108 if(!element->IsIceInElement() || !element->IsFloating()) continue; … … 107 114 /*Synchronize across cpus*/ 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)); 113 121 -
../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
233 233 parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum)); 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); 243 243 break; -
../trunk-jpl/src/c/classes/Elements/Tria.cpp
2199 2199 xDelete<char*>(cost_functions); 2200 2200 } 2201 2201 } 2202 /*}}}*/ 2202 2203 void Tria::InputUpdateFromSolutionOneDof(IssmDouble* solution,int enum_type){/*{{{*/ 2203 2204 2204 2205 /*Intermediary*/ … … 2892 2893 IssmDouble dist_gl,dist_cf; 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); 2898 2899 Input* dist_cf_input=inputs->GetInput(DistanceToCalvingfrontEnum); _assert_(dist_cf_input); … … 2935 2936 int basinid, maxbox, num_basins, numnodes, M; 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*/ 2941 2941 IssmDouble rhoi = this->GetMaterialParameter(MaterialsRhoIceEnum); … … 2957 2957 this->parameters->FindParam(&gamma_T,BasalforcingsPicoGammaTEnum); 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); 2964 2963 2964 IssmDouble* boxareas = xNew<IssmDouble>(num_basins*maxbox); 2965 this->parameters->FindParam(&boxareas,&M,BasalforcingsPicoBoxAreaEnum); 2966 2965 2967 IssmDouble area_boxi = boxareas[basinid*maxbox+boxid]; 2966 2968 IssmDouble g1 = area_boxi*gamma_T; 2967 2969 -
../trunk-jpl/test/NightlyRun/test470.m
45 45 field_names ={'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Pressure1','FloatingiceMeltingrate1',... 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),... 53 53 (md.results.TransientSolution(1).Surface),...
Note:
See TracBrowser
for help on using the repository browser.