import sys, os, subprocess, pathlib # Where do we run ? SysName, NodeName, Release, Version, Machine = os.uname () def unDefined (char) : if char in globals () : if globals ()[char] == None : unDefined = True else : unDefined = False else : unDefined = True return unDefined def Mach () : Mach = 'unknown' if SysName == 'Darwin' and 'lsce5138' in NodeName : Mach = 'Spip' if 'obelix' in NodeName : Mach = 'Obelix' if 'forge' in NodeName : Mach = 'Forge' if 'ciclad' in NodeName : Mach = 'Ciclad' if 'spiritx' in NodeName : Mach = 'SpiritX' if 'spiritj' in NodeName : Mach = 'SpiritJ' if 'spirit' in NodeName : Mach = 'SpiritJ' if 'irene' in NodeName : Mach = 'Irene' if 'jean-zay' in NodeName : Mach = 'Jean-Zay' return Mach def MachFull () : _Mach = Mach () MachFull = _Mach if _Mach == 'Irene' : lscpu = subprocess.getoutput ('lscpu') ccc_os = subprocess.getoutput ('ccc_os') if "Intel(R) Xeon(R) Platinum" in lscpu: if "Atos_7__x86_64" in ccc_os : MachFull = 'Irene' if "Rhel_8__x86_64" in ccc_os : MachFull = 'Irene-Next' if "AMD" in lscpu | grep : if "Atos_7__x86_64" in ccc_os : MachFull = 'Rome' if "Rhel_8__x86_64" in ccc_os : MachFull = 'Rome-Next' return MachFull def config ( TagName=None, SpaceName=None, ExperimentName=None, JobName=None, User=None, Project=None, ARCHIVE=None, SCRATCHDIR=None, STORAGE=None, R_IN=None, R_OUT=None, R_FIG=None, R_SAVE=None, R_FIGR=None, R_BUFR=None, R_BUF_KSH=None, REBUILD_DIR=None, POST_DIR=None, rebuild=None ) : if User == None : User == os.environ ['USER'] _Mach = Mach () if _Mach == 'Spip' : if unDefined ( 'ARCHIVE' ) : ARCHIVE = os.path.join ( pathlib.Path.home (), 'Data' ) if unDefined ( 'SCRATCHDIR' ) : SCRATCHDIR = os.path.join ( pathlib.Path.home (), 'Scratch' ) if unDefined ( 'STORAGE' ) : STORAGE = ARCHIVE if _Mach == 'Irene' : if Project == None : Project = os.path.basename ( os.environ ['ALL_CCCHOME'] ) if unDefined ( 'R_IN' ) : R_IN = os.path.join ( subprocess.getoutput ( f'ccc_home --cccwork -d igcmg -u igcmg' ), 'IGCM') if Project == None or User == None : ARCHIVE = os.environ ['CCCSTOREDIR'] STORAGE = os.environ ['CCCWORKDIR'] SCRATCHDIR = os.environ ['CCCSCRATCHDIR'] else : if unDefined ( 'ARCHIVE' ) : ARCHIVE = subprocess.getoutput ( f'ccc_home --cccstore -u {User} -d {Project}' ) if unDefined ( 'STORAGE' ) : STORAGE = subprocess.getoutput ( f'ccc_home --cccwork -u {User} -d {Project}' ) if unDefined ( 'SCRATCHDIR' ) : SCRATCHDIR = subprocess.getoutput ( f'ccc_home --cccscratch -u {User} -d {Project}' ) if unDefined ('rebuild' ) : rebuild = os.path.join ( subprocess.getoutput ( f'ccc_home --ccchome -d igcmg -u igcmg' ), 'Tools', Machine, 'rebuild_nemo', 'bin', 'rebuild_nemo' ) if _Mach == 'Jean-Zay' : if unDefined ( 'ARCHIVE' ) : ARCHIVE = os.getenv ( 'CCFRSTORE' ) if unDefined ( 'STORAGE' ) : STORAGE = os.getenv ( 'CCFRWORK' ) if unDefined ( 'SCRATCHDIR' ) : SCRATCHDIR = os.getenv ( 'CCFRSCRATCH' ) if unDefined ( 'R_IN' ) : R_IN = os.path.join ('/', 'gpfswork', 'rech', 'psl', 'commun', 'IGCM' ) if unDefined ( 'rebuild' ) : rebuild = os.path.join ( '/', 'gpfswork', 'rech', 'psl', 'commun', 'Tools', 'rebuild', 'modipsl_IOIPSL_PLUS_v2_2_4', 'bin', 'rebuild' ) ## The construction of the following variables is not machine dependant if SpaceName == 'TEST' : if unDefined ( 'R_OUT' ) : R_OUT = os.path.join ( SCRATCHDIR, 'IGCM_OUT' ) if unDefined ( 'R_FIG' ) : R_FIG = os.path.join ( SCRATCHDIR, 'IGCM_OUT' ) else : if unDefined ( 'R_OUT' ) : R_OUT = os.path.join ( ARCHIVE , 'IGCM_OUT' ) if unDefined ( 'R_FIG' ) : R_FIG = os.path.join ( STORAGE , 'IGCM_OUT' ) if unDefined ( 'R_BUF' ) : R_BUF = os.path.join ( SCRATCHDIR, 'IGCM_OUT' ) IGCM_OUT = R_OUT L_EXP = os.path.join (TagName, SpaceName, ExperimentName, JobName) if unDefined ( 'R_SAVE' ) : R_SAVE = os.path.join ( R_OUT , L_EXP ) if unDefined ( 'R_SAVE' ) : R_FIGR = os.path.join ( STORAGE , 'IGCM_OUT', L_EXP ) if unDefined ( 'R_BUFR' ) : R_BUFR = os.path.join ( R_BUF , L_EXP ) if unDefined ( 'R_BUF_KSH' ) : R_BUF_KSH = os.path.join ( R_BUFR , 'Out' ) if unDefined ( 'REBUILD_DIR' ) : REBUILD_DIR = os.path.join ( R_BUF , L_EXP, 'REBUILD' ) if unDefined ( 'POST_DIR' ) : POST_DIR = os.path.join ( R_BUF , L_EXP, 'Out' ) libIGCM = {'ARCHIVE':ARCHIVE,'STORAGE':STORAGE, 'SCRATCHDIR':SCRATCHDIR, 'R_OUT':R_OUT, 'R_BUF':R_BUFR, 'IGCM_OUT':IGCM_OUT, 'R_SAVE':R_SAVE, 'R_FIGR':R_FIGR, 'R_BUFR':R_BUFR, 'REBUILD_DIR':REBUILD_DIR, 'POST_DIR':POST_DIR, 'rebuild':rebuild 'User':User } return libIGCM