Skip to content
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

Add in area correction to mizuRoute #183

Open
ekluzek opened this issue May 12, 2021 · 2 comments
Open

Add in area correction to mizuRoute #183

ekluzek opened this issue May 12, 2021 · 2 comments
Assignees
Labels
cesm-coupling For cesm coupling enhancement Improving usability, performance or other types of enhancements low priority no immediate attention needed

Comments

@ekluzek
Copy link
Collaborator

ekluzek commented May 12, 2021

With the latest version of CTSM we have area correction added into CTSM, MOSART and RTM. This is multiplying fields by the ratio of what the model things the area is divided by the area as defined by the mesh file.

Here's an example section added to the end of realize fields for RTM:

+    ! Determine areas for regridding
+    call ESMF_MeshGet(Emesh, numOwnedElements=numOwnedElements, rc=rc)
+    if (chkerr(rc,__LINE__,u_FILE_u)) return
+    call ESMF_StateGet(exportState, itemName=trim(fldsFrRof(2)%stdname), field=lfield, rc=rc)
+    if (ChkErr(rc,__LINE__,u_FILE_u)) return
+    call ESMF_FieldRegridGetArea(lfield, rc=rc)
+    if (chkerr(rc,__LINE__,u_FILE_u)) return
+    call ESMF_FieldGet(lfield, farrayPtr=dataptr, rc=rc)
+    if (chkerr(rc,__LINE__,u_FILE_u)) return
+    allocate(mesh_areas(numOwnedElements))
+    mesh_areas(:) = dataptr(:)
+
+    ! Determine flux correction factors (module variables)
+    allocate(model_areas(numOwnedElements))
+    allocate (mod2med_areacor(numOwnedElements))
+    allocate (med2mod_areacor(numOwnedElements))
+    n = 0
+    do g = runoff%begr,runoff%endr
+       n = n + 1
+       model_areas(n) = runoff%area(g)*1.0e-6_r8/(re*re)
+       mod2med_areacor(n) = model_areas(n) / mesh_areas(n)
+       med2mod_areacor(n) = mesh_areas(n) / mod2med_areacor(n)
+    end do
+    deallocate(model_areas)
+    deallocate(mesh_areas)
+
+    min_mod2med_areacor = minval(mod2med_areacor)
+    max_mod2med_areacor = maxval(mod2med_areacor)
+    min_med2mod_areacor = minval(med2mod_areacor)
+    max_med2mod_areacor = maxval(med2mod_areacor)
+    call shr_mpi_max(max_mod2med_areacor, max_mod2med_areacor_glob, mpicom_rof)
+    call shr_mpi_min(min_mod2med_areacor, min_mod2med_areacor_glob, mpicom_rof)
+    call shr_mpi_max(max_med2mod_areacor, max_med2mod_areacor_glob, mpicom_rof)
+    call shr_mpi_min(min_med2mod_areacor, min_med2mod_areacor_glob, mpicom_rof)
+
+    if (masterproc) then
+       write(iulog,'(2A,2g23.15,A )') trim(subname),' :  min_mod2med_areacor, max_mod2med_areacor ',&
+            min_mod2med_areacor_glob, max_mod2med_areacor_glob, 'RTM'
+       write(iulog,'(2A,2g23.15,A )') trim(subname),' :  min_med2mod_areacor, max_med2mod_areacor ',&
+            min_med2mod_areacor_glob, max_med2mod_areacor_glob, 'RTM'
+    end if
+

Then import_fields adds an extra argument for each field...

     allocate(temp(begr:endr,3))
 
-    call state_getimport(importState, 'Flrl_rofsur', begr, endr, output=temp(:,1), rc=rc)
+    call state_getimport(importState, 'Flrl_rofsur', begr, endr, output=temp(:,1), do_area_correction=.true., rc=rc)
     if (ChkErr(rc,__LINE__,u_FILE_u)) return

