ufs-community / UFS_UTILS

Utilities for the NCEP models.
Other
21 stars 104 forks source link

Update chgres_cube for mixed land/non-land points #123

Closed GeorgeGayno-NOAA closed 5 months ago

GeorgeGayno-NOAA commented 4 years ago

The grid generation is being updated to output lake fraction and lake depth (#111). As a result, some model grid points will be a mix of land and non-land. Currently, chgres_cube assumes that points can only be land or non-land, not both. Update chgres_cube accordingly.

edwardhartnett commented 3 years ago

Can this be closed since chgres_cube has been deleted?

GeorgeGayno-NOAA commented 3 years ago

Can this be closed since chgres_cube has been deleted?

Do you mean global_chgres?

edwardhartnett commented 3 years ago

Whoops! Got confused. ;-)

yangfanglin commented 2 years ago

@GeorgeGayno-NOAA George, are you still planning to update chgres-Cube for fractional grid ? The current process of creating cold start ICs for the coupled model documented in https://github.com/ufs-community/UFS_UTILS/issues/145 is rather clumsy. (Including @arunchawla-NOAA and @shansun6 for their input )

GeorgeGayno-NOAA commented 2 years ago

@GeorgeGayno-NOAA George, are you still planning to update chgres-Cube for fractional grid ? The current process of creating cold start ICs for the coupled model documented in #145 is rather clumsy. (Including @arunchawla-NOAA and @shansun6 for their input )

If this is still a requirement, I can work on it, or help someone else do the work.

yangfanglin commented 2 years ago

@GeorgeGayno-NOAA Making CHGRES consistent with the fractional grid used by the model is necessary. It also helps streamline the creation of ICs and avoids confusion. (@arunchawla-NOAA )

GeorgeGayno-NOAA commented 2 years ago

@yangfanglin and @shansun6 - Do you have a sample coldstart file for running with mixed land/non-land? A sample file you create from this procedure - https://docs.google.com/document/d/15FtEHUoN9JTmt_q4Qt1kdSb1rSbjQDYMpMiKaxtn404/edit?usp=sharing

GeorgeGayno-NOAA commented 2 years ago

@yangfanglin and @shansun6 - Do you have a sample coldstart file for running with mixed land/non-land? A sample file you create from this procedure - https://docs.google.com/document/d/15FtEHUoN9JTmt_q4Qt1kdSb1rSbjQDYMpMiKaxtn404/edit?usp=sharing

@shansun6 I was looking at your document. You are adding only two new variables, a skin temperature and roughness for land. What about soil temperature (stc)? At lake/sea ice points, the ice model uses that record for its column temperatures. For a point that is both land and ice, separate records will be needed.

GeorgeGayno-NOAA commented 2 years ago

Currently, chgres places a roughness value of 1 cm at ice points? Does the model actually use this value from the coldstart file? If so, we will need three 'zorl' records.

A similar question for the snow-free albedo (alvsf/alvwf/alnsf/anfwf). Flag values of 0.06 are placed at non-land points (both water and ice). Does the model uses these values from the coldstart file. If so. additional albedo records will be needed.

@barlage who on the land team should I ask?

yangfanglin commented 2 years ago

@GeorgeGayno-NOAA Hopefully @shansun6 and @barlage can address questions. Bing Fu might be able to point you to the ICs you need as well.

For the roughness over ice, please see the discussion in https://github.com/NCAR/ccpp-physics/pull/808 . Helin and Weizhong can also help answer the question.

bingfu-NOAA commented 2 years ago

@yangfanglin and @shansun6 - Do you have a sample coldstart file for running with mixed land/non-land? A sample file you create from this procedure - https://docs.google.com/document/d/15FtEHUoN9JTmt_q4Qt1kdSb1rSbjQDYMpMiKaxtn404/edit?usp=sharing

@shansun6 I was looking at your document. You are adding only two new variables, a skin temperature and roughness for land. What about soil temperature (stc)? At lake/sea ice points, the ice model uses that record for its column temperatures. For a point that is both land and ice, separate records will be needed.

