ufs-community / ufs-weather-model

UFS Weather Model
Other
140 stars 247 forks source link

clarify "mean" and "inst" coupled fields exchanged #1800

Closed DeniseWorthen closed 1 year ago

DeniseWorthen commented 1 year ago

Description

As a legacy from the NEMS mediator, many fields are exported or imported from the ATM with the name mean. For example, ATM imports mean_ice_volume when in fact the field from CICE is an instantaneous field since the ATM and ICE are running concurrently in the fast loop.

Even when coupling to ocean, the fields sent to the ocean from the ATM should be the instantaneous fields, since the mediator itself forms the average of these fields over the fast coupling loop in order to create the mean field to the ocean. Generally, these fields sent to the ocean are called mean fields, but they are the average of the inst fields from ATM or ICE (or merged between ATM and ICE).

This issue arose while investigating the shortwave fields in issue #1767

Solution

Impose consistency in the fields which are imported or exported. For example, the ATM should export inst_sensi_heat_flx, not mean_sensi_heat_flx for the ocean. For ATM exports, these two fields are not identical at every modelAdvance, but nearly so.

In the cases examined so far, changing to the instantaneous export fields shows very small (O~10-15) differences in the export fields in the first few hours after the initial time, after which differences start increasing as the model adjusts to the accumulated small differences.

Changing of mean_ice_volume to inst_ice_volume should not result in differences however, since in this case it is only the name of the field changing, and not the content.

In most cases, imposing this consistency on the ATM side will require only a modification to the fd_nems.yaml since both mean and inst fields are available the export field setup.

Alternatives

Related to

DeniseWorthen commented 1 year ago

I have a method to test the switching from mean to inst for the affected fields. For each affected field, within CMEPS I can advertise the inst field as coming from the ATM:

--- a/mediator/esmFldsExchange_nems_mod.F90
+++ b/mediator/esmFldsExchange_nems_mod.F90
@@ -151,6 +151,16 @@ contains
        call addfld_ocnalb('So_anidf')
     end if

+    call addfld_from(compatm , 'inst_sensi_heat_flx')
+    call addfld_from(compatm , 'inst_evap_rate')
+    call addfld_from(compatm , 'inst_net_lw_flx')
+    call addfld_from(compatm , 'inst_down_lw_flx')
+    call addfld_from(compatm , 'inst_net_sw_flx')
+    call addfld_from(compatm , 'inst_down_sw_ir_dir_flx')
+    call addfld_from(compatm , 'inst_down_sw_ir_dif_flx')
+    call addfld_from(compatm , 'inst_down_sw_vis_dir_flx')
+    call addfld_from(compatm , 'inst_down_sw_vis_dif_flx')

Each mediator history file for the ATM will then contain the field data for that field from the ATM. However, since these fields are not connected, no results will change. We can compare the fields imported under the "mean" field name with those imported under the "inst" name. They will be very close, but not identical.

DeniseWorthen commented 1 year ago

@jiandewang Will you please confirm the unit that MOM6 expects for the rain and snow? I know the cap documents these as being in kg m-2 s-1. Are we sure that MOM6 expects a rate and not a rainfall amount?

jiandewang commented 1 year ago

@DeniseWorthen this is from ncdump of output: float lprec(time, yh, xh) ; lprec:units = "kg m-2 s-1" ;

DeniseWorthen commented 1 year ago

@jiandewang Yes, but that only says what is being output. There could be intermediate conversions. So the question is can you follow the lprec array and verify that it is not doing a conversion?

jiandewang commented 1 year ago

OK let me do some research on this part. I had the same doubt as the information we are having is purely from output metadata

jiandewang commented 1 year ago

@DeniseWorthen just got confirmation from Bob, it is kg m-2 s-1

DeniseWorthen commented 1 year ago

@jiandewang Great, thanks for checking.

DeniseWorthen commented 1 year ago

A second step is required in order to fully resolve this issue. A PR is being prepared.

DeniseWorthen commented 1 year ago

