Index: CONFIG/UNIFORM/v5/LMDZOR_v5/GENERAL/DRIVER/lmdz.driver
===================================================================
--- CONFIG/UNIFORM/v5/LMDZOR_v5/GENERAL/DRIVER/lmdz.driver	(revision 1779)
+++ CONFIG/UNIFORM/v5/LMDZOR_v5/GENERAL/DRIVER/lmdz.driver	(revision 1780)
@@ -237,85 +237,10 @@
     fi
 
-    # Add special treatement for CARBON CYCLE
+
+    ##-- Add special treatement for CARBON CYCLE
     if [ X"${lmdz_UserChoices_CARBON_CYCLE}" = X"control" ] || [ X"${lmdz_UserChoices_CARBON_CYCLE}" = X"historical" ] ; then
-
-	typeset InitPeriodCo2 InitDateBeginCo2 InitDateEndCo2
-	typeset CO2SBG CO2MBG CO2LU CO2_ppm CO2_ppm_prec fCO2_ff
-	typeset PathCO2log 
-	typeset PreviousLinelog LastPeriodDateBegin LastPeriodDateEnd LastDatesPeriod LastPREFIX
-
-	if ( ${FirstInitialize} && [ X"${config_ATM_Restart}" = X"n" ] ) ; then
-        ##--Initialization of fluxes to an undefined value at the first run
-	    UndefinedValueCo2=-9999
-	    InitPeriodCo2=0
-	    InitDateBeginCo2=${UndefinedValueCo2}
-	    InitYearCo2=$(( ${year} - 1 )) 
-	    InitDateEndCo2=${InitYearCo2}1231
-	    fCO2_ff=${UndefinedValueCo2} 
-	    CO2SBG=${UndefinedValueCo2}
-	    CO2LU=${UndefinedValueCo2}
-	    CO2MBG=${UndefinedValueCo2}
-	    CO2_ppm_prec=${UndefinedValueCo2}
-        # Get the initial value of atmosp. pco2 
-	    CO2_ppm=${lmdz_UserChoices_co2_init}
-	    
-	    IGCM_sys_Cp ${SUBMIT_DIR}/co2.log.init ${SUBMIT_DIR}/co2.log
-	    IGCM_sys_Chmod u+w ${SUBMIT_DIR}/co2.log
-	    
-        # Save CO2 values in ExeCpuLog variable contents 5 fields
-	    echo "${InitPeriodCo2} ${InitDateBeginCo2} ${InitDateEndCo2} ${CO2_ppm} ${CO2_ppm_prec} ${fCO2_ff} ${CO2MBG} ${CO2SBG} ${CO2LU}" |   \
-		gawk '{printf("  %11d | %15s | %15s | %22.15g | %20.15g | %11.8g | %11.8g | %12.8g | %12.8g \n", \
-                              $1,$2,$3,$4,$5,$6,$7,$8,$9)}' >> ${SUBMIT_DIR}/co2.log
-	    
-        # Get the path where the log file co2.log is
-	    PathCO2log=${SUBMIT_DIR} 
-        # Get Previous line in co2.log
-	    PreviousLinelog=$( tail -1 ${PathCO2log}/co2.log )
-	    
-	else
-	    
-	# NEW parameter in config.card (even for Overule all restarts, you must modify the line after this comment ):
-        # !! NEW for Carbone cycle !! Path where to find old co2.log file for restart CO2.
-	#SubmitRestartPath=
-	    if ( ${FirstInitialize} && [ X"${config_ATM_Restart}" = X"y" ] ) ; then
-		IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ATM SubmitRestartPath
-		PathCO2log=${config_ATM_SubmitRestartPath}
-		Date_r=$( IGCM_date_ConvertFormatToGregorian ${config_ATM_RestartDate} )
-		PreviousLinelog=$( grep ${Date_r} ${PathCO2log}/co2.log )
-		
-		IGCM_sys_Cp ${SUBMIT_DIR}/co2.log.init ${SUBMIT_DIR}/co2.log
-		IGCM_sys_Chmod u+w ${SUBMIT_DIR}/co2.log
-		
-            # Save Last Line of control in new co2.log file
-		InitPeriodCo2=0   
-		InitDateBeginCo2=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $2}' )
-		InitDateEndCo2=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $3}' )
-		fCO2_ff=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $6}' )
-		CO2SBG=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $8}' )
-		CO2LU=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $9}' )
-		CO2MBG=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $7}' )
-		CO2_ppm_prec=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $5}' )
-		CO2_ppm=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $4}' )
-		
-		echo "${InitPeriodCo2} ${InitDateBeginCo2} ${InitDateEndCo2} ${CO2_ppm} ${CO2_ppm_prec} ${fCO2_ff} ${CO2MBG} ${CO2SBG} ${CO2LU}" |   \
-		    gawk '{printf("  %11d | %15s | %15s | %22.15g | %20.15g | %11.8g | %11.8g | %12.8g | %12.8g \n", \
-                              $1,$2,$3,$4,$5,$6,$7,$8,$9)}' >> ${SUBMIT_DIR}/co2.log
-	    else
-           # Get restart line in co2.log
-		PathCO2log=${SUBMIT_DIR}
-		PreviousLinelog=$( tail -1 ${PathCO2log}/co2.log )
-           # Get the value of atmosp. pco2 in co2.log
-		CO2_ppm=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $4}' )
-	    fi
-	    
-	fi
-
-	if [ ${lmdz_UserChoices_CARBON_CYCLE} = historical ] ; then
-	    # Modify co2_ppm in config.def only for historical run
-	    # If not historical run, keep co2_ppm value set earlier by LMDZ_sed
-	    LMDZ_sed config.def co2_ppm     ${CO2_ppm}
-	fi
-    fi
-    # end CARBON_CYCLE
+	ATM_Carbon_Update
+    fi
+
 
     ##-- Set LMDZ_COSP_daily1979=y in section UserChoices in lmdz.card to activate 
