Skip to content
Snippets Groups Projects
Commit 921a7a26 authored by RIETTE Sébastien's avatar RIETTE Sébastien
Browse files

Default values for LMDZ, first version of check_commit_lmdz.sh

check_commit_lmdz.sh not fully working
parent 44b21457
No related branches found
No related tags found
No related merge requests found
......@@ -188,6 +188,8 @@ IF(LLDEFAULTVAL) THEN
CFRAC_ICE_SHALLOW_MF='T'
VSIGQSAT=0.
LSIGMAS=.FALSE.
ELSEIF(HPROGRAM=='LMDZ') THEN
LSUBG_COND=.TRUE.
ENDIF
ENDIF
!
......
......@@ -373,6 +373,18 @@ IF(LLDEFAULTVAL) THEN
LSEDIC=.FALSE.
XMRSTEP=0.
CSUBG_AUCV_RC='PDF'
ELSEIF(HPROGRAM=='LMDZ') THEN
CSUBG_AUCV_RC='PDF'
CSEDIM='STAT'
NMAXITER_MICRO=1
LCRIAUTI=.TRUE.
XCRIAUTC_NAM=0.001
XCRIAUTI_NAM=0.0002
XT0CRIAUTI_NAM=-5.
LRED=.TRUE.
LCONVHG=.TRUE.
LADJ_BEFORE=.TRUE.
LADJ_AFTER=.FALSE.
ENDIF
ENDIF
!
......@@ -409,9 +421,9 @@ IF(LLCHECK) THEN
CALL ABOR1 ("XRDESRED_NAM and XRDEGRED_NAM must not be activated together with LOCND2")
ENDIF
IF(HPROGRAM=='AROME') THEN
IF(HPROGRAM=='AROME' .OR. HPROGRAM=='LMDZ') THEN
IF(.NOT. (LADJ_BEFORE .AND. .NOT. LADJ_AFTER)) THEN
CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'MODD_PARAM_ICE_n', 'With AROME, LADJ_BEFORE must be .T. and LADJ_AFTER must be .F.')
CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'MODD_PARAM_ICE_n', 'With AROME/LMDZ, LADJ_BEFORE must be .T. and LADJ_AFTER must be .F.')
ENDIF
ELSEIF(HPROGRAM=='MESONH') THEN
IF(.NOT. LPACK_MICRO) THEN
......
......@@ -343,6 +343,9 @@ IF(LLDEFAULTVAL) THEN
ELSEIF(HPROGRAM=='MESONH') THEN
LROTATE_WIND=.TRUE.
LTKEMINTURB=.FALSE.
ELSEIF(HPROGRAM=='LMDZ') THEN
XTKEMIN=1.E-6
XLINI=0.
ENDIF
ENDIF
!
......
......@@ -41,6 +41,7 @@ SUBROUTINE INIT_PHYEX(PTSTEP, PDZMIN, PHYEX)
!
USE MODD_PHYEX, ONLY: PHYEX_t
USE MODI_INI_PHYEX, ONLY: INI_PHYEX
USE print_control_mod, ONLY : lunout
!
IMPLICIT NONE
!
......@@ -53,19 +54,34 @@ CHARACTER(LEN=4) :: CMICRO
CHARACTER(LEN=4) :: CSCONV
CHARACTER(LEN=4) :: CTURB
INTEGER :: K
LOGICAL :: LREADNAM, LOPENED
INTEGER :: IUNITNML, ILUN
!
!General configuration, cannot be modified by namelist
CPROGRAM='AROME '
CPROGRAM='LMDZ'
CMICRO='ICE3'
CSCONV='EDKF'
CTURB='TKEL'
!
! Initialize PHYEX
CALL INI_PHYEX(HPROGRAM=CPROGRAM, KUNITNML=0, LDNEEDNAM=.TRUE., &
&KLUOUT=20, KFROM=0, KTO=1, &
!If the namelist file exists, we use it
INQUIRE(FILE='phyex.nam', EXIST=LREADNAM)
IF(LREADNAM) THEN
IUNITNML=-1
DO ILUN=1,100
INQUIRE(UNIT=ILUN, OPENED=LOPENED)
IF (.NOT. LOPENED) THEN
IUNITNML=ILUN
EXIT
END IF
END DO
OPEN(ACTION='read', FILE='phyex.nam', UNIT=IUNITNML)
ENDIF
CALL INI_PHYEX(HPROGRAM=CPROGRAM, KUNITNML=IUNITNML, LDNEEDNAM=.FALSE., &
&KLUOUT=lunout, KFROM=0, KTO=1, &
&PTSTEP=PTSTEP, PDZMIN=PDZMIN, &
&CMICRO=CMICRO, CSCONV=CSCONV, CTURB=CTURB, &
&LDDEFAULTVAL=.TRUE., LDREADNAM=.FALSE., LDCHECK=.TRUE., &
&LDDEFAULTVAL=.TRUE., LDREADNAM=LREADNAM, LDCHECK=.TRUE., &
&KPRINT=2, LDINIT=.TRUE., &
&PHYEX_OUT=PHYEX)
!
......
......@@ -228,9 +228,6 @@ if (debut) then ! Things to do only for the first call to physics
CALL INIT_PHYEX(pdtphys, ZDZMIN, PHYEX)
CALL FILL_DIMPHYEX(KLON, KLEV, D)
!Update default values
PHYEX%NEBN%LSUBG_COND = .TRUE.
PHYEX%PARAM_ICEN%CSUBG_AUCV_RC='PDF'
!
! Variables saved
ALLOCATE(PTKEM(klon,klev+2))
......@@ -360,9 +357,9 @@ CALL VERTICAL_EXTEND(ZVT,klev)
ZRXS(:,:,:) = ZRX(:,:,:)/pdtphys
ZTHETAS(:,:)=ZTHETA(:,:)/pdtphys
ZTKES(:,:)=PTKEM(:,:)/pdtphys
!To compute the actual tendecy, we save the initial values of these variables
!To compute the actual tendency, we save the initial values of these variables
ZRXS0(:,:,:) = ZRXS(:,:,:)
ZTHETAS0=ZTHETAS
ZTHETAS0(:,:)=ZTHETAS(:,:)
ZTKES0(:,:)=ZTKES(:,:)
!------------------------------------------------------------
! Adjustment
......@@ -383,7 +380,7 @@ CALL ICE_ADJUST (D, PHYEX%CST, PHYEX%RAIN_ICE_PARAMN, PHYEX%NEBN, PHYEX%TURBN, P
&ZRX(:,:,3), ZRX(:,:,4), ZRXS(:,:,4), ZRX(:,:,5), ZRX(:,:,6), &
&PHYEX%MISC%YLBUDGET, PHYEX%MISC%NBUDGET, &
&ZICE_CLD_WGT, &
&ZHLC_HRC, ZHLC_HCF, ZHLI_HRI, ZHLI_HCF )
&PHLC_HRC=ZHLC_HRC, PHLC_HCF=ZHLC_HCF, PHLI_HRI=ZHLI_HRI, PHLI_HCF=ZHLI_HCF )
!
!Variables are updated with their adjusted values (to be used by the other parametrisations)
ZTHETA(:,:)=ZTHETAS(:,:)*pdtphys
......@@ -419,22 +416,21 @@ d_u(1:klon,1)=d_u(1:klon,1)-u(1:klon,1)/86400.
d_v(1:klon,1)=d_v(1:klon,1)-v(1:klon,1)/86400.
!
! Flux RICO
PSFTH(:) = 5E-3 ! RICO
PSFRV(:) = 6E-5 ! RICO
!PSFTH(:) = 5E-3 ! RICO
!PSFRV(:) = 6E-5 ! RICO
! Flux ARMCU
!PSFTH(:) = -fsens/1000.
!PSFRV(:) = -flat/(2.5e6)
PSFTH(:) = -fsens/1000.
PSFRV(:) = -flat/(2.5e6)
!
PSFSV(:,:) = 0.
PSFU(:) = 0.
PSFV(:) = 0.
!
!TODO PSIGMF option STAT
!------------------------------------------------------------
! Shallow convection
!------------------------------------------------------------
!
CALL SHALLOW_MF(D, PHYEX%CST, PHYEX%NEBN, PHYEX%PARAM_MFSHALLN, PHYEX%TURBN, PHYEX%CSTURB, &
CALL SHALLOW_MF(D, PHYEX%CST, PHYEX%NEBN, PHYEX%PARAM_MFSHALLN, PHYEX%TURBN, PHYEX%CSTURB, &
&KRR=KRR, KRRL=KRRL, KRRI=KRRI, KSV=KSV, &
&ONOMIXLG=PHYEX%MISC%ONOMIXLG,KSV_LGBEG=PHYEX%MISC%KSV_LGBEG,KSV_LGEND=PHYEX%MISC%KSV_LGEND, &
&PTSTEP=pdtphys, &
......@@ -480,7 +476,7 @@ CALL TURB(PHYEX%CST, PHYEX%CSTURB, PHYEX%MISC%TBUCONF, PHYEX%TURBN, PHYEX%NEBN,
& PHYEX%MISC%KSPLIT,PHYEX%MISC%KMI, KSV, PHYEX%MISC%KSV_LGBEG, PHYEX%MISC%KSV_LGEND, &
& PHYEX%MISC%KSV_LIMA_NR, PHYEX%MISC%KSV_LIMA_NS, PHYEX%MISC%KSV_LIMA_NG, PHYEX%MISC%KSV_LIMA_NH, &
& PHYEX%MISC%O2D, PHYEX%MISC%ONOMIXLG, PHYEX%MISC%OFLAT, PHYEX%MISC%OCOUPLES, &
& PHYEX%MISC%OBLOWSNOW,PHYEX%MISC%OIBM, &
& PHYEX%MISC%OBLOWSNOW,PHYEX%MISC%OIBM, &
& PHYEX%MISC%OFLYER, PHYEX%MISC%COMPUTE_SRC, PHYEX%MISC%PRSNOW, &
& PHYEX%MISC%OOCEAN, PHYEX%MISC%ODEEPOC, PHYEX%MISC%ODIAG_IN_RUN, &
& PHYEX%MISC%HTURBLEN_CL,PHYEX%MISC%CMICRO, &
......
{
"version":"20230522.trunk",
"install_arg":"-unstable",
"rad":"oldrad"
}
#!/bin/bash
set -x
set -e
set -o pipefail #abort if left command on a pipe fails
#This script:
# - compiles the LMDZ model using a specific commit for the externalised physics
# - runs RICO and ARM-CU 1D cases
PHYEXTOOLSDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
specialPack="ref"
availTests="rico arm_cu"
defaultTest="rico"
defaultRef='ref'
LMDZPACK=${LMDZPACK:=$HOME/LMDZ/PHYEX}
separator='_' #- be carrefull, gmkpack (at least on belenos) has multiple allergies (':', '.', '@')
#- seprator must be in sync with prep_code.sh separator
function usage {
echo "Usage: $0 [-h] [-p] [-c] [-C] [-r] [-s] [--expand] [-t test] [--version VERSION] [--repo-user] [--repo-protocol] commit [reference]"
echo "commit commit hash (or a directory, or among $specialPack) to test"
echo "reference commit hash (or a directory, or among $specialPack) REF to use as a reference"
echo "-s suppress compilation pack"
echo "-p creates pack"
echo "-c performs compilation"
echo "-r runs the tests"
echo "-C checks the result against the reference"
echo "-t comma separated list of tests to execute"
echo " or ALL to execute all tests"
echo "--nofcm don't use fcm (be carreful, with fcm compilation exits with a (false) error"
echo "--expand use mnh_expand (code will be in do loops)"
echo "--version VERSION to force using lmdz VERSION"
echo "--repo-user user hosting the PHYEX repository on github,"
echo " defaults to the env variable PHYEXREOuser (=$PHYEXREOuser)"
echo "--repo-protocol protocol (https or ssh) to reach the PHYEX repository on github,"
echo " defaults to the env variable PHYEXREOprotocol (=$PHYEXREOprotocol)"
echo ""
echo "If nothing is asked (pack creation, compilation, running, check) everything is done"
echo "If no test is aked for, the default one ($defaultTest) is executed"
echo
echo "With the special reference REF commit, a suitable reference is guessed"
echo "The directory (for commit only, not ref) can take the form server:directory"
echo "If using a directory (for commit or reference) it must contain at least one '/'"
echo "The commit can be a tag, written with syntagx tags/<TAG>"
}
fcm=1
packcreation=0
compilation=0
run=0
check=0
commit=""
reference=""
tests=""
suppress=0
useexpand=0
version=""
while [ -n "$1" ]; do
case "$1" in
'-h') usage;;
'-s') suppress=1;;
'-p') packcreation=1;;
'-c') compilation=1;;
'-r') run=$(($run+1));;
'-C') check=1;;
'-t') tests="$2"; shift;;
'--nofcm') fcm=0;;
'--expand') useexpand=1;;
'--version') version="$2"; shift;;
'--repo-user') export PHYEXREPOuser=$2; shift;;
'--repo-protocol') export PHYEXREPOprotocol=$2; shift;;
#--) shift; break ;;
*) if [ -z "${commit-}" ]; then
commit=$1
else
if [ -z "${reference-}" ]; then
reference=$1
else
echo "Only two commit hash allowed on command line"
exit 1
fi
fi;;
esac
shift
done
if [ -z "${tests-}" ]; then
tests=$defaultTest
elif [ $tests == 'ALL' ]; then
tests=$availTests
fi
if [ $packcreation -eq 0 -a \
$compilation -eq 0 -a \
$run -eq 0 -a \
$check -eq 0 ]; then
packcreation=1
compilation=1
run=1
check=1
fi
if [ -z "${commit-}" ]; then
echo "At least one commit hash must be provided on command line"
exit 2
fi
if [ $check -eq 1 -a -z "${reference-}" ]; then
echo "To perform a comparison two commit hashes are mandatory on the command line"
exit 3
fi
function jsonarg {
#$1 is the file containing the json dictionnary
#$2 is the dictionnary key to return
python3 -c "import json; print(json.load(open('$1', 'r'))['$2'])"
}
fromdir=''
if echo $commit | grep '/' | grep -v '^tags/' > /dev/null; then
fromdir=$commit
if [ "$version" == "" ]; then
content_lmdz_version=$(scp $commit/src/lmdz/lmdz_version.json /dev/stdout 2>/dev/null)
version=$(jsonarg <(echo $content_lmdz_version) version)
rad=$(jsonarg <(echo $content_lmdz_version) rad)
install_arg=$(jsonarg <(echo $content_lmdz_version) install_arg)
fi
name=$(echo $commit | sed 's/\//'${separator}'/g' | sed 's/:/'${separator}'/g' | sed 's/\./'${separator}'/g')
[ $suppress -eq 1 -a -d $LMDZPACK/$name ] && rm -rf $LMDZPACK/$name
elif echo $specialPack | grep -w $commit > /dev/null; then
name="PHYEX/$commit"
else
if [ "$version" == "" ]; then
if [[ $commit == lmdz${separator}* ]]; then
lmdz_version_file="lmdz_version.json"
else
lmdz_version_file="src/lmdz/lmdz_version.json"
fi
if echo $commit | grep '^tags/' > /dev/null; then
urlcommit=$(echo $commit | cut -d / -f 2-)
else
urlcommit=$commit
fi
content_lmdz_version=$(wget --no-check-certificate https://raw.githubusercontent.com/$PHYEXREPOuser/PHYEX/${urlcommit}/$lmdz_version_file -O - 2>/dev/null || echo "")
version=$(jsonarg <(echo $content_lmdz_version) version)
rad=$(jsonarg <(echo $content_lmdz_version) rad)
install_arg=$(jsonarg <(echo $content_lmdz_version) install_arg)
fi
name="COMMIT$(echo $commit | sed 's/\//'${separator}'/g' | sed 's/:/'${separator}'/g' | sed 's/\./'${separator}'/g')"
[ $suppress -eq 1 -a -d $LMDZPACK/$name ] && rm -rf $LMDZPACK/$name
fi
if [ ! -z "${reference-}" ]; then
[ $reference == 'REF' ] && reference=$defaultRef
reffromdir=''
if echo $reference | grep '/' > /dev/null; then
reffromdir=$reference
refname="PHYEX/$(echo $reference | sed 's/\//'${separator}'/g' | sed 's/:/'${separator}'/g' | sed 's/\./'${separator}'/g')"
elif echo $specialPack | grep -w $reference > /dev/null; then
refname="PHYEX/$reference"
else
refname="PHYEX/COMMIT${reference}"
fi
fi
if [ $packcreation -eq 1 ]; then
echo "### Compilation of commit $commit"
if echo $specialPack | grep -w $commit > /dev/null; then
echo "Special commit '$commit' cannot be compiled with this script"
exit 4
fi
if [ -d $LMDZPACK/$name ]; then
echo "Pack already exists ($LMDZPACK/$name), suppress it to be able to compile it again (or use the -s option to automatically suppress it)"
exit 5
fi
#Create directory
cd $LMDZPACK
mkdir $name
cd $name
base=$PWD
wget https://lmdz.lmd.jussieu.fr/pub/install_lmdz.sh
bash install_lmdz.sh -v $version $install_arg -bench 0 -rad $rad -name LMDZ > Install.log
lmdzdir=$PWD/LMDZ
#Populate with test cases
cd $lmdzdir
wget https://lmdz.lmd.jussieu.fr/pub/1D/1D.tar.gz
tar xf 1D.tar.gz
cd 1D
rad=$(echo $rad) #to suppress spaces
sed -i'' -e 's:^listecas=.*$:listecas="arm_cu rico":' -e "s/^rad=.*$/rad='$rad'/" run.sh
cd INPUT/PHYS
cp physiq.def_6A physiq.def_PHYLMD
echo "iflag_physiq=1" >> physiq.def_PHYLMD
sed -e "s/iflag_physiq=1/iflag_physiq=2/" physiq.def_PHYLMD > physiq.def_PHYEX
#Update compilation cript
phylmd=${lmdzdir}/modipsl/modeles/LMDZ/libf/phylmd/
if [ $fcm -eq 1 ]; then
sed -i "s/fcm=0/fcm=1/g" $lmdzdir/1D/bin/compile
fi
#Checkout PHYEX
cd $base
phyex=$base/PHYEX/
MNH_EXPAND_DIR=$PHYEXTOOLSDIR/mnh_expand
export PATH=$MNH_EXPAND_DIR/filepp:$MNH_EXPAND_DIR/MNH_Expand_Array:$PATH
if [ $useexpand == 1 ]; then
expand_options="-D MNH_EXPAND -D MNH_EXPAND_LOOP"
else
expand_options=""
fi
subs="-s turb -s micro -s aux -s ext"
prep_code=$PHYEXTOOLSDIR/prep_code.sh
if [ "$fromdir" == '' ]; then
echo "Clone repository, and checkout commit $commit (using prep_code.sh)"
if [[ $commit == lmdz${separator}* ]]; then
$prep_code -c $commit PHYEX #This commit is ready for inclusion
else
$prep_code -c $commit $expand_options $subs -m arome PHYEX
fi
else
echo "Copy $fromdir"
mkdir PHYEX
scp -q -r $fromdir/src PHYEX/
$prep_code $expand_options $subs -m lmdz PHYEX
fi
#Update code
cd $phylmd
cp -r . ../phylmdorig
ln -sf $phyex/*/* .
if [ $fcm -eq 0 ]; then
mv modd_dimphyexn.F90 modd_dimphyex.F90
for name in `grep -i 'END MODULE' modd*n.F90 | cut -d: -f1 | sed -e 's/n.F90//'` ; do mv ${name}n.F90 ${name}_n.F90 ; done
mv hypgeo.F90 modi_hypgeo.F90
mv hypser.f90 modi_hypser.F90
mv tools.F90 mode_tools.F90
mv shuman_mf.F90 modi_shuman_mf.F90
mv shuman_phy.F90 mode_shuman_phy.F90
fi
#Missing files in case ecrad is not used
if [ "$rad" != "ecrad" ] ; then
ln -s ecrad/yom* ecrad/abor1.F90 ecrad/abor1.intfb.h ecrad/parkind1.F90 .
fi
fi
if [ $compilation -eq 1 ]; then
echo "### Compilation of commit $commit"
cd $LMDZPACK/$name/LMDZ/1D
sed -i'' -e 's/^listedef=.*$/listedef="PHYLMD PHYEX"/' run.sh
./run.sh > log.$$ 2>&1
fi
if [ $run -eq 1 ]; then
echo "### Execution of commit $commit"
cd $LMDZPACK/$name/LMDZ/1D
./run.sh -r > log.$$ 2>&1
wget https://www.lmd.jussieu.fr/~hourdin/phyex/compare.sh
bash compare.sh
fi
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