Index: /trunk/LMDZ.MARS/changelog.txt
===================================================================
--- /trunk/LMDZ.MARS/changelog.txt	(revision 4057)
+++ /trunk/LMDZ.MARS/changelog.txt	(revision 4058)
@@ -5056,2 +5056,9 @@
 == 09/02/2026 == EM
 Minor OpenMP fix to dust coagulation.
+
+== 10/02/2026 == EM
+Add a "output_diagfi" (default .true.) flag so that the user can decide if
+a diagfi.nc file should be outputted.
+Also do some cleaning around the few remaining calls to writediagfi
+or reference to it througout the code; write_output() should be used.
+
Index: /trunk/LMDZ.MARS/libf/aeronomars/calchim_mod.F90
===================================================================
--- /trunk/LMDZ.MARS/libf/aeronomars/calchim_mod.F90	(revision 4057)
+++ /trunk/LMDZ.MARS/libf/aeronomars/calchim_mod.F90	(revision 4058)
@@ -40,4 +40,5 @@
       use iono_h, only: temp_elect
       use wstats_mod, only: wstats
+      use write_output_mod, only: write_output
       use callkeys_mod, only: photochem
 
@@ -223,5 +224,5 @@
 !     for output:
 
-      logical,save :: output        ! to issue calls to writediagfi and stats
+      logical,save :: output        ! to issue calls to write_output and stats
       real :: jo3_3d(ngrid,nlayer)  ! Photodissociation rate O3->O1D (s-1)
       real :: jh2o_3d(ngrid,nlayer)  ! Photodissociation rate H2O->H+OH (s-1)
@@ -956,25 +957,22 @@
       if (photochem .and. output) then
          if (ngrid > 1) then
-            call writediagfi(ngrid,'jo3','j o3->o1d',    &
-                             's-1',3,jo3_3d(1,1))
-            call writediagfi(ngrid,'jh2o','jh2o',    &
-                             's-1',3,jh2o_3d(1,1))
-            call writediagfi(ngrid,'iter','iterations',  &
-                             ' ',3,iter_3d(1,1))
-
-!            if (.not. unichim) then
-               call writediagfi(ngrid,'emission_no',        &
-                    'NO nightglow emission rate','cm-3 s-1',3,emission_no)
-               call writediagfi(ngrid,'emission_o2',        &
-                    'O2 nightglow emission rate','cm-3 s-1',3,emission_o2)
-!            endif
+           call write_output('jo3','j o3->o1d','s-1',jo3_3d)
+           call write_output('jh2o','jh2o','s-1',jh2o_3d)
+           call write_output('iter_chemistry','iterations',' ',iter_3d)
+
+           call write_output('emission_no', &
+                             'NO nightglow emission rate','cm-3 s-1', &
+                             emission_no)
+           call write_output('emission_o2', &
+                             'O2 nightglow emission rate','cm-3 s-1', &
+                             emission_o2)
             
