Changeset 5186 for LMDZ6/branches/Amaury_dev/libf/dyn3d_common
- Timestamp:
- Sep 11, 2024, 6:03:07 PM (11 months ago)
- Location:
- LMDZ6/branches/Amaury_dev/libf/dyn3d_common
- Files:
-
- 1 edited
- 3 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/dyn3d_common/grilles_gcm_netcdf_sub.F90
r5159 r5186 17 17 USE lmdz_comgeom 18 18 19 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm19 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 20 20 USE lmdz_paramet 21 USE lmdz_conf_gcm, ONLY: conf_gcm 22 21 23 IMPLICIT NONE 22 23 24 24 25 25 -
LMDZ6/branches/Amaury_dev/libf/dyn3d_common/lmdz_covnat.f90
r5185 r5186 1 ! $Header$ 1 MODULE lmdz_covnat 2 IMPLICIT NONE; PRIVATE 3 PUBLIC covnat 2 4 3 SUBROUTINE covnat(klevel, ucov, vcov, unat, vnat) 4 USE lmdz_comgeom 5 CONTAINS 5 6 6 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 7 USE lmdz_paramet 8 IMPLICIT NONE 7 SUBROUTINE covnat(klevel, ucov, vcov, unat, vnat) 8 USE lmdz_comgeom 9 9 10 !======================================================================= 10 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 11 USE lmdz_paramet 12 IMPLICIT NONE 11 13 12 ! Auteur: F Hourdin Phu LeVan 13 ! ------- 14 !======================================================================= 14 15 15 ! Objet:16 !------16 ! Auteur: F Hourdin Phu LeVan 17 ! ------- 17 18 18 ! ********************************************************************* 19 ! calcul des compos. naturelles a partir des comp.covariantes 20 ! ******************************************************************** 19 ! Objet: 20 ! ------ 21 21 22 !======================================================================= 22 ! ********************************************************************* 23 ! calcul des compos. naturelles a partir des comp.covariantes 24 ! ******************************************************************** 25 26 !======================================================================= 27 28 INTEGER :: klevel 29 REAL :: ucov(ip1jmp1, klevel), vcov(ip1jm, klevel) 30 REAL :: unat(ip1jmp1, klevel), vnat(ip1jm, klevel) 31 INTEGER :: l, ij 32 33 DO l = 1, klevel 34 DO ij = 1, iip1 35 unat (ij, l) = 0. 36 END DO 37 38 DO ij = iip2, ip1jm 39 unat(ij, l) = ucov(ij, l) / cu(ij) 40 ENDDO 41 DO ij = ip1jm + 1, ip1jmp1 42 unat (ij, l) = 0. 43 END DO 44 45 DO ij = 1, ip1jm 46 vnat(ij, l) = vcov(ij, l) / cv(ij) 47 ENDDO 48 49 ENDDO 50 51 END SUBROUTINE covnat 23 52 24 53 25 26 27 INTEGER :: klevel 28 REAL :: ucov(ip1jmp1, klevel), vcov(ip1jm, klevel) 29 REAL :: unat(ip1jmp1, klevel), vnat(ip1jm, klevel) 30 INTEGER :: l, ij 31 32 DO l = 1, klevel 33 DO ij = 1, iip1 34 unat (ij, l) = 0. 35 END DO 36 37 DO ij = iip2, ip1jm 38 unat(ij, l) = ucov(ij, l) / cu(ij) 39 ENDDO 40 DO ij = ip1jm + 1, ip1jmp1 41 unat (ij, l) = 0. 42 END DO 43 44 DO ij = 1, ip1jm 45 vnat(ij, l) = vcov(ij, l) / cv(ij) 46 ENDDO 47 48 ENDDO 49 50 END SUBROUTINE covnat 54 END MODULE lmdz_covnat -
LMDZ6/branches/Amaury_dev/libf/dyn3d_common/lmdz_writedynav.f90
r5185 r5186 1 ! $Id$ 1 MODULE lmdz_writedynav 2 IMPLICIT NONE; PRIVATE 3 PUBLIC writedynav 2 4 3 SUBROUTINE writedynav(time, vcov, ucov, teta, ppk, phi, q, masse, ps, phis) 5 CONTAINS 4 6 5 USE ioipsl 6 USE lmdz_infotrac, ONLY: nqtot 7 USE com_io_dyn_mod, ONLY: histaveid, histvaveid, histuaveid 8 USE comconst_mod, ONLY: cpp 9 USE temps_mod, ONLY: itau_dyn 10 USE lmdz_description, ONLY: descript 11 USE lmdz_iniprint, ONLY: lunout, prt_level 12 USE lmdz_comgeom 7 SUBROUTINE writedynav(time, vcov, ucov, teta, ppk, phi, q, masse, ps, phis) 13 8 14 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 15 USE lmdz_paramet 16 IMPLICIT NONE 9 USE ioipsl 10 USE lmdz_infotrac, ONLY: nqtot 11 USE com_io_dyn_mod, ONLY: histaveid, histvaveid, histuaveid 12 USE comconst_mod, ONLY: cpp 13 USE temps_mod, ONLY: itau_dyn 14 USE lmdz_description, ONLY: descript 15 USE lmdz_iniprint, ONLY: lunout, prt_level 16 USE lmdz_comgeom 17 17 18 ! Ecriture du fichier histoire au format IOIPSL 18 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 19 USE lmdz_paramet 20 USE lmdz_covnat, ONLY: covnat 19 21 20 ! Appels succesifs des routines: histwrite22 IMPLICIT NONE 21 23 22 ! Entree: 23 ! time: temps de l'ecriture 24 ! vcov: vents v covariants 25 ! ucov: vents u covariants 26 ! teta: temperature potentielle 27 ! phi : geopotentiel instantane 28 ! q : traceurs 29 ! masse: masse 30 ! ps :pression au sol 31 ! phis : geopotentiel au sol 24 ! Ecriture du fichier histoire au format IOIPSL 32 25 33 ! L. Fairhead, LMD, 03/9926 ! Appels succesifs des routines: histwrite 34 27 35 ! Arguments 28 ! Entree: 29 ! time: temps de l'ecriture 30 ! vcov: vents v covariants 31 ! ucov: vents u covariants 32 ! teta: temperature potentielle 33 ! phi : geopotentiel instantane 34 ! q : traceurs 35 ! masse: masse 36 ! ps :pression au sol 37 ! phis : geopotentiel au sol 36 38 37 REAL vcov(ip1jm, llm), ucov(ip1jmp1, llm) 38 REAL teta(ip1jmp1 * llm), phi(ip1jmp1, llm), ppk(ip1jmp1 * llm) 39 REAL ps(ip1jmp1), masse(ip1jmp1, llm) 40 REAL phis(ip1jmp1) 41 REAL q(ip1jmp1, llm, nqtot) 42 INTEGER time 39 ! L. Fairhead, LMD, 03/99 43 40 44 ! This routine needs IOIPSL to work 45 ! Variables locales 41 ! Arguments 46 42 47 INTEGER ndex2d(ip1jmp1), ndexu(ip1jmp1 * llm), ndexv(ip1jm *llm)48 INTEGER iq, ii, ll49 REAL tm(ip1jmp1 *llm)50 REAL vnat(ip1jm, llm), unat(ip1jmp1, llm)51 LOGICAL ok_sync52 INTEGER itau_w43 REAL vcov(ip1jm, llm), ucov(ip1jmp1, llm) 44 REAL teta(ip1jmp1 * llm), phi(ip1jmp1, llm), ppk(ip1jmp1 * llm) 45 REAL ps(ip1jmp1), masse(ip1jmp1, llm) 46 REAL phis(ip1jmp1) 47 REAL q(ip1jmp1, llm, nqtot) 48 INTEGER time 53 49 54 !----------------------------------------------------------------- 50 ! This routine needs IOIPSL to work 51 ! Variables locales 55 52 56 ! Initialisations 53 INTEGER ndex2d(ip1jmp1), ndexu(ip1jmp1 * llm), ndexv(ip1jm * llm) 54 INTEGER iq, ii, ll 55 REAL tm(ip1jmp1 * llm) 56 REAL vnat(ip1jm, llm), unat(ip1jmp1, llm) 57 LOGICAL ok_sync 58 INTEGER itau_w 57 59 58 ndexu = 0 59 ndexv = 0 60 ndex2d = 0 61 ok_sync = .TRUE. 62 tm = 999.999 63 vnat = 999.999 64 unat = 999.999 65 itau_w = itau_dyn + time 60 !----------------------------------------------------------------- 66 61 67 ! Passage aux composantes naturelles du vent 68 CALL covnat(llm, ucov, vcov, unat, vnat) 62 ! Initialisations 69 63 70 ! Appels a histwrite pour l'ecriture des variables a sauvegarder 64 ndexu = 0 65 ndexv = 0 66 ndex2d = 0 67 ok_sync = .TRUE. 68 tm = 999.999 69 vnat = 999.999 70 unat = 999.999 71 itau_w = itau_dyn + time 71 72 72 ! Vents U 73 ! Passage aux composantes naturelles du vent 74 CALL covnat(llm, ucov, vcov, unat, vnat) 73 75 74 CALL histwrite(histuaveid, 'u', itau_w, unat, & 75 iip1 * jjp1 * llm, ndexu) 76 ! Appels a histwrite pour l'ecriture des variables a sauvegarder 76 77 77 ! Vents V78 ! Vents U 78 79 79 CALL histwrite(histvaveid, 'v', itau_w, vnat, &80 iip1 * jjm * llm, ndexv)80 CALL histwrite(histuaveid, 'u', itau_w, unat, & 81 iip1 * jjp1 * llm, ndexu) 81 82 82 ! Temperature potentielle moyennee83 ! Vents V 83 84 84 CALL histwrite(histaveid, 'theta', itau_w, teta, &85 iip1 * jjp1 * llm, ndexu)85 CALL histwrite(histvaveid, 'v', itau_w, vnat, & 86 iip1 * jjm * llm, ndexv) 86 87 87 ! Temperature moyennee88 ! Temperature potentielle moyennee 88 89 89 DO ii = 1, ijp1llm 90 tm(ii) = teta(ii) * ppk(ii) / cpp 91 enddo 92 CALL histwrite(histaveid, 'temp', itau_w, tm, & 93 iip1 * jjp1 * llm, ndexu) 90 CALL histwrite(histaveid, 'theta', itau_w, teta, & 91 iip1 * jjp1 * llm, ndexu) 94 92 95 ! Geopotentiel93 ! Temperature moyennee 96 94 97 CALL histwrite(histaveid, 'phi', itau_w, phi, & 98 iip1 * jjp1 * llm, ndexu) 95 DO ii = 1, ijp1llm 96 tm(ii) = teta(ii) * ppk(ii) / cpp 97 enddo 98 CALL histwrite(histaveid, 'temp', itau_w, tm, & 99 iip1 * jjp1 * llm, ndexu) 99 100 100 ! Traceurs101 ! Geopotentiel 101 102 102 ! DO iq=1, nqtot 103 ! CALL histwrite(histaveid, tracers(iq)%longName, itau_w, & 104 ! q(:, :, iq), iip1*jjp1*llm, ndexu) 105 ! enddo 103 CALL histwrite(histaveid, 'phi', itau_w, phi, & 104 iip1 * jjp1 * llm, ndexu) 106 105 107 ! Masse106 ! Traceurs 108 107 109 CALL histwrite(histaveid, 'masse', itau_w, masse, & 110 iip1 * jjp1 * llm, ndexu) 108 ! DO iq=1, nqtot 109 ! CALL histwrite(histaveid, tracers(iq)%longName, itau_w, & 110 ! q(:, :, iq), iip1*jjp1*llm, ndexu) 111 ! enddo 111 112 112 ! Pression au sol113 ! Masse 113 114 114 CALL histwrite(histaveid, 'ps', itau_w, ps, iip1 * jjp1, ndex2d) 115 CALL histwrite(histaveid, 'masse', itau_w, masse, & 116 iip1 * jjp1 * llm, ndexu) 115 117 116 ! Geopotentielau sol118 ! Pression au sol 117 119 118 ! CALL histwrite(histaveid, 'phis', itau_w, phis, iip1*jjp1, ndex2d)120 CALL histwrite(histaveid, 'ps', itau_w, ps, iip1 * jjp1, ndex2d) 119 121 120 IF (ok_sync) THEN 121 CALL histsync(histaveid) 122 CALL histsync(histvaveid) 123 CALL histsync(histuaveid) 124 ENDIF 122 ! Geopotentiel au sol 125 123 126 END SUBROUTINE writedynav 124 ! CALL histwrite(histaveid, 'phis', itau_w, phis, iip1*jjp1, ndex2d) 125 126 IF (ok_sync) THEN 127 CALL histsync(histaveid) 128 CALL histsync(histvaveid) 129 CALL histsync(histuaveid) 130 ENDIF 131 132 END SUBROUTINE writedynav 133 134 135 END MODULE lmdz_writedynav -
LMDZ6/branches/Amaury_dev/libf/dyn3d_common/lmdz_writehist.f90
r5185 r5186 1 ! $Id$ 1 MODULE lmdz_writehist 2 IMPLICIT NONE; PRIVATE 3 PUBLIC writehist 2 4 3 SUBROUTINE writehist(time, vcov, ucov, teta, phi, q, masse, ps, phis) 5 CONTAINS 4 6 5 USE ioipsl 6 USE lmdz_infotrac, ONLY: nqtot 7 USE com_io_dyn_mod, ONLY: histid, histvid, histuid 8 USE temps_mod, ONLY: itau_dyn 9 USE lmdz_description, ONLY: descript 10 USE lmdz_iniprint, ONLY: lunout, prt_level 11 USE lmdz_comgeom 7 SUBROUTINE writehist(time, vcov, ucov, teta, phi, q, masse, ps, phis) 12 8 13 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 14 USE lmdz_paramet 15 IMPLICIT NONE 9 USE ioipsl 10 USE lmdz_infotrac, ONLY: nqtot 11 USE com_io_dyn_mod, ONLY: histid, histvid, histuid 12 USE temps_mod, ONLY: itau_dyn 13 USE lmdz_description, ONLY: descript 14 USE lmdz_iniprint, ONLY: lunout, prt_level 15 USE lmdz_comgeom 16 17 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 18 USE lmdz_paramet 19 USE lmdz_covnat, ONLY: covnat 20 21 IMPLICIT NONE 16 22 17 23 18 ! Ecriture du fichier histoire au format IOIPSL24 ! Ecriture du fichier histoire au format IOIPSL 19 25 20 ! Appels succesifs des routines: histwrite26 ! Appels succesifs des routines: histwrite 21 27 22 ! Entree:23 ! time: temps de l'ecriture24 ! vcov: vents v covariants25 ! ucov: vents u covariants26 ! teta: temperature potentielle27 ! phi : geopotentiel instantane28 ! q : traceurs29 ! masse: masse30 ! ps :pression au sol31 ! phis : geopotentiel au sol28 ! Entree: 29 ! time: temps de l'ecriture 30 ! vcov: vents v covariants 31 ! ucov: vents u covariants 32 ! teta: temperature potentielle 33 ! phi : geopotentiel instantane 34 ! q : traceurs 35 ! masse: masse 36 ! ps :pression au sol 37 ! phis : geopotentiel au sol 32 38 33 39 34 ! L. Fairhead, LMD, 03/9940 ! L. Fairhead, LMD, 03/99 35 41 36 ! =====================================================================42 ! ===================================================================== 37 43 38 ! Declarations44 ! Declarations 39 45 40 46 41 47 42 48 43 ! Arguments44 !49 ! Arguments 50 ! 45 51 46 REAL :: vcov(ip1jm, llm), ucov(ip1jmp1, llm)47 REAL :: teta(ip1jmp1, llm), phi(ip1jmp1, llm)48 REAL :: ps(ip1jmp1), masse(ip1jmp1, llm)49 REAL :: phis(ip1jmp1)50 REAL :: q(ip1jmp1, llm, nqtot)51 INTEGER :: time52 REAL :: vcov(ip1jm, llm), ucov(ip1jmp1, llm) 53 REAL :: teta(ip1jmp1, llm), phi(ip1jmp1, llm) 54 REAL :: ps(ip1jmp1), masse(ip1jmp1, llm) 55 REAL :: phis(ip1jmp1) 56 REAL :: q(ip1jmp1, llm, nqtot) 57 INTEGER :: time 52 58 53 59 54 ! This routine needs IOIPSL to work55 ! Variables locales60 ! This routine needs IOIPSL to work 61 ! Variables locales 56 62 57 INTEGER :: iq, ii, ll58 INTEGER :: ndexu(ip1jmp1 * llm), ndexv(ip1jm * llm), ndex2d(ip1jmp1)59 LOGICAL :: ok_sync60 INTEGER :: itau_w61 REAL :: vnat(ip1jm, llm), unat(ip1jmp1, llm)63 INTEGER :: iq, ii, ll 64 INTEGER :: ndexu(ip1jmp1 * llm), ndexv(ip1jm * llm), ndex2d(ip1jmp1) 65 LOGICAL :: ok_sync 66 INTEGER :: itau_w 67 REAL :: vnat(ip1jm, llm), unat(ip1jmp1, llm) 62 68 63 69 64 ! Initialisations70 ! Initialisations 65 71 66 ndexu = 067 ndexv = 068 ndex2d = 069 ok_sync = .TRUE.70 itau_w = itau_dyn + time71 ! Passage aux composantes naturelles du vent72 CALL covnat(llm, ucov, vcov, unat, vnat)72 ndexu = 0 73 ndexv = 0 74 ndex2d = 0 75 ok_sync = .TRUE. 76 itau_w = itau_dyn + time 77 ! Passage aux composantes naturelles du vent 78 CALL covnat(llm, ucov, vcov, unat, vnat) 73 79 74 ! Appels a histwrite pour l'ecriture des variables a sauvegarder80 ! Appels a histwrite pour l'ecriture des variables a sauvegarder 75 81 76 ! Vents U82 ! Vents U 77 83 78 CALL histwrite(histuid, 'u', itau_w, unat, &79 iip1 * jjp1 * llm, ndexu)84 CALL histwrite(histuid, 'u', itau_w, unat, & 85 iip1 * jjp1 * llm, ndexu) 80 86 81 ! Vents V87 ! Vents V 82 88 83 CALL histwrite(histvid, 'v', itau_w, vnat, &84 iip1 * jjm * llm, ndexv)89 CALL histwrite(histvid, 'v', itau_w, vnat, & 90 iip1 * jjm * llm, ndexv) 85 91 86 92 87 ! Temperature potentielle93 ! Temperature potentielle 88 94 89 CALL histwrite(histid, 'teta', itau_w, teta, &90 iip1 * jjp1 * llm, ndexu)95 CALL histwrite(histid, 'teta', itau_w, teta, & 96 iip1 * jjp1 * llm, ndexu) 91 97 92 ! Geopotentiel98 ! Geopotentiel 93 99 94 CALL histwrite(histid, 'phi', itau_w, phi, &95 iip1 * jjp1 * llm, ndexu)100 CALL histwrite(histid, 'phi', itau_w, phi, & 101 iip1 * jjp1 * llm, ndexu) 96 102 97 ! Traceurs103 ! Traceurs 98 104 99 ! DO iq=1,nqtot100 ! CALL histwrite(histid, tracers(iq)%longName, itau_w,101 ! . q(:,:,iq), iip1*jjp1*llm, ndexu)102 ! enddo103 !C104 ! Masse105 ! DO iq=1,nqtot 106 ! CALL histwrite(histid, tracers(iq)%longName, itau_w, 107 ! . q(:,:,iq), iip1*jjp1*llm, ndexu) 108 ! enddo 109 !C 110 ! Masse 105 111 106 CALL histwrite(histid, 'masse', itau_w, masse, iip1 * jjp1 * llm, ndexu)112 CALL histwrite(histid, 'masse', itau_w, masse, iip1 * jjp1 * llm, ndexu) 107 113 108 ! Pression au sol114 ! Pression au sol 109 115 110 CALL histwrite(histid, 'ps', itau_w, ps, iip1 * jjp1, ndex2d)116 CALL histwrite(histid, 'ps', itau_w, ps, iip1 * jjp1, ndex2d) 111 117 112 ! Geopotentiel au sol118 ! Geopotentiel au sol 113 119 114 ! CALL histwrite(histid, 'phis', itau_w, phis, iip1*jjp1, ndex2d)120 ! CALL histwrite(histid, 'phis', itau_w, phis, iip1*jjp1, ndex2d) 115 121 116 ! Fin122 ! Fin 117 123 118 IF (ok_sync) THEN 119 CALL histsync(histid) 120 CALL histsync(histvid) 121 CALL histsync(histuid) 122 ENDIF 123 RETURN 124 END SUBROUTINE writehist 124 IF (ok_sync) THEN 125 CALL histsync(histid) 126 CALL histsync(histvid) 127 CALL histsync(histuid) 128 ENDIF 129 RETURN 130 END SUBROUTINE writehist 131 132 133 END MODULE lmdz_writehist
Note: See TracChangeset
for help on using the changeset viewer.