-
Notifications
You must be signed in to change notification settings - Fork 31
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Enable the manual operation of the marine verification tool #1373
Open
apchoiCMD
wants to merge
6
commits into
develop
Choose a base branch
from
feature/run_vrfy_manual
base: develop
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 3 commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
9ea280f
WIP with fresh new
apchoiCMD b3d78ed
address comments
apchoiCMD 8f6c33e
delete current
apchoiCMD dea796d
removal of main py-script
apchoiCMD bab4df1
Merge branch 'develop' into feature/run_vrfy_manual
apchoiCMD 3d23da0
modify to point python driver out
apchoiCMD File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
1 change: 0 additions & 1 deletion
1
...pts/exgdas_global_marine_analysis_vrfy.py → ...old/exgdas_global_marine_analysis_vrfy.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -73,7 +73,7 @@ graphics: | |
data variable: experiment::OmBQC::${variable} | ||
figure: | ||
layout: [1,1] | ||
figure size: [11,5] | ||
figure size: [20,10] | ||
title: 'OmB post QC | @NAME@ @CYCLE@ | ${variable_title}' | ||
output name: map_plots/@NAME@/${variable}/@CHANNELVAR@/@NAME@_${variable}@[email protected] | ||
tight_layout: true | ||
|
@@ -94,11 +94,11 @@ graphics: | |
data: | ||
variable: experiment::OmBQC::${variable} | ||
@CHANNELKEY@ | ||
markersize: 1 | ||
markersize: 0.01 | ||
label: '$(variable)' | ||
colorbar: true | ||
# below may need to be edited/removed | ||
cmap: ${dynamic_cmap} | ||
cmap: 'seismic' | ||
vmin: ${dynamic_vmin} | ||
vmax: ${dynamic_vmax} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
210 changes: 210 additions & 0 deletions
210
utils/soca/fig_gallery/exgdas_global_marine_analysis_vrfy_manual.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,210 @@ | ||
import os | ||
import numpy as np | ||
import gen_eva_obs_yaml | ||
import marine_eva_post | ||
import diag_statistics | ||
from multiprocessing import Process | ||
from soca_vrfy import statePlotter, plotConfig | ||
import subprocess | ||
|
||
comout = os.getenv('COM_OCEAN_ANALYSIS') | ||
com_ice_history = os.getenv('COM_ICE_HISTORY_PREV') | ||
com_ocean_history = os.getenv('COM_OCEAN_HISTORY_PREV') | ||
cyc = os.getenv('cyc') | ||
RUN = os.getenv('RUN') | ||
|
||
bcyc = str((int(cyc) - 3) % 24).zfill(2) | ||
gcyc = str((int(cyc) - 6) % 24).zfill(2) | ||
grid_file = os.path.join(comout, f'{RUN}.t'+bcyc+'z.ocngrid.nc') | ||
layer_file = os.path.join(comout, f'{RUN}.t'+cyc+'z.ocninc.nc') | ||
|
||
# for eva | ||
diagdir = os.path.join(comout, 'diags') | ||
HOMEgfs = os.getenv('HOMEgfs') | ||
|
||
# Get flags from environment variables (set in the bash driver) | ||
run_ensemble_analysis = os.getenv('RUN_ENSENBLE_ANALYSIS', 'OFF').upper() == 'ON' | ||
run_bkgerr_analysis = os.getenv('RUN_BACKGROUND_ERROR_ANALYSIS', 'OFF').upper() == 'ON' | ||
run_bkg_analysis = os.getenv('RUN_BACKGROUND_ANALYSIS', 'OFF').upper() == 'ON' | ||
run_increment_analysis = os.getenv('RUN_INCREMENT_ANLYSIS', 'OFF').upper() == 'ON' | ||
|
||
# Initialize an empty list for the main config | ||
configs = [plotConfig(grid_file=grid_file, | ||
data_file=os.path.join(comout, f'{RUN}.t'+cyc+'z.ocnana.nc'), | ||
variables_horiz={'ave_ssh': [-1.8, 1.3], | ||
'Temp': [-1.8, 34.0], | ||
'Salt': [32, 40]}, | ||
colormap='nipy_spectral', | ||
comout=os.path.join(comout, 'vrfy', 'ana')), # ocean surface analysis | ||
plotConfig(grid_file=grid_file, | ||
data_file=os.path.join(comout, f'{RUN}.t'+cyc+'z.iceana.nc'), | ||
variables_horiz={'aice_h': [0.0, 1.0], | ||
'hi_h': [0.0, 4.0], | ||
'hs_h': [0.0, 0.5]}, | ||
colormap='jet', | ||
projs=['North', 'South', 'Global'], | ||
comout=os.path.join(comout, 'vrfy', 'ana'))] # sea ice analysis | ||
|
||
# Define each config and add to main_config if its flag is True | ||
if run_ensemble_analysis: | ||
config_ens = [plotConfig(grid_file=grid_file, | ||
data_file=os.path.join(comout, f'{RUN}.t{cyc}z.ocn.recentering_error.nc'), | ||
variables_horiz={'ave_ssh': [-1, 1]}, | ||
colormap='seismic', | ||
comout=os.path.join(comout, 'vrfy', 'recentering_error')), # recentering error | ||
plotConfig(grid_file=grid_file, | ||
data_file=os.path.join(comout, f'{RUN}.t{cyc}z.ocn.ssh_steric_stddev.nc'), | ||
variables_horiz={'ave_ssh': [0, 0.8]}, | ||
colormap='gist_ncar', | ||
comout=os.path.join(comout, 'vrfy', 'bkgerr', 'ssh_steric_stddev')), # ssh steric stddev | ||
plotConfig(grid_file=grid_file, | ||
data_file=os.path.join(comout, f'{RUN}.t{cyc}z.ocn.ssh_unbal_stddev.nc'), | ||
variables_horiz={'ave_ssh': [0, 0.8]}, | ||
colormap='gist_ncar', | ||
comout=os.path.join(comout, 'vrfy', 'bkgerr', 'ssh_unbal_stddev')), # ssh unbal stddev | ||
plotConfig(grid_file=grid_file, | ||
data_file=os.path.join(comout, f'{RUN}.t{cyc}z.ocn.ssh_total_stddev.nc'), | ||
variables_horiz={'ave_ssh': [0, 0.8]}, | ||
colormap='gist_ncar', | ||
comout=os.path.join(comout, 'vrfy', 'bkgerr', 'ssh_total_stddev')), # ssh total stddev | ||
plotConfig(grid_file=grid_file, | ||
data_file=os.path.join(comout, f'{RUN}.t{cyc}z.ocn.steric_explained_variance.nc'), | ||
variables_horiz={'ave_ssh': [0, 1]}, | ||
colormap='seismic', | ||
comout=os.path.join(comout, 'vrfy', 'bkgerr', 'steric_explained_variance'))] # steric explained variance | ||
configs.extend(config_ens) | ||
|
||
if run_bkgerr_analysis: | ||
config_bkgerr = [plotConfig(grid_file=grid_file, | ||
layer_file=layer_file, | ||
data_file=os.path.join(comout, os.path.pardir, os.path.pardir, | ||
'bmatrix', 'ocean', f'{RUN}.t'+cyc+'z.ocean.bkgerr_stddev.nc'), | ||
lats=np.arange(-60, 60, 10), | ||
lons=np.arange(-280, 80, 30), | ||
variables_zonal={'Temp': [0, 2], | ||
'Salt': [0, 0.2], | ||
'u': [0, 0.2], | ||
'v': [0, 0.2]}, | ||
variables_meridional={'Temp': [0, 2], | ||
'Salt': [0, 0.2], | ||
'u': [0, 0.2], | ||
'v': [0, 0.2]}, | ||
variables_horiz={'Temp': [0, 2], | ||
'Salt': [0, 0.2], | ||
'u': [0, 0.2], | ||
'v': [0, 0.2], | ||
'ave_ssh': [0, 0.1]}, | ||
colormap='jet', | ||
comout=os.path.join(comout, 'vrfy', 'bkgerr'))] # ocn bkgerr stddev | ||
configs.extend(config_bkgerr) | ||
|
||
if run_bkg_analysis: | ||
config_bkg = [plotConfig(grid_file=grid_file, | ||
data_file=os.path.join(com_ice_history, f'{RUN}.ice.t{gcyc}z.inst.f006.nc'), | ||
variables_horiz={'aice_h': [0.0, 1.0], | ||
'hi_h': [0.0, 4.0], | ||
'hs_h': [0.0, 0.5]}, | ||
colormap='jet', | ||
projs=['North', 'South', 'Global'], | ||
comout=os.path.join(comout, 'vrfy', 'bkg')), # sea ice background | ||
plotConfig(grid_file=grid_file, | ||
layer_file=layer_file, | ||
data_file=os.path.join(com_ocean_history, f'{RUN}.ocean.t{gcyc}z.inst.f006.nc'), | ||
lats=np.arange(-60, 60, 10), | ||
lons=np.arange(-280, 80, 30), | ||
variables_zonal={'Temp': [-1.8, 34.0], | ||
'Salt': [32, 40]}, | ||
variables_meridional={'Temp': [-1.8, 34.0], | ||
'Salt': [32, 40]}, | ||
variables_horiz={'ave_ssh': [-1.8, 1.3], | ||
'Temp': [-1.8, 34.0], | ||
'Salt': [32, 40]}, | ||
colormap='nipy_spectral', | ||
comout=os.path.join(comout, 'vrfy', 'bkg'))] | ||
configs.extend(config_bkg) | ||
|
||
if run_increment_analysis: | ||
config_incr = [plotConfig(grid_file=grid_file, | ||
layer_file=layer_file, | ||
data_file=os.path.join(comout, f'{RUN}.t'+cyc+'z.ocninc.nc'), | ||
lats=np.arange(-60, 60, 10), | ||
lons=np.arange(-280, 80, 30), | ||
variables_zonal={'Temp': [-0.5, 0.5], | ||
'Salt': [-0.1, 0.1]}, | ||
variables_horiz={'Temp': [-0.5, 0.5], | ||
'Salt': [-0.1, 0.1], | ||
'ave_ssh': [-0.1, 0.1]}, | ||
variables_meridional={'Temp': [-0.5, 0.5], | ||
'Salt': [-0.1, 0.1]}, | ||
colormap='seismic', | ||
comout=os.path.join(comout, 'vrfy', 'incr')), # ocean increment | ||
plotConfig(grid_file=grid_file, | ||
data_file=os.path.join(comout, f'{RUN}.t'+cyc+'z.ice.incr.nc'), | ||
lats=np.arange(-60, 60, 10), | ||
variables_horiz={'aice_h': [-0.2, 0.2], | ||
'hi_h': [-0.5, 0.5], | ||
'hs_h': [-0.1, 0.1]}, | ||
colormap='seismic', | ||
projs=['North', 'South'], | ||
comout=os.path.join(comout, 'vrfy', 'incr'))] # sea ice increment | ||
configs.extend(config_incr) | ||
|
||
|
||
# plot marine analysis vrfy | ||
|
||
def plot_marine_vrfy(config): | ||
ocnvrfyPlotter = statePlotter(config) | ||
ocnvrfyPlotter.plot() | ||
|
||
|
||
# Number of processes | ||
num_processes = len(configs) | ||
|
||
# Create a list to store the processes | ||
processes = [] | ||
|
||
# Iterate over configs | ||
for config in configs[:num_processes]: | ||
process = Process(target=plot_marine_vrfy, args=(config,)) | ||
process.start() | ||
processes.append(process) | ||
|
||
# Wait for all processes to finish | ||
for process in processes: | ||
process.join() | ||
|
||
####################################### | ||
# eva plots | ||
####################################### | ||
|
||
evadir = os.path.join(HOMEgfs, 'sorc', f'{RUN}.cd', 'ush', 'eva') | ||
marinetemplate = os.path.join(evadir, 'marine_gdas_plots.yaml') | ||
varyaml = os.path.join(comout, 'yaml', 'var_original.yaml') | ||
|
||
# it would be better to refrence the dirs explicitly with the comout path | ||
# but eva doesn't allow for specifying output directories | ||
os.chdir(os.path.join(comout, 'vrfy')) | ||
if not os.path.exists('preevayamls'): | ||
os.makedirs('preevayamls') | ||
if not os.path.exists('evayamls'): | ||
os.makedirs('evayamls') | ||
|
||
gen_eva_obs_yaml.gen_eva_obs_yaml(varyaml, marinetemplate, 'preevayamls') | ||
|
||
files = os.listdir('preevayamls') | ||
for file in files: | ||
infile = os.path.join('preevayamls', file) | ||
marine_eva_post.marine_eva_post(infile, 'evayamls', diagdir) | ||
|
||
files = os.listdir('evayamls') | ||
for file in files: | ||
infile = os.path.join('evayamls', file) | ||
print('running eva on', infile) | ||
subprocess.run(['eva', infile], check=True) | ||
|
||
####################################### | ||
# calculate diag statistics | ||
####################################### | ||
|
||
# As of 11/12/2024 not working | ||
# diag_statistics.get_diag_stats() |
45 changes: 45 additions & 0 deletions
45
utils/soca/fig_gallery/run_marine_analysis_vrfy_manual.job
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
#!/bin/bash | ||
#SBATCH --job-name=marine_vrfy # Assign a name to the job (customize as needed) | ||
#SBATCH --account=da-cpu | ||
#SBATCH --qos=debug | ||
#SBATCH -A da-cpu | ||
#SBATCH --output=run_marine_vrfy_analysis.out | ||
#SBATCH --nodes=1 # Request 1 node | ||
#SBATCH --ntasks=40 # Request 40 total tasks (processors across nodes) | ||
#SBATCH --partition=hera # Specify the partition (cluster) named "hera" | ||
#SBATCH --cpus-per-task=1 # Set 1 CPU per task (equivalent to ppn=40 and tpp=1) | ||
#SBATCH --mem=24GB # Request 24GB of memory | ||
#SBATCH --time=00:30:00 # Set the walltime limit to 30 minutes | ||
|
||
# Define HOMEgfs | ||
export HOMEgfs="/scratch1/NCEPDEV/da/Mindo.Choi/workflow_11122024/global-workflow/" | ||
|
||
# Load EVA module | ||
module use ${HOMEgfs}sorc/gdas.cd/modulefiles | ||
module load EVA/hera | ||
|
||
# Set PYTHONPATH using HOMEgfs | ||
export PYTHONPATH="${HOMEgfs}sorc/gdas.cd/ush/:\ | ||
${HOMEgfs}sorc/gdas.cd/ush/eva/:\ | ||
${HOMEgfs}sorc/gdas.cd/ush/soca/:\ | ||
$PYTHONPATH" | ||
|
||
# Set flags to control plotConfig in the Python script | ||
export RUN_ENSENBLE_ANALYSIS=OFF # Check if ensemble run is ON | ||
export RUN_BACKGROUND_ERROR_ANALYSIS=ON | ||
export RUN_BACKGROUND_ANALYSIS=ON | ||
export RUN_INCREMENT_ANLYSIS=ON | ||
|
||
# Define and export the environment variables | ||
export cyc="00" | ||
export RUN="gdas" | ||
export PSLOT="gdas_test" | ||
export PDY="20210827" | ||
|
||
# Define and export environment variables with paths | ||
export COM_OCEAN_ANALYSIS="/scratch1/NCEPDEV/da/Mindo.Choi/sandbox/marine_vrfy/gdas.20210827/00/analysis/ocean" | ||
export COM_ICE_HISTORY_PREV="/scratch1/NCEPDEV/da/Mindo.Choi/sandbox/marine_vrfy/gdas.20210826/18/model/ice/history" | ||
export COM_OCEAN_HISTORY_PREV="/scratch1/NCEPDEV/da/Mindo.Choi/sandbox/marine_vrfy/gdas.20210826/18/model/ocean/history" | ||
|
||
# Excute Marine Verify Analysis | ||
python3 ${HOMEgfs}sorc/gdas.cd/scripts/exgdas_global_marine_analysis_vrfy_manual.py |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nice