ISAM mass balance error for emissions

Hi,

When I run CMAQ/ISAM v5.3.3, it worked well for parents domains. However, it shows the following error message in log file for nested domain d03:

ISAM mass balance error for emissions - EVERYWHERE - check isam control file.

I have no idea why this error appears even though the routine EMIS_DEFN.F says:

           ! Now that emissions from this stream have been assigned
           ! to all available tags, assess the remainder and assign
           ! it to the "OTHR" tag if any exists.
           MINCHECK = MINVAL( SA_VDEMIS_CONV_OTHER( :,1:NL,:,: ) )
           IF ( MINCHECK .GE. 0.0 ) THEN
              ! Remainder is Valid. Move it all to the "OTHR" Tag

Please find isam control file attached. Note that my REGIONB is bigger and covers REGIONA .

Thanks for your help.

isam_control_mag_d03.txt (2.6 KB)

Feng

Hello Feng,

each “emission source” can be assigned to no more than one tag, where an “emission source” should be thought of as a unique combination of emission stream(s) and geographic location. Put differently, no emission stream can be assigned to multiple regions if these regions overlap. This is because the sum of all tags (incl. OTHR, BC, and IC) has to equal the actual concentration simulated by the base model, and assigning the same “emission source” to multiple tags would violate this requirement.

It is o.k. to assign the same emission stream to multiple non-overlapping regions as part of separate tags. It is also o.k. to define tags for only a subset of emission streams and/or regions, the portion attributable to emissions from streams and/or regions not used in any tag definition will be included in the “OTHR” tag.

In your setup, almost all emission streams (except LTNG) are assigned to three different overlapping regions (EVERYWHERE, REGIONA, and REGIONB) as part of separate tags. Since REGIONA is contained in REGION2 which is in turn contained in the EVERYWHERE “region”, assigning the same emission stream (e.g. ANAREA) to each of these regions as part of separate tags makes in impossible for the code to uniquely associate ANAREA emissions located within REGIONA (and therefore also REGIONB and EVERYWHERE) to only one of these tags.

If you need source apportionment results for overlapping regions, you will need to perform separate ISAM simulations.

@sergey, @Ben_Murphy, @bhutzell, please correct me if I mischaracterized ISAM behavior and requirements.

Hello Christian,

Thank you so much for the detail explanation and clarification on ISAM.

The key is that “the sum of all tags (incl. OTHR, BC, and IC) has to equal the actual concentration simulated by the base mode”. So I see that overlapping regions violates this requirement for a CMAQ/ISAM run otherwise.

Now I have two more quick questions :

  1. Is hourly mean output CCTM_ACONC_v533_ISAM correct in this CMAQ/ISAM run with region overlapping? What I mean is that if the actual hourly mean concentration in output files (CCTM_ACONC_v533_ISAM) has no problem and should be the same as the base model.

  2. Is that ok if I remove one of REGION, either REGIONA or REGIONB in the isam control file?

My understanding here is ANAREA, for example, I would know ozone contribution from ANAREA source everywhere.

TAG NAME |GR1
REGION(S) |EVERYWHERE
EMIS STREAM(S) |ANAREA

however,

TAG NAME |NAA
REGION(S) |REGIONA
EMIS STREAM(S) |ANAREA,NONRAD,ONROAD,NONEGU,OILGAS,EGU,AIRP1,AIRP2

I want to know how much ozone contribution from all emissions except MEGAN3 (biogenic) and LTNG (lightning NOx) in REGIONA. We assumed that REGIONB has be removed in the isam control file. But you said EVERYWERE “region” and REGIONA overlap too because I assigned the same emission stream, ANAREA to each of these regions. Then it is hard for me how to realize my idea using ISAM.

Thank you very much.

Feng

Yes, it should be, if the ISAM run did not crash. The base model output in CCTM_ACONC, CCTM_CONC, CCTM_WETDEP, etc. is not affected by the ISAM computations or any potential error in the ISAM configuration.

You cannot assign the ANAREA emission stream to both a tag that’s geographically defined for EVERYWHERE and a tag that’s geographically defined for a specific region like REGIONA. You could create a new region “NOTREGIONA” that’s the complement of REGIONA and then assign the ANAREA emission stream to both REGIONA and NOTREGIONA. Again, overlaps are not allowed, and by definition EVERYWHERE covers the entire domain, so any stream assigned to an EVERYWHERE tag cannot be assigned to any other sub-regional tag in the same run.

A possible solution, if you need both an EVERYWHERE and a REGIONA contribution estimate for a given emission stream would be to run two separate simulations, but note that the tags from these two separate simulations would no longer add up to the bulk concentration.

Hi Christian,

Thank you again for your confirmation and updates. I see your point clearly now.

I will think about my target region and sources, and set up two separate runs to realize the modeling and analysis.

Thank you for your guidance.

Feng

1 Like

Hello Christian,

I have another question about ISAM,

I have one defined region: REGIONA , and n emission categories. I plan to check O3 contributions from 1) entire region of REGIONA; 2) some anthropogenic emission categories emis1 and emis2 within REGIONA:

I set isam control file like

TAG NAME |TG1
REGION(S) |REGIONA
EMIS STREAM(S) |emis1,emis2,…,emisn

TAG NAME |TG2
REGION(S) |REGIONA
EMIS STREAM(S) |emis1

TAG NAME |TG3
REGION(S) |REGIONA
EMIS STREAM(S) |emis2

