ESCOMP / CMEPS

NUOPC Community Mediator for Earth Prediction Systems
https://escomp.github.io/CMEPS/
24 stars 79 forks source link

ndep to ocean component getting scaled by 1-ifrac #352

Closed klindsay28 closed 1 year ago

klindsay28 commented 1 year ago

When CMEPS is remapping ndep from the atm component to the ocn component, it is effectively multiplying it by 1-ifrac. (I'm not sure of how the effective multiplication is implemented.)

When ocean BGC reads ndep from a file, this is not done. The rationale for this is that ndep is not handled by the sea ice component. Instead of handling ndep in the sea ice component, ndep effectively goes straight through sea ice, when it is read from a file by the ocean model.

By multiplying ndep by 1-ifrac in CMEPS, the system is effectively losing the ndep that falls on sea ice.

One approach to avoiding this loss of ndep from the system is to modify CMEPS to not multiply atm->ocn ndep by 1-ifrac. This would be somewhat analogous to the way that Faoo_fco2_ocn is not scaled by 1-ifrac with its ocn->atm remapping. The special code that does this for Faoo_fco2_ocn appears to be in mediator/med_phases_prep_atm_mod.F90. Is it feasible to apply this approach to atm->ocn ndep?

Note that this ndep remapping feature has been present since atm->ocn ndep was introduced in 2017, but it wasn't noticed until now. It is present in WACCM CMIP6 runs. Darn.

jedwards4b commented 1 year ago

I think that means that I should add something like this in esmFldsExchange_cesm_mod.F90

    ! ---------------------------------------------------------------------                                                                          
    ! to ocn: nitrogen deposition fields from atm                                                                                                    
    ! ---------------------------------------------------------------------                                                                          
    if (phase == 'advertise') then                                                                                                                   
       call addfld_from(compatm, 'Faxa_ndep')                                                                                                        
       call addfld_to(compocn, 'Faxa_ndep')                                                                                                          
    else                                                                                                                                             
       if ( fldchk(is_local%wrap%FBexp(compocn)         , 'Faxa_ndep', rc=rc) .and. &                                                                
            fldchk(is_local%wrap%FBImp(compatm,compatm ), 'Faxa_ndep', rc=rc)) then                                                                  
          call addmap_from(compatm, 'Faxa_ndep', compocn, mapconsf, 'one', atm2ocn_map)                                                              
          call addmrg_to(compocn, 'Faxa_ndep', &                                                                                                     
               mrg_from=compatm, mrg_fld='Faxa_ndep', mrg_type='merge', mrg_fracname='ofrac')                                                        
       end if                                                                                                                                        
    end if                                
mnlevy1981 commented 1 year ago

This looks suspiciously like the block of code I introduced in #349 -- is the only change the mrg_type argument in addmrg_to()?

In any event, why don't we hold off on merging that PR until this is working, and I can test this fix in my sandbox.

mnlevy1981 commented 1 year ago

This was fixed in #349, but I forgot to update that PR to auto-close this issue