@GeorgeGayno-NOAA You can find sample IC here on Hera: /scratch2/NCEPDEV/stmp3/Bing.Fu/o/p7ic/com/gens/dev/merge_fix/C384_025

bingfu-NOAA commented 2 years ago

@yangfanglin and @shansun6 - Do you have a sample coldstart file for running with mixed land/non-land? A sample file you create from this procedure - https://docs.google.com/document/d/15FtEHUoN9JTmt_q4Qt1kdSb1rSbjQDYMpMiKaxtn404/edit?usp=sharing

@shansun6 I was looking at your document. You are adding only two new variables, a skin temperature and roughness for land. What about soil temperature (stc)? At lake/sea ice points, the ice model uses that record for its column temperatures. For a point that is both land and ice, separate records will be needed.

@GeorgeGayno-NOAA You can find sample IC here on Hera: /scratch2/NCEPDEV/stmp3/Bing.Fu/o/p7ic/com/gens/dev/merge_fix/C384_025

@GeorgeGayno-NOAA Here includes both model level IC data as well as surface IC data. /scratch2/NCEPDEV/stmp3/Bing.Fu/o/p7ic/com/gens/dev/merge/C384_025

GeorgeGayno-NOAA commented 2 years ago

Some clarification from @shansun6 concerning the definition of 'fice' with fractional grids:

fice ranges from [0,1]. It is defined as the ratio of ice over the ocean portion of the grid. If a grid point is 50% land and is covered totally by the sea-ice, then fice=100%.

GeorgeGayno-NOAA commented 2 years ago

Clarification from @shansun6 concerning the 'stc' array - it is only used at points with land. It is not used for ice or open water.

ShanSunNOAA commented 2 years ago

Hi George,

I spoke too soon regarding "stc". In the non-fractional case, 'stc' contains both 4-layer soil temp and 2-layer internal ice temp. Now in the fractional case, 'stc' contains soil temp only, which means we would lose info of 2-layer internal ice temp, right? Do we need to add an additional array (:,:,2) to store the 2-layer internal ice temp?

The corresponding part of FV3GFS_io.F90 would need to be modified as well:

if (nint(sfc_var3ice(1,1,1)) == -9999) then    !--- initialize internal

ice temp from layer 1 and 2 soil temp if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing tiice') do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) Sfcprop(nb)%tiice(ix,1) = max(timin, min(con_tice, Sfcprop(nb)%stc(ix,1))) Sfcprop(nb)%tiice(ix,2) = max(timin, min(con_tice, Sfcprop(nb)%stc(ix,2))) enddo enddo endif

I can modify FV3GFS_io.F90 when the time comes.

Sorry for not thought of this in the first time,

Shan

On Thu, Mar 10, 2022 at 2:19 PM GeorgeGayno-NOAA @.***> wrote:

Clarification from @shansun6 https://github.com/shansun6 concerning the 'stc' array - it is only used at points with land. It is not used for ice or open water.

— Reply to this email directly, view it on GitHub https://github.com/ufs-community/UFS_UTILS/issues/123#issuecomment-1064514474, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALORMVX6W44367T3K4OY673U7JRPBANCNFSM4PF2TESA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you were mentioned.Message ID: @.***>

GeorgeGayno-NOAA commented 2 years ago

I will output a separate 'stc' array for sea ice.

On Thu, Mar 10, 2022 at 6:02 PM ShanSun-NOAA @.***> wrote:

Hi George,

I spoke too soon regarding "stc". In the non-fractional case, 'stc' contains both 4-layer soil temp and 2-layer internal ice temp. Now in the fractional case, 'stc' contains soil temp only, which means we would lose info of 2-layer internal ice temp, right? Do we need to add an additional array (:,:,2) to store the 2-layer internal ice temp?

The corresponding part of FV3GFS_io.F90 would need to be modified as well:

