[4773] | 1 | # Makefile for running ecRad on clear-sky CKDMIP profiles. The basic |
---|
| 2 | # test uses the single input file INPUT below. You can also run ecRad |
---|
| 3 | # on CKDMIP scenarios (see lower in file). You need the NCO tools |
---|
| 4 | # ncap2, ncrcat and ncpdq. |
---|
| 5 | |
---|
| 6 | # --- BASIC TEST --- |
---|
| 7 | |
---|
| 8 | # Type "make" to use the default ecckd gas-optics models, or "make |
---|
| 9 | # GASMODEL=rrtmg" for the RRTMG gas-optics model. |
---|
| 10 | |
---|
| 11 | INPUT = ckdmip_evaluation1_concentrations_present_reduced.nc |
---|
| 12 | DRIVER = ../../bin/ecrad |
---|
| 13 | CHANGENAM = ../common/change_namelist.sh |
---|
| 14 | GASMODEL = ecckd |
---|
| 15 | CONFIG = config-$(GASMODEL).nam |
---|
| 16 | |
---|
| 17 | all: test |
---|
| 18 | |
---|
| 19 | # By default run the sw and lw tests |
---|
| 20 | test: sw lw |
---|
| 21 | |
---|
| 22 | # Longwave ecRad calculation: simply run ecRad with an appropriate |
---|
| 23 | # config file |
---|
| 24 | lw: config-$(GASMODEL)_lw.nam |
---|
| 25 | $(DRIVER) config-$(GASMODEL)_lw.nam $(INPUT) ckdmip_evaluation1_lw_out.nc |
---|
| 26 | |
---|
| 27 | # Shortwave ecRad calculation: run the five solar zenith angles then |
---|
| 28 | # concatenate the NetCDF files. This uses the GNU make feature "call", |
---|
| 29 | # here applied to CALCSWSZA which takes two arguments, the input and |
---|
| 30 | # output files |
---|
| 31 | sw: config_sw_all |
---|
| 32 | $(call CALCSWSZA,$(INPUT),ckdmip_evaluation1_sw_out.nc) |
---|
| 33 | |
---|
| 34 | # Create a longwave config file (basically turn of the shortwave) |
---|
| 35 | config-$(GASMODEL)_lw.nam: $(CONFIG) |
---|
| 36 | $(CHANGENAM) $(CONFIG) config-$(GASMODEL)_lw.nam do_sw=false |
---|
| 37 | |
---|
| 38 | # Create the namelist files for a particular solar zenith angle, |
---|
| 39 | # e.g. "make config-rrtmg_sw_0.5.nam" creates a namelist file for the |
---|
| 40 | # RRTMG gas optics model and a solar zenith angle of 60 degrees. |
---|
| 41 | config-$(GASMODEL)_sw_%.nam: $(CONFIG) |
---|
| 42 | $(CHANGENAM) $(CONFIG) $@ do_lw=false cos_solar_zenith_angle=$* |
---|
| 43 | |
---|
| 44 | # Produce config files for each of the five solar zenith angles |
---|
| 45 | config_sw_all: config-$(GASMODEL)_sw_0.1.nam config-$(GASMODEL)_sw_0.3.nam \ |
---|
| 46 | config-$(GASMODEL)_sw_0.5.nam config-$(GASMODEL)_sw_0.7.nam config-$(GASMODEL)_sw_0.9.nam |
---|
| 47 | |
---|
| 48 | |
---|
| 49 | # --- HELPER FUNCTIONS --- |
---|
| 50 | |
---|
| 51 | # Function to run ecRad shortwave-only on the 50 evaluation profiles |
---|
| 52 | # for a single value of the solar zenith angle (works only with GNU |
---|
| 53 | # make), and then to add a mu0 variable storing the cosine of the |
---|
| 54 | # solar zenith angle. The arguments are (1) the input file name and |
---|
| 55 | # (2) the cosine of the solar zenith angle. |
---|
| 56 | CALCSW = \ |
---|
| 57 | $(DRIVER) config-$(GASMODEL)_sw_$(2).nam $(1) tmp_out.nc; \ |
---|
| 58 | ncap2 -O -s 'defdim("mu0",1,0);mu0[mu0]={'$(2)'f};mu0@long_name="Cosine of solar zenith angle";flux_dn_sw[mu0,column,half_level]=flux_dn_sw;flux_up_sw[mu0,column,half_level]=flux_up_sw;flux_dn_direct_sw[mu0,column,half_level]=flux_dn_direct_sw' tmp_out.nc tmp_$(2)_out.nc |
---|
| 59 | |
---|
| 60 | # Function to run ecRad shortwave-only for all five solar zenith |
---|
| 61 | # angles, then to contatenate the results into a single file. The |
---|
| 62 | # arguments are (1) the input file name and (2) the output file name. |
---|
| 63 | CALCSWSZA = \ |
---|
| 64 | $(call CALCSW,$(1),0.1); \ |
---|
| 65 | $(call CALCSW,$(1),0.3); \ |
---|
| 66 | $(call CALCSW,$(1),0.5); \ |
---|
| 67 | $(call CALCSW,$(1),0.7); \ |
---|
| 68 | $(call CALCSW,$(1),0.9); \ |
---|
| 69 | ncrcat -O tmp_0.1_out.nc tmp_0.3_out.nc tmp_0.5_out.nc tmp_0.7_out.nc tmp_0.9_out.nc tmp_out2.nc; \ |
---|
| 70 | ncpdq -O -a column,mu0,half_level tmp_out2.nc $(2) |
---|
| 71 | |
---|
| 72 | |
---|
| 73 | # --- CKDMIP SCENARIOS --- |
---|
| 74 | |
---|
| 75 | # To run the CKDMIP scenarios you first need to copy the concentration |
---|
| 76 | # files from http://aux.ecmwf.int/ecpds/home/ckdmip/concentrations/, |
---|
| 77 | # or ftp from aux.ecmwf.int (username ckdmip, password any non-empty |
---|
| 78 | # string), which you can do with "make download". Then do: |
---|
| 79 | # |
---|
| 80 | # make scenarios |
---|
| 81 | # |
---|
| 82 | # As in the basic test you can add the GASMODEL=rrtmg to use the RRTMG |
---|
| 83 | # gas-optics model instead of ecCKD. To use a different configuration |
---|
| 84 | # of ecCKD than the default, copy config-ecckd.nam to something like |
---|
| 85 | # config-custom.nam, then add the gas_optics_sw_override_file_name and |
---|
| 86 | # gas_optics_lw_override_file_name namelist arguments to specify your |
---|
| 87 | # preferred CKD definition file, and call make with GASMODEL=custom. |
---|
| 88 | |
---|
| 89 | CONCDIR = concentrations |
---|
| 90 | DATASET = evaluation1 |
---|
| 91 | FLUXDIR = fluxes |
---|
| 92 | LBLFLUXDIR = lbl_fluxes |
---|
| 93 | |
---|
| 94 | # Web/FTP location of concentration files (no trailing slash) |
---|
| 95 | #WEBSOURCE = http://aux.ecmwf.int/ecpds/home/ckdmip |
---|
| 96 | WEBSOURCE = ftp://ckdmip:blank@aux.ecmwf.int |
---|
| 97 | |
---|
| 98 | # List of scenarios to run |
---|
| 99 | SCENARIOS = present co2-180 co2-280 co2-560 co2-1120 co2-2240 ch4-350 ch4-700 ch4-1200 ch4-2600 ch4-3500 n2o-190 n2o-270 n2o-405 n2o-540 |
---|
| 100 | |
---|
| 101 | # A longwave and shortwave make rule for each scenario |
---|
| 102 | SCENARIO_RULES = $(addprefix lw_scenario_,$(SCENARIOS)) $(addprefix sw_scenario_,$(SCENARIOS)) |
---|
| 103 | # A download rule for each scenario |
---|
| 104 | DOWNLOAD_RULES = $(addprefix download_,$(SCENARIOS)) |
---|
| 105 | |
---|
| 106 | # Main target of this section runs each scenario longwave and shortwave |
---|
| 107 | scenarios: $(SCENARIO_RULES) |
---|
| 108 | |
---|
| 109 | # Pattern matches a shortwave scenario, invoked by calling the |
---|
| 110 | # CALCSWSZA function. |
---|
| 111 | sw_scenario_%: config_sw_all |
---|
| 112 | mkdir -p $(FLUXDIR) |
---|
| 113 | $(call CALCSWSZA,$(CONCDIR)/ckdmip_$(DATASET)_concentrations_$*.nc,$(FLUXDIR)/ecrad-$(GASMODEL)_$(DATASET)_sw_fluxes_$*.nc) |
---|
| 114 | |
---|
| 115 | # Pattern matches a longwave scenario. |
---|
| 116 | lw_scenario_%: config-$(GASMODEL)_lw.nam |
---|
| 117 | mkdir -p $(FLUXDIR) |
---|
| 118 | $(DRIVER) config-$(GASMODEL)_lw.nam $(CONCDIR)/ckdmip_$(DATASET)_concentrations_$*.nc $(FLUXDIR)/ecrad-$(GASMODEL)_$(DATASET)_lw_fluxes_$*.nc |
---|
| 119 | |
---|
| 120 | # Target to download concentration files from the web to the CONCDIR |
---|
| 121 | # directory |
---|
| 122 | download: $(DOWNLOAD_RULES) |
---|
| 123 | |
---|
| 124 | # Download one scenario, explicitly overwriting if it already |
---|
| 125 | # exists. Note that the "h5" files are NetCDF4/HDF5 format so can be |
---|
| 126 | # read with NetCDF tools |
---|
| 127 | download_%: |
---|
| 128 | mkdir -p $(CONCDIR) |
---|
| 129 | wget -nv -O $(CONCDIR)/ckdmip_$(DATASET)_concentrations_$*.nc \ |
---|
| 130 | $(WEBSOURCE)/concentrations/ckdmip_$(DATASET)_concentrations_$*.nc |
---|
| 131 | mkdir -p $(LBLFLUXDIR) |
---|
| 132 | wget -nv -O $(LBLFLUXDIR)/ckdmip_$(DATASET)_lw_fluxes_$*.nc \ |
---|
| 133 | $(WEBSOURCE)/lw_fluxes/$(DATASET)/ckdmip_$(DATASET)_lw_fluxes_$*.h5 |
---|
| 134 | wget -nv -O $(LBLFLUXDIR)/ckdmip_$(DATASET)_sw_fluxes_$*.nc \ |
---|
| 135 | $(WEBSOURCE)/sw_fluxes/$(DATASET)/ckdmip_$(DATASET)_sw_fluxes_$*.h5 |
---|
| 136 | |
---|
| 137 | |
---|
| 138 | # Clean data files |
---|
| 139 | clean: |
---|
| 140 | rm -f *_out.nc config-*_sw_*.nam config-*_lw.nam tmp*.nc wget-log |
---|
| 141 | |
---|
| 142 | distclean: clean |
---|
| 143 | rm -rf $(CONCDIR)/ckdmip_$(DATASET)_concentrations_present.nc \ |
---|
| 144 | $(CONCDIR)/ckdmip_$(DATASET)_*-*.nc \ |
---|
| 145 | $(FLUXDIR)/ecrad-*_$(DATASET)_lw_fluxes_*.nc \ |
---|
| 146 | $(FLUXDIR)/ecrad-*_$(DATASET)_sw_fluxes_*.nc \ |
---|
| 147 | $(LBLFLUXDIR)/ckdmip_$(DATASET)_lw_fluxes_*.nc \ |
---|
| 148 | $(LBLFLUXDIR)/ckdmip_$(DATASET)_sw_fluxes_*.nc |
---|
| 149 | |
---|
| 150 | .PHONY: config_sw_all scenarios sw lw all test clean distclean |
---|