Changeset 22798
- Timestamp:
- 05/21/18 13:26:18 (7 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/cores/transient_core.cpp
r22784 r22798 170 170 if(VerboseSolution()) _printf0_(" ocean coupling: exchanging information\n"); 171 171 int my_rank; 172 int oceangridnxsize,oceangridnysize,ngrids_ocean;173 IssmDouble *oceanmelt;174 IssmDouble *icebase;175 IssmDouble *oceangridx;176 IssmDouble *oceangridy;177 IssmDouble oceantime;178 172 ISSM_MPI_Comm tomitgcmcomm; 179 173 ISSM_MPI_Status status; … … 184 178 tomitgcmcomm=parcom->GetParameterValue(); 185 179 if(my_rank==0){ 186 ISSM_MPI_Send(&time,1,ISSM_MPI_DOUBLE,0,10001001,tomitgcmcomm); 187 ISSM_MPI_Recv(&oceantime,1,ISSM_MPI_DOUBLE,0,10001002,tomitgcmcomm,&status); 188 if((oceantime - time > 0.1*yts) & (oceantime - time < -0.1*yts)) _error_("Ocean and ice time are starting to diverge"); 189 190 /*Recover inputs needed*/ 191 femmodel->parameters->FindParam(&oceangridnxsize,OceanGridNxEnum); 192 femmodel->parameters->FindParam(&oceangridnysize,OceanGridNyEnum); 193 femmodel->parameters->FindParam(&oceangridx,&ngrids_ocean,OceanGridXEnum); 194 femmodel->parameters->FindParam(&oceangridy,&ngrids_ocean,OceanGridYEnum); 195 196 /*Exchange information*/ 197 oceanmelt = xNew<IssmDouble>(ngrids_ocean); 198 ISSM_MPI_Recv(oceanmelt,ngrids_ocean,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status); 199 icebase = xNew<IssmDouble>(ngrids_ocean); 200 for(int i=0;i<oceangridnxsize;i++){ 201 for(int j=0;j<oceangridnysize;j++){ 202 icebase[i*oceangridnysize+j]=9999.; 203 } 204 } 205 ISSM_MPI_Send(icebase,ngrids_ocean,ISSM_MPI_DOUBLE,0,10001008,tomitgcmcomm); 206 207 /*Interpolate melt onto mesh*/ 180 int ngrids_ocean; 181 IssmDouble oceantime; 182 IssmDouble rho_ice; 183 IssmDouble *oceanmelt; 184 IssmDouble *base_oceangrid; 185 IssmDouble *oceangridx; 186 IssmDouble *oceangridy; 208 187 IssmDouble* x_ice = NULL; 209 188 IssmDouble* y_ice = NULL; … … 211 190 IssmDouble* lon_ice = NULL; 212 191 IssmDouble* z_ice = NULL; 192 IssmDouble* icebase= NULL; 213 193 IssmDouble* melt_mesh = NULL; 214 194 int* index_ice= NULL; … … 216 196 int nels_ocean; 217 197 int ngrids_ice=femmodel->vertices->NumberOfVertices(); 198 int nels_ice=femmodel->elements->NumberOfElements(); 218 199 lat_ice= xNew<IssmDouble>(ngrids_ice); 219 200 lon_ice= xNew<IssmDouble>(ngrids_ice); 201 icebase= xNew<IssmDouble>(ngrids_ice); 220 202 melt_mesh= xNew<IssmDouble>(ngrids_ice); 203 204 /*Recover mesh and inputs needed*/ 205 femmodel->parameters->FindParam(&rho_ice,MaterialsRhoIceEnum); 221 206 femmodel->GetMesh(femmodel->vertices,femmodel->elements,&x_ice,&y_ice,&z_ice,&index_ice); 207 femmodel->parameters->FindParam(&oceangridx,&ngrids_ocean,OceanGridXEnum); 208 femmodel->parameters->FindParam(&oceangridy,&ngrids_ocean,OceanGridYEnum); 222 209 BamgTriangulatex(&index_ocean,&nels_ocean,oceangridx,oceangridy,ngrids_ocean); 210 base_oceangrid= xNew<IssmDouble>(ngrids_ocean); 211 oceanmelt = xNew<IssmDouble>(ngrids_ocean); 212 223 213 femmodel->vertices->LatLonList(&lat_ice,&lon_ice); 214 215 /*Interpolate ice base onto ocean grid*/ 216 // InputUpdateFromVectorx(femmodel,melt_mesh,BasalforcingsFloatingiceMeltingRateEnum,VertexSIdEnum); 217 InterpFromMeshToMesh2dx(&base_oceangrid,index_ice,lon_ice,lat_ice,ngrids_ice,nels_ice, 218 icebase,ngrids_ice,1, 219 oceangridx,oceangridy,ngrids_ocean,NULL); 220 221 /*Send and receive data*/ 222 ISSM_MPI_Send(&time,1,ISSM_MPI_DOUBLE,0,10001001,tomitgcmcomm); 223 ISSM_MPI_Recv(&oceantime,1,ISSM_MPI_DOUBLE,0,10001002,tomitgcmcomm,&status); 224 if((oceantime - time > 0.1*yts) & (oceantime - time < -0.1*yts)) _error_("Ocean and ice time are starting to diverge"); 225 ISSM_MPI_Recv(oceanmelt,ngrids_ocean,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status); 226 ISSM_MPI_Send(base_oceangrid,ngrids_ocean,ISSM_MPI_DOUBLE,0,10001008,tomitgcmcomm); 227 228 /*Interp melt onto ice grid*/ 224 229 InterpFromMeshToMesh2dx(&melt_mesh,index_ocean,oceangridx,oceangridy,ngrids_ocean,nels_ocean, 225 230 oceanmelt,ngrids_ocean,1, 226 231 lon_ice,lat_ice,ngrids_ice,NULL); 232 233 for(int i=0;i<ngrids_ice;i++) melt_mesh[i]=-melt_mesh[i]/rho_ice; //heat flux provided by ocean is in kg/m^2/s 227 234 InputUpdateFromVectorx(femmodel,melt_mesh,BasalforcingsFloatingiceMeltingRateEnum,VertexSIdEnum); 235 236 /*Delete*/ 228 237 xDelete<IssmDouble>(lat_ice); 229 238 xDelete<IssmDouble>(lon_ice); … … 237 246 xDelete<IssmDouble>(oceanmelt); 238 247 xDelete<IssmDouble>(icebase); 248 xDelete<IssmDouble>(base_oceangrid); 239 249 } 240 250 #else -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
r22749 r22798 105 105 parameters->AddObject(iomodel->CopyConstantObject("md.transient.iscoupler",TransientIscouplerEnum)); 106 106 parameters->AddObject(iomodel->CopyConstantObject("md.transient.isoceancoupling",TransientIsoceancouplingEnum)); 107 parameters->AddObject(iomodel->CopyConstantObject("md.materials.rho_ice",MaterialsRhoIceEnum)); 107 108 parameters->AddObject(iomodel->CopyConstantObject("md.transient.amr_frequency",TransientAmrFrequencyEnum)); 108 109 parameters->AddObject(iomodel->CopyConstantObject("md.gia.cross_section_shape",GiaCrossSectionShapeEnum)); -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r22787 r22798 200 200 MasstransportRequestedOutputsEnum, 201 201 MasstransportStabilizationEnum, 202 MaterialsRhoIceEnum, 202 203 MeltingOffsetEnum, 203 204 MeshAverageVertexConnectivityEnum, … … 834 835 MaterialsRheologyLawEnum, 835 836 MaterialsRhoFreshwaterEnum, 836 MaterialsRhoIceEnum,837 837 MaterialsRhoSeawaterEnum, 838 838 MaterialsTemperateiceconductivityEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r22787 r22798 208 208 case MasstransportRequestedOutputsEnum : return "MasstransportRequestedOutputs"; 209 209 case MasstransportStabilizationEnum : return "MasstransportStabilization"; 210 case MaterialsRhoIceEnum : return "MaterialsRhoIce"; 210 211 case MeltingOffsetEnum : return "MeltingOffset"; 211 212 case MeshAverageVertexConnectivityEnum : return "MeshAverageVertexConnectivity"; … … 838 839 case MaterialsRheologyLawEnum : return "MaterialsRheologyLaw"; 839 840 case MaterialsRhoFreshwaterEnum : return "MaterialsRhoFreshwater"; 840 case MaterialsRhoIceEnum : return "MaterialsRhoIce";841 841 case MaterialsRhoSeawaterEnum : return "MaterialsRhoSeawater"; 842 842 case MaterialsTemperateiceconductivityEnum : return "MaterialsTemperateiceconductivity"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r22787 r22798 211 211 else if (strcmp(name,"MasstransportRequestedOutputs")==0) return MasstransportRequestedOutputsEnum; 212 212 else if (strcmp(name,"MasstransportStabilization")==0) return MasstransportStabilizationEnum; 213 else if (strcmp(name,"MaterialsRhoIce")==0) return MaterialsRhoIceEnum; 213 214 else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum; 214 215 else if (strcmp(name,"MeshAverageVertexConnectivity")==0) return MeshAverageVertexConnectivityEnum; … … 259 260 else if (strcmp(name,"SealevelriseTidalLoveK")==0) return SealevelriseTidalLoveKEnum; 260 261 else if (strcmp(name,"SealevelriseTransitions")==0) return SealevelriseTransitionsEnum; 261 else if (strcmp(name,"SealevelriseUElastic")==0) return SealevelriseUElasticEnum;262 262 else stage=3; 263 263 } 264 264 if(stage==3){ 265 if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum; 265 if (strcmp(name,"SealevelriseUElastic")==0) return SealevelriseUElasticEnum; 266 else if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum; 266 267 else if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum; 267 268 else if (strcmp(name,"SettingsRecordingFrequency")==0) return SettingsRecordingFrequencyEnum; … … 382 383 else if (strcmp(name,"BasalforcingsPicoBasinId")==0) return BasalforcingsPicoBasinIdEnum; 383 384 else if (strcmp(name,"BasalforcingsPicoBoxId")==0) return BasalforcingsPicoBoxIdEnum; 384 else if (strcmp(name,"BasalforcingsPicoSubShelfOceanOverturning")==0) return BasalforcingsPicoSubShelfOceanOverturningEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"BasalforcingsPicoSubShelfOceanSalinity")==0) return BasalforcingsPicoSubShelfOceanSalinityEnum; 388 if (strcmp(name,"BasalforcingsPicoSubShelfOceanOverturning")==0) return BasalforcingsPicoSubShelfOceanOverturningEnum; 389 else if (strcmp(name,"BasalforcingsPicoSubShelfOceanSalinity")==0) return BasalforcingsPicoSubShelfOceanSalinityEnum; 389 390 else if (strcmp(name,"BasalforcingsPicoSubShelfOceanTemp")==0) return BasalforcingsPicoSubShelfOceanTempEnum; 390 391 else if (strcmp(name,"Base")==0) return BaseEnum; … … 505 506 else if (strcmp(name,"Sealevel")==0) return SealevelEnum; 506 507 else if (strcmp(name,"SealevelriseDeltathickness")==0) return SealevelriseDeltathicknessEnum; 507 else if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"SedimentHeadOld")==0) return SedimentHeadOldEnum; 511 if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum; 512 else if (strcmp(name,"SedimentHeadOld")==0) return SedimentHeadOldEnum; 512 513 else if (strcmp(name,"SedimentHeadResidual")==0) return SedimentHeadResidualEnum; 513 514 else if (strcmp(name,"SigmaNN")==0) return SigmaNNEnum; … … 628 629 else if (strcmp(name,"WaterfractionDrainageIntegrated")==0) return WaterfractionDrainageIntegratedEnum; 629 630 else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum; 630 else if (strcmp(name,"Waterheight")==0) return WaterheightEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum; 634 if (strcmp(name,"Waterheight")==0) return WaterheightEnum; 635 else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum; 635 636 else if (strcmp(name,"InputsEND")==0) return InputsENDEnum; 636 637 else if (strcmp(name,"Absolute")==0) return AbsoluteEnum; … … 751 752 else if (strcmp(name,"GaussTetra")==0) return GaussTetraEnum; 752 753 else if (strcmp(name,"GaussTria")==0) return GaussTriaEnum; 753 else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"GenericParam")==0) return GenericParamEnum; 757 if (strcmp(name,"GenericOption")==0) return GenericOptionEnum; 758 else if (strcmp(name,"GenericParam")==0) return GenericParamEnum; 758 759 else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum; 759 760 else if (strcmp(name,"GiaIvinsAnalysis")==0) return GiaIvinsAnalysisEnum; … … 856 857 else if (strcmp(name,"MaterialsRheologyLaw")==0) return MaterialsRheologyLawEnum; 857 858 else if (strcmp(name,"MaterialsRhoFreshwater")==0) return MaterialsRhoFreshwaterEnum; 858 else if (strcmp(name,"MaterialsRhoIce")==0) return MaterialsRhoIceEnum;859 859 else if (strcmp(name,"MaterialsRhoSeawater")==0) return MaterialsRhoSeawaterEnum; 860 860 else if (strcmp(name,"MaterialsTemperateiceconductivity")==0) return MaterialsTemperateiceconductivityEnum;
Note:
See TracChangeset
for help on using the changeset viewer.