if (nint(sfc_var3ice(1,1,1)) == -9999) then !--- initialize internal ice temp from layer 1 and 2 soil temp if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing tiice') do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) Sfcprop(nb)%tiice(ix,1) = max(timin, min(con_tice, Sfcprop(nb)%stc(ix,1))) Sfcprop(nb)%tiice(ix,2) = max(timin, min(con_tice, Sfcprop(nb)%stc(ix,2))) enddo enddo endif

I can modify FV3GFS_io.F90 when the time comes.

Sorry for not thought of this in the first time,

Shan

On Thu, Mar 10, 2022 at 2:19 PM GeorgeGayno-NOAA @.***> wrote:

Clarification from @shansun6 https://github.com/shansun6 concerning the 'stc' array - it is only used at points with land. It is not used for ice or open water.

— Reply to this email directly, view it on GitHub < https://github.com/ufs-community/UFS_UTILS/issues/123#issuecomment-1064514474 , or unsubscribe < https://github.com/notifications/unsubscribe-auth/ALORMVX6W44367T3K4OY673U7JRPBANCNFSM4PF2TESA

. Triage notifications on the go with GitHub Mobile for iOS < https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675

or Android < https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub .

You are receiving this because you were mentioned.Message ID: @.***>

— Reply to this email directly, view it on GitHub https://github.com/ufs-community/UFS_UTILS/issues/123#issuecomment-1064595335, or unsubscribe https://github.com/notifications/unsubscribe-auth/AMSYBTF5HFRVRRMFWEZXHODU7J5P7ANCNFSM4PF2TESA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you were mentioned.Message ID: @.***>

-- George Gayno IMSG at NOAA/NWS/NCEP/EMC 5830 University Research Ct., Rm. 2882 College Park, MD 20740 @.*** 301-683-3658

GeorgeGayno-NOAA commented 2 years ago

Set up a test case to check that the fractional grid logic is working.

On Venus, three sets of C96 surface files were created and placed here: /gpfs/dell2/emc/modeling/noscrub/George.Gayno/ufs_utils.git/chgres_cube.fractional

1) ./my_grids_fract - Created using the 'add_lake' option set to true. 2) ./my_grid_ceiling - Same as 1) expect the slmsk record was updated as ceiling(land_frac) 3) ./my_grid_floor - Same as 1) except the slmsk record was updated as floor(land_frac)

Run the following tests:

4) Run chgres_cube using 1) and with the fractional grid logic turned on. 5) Run chgres_cube using 2) with the fractional grid logic turned off. 6) Run chgres_cube using 3) with the fractional grid logic turned off.

Check results as follows:

7) Compare the surface fields from (4) at points with at least some land with those from (5) at points where slmsk is '1'. 8) Compare the surface fields from (4) at points with at least some non-land with those from 6) at points where slmsk is '0'.

The comparisons from (7) will be done with this tool - https://github.com/GeorgeGayno-NOAA/UFS_UTILS/tree/feature/chgres_frac/sorc/chgres_tools.fd

The tool will be updated to do comparisons from (8) is here - https://github.com/GeorgeGayno-NOAA/UFS_UTILS/tree/feature/chgres_frac/sorc/chgres_tools2.fd

Comments on my test approach are welcome.

GeorgeGayno-NOAA commented 2 years ago

@yangfanglin @shansun6 I think I have this working. How do you want to test it?

ShanSunNOAA commented 2 years ago

Thanks for working on it. I'd be happy to test it. -Shan

On Thu, Apr 28, 2022 at 12:43 PM GeorgeGayno-NOAA @.***> wrote:

@yangfanglin https://github.com/yangfanglin @shansun6 https://github.com/shansun6 I think I have this working. How do you want to test it?

— Reply to this email directly, view it on GitHub https://github.com/ufs-community/UFS_UTILS/issues/123#issuecomment-1112541832, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALORMVSDNOK7JJOWCXGNFE3VHLL4HANCNFSM4PF2TESA . You are receiving this because you were mentioned.Message ID: @.***>

