Skip to content
Snippets Groups Projects
Commit e4c795e2 authored by RODIER Quentin's avatar RODIER Quentin
Browse files

Quentin 27/01/2022: Merge turb.F90 MNH->COMMON Update lm + rotate_wind

parent e081c2f1
No related branches found
No related tags found
No related merge requests found
......@@ -8,6 +8,17 @@ IMPLICIT NONE
TYPE(LIST_ll), POINTER :: TPLIST ! List of fields
CALL ABORT
END SUBROUTINE CLEANLIST_ll
!
SUBROUTINE ADD2DFIELD_ll(TPLIST, PFIELD, HNAME)
IMPLICIT NONE
TYPE(LIST_ll), POINTER :: TPLIST ! list of fields
REAL, DIMENSION(:,:), TARGET :: PFIELD ! field to be added to the list
! of fields
character(len=*), intent(in) :: HNAME ! Name of the field to be added
!
CALL ABORT
END SUBROUTINE ADD2DFIELD_ll
!
SUBROUTINE ADD3DFIELD_ll(TPLIST, PFIELD, HNAME)
IMPLICIT NONE
......
! ######spl
MODULE MODI_UPDATE_LM
! ###################
INTERFACE
!
SUBROUTINE UPDATE_LM(HLBCX,HLBCY,PLM,PLEPS)
!
CHARACTER(LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! X boundary type
CHARACTER(LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y boundary type
!
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLM ! mixing length
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLEPS ! dissipative length
!
END SUBROUTINE UPDATE_LM
!
END INTERFACE
!
END MODULE MODI_UPDATE_LM
!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
!MNH_LIC for details. version 1.
! #######################
MODULE MODE_ROTATE_WIND
! #######################
IMPLICIT NONE
CONTAINS
! ###########################################################
SUBROUTINE ROTATE_WIND(PU,PV,PW, &
PDIRCOSXW, PDIRCOSYW, PDIRCOSZW, &
PCOSSLOPE,PSINSLOPE, &
PDXX,PDYY,PDZZ, &
PUSLOPE,PVSLOPE )
! ###########################################################
!
!
!!**** *ROTATE_WIND* - computes the wind components along the maximum slope
!! direction and its normal direction in the first mass level.
!!
!! PURPOSE
!! -------
!!****
! The purpose of this routine is to compute the wind component parallel
! to the orography at the first mass level. The exact location where these
! components are computed is the point of intersection between the normal
! to the orography and the first mass-level hyper-plane at PDZZ(:,:,IKB)/2
!
!!** METHOD
!! ------
!! The values of the 3 cartesian components of the wind are determined
!! by a bilinear interpolation between the 4 nearest points in the first
!! mass-level hyper-plane. These points are found according to the signs of
!! the slopes' sinus and cosinus. For each direction of interpolation, the
!! two different localizations (mass or flux grids) are used to avoid
!! lateral boundary problems.
!! Then, the rotation is performed for the wind components. The rotation
!! angle is the angle between the x axe and the maximum slope direction
!! defined by the slope vector (dZs/dx , dZs/dy).
!! Finally, the horizontal components are set at the marginal points
!! according to cyclic boundary conditions because this is the only case
!! where these points can be considered.
!!
!! EXTERNAL
!! --------
!! NONE
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!!
!! MODD_CONF : L2D switch for 2D model version
!!
!!
!! REFERENCE
!! ---------
!! Book 1 of documentation (Chapter: Turbulence)
!!
!! AUTHOR
!! ------
!! Joel Stein * Meteo-France *
!!
!! MODIFICATIONS
!! -------------
!! Original 14/11/95
!! Modifications: 15/05/96, (N. wood)
!! take into account no slip conditions
!! at the surface
!! 14/02/01 (V. Masson)
!! Slip condition at the surface restored
!!
!! --------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
USE MODD_PARAMETERS
!
IMPLICIT NONE
!
!
!* 0.1 declarations of arguments
!
REAL, DIMENSION(:,:,:), INTENT(IN) :: PU,PV,PW ! cartesian components
! of the wind
REAL, DIMENSION(:,:), INTENT(IN) :: PDIRCOSXW, PDIRCOSYW, PDIRCOSZW
! Director Cosinus along x, y and z directions at surface w-point
REAL, DIMENSION(:,:), INTENT(IN) :: PCOSSLOPE ! cosinus of the angle
! between i and the slope vector
REAL, DIMENSION(:,:), INTENT(IN) :: PSINSLOPE ! sinus of the angle
! between i and the slope vector
REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX, PDYY, PDZZ
! Metric coefficients
REAL, DIMENSION(:,:), INTENT(OUT) :: PUSLOPE ! wind component along
! the maximum slope direction
REAL, DIMENSION(:,:), INTENT(OUT) :: PVSLOPE ! wind component along
! the direction normal to the maximum slope one
!
!-------------------------------------------------------------------------------
!
! 0.2 declaration of local variables
!
INTEGER, DIMENSION(SIZE(PDIRCOSXW,1),SIZE(PDIRCOSXW,2)) :: ILOC,JLOC
! shift index to find the 4 nearest points in x and y directions
REAL, DIMENSION(SIZE(PDIRCOSXW,1),SIZE(PDIRCOSXW,2)) :: ZCOEFF,ZCOEFM, &
! interpolation weigths for flux and mass locations
ZUINT,ZVINT,ZWINT, &
! intermediate values of the cartesian components after x interp.
ZUFIN,ZVFIN,ZWFIN, &
! final values of the cartesian components after the 2 interp.
ZWGROUND
! vertical velocity at the surface
INTEGER :: IIB,IIE,IJB,IJE,IKB
! index values for the Beginning or the End of the physical
! domain in x,y and z directions
INTEGER :: IIU,IJU
! arrays' sizes for i and j indices
INTEGER :: JI,JJ
!
!----------------------------------------------------------------------------
!
!* 1. PRELIMINARIES
! -------------
!
PUSLOPE=0.
PVSLOPE=0.
!
IIB = 2
IJB = 2
IIU = SIZE(PU,1)
IJU = SIZE(PU,2)
IIE = IIU - 1
IJE = IJU - 1
IKB = 1+JPVEXT
!
ZWGROUND(:,:) = PW(:,:,IKB)
!
!* 2. INTERPOLATE THE CARTESIAN COMPONENTS
! ------------------------------------
!
ILOC(:,:)=NINT(SIGN(1.,-PCOSSLOPE(:,:)))
JLOC(:,:)=NINT(SIGN(1.,-PSINSLOPE(:,:)))
!
! interpolation in x direction
!
DO JJ = 1,IJU
DO JI = IIB,IIE
ZCOEFF(JI,JJ) = &
(0.5*PDXX(JI,JJ,IKB) + 0.5*PDZZ(JI,JJ,IKB)*PDIRCOSXW(JI,JJ) ) &
* 2. / (PDXX(JI,JJ,IKB)+PDXX(JI+1,JJ,IKB))
ZUINT(JI,JJ) = ZCOEFF(JI,JJ) * PU(JI+1,JJ,IKB) + &
(1.-ZCOEFF(JI,JJ)) * PU(JI,JJ,IKB)
!
ZCOEFM(JI,JJ) = 1. - 0.5 * PDZZ(JI,JJ,IKB) * ABS(PDIRCOSXW(JI,JJ)) &
/ PDXX(JI+(ILOC(JI,JJ)+1)/2,JJ,IKB)
ZVINT(JI,JJ) = ZCOEFM(JI,JJ) * PV(JI,JJ,IKB) + &
(1.-ZCOEFM(JI,JJ)) * PV(JI+ILOC(JI,JJ),JJ,IKB)
!
ZWINT(JI,JJ) = ZCOEFM(JI,JJ) * (PW(JI,JJ,IKB+1)+ZWGROUND(JI,JJ)) * 0.5 &
+ (1.-ZCOEFM(JI,JJ)) &
*(PW(JI+ILOC(JI,JJ),JJ,IKB+1)+ZWGROUND(JI+ILOC(JI,JJ),JJ)) * 0.5
END DO
END DO
!
! interpolation in y direction
!
DO JJ = IJB,IJE
DO JI = IIB,IIE
ZCOEFF(JI,JJ) = &
(0.5*PDYY(JI,JJ,IKB) + 0.5*PDZZ(JI,JJ,IKB)*PDIRCOSYW(JI,JJ) ) &
* 2. / (PDYY(JI,JJ,IKB)+PDYY(JI+1,JJ,IKB))
ZVFIN(JI,JJ) = ZCOEFF(JI,JJ) * ZVINT(JI,JJ+1) + &
(1.-ZCOEFF(JI,JJ)) * ZVINT(JI,JJ)
!
ZCOEFM(JI,JJ) = 1. - 0.5 * PDZZ(JI,JJ,IKB) * ABS(PDIRCOSYW(JI,JJ)) &
/ PDYY(JI,JJ+(JLOC(JI,JJ)+1)/2,IKB)
ZUFIN(JI,JJ) = ZCOEFM(JI,JJ) * ZUINT(JI,JJ) + &
(1.-ZCOEFM(JI,JJ)) * ZUINT(JI,JJ+JLOC(JI,JJ))
ZWFIN(JI,JJ) = ZCOEFM(JI,JJ) * ZWINT(JI,JJ) + &
(1.-ZCOEFM(JI,JJ)) * ZWINT(JI,JJ+JLOC(JI,JJ))
END DO
END DO
!
!* 3. ROTATE THE WIND
! ---------------
!
!
DO JJ = IJB,IJE
DO JI = IIB,IIE
PUSLOPE(JI,JJ) = PCOSSLOPE(JI,JJ) * PDIRCOSZW(JI,JJ) * ZUFIN(JI,JJ) + &
PSINSLOPE(JI,JJ) * PDIRCOSZW(JI,JJ) * ZVFIN(JI,JJ) + &
SQRT(1.-PDIRCOSZW(JI,JJ)**2) * ZWFIN(JI,JJ)
!
PVSLOPE(JI,JJ) =-PSINSLOPE(JI,JJ) * ZUFIN(JI,JJ) + &
PCOSSLOPE(JI,JJ) * ZVFIN(JI,JJ)
!
END DO
END DO
!
!
!
!----------------------------------------------------------------------------
!
END SUBROUTINE ROTATE_WIND
END MODULE MODE_ROTATE_WIND
!MNH_LIC Copyright 2006-2019 CNRS, Meteo-France and Universite Paul Sabatier
!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
!MNH_LIC for details. version 1.
!-----------------------------------------------------------------
MODULE MODE_UPDATE_LM
IMPLICIT NONE
CONTAINS
SUBROUTINE UPDATE_LM(HLBCX,HLBCY,PLM,PLEPS)
! #################################################################
!
!!**** *UPDATE_LM* - routine to set external points for mixing length
!!
!! PURPOSE
!! -------
!
!!** METHOD
!! ------
!!
!! EXTERNAL
!! --------
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!!
!! REFERENCE
!! ---------
!! Book2 of documentation (routine UPDATE_LM)
!!
!! AUTHOR
!! ------
!! V. Masson * Meteo France *
!!
!! MODIFICATIONS
!! -------------
!! Original april 2006
!! V.Masson : Exchange of East and North sides
!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
!
USE MODD_CONF
USE MODD_PARAMETERS
!
USE MODE_ll
USE MODD_ARGSLIST_ll, ONLY : LIST_ll
!
IMPLICIT NONE
!
!
!* 0.1 declarations of arguments
!
CHARACTER(LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! X boundary type
CHARACTER(LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y boundary type
!
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLM ! mixing length
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLEPS ! dissipative length
!
!* 0.2 declarations of local variables
!
INTEGER :: IIB ! First physical index in x direction
INTEGER :: IJB ! First physical index in y direction
INTEGER :: IIE ! last physical index in x direction
INTEGER :: IJE ! last physical index in y direction
INTEGER :: JI ! loop index
!
TYPE(LIST_ll), POINTER :: TZLM_ll ! list of fields to exchange
INTEGER :: IINFO_ll ! return code of parallel routine
!
!-------------------------------------------------------------------------------
!
!* 1. COMPUTE DIMENSIONS OF ARRAYS :
! ----------------------------
CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
NULLIFY(TZLM_ll)
!
!-------------------------------------------------------------------------------
!
!* 2. UPDATE HALOs :
! -------------
!
!
!!$IF(NHALO == 1) THEN
CALL ADD3DFIELD_ll( TZLM_ll, PLM, 'UPDATE_LM::PLM' )
CALL ADD3DFIELD_ll( TZLM_ll, PLEPS, 'UPDATE_LM::PLEPS' )
CALL UPDATE_HALO_ll(TZLM_ll,IINFO_ll)
CALL CLEANLIST_ll(TZLM_ll)
!!$END IF
!
!-------------------------------------------------------------------------------
!
!* 3. UPDATE EXTERNAL POINTS OF GLOBAL DOMAIN:
! ---------------------------------------
!
IF ( HLBCX(1) /= "CYCL" .AND. LWEST_ll()) THEN
PLM (IIB-1,:,:) = PLM (IIB,:,:)
PLEPS(IIB-1,:,:) = PLEPS(IIB,:,:)
END IF
IF ( HLBCX(2) /= "CYCL" .AND. LEAST_ll()) THEN
PLM (IIE+1,:,:) = PLM (IIE,:,:)
PLEPS(IIE+1,:,:) = PLEPS(IIE,:,:)
END IF
IF ( HLBCY(1) /= "CYCL" .AND. LSOUTH_ll()) THEN
DO JI=1,SIZE(PLM,1)
PLM (JI,IJB-1,:) = PLM (JI,IJB,:)
PLEPS(JI,IJB-1,:) = PLEPS(JI,IJB,:)
END DO
END IF
IF ( HLBCY(2) /= "CYCL" .AND. LNORTH_ll()) THEN
DO JI=1,SIZE(PLM,1)
PLM (JI,IJE+1,:) = PLM (JI,IJE,:)
PLEPS(JI,IJE+1,:) = PLEPS(JI,IJE,:)
END DO
END IF
!-----------------------------------------------------------------------------
END SUBROUTINE UPDATE_LM
END MODULE MODE_UPDATE_LM
......@@ -211,11 +211,24 @@
!! 06/2011 (J.escobar ) Bypass Bug with ifort11/12 on HLBCX,HLBC
!! 2012-02 Y. Seity, add possibility to run with reversed
!! vertical levels
!! 10/2012 (J. Colin) Correct bug in DearDoff for dry simulations
!! 10/2012 J.Escobar Bypass PGI bug , redefine some allocatable array inplace of automatic
!! 2014-11 Y. Seity, add output terms for TKE DDHs budgets
!! July 2015 (Wim de Rooy) modifications to run with RACMO
!! turbulence (LHARAT=TRUE)
!! --------------------------------------------------------------------------
!
!! 04/2016 (C.Lac) correction of negativity for KHKO
! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
! Q. Rodier 01/2018: introduction of RM17
! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
! P. Wautelet 02/2020: use the new data structures and subroutines for budgets
! B. Vie 03/2020: LIMA negativity checks after turbulence, advection and microphysics budgets
! P. Wautelet 11/06/2020: bugfix: correct PRSVS array indices
! P. Wautelet + Benoit Vié 06/2020: improve removal of negative scalar variables + adapt the corresponding budgets
! P. Wautelet 30/06/2020: move removal of negative scalar variables to Sources_neg_correct
! R. Honnert/V. Masson 02/2021: new mixing length in the grey zone
! J.L. Redelsperger 03/2021: add Ocean LES case
! --------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
......@@ -240,8 +253,7 @@ USE MODD_NSV
!
USE MODE_BL89, ONLY: BL89
USE MODE_TURB_VER, ONLY : TURB_VER
!!MODIF AROME
!USE MODI_ROTATE_WIND
USE MODE_ROTATE_WIND, ONLY: ROTATE_WIND
USE MODE_TURB_HOR_SPLT, ONLY: TURB_HOR_SPLT
USE MODE_TKE_EPS_SOURCES, ONLY: TKE_EPS_SOURCES
USE MODI_SHUMAN, ONLY : MZF, MXF, MYF
......@@ -253,7 +265,7 @@ USE MODI_LES_MEAN_SUBGRID
USE MODE_RMC01, ONLY: RMC01
USE MODI_GRADIENT_W
USE MODE_TM06, ONLY: TM06
USE MODI_UPDATE_LM
USE MODE_UPDATE_LM, ONLY: UPDATE_LM
!
USE MODE_BUDGET, ONLY: BUDGET_STORE_INIT, BUDGET_STORE_END
USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
......@@ -736,8 +748,7 @@ IF (HTURBLEN=='ADAP') ZLEPS = MIN(ZLEPS,ZLMW*XCADAP)
! ----------------------------------------------------------
!
IF (HTURBDIM=="3DIM") THEN
!****FOR AROME****
! CALL UPDATE_LM(HLBCX,HLBCY,ZLM,ZLEPS)
CALL UPDATE_LM(HLBCX,HLBCY,ZLM,ZLEPS)
END IF
!----------------------------------------------------------------------------
!
......@@ -747,65 +758,30 @@ END IF
!
!* 4.1 rotate the wind at time t
!
IF ( HINST_SFU == 'T' ) THEN
!
!
IF (CPROGRAM=='AROME ') THEN
ZUSLOPE=PUT(:,:,KKA)
ZVSLOPE=PVT(:,:,KKA)
ELSE
! CALL ROTATE_WIND(PUT,PVT,PWT, &
! PDIRCOSXW, PDIRCOSYW, PDIRCOSZW, &
! PCOSSLOPE,PSINSLOPE, &
! PDXX,PDYY,PDZZ, &
! ZUSLOPE,ZVSLOPE )
!
! CALL UPDATE_ROTATE_WIND(ZUSLOPE,ZVSLOPE)
END IF
!
!
!* 4.2 compute the proportionality coefficient between wind and stress
!
ZCDUEFF(:,:) =-SQRT ( (PSFU(:,:)**2 + PSFV(:,:)**2) / &
(1.E-60 + ZUSLOPE(:,:)**2 + ZVSLOPE(:,:)**2 ) &
)
!
!* 4.3 rotate the wind at time t-delta t
!
IF (CPROGRAM/='AROME ') THEN
! CALL ROTATE_WIND(PUT,PVT,PWT, &
! PDIRCOSXW, PDIRCOSYW, PDIRCOSZW, &
! PCOSSLOPE,PSINSLOPE, &
! PDXX,PDYY,PDZZ, &
! ZUSLOPE,ZVSLOPE )
!
! CALL UPDATE_ROTATE_WIND(ZUSLOPE,ZVSLOPE)
END IF
IF (CPROGRAM/='AROME ') THEN
CALL ROTATE_WIND(PUT,PVT,PWT, &
PDIRCOSXW, PDIRCOSYW, PDIRCOSZW, &
PCOSSLOPE,PSINSLOPE, &
PDXX,PDYY,PDZZ, &
ZUSLOPE,ZVSLOPE )
!
CALL UPDATE_ROTATE_WIND(ZUSLOPE,ZVSLOPE)
ELSE
ZUSLOPE=PUT(:,:,KKA)
ZVSLOPE=PVT(:,:,KKA)
END IF
!
!* 4.4 rotate the wind at time t-delta t
!
IF (CPROGRAM=='AROME ') THEN
ZUSLOPE=PUT(:,:,KKA)
ZVSLOPE=PVT(:,:,KKA)
ELSE
!
! CALL ROTATE_WIND(PUT,PVT,PWT, &
! PDIRCOSXW, PDIRCOSYW, PDIRCOSZW, &
! PCOSSLOPE,PSINSLOPE, &
! PDXX,PDYY,PDZZ, &
! ZUSLOPE,ZVSLOPE )
!
! CALL UPDATE_ROTATE_WIND(ZUSLOPE,ZVSLOPE)
END IF
!
!* 4.5 compute the proportionality coefficient between wind and stress
!* 4.2 compute the proportionality coefficient between wind and stress
!
ZCDUEFF(:,:) =-SQRT ( (PSFU(:,:)**2 + PSFV(:,:)**2) / &
(1.E-60 + ZUSLOPE(:,:)**2 + ZVSLOPE(:,:)**2 ) &
)
END IF
ZCDUEFF(:,:) =-SQRT ( (PSFU(:,:)**2 + PSFV(:,:)**2) / &
#ifdef REPRO48
(1.E-60 + ZUSLOPE(:,:)**2 + ZVSLOPE(:,:)**2 ) )
#else
(XMNH_TINY + ZUSLOPE(:,:)**2 + ZVSLOPE(:,:)**2 ) )
#endif
!
!* 4.6 compute the surface tangential fluxes
!
......@@ -948,8 +924,10 @@ IF( LBUDGET_SV ) THEN
END DO
END IF
!
#ifdef REPRO48 !Les budgets des termes horizontaux de la turb sont présents dans AROME
#else ! alors que ces termes ne sont pas calculés
!Les budgets des termes horizontaux de la turb sont présents dans AROME
! alors que ces termes ne sont pas calculés
#ifdef REPRO48
#else
IF( HTURBDIM == '3DIM' ) THEN
#endif
IF( LBUDGET_U ) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_U ), 'HTURB', PRUS (:, :, :) )
......@@ -985,7 +963,8 @@ IF( HTURBDIM == '3DIM' ) THEN
CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'HTURB', PRSVS(:, :, :, JSV) )
END DO
END IF
#ifdef REPRO48 !à supprimer une fois le précédent ifdef REPRO48 validé
!à supprimer une fois le précédent ifdef REPRO48 validé
#ifdef REPRO48
#else
CALL TURB_HOR_SPLT(KSPLIT, KRR, KRRL, KRRI, PTSTEP, &
HLBCX,HLBCY,OTURB_FLX,OSUBG_COND, &
......@@ -1285,9 +1264,7 @@ IF (LHOOK) CALL DR_HOOK('TURB:UPDATE_ROTATE_WIND',0,ZHOOK_HANDLE)
!
NULLIFY(TZFIELDS_ll)
!
IIU=SIZE(PUSLOPE,1)
IJU=SIZE(PUSLOPE,2)
CALL GET_INDICE_ll (IIB,IJB,IIE,IJE,IIU,IJU)
CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
!
! 2 Update halo if necessary
!
......
......@@ -335,6 +335,9 @@ END MODULE MODI_TURB
!! vertical levels
!! 10/2012 (J. Colin) Correct bug in DearDoff for dry simulations
!! 10/2012 J.Escobar Bypass PGI bug , redefine some allocatable array inplace of automatic
!! 2014-11 Y. Seity, add output terms for TKE DDHs budgets
!! July 2015 (Wim de Rooy) modifications to run with RACMO
!! turbulence (LHARAT=TRUE)
!! 04/2016 (C.Lac) correction of negativity for KHKO
! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
! Q. Rodier 01/2018: introduction of RM17
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment