EnKF with gain smoother: include the last smoothedGainMatrix K in state.zip
theavuik opened this issue · 0 comments
For operational purposes, where simulations are split into hindcast-forecast cycles, it is desirable to include the smoothed gain matrix of the last analysis in the state.zip. This gain will be used in the next hindcast-forecast cycle.
This issue is a duplicate of JIRA issue ODA-539, that will now be closed.
Earlier comments on this issue:
and the following was added on 18-01-2017 16:59:
-
Invoegen K in state.zip
-
in AbstractSequentialAlgorithm of in AbstractSequentialEnsembleAlgorithm:
-
voeg K aan de functie saveInternalState
- haal K uit smoothedGainMatrix
- schrijf K naar een bestand
- zip directory K: K.zip
- voeg K.zip in state.zip
-
voeg K aan de functie restoreInternalState
- unzip de K.zip in dezelfde directory als directories work*
- laad K naar geheugen, initialiseer smoothedGainMatrix
-
controleer of AbstractSequentialAlgorithm.restoreInternalState eerder wordt uitgevoerd dan AbstractSequentialEnsembleAlgorithm.initialize.
Zo ja, voeg een check aan: is K_initieel beschikbaar uit restoreInternalState
- zo ja, gebruik de K als K_initieel
- zo niet, lees de K uit het K bestand
Zo niet, weet even niet wat je in dit geval moet doen ... <== DIT IS EIGENLIJK HET GEVAL!!!
WAT MOETEN WE NU DOEN? HET ALGORITHME WORDT EERST GEINITIEERD EN DAARNA WORDT DE STATE GE-RESTORE-D. IN ONS PLAN ZIT K IN DE STATE,
TERWIJL DE EERSTE K WORDT IN DE INITIALISATIE GELEZEN.
IS HET EEN IDEE OM DE RestoreInternalState TE ZETTEN IN AbstractSequentialEnsembleAlgorithm i.p.v. AbstractSequentialAlgorithm?
-
-
Invoegen K in coldstate.zip
- Optie 1:
- pass de schema opendaKalmanGainStorage.xsd aan om een simpel xml bestand van K te ondersteunen dat gewoon een lege element 'coldStart' bevat
- in AbstractSequentialAlgorithm.restoreInternalState, zet K_initieel naar null
- Optie 2:
- als K niet in de coldstate.zip zit, zet gewoon smoothedGainMatrix=null (of niks doen) in de bovengenoemde functie restoreInternalState.
VRAAG: het kan zijn dat in een eerste hindcast cyclus geen metingen beschikbaar zijn, dus geen K wordt berekend. Hoe moet K in state.zip eruit zien in dit geval?
-
Tijdstip uit directorynaam van K weghalen zodat de instelling van in enkfgsAlgorithmConfig.xml ongewijzigd kan blijven.
- Directorienaam van K mag niet varieren. Zorg ervoor dat een constante naam zoals bijvoorbeeld kgStorage voldoende is
kunnen we de element weghalen uit de configuratie?? waarom moet de time info in de directorie naam staan eigenlijk??
Momenteel wordt die element gebruikt om het tijdstip van de gain te halen:
gainTimeMjd[i] = TimeUtils.date2Mjd(timeString);
Maar het bijbehorende tijdstip van de gain kan ook op een andere (misschien ook nettere) manier worden gehaald:
op KalmanGainStorage.java:
- voeg het volgende op private File determineStorageDirectory(boolean neededForReading) {
String timeStampString
if (this.timeStampAsMJD==null){
timeStampString = "";
} else {
timeStampString = TimeUtils.mjdToString(this.timeStampAsMJD);
}
- voeg een extra methode getTimeStampAsMJD() aan
- Directorienaam van K mag niet varieren. Zorg ervoor dat een constante naam zoals bijvoorbeeld kgStorage voldoende is
-
Op dit moment moeten de analysetijdstippen gespecificeerd worden in het algorithm.xml van wanneer de Kalman gain's geschreven moeten worden.
Voeg een optie voor de saveGain aan om de K te bewaren
(a) op alle analyse/observatie tijdstippen of
(b) op het laatste analysetijdstip in een simulatie periode:
--> Hmm..dit is misschien niet nodig als de (laatste smoothed) K altijd aan het eind van een simulatie geschreven wordt naar een file via de
bovengenoemde functie saveInternalState? -
(optioneel?) Maak een optie dat wanneer EnKF-GS gebruikt wordt en de initielle K uit de state gelezen wordt hoeft een gebruiker de
en niet te specificeren op het EnkfConfig bestand voor het EnKF-GS.