!> \file 3D-physique-gen_mod.f90 !! Module de declaration des variables generales !! de la physique du modele. !< !> \namespace module3D_phy !! Module de declaration des variables generales !! de la physique du modele. !! \author CatRitz !! \date 30 juin 2007 !! @note Used module !! @note - use geography !! @note - use runparam !< module MODULE3D_phy ! declaration des variables ! implicit none use geography ! indirectement donne acces au nx,ny, appropries use runparam ! donne acces a runname, dirout, tbegin,tend use param_phy_mod implicit none real, parameter :: PI = 3.1415927 ! **** integer declaration ************************************* integer :: I,J !< I selon x, j selon y, integer :: k,l !< k vertical integer :: ispinup !< pour les differentes etapes du spinup integer :: I1,J1,I_1,J_1,I2,J2 !< integer :: NI,NJ,NXX,NYY !< divers entiers de travail en general integer :: NZZ !< Total number of vertical grid points integer :: err !< pour l'allocation des tableaux integer :: igrdline !< si 1 fixe la position en jouant sur la fusion shelf integer :: ibmelt_inv !< si 1 inversion du bmelt (avec igrdline=1) integer :: i_resolmeca !< defini le type d'association SIA-L1 integer :: iter_beta !< pour la determination du frottement integer :: ICOUPLE !< integer :: IMARGIN !< integer :: ICOMPTEUR !< reprise fichier cptr integer :: IOUT !< type de fichier de sortie pour reprise integer :: iglen !< compteur pour la boucle flowlaw integer :: ISYNCHRO !< synchronisation pas de temps dt et dtt integer :: LOIGLISS !< permet de choisir la loi de glissement integer :: Schoof !< 0 : pas de flux de Schoof , 1 : flux de Schoof a la grounding line !integer :: NYEAR !< number of months in 1 year, st. dev. for temp *) integer :: NTMAX !< ! integer :: NDAY !< integer :: NP !< real :: NDISP !< sortie courte (temps) !integer :: NTRACE !< sortie de traces 1=oui, 0=non integer :: NICE !< integer :: NINSTAB !< integer :: NUMFUS !< integer :: NUMMARG !< integer :: BANDWD !< integer :: TIMECG !< integer :: IND !< integer :: IFT !< integer :: ITEMP !< integer :: ITBOOST !< ! integer :: NBLIG ! ?????????????????????????????? integer :: ndebug !< pour faire des sorties de debug a plusieurs pas de temps integer :: ndebug_max !< pour faire des sorties de debug a plusieurs pas de temps !integer, dimension(NX,NY) :: LIGU !< numero de ligne de U dans remplidom !integer, dimension(NX,NY) :: LIGV !< numero de ligne de V dans remplidom integer :: nombre_profils !< nombre de profils de la calotte integer :: itracer ! pour ecrire les recovery avec ou sans les tableaux traceurs ! ************ common des scalaires ************************* real :: alpha_drag !< exposant non linearite, dragging dans la namelist real :: exp_alpha !< exposant dans la loi dragging real :: A1 !< real :: A2 !< real :: ALT !< real :: ATEST !< real :: ACOUP !< real :: BEDCT !< real :: coefbmshelf !< coef permettant de faire varier la fusion basale : !< 3 dimensions pour les 3 bassins oceaniques de Climber??? real :: cf !< coefficient loi frottement ! real :: CSI ! proportion of melted water that can refreeze *) ! real :: Cice ! melting factors for ice ! real :: Csnow ! melting factors for snow real :: CL !< specific latent heat of fusion of ice J/Kg real :: DT !< pas de temps court real :: DTT !< pas de temps long real :: DTMIN !< pas de temps mini !real :: DTP !< integrating step for positive degree days (degrees) !! Ne sert plus a rien avec param_phy_mod real :: DICE !< = RO/ROW real :: DA !< real :: DX1 !< 1/dx real :: DTDX !< dt/dx real :: dtdx2 !< dt/dx**2 !! Ne sert plus a rien avec param_phy_mod real :: D00 !< = RO**3*G**3 real :: DMX1 !< real :: DMY1 !< real :: DMX2 !< real :: DMY2 !< real :: DTMAX !< real :: EW !< real :: FLU !< !! Ne sert plus a rien avec param_phy_mod real :: G !< gravite real :: GAMMA !< real :: GLACLOST !< real :: HMAX !< epasisseur de glace max real :: HMEAN !< epasisseur de glace moyenne real,parameter :: Hmin=1.001 !< Hmin pour etre considere comme point ice real :: HWATERMAX !< hauteur d'eau basale maximum dans le sediment real :: HWATSTREAM !< seuil min. d'eau basale (hwater) pour ice stream real :: HLIM !< real :: coefbmax !< fautcteur de normalisation pour l'influence de l'eau real :: ff !< coefficient de la loi de frottement solide real :: ff_stream !< coefficient de la loi de frottement solide pour les ice-streams ! real :: PY ! ct for PDD calculation real :: PYY !< ! real :: PSOLID !< temp limit between liquid and solid precip ! real :: PDDCT ! ct for PDD calculation real :: PDSI !< real :: PDS !< real :: RGAS !< gas constant (J/mol/K) !! Ne sert plus a rien avec param_phy_mod real :: ROM !< density of mantle !! Ne sert plus a rien avec param_phy_mod real :: ROW !< densities of ocean water !! Ne sert plus a rien avec param_phy_mod real :: ROFRESH !< density of fresh water !! Ne sert plus a rien avec param_phy_mod real :: ROFRESHG !< = ROFRESH*G !! Ne sert plus a rien avec param_phy_mod real :: RO !< densities of ice !! Ne sert plus a rien avec param_phy_mod real :: ROG !< = RO*G (glace) !! Ne sert plus a rien avec param_phy_mod real :: ROWG !< = ROW*G (ocean) !! Ne sert plus a rien avec param_phy_mod real :: ROMG !< = ROM*G (asthenosphere) real :: SECYEAR !< for relation an/seconds !real :: S22 ! ct for PDD calculation real,target :: sealevel !< niveau des mers ! real :: SIGMA ! variabilite Tday real :: SURF !< real :: STEP !< ! real :: SIF !< ! real :: SUMM !< real :: SIMAX !< real :: SPHI !< ! real :: TEMPGRAD !< atmospheric temperature gradient (annual) ! real :: TEMPGRJUL !< atmospheric temperature gradient (july) real (kind=kind(0.d0)) :: TIME !< temps : en double precision real :: TAFOR !< temperature forcing : annual real :: TJFOR !< temperature forcing : july ! real :: TEMP !< real :: TESTDIAG !< for time step calculation (icethick) real :: V_limit !< vitesse maxi (limitateur de flux pour conserv masse) real :: TJF !< real :: TSF !< real :: TII !< real :: TJJ !< real :: TEVOL !< real :: UZ1 !< real :: UZ2 !< real :: UZ3 !< real :: VOL !< real :: VVX !< real :: VVY !< real :: WDOTMEAN !< real :: X1 !< real :: XLCENT !< real :: XDMIN !< real :: XC !< real :: YDMIN !< real :: YLATREF !< real :: YC !< real :: ZI !< real :: U !< real :: TTETA !< real :: LAMBDA !< real :: G1 !< real :: XI !< real :: XIS !< real :: ERFXI !< real :: ERFXIS !< real :: INTDAWS !< real :: WSP !< real :: gradsurf !< real :: U1 !< real :: U2 !< real :: KAP !< real :: G1NEW !< real :: neffgz !< real :: neffratio !' real,dimension(nx,ny) :: DDBY !< UBY/(-SDY) '^' real,dimension(nx,ny) :: Diffmx !< partie diffusive en x real,dimension(nx,ny) :: Diffmy !< partie diffusive en y !REAL,dimension(nx,ny) :: DPHIX !< ROG*HMX**2 '>' !REAL,dimension(nx,ny) :: DPHIY !< ROG*HMY**2 '^' real,dimension(nx,ny) :: DHDT !< derive lagrangienne de l'epaisseur 'o' real,dimension(nx,ny) :: DIF1 !< UZR(I,J,1)-BM(I,J) real,dimension(nx,ny) :: DIF2 !< UZR(I,J,1)-BMELT(I,J) real,dimension(nx,ny) :: DIFT !< pour sorties eismint real,dimension(nx,ny) :: DIVU !< divergence de UH ! real,dimension(nx,ny) :: DISTCENT ! real,dimension(nx,ny) :: ELA !< Equilibrium line altitude, for mass balance real,dimension(nx,ny) :: epsxx !< vitesse de deformation selon x real,dimension(nx,ny) :: epsyy !< vitesse de deformation selon y real,dimension(nx,ny) :: epsxy !< vitesse de deformation selon xy real,dimension(nx,ny) :: eps !< vitesse de deformation (invariant) real,dimension(nx,ny) :: FT !< proportion of year with air temp below 2C real,dimension(nx,ny) :: FROTMX !< beta coefficient used in the remplimat routine real,dimension(nx,ny) :: FROTMY !< real,dimension(nx,ny) :: GHF !< geothermal heat flux J/m2/a 'o' real,dimension(nx,ny) :: GHF0 !< geothermal heat flux J/m2/a 'o' real,dimension(nx,ny),target :: H !< ice thickness 'o' real,dimension(nx,ny) :: H0 !< initial ice thickness, must be initialized before init_iso ! dimensionnements qui etaient avant dans H_prescribe real,dimension(nx,ny) :: Hp !< H value if prescribed real,dimension(nx,ny) :: Hp0 !< H value if prescribed (reference value) real,dimension(nx,ny) :: Delta_H !< Delta_H value if prescribed integer,dimension(nx,ny) :: i_delta_H !< 1 if Delta_H is prescribed on this node, else 0 integer,dimension(nx,ny) :: i_Hp !< 1 if H is prescribed on this node, else 0 integer,dimension(nx,ny) :: i_Hp0 !< i_hp mask reference value does not change with time integer, dimension(nx,ny) :: imx_diag !< masque pour eq elliptique integer, dimension(nx,ny) :: imy_diag !< masque pour eq elliptique integer,dimension(nx,ny) :: MK_gl0 !< mask grounding line initial integer,dimension(nx,ny) :: MK_flot0 !< mask float initial real,dimension(nx,ny) :: H_sealev !< ice thickness for sea level calculation ! (present ice sheet) real,dimension(nx,ny) :: HDOT !< ice thickness derivee / t real,dimension(nx,ny) :: HDOTWATER real,dimension(nx,ny) :: H1 !< real,dimension(nx,ny) :: HMX !< ice thickness moy selon x '>' real,dimension(nx,ny) :: HMY !< ice thickness moy selon y '^' real,dimension(nx,ny) :: HDOTPREC !< real,dimension(nx,ny) :: HDOTRAP !< real,dimension(nx,ny) :: KOND !< basale hydro. conductivity 'o' real,dimension(nx,ny) :: PDD !< Positive degree day real,dimension(nx,ny) :: PRECIP !< precipitation real,dimension(nx,ny) :: PRECIP0 !< initial precipitation (used in 'heminord') real,dimension(nx,ny) :: PHID !< flux de chaleur lie a la deformation et glissement basal real,dimension(nx,ny) :: chalgliss_maj !< chaleur de glissement seulement real,dimension(nx,ny) :: PWATER !< basal water pressure real,dimension(nx,ny) :: pgx,pgy !< hydro. potential gradient / x '>' and / y '^' real,dimension(nx,ny) :: phiWx,phiWy !< flux d'eau sous glaciaire / x '>' and / y '^' real,dimension(nx,ny) :: NEFFMX !< pression effective '>' real,dimension(nx,ny) :: NEFFMY !< pression effective '^' !afq for CONSEAU real(kind=8),dimension(nx,ny),target :: RUNOF_OC ! Continental runoff (grounded part) !afq for CONSEAU real(kind=8),dimension(nx,ny),target :: BMELT_OC ! Shelf runoff (floating part) real,dimension(nx,ny) :: TOBMX !< cisaillement basal '>' real,dimension(nx,ny) :: TOBMY !< cisaillement basal '^' real,dimension(nx,ny) :: SW !< for bedrock isostasy real,dimension(nx,ny),target :: S !< altitude of ice sheet surface real,dimension(nx,ny) :: S_sealev !< altitude of ice sheet surface for sea !< level calculation (present ice sheet) real,dimension(nx,ny) :: SLOPE !< slope 'o' real,dimension(nx,ny) :: SDX !< slope derivee / x '>' real,dimension(nx,ny) :: SDY !< slope derivee / y '^' real,dimension(nx,ny) :: SDXMY !< slope selon x moy selon y '^' remplace SDMX real,dimension(nx,ny) :: SDYMX !< slope selon y moy selon x '>' remplace SDMY real,dimension(nx,ny) :: SLOPE2mx !< = Sdx**2 + Sdymx**2 '>' real,dimension(nx,ny) :: SLOPE2my !< = Sdy**2 + Sdxmy**2 '^' real,dimension(nx,ny) :: S0 !< altitude actuelle de la surface real,dimension(nx,ny) :: slv !< niveau de flottaison (sealevel et lakes) real,dimension(nx,ny),target :: TJULY !< Ground air temperature July real,dimension(nx,ny),target :: TANN !< Ground air temperature annual real,dimension(nx,ny,12) :: Tmois !< Ground air temperature monthly real,dimension(nx,ny,12) :: Pmois !< Liquid precipitation monthly real,dimension(nx,ny) :: TSHELF !< temperature des shelfs pour viscosite real,dimension(nx,ny) :: TJ0 !< initial air temperature at sea level July ! real,dimension(nx,ny) :: TA0 !< initial air temperature at sea level annual real,dimension(nx,ny) :: TAUB !< basal shear stress (for output) real,dimension(nx,ny) :: TAUSHELF !< effective stress in ice shelves (vertical av.) real,dimension(nx,ny) :: TS !< surface ice temperature 'o' real,dimension(nx,ny) :: TB !< basal ice temperature 'o' real,dimension(nx,ny) :: TG !< degrees above melting point at the base real,dimension(nx,ny) :: TBDOT !< variation in time of basal temperature real,dimension(nx,ny) :: UZK !< vertical velocity at the ice surface (kinematic boundary) real,dimension(nx,ny) :: UXBAR !< vertically integrated velocity '>' real,dimension(nx,ny) :: UYBAR !< vertically integrated velocity '^' real,dimension(nx,ny) :: uxdef !< partie due a la deformation real,dimension(nx,ny) :: uydef !< partie due a la deformation real,dimension(nx,ny) :: uxflgz !< vitesse stream-shelf real,dimension(nx,ny) :: uyflgz !< vitesse stream-shelf real,dimension(nx,ny) :: UBX !< basal sliding '>' real,dimension(nx,ny) :: UBY !< basal sliding '^' real,dimension(nx,ny) :: UZSDOT !< variation in time of surface vertical velocity real,dimension(nx,ny) :: UX1 !< real,dimension(nx,ny) :: UY1 !< real,dimension(nx,ny) :: VBAR !< depth averaged velocity magnitude (for output) !!!!!!!real,dimension(nx,ny) :: VSDOT ! variation in time of surface velocity magnitude real,dimension(nx,ny) :: W0 !< enfoncement du socle a l'equilibre isostatique real,dimension(nx,ny) :: W1 !< enfoncement du socle courant real,dimension(nx,ny) :: XX !< work array real,dimension(nx,ny) :: XLONG !< longitude real,dimension(nx,ny) :: YLAT !< latitude real,dimension(nx,ny) :: xcc ! grille Xkm real,dimension(nx,ny) :: ycc ! grille Ykm ! real,dimension(nx,ny) :: ZS !< surface topography above sea level real,dimension(nx,ny) :: ETABAR !< real,dimension(nx,ny),target :: BSOC !< altitude (ou bathymetrie) du socle 'o' real,dimension(nx,ny) :: PVI !< viscosite ice shelf real,dimension(nx,ny) :: PVM !< viscosite ice shelf real,dimension(nx,ny) :: ramollo !< pour ramollir les ice shelves real,dimension(nx,ny) :: Abar !< coefficient de Glen integre real,dimension(nx,ny) :: OLDU !< pour cptr et dans diagnoshelf real,dimension(nx,ny) :: Uiter_centre !< pour iterations equation diagnostique real,dimension(nx,ny) :: tabtest !< tableau de travail ! nouveaux tableaux (aout 2006) pour dragging-sliding ! ces tableaux peuvent avoir des roles differents selon les modules de dragging ! et de sliding utilises. Ils servent a  faire passer des contraintes geographiques entre ! le main et les rounines de sliding-dragging. integer,dimension(nx,ny) :: mstream_mx !< masque stream selon x integer,dimension(nx,ny) :: mstream_my !< masque stream selon y integer,dimension(nx,ny) :: mstream !< masque stream sur les noeuds majeurs real,dimension(nx,ny) :: socle_cry !< courbure du socle, negatif -> vallees real,dimension(nx,ny) :: drag_mx !< coefficient pour tenir compte de variations real,dimension(nx,ny) :: drag_my !< geographiques eventuelles dans le basal drag integer,dimension(nx,ny) :: mslid_mx !< masque glissement selon x integer,dimension(nx,ny) :: mslid_my !< masque glissement selon y real,dimension(nx,ny) :: slid_mx !< coefficient pour tenir compte de variations real,dimension(nx,ny) :: slid_my !< geographiques eventuelles dans le glissement ! afq -- iLOVECLIM coupling -- water conservation real (kind = 8),target :: trendWAC ! the global trend in ice volume real (kind = 8),dimension(nx,ny),target :: smbWAC ! smb+ablbord real (kind = 8),dimension(nx,ny),target :: bmeltWAC ! bmelt real (kind = 8),dimension(nx,ny),target :: calvingWAC ! calving !REAL,dimension(-NL:NL,-NL:NL) :: WE ! enfoncement du socle autour d'une charge unitaire ! ********** common des tableaux a 3 dimensions ***** !real,dimension(:,:,:,:),allocatable :: BTT !< deformation parameter for flow law !real,dimension(:,:,:,:),allocatable :: SA ! effet temperature sur la deformation (loi n=3) !real,dimension(:,:,:,:),allocatable :: S2A ! effet integre sur l'epaisseur temperature sur la deformation (loi n=3) !real,dimension(:,:,:,:),allocatable :: SA_mx ! effet temperature sur la deformation (loi n=3) !real,dimension(:,:,:,:),allocatable :: S2A_mx ! effet integre sur l'epaisseur temperature sur la deformation (loi n=3) !real,dimension(:,:,:,:),allocatable :: SA_my ! effet temperature sur la deformation (loi n=3) !real,dimension(:,:,:,:),allocatable :: S2A_my ! effet integre sur l'epaisseur temperature sur la deformation (loi n=3) real,dimension(nx,ny,nz) :: SUX !< real,dimension(nx,ny,nz) :: SUY !< real,dimension(nx,ny,nz) :: TPMP !< pressure melting point temperature in ice sheet 'o' real,dimension(nx,ny,nz) :: UX !< ice velocity '>' real,dimension(nx,ny,nz) :: UY !< ice velocity '^' real,dimension(nx,ny,nz) :: UZR !< ice velocity and derivatives real,dimension(nx,ny,nz) :: ETA !< ! tableaux qui permettent de faire facilement des sorties debug via ncdf real,dimension(nx,ny) :: debug_2D real,dimension(nx,ny,220) :: debug_3D ! tableaux qui permettent de faire des sorties netcdf avec les variables qui ne sont pas globales ! real,dimension(nx,ny,199) :: netcdf_glob ! pas l'air utilise !real,dimension(NX,NY,NPL) :: XXX !< work array, for temperature and output real,dimension(nx,ny,nz+nzm) :: T !< temperature in ice and mantle 'o' !======================= common pour l'equilibrage en temperature !real,dimension(NX,NY) :: Uxbilan ! vitesse de bilan '>' !real,dimension(NX,NY) :: Uybilan ! vitesse de bilan '^' ! ===================== Booleens ======================================== logical :: SHELFY !< logical :: BOOST !< logical :: MARINE !< logical :: appel_new_flot !< pour appeler la routine new_flot logical,dimension(nx,ny) :: FLOT !< vrai si flottant (test d'archimede) 'o' logical,dimension(nx,ny) :: FLOTMX !< if flotting (one neighboord floats) '>' logical,dimension(nx,ny) :: FLOTMY !< if flotting (one neighboord floats) '^' logical,dimension(nx,ny) :: FRONT_RESC!< comme front (mais boolean) pour remplimat rescue logical,dimension(nx,ny) :: FBM !< logical,dimension(nx,ny) :: OKUMAT !< logical,dimension(nx,ny) :: OKVMAT !< logical,dimension(nx,ny) :: GRZONE !< logical,dimension(nx,ny) :: GZMX !< point stream ">" logical,dimension(nx,ny) :: GZMY !< point stream "^" logical,dimension(nx,ny) :: FLGZMX !< points stream ou shelf ou ile (equ. ellpt) ">" logical,dimension(nx,ny) :: FLGZMY !< points stream ou shelf ou ile (equ ellipt) "^" logical,dimension(nx,ny) :: ILEMX !< points ile ">" logical,dimension(nx,ny) :: ILEMY !< points ile "^" logical,dimension(nx,ny) :: cotemx !< points cotiers ">" logical,dimension(nx,ny) :: cotemy !< points cotiers "^" logical,dimension(nx,ny) :: fleuvemx !< actual grounded stream logical,dimension(nx,ny) :: fleuvemy !< actual grounded stream logical,dimension(nx,ny) :: isolx !< designe un point sans voisin sur ses faces x logical,dimension(nx,ny) :: isoly !< designe un point sans voisin sur ses faces y logical,dimension(nx,ny) :: new_flot_point !< pour signaler les points qui se mettent a flotter entre 2 pas de temps dtt logical,dimension(nx,ny) :: new_flotmx !< pour signaler les points qui deviennent flottantmx entre 2 dtt logical,dimension(nx,ny) :: new_flotmy !< pour signaler les points qui deviennent flottantmy entre 2 dtt logical,dimension(nx,ny) :: flot_marais !< afq -- vrai si flottant et coince entre points poses 'o' logical,dimension(nx,ny) :: iceberg !< point iceberg ! ===================== File id ========================================= integer :: num_param = 10 !< Id of param_list.dat integer :: num_coupe = 11 !< Id of coupe.ijz integer :: num_vitbil = 12 !< Id of vitbil integer :: num_newton = 15 !< Id of corrextion-newton.res integer :: num_file1 = 18 !< Id of integer :: num_file2 = 19 !< Id of integer :: num_forc = 20 !< Id of forcage integer :: num_dat = 21 !< Id of dat integer :: num_cptr = 30 !< Id of cptr integer :: num_debug = 33 !< Id of ritz debug integer :: num_ritz = 3535 !< Id of ritz integer :: num_templlib = 36 !< Id of ritz templlib integer :: num_rep_42 = 42 !< Id of reponse integer :: num_trace = 81 !< Id of trace-reboot integer :: num_file = 88 !< Id of integer :: num_ts_ritz = 89 integer :: num_kelvin = 90 !< Id of kelvin.res integer :: num_phil = 91 integer :: num_templin = 98 !< Id of templin.res integer :: num_sealevel = 110 integer :: num_mk_vitbil = 122 !< Id of masque_vitbil integer :: num_ic_vo = 171 !< vostok integer :: num_ic_by = 172 !< byrd integer :: num_ic_dm = 173 !< dml integer :: num_ic_dc = 174 !< dome C integer :: num_ic_df = 175 !< dome Fuji integer :: num_file3 = 993 integer :: num_file4 = 995 !< Id of integer :: num_coor = 2004 !< Id of coord-Ant-40km ! integer :: num_tracebug !< numero de l'unite itracebug ! Variables communes au main et aux subroutines du step logical :: base_froide logical :: base_temp real :: timemax end module MODULE3D_PHY