GeorgeGayno-NOAA commented 2 years ago

Thanks for working on it. I'd be happy to test it. -Shan

Can you clone my fork and compile my branch?

GeorgeGayno-NOAA commented 2 years ago

Set up a test case to check that the fractional grid logic is working.

On Venus, three sets of C96 surface files were created and placed here: /gpfs/dell2/emc/modeling/noscrub/George.Gayno/ufs_utils.git/chgres_cube.fractional

  1. ./my_grids_fract - Created using the 'add_lake' option set to true.
  2. ./my_grid_ceiling - Same as 1) expect the slmsk record was updated as ceiling(land_frac)
  3. ./my_grid_floor - Same as 1) except the slmsk record was updated as floor(land_frac)

Run the following tests:

  1. Run chgres_cube using 1) and with the fractional grid logic turned on.
  2. Run chgres_cube using 2) with the fractional grid logic turned off.
  3. Run chgres_cube using 3) with the fractional grid logic turned off.

Check results as follows:

  1. Compare the surface fields from (4) at points with at least some land with those from (5) at points where slmsk is '1'.
  2. Compare the surface fields from (4) at points with at least some non-land with those from 6) at points where slmsk is '0'.

The comparisons from (7) will be done with this tool - https://github.com/GeorgeGayno-NOAA/UFS_UTILS/tree/feature/chgres_frac/sorc/chgres_tools.fd

The tool will be updated to do comparisons from (8) is here - https://github.com/GeorgeGayno-NOAA/UFS_UTILS/tree/feature/chgres_frac/sorc/chgres_tools2.fd

Comments on my test approach are welcome.

The tests (4/5/6) were run using the branch at 64f3469 and the script (on Dell) here - /gpfs/dell2/emc/modeling/noscrub/George.Gayno/ufs_utils.git/chgres_cube.fractional/run.chgres.sh.

The comparisons (7/8) were done and found to be correct.

GeorgeGayno-NOAA commented 2 years ago

Several new records were added (64f3469) to the output surface coldstart file when running in coupled/fractional grid mode. These are:

Snow at land is imposed by an external analysis. At ice it is accumulated/melted by the physics and cycled. As a result, land points can have much larger depths than ice. So I decided to interpolate snow from ice to ice and from land to land.