@@ -475,48 +400,146 @@
     # Add special treatement for CARBON CYCLE
     if [ X"${lmdz_UserChoices_CARBON_CYCLE}" = X"control" ] || [ X"${lmdz_UserChoices_CARBON_CYCLE}" = X"historical" ] ; then
-	typeset CO2SBG_3V CO2SBG CO2MBG CO2SRF CO2LU CO2_ppm CO2_ppm_prec fCO2_ff
-
+	ATM_Carbon_Finalize
+    fi
+
+    echo FINALIZE ATM !
+
+    IGCM_debug_PopStack "ATM_Finalize"
+}
+
+
+
+function ATM_Carbon_Update
+{
+    # This fuction will be called only if CARBON_CYCLE is set to control or historical in lmdz.card
+
+    IGCM_debug_PushStack "ATM_Carbon_Update"
+
+    typeset InitPeriodCo2 InitDateBeginCo2 InitDateEndCo2
+    typeset CO2SBG CO2MBG CO2LU CO2_ppm CO2_ppm_prec fCO2_ff
+    typeset PathCO2log 
+    typeset PreviousLinelog LastPeriodDateBegin LastPeriodDateEnd LastDatesPeriod LastPREFIX
+    
+    if ( ${FirstInitialize} && [ X"${config_ATM_Restart}" = X"n" ] ) ; then
+        ##--Initialization of fluxes to an undefined value at the first run
+	UndefinedValueCo2=-9999
+	InitPeriodCo2=0
+	InitDateBeginCo2=${UndefinedValueCo2}
+	InitYearCo2=$(( ${year} - 1 )) 
+	InitDateEndCo2=${InitYearCo2}1231
+	fCO2_ff=${UndefinedValueCo2} 
+	CO2SBG=${UndefinedValueCo2}
+	CO2LU=${UndefinedValueCo2}
+	CO2MBG=${UndefinedValueCo2}
+	CO2_ppm_prec=${UndefinedValueCo2}
+        # Get the initial value of atmosp. pco2 
+	CO2_ppm=${lmdz_UserChoices_co2_init}
+	
+	IGCM_sys_Cp ${SUBMIT_DIR}/co2.log.init ${SUBMIT_DIR}/co2.log
+	IGCM_sys_Chmod u+w ${SUBMIT_DIR}/co2.log
+	
+        # Save CO2 values in ExeCpuLog variable contents 5 fields
+	echo "${InitPeriodCo2} ${InitDateBeginCo2} ${InitDateEndCo2} ${CO2_ppm} ${CO2_ppm_prec} ${fCO2_ff} ${CO2MBG} ${CO2SBG} ${CO2LU}" |   \
+	    gawk '{printf("  %11d | %15s | %15s | %22.15g | %20.15g | %11.8g | %11.8g | %12.8g | %12.8g \n", \
+                              $1,$2,$3,$4,$5,$6,$7,$8,$9)}' >> ${SUBMIT_DIR}/co2.log
+	
+        # Get the path where the log file co2.log is
+	PathCO2log=${SUBMIT_DIR} 
+        # Get Previous line in co2.log
+	PreviousLinelog=$( tail -1 ${PathCO2log}/co2.log )
+	
+    else
+	
+	# NEW parameter in config.card (even for Overule all restarts, you must modify the line after this comment ):
+        # !! NEW for Carbone cycle !! Path where to find old co2.log file for restart CO2.
+	#SubmitRestartPath=
+	if ( ${FirstInitialize} && [ X"${config_ATM_Restart}" = X"y" ] ) ; then
+	    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ATM SubmitRestartPath
+	    PathCO2log=${config_ATM_SubmitRestartPath}
+	    Date_r=$( IGCM_date_ConvertFormatToGregorian ${config_ATM_RestartDate} )
+	    PreviousLinelog=$( grep ${Date_r} ${PathCO2log}/co2.log )
+	    
+	    IGCM_sys_Cp ${SUBMIT_DIR}/co2.log.init ${SUBMIT_DIR}/co2.log
+	    IGCM_sys_Chmod u+w ${SUBMIT_DIR}/co2.log
+	    
+            # Save Last Line of control in new co2.log file
+	    InitPeriodCo2=0   
+	    InitDateBeginCo2=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $2}' )
+	    InitDateEndCo2=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $3}' )
+	    fCO2_ff=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $6}' )
+	    CO2SBG=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $8}' )
+	    CO2LU=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $9}' )
+	    CO2MBG=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $7}' )
+	    CO2_ppm_prec=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $5}' )
+	    CO2_ppm=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $4}' )
+	    
+	    echo "${InitPeriodCo2} ${InitDateBeginCo2} ${InitDateEndCo2} ${CO2_ppm} ${CO2_ppm_prec} ${fCO2_ff} ${CO2MBG} ${CO2SBG} ${CO2LU}" |   \
+		gawk '{printf("  %11d | %15s | %15s | %22.15g | %20.15g | %11.8g | %11.8g | %12.8g | %12.8g \n", \
+                              $1,$2,$3,$4,$5,$6,$7,$8,$9)}' >> ${SUBMIT_DIR}/co2.log
+	else
+           # Get restart line in co2.log
+	    PathCO2log=${SUBMIT_DIR}
+	    PreviousLinelog=$( tail -1 ${PathCO2log}/co2.log )
+           # Get the value of atmosp. pco2 in co2.log
+	    CO2_ppm=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $4}' )
+	fi
+	
+    fi
+    
+    if [ ${lmdz_UserChoices_CARBON_CYCLE} = historical ] ; then
+	    # Modify co2_ppm in config.def only for historical run
+	    # If not historical run, keep co2_ppm value set earlier by LMDZ_sed
+	LMDZ_sed config.def co2_ppm     ${CO2_ppm}
+    fi
+    IGCM_debug_PopStack "ATM_Carbon_Update"
+}
+
+
+function ATM_Carbon_Finalize
+{
+    # This fuction will be called only if CARBON_CYCLE is set to control or historical in lmdz.card
+
+    IGCM_debug_PushStack "ATM_Carbon_Finalize"
+
+    typeset CO2SBG_3V CO2SBG CO2MBG CO2SRF CO2LU CO2_ppm CO2_ppm_prec fCO2_ff
+    
 	# Fossil fuel emission
-	if [ ${lmdz_UserChoices_CARBON_CYCLE} = control ] ; then
+    if [ ${lmdz_UserChoices_CARBON_CYCLE} = control ] ; then
             # For Control, no fossil fuel emission :
-	    fCO2_ff=0
-	    echo "Fossil Fuel for control run  :" ${fCO2_ff}
-	else
+	fCO2_ff=0
+	echo "Fossil Fuel for control run  :" ${fCO2_ff}
+    else
             # For historical, get the fossile fuel file :
-	    fCO2_ff=$( gawk "{if (match(\$0,\"${year}\ *${month}\")) {print \$3}}" ${SUBMIT_DIR}/PARAM/CMIP5_gridcar_CO2_emissions_fossil_fuel_Andres_1751-2007_monthly_SC.txt )
-	    echo "Fossil Fuel for historical run  :" ${fCO2_ff}
-	fi
-
+	fCO2_ff=$( gawk "{if (match(\$0,\"${year}\ *${month}\")) {print \$3}}" ${SUBMIT_DIR}/PARAM/CMIP5_gridcar_CO2_emissions_fossil_fuel_Andres_1751-2007_monthly_SC.txt )
+	echo "Fossil Fuel for historical run  :" ${fCO2_ff}
+    fi
+    
         # Get the value of ocean carbon flux
-	CO2MBG=$( ${SUBMIT_DIR}/COMP/lmdz_analyse_pisces_out.awk ocean.output )
-	CO2MBG=$( echo ${CO2MBG} | sed -e "s/ *//" )
-	echo "Ocean carbon flux  :" ${CO2MBG}
-
+    CO2MBG=$( ${SUBMIT_DIR}/COMP/lmdz_analyse_pisces_out.awk ocean.output )
+    CO2MBG=$( echo ${CO2MBG} | sed -e "s/ *//" )
+    echo "Ocean carbon flux  :" ${CO2MBG}
+    
         # Get the value of land fluxes
-	set +A CO2SBG_3V -- $( ${SUBMIT_DIR}/COMP/lmdz_analyse_stomate_out.awk out_orchidee_0000 )
-	CO2SRF=$( echo ${CO2SBG_3V[0]} | sed -e "s/ *//" )
-	CO2LU=$( echo ${CO2SBG_3V[1]} | sed -e "s/ *//" )
-	CO2SBG=$( echo ${CO2SBG_3V[2]} | sed -e "s/ *//" )
-	echo "Land carbon flux (NEP)         :" ${CO2SRF}
-	echo "LU flux          (FLUC)        :" ${CO2LU}
-	echo "Total Land carbon flux (NBP)   :" ${CO2SBG}
-
+    set +A CO2SBG_3V -- $( ${SUBMIT_DIR}/COMP/lmdz_analyse_stomate_out.awk out_orchidee_0000 )
+    CO2SRF=$( echo ${CO2SBG_3V[0]} | sed -e "s/ *//" )
+    CO2LU=$( echo ${CO2SBG_3V[1]} | sed -e "s/ *//" )
+    CO2SBG=$( echo ${CO2SBG_3V[2]} | sed -e "s/ *//" )
+    echo "Land carbon flux (NEP)         :" ${CO2SRF}
+    echo "LU flux          (FLUC)        :" ${CO2LU}
+    echo "Total Land carbon flux (NBP)   :" ${CO2SBG}
+    
         # Previous CO2
-	CO2_ppm_prec=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $4}' )
-	echo "Previous CO2  :" ${CO2_ppm_prec}
-
+    CO2_ppm_prec=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $4}' )
+    echo "Previous CO2  :" ${CO2_ppm_prec}
+    
         # Formula
