Index: /dynamico_lmdz/simple_physics/phyparam/Makefile
===================================================================
--- /dynamico_lmdz/simple_physics/phyparam/Makefile	(revision 4224)
+++ /dynamico_lmdz/simple_physics/phyparam/Makefile	(revision 4225)
@@ -1,4 +1,10 @@
-# Example (bash) :
-# clear ; make clean ; F90=ifort FFLAGS=-fast time make -j
+# Examples (bash) :
+# clear ; make clean ; 
+# F90=ifort FFLAGS=-fast time make -j
+# F90=gfortran F90FLAGS=-ffree-line-length-none gmake 
+# known to compile with gfortran version 7, ifort version 17
+
+# if XCodeML F_Front is installed, set FFRONT=F_Front to parse code into XML
+FFRONT ?= true
 
 VPATH = obj
@@ -9,8 +15,8 @@
 
 obj :
-	@mkdir obj include lib
+	@mkdir obj include lib xml
 
 clean :
-	rm -f obj/* include/* lib/*
+	rm -f obj/* include/* lib/* xml/*
 
 %.so : $(OBJECTS)
@@ -28,5 +34,9 @@
 obj/phyparam_mod.o     : MAIN solar.o radiative_sw.o radiative_lw.o comgeomfi.o writefield_mod.o
 
+SRC = $(basename $(notdir $@))
 obj/%.o: physics/%.F90
-	$(F90) -I include -fPIC -c $(F90FLAGS) $< -o $@
-	@mv $(basename $(notdir $@)).mod include
+	$(F90) -I include -fPIC $(F90FLAGS) -c $<
+	@mv $(SRC).mod include
+	@mv $(SRC).o obj
+	@cpp -DXCODEML $< > xml/$(SRC).f90
+	@$(FFRONT) -M xml xml/$(SRC).f90 > xml/$(SRC).xml
Index: /dynamico_lmdz/simple_physics/phyparam/physics/logging.F90
===================================================================
--- /dynamico_lmdz/simple_physics/phyparam/physics/logging.F90	(revision 4224)
+++ /dynamico_lmdz/simple_physics/phyparam/physics/logging.F90	(revision 4225)
@@ -24,9 +24,19 @@
   END INTERFACE
 
-  ! This module provides a default implementation of flush_plugin but the top-level driver is welcome to override it.  
+#ifdef XCODEML
+  ! XCodeML cannot parse procedure pointers                                                                                                                                             
+
+#define default_flush_plugin flush_plugin
+#define default_log_gridpoint log_gridpoint_plugin
+
+#else
+
+  ! This module provides a default implementation of flush_plugin but the top-level driver is welcome to override it.                                                                    
   PROCEDURE(plugin), POINTER :: flush_plugin => default_flush_plugin
 
-  ! The top-level driver MUST provide an implementation for log_gridpoint_plugin
+  ! The top-level driver MUST provide an implementation for log_gridpoint_plugin                                                                                                         
   PROCEDURE(plugin_log_gridpoint), POINTER :: log_gridpoint_plugin => NULL()
+
+#endif
 
   INTEGER, PARAMETER :: linesize=10000, logging_bufsize=100
@@ -69,3 +79,9 @@
   END SUBROUTINE log_gridpoint
 
+  SUBROUTINE default_log_gridpoint(index, line)
+    INTEGER, INTENT(IN) :: index ! index of gridpoint                                                                                                                                    
+    CHARACTER(*), INTENT(OUT) :: line
+    line=''
+  END SUBROUTINE default_log_gridpoint
+
 END MODULE logging
Index: /dynamico_lmdz/simple_physics/phyparam/physics/turbulence.F90
===================================================================
--- /dynamico_lmdz/simple_physics/phyparam/physics/turbulence.F90	(revision 4224)
+++ /dynamico_lmdz/simple_physics/phyparam/physics/turbulence.F90	(revision 4225)
@@ -248,10 +248,10 @@
     IF(lwrite) THEN
        ig=ngrid/2+1
-       WRITELOG(*,*) 'Pression (mbar) ,altitude (km),u,v,theta, rho dz'
+       WRITELOG(*,*) 'Pression (mbar) altitude (km),u,v,theta, rho dz'
        DO ilay=1,nlay
           WRITELOG(*,*) .01*pplay(ig,ilay),.001*pzlay(ig,ilay), &
                pu(ig,ilay),pv(ig,ilay),ph(ig,ilay),za(ig,ilay)
        ENDDO
-       WRITELOG(*,*) 'Pression (mbar) ,altitude (km),zb'
+       WRITELOG(*,*) 'Pression (mbar) altitude (km),zb'
        DO ilev=1,nlay
           WRITELOG(*,*) .01*pplev(ig,ilev),.001*pzlev(ig,ilev), &
@@ -291,5 +291,5 @@
        WRITELOG(*,*) 'coefficients Cd pour v et h'
        WRITELOG(*,*) zcdv(ngrid/2+1),zcdh(ngrid/2+1)
-       WRITELOG(*,*) ,'coefficients K pour v et h'
+       WRITELOG(*,*) 'coefficients K pour v et h'
        DO ilev=1,nlay
           WRITELOG(*,*) zkv(ngrid/2+1,ilev),zkh(ngrid/2+1,ilev)
@@ -429,7 +429,7 @@
     IF(lwrite) THEN
        WRITELOG(*,*) 
-       WRITELOG(*,*) ,'Diagnostique de la diffusion verticale'
-       WRITELOG(*,*) ,'h avant et apres diffusion verticale'
-       WRITELOG(*,*) ,ptsrf(ngrid/2+1),ztsrf2(ngrid/2+1)
+       WRITELOG(*,*) 'Diagnostique de la diffusion verticale'
+       WRITELOG(*,*) 'h avant et apres diffusion verticale'
+       WRITELOG(*,*) ptsrf(ngrid/2+1),ztsrf2(ngrid/2+1)
        DO  ilev=1,nlay
           WRITELOG(*,*) ph(ngrid/2+1,ilev),zh(ngrid/2+1,ilev)