Which then does this...

+    ! determine output array
+    if (do_area_correction) then
+       fldptr(:) = fldptr(:) * med2mod_areacor(:)
     end if
+    do g = begr,endr
+       output(g) = fldptr(g-begr+1)
+    end do
+
+    ! check for nans
+    call check_for_nans(fldptr, trim(fldname), begr)

Similar stuff for export state...

@ekluzek ekluzek added enhancement Improving usability, performance or other types of enhancements cesm-coupling For cesm coupling labels May 12, 2021
@ekluzek ekluzek self-assigned this May 12, 2021
@ekluzek
Copy link
Collaborator Author

ekluzek commented May 12, 2021

I think in mizuRoute we may be OK in assuming this ratio is zero, since mizuRoute doesn't explicitly handle area.

@ekluzek
Copy link
Collaborator Author

ekluzek commented May 12, 2021

We don't think this is much of a problem in other ROF components.

@nmizukami nmizukami added the low priority no immediate attention needed label May 12, 2021
nmizukami added a commit to nmizukami/mizuRoute that referenced this issue Nov 9, 2023
38bcc0a8 Merge pull request ESCOMP#201 from jedwards4b/partial_match
b4466a5a remove debug print statement
c3cf3ec3 fix issue with partial branch match
7b6d92ef Merge pull request ESCOMP#198 from johnpaulalex/gitdir
927ce3a9 Merge pull request ESCOMP#197 from johnpaulalex/testpath
a04f1148 Merge pull request ESCOMP#196 from johnpaulalex/readmod
d9c14bf2 Change the rest of the methods to use -C. Still some usage of getcwd in test_unit_repository_git.
332b1064 Fix incorrect logged path of checkout_externals in test_sys_checkout: it was basically the parent of the current directory, which varies throughout the test. (it called abspath with '{0}/../../', which adds arbitrary and not-interpolated subdir '{0}' to the path, then removes it and removes one more level).
932a7499 Remove printlog from read_gitmodules_file since read_externals_description_file() already has a nearly-the-same printlog (but add it to the other caller).
5d13719e Merge pull request ESCOMP#195 from johnpaulalex/check_repo
42339544 Update utest to mock _git_remote_verbose in a new way, since it is now called via the GitRepository class rather than on the specific GitRepository instance.
d7a42ae9 Check that desired repo was actually checked out.
71596bbc Merge pull request ESCOMP#194 from johnpaulalex/manic2
4c96e824 Make the MANIC_TEST_BARE_REPO_ROOT env var special - give it a constant for easy tracking, and automatically tear it down after each test.
259bfc04 test_sys_checkout: use actual paths in on-the-fly configs rather than MANIC_TEST_BARE_REPO_ROOT env var. This will make it easier to test (in the near future) that checkout_externals actually checked out the desired repo dir.
557bbd6e Merge pull request ESCOMP#193 from johnpaulalex/manic
5314eede Remove MANIC_TEST_TMP_REPO_ROOT environment variable in favor of module-level variable.
345fc1e1 Merge pull request ESCOMP#191 from johnpaulalex/test_doc12
2117b843 test_sys_checkout: verify that basic by-tag/branch/hash tests actually take us to the correct git tag/branch/hash.
94d6e5f2 Merge pull request ESCOMP#190 from johnpaulalex/test_doc11
3ff33a6a Inline local-path-creation methods
47dea7f6 Merge pull request ESCOMP#189 from johnpaulalex/test_doc10
9ea75cbf Grab-bag of renamings: Remove redundant _NAME from repo constants, and consistently add _REPO suffix (This causes the majority of diffs).
c0c847ec Merge pull request ESCOMP#188 from johnpaulalex/test_doc9
2dd5ce0f test_sys_checkout.py: only check for correct 'required' or 'optional' state in the test that exercises required vs optional behavior. Removed a lot of boilerplate.
eb308598 Merge pull request ESCOMP#187 from johnpaulalex/test_doc8
1832e1f8 test_sys_checkout: Simplify many tests to only use a single external.
8689d61e Merge pull request ESCOMP#186 from johnpaulalex/test_doc7
fbee4253 Grab bag of test_sys_checkout cleanups:    Doc inside of each test more clearly/consistently.    TestSysCheckoutSVN didn’t get the inlining-of-helper-methods treatment, now it has that.    Move various standalone repo helper methods (like create_branch) into a RepoUtils class.    README.md was missing newlines when rendered as markdown.    Doc the return value of checkout.main    Fix test_container_exclude_component - it was looking for the wrong key (which is never present); now it looks for the correct key.
f0ed44a6 Merge pull request ESCOMP#185 from johnpaulalex/test_doc6
a3d59f5f Merge pull request ESCOMP#184 from johnpaulalex/test_doc5
5329c8ba test_sys_checkout: Inline config generation functions that are only called once.
464f2c7a test_sys_checkout: Inline another layer (per-config-file checks). Rename the 4 methods that are used multiple times, to reflect what they do rather than what they're called.
8872c0df Merge pull request ESCOMP#183 from johnpaulalex/doc_test4
c045335f Merge pull request ESCOMP#182 from johnpaulalex/doc_test3
c583b956 Merge pull request ESCOMP#181 from johnpaulalex/doc_test2
e01cfe27 test_sys_checkout: less confusing handling of return values from checkout_externals. Specifically, when doing a checkout, don't return tree_status from _before_ the checkout. Make a new wrapper to call checkout_externals a second time, to calculate the new status after a checkout (very frequent pattern).
23286818 test_sys_checkout: Remove another layer (which generates test component names)
c3717b6b Merge pull request ESCOMP#180 from johnpaulalex/doc_test
36d7a443 test_sys_checkout.py: remove one layer of functions (that check for local status enums). No-op.
2c4584bf More documentation about tests: * contents of test repositories (n a new README.md) * various constants in test_sys_checkout.py that point to those contents, and terminology like container/simple/mixed. * in each test method, the scenarios being tested. * The coupling between test methods.
55e74bd0 Merge pull request ESCOMP#179 from johnpaulalex/circ
66be8429 Remove circular dependency by making _External stop doing tricky things with sourcetrees.
82d3b247 Merge pull request ESCOMP#178 from johnpaulalex/test_doc
3223f49e Additional documentation of system tests - global variables, method descriptions.
45b7c01c Merge pull request ESCOMP#177 from jedwards4b/git_workflow
ace90b2c try setting credentials this way
f4d6aa93 try setting credentials this way
1d61a694 use this to set git credentials
7f9d330e use this to set git credentials
5ac731b8 add tmate code
836847be get git workflow working
dcd462d7 Merge pull request ESCOMP#176 from jedwards4b/add_github_testing
2d2479e9 Merge pull request ESCOMP#175 from johnpaulalex/fix
711a53fd add github testing of prs and automatic tagging of main
cfe0f888 fix typos
5665d614 Fix broken checkout behavior introduced by PR ESCOMP#172.
27909e25 Merge pull request ESCOMP#173 from johnpaulalex/readall
00ad0440 Further tiny refactorings and docs of checkout API (no-op).    Remove unused load_all param in _External.checkout().    Rename _External.checkout_externals() to checkout_subexternals(), to remove the ambiguity about whether the main external pointed to by the _External is itelf checked out (it is not)    Clarify load_all documentation - it’s always recursive, but applies different criteria at each level.    Rename variables in checkout.py (e.g. ext_description)  to match the equivalent code in sourcetree.py.
2ea3d1a3 Merge pull request ESCOMP#172 from johnpaulalex/fixit
43bf8092 Merge pull request ESCOMP#171 from johnpaulalex/docstatus
e6aa7d21 Merge pull request ESCOMP#170 from johnpaulalex/printdir
adbd7155 On checkout, refresh locally installed optional packages regardless of whether -o is passed in.
add07459 Comment tweaks, and fix 'ppath' typo
696527cb Document the format of various status dictionaries, and the various paths and path components within an _External.
c677b940 When processing an external, print out its path in addition to the base filename (to disambiguate all the externals.cfg's)
975d7fd5 Merge pull request ESCOMP#169 from johnpaulalex/docfix_branch
09709e36 Document _Externals.status().  The original comment was apparently copy-pasted from checkout().
1d880e09 Merge pull request ESCOMP#167 from billsacks/fix_svn_on_windows
3510da84 Tweak a unit test to improve coverage
eb7fc136 Handle the possibility that the URL already ends with '/'
02ea87e3 Fix svn URLs on Windows
b1c02ab5 Merge pull request ESCOMP#165 from gold2718/doc_fix
9f4be8c7 Add documentation about externals = None feature
a3b3a037 Merge pull request ESCOMP#162 from ESMCI/fischer/python3
d4f1b1e8 Change shebang lines to python3
2fd941ab Merge pull request ESCOMP#158 from billsacks/modified_solution
de08dc2e Add another option for when an external is in a modified state
e954582d Merge pull request ESCOMP#156 from billsacks/onbranch_show_hash
952e44d5 Change output: put tag/hash before branch name
10288430 Fix pre-existing pylint issues
01b13f78 When on a branch, show tag/hash, too
39ad5326 Merge pull request ESCOMP#150 from gold2718/fix_combo_config
75f8f02f Merge pull request ESCOMP#152 from jedwards4b/sort_by_local_path
42687bd5 remove commented code
29e26af8 fix pylint issues
7c9f3c61 add a test for nested repo checkout
75c5353d fix spacing
24a3726a improve sorting, checkout externals with each comp
29f45b08 remove py2 test and fix super call
880a4e76 remove decode
1c53be85 no need for set call
36c56dba simplier fix for issue
dc67cc68 simpler solution
b32c6fca fix to allow submodule name different from path
5b5e1c2b Merge pull request ESCOMP#144 from billsacks/improve_errmsg
c983863c Add another option for dealing with modified externals
59ce252c Add some details to the error message when externals are modified
be5a1a4d Merge pull request ESCOMP#143 from jedwards4b/add_exclude
2aa014a1 fix lint issue
49cd5e89 fix lint issues
418173ff Added tests for ExternalsDescriptionDict
afab352c fix lint issue
be85b7d1 fix the test
a580a570 push test
d4371086 add a test
21affe33 fix formatting issue
72e6b64a add an exclude option
c33a3bd2 Merge pull request ESCOMP#139 from jedwards4b/ignore_branch_prop
b124a9af ignore this silently, we use a hash so it does not matter
fde04e4d Merge pull request ESCOMP#138 from billsacks/add_python38_tests
37e4c4a5 Do not update dictionary in-place in loop
7e8474bb Remove testing on mac os
7f41c563 Fix pylint issue
3065b0d6 Add travis-ci tests with python3.7 and python3.8
34fbf556 Add support for git sparse checkout
6c6ef9fe Fix pylint errors
6a659ad3 Added test for sparse checkout and updated documentation
14432439 Support for git sparsecheckout via read-tree.
a48558d8 Merge pull request ESCOMP#119 from gold2718/submodules
f72ffe7f Do not try git submodule update if no .gitmodules file (git bug)
804e0afb Fix a pylint error
45aef95e Addressed review concerns
7da50314 New capability to use git submodule information to checkout externals

git-subtree-dir: manage_externals
git-subtree-split: 38bcc0a8c9fb23e209e5f3d58344bedb06ab5018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cesm-coupling For cesm coupling enhancement Improving usability, performance or other types of enhancements low priority no immediate attention needed
Projects
None yet
Development

No branches or pull requests

2 participants