Open mathomp4 opened 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).
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.
Okay. I'm fairly certain that setting all the exports in Satsim to zero doesn't help. That was fun with a Vim macro.
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?
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.
Per #120, there are actually AMIP v no-increment REPLAY differences with both
GUST
andTBISCCP
. This will track theTBISCCP
issue.