Index: /NEMO/branches/2020/r12377_ticket2386/src/OCE/IOM/iom.F90
===================================================================
--- /NEMO/branches/2020/r12377_ticket2386/src/OCE/IOM/iom.F90	(revision 13716)
+++ /NEMO/branches/2020/r12377_ticket2386/src/OCE/IOM/iom.F90	(revision 13717)
@@ -530,4 +530,7 @@
         i = i + 1; fields(i)%vname="isf_hc_cav_b";   fields(i)%grid="grid_N"
         i = i + 1; fields(i)%vname="isf_sc_cav_b";   fields(i)%grid="grid_N"
+        i = i + 1; fields(i)%vname="fwfisf_par_b";   fields(i)%grid="grid_N"
+        i = i + 1; fields(i)%vname="isf_hc_par_b";   fields(i)%grid="grid_N"
+        i = i + 1; fields(i)%vname="isf_sc_par_b";   fields(i)%grid="grid_N"
 
         IF( i-1 > max_rst_fields) THEN
@@ -1352,13 +1355,25 @@
 #if defined key_iomput
 !would be good to be able to check which context is active and swap only if current is not restart
+         idvar = iom_varid( kiomid, cdvar )
+
          CALL iom_swap( TRIM(crxios_context) ) 
+
+         zsgn = 1._wp
+         IF( PRESENT(psgn   ) )   zsgn    = psgn
+         cl_type = 'T'
+         IF( PRESENT(cd_type) )   cl_type = cd_type
+
          IF( PRESENT(pv_r3d) ) THEN
             IF(lwp) WRITE(numout,*) 'XIOS RST READ (3D): ',TRIM(cdvar)
-            CALL xios_recv_field( trim(cdvar), pv_r3d)
-            IF(idom /= jpdom_unknown )   CALL lbc_lnk( 'iom', pv_r3d,'Z', -999., kfillmode = jpfillnothing)
+            CALL xios_recv_field( trim(cdvar), pv_r3d(Nis0:Nie0, Njs0:Nje0, :))
+            IF(idom /= jpdom_unknown .AND. cl_type /= 'Z' ) THEN
+               CALL lbc_lnk( 'iom', pv_r3d, cl_type, zsgn, kfillmode = kfill)
+            ENDIF
          ELSEIF( PRESENT(pv_r2d) ) THEN
             IF(lwp) WRITE(numout,*) 'XIOS RST READ (2D): ', TRIM(cdvar)
-            CALL xios_recv_field( trim(cdvar), pv_r2d)
-            IF(idom /= jpdom_unknown )   CALL lbc_lnk('iom', pv_r2d,'Z',-999., kfillmode = jpfillnothing)
+            CALL xios_recv_field( trim(cdvar), pv_r2d(Nis0:Nie0, Njs0:Nje0))
+            IF(idom /= jpdom_unknown .AND. cl_type /= 'Z' ) THEN
+               CALL lbc_lnk('iom', pv_r2d, cl_type, zsgn, kfillmode = kfill)
+            ENDIF
          ELSEIF( PRESENT(pv_r1d) ) THEN
             IF(lwp) WRITE(numout,*) 'XIOS RST READ (1D): ', TRIM(cdvar)
@@ -1380,12 +1395,12 @@
       zofs = iom_file(kiomid)%ofs(idvar)      ! offset
       IF(     PRESENT(pv_r1d) ) THEN
-         IF( zscf /= 1. )   pv_r1d(:) = pv_r1d(:) * zscf 
-         IF( zofs /= 0. )   pv_r1d(:) = pv_r1d(:) + zofs
+         IF( zscf /= 1._wp )   pv_r1d(:) = pv_r1d(:) * zscf 
+         IF( zofs /= 0._wp )   pv_r1d(:) = pv_r1d(:) + zofs
       ELSEIF( PRESENT(pv_r2d) ) THEN
-         IF( zscf /= 1.)   pv_r2d(:,:) = pv_r2d(:,:) * zscf
-         IF( zofs /= 0.)   pv_r2d(:,:) = pv_r2d(:,:) + zofs
+         IF( zscf /= 1._wp)   pv_r2d(:,:) = pv_r2d(:,:) * zscf
+         IF( zofs /= 0._wp)   pv_r2d(:,:) = pv_r2d(:,:) + zofs
       ELSEIF( PRESENT(pv_r3d) ) THEN
-         IF( zscf /= 1.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) * zscf
-         IF( zofs /= 0.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) + zofs
+         IF( zscf /= 1._wp)   pv_r3d(:,:,:) = pv_r3d(:,:,:) * zscf
+         IF( zofs /= 0._wp)   pv_r3d(:,:,:) = pv_r3d(:,:,:) + zofs
       ENDIF
       !
Index: /NEMO/branches/2020/r12377_ticket2386/src/OCE/ISF/isfpar.F90
===================================================================
--- /NEMO/branches/2020/r12377_ticket2386/src/OCE/ISF/isfpar.F90	(revision 13716)
+++ /NEMO/branches/2020/r12377_ticket2386/src/OCE/ISF/isfpar.F90	(revision 13717)
@@ -152,4 +152,11 @@
       ! read par variable from restart
       IF ( ln_rstart ) CALL isfrst_read('par', risf_par_tsc, fwfisf_par, risf_par_tsc_b, fwfisf_par_b)
+      !define fields for restart
+      IF( lwxios ) THEN
+         CALL iom_set_rstw_var_active( 'fwfisf_'//'par'//'_b')
+         CALL iom_set_rstw_var_active( 'isf_hc_'//'par'//'_b')
+         CALL iom_set_rstw_var_active( 'isf_sc_'//'par'//'_b')
+      ENDIF
+
       !
       SELECT CASE ( TRIM(cn_isfpar_mlt) )