There are some surface fields that I did not create separate land/non-land records for. These include uustar (friction velocity), ffmm (log((z0+z1)1/z0)), f10m (log((z0+10)1/z0). Is this OK? For example, ustar can be different at water vs. land.

ShanSunNOAA commented 2 years ago

I think that it would be a good idea to separate out all of the variables that we separated out in 'GFS_surface_composites'. It may not be needed now but it's good to have the capability in the future.

Thanks, Shan

On Fri, Apr 29, 2022 at 12:01 PM GeorgeGayno-NOAA @.***> wrote:

Several new records were added to the output surface coldstart file when running in coupled/fractional grid mode. These are:

  • alvsf/alvwf/alnsf/alnwf - snow-free albedo at points with some land. Flag value (-9) elsewhere.
  • alvsf_nl/alvwf_nl/alnsf_nl/alnwf_nl - snow-free albedo at points with some non-land. Flag value (-999) at points with all land.
  • stc - soil column temperature at points with some land. Flag value (-999) elsewhere.
  • stc_ice - ice column temperature at points with some ice. Flag value (0) elsewhere.
  • tg3 - substrate temperature at points with some land. Flag value (-999) elsewhere.
  • tg3_ice - substrate temperature at points with some ice. Flag value (-999) elsewhere.
  • zorl - roughness length at points with some open water. Flag value (0) elsewhere.
  • zorll - roughness length at points with some land. Flag value (-9) elsewhere.
  • zorl_ice - roughness length at points with some ice. Flag value (-999) elsewhere.
  • tsfcl - skin temperature at points with some land. Flag value (-999) elsewhere.
  • tsea - SST at points with some open water. Flag value (0) elsewhere.
  • tisfc - skin temperature at points with some ice. Flag value (0) elsewhere.

Snow at land is imposed by an external analysis. At ice it is accumulated/melted by the physics and cycled. As a result, land points can have much larger depths than ice. So I decided to interpolate snow from ice to ice and from land to land.

  • sheleg/snwdph - snow liq equiv/depth at points with some land. Flag value (-999) at points with some ice.
  • sheleg_ice/snwdph_ice - snow liq equiv/depth at points with some ice. Zero elsewhere.

There are some surface fields that I did not create separate land/non-land records for. These include uustar (friction velocity), ffmm (log((z0+z1)1/z0)), f10m (log((z0+10)1/z0). Is this OK? For example, ustar can be different at water vs. land.

— Reply to this email directly, view it on GitHub https://github.com/ufs-community/UFS_UTILS/issues/123#issuecomment-1113581658, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALORMVTJYDMX3NAD6OSM3DDVHQPXFANCNFSM4PF2TESA . You are receiving this because you were mentioned.Message ID: @.***>

ShanSunNOAA commented 2 years ago

If you could copy these files on hera, I'd be happy to look at the output.

In addition, if you could provide detailed instructions on how to run chgres_cube under your fork that I have now, that would be great.

Thanks, Shan

On Fri, Apr 29, 2022 at 11:50 AM GeorgeGayno-NOAA @.***> wrote:

Set up a test case to check that the fractional grid logic is working.

On Venus, three sets of C96 surface files were created and placed here: /gpfs/dell2/emc/modeling/noscrub/George.Gayno/ufs_utils.git/chgres_cube.fractional

  1. ./my_grids_fract - Created using the 'add_lake' option set to true.
  2. ./my_grid_ceiling - Same as 1) expect the slmsk record was updated as ceiling(land_frac)
  3. ./my_grid_floor - Same as 1) except the slmsk record was updated as floor(land_frac)

Run the following tests:

  1. Run chgres_cube using 1) and with the fractional grid logic turned on.
  2. Run chgres_cube using 2) with the fractional grid logic turned off.
  3. Run chgres_cube using 3) with the fractional grid logic turned off.

Check results as follows:

  1. Compare the surface fields from (4) at points with at least some land with those from (5) at points where slmsk is '1'.
  2. Compare the surface fields from (4) at points with at least some non-land with those from 6) at points where slmsk is '0'.

The comparisons from (7) will be done with this tool - https://github.com/GeorgeGayno-NOAA/UFS_UTILS/tree/feature/chgres_frac/sorc/chgres_tools.fd

The tool will be updated to do comparisons from (8) is here - https://github.com/GeorgeGayno-NOAA/UFS_UTILS/tree/feature/chgres_frac/sorc/chgres_tools2.fd

Comments on my test approach are welcome.

The tests (4/5/6) were run using the branch at 64f3469 https://github.com/ufs-community/UFS_UTILS/commit/64f3469bd518a88f4c3870a818a54203c1be3b85 and the script (on Dell) here - /gpfs/dell2/emc/modeling/noscrub/George.Gayno/ufs_utils.git/chgres_cube.fractional/ run.chgres.sh.

The comparisons (7/8) were done and found to be correct.

— Reply to this email directly, view it on GitHub https://github.com/ufs-community/UFS_UTILS/issues/123#issuecomment-1113572920, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALORMVWTF4CD32CXRUKZ2N3VHQOMPANCNFSM4PF2TESA . You are receiving this because you were mentioned.Message ID: @.***>

GeorgeGayno-NOAA commented 2 years ago

If you could copy these files on hera, I'd be happy to look at the output. In addition, if you could provide detailed instructions on how to run chgres_cube under your fork that I have now, that would be great. Thanks, Shan

I can copy some files to Hera.

To run chgres_cube for coupled mode you should only have to change the namelist. There is a new namelist variable - fract_grid. Set it to '.true.'

GeorgeGayno-NOAA commented 2 years ago

@shansun6 Sample files are on Hera here: /scratch2/NCEPDEV/stmp1/George.Gayno/For_Shan

