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 . # ocmip2_siple_co2_atm_am2_bc-1-9999.nc must be on atmos resolution, # but is not in CM2.1p1 . But we can take it from om3_core3 rm ocmip2_siple_co2_atm_am2_bc-1-9999.nc ln -s ../../om3_core3/INPUT/ocmip2_siple_co2_atm_am2_bc-1-9999.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. Note: that file is in Big-Endian byte order! We must set export F_UFMTENDIAN=big to read it into the model. 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* Note: that file is in Little-Endian byte order! 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??? ----------- Fri Jan 23 12:21:57 CET 2026 Finished first approach to input.nml . Took settings for atmos modules from CM2.1.1, for ocean, sea-ice, land, coupler from CM2M_coarse_BLING-EM3-issue162 . Also data_table and field_table from CM2M_coarse_BLING-EM3-issue162 ---------- Mon Jan 26 11:50:14 CET 2026 First run. Sigh. lots of debug output in grid exchange still enabled. But finished 12 months without crash :-) Note again: Among the initial conditions from CM2.1p1 there is INPUT/fv_rst.res , which is in Big-Endian byte order, and thus needs export F_UFMTENDIAN=big to be set. At the end of the first run, RESTART/fv_rst.res.nc is written in NetCDF format, for which the correct byte ordering is handled transparently inside the NetCDF library. Thus, further restarts do not need F_UFMTENDIAN to be set. ----------- Thu Feb 26 18:06:44 CET 2026 Prepare for runs beyond year 9999: extend data files until year 999999 cd INPUT ncks -d TIME\,453 ocmip2_siple_co2_atm_am2_bc-1-9999.nc -o ocmip2_siple_co2_atm_am2_bc-9999.nc cdo setyear\,999999 ocmip2_siple_co2_atm_am2_bc-9999.nc ocmip2_siple_co2_atm_am2_bc-999999.nc cdo mergetime ocmip2_siple_co2_atm_am2_bc-1-9999.nc ocmip2_siple_co2_atm_am2_bc-999999.nc ocmip2_siple_co2_atm_am2_bc-1-999999.nc Change the corresponding entries in data_table