= Does XIOS add sufficient and accurate attribute metadata to rebuild zoom datasets correctly? =
There appears to be insufficient or incorrect information in zoom domain files to rebuild whole datasets when the zoom region spans more than one XIOS server and is written to multiple files.
For example, consider this zoom in a 8x4 decomposition of ORCA2_ICE_PISCES defined by the following additions to the XML:
{{{
domain_def_nemo.xml:
grid_def_nemo.xml:
file_def_nemo-oce.xml:
@toce_e3t / @e3t
@toce_e3t / @e3t
90
45
intraCommSize > 1)
{
this->writeLocalAttributes(domain->zoom_ibegin,
domain->zoom_ni,
domain->zoom_jbegin,
domain->zoom_nj,
appendDomid);
if (singleDomain)
this->writeLocalAttributes_IOIPSL(dimXid, dimYid,
domain->zoom_ibegin,
domain->zoom_ni,
domain->zoom_jbegin,
domain->zoom_nj,
domain->ni_glo,domain->nj_glo,
server->intraCommRank,server->intraCommSize);
}
}}}
and these functions are:
{{{#!c
void CNc4DataOutput::writeLocalAttributes
(int ibegin, int ni, int jbegin, int nj, StdString domid)
{
try
{
SuperClassWriter::addAttribute(StdString("ibegin").append(domid), ibegin);
SuperClassWriter::addAttribute(StdString("ni" ).append(domid), ni);
SuperClassWriter::addAttribute(StdString("jbegin").append(domid), jbegin);
SuperClassWriter::addAttribute(StdString("nj" ).append(domid), nj);
}
catch (CNetCdfException& e)
{
StdString msg("On writing Local Attributes: ");
msg.append("In the context : ");
CContext* context = CContext::getCurrent() ;
msg.append(context->getId()); msg.append("\n");
msg.append(e.what());
ERROR("CNc4DataOutput::writeLocalAttributes \
(int ibegin, int ni, int jbegin, int nj, StdString domid)", << msg);
}
}
}}}
and
{{{#!c
void CNc4DataOutput::writeLocalAttributes_IOIPSL(const StdString& dimXid, const StdString& dimYid,
int ibegin, int ni, int jbegin, int nj, int ni_glo, int nj_glo, int rank, int size)
{
CArray array(2) ;
try
{
SuperClassWriter::addAttribute("DOMAIN_number_total",size ) ;
SuperClassWriter::addAttribute("DOMAIN_number", rank) ;
array = SuperClassWriter::getDimension(dimXid) + 1, SuperClassWriter::getDimension(dimYid) + 1;
SuperClassWriter::addAttribute("DOMAIN_dimensions_ids",array) ;
array=ni_glo,nj_glo ;
SuperClassWriter::addAttribute("DOMAIN_size_global", array) ;
array=ni,nj ;
SuperClassWriter::addAttribute("DOMAIN_size_local", array) ;
array=ibegin+1,jbegin+1 ;
SuperClassWriter::addAttribute("DOMAIN_position_first", array) ;
array=ibegin+ni-1+1,jbegin+nj-1+1 ;
SuperClassWriter::addAttribute("DOMAIN_position_last",array) ;
array=0,0 ;
SuperClassWriter::addAttribute("DOMAIN_halo_size_start", array) ;
SuperClassWriter::addAttribute("DOMAIN_halo_size_end", array);
SuperClassWriter::addAttribute("DOMAIN_type",string("box")) ;
}
catch (CNetCdfException& e)
{
StdString msg("On writing Local Attributes IOIPSL \n");
msg.append("In the context : ");
CContext* context = CContext::getCurrent() ;
msg.append(context->getId()); msg.append("\n");
msg.append(e.what());
ERROR("CNc4DataOutput::writeLocalAttributes_IOIPSL \
(int ibegin, int ni, int jbegin, int nj, int ni_glo, int nj_glo, int rank, int size)", << msg);
}
}
}}}