Index: codes/icosagcm/devel/src/dcmip/physics_dcmip2016.f90
===================================================================
--- codes/icosagcm/devel/src/dcmip/physics_dcmip2016.f90	(revision 738)
+++ codes/icosagcm/devel/src/dcmip/physics_dcmip2016.f90	(revision 739)
@@ -71,22 +71,6 @@
     END IF
 
+    ! Physics-specific data
     ngrid = physics_inout%ngrid
-    ! Input
-    ALLOCATE(physics_inout%Ai(ngrid))
-    ALLOCATE(physics_inout%lon(ngrid))
-    ALLOCATE(physics_inout%lat(ngrid))
-    ALLOCATE(physics_inout%phis(ngrid))
-    ALLOCATE(physics_inout%p(ngrid,llm+1))
-    ALLOCATE(physics_inout%pk(ngrid,llm))
-    ALLOCATE(physics_inout%Temp(ngrid,llm))
-    ALLOCATE(physics_inout%ulon(ngrid,llm))
-    ALLOCATE(physics_inout%ulat(ngrid,llm))
-    ALLOCATE(physics_inout%q(ngrid,llm,nqtot))
-    ! Output (tendencies)
-    ALLOCATE(physics_inout%dTemp(ngrid,llm))
-    ALLOCATE(physics_inout%dulon(ngrid,llm))
-    ALLOCATE(physics_inout%dulat(ngrid,llm))
-    ALLOCATE(physics_inout%dq(ngrid,llm,nqtot))
-    ! Physics-specific data
     ALLOCATE(precl_packed(ngrid))
     CALL allocate_field(f_precl, field_t,type_real)
Index: codes/icosagcm/devel/src/physics/physics.f90
===================================================================
--- codes/icosagcm/devel/src/physics/physics.f90	(revision 738)
+++ codes/icosagcm/devel/src/physics/physics.f90	(revision 739)
@@ -7,7 +7,8 @@
   PRIVATE
 
-  INTEGER, PARAMETER :: phys_none=0, phys_HS94=1, phys_DCMIP=2, phys_lmdz_generic=3, phys_LB2012=4, phys_external=5,&
-                        phys_DCMIP2016=6
-
+  INTEGER, PARAMETER :: phys_none=0, phys_column=1, &
+       phys_HS94=3, phys_LB2012=4, &
+       phys_DCMIP=11, phys_DCMIP2016=12, &
+       phys_lmdz_generic=21, phys_external=22
   INTEGER :: phys_type
   TYPE(t_field),POINTER,SAVE :: f_extra_physics_2D(:), f_extra_physics_3D(:)
@@ -28,51 +29,37 @@
     USE mpipara
     USE etat0_mod
+    USE etat0_venus_mod, ONLY : init_phys_venus=>init_physics
     USE physics_dcmip_mod, ONLY : init_physics_dcmip=>init_physics
     USE physics_dcmip2016_mod, ONLY : init_physics_dcmip2016=>init_physics
-    USE etat0_venus_mod, ONLY : init_phys_venus=>init_physics
     USE physics_lmdz_generic_mod, ONLY : init_physics_lmdz_generic=>init_physics
     USE physics_external_mod, ONLY : init_physics_external=>init_physics
-
+    LOGICAL :: done
     physics_inout%dt_phys = dt*itau_physics
+!$OMP PARALLEL
+    CALL allocate_field(f_du_phys,field_u,type_real,llm, name='du_phys')
+
     physics_type='none'
     CALL getin("physics",physics_type)
+    ! below, flag done is set to .FALSE. if the CALL to init_XXX must be done outside any OMP PARALLEL region
+    done=.TRUE.
+    phys_type=phys_column
     SELECT CASE(TRIM(physics_type))
     CASE ('none')
-
-!$OMP PARALLEL
        IF(is_mpi_root) PRINT*,"NO PHYSICAL PACKAGE USED"
        phys_type = phys_none
-!$OMP END PARALLEL
-
     CASE ('held_suarez')
-
-!$OMP PARALLEL
        phys_type = phys_HS94
-!$OMP END PARALLEL
-
     CASE ('Lebonnois2012')
-
-!$OMP PARALLEL
        phys_type = phys_LB2012
-       CALL init_phys_venus
-!$OMP END PARALLEL
-
+       CALL init_phys_venus       
     CASE ('phys_lmdz_generic')
-
-!$OMP PARALLEL
-       CALL init_physics_lmdz_generic
        phys_type=phys_lmdz_generic
-!$OMP END PARALLEL
-
+       done = .FALSE.
     CASE ('phys_external')
-
-       CALL init_physics_external
-!$OMP PARALLEL
        phys_type=phys_external
-!$OMP END PARALLEL
-
-    CASE ('dcmip')
-
-!$OMP PARALLEL
+       done = .FALSE.
+    END SELECT
+
+    IF(phys_type == phys_column) THEN
        CALL allocate_field(f_dulon,field_t,type_real,llm, name='dulon')
        CALL allocate_field(f_dulat,field_t,type_real,llm, name='dulat')
