Index: /trunk/LMDZ.MARS/changelog.txt
===================================================================
--- /trunk/LMDZ.MARS/changelog.txt	(revision 4162)
+++ /trunk/LMDZ.MARS/changelog.txt	(revision 4163)
@@ -5151,2 +5151,6 @@
 Adding some missing slope fields in field_def_physics_mars.xml that are called
 by xios in the code.
+
+== 01/04/2026 == YCL
+Initialize mass_predyn to -999 so that newstart writes a defined value (-999) to mass_predyn_<tracer> in restartfi.nc, avoiding uninitialized values (e.g., 0 or random memory).
+If mass_predyn_<tracer> <= 0 (such as -999 written by newstart) in startfi.nc, the mass fixer for dynamics is skipped at the first physiq step.
Index: /trunk/LMDZ.MARS/libf/phymars/phyetat0_mod.F90
===================================================================
--- /trunk/LMDZ.MARS/libf/phymars/phyetat0_mod.F90	(revision 4162)
+++ /trunk/LMDZ.MARS/libf/phymars/phyetat0_mod.F90	(revision 4163)
@@ -726,57 +726,57 @@
 if (startphy_file .and. call_mass_fixer_dyn) then
    call get_var("mass_predyn_co", mass_predyn_co, found)
-   if (found) then
+   if (found .and. mass_predyn_co > 0.d0) then
       found_startfi_co = .true.
    else
-      write(*,*) "phyetat0: <mass_predyn_co> not in file"
+      write(*,*) "phyetat0: <mass_predyn_co> not in file or invalid"
    endif
 
    call get_var("mass_predyn_o2", mass_predyn_o2, found)
-   if (found) then
+   if (found .and. mass_predyn_o2 > 0.d0) then
       found_startfi_o2 = .true.
    else
-      write(*,*) "phyetat0: <mass_predyn_o2> not in file"
+      write(*,*) "phyetat0: <mass_predyn_o2> not in file or invalid"
    endif
 
    call get_var("mass_predyn_h2", mass_predyn_h2, found)
-   if (found) then
+   if (found .and. mass_predyn_h2 > 0.d0) then
       found_startfi_h2 = .true.
    else
-      write(*,*) "phyetat0: <mass_predyn_h2> not in file"
+      write(*,*) "phyetat0: <mass_predyn_h2> not in file or invalid"
    endif
 
    call get_var("mass_predyn_ho2", mass_predyn_ho2, found)
-   if (found) then
+   if (found .and. mass_predyn_ho2 > 0.d0) then
       found_startfi_ho2 = .true.
    else
-      write(*,*) "phyetat0: <mass_predyn_ho2> not in file"
+      write(*,*) "phyetat0: <mass_predyn_ho2> not in file or invalid"
    endif
 
    call get_var("mass_predyn_h2o2", mass_predyn_h2o2, found)
-   if (found) then
+   if (found .and. mass_predyn_h2o2 > 0.d0) then
       found_startfi_h2o2 = .true.
    else
-      write(*,*) "phyetat0: <mass_predyn_h2o2> not in file"
+      write(*,*) "phyetat0: <mass_predyn_h2o2> not in file or invalid"
    endif
 
    call get_var("mass_predyn_n2", mass_predyn_n2, found)
-   if (found) then
+   if (found .and. mass_predyn_n2 > 0.d0) then
       found_startfi_n2 = .true.
    else
-      write(*,*) "phyetat0: <mass_predyn_n2> not in file"
+      write(*,*) "phyetat0: <mass_predyn_n2> not in file or invalid"
    endif
 
    call get_var("mass_predyn_ar", mass_predyn_ar, found)
-   if (found) then
+   if (found .and. mass_predyn_ar > 0.d0) then
       found_startfi_ar = .true.
    else
-      write(*,*) "phyetat0: <mass_predyn_ar> not in file"
+      write(*,*) "phyetat0: <mass_predyn_ar> not in file or invalid"
    endif
 
    call get_var("mass_predyn_he", mass_predyn_he, found)
-   if (found) then
+   if (found .and. mass_predyn_he > 0.d0) then
       found_startfi_he = .true.
    else
-      write(*,*) "phyetat0: <mass_predyn_he> not in file"
+      write(*,*) "phyetat0: <mass_predyn_he> not in file or invalid"
    endif
 endif ! if (startphy_file .and. call_mass_fixer_dyn)
Index: /trunk/LMDZ.MARS/libf/phymars/tracer_mass_fixer_dyn_mod.F90
===================================================================
--- /trunk/LMDZ.MARS/libf/phymars/tracer_mass_fixer_dyn_mod.F90	(revision 4162)
+++ /trunk/LMDZ.MARS/libf/phymars/tracer_mass_fixer_dyn_mod.F90	(revision 4163)
@@ -200,4 +200,8 @@
 
         allocate(mass_predyn(nq))
+        mass_predyn(1:nq) = -999.  ! newstart writes mass_predyn_<tracer> in startfi.nc with this value,
+                                   ! ensuring mass_predyn_<tracer> <= 0. As a result, found_startfi_<tracer>
+                                   ! remains .false., and no correction is applied at the first physics step
+                                   ! when initialized from newstart output.
 
     end subroutine ini_tracer_mass_fixer_dyn
