21 if(!parcom)
_error_(
"TransferForcing error message: could not find ToMITgcmCommEnum communicator");
24 int oceangridnxsize,oceangridnysize,ngrids_ocean,nels_ocean;
39 int* index_ice = NULL;
40 int* index_ocean = NULL;
55 ngrids_ocean=oceangridnxsize*oceangridnysize;
63 oceangridx = xNew<IssmDouble>(ngrids_ocean);
65 oceangridy = xNew<IssmDouble>(ngrids_ocean);
73 oceangridx=xNew<IssmDouble>(ngrids_ocean);
74 oceangridy=xNew<IssmDouble>(ngrids_ocean);
88 BamgTriangulatex(&index_ocean,&nels_ocean,oceangridx,oceangridy,ngrids_ocean);
93 const char* name =
"default";
94 odouble->
name =xNew<char>(strlen(name)+1);
95 memcpy(odouble->
name,name,(strlen(name)+1)*
sizeof(
char));
96 odouble->
value=+9999.;
101 icebase,ngrids_ice,1,oceangridx,oceangridy,ngrids_ocean,options);
103 xDelete<IssmDouble>(icebase);
108 const char* name2 =
"default";
109 odouble2->
name =xNew<char>(strlen(name2)+1);
110 memcpy(odouble2->
name,name2,(strlen(name2)+1)*
sizeof(
char));
116 icemask,ngrids_ice,1,oceangridx,oceangridy,ngrids_ocean,options2);
118 xDelete<IssmDouble>(icemask);
121 for(
int i=0;i<ngrids_ocean;i++)
if(icemask_oceangrid[i]>0.) icebase_oceangrid[i]=+9999.;
122 xDelete<IssmDouble>(icemask_oceangrid);
124 if(init_stage==
true){
135 if((oceantime - time > 0.1*yts) & (oceantime - time < -0.1*yts))
_error_(
"Ocean and ice time are starting to diverge");
136 oceanmelt = xNew<IssmDouble>(ngrids_ocean);
141 if(my_rank!=0) oceanmelt=xNew<IssmDouble>(ngrids_ocean);
146 oceanmelt,ngrids_ocean,1,
147 lon_ice,lat_ice,ngrids_ice,NULL);
149 for(
int i=0;i<ngrids_ice;i++) melt_mesh[i]=-melt_mesh[i]/rho_ice;
154 xDelete<int>(index_ice);
155 xDelete<int>(index_ocean);
156 xDelete<IssmDouble>(lat_ice);
157 xDelete<IssmDouble>(lon_ice);
158 xDelete<IssmDouble>(x_ice);
159 xDelete<IssmDouble>(y_ice);
160 xDelete<IssmDouble>(icebase_oceangrid);
161 xDelete<IssmDouble>(oceangridx);
162 xDelete<IssmDouble>(oceangridy);
163 xDelete<IssmDouble>(melt_mesh);
164 xDelete<IssmDouble>(oceanmelt);