ShanSunNOAA commented 2 years ago

Got it - thanks! I will make several plots and get back to you. -Shan

On Fri, May 6, 2022 at 10:39 AM GeorgeGayno-NOAA @.***> wrote:

@shansun6 https://github.com/shansun6 Sample files are on Hera here: /scratch2/NCEPDEV/stmp1/George.Gayno/For_Shan

— Reply to this email directly, view it on GitHub https://github.com/ufs-community/UFS_UTILS/issues/123#issuecomment-1119801380, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALORMVQVADYY4VOMGXMXUK3VIVDNJANCNFSM4PF2TESA . You are receiving this because you were mentioned.Message ID: @.***>

ShanSunNOAA commented 2 years ago

Hi George,

Thanks for copying your sfc_data onto hera. I have gone over them. Before I send you my comments, could you please copy over the oro_data as well? This way I won't guess what 'land_frac' is.

Thanks, Shan

On Fri, May 6, 2022 at 10:42 AM Shan Sun - NOAA Federal @.***> wrote:

Got it - thanks! I will make several plots and get back to you. -Shan

On Fri, May 6, 2022 at 10:39 AM GeorgeGayno-NOAA @.***> wrote:

@shansun6 https://github.com/shansun6 Sample files are on Hera here: /scratch2/NCEPDEV/stmp1/George.Gayno/For_Shan

— Reply to this email directly, view it on GitHub https://github.com/ufs-community/UFS_UTILS/issues/123#issuecomment-1119801380, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALORMVQVADYY4VOMGXMXUK3VIVDNJANCNFSM4PF2TESA . You are receiving this because you were mentioned.Message ID: @.***>

GeorgeGayno-NOAA commented 2 years ago

Hi George, Thanks for copying your sfc_data onto hera. I have gone over them. Before I send you my comments, could you please copy over the oro_data as well? This way I won't guess what 'land_frac' is. Thanks, Shan On Fri, May 6, 2022 at 10:42 AM Shan Sun - NOAA Federal @.***> wrote:

There are here - /scratch2/NCEPDEV/stmp1/George.Gayno/For_Shan/my_grids_fract

ShanSunNOAA commented 2 years ago

Hi George,

Thanks for copying over the oro_data files. I am comparing your oro_data against your sfc_data.

As a first step, I picked 10 points with different landfrac to see various temperatures on these 10 points, see attached.

(1) The first 4 points are ocean points without ice. I like the flag value (-999.9) assigned to tsfcl on the ocean points. Could you explain why tisfc is set to zero and not -999.9 on these ocean points? I see asymmetry here, although ice cover is dynamic and land cover is static.

(2) I even prefer to make the flag value a much smaller number (e.g., -e33) so that the model would crash right away when stepping onto the flag value in the computation.

(3) On ice-covered points, variables ice cover, tisfc and slmsk are all consistent.

(4) Normally tsea is set to freezing temperature (not zero) when a grid is covered by ice (even partial ice), unless there is additional info on SST.

I will continue checking other variables after I hear from you, as there are a lot in common.

Thanks, Shan

[image: GG_ic6.png]

On Mon, May 9, 2022 at 2:38 PM GeorgeGayno-NOAA @.***> wrote:

Hi George, Thanks for copying your sfc_data onto hera. I have gone over them. Before I send you my comments, could you please copy over the oro_data as well? This way I won't guess what 'land_frac' is. Thanks, Shan On Fri, May 6, 2022 at 10:42 AM Shan Sun - NOAA Federal @.***> wrote:

There are here - /scratch2/NCEPDEV/stmp1/George.Gayno/For_Shan/my_grids_fract

— Reply to this email directly, view it on GitHub https://github.com/ufs-community/UFS_UTILS/issues/123#issuecomment-1121558959, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALORMVXM7S7KGC5UAX2O6F3VJFZVFANCNFSM4PF2TESA . You are receiving this because you were mentioned.Message ID: @.***>

