Potential Issues with Immersion freezing in hetfrz.F90 #199
Replies: 28 comments 35 replies
-
It is my understanding the cam6 microphysics uses this code, but that the latest version of PUMAS reverts the immersion freezing to the Bigg's scheme, which doesn't consider the impact of aerosols on ice nucleation. Is that what you mean?
I'm a little surprised at the lack of accounting here. Is this a bug or a potentially invalid assumption (that there is always plenty of liquid?) Thanks for the proposed solutions. I think the more involved solution (create separate liquid and ice cloudborne number vars) is possible given it sounds like we are 6-months out from calibrating PUMAS in CAM7 (based on notes from the Friday mtg). |
Beta Was this translation helpful? Give feedback.
-
Thanks @cbardeen and @adamrher. I think we (that's the royal we, probably Chuck or Simone) should see about implementing these proposed adjustments and we can see what it does. What is Simone's github username? We can flag her in the discussion. @adamrher, yes, what I did for the current cam_dev is to turn off the CNT for immersion freezing that uses aerosols so that part is not aerosol aware (back to just an empirical temperature dependent fit). But we should see if we can bound the immersion freezing this way. I'm happy to try to test if Chuck wants to take a cut at the code mods. |
Beta Was this translation helpful? Give feedback.
-
@cbardeen, one more comment: on your number 2, is there much SO4 in the coarse mode (in the troposphere?). I guess we could try it. And for number 1, I think this is also worth trying to limit the immersion freezing and take out what is presumably already frozen. Volunteers? This doesn't sound too hard to do. By the way. If you look at the latest E3SM code, they have the same problems: I'm going to talk with them about it this week. Maybe I can get someone at PNNL to test it.... A |
Beta Was this translation helpful? Give feedback.
-
@cbardeen @andrewgettelman @fvitt is called in microp_aero.F90 before ndrop (dropmixnuc) and nucleate_ice is called. So cloud borne aerosols in the heterogeneous freezing routine are not actually reflecting the cloud-borne aerosols that are assumed in nucleate ice. This variable "aer_cb" is then used in get_aer_num to calculate the dust number for the immersion freezing and with that the "total_cloudborne_aer_num". On the other hand the interstitial aerosol (to calculate the mass) is taking from the interstitial aerosols that exist after ndrop and nucleate ice. Our question therefore, what is the reason for this inconsistency between cloud borne and interstitial, and wondered if that is another bug in the model??? |
Beta Was this translation helpful? Give feedback.
-
@cbardeen quick question, is alnsg_mode_accum the mean radius of the mode in this routine? |
Beta Was this translation helpful? Give feedback.
-
I suspect this is a bug. Initially nucleate_ice did not affect cloudborne aerosol; however, ndrop always has. It is odd the way this routine determines cloudborne, and it would seem to me that it should refelct the actual sstate at the time of the call, but you should ask the people who implented it if there is a reason they did it this way.
… On Nov 16, 2022, at 1:58 PM, tilmes ***@***.***> wrote:
@cbardeen <https://github.com/cbardeen> @andrewgettelman <https://github.com/andrewgettelman> @fvitt <https://github.com/fvitt>
A question that came up when Francis and I talked about the code and we hope one of you can answer is:
The subroutine: hetfrz_classnuc_cam_save_cbaero in hetfrz_classnuc_cam.F90 which get the cloud borne aerosol number and mmr
<https://user-images.githubusercontent.com/22222754/202290479-a93931f7-80ab-4f4c-a0b5-e7a77f1b5001.png>
is called in microp_aero.F90 before ndrop (dropmixnuc) and nucleate_ice is called. So cloud borne aerosols in the heterogeneous freezing routine are not actually reflecting the cloud-borne aerosols that are assumed in nucleate ice.
This variable "aer_cb" is then used in get_aer_num to calculate the dust number for the immersion freezing and with that the "total_cloudborne_aer_num". On the other hand the interstitial aerosol (to calculate the mass) is taking from the interstitial aerosols that exist after ndrop and nucleate ice.
Our question therefore, what is the reason for this inconsistency between cloud borne and interstitial, and wondered if that is another bug in the model???
—
Reply to this email directly, view it on GitHub <#199 (comment)>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/AFLRNRG6JHPHLPFZCVRX7KTWIVDGLANCNFSM6AAAAAARZVBXUQ>.
You are receiving this because you were mentioned.
--------------------------------------------------------------
Charles Bardeen
National Center for Atmospheric Research
P.O. Box 3000, Boulder, CO 80307-3000
Phone: (303) 497-1752, Fax: (303) 497-1400
***@***.***
|
Beta Was this translation helpful? Give feedback.
-
I agree that #2 may not matter in this case. We could try #1. Is there a code base that you want to work with to try a test? If you point me to it, I can try to make the code change.
… On Nov 11, 2022, at 3:21 PM, Andrew Gettelman ***@***.***> wrote:
@cbardeen <https://github.com/cbardeen>, one more comment: on your number 2, is there much SO4 in the coarse mode (in the troposphere?). I guess we could try it. And for number 1, I think this is also worth trying to limit the immersion freezing and take out what is presumably already frozen.
Volunteers? This doesn't sound too hard to do.
By the way. If you look at the latest E3SM code, they have the same problems:
https://github.com/E3SM-Project/E3SM/blob/v2.0.0/components/eam/src/physics/cam/hetfrz_classnuc.F90 <https://github.com/E3SM-Project/E3SM/blob/v2.0.0/components/eam/src/physics/cam/hetfrz_classnuc.F90>
https://github.com/E3SM-Project/E3SM/blob/v2.0.0/components/eam/src/physics/cam/hetfrz_classnuc_cam.F90 <https://github.com/E3SM-Project/E3SM/blob/v2.0.0/components/eam/src/physics/cam/hetfrz_classnuc_cam.F90>
I'm going to talk with them about it this week. Maybe I can get someone at PNNL to test it....
A
—
Reply to this email directly, view it on GitHub <#199 (comment)>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/AFLRNRFWY4TJFLGPFZHXBPDWH3BFJANCNFSM6AAAAAARZVBXUQ>.
You are receiving this because you were mentioned.
--------------------------------------------------------------
Charles Bardeen
National Center for Atmospheric Research
P.O. Box 3000, Boulder, CO 80307-3000
Phone: (303) 497-1752, Fax: (303) 497-1400
***@***.***
|
Beta Was this translation helpful? Give feedback.
-
Any ideas why the calculation of the accumulation mode number densities is different than the coarse mode number densities? The calculation of the coarse mode num densities use mode number mixing ratio times the fraction of the species in the mode, which makes sense to me. While the accum mode densities are calculated using the mass mixing ratio of the species multiplied by some num_to_mass conversion factors, which are hard wired in the code. Is the some reason these 2 modes are treated differently? |
Beta Was this translation helpful? Give feedback.
-
I setup a control and a first test case to do several test cases: Test1: Immersion freezing as in CAM6 Comparisons show that the test1 case (left) shows more ice number than the control case (as expected): Next I would like to do 2 tests, one that read the cloud borne aerosols before heterogeneous freezing and not before ndrop, and second, to include the fix by @cbardeen to move dust from cloud born into ice (Issue #1). |
Beta Was this translation helpful? Give feedback.
-
Test2: Immersion freezing as in CAM6, plus get cloud-borne aerosols in hetfrz_classnuc_cam.F90 same as interstitial aerosols. Remove call to get aer_cb in microp_aero.F90 |
Beta Was this translation helpful? Give feedback.
-
@cbardeen For Test3, when you have a chance, could you help me with the code that will move the aerosols from liquid to ice? |
Beta Was this translation helpful? Give feedback.
-
Test4: Setting num_to_mass_in to false, but else it is like Test 1: |
Beta Was this translation helpful? Give feedback.
-
Test5: Combine test2, test4, and fix listed in Issue#2 above |
Beta Was this translation helpful? Give feedback.
-
Test 6: |
Beta Was this translation helpful? Give feedback.
-
Test 7: Same as Test 5 but with MAM5 (reduced dust in the atmosphere) and adding the new simple SOA description to CAM which results in reduced black carbon. This is about the maximum I see we can do, without the fix that Chuck is going to implement (which is expected to have a large impact). We are getting somewhat closer to the old approach. |
Beta Was this translation helpful? Give feedback.
-
Here's a zonal mean plot in linear (not log) color scale, for cntl (top left) and tests 001, 002, 004, 005, 007. This is an annual mean over a single year. The mods in Test 004 clearly reduce NUMICE the most. What is the reasoning for executing this |
Beta Was this translation helpful? Give feedback.
-
I'm separately talking with Zachary McGraw who is looking at some of these modifications. He is suggesting that we could also reduce the dust used in the CNT immersion freezing by a factor to get the ice nucleation to be more reasonable. I think we might do that if this does not work. I might do it anyway as a test, depending on whether this last test works. |
Beta Was this translation helpful? Give feedback.
-
That makes sense. I'll see where Zachary put in the dust fraction if we need that after test #3 |
Beta Was this translation helpful? Give feedback.
-
I think the problem with flight tracks is that the SOCRATES tracks are in regions with very little dust: so the impacts may not be seen there. I got code mods from Zachary to limit dust fraction in hetfrz_classnuc.F90, the same way we are limiting soot fraction (limfacbc): basically I've added an analogous limfacdst and set it to 0.1 I'm setting up a test run of that now, and will let you know how it goes. If test #3 does not work, this is a backup: it is consistent with other code and still has CNT immersion freezing back on. |
Beta Was this translation helpful? Give feedback.
-
I suspect that the time-step sensitivity --- decreasing ice number with increasing mg_num_steps --- is related to something like what Simone is proposing in test#3, and won't be resolved by what we've tested so far. I'm requesting that if we do get a fix for test 003, that we run an F-case for a few different values of mg_num_steps (similar to these experiments from Andrew) |
Beta Was this translation helpful? Give feedback.
-
I'm going to add @zmcgraw to this thread so he can follow what is happening on the aerosol side of things. |
Beta Was this translation helpful? Give feedback.
-
Adding @zmcgraw1 to the thread. Correct github handle... |
Beta Was this translation helpful? Give feedback.
-
Following suggestions from @zmcgraw1, I've done a test where we limit the fraction of dust used for immersion freezing to 10% or 5%. This is an effective way at limiting the impact of the CNT code, and is consistent with what is already done for bc in hetfrz_classnuc.F90. I will probably update the PUMAS submitted manuscript in review to use this change rather than go back to Bigg. With the changes you are making, I think this will ameleriorate the issue. Let me know how the last test pans out. I can include these changes in the paper if we want and add @cbardeen and @tilmes to it, or that can go in a further paper. |
Beta Was this translation helpful? Give feedback.
-
@tilmes Happy new year! Any updates on the last set of tests (test #3). I'm happy to try to do some quick climatological analysis if you want. Or combine it with my limiter on dust fraction used above. |
Beta Was this translation helpful? Give feedback.
-
@tilmes , I ran the latest updates to the microphysics with num_to_mass_in = .false. With limfacdst = 0.05, there was almost no effect on the simulations (but it did something, not BFB) I'm running again with limfacdst = 1.0 (no limiter on dust for ice nucleation) and num_to_mass_in =.false. and will report that next....(tomorrow) |
Beta Was this translation helpful? Give feedback.
-
Greetings @tilmes and @cbardeen. I did some testing as described. I did simulations with the following:
For some reason I cannot attach the images here to Git hub, but I will send them The results are that num_to_mass_in does quite a bit to reduce ice number and mass, but probably not enough. Ice number is still too high in the N. Hemisphere mid-latitudes, and a dust limiter is probably still necessary. So I will flip the switch for num_to_mass_in, and redo my runs to include it. The paper can then be used for documentation if you want. I can add Simone as a co-author if you want as well, and we can add perhaps a line or two about the change. |
Beta Was this translation helpful? Give feedback.
-
New results are in
@adamrher Please provide the corresponding plot and we'll see how these compare. |
Beta Was this translation helpful? Give feedback.
-
@fvitt @adamrher @andrewgettelman Thanks, so Francis' refactored code gives the same answers, with bc turned off. I am suggesting to do a pull request that uses Francis code, and we can list all the changes we have made (test 5 plus bc not considered). If @andrewgettelman prefers, we can also add the tuning factor of 0.05 back to Francis' case and we end up with very similar values compared to the background case. |
Beta Was this translation helpful? Give feedback.
-
This was a discussion that started in e-mail and Andrew asked that a github discussion be created for it. So I have copied the e-mail that I sent out. These solutions have not been tested as the immersion freezing is not currently being used, but those routines are being ported to the CARMA cloud model so Yunqian and I discussed some of the potential issues. Francis is also working on refactoring these routines so that they will work with the CARMA aerosols model that Simone is working on.
I was talking with Yunqian yesterday about the immersion freezing code as she is trying to copy the same logic into CARMA. I came across a couple of things that would seem to make nucleation too active. I think issue #2 is a bug and should be fixed.
I am not sure how much of an effect either of these will have. For TTL cirrus, issue #2 made a big difference as that is a region with mostly sulfates in coarse mode. For immersion freezing, you are in a mixed phase region, so the fraction of the aerosol mass in sulfates is probably smaller than in the TTL, but it might still be significant. If someone has a run handy with those fields, they could look at the mass fraction and see if it looks like it would be a big deal. The simple work around for Issue #1 could be tried if someone is interested, just to see if it looks like it has any effect on the overall nucleation rate. If it is a big effect, then perhaps splitting cloudborne into ice and liquid is worth the effort.
Thanks,
Chuck
Issue #1
One of the things I am worried about is whether the aerosol will be "used up" in the process. The nucleation rate is a function of the cloudborne aerosol number for different species and modes:
if (.not.tot_in) then
if (do_bc) frzbcimm = frzbcimm+MIN(limfacbctotal_cloudborne_aer_num(id_bc)/deltat, &
total_cloudborne_aer_num(id_bc)/deltat(1._r8-exp(-Jimm_bc*deltat)))
else
if (do_bc) frzbcimm = frzbcimm+MIN(limfacbc*fn(id_bc)total_aer_num(id_bc)/deltat, &
fn(id_bc)total_aer_num(id_bc)/deltat(1._r8-exp(-Jimm_bcdeltat)))
end if
Physically, when a liquid drop with an aerosol in it freezes, then the aerosol is no longer in a cloud drop it is in an ice crystal. Unfortunately in CAM, we do not advect cloudborne aerosol nor do we have seperate varaibles for cloudborne aerosol in liquid and in ice. Thus immersion freezing thinks that all aerosol that should be in the ice are in the liquid and as nucleation progresses there is no reduction in the number of cloudborne aerosols in the liquid. The most precise way to fix this would be to duplicate the set of cloudborne aerosol variables and have one set for liquid and another set for ice. Then when immersion nucleation happens it would shift the aerosols from the liquid variables to the ice variables. You would also need to move the cloudborne aerosols when clouds freeze and when they melt, ... So that could be a fair amount of work to make sure you have it all correct (revisiting ndrop, ...). A simplier solution that might have some effect in limiting the immersion nucleation would be to use a cloud mass fraction to determine the amount of the aerosol that is in the liquid and ice clouds:
num_cloudborne_ice = ice_mass / (ice_mass + liquid_mass) * num_cloudborne
num_cloudborne_liq = liq_mass / (ice_mass + liquid_mass) * num_cloudborne
This would at least have the property that as more cloud is converted to ice, the available nuclei for immersion freezing would go down, since they should only come from num_cloudborne_liq.
Issue #2
Also, in looking at how the cloudborne aerosol number is calculated, it seems like there is a problem related to the mass fractions in the coarse mode. This seems like the same problem that was originally in nucleate_ice where they have forgotten about the sulfates in the coarse mode. In get_aer_num, you have:
This would make it seem like you have a lot of cloudborne dust in places were you really have a lot of sulfate and should make the immersion nucleation too active. I think it should be:
It is possible that they are trying to assume that the coarse mode is all coated dust and sea salt in the mixed phase region and that there is no stand-alone sulfate; however, this assumption would not work well in regions where there are externally mixed sulfate particles.
Beta Was this translation helpful? Give feedback.
All reactions