-	CO2_ppm=$( echo "${CO2_ppm_prec} + (${fCO2_ff} + ${CO2MBG} + ${CO2SBG}) / 2.12" | bc -l )
-	echo "New CO2  :" ${CO2_ppm}
-
+    CO2_ppm=$( echo "${CO2_ppm_prec} + (${fCO2_ff} + ${CO2MBG} + ${CO2SBG}) / 2.12" | bc -l )
+    echo "New CO2  :" ${CO2_ppm}
+    
         # Save CO2 values in ExeCpuLog variable contents 5 fields
-	echo "${CumulPeriod} ${PeriodDateBegin} ${PeriodDateEnd} ${CO2_ppm} ${CO2_ppm_prec} ${fCO2_ff} ${CO2MBG} ${CO2SBG} ${CO2LU}" |   \
-	    gawk '{printf("  %11d | %15s | %15s | %22.15g | %20.15g | %11.8g | %11.8g | %12.8g | %12.8g \n", \
+    echo "${CumulPeriod} ${PeriodDateBegin} ${PeriodDateEnd} ${CO2_ppm} ${CO2_ppm_prec} ${fCO2_ff} ${CO2MBG} ${CO2SBG} ${CO2LU}" |   \
+	gawk '{printf("  %11d | %15s | %15s | %22.15g | %20.15g | %11.8g | %11.8g | %12.8g | %12.8g \n", \
                            $1,$2,$3,$4,$5,$6,$7,$8,$9)}' >> ${SUBMIT_DIR}/co2.log
-
-    fi
-
-    echo FINALIZE ATM !
-
-    IGCM_debug_PopStack "ATM_Finalize"
-}
+    
+    IGCM_debug_PopStack "ATM_Carbon_Finalize"
+}
