Talk:Interfacing GEOS-Chem with KPP

From Geos-chem
Jump to: navigation, search

This is a discussion about the modification needed in gckpp_Util.f90

The modifications are not always needed. It was needed for the standard 43 tracers and for the Fabien Paulot alternative isoprene chemistry too, but not for the 54 tracers simulation .

The problem was an initialization issue. We were getting different output when using different number of processors. One way to spot the problem (beside having different results with different number of processors) is to check that the number of variable species (as given in the generated is the same as the number of V() elements assigned in the subroutine shuffle_user2kpp.

For the standard 43 tracers, it turns out that the variable V(15) was not assigned in shuffle_user2kpp. We fixed the problem by assigning:

V(15) =  1d-99

This is ok, since the species (LISOPOH) is dead, but needed since it appears in one reaction as a product. Not sure why Kpp overlook it when generating shuffle_user2kpp....

A similar problem show up with F. Paulot alternate chemistry. Five species (2 dead and 3 active) are not initialized with its scheme. A quick examination of the shuffle_kpp2user and shuffle_user2kpp routines shows that V(42,43,50,93,98) and V_USER(24,25,135,136,137) are not used. They correspond to CO2, DRYDEP, PMNN, MACRNO2, and PMNO2. The last three are active species. Which is my main concern.

The first idea is to set all missing DEAD to 1d-99 in shuffle_user2kpp, and all missing ACTIVE to their setting in the original gckpp_Util.f90:

   V(42, 43) = 1d-99
   V(50, 93, 98) = 1d-20

But note that we are dealing with something similar to what was done for the "full restart file": continuity of short-lived non-transported species. Which brings to the second idea:

"to get the correspondence V()=V_USER() for the active species in shuffle_user2kpp." But you need to know the mapping between the two set of indices, and must do the something similar in shuffle_kpp2user (that is, getting the V_USER()=V() for the missing).

The list of variable species in gives the indices used for variable V used in the shuffle routines. But there is no such list for V_USER, so the mapping between V and V_USER is not available outside gckpp_Util.f90.

So, for now we are limited to the first idea. But could we make kpp writing ALL the species mapping in the shuffle_user2kpp and shuffle_kpp2user? --phs 14:51, 20 November 2009 (EST)