Steve: I haven't had much time to look at the mtgcmproc code yet, but I think you're on the right track. Just take it a step at a time. Clearly you need to adapt the getgcm lib for your own histories. The source code for the getgcm.a library is in ~foster/getgcm (on sting). Source for libplt.a is in ~foster/libplt, and source for libutil.a is in ~foster/lib. None of the routines in these libraries contain common blocks -- everything is passed through parameter lists. This is so they can be used from any processor without having to predefine common block variables. For this reason, you should not have to make changes, or very minor, to libutil and libplt. However, because you have a new model, getgcm will have to be rewritten for mars. Tigcmproc.f calls getgcmf, which is a subroutine in getgcm which returns only the fields desired by the caller. Tigcmproc reads the FIELDS array in getinp, and constructs an ifget(nfhist) array, which are the fields needed from the history for the current run of the processor. (sum of ifget(i) > 0 = nfget, or number of fields to get from the history). The tigcmproc calls hpalloc to allocate space for nfget fields at the global grid: pointer (pfields,fields(1)) ... call hpalloc(pfields,imx*kmx*jmx*nfget,ier,1) The fields array is passed to getgcmf along with ifget and nfget. On return from getgcmf, the fields array is defined and may be passed to subroutines which dimension it (imx,kmx,jmx,nfget). This way the jobs don't carry around a lot of unnecessary storage. This system should work for you as well. First look in getgcm.h header file. Change kmx and nflds to 33 and 18 respectively. nflds in mgetgcm will not include co2, however nfhist in mtigcmproc.h should be 19, which *does* include co2. nwlat (number of words in a latitude slice) will then fall out appropriately. I don't know if you have the same deal with frd(2) being equivalenced to f like I do in getgcm.h. CO2 in your case is analogous to N2 in my case. What I've done is allow tigcmproc to assume that n2 comes with the rest of the history fields (so nfhist in tigcmproc.h includes n2). Then getgcm treats it as a special case: it is not read from the history (nflds in getgcm.h does *not* include n2); instead, gcmn2(imxp1,kmx) is declared in getgcm.h, and defined in proclat from o1 and o2 *before* any density conversion from mass mixing ratios. Then if n2 has been requested, the appropriate slot in the fields array is defined in getgcmf from gcmn2. You might think it would be easier to just construct n2 (co2) from the necessary fields (o1,co,etc) in the processor rather than in getgcm. The problem is n2 needs to be constructed from mass mixing ratios. Because getgcm promises to convert densities to cm3 or gm/cm3, or whatever, it must make n2 before any such conversions. Your main rewrite of getgcm will probably be in proclat. Proclat is called for each latitude slice. Various fields need to be interpolated to "full levels" and boundaries need to be established.I worked this out with Cicely and I don't know how different your fields are. Hope this helps... --Ben