Changeset 5113 for LMDZ6/branches/Amaury_dev/libf/dyn3d
- Timestamp:
- Jul 24, 2024, 1:17:08 PM (4 months ago)
- Location:
- LMDZ6/branches/Amaury_dev/libf/dyn3d
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/dyn3d/addfi.F90
r5105 r5113 120 120 121 121 if (planet_type=="earth") then 122 ! !earth case, special treatment for first 2 tracers (water)122 ! earth case, special treatment for first 2 tracers (water) 123 123 DO iq = 1, 2 124 124 DO k = 1, llm … … 139 139 ENDDO 140 140 else 141 ! !general case, treat all tracers equally)141 ! general case, treat all tracers equally) 142 142 DO iq = 1, nqtot 143 143 DO k = 1, llm -
LMDZ6/branches/Amaury_dev/libf/dyn3d/caladvtrac.F90
r5106 r5113 84 84 ENDDO 85 85 86 ! !write(*,*) 'caladvtrac 87'86 !write(*,*) 'caladvtrac 87' 87 87 CALL qminimum(q, nqtot, finmasse) 88 ! !write(*,*) 'caladvtrac 89'88 !write(*,*) 'caladvtrac 89' 89 89 90 90 CALL SCOPY (ip1jmp1 * llm, masse, 1, finmasse, 1) -
LMDZ6/branches/Amaury_dev/libf/dyn3d/caldyn.F90
r5103 r5113 69 69 !-------------------------------- 70 70 71 ! !compute contravariant winds ucont() and vcont71 ! compute contravariant winds ucont() and vcont 72 72 CALL covcont (llm, ucov, vcov, ucont, vcont) 73 ! !compute pressure p()73 ! compute pressure p() 74 74 CALL pression (ip1jmp1, ap, bp, ps, p) 75 ! !compute psexbarxy() XY-area weighted-averaged surface pressure (what for?)75 ! compute psexbarxy() XY-area weighted-averaged surface pressure (what for?) 76 76 CALL psextbar (ps, psexbarxy) 77 ! !compute mass in each atmospheric mesh: masse()77 ! compute mass in each atmospheric mesh: masse() 78 78 CALL massdair (p, masse) 79 ! !compute X and Y-averages of mass, massebx() and masseby()79 ! compute X and Y-averages of mass, massebx() and masseby() 80 80 CALL massbar (masse, massebx, masseby) 81 ! !compute XY-average of mass, massebxy()81 ! compute XY-average of mass, massebxy() 82 82 CALL massbarxy(masse, massebxy) 83 ! !compute mass fluxes pbaru() and pbarv()83 ! compute mass fluxes pbaru() and pbarv() 84 84 CALL flumass (massebx, masseby, vcont, ucont, pbaru, pbarv) 85 ! !compute dteta() , horizontal converging flux of theta85 ! compute dteta() , horizontal converging flux of theta 86 86 CALL dteta1 (teta, pbaru, pbarv, dteta) 87 ! !compute convm(), horizontal converging flux of mass87 ! compute convm(), horizontal converging flux of mass 88 88 CALL convmas (pbaru, pbarv, convm) 89 89 90 ! !compute pressure variation due to mass convergence90 ! compute pressure variation due to mass convergence 91 91 DO ij = 1, ip1jmp1 92 92 dp(ij) = convm(ij, 1) / airesurg(ij) 93 93 ENDDO 94 94 95 ! !compute vertical velocity w()95 ! compute vertical velocity w() 96 96 CALL vitvert (convm, w) 97 ! !compute potential vorticity vorpot()97 ! compute potential vorticity vorpot() 98 98 CALL tourpot (vcov, ucov, massebxy, vorpot) 99 ! !compute rotation induced du() and dv()99 ! compute rotation induced du() and dv() 100 100 CALL dudv1 (vorpot, pbaru, pbarv, du, dv) 101 ! !compute kinetic energy ecin()101 ! compute kinetic energy ecin() 102 102 CALL enercin (vcov, ucov, vcont, ucont, ecin) 103 ! !compute Bernouilli function bern()103 ! compute Bernouilli function bern() 104 104 CALL bernoui (ip1jmp1, llm, phi, ecin, bern) 105 ! !compute and add du() and dv() contributions from Bernouilli and pressure105 ! compute and add du() and dv() contributions from Bernouilli and pressure 106 106 CALL dudv2 (teta, pkf, bern, du, dv) 107 107 … … 112 112 ENDDO 113 113 114 ! !compute vertical advection contributions to du(), dv() and dteta()114 ! compute vertical advection contributions to du(), dv() and dteta() 115 115 CALL advect(ang, vcov, teta, w, massebx, masseby, du, dv, dteta) 116 116 -
LMDZ6/branches/Amaury_dev/libf/dyn3d/conf_gcm.f90
r5103 r5113 6 6 use IOIPSL 7 7 USE infotrac, ONLY: type_trac 8 use assert_m, only: assert8 use lmdz_assert, only: assert 9 9 USE comconst_mod, ONLY: dissip_deltaz, dissip_factz, dissip_zref, & 10 10 iflag_top_bound, mode_top_bound, tau_top_bound, & -
LMDZ6/branches/Amaury_dev/libf/dyn3d/dissip.F90
r5105 r5113 39 39 REAL, INTENT(IN) :: teta(ip1jmp1, llm) ! potential temperature 40 40 REAL, INTENT(IN) :: p(ip1jmp1, llmp1) ! pressure 41 ! !tendencies (.../s) on covariant winds and potential temperature41 ! tendencies (.../s) on covariant winds and potential temperature 42 42 REAL, INTENT(OUT) :: dv(ip1jm, llm) 43 43 REAL, INTENT(OUT) :: du(ip1jmp1, llm) -
LMDZ6/branches/Amaury_dev/libf/dyn3d/dynetat0.F90
r5101 r5113 12 12 USE readTracFiles_mod, ONLY: new2oldH2O, newHNO3, oldHNO3, getKey 13 13 USE control_mod, ONLY: planet_type 14 USE assert_eq_m, ONLY: assert_eq14 USE lmdz_assert_eq, ONLY: assert_eq 15 15 USE comvert_mod, ONLY: pa,preff 16 16 USE comconst_mod, ONLY: cpp, daysec, dtvr, g, im, jm, kappa, lllm, omeg, rad -
LMDZ6/branches/Amaury_dev/libf/dyn3d/friction.F90
r5105 r5113 45 45 46 46 IF (firstcall) THEN 47 ! !set friction type47 ! set friction type 48 48 CALL getin("friction_type", friction_type) 49 49 if ((friction_type<0).or.(friction_type>1)) then -
LMDZ6/branches/Amaury_dev/libf/dyn3d/getparam.F90
r5103 r5113 8 8 MODULE PROCEDURE getparamr,getparami,getparaml 9 9 END INTERFACE 10 privategetparamr,getparami,getparaml10 PRIVATE getparamr,getparami,getparaml 11 11 12 12 INTEGER, PARAMETER :: out_eff=99 -
LMDZ6/branches/Amaury_dev/libf/dyn3d/groupe.F90
r5105 r5113 5 5 use comconst_mod, only: ngroup 6 6 7 implicit none7 IMPLICIT NONE 8 8 9 9 ! sous-programme servant a fitlrer les champs de flux de masse aux -
LMDZ6/branches/Amaury_dev/libf/dyn3d/guide_mod.F90
r5105 r5113 924 924 use serre_mod, only: clon, clat, grossismx, grossismy 925 925 926 implicit none926 IMPLICIT NONE 927 927 928 928 include "dimensions.h" -
LMDZ6/branches/Amaury_dev/libf/dyn3d/iniinterp_horiz.F90
r5106 r5113 6 6 ktotal, iik, jjk, jk, ik, intersec, airen) 7 7 8 implicit none8 IMPLICIT NONE 9 9 10 10 -
LMDZ6/branches/Amaury_dev/libf/dyn3d/integrd.F90
r5105 r5113 46 46 real, intent(inout) :: masse(ip1jmp1, llm) ! atmospheric mass 47 47 real, intent(in) :: phis(ip1jmp1) ! ground geopotential !!! unused 48 ! !values at previous time step48 ! values at previous time step 49 49 real, intent(inout) :: vcovm1(ip1jm, llm) 50 50 real, intent(inout) :: ucovm1(ip1jmp1, llm) … … 52 52 real, intent(inout) :: psm1(ip1jmp1) 53 53 real, intent(inout) :: massem1(ip1jmp1, llm) 54 ! !the tendencies to add54 ! the tendencies to add 55 55 real, intent(in) :: dv(ip1jm, llm) 56 56 real, intent(in) :: du(ip1jmp1, llm) … … 100 100 write(lunout, *) "integrd: negative surface pressure ", ps(ij) 101 101 write(lunout, *) " at node ij =", ij 102 ! !since ij=j+(i-1)*jjp1 , we have102 ! since ij=j+(i-1)*jjp1 , we have 103 103 j = modulo(ij, jjp1) 104 104 i = 1 + (ij - j) / jjp1 -
LMDZ6/branches/Amaury_dev/libf/dyn3d/leapfrog.F90
r5105 r5113 294 294 295 295 IF(purmats) THEN 296 ! !Purely Matsuno time stepping296 ! Purely Matsuno time stepping 297 297 IF(MOD(itau, iconser) ==0.AND. forward) conser = .TRUE. 298 298 IF(MOD(itau, dissip_period)==0.AND..NOT.forward) & … … 301 301 .and. physic) apphys = .TRUE. 302 302 ELSE 303 ! !Leapfrog/Matsuno time stepping303 ! Leapfrog/Matsuno time stepping 304 304 IF(MOD(itau, iconser) == 0) conser = .TRUE. 305 305 IF(MOD(itau + 1, dissip_period)==0 .AND. .NOT. forward) & … … 320 320 ! -------------------------------- 321 321 322 ! !compute geopotential phi()322 ! compute geopotential phi() 323 323 CALL geopot (ip1jmp1, teta, pk, pks, phis, phi) 324 324 … … 341 341 p, masse, dq, teta, & 342 342 flxw, pk) 343 ! !write(*,*) 'caladvtrac 346'343 !write(*,*) 'caladvtrac 346' 344 344 345 345 IF (offline) THEN … … 409 409 410 410 IF (planet_type =="generic") THEN 411 ! !AS: we make jD_cur to be pday411 ! AS: we make jD_cur to be pday 412 412 jD_cur = int(day_ini + itau / day_step) 413 413 ENDIF … … 450 450 ucov, vcov, teta, q, ps, & 451 451 dufi, dvfi, dtetafi, dqfi, dpfi) 452 ! !since addfi updates ps(), also update p(), masse() and pk()452 ! since addfi updates ps(), also update p(), masse() and pk() 453 453 CALL pression (ip1jmp1, ap, bp, ps, p) 454 454 CALL massdair(p, masse) … … 486 486 487 487 if (planet_type=="giant") then 488 ! !add an intrinsic heat flux at the base of the atmosphere488 ! add an intrinsic heat flux at the base of the atmosphere 489 489 teta(:, 1) = teta(:, 1) + dtvr * aire(:) * ihf / cpp / masse(:, 1) 490 490 endif … … 492 492 CALL friction(ucov, vcov, dtvr) 493 493 494 ! !Sponge layer (if any)494 ! Sponge layer (if any) 495 495 IF (ok_strato) THEN 496 496 ! dufi(:,:)=0. … … 646 646 ENDIF 647 647 648 ! !Ehouarn: re-compute geopotential for outputs648 ! Ehouarn: re-compute geopotential for outputs 649 649 CALL geopot(ip1jmp1, teta, pk, pks, phis, phi) 650 650 -
LMDZ6/branches/Amaury_dev/libf/dyn3d/qminimum.F90
r5105 r5113 41 41 SAVE imprim 42 42 DATA imprim /0/ 43 ! !INTEGER ijb,ije44 ! !INTEGER Index_pump(ij_end-ij_begin+1)45 ! !INTEGER nb_pump43 !INTEGER ijb,ije 44 !INTEGER Index_pump(ij_end-ij_begin+1) 45 !INTEGER nb_pump 46 46 INTEGER :: ixt 47 47 … … 113 113 ENDIF 114 114 115 ! !write(*,*) 'qminimum 128'115 !write(*,*) 'qminimum 128' 116 116 if (niso > 0) then 117 ! !CRisi: traiter de même les traceurs d'eau118 ! !Mais il faut les prendre à l'envers pour essayer de conserver la119 ! !masse.120 ! !1) pompage dans le sol121 ! !On suppose que ce pompage se fait sans isotopes -> on ne modifie122 ! !rien ici et on croise les doigts pour que ça ne soit pas trop123 ! !génant117 ! CRisi: traiter de même les traceurs d'eau 118 ! Mais il faut les prendre à l'envers pour essayer de conserver la 119 ! masse. 120 ! 1) pompage dans le sol 121 ! On suppose que ce pompage se fait sans isotopes -> on ne modifie 122 ! rien ici et on croise les doigts pour que ça ne soit pas trop 123 ! génant 124 124 DO i = 1, ip1jmp1 125 125 if (zx_pump(i)>0.0) then … … 128 128 enddo !DO i = 1,ip1jmp1 129 129 130 ! !2) transfert de vap vers les couches plus hautes131 ! !write(*,*) 'qminimum 139'130 ! 2) transfert de vap vers les couches plus hautes 131 !write(*,*) 'qminimum 139' 132 132 do k = 2, llm 133 133 DO i = 1, ip1jmp1 134 134 if (zx_defau_diag(i, k, 1)>0.0) then 135 ! !on ajoute la vapeur en k135 ! on ajoute la vapeur en k 136 136 do ixt = 1, ntiso 137 137 q(i, k, iqIsoPha(ixt, iq_vap)) = q(i, k, iqIsoPha(ixt, iq_vap)) & … … 139 139 * q(i, k - 1, iqIsoPha(ixt, iq_vap)) / q_follow(i, k - 1, 1) 140 140 141 ! !et on la retranche en k-1141 ! et on la retranche en k-1 142 142 q(i, k - 1, iqIsoPha(ixt, iq_vap)) = & 143 143 q(i, k - 1, iqIsoPha(ixt, iq_vap)) & … … 160 160 161 161 162 ! !3) transfert d'eau de la vapeur au liquide163 ! !write(*,*) 'qminimum 164'162 ! 3) transfert d'eau de la vapeur au liquide 163 !write(*,*) 'qminimum 164' 164 164 do k = 1, llm 165 165 DO i = 1, ip1jmp1 -
LMDZ6/branches/Amaury_dev/libf/dyn3d/top_bound.F90
r5103 r5113 114 114 CALL massbar(masse, massebx, masseby) 115 115 116 ! !compute zonal average of vcov and u116 ! compute zonal average of vcov and u 117 117 if (mode_top_bound>=2) then 118 118 do l = 1, llm … … 146 146 endif ! of if (mode_top_bound.ge.2) 147 147 148 ! !compute zonal average of potential temperature, if necessary148 ! compute zonal average of potential temperature, if necessary 149 149 if (mode_top_bound>=3) then 150 150 do l = 1, llm … … 162 162 163 163 if (mode_top_bound>=1) then 164 ! !Apply sponge quenching on vcov:164 ! Apply sponge quenching on vcov: 165 165 do l = 1, llm 166 166 do i = 1, iip1 … … 172 172 enddo 173 173 174 ! !Apply sponge quenching on ucov:174 ! Apply sponge quenching on ucov: 175 175 do l = 1, llm 176 176 do i = 1, iip1 … … 184 184 185 185 if (mode_top_bound>=3) then 186 ! !Apply sponge quenching on teta:186 ! Apply sponge quenching on teta: 187 187 do l = 1, llm 188 188 do i = 1, iip1 -
LMDZ6/branches/Amaury_dev/libf/dyn3d/vlsplt.F90
r5105 r5113 89 89 ENDDO 90 90 ENDDO 91 ! !CRisi: aussi pour les fils91 ! CRisi: aussi pour les fils 92 92 do ifils=1,tracers(iq)%nqDescen 93 93 iq2=tracers(iq)%iqDescen(ifils) … … 143 143 REAL :: u_mq(ip1jmp1,llm) 144 144 145 ! !CRisi145 ! CRisi 146 146 REAL :: masseq(ip1jmp1,llm,nqtot),Ratio(ip1jmp1,llm,nqtot) 147 147 INTEGER :: ifils,iq2 ! CRisi … … 361 361 ! CRisi: appel récursif de l'advection sur les fils. 362 362 ! Il faut faire ça avant d'avoir mis à jour q et masse 363 ! !write(*,*) 'vlsplt 326: iq,nqDesc(iq)=',iq,tracers(iq)%nqDescen363 !write(*,*) 'vlsplt 326: iq,nqDesc(iq)=',iq,tracers(iq)%nqDescen 364 364 365 365 do ifils=1,tracers(iq)%nqDescen … … 367 367 DO l=1,llm 368 368 DO ij=iip2,ip1jm 369 ! !On a besoin de q et masse seulement entre iip2 et ip1jm370 ! !masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)369 ! On a besoin de q et masse seulement entre iip2 et ip1jm 370 !masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq) 371 371 ! !Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 372 ! !Mvals: veiller a ce qu'on n'ait pas de denominateur nul372 !Mvals: veiller a ce qu'on n'ait pas de denominateur nul 373 373 masseq(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),min_qMass) 374 374 if (q(ij,l,iq)>min_qParent) then … … 391 391 DO l=1,llm 392 392 DO ij=iip2+1,ip1jm 393 ! !MVals: veiller a ce qu'on ait pas de denominateur nul393 !MVals: veiller a ce qu'on ait pas de denominateur nul 394 394 new_m=max(masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l),min_qMass) 395 395 q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+ & … … 404 404 ENDDO 405 405 406 ! !retablir les fils en rapport de melange par rapport a l'air:407 ! !On calcule q entre iip2+1,ip1jm -> on fait pareil pour ratio408 ! !puis on boucle en longitude406 ! retablir les fils en rapport de melange par rapport a l'air: 407 ! On calcule q entre iip2+1,ip1jm -> on fait pareil pour ratio 408 ! puis on boucle en longitude 409 409 do ifils=1,tracers(iq)%nqDescen 410 410 iq2=tracers(iq)%iqDescen(ifils) -
LMDZ6/branches/Amaury_dev/libf/dyn3d/vlspltqs.F90
r5106 r5113 159 159 ENDDO 160 160 ENDDO 161 ! !CRisi: aussi pour les fils161 ! CRisi: aussi pour les fils 162 162 do ifils = 1, tracers(iq)%nqDescen 163 163 iq2 = tracers(iq)%iqDescen(ifils) … … 171 171 ENDDO 172 172 enddo 173 ! !write(*,*) 'vlspltqs 183: fin de la routine'173 !write(*,*) 'vlspltqs 183: fin de la routine' 174 174 175 175 … … 212 212 REAL :: u_mq(ip1jmp1, llm) 213 213 214 ! !CRisi214 ! CRisi 215 215 REAL :: masseq(ip1jmp1, llm, nqtot), Ratio(ip1jmp1, llm, nqtot) 216 216 INTEGER :: ifils, iq2 ! CRisi … … 452 452 ! CRisi: appel récursif de l'advection sur les fils. 453 453 ! Il faut faire ça avant d'avoir mis à jour q et masse 454 ! !write(*,*) 'vlspltqs 326: iq,nqChildren(iq)=',iq,454 !write(*,*) 'vlspltqs 326: iq,nqChildren(iq)=',iq, 455 455 ! & tracers(iq)%nqChildren 456 456 … … 459 459 DO l = 1, llm 460 460 DO ij = iip2, ip1jm 461 ! !On a besoin de q et masse seulement entre iip2 et ip1jm461 ! On a besoin de q et masse seulement entre iip2 et ip1jm 462 462 masseq(ij, l, iq2) = masse(ij, l, iq) * q(ij, l, iq) 463 463 Ratio(ij, l, iq2) = q(ij, l, iq2) / q(ij, l, iq) … … 488 488 ENDDO 489 489 490 ! !retablir les fils en rapport de melange par rapport a l'air:491 ! !On calcule q entre iip2+1,ip1jm -> on fait pareil pour ratio492 ! !puis on boucle en longitude490 ! retablir les fils en rapport de melange par rapport a l'air: 491 ! On calcule q entre iip2+1,ip1jm -> on fait pareil pour ratio 492 ! puis on boucle en longitude 493 493 do ifils = 1, tracers(iq)%nqDescen 494 494 iq2 = tracers(iq)%iqDescen(ifils) … … 758 758 ! CRisi: appel récursif de l'advection sur les fils. 759 759 ! Il faut faire ça avant d'avoir mis à jour q et masse 760 ! !write(*,*) 'vlyqs 689: iq,nqChildren(iq)=',iq,760 !write(*,*) 'vlyqs 689: iq,nqChildren(iq)=',iq, 761 761 ! & tracers(iq)%nqChildren 762 762 -
LMDZ6/branches/Amaury_dev/libf/dyn3d/wrgrads.f90
r5105 r5113 2 2 3 3 subroutine wrgrads(if, nl, field, name, titlevar) 4 implicit none4 IMPLICIT NONE 5 5 6 6 ! Declarations
Note: See TracChangeset
for help on using the changeset viewer.