[22755] | 1 | Index: ../trunk-jpl/test/Archives/Archive470.arch
|
---|
| 2 | ===================================================================
|
---|
| 3 | Cannot display: file marked as a binary type.
|
---|
| 4 | svn:mime-type = application/octet-stream
|
---|
| 5 | Index: ../trunk-jpl/src/m/classes/basalforcingspico.m
|
---|
| 6 | ===================================================================
|
---|
| 7 | --- ../trunk-jpl/src/m/classes/basalforcingspico.m (revision 22748)
|
---|
| 8 | +++ ../trunk-jpl/src/m/classes/basalforcingspico.m (revision 22749)
|
---|
| 9 | @@ -67,8 +67,8 @@
|
---|
| 10 | md = checkfield(md,'fieldname','basalforcings.maxboxcount','numel',1,'NaN',1,'Inf',1,'>',0);
|
---|
| 11 | md = checkfield(md,'fieldname','basalforcings.overturning_coeff','numel',1,'NaN',1,'Inf',1,'>',0);
|
---|
| 12 | md = checkfield(md,'fieldname','basalforcings.gamma_T','numel',1,'NaN',1,'Inf',1,'>',0);
|
---|
| 13 | - md = checkfield(md,'fieldname','basalforcings.farocean_temperature','NaN',1,'Inf',1,'>',0);
|
---|
| 14 | - md = checkfield(md,'fieldname','basalforcings.farocean_salinity','NaN',1,'Inf',1,'>',0);
|
---|
| 15 | + md = checkfield(md,'fieldname','basalforcings.farocean_temperature','NaN',1,'Inf',1,'>',0,'size',[md.basalforcings.num_basins+1 NaN]);
|
---|
| 16 | + md = checkfield(md,'fieldname','basalforcings.farocean_salinity','NaN',1,'Inf',1,'>',0,'size',[md.basalforcings.num_basins+1 NaN]);
|
---|
| 17 | md = checkfield(md,'fieldname','basalforcings.geothermalflux','NaN',1,'Inf',1,'>=',0,'timeseries',1);
|
---|
| 18 | md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1);
|
---|
| 19 |
|
---|
| 20 | Index: ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp
|
---|
| 21 | ===================================================================
|
---|
| 22 | --- ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp (revision 22748)
|
---|
| 23 | +++ ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp (revision 22749)
|
---|
| 24 | @@ -31,12 +31,13 @@
|
---|
| 25 | void UpdateBoxIdsPico(FemModel* femmodel){/*{{{*/
|
---|
| 26 |
|
---|
| 27 | int numvertices,num_basins,maxbox,basinid;
|
---|
| 28 | - IssmDouble* dmax_basin=NULL;
|
---|
| 29 | + IssmDouble dist_max;
|
---|
| 30 | + IssmDouble* dmax_basin_cpu=NULL;
|
---|
| 31 | IssmDouble* distances=NULL;
|
---|
| 32 |
|
---|
| 33 | femmodel->parameters->FindParam(&num_basins,BasalforcingsPicoNumBasinsEnum);
|
---|
| 34 | femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
|
---|
| 35 | - dmax_basin=xNew<IssmDouble>(num_basins);
|
---|
| 36 | + dmax_basin_cpu=xNew<IssmDouble>(num_basins);
|
---|
| 37 |
|
---|
| 38 | femmodel->elements->InputDuplicate(MaskGroundediceLevelsetEnum,DistanceToGroundinglineEnum);
|
---|
| 39 | femmodel->DistanceToFieldValue(MaskGroundediceLevelsetEnum,0.,DistanceToGroundinglineEnum);
|
---|
| 40 | @@ -45,8 +46,8 @@
|
---|
| 41 | femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0.,DistanceToCalvingfrontEnum);
|
---|
| 42 |
|
---|
| 43 | /*find maximum distance to grounding line per domain and per basin*/
|
---|
| 44 | - IssmDouble dist_max=-1.;
|
---|
| 45 | - for(int i=0;i<num_basins;i++){dmax_basin[i]=-1;}
|
---|
| 46 | + IssmDouble maxdist_cpu=-1.;
|
---|
| 47 | + for(int i=0;i<num_basins;i++){dmax_basin_cpu[i]=-1;}
|
---|
| 48 | for(int i=0;i<femmodel->elements->Size();i++){
|
---|
| 49 | Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
|
---|
| 50 | if(!element->IsIceInElement() || !element->IsFloating()) continue;
|
---|
| 51 | @@ -55,12 +56,17 @@
|
---|
| 52 | element->GetInputListOnVertices(&distances[0],DistanceToGroundinglineEnum);
|
---|
| 53 | element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
|
---|
| 54 | for(int k=0; k<numvertices; k++){
|
---|
| 55 | - if(fabs(distances[k])>dist_max){dist_max=fabs(distances[k]);}
|
---|
| 56 | - if(fabs(distances[k])>dmax_basin[basinid]){dmax_basin[basinid]=fabs(distances[k]);}
|
---|
| 57 | + if(fabs(distances[k])>maxdist_cpu){maxdist_cpu=fabs(distances[k]);}
|
---|
| 58 | + if(fabs(distances[k])>dmax_basin_cpu[basinid]){dmax_basin_cpu[basinid]=fabs(distances[k]);}
|
---|
| 59 | }
|
---|
| 60 | xDelete<IssmDouble>(distances);
|
---|
| 61 | }
|
---|
| 62 |
|
---|
| 63 | + /*Synchronize across cpus*/
|
---|
| 64 | + IssmDouble* dmax_basin=xNew<IssmDouble>(num_basins);
|
---|
| 65 | + ISSM_MPI_Allreduce((void*)&maxdist_cpu,(void*)&dist_max,1,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,IssmComm::GetComm());
|
---|
| 66 | + ISSM_MPI_Allreduce(dmax_basin_cpu,dmax_basin,num_basins,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,IssmComm::GetComm());
|
---|
| 67 | +
|
---|
| 68 | /*Define maximum number of boxes per basin*/
|
---|
| 69 | int* nd=xNew<int>(num_basins);
|
---|
| 70 | for(int i=0; i<num_basins;i++){
|
---|
| 71 | @@ -96,6 +102,7 @@
|
---|
| 72 | femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
|
---|
| 73 |
|
---|
| 74 | IssmDouble* boxareas=xNewZeroInit<IssmDouble>(num_basins*maxbox);
|
---|
| 75 | +
|
---|
| 76 | for(int i=0;i<femmodel->elements->Size();i++){
|
---|
| 77 | Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
|
---|
| 78 | if(!element->IsIceInElement() || !element->IsFloating()) continue;
|
---|
| 79 | @@ -107,7 +114,8 @@
|
---|
| 80 | /*Synchronize across cpus*/
|
---|
| 81 | IssmDouble* sumareas =xNew<IssmDouble>(num_basins*maxbox);
|
---|
| 82 | ISSM_MPI_Allreduce(boxareas,sumareas,num_basins*maxbox,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
|
---|
| 83 | -
|
---|
| 84 | + if(sumareas[0]==0){_error_("No elements in box 0, basal meltrates will be 0. Consider decreasing md.basalforcings.maxboxcount or refining your mesh!");}
|
---|
| 85 | +
|
---|
| 86 | /*Update parameters to keep track of the new areas in future calculations*/
|
---|
| 87 | femmodel->parameters->AddObject(new DoubleVecParam(BasalforcingsPicoBoxAreaEnum,sumareas,maxbox*num_basins));
|
---|
| 88 |
|
---|
| 89 | Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
|
---|
| 90 | ===================================================================
|
---|
| 91 | --- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp (revision 22748)
|
---|
| 92 | +++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp (revision 22749)
|
---|
| 93 | @@ -233,11 +233,11 @@
|
---|
| 94 | parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum));
|
---|
| 95 | parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.gamma_T",BasalforcingsPicoGammaTEnum));
|
---|
| 96 | iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_temperature");
|
---|
| 97 | - _assert_(M>1 && N>1);
|
---|
| 98 | + _assert_(M>=1 && N>=1);
|
---|
| 99 | parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceantemperatureEnum,transparam,&transparam[N*(M-1)],interp,N,M));
|
---|
| 100 | xDelete<IssmDouble>(transparam);
|
---|
| 101 | iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_salinity");
|
---|
| 102 | - _assert_(M>1 && N>1);
|
---|
| 103 | + _assert_(M>=1 && N>=1);
|
---|
| 104 | parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceansalinityEnum,transparam,&transparam[N*(M-1)],interp,N,M));
|
---|
| 105 | xDelete<IssmDouble>(transparam);
|
---|
| 106 | break;
|
---|
| 107 | Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
|
---|
| 108 | ===================================================================
|
---|
| 109 | --- ../trunk-jpl/src/c/classes/Elements/Tria.cpp (revision 22748)
|
---|
| 110 | +++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp (revision 22749)
|
---|
| 111 | @@ -2199,6 +2199,7 @@
|
---|
| 112 | xDelete<char*>(cost_functions);
|
---|
| 113 | }
|
---|
| 114 | }
|
---|
| 115 | +/*}}}*/
|
---|
| 116 | void Tria::InputUpdateFromSolutionOneDof(IssmDouble* solution,int enum_type){/*{{{*/
|
---|
| 117 |
|
---|
| 118 | /*Intermediary*/
|
---|
| 119 | @@ -2892,7 +2893,7 @@
|
---|
| 120 | IssmDouble dist_gl,dist_cf;
|
---|
| 121 |
|
---|
| 122 | inputs->GetInputValue(&basin_id,BasalforcingsPicoBasinIdEnum);
|
---|
| 123 | - IssmDouble boxid_max=reCast<IssmDouble>(max_boxid_basin_list[basin_id]);
|
---|
| 124 | + IssmDouble boxid_max=reCast<IssmDouble>(max_boxid_basin_list[basin_id])+1.;
|
---|
| 125 |
|
---|
| 126 | Input* dist_gl_input=inputs->GetInput(DistanceToGroundinglineEnum); _assert_(dist_gl_input);
|
---|
| 127 | Input* dist_cf_input=inputs->GetInput(DistanceToCalvingfrontEnum); _assert_(dist_cf_input);
|
---|
| 128 | @@ -2935,7 +2936,6 @@
|
---|
| 129 | int basinid, maxbox, num_basins, numnodes, M;
|
---|
| 130 | IssmDouble gamma_T, overturning_coeff, thickness;
|
---|
| 131 | IssmDouble pressure, T_star,p_coeff, q_coeff;
|
---|
| 132 | - IssmDouble* boxareas = NULL;
|
---|
| 133 |
|
---|
| 134 | /*Get variables*/
|
---|
| 135 | IssmDouble rhoi = this->GetMaterialParameter(MaterialsRhoIceEnum);
|
---|
| 136 | @@ -2957,11 +2957,13 @@
|
---|
| 137 | this->parameters->FindParam(&gamma_T,BasalforcingsPicoGammaTEnum);
|
---|
| 138 | this->parameters->FindParam(&overturning_coeff,BasalforcingsPicoOverturningCoeffEnum);
|
---|
| 139 | this->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
|
---|
| 140 | - this->parameters->FindParam(&boxareas,&M,BasalforcingsPicoBoxAreaEnum);
|
---|
| 141 | this->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
|
---|
| 142 | Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
|
---|
| 143 | _assert_(basinid<=num_basins);
|
---|
| 144 |
|
---|
| 145 | + IssmDouble* boxareas = xNew<IssmDouble>(num_basins*maxbox);
|
---|
| 146 | + this->parameters->FindParam(&boxareas,&M,BasalforcingsPicoBoxAreaEnum);
|
---|
| 147 | +
|
---|
| 148 | IssmDouble area_boxi = boxareas[basinid*maxbox+boxid];
|
---|
| 149 | IssmDouble g1 = area_boxi*gamma_T;
|
---|
| 150 |
|
---|
| 151 | Index: ../trunk-jpl/test/NightlyRun/test470.m
|
---|
| 152 | ===================================================================
|
---|
| 153 | --- ../trunk-jpl/test/NightlyRun/test470.m (revision 22748)
|
---|
| 154 | +++ ../trunk-jpl/test/NightlyRun/test470.m (revision 22749)
|
---|
| 155 | @@ -45,9 +45,9 @@
|
---|
| 156 | field_names ={'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Pressure1','FloatingiceMeltingrate1',...
|
---|
| 157 | 'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Pressure2','FloatingiceMeltingrate2',...
|
---|
| 158 | 'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Pressure3','FloatingiceMeltingrate3'};
|
---|
| 159 | -field_tolerances={1,1,1,1,1,1,1,1,...
|
---|
| 160 | - 1,1,1,1,1,1,1,1,...
|
---|
| 161 | - 1,1,1,1,1,1,1,1};
|
---|
| 162 | +field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,1e-13,1e-13,...
|
---|
| 163 | + 3e-11,3e-11,9e-10,7e-11,1e-09,5e-08,1e-10,1e-13,...
|
---|
| 164 | + 1e-10,3e-11,1e-10,7e-11,1e-09,5e-08,1e-10,1e-13};
|
---|
| 165 | field_values={...
|
---|
| 166 | (md.results.TransientSolution(1).Base),...
|
---|
| 167 | (md.results.TransientSolution(1).Surface),...
|
---|