GeorgeGayno-NOAA commented 2 years ago

Per @shansun6 request, update flag value to be 'large' at 6e17ccd. Reran test case and placed files on Hera here: /scratch2/NCEPDEV/stmp1/George.Gayno/For_Shan.missing.flag

ShanSunNOAA commented 2 years ago

George,

Thanks for updating the flag value. They are looking better.

I have questions on a few variables, see those highlighted here https://docs.google.com/presentation/d/1CEpNv1NGg8S5kzYNhzKGnU_VlgVG-vh4IOjNscqOH3Y/edit?usp=sharing .

BTW, the internal ice temperature in the model has 2 layers. So I'd suggest using a dimension of 2 (instead of 4) for the newly introduced stc_ice, unless there are other considerations I am not aware of.

Thanks, Shan

On Wed, May 11, 2022 at 9:27 AM GeorgeGayno-NOAA @.***> wrote:

Per @shansun6 https://github.com/shansun6 request, update flag value to be 'large' at 6e17ccd https://github.com/ufs-community/UFS_UTILS/commit/6e17ccd4e8aa3a4c8d708763db42f7473ef1bf72. Reran test case and placed files on Hera here: /scratch2/NCEPDEV/stmp1/George.Gayno/For_Shan.missing.flag

— Reply to this email directly, view it on GitHub https://github.com/ufs-community/UFS_UTILS/issues/123#issuecomment-1123930407, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALORMVQTDOUTYG7F7OVL433VJPGXHANCNFSM4PF2TESA . You are receiving this because you were mentioned.Message ID: @.***>

GeorgeGayno-NOAA commented 2 years ago

George, Thanks for updating the flag value. They are looking better. I have questions on a few variables, see those highlighted here https://docs.google.com/presentation/d/1CEpNv1NGg8S5kzYNhzKGnU_VlgVG-vh4IOjNscqOH3Y/edit?usp=sharing . BTW, the internal ice temperature in the model has 2 layers. So I'd suggest using a dimension of 2 (instead of 4) for the newly introduced stc_ice, unless there are other considerations I am not aware of. Thanks, Shan

Thanks, @shansun6. I will take a look.

GeorgeGayno-NOAA commented 2 years ago

Per @shansun6 request, output only two layers of stc_ice (ice column temperature). The ice model only uses two layers. Done at 49ebe05.

GeorgeGayno-NOAA commented 1 year ago

Tested the head of the branch (1fe3eef) in a GFS free forecast on Hera (/scratch1/NCEPDEV/da/George.Gayno/ufs_utils.git/chgres_cube.fractional/para_gfs)

My test is crashing with a surface mismatch. Here is one of the messages:

input of shdfac with lai
 95:            1       -9999 shdfac=  0.387981057167053      vai=
 95:    1.24465753424658      tv= -8.367605030848432E+019 tg= -4.434473406374244E+019
 95:  lwdn= -2.963063376696818E+019 fira=  0.000000000000000E+000 snowh=
 95:   0.000000000000000E+000

My test version of chgres intentionally sets flag values to a very large negative number in order to catch problems. For example, tg3 should have a valid value at any point with some land. At other points, tg3 is set to the flag value. Here, the flag value is being used.

The entire log file go to (Hera) /scratch2/NCEPDEV/stmp1/George.Gayno/COMROT/mytest2/logs/2021092900

HelinWei-NOAA commented 1 year ago

@GeorgeGayno-NOAA I suspect that the crash is because the different grid file was used for creating the oro data and the other fixed fields. Mike has an utility to check if the grid is consistent for all fixed fields.

Tested the head of the branch (1fe3eef) in a GFS free forecast on Hera (/scratch1/NCEPDEV/da/George.Gayno/ufs_utils.git/chgres_cube.fractional/para_gfs)

My test is crashing with a surface mismatch. Here is one of the messages:

