GEOS-ESM / GEOSgcm_GridComp

Repository containing the physics and IAU code for the GEOS Earth System Model
Apache License 2.0
9 stars 7 forks source link

Diagnostic difference between AMIP and no-increment REPLAY: TBISCCP #122

Open mathomp4 opened 5 years ago

mathomp4 commented 5 years ago

Per #120, there are actually AMIP v no-increment REPLAY differences with both GUST and TBISCCP. This will track the TBISCCP issue.

mathomp4 commented 5 years ago

Note that unlike #123, this does not seem to be solved by "set stuff to zero" as Satsim does set everything to zero correctly (as far as I can tell).

mathomp4 commented 5 years ago

So here we go with some testing. Using GEOSgcm develop, I created two HISTORY collections:

  geosgcm_prog.template:  '%y4%m2%d2_%h2%n2z.nc4',
  geosgcm_prog.archive:   '%c/Y%y4',
  geosgcm_prog.format:    'CFIO',
  geosgcm_prog.frequency:  060000,
  geosgcm_prog.grid_label: PC96x49-DC
  geosgcm_prog.vscale:     100.0,
  geosgcm_prog.vunit:     'hPa',
  geosgcm_prog.vvars:     'log(PLE)' , 'DYN'          ,
  geosgcm_prog.levels:     1000 975 950 925 900 875 850 825 800 775 750 725 700 650 600 550 500 450 400 350 300 250 200 150 100 70 50 40 30 20 10 7 5 4 3 2 
1 0.7 0.5 0.4 0.3 0.2 0.1 0.07 0.05 0.04 0.03 0.02,
  geosgcm_prog.fields:    'PHIS'     , 'AGCM'         ,
                          'TBISCCP'   , 'SATSIM'       ,
                          ::

  geosgcm_surf.template:  '%y4%m2%d2_%h2%n2z.nc4',
  geosgcm_surf.archive:   '%c/Y%y4',
  geosgcm_surf.format:    'CFIO',
  geosgcm_surf.mode:      'time-averaged',
  geosgcm_surf.frequency:  030000,
  geosgcm_surf.ref_time:   210000,
  geosgcm_surf.grid_label: PC96x49-DC
  geosgcm_surf.fields:    'PHIS'          , 'AGCM'     ,
                          'TBISCCP'   , 'SATSIM'       ,
                          ::

The main difference is that geosgcm_prog is instantaneous and geosgcm_surf is time-averaged. (I kept PHIS because I'm lazy.)

When we do this we get:

Comparing geosgcm_prog.20000415_0000z...
Success!
Comparing geosgcm_prog.20000415_0600z...
Success!
Comparing geosgcm_prog.20000415_1200z...
Success!
Comparing geosgcm_prog.20000415_1800z...
Success!
Comparing geosgcm_surf.20000414_2230z...
Failure!
Checking for data differences
Variable Group Count     Sum AbsSum      Min      Max  Range     Mean  StdDev
TBISCCP  /      4704 -103750 103750 -25.2341 -17.3864 7.8477 -22.0557 1.77824
Comparing geosgcm_surf.20000415_0130z...
Success!
Comparing geosgcm_surf.20000415_0430z...
Failure!
Checking for data differences
Variable Group Count      Sum  AbsSum      Min     Max   Range       Mean   StdDev
TBISCCP  /      4704 -296.783 1006.66 -2.16727 1.61624 3.78351 -0.0630917 0.330659
Comparing geosgcm_surf.20000415_0730z...
Success!
Comparing geosgcm_surf.20000415_1030z...
Failure!
Checking for data differences
Variable Group Count     Sum AbsSum     Min     Max   Range       Mean   StdDev
TBISCCP  /      4704 24.7698 930.48 -1.5636 1.97842 3.54202 0.00526569 0.314105
Comparing geosgcm_surf.20000415_1330z...
Success!
Comparing geosgcm_surf.20000415_1630z...
Failure!
Checking for data differences
Variable Group Count    Sum  AbsSum      Min     Max   Range      Mean   StdDev
TBISCCP  /      4704 95.407 921.956 -1.57376 2.22366 3.79742 0.0202821 0.300194
Comparing geosgcm_surf.20000415_1930z...
Success!

So this instantaneous collection does not have an issue between AMIP and no-inc REPLAY. It is the time-averaged collection that does.

mathomp4 commented 5 years ago

Okay. I'm fairly certain that setting all the exports in Satsim to zero doesn't help. That was fun with a Vim macro.

mathomp4 commented 5 years ago

More data. If you run both the AMIP and no-inc REPLAY with SATSIM at the heartbeat, things do work:

(1290) $ cmphistory -v fixgust-satsimexplore-zerosatsim-gcm-2019Oct18-1day-c24/scratch.SATSIM_DT_HEARTBEAT/ fixgust-satsimexplore-zerosatsim-gcm-2019Oct18-1day-c24-NOREPLAY/scratch.SATSIM_DT_HEARTBEAT/
Comparing geosgcm_prog.20000415_0000z...
Success!
Comparing geosgcm_prog.20000415_0600z...
Success!
Comparing geosgcm_prog.20000415_1200z...
Success!
Comparing geosgcm_prog.20000415_1800z...
Success!
Comparing geosgcm_surf.20000414_2230z...
Success!
Comparing geosgcm_surf.20000415_0130z...
Success!
Comparing geosgcm_surf.20000415_0430z...
Success!
Comparing geosgcm_surf.20000415_0730z...
Success!
Comparing geosgcm_surf.20000415_1030z...
Success!
Comparing geosgcm_surf.20000415_1330z...
Success!
Comparing geosgcm_surf.20000415_1630z...
Success!
Comparing geosgcm_surf.20000415_1930z...
Success!

So maybe this has to do with a time-averaged collection and a component running slower than the rest of the model combined with predictor/corrector?

atrayano commented 5 years ago

I think I know was is happening: History accumulates every time step, but if the component does not run every time step, it "persists" the values from the last time it ran. The key here is what happens during all the steps until the first execution of the component. In an AMIP run, the values are set to 0 by MAPL. But in a replay run, by virtue of running the predictor, the component is exercised (assuming that RUN_DT is smaller than the duration of the predictor) and these values persist as well during the corrector until the component runs.