WikiPrint - from Polar Technologies


MOSAIX is a small set of fortran routines, bash scripts, python scripts and xml files allowing to generate coupling weights for IPSL Earth System Model. It replaces the old MOSAIC software. It uses XIOS as a library to compute weights. In the present state, it can handle ORCA, LMDZ lon/lat and DYNAMICO grids.

MOSAIX can generate 1st and 2nd order conservative interpolation weights.

As MOSAIX uses XIOS, it works in parallel, using MPI distributed memory.

Compatibility with MOSAIC


Future work

Known problems


MOSAIX and the old method MOZAIC are very similar for temperature, albedo, ice cover and heat and water fluxes. However, MOSAIX generates weights that are slighlty different from those generated by MOZAIC. The global conservation is better.

For wind stress, the old method relies on OASIS bilinear interpolation (from the Scrip library). MOSAIX generates 2nd order weights.

For runoff, the method is different. We have run three simulations with IPSLCM6 LR to check the new weights :

Results available at tgcc:$CCCSTOREDIR/../../gencmip6/p86caub/IGCM_OUT/IPSLCM6/DEVT/piControl

An intermonitoring is available at

A CESMEP atlas is under preparation.

Code availability


MOSAIX has been tested on Curie (old TGCC computer) and Irene (TGCC), and on a Mac.


Input files

MOSAIX needs files describing the grid of the models. See CreateWeightsMask.bash and the bottom of this page.

Output files

All netCDF files have a detailed header.

Scripts and codes

1) Defines a coastal band on land in the atmosphere model. For LMDZ rectilinear grids, the width of this band is parametrized, in grid points. For ico grids, the band contains only point with a fraction of ocean in ]0,1[.

2) Defines a coastal band on ocean in the ocean model. The width of this band is parametrized.

3) An atmosphere point of the coastal band is linked to an ocean point in the coastal band if the distance between the two is less than searchRadius.

1) The atmosphere model integrate the calving over on specific regions. Presently the regions are three latitudinal bands with limits 90°S/40°S/50°N/90°N.

2) The weights distribute the calving in the ocean in the corresponding latitudinal bands. By default, the distribution is uniform.

3) For the southernmost band, it is possible to use a geographical distribution read in a file. These files are currently available for eORCA1 and eORCA025.


Generating input grid files

Generating icosahedral grid in double precision using XIOS:

Here are the main changes:

     <domain id="dom_glo" data_dim="2" />
     <domain id="dom_glo_p8"  domain_ref="dom_glo"  prec="8" />
     <domain id="greordered"  domain_ref="dom_glo">
     <reorder_domain invert_lat="true" shift_lon_fraction="0"/>


     <grid id="grid_glo">
        <domain domain_ref="dom_glo" /> 
     <grid id="grid_glo_p8"> 
        <domain domain_ref="dom_glo_p8" />  

<field_definition level="1" prec="4" operation="average" freq_op="1ts" enabled=".true." default_value="9.96921e+36" domain_ref="dom_glo">
    <field_group id="fields_2D_p8" grid_ref="grid_glo_p8" prec="8"> 
      <field id="aire_p8" field_ref="aire" long_name="Grid area p8" unit="-"    />
      <field id="fract_oce_p8" field_ref="fract_oce" long_name="Fraction oce p8"   unit="1" /> 
      <field id="fract_sic_p8" field_ref="fract_sic"   long_name="Fraction sic p8"   unit="1" /> 
      <field id="fract_oce_plus_sic_p8" long_name="Fraction oce plus sic p8"   unit="1" /> 
      <field id="mask_oce_plus_sic_p8" long_name="Masque oce plus sic p8"  unit="1" /> 

    <file_group id="defile"> 
        <file id="grid_p8" name="grid_p8" output_freq="1d" sync_freq="10d" output_level="2" enabled="true" timeseries="none" time_counter="none"> 
          <field_group grid_ref="grid_glo_p8" ts_enabled="true" freq_op="1d" expr="@this">  
              <field field_ref="aire_p8" level="1" operation="once"  /> 
              <field field_ref="fract_oce_p8" level="1" operation="once" /> 
              <field field_ref="fract_sic_p8" level="1" operation="once" />  
          <field_group grid_ref="grid_glo_p8" ts_enabled="true" freq_op="1d" >  
              <field field_ref="fract_oce_plus_sic_p8" level="1" > fract_oce + fract_sic </field>   
              <field field_ref="mask_oce_plus_sic_p8" level="1" > ((fract_oce + fract_sic) &gt; 0) ? 1 : 0 </field>