AM2.1p1_Mc_BLING_LPJ_05 ======================= Wed Jan 7 12:26:38 CET 2026 AM2.1p1_Mc_BLING_LPJ_05 is an experiment setup, where LPJ is plugged into a crossover between CM2.1p1 and CM2M_coarse_BLING. AM2 is run at the resolution of CM2.1p1, MOM5 is run at the resolution of CM2M_coarse_BLING, land_lad resp. LPJmL are run at 0.5x0.5 deg resolution. Motivation ---------- In CM2M_coarse_BLING, and with that also in CM2M_coarse_BLING_LPJ_05, we get a split ITCZ pattern, especially too low precipitation over the Amazon region. Without bias corrections, that leads to dying Amazon forest, Some bias correction approaches were implemented and tested, which yielded nice precipitation and forest growth in the Amazon, but had severe disadvantages in other parts of the model. E.g. Unlimited sea level rise, or rivers sucking water from the sea shore. Additionally, we find severe temperature biases, especially over Arctic and Antarctic regions, which are hardly acceptable to investigate tipping points, or interactions of planetary boundaries. However, the original CM2.1p1 shows much better ITCZ, precipitation and temperature biases. Therefore, an attempt was made earlier to couple LPJmL into CM2.1p1 . For that setup, the higher ocean grid resolution induces differences in the land-sea-mask, which requires changes to the LPJmL input files, and especially to the river drainage map. See exp/CM2.1p1_LPJ_05/README-CM2.1p1_LPJ_05 . The first coupled runs of CM2.1p1_LPJ_05 crashed with "Error from ocean_thickness_mod: Free surface penetrating rock! Model unstable." I guess that indicates problems with ocean water density, most probably induced by problems with regridding the input data and the river map. This setup now is an attempt to get advantages from CM2.1p1 and CM2M_coarse_BLING_LPJ_05, while avoiding the problems. We are pretty sure that our LPJmL input data and river drainage maps for the CM2M_coarse_BLING_LPJ_05 are OK, thus we use ocean and land configurations from that setup, and combine it with the atmosphere configuration from CM2.1p1. The code is identical, we ``just'' have to merge the grid descriptions, INPUT/ and RESTART files. # First make sure that we are using the ifort compiler, because # currently the code produced by ifx/icx yields incorrect results during # grid exchange. module load intel/oneAPI/2023.2.0 cd .../POEM/exp mkdir -p AM2.1p1_Mc_BLING_LPJ_05/INPUT cd AM2.1p1_Mc_BLING_LPJ_05/INPUT # use CM2M_coarse_BLING as base configuration ln -s ../../CM2M_coarse_BLING/INPUT/* . # use the 0.5 degree land grid rm grid_spec.nc atmos_mosaicXland_mosaic.nc land_hgrid.nc land_mosaic.nc land_mosaicXocean_mosaic.nc cp -av ../../CM2M_coarse_BLING_LPJ_05/INPUT/land_hgrid.nc . cp -av ../../CM2M_coarse_BLING_LPJ_05/INPUT/land_mosaic.nc . # the make_coupler_mosaic tool requires a dimension named ntiles # but this is not contained in the GFDL-provided topog.nc files # sigh. the name topog.nc is hardcoded in the ocean topography module rm topog.nc cp -av ../../CM2M_coarse_BLING_LPJ_05/INPUT/topog.nc . # use the CM2.1p1 atmos grid rm atmos_hgrid.nc atmos_mosaic.nc ln -s ../../CM2.1p1/INPUT/atmos_hgrid.nc . ln -s ../../CM2.1p1/INPUT/atmos_mosaic.nc . ../../../src/tools/make_coupler_mosaic/make_coupler_mosaic \ --ocean_mosaic ocean_mosaic.nc \ --land_mosaic land_mosaic.nc \ --atmos_mosaic atmos_mosaic.nc \ --ocean_topog topog.nc \ --check # created # ocean_mask.nc # land_mask.nc # atmos_mosaic_tile1Xland_mosaic_tile1.nc # atmos_mosaic_tile1Xocean_mosaic_tile1.nc # land_mosaic_tile1Xocean_mosaic_tile1.nc # mosaic.nc mv mosaic.nc grid_spec.nc # Lets see what else files we need to use from CM2.1p1 instead of CM2M_coarse_BLING diff -r -q -s CM2.1p1/INPUT/ CM2M_coarse_BLING/INPUT | grep -v identical ## also removed from the following list all files which are treated already above, or belong to ocean or land. #Files CM2.1p1/INPUT/aerosol.climatology.nc and CM2M_coarse_BLING/INPUT/aerosol.climatology.nc differ rm aerosol.climatology.nc ln -s ../../CM2.1p1/INPUT/aerosol.climatology.nc . #Only in CM2.1p1/INPUT/: atmos_coupled.res.nc ln -s ../../CM2.1p1/INPUT/atmos_coupled.res.nc . #Only in CM2M_coarse_BLING/INPUT: c14_atm_hist.nc #Only in CM2.1p1/INPUT/: cfc.bc.nc ## cfc.bc.nc is used by the generic_CFC obgc model #Files CM2.1p1/INPUT/chl.nc and CM2M_coarse_BLING/INPUT/chl.nc differ ## used by ocean_shortwave_gfdl module #Only in CM2.1p1/INPUT/: fv_rst.res ln -s ../../CM2.1p1/INPUT/fv_rst.res . #Only in CM2.1p1/INPUT/: fv_srf_wnd.res ln -s ../../CM2.1p1/INPUT/fv_srf_wnd.res . #Only in CM2.1p1/INPUT/: mg_drag.res.nc ln -s ../../CM2.1p1/INPUT/mg_drag.res.nc . #Only in CM2.1p1/INPUT/: physics_driver.res.nc ln -s ../../CM2.1p1/INPUT/physics_driver.res.nc . #Only in CM2.1p1/INPUT/: radiation_driver.res.nc ln -s ../../CM2.1p1/INPUT/radiation_driver.res.nc . #Only in CM2.1p1/INPUT/: radiative_gases.res.nc ln -s ../../CM2.1p1/INPUT/radiative_gases.res.nc . #Only in CM2.1p1/INPUT/: strat_cloud.res.nc ln -s ../../CM2.1p1/INPUT/strat_cloud.res.nc . #Only in CM2M_coarse_BLING/INPUT: surf.res #Only in CM2M_coarse_BLING/INPUT: surf.res-onerec #Only in CM2M_coarse_BLING/INPUT: surf.res-stream #Only in CM2M_coarse_BLING/INPUT: surf.res-unformatted #Only in CM2M_coarse_BLING/INPUT: surf.res-xxxxLE # ../../CM2M_coarse_BLING/INPUT/surf.res -> surf.res-xxxxLE # ../../CM2M_coarse_BLING/INPUT/surf.res-onerec # ../../CM2M_coarse_BLING/INPUT/surf.res-stream # ../../CM2M_coarse_BLING/INPUT/surf.res-unformatted # ../../CM2M_coarse_BLING/INPUT/surf.res-xxxxLE ------------ Now we have a problem: For CM2M_coarse_BLING we could extract the surf.res data from the fv_rst.res.nc file that Eric Galbraith provided. For CM2.1p1, they provide fv_rst.res in raw binary format, which is somewhat hard to handle/extract with external tools. Approach: in CM2.1p1/input.nml set parameter &fv_core_nml/restart_format = 'netcdf' With that, the model reads the existing raw binary INPUT/fv_rst.res , and writes out RESTART/fv_rst.res.nc . Voila. echo -n xxxx > surf.res-xxxxLE ferret use fv_rst.res.nc list/file=surf.res-stream/format="stream" Surface_geopotential/9.80 quit cat surf.res-stream >> surf.res-xxxxLE ln -s surf.res-xxxxLE surf.res chmod a-w surf* To read this file, the CM2 code must _not_ be run with F_UFMTENDIAN=big #cat surf.res-streamBE >> surf.res-xxxxBE #ferret #use fv_rst.res.nc #list/file=surf.res-streamBE/format="stream"/endian=big Surface_geopotential/9.80 #quit #cat surf.res-streamBE >> surf.res-xxxxBE # #Sigh. both files are identical. Apparently, option "/endian=big" #is used only for NetCDF4 files but not for stream files. # #rm surf.res-streamBE surf.res-xxxxBE -------- Fri Jan 16 14:47:54 CET 2026 However, for initial conditions we can use the GFDL-provided fv_rst.res , which already includes the "phis" data. For further restarts, we use the newly created fv_rst.res.nc files. With this, we seem to have all the INPUT/ files. Now we must prepare the input.nml For now, we use the short time steps from the CM2.1p1 configuration dt_cpld = 7200, dt_atmos = 1800, which is even shorter than the 1h atmos timestep for our CM2Mc-based POEM setup. Hopefully, we can eventually come back to 1h timesteps???