Changeset 5159 for LMDZ6/branches/Amaury_dev/libf/dyn3d
- Timestamp:
- Aug 2, 2024, 9:58:25 PM (5 months ago)
- Location:
- LMDZ6/branches/Amaury_dev/libf/dyn3d
- Files:
-
- 36 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/dyn3d/addfi.F90
r5136 r5159 1 1 ! $Id$ 2 2 3 SUBROUTINE addfi(pdt, leapf, forward, & 4 pucov, pvcov, pteta, pq, pps, & 5 pdufi, pdvfi, pdhfi, pdqfi, pdpfi) 3 SUBROUTINE addfi(pdt, leapf, forward, pucov, pvcov, pteta, pq, pps, pdufi, pdvfi, pdhfi, pdqfi, pdpfi) 6 4 7 5 USE infotrac, ONLY: nqtot … … 9 7 USE lmdz_ssum_scopy, ONLY: ssum 10 8 USE lmdz_comgeom 9 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 10 USE lmdz_paramet 11 11 12 IMPLICIT NONE 12 ! 13 13 14 !======================================================================= 14 ! 15 15 16 ! Addition of the physical tendencies 16 ! 17 17 18 ! Interface : 18 19 ! ----------- 19 ! 20 20 21 ! Input : 21 22 ! ------- … … 31 32 ! pdhfi(ip1jmp1) | tendencies 32 33 ! pdtsfi(ip1jmp1) | 33 ! 34 34 35 ! Output : 35 36 ! -------- … … 38 39 ! ph 39 40 ! pts 40 ! 41 ! 41 42 42 43 !======================================================================= 43 ! 44 !----------------------------------------------------------------------- 45 ! 46 ! 0. Declarations : 47 ! ------------------ 48 ! 49 INCLUDE "dimensions.h" 50 INCLUDE "paramet.h" 51 ! 44 ! ! 52 45 ! Arguments : 53 46 ! ----------- 54 ! 47 55 48 REAL, INTENT(IN) :: pdt ! time step for the integration (s) 56 ! 49 57 50 REAL, INTENT(INOUT) :: pvcov(ip1jm, llm) ! covariant meridional wind 58 51 REAL, INTENT(INOUT) :: pucov(ip1jmp1, llm) ! covariant zonal wind … … 66 59 REAL, INTENT(IN) :: pdhfi(ip1jmp1, llm) 67 60 REAL, INTENT(IN) :: pdpfi(ip1jmp1) 68 ! 61 69 62 LOGICAL, INTENT(IN) :: leapf, forward ! not used 70 ! 71 ! 63 64 72 65 ! Local variables : 73 66 ! ----------------- 74 ! 67 75 68 REAL :: xpn(iim), xps(iim), tpn, tps 76 69 INTEGER :: j, k, iq, ij 77 70 REAL, PARAMETER :: qtestw = 1.0e-15 78 71 REAL, PARAMETER :: qtestt = 1.0e-40 79 ! 72 80 73 !----------------------------------------------------------------------- 81 74 … … 113 106 ENDDO 114 107 115 ! 108 116 109 DO j = 1, ip1jmp1 117 110 pps(j) = pps(j) + pdpfi(j) * pdt … … 177 170 ENDDO 178 171 179 180 172 END SUBROUTINE addfi -
LMDZ6/branches/Amaury_dev/libf/dyn3d/advect.F90
r5136 r5159 9 9 USE lmdz_comgeom 10 10 11 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 12 USE lmdz_paramet 11 13 IMPLICIT NONE 12 14 !======================================================================= 13 ! 15 14 16 ! Auteurs: P. Le Van , Fr. Hourdin . 15 17 ! ------- 16 ! 18 17 19 ! Objet: 18 20 ! ------ 19 ! 21 20 22 ! ************************************************************* 21 23 ! .... calcul des termes d'advection vertic.pour u,v,teta,q ... … … 23 25 ! ces termes sont ajoutes a du,dv,dteta et dq . 24 26 ! Modif F.Forget 03/94 : on retire q de advect 25 ! 27 26 28 !======================================================================= 27 29 !----------------------------------------------------------------------- … … 29 31 ! ------------- 30 32 31 INCLUDE "dimensions.h" 32 INCLUDE "paramet.h" 33 34 33 35 34 36 ! Arguments: … … 97 99 !----------------------------------------------------------------------- 98 100 99 ! 101 100 102 DO l = 1, llmm1 101 103 -
LMDZ6/branches/Amaury_dev/libf/dyn3d/advtrac.f90
r5158 r5159 22 22 USE lmdz_groupe, ONLY: groupe 23 23 24 IMPLICIT NONE 25 26 INCLUDE "dimensions.h" 27 INCLUDE "paramet.h" 24 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 25 USE lmdz_paramet 26 IMPLICIT NONE 27 28 29 28 30 29 31 !--------------------------------------------------------------------------- -
LMDZ6/branches/Amaury_dev/libf/dyn3d/bilan_dyn.F90
r5158 r5159 16 16 USE lmdz_comgeom2 17 17 18 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 19 USE lmdz_paramet 18 20 IMPLICIT NONE 19 21 20 INCLUDE "dimensions.h" 21 INCLUDE "paramet.h" 22 23 22 24 23 25 !==================================================================== 24 ! 26 25 27 ! Sous-programme consacre à des diagnostics dynamiques de base 26 ! 27 ! 28 29 28 30 ! De facon generale, les moyennes des scalaires Q sont ponderees par 29 31 ! la masse. 30 ! 32 31 33 ! Les flux de masse sont eux simplement moyennes. 32 ! 34 33 35 !==================================================================== 34 36 … … 148 150 149 151 ! Variables locales 150 ! 152 151 153 INTEGER :: tau0 152 154 REAL :: zjulian … … 155 157 INTEGER :: ii, jj 156 158 INTEGER :: zan, dayref 157 ! 159 158 160 REAL :: rlong(jjm), rlatg(jjm) 159 161 … … 225 227 tau0, zjulian, dt_cum, thoriid, fileid) 226 228 227 ! 229 228 230 ! Appel a histvert pour la grille verticale 229 ! 231 230 232 CALL histvert(fileid, 'presnivs', 'Niveaux sigma', 'mb', & 231 233 llm, presnivs, zvertiid) 232 ! 234 233 235 ! Appels a histdef pour la definition des variables a sauvegarder 234 236 DO iQ = 1, nQ … … 325 327 ! Cumul 326 328 !===================================================================== 327 ! 329 328 330 IF(icum==0) THEN 329 331 ps_cum = 0. … … 456 458 ! calcul de la moyenne zonale du transport : 457 459 ! ------------------------------------------ 458 ! 460 459 461 ! -- 460 462 ! TOT : la circulation totale [ vq ] 461 ! 463 462 464 ! - - 463 465 ! MMC : mean meridional circulation [ v ] [ q ] 464 ! 466 465 467 ! ---- -- - - 466 468 ! TRS : transitoires [ v'q'] = [ vq ] - [ v q ] 467 ! 469 468 470 ! - * - * - - - - 469 471 ! STT : stationaires [ v q ] = [ v q ] - [ v ] [ q ] 470 ! 472 471 473 ! - - 472 474 ! on utilise aussi l'intermediaire TMP : [ v q ] 473 ! 475 474 476 ! la variable zfactv transforme un transport meridien cumule 475 477 ! en kg/s * unte-du-champ-transporte en m/s * unite-du-champ-transporte 476 ! 478 477 479 ! -------------------------------------------------------------- 478 480 -
LMDZ6/branches/Amaury_dev/libf/dyn3d/caladvtrac.F90
r5134 r5159 1 1 ! $Id$ 2 2 3 ! 4 ! 3 4 5 5 SUBROUTINE caladvtrac(q, pbaru, pbarv, & 6 6 p, masse, dq, teta, & 7 7 flxw, pk) 8 ! 8 9 9 USE infotrac, ONLY: nqtot 10 10 USE control_mod, ONLY: iapp_tracvl, planet_type … … 13 13 USE lmdz_ssum_scopy, ONLY: scopy 14 14 15 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 16 USE lmdz_paramet 15 17 IMPLICIT NONE 16 ! 18 17 19 ! Auteurs: F.Hourdin , P.Le Van, F.Forget, F.Codron 18 ! 20 19 21 ! F.Codron (10/99) : ajout humidite specifique pour eau vapeur 20 22 !======================================================================= 21 ! 23 22 24 ! Shema de Van Leer 23 ! 25 24 26 !======================================================================= 25 27 26 INCLUDE "dimensions.h" 27 INCLUDE "paramet.h" 28 29 28 30 29 31 ! Arguments: … … 36 38 37 39 ! .................................................................. 38 ! 40 39 41 ! .. dq n'est utilise et dimensionne que pour l'eau vapeur et liqu. 40 ! 42 41 43 ! .................................................................. 42 ! 44 43 45 ! Local: 44 46 ! ------ … … 49 51 50 52 !c 51 ! 53 52 54 ! Earth-specific stuff for the first 2 tracers (water) 53 55 IF (planet_type=="earth") THEN … … 73 75 IF (planet_type=="earth") THEN 74 76 ! Earth-specific treatment for the first 2 tracers (water) 75 ! 77 76 78 !c CALL minmaxq(q(1,1,1),1.e33,-1.e33,'Eau vapeur ') 77 79 !c CALL minmaxq(q(1,1,2),1.e33,-1.e33,'Eau liquide ') 78 80 79 81 !c .... Calcul de deltap qu'on stocke dans finmasse ... 80 ! 82 81 83 DO l = 1, llm 82 84 DO ij = 1, ip1jmp1 … … 91 93 CALL SCOPY (ip1jmp1 * llm, masse, 1, finmasse, 1) 92 94 CALL filtreg (finmasse, jjp1, llm, -2, 2, .TRUE., 1) 93 ! 95 94 96 ! ***** Calcul de dq pour l'eau , pour le passer a la physique ****** 95 97 ! ******************************************************************** 96 ! 98 97 99 dtvrtrac = iapp_tracvl * dtvr 98 ! 100 99 101 DO iq = 1, nqtot 100 102 DO l = 1, llm … … 105 107 ENDDO 106 108 ENDDO 107 ! 109 108 110 endif ! of if (planet_type.EQ."earth") 109 111 ELSE -
LMDZ6/branches/Amaury_dev/libf/dyn3d/caldyn.F90
r5136 r5159 8 8 USE lmdz_comgeom 9 9 10 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 11 USE lmdz_paramet 10 12 IMPLICIT NONE 11 13 … … 26 28 ! ---------------- 27 29 28 INCLUDE "dimensions.h" 29 INCLUDE "paramet.h" 30 31 30 32 31 33 ! Arguments: -
LMDZ6/branches/Amaury_dev/libf/dyn3d/check_isotopes.F90
r5134 r5159 4 4 ntiso, iH2O, nzone, tracers, isoName, itZonIso, getKey 5 5 6 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 6 7 IMPLICIT NONE 7 INCLUDE "dimensions.h" 8 8 9 REAL, INTENT(INOUT) :: q(ip1jmp1,llm,nqtot) 9 10 INTEGER, INTENT(IN) :: ip1jmp1 -
LMDZ6/branches/Amaury_dev/libf/dyn3d/conf_gcm.f90
r5134 r5159 20 20 tetagrot, tetatemp, coefdis, vert_prof_dissip 21 21 22 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 23 USE lmdz_paramet 22 24 IMPLICIT NONE 23 25 !----------------------------------------------------------------------- … … 27 29 28 30 ! tapedef : 29 ! etatinit : = TRUE , on ne compare pas les valeurs des para- 31 ! etatinit : = TRUE , on ne compare pas les valeurs des para- 30 32 ! -metres du zoom avec celles lues sur le fichier start . 31 33 … … 35 37 ! Declarations : 36 38 ! -------------- 37 INCLUDE "dimensions.h" 38 INCLUDE "paramet.h" 39 40 39 41 40 42 ! local: -
LMDZ6/branches/Amaury_dev/libf/dyn3d/covnat.F90
r5136 r5159 4 4 USE lmdz_comgeom 5 5 6 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 7 USE lmdz_paramet 6 8 IMPLICIT NONE 7 9 8 10 !======================================================================= 9 ! 11 10 12 ! Auteur: F Hourdin Phu LeVan 11 13 ! ------- 12 ! 14 13 15 ! Objet: 14 16 ! ------ 15 ! 17 16 18 ! ********************************************************************* 17 19 ! calcul des compos. naturelles a partir des comp.covariantes 18 20 ! ******************************************************************** 19 ! 21 20 22 !======================================================================= 21 23 22 INCLUDE "dimensions.h" 23 INCLUDE "paramet.h" 24 25 24 26 25 27 INTEGER :: klevel -
LMDZ6/branches/Amaury_dev/libf/dyn3d/dissip.F90
r5136 r5159 8 8 USE lmdz_comgeom 9 9 10 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 11 USE lmdz_paramet 10 12 IMPLICIT NONE 11 13 … … 15 17 16 18 !======================================================================= 17 ! 19 18 20 ! Auteur: P. Le Van 19 21 ! ------- 20 ! 22 21 23 ! Objet: 22 24 ! ------ 23 ! 25 24 26 ! Dissipation horizontale 25 ! 27 26 28 !======================================================================= 27 29 !----------------------------------------------------------------------- … … 29 31 ! ------------- 30 32 31 INCLUDE "dimensions.h" 32 INCLUDE "paramet.h" 33 34 33 35 34 36 ! Arguments: -
LMDZ6/branches/Amaury_dev/libf/dyn3d/dteta1.F90
r5158 r5159 3 3 SUBROUTINE dteta1(teta, pbaru, pbarv, dteta) 4 4 USE lmdz_filtreg, ONLY: filtreg 5 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 6 USE lmdz_paramet 5 7 IMPLICIT NONE 6 8 7 9 !======================================================================= 8 ! 10 9 11 ! Auteur: P. Le Van 10 12 ! ------- 11 13 ! Modif F.Forget 03/94 (on retire q et dq pour construire dteta1) 12 ! 14 13 15 ! ******************************************************************** 14 16 ! ... calcul du terme de convergence horizontale du flux d'enthalpie … … 17 19 ! .. teta,pbaru et pbarv sont des arguments d'entree pour le s-pg .... 18 20 ! dteta sont des arguments de sortie pour le s-pg .... 19 ! 21 20 22 !======================================================================= 21 23 22 INCLUDE "dimensions.h" 23 INCLUDE "paramet.h" 24 25 24 26 25 27 REAL :: teta(ip1jmp1, llm), pbaru(ip1jmp1, llm), pbarv(ip1jm, llm) -
LMDZ6/branches/Amaury_dev/libf/dyn3d/dudv1.F90
r5134 r5159 2 2 3 3 SUBROUTINE dudv1(vorpot, pbaru, pbarv, du, dv) 4 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 5 USE lmdz_paramet 4 6 IMPLICIT NONE 5 ! 7 6 8 !----------------------------------------------------------------------- 7 ! 9 8 10 ! Auteur: P. Le Van 9 11 ! ------- 10 ! 12 11 13 ! Objet: 12 14 ! ------ … … 15 17 ! vorpot, pbaru et pbarv sont des arguments d'entree pour le s-pg .. 16 18 ! du et dv sont des arguments de sortie pour le s-pg .. 17 ! 19 18 20 !----------------------------------------------------------------------- 19 21 20 INCLUDE "dimensions.h" 21 INCLUDE "paramet.h" 22 23 22 24 23 25 REAL :: vorpot(ip1jm, llm), pbaru(ip1jmp1, llm), & 24 26 pbarv(ip1jm, llm), du(ip1jmp1, llm), dv(ip1jm, llm) 25 27 INTEGER :: l, ij 26 ! 27 ! 28 29 28 30 DO l = 1, llm 29 ! 31 30 32 DO ij = iip2, ip1jm - 1 31 33 du(ij, l) = 0.125 * (vorpot(ij - iip1, l) + vorpot(ij, l)) * & … … 33 35 pbarv(ij, l) + pbarv(ij + 1, l)) 34 36 END DO 35 ! 37 36 38 DO ij = 1, ip1jm - 1 37 39 dv(ij + 1, l) = - 0.125 * (vorpot(ij, l) + vorpot(ij + 1, l)) * & … … 39 41 pbaru(ij + iip1, l) + pbaru(ij + iip2, l)) 40 42 END DO 41 ! 43 42 44 ! .... correction pour dv( 1,j,l ) ..... 43 45 ! .... dv(1,j,l)= dv(iip1,j,l) .... 44 ! 46 45 47 !DIR$ IVDEP 46 48 DO ij = 1, ip1jm, iip1 47 49 dv(ij, l) = dv(ij + iim, l) 48 50 END DO 49 ! 51 50 52 END DO 51 53 -
LMDZ6/branches/Amaury_dev/libf/dyn3d/dudv2.F90
r5134 r5159 3 3 SUBROUTINE dudv2(teta, pkf, bern, du, dv) 4 4 5 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 6 USE lmdz_paramet 5 7 IMPLICIT NONE 6 ! 8 7 9 !======================================================================= 8 ! 10 9 11 ! Auteur: P. Le Van 10 12 ! ------- 11 ! 13 12 14 ! Objet: 13 15 ! ------ 14 ! 16 15 17 ! ***************************************************************** 16 18 ! ..... calcul du terme de pression (gradient de p/densite ) et … … 18 20 ! ***************************************************************** 19 21 ! Ces termes sont ajoutes a d(ucov)/dt et a d(vcov)/dt .. 20 ! 21 ! 22 23 22 24 ! teta , pkf, bern sont des arguments d'entree pour le s-pg .... 23 25 ! du et dv sont des arguments de sortie pour le s-pg .... 24 ! 26 25 27 !======================================================================= 26 28 ! 27 INCLUDE "dimensions.h" 28 INCLUDE "paramet.h" 29 30 29 31 30 32 REAL :: teta(ip1jmp1, llm), pkf(ip1jmp1, llm), bern(ip1jmp1, llm), & 31 33 du(ip1jmp1, llm), dv(ip1jm, llm) 32 34 INTEGER :: l, ij 33 ! 34 ! 35 36 35 37 DO l = 1, llm 36 ! 38 37 39 DO ij = iip2, ip1jm - 1 38 40 du(ij, l) = du(ij, l) + 0.5 * (teta(ij, l) + teta(ij + 1, l)) * & 39 41 (pkf(ij, l) - pkf(ij + 1, l)) + bern(ij, l) - bern(ij + 1, l) 40 42 END DO 41 ! 42 ! 43 44 43 45 ! ..... correction pour du(iip1,j,l), j=2,jjm ...... 44 46 ! ... du(iip1,j,l) = du(1,j,l) ... 45 ! 47 46 48 !DIR$ IVDEP 47 49 DO ij = iip1 + iip1, ip1jm, iip1 48 50 du(ij, l) = du(ij - iim, l) 49 51 END DO 50 ! 51 ! 52 53 52 54 DO ij = 1, ip1jm 53 55 dv(ij, l) = dv(ij, l) + 0.5 * (teta(ij, l) + teta(ij + iip1, l)) * & … … 55 57 + bern(ij + iip1, l) - bern(ij, l) 56 58 END DO 57 ! 59 58 60 END DO 59 61 ! -
LMDZ6/branches/Amaury_dev/libf/dyn3d/dynetat0.F90
r5136 r5159 24 24 USE lmdz_comgeom2 25 25 26 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 27 USE lmdz_paramet 26 28 IMPLICIT NONE 27 INCLUDE "dimensions.h" 28 INCLUDE "paramet.h" 29 30 29 31 !=============================================================================== 30 32 ! Arguments: -
LMDZ6/branches/Amaury_dev/libf/dyn3d/dynredem.F90
r5136 r5159 22 22 USE lmdz_comgeom2 23 23 24 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 25 USE lmdz_paramet 24 26 IMPLICIT NONE 25 INCLUDE "dimensions.h" 26 INCLUDE "paramet.h" 27 28 27 29 !=============================================================================== 28 30 ! Arguments: … … 169 171 USE lmdz_comgeom 170 172 173 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 174 USE lmdz_paramet 171 175 IMPLICIT NONE 172 INCLUDE "dimensions.h" 173 INCLUDE "paramet.h" 176 177 174 178 !=============================================================================== 175 179 ! Arguments: -
LMDZ6/branches/Amaury_dev/libf/dyn3d/dynredem_mod.F90
r5134 r5159 4 4 nf90_inq_varid, nf90_get_var, nf90_def_var 5 5 USE lmdz_cppkeys_wrapper, ONLY: nf90_format 6 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 7 USE lmdz_paramet 6 8 IMPLICIT NONE; PRIVATE 7 9 PUBLIC :: dynredem_write_u, dynredem_write_v, dynredem_read_u, err 8 10 PUBLIC :: cre_var, put_var1, put_var2, fil, modname, msg 9 INCLUDE "dimensions.h" 10 INCLUDE "paramet.h" 11 12 11 13 CHARACTER(LEN = 256), SAVE :: fil, modname 12 14 INTEGER, SAVE :: nvarid -
LMDZ6/branches/Amaury_dev/libf/dyn3d/fluxstokenc.F90
r5158 r5159 16 16 !cc .. Modif. P. Le Van ( 20/12/97 ) ... 17 17 18 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 19 USE lmdz_paramet 18 20 IMPLICIT NONE 19 21 20 INCLUDE "dimensions.h" 21 INCLUDE "paramet.h" 22 23 22 24 23 25 REAL :: time_step, t_wrt, t_ops -
LMDZ6/branches/Amaury_dev/libf/dyn3d/friction.F90
r5158 r5159 11 11 USE lmdz_comgeom2 12 12 13 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 14 USE lmdz_paramet 13 15 IMPLICIT NONE 14 16 … … 25 27 !======================================================================= 26 28 27 INCLUDE "dimensions.h" 28 INCLUDE "paramet.h" 29 30 29 31 30 32 ! arguments: -
LMDZ6/branches/Amaury_dev/libf/dyn3d/gcm.F90
r5137 r5159 33 33 USE lmdz_tracstoke 34 34 35 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 36 USE lmdz_paramet 35 37 IMPLICIT NONE 36 38 37 39 ! ...... Version du 10/01/98 .......... 38 40 39 ! avec coordonnees verticales hybrides 41 ! avec coordonnees verticales hybrides 40 42 ! avec nouveaux operat. dissipation * ( gradiv2,divgrad2,nxgraro2 ) 41 43 … … 65 67 ! ------------- 66 68 67 INCLUDE "dimensions.h" 68 INCLUDE "paramet.h" 69 70 69 71 70 72 REAL zdtvr -
LMDZ6/branches/Amaury_dev/libf/dyn3d/groupe.F90
r5158 r5159 2 2 3 3 MODULE lmdz_groupe 4 USE lmdz_paramet 4 5 IMPLICIT NONE; PRIVATE 5 6 PUBLIC groupe … … 13 14 USE lmdz_comgeom2 14 15 16 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 15 17 IMPLICIT NONE 16 18 … … 18 20 ! poles en "regroupant" les mailles 2 par 2 puis 4 par 4 etc. au fur 19 21 ! et a mesure qu'on se rapproche du pole. 20 ! 22 21 23 ! en entree: pbaru et pbarv 22 ! 24 23 25 ! en sortie: pbarum,pbarvm et wm. 24 ! 26 25 27 ! remarque, le wm est recalcule a partir des pbaru pbarv et on n'a donc 26 28 ! pas besoin de w en entree. 27 29 28 INCLUDE "dimensions.h" 29 INCLUDE "paramet.h" 30 31 30 32 31 33 ! integer ngroup -
LMDZ6/branches/Amaury_dev/libf/dyn3d/groupeun.F90
r5158 r5159 6 6 USE lmdz_comgeom2 7 7 8 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 9 USE lmdz_paramet 8 10 IMPLICIT NONE 9 11 10 INCLUDE "dimensions.h" 11 INCLUDE "paramet.h" 12 13 12 14 13 15 INTEGER :: jjmax, llmax … … 133 135 USE lmdz_comgeom2 134 136 137 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 138 USE lmdz_paramet 135 139 IMPLICIT NONE 136 140 137 INCLUDE "dimensions.h" 138 INCLUDE "paramet.h" 141 142 139 143 140 144 ! INTEGER ngroup -
LMDZ6/branches/Amaury_dev/libf/dyn3d/guide_mod.F90
r5158 r5159 77 77 78 78 79 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 80 USE lmdz_paramet 79 81 IMPLICIT NONE 80 82 81 INCLUDE "dimensions.h" 82 INCLUDE "paramet.h" 83 84 83 85 84 86 INTEGER :: error, ncidpl, rid, rcod … … 359 361 360 362 363 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 364 USE lmdz_paramet 361 365 IMPLICIT NONE 362 366 363 INCLUDE "dimensions.h" 364 INCLUDE "paramet.h" 367 368 365 369 366 370 … … 610 614 USE lmdz_comgeom 611 615 616 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 617 USE lmdz_paramet 612 618 IMPLICIT NONE 613 619 614 INCLUDE "dimensions.h" 615 INCLUDE "paramet.h" 620 621 616 622 617 623 ! input/output variables … … 678 684 USE lmdz_comgeom2 679 685 686 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 687 USE lmdz_paramet 680 688 IMPLICIT NONE 681 689 682 INCLUDE "dimensions.h" 683 INCLUDE "paramet.h" 690 691 684 692 685 693 REAL, DIMENSION (iip1, jjp1), INTENT(IN) :: psi ! Psol gcm … … 928 936 USE lmdz_comgeom2 929 937 938 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 939 USE lmdz_paramet 930 940 IMPLICIT NONE 931 941 932 INCLUDE "dimensions.h" 933 INCLUDE "paramet.h" 942 943 934 944 935 945 ! input arguments : … … 1093 1103 !======================================================================= 1094 1104 SUBROUTINE guide_read(timestep) 1105 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 1106 USE lmdz_paramet 1095 1107 IMPLICIT NONE 1096 1108 1097 INCLUDE "dimensions.h" 1098 INCLUDE "paramet.h" 1109 1110 1099 1111 1100 1112 INTEGER, INTENT(IN) :: timestep … … 1389 1401 !======================================================================= 1390 1402 SUBROUTINE guide_read2D(timestep) 1403 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 1404 USE lmdz_paramet 1391 1405 IMPLICIT NONE 1392 1406 1393 INCLUDE "dimensions.h" 1394 INCLUDE "paramet.h" 1407 1408 1395 1409 1396 1410 INTEGER, INTENT(IN) :: timestep … … 1653 1667 USE lmdz_comgeom2 1654 1668 1669 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 1670 USE lmdz_paramet 1655 1671 IMPLICIT NONE 1656 1672 1657 INCLUDE "dimensions.h" 1658 INCLUDE "paramet.h" 1673 1674 1659 1675 1660 1676 ! Variables entree -
LMDZ6/branches/Amaury_dev/libf/dyn3d/iniacademic.F90
r5158 r5159 26 26 ! of the American Meteorological Society, 75, 1825. 27 27 28 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 29 USE lmdz_paramet 28 30 IMPLICIT NONE 29 31 … … 31 33 ! --------------- 32 34 33 INCLUDE "dimensions.h" 34 INCLUDE "paramet.h" 35 36 35 37 36 38 ! Arguments: -
LMDZ6/branches/Amaury_dev/libf/dyn3d/iniinterp_horiz.F90
r5158 r5159 1 ! 1 2 2 ! $Header$ 3 ! 3 4 4 SUBROUTINE iniinterp_horiz(imo, jmo, imn, jmn, kllm, & 5 5 rlonuo, rlatvo, rlonun, rlatvn, & … … 14 14 ! dans une autre grille LMDZ en conservant la quantite 15 15 ! totale pour les variables intensives (/m2) : ex : Pression au sol 16 ! 16 17 17 ! (Pour chaque case autour d'un point scalaire de la nouvelle 18 18 ! grille, on calcule la surface (en m2)en intersection avec chaque 19 19 ! case de l'ancienne grille , pour la future interpolation) 20 ! 20 21 21 ! on calcule aussi l' aire dans la nouvelle grille 22 ! 23 ! 22 23 24 24 ! Auteur: F.Forget 01/1995 25 25 ! ------- 26 ! 26 27 27 ! --------------------------------------------------------- 28 28 ! Declarations: 29 29 ! ============== 30 ! 30 31 31 ! ARGUMENTS 32 32 ! """"""""" … … 63 63 ! On repere les frontieres des cases : 64 64 ! =================================== 65 ! 65 66 66 ! Attention, on ruse avec des latitudes = 90 deg au pole. 67 67 -
LMDZ6/branches/Amaury_dev/libf/dyn3d/integrd.F90
r5136 r5159 15 15 USE lmdz_comgeom 16 16 17 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 18 USE lmdz_paramet 17 19 IMPLICIT NONE 18 20 19 21 20 22 !======================================================================= 21 ! 23 22 24 ! Auteur: P. Le Van 23 25 ! ------- 24 ! 26 25 27 ! objet: 26 28 ! ------ 27 ! 29 28 30 ! Incrementation des tendances dynamiques 29 ! 31 30 32 !======================================================================= 31 33 !----------------------------------------------------------------------- … … 33 35 ! ------------- 34 36 35 INCLUDE "dimensions.h" 36 INCLUDE "paramet.h" 37 38 37 39 38 40 ! Arguments: … … 94 96 ps (ij) = psm1(ij) + dt * dp(ij) 95 97 ENDDO 96 ! 98 97 99 DO ij = 1, ip1jmp1 98 100 IF(ps(ij)<0.) THEN … … 107 109 ENDIF 108 110 ENDDO 109 ! 111 110 112 DO ij = 1, iim 111 113 tppn(ij) = aire(ij) * ps(ij) … … 118 120 ps(ij + ip1jm) = tps 119 121 ENDDO 120 ! 122 121 123 ! ... Calcul de la nouvelle masse d'air au dernier temps integre t+1 ... 122 ! 124 123 125 CALL pression (ip1jmp1, ap, bp, ps, p) 124 126 CALL massdair (p, masse) … … 151 153 152 154 ! .... Calcul de la valeur moyenne, unique aux poles pour teta ...... 153 ! 154 ! 155 156 155 157 DO ij = 1, iim 156 158 tppn(ij) = aire(ij) * teta(ij, l) … … 175 177 176 178 177 ! 179 178 180 ! ....... integration de q ...... 179 ! 181 180 182 !$$$ IF( iadv(1).NE.3.AND.iadv(2).NE.3 ) THEN 181 183 !$$$c … … 212 214 CALL qminimum(q, nq, deltap) 213 215 214 ! 216 215 217 ! ..... Calcul de la valeur moyenne, unique aux poles pour q ..... 216 218 ! … … 238 240 239 241 ENDIF ! of if (planet_type.EQ."earth") 240 ! 241 ! 242 243 242 244 ! ..... FIN de l'integration de q ....... 243 245 -
LMDZ6/branches/Amaury_dev/libf/dyn3d/interp_horiz.F90
r5158 r5159 1 ! 1 2 2 ! $Id$ 3 ! 3 4 4 SUBROUTINE interp_horiz(varo, varn, imo, jmo, imn, jmn, lm, & 5 5 rlonuo, rlatvo, rlonun, rlatvn) … … 10 10 ! dans une autre grille LMDZ en conservant la quantite 11 11 ! totale pour les variables intensives (/m2) : ex : Pression au sol 12 ! 12 13 13 ! Francois Forget (01/1995) 14 14 !=========================================================== … … 18 18 ! Declarations: 19 19 ! ============== 20 ! 20 21 21 ! ARGUMENTS 22 22 ! """"""""" … … 69 69 ! boucle sur toute les ktotal intersections entre les cases 70 70 ! de l'ancienne et la nouvelle grille 71 ! 71 72 72 PRINT *, 'ktotal 1 = ', ktotal 73 73 -
LMDZ6/branches/Amaury_dev/libf/dyn3d/leapfrog.F90
r5158 r5159 1 1 ! $Id$ 2 2 3 ! 4 ! 3 4 5 5 SUBROUTINE leapfrog(ucov, vcov, teta, ps, masse, phis, q, time_0) 6 6 … … 33 33 USE lmdz_comgeom 34 34 35 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 36 USE lmdz_paramet 35 37 IMPLICIT NONE 36 38 … … 41 43 42 44 !======================================================================= 43 ! 45 44 46 ! Auteur: P. Le Van /L. Fairhead/F.Hourdin 45 47 ! ------- 46 ! 48 47 49 ! Objet: 48 50 ! ------ 49 ! 51 50 52 ! GCM LMD nouvelle grille 51 ! 53 52 54 !======================================================================= 53 ! 55 54 56 ! ... Dans inigeom , nouveaux calculs pour les elongations cu , cv 55 57 ! et possibilite d'appeler une fonction f(y) a derivee tangente … … 58 60 ! ... Possibilite de choisir le shema pour l'advection de 59 61 ! q , en modifiant iadv dans traceur.def (10/02) . 60 ! 62 61 63 ! Pour Van-Leer + Vapeur d'eau saturee, iadv(1)=4. (F.Codron,10/99) 62 64 ! Pour Van-Leer iadv=10 63 ! 65 64 66 !----------------------------------------------------------------------- 65 67 ! Declarations: 66 68 ! ------------- 67 69 68 INCLUDE "dimensions.h" 69 INCLUDE "paramet.h" 70 71 70 72 71 73 REAL, INTENT(IN) :: time_0 ! not used … … 113 115 114 116 REAL :: tppn(iim), tpps(iim), tpn, tps 115 ! 117 116 118 INTEGER :: itau, itaufinp1, iav 117 119 ! INTEGER iday ! jour julien … … 242 244 243 245 244 ! 246 245 247 ! IF( MOD( itau, 10* day_step ).EQ.0 ) THEN 246 248 ! CALL test_period ( ucov,vcov,teta,q,p,phis ) … … 286 288 ! gestion des appels de la physique et des dissipations: 287 289 ! ------------------------------------------------------ 288 ! 290 289 291 ! ... P.Le Van ( 6/02/95 ) .... 290 292 … … 351 353 352 354 ENDIF ! of IF (offline) 353 ! 355 354 356 ENDIF ! of IF( forward .OR. leapf ) 355 357 … … 370 372 371 373 ! .P.Le Van (26/04/94 ajout de finvpold dans l'appel d'integrd) 372 ! 374 373 375 !----------------------------------------------------------------------- 374 376 ! calcul des tendances physiques: 375 377 ! ------------------------------- 376 378 ! ######## P.Le Van ( Modif le 6/02/95 ) ########### 377 ! 379 378 380 IF(purmats) THEN 379 381 IF(itau==itaufin.AND..NOT.forward) lafin = .TRUE. … … 381 383 IF(itau + 1 == itaufin) lafin = .TRUE. 382 384 ENDIF 383 ! 384 ! 385 386 385 387 IF(apphys) THEN 386 ! 388 387 389 ! ....... Ajout P.Le Van ( 17/04/96 ) ........... 388 390 ! … … 463 465 ENDIF 464 466 465 ! 467 466 468 ! Diagnostique de conservation de l'energie : difference 467 469 IF (ip_ebil_dyn>=1) THEN … … 753 755 ! iday = day_ini+itau/day_step 754 756 ! time = REAL(itau-(iday-day_ini)*day_step)/day_step+time_0 755 ! 757 756 758 ! IF(time.GT.1.) THEN 757 759 ! time = time-1. -
LMDZ6/branches/Amaury_dev/libf/dyn3d/lmdz_paramet.f90
r5158 r5159 1 MODULE lmdz_paramet 2 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 1 3 2 ! $Header$ 4 IMPLICIT NONE; PRIVATE 5 PUBLIC iip1, iip2, iip3, jjp1, llmp1, llmp2, llmm1, kftd, ip1jm, ip1jmp1, & 6 ip1jmi1, ijp1llm, ijmllm, mvar, jcfil, jcfllm 3 7 8 INTEGER iip1, iip2, iip3, jjp1, llmp1, llmp2, llmm1 9 INTEGER kftd, ip1jm, ip1jmp1, ip1jmi1, ijp1llm 10 INTEGER ijmllm, mvar 11 INTEGER jcfil, jcfllm 4 12 5 ! ATTENTION!!!!: ce fichier INCLUDE est compatible format fixe/format libre 6 ! veillez n'utiliser que des ! pour les commentaires 7 ! et bien positionner les & des lignes de continuation 8 ! (les placer en colonne 6 et en colonne 73) 13 PARAMETER(iip1 = iim + 1, iip2 = iim + 2, iip3 = iim + 3, jjp1 = jjm + 1 - 1 / jjm) 14 PARAMETER(llmp1 = llm + 1, llmp2 = llm + 2, llmm1 = llm - 1) 15 PARAMETER(kftd = iim / 2 - ndm) 16 PARAMETER(ip1jm = iip1 * jjm, ip1jmp1 = iip1 * jjp1) 17 PARAMETER(ip1jmi1 = ip1jm - iip1) 18 PARAMETER(ijp1llm = ip1jmp1 * llm, ijmllm = ip1jm * llm) 19 PARAMETER(mvar = ip1jmp1 * (2 * llm + 1) + ijmllm) 20 PARAMETER(jcfil = jjm / 2 + 5, jcfllm = jcfil * llm) 9 21 10 11 !----------------------------------------------------------------------- 12 ! INCLUDE 'paramet.h' 13 14 INTEGER iip1,iip2,iip3,jjp1,llmp1,llmp2,llmm1 15 INTEGER kftd,ip1jm,ip1jmp1,ip1jmi1,ijp1llm 16 INTEGER ijmllm,mvar 17 INTEGER jcfil,jcfllm 18 19 PARAMETER( iip1= iim+1,iip2=iim+2,iip3=iim+3 & 20 ,jjp1=jjm+1-1/jjm) 21 PARAMETER( llmp1 = llm+1, llmp2 = llm+2, llmm1 = llm-1 ) 22 PARAMETER( kftd = iim/2 -ndm ) 23 PARAMETER( ip1jm = iip1*jjm, ip1jmp1= iip1*jjp1 ) 24 PARAMETER( ip1jmi1= ip1jm - iip1 ) 25 PARAMETER( ijp1llm= ip1jmp1 * llm, ijmllm= ip1jm * llm ) 26 PARAMETER( mvar= ip1jmp1*( 2*llm+1) + ijmllm ) 27 PARAMETER( jcfil=jjm/2+5, jcfllm=jcfil*llm ) 28 29 !----------------------------------------------------------------------- 22 END MODULE lmdz_paramet -
LMDZ6/branches/Amaury_dev/libf/dyn3d/qminimum.F90
r5158 r5159 8 8 USE lmdz_ssum_scopy, ONLY: ssum 9 9 10 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 11 USE lmdz_paramet 10 12 IMPLICIT NONE 11 ! 13 12 14 ! -- Objet : Traiter les valeurs trop petites (meme negatives) 13 15 ! pour l'eau vapeur et l'eau liquide 14 16 ! 15 INCLUDE "dimensions.h" 16 INCLUDE "paramet.h" 17 ! 17 18 19 18 20 INTEGER :: nqtot 19 21 REAL :: q(ip1jmp1, llm, nqtot), deltap(ip1jmp1, llm) 20 ! 22 21 23 LOGICAL, SAVE :: first = .TRUE. 22 24 INTEGER, SAVE :: iq_vap, iq_liq ! indices pour l'eau vapeur/liquide 23 25 REAL, PARAMETER :: seuil_vap = 1.0e-10 ! seuil pour l'eau vapeur 24 26 REAL, PARAMETER :: seuil_liq = 1.0e-11 ! seuil pour l'eau liquide 25 ! 27 26 28 ! NB. ....( Il est souhaitable mais non obligatoire que les valeurs des 27 29 ! parametres seuil_vap, seuil_liq soient pareilles a celles 28 30 ! qui sont utilisees dans la routine ADDFI ) 29 31 ! ................................................................. 30 ! 32 31 33 !DC iq_val and iq_liq are usable for q only, NOT for q_follow 32 34 ! and zx_defau_diag (crash if iq_val/liq==3) => vapor/liquid … … 37 39 REAL :: zx_defau_diag(ip1jmp1, llm, 2) 38 40 REAL :: q_follow(ip1jmp1, llm, 2) 39 ! 41 40 42 INTEGER :: imprim 41 43 SAVE imprim … … 51 53 first = .FALSE. 52 54 END IF 53 ! 55 54 56 ! Quand l'eau liquide est trop petite (ou negative), on prend 55 57 ! l'eau vapeur de la meme couche et la convertit en eau liquide … … 73 75 ENDDO 74 76 ENDDO 75 ! 77 76 78 ! Quand l'eau vapeur est trop faible (ou negative), on complete 77 79 ! le defaut en prennant de l'eau vapeur de la couche au-dessous. 78 ! 80 79 81 DO k = llm, 2, -1 80 82 !cc zx_abc = dpres(k) / dpres(k-1) … … 92 94 ENDDO 93 95 94 ! 96 95 97 ! Quand il s'agit de la premiere couche au-dessus du sol, on 96 98 ! doit imprimer un message d'avertissement (saturation possible). 97 ! 99 98 100 DO i = 1, ip1jmp1 99 101 zx_pump(i) = AMAX1(0.0, seuil_vap - q(i, 1, iq_vap)) -
LMDZ6/branches/Amaury_dev/libf/dyn3d/replay3d.F90
r5136 r5159 25 25 USE lmdz_comgeom2 26 26 27 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 28 USE lmdz_paramet 27 29 IMPLICIT NONE 28 30 … … 57 59 ! ------------- 58 60 59 INCLUDE "dimensions.h" 60 INCLUDE "paramet.h" 61 62 61 63 62 64 REAL zdtvr -
LMDZ6/branches/Amaury_dev/libf/dyn3d/sw_case_williamson91_6.F90
r5158 r5159 4 4 5 5 !======================================================================= 6 ! 6 7 7 ! Author: Thomas Dubos original: 26/01/2010 8 8 ! ------- 9 ! 9 10 10 ! Subject: 11 11 ! ------ 12 12 ! Realise le cas-test 6 de Williamson et al. (1991) : onde de Rossby-Haurwitz 13 ! 13 14 14 ! Method: 15 15 ! -------- 16 ! 16 17 17 ! Interface: 18 18 ! ---------- 19 ! 19 20 20 ! Input: 21 21 ! ------ 22 ! 22 23 23 ! Output: 24 24 ! ------- 25 ! 25 26 26 !======================================================================= 27 27 USE comconst_mod, ONLY: cpp, omeg, rad … … 30 30 USE lmdz_comgeom 31 31 32 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 33 USE lmdz_paramet 32 34 IMPLICIT NONE 33 35 !----------------------------------------------------------------------- … … 35 37 ! --------------- 36 38 37 INCLUDE "dimensions.h" 38 INCLUDE "paramet.h" 39 40 39 41 40 42 ! Arguments: -
LMDZ6/branches/Amaury_dev/libf/dyn3d/tetaleveli1j.F90
r5158 r5159 6 6 7 7 ! FH 2008/05/09 On elimine toutes les clefs physiques dans la dynamique 8 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 9 USE lmdz_paramet 8 10 IMPLICIT NONE 9 11 10 INCLUDE "dimensions.h" 12 11 13 12 14 !================================================================ 13 ! 15 14 16 ! Interpoler des champs 3-D u, v et g du modele a un niveau de 15 17 ! pression donnee (pres) 16 ! 18 17 19 ! INPUT: ilon ----- nombre de points 18 20 ! ilev ----- nombre de couches … … 22 24 ! Qgcm ----- champ GCM 23 25 ! Qpres ---- champ interpolle au niveau pres 24 ! 26 25 27 !================================================================ 26 ! 28 27 29 ! arguments : 28 30 ! ----------- … … 43 45 ! REAL ptop, pbot, aist(klon), aisb(klon) 44 46 ! 45 INCLUDE "paramet.h" 46 ! 47 48 47 49 INTEGER :: lt(ip1jm), lb(ip1jm) 48 50 REAL :: ptop, pbot, aist(ip1jm), aisb(ip1jm) … … 51 53 52 54 INTEGER :: i, k 53 ! 55 54 56 ! PRINT*,'tetalevel pres=',pres 55 57 !===================================================================== … … 60 62 61 63 ! Chercher les 2 couches les plus proches du niveau a obtenir 62 ! 64 63 65 ! Eventuellement, faire l'extrapolation a partir des deux couches 64 66 ! les plus basses ou les deux couches les plus hautes: … … 87 89 END DO 88 90 END DO 89 ! 91 90 92 ! Interpolation lineaire: 91 ! 93 92 94 DO i = 1, ilon 93 95 ! interpolation en logarithme de pression: 94 ! 96 95 97 ! ... Modif . P. Le Van ( 20/01/98) .... 96 98 ! Modif Frédéric Hourdin (3/01/02) … … 98 100 IF(pgcm(i, lb(i))==0.OR. & 99 101 pgcm(i, lt(i))==0.) THEN 100 ! 102 101 103 PRINT*, 'i,lb,lt,2pgcm,pres', i, lb(i), & 102 104 lt(i), pgcm(i, lb(i)), pgcm(i, lt(i)), pres 103 ! 105 104 106 ENDIF 105 ! 107 106 108 aist(i) = LOG(pgcm(i, lb(i)) / pres) & 107 109 / LOG(pgcm(i, lb(i)) / pgcm(i, lt(i))) … … 121 123 !IM $ Qgcm(i,lt(i)),aist(i),Qpres(i) 122 124 enddo 123 ! 125 124 126 ! Je mets les vents a zero quand je rencontre une montagne 125 127 DO i = 1, ilon -
LMDZ6/branches/Amaury_dev/libf/dyn3d/tetaleveli1j1.F90
r5158 r5159 6 6 7 7 ! FH 2008/05/09 On elimine toutes les clefs physiques dans la dynamique 8 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 9 USE lmdz_paramet 8 10 IMPLICIT NONE 9 11 10 INCLUDE "dimensions.h" 12 11 13 12 14 !================================================================ 13 ! 15 14 16 ! Interpoler des champs 3-D u, v et g du modele a un niveau de 15 17 ! pression donnee (pres) 16 ! 18 17 19 ! INPUT: ilon ----- nombre de points 18 20 ! ilev ----- nombre de couches … … 22 24 ! Qgcm ----- champ GCM 23 25 ! Qpres ---- champ interpolle au niveau pres 24 ! 26 25 27 !================================================================ 26 ! 28 27 29 ! arguments : 28 30 ! ----------- … … 43 45 ! REAL ptop, pbot, aist(klon), aisb(klon) 44 46 ! 45 INCLUDE "paramet.h" 46 ! 47 48 47 49 INTEGER :: lt(ip1jmp1), lb(ip1jmp1) 48 50 REAL :: ptop, pbot, aist(ip1jmp1), aisb(ip1jmp1) … … 51 53 52 54 INTEGER :: i, k 53 ! 55 54 56 ! PRINT*,'tetalevel pres=',pres 55 57 !===================================================================== … … 60 62 61 63 ! Chercher les 2 couches les plus proches du niveau a obtenir 62 ! 64 63 65 ! Eventuellement, faire l'extrapolation a partir des deux couches 64 66 ! les plus basses ou les deux couches les plus hautes: … … 87 89 END DO 88 90 END DO 89 ! 91 90 92 ! Interpolation lineaire: 91 ! 93 92 94 DO i = 1, ilon 93 95 ! interpolation en logarithme de pression: 94 ! 96 95 97 ! ... Modif . P. Le Van ( 20/01/98) .... 96 98 ! Modif Frédéric Hourdin (3/01/02) … … 98 100 IF(pgcm(i, lb(i))==0.OR. & 99 101 pgcm(i, lt(i))==0.) THEN 100 ! 102 101 103 PRINT*, 'i,lb,lt,2pgcm,pres', i, lb(i), & 102 104 lt(i), pgcm(i, lb(i)), pgcm(i, lt(i)), pres 103 ! 105 104 106 ENDIF 105 ! 107 106 108 aist(i) = LOG(pgcm(i, lb(i)) / pres) & 107 109 / LOG(pgcm(i, lb(i)) / pgcm(i, lt(i))) … … 121 123 !IM $ Qgcm(i,lt(i)),aist(i),Qpres(i) 122 124 enddo 123 ! 125 124 126 ! Je mets les vents a zero quand je rencontre une montagne 125 127 DO i = 1, ilon -
LMDZ6/branches/Amaury_dev/libf/dyn3d/top_bound.F90
r5158 r5159 10 10 USE lmdz_comgeom2 11 11 12 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 13 USE lmdz_paramet 12 14 IMPLICIT NONE 13 15 ! 14 INCLUDE "dimensions.h" 15 INCLUDE "paramet.h" 16 17 16 18 17 19 … … 21 23 22 24 !======================================================================= 23 ! 25 24 26 ! Auteur: F. LOTT 25 27 ! ------- 26 ! 28 27 29 ! Objet: 28 30 ! ------ 29 ! 31 30 32 ! Dissipation linéaire (ex top_bound de la physique) 31 ! 33 32 34 !======================================================================= 33 35 -
LMDZ6/branches/Amaury_dev/libf/dyn3d/vlsplt.F90
r5158 r5159 1 ! 1 2 2 ! $Id$ 3 3 ! … … 6 6 USE infotrac, ONLY: nqtot, tracers 7 7 USE lmdz_ssum_scopy, ONLY: scopy 8 ! 8 9 9 ! Auteurs: P.Le Van, F.Hourdin, F.Forget 10 ! 10 11 11 ! ******************************************************************** 12 12 ! Shema d'advection " pseudo amont " . 13 13 ! ******************************************************************** 14 14 ! q,pbaru,pbarv,w sont des arguments d'entree pour le s-pg .... 15 ! 15 16 16 ! pente_max facteur de limitation des pentes: 2 en general 17 17 ! 0 pour un schema amont 18 18 ! pbaru,pbarv,w flux de masse en u ,v ,w 19 19 ! pdt pas de temps 20 ! 20 21 21 ! -------------------------------------------------------------------- 22 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 23 USE lmdz_paramet 22 24 IMPLICIT NONE 23 25 ! 24 INCLUDE "dimensions.h" 25 INCLUDE "paramet.h" 26 27 ! 26 27 28 29 28 30 ! Arguments: 29 31 ! ---------- … … 33 35 REAL :: w(ip1jmp1, llm), pdt 34 36 INTEGER :: iq ! CRisi 35 ! 37 36 38 ! Local 37 39 ! --------- 38 ! 40 39 41 INTEGER :: ij, l 40 ! 42 41 43 REAL :: zm(ip1jmp1, llm, nqtot) 42 44 REAL :: mu(ip1jmp1, llm) … … 110 112 111 113 ! Auteurs: P.Le Van, F.Hourdin, F.Forget 112 ! 114 113 115 ! ******************************************************************** 114 116 ! Shema d'advection " pseudo amont " . 115 117 ! ******************************************************************** 116 118 ! nq,iq,q,pbaru,pbarv,w sont des arguments d'entree pour le s-pg .... 117 ! 118 ! 119 120 119 121 ! -------------------------------------------------------------------- 122 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 123 USE lmdz_paramet 120 124 IMPLICIT NONE 121 125 ! 122 INCLUDE "dimensions.h" 123 INCLUDE "paramet.h" 124 ! 125 ! 126 127 128 129 126 130 ! Arguments: 127 131 ! ---------- … … 130 134 REAL :: q(ip1jmp1, llm, nqtot) 131 135 INTEGER :: iq ! CRisi 132 ! 136 133 137 ! Local 134 138 ! --------- 135 ! 139 136 140 INTEGER :: ij, l, j, i, iju, ijq, indu(ip1jmp1), niju 137 141 INTEGER :: n0, iadvplus(ip1jmp1, llm), nl(llm) 138 ! 142 139 143 REAL :: new_m, zu_m, zdum(ip1jmp1, llm) 140 144 REAL :: dxq(ip1jmp1, llm), dxqu(ip1jmp1) … … 424 428 USE lmdz_comgeom 425 429 426 ! 430 427 431 ! Auteurs: P.Le Van, F.Hourdin, F.Forget 428 ! 432 429 433 ! ******************************************************************** 430 434 ! Shema d'advection " pseudo amont " . … … 432 436 ! q,masse_adv_v,w sont des arguments d'entree pour le s-pg .... 433 437 ! dq sont des arguments de sortie pour le s-pg .... 434 ! 435 ! 438 439 436 440 ! -------------------------------------------------------------------- 437 441 USE comconst_mod, ONLY: pi 442 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 443 USE lmdz_paramet 438 444 IMPLICIT NONE 439 445 ! 440 INCLUDE "dimensions.h" 441 INCLUDE "paramet.h" 442 ! 443 ! 446 447 448 449 444 450 ! Arguments: 445 451 ! ---------- … … 448 454 REAL :: q(ip1jmp1, llm, nqtot) 449 455 INTEGER :: iq ! CRisi 450 ! 456 451 457 ! Local 452 458 ! --------- 453 ! 459 454 460 INTEGER :: i, ij, l 455 ! 461 456 462 REAL :: airej2, airejjm, airescb(iim), airesch(iim) 457 463 REAL :: dyq(ip1jmp1, llm), dyqv(ip1jm) … … 493 499 ENDIF 494 500 495 ! 501 496 502 !PRINT*,'CALCUL EN LATITUDE' 497 503 498 504 DO l = 1, llm 499 ! 505 500 506 ! -------------------------------- 501 507 ! CALCUL EN LATITUDE … … 590 596 ! appn=min(pente_max/appn,1.) 591 597 ! apps=min(pente_max/apps,1.) 592 ! 593 ! 598 599 594 600 ! cas ou on a un extremum au pole 595 ! 601 596 602 ! IF(dyqv(ismin(iim,dyqv,1))*dyqv(ismax(iim,dyqv,1)).le.0.) 597 603 ! & appn=0. … … 599 605 ! & dyqv(ismin(iim,dyqv(ip1jm-iip1+1),1)+ip1jm-iip1+1).le.0.) 600 606 ! & apps=0. 601 ! 607 602 608 ! limitation des pentes aux poles 603 609 ! DO ij=1,iip1 … … 605 611 ! dyq(ip1jm+ij)=apps*dyq(ip1jm+ij) 606 612 ! ENDDO 607 ! 613 608 614 ! test 609 615 ! DO ij=1,iip1 … … 614 620 ! dyq(ij)=dyq(ij)*cos(rlatu((ij-1)/iip1+1)) 615 621 ! ENDDO 616 ! 622 617 623 ! changement 10 07 96 618 624 ! IF(dyqv(ismin(iim,dyqv,1))*dyqv(ismax(iim,dyqv,1)).le.0.) … … 626 632 ! ENDDO 627 633 ! ENDIF 628 ! 634 629 635 ! IF(dyqv(ismax(iim,dyqv(ip1jm-iip1+1),1)+ip1jm-iip1+1)* 630 636 ! & dyqv(ismin(iim,dyqv(ip1jm-iip1+1),1)+ip1jm-iip1+1).le.0.) … … 745 751 USE infotrac, ONLY: nqtot, tracers, & ! CRisi 746 752 min_qParent, min_qMass, min_ratio ! MVals et CRisi 747 ! 753 748 754 ! Auteurs: P.Le Van, F.Hourdin, F.Forget 749 ! 755 750 756 ! ******************************************************************** 751 757 ! Shema d'advection " pseudo amont " . … … 754 760 ! dq sont des arguments de sortie pour le s-pg .... 755 761 ! -------------------------------------------------------------------- 762 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 763 USE lmdz_paramet 756 764 IMPLICIT NONE 757 765 ! 758 INCLUDE "dimensions.h" 759 INCLUDE "paramet.h" 760 ! 761 ! 766 767 768 769 762 770 ! Arguments: 763 771 ! ---------- … … 766 774 REAL :: w(ip1jmp1, llm + 1) 767 775 INTEGER :: iq 768 ! 776 769 777 ! Local 770 778 ! --------- 771 ! 779 772 780 INTEGER :: ij, l 773 ! 781 774 782 REAL :: wq(ip1jmp1, llm + 1), newmasse 775 783 … … 886 894 887 895 SUBROUTINE minmaxq(zq, qmin, qmax, comment) 888 889 INCLUDE "dimensions.h" 890 INCLUDE "paramet.h" 896 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 897 USE lmdz_paramet 891 898 892 899 CHARACTER(LEN = 20) :: comment -
LMDZ6/branches/Amaury_dev/libf/dyn3d/vlspltqs.F90
r5158 r5159 1 ! 1 2 2 ! $Id$ 3 ! 3 4 4 SUBROUTINE vlspltqs(q, pente_max, masse, w, pbaru, pbarv, pdt, & 5 5 p, pk, teta, iq) 6 6 USE infotrac, ONLY: nqtot, tracers 7 ! 7 8 8 ! Auteurs: P.Le Van, F.Hourdin, F.Forget, F.Codron 9 ! 9 10 10 ! ******************************************************************** 11 11 ! Shema d'advection " pseudo amont " . … … 14 14 ! ******************************************************************** 15 15 ! q,pbaru,pbarv,w sont des arguments d'entree pour le s-pg .... 16 ! 16 17 17 ! pente_max facteur de limitation des pentes: 2 en general 18 18 !0 pour un schema amont 19 19 ! pbaru,pbarv,w flux de masse en u ,v ,w 20 20 ! pdt pas de temps 21 ! 21 22 22 ! teta temperature potentielle, p pression aux interfaces, 23 23 ! pk exner au milieu des couches necessaire pour calculer Qsat … … 27 27 USE logic_mod, ONLY: adv_qsat_liq 28 28 USE lmdz_ssum_scopy, ONLY: scopy 29 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 30 USE lmdz_paramet 29 31 IMPLICIT NONE 30 32 ! 31 INCLUDE "dimensions.h" 32 INCLUDE "paramet.h" 33 34 ! 33 34 35 36 35 37 ! Arguments: 36 38 ! ---------- … … 41 43 REAL :: p(ip1jmp1, llmp1), teta(ip1jmp1, llm), pk(ip1jmp1, llm) 42 44 INTEGER :: iq ! CRisi 43 ! 45 44 46 ! Local 45 47 ! --------- 46 ! 48 47 49 INTEGER :: i, ij, l, j, ii 48 50 INTEGER :: ifils, iq2 ! CRisi 49 ! 51 50 52 REAL :: qsat(ip1jmp1, llm) 51 53 REAL :: zm(ip1jmp1, llm, nqtot) … … 178 180 USE infotrac, ONLY: nqtot, tracers ! CRisi 179 181 180 ! 182 181 183 ! Auteurs: P.Le Van, F.Hourdin, F.Forget 182 ! 184 183 185 ! ******************************************************************** 184 186 ! Shema d'advection " pseudo amont " . 185 187 ! ******************************************************************** 186 ! 188 187 189 ! -------------------------------------------------------------------- 190 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 191 USE lmdz_paramet 188 192 IMPLICIT NONE 189 193 ! 190 INCLUDE "dimensions.h" 191 INCLUDE "paramet.h" 192 ! 193 ! 194 195 196 197 194 198 ! Arguments: 195 199 ! ---------- … … 199 203 REAL :: qsat(ip1jmp1, llm) 200 204 INTEGER :: iq ! CRisi 201 ! 205 202 206 ! Local 203 207 ! --------- 204 ! 208 205 209 INTEGER :: ij, l, j, i, iju, ijq, indu(ip1jmp1), niju 206 210 INTEGER :: n0, iadvplus(ip1jmp1, llm), nl(llm) 207 ! 211 208 212 REAL :: new_m, zu_m, zdum(ip1jmp1, llm) 209 213 REAL :: dxq(ip1jmp1, llm), dxqu(ip1jmp1) … … 508 512 SUBROUTINE vlyqs(q, pente_max, masse, masse_adv_v, qsat, iq) 509 513 USE infotrac, ONLY: nqtot, tracers ! CRisi 510 ! 514 511 515 ! Auteurs: P.Le Van, F.Hourdin, F.Forget 512 ! 516 513 517 ! ******************************************************************** 514 518 ! Shema d'advection " pseudo amont " . … … 516 520 ! q,masse_adv_v,w sont des arguments d'entree pour le s-pg .... 517 521 ! qsat est un argument de sortie pour le s-pg .... 518 ! 519 ! 522 523 520 524 ! -------------------------------------------------------------------- 521 525 … … 524 528 USE lmdz_comgeom 525 529 530 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 531 USE lmdz_paramet 526 532 IMPLICIT NONE 527 533 ! 528 INCLUDE "dimensions.h" 529 INCLUDE "paramet.h" 530 ! 534 535 536 531 537 ! Arguments: 532 538 ! ---------- … … 536 542 REAL :: qsat(ip1jmp1, llm) 537 543 INTEGER :: iq ! CRisi 538 ! 544 539 545 ! Local 540 546 ! --------- 541 ! 547 542 548 INTEGER :: i, ij, l 543 ! 549 544 550 REAL :: airej2, airejjm, airescb(iim), airesch(iim) 545 551 REAL :: dyq(ip1jmp1, llm), dyqv(ip1jm) … … 586 592 587 593 DO l = 1, llm 588 ! 594 589 595 ! -------------------------------- 590 596 ! CALCUL EN LATITUDE … … 673 679 ! appn=min(pente_max/appn,1.) 674 680 ! apps=min(pente_max/apps,1.) 675 ! 676 ! 681 682 677 683 ! cas ou on a un extremum au pole 678 ! 684 679 685 ! IF(dyqv(ismin(iim,dyqv,1))*dyqv(ismax(iim,dyqv,1)).le.0.) 680 686 ! & appn=0. … … 682 688 ! & dyqv(ismin(iim,dyqv(ip1jm-iip1+1),1)+ip1jm-iip1+1).le.0.) 683 689 ! & apps=0. 684 ! 690 685 691 ! limitation des pentes aux poles 686 692 ! DO ij=1,iip1 … … 688 694 ! dyq(ip1jm+ij)=apps*dyq(ip1jm+ij) 689 695 ! ENDDO 690 ! 696 691 697 ! test 692 698 ! DO ij=1,iip1 … … 697 703 ! dyq(ij)=dyq(ij)*cos(rlatu((ij-1)/iip1+1)) 698 704 ! ENDDO 699 ! 705 700 706 ! changement 10 07 96 701 707 ! IF(dyqv(ismin(iim,dyqv,1))*dyqv(ismax(iim,dyqv,1)).le.0.) … … 709 715 ! ENDDO 710 716 ! ENDIF 711 ! 717 712 718 ! IF(dyqv(ismax(iim,dyqv(ip1jm-iip1+1),1)+ip1jm-iip1+1)* 713 719 ! & dyqv(ismin(iim,dyqv(ip1jm-iip1+1),1)+ip1jm-iip1+1).le.0.) -
LMDZ6/branches/Amaury_dev/libf/dyn3d/wrgrads.f90
r5158 r5159 118 118 enddo 119 119 WRITE(unit(if), '(a7)') 'ENDVARS' 120 ! 120 121 121 1000 format(a5, 3x, i4, i3, 1x, a39) 122 122
Note: See TracChangeset
for help on using the changeset viewer.