Do you think is that o.k. to assign the same emission stream like emis1 (emis2) to both TG1 and TG2 (TG3) in the same region? Is that overlapping?

Thank you very much.

Hi Feng,

Yes, this again would be overlapping / double counting emissions. As noted above, each “emission source” can be assigned to no more than one tag, where an “emission source” should be thought of as a unique combination of emission stream(s) and geographic location. In the case you described, emis1 emissions occurring within REGIONA are one such “emission source”, so you cannot assign it to both TG1 and TG2.

Think of it this way - you want to track back the bulk ozone concentration (to which each source contributed exactly once) to specific sources (defined as tags, and the default ICON, BCON, and OTHR tags capturing the rest). If you assign a source to more than one tag, this cannot be done, because it’d imply that that source contributed to the bulk ozone concentration more than once, which it didn’t.

Hi Christian,

Thank you for the further explanation, I see your point, especially note that one source is only contributed to the bulk ozone once.

Now I may realize my analysis using following isam control file:

TAG NAME |TG1
REGION(S) |REGIONA
EMIS STREAM(S) |emis1

TAG NAME |TG2
REGION(S) |REGIONA
EMIS STREAM(S) |emis2

TAG NAME |TG3
REGION(S) |REGIONA
EMIS STREAM(S) |emis3

TAG NAME |TGn
REGION(S) |REGIONA
EMIS STREAM(S) |emisn

Thank you again.

Hello, FengLiu!
I have a question for you. Does the isam control file have the same effect when set to
"
TAG NAME |TG1
REGION(S) |REGIONA
EMIS STREAM(S) |emis1 emis2 emis3 emisn
"
as it does when set to
"
TAG NAME |TG1
REGION(S) |REGIONA
EMIS STREAM(S) |emis1

TAG NAME |TG2
REGION(S) |REGIONA
EMIS STREAM(S) |emis2

TAG NAME |TG3
REGION(S) |REGIONA
EMIS STREAM(S) |emis3

TAG NAME |TGn
REGION(S) |REGIONA
EMIS STREAM(S) |emisn
"
Thanks for your help!

No, this is not equivalent. In the first case, TG1 will contain the combined contribution from sources in emission streams emis1, emis2, emis3, … emisn located in REGIONA. In the second case, TG1 will only contain the contribution from sources in emission streams emis1 located in REGIONA, TG2 will only contain the contribution from sources in emission streams emis2 located in REGIONA, etc.

Furthermore, the sum of TG1, TG2, … TGn from the second scenario may not necessarily equal TG1 from the first scenario, as the results for a given tag can be affected by what other tags are defined for a given simulation. This is discussed in the last section of the ISAM chemistry supplement linked from Chapter 11 of the User’s Guide.

Rain,

Christian have well answered your question when I read your post. Thanks to Christian.

In addition, my purpose is that I want to know not only the contribution from all anthropogenic emissions from the REGIONA but the contribution from each emission category (presented by emission stream) in the REGIONA. This is why I have to run CMAQ/ISAM twice using TG1 and TG1,2,3…n as you mentioned above.

Thanks

I understand and thank you so much, Christian. It has been very helpful to me.

Yeah, the answer from Christian was very helpful, thanks to Christian, and thank you also for your reply.

Hello, Christian!
I have another problem when I run CMAQ-ISAM. It could be runing normally when I set isam_control file to
"
TAG NAME |TG1
REGION(S) |REGIONA
EMIS STREAM(S) |emis1 emis2 emis3 emisn
". But when I set the file (18 regions and 6 sources in total) to
"
TAG NAME |TG1
REGION(S) |REGIONA
EMIS STREAM(S) |emis1

TAG NAME |TG2
REGION(S) |REGIONA
EMIS STREAM(S) |emis2

TAG NAME |TG3
REGION(S) |REGIONA
EMIS STREAM(S) |emis3

TAG NAME |TGn
REGION(S) |REGIONA
EMIS STREAM(S) |emisn
", some errors will be occoured.
My CTM_LOG and 2 isam control files are attached.
CTM_LOG_001.txt (38.0 KB)
isam_control(1).txt (8.5 KB)
isam_control(2).txt (3.1 KB)

I did not see any error messages in the CTM_LOG file you posted. I’m guessing that there are error messages in other CTM_LOG files and/or the main processor log, could you please post those?

Given that you can run ISAM for a case with fewer tags (multiple emission streams per tag) but not when you define separate tags for different streams, there is a chance that you are defining too many tags for your I/O API library to handle. For each tag in the ozone class, ISAM tracks about 50-60 species (I don’t recall the exact number), and the default I/O API library can handle up to 2048 variable names. It seems you used that default version based on the MXVAR setting reported in your CTM_LOG file. Since the total number of variables stored in ISAM output files is equal to the product of tracked species (which depends on the tag class and chemical mechanism) and defined tags + 3 (for ICON, BCON, and OTHER), you may be exceeding 2048 variables in your setup. In that case, you need to use the “large” version of the I/O API library as described in Chapter 3 of the CMAQ User Guide.

Thanks for your timely answers, Christian. I’m sorry to say that another CTM_LOG file is too big to upload, but some information may be found in the attached picture. Maybe, as you said, there are more variable names than the IOAPI library can handle. I’ll check the CMAQ User Guide later. Thank you! :handshake:

Thanks for posting this additional information.

I am now fairly certain that your error is indeed caused by exceeding the 2048 maximum variable limit imposed by the standard I/O API library. The same error had been posted in this thread and switching to the “large” version of the library seems to have solved the problem.

1 Like