The second step to resolve the mean->inst change involves changing the "mean" prefix to "inst" in the aliases for the sensible, momentum, sw and lw fluxes and evap rate.

Using the cpld_control_nowave_noaero_p8_intel test, the relevant fields were advertised in the mediator and the differences between the inst and mean export field values can be checked at the end of the 24 hour RT test. In this case, the test reproduced baselines because the fields are not being used.

The mean-inst sensible heat flux (scaled by 1e13)

atmImp_Faxa_sen

The mean-inst evap rate (scaled by 1e12)

atmImp_Faxa_evap

The mean-inst merid momentum flux (scaled by 1e12). The zonal field is similar.

atmImp_Faxa_tauy

The downward SW direct visible (scaled by 1e13). The near-IR is similar.

atmImp_Faxa_swvdr

DeniseWorthen commented 1 year ago

Issues are arising when testing with the land component. See https://github.com/NOAA-EMC/CMEPS/pull/98

DeniseWorthen commented 1 year ago

The following shows the difference in the ocean surface temperature exported by the ocean component (which is the only field sent to the ATM) after 6 hours when the inst fields are exported by the ATM instead of the mean fields.

For the global coupled case (scaled by 1e2)

cpld mean2inst

For the HAFS coupled (atm-ocn-wav) case (scaled by 1)

hafs mean2inst

DeniseWorthen commented 1 year ago

For HYCOM, I also checked that the values written to stdout for the fields imported to hycom are consistent at the end of 6 hours for the hafs_regional_atm_ocn_wav_intel test.

Using mean fields

5117:300: import_to_hycom_deb,max,min,mean=    taux10  0.414303189675184E+00 -0.102152488749792E+01 -0.145546862723850E-01
5118:300: import_to_hycom_deb,max,min,mean=    tauy10  0.874874996681233E+00 -0.435587594363473E+00  0.212075162866413E-02
5119:300: import_to_hycom_deb,max,min,mean=      prcp  0.162320748445706E-01  0.000000000000000E+00  0.514844730269246E-04
5120:300: import_to_hycom_deb,max,min,mean=    swflxd  0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
5121:300: import_to_hycom_deb,max,min,mean=    lwflxd  0.188231732816424E+02 -0.119725259819797E+03 -0.573773485147214E+02
5122:300: import_to_hycom_deb,max,min,mean=    mslprs  0.102404494247344E+06  0.987505942605636E+05  0.101521762194559E+06
5123:300: import_to_hycom_deb,max,min,mean=   sensflx  0.639654733012051E+02 -0.113390740038456E+03 -0.874893776318893E+01
5124:300: import_to_hycom_deb,max,min,mean=    latflx  0.841020805274566E+02 -0.509817519227136E+03 -0.127851449827206E+03

Using inst fields:

5117:300: import_to_hycom_deb,max,min,mean=    taux10  0.421752682437904E+00 -0.102475189077673E+01 -0.145551839806498E-01
5118:300: import_to_hycom_deb,max,min,mean=    tauy10  0.874899909211888E+00 -0.442320312038619E+00  0.212422872715114E-02
5119:300: import_to_hycom_deb,max,min,mean=      prcp  0.166373691172656E-01  0.000000000000000E+00  0.513272903509620E-04
5120:300: import_to_hycom_deb,max,min,mean=    swflxd  0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
5121:300: import_to_hycom_deb,max,min,mean=    lwflxd  0.189798814619155E+02 -0.119739769567530E+03 -0.573865264850271E+02
5122:300: import_to_hycom_deb,max,min,mean=    mslprs  0.102404224694724E+06  0.987505831283595E+05  0.101521831780655E+06
5123:300: import_to_hycom_deb,max,min,mean=   sensflx  0.641409693659895E+02 -0.114662954907980E+03 -0.874795168044725E+01
5124:300: import_to_hycom_deb,max,min,mean=    latflx  0.886765221743354E+02 -0.507741607562167E+03 -0.127840326125221E+03
DeniseWorthen commented 1 year ago

Changes were committed in #1942