mom4_Aeolus_lad-init-21-mar-clim ================================ MOM4/5 with land_lad and Aeolus at 96x48, but ocean parameterisation taken from CM2M_coarse_BLING. This is an attempt to couple Aelous with MOM4 and land_lad. It is derived from CM2M_coarse_BLING , but with the atmosphere component replaced with Aeolus. In contrast to the mom4_Aeolus_lad_Xcoarse setup, here the ocean setup is taken identical from the CM2M_coarse_BLING. Model resolution: here om3Xcoarse CM2M_coarse_BLING om3_core Ocean 120x80x23 120x80x23 120x80x23 360x200x50 Land 96x60 144x90 96x60 144x90 Atmos 96x48 144x90 96x60 144x90 Supergrid resolutions: Ocean: 240x160 240x160 240x160 720x400 Land: 192x120 288x180 192x120 288x180 Atmos: 192x96 288x180 192x120 288x180 mkdir -p exp/mom4_Aeolus_lad-init-21-mar-clim/INPUT cd exp/mom4_Aeolus_lad-init-21-mar-clim/INPUT # first symlink all INPUT files from CM2M_coarse_BLING, # just to make easily sure that we get as much matching as possible. ln -s ../../../exp/CM2M_coarse_BLING/INPUT/* . # this also symlinks many things that we definitly wont need here. # clean up some of that. rm -f cns_* \ h2o* \ *_gblannualdata \ esf_sw_input_data* \ README_atmos2004 \ aerosol.climatology.nc \ aerosol.optical.dat \ asmsw_data.nc \ eftsw4str \ emissions.ch3i.GEOS4x5.nc \ extlw_data.nc \ extsw_data.nc \ o3.climatology.nc \ o39001200_hi00_data \ o39001200_hi92_data \ lean_solar_spectral_data.dat \ id1* \ id2* # make a solid copy of the configuration files rm *table input.nml cp -p ../../CM2M_coarse_BLING/INPUT/*table \ ../../CM2M_coarse_BLING/INPUT/input.nml \ . # # begin of grid generation # # ocean_mosaic.nc # ocean_hgrid.nc # ocean_vgrid.nc # were already sym-linked from CM2M_coarse_BLING above. # land_hgrid.nc # land_mosaic.nc # were also sym-linked. # 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 ncap2 -o topog.nc -s 'defdim("ntiles",1)' ../../../exp/CM2M_coarse_BLING/INPUT/topog.nc rm -f atmos_hgrid.nc \ atmos_mosaic.nc \ *mosaic*X* \ grid_spec.nc \ ocean_mask.nc \ land_mask.nc ../../../src/tools/make_hgrid/make_hgrid --grid_type regular_lonlat_grid --nxbnd 2 --nybnd 2 --xbnds 0\,360 --ybnds -90\,90 \ --simple_dx 3.75 --simple_dy 3.0 \ --nlon 192 --nlat 96 \ --grid_name aeolus_hgrid ../../../src/tools/make_solo_mosaic/make_solo_mosaic --dir . --num_tiles 1 \ --tile_file aeolus_hgrid.nc --mosaic_name aeolus_mosaic ../../../src/tools/make_coupler_mosaic/make_coupler_mosaic \ --atmos_mosaic aeolus_mosaic.nc \ --ocean_mosaic ocean_mosaic.nc \ --ocean_topog topog.nc \ --land_mosaic land_mosaic.nc \ --mosaic_name grid_spec \ --check # # For the land_lad model # > CM2M_coarse_BLING CM2.1p1 EBM ICCMp1 > horizontal grid cells 96x60 144x90 144x90 144x90 > resolution in degrees 3.75x3.0 2.5x2.0 2.5x2.0 2.5x2.0 > > soil/soil.F90 > soil.res.nc (if exists) - 144x90 - - > soil.res (if exists) - - - - > > > soil/land_properties.F90 > cover_type_field 360x180 360x180 360x180 360x180 (only EBM and ICCMp1 identical) > cover_type_field.nc 360x180 360x180 360x180 360x180 (all identical) > ground_type_field 360x180 360x180 360x180 360x180 (all identical) > groundwater_residence_time_field 360x180 360x180 360x180 360x180 (all identical) > > > soil/rivers.F90 > river_destination_field 96x80 96x80 96x80 96x60 (all different!) > > vegetation/vegetation.F90 > vegetation.res.nc (if exists) - 144x90 - - > vegetation.res (if exists) - - - - > > land_param/climap_albedo.F90 > albedo.data.nc 180x90 180x90 180x90 180x90 > albedo.data - - - - > ss_albedo.data (optional) - - - - > > topography/topography.F90 > navy_topography.data.nc 2160x1080 2160x1080 2160x1080 2160x1080 (all identical) > > not used anywhere?? - might be diagnostic output files? > soil_albedo.nc 360x180 - - - > groundwater_residence.nc 360x180 - - - > ground_type.nc 360x180 - - - ## data_table # Check whether the ATM entries are used in the coupler, or in the CM2 code. # If only in the CM2 code, they can be removed from data_table. # However, if not, it should not harm. # Leave intact the constant setting for ``normal'' CO2 "ATM" , "co2_bot" , "" , "" , .false. , 286.0e-6 # apparently this forces a globally and temporal constant CO2 concentration # However, this used inside the CM2 atmosphere code, and not used in Aeolus. # TODO: check if it this used in the coupler code. ## field table for now, leave it as is. ## diag_table # for first experiments, use a table that puts out all the fields that go through coupler as instant values, # not aggregated by averaging or anything. # for further experiments, set diag tables for instant (very short runs), # daily (short runs) and monthly output (runs over several years) ## input.nml # strip out all entries for the CM2 atmosphere # insert entries for Aeolus # In this input.nml we use for &ThreeLayerClouds_nml a set of parameters that # was found with SimEnv-based parameter tuning. The program test_Clouds-3lc.cpp # was used to run the 3-layer cloud scheme inside the Aeolus infrastructure (SphericalGrid with its # resolution, calculation of PBL height, lapse rate, He, ...) # The parameter set was found on May 16 2013 in # /iplex/01/climber3/petri/mom5.0.2/src/atmos_potsdam3/AtmosphereIII_test/simenv_Clouds3-opt/run006373-0.0459834 # That optimization run was started with a parameter set that Alexey Eliseev had found as optimal # in his stand-alone tuning of the 3-layer cloud scheme. # # for Aeolus # Usually, Aeolus uses longitudes runnning -180 to 180 in its data files. However, the FMS atmosphere grid runs 0 to 360 degrees. To make Aeolus use those 0 to 360 degrees, the flag lon_0_360 must be set to true in the namelist parameters. The script rotate_0to360.sh uses ferret to do the axis rotation. However, the initial conditions that are derived from CM2M_coarse_BLING restart files are already on 0-to-360. Also, since r2481 (Mon, 02 Sep 2013), Aeolus uses the FMS topography and does not need a topography of its own. ## ## Initial Conditions ## The CM2M_coarse_BLING setup provides restart files for the ocean and ice, but land and atmosphere do cold-start from artificial initial conditions. However, Aeolus currently is not designed to handle large differences between planet surface and lowest atmosphere layer. First was approach to run CM2M_coarse_BLING for 50 years, then use its RESTART file to construct initial conditions for Aeolus, a snapshot for 01-Jan-0052 . But that yielded extreme cold spells in Siberia, and drove Aeolus into unstable regime. Second appraoch was to take hald-daily RESTART snapshots over year 0052 of the CM2M_coarse_BLING run, and use the annual average as initial conditions. Problem: that does not represent a meaningful point in the annual solar cycle. Third approach: create a 30-year climatology for one day of the year. We choose 21st of March. Because CM2M_coarse_BLING simluates the diurnal solar cycle, we take 4 snapshots for each of the 30 21-March days, to average-out the diurnal cycle, so that it is more suitable for Aeolus. This was done for the setup mom4_Aeolus_lad_Xcoarse: ===================== mkdir /scratch/01/petri/RESTART-0321clim for i in *RESTART* ; do tar xvjf $i -C /scratch/01/petri/RESTART-0321clim ; done cd /scratch/01/petri/RESTART-0321clim for i in `ls -1 0052032100.RESTART/ | grep nc` ; do echo $i ; ncea -y avg */$i $i ; done cd ...../exp/mom4_Aeolus_lad_Xcoarse/ mkdir INPUT-Restart-from-21-mar-clim cd INPUT-Restart-from-21-mar-clim/ mkdir CM2M_coarse_BLING-Restart-21-mar-clim/ mv /scratch/01/petri/RESTART-0321clim/*.nc CM2M_coarse_BLING-Restart-21-mar-clim/ ../../../src/tools/fregrid/fregrid \ --input_mosaic ../../CM2M_coarse_BLING/INPUT/atmos_mosaic.nc \ --output_mosaic ./aeolus_mosaic.nc \ --input_file CM2M_coarse_BLING-Restart-21-mar-clim/atmos_coupled.res.nc \ --output_file atmos_coupled.res.prelim.nc \ --scalar_field lprec\,fprec\,gust\,t_bot\,q_bot # fregrid complains that it cannot determine the axis for dimensions pfull, lat, lon. # Thus, add apropriate attributes: rm -f atmos_tracers.res.nc ncatted -a cartesian_axis\,pfull\,c\,c\,"Z" \ -a cartesian_axis\,lat\,c\,c\,"Y" \ -a cartesian_axis\,lon\,c\,c\,"X" \ CM2M_coarse_BLING-Restart-21-mar-clim/atmos_tracers.res.nc ../../../src/tools/fregrid/fregrid \ --input_mosaic ../../CM2M_coarse_BLING/INPUT/atmos_mosaic.nc \ --output_mosaic ./aeolus_mosaic.nc \ --input_file CM2M_coarse_BLING-Restart-21-mar-clim/atmos_tracers.res.nc \ --output_file atmos_tracers.res.nc \ --scalar_field sphum\,liq_wat\,ice_wat\,cld_amt ncks -A -v glon_bnd\,glat_bnd\,dt CM2M_coarse_BLING-Restart-21-mar-clim/atmos_coupled.res.nc atmos_coupled.res.prelim.nc ncap2 -s 'glon_bnd=96;glat_bnd=48;dt=3600;' atmos_coupled.res.prelim.nc atmos_coupled.res.nc rm -f atmos_coupled.res.prelim.nc ncrename -v q_bot\,QS -v t_bot\,TS atmos_coupled.res.nc AEOLUS_input_1976-2001_yseasmean.cdf-fromCM2Mrestart ncatted -a units\,TS\,o\,c\,K AEOLUS_input_1976-2001_yseasmean.cdf-fromCM2Mrestart #ncatted -a units\,QS\,o\,c\,"1" AEOLUS_input_1976-2001_yseasmean.cdf-fromCM2Mrestart ncatted -a units\,QS\,d\,c\,"" AEOLUS_input_1976-2001_yseasmean.cdf-fromCM2Mrestart # copy restart data for coupler, ocean, ice and land to INPUT directory so that all # submodels can start with data from consistent time steps. cp -avu CM2M_coarse_BLING-Restart-21-mar-clim/coupler.res \ CM2M_coarse_BLING-Restart-21-mar-clim/ocean_* \ CM2M_coarse_BLING-Restart-21-mar-clim/ice_* \ CM2M_coarse_BLING-Restart-21-mar-clim/soil.res.nc \ CM2M_coarse_BLING-Restart-21-mar-clim/vegetation.res.nc . # the data_table from CM2M_coarse_BLING also specifies to use INPUT/ocmip2_siple_co2_atm_am2_bc-1-9999.nc # that must also be regridded to atmos resolution ncatted -a cartesian_axis\,TIME\,c\,c\,"T" \ ../../../exp/CM2M_coarse_BLING/INPUT/ocmip2_siple_co2_atm_am2_bc-1-9999.nc \ ocmip2_siple_co2_atm_am2_bc-1-9999-prelim.nc ../../../src/tools/fregrid/fregrid \ --input_mosaic ../../../exp/CM2M_coarse_BLING/INPUT/atmos_mosaic.nc \ --output_mosaic ./aeolus_mosaic.nc \ --input_file ocmip2_siple_co2_atm_am2_bc-1-9999-prelim.nc \ --output_file ocmip2_siple_co2_atm_am2_bc-1-9999.nc \ --scalar_field CO2 ===================== Now we copy those files to this setup: cd ../../mom4_Aeolus_lad_Xcoarse/INPUT-Restart-from-21-mar-clim/ for i in coupler.res \ ocean_*.res* \ ice_*.res* \ soil.res.nc \ vegetation.res.nc \ AEOLUS_input_1976-2001_yseasmean.cdf* \ atmos_tracers.res.nc atmos_coupled.res.nc \ ocmip2_siple_co2_atm_am2_bc-1-9999.nc ; do rm -f ../../mom4_Aeolus_lad-init-21-mar-clim/INPUT/$i ; cp -av $i ../../mom4_Aeolus_lad-init-21-mar-clim/INPUT/$i ; done cd ../../mom4_Aeolus_lad-init-21-mar-clim And finally construct a suitable coupler.res to set an initial date for this setup: cat > INPUT/coupler.res << __NASE_ 4 (Calendar: no_calendar=0, thirty_day_months=1, julian=2, gregorian=3, noleap=4) 1 1 1 0 0 0 Model start time: year, month, day, hour, minute, second 52 3 21 0 0 0 Current model time: year, month, day, hour, minute, second __NASE__ ==== ==== ==== Some remarks about Stock checking: Stock diagnostics are sent to the diag manager if input.nml/coupler_nml/check_stocks=1 (every time step) For each of the component models XXX = { ATM LND ICE OCN }, and stock elements yyy = { water heat salt }, 3 diagnostics can be sent: XXXyyyStocksChange_Flux XXXyyyStocksChange_Comp XXXyyyStocksChange_Diff Also, stock reports are printed to stdout , or into a separate stocks.out file: Total =S(t) not sent to diag manager Change=S(t)-S(0) equal to XXXyyyStocksChange_Comp Input =F(t) equal to XXXyyyStocksChange_Flux Diff =F(t) - (S(t)-S(0)) equal to XXXyyyStocksChange_Diff Error =Diff/S(0) parameter :: NELEMS=3 character, dimension(NELEMS) :: STOCK_NAMES=(/'water', 'heat ', 'salt '/) parameter :: NSIDES = 3 ! top, bottom, side type stock_type real :: q_start = 0.0 ! total stocks at start time real :: q_now = 0.0 ! total stocks at time t ! The dq's below are the stocks increments at the present time ! delta_t * surf integr of flux ! one for each side (ISTOCK_TOP, ISTOCK_BOTTOM, ISTOCK_SIDE) real :: dq(NSIDES) = 0.0 ! stock increments at present time on the Ice grid real :: dq_IN(NSIDES) = 0.0 ! stock increments at present time on the Ocean grid end type stock_type type(stock_type), dimension(NELEMS) :: Atm_stock, Ocn_stock, Lnd_stock, Ice_stock parameter :: NCOMPS=4 character, dimension(NCOMPS) :: COMP_NAMES=(/'ATM', 'LND', 'ICE', 'OCN'/) StocksChange_Flux f_value == Input: StocksChange_Comp c_value == Change: StocksChange_Diff fmc_value == Diff: Total: == Input: + Input(0) Total : q_now Change: q_now - q_start Input: f_value Diff : f_value - c_value Error: (f_value - c_value)/(1+q_start) comp = ISTOCK_ATM ISTOCK_LND ISTOCK_ICE ISTOCK_OCN f_ice_grid(comp) = sum(stck%dq) f_ocn_grid(comp) = sum(stck%dq_IN) f_ocn_btf(comp) = stck%dq_IN( ISTOCK_BOTTOM ) q_start(comp) = stck%q_start q_now(comp) = stck%q_now c_value(comp) = q_now(comp) - q_start(comp) == f_value(comp) = f_ice_grid(comp) resp. f_ocn_grid(comp) fmc_value = f_value(comp)-c_value(comp) ---------- Aeolus always sets frozen precipitation to 0; our restart conditions contain fprec != 0; Apparently, that could be one cause for the strong erratic behaviour at start of the coupled Aeolus model. Try: set fprec to 0 in the restart conditions. mv atmos_coupled.res.nc atmos_coupled.res.nc-orig-with-fprec ncap2 -O -c -s 'fprec=fprec;fprec=0;' atmos_coupled.res.nc-orig-with-fprec atmos_coupled.res.nc-fprec-0 ln -s atmos_coupled.res.nc-fprec-0 atmos_coupled.res.nc ------ It turns out that frozen precipitation is needed by the coupler to maintain energy stocks, because latent heat of fusion depends on fprec. Thus, we have now implemented frozen precipitation in Aeolus, and do not need to set it to 0 zero any more in the initial coniditions. ----------- Mon Feb 22 20:49:37 CET 2021 Following Erics suggestions in his mail from 22.09.20 19:31 (see CM2M_coarse_BLING/README), modified the ``official'' generic_BLING.F90 by removing all the _b suffixes from all tracer names. Also many tracer names in the file INPUT/ocean_bling.res.nc needed renaming accordingly. cd INPUT mv ocean_bling.res.nc ocean_bling.res.nc-with_b ncrename -v dic_b\,dic \ -v alk_b\,alk \ -v po4_b\,po4 \ -v o2_b\,o2 \ -v dop_b\,dop \ -v fed_b\,fed \ -v htotal_b\,htotal \ -v co3_ion_b\,co3_ion \ -v irr_mem_b\,irr_mem \ -v chl_b\,chl \ ocean_bling.res.nc-with_b ocean_bling.res.nc-no_b ln -s ocean_bling.res.nc-no_b ocean_bling.res.nc mv ocean_bling_airsea_flux.res.nc ocean_bling_airsea_flux.res.nc-with_b ncrename \ -v co2_b_flux_alpha_ocn\,co2_flux_alpha_ocn \ -v co2_b_flux_csurf_ocn\,co2_flux_csurf_ocn \ -v o2_b_flux_alpha_ocn\,o2_flux_alpha_ocn \ -v o2_b_flux_csurf_ocn\,o2_flux_csurf_ocn \ ocean_bling_airsea_flux.res.nc-with_b ocean_bling_airsea_flux.res.nc-no_b ln -s ocean_bling_airsea_flux.res.nc-no_b ocean_bling_airsea_flux.res.nc mv ice_bling.res.nc ice_bling.res.nc-with_b ncrename \ -v co2_b_flux_flux_ice\,co2_flux_flux_ice \ -v o2_b_flux_flux_ice\,o2_flux_flux_ice \ -v wet_dep_fed_b_flux_ice\,wet_dep_fed_flux_ice \ -v dry_dep_fed_b_flux_ice\,dry_dep_fed_flux_ice \ ice_bling.res.nc-with_b ice_bling.res.nc-no_b ln -s ice_bling.res.nc-no_b ice_bling.res.nc