-               call wstats(ngrid,'jo3','j o3->o1d',       &
+           call wstats(ngrid,'jo3','j o3->o1d',       &
                            's-1',3,jo3_3d(1,1))
-               call wstats(ngrid,'emission_no',           &
+           call wstats(ngrid,'emission_no',           &
                    'NO nightglow emission rate','cm-3 s-1',3,emission_no)
-               call wstats(ngrid,'emission_o2',           &
+           call wstats(ngrid,'emission_o2',           &
                    'O2 nightglow emission rate','cm-3 s-1',3,emission_o2)
-               call wstats(ngrid,'mmean','mean molecular mass',       &
+           call wstats(ngrid,'mmean','mean molecular mass',       &
                            'g.mole-1',3,mmean(1,1))
          end if ! of if (ngrid.gt.1)
Index: /trunk/LMDZ.MARS/libf/aeronomars/surfacearea.F
===================================================================
--- /trunk/LMDZ.MARS/libf/aeronomars/surfacearea.F	(revision 4057)
+++ /trunk/LMDZ.MARS/libf/aeronomars/surfacearea.F	(revision 4058)
@@ -16,4 +16,5 @@
       use comcstfi_h, only: pi
       use wstats_mod, only: wstats
+      use write_output_mod, only: write_output
       use callkeys_mod, only: microphys
       implicit none
@@ -126,8 +127,8 @@
      $            "micron2 cm-3",3,surfice*1.e6)
 
-      call writediagfi(ngrid,"surfdust", "Dust surface area",
-     $            "micron2 cm-3",3,surfdust*1.e6)
-      call writediagfi(ngrid,"surfice", "Ice cloud surface area",
-     $            "micron2 cm-3",3,surfice*1.e6)
+      call write_output("surfdust","Dust surface area",
+     &                  "micron2 cm-3",surfdust*1.e6)
+      call write_output("surfice","Ice cloud surface area",
+     &                  "micron2 cm-3",surfice*1.e6)
 
       end subroutine surfacearea
Index: /trunk/LMDZ.MARS/libf/phymars/conf_phys.F
===================================================================
--- /trunk/LMDZ.MARS/libf/phymars/conf_phys.F	(revision 4057)
+++ /trunk/LMDZ.MARS/libf/phymars/conf_phys.F	(revision 4058)
@@ -73,4 +73,5 @@
      &                        kernel_g,kernel_de,kernel_ti,coal_kg,
      &                        fullcoag
+      use write_output_mod, only: output_diagfi
 
       IMPLICIT NONE
@@ -176,4 +177,9 @@
          write(*,*) " callstats = ",callstats
 
+         write(*,*) "Write atmospheric fields in file diagfi.nc ?"
+         output_diagfi=.true. ! default value
+         call getin_p("output_diagfi",output_diagfi)
+         write(*,*) " output_diagfi = ",output_diagfi
+         
          write(*,*) "Write sub-surface fields in file diagsoil.nc ?"
          diagsoil=.false. ! default value
Index: /trunk/LMDZ.MARS/libf/phymars/physiq_mod.F
===================================================================
--- /trunk/LMDZ.MARS/libf/phymars/physiq_mod.F	(revision 4057)
+++ /trunk/LMDZ.MARS/libf/phymars/physiq_mod.F	(revision 4058)
@@ -3265,11 +3265,11 @@
 #ifndef MESOINI
 
-c        ==========================================================
-c        WRITEDIAGFI: Outputs in netcdf file "DIAGFI", containing
-c          any variable for diagnostic (output with period
-c          "ecritphy", set in "run.def")
-c        ==========================================================
-c        WRITEDIAGFI can ALSO be called from any other subroutines
-c        for any variables !!
+!        ==========================================================
+!        write_output: Outputs in netcdf files, diagfi and/or diagsoil
+!                      or via XIOS (variable should then be also defined
+!                      in field_def_physics_mars.xml)
+!        ==========================================================
+!        write_output can be called from any other subroutines
+!        for any variables !!
          call write_output("emis","Surface emissivity","",
      &                  emis(:,iflat))
@@ -3702,5 +3702,5 @@
            endif ! (doubleq)
 
-           if (rdstorm) then  ! writediagfi tendencies stormdust tracers
+           if (rdstorm) then  ! output tendencies stormdust tracers
              call write_output('reffstormdust','reffstormdust',
      &                        'm',rstormdust(:,:)*ref_r0)
@@ -3925,8 +3925,4 @@
 c        ----------------------------------------------------------
 
-c        ----------------------------------------------------------
-c        Output in netcdf file "diagsoil.nc" for subterranean
-c          variables (output every "ecritphy", as for writediagfi)
-c        ----------------------------------------------------------
          ! Write soil temperature
         call write_output("soiltemp","Soil temperature","K",
@@ -4043,5 +4039,5 @@
 
 c        ==========================================================
-c        END OF WRITEDIAGFI
+c        END OF WRITING OUTPUTS
 c        ==========================================================
 #endif
Index: /trunk/LMDZ.MARS/libf/phymars/rocketduststorm_mod.F90
===================================================================
--- /trunk/LMDZ.MARS/libf/phymars/rocketduststorm_mod.F90	(revision 4057)
+++ /trunk/LMDZ.MARS/libf/phymars/rocketduststorm_mod.F90	(revision 4058)
@@ -526,5 +526,5 @@
         
 !=======================================================================
-! WRITEDIAGFI
+! OUTPUTS
 
         call write_output('rds_lapserate', &
Index: /trunk/LMDZ.MARS/libf/phymars/simpleclouds_mod.F
===================================================================
--- /trunk/LMDZ.MARS/libf/phymars/simpleclouds_mod.F	(revision 4057)
+++ /trunk/LMDZ.MARS/libf/phymars/simpleclouds_mod.F	(revision 4058)
@@ -222,9 +222,4 @@
       end do
 
-c     if (hdo) then
-c           CALL WRITEDIAGFI(ngrid,'alpha_c',
-c    &                       'alpha_c',
-c    &                       ' ',3,alpha_c) 
-c     endif !hdo
 c------------------------------------------------------------------
       end subroutine simpleclouds
Index: /trunk/LMDZ.MARS/libf/phymars/topmons_mod.F90
===================================================================
--- /trunk/LMDZ.MARS/libf/phymars/topmons_mod.F90	(revision 4057)
+++ /trunk/LMDZ.MARS/libf/phymars/topmons_mod.F90	(revision 4058)
@@ -643,5 +643,5 @@
 
 ! **********************************************************************
-! WRITEDIAGFI
+! OUTPUTS
 ! **********************************************************************
 !               CALL write_output('wup_top', &
Index: /trunk/LMDZ.MARS/libf/phymars/vdif_kc.F
===================================================================
--- /trunk/LMDZ.MARS/libf/phymars/vdif_kc.F	(revision 4057)
+++ /trunk/LMDZ.MARS/libf/phymars/vdif_kc.F	(revision 4058)
@@ -627,17 +627,4 @@
 c
 
-!        call writediagfi(ngrid,'vdif_kc_q2','','',3,q2(:,1:nlay))
-!        call writediagfi(ngrid,'vdif_kc_km','','',3,km(:,1:nlay))
-!        call writediagfi(ngrid,'vdif_kc_kn','','',3,kn(:,1:nlay))
-!        call writediagfi(ngrid,'vdif_kc_unsdz','','',3,unsdz(:,1:nlay))
-!        call writediagfi(ngrid,'vdif_kc_unsddecz','','',3,
-!     &                   unsdzdec(:,1:nlay))
-!        call writediagfi(ngrid,'vdif_kc_q','','',3,q(:,1:nlay))
-!        call writediagfi(ngrid,'vdif_kc_kmpre','','',3,
-!     &                   kmpre(:,1:nlay))
-!        call writediagfi(ngrid,'vdif_kc_long','','',3,long(:,1:nlay))
-!        call writediagfi(ngrid,'vdif_kc_sn','','',3,sn(:,1:nlay))
-!        call writediagfi(ngrid,'vdif_kc_sm','','',3,sm(:,1:nlay))
-
       END SUBROUTINE vdif_kc
 
Index: /trunk/LMDZ.MARS/libf/phymars/write_output_mod.F90
===================================================================
--- /trunk/LMDZ.MARS/libf/phymars/write_output_mod.F90	(revision 4057)
+++ /trunk/LMDZ.MARS/libf/phymars/write_output_mod.F90	(revision 4058)
@@ -13,4 +13,9 @@
 public write_output
 
+logical,public,save :: output_diagfi ! global flag to trigger generating
+                      ! a diagfi.nc file or not. Initialized in conf_phys()
+!$OMP THREADPRIVATE(output_diagfi)
+
+
 !-----------------------------------------------------------------------
 contains
@@ -37,5 +42,5 @@
 logical :: is_active ! For XIOS, should this field be sent or not
 
-call writediagfi(ngrid,field_name,title,units,0,(/field/))
+if (output_diagfi) call writediagfi(ngrid,field_name,title,units,0,(/field/))
 #ifdef CPP_XIOS
 !is_active=xios_is_active_field(field_name)
@@ -69,5 +74,5 @@
 logical :: is_active ! For XIOS, should this field be sent or not
 
-call writediagfi(ngrid,field_name,title,units,2,field)
+if (output_diagfi) call writediagfi(ngrid,field_name,title,units,2,field)
 #ifdef CPP_XIOS
 !is_active=xios_is_active_field(field_name)
@@ -107,5 +112,5 @@
     call writediagsoil(ngrid,field_name,title,units,3,field)
 else
-    call writediagfi(ngrid,field_name,title,units,3,field)
+  if (output_diagfi) call writediagfi(ngrid,field_name,title,units,3,field)
 endif
 
@@ -141,5 +146,6 @@
 logical :: is_active ! For XIOS, should this field be sent or not
 
-call writediagfi(ngrid,field_name,title,units,0,(/real(field)/))
+if (output_diagfi) call writediagfi(ngrid,field_name,title,units,0,(/real(field)/))
+
 #ifdef CPP_XIOS
 !is_active=xios_is_active_field(field_name)
@@ -173,5 +179,6 @@
 logical :: is_active ! For XIOS, should this field be sent or not
 
-call writediagfi(ngrid,field_name,title,units,2,real(field))
+if (output_diagfi) call writediagfi(ngrid,field_name,title,units,2,real(field))
+
 #ifdef CPP_XIOS
 !is_active=xios_is_active_field(field_name)
@@ -211,5 +218,5 @@
     call writediagsoil(ngrid,field_name,title,units,3,real(field))
 else
-    call writediagfi(ngrid,field_name,title,units,3,real(field))
+  if (output_diagfi) call writediagfi(ngrid,field_name,title,units,3,real(field))
 endif
 #ifdef CPP_XIOS
@@ -248,5 +255,5 @@
 if (field) field_real = 1.
 
-call writediagfi(ngrid,field_name,title,units,0,field_real)
+if (output_diagfi) call writediagfi(ngrid,field_name,title,units,0,field_real)
 #ifdef CPP_XIOS
 !is_active=xios_is_active_field(field_name)
@@ -284,5 +291,6 @@
 where (field) field_real = 1.
 
-call writediagfi(ngrid,field_name,title,units,2,field_real)
+if (output_diagfi) call writediagfi(ngrid,field_name,title,units,2,field_real)
+
 #ifdef CPP_XIOS
 !is_active=xios_is_active_field(field_name)
@@ -327,5 +335,5 @@
     call writediagsoil(ngrid,field_name,title,units,3,field_real)
 else
-    call writediagfi(ngrid,field_name,title,units,3,field_real)
+  if (output_diagfi) call writediagfi(ngrid,field_name,title,units,3,field_real)
 endif
 