@@ -83,37 +70,34 @@
        CALL allocate_field(f_pk,field_t,type_real,llm, name='pk')
        CALL init_pack_before ! Compute physics_inout%ngrid and offsets used by pack/unpack
-       CALL init_physics_dcmip
-       CALL init_pack_after ! Defines Ai, lon, lat in physics_inout
-       phys_type = phys_DCMIP
+       CALL init_pack_after  ! Defines Ai, lon, lat in physics_inout
+       
+       SELECT CASE(TRIM(physics_type))
+       CASE ('dcmip')
+          phys_type = phys_DCMIP
+          CALL init_physics_dcmip
+       CASE ('dcmip2016')
+          phys_type = phys_DCMIP2016
+          CALL init_physics_dcmip2016
+       CASE DEFAULT
+          IF(is_mpi_root) PRINT*, 'init_physics : Bad selector for variable physics <',&
+               TRIM(physics_type), '> options are <none>, <held_suarez>, <Lebonnois2012>,', &
+               '<dcmip>, <dcmip2016>, <phys_lmdz_generic>, <phys_external>'
+          STOP
+       END SELECT
+       
+    END IF
 !$OMP END PARALLEL
 
-    CASE ('dcmip2016')
-
-!$OMP PARALLEL
-       CALL allocate_field(f_dulon,field_t,type_real,llm, name='dulon')
-       CALL allocate_field(f_dulat,field_t,type_real,llm, name='dulat')
-       CALL allocate_field(f_temp,field_t,type_real,llm, name='temp')
-       CALL allocate_field(f_ulon,field_t,type_real,llm, name='ulon')
-       CALL allocate_field(f_ulat,field_t,type_real,llm, name='ulat')
-       CALL allocate_field(f_p,field_t,type_real,llm+1, name='p')
-       CALL allocate_field(f_pk,field_t,type_real,llm, name='pk')
-       CALL init_pack_before ! Compute physics_inout%ngrid and offsets used by pack/unpack
-       CALL init_physics_dcmip2016
-       CALL init_pack_after ! Defines Ai, lon, lat in physics_inout
-       phys_type = phys_DCMIP2016
-!$OMP END PARALLEL
-
-    CASE DEFAULT
-       IF(is_mpi_root) PRINT*, 'init_physics : Bad selector for variable physics <',&
-            TRIM(physics_type), '> options are <none>, <held_suarez>, <Lebonnois2012>, <dcmip>', &
-                                '<phys_lmdz_generic>, <phys_external>'
-       STOP
-    END SELECT
-
-!$OMP PARALLEL
-    CALL allocate_field(f_du_phys,field_u,type_real,llm, name='du_phys')
+    IF(done==.FALSE.) THEN
+       SELECT CASE(phys_type)
+       CASE(phys_external) 
+          CALL init_physics_external
+       CASE(phys_lmdz_generic)
+          CALL init_physics_lmdz_generic
+       END SELECT
+    END IF
 
     IF(is_mpi_root) PRINT *, 'phys_type = ',phys_type
-!$OMP END PARALLEL
+
   END SUBROUTINE init_physics
 
Index: codes/icosagcm/devel/src/physics/physics_interface.f90
===================================================================
--- codes/icosagcm/devel/src/physics/physics_interface.f90	(revision 738)
+++ codes/icosagcm/devel/src/physics/physics_interface.f90	(revision 739)
@@ -78,5 +78,5 @@
     USE icosa
     IMPLICIT NONE
-    INTEGER :: ind, offset
+    INTEGER :: ind, offset, ngrid
 
     offset=0
@@ -91,4 +91,22 @@
     END DO
     physics_inout%ngrid = offset
+
+    ngrid=offset
+    ! Input                                                                                                     
+    ALLOCATE(physics_inout%Ai(ngrid))
+    ALLOCATE(physics_inout%lon(ngrid))
+    ALLOCATE(physics_inout%lat(ngrid))
+    ALLOCATE(physics_inout%phis(ngrid))
+    ALLOCATE(physics_inout%p(ngrid,llm+1))
+    ALLOCATE(physics_inout%pk(ngrid,llm))
+    ALLOCATE(physics_inout%Temp(ngrid,llm))
+    ALLOCATE(physics_inout%ulon(ngrid,llm))
+    ALLOCATE(physics_inout%ulat(ngrid,llm))
+    ALLOCATE(physics_inout%q(ngrid,llm,nqtot))
+    ! Output (tendencies)
+    ALLOCATE(physics_inout%dTemp(ngrid,llm))
+    ALLOCATE(physics_inout%dulon(ngrid,llm))
+    ALLOCATE(physics_inout%dulat(ngrid,llm))
+    ALLOCATE(physics_inout%dq(ngrid,llm,nqtot))
 
   END SUBROUTINE init_pack_before