input of shdfac with lai
 95:            1       -9999 shdfac=  0.387981057167053      vai=
 95:    1.24465753424658      tv= -8.367605030848432E+019 tg= -4.434473406374244E+019
 95:  lwdn= -2.963063376696818E+019 fira=  0.000000000000000E+000 snowh=
 95:   0.000000000000000E+000

My test version of chgres intentionally sets flag values to a very large negative number in order to catch problems. For example, tg3 should have a valid value at any point with some land. At other points, tg3 is set to the flag value. Here, the flag value is being used.

The entire log file go to (Hera) /scratch2/NCEPDEV/stmp1/George.Gayno/COMROT/mytest2/logs/2021092900

GeorgeGayno-NOAA commented 1 year ago

@GeorgeGayno-NOAA I suspect that the crash is because the different grid file was used for creating the oro data and the other fixed fields. Mike has an utility to check if the grid is consistent for all fixed fields.

Tested the head of the branch (1fe3eef) in a GFS free forecast on Hera (/scratch1/NCEPDEV/da/George.Gayno/ufs_utils.git/chgres_cube.fractional/para_gfs) My test is crashing with a surface mismatch. Here is one of the messages:

input of shdfac with lai
 95:            1       -9999 shdfac=  0.387981057167053      vai=
 95:    1.24465753424658      tv= -8.367605030848432E+019 tg= -4.434473406374244E+019
 95:  lwdn= -2.963063376696818E+019 fira=  0.000000000000000E+000 snowh=
 95:   0.000000000000000E+000

My test version of chgres intentionally sets flag values to a very large negative number in order to catch problems. For example, tg3 should have a valid value at any point with some land. At other points, tg3 is set to the flag value. Here, the flag value is being used. The entire log file go to (Hera) /scratch2/NCEPDEV/stmp1/George.Gayno/COMROT/mytest2/logs/2021092900

@barlage Where is your utilty?

barlage commented 1 year ago

@GeorgeGayno-NOAA take a look at this list of variables:

https://github.com/NOAA-EMC/fv3atm/blob/160b422dc1d294623cc8ebfabfbe7d28d7c65c62/io/FV3GFS_io.F90#L724

I believe naming the sfc_data fields to be consistent may start to solve the problem.

barlage commented 1 year ago

@GeorgeGayno-NOAA I don't see tg3_ice so that may not be needed.

barlage commented 1 year ago

@GeorgeGayno-NOAA it looks like tsea should be SST over any water fraction, it will get assigned to tsfco

GeorgeGayno-NOAA commented 1 year ago

Update to write out only one snow depth/equivalent record for both land and ice. At points with land and ice, the land value is stored. This is how Shan's method works. Here is what I learned:

          if (Sfcprop(nb)%landfrac(ix) > zero) then
            tem = one / (Sfcprop(nb)%fice(ix)*(one-Sfcprop(nb)%landfrac(ix))+Sfcprop(nb)%landfrac(ix))
            Sfcprop(nb)%snodl(ix)  = Sfcprop(nb)%snowd(ix) * tem
          else
            Sfcprop(nb)%snodl(ix)  = zero
          endif

So there is no need to pass in separate land and ice records for snow.

GeorgeGayno-NOAA commented 1 year ago

Optionally, you can add separate records for land and ice to the cold start file - snodl/snodi/weasdl/weasdi. The model will read them.

I tried this while retaining the 'sheleg' and 'snwdph' records but setting them to all missing (1.e20). The model then crashed when setting snow cover in cppp routine GFS_phys_time_vary.f3.F90.

               rsnow  = 0.001_kind_phys*weasd(ix)/snupx(vegtyp)
               if (0.001_kind_phys*weasd(ix) < snupx(vegtyp)) then
                 sncovr(ix) = one - (exp(-salp_data*rsnow) - rsnow*exp(-salp_data))
               else
                 sncovr(ix) = one

That calculation uses the liquid equivalent value for the 'sheleg' record and not the snodi/snodl/weasdi/weasdl records. So if you add the optional snow records (weasdl/weasdi) to the coldstart file, you still need the 'sheleg' record with valid values.